[
  {
    "path": ".circleci/config.yml",
    "content": "version: 2.1\n\n# this allows you to use CircleCI's dynamic configuration feature\nsetup: true\n\n# the path-filtering orb is required to continue a pipeline based on\n# the path of an updated fileset\norbs:\n  path-filtering: circleci/path-filtering@0.1.2\n\nworkflows:\n  # the always-run workflow is always triggered, regardless of the pipeline parameters.\n  always-run:\n    jobs:\n      # the path-filtering/filter job determines which pipeline\n      # parameters to update.\n      - path-filtering/filter:\n          name: check-updated-files\n          # 3-column, whitespace-delimited mapping. One mapping per\n          # line:\n          # <regex path-to-test> <parameter-to-set> <value-of-pipeline-parameter>\n          mapping: |\n            configs/.* lint_only true\n            docs/.* lint_only true\n            .dev_scripts/.* lint_only true\n            .github/.* lint_only true\n            demo/.* lint_only true\n            projects/.* lint_only true\n            mmagic/.* lint_only false\n            requirements/.* lint_only false\n            tests/.* lint_only false\n            .circleci/.* lint_only false\n            tools/.* lint_only true\n          base-revision: main\n          # this is the path of the configuration we should trigger once\n          # path filtering and pipeline parameter value updates are\n          # complete. In this case, we are using the parent dynamic\n          # configuration itself.\n          config-path: .circleci/test.yml\n"
  },
  {
    "path": ".circleci/docker/Dockerfile",
    "content": "ARG PYTORCH=\"1.8.1\"\nARG CUDA=\"10.2\"\nARG CUDNN=\"7\"\n\nFROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel\n\n# To fix GPG key error when running apt-get update\nRUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub\nRUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub\n\nRUN apt-get update && apt-get install -y ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 libgl1-mesa-glx git\n"
  },
  {
    "path": ".circleci/test.yml",
    "content": "version: 2.1\n\n# the default pipeline parameters, which will be updated according to\n# the results of the path-filtering orb\nparameters:\n  lint_only:\n    type: boolean\n    default: true\n\njobs:\n  lint:\n    docker:\n      - image: cimg/python:3.7.4\n    steps:\n      - checkout\n      - run:\n          name: Install pre-commit hook\n          command: |\n            pip install pre-commit\n            pre-commit install\n      - run:\n          name: Linting\n          command: pre-commit run --all-files\n      - run:\n          name: Check docstring coverage\n          command: |\n            pip install interrogate\n            interrogate -v --ignore-init-method --ignore-module --ignore-nested-functions --ignore-magic --ignore-regex \"__repr__\" --fail-under 90 mmagic\n  build_cpu:\n    parameters:\n      # The python version must match available image tags in\n      # https://circleci.com/developer/images/image/cimg/python\n      python:\n        type: string\n      torch:\n        type: string\n      torchvision:\n        type: string\n    docker:\n      - image: cimg/python:<< parameters.python >>\n    resource_class: large\n    steps:\n      - checkout\n      - run:\n          name: Install Libraries\n          command: |\n            sudo apt-get update\n            sudo apt-get install -y ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 libgl1-mesa-glx libjpeg-dev zlib1g-dev libtinfo-dev libncurses5\n      - run:\n          name: Configure Python & pip\n          command: |\n            pip install --upgrade pip\n            pip install wheel\n      - run:\n          name: Install PyTorch\n          command: |\n            python -V\n            pip install torch==<< parameters.torch >>+cpu torchvision==<< parameters.torchvision >>+cpu -f https://download.pytorch.org/whl/torch_stable.html\n      - run:\n          name: Install mmagic dependencies\n          command: |\n            pip install git+https://github.com/open-mmlab/mmengine.git@main\n            pip install -U openmim\n            mim install 'mmcv >= 2.0.0'\n            pip install -r requirements/tests.txt\n      - run:\n          name: Build and install\n          command: |\n            pip install -e .\n      - run:\n          name: Run unittests\n          command: |\n            coverage run --branch --source mmagic -m pytest tests/\n            coverage xml\n            coverage report -m\n  build_cuda:\n    parameters:\n      torch:\n        type: string\n      cuda:\n        type: enum\n        enum: [\"10.1\", \"10.2\", \"11.1\"]\n      cudnn:\n        type: integer\n        default: 7\n    machine:\n      image: ubuntu-2004-cuda-11.4:202110-01\n      # docker_layer_caching: true\n    resource_class: gpu.nvidia.small\n    steps:\n      - checkout\n      - run:\n          # Cloning repos in VM since Docker doesn't have access to the private key\n          name: Clone Repos\n          command: |\n            git clone -b main --depth 1 https://github.com/open-mmlab/mmengine.git /home/circleci/mmengine\n      - run:\n          name: Build Docker image\n          command: |\n            docker build .circleci/docker -t mmagic:gpu --build-arg PYTORCH=<< parameters.torch >> --build-arg CUDA=<< parameters.cuda >> --build-arg CUDNN=<< parameters.cudnn >>\n            docker run --gpus all -t -d -v /home/circleci/project:/mmagic -v /home/circleci/mmengine:/mmengine -v /home/circleci/mmdetection:/mmdetection -w /mmagic --name mmagic mmagic:gpu\n      - run:\n          name: Install mmagic dependencies\n          command: |\n            docker exec mmagic pip install -e /mmengine\n            docker exec mmagic pip install -U openmim\n            docker exec mmagic mim install 'mmcv >= 2.0.0'\n            docker exec mmagic pip install -r requirements/tests.txt\n      - run:\n          name: Build and install\n          command: |\n            docker exec mmagic pip install -e .\n      - run:\n          name: Run unittests\n          command: |\n            docker exec mmagic pytest tests/\n\nworkflows:\n  pr_stage_lint:\n    when: << pipeline.parameters.lint_only >>\n    jobs:\n      - lint:\n          name: lint\n          filters:\n            branches:\n              ignore:\n                - dev-1.x\n                - main\n  pr_stage_test:\n    when:\n      not:\n        << pipeline.parameters.lint_only >>\n    jobs:\n      - lint:\n          name: lint\n          filters:\n            branches:\n              ignore:\n                - dev-1.x\n                - main\n      - build_cpu:\n          name: minimum_version_cpu\n          torch: 1.10.0\n          torchvision: 0.11.0\n          python: 3.8.15\n          requires:\n            - lint\n      - build_cpu:\n          name: maximum_version_cpu\n          torch: 1.13.0\n          torchvision: 0.14.0\n          python: 3.8.15\n          requires:\n            - minimum_version_cpu\n      # - hold:\n      #     type: approval\n      #     requires:\n      #       - maximum_version_cpu\n      # - build_cuda:\n      #     name: mainstream_version_gpu\n      #     torch: 1.8.1\n      #     # Use double quotation mark to explicitly specify its type\n      #     # as string instead of number\n      #     cuda: \"10.2\"\n      #     requires:\n      #       - hold\n  merge_stage_test:\n    when:\n      not:\n        << pipeline.parameters.lint_only >>\n    jobs:\n      - build_cuda:\n          name: minimum_version_gpu\n          torch: 1.8.1\n          # Use double quotation mark to explicitly specify its type\n          # as string instead of number\n          cuda: \"10.2\"\n          filters:\n            branches:\n              only:\n                - dev-1.x\n"
  },
  {
    "path": ".dele.yml",
    "content": "dele_rules:\n  issue:\n    create:\n      - name: \"english needs\"\n        conditions:\n          - \"issue.title ~= ANSI\"\n        actions:\n          - comment:\n            message: \"@{{ issue.author.name }}, english-please.\"\n\n      - name: \"add assignee\"\n        conditions:\n          - \"issue.assignees.count == 0\"\n        actions:\n          - assign_with_owners\n\n      - name: \"set stale\"\n        conditions:\n          - \"issue.status.inactive_time >= 30d\"\n        actions:\n          - label:\n            add: [\"stale\"]\n          - comment:\n            message: \"This issue will be closed in 5 days because it has been open 30 days with no activity, comment it or remove stale label to avoid it.\"\n\n  pull_request:\n    create:\n      - name: \"add size label\"\n        conditions:\n          - \"pr.labels ~= size/*\"\n        actions:\n          - label:\n            add: [\"size\"]\n\n      - name: \"welcome new contributor\"\n        conditions:\n          - \"pr.author.login ~= first_pr\"\n        actions:\n          - comment:\n            message: \"Welcome @{{ pr.author.login }}! Thanks for your contribution to {{ pr.org }}/{{ .pr.repo }} 🎉\"\n"
  },
  {
    "path": ".dev_scripts/README.md",
    "content": "# Scripts for developing MMagic\n\n- [1. Check UT](#1-check-ut)\n- [2. Test all the models](#2-test-all-the-models)\n- [3. Train all the models](#3-train-all-the-models)\n  - [3.1 Train for debugging](#31-train-for-debugging)\n  - [3.2 Train for FP32](#32-train-for-fp32)\n  - [3.3 Train for FP16](#33-train-for-fp16)\n- [4. Monitor your training](#4-monitor-your-training)\n- [5. Train with a list of models](#5-train-with-a-list-of-models)\n- [6. Train with skipping a list of models](#6-train-with-skipping-a-list-of-models)\n- [7. Train failed or canceled jobs](#7-train-failed-or-canceled-jobs)\n- [8. Deterministic training](#8-deterministic-training)\n- [9. Automatically check links](#9-automatically-check-links)\n- [10. Calculate flops](#10-calculate-flops)\n- [11. Update model idnex](#11-update-model-index)\n\n## 1. Check UT\n\nPlease check your UT by the following scripts:\n\n```python\ncd mmagic/\npython .dev_script/update_ut.py\n```\n\nThen, you will find some redundant UT, missing UT and blank UT.\nPlease create UTs according to your package code implementation.\n\n## 2. Test all the models\n\nPlease follow these steps to test all the models in MMagic:\n\nFirst, you will need download all the pre-trained checkpoints by:\n\n```shell\npython .dev_scripts/download_models.py\n```\n\nThen, you can start testing all the benchmarks by：\n\n```shell\npython .dev_scripts/test_benchmark.py\n```\n\n## 3. Train all the models\n\n### 3.1 Train for debugging\n\nIn order to test all the pipelines of training, visualization, etc., you may want to set the total iterations of all the models as less steps (e.g., 100 steps) for quick evaluation. You can use the following steps:\n\nFirst, since our datasets are stored in ceph, you need to create ceph configs.\n\n```shell\n# create configs\npython .dev_scripts/create_ceph_configs.py \\\n        --target-dir configs_ceph_debug \\\n        --gpus-per-job 2 \\\n        --iters 100 \\\n        --save-dir-prefix work_dirs/benchmark_debug \\\n        --work-dir-prefix work_dirs/benchmark_debug\n```\n\nIf you only want to update a specific config file, you can specify it by `--test-file configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py`.\n\nHere, `--target-dir` denotes the path of new created configs, `--gpus-per-job` denotes the numbers of gpus used for each job, `--iters` denotes the total iterations of each model, `--save-dir-prefix` and `--work-dir-prefix` denote the working directory, where you can find the working logging.\n\nThen, you will need to submit all the jobs by running `train_benchmark.py`.\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --config-dir configs_ceph_debug \\\n    --run \\\n    --gpus-per-job 2 \\\n    --job-name debug \\\n    --work-dir work_dirs/benchmark_debug \\\n    --resume \\\n    --quotatype=auto\n```\n\nHere, you will specify the configs files used for training by `--config-dir`, submit all the jobs to run by set `--run`. You can set the prefix name of the submitted jobs by `--job-name`, specify the working directory by `--work-dir`. We suggest using `--resume` to enable auto resume during training and `--quotatype=auto` to fully exploit all the computing resources.\n\n### 3.2 Train for FP32\n\nIf you want to train all the models with FP32 (i.e, regular settings as the same with `configs/`),\nyou can follow these steps:\n\n```shell\n# create configs for fp32\npython .dev_scripts/create_ceph_configs.py \\\n        --target-dir configs_ceph_fp32 \\\n        --gpus-per-job 4 \\\n        --save-dir-prefix work_dirs/benchmark_fp32 \\\n        --work-dir-prefix work_dirs/benchmark_fp32 \\\n```\n\nThen, submit the jobs to run by slurm:\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --config-dir configs_ceph_fp32 \\\n    --run \\\n    --resume \\\n    --gpus-per-job 4 \\\n    --job-name fp32 \\\n    --work-dir work_dirs/benchmark_fp32 \\\n    --quotatype=auto\n```\n\n### 3.3 Train for FP16\n\nYou will also need to train the models with AMP (i.e., FP16), you can use the following steps to achieve this:\n\n```shell\npython .dev_scripts/create_ceph_configs.py \\\n        --target-dir configs_ceph_amp \\\n        --gpus-per-job 4 \\\n        --save-dir-prefix work_dirs/benchmark_amp \\\n        --work-dir-prefix work_dirs/benchmark_amp\n```\n\nThen, submit the jobs to run:\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --config-dir configs_ceph_amp \\\n    --run \\\n    --resume \\\n    --gpus-per-job 4 \\\n    --amp \\\n    --job-name amp \\\n    --work-dir work_dirs/benchmark_amp \\\n    --quotatype=auto\n```\n\n## 4. Monitor your training\n\nAfter you submitting jobs following [3-Train-all-the-models](#3-train-all-the-models), you will find a `xxx.log` file.\nThis log file list all the job name of job id you have submitted. With this log file, you can monitor your training by running `.dev_scripts/job_watcher.py`.\n\nFor example, you can run\n\n```shell\npython .dev_scripts/job_watcher.py --work-dir work_dirs/benchmark_fp32/ --log 20220923-140317.log\n```\n\nThen, you will find `20220923-140317.csv`, which reports the status and recent log of each job.\n\n## 5. Train with a list of models\n\nIf you only need to run some of the models, you can list all the models' name in a file, and specify the models when using `train_benchmark.py`.\n\nFor example,\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --config-dir configs_ceph_fp32 \\\n    --run \\\n    --resume \\\n    --gpus-per-job 4 \\\n    --job-name fp32 \\\n    --work-dir work_dirs/benchmark_fp32 \\\n    --quotatype=auto \\\n    --rerun \\\n    --rerun-list 20220923-140317.log \\\n```\n\nSpecifically, you need to enable `--rerun`, and specify the list of models to rerun by `--rerun-list`\n\n## 6. Train with skipping a list of models\n\nIf you want to train all the models while skipping some models, you can also list all the models' name in a file, and specify the models when running `train_benchmark.py`.\n\nFor example,\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --config-dir configs_ceph_fp32 \\\n    --run \\\n    --resume \\\n    --gpus-per-job 4 \\\n    --job-name fp32 \\\n    --work-dir work_dirs/benchmark_fp32 \\\n    --quotatype=auto \\\n    --skip \\\n    --skip-list 20220923-140317.log \\\n```\n\nSpecifically, you need to enable `--skip`, and specify the list of models to skip by `--skip-list`\n\n## 7. Train failed or canceled jobs\n\nIf you want to rerun failed or canceled jobs in the last run, you can combine `--rerun` flag with `--rerun-failure` and `--rerun-cancel` flags.\n\nFor example, the log file of the last run is `train-20221009-211904.log`, and now you want to rerun the failed jobs. You can use the following command:\n\n```bash\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --job-name RERUN \\\n    --rerun train-20221009-211904.log \\\n    --rerun-fail \\\n    --run\n```\n\nWe can combine `--rerun-fail` and `--rerun-cancel` with flag `---models` to rerun a **subset** of failed or canceled model.\n\n```bash\npython .dev_scripts/train_benchmark.py mm_lol \\\n    --job-name RERUN \\\n    --rerun train-20221009-211904.log \\\n    --rerun-fail \\\n    --models sagan \\  # only rerun 'sagan' models in all failed tasks\n    --run\n```\n\nSpecifically, `--rerun-fail` and `--rerun-cancel` can be used together to rerun both failed and cancaled jobs.\n\n## 8. `deterministic` training\n\nSet `torch.backends.cudnn.deterministic = True` and `torch.backends.cudnn.benchmark = False` can remove randomness operation in Pytorch training. You can add `--deterministic` flag when start your benchmark training to remove the influence of randomness operation.\n\n```shell\npython .dev_scripts/train_benchmark.py mm_lol --job-name xzn --models pix2pix --cpus-per-job 16 --run --deterministic\n```\n\n## 9. Automatically check links\n\nUse the following script to check whether the links in documentations are valid:\n\n```shell\npython .dev_scripts/doc_link_checker.py --target docs/zh_cn\npython .dev_scripts/doc_link_checker.py --target README_zh-CN.md\npython .dev_scripts/doc_link_checker.py --target docs/en\npython .dev_scripts/doc_link_checker.py --target README.md\n```\n\nYou can specify the `--target` by a file or a directory.\n\n**Notes:** DO NOT use it in CI, because requiring too many http requirements by CI will cause 503 and CI will propabaly fail.\n\n## 10. Calculate flops\n\nTo summarize the flops of different models, you can run the following commands:\n\n```bash\npython .dev_scripts/benchmark_valid_flop.py --flops --flops-str\n```\n\n## 11. Update model index\n\nTo update model-index according to `README.md`, please run the following commands,\n\n```bash\npython .dev_scripts/update_model_index.py\n```\n"
  },
  {
    "path": ".dev_scripts/create_ceph_configs.py",
    "content": "import glob\nimport os.path as osp\nimport shutil\nfrom argparse import ArgumentParser\nfrom copy import deepcopy\n\nfrom mmengine import Config\nfrom tqdm import tqdm\n\n\ndef update_intervals(config, args):\n    if args.iters is None:\n        return config\n\n    # 1. change max-iters and val-interval\n    if 'train_cfg' in config and config['train_cfg']:\n        config['train_cfg'] = dict(\n            type='IterBasedTrainLoop',\n            max_iters=args.iters,\n            val_interval=args.iters // 5)\n\n    # 2. change logging interval\n    if 'default_hooks' in config and config['default_hooks']:\n        config['default_hooks']['logger'] = dict(\n            type='LoggerHook', interval=args.iters // 10)\n        config['default_hooks']['checkpoint'] = dict(\n            type='CheckpointHook', interval=args.iters // 15)\n\n    return config\n\n\ndef convert_data_config(data_cfg):\n    ceph_dataroot_prefix_temp = 'openmmlab:s3://openmmlab/datasets/{}/'\n    local_dataroot_prefix = ['data', './data']\n    # val_dataloader may None\n    if data_cfg is None:\n        return\n\n    data_cfg_updated = deepcopy(data_cfg)\n    dataset: dict = data_cfg['dataset']\n\n    dataset_type: str = dataset['type']\n    if dataset_type in ['ImageNet', 'CIFAR10']:\n        repo_name = 'classification'\n    else:\n        repo_name = 'editing'\n    ceph_dataroot_prefix = ceph_dataroot_prefix_temp.format(repo_name)\n\n    if 'data_root' in dataset:\n        data_root: str = dataset['data_root']\n\n        for dataroot_prefix in local_dataroot_prefix:\n            if data_root.startswith(dataroot_prefix):\n                # avoid cvt './data/imagenet' ->\n                # openmmlab:s3://openmmlab/datasets/classification//imagenet\n                if data_root.startswith(dataroot_prefix + '/'):\n                    dataroot_prefix = dataroot_prefix + '/'\n                data_root = data_root.replace(dataroot_prefix,\n                                              ceph_dataroot_prefix)\n                # add '/' at the end\n                if not data_root.endswith('/'):\n                    data_root = data_root + '/'\n                dataset['data_root'] = data_root\n\n    elif 'data_roots' in dataset:\n        # specific for pggan dataset, which need a dict of data_roots\n        data_roots: dict = dataset['data_roots']\n        for k, data_root in data_roots.items():\n            for dataroot_prefix in local_dataroot_prefix:\n                if data_root.startswith(dataroot_prefix):\n                    # avoid cvt './data/imagenet' ->\n                    # openmmlab:s3://openmmlab/datasets/classification//imagenet\n                    if data_root.startswith(dataroot_prefix + '/'):\n                        dataroot_prefix = dataroot_prefix + '/'\n                    data_root = data_root.replace(dataroot_prefix,\n                                                  ceph_dataroot_prefix)\n                    # add '/' at the end\n                    if not data_root.endswith('/'):\n                        data_root = data_root + '/'\n                    data_roots[k] = data_root\n        dataset['data_roots'] = data_roots\n\n    else:\n        raise KeyError\n\n    if hasattr(dataset, 'pipeline'):\n        pipelines = dataset['pipeline']\n        for pipeline in pipelines:\n            type_ = pipeline['type']\n            # only change mmcv(mmcls)'s loading config\n            if type_ == 'mmcls.LoadImageFromFile':\n                pipeline['file_client_args'] = dict(backend='petrel')\n            elif type_ == 'LoadMask':\n                if 'mask_list_file' in pipeline['mask_config']:\n                    local_mask_path = pipeline['mask_config']['mask_list_file']\n                    for dataroot_prefix in local_dataroot_prefix:\n                        if local_mask_path.startswith(dataroot_prefix + '/'):\n                            dataroot_prefix = dataroot_prefix + '/'\n                        local_mask_path = local_mask_path.replace(\n                            dataroot_prefix, ceph_dataroot_prefix)\n                    pipeline['mask_config']['mask_list_file'] = local_mask_path\n                    pipeline['mask_config']['prefix'] = osp.dirname(\n                        local_mask_path)\n                    pipeline['mask_config']['io_backend'] = 'petrel'\n                    pipeline['mask_config']['file_client_kwargs'] = dict(\n                        backend='petrel')\n            elif type_ == 'RandomLoadResizeBg':\n                bg_dir_path = pipeline['bg_dir']\n                for dataroot_prefix in local_dataroot_prefix:\n                    if bg_dir_path.startswith(dataroot_prefix + '/'):\n                        dataroot_prefix = dataroot_prefix + '/'\n                    bg_dir_path = bg_dir_path.replace(dataroot_prefix,\n                                                      ceph_dataroot_prefix)\n                    bg_dir_path = bg_dir_path.replace(repo_name, 'detection')\n                pipeline['bg_dir'] = bg_dir_path\n            elif type_ == 'CompositeFg':\n                fg_dir_path = pipeline['fg_dirs']\n                for i, fg in enumerate(fg_dir_path):\n                    for dataroot_prefix in local_dataroot_prefix:\n                        if fg.startswith(dataroot_prefix + '/'):\n                            dataroot_prefix = dataroot_prefix + '/'\n                        fg = fg.replace(dataroot_prefix, ceph_dataroot_prefix)\n                        pipeline['fg_dirs'][i] = fg\n\n                alpha_dir_path = pipeline['alpha_dirs']\n                for i, alpha_dir in enumerate(alpha_dir_path):\n                    for dataroot_prefix in local_dataroot_prefix:\n                        if alpha_dir.startswith(dataroot_prefix + '/'):\n                            dataroot_prefix = dataroot_prefix + '/'\n                        alpha_dir = alpha_dir.replace(dataroot_prefix,\n                                                      ceph_dataroot_prefix)\n                        pipeline['alpha_dirs'][i] = alpha_dir\n\n    data_cfg_updated['dataset'] = dataset\n    return data_cfg_updated\n\n\ndef update_ceph_config(filename, args, dry_run=False):\n    if filename.startswith(osp.join(args.target_dir, '_base_')):\n        # Skip base configs\n        return None\n\n    if args.ceph_path is not None:\n        if args.ceph_path.endswith('/'):\n            args.ceph_path = args.ceph_path[:-1]\n        work_dir = f'{args.ceph_path}/{args.work_dir_prefix}'\n        save_dir = f'{args.ceph_path}/{args.save_dir_prefix}'\n        if not work_dir.endswith('/'):\n            work_dir = work_dir + '/'\n        if not save_dir.endswith('/'):\n            save_dir = save_dir + '/'\n    else:\n        # disable save local results to ceph\n        work_dir = args.work_dir_prefix\n        save_dir = args.save_dir_prefix\n\n    try:\n        config = Config.fromfile(filename)\n\n        # 0. update intervals\n        config = update_intervals(config, args)\n\n        # 1. change dataloader\n        dataloader_prefix = [\n            f'{p}_dataloader' for p in ['train', 'val', 'test']\n        ]\n\n        for prefix in dataloader_prefix:\n            if not hasattr(config, prefix):\n                continue\n            data_cfg = config[prefix]\n            if not isinstance(data_cfg, list):\n                data_cfg_list = [data_cfg]\n                data_cfg_is_list = False\n            else:\n                data_cfg_list = data_cfg\n                data_cfg_is_list = True\n\n            data_cfg_updated_list = [\n                convert_data_config(cfg) for cfg in data_cfg_list\n            ]\n            if data_cfg_is_list:\n                config[prefix] = data_cfg_updated_list\n            else:\n                config[prefix] = data_cfg_updated_list[0]\n\n        # 2. change visualizer\n        if hasattr(config, 'vis_backends'):\n            # TODO: support upload to ceph\n            # for vis_cfg in config['vis_backends']:\n            #     if vis_cfg['type'] == 'VisBackend':\n            #         vis_cfg['ceph_path'] = work_dir\n\n            # add pavi config\n            if args.add_pavi:\n                _, project, name = filename.split('/')\n                name = name[:-2]\n                # check if pavi config is inheritance from _base_\n                find_inherit = False\n                for vis_cfg in config['vis_backends']:\n                    if vis_cfg['type'] == 'PaviVisBackend':\n                        vis_cfg['exp_name'] = name\n                        vis_cfg['project'] = project\n                        find_inherit = True\n                        break\n\n                if not find_inherit:\n                    pavi_cfg = dict(\n                        type='PaviVisBackend', exp_name=name, project=project)\n                    config['vis_backends'].append(pavi_cfg)\n\n            # add wandb config\n            if args.add_wandb:\n                _, project, name = filename.split('/')\n                name = name[:-2]\n                # check if wandb config is inheritance from _base_\n                find_inherit = False\n                for vis_cfg in config['vis_backends']:\n                    if vis_cfg['type'] == 'WandbVisBackend':\n                        vis_cfg['name'] = name  # name of config\n                        vis_cfg['project'] = project  # name of model\n                        find_inherit = True\n                        break\n\n                if not find_inherit:\n                    pavi_cfg = dict(\n                        type='WandbVisBackend',\n                        init_kwargs=dict(name=name, project=project))\n                    config['vis_backends'].append(pavi_cfg)\n\n            # add tensorboard config\n            if args.add_tensorboard:\n                find_inherit = False\n                for vis_cfg in config['vis_backends']:\n                    if vis_cfg['type'] == 'TensorboardVisBackend':\n                        find_inherit = True\n                        break\n\n                if not find_inherit:\n                    tensorboard_cfg = dict(type='TensorboardVisBackend')\n                    config['vis_backends'].append(tensorboard_cfg)\n\n            config['visualizer']['vis_backends'] = config['vis_backends']\n\n        # 3. change logger hook and checkpoint hook\n        if hasattr(config, 'default_hooks'):\n            # file_client_args = dict(backend='petrel')\n\n            for name, hooks in config['default_hooks'].items():\n                if name == 'logger':\n                    hooks['out_dir'] = save_dir\n                    # hooks['file_client_args'] = file_client_args\n                elif name == 'checkpoint':\n                    hooks['out_dir'] = save_dir\n                    # hooks['file_client_args'] = file_client_args\n\n        # 4. save\n        config.dump(config.filename)\n        return True\n\n    except Exception as e:  # noqa\n        print(e)\n        return False\n\n\nif __name__ == '__main__':\n\n    parser = ArgumentParser()\n    parser.add_argument('--ceph-path', type=str, default=None)\n    parser.add_argument('--gpus-per-job', type=int, default=None)\n    parser.add_argument(\n        '--save-dir-prefix',\n        type=str,\n        default='work_dirs',\n        help='Default prefix of the work dirs in the bucket')\n    parser.add_argument(\n        '--work-dir-prefix',\n        type=str,\n        default='work_dirs',\n        help='Default prefix of the work dirs in the bucket')\n    parser.add_argument(\n        '--target-dir', type=str, default='configs_ceph', help='configs path')\n    parser.add_argument(\n        '--iters', type=int, default=None, help='set intervals')\n    parser.add_argument(\n        '--test-file', type=str, default=None, help='Dry-run on a test file.')\n    parser.add_argument(\n        '--add-pavi', action='store_true', help='Add pavi config or not.')\n    parser.add_argument(\n        '--add-wandb', action='store_true', help='Add wandb config or not.')\n    parser.add_argument(\n        '--add-tensorboard',\n        action='store_true',\n        help='Add Tensorboard config or not.')\n\n    args = parser.parse_args()\n\n    if args.test_file is None:\n\n        print('Copying config files to \"config_ceph\" ...')\n        shutil.copytree('configs', args.target_dir, dirs_exist_ok=True)\n\n        print('Updating ceph configuration ...')\n        files = glob.glob(\n            osp.join(args.target_dir, '**', '*.py'), recursive=True)\n        pbars = tqdm(files)\n        res = []\n        for f in pbars:\n            pbars.set_description(f'Processing {f}')\n            res.append(update_ceph_config(f, args))\n\n        count_skip = res.count(None)\n        count_done = res.count(True)\n        count_fail = res.count(False)\n        fail_list = [fn for status, fn in zip(res, files) if status is False]\n        skip_list = [fn for status, fn in zip(res, files) if status is None]\n\n        print(f'Successfully update {count_done} configs.')\n        print(f'Skip {count_skip} configs.')\n        if count_skip > 0:\n            print(skip_list)\n        print(f'Fail {count_fail} configs.')\n        if count_fail > 0:\n            print(fail_list)\n\n    else:\n        shutil.copy(args.test_file,\n                    args.test_file.replace('configs', args.target_dir))\n        update_ceph_config(\n            args.test_file.replace('configs', args.target_dir),\n            args,\n            dry_run=True)\n"
  },
  {
    "path": ".dev_scripts/doc_link_checker.py",
    "content": "# Copyright (c) MegFlow. All rights reserved.\n# Copyright (c) OpenMMLab. All rights reserved.\n# /bin/python3\n\nimport argparse\nimport os\nimport re\n\nimport requests\nfrom tqdm import tqdm\n\n\ndef make_parser():\n    parser = argparse.ArgumentParser('Doc link checker')\n    parser.add_argument(\n        '--target',\n        default='./docs',\n        type=str,\n        help='the directory or file to check')\n    parser.add_argument(\n        '--ignore', type=str, nargs='+', default=[], help='input image size')\n    return parser\n\n\npattern = re.compile(r'\\[.*?\\]\\(.*?\\)')\n\n\ndef analyze_doc(home, path):\n    problem_list = []\n    code_block = 0\n    with open(path) as f:\n        lines = f.readlines()\n        for line in lines:\n            line = line.strip()\n            if line.startswith('```'):\n                code_block = 1 - code_block\n\n            if code_block > 0:\n                continue\n\n            if '[' in line and ']' in line and '(' in line and ')' in line:\n                all = pattern.findall(line)\n                for item in all:\n                    # skip  ![]()\n                    if item.find('[') == item.find(']') - 1:\n                        continue\n\n                    # process the case [text()]()\n                    offset = item.find('](')\n                    if offset == -1:\n                        continue\n                    item = item[offset:]\n                    start = item.find('(')\n                    end = item.find(')')\n                    ref = item[start + 1:end]\n\n                    if ref.startswith('http'):\n                        if ref.startswith(\n                                'https://download.openmmlab.com/'\n                        ) or ref.startswith('http://download.openmmlab.com/'):\n                            resp = requests.head(ref)\n                            if resp.status_code == 200:\n                                continue\n                            else:\n                                problem_list.append(ref)\n                        else:\n                            continue\n\n                    if ref.startswith('#'):\n                        continue\n\n                    if ref == '<>':\n                        continue\n\n                    if '.md#' in ref:\n                        ref = ref[:ref.find('#')]\n                    if ref.startswith('/'):\n                        fullpath = os.path.join(\n                            os.path.dirname(__file__), '../', ref[1:])\n                    else:\n                        fullpath = os.path.join(home, ref)\n                    if not os.path.exists(fullpath):\n                        problem_list.append(ref)\n            else:\n                continue\n    if len(problem_list) > 0:\n        print(f'{path}:')\n        for item in problem_list:\n            print(f'\\t {item}')\n        print('\\n')\n        raise Exception('found link error')\n\n\ndef traverse(args):\n    target = args.target\n    if os.path.isfile(target):\n        analyze_doc(os.path.dirname(target), target)\n        return\n    target_files = list(os.walk(target))\n    target_files.sort()\n    for home, dirs, files in tqdm(target_files):\n        if home in args.ignore:\n            continue\n        for filename in files:\n            if filename.endswith('.md'):\n                path = os.path.join(home, filename)\n                if os.path.islink(path) is False:\n                    analyze_doc(home, path)\n\n\nif __name__ == '__main__':\n    args = make_parser().parse_args()\n    traverse(args)\n"
  },
  {
    "path": ".dev_scripts/download_models.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\n\nimport argparse\nimport os\nimport platform\nimport posixpath as osp  # Even on windows, use posixpath\nimport re\nimport subprocess\nfrom collections import OrderedDict\nfrom importlib.machinery import SourceFileLoader\nfrom pathlib import Path\n\nfrom modelindex import load\n\nMMagic_ROOT = Path(__file__).absolute().parent.parent\nDOWNLOAD_DIR = osp.join(MMagic_ROOT, 'work_dirs', 'download')\nIS_WINDOWS = (platform.system() == 'Windows')\n\n\ndef additional_download(args):\n    \"\"\"Download additional weights file used in this repo, such as VGG.\"\"\"\n\n    url_path = [\n        'https://www.adrianbulat.com/downloads/python-fan/2DFAN4-cd938726ad.zip',  # noqa\n        'https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth',\n        'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth'\n    ]\n    checkpoint_root = args.checkpoint_root\n    if not checkpoint_root:\n        checkpoint_root = DOWNLOAD_DIR\n    for url in url_path:\n        path = osp.join(checkpoint_root, 'hub', 'checkpoints',\n                        osp.basename(url))\n        print()\n        print(f'download {path} from {url}')\n\n        if IS_WINDOWS:\n            if args.dry_run:\n                print(f'Call  \\'wget.download({url}, {path})\\'')\n            else:\n                import wget\n                wget.download(url, path)\n        else:\n            if args.dry_run:\n                print(f'wget --no-check-certificate -N {url} {path}')\n            else:\n                os.system(f'wget --no-check-certificate -N {url} {path}')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Download the checkpoints')\n    parser.add_argument('--checkpoint-root', help='Checkpoint file root path.')\n    parser.add_argument(\n        '--models', nargs='+', type=str, help='Specify model names to run.')\n    parser.add_argument(\n        '--force',\n        action='store_true',\n        help='Whether force re-download the checkpoints.')\n    parser.add_argument(\n        '--model-list', type=str, help='Path of algorithm list to download')\n    parser.add_argument(\n        '--dry-run',\n        action='store_true',\n        help='Only show download command but not run')\n\n    args = parser.parse_args()\n    return args\n\n\ndef download(args):\n    model_index_file = MMagic_ROOT / 'model-index.yml'\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n    models = OrderedDict({model.name: model for model in model_index.models})\n\n    http_prefix_short = 'https://download.openmmlab.com/mmediting/'\n\n    # load model list\n    if args.model_list:\n        file_list_path = args.model_list\n        file_list = SourceFileLoader('model_list',\n                                     file_list_path).load_module().model_list\n    else:\n        file_list = None\n\n    if args.models:\n        patterns = [re.compile(pattern) for pattern in args.models]\n        filter_models = {}\n        for k, v in models.items():\n            if any([re.match(pattern, k) for pattern in patterns]):\n                filter_models[k] = v\n        if len(filter_models) == 0:\n            print('No model found, please specify models in:')\n            print('\\n'.join(models.keys()))\n            return\n        models = filter_models\n\n    checkpoint_root = args.checkpoint_root\n    if not checkpoint_root:\n        checkpoint_root = DOWNLOAD_DIR\n\n    for model_info in models.values():\n\n        if file_list is not None and model_info.name not in file_list:\n            continue\n\n        model_weight_url = model_info.weights\n\n        if model_weight_url.startswith(http_prefix_short):\n            model_name = model_weight_url[len(http_prefix_short):]\n        elif model_weight_url == '':\n            print(f'{model_info.Name} weight is missing')\n            return None\n        else:\n            raise ValueError(f'Unknown url prefix. \\'{model_weight_url}\\'')\n\n        model_name_split = model_name.split('/')\n        if len(model_name_split) == 3:  # 'TASK/METHOD/MODEL.pth'\n            # remove task name\n            model_name = osp.join(*model_name_split[1:-1])\n        else:\n            model_name = osp.join(*model_name_split[:-1])\n        ckpt_name = model_weight_url.split('/')[-1]\n\n        download_path = osp.join(checkpoint_root, model_name, ckpt_name)\n        download_root = osp.join(checkpoint_root, model_name)\n\n        if osp.exists(download_path):\n            print(f'Already exists {download_path}')\n            # do not delete when dry-run is true\n            if args.force and not args.dry_run:\n                print(f'Delete {download_path} to force re-download.')\n                os.system(f'rm -rf {download_path}')\n            else:\n                continue\n        try:\n            cmd_str_list = [\n                'wget', '-q', '--show-progress', '-p', download_root,\n                model_weight_url\n            ]\n\n            if args.dry_run:\n                print(' '.join(cmd_str_list))\n            else:\n                subprocess.run(cmd_str_list, check=True)\n        except Exception:\n            # for older version of wget\n            cmd_str_list = ['wget', '-P', download_root, model_weight_url]\n            if args.dry_run:\n                print(' '.join(cmd_str_list))\n            else:\n                subprocess.run(cmd_str_list, check=True)\n\n\nif __name__ == '__main__':\n    args = parse_args()\n    download(args)\n    additional_download(args)\n"
  },
  {
    "path": ".dev_scripts/inference_benchmark.sh",
    "content": "python demo/download_inference_resources.py\n\n# Text-to-Image\npython demo/mmagic_inference_demo.py \\\n        --model-name stable_diffusion \\\n        --text \"A panda is having dinner at KFC\" \\\n        --result-out-dir demo_text2image_stable_diffusion_res.png\n\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 1 \\\n        --text \"Room with blue walls and a yellow ceiling.\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png' \\\n        --result-out-dir demo_text2image_controlnet_canny_res.png\n\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 2 \\\n        --text \"masterpiece, best quality, sky, black hair, skirt, sailor collar, looking at viewer, short hair, building, bangs, neckerchief, long sleeves, cloudy sky, power lines, shirt, cityscape, pleated skirt, scenery, blunt bangs, city, night, black sailor collar, closed mouth\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230380893-2eae68af-d610-4f7f-aa68-c2f22c2abf7e.png' \\\n        --result-out-dir demo_text2image_controlnet_pose_res.png\n\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 3 \\\n        --text \"black house, blue sky\" \\\n        --control 'https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/243599897-553a4c46-c61d-46df-b820-59a49aaf6678.png' \\\n        --result-out-dir demo_text2image_controlnet_seg_res.png\n\n# Conditional GANs\npython demo/mmagic_inference_demo.py \\\n        --model-name biggan \\\n        --model-setting 3 \\\n        --label 1 \\\n        --result-out-dir demo_conditional_biggan_res.jpg\n\n# Unconditional GANs\npython demo/mmagic_inference_demo.py \\\n        --model-name styleganv1 \\\n        --result-out-dir demo_unconditional_styleganv1_res.jpg\n\n# Image Translation\npython demo/mmagic_inference_demo.py \\\n        --model-name pix2pix \\\n        --img ./resources/input/translation/gt_mask_0.png \\\n        --result-out-dir ./resources/output/translation/demo_translation_pix2pix_res.png\n\n# Inpainting\npython demo/mmagic_inference_demo.py \\\n        --model-name deepfillv2  \\\n        --img ./resources/input/inpainting/celeba_test.png \\\n        --mask ./resources/input/inpainting/bbox_mask.png \\\n        --result-out-dir ./resources/output/inpainting/demo_inpainting_deepfillv2_res.\n\n# Matting\npython demo/mmagic_inference_demo.py \\\n        --model-name aot_gan  \\\n        --img ./resources/input/matting/GT05.jpg \\\n        --trimap ./resources/input/matting/GT05_trimap.jpg \\\n        --result-out-dir ./resources/output/matting/demo_matting_gca_res.png\n\n# Image Restoration\npython demo/mmagic_inference_demo.py \\\n        --model-name nafnet \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_nafnet_res.png\n\n# Image Super-resolution\npython demo/mmagic_inference_demo.py \\\n        --model-name esrgan \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_esrgan_res.png\n\npython demo/mmagic_inference_demo.py \\\n        --model-name ttsr \\\n        --img ./resources/input/restoration/000001.png \\\n        --ref ./resources/input/restoration/000001.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_ttsr_res.png\n\n# Video Super-Resolution\npython demo/mmagic_inference_demo.py \\\n        --model-name basicvsr \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_basicvsr_res.mp4\n\npython demo/mmagic_inference_demo.py \\\n        --model-name edvr \\\n        --extra-parameters window_size=5 \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_edvr_res.mp4\n\npython demo/mmagic_inference_demo.py \\\n        --model-name tdan \\\n        --model-setting 2 \\\n        --extra-parameters window_size=5 \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_tdan_res.mp4\n\n# Video interpolation\npython demo/mmagic_inference_demo.py \\\n        --model-name flavr \\\n        --video ./resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4 \\\n        --result-out-dir ./resources/output/video_interpolation/demo_video_interpolation_flavr_res.mp4\n\n# Image Colorization\npython demo/mmagic_inference_demo.py \\\n        --model-name inst_colorization \\\n        --img https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg \\\n        --result-out-dir demo_colorization_res.png\n\n# 3D-aware Generation\npython demo/mmagic_inference_demo.py \\\n    --model-name eg3d \\\n    --result-out-dir ./resources/output/eg3d-output\n"
  },
  {
    "path": ".dev_scripts/job_watcher.py",
    "content": "import os\nimport os.path as osp\nimport time\nfrom argparse import ArgumentParser\nfrom functools import partial\n\nfrom prettytable import PrettyTable\nfrom pygments import formatters, highlight, lexers\nfrom pygments.util import ClassNotFound\nfrom simple_term_menu import TerminalMenu\n\nCACHE_DIR = osp.join(osp.abspath('~'), '.task_watcher')\n\n\ndef show_job_out(name, root, job_name_list):\n    if name == 'Show Status':\n        return show_job_status(root, job_name_list)\n\n    job_id, job_name = name.split(' @ ')\n    job_out_path = osp.join(root, job_name, f'job.{job_id.strip()}.out')\n    try:\n        with open(job_out_path, 'r') as file:\n            out_content = file.read()\n    except Exception:\n        out_content = f'{job_out_path} not find.'\n\n    out_content = out_content.split('\\n')[-20:]\n    out_content = '\\n'.join(out_content)\n\n    try:\n        lexer = lexers.get_lexer_for_filename(\n            job_out_path, stripnl=False, stripall=False)\n    except ClassNotFound:\n        lexer = lexers.get_lexer_by_name('text', stripnl=False, stripall=False)\n    formatter = formatters.TerminalFormatter(bg='dark')  # dark or light\n    highlighted_file_content = highlight(out_content, lexer, formatter)\n    return highlighted_file_content\n\n\ndef show_job_status(root, job_name_list, csv_path=None):\n    \"\"\"Show job status and dump to csv.\n\n    Args:\n        root (_type_): _description_\n        job_name_list (_type_): _description_\n    Returns:\n        _type_: _description_\n    \"\"\"\n    table = PrettyTable(title='Job Status')\n    table.field_names = ['Name', 'ID', 'Status', 'Output']\n    swatch_tmp = 'swatch examine {}'\n    if csv_path is None:\n        csv_path = 'status.cvs'\n\n    for info in job_name_list:\n        id_, name = info.split(' @ ')\n        name = name.split('\\n')[0].strip()\n        proc = os.popen(swatch_tmp.format(id_))\n        stdout = proc.read().strip().split('\\n')\n        job_info = [s for s in stdout[2].split(' ') if s]\n        status = job_info[5]\n\n        job_out_path = osp.join(root, name, f'job.{id_.strip()}.out')\n        if osp.exists(job_out_path):\n            with open(job_out_path, 'r') as file:\n                out_content = file.read()\n            out_content = out_content.split('\\n')\n            if len(out_content) > 10:\n                out_content = out_content[-7:-1]\n            out_content = '\\n'.join(out_content)\n        else:\n            out_content = 'No output currently.'\n        table.add_row([name, id_, status, out_content])\n    with open(csv_path, 'w') as file:\n        file.write(table.get_csv_string())\n        print(f'save job status to {csv_path}')\n    return table.get_string()\n\n\ndef save_for_resume(root, job_name_list):\n    \"\"\"Save job name and job ID for resume.\n\n    Args:\n        root (_type_): _description_\n        job_name_list (_type_): _description_\n    \"\"\"\n    timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime(time.time()))\n    os.makedirs(CACHE_DIR, exist_ok=True)\n\n    with open(osp.join(CACHE_DIR, timestamp), 'w') as file:\n        file.write(f'{root}\\n')\n        file.writelines([n + '\\n' for n in job_name_list])\n\n    with open(osp.join(CACHE_DIR, 'latest'), 'w') as file:\n        file.write(f'{root}\\n')\n        file.writelines([n + '\\n' for n in job_name_list])\n\n\ndef resume_from_file(file_path):\n    \"\"\"Resume TUI from file.\n\n    Args:\n        file_path (_type_): _description_\n    \"\"\"\n    with open((file_path), 'r') as file:\n        resume_info = file.readlines()\n    resume_info = [info.strip() for info in resume_info]\n    root = resume_info[0]\n    job_name_list = resume_info[1:]\n    show_tui(root, job_name_list)\n\n\ndef start_from_proc(root, proc):\n    \"\"\"Start TUI from proc.\n\n    Args:\n        root (_type_): _description_\n        proc (_type_): _description_\n    \"\"\"\n    std_out = proc.read().strip()\n    std_out_list = std_out.split('\\n')\n    num_tasks = len(std_out_list) // 3\n    job_name_list = []\n    for idx in range(num_tasks):\n        config = std_out_list[3 * idx].strip(' ')\n        job_name = config.split('/')[-1].split('.')[0].strip(' ')\n        job_id = std_out_list[3 * idx + 2].split(' ')[-1]\n        job_name_list.append(f'{job_id} @ {job_name}')\n\n    return job_name_list\n    # save_for_resume(root, job_name_list)\n    # show_tui(root, job_name_list)\n\n\ndef show_tui(root, job_name_list):\n    \"\"\"Start a interactivate task watcher.\n    Args:\n        root (str): root for benchmark\n        job_name_list (list[str]): List of 'JOBID @ JOBNAME'\n    \"\"\"\n    show_func = partial(show_job_out, root=root, job_name_list=job_name_list)\n    terminal_menu = TerminalMenu(\n        job_name_list + ['Show Status'],\n        preview_command=show_func,\n        preview_size=0.75)\n    terminal_menu.show()\n\n\nif __name__ == '__main__':\n    parser = ArgumentParser()\n    parser.add_argument('--list', type=str, default=None)\n    parser.add_argument('--resume', default='latest')\n    parser.add_argument(\n        '--work-dir', type=str, default='work_dirs/benchmark_amp')\n    parser.add_argument(\n        '--type',\n        type=str,\n        default='failed',\n        choices=['running', 'success', 'queue', 'failed', 'all'],\n    )\n    args = parser.parse_args()\n\n    if args.list is not None:\n        f = open(args.list, 'r')\n        job_name_list = f.readlines()\n        csv_path = osp.basename(args.list).replace('.log', '.csv')\n        plain_txt = show_job_status(args.work_dir, job_name_list, csv_path)\n        with open('status.log', 'w') as f:\n            f.write(plain_txt)\n        print('save status to status.log')\n    else:\n        if args.resume.upper() == 'LATEST':\n            resume_from_file(osp.join(CACHE_DIR, 'latest'))\n        else:\n            resume_from_file(args.resume)\n"
  },
  {
    "path": ".dev_scripts/metric_mapping.py",
    "content": "# key-in-metafile: key-in-results.pkl\nMETRICS_MAPPING = {\n    'FID': {\n        'keys': ['FID-Full-50k/fid'],\n        'tolerance': 0.5,\n        'rule': 'less'\n    },\n    'PSNR': {\n        'keys': ['PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'SSIM': {\n        'keys': ['MattingSSIM', 'SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'l1 error': {\n        'keys': ['MAE'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'CONN': {\n        'keys': ['ConnectivityError'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'GRAD': {\n        'keys': ['GradientError'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'MSE': {\n        'keys': ['MSE', 'MattingMSE'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'SAD': {\n        'keys': ['SAD'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'NIQE (Y)': {\n        'keys': ['NIQE'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    # verbose metric mapping for VSR\n    'REDS4 (BIx4) PSNR (RGB)': {\n        'keys': ['REDS4-BIx4-RGB/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vimeo-90K-T (BIx4) PSNR (Y)': {\n        'keys': ['Vimeo-90K-T-BIx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vimeo-90K-T (BDx4) PSNR (Y)': {\n        'keys': ['Vimeo-90K-T-BDx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'UDM10 (BDx4) PSNR (Y)': {\n        'keys': ['UDM10-BDx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vid4 (BDx4) PSNR (Y)': {\n        'keys': ['VID4-BDx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vid4 (BIx4) PSNR (Y)': {\n        'keys': ['VID4-BIx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'SPMCS-30 (BDx4) PSNR (Y)': {\n        'keys': ['SPMCS-BDx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'SPMCS-30 (BIx4) PSNR (Y)': {\n        'keys': ['SPMCS-BIx4-Y/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'REDS4 (BIx4) SSIM (RGB)': {\n        'keys': ['REDS4-BIx4-RGB/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vimeo-90K-T (BIx4) SSIM (Y)': {\n        'keys': ['Vimeo-90K-T-BIx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vimeo-90K-T (BDx4) SSIM (Y)': {\n        'keys': ['Vimeo-90K-T-BDx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'UDM10 (BDx4) SSIM (Y)': {\n        'keys': ['UDM10-BDx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vid4 (BDx4) SSIM (Y)': {\n        'keys': ['VID4-BDx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Vid4 (BIx4) SSIM (Y)': {\n        'keys': ['VID4-BIx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'SPMCS-30 (BDx4) SSIM (Y)': {\n        'keys': ['SPMCS-BDx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'SPMCS-30 (BIx4) SSIM (Y)': {\n        'keys': ['SPMCS-BIx4-Y/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Set5 SSIM': {\n        'keys': ['Set5/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Set5 PSNR': {\n        'keys': ['Set5/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Set14 SSIM': {\n        'keys': ['Set14/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Set14 PSNR': {\n        'keys': ['Set14/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'DIV2K SSIM': {\n        'keys': ['DIV2K/SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'DIV2K PSNR': {\n        'keys': ['DIV2K/PSNR'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n}\n\n# add LIIF metrics\nliif_metrics = {}\nfor dataset in ['Set5', 'Set14', 'DIV2K']:\n    for metric, tolerance in zip(['PSNR', 'SSIM'], [0.1, 0.1]):\n        for scale in [2, 3, 4, 6, 18, 30]:\n            liif_metrics[f'{dataset}x{scale} {metric}'] = {\n                'keys': [f'{dataset}x{scale}/{metric}'],\n                'tolerance': 0.1,\n                'rule': 'larger'\n            }\nMETRICS_MAPPING.update(liif_metrics)\n\n\ndef filter_metric(metric_mapping, summary_data):\n\n    used_metric = dict()\n    for metric, metric_info in metric_mapping.items():\n        for data_dict in summary_data.values():\n            if metric in data_dict:\n                used_metric[metric] = metric_info\n                break\n\n    return used_metric\n"
  },
  {
    "path": ".dev_scripts/task_mapping.py",
    "content": "TASK_MAPPING = {\n    'Inpainting': [\n        'aot-gan',\n        'deepfillv1',\n        'deepfillv2',\n        'global_local',\n        'partial_conv',\n    ],\n    'Matting': [\n        'dim',\n        'gca',\n        'indexnet',\n    ],\n    'Restoreration': [\n        'srcnn',\n        'srresnet_srgan',\n        'edsr',\n        'esrgan',\n        'rdn',\n        'dic',\n        'ttsr',\n        'glean',\n    ],\n    'LIIF': ['liif'],\n    'Video_restoration': [\n        'edvr',\n        'tof',\n        'tdan',\n        'basicvsr',\n        'basicvsr_plusplus',\n        'iconvsr',\n        'real_basicvsr',\n    ],\n    'Video_interpolation': [\n        'cain',\n        'flavr',\n        'tof',\n    ]\n}\n"
  },
  {
    "path": ".dev_scripts/test_benchmark.py",
    "content": "import argparse\nimport os\nimport os.path as osp\nimport pickle\nimport re\nfrom collections import OrderedDict, defaultdict\nfrom datetime import datetime\nfrom importlib.machinery import SourceFileLoader\nfrom pathlib import Path\n\nfrom job_watcher import start_from_proc\nfrom metric_mapping import METRICS_MAPPING, filter_metric\nfrom modelindex.load_model_index import load\nfrom rich.console import Console\nfrom rich.syntax import Syntax\nfrom rich.table import Table\nfrom task_mapping import TASK_MAPPING\n\nconsole = Console()\nMMagic_ROOT = Path(__file__).absolute().parents[1]\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"Test all models' accuracy in model-index.yml\")\n    parser.add_argument(\n        'partition', type=str, help='Cluster partition to use.')\n    parser.add_argument('checkpoint_root', help='Checkpoint file root path.')\n    parser.add_argument(\n        '--job-name', type=str, default=' ', help='Slurm job name prefix')\n    parser.add_argument('--port', type=int, default=29666, help='dist port')\n    parser.add_argument(\n        '--use-ceph-config',\n        action='store_true',\n        default=False,\n        help='Use ceph configs or not.')\n    parser.add_argument(\n        '--models', nargs='+', type=str, help='Specify model names to run.')\n    parser.add_argument(\n        '--work-dir',\n        default='work_dirs/benchmark_test',\n        help='the dir to save metric')\n    parser.add_argument(\n        '--run', action='store_true', help='run script directly')\n    parser.add_argument(\n        '--local',\n        action='store_true',\n        help='run at local instead of cluster.')\n    parser.add_argument(\n        '--mail', type=str, help='Mail address to watch test status.')\n    parser.add_argument(\n        '--mail-type',\n        nargs='+',\n        default=['BEGIN'],\n        choices=['NONE', 'BEGIN', 'END', 'FAIL', 'REQUEUE', 'ALL'],\n        help='Mail address to watch test status.')\n    parser.add_argument(\n        '--quotatype',\n        default=None,\n        choices=['reserved', 'auto', 'spot'],\n        help='Quota type, only available for phoenix-slurm>=0.2')\n    parser.add_argument(\n        '--summary',\n        action='store_true',\n        help='Summarize benchmark test results.')\n    parser.add_argument(\n        '--by-task',\n        action='store_true',\n        help='Summairze benchmark results by task.')\n    parser.add_argument('--save', action='store_true', help='Save the summary')\n\n    group_parser = parser.add_mutually_exclusive_group()\n    group_parser.add_argument(\n        '--P0', action='store_true', help='Whether test model in P0 list')\n    group_parser.add_argument(\n        '--model-list',\n        type=str,\n        default='',\n        help='Path of algorithm list to load')\n    args = parser.parse_args()\n    return args\n\n\ndef create_test_job_batch(commands, model_info, args, port, script_name):\n    config_http_prefix_blob = ('https://github.com/open-mmlab/mmagic/'\n                               'blob/main/')\n    config_http_prefix_tree = ('https://github.com/open-mmlab/mmagic/'\n                               'tree/main/')\n    fname = model_info.name\n\n    config = model_info.config\n    if config.startswith('http'):\n        config = config.replace(config_http_prefix_blob, './')\n        config = config.replace(config_http_prefix_tree, './')\n    if args.use_ceph_config:\n        config = config.replace('configs', 'configs_ceph')\n\n    config = Path(config)\n    assert config.exists(), f'{fname}: {config} not found.'\n\n    http_prefix_short = 'https://download.openmmlab.com/mmediting/'\n    model_weight_url = model_info.weights\n\n    if model_weight_url.startswith(http_prefix_short):\n        model_name = model_weight_url[len(http_prefix_short):]\n    elif model_weight_url == '':\n        print(f'{fname} weight is missing')\n        return None\n    else:\n        raise ValueError(f'Unknown url prefix. \\'{model_weight_url}\\'')\n\n    model_name_split = model_name.split('/')\n    if len(model_name_split) == 3:  # 'TASK/METHOD/MODEL.pth'\n        # remove task name\n        model_name = osp.join(*model_name_split[1:])\n    else:\n        model_name = osp.join(*model_name_split)\n\n    if 's3://' in args.checkpoint_root:\n        from mmengine.fileio import FileClient\n        from petrel_client.common.exception import AccessDeniedError\n        file_client = FileClient.infer_client(uri=args.checkpoint_root)\n        checkpoint = file_client.join_path(args.checkpoint_root, model_name)\n        try:\n            exists = file_client.exists(checkpoint)\n        except AccessDeniedError:\n            exists = False\n    else:\n        checkpoint_root = Path(args.checkpoint_root)\n        checkpoint = checkpoint_root / model_name\n        exists = checkpoint.exists()\n    if not exists:\n        print(f'WARNING: {fname}: {checkpoint} not found.')\n        return None\n\n    job_name = f'{args.job_name}_{fname}'.strip('_')\n    work_dir = Path(args.work_dir) / fname\n    work_dir.mkdir(parents=True, exist_ok=True)\n    result_file = work_dir / 'result.pkl'\n\n    if args.mail is not None and 'NONE' not in args.mail_type:\n        mail_cfg = (f'#SBATCH --mail {args.mail}\\n'\n                    f'#SBATCH --mail-type {args.mail_type}\\n')\n    else:\n        mail_cfg = ''\n\n    if args.quotatype is not None:\n        quota_cfg = f'#SBATCH --quotatype {args.quotatype}\\n'\n    else:\n        quota_cfg = ''\n\n    launcher = 'none' if args.local else 'slurm'\n    runner = 'python' if args.local else 'srun python'\n\n    # NOTE: set gpus as 2\n    job_script = (f'#!/bin/bash\\n'\n                  f'#SBATCH --output {work_dir}/job.%j.out\\n'\n                  f'#SBATCH --partition={args.partition}\\n'\n                  f'#SBATCH --job-name {job_name}\\n'\n                  f'#SBATCH --gres=gpu:2\\n'\n                  f'{mail_cfg}{quota_cfg}'\n                  f'#SBATCH --ntasks-per-node=2\\n'\n                  f'#SBATCH --ntasks=2\\n'\n                  f'#SBATCH --cpus-per-task=16\\n\\n'\n                  f'export MASTER_PORT={port}\\n'\n                  f'export CUBLAS_WORKSPACE_CONFIG=:4096:8\\n'\n                  f'{runner} -u {script_name} {config} {checkpoint} '\n                  f'--work-dir={work_dir} '\n                  f'--out={result_file} '\n                  f'--launcher={launcher}\\n')\n\n    with open(work_dir / 'job.sh', 'w') as f:\n        f.write(job_script)\n\n    commands.append(f'echo \"{config}\"')\n    commands.append(f'echo \"{work_dir}\"')\n    if args.local:\n        commands.append(f'bash {work_dir}/job.sh')\n    else:\n        commands.append(f'sbatch {work_dir}/job.sh')\n\n    return work_dir / 'job.sh'\n\n\ndef test(args):\n    # parse model-index.yml\n    model_index_file = MMagic_ROOT / 'model-index.yml'\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n    models = OrderedDict({model.name: model for model in model_index.models})\n\n    script_name = osp.join('tools', 'test.py')\n    port = args.port\n\n    commands = []\n    if args.models:\n        patterns = [re.compile(pattern) for pattern in args.models]\n        filter_models = {}\n        for k, v in models.items():\n            if any([re.match(pattern, k) for pattern in patterns]):\n                filter_models[k] = v\n        if len(filter_models) == 0:\n            print('No model found, please specify models in:')\n            print('\\n'.join(models.keys()))\n            return\n        models = filter_models\n\n    # load model list\n    if args.P0:\n        file_list = osp.join(osp.dirname(__file__), 'p0_test_list.py')\n    elif args.model_list:\n        file_list = args.model_list\n    else:\n        file_list = None\n\n    if file_list:\n        test_list = SourceFileLoader('model_list',\n                                     file_list).load_module().model_list\n    else:\n        test_list = None\n\n    preview_script = ''\n    for model_info in models.values():\n\n        if model_info.results is None:\n            continue\n\n        if test_list is not None and model_info.name not in test_list:\n            continue\n\n        script_path = create_test_job_batch(commands, model_info, args, port,\n                                            script_name)\n        preview_script = script_path or preview_script\n        port += 1\n\n    command_str = '\\n'.join(commands)\n\n    preview = Table()\n    preview.add_column(str(preview_script))\n    preview.add_column('Shell command preview')\n    preview.add_row(\n        Syntax.from_path(\n            preview_script,\n            background_color='default',\n            line_numbers=True,\n            word_wrap=True),\n        Syntax(\n            command_str,\n            'bash',\n            background_color='default',\n            line_numbers=True,\n            word_wrap=True))\n    console.print(preview)\n\n    if args.run:\n        proc = os.popen(command_str)\n        job_name_list = start_from_proc(args.work_dir, proc)\n        history_log = datetime.now().strftime('test-%Y%m%d-%H%M%S') + '.log'\n        with open(history_log, 'w') as fp:\n            fp.write(args.work_dir + '\\n')\n            for job in job_name_list:\n                fp.write(job + '\\n')\n\n        cache_path = osp.expanduser(osp.join('~', '.task_watcher'))\n        # print(cache_path)\n        os.makedirs(cache_path, exist_ok=True)\n        with open(osp.join(cache_path, 'latest.log'), 'w') as fp:\n            fp.write(args.work_dir + '\\n')\n            for job in job_name_list:\n                fp.write(job + '\\n')\n        print(f'Have saved job submission history in {history_log}')\n    else:\n        console.print('Please set \"--run\" to start the job')\n\n\ndef show_summary(summary_data,\n                 models_map,\n                 work_dir,\n                 name='test_benchmark_summary',\n                 save=False):\n    # table = Table(title='Test Benchmark Regression Summary')\n    table_title = name.replace('_', ' ')\n    table_title = table_title.capitalize()\n    table = Table(title=table_title)\n    table.add_column('Model')\n    md_header = ['Model']\n\n    used_metrics = filter_metric(METRICS_MAPPING, summary_data)\n    for metric in used_metrics:\n        table.add_column(f'{metric} (expect)')\n        table.add_column(f'{metric}')\n        md_header.append(f'{metric} (expect)')\n        md_header.append(f'{metric}')\n    table.add_column('Date')\n    md_header.append('Config')\n\n    def set_color(value, expect, tolerance, rule):\n        if value > expect + tolerance:\n            return 'green' if rule == 'larger' else 'red'\n        elif value < expect - tolerance:\n            return 'red' if rule == 'larger' else 'green'\n        else:\n            return 'white'\n\n    md_rows = ['| ' + ' | '.join(md_header) + ' |\\n']\n    md_rows.append('|:' + ':|:'.join(['---'] * len(md_header)) + ':|\\n')\n\n    for model_name, summary in summary_data.items():\n        row = [model_name]\n        md_row = [model_name]\n        for metric_key in used_metrics:\n            if metric_key in summary:\n                metric = summary[metric_key]\n                expect = round(metric['expect'], 2)\n                result = round(metric['result'], 2)\n                tolerance = metric['tolerance']\n                rule = metric['rule']\n                color = set_color(result, expect, tolerance, rule)\n                row.append(f'{expect:.2f}')\n                row.append(f'[{color}]{result:.2f}[/{color}]')\n                md_row.append(f'{expect:.4f}')\n                md_row.append(f'{result:.4f}')\n            else:\n                row.extend([''] * 2)\n                md_row.extend([''] * 2)\n        if 'date' in summary:\n            row.append(summary['date'])\n            md_row.append(summary['date'])\n        else:\n            row.append('')\n            md_row.append('')\n        table.add_row(*row)\n\n        # add config to row\n        model_info = models_map[model_name]\n        md_row.append(model_info.config)\n        md_rows.append('| ' + ' | '.join(md_row) + ' |\\n')\n\n    console.print(table)\n\n    if save:\n        summary_path = work_dir / f'{name}.md'\n        with open(summary_path, 'w') as file:\n            file.write('# Test Benchmark Regression Summary\\n')\n            file.writelines(md_rows)\n\n\ndef summary(args):\n    model_index_file = MMagic_ROOT / 'model-index.yml'\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n    models = OrderedDict({model.name: model for model in model_index.models})\n\n    work_dir = Path(args.work_dir)\n\n    if args.models:\n        patterns = [re.compile(pattern) for pattern in args.models]\n        filter_models = {}\n        for k, v in models.items():\n            if any([re.match(pattern, k) for pattern in patterns]):\n                filter_models[k] = v\n        if len(filter_models) == 0:\n            print('No model found, please specify models in:')\n            print('\\n'.join(models.keys()))\n            return\n        models = filter_models\n\n    summary_data = {}\n    task_summary_data = defaultdict(dict)\n    for model_name, model_info in models.items():\n\n        if model_info.results is None:\n            continue\n\n        # Skip if not found result file.\n        result_file = work_dir / model_name / 'result.pkl'\n        if not result_file.exists():\n            summary_data[model_name] = {}\n            continue\n\n        with open(result_file, 'rb') as file:\n            results = pickle.load(file)\n        date = datetime.fromtimestamp(result_file.lstat().st_mtime)\n\n        expect_metrics = model_info.results[0].metrics\n\n        # extract metrics\n        summary = {'date': date.strftime('%Y-%m-%d')}\n        for key_yml, value_yml in METRICS_MAPPING.items():\n            key_results = value_yml['keys']\n            tolerance = value_yml['tolerance']\n            rule = value_yml['rule']\n\n            for key_result in key_results:\n                if key_yml in expect_metrics and key_result in results:\n                    expect_result = float(expect_metrics[key_yml])\n                    result = float(results[key_result])\n                    summary[key_yml] = dict(\n                        expect=expect_result,\n                        result=result,\n                        tolerance=tolerance,\n                        rule=rule)\n\n        summary_data[model_name] = summary\n\n        in_collection = model_info.data['In Collection']\n        for task, collection_list in TASK_MAPPING.items():\n            if in_collection.upper() in [c.upper() for c in collection_list]:\n                task_summary_data[task][model_name] = summary\n                break\n\n    if args.by_task:\n        for task_name, data in task_summary_data.items():\n            show_summary(\n                data, models, work_dir, f'{task_name}_summary', save=args.save)\n\n    show_summary(summary_data, models, work_dir, save=args.save)\n\n\ndef main():\n    args = parse_args()\n\n    if args.summary:\n        summary(args)\n    else:\n        test(args)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": ".dev_scripts/test_benchmark.yml",
    "content": "cases:\n- name: controlnet-1xb1-fill50k\n  params:\n    config: configs/controlnet/controlnet-1xb1-fill50k.py\n    cpus_per_node: 16\n    gpus: 1\n    gpus_per_node: 1\n\n- name: dreambooth\n  params:\n    config: configs/dreambooth/dreambooth.py\n    cpus_per_node: 16\n    gpus: 1\n    gpus_per_node: 1\n\n- name: basicvsr-pp_c64n7_8xb1-600k_reds4\n  params:\n    checkpoint: basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n    config: configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n    cpus_per_node: 16\n    gpus: 4\n    gpus_per_node: 4\n  results:\n    dataset: REDS4(BIx4)\n    eval:\n    - PSNR\n    - SSIM\n    metrics:\n      PSNR (RGB): 32.3855\n      SSIM (RGB): 0.9069\n\n- name: realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds\n  params:\n    checkpoint: realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n    config: configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: REDS\n    eval:\n    - NIQE\n    metrics:\n      NIQE (Y): 3.7662\n\n- name: stylegan2_c2_8xb4-800kiters_ffhq-256x256\n  params:\n    checkpoint: stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth\n    config: configs/styleganv2/stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py\n    cpus_per_node: 4\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: FFHQ256\n    metrics:\n      FID-50k: 3.992\n\n- name: deepfillv2_8xb2_celeba-256x256\n  params:\n    checkpoint: deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth\n    config: configs/deepfillv2/deepfillv2_8xb2_celeba-256x256.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: CelebA-val\n    metrics:\n      PSNR: 25.721\n      SSIM: 0.871\n      l1 error: 5.411\n\n- name: realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost\n  params:\n    checkpoint: realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth\n    config: configs/real_esrgan/realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: df2k_ost\n    metrics:\n      PSNR: 28.0297\n      SSIM: 0.8236\n\ncluster_num: '2'\ndefault_floating_range: 1.0\nmodel_floating_ranges: {}\npartition: mm_lol\nrepo: mmagic\nbranch: test\ntask_type: test\nthird_part_libs: []\n"
  },
  {
    "path": ".dev_scripts/train_benchmark.py",
    "content": "import argparse\nimport os\nimport os.path as osp\nimport pickle\nimport re\nfrom collections import OrderedDict\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom job_watcher import start_from_proc\nfrom modelindex.load_model_index import load\nfrom rich.console import Console\nfrom rich.syntax import Syntax\nfrom rich.table import Table\nfrom tqdm import tqdm\nfrom utils import filter_jobs, parse_job_list_from_file\n\nconsole = Console()\nMMAGIC_ROOT = Path(__file__).absolute().parents[1]\n\n# key-in-metafile: key-in-results.pkl\nMETRICS_MAP = {\n    'SWD': {\n        'keys': ['SWD/avg'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'MS-SSIM': {\n        'keys': ['MS-SSIM'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'FID': {\n        'keys': ['FID-Full-50k/fid'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'FID50k': {\n        'keys': ['FID-Full-50k/fid'],\n        'tolerance': 0.1,\n        'rule': 'less'\n    },\n    'IS': {\n        'keys': ['IS-50k/is'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'IS50k': {\n        'keys': ['IS-50k/is'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'Precision50k': {\n        'keys': ['PR-50K/precision'],\n        'tolerance': 0.1,\n        'rule': 'large'\n    },\n    'Recall50k': {\n        'keys': ['PR-50K/recall'],\n        'tolerance': 0.1,\n        'rule': 'large'\n    },\n    'Precision10k': {\n        'keys': ['PR-10K/precision'],\n        'tolerance': 0.1,\n        'rule': 'large'\n    },\n    'Recall10k': {\n        'keys': ['PR-10K/recall'],\n        'tolerance': 0.1,\n        'rule': 'large'\n    },\n    # 'PPL': {},  # TODO: no ppl in metafiles?\n    'EQ-R': {\n        'keys': ['EQ/eqr'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n    'EQ-T': {\n        'keys': ['EQ/eqt_int'],\n        'tolerance': 0.1,\n        'rule': 'larger'\n    },\n}\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description=\"Train models' accuracy in model-index.yml\")\n    parser.add_argument(\n        'partition', type=str, help='Cluster partition to use.')\n    parser.add_argument('--skip', type=str, default=None)\n    parser.add_argument('--skip-list', default=None)\n    parser.add_argument('--rerun', type=str, default=None)\n    parser.add_argument(\n        '--rerun-fail', action='store_true', help='only rerun failed tasks')\n    parser.add_argument(\n        '--rerun-cancel', action='store_true', help='only rerun cancel tasks')\n    parser.add_argument('--rerun-list', default=None)\n    parser.add_argument('--gpus-per-job', type=int, default=None)\n    parser.add_argument('--cpus-per-job', type=int, default=16)\n    parser.add_argument(\n        '--amp', action='store_true', help='Whether to use amp.')\n    parser.add_argument(\n        '--resume', action='store_true', help='Whether to resume checkpoint.')\n    parser.add_argument(\n        '--job-name', type=str, default=' ', help='Slurm job name prefix')\n    parser.add_argument('--port', type=int, default=29666, help='dist port')\n    parser.add_argument(\n        '--config-dir',\n        type=str,\n        default='configs_ceph',\n        help='Use ceph configs or not.')\n    parser.add_argument(\n        '--models', nargs='+', type=str, help='Specify model names to run.')\n    parser.add_argument(\n        '--work-dir',\n        default='work_dirs/benchmark_train',\n        help='the dir to save metric')\n    parser.add_argument(\n        '--deterministic',\n        action='store_true',\n        help='Whether set `deterministic` during training.')\n    parser.add_argument(\n        '--run', action='store_true', help='run script directly')\n    parser.add_argument(\n        '--local',\n        action='store_true',\n        help='run at local instead of cluster.')\n    parser.add_argument(\n        '--mail', type=str, help='Mail address to watch train status.')\n    parser.add_argument(\n        '--mail-type',\n        nargs='+',\n        default=['BEGIN'],\n        choices=['NONE', 'BEGIN', 'END', 'FAIL', 'REQUEUE', 'ALL'],\n        help='Mail address to watch train status.')\n    parser.add_argument(\n        '--quotatype',\n        default=None,\n        choices=['reserved', 'auto', 'spot'],\n        help='Quota type, only available for phoenix-slurm>=0.2')\n    parser.add_argument(\n        '--summary',\n        action='store_true',\n        help='Summarize benchmark train results.')\n    parser.add_argument('--save', action='store_true', help='Save the summary')\n\n    args = parser.parse_args()\n\n    if args.skip is not None:\n        with open(args.skip, 'r') as fp:\n            skip_list = fp.readlines()\n            skip_list = [j.split('\\n')[0] for j in skip_list]\n            args.skip_list = skip_list\n            print('skip_list: ', args.skip_list)\n    elif args.rerun is not None:\n        job_id_list_full, job_name_list_full = parse_job_list_from_file(\n            args.rerun)\n        filter_target = []\n\n        if args.rerun_fail:\n            filter_target += ['FAILED']\n        if args.rerun_cancel:\n            filter_target += ['CANCELLED']\n\n        _, job_name_list = filter_jobs(\n            job_id_list_full,\n            job_name_list_full,\n            filter_target,\n            show_table=True,\n            table_name='Rerun List')\n        args.rerun_list = job_name_list\n\n    return args\n\n\ndef create_train_job_batch(commands, model_info, args, port, script_name):\n    config_http_prefix_blob = ('https://github.com/open-mmlab/mmagic/'\n                               'blob/main/')\n    config_http_prefix_tree = ('https://github.com/open-mmlab/mmagic/'\n                               'tree/main/')\n    fname = model_info.name\n\n    config = model_info.config\n    if config.startswith('http'):\n        config = config.replace(config_http_prefix_blob, './')\n        config = config.replace(config_http_prefix_tree, './')\n\n    config = config.replace('configs', args.config_dir)\n\n    config = Path(config)\n    assert config.exists(), f'{fname}: {config} not found.'\n\n    try:\n        n_gpus = int(model_info.metadata.data['GPUs'].split()[0])\n    except Exception:\n        if 'official' in model_info.config:\n            return None\n        else:\n            pattern = r'\\d+xb\\d+'\n            parse_res = re.search(pattern, config.name)\n            if not parse_res:\n                # defaults to use 1 gpu\n                n_gpus = 1\n            else:\n                n_gpus = int(parse_res.group().split('x')[0])\n\n    if args.gpus_per_job is not None:\n        n_gpus = min(args.gpus_per_job, n_gpus)\n\n    job_name = f'{args.job_name}_{fname}'\n    if (args.skip_list is not None) and model_info.name in args.skip_list:\n        return None\n    if (args.rerun_list is not None) and (model_info.name\n                                          not in args.rerun_list):\n        return None\n\n    work_dir = Path(args.work_dir) / fname\n    work_dir.mkdir(parents=True, exist_ok=True)\n\n    if args.mail is not None and 'NONE' not in args.mail_type:\n        mail_cfg = (f'#SBATCH --mail {args.mail}\\n'\n                    f'#SBATCH --mail-type {args.mail_type}\\n')\n    else:\n        mail_cfg = ''\n\n    if args.quotatype is not None:\n        quota_cfg = f'#SBATCH --quotatype {args.quotatype}\\n'\n    else:\n        quota_cfg = ''\n\n    launcher = 'none' if args.local or n_gpus == 0 else 'slurm'\n    runner = 'python' if args.local else 'srun python'\n\n    job_script = (f'#!/bin/bash\\n'\n                  f'#SBATCH --output {work_dir}/job.%j.out\\n'\n                  f'#SBATCH --partition={args.partition}\\n'\n                  f'#SBATCH --job-name {job_name}\\n'\n                  f'{mail_cfg}{quota_cfg}')\n\n    if n_gpus > 0:\n        job_script += (f'#SBATCH --gres=gpu:{n_gpus}\\n'\n                       f'#SBATCH --ntasks-per-node={min(n_gpus, 8)}\\n'\n                       f'#SBATCH --ntasks={n_gpus}\\n'\n                       f'#SBATCH --cpus-per-task={args.cpus_per_job}\\n\\n')\n    else:\n        job_script += '\\n\\n' + 'export CUDA_VISIBLE_DEVICES=-1\\n'\n\n    if args.deterministic:\n        job_script += 'export CUBLAS_WORKSPACE_CONFIG=:4096:8\\n'\n\n    job_script += (f'export MASTER_PORT={port}\\n'\n                   f'{runner} -u {script_name} {config} '\n                   f'--work-dir={work_dir} '\n                   f'--launcher={launcher}')\n\n    if args.resume:\n        job_script += '  --resume '\n\n    if args.amp:\n        job_script += ' --amp  '\n\n    if args.deterministic:\n        job_script += ' --cfg-options randomness.deterministic=True'\n\n    job_script += '\\n'\n\n    with open(work_dir / 'job.sh', 'w') as f:\n        f.write(job_script)\n\n    commands.append(f'echo \"{config}\"')\n    commands.append(f'echo \"{work_dir}\"')\n    if args.local:\n        commands.append(f'bash {work_dir}/job.sh')\n    else:\n        commands.append(f'sbatch {work_dir}/job.sh')\n\n    return work_dir / 'job.sh'\n\n\ndef train(args):\n    # parse model-index.yml\n    model_index_file = MMAGIC_ROOT / 'model-index.yml'\n\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n    models = OrderedDict({model.name: model for model in model_index.models})\n\n    script_name = osp.join('tools', 'train.py')\n    port = args.port\n\n    commands = []\n    if args.models:\n        patterns = [re.compile(pattern) for pattern in args.models]\n        filter_models = {}\n        for k, v in models.items():\n            if any([re.match(pattern, k) for pattern in patterns]):\n                filter_models[k] = v\n        if len(filter_models) == 0:\n            print('No model found, please specify models in:')\n            print('\\n'.join(models.keys()))\n            return\n        models = filter_models\n\n    preview_script = ''\n    pbar = tqdm(models.values())\n    for model_info in pbar:\n\n        if model_info.results is None:\n            continue\n\n        model_name = model_info.name\n        pbar.set_description(model_name)\n        if 'cvt' in model_name:\n            print(f'Skip converted config: {model_name} ({model_info.config})')\n            continue\n        script_path = create_train_job_batch(commands, model_info, args, port,\n                                             script_name)\n        if script_path is not None:\n            preview_script = script_path or preview_script\n            port += 1\n\n    command_str = '\\n'.join(commands)\n\n    preview = Table()\n    preview.add_column(str(preview_script))\n    preview.add_column('Shell command preview')\n    preview.add_row(\n        Syntax.from_path(\n            preview_script,\n            background_color='default',\n            line_numbers=True,\n            word_wrap=True),\n        Syntax(\n            command_str,\n            'bash',\n            background_color='default',\n            line_numbers=True,\n            word_wrap=True))\n    console.print(preview)\n\n    if args.run:\n        proc = os.popen(command_str)\n        job_name_list = start_from_proc(args.work_dir, proc)\n        history_log = datetime.now().strftime('train-%Y%m%d-%H%M%S') + '.log'\n        with open(history_log, 'w') as fp:\n            for job in job_name_list:\n                fp.write(job + '\\n')\n        fp.close()\n        print(f'Have saved job submission history in {history_log}')\n\n    else:\n        console.print('Please set \"--run\" to start the job')\n\n\ndef show_summary(summary_data, models_map, work_dir, save=False):\n    table = Table(title='Train Benchmark Regression Summary')\n    table.add_column('Model')\n    md_header = ['Model']\n    for metric in METRICS_MAP:\n        table.add_column(f'{metric} (expect)')\n        table.add_column(f'{metric}')\n        md_header.append(f'{metric} (expect)')\n        md_header.append(f'{metric}')\n    table.add_column('Date')\n    md_header.append('Config')\n\n    def set_color(value, expect, tolerance, rule):\n        if value > expect + tolerance:\n            return 'green' if rule == 'larger' else 'red'\n        elif value < expect - tolerance:\n            return 'red' if rule == 'larger' else 'green'\n        else:\n            return 'white'\n\n    md_rows = ['| ' + ' | '.join(md_header) + ' |\\n']\n    md_rows.append('|:' + ':|:'.join(['---'] * len(md_header)) + ':|\\n')\n\n    for model_name, summary in summary_data.items():\n        row = [model_name]\n        md_row = [model_name]\n        for metric_key in METRICS_MAP:\n            if metric_key in summary:\n                metric = summary[metric_key]\n                expect = round(metric['expect'], 2)\n                result = round(metric['result'], 2)\n                tolerance = metric['tolerance']\n                rule = metric['rule']\n                color = set_color(result, expect, tolerance, rule)\n                row.append(f'{expect:.2f}')\n                row.append(f'[{color}]{result:.2f}[/{color}]')\n                md_row.append(f'{expect:.2f}')\n                md_row.append(f'{result:.2f}')\n            else:\n                row.extend([''] * 2)\n                md_row.extend([''] * 2)\n        if 'date' in summary:\n            row.append(summary['date'])\n            md_row.append(summary['date'])\n        else:\n            row.append('')\n            md_row.append('')\n        table.add_row(*row)\n\n        # add config to row\n        model_info = models_map[model_name]\n        md_row.append(model_info.config)\n        md_rows.append('| ' + ' | '.join(md_row) + ' |\\n')\n\n    console.print(table)\n\n    if save:\n        summary_path = work_dir / 'train_benchmark_summary.md'\n        with open(summary_path, 'w') as file:\n            file.write('# Train Benchmark Regression Summary\\n')\n            file.writelines(md_rows)\n\n\ndef summary(args):\n    model_index_file = MMAGIC_ROOT / 'model-index.yml'\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n    models = OrderedDict({model.name: model for model in model_index.models})\n\n    work_dir = Path(args.work_dir)\n\n    if args.models:\n        patterns = [re.compile(pattern) for pattern in args.models]\n        filter_models = {}\n        for k, v in models.items():\n            if any([re.match(pattern, k) for pattern in patterns]):\n                filter_models[k] = v\n        if len(filter_models) == 0:\n            print('No model found, please specify models in:')\n            print('\\n'.join(models.keys()))\n            return\n        models = filter_models\n\n    summary_data = {}\n    for model_name, model_info in models.items():\n\n        if model_info.results is None:\n            continue\n\n        # Skip if not found result file.\n        result_file = work_dir / model_name / 'result.pkl'\n        if not result_file.exists():\n            summary_data[model_name] = {}\n            continue\n\n        with open(result_file, 'rb') as file:\n            results = pickle.load(file)\n        date = datetime.fromtimestamp(result_file.lstat().st_mtime)\n\n        expect_metrics = model_info.results[0].metrics\n\n        # extract metrics\n        summary = {'date': date.strftime('%Y-%m-%d')}\n        for key_yml, key_tolerance in METRICS_MAP.items():\n            key_results = key_tolerance['keys']\n            tolerance = key_tolerance['tolerance']\n            rule = key_tolerance['rule']\n\n            for key_result in key_results:\n                if key_yml in expect_metrics and key_result in results:\n                    expect_result = float(expect_metrics[key_yml])\n                    result = float(results[key_result])\n                    summary[key_yml] = dict(\n                        expect=expect_result,\n                        result=result,\n                        tolerance=tolerance,\n                        rule=rule)\n\n        summary_data[model_name] = summary\n\n    show_summary(summary_data, models, work_dir, args.save)\n    # if args.save:\n    #     save_summary(summary_data, models, work_dir)\n\n\ndef main():\n    args = parse_args()\n\n    if args.summary:\n        summary(args)\n    else:\n        train(args)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": ".dev_scripts/train_benchmark.yml",
    "content": "cases:\n- name: controlnet-1xb1-fill50k\n  params:\n    config: configs/controlnet/controlnet-1xb1-fill50k.py\n    cpus_per_node: 16\n    gpus: 1\n    gpus_per_node: 1\n\n- name: dreambooth\n  params:\n    config: configs/dreambooth/dreambooth.py\n    cpus_per_node: 16\n    gpus: 1\n    gpus_per_node: 1\n\n- name: basicvsr-pp_c64n7_8xb1-600k_reds4\n  params:\n    checkpoint: basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n    config: configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n    cpus_per_node: 16\n    gpus: 4\n    gpus_per_node: 4\n  results:\n    dataset: REDS4(BIx4)\n    eval:\n    - PSNR\n    - SSIM\n    metrics:\n      PSNR (RGB): 32.3855\n      SSIM (RGB): 0.9069\n\n- name: realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds\n  params:\n    checkpoint: realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n    config: configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: REDS\n    eval:\n    - NIQE\n    metrics:\n      NIQE (Y): 3.7662\n\n- name: stylegan2_c2_8xb4-800kiters_ffhq-256x256\n  params:\n    checkpoint: stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth\n    config: configs/styleganv2/stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py\n    cpus_per_node: 4\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: FFHQ256\n    metrics:\n      FID-50k: 3.992\n\n- name: deepfillv2_8xb2_celeba-256x256\n  params:\n    checkpoint: deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth\n    config: configs/deepfillv2/deepfillv2_8xb2_celeba-256x256.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: CelebA-val\n    metrics:\n      PSNR: 25.721\n      SSIM: 0.871\n      l1 error: 5.411\n\n- name: realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost\n  params:\n    checkpoint: realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth\n    checkpoint_url: https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth\n    config: configs/real_esrgan/realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py\n    cpus_per_node: 16\n    gpus: 8\n    gpus_per_node: 8\n  results:\n    dataset: df2k_ost\n    metrics:\n      PSNR: 28.0297\n      SSIM: 0.8236\n\ncluster_num: '2'\ndefault_floating_range: 1.0\nmodel_floating_ranges: {}\npartition: mm_lol\nrepo: mmagic\nbranch: test\ntask_type: train\nthird_part_libs: []\n"
  },
  {
    "path": ".dev_scripts/update_config_readme.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\n\n# This tool is used to update README.md and README_zh-CN.md in configs\n\nimport glob\nimport os\nimport posixpath as osp  # Even on windows, use posixpath\nimport re\nimport sys\n\nMMagic_ROOT = osp.dirname(osp.dirname(osp.dirname(__file__)))\n\n\ndef update_md(md_file):\n    \"\"\"Update README.md and README_zh-CN.md.\n\n    Args:\n        md_file (str): Path to .md file.\n    Returns:\n        Bool: If the target README.md file is different from the original.\n    \"\"\"\n    # See https://github.com/open-mmlab/mmagic/pull/798 for these comments\n    # unique_dict = generate_unique_name(md_file)\n\n    md_file = md_file.replace(os.sep, '/')\n    config_dir, _ = osp.split(md_file)\n    files = os.listdir(config_dir)\n    config_files = [file for file in files if file.endswith('.py')]\n\n    for readme in ['README.md', 'README_zh-CN.md']:\n\n        readme = osp.join(config_dir, readme)\n        changed = False\n\n        with open(readme, 'r', encoding='utf-8') as f:\n            data = f.read()\n\n        for config in config_files:\n\n            _, ext = osp.splitext(config)\n            if ext != '.py':\n                continue\n\n            re_config = config.replace('.', '\\\\.')\n            re_config = config.replace('-', '\\\\-')\n            re_result = re.search(rf'\\]\\(/(.*?)/{re_config}', data)\n            if re_result is None:\n                print(f'Warning: No {config} in {readme}')\n                continue\n            old_dir = re_result.groups()[0]\n            if old_dir != config_dir:\n                data = data.replace(old_dir, config_dir)\n                print(f'from {old_dir} to {config_dir}')\n                changed = True\n\n        if changed:\n            with open(readme, 'w', encoding='utf-8') as f:\n                f.write(data)\n\n    return False\n\n\nif __name__ == '__main__':\n    if len(sys.argv) <= 1:\n        configs_root = osp.join(MMagic_ROOT, 'configs')\n        file_list = glob.glob(\n            osp.join(configs_root, '**', '*README.md'), recursive=True)\n        file_list.sort()\n    else:\n        file_list = [\n            fn for fn in sys.argv[1:] if osp.basename(fn) == 'README.md'\n        ]\n\n    if not file_list:\n        sys.exit(0)\n\n    file_modified = False\n    for fn in file_list:\n        print(f'process {fn}')\n        file_modified |= update_md(fn)\n\n    sys.exit(1 if file_modified else 0)\n"
  },
  {
    "path": ".dev_scripts/update_model_index.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"This tool is used to update model-index.yml which is required by MIM, and\nwill be automatically called as a pre-commit hook. The updating will be\ntriggered if any change of model information (.md files in configs/) has been\ndetected before a commit.\n\nThe design of the metafile follows /wikcnz2ksDIyZiFM8iAMUoTmNHg.\nIt is forbidden to set value as `NULL`, `None` or empty list and str.\n\n`Collection`: indicates a algorithm (which may\n    contains multiple configs), e.g. Mask R-CNN\n    - `Name` (str): required\n    - `README` (str): optional\n    - `Paper` (dict): optional\n        - `URL` (str): required\n        - `Title` (str): required\n    - `Task` (List[str]): optional\n    - `Year` (int): optional\n    - `Metadata` (dict): optional\n        - `Architecture` (List[str]): optional\n        - `Training Data` (Union[str, List[str]]): optional\n        - `Epochs` (int): optional\n        - `Batch Size` (int): optional\n        - `Training Techniques` (List[str]): optional\n        - `Training Resources` (str): optional\n        - `FLOPs` (Union[int, float]): optional\n        - `Parameters` (int): optional\n        - `Training Time` (Union[int, float]): optional\n        - `Train time (s/iter)` (Union[int, float]): optional\n        - `Training Memory (GB)` (float): optional\n    - `Weights` (Union[str, List[str]]): optional\n\n`Model`: indicates a specific config\n    - `Name` (str): required, globally unique\n    - `In Collection` (str): required\n    - `Config` (str): required\n    - `Results` (List[dict]): required\n        - `Task` (str): required\n        - `Dataset` (str): required\n        - `Metrics` (dict): required\n    - `Weights` (str): optional\n    - `Metadata` (dict): optional\n        - `Architecture` (List[str]): optional\n        - `Training Resources` (str): optional\n        - `Training Data` (Union[str, List[str]]): optional\n        - `Epochs` (int): optional\n        - `Batch Size` (int): optional\n        - `Training Techniques` (List[str]): optional\n        - `FLOPs` (Union[int, float]): optional\n        - `Parameters` (int): optional\n        - `Training Time` (Union[int, float]): optional\n        - `Train time (s/iter)` (Union[int, float]): optional\n        - `Training Memory (GB)` (float): optional\n        - `inference time (ms/im)` (List[dict]): optional\n            - `value` (float): required\n            - `hardware` (str): required\n            - `backend` (str): required\n            - `batch size` (str): required\n            - `mode` (str): required, e.g., FP32, FP16, INT8, etc.\n            - `resolution` (Tuple(int, int)): required\n    - `Training Log` (str): optional\n    - `README` (str): optional\n    - `Paper` (dict): optional\n        - `URL` (str): required\n        - `Title` (str): required\n    - `Converted From` (dict): optional\n        - `Weights` (str): required\n        - `Code` (str): required\n    - `Code` (dict): optional\n        - `URL` (str): required\n        - `Version` (str): required\n    - `Image` (str): optional\n\nThe README.md file in MMagic follows following convention,\n    - `Model`: [name_in_the_paper](path_to_config)\n    - `Download`: [model](url_to_pre_trained_weights) | [log](url_to_log)\n\"\"\"\n\nimport glob\nimport posixpath as osp  # Even on windows, use posixpath\nimport re\nimport sys\n\nimport tqdm\nfrom modelindex.models.Collection import Collection\nfrom modelindex.models.Metadata import Metadata\nfrom modelindex.models.Model import Model\nfrom modelindex.models.Result import Result\nfrom utils import (collate_metrics, dump_yaml_and_check_difference,\n                   found_table, modelindex_to_dict)\n\nMMagic_ROOT = osp.dirname(osp.dirname(__file__))\nKEYWORDS = [\n    'Model',\n    'Dataset',\n    'Download',\n]\n\n\ndef parse_md(md_file):\n    \"\"\"Parse .md file and convert it to a .yml file which can be used for MIM.\n\n    Args:\n        md_file (str): Path to .md file.\n    Returns:\n        Bool: If the target YAML file is different from the original.\n    \"\"\"\n    readme = osp.relpath(md_file, MMagic_ROOT)\n    readme = readme.replace('\\\\', '/')  # for windows\n    collection = Collection()\n    collection_meta = Metadata()\n\n    # force utf-8 instead of system defined\n    with open(md_file, 'r', encoding='utf-8') as md:\n        lines = md.readlines()\n\n    # parse information for collection\n    name = lines[0][2:]\n    name, year = name.split('(', 1)\n    year = int(re.sub('[^0-9]', '', year))\n    collection_name = name.strip()\n    task_line = lines[4]\n    model_task = task_line.strip().split(':')[-1].strip()\n    model_task_list = model_task.lower().split(', ')\n\n    collection.name = collection_name\n    collection.readme = readme\n    collection.data['Year'] = year\n    collection.data['Task'] = model_task_list\n    collection_meta.architecture = [collection_name]\n\n    i = 0\n    model_list = {}\n    while i < len(lines):\n\n        # parse reference\n        if lines[i].startswith('> ['):\n            title, url = re.match(r'> \\[(.*)]\\((.*)\\)', lines[i]).groups()\n            collection.paper = dict(URL=url, Title=title)\n            i += 1\n\n        # parse table\n        elif found_table(lines, i):\n            cols = [col.strip() for col in lines[i].split('|')][1:-1]\n\n            # check required field for Model\n            try:\n                model_idx = cols.index('Model')\n                dataset_idx = cols.index('Dataset')\n                download_idx = cols.index('Download')\n                used_metrics = collate_metrics(cols)\n                if 'Task' in cols:\n                    task_idx = cols.index('Task')\n                else:\n                    task_idx = None\n            except Exception:\n                raise ValueError(\n                    f'required fields: Model, Dataset, Download '\n                    f'are not included in line {i+1} of {md_file}')\n\n            j = i + 2\n            # parse table for valid fields\n            while j < len(lines) and lines[j][0] == '|':\n                line = lines[j].split('|')[1:-1]\n\n                # name, in_collection, config of Model\n                assert line[model_idx].find(\n                    '](') >= 0, f'invalid {model_idx} in {line} for {md_file}.'\n                left = line[model_idx].index('](') + 2\n                right = line[model_idx].index(')', left)\n                config = line[model_idx][left:right].strip('./')\n                model_name = osp.splitext(osp.basename(config))[0]\n                if model_name in model_list:\n                    model = model_list[model_name]\n                else:\n                    model = Model(\n                        name=model_name,\n                        in_collection=collection_name,\n                        config=osp.join(\n                            osp.dirname(md_file), model_name + '.py'))\n                    model_list[model_name] = model\n\n                # find results in each row\n                dataset = line[dataset_idx].replace(' ', '')\n\n                metrics = {}\n                for metric_name, idx in used_metrics.items():\n                    value = line[idx]\n                    value = value.replace('*', '')\n                    if '/' not in value:\n                        try:\n                            value = value.split('(')[0]\n                            metrics[metric_name] = float(value)\n                        except ValueError:\n                            value = value.replace(' ', '')\n                    else:\n                        try:\n                            PSNR, SSIM = [float(d) for d in value.split('/')]\n                            metrics[metric_name] = dict(PSNR=PSNR, SSIM=SSIM)\n                        except ValueError:\n                            pass\n\n                task = model_task if task_idx is None else line[\n                    task_idx].strip()\n                assert ',' not in task, (\n                    f'Find \",\" in \"task\" field of \"{md_file}\" (line {j}). '\n                    'Please check your readme carefully.')\n                assert task.lower() in model_task_list, (\n                    f'Task \"{task}\" not in \"{model_task_list}\" in \"{md_file}\" '\n                    f'(line {j}). Please check your readme carefully.')\n\n                result = Result(task=task, dataset=dataset, metrics=metrics)\n                if model.results is None:\n                    model.results = result\n                else:\n                    model.results.data.append(result)\n\n                # check weights\n                if line[download_idx].find('](') >= 0:\n                    if line[download_idx].find('model](') >= 0:\n                        left = line[download_idx].index('model](') + 7\n                    else:\n                        left = line[download_idx].index('ckpt](') + 6\n                    right = line[download_idx].index(')', left)\n                    model.weights = line[download_idx][left:right]\n                j += 1\n            i = j\n\n        else:\n            i += 1\n\n    collection = modelindex_to_dict(collection)\n    models = [modelindex_to_dict(m) for n, m in model_list.items()]\n    assert len(models) > 0, f\"'no model is found in {md_file}'\"\n    result = {'Collections': [collection], 'Models': models}\n    yml_file = md_file.replace('README.md', 'metafile.yml')\n    is_different = dump_yaml_and_check_difference(result, yml_file)\n\n    return is_different\n\n\ndef update_model_index():\n    \"\"\"Update model-index.yml according to model .md files.\n\n    Returns:\n        Bool: If the updated model-index.yml is different from the original.\n    \"\"\"\n    configs_dir = osp.join(MMagic_ROOT, 'configs')\n    yml_files = glob.glob(osp.join(configs_dir, '**', '*.yml'), recursive=True)\n    yml_files.sort()\n\n    model_index = {\n        'Import': [\n            osp.relpath(yml_file, MMagic_ROOT).replace(\n                '\\\\', '/')  # force using / as path separators\n            for yml_file in yml_files\n        ]\n    }\n    model_index_file = osp.join(MMagic_ROOT, 'model-index.yml')\n    is_different = dump_yaml_and_check_difference(model_index,\n                                                  model_index_file)\n\n    return is_different\n\n\nif __name__ == '__main__':\n    if len(sys.argv) <= 1:\n        configs_root = osp.join(MMagic_ROOT, 'configs')\n        file_list = glob.glob(\n            osp.join(configs_root, '**', '*README.md'), recursive=True)\n        file_list.sort()\n    else:\n        file_list = [\n            fn for fn in sys.argv[1:] if osp.basename(fn) == 'README.md'\n        ]\n\n    if not file_list:\n        sys.exit(0)\n\n    file_modified = False\n    file_list = file_list\n    pbar = tqdm.tqdm(range(len(file_list)), initial=0, dynamic_ncols=True)\n    for fn in file_list:\n        file_modified |= parse_md(fn)\n        pbar.update(1)\n        pbar.set_description(f'processing {fn}')\n\n    file_modified |= update_model_index()\n\n    sys.exit(1 if file_modified else 0)\n"
  },
  {
    "path": ".dev_scripts/update_ut.py",
    "content": "import os\nimport os.path as osp\nfrom argparse import ArgumentParser\nfrom fnmatch import fnmatch\nfrom glob import glob\n\nfrom tqdm import tqdm\n\nparser = ArgumentParser()\nparser.add_argument('--src', type=str, default='mmagic')\nparser.add_argument('--dst', type=str, default='tests')\nparser.add_argument(\n    '--exclude',\n    nargs='+',\n    default=[\n        'mmagic/.mim', 'mmagic/registry.py', 'mmagic/version.py',\n        '__pycache__', '__init__', '**/__init__.py', '**/stylegan3_ops/*',\n        '**/conv2d_gradfix.py', '**/grid_sample_gradfix.py', '**/misc.py',\n        '**/upfirdn2d.py', '**/all_gather_layer.py', '**/typing.py'\n    ])\nargs = parser.parse_args()\n\n\ndef check_exclude(fn):\n    for pattern in args.exclude:\n        if fnmatch(fn, pattern):\n            return True\n    return False\n\n\ndef update_ut():\n\n    target_ut = []\n    missing_ut = []\n    blank_ut = []\n\n    file_list = glob('mmagic/**/*.py', recursive=True)\n\n    for f in tqdm(file_list):\n        if check_exclude(f):\n            continue\n\n        if osp.splitext(osp.basename(f))[0] != '__init__':\n\n            dirname = osp.dirname(f)\n            dirname = dirname.replace('__', '')\n            dirname = dirname.replace('mmagic', 'tests')\n            dirname = dirname.replace('/', '/test_')\n            os.makedirs(dirname, exist_ok=True)\n\n            basename = osp.basename(f)\n            basename = 'test_' + basename\n\n            dst_path = osp.join(dirname, basename)\n            target_ut.append(dst_path)\n            if not osp.exists(dst_path):\n                missing_ut.append(dst_path)\n                fp = open(dst_path, 'a')\n                fp.close()\n            else:\n                text_lines = open(dst_path, 'r').readlines()\n                if len(text_lines) <= 3:\n                    blank_ut.append(dst_path)\n\n    existing_ut = glob('tests/test_*/**/*.py', recursive=True)\n    additional_ut = list(set(existing_ut) - set(target_ut))\n\n    if len(additional_ut) > 0:\n        print('Additional UT:')\n        for f in additional_ut:\n            print(f)\n    if len(missing_ut) > 0:\n        print('Missing UT:')\n        for f in missing_ut:\n            print(f)\n    if len(blank_ut) > 0:\n        print('Blank UT:')\n        for f in blank_ut:\n            print(f)\n\n\nif __name__ == '__main__':\n    update_ut()\n"
  },
  {
    "path": ".dev_scripts/utils/__init__.py",
    "content": "from .job_util import (filter_jobs, get_info_from_id, parse_job_list,\n                       parse_job_list_from_file)\nfrom .modelindex import (collate_metrics, dump_yaml_and_check_difference,\n                         found_table, modelindex_to_dict)\n\n__all__ = [\n    'modelindex_to_dict', 'found_table', 'dump_yaml_and_check_difference',\n    'collate_metrics', 'parse_job_list', 'parse_job_list_from_file',\n    'get_info_from_id', 'filter_jobs'\n]\n"
  },
  {
    "path": ".dev_scripts/utils/job_util.py",
    "content": "import os\nimport os.path as osp\nfrom typing import Tuple\n\nfrom rich import print as pprint\nfrom rich.table import Table\n\n\ndef parse_job_list(job_list) -> Tuple[list, list]:\n    \"\"\"Parse task name and job id from list. All elements in `job_list` must.\n\n    be formatted as `JOBID @ JOBNAME`.\n\n    Args:\n        job_list (list[str]): Job list.\n\n    Returns:\n        Tuple[list, list]: Job ID list and Job name list.\n    \"\"\"\n    assert all([\n        ' @ ' in job for job in job_list\n    ]), ('Each line of job list must be formatted like \\'JOBID @ JOBNAME\\'.')\n    job_id_list, job_name_list = [], []\n    for job_info in job_list:\n        job_id, job_name = job_info.split(' @ ')\n        job_id_list.append(job_id)\n        job_name_list.append(job_name)\n    return job_id_list, job_name_list\n\n\ndef parse_job_list_from_file(job_list_file: str) -> Tuple[list, list]:\n    \"\"\"Parse job list from file and return a tuple contains list of job id and\n    job name.\n\n    Args:\n        job_list_file (str): The path to the file list.\n\n    Returns:\n        Tuple[list, list]: A tuple contains list of job id and job name.\n    \"\"\"\n    if not osp.exists(job_list_file):\n        return False\n    with open(job_list_file, 'r') as file:\n        job_list = [job.strip() for job in file.readlines()]\n    return parse_job_list(job_list)\n\n\ndef get_info_from_id(job_id: str) -> dict:\n    \"\"\"Get the basic information of a job id with `swatch examine` command.\n\n    Args:\n        job_id (str): The ID of the job.\n\n    Returns:\n        dict: A dict contains information of the corresponding job id.\n    \"\"\"\n    # NOTE: do not have exception handling here\n    info_stream = os.popen(f'swatch examine {job_id}')\n    info_str = [line.strip() for line in info_stream.readlines()]\n    status_info = info_str[2].split()\n    try:\n        status_dict = {\n            'JobID': status_info[0],\n            'JobName': status_info[1],\n            'Partition': status_info[2],\n            'NNodes': status_info[3],\n            'AllocCPUS': status_info[4],\n            'State': status_info[5]\n        }\n    except Exception:\n        print(job_id)\n        print(info_str)\n    return status_dict\n\n\ndef filter_jobs(job_id_list: list,\n                job_name_list: list,\n                select: list = ['FAILED'],\n                show_table: bool = False,\n                table_name: str = 'Filter Results') -> Tuple[list, list]:\n    \"\"\"Filter the job which status not belong to :attr:`select`.\n\n    Args:\n        job_id_list (list): The list of job ids.\n        job_name_list (list): The list of job names.\n        select (list, optional): Which kind of jobs will be selected.\n            Defaults to ['FAILED'].\n        show_table (bool, optional): Whether display the filter result in a\n            table. Defaults to False.\n        table_name (str, optional): The name of the table. Defaults to\n            'Filter Results'.\n\n    Returns:\n        Tuple[list]: A tuple contains selected job ids and job names.\n    \"\"\"\n    # if ignore is not passed, return the original id list and name list\n    if not select:\n        return job_id_list, job_name_list\n    filtered_id_list, filtered_name_list = [], []\n    job_info_list = []\n    for id_, name_ in zip(job_id_list, job_name_list):\n        info = get_info_from_id(id_)\n        job_info_list.append(info)\n        if info['State'] in select:\n            filtered_id_list.append(id_)\n            filtered_name_list.append(name_)\n\n    if show_table:\n        filter_table = Table(title=table_name)\n        for field in ['Name', 'ID', 'State', 'Is Selected']:\n            filter_table.add_column(field)\n        for id_, name_, info_ in zip(job_id_list, job_name_list,\n                                     job_info_list):\n            selected = '[green]True' \\\n                if info_['State'] in select else '[red]False'\n            filter_table.add_row(name_, id_, info_['State'], selected)\n        pprint(filter_table)\n    return filtered_id_list, filtered_name_list\n"
  },
  {
    "path": ".dev_scripts/utils/modelindex.py",
    "content": "import os.path as osp\n\nimport mmengine\nfrom modelindex.models.Collection import Collection\nfrom modelindex.models.Model import Model\n\n\ndef dump_yaml_and_check_difference(obj, file):\n    \"\"\"Dump object to a yaml file, and check if the file content is different\n    from the original.\n\n    Args:\n        obj (any): The python object to be dumped.\n        file (str): YAML filename to dump the object to.\n    Returns:\n        Bool: If the target YAML file is different from the original.\n    \"\"\"\n\n    str_dump = mmengine.dump(\n        obj, None, file_format='yaml', sort_keys=True,\n        line_break='\\n')  # force use LF\n\n    if osp.isfile(file):\n        file_exists = True\n        # print(f'    exist {file}')\n        with open(file, 'r', encoding='utf-8') as f:\n            str_orig = f.read()\n    else:\n        file_exists = False\n        str_orig = None\n\n    if file_exists and str_orig == str_dump:\n        is_different = False\n    else:\n        is_different = True\n        print(f'    update {file}')\n        with open(file, 'w', encoding='utf-8') as f:\n            f.write(str_dump)\n\n    return is_different\n\n\ndef collate_metrics(keys):\n    \"\"\"Collect metrics from the first row of the table.\n\n    Args:\n        keys (List): Elements in the first row of the table.\n\n    Returns:\n        dict: A dict of metrics.\n    \"\"\"\n    used_metrics = dict()\n    for idx, key in enumerate(keys):\n        if key in ['Model', 'Dataset', 'Training Resources', 'Download']:\n            continue\n        used_metrics[key] = idx\n    return used_metrics\n\n\ndef found_table(lines, i):\n    if i + 1 >= len(lines):\n        return False\n    if i - 2 < 0 or 'SKIP THIS TABLE' in lines[i - 2]:\n        return False\n    if lines[i][0] != '|':\n        return False\n\n    for c in ['| :', '|:', '|-']:\n        if c in lines[i + 1]:\n            return True\n    return False\n\n\ndef modelindex_to_dict(model):\n    if isinstance(model, Collection):\n        result = model.data\n        if model.metadata is not None:\n            result['Metadata'] = model.metadata.data\n    elif isinstance(model, Model):\n        result = model.data\n        if model.metadata is not None:\n            result['Metadata'] = model.metadata.data\n        if model.results is not None:\n            results_list = []\n            for r in model.results:\n                results_list.append(r.data)\n            result['Results'] = results_list\n    return result\n"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n- Using welcoming and inclusive language\n- Being respectful of differing viewpoints and experiences\n- Gracefully accepting constructive criticism\n- Focusing on what is best for the community\n- Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n- The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n- Trolling, insulting/derogatory comments, and personal or political attacks\n- Public or private harassment\n- Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n- Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at chenkaidev@gmail.com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n\n[homepage]: https://www.contributor-covenant.org\n"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "# Contributing to MMagic\n\nAll kinds of contributions are welcome, including but not limited to the following.\n\n- Fix typo or bugs\n- Add documentation or translate the documentation into other languages\n- Add new features and components\n\n## Workflow\n\n1. fork and pull the latest MMagic repository (MMagic)\n2. checkout a new branch (do not use master branch for PRs)\n3. commit your changes\n4. create a PR\n\n```{note}\nIf you plan to add some new features that involve large changes, it is encouraged to open an issue for discussion first.\n```\n\n## Code style\n\n### Python\n\nWe adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style.\n\nWe use the following tools for linting and formatting:\n\n- [flake8](https://github.com/PyCQA/flake8): A wrapper around some linter tools.\n- [isort](https://github.com/timothycrosley/isort): A Python utility to sort imports.\n- [yapf](https://github.com/google/yapf): A formatter for Python files.\n- [codespell](https://github.com/codespell-project/codespell): A Python utility to fix common misspellings in text files.\n- [mdformat](https://github.com/executablebooks/mdformat): Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.\n- [docformatter](https://github.com/myint/docformatter): A formatter to format docstring.\n\nStyle configurations can be found in [setup.cfg](/setup.cfg).\n\nWe use [pre-commit hook](https://pre-commit.com/) that checks and formats for `flake8`, `yapf`, `isort`, `trailing whitespaces`, `markdown files`,\nfixes `end-of-files`, `double-quoted-strings`, `python-encoding-pragma`, `mixed-line-ending`, sorts `requirments.txt` automatically on every commit.\nThe config for a pre-commit hook is stored in [.pre-commit-config](/.pre-commit-config.yaml).\n\nAfter you clone the repository, you will need to install initialize pre-commit hook.\n\n```shell\npip install -U pre-commit\n```\n\nFrom the repository folder\n\n```shell\npre-commit install\n```\n\nAfter this on every commit check code linters and formatter will be enforced.\n\n```{important}\nBefore you create a PR, make sure that your code lints and is formatted by yapf.\n```\n\n### C++ and CUDA\n\nWe follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1-bug-report.yml",
    "content": "name: \"🐞 Bug report\"\ndescription: \"Create a report to help us reproduce and fix the bug\"\nlabels: \"kind/bug,status/unconfirmed\"\ntitle: \"[Bug] \"\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        If you have already identified the reason, we strongly appreciate you creating a new PR to fix it [here](https://github.com/open-mmlab/mmagic/pulls)!\n        If this issue is about installing MMCV, please file an issue at [MMCV](https://github.com/open-mmlab/mmcv/issues/new/choose).\n        If you need our help, please fill in as much of the following form as you're able to.\n\n        **The less clear the description, the longer it will take to solve it.**\n\n  - type: checkboxes\n    attributes:\n      label: Prerequisite\n      description: Please check the following items before creating a new issue.\n      options:\n      - label: I have searched [Issues](https://github.com/open-mmlab/mmagic/issues) and [Discussions](https://github.com/open-mmlab/mmagic/discussions) but cannot get the expected help.\n        required: true\n      - label: I have read the [FAQ documentation](https://mmagic.readthedocs.io/en/latest/faq.html) but cannot get the expected help.\n        required: true\n      - label: The bug has not been fixed in the [latest version (main)](https://github.com/open-mmlab/mmagic) or [latest version (0.x)](https://github.com/open-mmlab/mmagic/tree/0.x).\n        required: true\n\n  - type: dropdown\n    id: task\n    attributes:\n      label: Task\n      description: The problem arises when\n      options:\n        - I'm using the official example scripts/configs for the officially supported tasks/models/datasets.\n        - I have modified the scripts/configs, or I'm working on my own tasks/models/datasets.\n    validations:\n      required: true\n\n  - type: dropdown\n    id: branch\n    attributes:\n      label: Branch\n      description: The problem arises when I'm working on\n      options:\n        - main branch https://github.com/open-mmlab/mmagic\n        - 0.x branch https://github.com/open-mmlab/mmagic/tree/0.x\n    validations:\n      required: true\n\n\n  - type: textarea\n    attributes:\n      label: Environment\n      description: |\n        Please run `python mmagic/utils/collect_env.py` to collect necessary environment information and copy-paste it here.\n        You may add additional information that may be helpful for locating the problem, such as\n          - How you installed PyTorch \\[e.g., pip, conda, source\\]\n          - Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.)\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Reproduces the problem - code sample\n      description: |\n        Please provide a code sample that reproduces the problem you ran into. It can be a Colab link or just a code snippet.\n      placeholder: |\n        ```python\n        # Sample code to reproduce the problem\n        ```\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Reproduces the problem - command or script\n      description: |\n        What command or script did you run?\n      placeholder: |\n        ```shell\n        The command or script you run.\n        ```\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Reproduces the problem - error message\n      description: |\n        Please provide the error message or logs you got, with the full traceback.\n      placeholder: |\n        ```\n        The error message or logs you got, with the full traceback.\n        ```\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Additional information\n      description: Tell us anything else you think we should know.\n      placeholder: |\n        1. What's your expected result?\n        2. What dataset did you use?\n        3. What do you think might be the reason?\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2-feature-request.yml",
    "content": "name: 🚀 Feature request\ndescription: Suggest an idea for this project\nlabels: \"kind/enhancement,status/unconfirmed\"\ntitle: \"[Feature] \"\n\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        We strongly appreciate you creating a PR to implement this feature [here](https://github.com/open-mmlab/mmagic/pulls)!\n        If you need our help, please fill in as much of the following form as you're able to.\n\n        **The less clear the description, the longer it will take to solve it.**\n\n  - type: textarea\n    attributes:\n      label: What's the feature?\n      description: |\n        Tell us more about the feature and how this feature can help.\n      placeholder: |\n        E.g., It is inconvenient when \\[....\\].\n        This feature can \\[....\\].\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Any other context?\n      description: |\n        Have you considered any alternative solutions or features? If so, what are they?\n        Also, feel free to add any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/3-new-model.yml",
    "content": "name: \"\\U0001F31F New model/dataset/scheduler addition\"\ndescription: Submit a proposal/request to implement a new model / dataset / scheduler\nlabels: \"kind/feature,status/unconfirmed\"\ntitle: \"[New Models] \"\n\n\nbody:\n  - type: textarea\n    id: description-request\n    validations:\n      required: true\n    attributes:\n      label: Model/Dataset/Scheduler description\n      description: |\n        Put any and all important information relative to the model/dataset/scheduler\n\n  - type: checkboxes\n    attributes:\n      label: Open source status\n      description: |\n          Please provide the open-source status, which would be very helpful\n      options:\n        - label: \"The model implementation is available\"\n        - label: \"The model weights are available.\"\n\n  - type: textarea\n    id: additional-info\n    attributes:\n      label: Provide useful links for the implementation\n      description: |\n        Please provide information regarding the implementation, the weights, and the authors.\n        Please mention the authors by @gh-username if you're aware of their usernames.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/4-documentation.yml",
    "content": "name: 📚 Documentation\ndescription: Report an issue related to the documentation.\nlabels: \"kind/doc,status/unconfirmed\"\ntitle: \"[Docs] \"\n\nbody:\n- type: dropdown\n  id: branch\n  attributes:\n    label: Branch\n    description: This issue is related to the\n    options:\n      - main branch  https://mmagic.readthedocs.io/en/latest/\n      - 0.x branch https://mmagic.readthedocs.io/en/0.x/\n  validations:\n    required: true\n\n- type: textarea\n  attributes:\n    label: 📚 The doc issue\n    description: >\n      A clear and concise description the issue.\n  validations:\n    required: true\n\n- type: textarea\n  attributes:\n    label: Suggest a potential alternative/fix\n    description: >\n      Tell us how we could improve the documentation in this regard.\n- type: markdown\n  attributes:\n    value: >\n      Thanks for contributing 🎉!\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n\ncontact_links:\n  - name: 💬 Forum\n    url: https://github.com/open-mmlab/mmagic/discussions\n    about: Ask general usage questions and discuss with other MMagic community members\n  - name: 🌐 Explore OpenMMLab\n    url: https://openmmlab.com/\n    about: Get to know more about OpenMMLab\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "Thanks for your contribution and we appreciate it a lot. The following instructions would make your pull request more healthy and more easily get feedback. If you do not understand some items, don't worry, just make the pull request and seek help from maintainers.\n\n## Motivation\n\nPlease describe the motivation of this PR and the goal you want to achieve through this PR.\n\n## Modification\n\nPlease briefly describe what modification is made in this PR.\n\n## BC-breaking (Optional)\n\nDoes the modification introduce changes that break the backward-compatibility of the downstream repositories?\nIf so, please describe how it breaks the compatibility and how the downstream projects should modify their code to keep compatibility with this PR.\n\n## Use cases (Optional)\n\nIf this PR introduces a new feature, it is better to list some use cases here, and update the documentation.\n\n## Checklist\n\nSubmitting this pull request means that,\n\n**Before PR**:\n\n- [x] I have read and followed the workflow indicated in the [CONTRIBUTING.md](https://github.com/open-mmlab/mmagic/blob/main/.github/CONTRIBUTING.md) to create this PR.\n- [x] Pre-commit or linting tools indicated in [CONTRIBUTING.md](https://github.com/open-mmlab/mmagic/blob/main/.github/CONTRIBUTING.md) are used to fix the potential lint issues.\n- [x] Bug fixes are covered by unit tests, the case that causes the bug should be added in the unit tests.\n- [x] New functionalities are covered by complete unit tests. If not, please add more unit test to ensure the correctness.\n- [x] The documentation has been modified accordingly, including docstring or example tutorials.\n\n**After PR**:\n\n- [x] If the modification has potential influence on downstream or other related projects, this PR should be tested with some of those projects.\n- [x] CLA has been signed and all committers have signed the CLA in this PR.\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "name: lint\n\non: [push, pull_request]\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - name: Set up Python 3.7\n        uses: actions/setup-python@v2\n        with:\n          python-version: 3.7\n      - name: Install pre-commit hook\n        run: |\n          pip install pre-commit\n          pre-commit install\n      - name: Linting\n        run: pre-commit run --all-files\n      - name: Check docstring coverage\n        run: |\n          pip install interrogate\n          interrogate -v --ignore-init-method --ignore-module --ignore-nested-functions --ignore-regex \"__repr__\" --fail-under 90 mmagic\n"
  },
  {
    "path": ".github/workflows/merge_stage_test.yml",
    "content": "name: merge_stage_test\n\non:\n  push:\n    paths-ignore:\n      - 'README.md'\n      - 'README_zh-CN.md'\n      - 'docs/**'\n      - '.owners.yml'\n      - '.github/ISSUE_TEMPLATE/**'\n      - '.github/*.md'\n      - '.dev_scripts/**'\n      - '.circleci/**'\n      - 'configs/**'\n      - 'projects/**'\n\n    branches:\n      - dev-1.x\n      - test-1.x\n      - main\n      - test-branch\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build_cpu_py:\n    runs-on: ubuntu-22.04\n    strategy:\n      matrix:\n        python-version: [3.8, 3.9]\n        torch: [1.8.1]\n        include:\n          - torch: 1.8.1\n            torchvision: 0.9.1\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Install PyTorch\n        run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html\n      - name: Install MMEngine\n        run: pip install git+https://github.com/open-mmlab/mmengine.git@main\n      - name: Install MMCV\n        run: |\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n      - name: Install other dependencies\n        run: |\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: rm -rf .eggs && pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          coverage run --branch --source mmagic -m pytest tests/\n          coverage xml\n          coverage report -m\n\n  build_cpu_pt:\n    runs-on: ubuntu-22.04\n    strategy:\n      matrix:\n        python-version: [3.7]\n        torch: [1.8.1, 1.9.1, 1.10.1, 1.11.0, 1.12.1, 1.13.0]\n        include:\n          - torch: 1.8.1\n            torchvision: 0.9.1\n          - torch: 1.9.1\n            torchvision: 0.10.1\n          - torch: 1.10.1\n            torchvision: 0.11.2\n          - torch: 1.11.0\n            torchvision: 0.12.0\n          - torch: 1.12.1\n            torchvision: 0.13.1\n          - torch: 1.13.0\n            torchvision: 0.14.0\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Install PyTorch\n        run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html\n      - name: Install MMEngine\n        run: pip install git+https://github.com/open-mmlab/mmengine.git@main\n      - name: Install MMCV\n        run: |\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n      - name: Install other dependencies\n        run: |\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: rm -rf .eggs && pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          coverage run --branch --source mmagic -m pytest tests/\n          coverage xml --omit=\"**/stylegan3_ops/*,**/conv2d_gradfix.py,**/grid_sample_gradfix.py,**/misc.py,**/upfirdn2d.py,**all_gather_layer.py\"\n          coverage report -m\n      # Only upload coverage report for python3.7 && pytorch1.8.1 cpu\n      - name: Upload coverage to Codecov\n        if: ${{matrix.torch == '1.8.1' && matrix.python-version == '3.7'}}\n        uses: codecov/codecov-action@v1.0.14\n        with:\n          file: ./coverage.xml\n          flags: unittests\n          env_vars: OS,PYTHON\n          name: codecov-umbrella\n          fail_ci_if_error: false\n\n  build_cu102:\n    runs-on: ubuntu-22.04\n    container:\n      image: pytorch/pytorch:1.8.1-cuda10.2-cudnn7-devel\n    strategy:\n      matrix:\n        python-version: [3.7]\n        include:\n          - torch: 1.8.1\n            cuda: 10.2\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Fetch GPG keys\n        run: |\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2204/x86_64/7fa2af80.pub\n      - name: Install system dependencies\n        run: |\n          apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6\n      - name: Install PyTorch\n        run: pip install torch==1.8.1+cpu torchvision==0.9.1+cpu -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html\n      - name: Install mmagic dependencies\n        run: |\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: |\n          pip install -e .\n\n  build_cu116:\n    runs-on: ubuntu-22.04\n    container:\n      image: pytorch/pytorch:1.13.0-cuda11.6-cudnn8-devel\n    strategy:\n      matrix:\n        python-version: [3.7]\n        include:\n          - torch: 1.8.1\n            cuda: 10.2\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Fetch GPG keys\n        run: |\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2204/x86_64/7fa2af80.pub\n      - name: Install system dependencies\n        run: |\n          apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6\n      - name: Install PyTorch\n        run: pip install torch torchvision --extra-index-url https://download.pytorch.org/whl/cpu\n      - name: Install mmagic dependencies\n        run: |\n          pip install git+https://github.com/open-mmlab/mmengine.git@main\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: |\n          pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          coverage run --branch --source mmagic -m pytest tests/\n          coverage xml --omit=\"**/stylegan3_ops/*,**/conv2d_gradfix.py,**/grid_sample_gradfix.py,**/misc.py,**/upfirdn2d.py,**all_gather_layer.py\"\n          coverage report -m\n\n  build_windows:\n    runs-on: windows-2022\n    strategy:\n      matrix:\n        python: [3.7]\n        platform: [cpu, cu111]\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: python -m pip install pip --upgrade && pip install wheel\n      - name: Install lmdb\n        run: python -m pip install lmdb\n      - name: Install PyTorch\n        run: python -m pip install torch==1.8.1+${{matrix.platform}} torchvision==0.9.1+${{matrix.platform}} -f https://download.pytorch.org/whl/lts/1.8/torch_lts.html\n      - name: Install mmagic dependencies\n        run: |\n          python -m pip install git+https://github.com/open-mmlab/mmengine.git@main\n          python -m pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n          python -m pip install -r requirements/tests.txt\n      - name: Build and install\n        run: |\n          python -m pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          pytest tests/\n"
  },
  {
    "path": ".github/workflows/pr_stage_test.yml",
    "content": "name: pr_stage_test\n\non:\n  pull_request:\n    paths-ignore:\n      - 'README.md'\n      - 'README_zh-CN.md'\n      - '.owners.yml'\n      - '.github/ISSUE_TEMPLATE/**'\n      - '.github/*.md'\n      - 'docs/**'\n      - 'projects/**'\n      - '.dev_scripts/**'\n      - '.circleci/**'\n      - 'configs/**'\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build_cpu:\n    runs-on: ubuntu-22.04\n    strategy:\n      matrix:\n        python-version: [3.8]\n        include:\n          - torch: 2.0.1\n            torchvision: 0.15.2\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Install PyTorch\n        run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/torch_stable.html\n      - name: Install MMEngine\n        run: pip install git+https://github.com/open-mmlab/mmengine.git@main\n      - name: Install MMCV\n        run: |\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n      - name: Install other dependencies\n        run: |\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: rm -rf .eggs && pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          coverage run --branch --source mmagic -m pytest tests/\n          coverage xml --omit=\"**/stylegan3_ops/*,**/conv2d_gradfix.py,**/grid_sample_gradfix.py,**/misc.py,**/upfirdn2d.py,**all_gather_layer.py\"\n          coverage report -m\n      # Upload coverage report for python3.7 && pytorch1.8.1 cpu\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v1.0.14\n        with:\n          file: ./coverage.xml\n          flags: unittests\n          env_vars: OS,PYTHON\n          name: codecov-umbrella\n          fail_ci_if_error: false\n      # - name: Setup tmate session\n      #   if: ${{ failure() }}\n      #   uses: mxschmitt/action-tmate@v3\n\n  build_cu118:\n    runs-on: ubuntu-22.04\n    container:\n      image: pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel\n    strategy:\n      matrix:\n        python-version: [3.8]\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Fetch GPG keys\n        run: |\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub\n          apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2204/x86_64/7fa2af80.pub\n      - name: Install system dependencies\n        run: |\n          apt-get update\n          DEBIAN_FRONTEND=noninteractive apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libxrender-dev\n      - name: Install PyTorch\n        run: pip install torch==2.0.1+cpu torchvision==0.15.2+cpu -f https://download.pytorch.org/whl/torch_stable.html\n      - name: Install mmagic dependencies\n        run: |\n          pip install git+https://github.com/open-mmlab/mmengine.git@main\n          pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n          pip install -r requirements/tests.txt\n      - name: Build and install\n        run: |\n          pip install -e .\n      # - name: Setup tmate session\n      #   if: ${{ failure() }}\n      #   uses: mxschmitt/action-tmate@v3\n\n  build_windows:\n    runs-on: windows-2022\n    strategy:\n      matrix:\n        python-version: [3.8]\n        platform: [cpu, cu118]\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: python -m pip install pip --upgrade && pip install wheel\n      - name: Install lmdb\n        run: python -m pip install lmdb\n      - name: Install PyTorch\n        run: python -m pip install torch==2.0.1+${{matrix.platform}} torchvision==0.15.2+${{matrix.platform}} -f https://download.pytorch.org/whl/torch_stable.html\n      - name: Install mmagic dependencies\n        run: |\n          python -m pip install git+https://github.com/open-mmlab/mmengine.git@main\n          python -m pip install -U openmim\n          mim install 'mmcv >= 2.0.0'\n          python -m pip install -r requirements/tests.txt\n      - name: Build and install\n        run: |\n          python -m pip install -e .\n      - name: Run unittests and generate coverage report\n        run: |\n          pytest tests/\n      # - name: Setup tmate session\n      #   if: ${{ failure() }}\n      #   uses: mxschmitt/action-tmate@v3\n"
  },
  {
    "path": ".github/workflows/publish-to-pypi.yml",
    "content": "name: deploy\n\non: push\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build-n-publish:\n    runs-on: ubuntu-latest\n    if: startsWith(github.event.ref, 'refs/tags')\n    steps:\n      - uses: actions/checkout@v2\n      - name: Set up Python 3.7\n        uses: actions/setup-python@v1\n        with:\n          python-version: 3.7\n      - name: Build MMagic\n        run: |\n          pip install torch==1.8.1+cpu torchvision==0.9.1+cpu -f https://download.pytorch.org/whl/torch_stable.html\n          pip install wheel\n          python setup.py sdist bdist_wheel\n      - name: Publish distribution to PyPI\n        run: |\n          pip install twine\n          twine upload dist/* -u __token__ -p ${{ secrets.pypi_password }}\n"
  },
  {
    "path": ".github/workflows/test_mim.yml",
    "content": "name: test-mim\n\non:\n  push:\n    paths:\n      - 'model-index.yml'\n      - 'configs/**'\n\n  pull_request:\n    paths:\n      - 'model-index.yml'\n      - 'configs/**'\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  build_cpu:\n    runs-on: ubuntu-22.04\n    strategy:\n      matrix:\n        python-version: [3.7]\n        torch: [1.8.0]\n        include:\n          - torch: 1.8.0\n            torch_version: torch1.8\n            torchvision: 0.9.0\n    steps:\n      - uses: actions/checkout@v3\n      - name: Set up Python ${{ matrix.python-version }}\n        uses: actions/setup-python@v4\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Upgrade pip\n        run: pip install pip --upgrade && pip install wheel\n      - name: Install PyTorch\n        run: pip install torch==${{matrix.torch}}+cpu torchvision==${{matrix.torchvision}}+cpu -f https://download.pytorch.org/whl/torch_stable.html\n      - name: Install openmim\n        run: pip install openmim\n      - name: Build and install\n        run: rm -rf .eggs && mim install -e .\n      - name: test commands of mim\n        run: mim search mmagic\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n**/*.pyc\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n.pytest_cache/\ntests/data/out\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/en/_build/\ndocs/en/_tmp/\ndocs/zh_cn/_build/\ndocs/zh_cn/_tmp/\nrequirements/src/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n# custom\n.vscode\n.idea\n*.pkl\n*.pkl.json\n*.log.json\nwork_dirs/\nwork_dirs\nconfigs_ceph/\nconfigs_ceph_*/\n/data/\n/data\nmmagic/.mim\ndemo/*.png\n*.csv\nout/*.png\ntests/data/out\nresources/\n\n# Pytorch\n*.pth\n\n# onnx and tensorrt\n*.onnx\n*.trt\n\n# local history\n.history/**\n\n# Pytorch Server\n*.mar\n\n# MacOS\n.DS_Store\n\n# Slurm\nbatchscript-*\n*.out\n\n*.png\n*.jpg\n*.zip\nwork_dir\nwork_dir/\n"
  },
  {
    "path": ".owners.yml",
    "content": "# assign issues to owners automatically\nassign:\n  issues: enabled # or disabled\n  pull_requests: enabled # or disabled\n  # assign strategy, both issues and pull requests follow the same strategy\n  strategy:\n    # random\n    # round-robin\n    daily-shift-based\n  scedule:\n    '*/1 * * * *'\n  # assignees\n  assignees:\n    - zengyh1900\n    - LeoXing1996\n    - liuwenran\n    - LeoXing1996\n    - liuwenran\n    - zengyh1900\n    - zengyh1900\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "exclude: ^tests/data/\nrepos:\n  - repo: https://github.com/PyCQA/flake8\n    rev: 4.0.1\n    hooks:\n      - id: flake8\n  - repo: https://github.com/zhouzaida/isort\n    rev: 5.12.1\n    hooks:\n      - id: isort\n  - repo: https://github.com/pre-commit/mirrors-yapf\n    rev: v0.30.0\n    hooks:\n      - id: yapf\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v3.1.0\n    hooks:\n      - id: trailing-whitespace\n        exclude: ^dicts/\n      - id: check-yaml\n        exclude: ^projects/animated_drawings/configs/retarget/\n      - id: end-of-file-fixer\n        exclude: ^dicts/\n      - id: requirements-txt-fixer\n      - id: double-quote-string-fixer\n      - id: check-merge-conflict\n      - id: fix-encoding-pragma\n        args: [\"--remove\"]\n      - id: mixed-line-ending\n        args: [\"--fix=lf\"]\n  - repo: https://github.com/codespell-project/codespell\n    rev: v2.1.0\n    hooks:\n      - id: codespell\n        args: [\"--skip\", \"*.ipynb\", \"-L\", \"formating,theis,te,nd,thre,Gool,gool,lod,patten,confectionary\"]\n  - repo: https://github.com/executablebooks/mdformat\n    rev: 0.7.9\n    hooks:\n      - id: mdformat\n        args: [\"--number\", \"--table-width\", \"200\"]\n        # language_version: python3.7\n        additional_dependencies:\n          - mdformat-openmmlab\n          - mdformat_frontmatter\n          - linkify-it-py\n  - repo: local\n    hooks:\n      - id: update-model-index\n        name: update-model-index\n        description: Collect model information and update model-index.yml\n        entry: .dev_scripts/update_model_index.py\n        additional_dependencies: [mmengine, modelindex, tqdm, rich]\n        language: python\n        files: ^configs/.*\\.md$\n        require_serial: true\n  - repo: https://github.com/myint/docformatter\n    rev: v1.3.1\n    hooks:\n      - id: docformatter\n        args: [\"--in-place\", \"--wrap-descriptions\", \"79\"]\n  - repo: https://github.com/open-mmlab/pre-commit-hooks\n    rev: v0.4.0  # Use the ref you want to point at\n    hooks:\n      - id: check-algo-readme\n      - id: check-copyright\n        args: [\"demo\", \"mmagic\", \"tests\", \"tools\"]\n      - id: remove-improper-eol-in-cn-docs\n  - repo: local\n    hooks:\n      - id: update-model-zoo\n        name: update-model-zoo\n        description: update model-zoo.yml\n        entry: docs/en/.dev_scripts/update_model_zoo.py\n        additional_dependencies: [mmengine, modelindex, tqdm, rich]\n        language: python\n        files: ^configs/.*\\.md$\n        require_serial: true\n"
  },
  {
    "path": ".pylintrc",
    "content": "[MASTER]\n\n# A comma-separated list of package or module names from where C extensions may\n# be loaded. Extensions are loading into the active Python interpreter and may\n# run arbitrary code.\nextension-pkg-whitelist=\n\n# Specify a score threshold to be exceeded before program exits with error.\nfail-under=10.0\n\n# Add files or directories to the blacklist. They should be base names, not\n# paths.\nignore=CVS,configs\n\n# Add files or directories matching the regex patterns to the blacklist. The\n# regex matches against base names, not paths.\nignore-patterns=\n\n# Python code to execute, usually for sys.path manipulation such as\n# pygtk.require().\n#init-hook=\n\n# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the\n# number of processors available to use.\njobs=1\n\n# Control the amount of potential inferred values when inferring a single\n# object. This can help the performance when dealing with large functions or\n# complex, nested conditions.\nlimit-inference-results=100\n\n# List of plugins (as comma separated values of python module names) to load,\n# usually to register additional checkers.\nload-plugins=\n\n# Pickle collected data for later comparisons.\npersistent=yes\n\n# When enabled, pylint would attempt to guess common misconfiguration and emit\n# user-friendly hints instead of false-positive error messages.\nsuggestion-mode=yes\n\n# Allow loading of arbitrary C extensions. Extensions are imported into the\n# active Python interpreter and may run arbitrary code.\nunsafe-load-any-extension=no\n\n\n[MESSAGES CONTROL]\n\n# Only show warnings with the listed confidence levels. Leave empty to show\n# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED.\nconfidence=\n\n# Disable the message, report, category or checker with the given id(s). You\n# can either give multiple identifiers separated by comma (,) or put this\n# option multiple times (only on the command line, not in the configuration\n# file where it should appear only once). You can also use \"--disable=all\" to\n# disable everything first and then reenable specific checks. For example, if\n# you want to run only the similarities checker, you can use \"--disable=all\n# --enable=similarities\". If you want to run only the classes checker, but have\n# no Warning level messages displayed, use \"--disable=all --enable=classes\n# --disable=W\".\ndisable=print-statement,\n        parameter-unpacking,\n        unpacking-in-except,\n        old-raise-syntax,\n        backtick,\n        long-suffix,\n        old-ne-operator,\n        old-octal-literal,\n        import-star-module-level,\n        non-ascii-bytes-literal,\n        raw-checker-failed,\n        bad-inline-option,\n        locally-disabled,\n        file-ignored,\n        suppressed-message,\n        useless-suppression,\n        deprecated-pragma,\n        use-symbolic-message-instead,\n        apply-builtin,\n        basestring-builtin,\n        buffer-builtin,\n        cmp-builtin,\n        coerce-builtin,\n        execfile-builtin,\n        file-builtin,\n        long-builtin,\n        raw_input-builtin,\n        reduce-builtin,\n        standarderror-builtin,\n        unicode-builtin,\n        xrange-builtin,\n        coerce-method,\n        delslice-method,\n        getslice-method,\n        setslice-method,\n        no-absolute-import,\n        old-division,\n        dict-iter-method,\n        dict-view-method,\n        next-method-called,\n        metaclass-assignment,\n        indexing-exception,\n        raising-string,\n        reload-builtin,\n        oct-method,\n        hex-method,\n        nonzero-method,\n        cmp-method,\n        input-builtin,\n        round-builtin,\n        intern-builtin,\n        unichr-builtin,\n        map-builtin-not-iterating,\n        zip-builtin-not-iterating,\n        range-builtin-not-iterating,\n        filter-builtin-not-iterating,\n        using-cmp-argument,\n        eq-without-hash,\n        div-method,\n        idiv-method,\n        rdiv-method,\n        exception-message-attribute,\n        invalid-str-codec,\n        sys-max-int,\n        bad-python3-import,\n        deprecated-string-function,\n        deprecated-str-translate-call,\n        deprecated-itertools-function,\n        deprecated-types-field,\n        next-method-defined,\n        dict-items-not-iterating,\n        dict-keys-not-iterating,\n        dict-values-not-iterating,\n        deprecated-operator-function,\n        deprecated-urllib-function,\n        xreadlines-attribute,\n        deprecated-sys-function,\n        exception-escape,\n        comprehension-escape,\n        no-member,\n        invalid-name,\n        too-many-branches,\n        wrong-import-order,\n        too-many-arguments,\n        missing-function-docstring,\n        missing-module-docstring,\n        too-many-locals,\n        too-few-public-methods,\n        abstract-method,\n        broad-except,\n        too-many-nested-blocks,\n        too-many-instance-attributes,\n        missing-class-docstring,\n        duplicate-code,\n        not-callable,\n        protected-access,\n        dangerous-default-value,\n        no-name-in-module,\n        logging-fstring-interpolation,\n        super-init-not-called,\n        redefined-builtin,\n        attribute-defined-outside-init,\n        arguments-differ,\n        cyclic-import,\n        bad-super-call,\n        too-many-statements\n\n# Enable the message, report, category or checker with the given id(s). You can\n# either give multiple identifier separated by comma (,) or put this option\n# multiple time (only on the command line, not in the configuration file where\n# it should appear only once). See also the \"--disable\" option for examples.\nenable=c-extension-no-member\n\n\n[REPORTS]\n\n# Python expression which should return a score less than or equal to 10. You\n# have access to the variables 'error', 'warning', 'refactor', and 'convention'\n# which contain the number of messages in each category, as well as 'statement'\n# which is the total number of statements analyzed. This score is used by the\n# global evaluation report (RP0004).\nevaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)\n\n# Template used to display messages. This is a python new-style format string\n# used to format the message information. See doc for all details.\n#msg-template=\n\n# Set the output format. Available formats are text, parseable, colorized, json\n# and msvs (visual studio). You can also give a reporter class, e.g.\n# mypackage.mymodule.MyReporterClass.\noutput-format=text\n\n# Tells whether to display a full report or only the messages.\nreports=no\n\n# Activate the evaluation score.\nscore=yes\n\n\n[REFACTORING]\n\n# Maximum number of nested blocks for function / method body\nmax-nested-blocks=5\n\n# Complete name of functions that never returns. When checking for\n# inconsistent-return-statements if a never returning function is called then\n# it will be considered as an explicit return statement and no message will be\n# printed.\nnever-returning-functions=sys.exit\n\n\n[TYPECHECK]\n\n# List of decorators that produce context managers, such as\n# contextlib.contextmanager. Add to this list to register other decorators that\n# produce valid context managers.\ncontextmanager-decorators=contextlib.contextmanager\n\n# List of members which are set dynamically and missed by pylint inference\n# system, and so shouldn't trigger E1101 when accessed. Python regular\n# expressions are accepted.\ngenerated-members=\n\n# Tells whether missing members accessed in mixin class should be ignored. A\n# mixin class is detected if its name ends with \"mixin\" (case insensitive).\nignore-mixin-members=yes\n\n# Tells whether to warn about missing members when the owner of the attribute\n# is inferred to be None.\nignore-none=yes\n\n# This flag controls whether pylint should warn about no-member and similar\n# checks whenever an opaque object is returned when inferring. The inference\n# can return multiple potential results while evaluating a Python object, but\n# some branches might not be evaluated, which results in partial inference. In\n# that case, it might be useful to still emit no-member and other checks for\n# the rest of the inferred objects.\nignore-on-opaque-inference=yes\n\n# List of class names for which member attributes should not be checked (useful\n# for classes with dynamically set attributes). This supports the use of\n# qualified names.\nignored-classes=optparse.Values,thread._local,_thread._local\n\n# List of module names for which member attributes should not be checked\n# (useful for modules/projects where namespaces are manipulated during runtime\n# and thus existing member attributes cannot be deduced by static analysis). It\n# supports qualified module names, as well as Unix pattern matching.\nignored-modules=\n\n# Show a hint with possible names when a member name was not found. The aspect\n# of finding the hint is based on edit distance.\nmissing-member-hint=yes\n\n# The minimum edit distance a name should have in order to be considered a\n# similar match for a missing member name.\nmissing-member-hint-distance=1\n\n# The total number of similar names that should be taken in consideration when\n# showing a hint for a missing member.\nmissing-member-max-choices=1\n\n# List of decorators that change the signature of a decorated function.\nsignature-mutators=\n\n\n[SPELLING]\n\n# Limits count of emitted suggestions for spelling mistakes.\nmax-spelling-suggestions=4\n\n# Spelling dictionary name. Available dictionaries: none. To make it work,\n# install the python-enchant package.\nspelling-dict=\n\n# List of comma separated words that should not be checked.\nspelling-ignore-words=\n\n# A path to a file that contains the private dictionary; one word per line.\nspelling-private-dict-file=\n\n# Tells whether to store unknown words to the private dictionary (see the\n# --spelling-private-dict-file option) instead of raising a message.\nspelling-store-unknown-words=no\n\n\n[LOGGING]\n\n# The type of string formatting that logging methods do. `old` means using %\n# formatting, `new` is for `{}` formatting.\nlogging-format-style=old\n\n# Logging modules to check that the string format arguments are in logging\n# function parameter format.\nlogging-modules=logging\n\n\n[VARIABLES]\n\n# List of additional names supposed to be defined in builtins. Remember that\n# you should avoid defining new builtins when possible.\nadditional-builtins=\n\n# Tells whether unused global variables should be treated as a violation.\nallow-global-unused-variables=yes\n\n# List of strings which can identify a callback function by name. A callback\n# name must start or end with one of those strings.\ncallbacks=cb_,\n          _cb\n\n# A regular expression matching the name of dummy variables (i.e. expected to\n# not be used).\ndummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_\n\n# Argument names that match this expression will be ignored. Default to name\n# with leading underscore.\nignored-argument-names=_.*|^ignored_|^unused_\n\n# Tells whether we should check for unused import in __init__ files.\ninit-import=no\n\n# List of qualified module names which can have objects that can redefine\n# builtins.\nredefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io\n\n\n[FORMAT]\n\n# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.\nexpected-line-ending-format=\n\n# Regexp for a line that is allowed to be longer than the limit.\nignore-long-lines=^\\s*(# )?<?https?://\\S+>?$\n\n# Number of spaces of indent required inside a hanging or continued line.\nindent-after-paren=4\n\n# String used as indentation unit. This is usually \"    \" (4 spaces) or \"\\t\" (1\n# tab).\nindent-string='    '\n\n# Maximum number of characters on a single line.\nmax-line-length=100\n\n# Maximum number of lines in a module.\nmax-module-lines=1000\n\n# Allow the body of a class to be on the same line as the declaration if body\n# contains single statement.\nsingle-line-class-stmt=no\n\n# Allow the body of an if to be on the same line as the test if there is no\n# else.\nsingle-line-if-stmt=no\n\n\n[STRING]\n\n# This flag controls whether inconsistent-quotes generates a warning when the\n# character used as a quote delimiter is used inconsistently within a module.\ncheck-quote-consistency=no\n\n# This flag controls whether the implicit-str-concat should generate a warning\n# on implicit string concatenation in sequences defined over several lines.\ncheck-str-concat-over-line-jumps=no\n\n\n[SIMILARITIES]\n\n# Ignore comments when computing similarities.\nignore-comments=yes\n\n# Ignore docstrings when computing similarities.\nignore-docstrings=yes\n\n# Ignore imports when computing similarities.\nignore-imports=no\n\n# Minimum lines number of a similarity.\nmin-similarity-lines=4\n\n\n[MISCELLANEOUS]\n\n# List of note tags to take in consideration, separated by a comma.\nnotes=FIXME,\n      XXX,\n      TODO\n\n# Regular expression of note tags to take in consideration.\n#notes-rgx=\n\n\n[BASIC]\n\n# Naming style matching correct argument names.\nargument-naming-style=snake_case\n\n# Regular expression matching correct argument names. Overrides argument-\n# naming-style.\n#argument-rgx=\n\n# Naming style matching correct attribute names.\nattr-naming-style=snake_case\n\n# Regular expression matching correct attribute names. Overrides attr-naming-\n# style.\n#attr-rgx=\n\n# Bad variable names which should always be refused, separated by a comma.\nbad-names=foo,\n          bar,\n          baz,\n          toto,\n          tutu,\n          tata\n\n# Bad variable names regexes, separated by a comma. If names match any regex,\n# they will always be refused\nbad-names-rgxs=\n\n# Naming style matching correct class attribute names.\nclass-attribute-naming-style=any\n\n# Regular expression matching correct class attribute names. Overrides class-\n# attribute-naming-style.\n#class-attribute-rgx=\n\n# Naming style matching correct class names.\nclass-naming-style=PascalCase\n\n# Regular expression matching correct class names. Overrides class-naming-\n# style.\n#class-rgx=\n\n# Naming style matching correct constant names.\nconst-naming-style=UPPER_CASE\n\n# Regular expression matching correct constant names. Overrides const-naming-\n# style.\n#const-rgx=\n\n# Minimum line length for functions/classes that require docstrings, shorter\n# ones are exempt.\ndocstring-min-length=-1\n\n# Naming style matching correct function names.\nfunction-naming-style=snake_case\n\n# Regular expression matching correct function names. Overrides function-\n# naming-style.\n#function-rgx=\n\n# Good variable names which should always be accepted, separated by a comma.\ngood-names=i,\n           j,\n           k,\n           ex,\n           Run,\n           _,\n           x,\n           y,\n           w,\n           h,\n           a,\n           b\n\n# Good variable names regexes, separated by a comma. If names match any regex,\n# they will always be accepted\ngood-names-rgxs=\n\n# Include a hint for the correct naming format with invalid-name.\ninclude-naming-hint=no\n\n# Naming style matching correct inline iteration names.\ninlinevar-naming-style=any\n\n# Regular expression matching correct inline iteration names. Overrides\n# inlinevar-naming-style.\n#inlinevar-rgx=\n\n# Naming style matching correct method names.\nmethod-naming-style=snake_case\n\n# Regular expression matching correct method names. Overrides method-naming-\n# style.\n#method-rgx=\n\n# Naming style matching correct module names.\nmodule-naming-style=snake_case\n\n# Regular expression matching correct module names. Overrides module-naming-\n# style.\n#module-rgx=\n\n# Colon-delimited sets of names that determine each other's naming style when\n# the name regexes allow several styles.\nname-group=\n\n# Regular expression which should only match function or class names that do\n# not require a docstring.\nno-docstring-rgx=^_\n\n# List of decorators that produce properties, such as abc.abstractproperty. Add\n# to this list to register other decorators that produce valid properties.\n# These decorators are taken in consideration only for invalid-name.\nproperty-classes=abc.abstractproperty\n\n# Naming style matching correct variable names.\nvariable-naming-style=snake_case\n\n# Regular expression matching correct variable names. Overrides variable-\n# naming-style.\n#variable-rgx=\n\n\n[DESIGN]\n\n# Maximum number of arguments for function / method.\nmax-args=5\n\n# Maximum number of attributes for a class (see R0902).\nmax-attributes=7\n\n# Maximum number of boolean expressions in an if statement (see R0916).\nmax-bool-expr=5\n\n# Maximum number of branch for function / method body.\nmax-branches=12\n\n# Maximum number of locals for function / method body.\nmax-locals=15\n\n# Maximum number of parents for a class (see R0901).\nmax-parents=7\n\n# Maximum number of public methods for a class (see R0904).\nmax-public-methods=20\n\n# Maximum number of return / yield for function / method body.\nmax-returns=6\n\n# Maximum number of statements in function / method body.\nmax-statements=50\n\n# Minimum number of public methods for a class (see R0903).\nmin-public-methods=2\n\n\n[IMPORTS]\n\n# List of modules that can be imported at any level, not just the top level\n# one.\nallow-any-import-level=\n\n# Allow wildcard imports from modules that define __all__.\nallow-wildcard-with-all=no\n\n# Analyse import fallback blocks. This can be used to support both Python 2 and\n# 3 compatible code, which means that the block might have code that exists\n# only in one or another interpreter, leading to false positives when analysed.\nanalyse-fallback-blocks=no\n\n# Deprecated modules which should not be used, separated by a comma.\ndeprecated-modules=optparse,tkinter.tix\n\n# Create a graph of external dependencies in the given file (report RP0402 must\n# not be disabled).\next-import-graph=\n\n# Create a graph of every (i.e. internal and external) dependencies in the\n# given file (report RP0402 must not be disabled).\nimport-graph=\n\n# Create a graph of internal dependencies in the given file (report RP0402 must\n# not be disabled).\nint-import-graph=\n\n# Force import order to recognize a module as part of the standard\n# compatibility libraries.\nknown-standard-library=\n\n# Force import order to recognize a module as part of a third party library.\nknown-third-party=enchant\n\n# Couples of modules and preferred modules, separated by a comma.\npreferred-modules=\n\n\n[CLASSES]\n\n# List of method names used to declare (i.e. assign) instance attributes.\ndefining-attr-methods=__init__,\n                      __new__,\n                      setUp,\n                      __post_init__\n\n# List of member names, which should be excluded from the protected access\n# warning.\nexclude-protected=_asdict,\n                  _fields,\n                  _replace,\n                  _source,\n                  _make\n\n# List of valid names for the first argument in a class method.\nvalid-classmethod-first-arg=cls\n\n# List of valid names for the first argument in a metaclass class method.\nvalid-metaclass-classmethod-first-arg=cls\n\n\n[EXCEPTIONS]\n\n# Exceptions that will emit a warning when being caught. Defaults to\n# \"BaseException, Exception\".\novergeneral-exceptions=BaseException,\n                       Exception\n"
  },
  {
    "path": ".readthedocs.yml",
    "content": "version: 2\n\nformats: [pdf, epub]\n\nbuild:\n  os: ubuntu-22.04\n  tools:\n    python: \"3.7\"\n\npython:\n  install:\n    - requirements: requirements/docs.txt\n    - requirements: requirements/readthedocs.txt\n"
  },
  {
    "path": "CITATION.cff",
    "content": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it as below.\"\nauthors:\n  - family-names: MMagic\n    given-names: Contributors\ntitle: \"MMagic: OpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox\"\nversion: 1.0.0\ndate-released: 2023-04-25\nurl: \"https://github.com/open-mmlab/mmagic\"\nlicense: Apache-2.0\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) OpenMMLab. All rights reserved.\n\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2023 MMagic Authors. All rights reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n   Copyright 2020 MMEditing Authors. All rights reserved.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "MANIFEST.in",
    "content": "include requirements/*.txt\ninclude mmagic/.mim/VERSION\ninclude mmagic/.mim/model-index.yml\ninclude mmagic/evaluation/metrics/niqe_pris_params.npz\nrecursive-include mmagic/.mim/configs *.py *.yml\nrecursive-include mmagic/.mim/tools *.sh *.py\nrecursive-include mmagic/.mim/demo *.py\n"
  },
  {
    "path": "README.md",
    "content": "<div id=\"top\" align=\"center\">\n  <img src=\"docs/en/_static/image/mmagic-logo.png\" width=\"500px\"/>\n  <div>&nbsp;</div>\n  <div align=\"center\">\n    <font size=\"10\"><b>M</b>ultimodal <b>A</b>dvanced, <b>G</b>enerative, and <b>I</b>ntelligent <b>C</b>reation (MMagic [em'mædʒɪk])</font>\n  </div>\n  <div>&nbsp;</div>\n  <div align=\"center\">\n    <b><font size=\"5\">OpenMMLab website</font></b>\n    <sup>\n      <a href=\"https://openmmlab.com\">\n        <i><font size=\"4\">HOT</font></i>\n      </a>\n    </sup>\n    &nbsp;&nbsp;&nbsp;&nbsp;\n    <b><font size=\"5\">OpenMMLab platform</font></b>\n    <sup>\n      <a href=\"https://platform.openmmlab.com\">\n        <i><font size=\"4\">TRY IT OUT</font></i>\n      </a>\n    </sup>\n  </div>\n  <div>&nbsp;</div>\n\n[![PyPI](https://badge.fury.io/py/mmagic.svg)](https://pypi.org/project/mmagic/)\n[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmagic.readthedocs.io/en/latest/)\n[![badge](https://github.com/open-mmlab/mmagic/workflows/build/badge.svg)](https://github.com/open-mmlab/mmagic/actions)\n[![codecov](https://codecov.io/gh/open-mmlab/mmagic/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmagic)\n[![license](https://img.shields.io/github/license/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/blob/main/LICENSE)\n[![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/issues)\n[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/issues)\n[![Open in OpenXLab](https://cdn-static.openxlab.org.cn/app-center/openxlab_demo.svg)](https://openxlab.org.cn/apps/detail/%E6%94%BF%E6%9D%B0/OpenMMLab-Projects)\n\n[📘Documentation](https://mmagic.readthedocs.io/en/latest/) |\n[🛠️Installation](https://mmagic.readthedocs.io/en/latest/get_started/install.html) |\n[📊Model Zoo](https://mmagic.readthedocs.io/en/latest/model_zoo/overview.html) |\n[🆕Update News](https://mmagic.readthedocs.io/en/latest/changelog.html) |\n[🚀Ongoing Projects](https://github.com/open-mmlab/mmagic/projects) |\n[🤔Reporting Issues](https://github.com/open-mmlab/mmagic/issues)\n\nEnglish | [简体中文](README_zh-CN.md)\n\n</div>\n\n<div align=\"center\">\n  <a href=\"https://openmmlab.medium.com/\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218352562-cdded397-b0f3-4ca1-b8dd-a60df8dca75b.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://discord.gg/raweFPmdzG\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218347213-c080267f-cbb6-443e-8532-8e1ed9a58ea9.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://twitter.com/OpenMMLab\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218346637-d30c8a0f-3eba-4699-8131-512fb06d46db.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://www.youtube.com/openmmlab\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218346691-ceb2116a-465a-40af-8424-9f30d2348ca9.png\" width=\"3%\" alt=\"\" /></a>\n</div>\n\n## 🚀 What's New <a><img width=\"35\" height=\"20\" src=\"https://user-images.githubusercontent.com/12782558/212848161-5e783dd6-11e8-4fe0-bbba-39ffb77730be.png\"></a>\n\n### New release [**MMagic v1.2.0**](https://github.com/open-mmlab/mmagic/releases/tag/v1.2.0) \\[18/12/2023\\]:\n\n- An advanced and powerful inpainting algorithm named PowerPaint is released in our repository. [Click to View](https://github.com/open-mmlab/mmagic/tree/main/projects/powerpaint)\n\nWe are excited to announce the release of MMagic v1.0.0 that inherits from [MMEditing](https://github.com/open-mmlab/mmediting) and [MMGeneration](https://github.com/open-mmlab/mmgeneration).\n\nAfter iterative updates with OpenMMLab 2.0 framework and merged with MMGeneration, MMEditing has become a powerful tool that supports low-level algorithms based on both GAN and CNN. Today, MMEditing embraces Generative AI and transforms into a more advanced and comprehensive AIGC toolkit: **MMagic** (**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation). MMagic will provide more agile and flexible experimental support for researchers and AIGC enthusiasts, and help you on your AIGC exploration journey.\n\nWe highlight the following new features.\n\n**1. New Models**\n\nWe support 11 new models in 4 new tasks.\n\n- Text2Image / Diffusion\n  - ControlNet\n  - DreamBooth\n  - Stable Diffusion\n  - Disco Diffusion\n  - GLIDE\n  - Guided Diffusion\n- 3D-aware Generation\n  - EG3D\n- Image Restoration\n  - NAFNet\n  - Restormer\n  - SwinIR\n- Image Colorization\n  - InstColorization\n\n**2. Magic Diffusion Model**\n\nFor the Diffusion Model, we provide the following \"magic\" :\n\n- Support image generation based on Stable Diffusion and Disco Diffusion.\n- Support Finetune methods such as Dreambooth and DreamBooth LoRA.\n- Support controllability in text-to-image generation using ControlNet.\n- Support acceleration and optimization strategies based on xFormers to improve training and inference efficiency.\n- Support video generation based on MultiFrame Render.\n- Support calling basic models and sampling strategies through DiffuserWrapper.\n\n**3. Upgraded Framework**\n\nBy using MMEngine and MMCV of OpenMMLab 2.0 framework, MMagic has upgraded in the following new features:\n\n- Refactor DataSample to support the combination and splitting of batch dimensions.\n- Refactor DataPreprocessor and unify the data format for various tasks during training and inference.\n- Refactor MultiValLoop and MultiTestLoop, supporting the evaluation of both generation-type metrics (e.g. FID) and reconstruction-type metrics (e.g. SSIM), and supporting the evaluation of multiple datasets at once.\n- Support visualization on local files or using tensorboard and wandb.\n- Support for 33+ algorithms accelerated by Pytorch 2.0.\n\n**MMagic** has supported all the tasks, models, metrics, and losses in [MMEditing](https://github.com/open-mmlab/mmediting) and [MMGeneration](https://github.com/open-mmlab/mmgeneration) and unifies interfaces of all components based on [MMEngine](https://github.com/open-mmlab/mmengine) 😍.\n\nPlease refer to [changelog.md](docs/en/changelog.md) for details and release history.\n\nPlease refer to [migration documents](docs/en/migration/overview.md) to migrate from [old version](https://github.com/open-mmlab/mmagic/tree/0.x) MMEditing 0.x to new version MMagic 1.x .\n\n<div id=\"table\" align=\"center\"></div>\n\n## 📄 Table of Contents\n\n- [📖 Introduction](#-introduction)\n- [🙌 Contributing](#-contributing)\n- [🛠️ Installation](#️-installation)\n- [📊 Model Zoo](#-model-zoo)\n- [🤝 Acknowledgement](#-acknowledgement)\n- [🖊️ Citation](#️-citation)\n- [🎫 License](#-license)\n- [🏗️ ️OpenMMLab Family](#️-️openmmlab-family)\n\n## 📖 Introduction\n\nMMagic (**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation) is an advanced and comprehensive AIGC toolkit that inherits from [MMEditing](https://github.com/open-mmlab/mmediting) and [MMGeneration](https://github.com/open-mmlab/mmgeneration). It is an open-source image and video editing&generating toolbox based on PyTorch. It is a part of the [OpenMMLab](https://openmmlab.com/) project.\n\nCurrently, MMagic support multiple image and video generation/editing tasks.\n\nhttps://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\n\n### ✨ Major features\n\n- **State of the Art Models**\n\n  MMagic provides state-of-the-art generative models to process, edit and synthesize images and videos.\n\n- **Powerful and Popular Applications**\n\n  MMagic supports popular and contemporary image restoration, text-to-image, 3D-aware generation, inpainting, matting, super-resolution and generation applications. Specifically, MMagic supports fine-tuning for stable diffusion and many exciting diffusion's application such as ControlNet Animation with SAM. MMagic also supports GAN interpolation, GAN projection, GAN manipulations and many other popular GAN’s applications. It’s time to begin your AIGC exploration journey!\n\n- **Efficient Framework**\n\n  By using MMEngine and MMCV of OpenMMLab 2.0 framework, MMagic decompose the editing framework into different modules and one can easily construct a customized editor framework by combining different modules. We can define the training process just like playing with Legos and provide rich components and strategies. In MMagic, you can complete controls on the training process with different levels of APIs. With the support of [MMSeparateDistributedDataParallel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/wrappers/seperate_distributed.py), distributed training for dynamic architectures can be easily implemented.\n\n### ✨ Best Practice\n\n- The best practice on our main branch works with **Python 3.9+** and **PyTorch 2.0+**.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🙌 Contributing\n\nMore and more community contributors are joining us to make our repo better. Some recent projects are contributed by the community including:\n\n- [SDXL](configs/stable_diffusion_xl/README.md) is contributed by  @okotaku.\n- [AnimateDiff](configs/animatediff/README.md) is contributed by @ElliotQi.\n- [ViCo](configs/vico/README.md) is contributed by @FerryHuang.\n- [DragGan](configs/draggan/README.md) is contributed by @qsun1.\n- [FastComposer](configs/fastcomposer/README.md) is contributed by @xiaomile.\n\n[Projects](projects/README.md) is opened to make it easier for everyone to add projects to MMagic.\n\nWe appreciate all contributions to improve MMagic. Please refer to [CONTRIBUTING.md](https://github.com/open-mmlab/mmcv/blob/main/CONTRIBUTING.md) in MMCV and [CONTRIBUTING.md](https://github.com/open-mmlab/mmengine/blob/main/CONTRIBUTING.md) in MMEngine for more details about the contributing guideline.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🛠️ Installation\n\nMMagic depends on [PyTorch](https://pytorch.org/), [MMEngine](https://github.com/open-mmlab/mmengine) and [MMCV](https://github.com/open-mmlab/mmcv).\nBelow are quick steps for installation.\n\n**Step 1.**\nInstall PyTorch following [official instructions](https://pytorch.org/get-started/locally/).\n\n**Step 2.**\nInstall MMCV, MMEngine and MMagic with [MIM](https://github.com/open-mmlab/mim).\n\n```shell\npip3 install openmim\nmim install mmcv>=2.0.0\nmim install mmengine\nmim install mmagic\n```\n\n**Step 3.**\nVerify MMagic has been successfully installed.\n\n```shell\ncd ~\npython -c \"import mmagic; print(mmagic.__version__)\"\n# Example output: 1.0.0\n```\n\n**Getting Started**\n\nAfter installing MMagic successfully, now you are able to play with MMagic! To generate an image from text, you only need several lines of codes by MMagic!\n\n```python\nfrom mmagic.apis import MMagicInferencer\nsd_inferencer = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = 'output/sd_res.png'\nsd_inferencer.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\nPlease see [quick run](docs/en/get_started/quick_run.md) and [inference](docs/en/user_guides/inference.md) for the basic usage of MMagic.\n\n**Install MMagic from source**\n\nYou can also experiment on the latest developed version rather than the stable release by installing MMagic from source with the following commands:\n\n```shell\ngit clone https://github.com/open-mmlab/mmagic.git\ncd mmagic\npip3 install -e .\n```\n\nPlease refer to [installation](docs/en/get_started/install.md) for more detailed instruction.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 📊 Model Zoo\n\n<div align=\"center\">\n  <b>Supported algorithms</b>\n</div>\n<table align=\"center\">\n  <tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Conditional GANs</b>\n      </td>\n      <td>\n        <b>Unconditional GANs</b>\n      </td>\n      <td>\n        <b>Image Restoration</b>\n      </td>\n      <td>\n        <b>Image Super-Resolution</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n            <li><a href=\"configs/sngan_proj/README.md\">SNGAN/Projection GAN (ICLR'2018)</a></li>\n            <li><a href=\"configs/sagan/README.md\">SAGAN (ICML'2019)</a></li>\n            <li><a href=\"configs/biggan/README.md\">BIGGAN/BIGGAN-DEEP (ICLR'2018)</a></li>\n      </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/dcgan/README.md\">DCGAN (ICLR'2016)</a></li>\n          <li><a href=\"configs/wgan-gp/README.md\">WGAN-GP (NeurIPS'2017)</a></li>\n          <li><a href=\"configs/lsgan/README.md\">LSGAN (ICCV'2017)</a></li>\n          <li><a href=\"configs/ggan/README.md\">GGAN (ArXiv'2017)</a></li>\n          <li><a href=\"configs/pggan/README.md\">PGGAN (ICLR'2018)</a></li>\n          <li><a href=\"configs/singan/README.md\">SinGAN (ICCV'2019)</a></li>\n          <li><a href=\"configs/styleganv1/README.md\">StyleGANV1 (CVPR'2019)</a></li>\n          <li><a href=\"configs/styleganv2/README.md\">StyleGANV2 (CVPR'2019)</a></li>\n          <li><a href=\"configs/styleganv3/README.md\">StyleGANV3 (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/draggan/README.md\">DragGan (2023)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/swinir/README.md\">SwinIR (ICCVW'2021)</a></li>\n          <li><a href=\"configs/nafnet/README.md\">NAFNet (ECCV'2022)</a></li>\n          <li><a href=\"configs/restormer/README.md\">Restormer (CVPR'2022)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/srcnn/README.md\">SRCNN (TPAMI'2015)</a></li>\n          <li><a href=\"configs/srgan_resnet/README.md\">SRResNet&SRGAN (CVPR'2016)</a></li>\n          <li><a href=\"configs/edsr/README.md\">EDSR (CVPR'2017)</a></li>\n          <li><a href=\"configs/esrgan/README.md\">ESRGAN (ECCV'2018)</a></li>\n          <li><a href=\"configs/rdn/README.md\">RDN (CVPR'2018)</a></li>\n          <li><a href=\"configs/dic/README.md\">DIC (CVPR'2020)</a></li>\n          <li><a href=\"configs/ttsr/README.md\">TTSR (CVPR'2020)</a></li>\n          <li><a href=\"configs/glean/README.md\">GLEAN (CVPR'2021)</a></li>\n          <li><a href=\"configs/liif/README.md\">LIIF (CVPR'2021)</a></li>\n          <li><a href=\"configs/real_esrgan/README.md\">Real-ESRGAN (ICCVW'2021)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n<tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Video Super-Resolution</b>\n      </td>\n      <td>\n        <b>Video Interpolation</b>\n      </td>\n      <td>\n        <b>Image Colorization</b>\n      </td>\n      <td>\n        <b>Image Translation</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n            <li><a href=\"configs/edvr/README.md\">EDVR (CVPR'2018)</a></li>\n            <li><a href=\"configs/tof/README.md\">TOF (IJCV'2019)</a></li>\n            <li><a href=\"configs/tdan/README.md\">TDAN (CVPR'2020)</a></li>\n            <li><a href=\"configs/basicvsr/README.md\">BasicVSR (CVPR'2021)</a></li>\n            <li><a href=\"configs/iconvsr/README.md\">IconVSR (CVPR'2021)</a></li>\n            <li><a href=\"configs/basicvsr_pp/README.md\">BasicVSR++ (CVPR'2022)</a></li>\n            <li><a href=\"configs/real_basicvsr/README.md\">RealBasicVSR (CVPR'2022)</a></li>\n      </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/tof/README.md\">TOFlow (IJCV'2019)</a></li>\n          <li><a href=\"configs/cain/README.md\">CAIN (AAAI'2020)</a></li>\n          <li><a href=\"configs/flavr/README.md\">FLAVR (CVPR'2021)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/inst_colorization/README.md\">InstColorization (CVPR'2020)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/pix2pix/README.md\">Pix2Pix (CVPR'2017)</a></li>\n          <li><a href=\"configs/cyclegan/README.md\">CycleGAN (ICCV'2017)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n<tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Inpainting</b>\n      </td>\n      <td>\n        <b>Matting</b>\n      </td>\n      <td>\n        <b>Text-to-Image(Video)</b>\n      </td>\n      <td>\n        <b>3D-aware Generation</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n          <li><a href=\"configs/global_local/README.md\">Global&Local (ToG'2017)</a></li>\n          <li><a href=\"configs/deepfillv1/README.md\">DeepFillv1 (CVPR'2018)</a></li>\n          <li><a href=\"configs/partial_conv/README.md\">PConv (ECCV'2018)</a></li>\n          <li><a href=\"configs/deepfillv2/README.md\">DeepFillv2 (CVPR'2019)</a></li>\n          <li><a href=\"configs/aot_gan/README.md\">AOT-GAN (TVCG'2019)</a></li>\n          <li><a href=\"configs/stable_diffusion/README.md\">Stable Diffusion Inpainting (CVPR'2022)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/dim/README.md\">DIM (CVPR'2017)</a></li>\n          <li><a href=\"configs/indexnet/README.md\">IndexNet (ICCV'2019)</a></li>\n          <li><a href=\"configs/gca/README.md\">GCA (AAAI'2020)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"projects/glide/configs/README.md\">GLIDE (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/guided_diffusion/README.md\">Guided Diffusion (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/disco_diffusion/README.md\">Disco-Diffusion (2022)</a></li>\n          <li><a href=\"configs/stable_diffusion/README.md\">Stable-Diffusion (2022)</a></li>\n          <li><a href=\"configs/dreambooth/README.md\">DreamBooth (2022)</a></li>\n          <li><a href=\"configs/textual_inversion/README.md\">Textual Inversion (2022)</a></li>\n          <li><a href=\"projects/prompt_to_prompt/README.md\">Prompt-to-Prompt (2022)</a></li>\n          <li><a href=\"projects/prompt_to_prompt/README.md\">Null-text Inversion (2022)</a></li>\n          <li><a href=\"configs/controlnet/README.md\">ControlNet (2023)</a></li>\n          <li><a href=\"configs/controlnet_animation/README.md\">ControlNet Animation (2023)</a></li>\n          <li><a href=\"configs/stable_diffusion_xl/README.md\">Stable Diffusion XL (2023)</a></li>\n          <li><a href=\"configs/animatediff/README.md\">AnimateDiff (2023)</a></li>\n          <li><a href=\"configs/vico/README.md\">ViCo (2023)</a></li>\n          <li><a href=\"configs/fastcomposer/README.md\">FastComposer (2023)</a></li>\n          <li><a href=\"projects/powerpaint/README.md\">PowerPaint (2023)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/eg3d/README.md\">EG3D (CVPR'2022)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n</table>\n\nPlease refer to [model_zoo](https://mmagic.readthedocs.io/en/latest/model_zoo/overview.html) for more details.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🤝 Acknowledgement\n\nMMagic is an open source project that is contributed by researchers and engineers from various colleges and companies. We wish that the toolbox and benchmark could serve the growing research community by providing a flexible toolkit to reimplement existing methods and develop their own new methods.\n\nWe appreciate all the contributors who implement their methods or add new features, as well as users who give valuable feedbacks. Thank you all!\n\n<a href=\"https://github.com/open-mmlab/mmagic/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=open-mmlab/mmagic\" />\n</a>\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🖊️ Citation\n\nIf MMagic is helpful to your research, please cite it as below.\n\n```bibtex\n@misc{mmagic2023,\n    title = {{MMagic}: {OpenMMLab} Multimodal Advanced, Generative, and Intelligent Creation Toolbox},\n    author = {{MMagic Contributors}},\n    howpublished = {\\url{https://github.com/open-mmlab/mmagic}},\n    year = {2023}\n}\n```\n\n```bibtex\n@misc{mmediting2022,\n    title = {{MMEditing}: {OpenMMLab} Image and Video Editing Toolbox},\n    author = {{MMEditing Contributors}},\n    howpublished = {\\url{https://github.com/open-mmlab/mmediting}},\n    year = {2022}\n}\n```\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🎫 License\n\nThis project is released under the [Apache 2.0 license](LICENSE).\nPlease refer to [LICENSES](LICENSE) for the careful check, if you are using our code for commercial matters.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n\n## 🏗️ ️OpenMMLab Family\n\n- [MMEngine](https://github.com/open-mmlab/mmengine): OpenMMLab foundational library for training deep learning models.\n- [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab foundational library for computer vision.\n- [MIM](https://github.com/open-mmlab/mim): MIM installs OpenMMLab packages.\n- [MMPreTrain](https://github.com/open-mmlab/mmpretrain): OpenMMLab Pre-training Toolbox and Benchmark.\n- [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab detection toolbox and benchmark.\n- [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab's next-generation platform for general 3D object detection.\n- [MMRotate](https://github.com/open-mmlab/mmrotate): OpenMMLab rotated object detection toolbox and benchmark.\n- [MMSegmentation](https://github.com/open-mmlab/mmsegmentation): OpenMMLab semantic segmentation toolbox and benchmark.\n- [MMOCR](https://github.com/open-mmlab/mmocr): OpenMMLab text detection, recognition, and understanding toolbox.\n- [MMPose](https://github.com/open-mmlab/mmpose): OpenMMLab pose estimation toolbox and benchmark.\n- [MMHuman3D](https://github.com/open-mmlab/mmhuman3d): OpenMMLab 3D human parametric model toolbox and benchmark.\n- [MMSelfSup](https://github.com/open-mmlab/mmselfsup): OpenMMLab self-supervised learning toolbox and benchmark.\n- [MMRazor](https://github.com/open-mmlab/mmrazor): OpenMMLab model compression toolbox and benchmark.\n- [MMFewShot](https://github.com/open-mmlab/mmfewshot): OpenMMLab fewshot learning toolbox and benchmark.\n- [MMAction2](https://github.com/open-mmlab/mmaction2): OpenMMLab's next-generation action understanding toolbox and benchmark.\n- [MMTracking](https://github.com/open-mmlab/mmtracking): OpenMMLab video perception toolbox and benchmark.\n- [MMFlow](https://github.com/open-mmlab/mmflow): OpenMMLab optical flow toolbox and benchmark.\n- [MMagic](https://github.com/open-mmlab/mmagic): OpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox.\n- [MMDeploy](https://github.com/open-mmlab/mmdeploy): OpenMMLab model deployment framework.\n\n<p align=\"right\"><a href=\"#table\">🔝Back to Table of Contents</a></p>\n"
  },
  {
    "path": "README_zh-CN.md",
    "content": "<div id=\"top\" align=\"center\">\n  <img src=\"docs/zh_cn/_static/image/mmagic-logo.png\" width=\"500px\"/>\n  <div>&nbsp;</div>\n  <div align=\"center\">\n    <font size=\"10\"><b>M</b>ultimodal <b>A</b>dvanced, <b>G</b>enerative, and <b>I</b>ntelligent <b>C</b>reation (MMagic [em'mædʒɪk])</font>\n  </div>\n  <div>&nbsp;</div>\n  <div align=\"center\">\n    <b><font size=\"5\">OpenMMLab 官网</font></b>\n    <sup>\n      <a href=\"https://openmmlab.com\">\n        <i><font size=\"4\">HOT</font></i>\n      </a>\n    </sup>\n    &nbsp;&nbsp;&nbsp;&nbsp;\n    <b><font size=\"5\">OpenMMLab 开放平台</font></b>\n    <sup>\n      <a href=\"https://platform.openmmlab.com\">\n        <i><font size=\"4\">TRY IT OUT</font></i>\n      </a>\n    </sup>\n  </div>\n  <div>&nbsp;</div>\n\n[![PyPI](https://badge.fury.io/py/mmagic.svg)](https://pypi.org/project/mmagic/)\n[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmagic.readthedocs.io/zh_CN/latest/)\n[![badge](https://github.com/open-mmlab/mmagic/workflows/build/badge.svg)](https://github.com/open-mmlab/mmagic/actions)\n[![codecov](https://codecov.io/gh/open-mmlab/mmagic/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmagic)\n[![license](https://img.shields.io/github/license/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/blob/main/LICENSE)\n[![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/issues)\n[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmagic.svg)](https://github.com/open-mmlab/mmagic/issues)\n[![Open in OpenXLab](https://cdn-static.openxlab.org.cn/app-center/openxlab_demo.svg)](https://openxlab.org.cn/apps/detail/%E6%94%BF%E6%9D%B0/OpenMMLab-Projects)\n\n[📘使用文档](https://mmagic.readthedocs.io/zh_CN/latest/) |\n[🛠️安装教程](https://mmagic.readthedocs.io/zh_CN/latest/get_started/install.html) |\n[📊模型库](https://mmagic.readthedocs.io/zh_CN/latest/model_zoo/overview.html) |\n[🆕更新记录](https://mmagic.readthedocs.io/zh_CN/latest/changelog.html) |\n[🚀进行中的项目](https://github.com/open-mmlab/mmagic/projects) |\n[🤔提出问题](https://github.com/open-mmlab/mmagic/issues)\n\n[English](README.md) | 简体中文\n\n</div>\n\n<div align=\"center\">\n  <a href=\"https://openmmlab.medium.com/\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218352562-cdded397-b0f3-4ca1-b8dd-a60df8dca75b.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://discord.gg/raweFPmdzG\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218347213-c080267f-cbb6-443e-8532-8e1ed9a58ea9.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://twitter.com/OpenMMLab\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218346637-d30c8a0f-3eba-4699-8131-512fb06d46db.png\" width=\"3%\" alt=\"\" /></a>\n  <img src=\"https://user-images.githubusercontent.com/25839884/218346358-56cc8e2f-a2b8-487f-9088-32480cceabcf.png\" width=\"3%\" alt=\"\" />\n  <a href=\"https://www.youtube.com/openmmlab\" style=\"text-decoration:none;\">\n    <img src=\"https://user-images.githubusercontent.com/25839884/218346691-ceb2116a-465a-40af-8424-9f30d2348ca9.png\" width=\"3%\" alt=\"\" /></a>\n</div>\n\n## 🚀 最新进展 <a><img width=\"35\" height=\"20\" src=\"https://user-images.githubusercontent.com/12782558/212848161-5e783dd6-11e8-4fe0-bbba-39ffb77730be.png\"></a>\n\n### 最新的 [**MMagic v1.2.0**](https://github.com/open-mmlab/mmagic/releases/tag/v1.2.0) 版本已经在 \\[18/12/2023\\] 发布:\n\n- 我们的代码仓库中发布了一个先进而强大的图像 inpainting 算法 PowerPaint。 [Click to View](https://github.com/open-mmlab/mmagic/tree/main/projects/powerpaint)\n\n我们正式发布 MMagic v1.0.0 版本，源自 [MMEditing](https://github.com/open-mmlab/mmediting) 和 [MMGeneration](https://github.com/open-mmlab/mmgeneration)。\n\n经过 OpenMMLab 2.0 框架的迭代更新以及与 MMGeneration 的合并，MMEditing 已经成为了一个支持基于 GAN 和 CNN 的底层视觉算法的强大工具。而今天，MMEditing 将更加拥抱生成式 AI（Generative AI），正式更名为 **MMagic**（**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation），致力于打造更先进、更全面的 AIGC 开源算法库。MMagic 将为广大研究者与 AIGC 爱好者们提供更加快捷灵活的实验支持，助力你的 AIGC 探索之旅。\n\n以下是此次版本发布的重点新功能:\n\n**1. 新算法**\n\n我们支持了4个新任务以及11个新算法。\n\n- Text2Image / Diffusion\n  - ControlNet\n  - DreamBooth\n  - Stable Diffusion\n  - Disco Diffusion\n  - GLIDE\n  - Guided Diffusion\n- 3D-aware Generation\n  - EG3D\n- Image Restoration\n  - NAFNet\n  - Restormer\n  - SwinIR\n- Image Colorization\n  - InstColorization\n\n**2. Magic Diffusion Model**\n\n针对 Diffusion Model，我们提供了以下“魔法”\n\n- 支持基于 Stable Diffusion 与 Disco Diffusion 的图像生成.\n- 支持 Dreambooth 以及 DreamBooth LoRA 等 Finetune 方法.\n- 支持 ControlNet 进行可控性的文本到图像生成.\n- 支持 xFormers 加速和优化策略，提高训练与推理效率.\n- 支持基于 MultiFrame Render 的视频生成.\n- 支持通过 Wrapper 调用 Diffusers 的基础模型以及采样策略.\n\n**3. 框架升级**\n\n通过 OpenMMLab 2.0 框架的 MMEngine 和 MMCV， MMagic 在以下几方面完成升级：\n\n- 重构 DataSample，支持 batch 维度的组合与拆分.\n- 重构 DataPreprocessor，并统一各种任务在训练与推理时的数据格式.\n- 重构 MultiValLoop 与 MultiTestLoop，同时支持生成类型指标（e.g. FID）与重建类型指标（e.g. SSIM） 的评测，同时支持一次性评测多个数据集\n- 支持本地可视化以及使用 tensorboard 或 wandb的可视化.\n- 支持 33+ 算法 Pytorch 2.0 加速.\n\n**MMagic** 已经支持了[MMEditing](https://github.com/open-mmlab/mmediting)和[MMGeneration](https://github.com/open-mmlab/mmgeneration)中的全量任务、模型、优化函数和评价指标 ，并基于[MMEngine](https://github.com/open-mmlab/mmengine)统一了各组件接口 😍。\n\n如果想了解更多版本更新细节和历史信息，请阅读[更新日志](docs/zh_cn/changelog.md)。如果想从[旧版本](https://github.com/open-mmlab/mmagic/tree/master) MMEditing 0.x 迁移到新版本 MMagic 1.x，请阅读[迁移文档](docs/zh_cn/migration/overview.md)。\n\n<div id=\"table\" align=\"center\"></div>\n\n## 📄 目录\n\n- [📖 介绍](#-介绍)\n- [🙌 参与贡献](#-参与贡献)\n- [🛠️ 安装](#%EF%B8%8F-安装)\n- [📊 模型库](#-模型库)\n- [🤝 致谢](#-致谢)\n- [🖊️ 引用](#%EF%B8%8F-引用)\n- [🎫 许可证](#-许可证)\n- [🏗️ ️OpenMMLab 的其他项目](#%EF%B8%8F-️openmmlab-的其他项目)\n\n## 📖 介绍\n\nMMagic 是基于 PyTorch 的图像&视频编辑和生成开源工具箱。是 [OpenMMLab](https://openmmlab.com/) 项目的成员之一。\n\n目前 MMagic 支持多种图像和视频的生成/编辑任务。\n\nhttps://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\n\n### ✨ 主要特性\n\n- **SOTA 算法**\n\n  MMagic 提供了处理、编辑、生成图像和视频的 SOTA 算法。\n\n- **强有力且流行的应用**\n\n  MMagic 支持了流行的图像修复、图文生成、3D生成、图像修补、抠图、超分辨率和生成等任务的应用。特别是 MMagic 支持了 Stable Diffusion 的微调和许多激动人心的 diffusion 应用，例如 ControlNet 动画生成。MMagic 也支持了 GANs 的插值，投影，编辑和其他流行的应用。请立即开始你的 AIGC 探索之旅！\n\n- **高效的框架**\n\n  通过 OpenMMLab 2.0 框架的 MMEngine 和 MMCV， MMagic 将编辑框架分解为不同的组件，并且可以通过组合不同的模块轻松地构建自定义的编辑器模型。我们可以像搭建“乐高”一样定义训练流程，提供丰富的组件和策略。在 MMagic 中，你可以使用不同的 APIs 完全控制训练流程。得益于 [MMSeparateDistributedDataParallel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/wrappers/seperate_distributed.py), 动态模型结构的分布式训练可以轻松实现。\n\n### ✨ 最佳实践\n\n- 主分支代码的最佳实践基于 **Python 3.9+** 和 **PyTorch 2.0+** 。\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🙌 参与贡献\n\n越来越多社区贡献者的加入使我们的算法库日益发展。最近由社区贡献的项目包括：\n\n- [SDXL](configs/stable_diffusion_xl/README.md) 来自 @okotaku.\n- [AnimateDiff](configs/animatediff/README.md) 来自 @ElliotQi.\n- [ViCo](configs/vico/README.md) 来自 @FerryHuang.\n- [DragGan](configs/draggan/README.md) 来自 @qsun1.\n- [FastComposer](configs/fastcomposer/README.md) 来自 @xiaomile.\n\n为使向 MMagic 中添加项目更加容易，我们开启了 [Projects](projects/README.md) 。\n\n感谢您为改善 MMagic 所做的所有贡献。请参阅 MMCV 中的 [CONTRIBUTING.md](https://github.com/open-mmlab/mmcv/blob/main/CONTRIBUTING_zh-CN.md) 和 MMEngine 中的 [CONTRIBUTING.md](https://github.com/open-mmlab/mmengine/blob/main/CONTRIBUTING_zh-CN.md) 以获取贡献指南。\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🛠️ 安装\n\nMMagic 依赖 [PyTorch](https://pytorch.org/)，[MMEngine](https://github.com/open-mmlab/mmengine) 和 [MMCV](https://github.com/open-mmlab/mmcv)，以下是安装的简要步骤。\n\n**步骤 1.**\n依照[官方教程](https://pytorch.org/get-started/locally/)安装 PyTorch 。\n\n**步骤 2.**\n使用 [MIM](https://github.com/open-mmlab/mim) 安装 MMCV，MMEngine 和 MMagic 。\n\n```\npip3 install openmim\nmim install 'mmcv>=2.0.0'\nmim install 'mmengine'\nmim install 'mmagic'\n```\n\n**步骤 3.**\n验证 MMagic 安装成功。\n\n```shell\ncd ~\npython -c \"import mmagic; print(mmagic.__version__)\"\n# Example output: 1.0.0\n```\n\n**开始使用**\n\n成功安装 MMagic 后，你可以很容易地上手使用 MMagic！仅需几行代码，你就可以使用 MMagic 完成文本生成图像！\n\n```python\nfrom mmagic.apis import MMagicInferencer\nsd_inferencer = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = 'output/sd_res.png'\nsd_inferencer.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\n请参考[快速运行](docs/zh_cn/get_started/quick_run.md)和[推理演示](docs/zh_cn/user_guides/inference.md)获取 MMagic 的基本用法。\n\n**从源码安装 MMagic**\n\n使用以下命令从源码安装 MMagic，你可以选择不使用已发布的稳定版本，而在最新开发的版本上进行实验。\n\n```\ngit clone https://github.com/open-mmlab/mmagic.git\ncd mmagic\npip3 install -e .\n```\n\n更详细的安装指南请参考 [安装指南](docs/zh_cn/get_started/install.md) 。\n\n<p align=\"right\"><a href=\"#top\">🔝Back to top</a></p>\n\n## 📊 模型库\n\n<div align=\"center\">\n  <b>支持的算法</b>\n</div>\n<table align=\"center\">\n  <tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Conditional GANs</b>\n      </td>\n      <td>\n        <b>Unconditional GANs</b>\n      </td>\n      <td>\n        <b>Image Restoration</b>\n      </td>\n      <td>\n        <b>Image Super-Resolution</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n            <li><a href=\"configs/sngan_proj/README.md\">SNGAN/Projection GAN (ICLR'2018)</a></li>\n            <li><a href=\"configs/sagan/README.md\">SAGAN (ICML'2019)</a></li>\n            <li><a href=\"configs/biggan/README.md\">BIGGAN/BIGGAN-DEEP (ICLR'2018)</a></li>\n      </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/dcgan/README.md\">DCGAN (ICLR'2016)</a></li>\n          <li><a href=\"configs/wgan-gp/README.md\">WGAN-GP (NeurIPS'2017)</a></li>\n          <li><a href=\"configs/lsgan/README.md\">LSGAN (ICCV'2017)</a></li>\n          <li><a href=\"configs/ggan/README.md\">GGAN (ArXiv'2017)</a></li>\n          <li><a href=\"configs/pggan/README.md\">PGGAN (ICLR'2018)</a></li>\n          <li><a href=\"configs/singan/README.md\">SinGAN (ICCV'2019)</a></li>\n          <li><a href=\"configs/styleganv1/README.md\">StyleGANV1 (CVPR'2019)</a></li>\n          <li><a href=\"configs/styleganv2/README.md\">StyleGANV2 (CVPR'2019)</a></li>\n          <li><a href=\"configs/styleganv3/README.md\">StyleGANV3 (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/draggan/README.md\">DragGan (2023)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/swinir/README.md\">SwinIR (ICCVW'2021)</a></li>\n          <li><a href=\"configs/nafnet/README.md\">NAFNet (ECCV'2022)</a></li>\n          <li><a href=\"configs/restormer/README.md\">Restormer (CVPR'2022)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/srcnn/README.md\">SRCNN (TPAMI'2015)</a></li>\n          <li><a href=\"configs/srgan_resnet/README.md\">SRResNet&SRGAN (CVPR'2016)</a></li>\n          <li><a href=\"configs/edsr/README.md\">EDSR (CVPR'2017)</a></li>\n          <li><a href=\"configs/esrgan/README.md\">ESRGAN (ECCV'2018)</a></li>\n          <li><a href=\"configs/rdn/README.md\">RDN (CVPR'2018)</a></li>\n          <li><a href=\"configs/dic/README.md\">DIC (CVPR'2020)</a></li>\n          <li><a href=\"configs/ttsr/README.md\">TTSR (CVPR'2020)</a></li>\n          <li><a href=\"configs/glean/README.md\">GLEAN (CVPR'2021)</a></li>\n          <li><a href=\"configs/liif/README.md\">LIIF (CVPR'2021)</a></li>\n          <li><a href=\"configs/real_esrgan/README.md\">Real-ESRGAN (ICCVW'2021)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n<tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Video Super-Resolution</b>\n      </td>\n      <td>\n        <b>Video Interpolation</b>\n      </td>\n      <td>\n        <b>Image Colorization</b>\n      </td>\n      <td>\n        <b>Image Translation</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n            <li><a href=\"configs/edvr/README.md\">EDVR (CVPR'2018)</a></li>\n            <li><a href=\"configs/tof/README.md\">TOF (IJCV'2019)</a></li>\n            <li><a href=\"configs/tdan/README.md\">TDAN (CVPR'2020)</a></li>\n            <li><a href=\"configs/basicvsr/README.md\">BasicVSR (CVPR'2021)</a></li>\n            <li><a href=\"configs/iconvsr/README.md\">IconVSR (CVPR'2021)</a></li>\n            <li><a href=\"configs/basicvsr_pp/README.md\">BasicVSR++ (CVPR'2022)</a></li>\n            <li><a href=\"configs/real_basicvsr/README.md\">RealBasicVSR (CVPR'2022)</a></li>\n      </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/tof/README.md\">TOFlow (IJCV'2019)</a></li>\n          <li><a href=\"configs/cain/README.md\">CAIN (AAAI'2020)</a></li>\n          <li><a href=\"configs/flavr/README.md\">FLAVR (CVPR'2021)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/inst_colorization/README.md\">InstColorization (CVPR'2020)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/pix2pix/README.md\">Pix2Pix (CVPR'2017)</a></li>\n          <li><a href=\"configs/cyclegan/README.md\">CycleGAN (ICCV'2017)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n<tbody>\n    <tr align=\"center\" valign=\"bottom\">\n      <td>\n        <b>Inpainting</b>\n      </td>\n      <td>\n        <b>Matting</b>\n      </td>\n      <td>\n        <b>Text-to-Image(Video)</b>\n      </td>\n      <td>\n        <b>3D-aware Generation</b>\n      </td>\n    </tr>\n    <tr valign=\"top\">\n      <td>\n        <ul>\n          <li><a href=\"configs/global_local/README.md\">Global&Local (ToG'2017)</a></li>\n          <li><a href=\"configs/deepfillv1/README.md\">DeepFillv1 (CVPR'2018)</a></li>\n          <li><a href=\"configs/partial_conv/README.md\">PConv (ECCV'2018)</a></li>\n          <li><a href=\"configs/deepfillv2/README.md\">DeepFillv2 (CVPR'2019)</a></li>\n          <li><a href=\"configs/aot_gan/README.md\">AOT-GAN (TVCG'2019)</a></li>\n          <li><a href=\"configs/stable_diffusion/README.md\">Stable Diffusion Inpainting (CVPR'2022)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/dim/README.md\">DIM (CVPR'2017)</a></li>\n          <li><a href=\"configs/indexnet/README.md\">IndexNet (ICCV'2019)</a></li>\n          <li><a href=\"configs/mask2former\">GCA (AAAI'2020)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"projects/glide/configs/README.md\">GLIDE (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/guided_diffusion/README.md\">Guided Diffusion (NeurIPS'2021)</a></li>\n          <li><a href=\"configs/disco_diffusion/README.md\">Disco-Diffusion (2022)</a></li>\n          <li><a href=\"configs/stable_diffusion/README.md\">Stable-Diffusion (2022)</a></li>\n          <li><a href=\"configs/dreambooth/README.md\">DreamBooth (2022)</a></li>\n          <li><a href=\"configs/textual_inversion/README.md\">Textual Inversion (2022)</a></li>\n          <li><a href=\"projects/prompt_to_prompt/README.md\">Prompt-to-Prompt (2022)</a></li>\n          <li><a href=\"projects/prompt_to_prompt/README.md\">Null-text Inversion (2022)</a></li>\n          <li><a href=\"configs/controlnet/README.md\">ControlNet (2023)</a></li>\n          <li><a href=\"configs/stable_diffusion_xl/README.md\">Stable Diffusion XL (2023)</a></li>\n          <li><a href=\"configs/animatediff/README.md\">AnimateDiff (2023)</a></li>\n          <li><a href=\"configs/vico/README.md\">ViCo (2023)</a></li>\n          <li><a href=\"configs/fastcomposer/README.md\">FastComposer (2023)</a></li>\n          <li><a href=\"projects/powerpaint/README.md\">PowerPaint (2023)</a></li>\n        </ul>\n      </td>\n      <td>\n        <ul>\n          <li><a href=\"configs/eg3d/README.md\">EG3D (CVPR'2022)</a></li>\n        </ul>\n      </td>\n    </tr>\n</td>\n    </tr>\n  </tbody>\n</table>\n\n请参考[模型库](https://mmagic.readthedocs.io/zh_CN/latest/model_zoo/overview.html)了解详情。\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🤝 致谢\n\nMMagic 是一款由不同学校和公司共同贡献的开源项目。我们感谢所有为项目提供算法复现和新功能支持的贡献者，以及提供宝贵反馈的用户。我们希望该工具箱和基准测试可以为社区提供灵活的代码工具，供用户复现现有算法并开发自己的新模型，从而不断为开源社区提供贡献。\n\n<a href=\"https://github.com/open-mmlab/mmagic/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=open-mmlab/mmagic\" />\n</a>\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🖊️ 引用\n\n如果 MMagic 对您的研究有所帮助，请按照如下 bibtex 引用它。\n\n```bibtex\n@misc{mmagic2023,\n    title = {{MMagic}: {OpenMMLab} Multimodal Advanced, Generative, and Intelligent Creation Toolbox},\n    author = {{MMagic Contributors}},\n    howpublished = {\\url{https://github.com/open-mmlab/mmagic}},\n    year = {2023}\n}\n```\n\n```bibtex\n@misc{mmediting2022,\n    title = {{MMEditing}: {OpenMMLab} Image and Video Editing Toolbox},\n    author = {{MMEditing Contributors}},\n    howpublished = {\\url{https://github.com/open-mmlab/mmediting}},\n    year = {2022}\n}\n```\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🎫 许可证\n\n本项目开源自 [Apache 2.0 license](LICENSE)。\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 🏗️ ️OpenMMLab 的其他项目\n\n- [MMEngine](https://github.com/open-mmlab/mmengine): OpenMMLab MMEngine.\n- [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab 计算机视觉基础库\n- [MIM](https://github.com/open-mmlab/mim): MIM 是 OpenMMlab 项目、算法、模型的统一入口\n- [MMPreTrain](https://github.com/open-mmlab/mmpretrain): OpenMMLab 预训练工具箱\n- [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab 目标检测工具箱\n- [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab 新一代通用 3D 目标检测平台\n- [MMRotate](https://github.com/open-mmlab/mmrotate): OpenMMLab 旋转框检测工具箱与测试基准\n- [MMSegmentation](https://github.com/open-mmlab/mmsegmentation): OpenMMLab 语义分割工具箱\n- [MMOCR](https://github.com/open-mmlab/mmocr): OpenMMLab 全流程文字检测识别理解工具箱\n- [MMPose](https://github.com/open-mmlab/mmpose): OpenMMLab 姿态估计工具箱\n- [MMHuman3D](https://github.com/open-mmlab/mmhuman3d): OpenMMLab 人体参数化模型工具箱与测试基准\n- [MMSelfSup](https://github.com/open-mmlab/mmselfsup): OpenMMLab 自监督学习工具箱与测试基准\n- [MMRazor](https://github.com/open-mmlab/mmrazor): OpenMMLab 模型压缩工具箱与测试基准\n- [MMFewShot](https://github.com/open-mmlab/mmfewshot): OpenMMLab 少样本学习工具箱与测试基准\n- [MMAction2](https://github.com/open-mmlab/mmaction2): OpenMMLab 新一代视频理解工具箱\n- [MMTracking](https://github.com/open-mmlab/mmtracking): OpenMMLab 一体化视频目标感知平台\n- [MMFlow](https://github.com/open-mmlab/mmflow): OpenMMLab 光流估计工具箱与测试基准\n- [MMagic](https://github.com/open-mmlab/mmagic): OpenMMLab 新一代人工智能内容生成（AIGC）工具箱\n- [MMDeploy](https://github.com/open-mmlab/mmdeploy): OpenMMLab 模型部署框架\n\n<p align=\"right\"><a href=\"#table\">🔝返回目录</a></p>\n\n## 欢迎加入 OpenMMLab 社区\n\n扫描下方的二维码可关注 OpenMMLab 团队的 [知乎官方账号](https://www.zhihu.com/people/openmmlab)，扫描下方微信二维码添加喵喵好友，进入 MMagic 微信交流社群。【加好友申请格式：研究方向+地区+学校/公司+姓名】\n\n<div align=\"center\">\n<img src=\"docs/zh_cn/_static/image/zhihu_qrcode.jpg\" height=\"500\" />  <img src=\"https://github.com/open-mmlab/mmagic/assets/62195058/0e80cbee-7b81-4648-8bc6-7a3585fa8476\" height=\"500\" />\n</div>\n\n我们会在 OpenMMLab 社区为大家\n\n- 📢 分享 AI 框架的前沿核心技术\n- 💻 解读 PyTorch 常用模块源码\n- 📰 发布 OpenMMLab 的相关新闻\n- 🚀 介绍 OpenMMLab 开发的前沿算法\n- 🏃 获取更高效的问题答疑和意见反馈\n- 🔥 提供与各行各业开发者充分交流的平台\n\n干货满满 📘，等你来撩 💗，OpenMMLab 社区期待您的加入 👬\n"
  },
  {
    "path": "configs/_base_/datasets/basicvsr_test_config.py",
    "content": "# configs for REDS4\nreds_data_root = 'data/REDS'\n\nreds_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\nreds_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=reds_data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_val.txt',\n        depth=1,\n        num_input_frames=100,\n        fixed_seq_len=100,\n        pipeline=reds_pipeline))\n\nreds_evaluator = [\n    dict(type='PSNR', prefix='REDS4-BIx4-RGB'),\n    dict(type='SSIM', prefix='REDS4-BIx4-RGB')\n]\n\n# configs for vimeo90k-bd and vimeo90k-bi\nvimeo_90k_data_root = 'data/vimeo90k'\nvimeo_90k_file_list = [\n    'im1.png', 'im2.png', 'im3.png', 'im4.png', 'im5.png', 'im6.png', 'im7.png'\n]\n\nvimeo_90k_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='MirrorSequence', keys=['img']),\n    dict(type='PackInputs')\n]\n\nvimeo_90k_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vimeo90k_seq', task_name='vsr'),\n        data_root=vimeo_90k_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_test_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        fixed_seq_len=7,\n        load_frames_list=dict(img=vimeo_90k_file_list, gt=['im4.png']),\n        pipeline=vimeo_90k_pipeline))\n\nvimeo_90k_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vimeo90k_seq', task_name='vsr'),\n        data_root=vimeo_90k_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_test_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        fixed_seq_len=7,\n        load_frames_list=dict(img=vimeo_90k_file_list, gt=['im4.png']),\n        pipeline=vimeo_90k_pipeline))\n\nvimeo_90k_bd_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Vimeo-90K-T-BDx4-Y'),\n    dict(type='SSIM', convert_to='Y', prefix='Vimeo-90K-T-BDx4-Y'),\n]\n\nvimeo_90k_bi_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Vimeo-90K-T-BIx4-Y'),\n    dict(type='SSIM', convert_to='Y', prefix='Vimeo-90K-T-BIx4-Y'),\n]\n\n# config for UDM10 (BDx4)\nudm10_data_root = 'data/UDM10'\n\nudm10_pipeline = [\n    dict(\n        type='GenerateSegmentIndices',\n        interval_list=[1],\n        filename_tmpl='{:04d}.png'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\nudm10_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='udm10', task_name='vsr'),\n        data_root=udm10_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        pipeline=udm10_pipeline))\n\nudm10_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='UDM10-BDx4-Y'),\n    dict(type='SSIM', convert_to='Y', prefix='UDM10-BDx4-Y')\n]\n\n# config for vid4\nvid4_data_root = 'data/Vid4'\n\nvid4_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\nvid4_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=1,\n        pipeline=vid4_pipeline))\n\nvid4_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=1,\n        pipeline=vid4_pipeline))\n\nvid4_bd_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='VID4-BDx4-Y'),\n    dict(type='SSIM', convert_to='Y', prefix='VID4-BDx4-Y'),\n]\nvid4_bi_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='VID4-BIx4-Y'),\n    dict(type='SSIM', convert_to='Y', prefix='VID4-BIx4-Y'),\n]\n\n# config for test\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    reds_dataloader,\n    vimeo_90k_bd_dataloader,\n    vimeo_90k_bi_dataloader,\n    udm10_dataloader,\n    vid4_bd_dataloader,\n    vid4_bi_dataloader,\n]\ntest_evaluator = [\n    reds_evaluator,\n    vimeo_90k_bd_evaluator,\n    vimeo_90k_bi_evaluator,\n    udm10_evaluator,\n    vid4_bd_evaluator,\n    vid4_bi_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/celeba.py",
    "content": "# Base config for CelebA-HQ dataset\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data/CelebA-HQ'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt=''),\n        ann_file='train_celeba_img_list.txt',\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt=''),\n        ann_file='val_celeba_img_list.txt',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE', mask_key='mask', scaling=100),\n    # By default, compute with pixel value from 0-1\n    # scale=2 to align with 1.0\n    # scale=100 seems to align with readme\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "configs/_base_/datasets/cifar10_noaug.py",
    "content": "cifar_pipeline = [dict(type='PackInputs')]\ncifar_dataset = dict(\n    type='CIFAR10',\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline)\n\ntrain_dataloader = dict(\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/cifar10_nopad.py",
    "content": "cifar_pipeline = [\n    dict(type='Flip', keys=['gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\ncifar_dataset = dict(\n    type='CIFAR10',\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline)\n\n# test dataset do not use flip\ncifar_pipeline_test = [dict(type='PackInputs')]\ncifar_dataset_test = dict(\n    type='CIFAR10',\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline_test)\n\ntrain_dataloader = dict(\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset_test,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset_test,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/comp1k.py",
    "content": "# Base config for Composition-1K dataset\n\n# dataset settings\ndataset_type = 'AdobeComp1kDataset'\ndata_root = 'data/adobe_composition-1k'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        ann_file='training_list.json',\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        ann_file='test_list.json',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\n# TODO: matting\nval_evaluator = [\n    dict(type='SAD'),\n    dict(type='MattingMSE'),\n    dict(type='GradientError'),\n    dict(type='ConnectivityError'),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "configs/_base_/datasets/deblurring-defocus_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='imgL',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='imgR',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\ndpdd_data_root = 'data/DPDD'\n\ndpdd_indoor_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='DPDD-Indoor', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        ann_file='indoor_labels.txt',\n        pipeline=test_pipeline))\ndpdd_indoor_evaluator = [\n    dict(type='MAE', prefix='DPDD-Indoor'),\n    dict(type='PSNR', prefix='DPDD-Indoor'),\n    dict(type='SSIM', prefix='DPDD-Indoor'),\n]\n\ndpdd_outdoor_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='DPDD-Outdoor', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        ann_file='outdoor_labels.txt',\n        pipeline=test_pipeline))\ndpdd_outdoor_evaluator = [\n    dict(type='MAE', prefix='DPDD-Outdoor'),\n    dict(type='PSNR', prefix='DPDD-Outdoor'),\n    dict(type='SSIM', prefix='DPDD-Outdoor'),\n]\n\ndpdd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='DPDD-Combined', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        pipeline=test_pipeline))\ndpdd_evaluator = [\n    dict(type='MAE', prefix='DPDD-Combined'),\n    dict(type='PSNR', prefix='DPDD-Combined'),\n    dict(type='SSIM', prefix='DPDD-Combined'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    dpdd_indoor_dataloader,\n    dpdd_outdoor_dataloader,\n    dpdd_dataloader,\n]\ntest_evaluator = [\n    dpdd_indoor_evaluator,\n    dpdd_outdoor_evaluator,\n    dpdd_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/deblurring-motion_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\ngopro_data_root = 'data/gopro/test'\ngopro_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='GoPro', task_name='deblurring'),\n        data_root=gopro_data_root,\n        data_prefix=dict(img='blur', gt='sharp'),\n        pipeline=test_pipeline))\ngopro_evaluator = [\n    dict(type='PSNR', prefix='GoPro'),\n    dict(type='SSIM', prefix='GoPro'),\n]\n\nhide_data_root = 'data/HIDE'\nhide_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='HIDE', task_name='deblurring'),\n        data_root=hide_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nhide_evaluator = [\n    dict(type='PSNR', prefix='HIDE'),\n    dict(type='SSIM', prefix='HIDE'),\n]\n\nrealblurj_data_root = 'data/RealBlur_J'\nrealblurj_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='RealBlur_J', task_name='deblurring'),\n        data_root=realblurj_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrealblurj_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='RealBlurJ'),\n    dict(type='SSIM', convert_to='Y', prefix='RealBlurJ'),\n]\n\nrealblurr_data_root = 'data/RealBlur_R'\nrealblurr_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='RealBlur_R', task_name='deblurring'),\n        data_root=realblurr_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrealblurr_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='RealBlurR'),\n    dict(type='SSIM', convert_to='Y', prefix='RealBlurR'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    gopro_dataloader,\n    hide_dataloader,\n    realblurj_dataloader,\n    realblurr_dataloader,\n]\ntest_evaluator = [\n    gopro_evaluator,\n    hide_evaluator,\n    realblurj_evaluator,\n    realblurr_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/decompression_test_config.py",
    "content": "quality = 10\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[quality, quality]),\n        bgr2rgb=True,\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\nclassic5_data_root = 'data/Classic5'\nclassic5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='classic5', task_name='CAR'),\n        data_root=classic5_data_root,\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\nclassic5_evaluator = [\n    dict(type='PSNR', prefix='Classic5'),\n    dict(type='SSIM', prefix='Classic5'),\n]\n\nlive1_data_root = 'data/LIVE1'\nlive1_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='live1', task_name='CAR'),\n        data_root=live1_data_root,\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\nlive1_evaluator = [\n    dict(type='PSNR', prefix='LIVE1'),\n    dict(type='SSIM', prefix='LIVE1'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    classic5_dataloader,\n    live1_dataloader,\n]\ntest_evaluator = [\n    classic5_evaluator,\n    live1_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/denoising-gaussian_color_test_config.py",
    "content": "sigma = 15\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/denoising_gaussian_test'\ncbsd68_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='CBSD68', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='CBSD68', gt='CBSD68'),\n        pipeline=test_pipeline))\ncbsd68_evaluator = [\n    dict(type='PSNR', prefix='CBSD68'),\n    dict(type='SSIM', prefix='CBSD68'),\n]\n\nkodak24_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Kodak24', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Kodak24', gt='Kodak24'),\n        pipeline=test_pipeline))\nkodak24_evaluator = [\n    dict(type='PSNR', prefix='Kodak24'),\n    dict(type='SSIM', prefix='Kodak24'),\n]\n\nmcmaster_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='McMaster', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='McMaster', gt='McMaster'),\n        pipeline=test_pipeline))\nmcmaster_evaluator = [\n    dict(type='PSNR', prefix='McMaster'),\n    dict(type='SSIM', prefix='McMaster'),\n]\n\nurban100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Urban100', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Urban100', gt='Urban100'),\n        pipeline=test_pipeline))\nurban100_evaluator = [\n    dict(type='PSNR', prefix='Urban100'),\n    dict(type='SSIM', prefix='Urban100'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    cbsd68_dataloader,\n    kodak24_dataloader,\n    mcmaster_dataloader,\n    urban100_dataloader,\n]\ntest_evaluator = [\n    cbsd68_evaluator,\n    kodak24_evaluator,\n    mcmaster_evaluator,\n    urban100_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/denoising-gaussian_gray_test_config.py",
    "content": "sigma = 15\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        to_y_channel=True,\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        to_y_channel=True,\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=1),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/denoising_gaussian_test'\nset12_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Set12', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Set12', gt='Set12'),\n        pipeline=test_pipeline))\nset12_evaluator = [\n    dict(type='PSNR', prefix='Set12'),\n    dict(type='SSIM', prefix='Set12'),\n]\n\nbsd68_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='BSD68', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='BSD68', gt='BSD68'),\n        pipeline=test_pipeline))\nbsd68_evaluator = [\n    dict(type='PSNR', prefix='BSD68'),\n    dict(type='SSIM', prefix='BSD68'),\n]\n\nurban100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Urban100', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Urban100', gt='Urban100'),\n        pipeline=test_pipeline))\nurban100_evaluator = [\n    dict(type='PSNR', prefix='Urban100'),\n    dict(type='SSIM', prefix='Urban100'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    set12_dataloader,\n    bsd68_dataloader,\n    urban100_dataloader,\n]\ntest_evaluator = [\n    set12_evaluator,\n    bsd68_evaluator,\n    urban100_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/denoising-real_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\nsidd_data_root = 'data/SIDD/val/'\nsidd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='SIDD', task_name='denoising'),\n        data_root=sidd_data_root,\n        data_prefix=dict(img='noisy', gt='gt'),\n        filename_tmpl=dict(gt='{}_GT', img='{}_NOISY'),\n        pipeline=test_pipeline))\nsidd_evaluator = [\n    dict(type='PSNR', prefix='SIDD'),\n    dict(type='SSIM', prefix='SIDD'),\n]\n\ndnd_data_root = 'data/DND'\ndnd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='DND', task_name='denoising'),\n        data_root=dnd_data_root,\n        data_prefix=dict(img='input', gt='groundtruth'),\n        pipeline=test_pipeline))\ndnd_evaluator = [\n    dict(type='PSNR', prefix='DND'),\n    dict(type='SSIM', prefix='DND'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    sidd_dataloader,\n    # dnd_dataloader,\n]\ntest_evaluator = [\n    sidd_evaluator,\n    # dnd_dataloader,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/deraining_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\nrain100h_data_root = 'data/Rain100H'\nrain100h_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Rain100H', task_name='deraining'),\n        data_root=rain100h_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrain100h_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Rain100H'),\n    dict(type='SSIM', convert_to='Y', prefix='Rain100H'),\n]\n\nrain100l_data_root = 'data/Rain100L'\nrain100l_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Rain100L', task_name='deraining'),\n        data_root=rain100l_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrain100l_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Rain100L'),\n    dict(type='SSIM', convert_to='Y', prefix='Rain100L'),\n]\n\ntest100_data_root = 'data/Test100'\ntest100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Test100', task_name='deraining'),\n        data_root=test100_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest100_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Test100'),\n    dict(type='SSIM', convert_to='Y', prefix='Test100'),\n]\n\ntest1200_data_root = 'data/Test1200'\ntest1200_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Test1200', task_name='deraining'),\n        data_root=test1200_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest1200_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Test1200'),\n    dict(type='SSIM', convert_to='Y', prefix='Test1200'),\n]\n\ntest2800_data_root = 'data/Test2800'\ntest2800_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='Test2800', task_name='deraining'),\n        data_root=test2800_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest2800_evaluator = [\n    dict(type='PSNR', convert_to='Y', prefix='Test2800'),\n    dict(type='SSIM', convert_to='Y', prefix='Test2800'),\n]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    rain100h_dataloader,\n    rain100l_dataloader,\n    test100_dataloader,\n    test1200_dataloader,\n    test2800_dataloader,\n]\ntest_evaluator = [\n    rain100h_evaluator,\n    rain100l_evaluator,\n    test100_evaluator,\n    test1200_evaluator,\n    test2800_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/ffhq_flip.py",
    "content": "dataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Flip', keys=['gt'], direction='horizontal'),\n    dict(type='PackInputs', keys='gt')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='PackInputs', keys=['gt'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/grow_scale_imgs_ffhq_styleganv1.py",
    "content": "dataset_type = 'GrowScaleImgDataset'\n\npipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Flip', keys='gt', direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type='GrowScaleImgDataset',\n        data_roots={\n            '1024': './data/ffhq/images',\n            '256': './data/ffhq/ffhq_imgs/ffhq_256',\n        },\n        gpu_samples_base=4,\n        # note that this should be changed with total gpu number\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4,\n            '128': 4,\n            '256': 4,\n            '512': 4,\n            '1024': 4\n        },\n        len_per_stage=300000,\n        pipeline=pipeline),\n    sampler=dict(type='InfiniteSampler', shuffle=True))\n\ntest_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type='BasicImageDataset',\n        data_prefix=dict(gt=''),\n        pipeline=pipeline,\n        data_root='./data/ffhq/images'),\n    sampler=dict(type='DefaultSampler', shuffle=False))\n\nval_dataloader = test_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/imagenet_128.py",
    "content": "# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='RandomCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(128, 128), keys='gt', backend='pillow'),\n    dict(type='Flip', keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='CenterCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(128, 128), keys='gt', backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/imagenet_256.py",
    "content": "# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='RandomCropLongEdge', keys=['img']),\n    dict(type='Resize', scale=(256, 256), keys=['img'], backend='pillow'),\n    dict(type='Flip', keys=['img'], flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='CenterCropLongEdge', keys=['img']),\n    dict(type='Resize', scale=(256, 256), backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/imagenet_512.py",
    "content": "# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='RandomCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(512, 512), keys='gt', backend='pillow'),\n    dict(type='Flip', keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='CenterCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(512, 512), keys='gt', backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/imagenet_64.py",
    "content": "# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='RandomCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(64, 64), keys='gt', backend='pillow'),\n    dict(type='Flip', keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='CenterCropLongEdge', keys='gt'),\n    dict(type='Resize', scale=(64, 64), keys='gt', backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/imagenet_noaug_128.py",
    "content": "# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# Remove `RandomFlip` augmentation and change `RandomCropLongEdge` to\n# `CenterCropLongEdge` to eliminate randomness.\n# dataset settings\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='CenterCropLongEdge'),\n    dict(type='Resize', scale=(128, 128), backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='CenterCropLongEdge'),\n    dict(type='Resize', scale=(128, 128), backend='pillow'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='data/imagenet',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/_base_/datasets/liif_test_config.py",
    "content": "scale_test_list = [2, 3, 4, 6, 18, 30]\n\ntest_pipelines = [[\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomDownSampling', scale_min=scale_test, scale_max=scale_test),\n    dict(type='GenerateCoordinateAndCell', scale=scale_test, reshape_gt=False),\n    dict(type='PackInputs')\n] for scale_test in scale_test_list]\n\n# test config for Set5\nset5_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type='DefaultSampler', shuffle=False),\n        dataset=dict(\n            type='BasicImageDataset',\n            metainfo=dict(dataset_type='set5', task_name='sisr'),\n            data_root='data/Set5',\n            data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\nset5_evaluators = [[\n    dict(type='PSNR', crop_border=scale, prefix=f'Set5x{scale}'),\n    dict(type='SSIM', crop_border=scale, prefix=f'Set5x{scale}'),\n] for scale in scale_test_list]\n\n# test config for Set14\nset14_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type='DefaultSampler', shuffle=False),\n        dataset=dict(\n            type='BasicImageDataset',\n            metainfo=dict(dataset_type='set14', task_name='sisr'),\n            data_root='data/Set14',\n            data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\nset14_evaluators = [[\n    dict(type='PSNR', crop_border=scale, prefix=f'Set14x{scale}'),\n    dict(type='SSIM', crop_border=scale, prefix=f'Set14x{scale}'),\n] for scale in scale_test_list]\n\n# test config for DIV2K\ndiv2k_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type='DefaultSampler', shuffle=False),\n        dataset=dict(\n            type='BasicImageDataset',\n            ann_file='meta_info_DIV2K100sub_GT.txt',\n            metainfo=dict(dataset_type='div2k', task_name='sisr'),\n            data_root='data/DIV2K',\n            data_prefix=dict(\n                img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\ndiv2k_evaluators = [[\n    dict(type='PSNR', crop_border=scale, prefix=f'DIV2Kx{scale}'),\n    dict(type='SSIM', crop_border=scale, prefix=f'DIV2Kx{scale}'),\n] for scale in scale_test_list]\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    *set5_dataloaders,\n    *set14_dataloaders,\n    *div2k_dataloaders,\n]\ntest_evaluator = [\n    *set5_evaluators,\n    *set14_evaluators,\n    *div2k_evaluators,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/lsun_stylegan.py",
    "content": "dataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/paired_imgs_256x256_crop.py",
    "content": "dataset_type = 'PairedImageDataset'\n# domain_a = None  # set by user\n# domain_b = None  # set by user\n\ntrain_pipeline = [\n    dict(\n        type='LoadPairedImageFromFile',\n        key='pair',\n        domain_a='A',\n        domain_b='B',\n        color_type='color'),\n    dict(\n        type='Resize',\n        keys=['img_A', 'img_B'],\n        scale=(286, 286),\n        interpolation='bicubic'),\n    dict(type='FixedCrop', keys=['img_A', 'img_B'], crop_size=(256, 256)),\n    dict(type='Flip', keys=['img_A', 'img_B'], direction='horizontal'),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type='PackInputs',\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadPairedImageFromFile',\n        key='pair',\n        domain_a='A',\n        domain_b='B',\n        color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(\n                type='Resize',\n                scale=(256, 256),\n                keys='img',\n                interpolation='bicubic')\n        ]),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type='PackInputs',\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/places.py",
    "content": "# Base config for places365 dataset\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data/Places'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt='data_large'),\n        ann_file='meta/places365_train_challenge.txt',\n        # Note that Places365-standard (1.8M images) and\n        # Place365-challenge (8M images) use different image lists.\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt='val_large'),\n        ann_file='meta/places365_val.txt',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE', mask_key='mask', scaling=100),\n    # By default, compute with pixel value from 0-1\n    # scale=2 to align with 1.0\n    # scale=100 seems to align with readme\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "configs/_base_/datasets/sisr_x2_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=2, prefix='Set5'),\n        dict(type='SSIM', crop_border=2, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=2, prefix='Set14'),\n        dict(type='SSIM', crop_border=2, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        # ann_file='meta_info_DIV2K800sub_GT.txt',\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=2, prefix='DIV2K'),\n        dict(type='SSIM', crop_border=2, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/sisr_x3_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=3, prefix='Set5'),\n        dict(type='SSIM', crop_border=3, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=3, prefix='Set14'),\n        dict(type='SSIM', crop_border=3, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X3_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=3, prefix='DIV2K'),\n        dict(type='SSIM', crop_border=3, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/sisr_x4_test_config.py",
    "content": "test_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=4, prefix='Set5'),\n        dict(type='SSIM', crop_border=4, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=4, prefix='Set14'),\n        dict(type='SSIM', crop_border=4, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=4, prefix='DIV2K'),\n        dict(type='SSIM', crop_border=4, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/tdan_test_config.py",
    "content": "# configs for SPMCS-30\nSPMC_data_root = 'data/SPMCS'\n\nSPMC_pipeline = [\n    dict(type='GenerateFrameIndiceswithPadding', padding='reflection'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\nSPMC_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='spmcs', task_name='vsr'),\n        data_root=SPMC_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_SPMCS_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=SPMC_pipeline))\n\nSPMC_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='spmcs', task_name='vsr'),\n        data_root=SPMC_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_SPMCS_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=SPMC_pipeline))\n\nSPMC_bd_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(\n            type='PSNR', crop_border=8, convert_to='Y', prefix='SPMCS-BDx4-Y'),\n        dict(\n            type='SSIM', crop_border=8, convert_to='Y', prefix='SPMCS-BDx4-Y'),\n    ])\nSPMC_bi_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(\n            type='PSNR', crop_border=8, convert_to='Y', prefix='SPMCS-BIx4-Y'),\n        dict(\n            type='SSIM', crop_border=8, convert_to='Y', prefix='SPMCS-BIx4-Y'),\n    ])\n\n# config for vid4\nvid4_data_root = 'data/Vid4'\n\nvid4_pipeline = [\n    # dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='GenerateFrameIndiceswithPadding', padding='reflection'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\nvid4_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=vid4_pipeline))\n\nvid4_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=vid4_pipeline))\n\nvid4_bd_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', convert_to='Y', prefix='VID4-BDx4-Y'),\n        dict(type='SSIM', convert_to='Y', prefix='VID4-BDx4-Y'),\n    ])\nvid4_bi_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', convert_to='Y', prefix='VID4-BIx4-Y'),\n        dict(type='SSIM', convert_to='Y', prefix='VID4-BIx4-Y'),\n    ])\n\n# config for test\ntest_cfg = dict(type='MultiTestLoop')\ntest_dataloader = [\n    SPMC_bd_dataloader,\n    SPMC_bi_dataloader,\n    vid4_bd_dataloader,\n    vid4_bi_dataloader,\n]\ntest_evaluator = [\n    SPMC_bd_evaluator,\n    SPMC_bi_evaluator,\n    vid4_bd_evaluator,\n    vid4_bi_evaluator,\n]\n"
  },
  {
    "path": "configs/_base_/datasets/unconditional_imgs_128x128.py",
    "content": "# dataset_type = 'BasicImageDataset'\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Resize', keys='gt', scale=(128, 128)),\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/unconditional_imgs_64x64.py",
    "content": "dataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Resize', keys='gt', scale=(64, 64)),\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/unconditional_imgs_flip_512x512.py",
    "content": "dataset_type = 'BasicImageDataset'\n\n# TODO:\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Resize', keys='gt', scale=(512, 512)),\n    dict(type='Flip', keys=['gt'], direction='horizontal'),  # TODO:\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/unconditional_imgs_flip_lanczos_resize_256x256.py",
    "content": "dataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='Resize',\n        keys='gt',\n        scale=(256, 256),\n        interpolation='lanczos',\n        backend='pillow'),\n    dict(type='Flip', keys=['gt'], direction='horizontal'),\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/datasets/unpaired_imgs_256x256.py",
    "content": "dataset_type = 'UnpairedImageDataset'\ndomain_a = None  # set by user\ndomain_b = None  # set by user\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img_A', color_type='color'),\n    dict(type='LoadImageFromFile', key='img_B', color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(type='Resize', scale=(286, 286), interpolation='bicubic'),\n            dict(\n                type='Crop',\n                keys=['img'],\n                crop_size=(256, 256),\n                random_crop=True),\n        ]),\n    dict(type='Flip', keys=['img_A'], direction='horizontal'),\n    dict(type='Flip', keys=['img_B'], direction='horizontal'),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type='PackInputs',\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img_A', color_type='color'),\n    dict(type='LoadImageFromFile', key='img_B', color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=dict(\n            type='Resize', scale=(256, 256), interpolation='bicubic'),\n    ),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type='PackInputs',\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        test_mode=True,\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        test_mode=True,\n        pipeline=test_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "configs/_base_/default_runtime.py",
    "content": "default_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        out_dir=save_dir,\n        by_epoch=False,\n        max_keep_ckpts=10,\n        save_best='PSNR',\n        rule='greater',\n    ),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)\n\nload_from = None\nresume = False\n\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n"
  },
  {
    "path": "configs/_base_/gen_default_runtime.py",
    "content": "default_scope = 'mmagic'\n\nrandomness = dict(seed=2022, diff_rank_seed=True)\n# env settings\ndist_params = dict(backend='nccl')\n# disable opencv multithreading to avoid system being overloaded\nopencv_num_threads = 0\n# set multi-process start method as `fork` to speed up the training\nmp_start_method = 'fork'\n\n# configure for default hooks\ndefault_hooks = dict(\n    # record time of every iteration.\n    timer=dict(type='IterTimerHook'),\n    # print log every 100 iterations.\n    logger=dict(type='LoggerHook', interval=100, log_metric_by_epoch=False),\n    # save checkpoint per 10000 iterations\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        max_keep_ckpts=20,\n        less_keys=['FID-Full-50k/fid', 'FID-50k/fid', 'swd/avg'],\n        greater_keys=['IS-50k/is', 'ms-ssim/avg'],\n        save_optimizer=True))\n\n# config for environment\nenv_cfg = dict(\n    # whether to enable cudnn benchmark.\n    cudnn_benchmark=True,\n    # set multi process parameters.\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    # set distributed parameters.\n    dist_cfg=dict(backend='nccl'))\n\n# set log level\nlog_level = 'INFO'\nlog_processor = dict(type='LogProcessor', by_epoch=False)\n\n# load from which checkpoint\nload_from = None\n\n# whether to resume training from the loaded checkpoint\nresume = None\n\n# config for model wrapper\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=False)\n\n# set visualizer\nvis_backends = [dict(type='VisBackend')]\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n\n# config for training\ntrain_cfg = dict(by_epoch=False, val_begin=1, val_interval=10000)\n\n# config for val\nval_cfg = dict(type='MultiValLoop')\nval_evaluator = dict(type='Evaluator')\n\n# config for test\ntest_cfg = dict(type='MultiTestLoop')\ntest_evaluator = dict(type='Evaluator')\n\n# config for optim_wrapper_constructor\noptim_wrapper = dict(constructor='MultiOptimWrapperConstructor')\n"
  },
  {
    "path": "configs/_base_/inpaint_default_runtime.py",
    "content": "default_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=50000,\n        by_epoch=False,\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n\nlog_level = 'INFO'\nlog_processor = dict(type='LogProcessor', by_epoch=False)\n\nload_from = None\nresume = False\n\n# TODO: support auto scaling lr\n"
  },
  {
    "path": "configs/_base_/matting_default_runtime.py",
    "content": "default_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='trimap_path',\n    img_keys=['pred_alpha', 'trimap', 'gt_merged', 'gt_alpha'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=2000)]\n\nlog_level = 'INFO'\nlog_processor = dict(type='LogProcessor', by_epoch=False)\n\nload_from = None\nresume = False\n\n# TODO: support auto scaling lr\n"
  },
  {
    "path": "configs/_base_/models/base_cyclegan.py",
    "content": "_domain_a = None  # set by user\n_domain_b = None  # set by user\nmodel = dict(\n    type='CycleGAN',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='ResnetGenerator',\n        in_channels=3,\n        out_channels=3,\n        base_channels=64,\n        norm_cfg=dict(type='IN'),\n        use_dropout=False,\n        num_blocks=9,\n        padding_mode='reflect',\n        init_cfg=dict(type='normal', gain=0.02)),\n    discriminator=dict(\n        type='PatchDiscriminator',\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='IN'),\n        init_cfg=dict(type='normal', gain=0.02)),\n    default_domain=None,  # set by user\n    reachable_domains=None,  # set by user\n    related_domains=None  # set by user\n)\n"
  },
  {
    "path": "configs/_base_/models/base_deepfillv1.py",
    "content": "# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\nmodel = dict(\n    type='DeepFillv1Inpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='DeepFillEncoderDecoder',\n        stage1=dict(\n            type='GLEncoderDecoder',\n            encoder=dict(type='DeepFillEncoder', padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                in_channels=128,\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=128,\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect')),\n        stage2=dict(\n            type='DeepFillRefiner',\n            encoder_attention=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_attention',\n                padding_mode='reflect'),\n            encoder_conv=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_conv',\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=128,\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect'),\n            contextual_attention=dict(\n                type='ContextualAttentionNeck',\n                in_channels=128,\n                padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                in_channels=256,\n                padding_mode='reflect'))),\n    disc=dict(\n        type='DeepFillv1Discriminators',\n        global_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=256,\n            fc_in_channels=256 * 16 * 16,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n        local_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 8 * 8,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2))),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='wgan',\n        loss_weight=0.0001,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_gp=dict(type='GradientPenaltyLoss', loss_weight=10.),\n    loss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0001)),\n    disc=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0001)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "configs/_base_/models/base_deepfillv2.py",
    "content": "# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\nmodel = dict(\n    type='TwoStageInpaintor',\n    disc_input_with_mask=True,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='DeepFillEncoderDecoder',\n        stage1=dict(\n            type='GLEncoderDecoder',\n            encoder=dict(\n                type='DeepFillEncoder',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                conv_type='gated_conv',\n                in_channels=96,\n                channel_factor=0.75,\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect')),\n        stage2=dict(\n            type='DeepFillRefiner',\n            encoder_attention=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_attention',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            encoder_conv=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_conv',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect'),\n            contextual_attention=dict(\n                type='ContextualAttentionNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                in_channels=192,\n                conv_type='gated_conv',\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'))),\n    disc=dict(\n        type='MultiLayerDiscriminator',\n        in_channels=4,\n        max_channels=256,\n        fc_in_channels=None,\n        num_convs=6,\n        norm_cfg=None,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        with_spectral_norm=True,\n    ),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='hinge',\n        loss_weight=0.1,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0001)),\n    disc=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0001)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "configs/_base_/models/base_edvr.py",
    "content": "_base_ = '../default_runtime.py'\n\nscale = 4\n\ntrain_pipeline = [\n    dict(type='GenerateFrameIndices', interval_list=[1], frames_per_clip=99),\n    dict(type='TemporalReverse', keys='img_path', reverse_ratio=0),\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateFrameIndiceswithPadding', padding='reflection_circle'),\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/REDS'\nsave_dir = './work_dirs'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_train.txt',\n        depth=2,\n        num_input_frames=5,\n        num_output_frames=1,\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_val.txt',\n        depth=2,\n        num_input_frames=5,\n        num_output_frames=1,\n        pipeline=val_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=600_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)),\n)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        out_dir=save_dir,\n        by_epoch=False))\n"
  },
  {
    "path": "configs/_base_/models/base_gl.py",
    "content": "# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\nmodel = dict(\n    type='GLInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',\n        encoder=dict(type='GLEncoder', norm_cfg=dict(type='SyncBN')),\n        decoder=dict(type='GLDecoder', norm_cfg=dict(type='SyncBN')),\n        dilation_neck=dict(\n            type='GLDilationNeck', norm_cfg=dict(type='SyncBN'))),\n    disc=dict(\n        type='GLDiscs',\n        global_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=6,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n        local_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=5,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n    ),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=0.001,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)),\n    disc=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "configs/_base_/models/base_glean.py",
    "content": "_base_ = '../default_runtime.py'\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel', find_unused_parameters=True)\n\nsave_dir = './work_dirs'\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineAnnealingLR', by_epoch=False, T_max=600_000, eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n        save_best=['MAE', 'PSNR', 'SSIM'],\n        rule=['less', 'greater', 'greater']),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/_base_/models/base_liif.py",
    "content": "_base_ = '../default_runtime.py'\nwork_dir = './work_dirs/liif'\nsave_dir = './work_dirs'\n\nscale_min, scale_max = 1, 4\nscale_test = 4\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomDownSampling',\n        scale_min=scale_min,\n        scale_max=scale_max,\n        patch_size=48),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='GenerateCoordinateAndCell', sample_quantity=2304),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='RandomDownSampling', scale_min=scale_max, scale_max=scale_max),\n    dict(type='GenerateCoordinateAndCell', reshape_gt=False),\n    dict(type='PackInputs')\n]\n# test_pipeline = [\n#     dict(\n#         type='LoadImageFromFile',\n#         key='gt',\n#         color_type='color',\n#         channel_order='rgb',\n#         imdecode_backend='cv2'),\n#     dict(\n#         type='LoadImageFromFile',\n#         key='img',\n#         color_type='color',\n#         channel_order='rgb',\n#         imdecode_backend='cv2'),\n#     dict(type='GenerateCoordinateAndCell', scale=scale_test,\n#          reshape_gt=False),\n#     dict(type='PackInputs')\n# ]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(gt='DIV2K_train_HR_sub'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale_max),\n        dict(type='SSIM', crop_border=scale_max),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_000_000, val_interval=3000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[200_000, 400_000, 600_000, 800_000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=3000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/_base_/models/base_pconv.py",
    "content": "# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\nmodel = dict(\n    type='PConvInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='SyncBN', requires_grad=False),\n            norm_eval=True),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='SyncBN'))),\n    disc=None,\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg16',\n        layer_weights={\n            '4': 1.,\n            '9': 1.,\n            '16': 1.,\n        },\n        perceptual_weight=0.05,\n        style_weight=120,\n        pretrained=('torchvision://vgg16')),\n    loss_out_percep=True,\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=6.,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.,\n    ),\n    loss_tv=dict(\n        type='MaskedTVLoss',\n        loss_weight=0.1,\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.00005))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "configs/_base_/models/base_pix2pix.py",
    "content": "source_domain = None  # set by user\ntarget_domain = None  # set by user\n# model settings\nmodel = dict(\n    type='Pix2Pix',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='UnetGenerator',\n        in_channels=3,\n        out_channels=3,\n        num_down=8,\n        base_channels=64,\n        norm_cfg=dict(type='BN'),\n        use_dropout=True,\n        init_cfg=dict(type='normal', gain=0.02)),\n    discriminator=dict(\n        type='PatchDiscriminator',\n        in_channels=6,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='BN'),\n        init_cfg=dict(type='normal', gain=0.02)),\n    loss_config=dict(pixel_loss_weight=100.0),\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain])\n"
  },
  {
    "path": "configs/_base_/models/base_styleganv1.py",
    "content": "model = dict(\n    type='StyleGANv1',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    style_channels=512,\n    generator=dict(\n        type='StyleGANv1Generator', out_size=None, style_channels=512),\n    discriminator=dict(type='StyleGAN1Discriminator', in_size=None))\n"
  },
  {
    "path": "configs/_base_/models/base_styleganv2.py",
    "content": "# define GAN model\n\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nloss_config = dict(\n    r1_loss_weight=10. / 2. * d_reg_interval,\n    r1_interval=d_reg_interval,\n    norm_mode='HWC',\n    g_reg_interval=g_reg_interval,\n    g_reg_weight=2. * g_reg_interval,\n    pl_batch_shrink=2)\n\nmodel = dict(\n    type='StyleGAN2',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='StyleGANv2Generator',\n        out_size=None,  # Need to be set.\n        style_channels=512,\n    ),\n    discriminator=dict(\n        type='StyleGAN2Discriminator',\n        in_size=None,  # Need to be set.\n    ),\n    ema_config=dict(type='ExponentialMovingAverage'),\n    loss_config=loss_config)\n"
  },
  {
    "path": "configs/_base_/models/base_styleganv3.py",
    "content": "# define GAN model\n\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nmodel = dict(\n    type='StyleGAN3',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='StyleGANv3Generator',\n        noise_size=512,\n        style_channels=512,\n        out_size=None,  # Need to be set.\n        img_channels=3,\n    ),\n    discriminator=dict(\n        type='StyleGAN2Discriminator',\n        in_size=None,  # Need to be set.\n    ),\n    ema_config=dict(type='ExponentialMovingAverage'),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n"
  },
  {
    "path": "configs/_base_/models/base_tof.py",
    "content": "_base_ = '../default_runtime.py'\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ntrain_dataset_type = 'BasicFramesDataset'\nval_dataset_type = 'BasicFramesDataset'\ndata_root = 'data/vimeo_triplet'\nsave_dir = './work_dirs'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=train_dataset_type,\n        ann_file='tri_trainlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=val_dataset_type,\n        ann_file='tri_testlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\n# 5000 iters == 1 epoch\nepoch_length = 5000\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_000_000, val_interval=epoch_length)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(\n        type='Adam',\n        lr=5e-5,\n        betas=(0.9, 0.99),\n        weight_decay=1e-4,\n    ),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    gamma=0.5,\n    milestones=[200000, 400000, 600000, 800000])\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=epoch_length,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/_base_/models/biggan/base_biggan_128x128.py",
    "content": "model = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')),\n    generator_steps=1,\n    discriminator_steps=1)\n"
  },
  {
    "path": "configs/_base_/models/dcgan/base_dcgan_128x128.py",
    "content": "# define GAN model\nmodel = dict(\n    type='DCGAN',\n    noise_size=100,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='DCGANGenerator', output_scale=128, base_channels=1024),\n    discriminator=dict(\n        type='DCGANDiscriminator',\n        input_scale=128,\n        output_scale=4,\n        out_channels=100))\n"
  },
  {
    "path": "configs/_base_/models/dcgan/base_dcgan_64x64.py",
    "content": "# define GAN model\nmodel = dict(\n    type='DCGAN',\n    noise_size=100,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(type='DCGANGenerator', output_scale=64, base_channels=1024),\n    discriminator=dict(\n        type='DCGANDiscriminator',\n        input_scale=64,\n        output_scale=4,\n        out_channels=1))\n"
  },
  {
    "path": "configs/_base_/models/sagan/base_sagan_128x128.py",
    "content": "model = dict(\n    type='SAGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='SAGANGenerator',\n        output_scale=128,\n        base_channels=64,\n        attention_cfg=dict(type='SelfAttentionBlock'),\n        attention_after_nth_block=4,\n        with_spectral_norm=True),\n    discriminator=dict(\n        type='ProjDiscriminator',\n        input_scale=128,\n        base_channels=64,\n        attention_cfg=dict(type='SelfAttentionBlock'),\n        attention_after_nth_block=1,\n        with_spectral_norm=True),\n    generator_steps=1,\n    discriminator_steps=1)\n"
  },
  {
    "path": "configs/_base_/models/sagan/base_sagan_32x32.py",
    "content": "model = dict(\n    type='SAGAN',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    num_classes=10,\n    generator=dict(\n        type='SAGANGenerator',\n        num_classes=10,\n        output_scale=32,\n        base_channels=256,\n        attention_cfg=dict(type='SelfAttentionBlock'),\n        attention_after_nth_block=2,\n        with_spectral_norm=True),\n    discriminator=dict(\n        type='ProjDiscriminator',\n        num_classes=10,\n        input_scale=32,\n        base_channels=128,\n        attention_cfg=dict(type='SelfAttentionBlock'),\n        attention_after_nth_block=1,\n        with_spectral_norm=True),\n    generator_steps=1,\n    discriminator_steps=5)\n"
  },
  {
    "path": "configs/_base_/models/sngan_proj/base_sngan_proj_128x128.py",
    "content": "# define GAN model\nmodel = dict(\n    type='SNGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(type='SNGANGenerator', output_scale=128, base_channels=64),\n    discriminator=dict(\n        type='ProjDiscriminator', input_scale=128, base_channels=64),\n    discriminator_steps=2)\n"
  },
  {
    "path": "configs/_base_/models/sngan_proj/base_sngan_proj_32x32.py",
    "content": "# define GAN model\nmodel = dict(\n    type='SNGAN',\n    num_classes=10,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(type='SNGANGenerator', output_scale=32, base_channels=256),\n    discriminator=dict(\n        type='ProjDiscriminator', input_scale=32, base_channels=128),\n    discriminator_steps=5)\n"
  },
  {
    "path": "configs/_base_/schedules/.gitkeep",
    "content": ""
  },
  {
    "path": "configs/animatediff/README.md",
    "content": "# AnimateDiff (2023)\n\n> [AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning](https://arxiv.org/abs/2307.04725)\n\n> **Task**: Text2Video\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWith the advance of text-to-image models (e.g., Stable Diffusion) and corresponding personalization techniques such as DreamBooth and LoRA, everyone can manifest their imagination into high-quality images at an affordable cost. Subsequently, there is a great demand for image animation techniques to further combine generated static images with motion dynamics. In this report, we propose a practical framework to animate most of the existing personalized text-to-image models once and for all, saving efforts in model-specific tuning. At the core of the proposed framework is to insert a newly initialized motion modeling module into the frozen text-to-image model and train it on video clips to distill reasonable motion priors. Once trained, by simply injecting this motion modeling module, all personalized versions derived from the same base T2I readily become text-driven models that produce diverse and personalized animated images. We conduct our evaluation on several public representative personalized text-to-image models across anime pictures and realistic photographs, and demonstrate that our proposed framework helps these models generate temporally smooth animation clips while preserving the domain and diversity of their outputs.\n\n<!-- [IMAGE] -->\n\n![512](https://github.com/ElliotQi/mmagic/assets/46469021/54d92aca-dfa9-4eeb-ba38-3f6c981e5399)\n\n## Pretrained models\n\nWe use Stable Diffusion's weights provided by HuggingFace Diffusers. You do not have to download the weights manually. If you use Diffusers wrapper, the weights will be downloaded automatically.\n\nThis model has several weights including vae, unet and clip. You should download the weights from [stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) and change the 'pretrained_model_path' in config to the weights dir.\n\n|                             Model                              | Dataset |                                                      Download                                                       |\n| :------------------------------------------------------------: | :-----: | :-----------------------------------------------------------------------------------------------------------------: |\n|              [ToonYou](./animatediff_ToonYou.py)               |    -    |        [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/toonyou_beta3.safetensors)        |\n|               [Lyriel](./animatediff_Lyriel.py)                |    -    |         [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/lyriel_v16.safetensors)          |\n|          [RcnzCartoon](./animatediff_RcnzCartoon.py)           |    -    |      [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/rcnzCartoon3d_v10.safetensors)      |\n|             [MajicMix](./animatediff_MajicMix.py)              |    -    | [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/majicmixRealistic_v5Preview.safetensors) |\n|      [RealisticVision](./animatediff_RealisticVision.py)       |    -    | [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/realisticVisionV51_v20Novae.safetensors) |\n|   [MotionModel_v1-5_v2](./animatediff_RealisticVision_v2.py)   | WebVid  |            [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/mm_sd_v15_v2.ckpt)            |\n| [MotionModel_v1-5_2Mval](./animatediff_RealisticVision_v1.py)  | WebVid  |       [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/mm_fromscratch_2.5Mval.ckpt)       |\n| [MotionModel_v1-5_10Mval](./animatediff_RealisticVision_v1.py) | WebVid  |       [model](https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/mm_fromscratch_10Mval.ckpt)        |\n\nLatest models could be looked up on [OpenXLab_AnimateDiff](https://openxlab.org.cn/models/detail/ElliotQi/AnimateDiff).\n\n## Quick Start\n\nRunning the following codes, you can get a text-generated image.\n\n### Reccomendation\n\nIt's highly recommended to install [xformers](https://github.com/facebookresearch/xformers). It would save about 20G memory for 512\\*512 resolution generation.\n\n### Steps\n\n1. Download [ToonYou](https://civitai.com/api/download/models/78775) and MotionModule checkpoint\n\n```bash\n#!/bin/bash\n\nmkdir models && cd models\nmkdir Motion_Module && mkdir DreamBooth_LoRA\ngdown 1RqkQuGPaCO5sGZ6V6KZ-jUWmsRu48Kdq -O Motion_Module/\ngdown 1ql0g_Ys4UCz2RnokYlBjyOYPbttbIpbu -O models/Motion_Module/\nwget https://civitai.com/api/download/models/78775 -P DreamBooth_LoRA/ --content-disposition --no-check-certificate\n```\n\n2. Modify the config file in `configs/animatediff/animatediff_ToonYou.py`\n\n```python\n    models_path = {Your Checkpoints Path}\n    motion_module_cfg=dict(\n        path={Your MotionModule Path}\n    ),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path={Your Dreambooth_Lora Path},\n        steps=25,\n        guidance_scale=7.5)\n```\n\n3. Enjoy Text2Video world\n\n```python\nfrom mmengine import Config\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nimport os\nimport torch\nfrom pathlib import Path\nimport datetime\nfrom mmagic.models.editors.animatediff import save_videos_grid\n\n\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/animatediff/animatediff_ToonYou.py')\nanimatediff = MODELS.build(cfg.model).cuda()\nprompts = [\n    \"best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress\",\n\n    \"masterpiece, best quality, 1girl, solo, cherry blossoms, hanami, pink flower, white flower, spring season, wisteria, petals, flower, plum blossoms, outdoors, falling petals, white hair, black eyes,\",\n\n    \"best quality, masterpiece, 1boy, formal, abstract, looking at viewer, masculine, marble pattern\",\n\n    \"best quality, masterpiece, 1girl, cloudy sky, dandelion, contrapposto, alternate hairstyle,\"\n]\n\nnegative_prompts = [\n    \"\",\n    \"badhandv4,easynegative,ng_deepnegative_v1_75t,verybadimagenegative_v1.3, bad-artist, bad_prompt_version2-neg, teeth\",\n    \"\",\n    \"\",\n]\n\nsample_idx = 0\nrandom_seeds = cfg.randomness['seed']\nrandom_seeds = [random_seeds] if isinstance(random_seeds, int) else list(random_seeds)\nsamples = []\ntime_str = datetime.datetime.now().strftime(\"%Y-%m-%dT%H-%M-%S\")\nsavedir = f\"samples/{Path(cfg.model['dream_booth_lora_cfg']['type']).stem}-{time_str}\"\nos.makedirs(savedir)\nfor prompt_idx, (prompt, n_prompt, random_seed) in enumerate(zip(prompts, negative_prompts, random_seeds)):\n    output_dict = animatediff.infer(prompt,negative_prompt=n_prompt, video_length=16, height=256, width=256, seed=random_seed,num_inference_steps=cfg.model['dream_booth_lora_cfg']['steps'])\n    sample = output_dict['samples']\n    prompt = \"-\".join((prompt.replace(\"/\", \"\").split(\" \")[:10]))\n    save_videos_grid(sample, f\"{savedir}/sample/{sample_idx}-{prompt}.gif\")\n    print(f\"save to {savedir}/sample/{prompt}.gif\")\n    samples.append(sample)\n    sample_idx += 1\n\nsamples = torch.concat(samples)\nsave_videos_grid(samples, f\"{savedir}/sample.gif\", n_rows=4)\n\n\n```\n\n### Prompts for other config\n\n- Lyriel\n\n```yaml\n  prompt:\n    - \"dark shot, epic realistic, portrait of halo, sunglasses, blue eyes, tartan scarf, white hair by atey ghailan, by greg rutkowski, by greg tocchini, by james gilleard, by joe fenton, by kaethe butcher, gradient yellow, black, brown and magenta color scheme, grunge aesthetic!!! graffiti tag wall background, art by greg rutkowski and artgerm, soft cinematic light, adobe lightroom, photolab, hdr, intricate, highly detailed, depth of field, faded, neutral colors, hdr, muted colors, hyperdetailed, artstation, cinematic, warm lights, dramatic light, intricate details, complex background, rutkowski, teal and orange\"\n    - \"A forbidden castle high up in the mountains, pixel art, intricate details2, hdr, intricate details, hyperdetailed5, natural skin texture, hyperrealism, soft light, sharp, game art, key visual, surreal\"\n    - \"dark theme, medieval portrait of a man sharp features, grim, cold stare, dark colors, Volumetric lighting, baroque oil painting by Greg Rutkowski, Artgerm, WLOP, Alphonse Mucha dynamic lighting hyperdetailed intricately detailed, hdr, muted colors, complex background, hyperrealism, hyperdetailed, amandine van ray\"\n    - \"As I have gone alone in there and with my treasures bold, I can keep my secret where and hint of riches new and old. Begin it where warm waters halt and take it in a canyon down, not far but too far to walk, put in below the home of brown.\"\n\n  n_prompt:\n    - \"3d, cartoon, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, young, loli, elf, 3d, illustration\"\n    - \"3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, girl, loli, young, large breasts, red eyes, muscular\"\n    - \"dof, grayscale, black and white, bw, 3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, girl, loli, young, large breasts, red eyes, muscular,badhandsv5-neg, By bad artist -neg 1, monochrome\"\n    - \"holding an item, cowboy, hat, cartoon, 3d, disfigured, bad art, deformed,extra limbs,close up,b&w, weird colors, blurry, duplicate, morbid, mutilated, [out of frame], extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, ugly, blurry, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, out of frame, ugly, extra limbs, bad anatomy, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, mutated hands, fused fingers, too many fingers, long neck, Photoshop, video game, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of frame, blurry, bad art, bad anatomy, 3d render\"\n```\n\n- RcnzCartoon\n\n```yaml\nprompt:\n    - \"Jane Eyre with headphones, natural skin texture,4mm,k textures, soft cinematic light, adobe lightroom, photolab, hdr, intricate, elegant, highly detailed, sharp focus, cinematic look, soothing tones, insane details, intricate details, hyperdetailed, low contrast, soft cinematic light, dim colors, exposure blend, hdr, faded\"\n    - \"close up Portrait photo of muscular bearded guy in a worn mech suit, light bokeh, intricate, steel metal [rust], elegant, sharp focus, photo by greg rutkowski, soft lighting, vibrant colors, masterpiece, streets, detailed face\"\n    - \"absurdres, photorealistic, masterpiece, a 30 year old man with gold framed, aviator reading glasses and a black hooded jacket and a beard, professional photo, a character portrait, altermodern, detailed eyes, detailed lips, detailed face, grey eyes\"\n    - \"a golden labrador, warm vibrant colours, natural lighting, dappled lighting, diffused lighting, absurdres, highres,k, uhd, hdr, rtx, unreal, octane render, RAW photo, photorealistic, global illumination, subsurface scattering\"\n\n  n_prompt:\n    - \"deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, mutated hands and fingers, disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation\"\n    - \"nude, cross eyed, tongue, open mouth, inside, 3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, red eyes, muscular\"\n    - \"easynegative, cartoon, anime, sketches, necklace, earrings worst quality, low quality, normal quality, bad anatomy, bad hands, shiny skin, error, missing fingers, extra digit, fewer digits, jpeg artifacts, signature, watermark, username, blurry, chubby, anorectic, bad eyes, old, wrinkled skin, red skin, photograph By bad artist -neg, big eyes, muscular face,\"\n    - \"beard, EasyNegative, lowres, chromatic aberration, depth of field, motion blur, blurry, bokeh, bad quality, worst quality, multiple arms, badhand\"\n\n```\n\n- MajicMix\n\n```yaml\nprompt:\n    - \"1girl, offshoulder, light smile, shiny skin best quality, masterpiece, photorealistic\"\n    - \"best quality, masterpiece, photorealistic, 1boy, 50 years old beard, dramatic lighting\"\n    - \"best quality, masterpiece, photorealistic, 1girl, light smile, shirt with collars, waist up, dramatic lighting, from below\"\n    - \"male, man, beard, bodybuilder, skinhead,cold face, tough guy, cowboyshot, tattoo, french windows, luxury hotel masterpiece, best quality, photorealistic\"\n\n  n_prompt:\n    - \"ng_deepnegative_v1_75t, badhandv4, worst quality, low quality, normal quality, lowres, bad anatomy, bad hands, watermark, moles\"\n    - \"nsfw, ng_deepnegative_v1_75t,badhandv4, worst quality, low quality, normal quality, lowres,watermark, monochrome\"\n    - \"nsfw, ng_deepnegative_v1_75t,badhandv4, worst quality, low quality, normal quality, lowres,watermark, monochrome\"\n    - \"nude, nsfw, ng_deepnegative_v1_75t, badhandv4, worst quality, low quality, normal quality, lowres, bad anatomy, bad hands, monochrome, grayscale watermark, moles, people\"\n```\n\n- Realistic & Realistic_v2 (same prompts with different random seed, find more details in their config files)\n\n```yaml\n  prompt:\n    - \"b&w photo of 42 y.o man in black clothes, bald, face, half body, body, high detailed skin, skin pores, coastline, overcast weather, wind, waves, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3\"\n    - \"close up photo of a rabbit, forest, haze, halation, bloom, dramatic atmosphere, centred, rule of thirds, 200mm 1.4f macro shot\"\n    - \"photo of coastline, rocks, storm weather, wind, waves, lightning, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3\"\n    - \"night, b&w photo of old house, post apocalypse, forest, storm weather, wind, rocks, 8k uhd, dslr, soft lighting, high quality, film grain\"\n\n  n_prompt:\n    - \"semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck\"\n    - \"semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck\"\n    - \"blur, haze, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, mutated hands and fingers, deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated, ugly, disgusting, amputation\"\n    - \"blur, haze, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, art, mutated hands and fingers, deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated, ugly, disgusting, amputation\"\n\n```\n\n4. Start training motion module with the following command:\n\n```bash\n# 4 GPUS\nbash tools/dist_train.sh configs/animatediff/animatediff.py 4\n# 1 GPU\npython tools/train.py configs/animatediff/animatediff.py\n\n```\n\n## Citation\n\n```bibtex\n@article{guo2023animatediff,\n  title={AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning},\n  author={Guo, Yuwei and Yang, Ceyuan and Rao, Anyi and Wang, Yaohui and Qiao, Yu and Lin, Dahua and Dai, Bo},\n  journal={arXiv preprint arXiv:2307.04725},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/animatediff/README_zh-CN.md",
    "content": "# AnimateDiff (2023)\n\n> [AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning](https://arxiv.org/abs/2307.04725)\n\n> **任务**: 视频生成, 扩散模型\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n年来，AIGC 宛如 AI 海洋中最不可或缺的波涛，逐渐凝成滔天的巨浪，突破壁垒、扑向海岸，并酝酿着下一波潮水高涨。以 Stable Diffusion 这股翻腾最为汹涌的波涛为代表的文生图模型飞速发展，使得更多非专业用户也能通过简单的文字提示生成高质量的图片内容。然而，文生图模型的训练成本往往十分高昂，为减轻微调模型的代价，相应的模型定制化方法如 DreamBooth, LoRA 应运而生，使得用户在开源权重的基础上，用少量数据和消费级显卡即可实现模型个性化和特定风格下的图像生成质量的提升。这极大推动了 HuggingFace, CivitAI 等开源模型社区的发展，众多艺术家和爱好者在其中贡献了许多高质量的微调模型。不觉间，平静的海洋洪水滔天，海滩上留下数不清的色彩斑斓的鹅卵石，便是爱好者们精心调制的 AI 画作。\n\n与动画相比，静态图像的表达能力是有限的。随着越来越多效果惊艳的微调模型的出现和视频生成技术的发展，人们期待着能够赋予这些定制化模型生成动画的能力。在最新开源的 AnimateDiff 中，作者提出了一种将任何定制化文生图模型拓展用于动画生成的框架，可以在保持原有定制化模型画面质量的基础上，生成相应的动画片段。为色彩斑斓的鹅卵石，增添一些动态的光泽。\n\n<!-- [IMAGE] -->\n\n![512](https://github.com/ElliotQi/mmagic/assets/46469021/54d92aca-dfa9-4eeb-ba38-3f6c981e5399)\n\n## 模型与结果\n\n我们使用HuggingFace提供的Stable Diffusion权重。如果您使用Diffusers wrapper，您不必手动下载权重，其将自动下载。\n\n<!-- SKIP THIS TABLE -->\n\n|                              模型                              |                                                下载                                                 |\n| :------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------: |\n|              [ToonYou](./animatediff_ToonYou.py)               |                       [model](https://civitai.com/api/download/models/78775)                        |\n|               [Lyriel](./animatediff_Lyriel.py)                |                       [model](https://civitai.com/api/download/models/72396)                        |\n|          [RcnzCartoon](./animatediff_RcnzCartoon.py)           |                       [model](https://civitai.com/api/download/models/71009)                        |\n|             [MajicMix](./animatediff_MajicMix.py)              |                       [model](https://civitai.com/api/download/models/79068)                        |\n|      [RealisticVision](./animatediff_RealisticVision.py)       |                       [model](https://civitai.com/api/download/models/29460)                        |\n|   [RealisticVision_v2](./animatediff_RealisticVision_v2.py)    |          [model](https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15_v2.ckpt)          |\n|   [MotionModel_v1-5_v2](./animatediff_RealisticVision_v2.py)   |      [model](https://download.openxlab.org.cn/models/ElliotQi/AnimateDiff/weight/mm_sd_v15_v2)      |\n| [MotionModel_v1-5_2Mval](./animatediff_RealisticVision_v1.py)  | [model](https://download.openxlab.org.cn/models/ElliotQi/AnimateDiff/weight/mm_fromscratch_2.5Mval) |\n| [MotionModel_v1-5_10Mval](./animatediff_RealisticVision_v1.py) |                                               WebVid                                                |\n\n最新模型更新请在[浦源_AnimateDiff](https://openxlab.org.cn/models/detail/ElliotQi/AnimateDiff)中查看\n\n## 快速开始\n\n运行以下代码，你可以使用AnimateDiff通过文本生成视频。\n\n#### 小建议\n\n强烈推荐安装 [xformers](https://github.com/facebookresearch/xformers)，512\\*512分辨率可以节省约20G显存。\n\n1. 下载 [ToonYou](https://civitai.com/api/download/models/78775) 和 MotionModule 权重\n\n```bash\n#!/bin/bash\n\nmkdir models && cd models\nmkdir Motion_Module && mkdir DreamBooth_LoRA\ngdown 1RqkQuGPaCO5sGZ6V6KZ-jUWmsRu48Kdq -O Motion_Module/\ngdown 1ql0g_Ys4UCz2RnokYlBjyOYPbttbIpbu -O models/Motion_Module/\nwget https://civitai.com/api/download/models/78775 -P DreamBooth_LoRA/ --content-disposition --no-check-certificate\n```\n\n2. 修改 `configs/animatediff/animatediff_ToonYou.py` 配置文件中的权重路径\n\n```python\n    models_path = {Your Checkpoints Path}\n    motion_module_cfg=dict(\n        path={Your MotionModule Path}\n    ),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path={Your Dreambooth_Lora Path},\n        steps=25,\n        guidance_scale=7.5)\n```\n\n3. 享受AnimateDiff视频生成吧！\n\n```python\nfrom mmengine import Config\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nimport os\nimport torch\nfrom pathlib import Path\nimport datetime\nfrom mmagic.models.editors.animatediff import save_videos_grid\n\n\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/animatediff/animatediff_ToonYou.py')\nanimatediff = MODELS.build(cfg.model).cuda()\nprompts = [\n    \"best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress\",\n\n    \"masterpiece, best quality, 1girl, solo, cherry blossoms, hanami, pink flower, white flower, spring season, wisteria, petals, flower, plum blossoms, outdoors, falling petals, white hair, black eyes,\",\n\n    \"best quality, masterpiece, 1boy, formal, abstract, looking at viewer, masculine, marble pattern\",\n\n    \"best quality, masterpiece, 1girl, cloudy sky, dandelion, contrapposto, alternate hairstyle,\"\n]\n\nnegative_prompts = [\n    \"\",\n    \"badhandv4,easynegative,ng_deepnegative_v1_75t,verybadimagenegative_v1.3, bad-artist, bad_prompt_version2-neg, teeth\",\n    \"\",\n    \"\",\n]\n\nsample_idx = 0\nrandom_seeds = cfg.randomness['seed']\nrandom_seeds = [random_seeds] if isinstance(random_seeds, int) else list(random_seeds)\nsamples = []\ntime_str = datetime.datetime.now().strftime(\"%Y-%m-%dT%H-%M-%S\")\nsavedir = f\"samples/{Path(cfg.model['dream_booth_lora_cfg']['type']).stem}-{time_str}\"\nos.makedirs(savedir)\nfor prompt_idx, (prompt, n_prompt, random_seed) in enumerate(zip(prompts, negative_prompts, random_seeds)):\n    output_dict = animatediff.infer(prompt,negative_prompt=n_prompt, video_length=16, height=256, width=256, seed=random_seed,num_inference_steps=cfg.model['dream_booth_lora_cfg']['steps'])\n    sample = output_dict['samples']\n    prompt = \"-\".join((prompt.replace(\"/\", \"\").split(\" \")[:10]))\n    save_videos_grid(sample, f\"{savedir}/sample/{sample_idx}-{prompt}.gif\")\n    print(f\"save to {savedir}/sample/{prompt}.gif\")\n    samples.append(sample)\n    sample_idx += 1\n\nsamples = torch.concat(samples)\nsave_videos_grid(samples, f\"{savedir}/sample.gif\", n_rows=4)\n\n\n```\n\n### 其他配置文件的Prompts\n\n- Lyriel\n\n```yaml\n  prompt:\n    - \"dark shot, epic realistic, portrait of halo, sunglasses, blue eyes, tartan scarf, white hair by atey ghailan, by greg rutkowski, by greg tocchini, by james gilleard, by joe fenton, by kaethe butcher, gradient yellow, black, brown and magenta color scheme, grunge aesthetic!!! graffiti tag wall background, art by greg rutkowski and artgerm, soft cinematic light, adobe lightroom, photolab, hdr, intricate, highly detailed, depth of field, faded, neutral colors, hdr, muted colors, hyperdetailed, artstation, cinematic, warm lights, dramatic light, intricate details, complex background, rutkowski, teal and orange\"\n    - \"A forbidden castle high up in the mountains, pixel art, intricate details2, hdr, intricate details, hyperdetailed5, natural skin texture, hyperrealism, soft light, sharp, game art, key visual, surreal\"\n    - \"dark theme, medieval portrait of a man sharp features, grim, cold stare, dark colors, Volumetric lighting, baroque oil painting by Greg Rutkowski, Artgerm, WLOP, Alphonse Mucha dynamic lighting hyperdetailed intricately detailed, hdr, muted colors, complex background, hyperrealism, hyperdetailed, amandine van ray\"\n    - \"As I have gone alone in there and with my treasures bold, I can keep my secret where and hint of riches new and old. Begin it where warm waters halt and take it in a canyon down, not far but too far to walk, put in below the home of brown.\"\n\n  n_prompt:\n    - \"3d, cartoon, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name, young, loli, elf, 3d, illustration\"\n    - \"3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, girl, loli, young, large breasts, red eyes, muscular\"\n    - \"dof, grayscale, black and white, bw, 3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, girl, loli, young, large breasts, red eyes, muscular,badhandsv5-neg, By bad artist -neg 1, monochrome\"\n    - \"holding an item, cowboy, hat, cartoon, 3d, disfigured, bad art, deformed,extra limbs,close up,b&w, weird colors, blurry, duplicate, morbid, mutilated, [out of frame], extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, ugly, blurry, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, out of frame, ugly, extra limbs, bad anatomy, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, mutated hands, fused fingers, too many fingers, long neck, Photoshop, video game, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of frame, blurry, bad art, bad anatomy, 3d render\"\n```\n\n- RcnzCartoon\n\n```yaml\nprompt:\n    - \"Jane Eyre with headphones, natural skin texture,4mm,k textures, soft cinematic light, adobe lightroom, photolab, hdr, intricate, elegant, highly detailed, sharp focus, cinematic look, soothing tones, insane details, intricate details, hyperdetailed, low contrast, soft cinematic light, dim colors, exposure blend, hdr, faded\"\n    - \"close up Portrait photo of muscular bearded guy in a worn mech suit, light bokeh, intricate, steel metal [rust], elegant, sharp focus, photo by greg rutkowski, soft lighting, vibrant colors, masterpiece, streets, detailed face\"\n    - \"absurdres, photorealistic, masterpiece, a 30 year old man with gold framed, aviator reading glasses and a black hooded jacket and a beard, professional photo, a character portrait, altermodern, detailed eyes, detailed lips, detailed face, grey eyes\"\n    - \"a golden labrador, warm vibrant colours, natural lighting, dappled lighting, diffused lighting, absurdres, highres,k, uhd, hdr, rtx, unreal, octane render, RAW photo, photorealistic, global illumination, subsurface scattering\"\n\n  n_prompt:\n    - \"deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, mutated hands and fingers, disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation\"\n    - \"nude, cross eyed, tongue, open mouth, inside, 3d, cartoon, anime, sketches, worst quality, low quality, normal quality, lowres, normal quality, monochrome, grayscale, skin spots, acnes, skin blemishes, bad anatomy, red eyes, muscular\"\n    - \"easynegative, cartoon, anime, sketches, necklace, earrings worst quality, low quality, normal quality, bad anatomy, bad hands, shiny skin, error, missing fingers, extra digit, fewer digits, jpeg artifacts, signature, watermark, username, blurry, chubby, anorectic, bad eyes, old, wrinkled skin, red skin, photograph By bad artist -neg, big eyes, muscular face,\"\n    - \"beard, EasyNegative, lowres, chromatic aberration, depth of field, motion blur, blurry, bokeh, bad quality, worst quality, multiple arms, badhand\"\n\n```\n\n- MajicMix\n\n```yaml\nprompt:\n    - \"1girl, offshoulder, light smile, shiny skin best quality, masterpiece, photorealistic\"\n    - \"best quality, masterpiece, photorealistic, 1boy, 50 years old beard, dramatic lighting\"\n    - \"best quality, masterpiece, photorealistic, 1girl, light smile, shirt with collars, waist up, dramatic lighting, from below\"\n    - \"male, man, beard, bodybuilder, skinhead,cold face, tough guy, cowboyshot, tattoo, french windows, luxury hotel masterpiece, best quality, photorealistic\"\n\n  n_prompt:\n    - \"ng_deepnegative_v1_75t, badhandv4, worst quality, low quality, normal quality, lowres, bad anatomy, bad hands, watermark, moles\"\n    - \"nsfw, ng_deepnegative_v1_75t,badhandv4, worst quality, low quality, normal quality, lowres,watermark, monochrome\"\n    - \"nsfw, ng_deepnegative_v1_75t,badhandv4, worst quality, low quality, normal quality, lowres,watermark, monochrome\"\n    - \"nude, nsfw, ng_deepnegative_v1_75t, badhandv4, worst quality, low quality, normal quality, lowres, bad anatomy, bad hands, monochrome, grayscale watermark, moles, people\"\n```\n\n- Realistic & Realistic_v2 (两者使用相同prompts和不同的随机种子)\n\n```yaml\n  prompt:\n    - \"b&w photo of 42 y.o man in black clothes, bald, face, half body, body, high detailed skin, skin pores, coastline, overcast weather, wind, waves, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3\"\n    - \"close up photo of a rabbit, forest, haze, halation, bloom, dramatic atmosphere, centred, rule of thirds, 200mm 1.4f macro shot\"\n    - \"photo of coastline, rocks, storm weather, wind, waves, lightning, 8k uhd, dslr, soft lighting, high quality, film grain, Fujifilm XT3\"\n    - \"night, b&w photo of old house, post apocalypse, forest, storm weather, wind, rocks, 8k uhd, dslr, soft lighting, high quality, film grain\"\n\n  n_prompt:\n    - \"semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck\"\n    - \"semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck\"\n    - \"blur, haze, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, mutated hands and fingers, deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated, ugly, disgusting, amputation\"\n    - \"blur, haze, deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime, art, mutated hands and fingers, deformed, distorted, disfigured, poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, disconnected limbs, mutation, mutated, ugly, disgusting, amputation\"\n\n```\n\n4. 开始训练运动模块脚本:\n\n```bash\n# 4 GPUS\nbash tools/dist_train.sh configs/animatediff/animatediff.py 4\n# 1 GPU\npython tools/train.py configs/animatediff/animatediff.py\n\n```\n\n## 引用\n\n```bibtex\n@article{guo2023animatediff,\n  title={AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning},\n  author={Guo, Yuwei and Yang, Ceyuan and Rao, Anyi and Wang, Yaohui and Qiao, Yu and Lin, Dahua and Dai, Bo},\n  journal={arXiv preprint arXiv:2307.04725},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/animatediff/animatediff_Lyriel.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        10917152860782582783, 6399018107401806238, 15875751942533906793,\n        6653196880059936551\n    ],\n    diff_rank_seed=True)\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path + 'Motion_Module/mm_sd_v14.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path + 'DreamBooth_LoRA/lyriel_v16.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/animatediff_MajicMix.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        1572448948722921032, 1099474677988590681, 6488833139725635347,\n        18339859844376517918\n    ],\n    diff_rank_seed=True)\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path + 'Motion_Module/mm_sd_v14.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path +\n        'DreamBooth_LoRA/majicmixRealistic_v5Preview.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/animatediff_RcnzCartoon.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        16931037867122267877, 2094308009433392066, 4292543217695451092,\n        15572665120852309890\n    ],\n    diff_rank_seed=True)\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path + 'Motion_Module/mm_sd_v14.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path + 'DreamBooth_LoRA/rcnzCartoon3d_v10.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/animatediff_RealisticVision.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        5658137986800322009, 12099779162349365895, 10499524853910852697,\n        16768009035333711932\n    ],\n    diff_rank_seed=True)\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path + 'Motion_Module/mm_sd_v14.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path +\n        'DreamBooth_LoRA/realisticVisionV20_v20.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/animatediff_RealisticVision_v2.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        13100322578370451493, 14752961627088720670, 9329399085567825781,\n        16987697414827649302\n    ],\n    diff_rank_seed=True)\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        use_inflated_groupnorm=True,\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=True,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=32,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path +\n                           'Motion_Module/mm_sd_v15_v2.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path +\n        'DreamBooth_LoRA/realisticVisionV20_v20.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/animatediff_ToonYou.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nmodels_path = '/home/AnimateDiff/models/'\nrandomness = dict(\n    seed=[\n        10788741199826055526, 6520604954829636163, 6519455744612555650,\n        16372571278361863751\n    ],\n    diff_rank_seed=True)\n\nval_prompts = [\n    'best quality, masterpiece, 1girl, looking at viewer,\\\n        blurry background, upper body, contemporary, dress',\n    'masterpiece, best quality, 1girl, solo, cherry blossoms,\\\n        hanami, pink flower, white flower, spring season, wisteria,\\\n            petals, flower, plum blossoms, outdoors, falling petals,\\\n                white hair, black eyes,',\n    'best quality, masterpiece, 1boy, formal, abstract,\\\n        looking at viewer, masculine, marble pattern',\n    'best quality, masterpiece, 1girl, cloudy sky,\\\n        dandelion, contrapposto, alternate hairstyle,'\n]\nval_neg_propmts = [\n    '',\n    'badhandv4,easynegative,ng_deepnegative_v1_75t,verybadimagenegative_v1.3,\\\n        bad-artist, bad_prompt_version2-neg, teeth',\n    '',\n    '',\n]\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1),\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    motion_module_cfg=dict(path=models_path + 'Motion_Module/mm_sd_v14.ckpt'),\n    dream_booth_lora_cfg=dict(\n        type='ToonYou',\n        path=models_path + 'DreamBooth_LoRA/toonyou_beta3.safetensors',\n        steps=25,\n        guidance_scale=7.5))\n"
  },
  {
    "path": "configs/animatediff/metafile.yml",
    "content": "Collections:\n- Name: AnimateDiff\n  Paper:\n    Title: 'AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models\n      without Specific Tuning'\n    URL: https://arxiv.org/abs/2307.04725\n  README: configs/animatediff/README.md\n  Task:\n  - text2video\n  Year: 2023\nModels:\n- Config: configs/animatediff/animatediff_ToonYou.py\n  In Collection: AnimateDiff\n  Name: animatediff_ToonYou\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/toonyou_beta3.safetensors\n- Config: configs/animatediff/animatediff_Lyriel.py\n  In Collection: AnimateDiff\n  Name: animatediff_Lyriel\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/lyriel_v16.safetensors\n- Config: configs/animatediff/animatediff_RcnzCartoon.py\n  In Collection: AnimateDiff\n  Name: animatediff_RcnzCartoon\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/rcnzCartoon3d_v10.safetensors\n- Config: configs/animatediff/animatediff_MajicMix.py\n  In Collection: AnimateDiff\n  Name: animatediff_MajicMix\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/majicmixRealistic_v5Preview.safetensors\n- Config: configs/animatediff/animatediff_RealisticVision.py\n  In Collection: AnimateDiff\n  Name: animatediff_RealisticVision\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/realisticVisionV51_v20Novae.safetensors\n- Config: configs/animatediff/animatediff_RealisticVision_v2.py\n  In Collection: AnimateDiff\n  Name: animatediff_RealisticVision_v2\n  Results:\n  - Dataset: WebVid\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/mm_sd_v15_v2.ckpt\n- Config: configs/animatediff/animatediff_RealisticVision_v1.py\n  In Collection: AnimateDiff\n  Name: animatediff_RealisticVision_v1\n  Results:\n  - Dataset: WebVid\n    Metrics: {}\n    Task: Text2Video\n  - Dataset: WebVid\n    Metrics: {}\n    Task: Text2Video\n  Weights: https://download.openxlab.org.cn/models/Masbfca/AnimateDiff/weight/mm_fromscratch_10Mval.ckpt\n"
  },
  {
    "path": "configs/aot_gan/README.md",
    "content": "# AOT-GAN (TVCG'2021)\n\n> [AOT-GAN: Aggregated Contextual Transformations for High-Resolution Image Inpainting](https://arxiv.org/abs/2104.01431.pdf)\n\n> **Task**: Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nState-of-the-art image inpainting approaches can suffer from generating distorted structures and blurry textures in high-resolution images (e.g., 512x512). The challenges mainly drive from (1) image content reasoning from distant contexts, and (2) fine-grained texture synthesis for a large missing region. To overcome these two challenges, we propose an enhanced GAN-based model, named Aggregated COntextual-Transformation GAN (AOT-GAN), for high-resolution image inpainting. Specifically, to enhance context reasoning, we construct the generator of AOT-GAN by stacking multiple layers of a proposed AOT block. The AOT blocks aggregate contextual transformations from various receptive fields, allowing to capture both informative distant image contexts and rich patterns of interest for context reasoning. For improving texture synthesis, we enhance the discriminator of AOT-GAN by training it with a tailored mask-prediction task. Such a training objective forces the discriminator to distinguish the detailed appearances of real and synthesized patches, and in turn, facilitates the generator to synthesize clear textures. Extensive comparisons on Places2, the most challenging benchmark with 1.8 million high-resolution images of 365 complex scenes, show that our model outperforms the state-of-the-art by a significant margin in terms of FID with 38.60% relative improvement. A user study including more than 30 subjects further validates the superiority of AOT-GAN. We further evaluate the proposed AOT-GAN in practical applications, e.g., logo removal, face editing, and object removal. Results show that our model achieves promising completions in the real world. We release code and models in [this https URL](https://github.com/researchmm/AOT-GAN-for-Inpainting).\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12756472/169230414-3ca7fb6b-cf2a-401f-8696-71df75a08c32.png\"/>\n</div >\n\n## Results and models\n\n|                   Model                    |       Dataset       |     Mask Type      | Resolution | Train Iters |   Test Set    | l1 error | PSNR  | SSIM  |   Training Resources    |                    Download                    |\n| :----------------------------------------: | :-----------------: | :----------------: | :--------: | :---------: | :-----------: | :------: | :---: | :---: | :---------------------: | :--------------------------------------------: |\n| [AOT-GAN](./aot-gan_smpgan_4xb4_places-512x512.py) | Places365-Challenge | free-form (50-60%) |  512x512   |    500k     | Places365-val |   7.07   | 19.01 | 0.682 | 4 (GeForce GTX 1080 Ti) | [model](https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.json) |\n\nMore results for different mask area:\n\n<!-- SKIP THIS TABLE -->\n\n| Metric          | Mask Area | Paper Results | Reimplemented Results |\n| :-------------- | :-------- | :------------ | :-------------------- |\n| L1 (10^-2)      | 1 – 10%   | 0.55          | 0.54                  |\n| (lower better)  | 10 – 20%  | 1.19          | 1.47                  |\n|                 | 20 – 30%  | 2.11          | 2.79                  |\n|                 | 30 – 40%  | 3.20          | 4.38                  |\n|                 | 40 – 50%  | 4.51          | 6.28                  |\n|                 | 50 – 60%  | 7.07          | 10.16                 |\n| PSNR            | 1 – 10%   | 34.79         | inf                   |\n| (higher better) | 10 – 20%  | 29.49         | 31.22                 |\n|                 | 20 – 30%  | 26.03         | 27.65                 |\n|                 | 30 – 40%  | 23.58         | 25.06                 |\n|                 | 40 – 50%  | 21.65         | 23.01                 |\n|                 | 50 – 60%  | 19.01         | 20.05                 |\n| SSIM            | 1 – 10%   | 0.976         | 0.982                 |\n| (higher better) | 10 – 20%  | 0.940         | 0.951                 |\n|                 | 20 – 30%  | 0.890         | 0.911                 |\n|                 | 30 – 40%  | 0.835         | 0.866                 |\n|                 | 40 – 50%  | 0.773         | 0.815                 |\n|                 | 50 – 60%  | 0.682         | 0.739                 |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py\n\n# single-gpu train\npython tools/train.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth\n\n# single-gpu test\npython tools/test.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{yan2021agg,\n  author = {Zeng, Yanhong and Fu, Jianlong and Chao, Hongyang and Guo, Baining},\n  title = {Aggregated Contextual Transformations for High-Resolution Image Inpainting},\n  booktitle = {Arxiv},\n  pages={-},\n  year = {2020}\n}\n```\n"
  },
  {
    "path": "configs/aot_gan/README_zh-CN.md",
    "content": "# AOT-GAN (TVCG'2021)\n\n> [AOT-GAN: Aggregated Contextual Transformations for High-Resolution Image Inpainting](https://arxiv.org/abs/2104.01431.pdf)\n\n> **任务**: 图像修复\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12756472/169230414-3ca7fb6b-cf2a-401f-8696-71df75a08c32.png\"/>\n</div >\n\n## 结果与模型\n\n**Places365-Challenge**\n\n|                        算法                        |      掩膜类型      | 分辨率  | 训练集容量 |    测试集     | l1 损失 | PSNR  | SSIM  |        GPU 信息         |                              下载                              |\n| :------------------------------------------------: | :----------------: | :-----: | :--------: | :-----------: | :-----: | :---: | :---: | :---------------------: | :------------------------------------------------------------: |\n| [AOT-GAN](./aot-gan_smpgan_4xb4_places-512x512.py) | free-form (50-60%) | 512x512 |    500k    | Places365-val |  7.07   | 19.01 | 0.682 | 4 (GeForce GTX 1080 Ti) | [模型](https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.json) |\n\n<!-- SKIP THIS TABLE -->\n\n| 评估指标        | 掩膜缺损 | 论文结果 | 复现结果 |\n| :-------------- | :------- | :------- | :------- |\n| L1 (10^-2)      | 1 – 10%  | 0.55     | 0.54     |\n| (lower better)  | 10 – 20% | 1.19     | 1.47     |\n|                 | 20 – 30% | 2.11     | 2.79     |\n|                 | 30 – 40% | 3.20     | 4.38     |\n|                 | 40 – 50% | 4.51     | 6.28     |\n|                 | 50 – 60% | 7.07     | 10.16    |\n| PSNR            | 1 – 10%  | 34.79    | inf      |\n| (higher better) | 10 – 20% | 29.49    | 31.22    |\n|                 | 20 – 30% | 26.03    | 27.65    |\n|                 | 30 – 40% | 23.58    | 25.06    |\n|                 | 40 – 50% | 21.65    | 23.01    |\n|                 | 50 – 60% | 19.01    | 20.05    |\n| SSIM            | 1 – 10%  | 0.976    | 0.982    |\n| (higher better) | 10 – 20% | 0.940    | 0.951    |\n|                 | 20 – 30% | 0.890    | 0.911    |\n|                 | 30 – 40% | 0.835    | 0.866    |\n|                 | 40 – 50% | 0.773    | 0.815    |\n|                 | 50 – 60% | 0.682    | 0.739    |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py\n\n# 单个GPU上训练\npython tools/train.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth\n\n# 单个GPU上测试\npython tools/test.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n\n## 引用\n\n```bibtex\n@inproceedings{yan2021agg,\n  author = {Zeng, Yanhong and Fu, Jianlong and Chao, Hongyang and Guo, Baining},\n  title = {Aggregated Contextual Transformations for High-Resolution Image Inpainting},\n  booktitle = {Arxiv},\n  pages={-},\n  year = {2020}\n}\n```\n"
  },
  {
    "path": "configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py",
    "content": "_base_ = [\n    '../_base_/inpaint_default_runtime.py', '../_base_/datasets/places.py'\n]\n\nexperiment_name = 'aot-gan_smpgan_4xb4_places-512x512'\nsave_dir = './work_dirs'\n\ninput_shape = (512, 512)\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\nmodel = dict(\n    type='AOTInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='AOTEncoderDecoder',\n        encoder=dict(type='AOTEncoder'),\n        decoder=dict(type='AOTDecoder'),\n        dilation_neck=dict(\n            type='AOTBlockNeck', dilation_rates=(1, 2, 4, 8), num_aotblock=8)),\n    disc=dict(\n        type='SoftMaskPatchDiscriminator',\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        with_spectral_norm=True,\n    ),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='smgan',\n        loss_weight=0.01,\n    ),\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg19',\n        layer_weights={\n            '1': 1.,\n            '6': 1.,\n            '11': 1.,\n            '20': 1.,\n            '29': 1.,\n        },\n        layer_weights_style={\n            '8': 1.,\n            '17': 1.,\n            '26': 1.,\n            '31': 1.,\n        },\n        perceptual_weight=0.1,\n        style_weight=250),\n    loss_out_percep=True,\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.,\n    ),\n    train_cfg=dict(\n        disc_step=1,\n        start_iter=0,\n    ))\n\nmask_root = 'data/pconv_mask'\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(\n        type='LoadMask',\n        mask_mode='set',\n        mask_config=dict(\n            mask_list_file=f'{mask_root}/train_mask_list.txt',\n            prefix=mask_root,\n            io_backend='local',\n            flag='unchanged',\n            color_type='unchanged',\n            file_client_kwargs=dict())),\n    dict(\n        type='RandomResizedCrop',\n        keys=['gt'],\n        crop_size=input_shape,\n    ),\n    dict(type='Flip', keys=['gt', 'mask'], direction='horizontal'),\n    dict(\n        type='Resize',\n        keys=['mask'],\n        scale=input_shape,\n        keep_ratio=False,\n        interpolation='nearest'),\n    dict(type='RandomRotation', keys=['mask'], degrees=(0.0, 45.0)),\n    dict(\n        type='ColorJitter',\n        keys=['gt'],\n        brightness=0.5,\n        contrast=0.5,\n        saturation=0.5,\n        hue=0.5),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(\n        type='LoadMask',\n        mask_mode='set',\n        mask_config=dict(\n            mask_list_file=f'{mask_root}/mask_0.5-0.6_list.txt',\n            prefix=mask_root,\n            io_backend='local',\n            color_type='unchanged',\n            flag='unchanged',\n            file_client_kwargs=dict())),\n    dict(\n        type='RandomResizedCrop',\n        keys=['gt'],\n        crop_size=(512, 512),\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(\n    batch_size=4,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=500002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.9))),\n    disc=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.9))))\n"
  },
  {
    "path": "configs/aot_gan/metafile.yml",
    "content": "Collections:\n- Name: AOT-GAN\n  Paper:\n    Title: 'AOT-GAN: Aggregated Contextual Transformations for High-Resolution Image\n      Inpainting'\n    URL: https://arxiv.org/abs/2104.01431.pdf\n  README: configs/aot_gan/README.md\n  Task:\n  - inpainting\n  Year: 2021\nModels:\n- Config: configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py\n  In Collection: AOT-GAN\n  Name: aot-gan_smpgan_4xb4_places-512x512\n  Results:\n  - Dataset: Places365-Challenge\n    Metrics:\n      PSNR: 19.01\n      SSIM: 0.682\n      l1 error: 7.07\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/aot_gan/AOT-GAN_512x512_4x12_places_20220509-6641441b.pth\n"
  },
  {
    "path": "configs/basicvsr/README.md",
    "content": "# BasicVSR (CVPR'2021)\n\n> [BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond](https://arxiv.org/abs/2012.02181)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nVideo super-resolution (VSR) approaches tend to have more components than the image counterparts as they need to exploit the additional temporal dimension. Complex designs are not uncommon. In this study, we wish to untangle the knots and reconsider some most essential components for VSR guided by four basic functionalities, i.e., Propagation, Alignment, Aggregation, and Upsampling. By reusing some existing components added with minimal redesigns, we show a succinct pipeline, BasicVSR, that achieves appealing improvements in terms of speed and restoration quality in comparison to many state-of-the-art algorithms. We conduct systematic analysis to explain how such gain can be obtained and discuss the pitfalls. We further show the extensibility of BasicVSR by presenting an information-refill mechanism and a coupled propagation scheme to facilitate information aggregation. The BasicVSR and its extension, IconVSR, can serve as strong baselines for future VSR approaches.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144011085-fdded077-24de-468b-826e-5f82716219a5.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels for REDS4 and Y channel for others. The metrics are `PSNR` / `SSIM` .\nThe pretrained weights of SPyNet can be found [here](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth).\n\n|                         Model                          |      Dataset       | PSNR (RGB)  | SSIM (RGB) |  PSNR (Y)   |  SSIM (Y)  |    Training Resources    |                            Download                            |\n| :----------------------------------------------------: | :----------------: | :---------: | :--------: | :---------: | :--------: | :----------------------: | :------------------------------------------------------------: |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       |    REDS4 (BIx4)    | **31.4170** | **0.8909** |      -      |     -      | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       |    UDM10 (BDx4)    |      -      |     -      |   33.4478   |   0.9306   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       | Vimeo-90K-T (BIx4) |      -      |     -      |   36.2848   |   0.9395   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       | Vimeo-90K-T (BDx4) |      -      |     -      |   34.4700   |   0.9286   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       |    Vid4 (BIx4)     |      -      |     -      |   27.2694   |   0.8318   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n|       [basicvsr_reds4](./basicvsr_2xb4_reds4.py)       |    Vid4 (BDx4)     |      -      |     -      |   24.4541   |   0.7455   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) |    REDS4 (BIx4)    |   30.3128   |   0.8660   |      -      |     -      | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409_132702.log.json) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) |    UDM10 (BDx4)    |      -      |     -      |   34.5554   | **0.9451** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) | Vimeo-90K-T (BIx4) |      -      |     -      | **37.2026** |   0.9434   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) | Vimeo-90K-T (BDx4) |      -      |     -      |   34.8097   |   0.9316   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) |    Vid4 (BIx4)     |      -      |     -      | **27.2755** | **0.8248** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) |    Vid4 (BDx4)     |      -      |     -      |   25.0517   |   0.7636   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) |    REDS4 (BIx4)    |   29.0376   |   0.8481   |      -      |     -      | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) |    UDM10 (BDx4)    |      -      |     -      | **39.9953** | **0.9695** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) | Vimeo-90K-T (BIx4) |      -      |     -      |   34.6427   |   0.9335   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) | Vimeo-90K-T (BDx4) |      -      |     -      | **37.5501** | **0.9499** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) |    Vid4 (BIx4)     |      -      |     -      |   26.2708   |   0.8022   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) |    Vid4 (BDx4)     |      -      |     -      | **27.9791** | **0.8556** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/basicvsr/basicvsr_2xb4_reds4.py\n\n# single-gpu train\npython tools/train.py configs/basicvsr/basicvsr_2xb4_reds4.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/basicvsr/basicvsr_2xb4_reds4.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth\n\n# single-gpu test\npython tools/test.py configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{chan2021basicvsr,\n  author = {Chan, Kelvin CK and Wang, Xintao and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title = {BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n"
  },
  {
    "path": "configs/basicvsr/README_zh-CN.md",
    "content": "# BasicVSR (CVPR'2021)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">BasicVSR (CVPR'2021)</summary>\n\n```bibtex\n@InProceedings{chan2021basicvsr,\n  author = {Chan, Kelvin CK and Wang, Xintao and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title = {BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n\n</details>\n\n<br/>\n\n对于 REDS4，我们对 RGB 通道进行评估。对于其他数据集，我们对 Y 通道进行评估。我们使用 `PSNR` 和 `SSIM` 作为指标。\nSPyNet 的 预训练权重在[这里](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth)。\n\n| 算法 | REDS4 (BIx4)<br>PSNR/SSIM (RGB) | Vimeo-90K-T (BIx4)<br>PSNR/SSIM (Y) | Vid4 (BIx4)<br>PSNR/SSIM (Y) | UDM10 (BDx4)<br>PSNR/SSIM (Y) | Vimeo-90K-T (BDx4)<br>PSNR/SSIM (Y) | Vid4 (BDx4)<br>PSNR/SSIM (Y) | GPU 信息 | 下载 |\n| :-: | :-----------------------------: | :---------------------------------: | :--------------------------: | :---------------------------: | :---------------------------------: | :--------------------------: | :-----: | :--: |\n| [basicvsr_reds4](./basicvsr_2xb4_reds4.py) |       **31.4170/0.8909**        |           36.2848/0.9395            |        27.2694/0.8318        |        33.4478/0.9306         |           34.4700/0.9286            |        24.4541/0.7455        | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20210409_092646.log.json) |\n| [basicvsr_vimeo90k_bi](./basicvsr_2xb4_vimeo90k-bi.py) |         30.3128/0.8660          |         **37.2026/0.9451**          |      **27.2755/0.8248**      |        34.5554/0.9434         |           34.8097/0.9316            |        25.0517/0.7636        | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409_132702.log.json) |\n| [basicvsr_vimeo90k_bd](./basicvsr_2xb4_vimeo90k-bd.py) |         29.0376/0.8481          |           34.6427/0.9335            |        26.2708/0.8022        |      **39.9953/0.9695**       |         **37.5501/0.9499**          |      **27.9791/0.8556**      | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409_132740.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/basicvsr/basicvsr_2xb4_reds4.py\n\n# 单个GPU上训练\npython tools/train.py configs/basicvsr/basicvsr_2xb4_reds4.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/basicvsr/basicvsr_2xb4_reds4.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth\n\n# 单个GPU上测试\npython tools/test.py configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/basicvsr/basicvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/basicvsr/basicvsr_2xb4_reds4.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/basicvsr_test_config.py'\n]\n\nexperiment_name = 'basicvsr_2xb4_reds4'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 4\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRNet',\n        mid_channels=64,\n        num_blocks=30,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/REDS'\n\ntrain_dataloader = dict(\n    num_workers=6,\n    batch_size=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_train.txt',\n        depth=1,\n        num_input_frames=15,\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_val.txt',\n        depth=1,\n        num_input_frames=100,\n        fixed_seq_len=100,\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.99)),\n    paramwise_cfg=dict(custom_keys={'spynet': dict(lr_mult=0.125)}))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[300000],\n    restart_weights=[1],\n    eta_min=1e-7)\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/basicvsr/basicvsr_2xb4_vimeo90k-bd.py",
    "content": "_base_ = './basicvsr_2xb4_reds4.py'\n\nscale = 4\nexperiment_name = 'basicvsr_2xb4_vimeo90k-bd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='MirrorSequence', keys=['img', 'gt']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data'\nfile_list = [\n    'im1.png', 'im2.png', 'im3.png', 'im4.png', 'im5.png', 'im6.png', 'im7.png'\n]\n\ntrain_dataloader = dict(\n    num_workers=6,\n    batch_size=4,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vimeo90k_seq', task_name='vsr'),\n        data_root=f'{data_root}/vimeo90k',\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_train_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        fixed_seq_len=7,\n        load_frames_list=dict(img=file_list, gt=file_list),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    _delete_=True,\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=f'{data_root}/Vid4',\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=1,\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', convert_to='Y'),\n        dict(type='SSIM', convert_to='Y'),\n    ])\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/basicvsr/basicvsr_2xb4_vimeo90k-bi.py",
    "content": "_base_ = './basicvsr_2xb4_vimeo90k-bd.py'\n\nexperiment_name = 'basicvsr_2xb4_vimeo90k-bi'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\ntrain_dataloader = dict(\n    dataset=dict(\n        type='BasicFramesDataset', data_prefix=dict(img='BIx4', gt='GT')))\n\nval_dataloader = dict(\n    dataset=dict(\n        type='BasicFramesDataset', data_prefix=dict(img='BIx4', gt='GT')))\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/basicvsr/metafile.yml",
    "content": "Collections:\n- Name: BasicVSR\n  Paper:\n    Title: 'BasicVSR: The Search for Essential Components in Video Super-Resolution\n      and Beyond'\n    URL: https://arxiv.org/abs/2012.02181\n  README: configs/basicvsr/README.md\n  Task:\n  - video super-resolution\n  Year: 2021\nModels:\n- Config: configs/basicvsr/basicvsr_2xb4_reds4.py\n  In Collection: BasicVSR\n  Name: basicvsr_2xb4_reds4\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 31.417\n      SSIM (RGB): 0.8909\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 33.4478\n      SSIM (Y): 0.9306\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 36.2848\n      SSIM (Y): 0.9395\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 34.47\n      SSIM (Y): 0.9286\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.2694\n      SSIM (Y): 0.8318\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 24.4541\n      SSIM (Y): 0.7455\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_reds4_20120409-0e599677.pth\n- Config: configs/basicvsr/basicvsr_2xb4_vimeo90k-bi.py\n  In Collection: BasicVSR\n  Name: basicvsr_2xb4_vimeo90k-bi\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 30.3128\n      SSIM (RGB): 0.866\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 34.5554\n      SSIM (Y): 0.9451\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 37.2026\n      SSIM (Y): 0.9434\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 34.8097\n      SSIM (Y): 0.9316\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.2755\n      SSIM (Y): 0.8248\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 25.0517\n      SSIM (Y): 0.7636\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bi_20210409-d2d8f760.pth\n- Config: configs/basicvsr/basicvsr_2xb4_vimeo90k-bd.py\n  In Collection: BasicVSR\n  Name: basicvsr_2xb4_vimeo90k-bd\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 29.0376\n      SSIM (RGB): 0.8481\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 39.9953\n      SSIM (Y): 0.9695\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 34.6427\n      SSIM (Y): 0.9335\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 37.5501\n      SSIM (Y): 0.9499\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 26.2708\n      SSIM (Y): 0.8022\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 27.9791\n      SSIM (Y): 0.8556\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr/basicvsr_vimeo90k_bd_20210409-0154dd64.pth\n"
  },
  {
    "path": "configs/basicvsr_pp/README.md",
    "content": "# BasicVSR++ (CVPR'2022)\n\n> [BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment](https://arxiv.org/abs/2104.13371)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nA recurrent structure is a popular framework choice for the task of video super-resolution. The state-of-the-art method BasicVSR adopts bidirectional propagation with feature alignment to effectively exploit information from the entire input video. In this study, we redesign BasicVSR by proposing second-order grid propagation and flow-guided deformable alignment. We show that by empowering the recurrent framework with the enhanced propagation and alignment, one can exploit spatiotemporal information across misaligned video frames more effectively. The new components lead to an improved performance under a similar computational constraint. In particular, our model BasicVSR++ surpasses BasicVSR by 0.82 dB in PSNR with similar number of parameters. In addition to video super-resolution, BasicVSR++ generalizes well to other video restoration tasks such as compressed video enhancement. In NTIRE 2021, BasicVSR++ obtains three champions and one runner-up in the Video Super-Resolution and Compressed Video Enhancement Challenges. Codes and models will be released to MMagic.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144017685-9354df55-aa6d-445f-a946-116f0d6c38d7.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nThe pretrained weights of SPyNet can be found [here](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth).\n\n|                          Model                           |      Dataset       | PSNR (RGB)  | SSIM (RGB) |  PSNR (Y)   |  SSIM (Y)  |    Training Resources    |                           Download                           |\n| :------------------------------------------------------: | :----------------: | :---------: | :--------: | :---------: | :--------: | :----------------------: | :----------------------------------------------------------: |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) |    REDS4 (BIx4)    | **32.3855** | **0.9069** |      -      |     -      | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) |    UDM10 (BDx4)    |      -      |     -      |   34.6868   |   0.9417   | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) |    Vid4 (BIx4)     |      -      |     -      |   27.7674   |   0.8444   | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) |    Vid4 (BDx4)     |      -      |     -      |   24.6209   |   0.7540   | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) | Vimeo-90K-T (BIx4) |      -      |     -      |   36.4445   |   0.9411   | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) | Vimeo-90K-T (BDx4) |      -      |     -      |   34.0372   |   0.9244   | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) |    REDS4 (BIx4)    |   31.0126   |   0.8804   |      -      |     -      | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) |    UDM10 (BDx4)    |      -      |     -      |   33.1211   |   0.9270   | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) |    Vid4 (BIx4)     |      -      |     -      | **27.7882** | **0.8401** | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) |    Vid4 (BDx4)     |      -      |     -      |   23.6086   |   0.7033   | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) | Vimeo-90K-T (BIx4) |      -      |     -      | **37.7864** | **0.9500** | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) | Vimeo-90K-T (BDx4) |      -      |     -      |   33.8972   |   0.9195   | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) |    REDS4 (BIx4)    |   29.2041   |   0.8528   |      -      |     -      | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) |    UDM10 (BDx4)    |      -      |     -      | **40.7216** | **0.9722** | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) |    Vid4 (BIx4)     |      -      |     -      |   26.4377   |   0.8074   | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) |    Vid4 (BDx4)     |      -      |     -      | **29.0400** | **0.8753** | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) | Vimeo-90K-T (BIx4) |      -      |     -      |   34.7248   |   0.9351   | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) | Vimeo-90K-T (BDx4) |      -      |     -      | **38.2054** | **0.9550** | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n\n**NTIRE 2021 checkpoints**\n\nNote that the following models are finetuned from smaller models. The training schemes of these models will be released when MMagic reaches 5k stars. We provide the pre-trained models here.\n\n|                                Model                                 |                           Dataset                            |                                 Download                                 |\n| :------------------------------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------------------: |\n| [basicvsr-pp_c128n25_600k_ntire-vsr](./basicvsr-pp_c128n25_600k_ntire-vsr.py) |         NTIRE 2021 Video Super-Resolution - Track 1          | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_vsr_20210311-1ff35292.pth) |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track1](./basicvsr-pp_c128n25_600k_ntire-decompress-track1.py) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 1 | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track1_20210223-7b2eba02.pth) |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track2](./basicvsr-pp_c128n25_600k_ntire-decompress-track2.py) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 2 | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track2_20210314-eeae05e6.pth) |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track3](./basicvsr-pp_c128n25_600k_ntire-decompress-track3.py) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 3 | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track3_20210304-6daf4a40.pth) |\n\n</details>\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n\n# single-gpu train\npython tools/train.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n\n# single-gpu test\npython tools/test.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{chan2022basicvsrplusplus,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2022}\n}\n```\n"
  },
  {
    "path": "configs/basicvsr_pp/README_zh-CN.md",
    "content": "# BasicVSR++ (CVPR'2022)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\"><a href=\"https://arxiv.org/abs/2104.13371\">BasicVSR++ (CVPR'2022)</a></summary>\n\n```bibtex\n@InProceedings{chan2022basicvsrplusplus,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2022}\n}\n```\n\n</details>\n\nSPyNet 的 预训练权重在[这里](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth)。\n\n|  算法   | REDS4 (BIx4) PSNR/SSIM (RGB) | Vimeo-90K-T (BIx4) PSNR/SSIM (Y) | Vid4 (BIx4) PSNR/SSIM (Y) | UDM10 (BDx4) PSNR/SSIM (Y) | Vimeo-90K-T (BDx4) PSNR/SSIM (Y) | Vid4 (BDx4) PSNR/SSIM (Y) |  GPU 信息   |    Download    |\n| :-----: | :--------------------------: | :------------------------------: | :-----------------------: | :------------------------: | :------------------------------: | :-----------------------: | :---------: | :------------: |\n| [basicvsr_plusplus_c64n7_8x1_600k_reds4](./basicvsr-pp_c64n7_8xb1-600k_reds4.py) |      **32.3855/0.9069**      |          36.4445/0.9411          |      27.7674/0.8444       |       34.6868/0.9417       |          34.0372/0.9244          |      24.6209/0.7540       | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217_113115.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bi](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py) |        31.0126/0.8804        |        **37.7864/0.9500**        |    **27.7882/0.8401**     |       33.1211/0.9270       |          33.8972/0.9195          |      23.6086/0.7033       | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305_141254.log.json) |\n| [basicvsr_plusplus_c64n7_4x2_300k_vimeo90k_bd](./basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py) |        29.2041/0.8528        |          34.7248/0.9351          |      26.4377/0.8074       |     **40.7216/0.9722**     |        **38.2054/0.9550**        |    **29.0400/0.8753**     | 4 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305_140921.log.json) |\n\n<details>\n<summary align=\"left\">NTIRE 2021 模型权重文件</summary>\n\n请注意，以下模型是从较小的模型中微调而来的。 这些模型的训练方案将在 MMagic 达到 5k star 时发布。 我们在这里提供预训练的模型。\n\n| 算法                                                                   | 模型                                                                   | 赛道                                                         |\n| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------ |\n| [basicvsr-pp_c128n25_600k_ntire-vsr](./basicvsr-pp_c128n25_600k_ntire-vsr.py) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_vsr_20210311-1ff35292.pth) | NTIRE 2021 Video Super-Resolution                            |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track1](./basicvsr-pp_c128n25_600k_ntire-decompress-track1.py) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track1_20210223-7b2eba02.pth) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 1 |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track2](./basicvsr-pp_c128n25_600k_ntire-decompress-track2.py) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track2_20210314-eeae05e6.pth) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 2 |\n| [basicvsr-pp_c128n25_600k_ntire-decompress-track3](./basicvsr-pp_c128n25_600k_ntire-decompress-track3.py) | [model](https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track3_20210304-6daf4a40.pth) | NTIRE 2021 Quality Enhancement of Compressed Video - Track 3 |\n\n</details>\n```\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n\n# 单个GPU上训练\npython tools/train.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n\n# 单个GPU上测试\npython tools/test.py configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track1.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'basicvsr-pp_c128n25_600k_ntire-decompress-track1'\nwork_dir = f'./work_dirs/{experiment_name}'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRPlusPlusNet',\n        mid_channels=128,\n        num_blocks=25,\n        is_low_res_input=False,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        cpu_cache_length=100),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    ensemble=dict(type='SpatialTemporalEnsemble', is_temporal_ensemble=False),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntest_pipeline = [\n    dict(\n        type='GenerateSegmentIndices',\n        interval_list=[1],\n        start_idx=1,\n        filename_tmpl='{:03d}.png'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ntest_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='ntire21_track1', task_name='vsr'),\n        data_root='data/NTIRE21_decompression_track1',\n        data_prefix=dict(img='LQ', gt='GT'),\n        pipeline=test_pipeline))\n\ntest_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntest_cfg = dict(type='MultiTestLoop')\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track2.py",
    "content": "_base_ = './basicvsr-pp_c128n25_600k_ntire-decompress-track1.py'\n\nexperiment_name = 'basicvsr-pp_c128n25_600k_ntire-decompress-track2'\nwork_dir = f'./work_dirs/{experiment_name}'\n\ntest_dataloader = dict(\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='ntire21_track2', task_name='vsr'),\n        data_root='data/NTIRE21_decompression_track2'))\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track3.py",
    "content": "_base_ = './basicvsr-pp_c128n25_600k_ntire-decompress-track1.py'\n\nexperiment_name = 'basicvsr-pp_c128n25_600k_ntire-decompress-track3'\nwork_dir = f'./work_dirs/{experiment_name}'\n\ntest_dataloader = dict(\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='ntire21_track3', task_name='vsr'),\n        data_root='data/NTIRE21_decompression_track3'))\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-vsr.py",
    "content": "experiment_name = 'basicvsr-pp_c128n25_600k_ntire-vsr'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRPlusPlusNet',\n        mid_channels=128,\n        num_blocks=25,\n        is_low_res_input=True,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        cpu_cache_length=100),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    ensemble=dict(type='SpatialTemporalEnsemble', is_temporal_ensemble=False),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntest_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='MirrorSequence', keys=['img', 'gt']),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='MirrorSequence', keys=['img']),\n    dict(type='PackInputs')\n]\n\ntest_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds_official', task_name='vsr'),\n        data_root='data/REDS',\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_official_val.txt',\n        depth=1,\n        num_input_frames=100,\n        fixed_seq_len=100,\n        pipeline=test_pipeline))\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_vimeo90k-bd.py'\n\nexperiment_name = 'basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth'  # noqa\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRPlusPlusNet',\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=True,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=-1),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_dataloader = dict(num_workers=6, batch_size=2)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99)),\n    paramwise_cfg=dict(custom_keys={'spynet': dict(lr_mult=0.25)}))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_vimeo90k-bi.py'\n\nexperiment_name = 'basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth'  # noqa\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRPlusPlusNet',\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=True,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=-1),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_dataloader = dict(num_workers=6, batch_size=2)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99)),\n    paramwise_cfg=dict(custom_keys={'spynet': dict(lr_mult=0.25)}))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_reds4.py'\n\nexperiment_name = 'basicvsr-pp_c64n7_8xb1-600k_reds4'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='BasicVSRPlusPlusNet',\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=True,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_dataloader = dict(\n    num_workers=6, batch_size=1, dataset=dict(num_input_frames=30))\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=600_000, val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99)),\n    paramwise_cfg=dict(custom_keys={'spynet': dict(lr_mult=0.25)}))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[600000],\n    restart_weights=[1],\n    eta_min=1e-7)\n"
  },
  {
    "path": "configs/basicvsr_pp/metafile.yml",
    "content": "Collections:\n- Name: BasicVSR++\n  Paper:\n    Title: 'BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation\n      and Alignment'\n    URL: https://arxiv.org/abs/2104.13371\n  README: configs/basicvsr_pp/README.md\n  Task:\n  - video super-resolution\n  Year: 2022\nModels:\n- Config: configs/basicvsr_pp/basicvsr-pp_c64n7_8xb1-600k_reds4.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c64n7_8xb1-600k_reds4\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 32.3855\n      SSIM (RGB): 0.9069\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 34.6868\n      SSIM (Y): 0.9417\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.7674\n      SSIM (Y): 0.8444\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 24.6209\n      SSIM (Y): 0.754\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 36.4445\n      SSIM (Y): 0.9411\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 34.0372\n      SSIM (Y): 0.9244\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_600k_reds4_20210217-db622b2f.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bi\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 31.0126\n      SSIM (RGB): 0.8804\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 33.1211\n      SSIM (Y): 0.927\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.7882\n      SSIM (Y): 0.8401\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 23.6086\n      SSIM (Y): 0.7033\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 37.7864\n      SSIM (Y): 0.95\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 33.8972\n      SSIM (Y): 0.9195\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bi_20210305-4ef437e2.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c64n7_4xb2-300k_vimeo90k-bd\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 29.2041\n      SSIM (RGB): 0.8528\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 40.7216\n      SSIM (Y): 0.9722\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 26.4377\n      SSIM (Y): 0.8074\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 29.04\n      SSIM (Y): 0.8753\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 34.7248\n      SSIM (Y): 0.9351\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 38.2054\n      SSIM (Y): 0.955\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c64n7_8x1_300k_vimeo90k_bd_20210305-ab315ab1.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-vsr.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c128n25_600k_ntire-vsr\n  Results:\n  - Dataset: NTIRE2021VideoSuper-Resolution-Track1\n    Metrics: {}\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_vsr_20210311-1ff35292.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track1.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c128n25_600k_ntire-decompress-track1\n  Results:\n  - Dataset: NTIRE2021QualityEnhancementofCompressedVideo-Track1\n    Metrics: {}\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track1_20210223-7b2eba02.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track2.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c128n25_600k_ntire-decompress-track2\n  Results:\n  - Dataset: NTIRE2021QualityEnhancementofCompressedVideo-Track2\n    Metrics: {}\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track2_20210314-eeae05e6.pth\n- Config: configs/basicvsr_pp/basicvsr-pp_c128n25_600k_ntire-decompress-track3.py\n  In Collection: BasicVSR++\n  Name: basicvsr-pp_c128n25_600k_ntire-decompress-track3\n  Results:\n  - Dataset: NTIRE2021QualityEnhancementofCompressedVideo-Track3\n    Metrics: {}\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/basicvsr_plusplus/basicvsr_plusplus_c128n25_ntire_decompress_track3_20210304-6daf4a40.pth\n"
  },
  {
    "path": "configs/biggan/README.md",
    "content": "# BigGAN (ICLR'2019)\n\n> [Large Scale GAN Training for High Fidelity Natural Image Synthesis](https://openreview.net/forum?id=B1xsqj09Fm)\n\n> **Task**: Conditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDespite recent progress in generative image modeling, successfully generating high-resolution, diverse samples from complex datasets such as ImageNet remains an elusive goal. To this end, we train Generative Adversarial Networks at the largest scale yet attempted, and study the instabilities specific to such scale. We find that applying orthogonal regularization to the generator renders it amenable to a simple \"truncation trick,\" allowing fine control over the trade-off between sample fidelity and variety by reducing the variance of the Generator's input. Our modifications lead to models which set the new state of the art in class-conditional image synthesis. When trained on ImageNet at 128x128 resolution, our models (BigGANs) achieve an Inception Score (IS) of 166.5 and Frechet Inception Distance (FID) of 7.4, improving over the previous best IS of 52.52 and FID of 18.6.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143154280-4cb22e16-92c8-4b34-9e2c-6357ed0bdac8.png\"/>\n</div>\n\n## Introduction\n\nThe `BigGAN/BigGAN-Deep` is a conditional generation model that can generate both high-resolution and high-quality images by scaling up the batch size and the number of model parameters.\n\nWe have finished training `BigGAN` in `Cifar10` (32x32) and are aligning training performance in `ImageNet1k` (128x128). Some sampled results are shown below for your reference.\n\n<div align=\"center\">\n  <b> Results from our BigGAN trained in CIFAR10</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126476913-3ce8e2c8-f189-4caa-90ed-b44e279cb669.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> Results from our BigGAN trained in ImageNet</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/127615534-6278ce1b-5cff-4189-83c6-9ecc8de08dfc.png\" width=\"800\"/>\n</div>\n\nEvaluation of our trained BigGAN.\n\n|                                    Model                                    |  Dataset   |    FID (Iter)     |      IS (Iter)      |                                    Download                                     |\n| :-------------------------------------------------------------------------: | :--------: | :---------------: | :-----------------: | :-----------------------------------------------------------------------------: |\n|          [BigGAN 32x32](./biggan_2xb25-500kiters_cifar10-32x32.py)          |  CIFAR10   |   9.78(390000)    |    8.70(390000)     | [model](https://download.openmmlab.com/mmediting/biggan/biggan_cifar10_32x32_b25x2_500k_20210728_110906-08b61a44.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_cifar10_32_b25x2_500k_20210706_171051.log.json) |\n| [BigGAN 128x128 Best FID](./biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py) | ImageNet1k | **8.69**(1232000) |   101.15(1232000)   | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_1500k_20211111_122548-5315b13d.log.json) |\n| [BigGAN 128x128 Best IS](./biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py) | ImageNet1k |  13.51(1328000)   | **129.07**(1328000) | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_is_iter_1328000_20211111_122911-28c688bc.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_1500k_20211111_122548-5315b13d.log.json) |\n\n### Note on reproducibility\n\n`BigGAN 128x128` model is trained with V100 GPUs and CUDA 10.1 and can hardly reproduce the result with A100 and CUDA 11.3. If you have any idea about the reproducibility, please feel free to contact with us.\n\n## Converted weights\n\nSince we haven't finished training our models, we provide you with several pre-trained weights which have been evaluated. Here, we refer to [BigGAN-PyTorch](https://github.com/ajbrock/BigGAN-PyTorch) and [pytorch-pretrained-BigGAN](https://github.com/huggingface/pytorch-pretrained-BigGAN).\n\nEvaluation results and download links are provided below.\n\n|                        Model                         |  Dataset   |   FID   |   IS    |                        Download                         |                        Original Download link                         |\n| :--------------------------------------------------: | :--------: | :-----: | :-----: | :-----------------------------------------------------: | :-------------------------------------------------------------------: |\n| [BigGAN 128x128](./biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py) | ImageNet1k | 10.1414 | 96.728  | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_cvt_BigGAN-PyTorch_rgb_20210730_125223-3e353fef.pth) | [link](https://drive.google.com/open?id=1nAle7FCVFZdix2--ks0r5JBkFnKw8ctW) |\n| [BigGAN-Deep 128x128](./biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py) | ImageNet1k | 5.9471  | 107.161 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_128x128_cvt_hugging-face_rgb_20210728_111659-099e96f9.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-128-pytorch_model.bin) |\n| [BigGAN-Deep 256x256](./biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py) | ImageNet1k | 11.3151 | 135.107 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_256x256_cvt_hugging-face_rgb_20210728_111735-28651569.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-256-pytorch_model.bin) |\n| [BigGAN-Deep 512x512](./biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py) | ImageNet1k | 16.8728 | 124.368 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_512x512_cvt_hugging-face_rgb_20210728_112346-a42585f2.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-512-pytorch_model.bin) |\n\nSampling results are shown below.\n\n<div align=\"center\">\n  <b> Results from our BigGAN-Deep with Pre-trained weights in ImageNet 128x128 with truncation factor 0.4</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126481730-8da7180b-7b1b-42f0-9bec-78d879b6265b.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> Results from our BigGAN-Deep with Pre-trained weights in ImageNet 256x256 with truncation factor 0.4</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126486040-64effa29-959e-4e43-bcae-15925a2e0599.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> Results from our BigGAN-Deep with Pre-trained weights in ImageNet 512x512 truncation factor 0.4</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126487428-50101454-59cb-469d-a1f1-36ffb6291582.png\" width=\"800\"/>\n</div>\nSampling with truncation trick above can be performed by command below.\n\n```bash\npython demo/conditional_demo.py CONFIG_PATH CKPT_PATH --sample-cfg truncation=0.4 # set truncation value as you want\n```\n\nFor converted weights, we provide model configs under `configs/_base_/models` listed as follows:\n\n```bash\n# biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py\n# biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py\n# biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py\n# biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py\n```\n\n## Interpolation\n\nTo perform image Interpolation on BigGAN(or other conditional models), run\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH\n```\n\n<div align=\"center\">\n  <b> Image interpolating Results of our BigGAN-Deep</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126580403-2baa987b-ff55-4fb5-a53a-b08e8a6a72a2.png\" width=\"800\"/>\n</div>\n\nTo perform image Interpolation on BigGAN with fixed noise, run\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH --fix-z\n```\n\n<div align=\"center\">\n  <b> Image interpolating Results of our BigGAN-Deep with fixed noise</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/128123804-6df1dfca-1057-4b96-8428-787a86f81ef1.png\" width=\"800\"/>\n</div>\nTo perform image Interpolation on BigGAN with fixed label, run\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH --fix-y\n```\n\n<div align=\"center\">\n  <b> Image interpolating Results of our BigGAN-Deep with fixed label</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/128124596-421396f1-3f23-4098-b629-b00d29d710a9.png\" width=\"800\"/>\n</div>\n\n## Citation\n\n```latex\n@inproceedings{\n    brock2018large,\n    title={Large Scale {GAN} Training for High Fidelity Natural Image Synthesis},\n    author={Andrew Brock and Jeff Donahue and Karen Simonyan},\n    booktitle={International Conference on Learning Representations},\n    year={2019},\n    url={https://openreview.net/forum?id=B1xsqj09Fm},\n}\n```\n"
  },
  {
    "path": "configs/biggan/README_zh-CN.md",
    "content": "# BigGAN (ICLR'2019)\n\n> [Large Scale GAN Training for High Fidelity Natural Image Synthesis](https://openreview.net/forum?id=B1xsqj09Fm)\n\n> **任务**: 条件生成对抗网络\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDespite recent progress in generative image modeling, successfully generating high-resolution, diverse samples from complex datasets such as ImageNet remains an elusive goal. To this end, we train Generative Adversarial Networks at the largest scale yet attempted, and study the instabilities specific to such scale. We find that applying orthogonal regularization to the generator renders it amenable to a simple \"truncation trick,\" allowing fine control over the trade-off between sample fidelity and variety by reducing the variance of the Generator's input. Our modifications lead to models which set the new state of the art in class-conditional image synthesis. When trained on ImageNet at 128x128 resolution, our models (BigGANs) achieve an Inception Score (IS) of 166.5 and Frechet Inception Distance (FID) of 7.4, improving over the previous best IS of 52.52 and FID of 18.6.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143154280-4cb22e16-92c8-4b34-9e2c-6357ed0bdac8.png\"/>\n</div>\n\n## Introduction\n\n`BigGAN/BigGAN-Deep`是一个条件生成模型，通过扩大批次大小和模型参数的数量，可以生成高分辨率和高质量的图像。\n\n我们已经在`Cifar10`（32x32）中完成了`BigGAN`的训练，并在`ImageNet1k`（128x128）上对齐了训练性能。下面是一些抽样的结果，供你参考。\n\n<div align=\"center\">\n  <b> 我们在 CIFAR10 上训练的 BigGAN 的结果</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126476913-3ce8e2c8-f189-4caa-90ed-b44e279cb669.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> 我们在 ImageNet 上训练的 BigGAN 的结果</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/127615534-6278ce1b-5cff-4189-83c6-9ecc8de08dfc.png\" width=\"800\"/>\n</div>\n\n对我们训练的 BigGAN 进行评估.\n\n|                                     算法                                      |   数据集   |    FID (Iter)     |      IS (Iter)      |                                     下载                                      |\n| :---------------------------------------------------------------------------: | :--------: | :---------------: | :-----------------: | :---------------------------------------------------------------------------: |\n|           [BigGAN 32x32](./biggan_2xb25-500kiters_cifar10-32x32.py)           |  CIFAR10   |   9.78(390000)    |    8.70(390000)     | [model](https://download.openmmlab.com/mmediting/biggan/biggan_cifar10_32x32_b25x2_500k_20210728_110906-08b61a44.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_cifar10_32_b25x2_500k_20210706_171051.log.json) |\n| [BigGAN 128x128 Best FID](./biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py) | ImageNet1k | **8.69**(1232000) |   101.15(1232000)   | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_1500k_20211111_122548-5315b13d.log.json) |\n| [BigGAN 128x128 Best IS](./biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py) | ImageNet1k |  13.51(1328000)   | **129.07**(1328000) | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_is_iter_1328000_20211111_122911-28c688bc.pth)\\|[log](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_1500k_20211111_122548-5315b13d.log.json) |\n\n### 关于可复现性的说明\n\n`BigGAN 128x128`模型是用 V100 GPU 和 CUDA 10.1 训练的，用 A100 和 CUDA 11.3 很难再现结果。如果你对复现有任何想法，请随时与我们联系。\n\n## 转换后的权重\n\n由于我们还没有完成对模型的训练，我们为您提供了几个已经评估过的预训练权重。这里，我们指的是[BigGAN-PyTorch](https://github.com/ajbrock/BigGAN-PyTorch)和[pytorch-pretrained-BigGAN](https://github.com/huggingface/pytorch-pretrained-BigGAN)。\n\n下面提供了评估结果和下载链接\n\n|                           模型                           |   数据集   |   FID   |   IS    |                           下载                            |                        原始权重下载链接                         |\n| :------------------------------------------------------: | :--------: | :-----: | :-----: | :-------------------------------------------------------: | :-------------------------------------------------------------: |\n| [BigGAN 128x128](./biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py) | ImageNet1k | 10.1414 | 96.728  | [model](https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_cvt_BigGAN-PyTorch_rgb_20210730_125223-3e353fef.pth) | [link](https://drive.google.com/open?id=1nAle7FCVFZdix2--ks0r5JBkFnKw8ctW) |\n| [BigGAN-Deep 128x128](./biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py) | ImageNet1k | 5.9471  | 107.161 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_128x128_cvt_hugging-face_rgb_20210728_111659-099e96f9.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-128-pytorch_model.bin) |\n| [BigGAN-Deep 256x256](./biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py) | ImageNet1k | 11.3151 | 135.107 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_256x256_cvt_hugging-face_rgb_20210728_111735-28651569.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-256-pytorch_model.bin) |\n| [BigGAN-Deep 512x512](./biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py) | ImageNet1k | 16.8728 | 124.368 | [model](https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_512x512_cvt_hugging-face_rgb_20210728_112346-a42585f2.pth) | [link](https://s3.amazonaws.com/models.huggingface.co/biggan/biggan-deep-512-pytorch_model.bin) |\n\n采样结果如下。\n\n<div align=\"center\">\n  <b> BigGAN-Deep 在 ImageNet 128x128 中使用预训练权重的结果，截断因子为 0.4 </b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126481730-8da7180b-7b1b-42f0-9bec-78d879b6265b.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> BigGAN-Deep 在 ImageNet 256x256 中使用预训练权重的结果，截断因子为 0.4 </b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126486040-64effa29-959e-4e43-bcae-15925a2e0599.png\" width=\"800\"/>\n</div>\n\n<div align=\"center\">\n  <b> BigGAN-Deep 在 ImageNet 512x512 中使用预训练权重的结果，截断因子为 0.4 </b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126487428-50101454-59cb-469d-a1f1-36ffb6291582.png\" width=\"800\"/>\n</div>\n上面的截断取样技巧可以通过下面的命令进行。\n\n```bash\npython demo/conditional_demo.py CONFIG_PATH CKPT_PATH --sample-cfg truncation=0.4 # set truncation value as you want\n```\n\n对于转换后的权重，我们在`configs/_base_/models`下提供模型配置，列举如下。\n\n```bash\n# biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py\n# biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py\n# biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py\n# biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py\n```\n\n## Interpolation\n\n要在 BigGAN（或其他条件模型）上执行图像插值，请运行\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH\n```\n\n<div align=\"center\">\n  <b> 我们的 BigGAN-Deep 的图像插值结果</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/126580403-2baa987b-ff55-4fb5-a53a-b08e8a6a72a2.png\" width=\"800\"/>\n</div>\n\n要在 BigGAN 上进行具有固定噪声的图像插值，请运行\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH --fix-z\n```\n\n<div align=\"center\">\n  <b> 我们的 BigGAN-Deep 在固定噪音下的图像插值结果 </b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/128123804-6df1dfca-1057-4b96-8428-787a86f81ef1.png\" width=\"800\"/>\n</div>\n要在 BigGAN 上执行具有固定标签的图像插值，请运行\n\n```bash\npython apps/conditional_interpolate.py CONFIG_PATH  CKPT_PATH  --samples-path SAMPLES_PATH --fix-y\n```\n\n<div align=\"center\">\n  <b> 我们的 BigGAN-Deep 带有固定标签的图像插值结果</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/128124596-421396f1-3f23-4098-b629-b00d29d710a9.png\" width=\"800\"/>\n</div>\n\n## Citation\n\n```latex\n@inproceedings{\n    brock2018large,\n    title={Large Scale {GAN} Training for High Fidelity Natural Image Synthesis},\n    author={Andrew Brock and Jeff Donahue and Karen Simonyan},\n    booktitle={International Conference on Learning Representations},\n    year={2019},\n    url={https://openreview.net/forum?id=B1xsqj09Fm},\n}\n```\n"
  },
  {
    "path": "configs/biggan/biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_noaug_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    ema_config=ema_config,\n    generator=dict(\n        type='BigGANDeepGenerator',\n        output_scale=128,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDeepDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_noaug_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# setting image size to 256x256\n_base_.train_dataloader.dataset.pipeline[2].scale = (256, 256)\n_base_.test_dataloader.dataset.pipeline[2].scale = (256, 256)\n_base_.val_dataloader.dataset.pipeline[2].scale = (256, 256)\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    ema_config=ema_config,\n    generator=dict(\n        type='BigGANDeepGenerator',\n        output_scale=256,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDeepDiscriminator',\n        input_scale=256,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_noaug_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# setting image size to 512x512\n_base_.train_dataloader.dataset.pipeline[2].scale = (512, 512)\n_base_.test_dataloader.dataset.pipeline[2].scale = (512, 512)\n_base_.val_dataloader.dataset.pipeline[2].scale = (512, 512)\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    ema_config=ema_config,\n    generator=dict(\n        type='BigGANDeepGenerator',\n        output_scale=512,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDeepDiscriminator',\n        input_scale=512,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py",
    "content": "_base_ = [\n    '../_base_/datasets/cifar10_noaug.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# define model\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    start_iter=1000)\n\nmodel = dict(\n    type='BigGAN',\n    num_classes=10,\n    data_preprocessor=dict(\n        type='DataPreprocessor', output_channel_order='BGR'),\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=32,\n        noise_size=128,\n        num_classes=10,\n        base_channels=64,\n        with_shared_embedding=False,\n        sn_eps=1e-8,\n        sn_style='torch',\n        split_noise=False,\n        auto_sync_bn=False,\n        init_cfg=dict(type='N02')),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=32,\n        num_classes=10,\n        base_channels=64,\n        sn_eps=1e-8,\n        sn_style='torch',\n        with_spectral_norm=True,\n        init_cfg=dict(type='N02')),\n    generator_steps=1,\n    discriminator_steps=4,\n    ema_config=ema_config)\n\n# define dataset\ntrain_dataloader = dict(batch_size=25, num_workers=8)\nval_dataloader = dict(batch_size=25, num_workers=8)\ntest_dataloader = dict(batch_size=25, num_workers=8)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n]\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999))))\ntrain_cfg = dict(max_iters=500000)\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/biggan/base_biggan_128x128.py',\n    '../_base_/datasets/imagenet_noaug_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# define model\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(ema_config=ema_config)\ntrain_cfg = dict(max_iters=1500000)\n\n# define dataset\ntrain_dataloader = dict(\n    batch_size=32, num_workers=8, dataset=dict(data_root='data/imagenet'))\n\n# define optimizer\noptim_wrapper = dict(\n    generator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=10000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n]\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_noaug_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    ema_config=ema_config,\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/biggan/metafile.yml",
    "content": "Collections:\n- Name: BigGAN\n  Paper:\n    Title: Large Scale GAN Training for High Fidelity Natural Image Synthesis\n    URL: https://openreview.net/forum?id=B1xsqj09Fm\n  README: configs/biggan/README.md\n  Task:\n  - conditional gans\n  Year: 2019\nModels:\n- Config: configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py\n  In Collection: BigGAN\n  Name: biggan_2xb25-500kiters_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID (Iter): 9.78\n      IS (Iter): 8.7\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan_cifar10_32x32_b25x2_500k_20210728_110906-08b61a44.pth\n- Config: configs/biggan/biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py\n  In Collection: BigGAN\n  Name: biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet1k\n    Metrics:\n      FID (Iter): 8.69\n      IS (Iter): 101.15\n    Task: Conditional GANs\n  - Dataset: ImageNet1k\n    Metrics:\n      FID (Iter): 13.51\n      IS (Iter): 129.07\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_is_iter_1328000_20211111_122911-28c688bc.pth\n- Config: configs/biggan/biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py\n  In Collection: BigGAN\n  Name: biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet1k\n    Metrics:\n      FID: 10.1414\n      IS: 96.728\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_cvt_BigGAN-PyTorch_rgb_20210730_125223-3e353fef.pth\n- Config: configs/biggan/biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py\n  In Collection: BigGAN\n  Name: biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet1k\n    Metrics:\n      FID: 5.9471\n      IS: 107.161\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_128x128_cvt_hugging-face_rgb_20210728_111659-099e96f9.pth\n- Config: configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py\n  In Collection: BigGAN\n  Name: biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256\n  Results:\n  - Dataset: ImageNet1k\n    Metrics:\n      FID: 11.3151\n      IS: 135.107\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_256x256_cvt_hugging-face_rgb_20210728_111735-28651569.pth\n- Config: configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py\n  In Collection: BigGAN\n  Name: biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512\n  Results:\n  - Dataset: ImageNet1k\n    Metrics:\n      FID: 16.8728\n      IS: 124.368\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/biggan/biggan-deep_imagenet1k_512x512_cvt_hugging-face_rgb_20210728_112346-a42585f2.pth\n"
  },
  {
    "path": "configs/cain/README.md",
    "content": "# CAIN (AAAI'2020)\n\n> [Channel Attention Is All You Need for Video Frame Interpolation](https://aaai.org/ojs/index.php/AAAI/article/view/6693/6547)\n\n> **Task**: Video Interpolation\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nPrevailing video frame interpolation techniques rely heavily on optical flow estimation and require additional model complexity and computational cost; it is also susceptible to error propagation in challenging scenarios with large motion and heavy occlusion. To alleviate the limitation, we propose a simple but effective deep neural network for video frame interpolation, which is end-to-end trainable and is free from a motion estimation network component. Our algorithm employs a special feature reshaping operation, referred to as PixelShuffle, with a channel attention, which replaces the optical flow computation module. The main idea behind the design is to distribute the information in a feature map into multiple channels and extract motion information by attending the channels for pixel-level frame synthesis. The model given by this principle turns out to be effective in the presence of challenging motion and occlusion. We construct a comprehensive evaluation benchmark and demonstrate that the proposed approach achieves outstanding performance compared to the existing models with a component for optical flow computation.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/56712176/149734064-1da0cebf-6953-4106-a29a-43acd7386a80.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels.\nThe metrics are `PSNR / SSIM` .\nThe learning rate adjustment strategy is `Step LR scheduler with min_lr clipping`.\n\n|                                  Model                                  |  Dataset   |  PSNR   |  SSIM  |    Training Resources    |                                      Download                                      |\n| :---------------------------------------------------------------------: | :--------: | :-----: | :----: | :----------------------: | :--------------------------------------------------------------------------------: |\n| [cain_b5_g1b32_vimeo90k_triplet](./cain_g1b32_1xb5_vimeo90k-triplet.py) | vimeo90k-T | 34.6010 | 0.9578 | 1 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth)/[log](https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py\n\n# single-gpu train\npython tools/train.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth\n\n# single-gpu test\npython tools/test.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{choi2020channel,\n  title={Channel attention is all you need for video frame interpolation},\n  author={Choi, Myungsub and Kim, Heewon and Han, Bohyung and Xu, Ning and Lee, Kyoung Mu},\n  booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},\n  volume={34},\n  number={07},\n  pages={10663--10671},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/cain/README_zh-CN.md",
    "content": "# CAIN (AAAI'2020)\n\n> **任务**: 视频插帧\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\"><a href=\"https://aaai.org/ojs/index.php/AAAI/article/view/6693/6547\">CAIN (AAAI'2020)</a></summary>\n\n```bibtex\n@inproceedings{choi2020channel,\n  title={Channel attention is all you need for video frame interpolation},\n  author={Choi, Myungsub and Kim, Heewon and Han, Bohyung and Xu, Ning and Lee, Kyoung Mu},\n  booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},\n  volume={34},\n  number={07},\n  pages={10663--10671},\n  year={2020}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n学习率调整策略是等间隔调整策略。\n\n|                                  算法                                   | vimeo-90k-triplet |         GPU 信息         |                                           下载                                           |\n| :---------------------------------------------------------------------: | :---------------: | :----------------------: | :--------------------------------------------------------------------------------------: |\n| [cain_b5_g1b32_vimeo90k_triplet](./cain_g1b32_1xb5_vimeo90k-triplet.py) | 34.6010 / 0.9578  | 1 (Tesla V100-SXM2-32GB) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth)/[日志](https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py\n\n# 单个GPU上训练\npython tools/train.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth\n\n# 单个GPU上测试\npython tools/test.py configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'cain_g1b32_1xb5_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    type='CAIN',\n    generator=dict(type='CAINNet'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        pad_mode='reflect',\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='FixedCrop', keys=['img', 'gt'], crop_size=(256, 256)),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(\n        type='ColorJitter',\n        keys=['img', 'gt'],\n        channel_order='rgb',\n        brightness=0.05,\n        contrast=0.05,\n        saturation=0.05,\n        hue=0.05),\n    dict(type='TemporalReverse', keys=['img'], reverse_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ntrain_dataset_type = 'BasicFramesDataset'\nval_dataset_type = 'BasicFramesDataset'\ndata_root = 'data/vimeo_triplet'\n\ntrain_dataloader = dict(\n    num_workers=32,\n    batch_size=32,  # 1 gpu\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    dataset=dict(\n        type=train_dataset_type,\n        ann_file='tri_trainlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=val_dataset_type,\n        ann_file='tri_testlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=val_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=500)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99)),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='ReduceLR',\n    by_epoch=True,\n    mode='min',\n    factor=0.5,\n    patience=5,\n    cooldown=0)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=1,\n        save_optimizer=True,\n        by_epoch=True,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n    param_scheduler=dict(\n        type='ReduceLRSchedulerHook',\n        by_epoch=True,\n        interval=1,\n        val_metric='MAE'),\n)\n\nlog_processor = dict(type='LogProcessor', by_epoch=True)\n"
  },
  {
    "path": "configs/cain/metafile.yml",
    "content": "Collections:\n- Name: CAIN\n  Paper:\n    Title: Channel Attention Is All You Need for Video Frame Interpolation\n    URL: https://aaai.org/ojs/index.php/AAAI/article/view/6693/6547\n  README: configs/cain/README.md\n  Task:\n  - video interpolation\n  Year: 2020\nModels:\n- Config: configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py\n  In Collection: CAIN\n  Name: cain_g1b32_1xb5_vimeo90k-triplet\n  Results:\n  - Dataset: vimeo90k-T\n    Metrics:\n      PSNR: 34.601\n      SSIM: 0.9578\n    Task: Video Interpolation\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_g1b32_vimeo90k_triplet_20220530-3520b00c.pth\n"
  },
  {
    "path": "configs/controlnet/README.md",
    "content": "# Control Net (2023)\n\n> [Adding Conditional Control to Text-to-Image Diffusion Models](https://arxiv.org/abs/2302.05543)\n\n> **Task**: Text2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe present a neural network structure, ControlNet, to control pretrained large diffusion models to support additional input conditions. The ControlNet learns task-specific conditions in an end-to-end way, and the learning is robust even when the training dataset is small (\\< 50k). Moreover, training a ControlNet is as fast as fine-tuning a diffusion model, and the model can be trained on a personal devices. Alternatively, if powerful computation clusters are available, the model can scale to large amounts (millions to billions) of data. We report that large diffusion models like Stable Diffusion can be augmented with ControlNets to enable conditional inputs like edge maps, segmentation maps, keypoints, etc. This may enrich the methods to control large diffusion models and further facilitate related applications.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/230302421-a9107d03-92d3-44b1-91b4-fde4ad2725d4.png\">\n</div>\n\n## Pretrained models\n\nWe use ControlNet's weights provided by HuggingFace Diffusers. You do not have to download the weights manually. If you use Diffusers wrapper, the weights will be downloaded automatically.\n\nThis model has several weights including vae, unet and clip. You should download the weights from [stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) and change the 'pretrained_model_path' in config to the weights dir.\n\n|                      Model                      | Dataset |                                             Download                                             |\n| :---------------------------------------------: | :-----: | :----------------------------------------------------------------------------------------------: |\n| [ControlNet-Demo](./controlnet-1xb1-fill50k.py) |    -    |                                                -                                                 |\n|    [ControlNet-Canny](./controlnet-canny.py)    |    -    |  [model](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_canny.pth)   |\n|     [ControlNet-Pose](./controlnet-pose.py)     |    -    | [model](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_openpose.pth) |\n| [ControlNet-Segmentation](./controlnet-seg.py)  |    -    |   [model](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_seg.pth)    |\n\nNoted that, [ControlNet-Demo](./controlnet-1xb1-demo_dataset.py) is a demo config to train ControlNet with toy dataset named Fill50K.\n\nBesides above configs, ControlNet have weight with other condition inputs, such as [depth](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_depth.pth), [hed](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_hed.pth), [mlsd](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_mlsd.pth), [normal](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_normal.pth), [scribble](https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_scribble.pth). You can simple change the `from_pretrained` field of ControlNet to use these weights. For example:\n\n```python\n# Switch from canny....\ncontrolnet=dict(\n    type='ControlNetModel',\n    from_pretrained='lllyasviel/sd-controlnet-canny')\n\n# To normal....\ncontrolnet=dict(\n    type='ControlNetModel',\n    from_pretrained='lllyasviel/sd-controlnet-normal')\n```\n\n## Quick Start\n\nRunning the following codes, you can get a text-generated image.\n\n```python\nimport cv2\nimport numpy as np\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/controlnet/controlnet-canny.py')\ncontrolnet = MODELS.build(cfg.model).cuda()\n\nprompt = 'Room with blue walls and a yellow ceiling.'\ncontrol_url = 'https://user-images.githubusercontent.com/28132635/230288866-99603172-04cb-47b3-8adb-d1aa532d1d2c.jpg'\ncontrol_img = mmcv.imread(control_url)\ncontrol = cv2.Canny(control_img, 100, 200)\ncontrol = control[:, :, None]\ncontrol = np.concatenate([control] * 3, axis=2)\ncontrol = Image.fromarray(control)\n\noutput_dict = controlnet.infer(prompt, control=control)\nsamples = output_dict['samples']\nfor idx, sample in enumerate(samples):\n    sample.save(f'sample_{idx}.png')\ncontrols = output_dict['controls']\nfor idx, control in enumerate(controls):\n    control.save(f'control_{idx}.png')\n```\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png\" width=\"400\"/>\n  <br/>\n  <b>'control_0.png'</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/230298159-a25695f8-fee4-40b2-aec0-01566ab25a97.png\" width=\"400\"/>\n  <br/>\n  <b>'sample_0.png'</b>\n</div></td>\n    <td>\n</thead>\n</table>\n\nIf you want to pretrained weights rather than original Stable-Diffusion v1.5, you can refers to the following codes.\n\n```python\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/controlnet/controlnet-pose.py')\n# convert ControlNet's weight from SD-v1.5 to Counterfeit-v2.5\ncfg.model.unet.from_pretrained = 'gsdf/Counterfeit-V2.5'\ncfg.model.vae.from_pretrained = 'gsdf/Counterfeit-V2.5'\ncfg.model.init_cfg['type'] = 'convert_from_unet'\n\ncontrolnet = MODELS.build(cfg.model).cuda()\n# call init_weights manually to convert weight\ncontrolnet.init_weights()\n\nprompt = 'masterpiece, best quality, sky, black hair, skirt, sailor collar, looking at viewer, short hair, building, bangs, neckerchief, long sleeves, cloudy sky, power lines, shirt, cityscape, pleated skirt, scenery, blunt bangs, city, night, black sailor collar, closed mouth'\n\ncontrol_url = 'https://user-images.githubusercontent.com/28132635/230380893-2eae68af-d610-4f7f-aa68-c2f22c2abf7e.png'\ncontrol_img = mmcv.imread(control_url)\ncontrol = Image.fromarray(control_img)\ncontrol.save('control.png')\n\noutput_dict = controlnet.infer(prompt, control=control, width=512, height=512, guidance_scale=7.5)\nsamples = output_dict['samples']\nfor idx, sample in enumerate(samples):\n    sample.save(f'sample_{idx}.png')\ncontrols = output_dict['controls']\nfor idx, control in enumerate(controls):\n    control.save(f'control_{idx}.png')\n```\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/230385313-92b20696-8bb5-4666-aa93-a8df6b19dee7.png\" width=\"400\"/>\n  <br/>\n  <b>'control_0.png'</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/230385320-129493b6-aa1f-406f-9fd3-b08c8c04bd89.png\" width=\"400\"/>\n  <br/>\n  <b>'sample_0.png'</b>\n</div></td>\n    <td>\n</thead>\n</table>\n\n### Using MMInferencer\n\nYou can only use several lines of codes to play controlnet by MMagic!\n\n```python\nfrom mmagic.apis import MMagicInferencer\n\n# controlnet-canny\ncontrolnet_canny_inferencer = MMagicInferencer(model_name='controlnet', model_setting=1)\ntext_prompts = 'Room with blue walls and a yellow ceiling.'\ncontrol = 'https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png'\nresult_out_dir = 'controlnet_canny_res.png'\ncontrolnet_canny_inferencer.infer(text=text_prompts, control=control, result_out_dir=result_out_dir)\n\n# controlnet-pose\ncontrolnet_pose_inferencer = MMagicInferencer(model_name='controlnet', model_setting=2)\ntext_prompts = 'masterpiece, best quality, sky, black hair, skirt, sailor collar, looking at viewer, short hair, building, bangs, neckerchief, long sleeves, cloudy sky, power lines, shirt, cityscape, pleated skirt, scenery, blunt bangs, city, night, black sailor collar, closed mouth'\ncontrol = 'https://user-images.githubusercontent.com/28132635/230380893-2eae68af-d610-4f7f-aa68-c2f22c2abf7e.png'\nresult_out_dir = 'controlnet_pose_res.png'\ncontrolnet_pose_inferencer.infer(text=text_prompts, control=control, result_out_dir=result_out_dir)\n\n# controlnet-seg\ncontrolnet_seg_inferencer = MMagicInferencer(model_name='controlnet', model_setting=3)\ntext_prompts = 'black house, blue sky'\ncontrol = 'https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/243599897-553a4c46-c61d-46df-b820-59a49aaf6678.png'\nresult_out_dir = 'controlnet_seg_res.png'\ncontrolnet_seg_inferencer.infer(text=text_prompts, control=control, result_out_dir=result_out_dir)\n```\n\n## Train your own ControlNet!\n\nYou can start training your own ControlNet with the toy dataset [Fill50K](https://huggingface.co/lllyasviel/ControlNet/blob/main/training/fill50k.zip) with the following command:\n\n```bash\nbash tools/dist_train.sh configs/controlnet/controlnet-1xb1-demo_dataset 1\n```\n\nIf you want use gradient accumulation, you can add `accumulative_counts` field to the optimizer's config as follow:\n\n```python\n# From...\noptim_wrapper = dict(controlnet=dict(optimizer=dict(type='AdamW', lr=1e-5)))\n# To...\noptim_wrapper = dict(\n    controlnet=dict(accumulative_counts=4, optimizer=dict(type='AdamW', lr=1e-5)))\n```\n\n## Use ToMe to accelerate your training and inference\n\nWe support **[tomesd](https://github.com/dbolya/tomesd)** now! It is developed for stable-diffusion-based models referring to [ToMe](https://github.com/facebookresearch/ToMe), an efficient ViT speed-up tool based on token merging. To work on with **tomesd** in `mmagic`, you just need to add `tomesd_cfg` to `model` in [ControlNet-Canny](./controlnet-canny.py). The only requirement is `torch >= 1.12.1` in order to properly support `torch.Tensor.scatter_reduce()` functionality. Please do check it before running the demo.\n\n```python\nmodel = dict(\n    type='ControlStableDiffusion',\n    ...\n    tomesd_cfg=dict(ratio=0.5),\n    ...\n    init_cfg=dict(type='init_from_unet'))\n```\n\nFor more details, you can refer to [Stable Diffusion Acceleration](../stable_diffusion/README.md#use-tome-to-accelerate-your-stable-diffusion-model).\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_controlnet.py) and [ControlNet](https://huggingface.co/lllyasviel/ControlNet/tree/main/models).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@misc{zhang2023adding,\n      title={Adding Conditional Control to Text-to-Image Diffusion Models},\n      author={Lvmin Zhang and Maneesh Agrawala},\n      year={2023},\n      eprint={2302.05543},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n```\n"
  },
  {
    "path": "configs/controlnet/controlnet-1xb1-fill50k.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\ncontrolnet_canny_url = 'lllyasviel/sd-controlnet-canny'\n\nmodel = dict(\n    type='ControlStableDiffusion',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    controlnet=dict(\n        type='ControlNetModel',\n        # from_pretrained=controlnet_canny_rul\n        from_config=controlnet_canny_url  # train from scratch\n    ),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    init_cfg=dict(type='init_from_unet'))\n\n# config for training\ntrain_cfg = dict(max_iters=10000)\noptim_wrapper = dict(controlnet=dict(optimizer=dict(type='AdamW', lr=1e-5)))\n\n# Config for data loader\npipeline = [\n    dict(type='LoadImageFromFile', key='source', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='target', channel_order='rgb'),\n    dict(\n        type='PackInputs',\n        keys=['source', 'target'],\n        data_keys='prompt',\n        meta_keys=[\n            'source_channel_order', 'source_color_type',\n            'target_channel_order', 'target_color_type'\n        ])\n]\ndataset = dict(\n    type='ControlNetDataset',\n    data_root='./data/fill50k',\n    ann_file='prompt.json',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=4)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=300,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=4,\n        n_row=2)\n]\n"
  },
  {
    "path": "configs/controlnet/controlnet-canny.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\ncontrolnet_canny_url = 'lllyasviel/sd-controlnet-canny'\n\nmodel = dict(\n    type='ControlStableDiffusion',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    controlnet=dict(\n        type='ControlNetModel', from_pretrained=controlnet_canny_url),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    init_cfg=dict(type='init_from_unet'))\n"
  },
  {
    "path": "configs/controlnet/controlnet-pose.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\ncontrolnet_canny_url = 'lllyasviel/sd-controlnet-openpose'\n\nmodel = dict(\n    type='ControlStableDiffusion',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained='gsdf/Counterfeit-V2.5',\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained='gsdf/Counterfeit-V2.5'),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    controlnet=dict(\n        type='ControlNetModel', from_pretrained=controlnet_canny_url),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    init_cfg=dict(type='convert_from_unet'))\n"
  },
  {
    "path": "configs/controlnet/controlnet-seg.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\ncontrolnet_canny_url = 'lllyasviel/sd-controlnet-seg'\n\nmodel = dict(\n    type='ControlStableDiffusion',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    controlnet=dict(\n        type='ControlNetModel', from_pretrained=controlnet_canny_url),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    init_cfg=dict(type='init_from_unet'))\n"
  },
  {
    "path": "configs/controlnet/metafile.yml",
    "content": "Collections:\n- Name: Control Net\n  Paper:\n    Title: Adding Conditional Control to Text-to-Image Diffusion Models\n    URL: https://arxiv.org/abs/2302.05543\n  README: configs/controlnet/README.md\n  Task:\n  - text2image\n  Year: 2023\nModels:\n- Config: configs/controlnet/controlnet-1xb1-fill50k.py\n  In Collection: Control Net\n  Name: controlnet-1xb1-fill50k\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/controlnet/controlnet-canny.py\n  In Collection: Control Net\n  Name: controlnet-canny\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_canny.pth\n- Config: configs/controlnet/controlnet-pose.py\n  In Collection: Control Net\n  Name: controlnet-pose\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_openpose.pth\n- Config: configs/controlnet/controlnet-seg.py\n  In Collection: Control Net\n  Name: controlnet-seg\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://huggingface.co/lllyasviel/ControlNet/blob/main/models/control_sd15_seg.pth\n"
  },
  {
    "path": "configs/controlnet_animation/README.md",
    "content": "# Controlnet Animation (2023)\n\n> [Controlnet](https://github.com/lllyasviel/ControlNet) Application\n\n> **Task**: controlnet_animation\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nIt is difficult to keep consistency and avoid video frame flickering when using stable diffusion to generate video frame by frame.\nHere we reproduce two methods that effectively avoid video flickering:\n\n**Controlnet with multi-frame rendering**. [ControlNet](https://github.com/lllyasviel/ControlNet) is a neural network structure to control diffusion models by adding extra conditions.\n[Multi-frame rendering](https://xanthius.itch.io/multi-frame-rendering-for-stablediffusion) is a community method to reduce flickering.\nWe use controlnet with hed condition and stable diffusion img2img for multi-frame rendering.\n\n**Controlnet with attention injection**. Attention injection is widely used to generate the current frame from a reference image. There is an implementation in [sd-webui-controlnet](https://github.com/Mikubill/sd-webui-controlnet#reference-only-control) and we use some of their code to create the animation in this repo.\n\nYou may need 40G GPU memory to run controlnet with multi-frame rendering and 10G GPU memory for controlnet with attention injection. If the config file is not changed, it defaults to using controlnet with attention injection.\n\n## Demos\n\nprompt key words: a handsome man, silver hair, smiling, play basketball\n\n<div align=\"center\">\n  <video src=\"https://user-images.githubusercontent.com/12782558/227149757-fd054d32-554f-45d5-9f09-319184866d85.mp4\" width=1024/>\n</div>\n\nprompt key words: a handsome man\n\n<div align=\"center\">\n  <video src=\"https://user-images.githubusercontent.com/12782558/227152129-d70d5f76-a6fc-4d23-97d1-a94abd08f95a.mp4\" width=1024/>\n</div>\n\n&#8195;\n\n**Change prompt to get different result**\n\nprompt key words: a girl, black hair, white pants, smiling, play basketball\n\n<div align=\"center\">\n  <video src=\"https://user-images.githubusercontent.com/12782558/227216038-38599164-2384-4a79-b65e-f98785d466bf.mp4\" width=512/>\n</div>\n\n## Pretrained models\n\nWe use pretrained model from hugging face.\n\n|                    Model                    | Dataset |                                     Download                                      |\n| :-----------------------------------------: | :-----: | :-------------------------------------------------------------------------------: |\n| [anythingv3 config](./anythingv3_config.py) |    -    | [stable diffusion model](https://huggingface.co/Linaqruf/anything-v3.0/tree/main) |\n\n## Quick Start\n\nThere are two ways to try controlnet animation.\n\n### 1. Use MMagic inference API.\n\nRunning the following codes, you can get an generated animation video.\n\n```python\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMEdit instance and infer\neditor = MMagicInferencer(model_name='controlnet_animation')\n\nprompt = 'a girl, black hair, T-shirt, smoking, best quality, extremely detailed'\nnegative_prompt = 'longbody, lowres, bad anatomy, bad hands, missing fingers, ' + \\\n                  'extra digit, fewer digits, cropped, worst quality, low quality'\n\n# you can download the example video with this link\n# https://user-images.githubusercontent.com/12782558/227418400-80ad9123-7f8e-4c1a-8e19-0892ebad2a4f.mp4\nvideo = '/path/to/your/input/video.mp4'\nsave_path = '/path/to/your/output/video.mp4'\n\n# Do the inference to get result\neditor.infer(video=video, prompt=prompt, negative_prompt=negative_prompt, save_path=save_path)\n```\n\n### 2. Use controlnet animation gradio demo.\n\n```python\npython demo/gradio_controlnet_animation.py\n```\n\n### 3. Change config to use multi-frame rendering or attention injection.\n\nchange \"inference_method\" in [anythingv3 config](./anythingv3_config.py)\n\nTo use multi-frame rendering.\n\n```python\ninference_method = 'multi-frame rendering'\n```\n\nTo use attention injection.\n\n```python\ninference_method = 'attention_injection'\n```\n\n## Play animation with SAM\n\nWe also provide a demo to play controlnet animation with sam, for details, please see [OpenMMLab PlayGround](https://github.com/open-mmlab/playground/blob/main/mmediting_sam/README.md).\n\n## Citation\n\n```bibtex\n@misc{zhang2023adding,\n  title={Adding Conditional Control to Text-to-Image Diffusion Models},\n  author={Lvmin Zhang and Maneesh Agrawala},\n  year={2023},\n  eprint={2302.05543},\n  archivePrefix={arXiv},\n  primaryClass={cs.CV}\n}\n```\n"
  },
  {
    "path": "configs/controlnet_animation/anythingv3_config.py",
    "content": "# config for model\nstable_diffusion_v15_url = 'Linaqruf/anything-v3.0'\ncontrolnet_hed_url = 'lllyasviel/sd-controlnet-hed'\ncontrol_detector = 'lllyasviel/ControlNet'\ncontrol_scheduler = 'UniPCMultistepScheduler'\n\n# method type : 'multi-frame rendering' or 'attention_injection'\ninference_method = 'attention_injection'\n\nmodel = dict(\n    type='ControlStableDiffusionImg2Img',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    controlnet=dict(\n        type='ControlNetModel', from_pretrained=controlnet_hed_url),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    init_cfg=dict(type='init_from_unet'),\n    enable_xformers=False,\n)\n"
  },
  {
    "path": "configs/controlnet_animation/metafile.yml",
    "content": "Collections:\n- Name: Controlnet Animation\n  Paper:\n    Title: Controlnet\n    URL: https://github.com/lllyasviel/ControlNet\n  README: configs/controlnet_animation/README.md\n  Task:\n  - controlnet_animation\n  Year: 2023\nModels:\n- Config: configs/controlnet_animation/anythingv3_config.py\n  In Collection: Controlnet Animation\n  Name: anythingv3_config\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: controlnet_animation\n  Weights: https://huggingface.co/Linaqruf/anything-v3.0/tree/main\n"
  },
  {
    "path": "configs/cyclegan/README.md",
    "content": "# CycleGAN (ICCV'2017)\n\n> [CycleGAN: Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks](https://openaccess.thecvf.com/content_iccv_2017/html/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.html)\n\n> **Task**: Image2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nImage-to-image translation is a class of vision and graphics problems where the goal is to learn the mapping between an input image and an output image using a training set of aligned image pairs. However, for many tasks, paired training data will not be available. We present an approach for learning to translate an image from a source domain X to a target domain Y in the absence of paired examples. Our goal is to learn a mapping G: X \\\\rightarrow Y such that the distribution of images from G(X) is indistinguishable from the distribution Y using an adversarial loss. Because this mapping is highly under-constrained, we couple it with an inverse mapping F: Y \\\\rightarrow X and introduce a cycle consistency loss to push F(G(X)) \\\\approx X (and vice versa). Qualitative results are presented on several tasks where paired training data does not exist, including collection style transfer, object transfiguration, season transfer, photo enhancement, etc. Quantitative comparisons against several prior methods demonstrate the superiority of our approach.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143049598-23c24d98-7a64-4ab3-a9ba-351db6a0a53d.JPG\" />\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> Results from CycleGAN trained by mmagic</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/114303527-108ed200-9b01-11eb-978c-274392e4d8e0.PNG\" width=\"800\"/>\n</div>\n\nWe use `FID` and `IS` metrics to evaluate the generation performance of CycleGAN.<sup>1</sup>\nhttps://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_80k_facades_20210902_165905-5e2c0876.pth\nhttps://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_in_1x1_80k_facades_20210902_165905-5e2c0876.pth\n\n|                                 Model                                  |      Dataset      |   FID    |  IS   |                                               Download                                               |\n| :--------------------------------------------------------------------: | :---------------: | :------: | :---: | :--------------------------------------------------------------------------------------------------: |\n|      [Ours](./cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py)       |      facades      | 124.8033 | 1.792 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_80k_facades_20210902_165905-5e2c0876.pth) \\| [log](https://download.openmmlab.com/mmediting/cyclegan/cyclegan_lsgan_resnet_in_1x1_80k_facades_20210317_160938.log.json) <sup>2</sup> |\n|    [Ours](./cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py)     |    facades-id0    | 125.1694 | 1.905 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_80k_facades_convert-bgr_20210902_164411-d8e72b45.pth) |\n|   [Ours](./cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.py)   |   summer2winter   | 83.7177  | 2.771 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165932-fcf08dc1.pth) |\n| [Ours](./cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py) | summer2winter-id0 | 83.1418  | 2.720 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165640-8b825581.pth) |\n|   [Ours](./cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.py)   |   winter2summer   | 72.8025  | 3.129 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165932-fcf08dc1.pth) |\n| [Ours](./cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py) | winter2summer-id0 | 73.5001  | 3.107 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165640-8b825581.pth) |\n|    [Ours](./cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.py)    |    horse2zebra    | 64.5225  | 1.418 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_170004-a32c733a.pth) |\n|  [Ours](./cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.py)  |  horse2zebra-id0  | 74.7770  | 1.542 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_165724-77c9c806.pth) |\n|    [Ours](./cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.py)    |    zebra2horse    | 141.1517 | 3.154 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_170004-a32c733a.pth) |\n|  [Ours](./cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.py)  |  zebra2horse-id0  | 134.3728 | 3.091 | [model](https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_165724-77c9c806.pth) |\n\n`FID` comparison with official:\n\n<!-- SKIP THIS TABLE -->\n\n| Dataset  |   facades   | facades-id0 | summer2winter | summer2winter-id0 | winter2summer | winter2summer-id0 | horse2zebra | horse2zebra-id0 | zebra2horse | zebra2horse-id0 |  average   |\n| :------: | :---------: | :---------: | :-----------: | :---------------: | :-----------: | :---------------: | :---------: | :-------------: | :---------: | :-------------: | :--------: |\n| official | **123.626** | **119.726** |  **77.342**   |    **76.773**     |  **72.631**   |      74.239       | **62.111**  |     77.202      | **138.646** |   **137.050**   | **95.935** |\n|   ours   |  124.8033   |  125.1694   |    83.7177    |      83.1418      |    72.8025    |    **73.5001**    |   64.5225   |   **74.7770**   |  141.1571   |  **134.3728**   |   97.79    |\n\n`IS` comparison with evaluation:\n\n<!-- SKIP THIS TABLE -->\n\n| Dataset  |  facades  | facades-id0 | summer2winter | summer2winter-id0 | winter2summer | winter2summer-id0 | horse2zebra | horse2zebra-id0 | zebra2horse | zebra2horse-id0 |  average  |\n| :------: | :-------: | :---------: | :-----------: | :---------------: | :-----------: | :---------------: | :---------: | :-------------: | :---------: | :-------------: | :-------: |\n| official |   1.638   |    1.697    |     2.762     |     **2.750**     |   **3.293**   |     **3.110**     |    1.375    |    **1.584**    |  **3.186**  |      3.047      |   2.444   |\n|   ours   | **1.792** |  **1.905**  |   **2.771**   |       2.720       |     3.129     |       3.107       |  **1.418**  |      1.542      |    3.154    |    **3.091**    | **2.462** |\n\nNote:\n\n1. With a larger identity loss, the image-to-image translation becomes more conservative, which makes less changes. The original authors did not say what is the best weight for identity loss. Thus, in addition to the default setting, we also set the weight of identity loss to 0 (denoting `id0`) to make a more comprehensive comparison.\n2. This is the training log before refactoring. Updated logs will be released soon.\n\n## Citation\n\n```latex\n@inproceedings{zhu2017unpaired,\n  title={Unpaired image-to-image translation using cycle-consistent adversarial networks},\n  author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE international conference on computer vision},\n  pages={2223--2232},\n  year={2017},\n  url={https://openaccess.thecvf.com/content_iccv_2017/html/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ndomain_a = 'summer'\ndomain_b = 'winter'\ntrain_cfg = dict(max_iters=250000)\n\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.),\n    default_domain=domain_b,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\ndataroot = './data/cyclegan/summer2winter_yosemite'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# learning policy\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=1250,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=125000,\n    end=250000)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\n# testA: 309, testB:238\nnum_images_a = 309\nnum_images_b = 238\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        fake_key=f'fake_{domain_b}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_b}',\n        fake_key=f'fake_{domain_b}'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ntrain_cfg = dict(max_iters=270000)\n\ndomain_a = 'horse'\ndomain_b = 'zebra'\n\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.),\n    default_domain=domain_b,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\ndataroot = './data/cyclegan/horse2zebra'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=1350,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=135000,\n    end=270000)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\nnum_images_a = 120\nnum_images_b = 140\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        fake_key=f'fake_{domain_b}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_b}',\n        fake_key=f'fake_{domain_b}'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ntrain_cfg = dict(max_iters=80000)\n\ndomain_a = 'photo'\ndomain_b = 'mask'\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.),\n    default_domain=domain_a,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=400,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=40000,\n    end=80000)\n\ndataroot = './data/cyclegan/facades'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\nnum_images = 106\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=num_images,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=num_images,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ntrain_cfg = dict(max_iters=250000)\n\ndomain_a = 'summer'\ndomain_b = 'winter'\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.5),\n    default_domain=domain_b,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\ndataroot = './data/cyclegan/summer2winter_yosemite'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# learning policy\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=1250,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=125000,\n    end=250000)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\nnum_images_a = 309\nnum_images_b = 238\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        fake_key=f'fake_{domain_b}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_b}',\n        fake_key=f'fake_{domain_b}'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ntrain_cfg = dict(max_iters=270000)\n\ndomain_a = 'horse'\ndomain_b = 'zebra'\n\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.5),\n    default_domain=domain_b,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\ndataroot = './data/cyclegan/horse2zebra'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=1350,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=135000,\n    end=270000)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\nnum_images_a = 120\nnum_images_b = 140\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        fake_key=f'fake_{domain_b}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransIS',\n        prefix=f'IS-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_a}-to-{domain_b}',\n        fake_nums=num_images_b,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_b}',\n        fake_key=f'fake_{domain_b}'),\n    dict(\n        type='TransFID',\n        prefix=f'FID-{domain_b}-to-{domain_a}',\n        fake_nums=num_images_a,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py",
    "content": "_base_ = [\n    '../_base_/models/base_cyclegan.py',\n    '../_base_/datasets/unpaired_imgs_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\ntrain_cfg = dict(max_iters=80000)\n\ndomain_a = 'photo'\ndomain_b = 'mask'\nmodel = dict(\n    loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.5),\n    default_domain=domain_a,\n    reachable_domains=[domain_a, domain_b],\n    related_domains=[domain_a, domain_b],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\nparam_scheduler = dict(\n    type='LinearLrInterval',\n    interval=400,\n    by_epoch=False,\n    start_factor=0.0002,\n    end_factor=0,\n    begin=40000,\n    end=80000)\n\ndataroot = './data/cyclegan/facades'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\noptim_wrapper = dict(\n    generators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminators=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\nnum_images = 106\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=num_images,\n        fake_key=f'fake_{domain_a}',\n        use_pillow_resize=False,\n        resize_method='bilinear',\n        inception_style='PyTorch'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=num_images,\n        inception_style='PyTorch',\n        real_key=f'img_{domain_a}',\n        fake_key=f'fake_{domain_a}')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/cyclegan/metafile.yml",
    "content": "Collections:\n- Name: CycleGAN\n  Paper:\n    Title: 'CycleGAN: Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial\n      Networks'\n    URL: https://openaccess.thecvf.com/content_iccv_2017/html/Zhu_Unpaired_Image-To-Image_Translation_ICCV_2017_paper.html\n  README: configs/cyclegan/README.md\n  Task:\n  - image2image\n  Year: 2017\nModels:\n- Config: configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-80kiters_facades.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-resnet-in_1xb1-80kiters_facades\n  Results:\n  - Dataset: facades\n    Metrics:\n      FID: 124.8033\n      IS: 1.792\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_80k_facades_20210902_165905-5e2c0876.pth\n- Config: configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades\n  Results:\n  - Dataset: facades-id0\n    Metrics:\n      FID: 125.1694\n      IS: 1.905\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_80k_facades_convert-bgr_20210902_164411-d8e72b45.pth\n- Config: configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-resnet-in_1xb1-250kiters_summer2winter\n  Results:\n  - Dataset: summer2winter\n    Metrics:\n      FID: 83.7177\n      IS: 2.771\n    Task: Image2Image\n  - Dataset: winter2summer\n    Metrics:\n      FID: 72.8025\n      IS: 3.129\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165932-fcf08dc1.pth\n- Config: configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter\n  Results:\n  - Dataset: summer2winter-id0\n    Metrics:\n      FID: 83.1418\n      IS: 2.72\n    Task: Image2Image\n  - Dataset: winter2summer-id0\n    Metrics:\n      FID: 73.5001\n      IS: 3.107\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_246200_summer2winter_convert-bgr_20210902_165640-8b825581.pth\n- Config: configs/cyclegan/cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-resnet-in_1xb1-270kiters_horse2zebra\n  Results:\n  - Dataset: horse2zebra\n    Metrics:\n      FID: 64.5225\n      IS: 1.418\n    Task: Image2Image\n  - Dataset: zebra2horse\n    Metrics:\n      FID: 141.1517\n      IS: 3.154\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_170004-a32c733a.pth\n- Config: configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra.py\n  In Collection: CycleGAN\n  Name: cyclegan_lsgan-id0-resnet-in_1xb1-270kiters_horse2zebra\n  Results:\n  - Dataset: horse2zebra-id0\n    Metrics:\n      FID: 74.777\n      IS: 1.542\n    Task: Image2Image\n  - Dataset: zebra2horse-id0\n    Metrics:\n      FID: 134.3728\n      IS: 3.091\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/cyclegan/refactor/cyclegan_lsgan_id0_resnet_in_1x1_266800_horse2zebra_convert-bgr_20210902_165724-77c9c806.pth\n"
  },
  {
    "path": "configs/dcgan/README.md",
    "content": "# Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (ICLR'2016)\n\n> [Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks](https://arxiv.org/abs/1511.06434)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nIn recent years, supervised learning with convolutional networks (CNNs) has seen huge adoption in computer vision applications. Comparatively, unsupervised learning with CNNs has received less attention. In this work we hope to help bridge the gap between the success of CNNs for supervised learning and unsupervised learning. We introduce a class of CNNs called deep convolutional generative adversarial networks (DCGANs), that have certain architectural constraints, and demonstrate that they are a strong candidate for unsupervised learning. Training on various image datasets, we show convincing evidence that our deep convolutional adversarial pair learns a hierarchy of representations from object parts to scenes in both the generator and discriminator. Additionally, we use the learned features for novel tasks - demonstrating their applicability as general image representations.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143050281-60808c3f-81d0-4fae-9071-f4c297116b2f.JPG\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> DCGAN 64x64, CelebA-Cropped</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/113991928-871f9b80-9885-11eb-920e-d389c603fed8.png\" width=\"800\"/>\n</div>\n\n|                                Model                                 |    Dataset     |           SWD            | MS-SSIM |                                        Download                                         |\n| :------------------------------------------------------------------: | :------------: | :----------------------: | :-----: | :-------------------------------------------------------------------------------------: |\n| [DCGAN 64x64](./dcgan_Glr4e-4_Dlr1e-4_1xb128-5kiters_mnist-64x64.py) | MNIST (64x64)  |  21.16, 4.4, 8.41/11.32  | 0.1395  | [model](https://download.openmmlab.com/mmediting/dcgan/dcgan_mnist-64_b128x1_Glr4e-4_Dlr1e-4_5k_20210512_163926-207a1eaf.pth) \\| [log](https://download.openmmlab.com//mmgen/dcgan/dcgan_mnist-64_b128x1_Glr4e-4_Dlr1e-4_5k_20210512_163926-207a1eaf.json) |\n|     [DCGAN 64x64](./dcgan_1xb128-300kiters_celeba-cropped-64.py)     | CelebA-Cropped |  8.93,10.53,50.32/23.26  | 0.2899  | [model](https://download.openmmlab.com/mmediting/dcgan/dcgan_celeba-cropped_64_b128x1_300kiter_20210408_161607-1f8a2277.pth) \\| [log](https://download.openmmlab.com/mmediting/dcgan/dcgan_celeba-cropped_64_b128x1_300kiter_20210408_161607-1f8a2277.json) |\n|     [DCGAN 64x64](./dcgan_1xb128-5epoches_lsun-bedroom-64x64.py)     |  LSUN-Bedroom  | 42.79, 34.55, 98.46/58.6 | 0.2095  | [model](https://download.openmmlab.com/mmediting/dcgan/dcgan_lsun-bedroom_64_b128x1_5e_20210408_161713-117c498b.pth) \\| [log](https://download.openmmlab.com/mmediting/dcgan/dcgan_lsun-bedroom_64_b128x1_5e_20210408_161713-117c498b.json) |\n\n## Citation\n\n```latex\n@article{radford2015unsupervised,\n  title={Unsupervised representation learning with deep convolutional generative adversarial networks},\n  author={Radford, Alec and Metz, Luke and Chintala, Soumith},\n  journal={arXiv preprint arXiv:1511.06434},\n  year={2015},\n  url={https://arxiv.org/abs/1511.06434},\n}\n```\n"
  },
  {
    "path": "configs/dcgan/dcgan_1xb128-300kiters_celeba-cropped-64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# define dataset\n# batch_size and data_root must be set\nbatch_size = 128\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=10000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\nmodel = dict(type='DCGAN')\ntrain_cfg = dict(max_iters=300002)\n\n# METRICS\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n# save best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='swd/avg', rule='less'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# define dataset\n# batch_size and data_root must be set\nbatch_size = 128\ndata_root = './data/lsun/images/bedroom_train'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\ntrain_cfg = dict(max_iters=1500002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=10000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n# save best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='swd/avg', rule='less'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/dcgan/dcgan_Glr4e-4_Dlr1e-4_1xb128-5kiters_mnist-64x64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# output single channel\nmodel = dict(\n    data_preprocessor=dict(mean=[127.5], std=[127.5]),\n    generator=dict(out_channels=1),\n    discriminator=dict(in_channels=1))\n\n# define dataset\n# modify train_pipeline to load gray scale images\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt', color_type='grayscale'),\n    dict(type='Resize', keys='gt', scale=(64, 64)),\n    dict(type='PackInputs')\n]\n\n# set ``batch_size``` and ``data_root```\nbatch_size = 128\ndata_root = 'data/mnist_64/train'\ntrain_dataloader = dict(\n    batch_size=batch_size,\n    dataset=dict(data_root=data_root, pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=batch_size,\n    dataset=dict(data_root=data_root, pipeline=train_pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,\n    dataset=dict(data_root=data_root, pipeline=train_pipeline))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=500,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\ntrain_cfg = dict(max_iters=5000, val_interval=500)\n\n# METRICS\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=-1,\n        sample_model='orig',\n        image_shape=(1, 64, 64))\n]\n# save best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(interval=500, save_best='swd/avg', rule='less'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0004, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.999))))\n"
  },
  {
    "path": "configs/dcgan/metafile.yml",
    "content": "Collections:\n- Name: Unsupervised Representation Learning with Deep Convolutional Generative Adversarial\n    Networks\n  Paper:\n    Title: Unsupervised Representation Learning with Deep Convolutional Generative\n      Adversarial Networks\n    URL: https://arxiv.org/abs/1511.06434\n  README: configs/dcgan/README.md\n  Task:\n  - unconditional gans\n  Year: 2016\nModels:\n- Config: configs/dcgan/dcgan_Glr4e-4_Dlr1e-4_1xb128-5kiters_mnist-64x64.py\n  In Collection: Unsupervised Representation Learning with Deep Convolutional Generative\n    Adversarial Networks\n  Name: dcgan_Glr4e-4_Dlr1e-4_1xb128-5kiters_mnist-64x64\n  Results:\n  - Dataset: MNIST(64x64)\n    Metrics:\n      MS-SSIM: 0.1395\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/dcgan/dcgan_mnist-64_b128x1_Glr4e-4_Dlr1e-4_5k_20210512_163926-207a1eaf.pth\n- Config: configs/dcgan/dcgan_1xb128-300kiters_celeba-cropped-64.py\n  In Collection: Unsupervised Representation Learning with Deep Convolutional Generative\n    Adversarial Networks\n  Name: dcgan_1xb128-300kiters_celeba-cropped-64\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      MS-SSIM: 0.2899\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/dcgan/dcgan_celeba-cropped_64_b128x1_300kiter_20210408_161607-1f8a2277.pth\n- Config: configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\n  In Collection: Unsupervised Representation Learning with Deep Convolutional Generative\n    Adversarial Networks\n  Name: dcgan_1xb128-5epoches_lsun-bedroom-64x64\n  Results:\n  - Dataset: LSUN-Bedroom\n    Metrics:\n      MS-SSIM: 0.2095\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/dcgan/dcgan_lsun-bedroom_64_b128x1_5e_20210408_161713-117c498b.pth\n"
  },
  {
    "path": "configs/deblurganv2/README.md",
    "content": "# DeblurGAN-v2 (ICCV'2019)\n\n> [DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better](https://arxiv.org/abs/1908.03826)\n\n> **Task**: Deblurring\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe present a new end-to-end generative adversarial network (GAN) for single image motion deblurring, named DeblurGAN-v2, which considerably boosts state-of-the-art deblurring efficiency, quality, and flexibility. DeblurGAN-v2 is based on a relativistic conditional GAN with a double-scale discriminator. For the first time, we introduce the Feature Pyramid Network into deblurring, as a core building block in the generator of DeblurGAN-v2. It can flexibly work with a wide range of backbones, to navigate the balance between performance and efficiency. The plug-in of sophisticated backbones (e.g., Inception-ResNet-v2) can lead to solid state-of-the-art deblurring. Meanwhile, with light-weight backbones (e.g., MobileNet and its variants), DeblurGAN-v2 reaches 10-100 times faster than the nearest competitors, while maintaining close to state-of-the-art results, implying the option of real-time video deblurring. We demonstrate that DeblurGAN-v2 obtains very competitive performance on several popular benchmarks, in terms of deblurring quality (both objective and subjective), as well as efficiency. Besides, we show the architecture to be effective for general image restoration tasks too.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/pipeline.jpg\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> DEBLURGANv2 256x256</b>\n  <br/>\n  <img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/kohler_visual.png\" width=\"800\"/>\n  <img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/restore_visual.png\" width=\"800\"/>\n </div>\n\n|                           Model                            |      Dataset       |      G Model       |  D Model   | PSNR/<br/>SSIM |                                      Download                                      |\n| :--------------------------------------------------------: | :----------------: | :----------------: | :--------: | :------------: | :--------------------------------------------------------------------------------: |\n| [fpn_inception](./deblurganv2_fpn-inception_1xb1_gopro.py) | GoPro Test Dataset | InceptionResNet-v2 | double_gan |  29.55/ 0.934  | [model](https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth) \\\\ [log](<>) |\n| [fpn_mobilenet](./deblurganv2_fpn-mobilenet_1xb1_gopro.py) | GoPro Test Dataset |     MobileNet      | double_gan |  28.17/ 0.925  | [model](https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-mobilenet.pth) \\\\ [log](<>) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py\n\n# single-gpu train\npython tools/train.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth\n\n# single-gpu test\npython tools/test.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{Kupyn_2019_ICCV,\nauthor = {Orest Kupyn and Tetiana Martyniuk and Junru Wu and Zhangyang Wang},\ntitle = {DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better},\nbooktitle = {The IEEE International Conference on Computer Vision (ICCV)},\nmonth = {Oct},\nyear = {2019}\n}\n```\n"
  },
  {
    "path": "configs/deblurganv2/README_zh-CN.md",
    "content": "# DeblurGAN-v2 (ICCV'2019)\n\n> [DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better](https://arxiv.org/abs/1908.03826)\n\n> **任务**: 去模糊\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n我们提出了一种新的端到端的用于单图像运动去模糊生成对抗网络（GAN），名为DeblurGAN-v2，它显著提高了最高水平的去模糊效率、质量和灵活性。DeblurGAN-v2是基于具有双尺度鉴别器的相对论条件GAN。我们首次将特征金字塔网络引入去模糊来作为DeblurGAN-v2生成器的核心构建块。它可以灵活地与各种主干网络一起工作，以在性能和效率之间取得平衡。先进的主干网络的插件（例如，Inception-ResNet-v2）可以带来最先进的去模糊处理。同时，凭借轻量级主干网络（例如MobileNet及其变体），DeblurGAN-v2的速度比最接近的竞争对手快10-100倍，同时保持接近最先进的结果，这意味着可用于实时视频去模糊。我们证明了DeblurGAN-v2在几个流行的基准测试中获得了非常有竞争力的性能，包括去模糊质量（客观和主观）以及效率。此外，我们还展示了该架构对于一般图像恢复任务也依然有效。\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/pipeline.jpg\"/>\n</div>\n\n## 结果与模型\n\n<div align=\"center\">\n  <b> DEBLURGANv2 256x256</b>\n  <br/>\n  <img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/kohler_visual.png\" width=\"800\"/>\n  <img src=\"https://raw.githubusercontent.com/VITA-Group/DeblurGANv2/master/doc_images/restore_visual.png\" width=\"800\"/>\n </div>\n\n|                            算法                            |       测试集       |     生成器模型     | 判别器模型 | PSNR/<br/>SSIM |                                        下载                                        |\n| :--------------------------------------------------------: | :----------------: | :----------------: | :--------: | :------------: | :--------------------------------------------------------------------------------: |\n| [fpn_inception](./deblurganv2_fpn-inception_1xb1_gopro.py) | GoPro Test Dataset | InceptionResNet-v2 | double_gan |  29.55/ 0.934  | [模型](https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth) \\\\ [日志](<>) |\n| [fpn_mobilenet](./deblurganv2_fpn-mobilenet_1xb1_gopro.py) | GoPro Test Dataset |     MobileNet      | double_gan |  28.17/ 0.925  | [模型](https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-mobilenet.pth) \\\\ [日志](<>) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py\n\n# single-gpu train\npython tools/train.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth\n\n# single-gpu test\npython tools/test.py configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n\n## 引用\n\n```bibtex\n@InProceedings{Kupyn_2019_ICCV,\nauthor = {Orest Kupyn and Tetiana Martyniuk and Junru Wu and Zhangyang Wang},\ntitle = {DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better},\nbooktitle = {The IEEE International Conference on Computer Vision (ICCV)},\nmonth = {Oct},\nyear = {2019}\n}\n```\n"
  },
  {
    "path": "configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n_base_ = ['../_base_/default_runtime.py']\n\nsave_dir = './work_dir/'\n\nmodel = dict(\n    type='DeblurGanV2',\n    generator=dict(\n        type='DeblurGanV2Generator',\n        backbone='FPNInception',\n        norm_layer='instance',\n        output_ch=3,\n        num_filter=128,\n        num_filter_fpn=256,\n    ),\n    discriminator=dict(\n        type='DeblurGanV2Discriminator',\n        backbone='DoubleGan',\n        norm_layer='instance',\n        d_layers=3,\n    ),\n    pixel_loss=dict(\n        type='PerceptualLoss', layer_weights={'14': 1}, criterion='mse'),\n    disc_loss=dict(type='AdvLoss', loss_type='ragan-ls'),\n    adv_lambda=0.001,\n    warmup_num=3,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5] * 3,\n        std=[127.5] * 3,\n    ))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedAlbuTransForms', size=256, lq_key='img', gt_key='gt'),\n    dict(\n        type='AlbuCorruptFunction',\n        keys=['img'],\n        config=[{\n            'name': 'cutout',\n            'prob': 0.5,\n            'num_holes': 3,\n            'max_h_size': 25,\n            'max_w_size': 25\n        }, {\n            'name': 'jpeg',\n            'quality_lower': 70,\n            'quality_upper': 90\n        }, {\n            'name': 'motion_blur'\n        }, {\n            'name': 'median_blur'\n        }, {\n            'name': 'gamma'\n        }, {\n            'name': 'rgb_shift'\n        }, {\n            'name': 'hsv_shift'\n        }, {\n            'name': 'sharpen'\n        }]),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedAlbuTransForms', size=256, lq_key='img', gt_key='gt'),\n    dict(\n        type='AlbuCorruptFunction',\n        keys=['img'],\n        config=[{\n            'name': 'cutout',\n            'prob': 0.5,\n            'num_holes': 3,\n            'max_h_size': 25,\n            'max_w_size': 25\n        }, {\n            'name': 'jpeg',\n            'quality_lower': 70,\n            'quality_upper': 90\n        }, {\n            'name': 'motion_blur'\n        }, {\n            'name': 'median_blur'\n        }, {\n            'name': 'gamma'\n        }, {\n            'name': 'rgb_shift'\n        }, {\n            'name': 'hsv_shift'\n        }, {\n            'name': 'sharpen'\n        }]),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/gopro'\n\ntrain_dataloader = dict(\n    batch_size=1,\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/train',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/test',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=val_pipeline))\n\ntest_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/test',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=100)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\ntest_evaluator = val_evaluator\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.999))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.999))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='LinearLR',\n    start_factor=0.0001,\n    end_factor=0.0000001,\n    begin=50,\n)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=1000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n        save_best='auto',\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=1),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nload_from = 'https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/'\\\n            'weight/DeblurGANv2_fpn-inception.pth'\n"
  },
  {
    "path": "configs/deblurganv2/deblurganv2_fpn-mobilenet_1xb1_gopro.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n_base_ = ['../_base_/default_runtime.py']\n\nsave_dir = './work_dir/'\n\nmodel = dict(\n    type='DeblurGanV2',\n    generator=dict(\n        type='DeblurGanV2Generator',\n        backbone='FPNMobileNet',\n        norm_layer='instance',\n        output_ch=3,\n        num_filter=64,\n        num_filter_fpn=128,\n    ),\n    discriminator=dict(\n        type='DeblurGanV2Discriminator',\n        backbone='DoubleGan',\n        norm_layer='instance',\n        d_layers=3,\n    ),\n    pixel_loss=dict(\n        type='PerceptualLoss', layer_weights={'14': 1}, criterion='mse'),\n    disc_loss=dict(type='AdvLoss', loss_type='ragan-ls'),\n    adv_lambda=0.001,\n    warmup_num=3,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5] * 3,\n        std=[127.5] * 3,\n    ))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedAlbuTransForms', size=256, lq_key='img', gt_key='gt'),\n    dict(\n        type='AlbuCorruptFunction',\n        keys=['img'],\n        config=[{\n            'name': 'cutout',\n            'prob': 0.5,\n            'num_holes': 3,\n            'max_h_size': 25,\n            'max_w_size': 25\n        }, {\n            'name': 'jpeg',\n            'quality_lower': 70,\n            'quality_upper': 90\n        }, {\n            'name': 'motion_blur'\n        }, {\n            'name': 'median_blur'\n        }, {\n            'name': 'gamma'\n        }, {\n            'name': 'rgb_shift'\n        }, {\n            'name': 'hsv_shift'\n        }, {\n            'name': 'sharpen'\n        }]),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedAlbuTransForms', size=256, lq_key='img', gt_key='gt'),\n    dict(\n        type='AlbuCorruptFunction',\n        keys=['img'],\n        config=[{\n            'name': 'cutout',\n            'prob': 0.5,\n            'num_holes': 3,\n            'max_h_size': 25,\n            'max_w_size': 25\n        }, {\n            'name': 'jpeg',\n            'quality_lower': 70,\n            'quality_upper': 90\n        }, {\n            'name': 'motion_blur'\n        }, {\n            'name': 'median_blur'\n        }, {\n            'name': 'gamma'\n        }, {\n            'name': 'rgb_shift'\n        }, {\n            'name': 'hsv_shift'\n        }, {\n            'name': 'sharpen'\n        }]),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/gopro'\n\ntrain_dataloader = dict(\n    batch_size=1,\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/train',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/test',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=val_pipeline))\n\ntest_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root=data_root + '/test',\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=100)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\ntest_evaluator = val_evaluator\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.999))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.999))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='LinearLR',\n    start_factor=0.0001,\n    end_factor=0.0000001,\n    begin=50,\n)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=1000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n        save_best='auto',\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=1),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nload_from = 'https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/'\\\n            'weight/DeblurGANv2_fpn-mobilenet.pth'\n"
  },
  {
    "path": "configs/deblurganv2/metafile.yml",
    "content": "Collections:\n- Name: DeblurGAN-v2\n  Paper:\n    Title: 'DeblurGAN-v2: Deblurring (Orders-of-Magnitude) Faster and Better'\n    URL: https://arxiv.org/abs/1908.03826\n  README: configs/deblurganv2/README.md\n  Task:\n  - deblurring\n  Year: 2019\nModels:\n- Config: configs/deblurganv2/deblurganv2_fpn-inception_1xb1_gopro.py\n  In Collection: DeblurGAN-v2\n  Name: deblurganv2_fpn-inception_1xb1_gopro\n  Results:\n  - Dataset: GoProTestDataset\n    Metrics:\n      PSNR/<br/>SSIM:\n        PSNR: 29.55\n        SSIM: 0.934\n    Task: Deblurring\n  Weights: https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-inception.pth\n- Config: configs/deblurganv2/deblurganv2_fpn-mobilenet_1xb1_gopro.py\n  In Collection: DeblurGAN-v2\n  Name: deblurganv2_fpn-mobilenet_1xb1_gopro\n  Results:\n  - Dataset: GoProTestDataset\n    Metrics:\n      PSNR/<br/>SSIM:\n        PSNR: 28.17\n        SSIM: 0.925\n    Task: Deblurring\n  Weights: https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/weight/DeblurGANv2_fpn-mobilenet.pth\n"
  },
  {
    "path": "configs/deepfillv1/README.md",
    "content": "# DeepFillv1 (CVPR'2018)\n\n> [Generative Image Inpainting with Contextual Attention](https://arxiv.org/abs/1801.07892)\n\n> **Task**: Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nRecent deep learning based approaches have shown promising results for the challenging task of inpainting large missing regions in an image. These methods can generate visually plausible image structures and textures, but often create distorted structures or blurry textures inconsistent with surrounding areas. This is mainly due to ineffectiveness of convolutional neural networks in explicitly borrowing or copying information from distant spatial locations. On the other hand, traditional texture and patch synthesis approaches are particularly suitable when it needs to borrow textures from the surrounding regions. Motivated by these observations, we propose a new deep generative model-based approach which can not only synthesize novel image structures but also explicitly utilize surrounding image features as references during network training to make better predictions. The model is a feed-forward, fully convolutional neural network which can process images with multiple holes at arbitrary locations and with variable sizes during the test time. Experiments on multiple datasets including faces (CelebA, CelebA-HQ), textures (DTD) and natural images (ImageNet, Places2) demonstrate that our proposed approach generates higher-quality inpainting results than existing ones.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144174665-9675931f-e448-4475-a659-99b65e7d4a64.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n**CelebA-HQ**\n\n|                       Model                       |  Mask Type  | Resolution | Train Iters |  Dataset   | l1 error |  PSNR  | SSIM  | Training Resources |                                 Download                                 |\n| :-----------------------------------------------: | :---------: | :--------: | :---------: | :--------: | :------: | :----: | :---: | :----------------: | :----------------------------------------------------------------------: |\n| [DeepFillv1](./deepfillv1_4xb4_celeba-256x256.py) | square bbox |  256x256   |    1500k    | CelebA-val |  6.677   | 26.878 | 0.911 |         4          | [model](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_4x4_celeba_20200619-dd51a855.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_4x4_celeba_20200619-dd51a855.log.json) |\n\n**Places365-Challenge**\n\n|                       Model                       |  Mask Type  | Resolution | Train Iters |    Dataset    | l1 error |  PSNR  | SSIM  | Training Resources |                               Download                                |\n| :-----------------------------------------------: | :---------: | :--------: | :---------: | :-----------: | :------: | :----: | :---: | :----------------: | :-------------------------------------------------------------------: |\n| [DeepFillv1](./deepfillv1_8xb2_places-256x256.py) | square bbox |  256x256   |    3500k    | Places365-val |  11.019  | 23.429 | 0.862 |         8          | [model](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py\n\n# single-gpu train\npython tools/train.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/deepfillv1/deepfillv1_8xb2_places-256x256.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth\n\n# single-gpu test\npython tools/test.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{yu2018generative,\n  title={Generative image inpainting with contextual attention},\n  author={Yu, Jiahui and Lin, Zhe and Yang, Jimei and Shen, Xiaohui and Lu, Xin and Huang, Thomas S},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={5505--5514},\n  year={2018}\n}\n```\n"
  },
  {
    "path": "configs/deepfillv1/README_zh-CN.md",
    "content": "# DeepFillv1 (CVPR'2018)\n\n> **任务**: 图像修复\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">DeepFillv1 (CVPR'2018)</summary>\n\n```bibtex\n@inproceedings{yu2018generative,\n  title={Generative image inpainting with contextual attention},\n  author={Yu, Jiahui and Lin, Zhe and Yang, Jimei and Shen, Xiaohui and Lu, Xin and Huang, Thomas S},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={5505--5514},\n  year={2018}\n}\n```\n\n</details>\n\n<br/>\n\n**CelebA-HQ**\n\n|                       算法                        |  掩膜类型   | 分辨率  | 训练集容量 |   测试集   | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                          下载                                           |\n| :-----------------------------------------------: | :---------: | :-----: | :--------: | :--------: | :-----: | :----: | :---: | :------: | :-------------------------------------------------------------------------------------: |\n| [DeepFillv1](./deepfillv1_4xb4_celeba-256x256.py) | square bbox | 256x256 |   1500k    | CelebA-val |  6.677  | 26.878 | 0.911 |    4     | [模型](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_4x4_celeba_20200619-dd51a855.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_4x4_celeba_20200619-dd51a855.log.json) |\n\n**Places365-Challenge**\n\n|                       算法                        |  掩膜类型   | 分辨率  | 训练集容量 |    测试集     | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                         下载                                         |\n| :-----------------------------------------------: | :---------: | :-----: | :--------: | :-----------: | :-----: | :----: | :---: | :------: | :----------------------------------------------------------------------------------: |\n| [DeepFillv1](./deepfillv1_8xb2_places-256x256.py) | square bbox | 256x256 |   3500k    | Places365-val | 11.019  | 23.429 | 0.862 |    8     | [模型](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py\n\n# 单个GPU上训练\npython tools/train.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/deepfillv1/deepfillv1_8xb2_places-256x256.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth\n\n# 单个GPU上测试\npython tools/test.py configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/deepfillv1/deepfillv1_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/deepfillv1/deepfillv1_4xb4_celeba-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_deepfillv1.py',\n    '../_base_/inpaint_default_runtime.py', '../_base_/datasets/celeba.py'\n]\n\nexperiment_name = 'deepfillv1_4xb4_celeba-256x256'\nsave_dir = './work_dirs'\nmodel = dict(\n    train_cfg=dict(disc_step=2, start_iter=0, local_size=(128, 128)), )\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='bbox',\n        mask_config=dict(\n            max_bbox_shape=(128, 128),\n            max_bbox_delta=40,\n            min_margin=20,\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=4,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=1500003,\n    val_interval=250000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=250000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/deepfillv1/deepfillv1_8xb2_places-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_deepfillv1.py',\n    '../_base_/inpaint_default_runtime.py', '../_base_/datasets/places.py'\n]\n\nexperiment_name = 'deepfillv1_8xb2_places-256x256'\nsave_dir = './work_dirs'\nmodel = dict(train_cfg=dict(disc_step=5, start_iter=0, local_size=(128, 128)))\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='bbox',\n        mask_config=dict(\n            max_bbox_shape=(128, 128),\n            max_bbox_delta=40,\n            min_margin=20,\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=2,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=5000003,\n    val_interval=250000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=250000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/deepfillv1/metafile.yml",
    "content": "Collections:\n- Name: DeepFillv1\n  Paper:\n    Title: Generative Image Inpainting with Contextual Attention\n    URL: https://arxiv.org/abs/1801.07892\n  README: configs/deepfillv1/README.md\n  Task:\n  - inpainting\n  Year: 2018\nModels:\n- Config: configs/deepfillv1/deepfillv1_4xb4_celeba-256x256.py\n  In Collection: DeepFillv1\n  Name: deepfillv1_4xb4_celeba-256x256\n  Results:\n  - Dataset: CelebA-val\n    Metrics:\n      PSNR: 26.878\n      SSIM: 0.911\n      l1 error: 6.677\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_4x4_celeba_20200619-dd51a855.pth\n- Config: configs/deepfillv1/deepfillv1_8xb2_places-256x256.py\n  In Collection: DeepFillv1\n  Name: deepfillv1_8xb2_places-256x256\n  Results:\n  - Dataset: Places365-val\n    Metrics:\n      PSNR: 23.429\n      SSIM: 0.862\n      l1 error: 11.019\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/deepfillv1/deepfillv1_256x256_8x2_places_20200619-c00a0e21.pth\n"
  },
  {
    "path": "configs/deepfillv2/README.md",
    "content": "# DeepFillv2 (CVPR'2019)\n\n> [Free-Form Image Inpainting with Gated Convolution](https://arxiv.org/abs/1806.03589)\n\n> **Task**: Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe present a generative image inpainting system to complete images with free-form mask and guidance. The system is based on gated convolutions learned from millions of images without additional labelling efforts. The proposed gated convolution solves the issue of vanilla convolution that treats all input pixels as valid ones, generalizes partial convolution by providing a learnable dynamic feature selection mechanism for each channel at each spatial location across all layers. Moreover, as free-form masks may appear anywhere in images with any shape, global and local GANs designed for a single rectangular mask are not applicable. Thus, we also present a patch-based GAN loss, named SN-PatchGAN, by applying spectral-normalized discriminator on dense image patches. SN-PatchGAN is simple in formulation, fast and stable in training. Results on automatic image inpainting and user-guided extension demonstrate that our system generates higher-quality and more flexible results than previous methods. Our system helps user quickly remove distracting objects, modify image layouts, clear watermarks and edit faces.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144175160-75473789-924f-490b-ab25-4c4f252fa55f.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n**CelebA-HQ**\n\n|                       Model                       | Mask Type | Resolution | Train Iters |  Dataset   | l1 error |  PSNR  | SSIM  | Training Resources |                                  Download                                  |\n| :-----------------------------------------------: | :-------: | :--------: | :---------: | :--------: | :------: | :----: | :---: | :----------------: | :------------------------------------------------------------------------: |\n| [DeepFillv2](./deepfillv2_8xb2_celeba-256x256.py) | free-form |  256x256   |     20k     | CelebA-val |  5.411   | 25.721 | 0.871 |         8          | [model](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.log.json) |\n\n**Places365-Challenge**\n\n|                       Model                       | Mask Type | Resolution | Train Iters |    Dataset    | l1 error |  PSNR  | SSIM  | Training Resources |                                Download                                 |\n| :-----------------------------------------------: | :-------: | :--------: | :---------: | :-----------: | :------: | :----: | :---: | :----------------: | :---------------------------------------------------------------------: |\n| [DeepFillv2](./deepfillv2_8xb2_places-256x256.py) | free-form |  256x256   |    100k     | Places365-val |  8.635   | 22.398 | 0.815 |         8          | [model](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py\n\n# single-gpu train\npython tools/train.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/deepfillv2/deepfillv2_8xb2_places-256x256.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth\n\n# single-gpu test\npython tools/test.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{yu2019free,\n  title={Free-form image inpainting with gated convolution},\n  author={Yu, Jiahui and Lin, Zhe and Yang, Jimei and Shen, Xiaohui and Lu, Xin and Huang, Thomas S},\n  booktitle={Proceedings of the IEEE International Conference on Computer Vision},\n  pages={4471--4480},\n  year={2019}\n}\n```\n"
  },
  {
    "path": "configs/deepfillv2/README_zh-CN.md",
    "content": "# DeepFillv2 (CVPR'2019)\n\n> **任务**: 图像修复\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">DeepFillv2 (CVPR'2019)</summary>\n\n```bibtex\n@inproceedings{yu2019free,\n  title={Free-form image inpainting with gated convolution},\n  author={Yu, Jiahui and Lin, Zhe and Yang, Jimei and Shen, Xiaohui and Lu, Xin and Huang, Thomas S},\n  booktitle={Proceedings of the IEEE International Conference on Computer Vision},\n  pages={4471--4480},\n  year={2019}\n}\n```\n\n</details>\n\n<br/>\n\n**CelebA-HQ**\n\n|                       算法                        | 掩膜类型  | 分辨率  | 训练集容量 |   测试集   | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                           下载                                            |\n| :-----------------------------------------------: | :-------: | :-----: | :--------: | :--------: | :-----: | :----: | :---: | :------: | :---------------------------------------------------------------------------------------: |\n| [DeepFillv2](./deepfillv2_8xb2_celeba-256x256.py) | free-form | 256x256 |    20k     | CelebA-val |  5.411  | 25.721 | 0.871 |    8     | [模型](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.log.json) |\n\n**Places365-Challenge**\n\n|                       算法                        | 掩膜类型  | 分辨率  | 训练集容量 |    测试集     | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                          下载                                          |\n| :-----------------------------------------------: | :-------: | :-----: | :--------: | :-----------: | :-----: | :----: | :---: | :------: | :------------------------------------------------------------------------------------: |\n| [DeepFillv2](./deepfillv2_8xb2_places-256x256.py) | free-form | 256x256 |    100k    | Places365-val |  8.635  | 22.398 | 0.815 |    8     | [模型](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py\n\n# 单个GPU上训练\npython tools/train.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/deepfillv2/deepfillv2_8xb2_places-256x256.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth\n\n# 单个GPU上测试\npython tools/test.py configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/deepfillv2/deepfillv2_8xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/deepfillv2/deepfillv2_8xb2_celeba-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_deepfillv2.py',\n    '../_base_/inpaint_default_runtime.py', '../_base_/datasets/celeba.py'\n]\n\nsave_dir = './work_dirs'\nexperiment_name = 'deepfillv2_8xb2_celeba-256x256'\nmodel = dict(train_cfg=dict(disc_step=1, start_iter=0))\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=2,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=500003,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=50000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/deepfillv2/deepfillv2_8xb2_places-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_deepfillv2.py',\n    '../_base_/inpaint_default_runtime.py', '../_base_/datasets/places.py'\n]\n\nsave_dir = './work_dirs'\nexperiment_name = 'deepfillv2_8xb2_places-256x256'\nmodel = dict(train_cfg=dict(disc_step=1, start_iter=0))\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=2,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=1000003,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=50000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/deepfillv2/metafile.yml",
    "content": "Collections:\n- Name: DeepFillv2\n  Paper:\n    Title: Free-Form Image Inpainting with Gated Convolution\n    URL: https://arxiv.org/abs/1806.03589\n  README: configs/deepfillv2/README.md\n  Task:\n  - inpainting\n  Year: 2019\nModels:\n- Config: configs/deepfillv2/deepfillv2_8xb2_celeba-256x256.py\n  In Collection: DeepFillv2\n  Name: deepfillv2_8xb2_celeba-256x256\n  Results:\n  - Dataset: CelebA-val\n    Metrics:\n      PSNR: 25.721\n      SSIM: 0.871\n      l1 error: 5.411\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_celeba_20200619-c96e5f12.pth\n- Config: configs/deepfillv2/deepfillv2_8xb2_places-256x256.py\n  In Collection: DeepFillv2\n  Name: deepfillv2_8xb2_places-256x256\n  Results:\n  - Dataset: Places365-val\n    Metrics:\n      PSNR: 22.398\n      SSIM: 0.815\n      l1 error: 8.635\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/deepfillv2/deepfillv2_256x256_8x2_places_20200619-10d15793.pth\n"
  },
  {
    "path": "configs/dic/README.md",
    "content": "# DIC (CVPR'2020)\n\n> [Deep Face Super-Resolution with Iterative Collaboration between Attentive Recovery and Landmark Estimation](https://arxiv.org/abs/2003.13063)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nRecent works based on deep learning and facial priors have succeeded in super-resolving severely degraded facial images. However, the prior knowledge is not fully exploited in existing methods, since facial priors such as landmark and component maps are always estimated by low-resolution or coarsely super-resolved images, which may be inaccurate and thus affect the recovery performance. In this paper, we propose a deep face super-resolution (FSR) method with iterative collaboration between two recurrent networks which focus on facial image recovery and landmark estimation respectively. In each recurrent step, the recovery branch utilizes the prior knowledge of landmarks to yield higher-quality images which facilitate more accurate landmark estimation in turn. Therefore, the iterative information interaction between two processes boosts the performance of each other progressively. Moreover, a new attentive fusion module is designed to strengthen the guidance of landmark maps, where facial components are generated individually and aggregated attentively for better restoration. Quantitative and qualitative experimental results show the proposed method significantly outperforms state-of-the-art FSR methods in recovering high-quality face images.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144017838-63e31123-1b59-4743-86bb-737bd32a9209.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\nIn the log data of `dic_gan_x8c48b6_g4_150k_CelebAHQ`, DICGAN is verified on the first 9 pictures of the test set of CelebA-HQ, so `PSNR` and `SSIM` shown in the follow table is different from the log data.\n\n`Training Resources`: Training Resourcesrmation during training.\n\n|                                    Model                                     | Dataset  | scale |  PSNR   |  SSIM  | Training Resources  |                                    Download                                     |\n| :--------------------------------------------------------------------------: | :------: | :---: | :-----: | :----: | :-----------------: | :-----------------------------------------------------------------------------: |\n|     [dic_x8c48b6_g4_150k_CelebAHQ](./dic_x8c48b6_4xb2-150k_celeba-hq.py)     | CelebAHQ |  x8   | 25.2319 | 0.7422 | 4 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/restorers/dic/dic_x8c48b6_g4_150k_CelebAHQ_20210611-5d3439ca.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/dic/dic_x8c48b6_g4_150k_CelebAHQ_20210611-5d3439ca.log.json) |\n| [dic_gan_x8c48b6_g4_500k_CelebAHQ](./dic_gan-x8c48b6_4xb2-500k_celeba-hq.py) | CelebAHQ |  x8   | 23.6241 | 0.6721 | 4 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py\n\n# single-gpu train\npython tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth\n\n# single-gpu test\npython tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{ma2020deep,\n  title={Deep face super-resolution with iterative collaboration between attentive recovery and landmark estimation},\n  author={Ma, Cheng and Jiang, Zhenyu and Rao, Yongming and Lu, Jiwen and Zhou, Jie},\n  booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},\n  pages={5569--5578},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/dic/README_zh-CN.md",
    "content": "# DIC (CVPR'2020)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n\n<summary align=\"right\">DIC (CVPR'2020)</summary>\n\n```bibtex\n@inproceedings{ma2020deep,\n  title={Deep face super-resolution with iterative collaboration between attentive recovery and landmark estimation},\n  author={Ma, Cheng and Jiang, Zhenyu and Rao, Yongming and Lu, Jiwen and Zhou, Jie},\n  booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},\n  pages={5569--5578},\n  year={2020}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n在 `dic_gan_x8c48b6_g4_150k_CelebAHQ` 的日志中，DICGAN 在 CelebA-HQ 测试集的前9张图片上进行了验证，因此下表中的 `PSNR/SSIM` 与日志数据不同。\n\n`GPU 信息`: 训练过程中的 GPU 信息.\n\n|                                     算法                                     | scale |    CelebA-HQ     |      GPU 信息       |                                         下载                                         |\n| :--------------------------------------------------------------------------: | :---: | :--------------: | :-----------------: | :----------------------------------------------------------------------------------: |\n|     [dic_x8c48b6_g4_150k_CelebAHQ](./dic_x8c48b6_4xb2-150k_celeba-hq.py)     |  x8   | 25.2319 / 0.7422 | 4 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/restorers/dic/dic_x8c48b6_g4_150k_CelebAHQ_20210611-5d3439ca.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/dic/dic_x8c48b6_g4_150k_CelebAHQ_20210611-5d3439ca.log.json) |\n| [dic_gan_x8c48b6_g4_500k_CelebAHQ](./dic_gan-x8c48b6_4xb2-500k_celeba-hq.py) |  x8   | 23.6241 / 0.6721 | 4 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py\n\n# 单个GPU上训练\npython tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth\n\n# 单个GPU上测试\npython tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py",
    "content": "_base_ = './dic_x8c48b6_4xb2-150k_celeba-hq.py'\n\nexperiment_name = 'dic_gan-x8c48b6_4xb2-500k_celeba-hq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 8\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\npretrained_light_cnn = 'https://download.openmmlab.com/mmediting/' + \\\n        'restorers/dic/light_cnn_feature.pth'\nmodel = dict(\n    type='DIC',\n    generator=dict(\n        type='DICNet', in_channels=3, out_channels=3, mid_channels=48),\n    discriminator=dict(type='LightCNN', in_channels=3),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    align_loss=dict(type='MSELoss', loss_weight=0.1, reduction='mean'),\n    feature_loss=dict(\n        type='LightCNNFeatureLoss',\n        pretrained=pretrained_light_cnn,\n        loss_weight=0.1,\n        criterion='l1'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=0.005,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(pixel_init=10000, disc_repeat=2),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[129.795, 108.12, 96.39],\n        std=[255, 255, 255],\n    ))\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=500_000, val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=1e-4)),\n    discriminator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=1e-5)))\n\n# learning policy\nparam_scheduler = dict(\n    _delete_=True,\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[100000, 200000, 300000, 400000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/dic/dic_x8c48b6_4xb2-150k_celeba-hq.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'dic_x8c48b6_4xb2-150k_celeba-hq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 8\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\nmodel = dict(\n    type='DIC',\n    generator=dict(\n        type='DICNet', in_channels=3, out_channels=3, mid_channels=48),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    align_loss=dict(type='MSELoss', loss_weight=0.1, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[129.795, 108.12, 96.39],\n        std=[255, 255, 255],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='Resize',\n        scale=(128, 128),\n        keys=['gt'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=1 / 8,\n        keep_ratio=True,\n        keys=['gt'],\n        output_keys=['img'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='GenerateFacialHeatmap',\n        image_key='gt',\n        ori_size=128,\n        target_size=32,\n        sigma=1.0),\n    dict(type='PackInputs')\n]\nvalid_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='Resize',\n        scale=(128, 128),\n        keys=['gt'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=1 / 8,\n        keep_ratio=True,\n        keys=['gt'],\n        output_keys=['img'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(type='PackInputs')\n]\ntest_pipeline = valid_pipeline\n\ninference_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='Resize',\n        scale=(128, 128),\n        keys=['img'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=1 / 8,\n        keep_ratio=True,\n        keys=['img'],\n        output_keys=['img'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=2,  # gpus 4\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='celeba', task_name='fsr'),\n        data_root=data_root + '/CelebA-HQ',\n        data_prefix=dict(gt='train_256/all_256'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='celeba', task_name='fsr'),\n        data_root=data_root + '/CelebA-HQ',\n        data_prefix=dict(gt='test_256/all_256'),\n        pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR', crop_border=scale),\n    dict(type='SSIM', crop_border=scale),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=150_000, val_interval=2000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=1e-4)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[10000, 20000, 40000, 80000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=2000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/dic/metafile.yml",
    "content": "Collections:\n- Name: DIC\n  Paper:\n    Title: Deep Face Super-Resolution with Iterative Collaboration between Attentive\n      Recovery and Landmark Estimation\n    URL: https://arxiv.org/abs/2003.13063\n  README: configs/dic/README.md\n  Task:\n  - image super-resolution\n  Year: 2020\nModels:\n- Config: configs/dic/dic_x8c48b6_4xb2-150k_celeba-hq.py\n  In Collection: DIC\n  Name: dic_x8c48b6_4xb2-150k_celeba-hq\n  Results:\n  - Dataset: CelebAHQ\n    Metrics:\n      PSNR: 25.2319\n      SSIM: 0.7422\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/dic/dic_x8c48b6_g4_150k_CelebAHQ_20210611-5d3439ca.pth\n- Config: configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py\n  In Collection: DIC\n  Name: dic_gan-x8c48b6_4xb2-500k_celeba-hq\n  Results:\n  - Dataset: CelebAHQ\n    Metrics:\n      PSNR: 23.6241\n      SSIM: 0.6721\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth\n"
  },
  {
    "path": "configs/diffusers_pipeline/README.md",
    "content": "# Diffusers Pipeline (2023)\n\n> [Diffusers Pipeline](https://github.com/huggingface/diffusers)\n\n> **Task**: Diffusers Pipeline\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nFor the convenience of our community users, this inferencer supports using the pipelines from diffusers for inference to compare the results with the algorithms supported within our algorithm library.\n\n## Configs\n\n|                   Model                   | Dataset | Download |\n| :---------------------------------------: | :-----: | :------: |\n| [diffusers pipeline](./sd_xl_pipeline.py) |    -    |    -     |\n\n## Quick Start\n\n### sd_xl_pipeline\n\nTo run stable diffusion XL with mmagic inference API, follow these codes:\n\n```python\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMEdit instance and infer\neditor = MMagicInferencer(model_name='diffusers_pipeline')\ntext_prompts = 'Japanese anime style, girl, beautiful, cute, colorful, best quality, extremely detailed'\nnegative_prompt = 'bad face, bad hands'\nresult_out_dir = 'sd_xl_japanese.png'\neditor.infer(text=text_prompts,\n             negative_prompt=negative_prompt,\n             result_out_dir=result_out_dir)\n```\n\nYou will get this picture:\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12782558/266557074-53519887-6597-42cf-8a0b-03c2db3f4ab2.png\" width=\"600\"/>\n</div >\n\n## Citation\n\n```bibtex\n@misc{von-platen-etal-2022-diffusers,\n  author = {Patrick von Platen and Suraj Patil and Anton Lozhkov and Pedro Cuenca and Nathan Lambert and Kashif Rasul and Mishig Davaadorj and Thomas Wolf},\n  title = {Diffusers: State-of-the-art diffusion models},\n  year = {2022},\n  publisher = {GitHub},\n  journal = {GitHub repository},\n  howpublished = {\\url{https://github.com/huggingface/diffusers}}\n}\n```\n"
  },
  {
    "path": "configs/diffusers_pipeline/metafile.yml",
    "content": "Collections:\n- Name: Diffusers Pipeline\n  Paper:\n    Title: Diffusers Pipeline\n    URL: https://github.com/huggingface/diffusers\n  README: configs/diffusers_pipeline/README.md\n  Task:\n  - diffusers pipeline\n  Year: 2023\nModels:\n- Config: configs/diffusers_pipeline/sd_xl_pipeline.py\n  In Collection: Diffusers Pipeline\n  Name: sd_xl_pipeline\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Diffusers Pipeline\n"
  },
  {
    "path": "configs/diffusers_pipeline/sd_xl_pipeline.py",
    "content": "# config for model\n\nmodel = dict(\n    type='DiffusionPipeline',\n    from_pretrained='stabilityai/stable-diffusion-xl-base-1.0')\n"
  },
  {
    "path": "configs/dim/README.md",
    "content": "# DIM (CVPR'2017)\n\n> [Deep Image Matting](https://arxiv.org/abs/1703.03872)\n\n> **Task**: Matting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nImage matting is a fundamental computer vision problem and has many applications. Previous algorithms have poor performance when an image has similar foreground and background colors or complicated textures. The main reasons are prior methods 1) only use low-level features and 2) lack high-level context. In this paper, we propose a novel deep learning based algorithm that can tackle both these problems. Our deep model has two parts. The first part is a deep convolutional encoder-decoder network that takes an image and the corresponding trimap as inputs and predict the alpha matte of the image. The second part is a small convolutional network that refines the alpha matte predictions of the first network to have more accurate alpha values and sharper edges. In addition, we also create a large-scale image matting dataset including 49300 training images and 1000 testing images. We evaluate our algorithm on the image matting benchmark, our testing set, and a wide variety of real images. Experimental results clearly demonstrate the superiority of our algorithm over previous methods.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144175771-05b4d8f5-1abc-48ee-a5f1-8cc89a156e27.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                                 Model                                  |    Dataset     | SAD  |  MSE  |   GRAD   |   CONN   | Training Resources |                                 Download                                  |\n| :--------------------------------------------------------------------: | :------------: | :--: | :---: | :------: | :------: | :----------------: | :-----------------------------------------------------------------------: |\n|         [stage1 (our)](./dim_stage1-v16_1xb1-1000k_comp1k.py)          | Composition-1k | 53.8 | 0.017 |   32.7   |   54.5   |         1          | [model](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage1_v16_1x1_1000k_comp1k_SAD-53.8_20200605_140257-979a420f.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage1_v16_1x1_1000k_comp1k_20200605_140257.log.json) |\n|       [stage2 (our)](./dim_stage2-v16-pln_1xb1-1000k_comp1k.py)        | Composition-1k | 52.3 | 0.016 |   29.4   |   52.4   |         1          | [model](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage2_v16_pln_1x1_1000k_comp1k_SAD-52.3_20200607_171909-d83c4775.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage2_v16_pln_1x1_1000k_comp1k_20200607_171909.log.json) |\n|       [stage3 (our)](./dim_stage3-v16-pln_1xb1-1000k_comp1k.py)        | Composition-1k | 50.6 | 0.015 | **29.0** | **50.7** |         1          | [model](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_20200609_111851.log.json) |\n| [stage1 (online merge)](./dim_stage1-v16_1xb1-1000k_comp1k_online-merge.py) | Composition-1k |  -   |   -   |    -     |    -     |         -          |                                     -                                     |\n\n<!-- |     stage1 (paper)         | Composition-1k |  54.6   |   0.017   |   36.7   |   55.3   |         -          |                                      -                                       |\n|                              stage3 (paper)   |Composition-1k | **50.4** | **0.014** |   31.0   |   50.8   |         -          |                                      -                                       | -->\n\n**NOTE**\n\n- stage1: train the encoder-decoder part without the refinement part.\n- stage2: fix the encoder-decoder part and train the refinement part.\n- stage3: fine-tune the whole network.\n\n> The performance of the model is not stable during the training. Thus, the reported performance is not from the last checkpoint. Instead, it is the best performance of all validations during training.\n\n> The performance of training (best performance) with different random seeds diverges in a large range. You may need to run several experiments for each setting to obtain the above performance.\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\nDIM is trained with three stages.\n\n**Stage 1**: train the encoder-decoder part without the refinement part.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py\n\n# single-gpu train\npython tools/train.py configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py 8\n```\n\n**Stage 2**: fix the encoder-decoder part and train the refinement part.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py\n\n# single-gpu train\npython tools/train.py configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py 8\n```\n\n**Stage 3**: fine-tune the whole network.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py\n\n# single-gpu train\npython tools/train.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth\n\n# single-gpu test\npython tools/test.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{xu2017deep,\n  title={Deep image matting},\n  author={Xu, Ning and Price, Brian and Cohen, Scott and Huang, Thomas},\n  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},\n  pages={2970--2979},\n  year={2017}\n}\n```\n"
  },
  {
    "path": "configs/dim/README_zh-CN.md",
    "content": "# DIM (CVPR'2017)\n\n> **任务**: 图像抠图\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">DIM (CVPR'2017)</summary>\n\n```bibtex\n@inproceedings{xu2017deep,\n  title={Deep image matting},\n  author={Xu, Ning and Price, Brian and Cohen, Scott and Huang, Thomas},\n  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},\n  pages={2970--2979},\n  year={2017}\n}\n```\n\n</details>\n\n<br/>\n\n|                                     算法                                      |   SAD    |    MSE    |   GRAD   |   CONN   | GPU 信息 |                                        下载                                        |\n| :---------------------------------------------------------------------------: | :------: | :-------: | :------: | :------: | :------: | :--------------------------------------------------------------------------------: |\n|                                第一阶段 (原文)                                |   54.6   |   0.017   |   36.7   |   55.3   |    -     |                                         -                                          |\n|                                第三阶段 (原文)                                | **50.4** | **0.014** |   31.0   |   50.8   |    -     |                                         -                                          |\n|           [第一阶段 (复现)](./dim_stage1-v16_1xb1-1000k_comp1k.py)            |   53.8   |   0.017   |   32.7   |   54.5   |    1     | [模型](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage1_v16_1x1_1000k_comp1k_SAD-53.8_20200605_140257-979a420f.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage1_v16_1x1_1000k_comp1k_20200605_140257.log.json) |\n|         [第二阶段 (复现)](./dim_stage2-v16-pln_1xb1-1000k_comp1k.py)          |   52.3   |   0.016   |   29.4   |   52.4   |    1     | [模型](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage2_v16_pln_1x1_1000k_comp1k_SAD-52.3_20200607_171909-d83c4775.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage2_v16_pln_1x1_1000k_comp1k_20200607_171909.log.json) |\n|         [第三阶段 (复现)](./dim_stage3-v16-pln_1xb1-1000k_comp1k.py)          |   50.6   |   0.015   | **29.0** | **50.7** |    1     | [模型](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_20200609_111851.log.json) |\n| [第一阶段 (online merge)](./dim_stage1-v16_1xb1-1000k_comp1k_online-merge.py) |    -     |     -     |    -     |    -     |    -     |                                         -                                          |\n\n**注**\n\n- 第一阶段：训练不带精炼器的编码器-解码器部分。 \\\\\n- 第二阶段：固定编码器-解码器部分，训练精炼器部分。 \\\\\n- 第三阶段：微调整个网络模型。\n\n> 模型在训练过程中的性能不稳定。因此，展示的性能并非来自最后一个模型权重文件，而是训练期间在验证集上取得的最佳性能。\n\n> 不同随机种子的训练性能（最佳性能）的发散程度很大，您可能需要为每个设置运行多个实验以获得上述性能。\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\nDIM 训练有三个阶段。\n\n**阶段 1**: 训练不带精炼器的编码器-解码器部分。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py\n\n# 单个GPU上训练\npython tools/train.py configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py 8\n```\n\n**阶段 2**: 固定编码器-解码器部分，训练精炼器部分。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py\n\n# 单个GPU上训练\npython tools/train.py configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py 8\n```\n\n**阶段 3**: 微调整个网络模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py\n\n# 单个GPU上训练\npython tools/train.py configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py onfigs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth\n\n# 单个GPU上测试\npython tools/test.py onfigs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh onfigs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py",
    "content": "_base_ = [\n    '../_base_/datasets/comp1k.py', '../_base_/matting_default_runtime.py'\n]\n\nsave_dir = './work_dirs/'\nexperiment_name = 'dim_stage1-v16_1xb1-1000k_comp1k'\n\n# model settings\nmodel = dict(\n    type='DIM',\n    data_preprocessor=dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        proc_trimap='rescale_to_zero_one',\n    ),\n    backbone=dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(\n            type='VGG16',\n            in_channels=4,\n            init_cfg=dict(\n                type='Pretrained', checkpoint='open-mmlab://mmedit/vgg16')),\n        decoder=dict(type='PlainDecoder')),\n    loss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5),\n    loss_comp=dict(type='CharbonnierCompLoss', loss_weight=0.5),\n    train_cfg=dict(train_backbone=True, train_refiner=False),\n    test_cfg=dict(\n        refine=False,\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ),\n)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='LoadImageFromFile', key='bg'),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        crop_sizes=[320, 480, 640]),\n    dict(type='Flip', keys=['alpha', 'merged', 'fg', 'bg']),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        scale=(320, 320),\n        keep_ratio=False),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='PackInputs'),\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(batch_size=1, dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(batch_size=1, dataset=dict(pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=1_000_000,\n    val_interval=40000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.00001),\n)\n\n# checkpoint saving\ndefault_hooks = dict(\n    checkpoint=dict(type='CheckpointHook', interval=40000, out_dir=save_dir))\n"
  },
  {
    "path": "configs/dim/dim_stage1-v16_1xb1-1000k_comp1k_online-merge.py",
    "content": "_base_ = ['./dim_stage1-v16_1xb1-1000k_comp1k.py']\nsave_dir = './work_dirs/'\nexperiment_name = 'dim_stage1-v16_1xb1-1000k_comp1k_online-merge'\n\n# dataset settings\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='LoadImageFromFile', key='bg'),\n    dict(type='MergeFgAndBg'),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        crop_sizes=[320, 480, 640]),\n    dict(type='Flip', keys=['alpha', 'merged', 'fg', 'bg']),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        scale=(320, 320),\n        keep_ratio=False),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(dataset=dict(pipeline=train_pipeline))\n"
  },
  {
    "path": "configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py",
    "content": "_base_ = ['./dim_stage1-v16_1xb1-1000k_comp1k.py']\nsave_dir = './work_dirs/'\nexperiment_name = 'dim_stage2-v16-pln_1xb1-1000k_comp1k'\n\n# model settings\nmodel = dict(\n    refiner=dict(type='PlainRefiner'),\n    loss_refine=dict(type='CharbonnierLoss'),\n    train_cfg=dict(train_backbone=False, train_refiner=True),\n    test_cfg=dict(refine=True),\n)\n\n# load_from = \\\n#     'https://download.openmmlab.com/mmediting/mattors/dim/'\\\n#     'dim_stage1_v16_1x1_1000k_comp1k_SAD-53.8_20200605_140257-979a420f.pth'\n"
  },
  {
    "path": "configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py",
    "content": "_base_ = ['./dim_stage1-v16_1xb1-1000k_comp1k.py']\n\nsave_dir = './work_dirs'\nexperiment_name = 'dim_stage3-v16-pln_1xb1-1000k_comp1k'\n\n# model settings\nmodel = dict(\n    refiner=dict(type='PlainRefiner'),\n    loss_refine=dict(type='CharbonnierLoss'),\n    train_cfg=dict(train_backbone=True, train_refiner=True),\n    test_cfg=dict(refine=True),\n)\n\n# load_from = \\\n#     'https://download.openmmlab.com/mmediting/mattors/dim/'\\\n#     'dim_stage2_v16_pln_1x1_1000k_comp1k_SAD-52.3_20200607_171909-d83c4775.pth'\n"
  },
  {
    "path": "configs/dim/metafile.yml",
    "content": "Collections:\n- Name: DIM\n  Paper:\n    Title: Deep Image Matting\n    URL: https://arxiv.org/abs/1703.03872\n  README: configs/dim/README.md\n  Task:\n  - matting\n  Year: 2017\nModels:\n- Config: configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py\n  In Collection: DIM\n  Name: dim_stage1-v16_1xb1-1000k_comp1k\n  Results:\n  - Dataset: Composition-1k\n    Metrics:\n      CONN: 54.5\n      GRAD: 32.7\n      MSE: 0.017\n      SAD: 53.8\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/dim/dim_stage1_v16_1x1_1000k_comp1k_SAD-53.8_20200605_140257-979a420f.pth\n- Config: configs/dim/dim_stage2-v16-pln_1xb1-1000k_comp1k.py\n  In Collection: DIM\n  Name: dim_stage2-v16-pln_1xb1-1000k_comp1k\n  Results:\n  - Dataset: Composition-1k\n    Metrics:\n      CONN: 52.4\n      GRAD: 29.4\n      MSE: 0.016\n      SAD: 52.3\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/dim/dim_stage2_v16_pln_1x1_1000k_comp1k_SAD-52.3_20200607_171909-d83c4775.pth\n- Config: configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py\n  In Collection: DIM\n  Name: dim_stage3-v16-pln_1xb1-1000k_comp1k\n  Results:\n  - Dataset: Composition-1k\n    Metrics:\n      CONN: 50.7\n      GRAD: 29.0\n      MSE: 0.015\n      SAD: 50.6\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth\n- Config: configs/dim/dim_stage1-v16_1xb1-1000k_comp1k_online-merge.py\n  In Collection: DIM\n  Name: dim_stage1-v16_1xb1-1000k_comp1k_online-merge\n  Results:\n  - Dataset: Composition-1k\n    Metrics: {}\n    Task: Matting\n"
  },
  {
    "path": "configs/disco_diffusion/README.md",
    "content": "# Disco Diffusion (2022)\n\n> [Disco Diffusion](https://github.com/alembics/disco-diffusion)\n\n> **Task**: Text2Image, Image2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDisco Diffusion (DD) is a Google Colab Notebook which leverages an AI Image generating technique called CLIP-Guided Diffusion to allow you to create compelling and beautiful images from text inputs.\n\nCreated by Somnai, augmented by Gandamu, and building on the work of RiversHaveWings, nshepperd, and many others. See more details in [Credits](#credits).\n\n<!-- [IMAGE] -->\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/204526957-ac30547e-5a44-417a-aaa2-6b357b4a139c.png\" width=\"400\"/>\n</div></td>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/215749979-1ea973c4-3e76-4204-9fa0-b0adf3e942b6.png\" width=\"400\"/>\n</div></td>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/215757871-d38e1b78-fee0-4351-be61-5b1e782d1e6e.png\" width=\"400\"/>\n</div></td>\n  </tr>\n</thead>\n</table>\n\n## Results and models\n\nWe have converted several `unet` weights and offer related configs. See more details of different `unet` in [Tutorial](#tutorials).\n\n|                                           Model                                           | Dataset  |    Task    |                                           Download                                            |\n| :---------------------------------------------------------------------------------------: | :------: | :--------: | :-------------------------------------------------------------------------------------------: |\n| [512x512_diffusion_uncond_finetune_008100](./disco-diffusion_adm-u-finetuned_imagenet-512x512.py) | ImageNet | Text2Image | [model](https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u_finetuned_imagenet-512x512-ab471d70.pth) |\n|     [256x256_diffusion_uncond](./disco-diffusion_adm-u-finetuned_imagenet-256x256.py)     | ImageNet | Text2Image |                                          [model](<>)                                          |\n|          [portrait_generator_v001](./disco-diffusion_portrait-generator-v001.py)          | unknown  | Text2Image | [model](https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u-cvt-rgb_portrait-v001-f4a3f3bc.pth) |\n\n<!-- SKIP THIS TABLE -->\n\n|            Model             |   Download   |\n| :--------------------------: | :----------: |\n|  pixelartdiffusion_expanded  | Coming soon! |\n| pixel_art_diffusion_hard_256 | Coming soon! |\n| pixel_art_diffusion_soft_256 | Coming soon! |\n|     pixelartdiffusion4k      | Coming soon! |\n|    watercolordiffusion_2     | Coming soon! |\n|     watercolordiffusion      | Coming soon! |\n|      PulpSciFiDiffusion      | Coming soon! |\n\n## To-do List\n\n- [x] Text2Image\n- [x] Image2Image\n- [x] Imagenet, portrait diffusion models\n- [ ] pixelart, watercolor, sci-fiction diffusion models\n- [ ] image prompt\n- [ ] video generation\n- [ ] faster sampler(plms, dpm-solver etc.)\n\nWe really welcome community users supporting these items and any other interesting stuffs!\n\n## Quick Start\n\nRunning the following codes, you can get a text-generated image.\n\n```python\nfrom mmengine import Config, MODELS\nfrom mmengine.registry import init_default_scope\nfrom torchvision.utils import save_image\n\ninit_default_scope('mmagic')\n\ndisco = MODELS.build(\n    Config.fromfile('configs/disco_diffusion/disco-baseline.py').model).cuda().eval()\ntext_prompts = {\n    0: [\n        \"A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.\",\n        \"yellow color scheme\"\n    ]\n}\nimage = disco.infer(\n    height=768,\n    width=1280,\n    text_prompts=text_prompts,\n    show_progress=True,\n    num_inference_steps=250,\n    eta=0.8)['samples']\nsave_image(image, \"image.png\")\n\n```\n\n## Tutorials\n\nConsidering that `disco-diffusion` contains many adjustable parameters, we provide users with a [jupyter-notebook](./tutorials.ipynb) / [colab](https://githubtocolab.com/open-mmlab/mmagic/blob/main/configs/disco_diffusion/tutorials.ipynb) tutorial that exhibits the meaning of different parameters, and gives results corresponding to adjustment.\nRefer to [Disco Sheet](https://docs.google.com/document/d/1l8s7uS2dGqjztYSjPpzlmXLjl5PM3IGkRWI3IiCuK7g/edit).\n\n## Credits\n\nSince our adaptation of disco-diffusion are heavily influenced by disco [colab](https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb#scrollTo=License), here we copy the credits below.\n\n<details>\n<summary>Credits</summary>\nOriginal notebook by Katherine Crowson (https://github.com/crowsonkb, https://twitter.com/RiversHaveWings). It uses either OpenAI's 256x256 unconditional ImageNet or Katherine Crowson's fine-tuned 512x512 diffusion model (https://github.com/openai/guided-diffusion), together with CLIP (https://github.com/openai/CLIP) to connect text prompts with images.\n\nModified by Daniel Russell (https://github.com/russelldc, https://twitter.com/danielrussruss) to include (hopefully) optimal params for quick generations in 15-100 timesteps rather than 1000, as well as more robust augmentations.\n\nFurther improvements from Dango233 and nshepperd helped improve the quality of diffusion in general, and especially so for shorter runs like this notebook aims to achieve.\n\nVark added code to load in multiple Clip models at once, which all prompts are evaluated against, which may greatly improve accuracy.\n\nThe latest zoom, pan, rotation, and keyframes features were taken from Chigozie Nri's VQGAN Zoom Notebook (https://github.com/chigozienri, https://twitter.com/chigozienri)\n\nAdvanced DangoCutn Cutout method is also from Dango223.\n\n\\--\n\nDisco:\n\nSomnai (https://twitter.com/Somnai_dreams) added Diffusion Animation techniques, QoL improvements and various implementations of tech and techniques, mostly listed in the changelog below.\n\n3D animation implementation added by Adam Letts (https://twitter.com/gandamu_ml) in collaboration with Somnai. Creation of disco.py and ongoing maintenance.\n\nTurbo feature by Chris Allen (https://twitter.com/zippy731)\n\nImprovements to ability to run on local systems, Windows support, and dependency installation by HostsServer (https://twitter.com/HostsServer)\n\nVR Mode by Tom Mason (https://twitter.com/nin_artificial)\n\nHorizontal and Vertical symmetry functionality by nshepperd. Symmetry transformation_steps by huemin (https://twitter.com/huemin_art). Symmetry integration into Disco Diffusion by Dmitrii Tochilkin (https://twitter.com/cut_pow).\n\nWarp and custom model support by Alex Spirin (https://twitter.com/devdef).\n\nPixel Art Diffusion, Watercolor Diffusion, and Pulp SciFi Diffusion models from KaliYuga (https://twitter.com/KaliYuga_ai). Follow KaliYuga's Twitter for the latest models and for notebooks with specialized settings.\n\nIntegration of OpenCLIP models and initiation of integration of KaliYuga models by Palmweaver / Chris Scalf (https://twitter.com/ChrisScalf11)\n\nIntegrated portrait_generator_v001 from Felipe3DArtist (https://twitter.com/Felipe3DArtist)\n\n</details>\n\n## Citation\n\n```bibtex\n@misc{github,\n  author={alembics},\n  title={disco-diffusion},\n  year={2022},\n  url={https://github.com/alembics/disco-diffusion},\n}\n```\n"
  },
  {
    "path": "configs/disco_diffusion/README_zh-CN.md",
    "content": "# Disco Diffusion (2022)\n\n> [Disco Diffusion](https://github.com/alembics/disco-diffusion)\n\n> **任务**: 图文生成, 图像到图像的翻译, 扩散模型\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\nDisco Diffusion(DD)是一个 Google Colab 笔记本，它利用一种叫做 CLIP-Guided Diffusion 的人工智能图像生成技术，让你从文本输入中创造出引人注目的精美图像。\n\n由 Somnai 创建，由 Gandamu 改进，并建立在 RiversHaveWings、nshepperd 和许多其他人的工作之上。更多细节见[Credits](#credits)。\n\n<!-- [IMAGE] -->\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/204526957-ac30547e-5a44-417a-aaa2-6b357b4a139c.png\" width=\"400\"/>\n</div></td>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/215749979-1ea973c4-3e76-4204-9fa0-b0adf3e942b6.png\" width=\"400\"/>\n</div></td>\n    <td>\n<div align=\"center\">\n\n<img src=\"https://user-images.githubusercontent.com/22982797/215757871-d38e1b78-fee0-4351-be61-5b1e782d1e6e.png\" width=\"400\"/>\n</div></td>\n  </tr>\n</thead>\n</table>\n\n## 模型与结果\n\n我们已经转换了几个 `unet` 的权重，并提供相关的配置文件。在[Tutorial](#tutorials)中可以看到更多关于不同 `unet` 的细节。\n\n|                                               模型                                               |  数据集  |                                               下载                                               |\n| :----------------------------------------------------------------------------------------------: | :------: | :----------------------------------------------------------------------------------------------: |\n| [512x512_diffusion_uncond_finetune_008100](./disco-diffusion_adm-u-finetuned_imagenet-512x512.py) | ImageNet | [model](https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u_finetuned_imagenet-512x512-ab471d70.pth) |\n|        [256x256_diffusion_uncond](./disco-diffusion_adm-u-finetuned_imagenet-256x256.py)         | ImageNet |                                           [model](<>)                                            |\n|             [portrait_generator_v001](./disco-diffusion_portrait-generator-v001.py)              | unknown  | [model](https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u-cvt-rgb_portrait-v001-f4a3f3bc.pth) |\n\n<!-- SKIP THIS TABLE -->\n\n|             模型             |     下载     |\n| :--------------------------: | :----------: |\n|  pixelartdiffusion_expanded  | Coming soon! |\n| pixel_art_diffusion_hard_256 | Coming soon! |\n| pixel_art_diffusion_soft_256 | Coming soon! |\n|     pixelartdiffusion4k      | Coming soon! |\n|    watercolordiffusion_2     | Coming soon! |\n|     watercolordiffusion      | Coming soon! |\n|      PulpSciFiDiffusion      | Coming soon! |\n\n## 待办列表\n\n- [x] 图文生成\n- [x] 图像到图像的翻译\n- [x] Imagenet, portrait 扩散模型\n- \\[\\] 像素艺术，水彩，科幻小说的扩散模型\n- \\[\\] 支持图像提示\n- \\[\\] 支持视频生成\n- \\[\\] 支持更快的采样器(plms，dpm-solver等)\n\n我们很欢迎社区用户支持这些项目和任何其他有趣的工作!\n\n## Quick Start\n\n运行以下代码，你可以使用文本生成图像。\n\n```python\nfrom mmengine import Config, MODELS\nfrom mmagic.utils import register_all_modules\nfrom torchvision.utils import save_image\n\nregister_all_modules()\n\ndisco = MODELS.build(\n    Config.fromfile('configs/disco_diffusion/disco-baseline.py').model).cuda().eval()\ntext_prompts = {\n    0: [\n        \"A beautiful painting of a singular lighthouse, shining its light across a tumultuous sea of blood by greg rutkowski and thomas kinkade, Trending on artstation.\",\n        \"yellow color scheme\"\n    ]\n}\nimage = disco.infer(\n    height=768,\n    width=1280,\n    text_prompts=text_prompts,\n    show_progress=True,\n    num_inference_steps=250,\n    eta=0.8)['samples']\nsave_image(image, \"image.png\")\n\n```\n\n## 教程\n\n考虑到`disco-diffusion`包含许多可调整的参数，我们为用户提供了一个[jupyter-notebook](./tutorials.ipynb)/[colab](https://githubtocolab.com/open-mmlab/mmagic/blob/main/configs/disco_diffusion/tutorials.ipynb)的教程，展示了不同参数的含义，并给出相应的调整结果。\n请参考[Disco Sheet](https://docs.google.com/document/d/1l8s7uS2dGqjztYSjPpzlmXLjl5PM3IGkRWI3IiCuK7g/edit)。\n\n## 鸣谢\n\nSince our adaptation of disco-diffusion are heavily influenced by disco [colab](https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb#scrollTo=License), here we copy the credits below.\n\n<details>\n<summary>鸣谢</summary>\nOriginal notebook by Katherine Crowson (https://github.com/crowsonkb, https://twitter.com/RiversHaveWings). It uses either OpenAI's 256x256 unconditional ImageNet or Katherine Crowson's fine-tuned 512x512 diffusion model (https://github.com/openai/guided-diffusion), together with CLIP (https://github.com/openai/CLIP) to connect text prompts with images.\n\nModified by Daniel Russell (https://github.com/russelldc, https://twitter.com/danielrussruss) to include (hopefully) optimal params for quick generations in 15-100 timesteps rather than 1000, as well as more robust augmentations.\n\nFurther improvements from Dango233 and nshepperd helped improve the quality of diffusion in general, and especially so for shorter runs like this notebook aims to achieve.\n\nVark added code to load in multiple Clip models at once, which all prompts are evaluated against, which may greatly improve accuracy.\n\nThe latest zoom, pan, rotation, and keyframes features were taken from Chigozie Nri's VQGAN Zoom Notebook (https://github.com/chigozienri, https://twitter.com/chigozienri)\n\nAdvanced DangoCutn Cutout method is also from Dango223.\n\n\\--\n\nDisco:\n\nSomnai (https://twitter.com/Somnai_dreams) added Diffusion Animation techniques, QoL improvements and various implementations of tech and techniques, mostly listed in the changelog below.\n\n3D animation implementation added by Adam Letts (https://twitter.com/gandamu_ml) in collaboration with Somnai. Creation of disco.py and ongoing maintenance.\n\nTurbo feature by Chris Allen (https://twitter.com/zippy731)\n\nImprovements to ability to run on local systems, Windows support, and dependency installation by HostsServer (https://twitter.com/HostsServer)\n\nVR Mode by Tom Mason (https://twitter.com/nin_artificial)\n\nHorizontal and Vertical symmetry functionality by nshepperd. Symmetry transformation_steps by huemin (https://twitter.com/huemin_art). Symmetry integration into Disco Diffusion by Dmitrii Tochilkin (https://twitter.com/cut_pow).\n\nWarp and custom model support by Alex Spirin (https://twitter.com/devdef).\n\nPixel Art Diffusion, Watercolor Diffusion, and Pulp SciFi Diffusion models from KaliYuga (https://twitter.com/KaliYuga_ai). Follow KaliYuga's Twitter for the latest models and for notebooks with specialized settings.\n\nIntegration of OpenCLIP models and initiation of integration of KaliYuga models by Palmweaver / Chris Scalf (https://twitter.com/ChrisScalf11)\n\nIntegrated portrait_generator_v001 from Felipe3DArtist (https://twitter.com/Felipe3DArtist)\n\n</details>\n\n## Citation\n\n```bibtex\n@misc{github,\n  author={alembics},\n  title={disco-diffusion},\n  year={2022},\n  url={https://github.com/alembics/disco-diffusion},\n}\n```\n"
  },
  {
    "path": "configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-256x256.py",
    "content": "unet = dict(\n    type='DenoisingUnet',\n    image_size=256,\n    in_channels=3,\n    base_channels=256,\n    resblocks_per_downsample=2,\n    attention_res=(32, 16, 8),\n    norm_cfg=dict(type='GN32', num_groups=32),\n    dropout=0.0,\n    num_classes=0,\n    use_fp16=True,\n    resblock_updown=True,\n    attention_cfg=dict(\n        type='MultiHeadAttentionBlock',\n        num_heads=4,\n        num_head_channels=64,\n        use_new_attention_order=False),\n    use_scale_shift_norm=True)\n\nunet_ckpt_path = 'https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u-cvt-rgb_finetuned_imagenet-256x256-f0f6e11b.pth'  # noqa\nsecondary_model_ckpt_path = 'https://download.openmmlab.com/mmediting/synthesizers/disco/secondary_model_imagenet_2.pth'  # noqa\npretrained_cfgs = dict(\n    unet=dict(ckpt_path=unet_ckpt_path, prefix='unet'),\n    secondary_model=dict(ckpt_path=secondary_model_ckpt_path, prefix=''))\n\nsecondary_model = dict(type='SecondaryDiffusionImageNet2')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_schedule='linear',\n    clip_sample=False)\n\nclip_models = [\n    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/32', jit=False),\n    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/16', jit=False),\n    dict(type='ClipWrapper', clip_type='clip', name='RN50', jit=False)\n]\n\nmodel = dict(\n    type='DiscoDiffusion',\n    unet=unet,\n    diffusion_scheduler=diffusion_scheduler,\n    secondary_model=secondary_model,\n    clip_models=clip_models,\n    use_fp16=True,\n    pretrained_cfgs=pretrained_cfgs)\n"
  },
  {
    "path": "configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py",
    "content": "unet = dict(\n    type='DenoisingUnet',\n    image_size=512,\n    in_channels=3,\n    base_channels=256,\n    resblocks_per_downsample=2,\n    attention_res=(32, 16, 8),\n    norm_cfg=dict(type='GN32', num_groups=32),\n    dropout=0.0,\n    num_classes=0,\n    use_fp16=True,\n    resblock_updown=True,\n    attention_cfg=dict(\n        type='MultiHeadAttentionBlock',\n        num_heads=4,\n        num_head_channels=64,\n        use_new_attention_order=False),\n    use_scale_shift_norm=True)\n\nunet_ckpt_path = 'https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u_finetuned_imagenet-512x512-ab471d70.pth'  # noqa\nsecondary_model_ckpt_path = 'https://download.openmmlab.com/mmediting/synthesizers/disco/secondary_model_imagenet_2.pth'  # noqa\npretrained_cfgs = dict(\n    unet=dict(ckpt_path=unet_ckpt_path, prefix='unet'),\n    secondary_model=dict(ckpt_path=secondary_model_ckpt_path, prefix=''))\n\nsecondary_model = dict(type='SecondaryDiffusionImageNet2')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_schedule='linear',\n    clip_sample=False)\n\nclip_models = [\n    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/32', jit=False),\n    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/16', jit=False),\n    dict(type='ClipWrapper', clip_type='clip', name='RN50', jit=False)\n]\n\nmodel = dict(\n    type='DiscoDiffusion',\n    unet=unet,\n    diffusion_scheduler=diffusion_scheduler,\n    secondary_model=secondary_model,\n    clip_models=clip_models,\n    use_fp16=True,\n    pretrained_cfgs=pretrained_cfgs)\n"
  },
  {
    "path": "configs/disco_diffusion/disco-diffusion_portrait-generator-v001.py",
    "content": "_base_ = ['./disco-diffusion_adm-u-finetuned_imagenet-512x512.py']\nunet_ckpt_path = 'https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u-cvt-rgb_portrait-v001-f4a3f3bc.pth'  # noqa\nmodel = dict(\n    unet=dict(base_channels=128),\n    secondary_model=None,\n    pretrained_cfgs=dict(\n        _delete_=True, unet=dict(ckpt_path=unet_ckpt_path, prefix='unet')))\n"
  },
  {
    "path": "configs/disco_diffusion/metafile.yml",
    "content": "Collections:\n- Name: Disco Diffusion\n  Paper:\n    Title: Disco Diffusion\n    URL: https://github.com/alembics/disco-diffusion\n  README: configs/disco_diffusion/README.md\n  Task:\n  - text2image\n  - image2image\n  Year: 2022\nModels:\n- Config: configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py\n  In Collection: Disco Diffusion\n  Name: disco-diffusion_adm-u-finetuned_imagenet-512x512\n  Results:\n  - Dataset: ImageNet\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u_finetuned_imagenet-512x512-ab471d70.pth\n- Config: configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-256x256.py\n  In Collection: Disco Diffusion\n  Name: disco-diffusion_adm-u-finetuned_imagenet-256x256\n  Results:\n  - Dataset: ImageNet\n    Metrics: {}\n    Task: Text2Image\n  Weights: <>\n- Config: configs/disco_diffusion/disco-diffusion_portrait-generator-v001.py\n  In Collection: Disco Diffusion\n  Name: disco-diffusion_portrait-generator-v001\n  Results:\n  - Dataset: unknown\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://download.openmmlab.com/mmediting/synthesizers/disco/adm-u-cvt-rgb_portrait-v001-f4a3f3bc.pth\n"
  },
  {
    "path": "configs/disco_diffusion/tutorials.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Disco Tutorials\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Disco Diffusion is a colab work cooperated by many talented people. From the algorithm aspect, this work is based on guided-diffusion and clip-guided diffusion. \\n\",\n    \"\\n\",\n    \"The generation process of disco-diffusion consists of following steps,\\n\",\n    \"1. Disco-diffusion takes as inputs user-provided text prompts and image prompts.\\n\",\n    \"2. A pretrained clip model calculates the embeddings of the text and image prompts.\\n\",\n    \"3. The Unet will predict the original sample.\\n\",\n    \"3. A list of image cutouts will be generated from original sample by a cutter.\\n\",\n    \"4. The generation process is optimized by calculating the similarity between the embeddings of the image cutouts, text and image prompts, and other losses.\\n\",\n    \"5. Finally, with the carefully-designed loss functions, the model enables classifier-guidance samping to generate desired images according to the text and image prompts.\\n\",\n    \"\\n\",\n    \"So corresponding to above processes, we will introduce what to set for generating and show your results by adjusting arguments/ configs. \\n\",\n    \"\\n\",\n    \"The contents of this tutorials are as follows:\\n\",\n    \"\\n\",\n    \"[1.Runtime Settings](#1-Runtime-Settings)\\n\",\n    \"\\n\",\n    \"[2.Unet Settings](#2-Unet-Settings)\\n\",\n    \"\\n\",\n    \"[3.CLIP Models Settings](#3-CLIP-Models-Settings)\\n\",\n    \"\\n\",\n    \"[4.Diffusion Scheduler Settings](#4-Diffusion-Scheduler-Settings)\\n\",\n    \"\\n\",\n    \"[5.Loss Settings](#5-Loss-Settings)\\n\",\n    \"\\n\",\n    \"[6.Cutter Settings](#6-Cutter-Settings)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Install MMagic\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Check PyTorch version and CLIP version\\n\",\n    \"!pip list | grep torch\\n\",\n    \"!pip list | grep clip\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Install mmcv dependency via openmim\\n\",\n    \"!pip install openmim\\n\",\n    \"!mim install 'mmcv>=2.0.0'\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Install mmagic from source\\n\",\n    \"%cd /content/\\n\",\n    \"!rm -rf mmagic\\n\",\n    \"!git clone https://github.com/open-mmlab/mmagic.git \\n\",\n    \"%cd mmagic\\n\",\n    \"!pip install -r requirements.txt\\n\",\n    \"!pip install -e .\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 1. Runtime Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import torch\\n\",\n    \"from mmengine import Config, MODELS\\n\",\n    \"from mmengine.registry import init_default_scope\\n\",\n    \"from mmagic.registry import MODULES\\n\",\n    \"from mmcv import tensor2imgs\\n\",\n    \"from matplotlib import pyplot as plt\\n\",\n    \"\\n\",\n    \"from torchvision.transforms import ToPILImage, Normalize, Compose\\n\",\n    \"from IPython.display import Image\\n\",\n    \"\\n\",\n    \"init_default_scope('mmagic')\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def show_tensor(image_tensor, index=0):\\n\",\n    \"    normalized_image = ((image_tensor + 1.) / 2.).clamp(0, 1)\\n\",\n    \"    out = tensor2imgs(normalized_image * 255, to_rgb=False)\\n\",\n    \"    plt.imshow(out[index])\\n\",\n    \"    plt.show()\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"config = 'configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\\n\",\n    \"text_prompts = {\\n\",\n    \"    0: [\\\"clouds surround the mountains and Chinese palaces, sunshine, lake, overlook, overlook, unreal engine, light effect, Dream, Greg Rutkowski, James Gurney, artstation\\\"]\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"seed = 2022\\n\",\n    \"num_inference_steps = 250\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Image Resolution\\n\",\n    \"Despite the limit of your device limitation, you can set height and width of image as you like.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# image resolution\\n\",\n    \"image = disco.infer(width=768, height=1280, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### image_prompts\\n\",\n    \" Work in progress.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# # image prompts\\n\",\n    \"# image_prompts = ['path_of_image']\\n\",\n    \"# image = disco.infer(width=768, height=1280, image_prompts=image_prompts, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"# show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### clip_guidance_scale\\n\",\n    \"clip_guidance_scale is one of the most important parameters you will  use. It tells DD how strongly you want CLIP to move toward your prompt  each timestep.  Higher is generally better, but if CGS is too strong it  will overshoot the goal and distort the image. So a happy medium is  needed, and it takes experience to learn how to adjust CGS.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# clip guidance scale\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, clip_guidance_scale=8000, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, clip_guidance_scale=4000, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 2. Unet Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Disco-Diffusion provides different unet, and we offer configs for the different unets and convert the weights. You only need to select these configs to use the different unets freely.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 256x256_diffusion_uncond\\n\",\n    \"text_prompts = {\\n\",\n    \"    0: [\\\"clouds surround the mountains and Chinese palaces,sunshine,lake,overlook,overlook,unreal engine,light effect,Dream，Greg Rutkowski,James Gurney,artstation\\\"]\\n\",\n    \"}\\n\",\n    \"config = 'configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-256x256.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\\n\",\n    \"image = disco.infer(width=512, height=448, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# 512x512_diffusion_uncond_finetune_008100\\n\",\n    \"config = 'configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# portrait_generator_v001\\n\",\n    \"text_prompts = {\\n\",\n    \"    0: [\\\"a portrait of supergirl, by artgerm, rosstran, trending on artstation.\\\"]\\n\",\n    \"}\\n\",\n    \"config = 'disco-diffusion_portrait-generator-v001.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\\n\",\n    \"image = disco.infer(width=512, height=512, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, tv_scale=5000, range_scale = 5000, sat_scale = 15250, clip_guidance_scale=20000, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### The rest unets will come soon!\\n\",\n    \"- pixelartdiffusion_expanded\\n\",\n    \"- pixel_art_diffusion_hard_256\\n\",\n    \"- pixelartdiffusion4k\\n\",\n    \"- watercolordiffusion_2\\n\",\n    \"- watercolordiffusion\\n\",\n    \"- PulpSciFiDiffusion\\n\",\n    \"- secondary\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 3.CLIP Models Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Disco-Diffusion uses different clip models to guide the image generation, and the images generated by different clip models have different characteristics. In practice, we combine multiple clip models to generate images.\\n\",\n    \" In order to study the effect of different clip models, in the following example, we only use one clip model at a time, with other settings keeping the same,  you can experience the characteristics of different clip models by observing the results.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from mmagic.models.editors.disco_diffusion.guider import ImageTextGuider\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"config = 'configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\\n\",\n    \"text_prompts = {0: [\\\"A beautiful painting of a map of the city of Atlantis\\\"]}\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"\\n\",\n    \"### ViTB32\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/32', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB16\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"\\n\",\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='ViT-B/16', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTL14\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='ViT-L/14', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTL14_336px\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper', clip_type='clip', name='ViT-L/14@336px',\\n\",\n    \"        jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='RN50', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50x4\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='RN50x4', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50x16\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='RN50x16', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50x64\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='RN50x64', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN101\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(type='ClipWrapper', clip_type='clip', name='RN101', jit=False),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB32_laion2b_e16\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-32',\\n\",\n    \"        pretrained='laion2b_e16',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB32_laion400m_e31\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-32',\\n\",\n    \"        pretrained='laion400m_e31',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB32_laion400m_32\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-32',\\n\",\n    \"        pretrained='laion400m_e32',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB32quickgelu_laion400m_e31\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-32-quickgelu',\\n\",\n    \"        pretrained='laion400m_e31',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB32quickgelu_laion400m_e32\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-32-quickgelu',\\n\",\n    \"        pretrained='laion400m_e32',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB16_laion400m_e31\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-16',\\n\",\n    \"        pretrained='laion400m_e31',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ViTB16_laion400m_e32\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='ViT-B-16',\\n\",\n    \"        pretrained='laion400m_e32',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50_yffcc15m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN50',\\n\",\n    \"        pretrained='yfcc15m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50_cc12m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN50',\\n\",\n    \"        pretrained='cc12m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50_quickgelu_yfcc15m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN50-quickgelu',\\n\",\n    \"        pretrained='yfcc15m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN50_quickgelu_cc12m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN50-quickgelu',\\n\",\n    \"        pretrained='cc12m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN101_yfcc15m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN101',\\n\",\n    \"        pretrained='yfcc15m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### RN101_quickgelu_yfcc15m\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"clip_models = []\\n\",\n    \"clip_models_cfg = [\\n\",\n    \"    dict(\\n\",\n    \"        type='ClipWrapper',\\n\",\n    \"        clip_type='open_clip',\\n\",\n    \"        model_name='RN101-quickgelu',\\n\",\n    \"        pretrained='yfcc15m',\\n\",\n    \"        device='cuda'),\\n\",\n    \"]\\n\",\n    \"for clip_cfg in clip_models_cfg:\\n\",\n    \"    clip_models.append(MODULES.build(clip_cfg))\\n\",\n    \"disco.guider = ImageTextGuider(clip_models).cuda()\\n\",\n    \"\\n\",\n    \"image = disco.infer(\\n\",\n    \"    width=1280,\\n\",\n    \"    height=768,\\n\",\n    \"    text_prompts=text_prompts,\\n\",\n    \"    show_progress=True,\\n\",\n    \"    num_inference_steps=num_inference_steps,\\n\",\n    \"    eta=0.8,\\n\",\n    \"    seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 4.Diffusion Scheduler Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Typically, a diffusion model generates images by a reverse scheduler. Many researchers are working on designing different reverse schedulers to improve diffusion models. Now, we only support DDIM scheduler. More kinds of reverse schedulers are coming soon.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### skip_steps\\n\",\n    \"First, When you set the value of `init_image`, you can adjust `skip_steps` for creative reasons. With low skip_steps you can get a result “inspired by” the init_image which will retain the colors and rough layout and shapes but look quite different. With high skip_steps you can preserve most of the init_image contents and only fine-tune the texture.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"!wget https://user-images.githubusercontent.com/22982797/205579254-30c3b446-63bb-4172-bbfe-8d1d05e151cf.png -O init.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"init_path = 'init.png'\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, init_image=init_path, skip_steps=50, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, init_image=init_path, skip_steps=200, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Note that, you can still use `skip_steps` to reduce rendering time even you don't set the value of `init_image`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### steps\\n\",\n    \"Increasing steps will provide more opportunities for the AI to adjust the image, and each adjustment will be smaller, and thus will yield a  more precise, detailed image. Using a larger `steps` will generally increase image quality but also increasing the render time. However, some intricate images can take 1000, 2000, or more steps. It is really up to the user.  \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"steps = 100\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"steps = 1000\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=steps, eta=0.8, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 5.Loss Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We define `loss_cfg` in config like this. The loss function defines the distance between the generated image and the expected target, so you can adjust loss settings for you purpose.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"loss_cfg = dict(tv_scale=0, range_scale=150, sat_scale=0, init_scale=1000)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"config = 'configs/disco_diffusion/disco-diffusion_adm-u-finetuned_imagenet-512x512.py'\\n\",\n    \"disco = MODELS.build(Config.fromfile(config).model).cuda().eval()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### range_scale\\n\",\n    \"Optional, set to zero to turn off. It is used to adjust color contrast. Lower range_scale will increase contrast. Very low numbers  create a reduced color palette, resulting in more vibrant or poster-like  images. Higher range_scale will reduce contrast, for more muted images.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# range_scale\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, range_scale=50, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, range_scale=200, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### tv_scale\\n\",\n    \"Total variance denoising. Optional, set to zero to turn off. Controls  ‘smoothness’ of final output. If used, tv_scale will try to smooth out  your final image to reduce overall noise. If your image is too 'crunchy', increase tv_scale. TV denoising is good at preserving edges while smoothing away noise in flat regions.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# tv_scale\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, tv_scale=0.1, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, tv_scale=0.9, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### sat_scale\\n\",\n    \"Saturation scale. Optional, set to zero to turn off.   If used, sat_scale will help mitigate oversaturation. If your image is  too saturated, increase sat_scale to reduce saturation.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# sat_scale\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, sat_scale=0.1, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, sat_scale=0.9, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### init_scale\\n\",\n    \" This controls how strongly CLIP will try to match the  init_image provided.  This is balanced against  the clip_guidance_scale (CGS) above. An extreamly large value of `init_scale` won't change the results dramatcally, while an exteamly large value of CGS will destroy the `init_image`.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# init_scale\\n\",\n    \"init_path = 'init.png'\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, init_image=init_path, skip_steps=125, init_scale=1000, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, init_image=init_path, skip_steps=125, init_scale=100, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 6.Cutter Settings\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Cutter Settings\\n\",\n    \"This section determines the schedule of CLIP cuts, or snapshots that  CLIP uses to evaluate your image while processing.  In DD, there are two  types of cuts: overview cuts, which take a snapshot of the entire image and evaluate that against the prompt, and inner cuts,  which are smaller cropped images from the interior of the image,  helpful in tuning fine details.  The size of the inner cuts can be  adjusted using the cut_ic_pow parameter.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### cut_overview\\n\",\n    \"The schedule of overview cuts\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# cut_overview\\n\",\n    \"cut_overview = [12] * 100 + [4] * 900\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_overview=cut_overview, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"cut_overview = [12] * 900 + [4] * 100\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_overview=cut_overview, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### cut_innercut\\n\",\n    \"The schedule of inner cuts\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# cut_innercut\\n\",\n    \"cut_innercut = [4] * 100 + [12] * 900\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_innercut=cut_innercut, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"cut_innercut = [4] * 900 + [12] * 100\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_innercut=cut_innercut, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### cut_ic_pow\\n\",\n    \"This sets the size of the border used for inner cuts.   High cut_ic_pow values have larger borders, and therefore the cuts  themselves will be smaller and provide finer details.  If you have too  many or too-small inner cuts, you may lose overall image coherency  and/or it may cause an undesirable ‘mosaic’ effect.    Low cut_ic_pow values will allow the inner cuts to be larger, helping  image coherency while still helping with some details.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# cut_ic_pow\\n\",\n    \"cut_ic_pow = [1] * 200 + [0] * 800\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_ic_pow=cut_ic_pow, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"cut_ic_pow = [1] * 800 + [0] * 200\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_ic_pow=cut_ic_pow, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### cut_icgray_p\\n\",\n    \"In addition to the overall cut schedule, a portion of the cuts can be  set to be grayscale instead of color.   This may help with improved  definition of shapes and edges, especially in the early diffusion steps  where the image structure is being defined.  cut_icgray_p affects  overview and inner cuts\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# cut_icgray_p\\n\",\n    \"cut_icgray_p=[0.2] * 200 + [0] * 800\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_icgray_p=cut_icgray_p, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"cut_icgray_p=[0.2] * 800 + [0] * 200\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cut_icgray_p=cut_icgray_p, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### cutn_batches\\n\",\n    \"Each iteration, the AI cuts the image into smaller  pieces known as cuts, and compares each cut to the prompt to decide how  to guide the next diffusion step.  More cuts can generally lead to  better images, since DD has more chances to fine-tune the image  precision at each timesteps.  \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"\\n\",\n    \"# cutn_batches\\n\",\n    \"cutn_batches = 2\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cutn_batches=cutn_batches, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\\n\",\n    \"\\n\",\n    \"cutn_batches = 8\\n\",\n    \"image = disco.infer(width=1280, height=768, text_prompts=text_prompts, show_progress=True, num_inference_steps=num_inference_steps, eta=0.8, cutn_batches=cutn_batches, seed=seed)['samples']\\n\",\n    \"show_tensor(image)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.16 ('mmedit': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.16\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"35fd9fbe4d1b297d4be2b8092ffedf61ac9a34aef1ae0231052d90ec0a3e8f9f\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "configs/draggan/README.md",
    "content": "# DragGAN (SIGGRAPH'2023)\n\n> [Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold](https://arxiv.org/pdf/2305.10973.pdf)\n\n> **Task**: DragGAN\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nSynthesizing visual content that meets users’ needs often requires flexible\nand precise controllability of the pose, shape, expression, and layout of the\ngenerated objects. Existing approaches gain controllability of generative\nadversarial networks (GANs) via manually annotated training data or a\nprior 3D model, which often lack flexibility, precision, and generality. In\nthis work, we study a powerful yet much less explored way of controlling\nGANs, that is, to \"drag\" any points of the image to precisely reach target\npoints in a user-interactive manner, as shown in Fig.1. To achieve this, we\npropose DragGAN, which consists of two main components: 1) a feature-based motion supervision that drives the handle point to move towards\nthe target position, and 2) a new point tracking approach that leverages\nthe discriminative generator features to keep localizing the position of the\nhandle points. Through DragGAN, anyone can deform an image with precise\ncontrol over where pixels go, thus manipulating the pose, shape, expression,and layout of diverse categories such as animals, cars, humans, landscapes,\netc. As these manipulations are performed on the learned generative image\nmanifold of a GAN, they tend to produce realistic outputs even for challenging scenarios such as hallucinating occluded content and deforming\nshapes that consistently follow the object’s rigidity. Both qualitative and\nquantitative comparisons demonstrate the advantage of DragGAN over prior\napproaches in the tasks of image manipulation and point tracking. We also\nshowcase the manipulation of real images through GAN inversion.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/7c397bd0-fa07-48fe-8a7c-a4022907404b\"/>\n</div>\n\n## Results and Models\n\n<table><tr>\n<b> Gradio Demo of DragGAN StyleGAN2-elephants-512 by MMagic </b>\n<td><img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/08e9a687-0a6e-4d3f-94ec-22c46bd61819\" border=0></td>\n<td><img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/6fab1ccd-e190-4cd0-a8d5-0e843f65930b\" border=0></td>\n</tr></table>\n\n|                        Model                         |      Dataset       |             Comment             | FID50k | Precision50k | Recall50k |                                 Download                                 |\n| :--------------------------------------------------: | :----------------: | :-----------------------------: | :----: | :----------: | :-------: | :----------------------------------------------------------------------: |\n|   [stylegan2_lion_512x512](./stylegan2_512x512.py)   |   Internet Lions   |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-Lions-internet) |\n| [stylegan2_elphants_512x512](./stylegan2_512x512.py) | Internet Elephants |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-elephants-internet) |\n|   [stylegan2_cats_512x512](./stylegan2_512x512.py)   |      Cat AFHQ      |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-cat-AFHQ) |\n|   [stylegan2_face_512x512](./stylegan2_512x512.py)   |        FFHQ        |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-FFHQ) |\n|  [stylegan2_horse_256x256](./stylegan2_256x256.py)   |     LSUN-Horse     |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-lsun-horses) |\n| [stylegan2_dogs_1024x1024](./stylegan2_1024x1024.py) |   Internet Dogs    |     self-distilled StyleGAN     |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-dogs-internet) |\n|   [stylegan2_car_512x512](./stylegan2_512x512.py)    |        Car         | transfer from official training |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-car-official) |\n|   [stylegan2_cat_256x256](./stylegan2_256x256.py)    |        Cat         | transfer from official training |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-cat-official) |\n\n## Demo\n\nTo run DragGAN demo, please follow these two steps:\n\nFirst, put your checkpoint path in `./checkpoints`, *e.g.* `./checkpoints/stylegan2_lions_512_pytorch_mmagic.pth`. To be specific,\n\n```shell\nmkdir checkpoints\ncd checkpoints\nwget -O stylegan2_lions_512_pytorch_mmagic.pth https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-Lions-internet\n```\n\nThen, try on the script:\n\n```shell\npython demo/gradio_draggan.py\n```\n\n## Citation\n\n```latex\n@inproceedings{pan2023drag,\n  title={Drag your gan: Interactive point-based manipulation on the generative image manifold},\n  author={Pan, Xingang and Tewari, Ayush and Leimk{\\\"u}hler, Thomas and Liu, Lingjie and Meka, Abhimitra and Theobalt, Christian},\n  booktitle={ACM SIGGRAPH 2023 Conference Proceedings},\n  pages={1--11},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/draggan/README_zh-CN.md",
    "content": "# DragGAN (SIGGRAPH'2023)\n\n> [Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold](https://arxiv.org/pdf/2305.10973.pdf)\n\n> **Task**: DragGAN\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n要合成满足用户需求的视觉内容，通常需要灵活、精确地控制人物的姿势、形状、表情和布局。\n和精确地控制生成对象的姿势、形状、表情和布局。\n生成对象。现有的方法是通过人工标注训练数据来获得生成对抗网络（GANs）的可控性。\n生成式对抗网络 (GAN) 的可控性是通过人工标注的训练数据或预先的 3D 模型来实现的。\n生成式对抗网络（GAN）的可控性是通过人工标注的训练数据或事先建立的三维模型来实现的，而这些方法往往缺乏灵活性、精确性和通用性。在中，我们研究了一种功能强大但探索较少的生成式对抗网络（GAN）控制方法。\n即 \"拖动 \"图像中的任意点，以用户互动的方式精确到达目标点。\n如图 1 所示。为此，我们\nDragGAN 由两个主要部分组成： 1) 基于特征的运动监督，驱动手柄点向目标位置移动；以及目标位置，以及 2) 一种新的点跟踪方法，利用的新点跟踪方法。\n手柄点的位置。通过 DragGAN，任何人都可以对图像进行变形，并精确控制像素的移动位置。\n通过 DragGAN，任何人都可以精确控制像素的位置，从而改变图像的姿态、形状、表情和布局，如动物、汽车、人类、风景等、\n等等。由于这些操作是在 GAN 的学习生成图像流形上进行的流形上进行，因此即使是在具有挑战性的情况下，它们也能产生逼真的输出，例如幻觉遮挡内容和变形形状始终遵循物体的刚性。定性和定量比较都表明，在图像处理和点跟踪任务中，DragGAN\n在图像处理和点跟踪任务中的优势。我们还展示了通过 GAN 反演对真实图像的操作。\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/7c397bd0-fa07-48fe-8a7c-a4022907404b\"/>\n</div>\n\n## 结果和模型\n\n<table><tr>\n<b> MMagic下实现的DragGAN（StyleGAN2-elephants-512） Gradio示例 </b>\n<td><img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/08e9a687-0a6e-4d3f-94ec-22c46bd61819\" border=0></td>\n<td><img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/6fab1ccd-e190-4cd0-a8d5-0e843f65930b\" border=0></td>\n</tr></table>\n\n|                         模型                         |       数据集       |      评论      | FID50k | Precision50k | Recall50k |                                       权重下载链接                                        |\n| :--------------------------------------------------: | :----------------: | :------------: | :----: | :----------: | :-------: | :---------------------------------------------------------------------------------------: |\n|   [stylegan2_lion_512x512](./stylegan2_512x512.py)   |   Internet Lions   | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-Lions-internet) |\n| [stylegan2_elphants_512x512](./stylegan2_512x512.py) | Internet Elephants | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-elephants-internet) |\n|   [stylegan2_cats_512x512](./stylegan2_512x512.py)   |      Cat AFHQ      | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-cat-AFHQ) |\n|   [stylegan2_face_512x512](./stylegan2_512x512.py)   |        FFHQ        | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-FFHQ) |\n|  [stylegan2_horse_256x256](./stylegan2_256x256.py)   |     LSUN-Horse     | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-lsun-horses) |\n| [stylegan2_dogs_1024x1024](./stylegan2_1024x1024.py) |   Internet Dogs    | 自蒸馏StyleGAN |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-dogs-internet) |\n|   [stylegan2_car_512x512](./stylegan2_512x512.py)    |        Car         |    官方训练    |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-car-official) |\n|   [stylegan2_cat_256x256](./stylegan2_256x256.py)    |        Cat         |    官方训练    |  0.0   |     0.0      |    0.0    | [model](https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-cat-official) |\n\n## 演示\n\n为了使用DragGAN演示, 请执行以下两步:\n\n首先，把模型文件放在 `./checkpoints`下, 比如 `./checkpoints/stylegan2_lions_512_pytorch_mmagic.pth`. 具体来说,\n\n```shell\nmkdir checkpoints\ncd checkpoints\nwget -O stylegan2_lions_512_pytorch_mmagic.pth https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-Lions-internet\n```\n\n然后，执行下面的脚本:\n\n```shell\npython demo/gradio_draggan.py\n```\n\n## 引用\n\n```latex\n@inproceedings{pan2023drag,\n  title={Drag your gan: Interactive point-based manipulation on the generative image manifold},\n  author={Pan, Xingang and Tewari, Ayush and Leimk{\\\"u}hler, Thomas and Liu, Lingjie and Meka, Abhimitra and Theobalt, Christian},\n  booktitle={ACM SIGGRAPH 2023 Conference Proceedings},\n  pages={1--11},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/draggan/metafile.yml",
    "content": "Collections:\n- Name: DragGAN\n  Paper:\n    Title: 'Drag Your GAN: Interactive Point-based Manipulation on the Generative\n      Image Manifold'\n    URL: https://arxiv.org/pdf/2305.10973.pdf\n  README: configs/draggan/README.md\n  Task:\n  - draggan\n  Year: 2023\nModels:\n- Config: configs/draggan/stylegan2_512x512.py\n  In Collection: DragGAN\n  Name: stylegan2_512x512\n  Results:\n  - Dataset: InternetLions\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  - Dataset: InternetElephants\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  - Dataset: CatAFHQ\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  - Dataset: Car\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  Weights: https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-car-official\n- Config: configs/draggan/stylegan2_256x256.py\n  In Collection: DragGAN\n  Name: stylegan2_256x256\n  Results:\n  - Dataset: LSUN-Horse\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  - Dataset: Cat\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  Weights: https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-cat-official\n- Config: configs/draggan/stylegan2_1024x1024.py\n  In Collection: DragGAN\n  Name: stylegan2_1024x1024\n  Results:\n  - Dataset: InternetDogs\n    Metrics:\n      FID50k: 0.0\n      Precision50k: 0.0\n      Recall50k: 0.0\n    Task: DragGAN\n  Weights: https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-dogs-internet\n"
  },
  {
    "path": "configs/draggan/stylegan2_1024x1024.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(\n        out_size=1024,\n        update_mean_latent_with_ema=True,\n        bgr2rgb=False,\n        fixed_noise=True),\n    discriminator=dict(in_size=1024),  # useless\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 1\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/draggan/stylegan2_256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(\n        out_size=256,\n        update_mean_latent_with_ema=True,\n        bgr2rgb=False,\n        fixed_noise=True),\n    discriminator=dict(in_size=256),  # useless\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 1\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/draggan/stylegan2_512x512.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(\n        out_size=512,\n        update_mean_latent_with_ema=True,\n        bgr2rgb=False,\n        fixed_noise=True),\n    discriminator=dict(in_size=512),  # useless\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 1\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/dreambooth/README.md",
    "content": "# DreamBooth (2022)\n\n> [DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation](https://arxiv.org/abs/2208.12242)\n\n> **Task**: Text2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nLarge text-to-image models achieved a remarkable leap in the evolution of AI, enabling high-quality and diverse synthesis of images from a given text prompt. However, these models lack the ability to mimic the appearance of subjects in a given reference set and synthesize novel renditions of them in different contexts. In this work, we present a new approach for \"personalization\" of text-to-image diffusion models. Given as input just a few images of a subject, we fine-tune a pretrained text-to-image model such that it learns to bind a unique identifier with that specific subject. Once the subject is embedded in the output domain of the model, the unique identifier can be used to synthesize novel photorealistic images of the subject contextualized in different scenes. By leveraging the semantic prior embedded in the model with a new autogenous class-specific prior preservation loss, our technique enables synthesizing the subject in diverse scenes, poses, views and lighting conditions that do not appear in the reference images. We apply our technique to several previously-unassailable tasks, including subject recontextualization, text-guided view synthesis, and artistic rendering, all while preserving the subject's key features. We also provide a new dataset and evaluation protocol for this new task of subject-driven generation.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/232406756-04dc1fbe-abde-4bb5-950c-ad3e125d5252.png\">\n</div>\n\n## Configs\n\n|                                     Model                                      | Dataset | Download |\n| :----------------------------------------------------------------------------: | :-----: | :------: |\n|                         [DreamBooth](./dreambooth.py)                          |    -    |    -     |\n|  [DreamBooth (Finetune Text Encoder)](./dreambooth-finetune_text_encoder.py)   |    -    |    -     |\n|      [DreamBooth with Prior-Preservation Loss](./dreambooth-prior_pre.py)      |    -    |    -     |\n|                    [DreamBooth LoRA](./dreambooth-lora.py)                     |    -    |    -     |\n| [DreamBooth LoRA with Prior-Preservation Loss](./dreambooth-lora-prior_pre.py) |    -    |    -     |\n\n## Quick Start\n\n1. Download [data](https://drive.google.com/drive/folders/1BO_dyz-p65qhBRRMRA4TbZ8qW4rB99JZ) and save to `data/dreambooth/`\n\nThe file structure will be like this:\n\n```text\ndata\n└── dreambooth\n    └──imgs\n       ├── alvan-nee-Id1DBHv4fbg-unsplash.jpeg\n       ├── alvan-nee-bQaAJCbNq3g-unsplash.jpeg\n       ├── alvan-nee-brFsZ7qszSY-unsplash.jpeg\n       └── alvan-nee-eoqnr8ikwFE-unsplash.jpeg\n```\n\n2. Start training with the following command:\n\n```bash\nbash tools/dist_train.sh configs/dreambooth/dreambooth.py 1\n# or\nbash tools/dist_train.sh configs/dreambooth/dreambooth-lora.py 1\n```\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/232682088-26424e69-f697-49bc-a706-d03245ff25b1.png\" width=\"400\"/>\n  <br/>\n  <b>'dreambooth'</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/28132635/232682057-fbc99047-e2d0-433e-bbc5-4f2d4ec18191.png\" width=\"400\"/>\n  <br/>\n  <b>'dreambooth-lora'</b>\n</div></td>\n    <td>\n</thead>\n</table>\n\n## Use ToMe to accelerate your training and inference\n\nWe support **[tomesd](https://github.com/dbolya/tomesd)** now! It is developed for stable-diffusion-based models referring to [ToMe](https://github.com/facebookresearch/ToMe), an efficient ViT speed-up tool based on token merging. To work on with **tomesd** in `mmagic`, you just need to add `tomesd_cfg` to `model` in [DreamBooth](./dreambooth.py). The only requirement is `torch >= 1.12.1` in order to properly support `torch.Tensor.scatter_reduce()` functionality. Please do check it before running the demo.\n\n```python\nmodel = dict(\n    type='DreamBooth',\n    ...\n    tomesd_cfg=dict(ratio=0.5),\n    ...\n    val_prompts=val_prompts)\n```\n\nFor more details, you can refer to [Stable Diffusion Acceleration](../stable_diffusion/README.md#use-tome-to-accelerate-your-stable-diffusion-model).\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_controlnet.py).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@article{ruiz2022dreambooth,\n  title={Dreambooth: Fine tuning text-to-image diffusion models for subject-driven generation},\n  author={Ruiz, Nataniel and Li, Yuanzhen and Jampani, Varun and Pritch, Yael and Rubinstein, Michael and Aberman, Kfir},\n  journal={arXiv preprint arXiv:2208.12242},\n  year={2022}\n}\n```\n"
  },
  {
    "path": "configs/dreambooth/dreambooth-finetune_text_encoder.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\n\nmodel = dict(\n    type='DreamBooth',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    finetune_text_encoder=True,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor', data_keys=None),\n    val_prompts=val_prompts)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper = dict(\n    modules='.*unet',\n    optimizer=dict(type='AdamW', lr=5e-6),\n    accumulative_counts=4)  # batch size = 4 * 1 = 4\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='Resize', scale=(512, 512)),\n    dict(type='PackInputs')\n]\ndataset = dict(\n    type='DreamBoothDataset',\n    data_root='./data/dreambooth',\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks = dict(logger=dict(interval=10))\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=50,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "configs/dreambooth/dreambooth-lora-prior_pre.py",
    "content": "_base_ = 'dreambooth-lora.py'\n\n# config for model\nmodel = dict(prior_loss_weight=1, class_prior_prompt='a dog')\n"
  },
  {
    "path": "configs/dreambooth/dreambooth-lora.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\n\nlora_config = dict(target_modules=['to_q', 'to_k', 'to_v'])\nmodel = dict(\n    type='DreamBooth',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor', data_keys=None),\n    prior_loss_weight=0,\n    val_prompts=val_prompts,\n    lora_config=lora_config)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper = dict(\n    # Only optimize LoRA mappings\n    modules='.*.lora_mapping',\n    # NOTE: lr should be larger than dreambooth finetuning\n    optimizer=dict(type='AdamW', lr=5e-4),\n    accumulative_counts=1)\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='Resize', scale=(512, 512)),\n    dict(type='PackInputs')\n]\ndataset = dict(\n    type='DreamBoothDataset',\n    data_root='./data/dreambooth',\n    # TODO: rename to instance\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks = dict(logger=dict(interval=10))\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=50,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "configs/dreambooth/dreambooth-prior_pre.py",
    "content": "_base_ = './dreambooth.py'\n\n# config for model\nmodel = dict(prior_loss_weight=1, class_prior_prompt='a dog')\n"
  },
  {
    "path": "configs/dreambooth/dreambooth.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\n\nmodel = dict(\n    type='DreamBooth',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor', data_keys=None),\n    val_prompts=val_prompts)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper = dict(\n    modules='.*unet',\n    optimizer=dict(type='AdamW', lr=5e-6),\n    accumulative_counts=4)  # batch size = 4 * 1 = 4\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='Resize', scale=(512, 512)),\n    dict(type='PackInputs')\n]\ndataset = dict(\n    type='DreamBoothDataset',\n    data_root='./data/dreambooth',\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks = dict(logger=dict(interval=10))\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=50,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "configs/dreambooth/metafile.yml",
    "content": "Collections:\n- Name: DreamBooth\n  Paper:\n    Title: 'DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven\n      Generation'\n    URL: https://arxiv.org/abs/2208.12242\n  README: configs/dreambooth/README.md\n  Task:\n  - text2image\n  Year: 2022\nModels:\n- Config: configs/dreambooth/dreambooth.py\n  In Collection: DreamBooth\n  Name: dreambooth\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/dreambooth/dreambooth-finetune_text_encoder.py\n  In Collection: DreamBooth\n  Name: dreambooth-finetune_text_encoder\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/dreambooth/dreambooth-prior_pre.py\n  In Collection: DreamBooth\n  Name: dreambooth-prior_pre\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/dreambooth/dreambooth-lora.py\n  In Collection: DreamBooth\n  Name: dreambooth-lora\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/dreambooth/dreambooth-lora-prior_pre.py\n  In Collection: DreamBooth\n  Name: dreambooth-lora-prior_pre\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n"
  },
  {
    "path": "configs/edsr/README.md",
    "content": "# EDSR (CVPR'2017)\n\n> [Enhanced Deep Residual Networks for Single Image Super-Resolution](https://arxiv.org/abs/1707.02921)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nRecent research on super-resolution has progressed with the development of deep convolutional neural networks (DCNN). In particular, residual learning techniques exhibit improved performance. In this paper, we develop an enhanced deep super-resolution network (EDSR) with performance exceeding those of current state-of-the-art SR methods. The significant performance improvement of our model is due to optimization by removing unnecessary modules in conventional residual networks. The performance is further improved by expanding the model size while we stabilize the training procedure. We also propose a new multi-scale deep super-resolution system (MDSR) and training method, which can reconstruct high-resolution images of different upscaling factors in a single model. The proposed methods show superior performance over the state-of-the-art methods on benchmark datasets and prove its excellence by winning the NTIRE2017 Super-Resolution Challenge.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144018090-ed629948-bf68-43ff-b2a9-6213e23f19a5.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                                Model                                 | Dataset |  PSNR   |  SSIM  | Training Resources |                                            Download                                            |\n| :------------------------------------------------------------------: | :-----: | :-----: | :----: | :----------------: | :--------------------------------------------------------------------------------------------: |\n| [edsr_x2c64b16_1x16_300k_div2k](./edsr_x2c64b16_1xb16-300k_div2k.py) |  Set5   | 35.7592 | 0.9372 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604-19fe95ea.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604_221933.log.json) |\n| [edsr_x2c64b16_1x16_300k_div2k](./edsr_x2c64b16_1xb16-300k_div2k.py) |  Set14  | 31.4290 | 0.8874 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604-19fe95ea.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604_221933.log.json) |\n| [edsr_x2c64b16_1x16_300k_div2k](./edsr_x2c64b16_1xb16-300k_div2k.py) |  DIV2K  | 34.5896 | 0.9352 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604-19fe95ea.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604_221933.log.json) |\n| [edsr_x3c64b16_1x16_300k_div2k](./edsr_x3c64b16_1xb16-300k_div2k.py) |  Set5   | 32.3301 | 0.8912 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608-36d896f4.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608_114850.log.json) |\n| [edsr_x3c64b16_1x16_300k_div2k](./edsr_x3c64b16_1xb16-300k_div2k.py) |  Set14  | 28.4125 | 0.8022 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608-36d896f4.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608_114850.log.json) |\n| [edsr_x3c64b16_1x16_300k_div2k](./edsr_x3c64b16_1xb16-300k_div2k.py) |  DIV2K  | 30.9154 | 0.8711 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608-36d896f4.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608_114850.log.json) |\n| [edsr_x4c64b16_1x16_300k_div2k](./edsr_x4c64b16_1xb16-300k_div2k.py) |  Set5   | 30.2223 | 0.8500 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608_115148.log.json) |\n| [edsr_x4c64b16_1x16_300k_div2k](./edsr_x4c64b16_1xb16-300k_div2k.py) |  Set14  | 26.7870 | 0.7366 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608_115148.log.json) |\n| [edsr_x4c64b16_1x16_300k_div2k](./edsr_x4c64b16_1xb16-300k_div2k.py) |  DIV2K  | 28.9675 | 0.8172 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608_115148.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth\n\n# single-gpu test\npython tools/test.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{lim2017enhanced,\n  title={Enhanced deep residual networks for single image super-resolution},\n  author={Lim, Bee and Son, Sanghyun and Kim, Heewon and Nah, Seungjun and Mu Lee, Kyoung},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition workshops},\n  pages={136--144},\n  year={2017}\n}\n```\n"
  },
  {
    "path": "configs/edsr/README_zh-CN.md",
    "content": "# EDSR (CVPR'2017)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">EDSR (CVPR'2017)</summary>\n\n```bibtex\n@inproceedings{lim2017enhanced,\n  title={Enhanced deep residual networks for single image super-resolution},\n  author={Lim, Bee and Son, Sanghyun and Kim, Heewon and Nah, Seungjun and Mu Lee, Kyoung},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition workshops},\n  pages={136--144},\n  year={2017}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                 算法                                 |       Set5       |      Set14       |      DIV2K       | GPU 信息 |                                     下载                                     |\n| :------------------------------------------------------------------: | :--------------: | :--------------: | :--------------: | :------: | :--------------------------------------------------------------------------: |\n| [edsr_x2c64b16_1x16_300k_div2k](./edsr_x2c64b16_1xb16-300k_div2k.py) | 35.7592 / 0.9372 | 31.4290 / 0.8874 | 34.5896 / 0.9352 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604-19fe95ea.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604_221933.log.json) |\n| [edsr_x3c64b16_1x16_300k_div2k](./edsr_x3c64b16_1xb16-300k_div2k.py) | 32.3301 / 0.8912 | 28.4125 / 0.8022 | 30.9154 / 0.8711 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608-36d896f4.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608_114850.log.json) |\n| [edsr_x4c64b16_1x16_300k_div2k](./edsr_x4c64b16_1xb16-300k_div2k.py) | 30.2223 / 0.8500 | 26.7870 / 0.7366 | 28.9675 / 0.8172 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608_115148.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth\n\n# 单个GPU上测试\npython tools/test.py configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x2_test_config.py'\n]\n\nexperiment_name = 'edsr_x2c64b16_1xb16-300k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='EDSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale,\n        res_scale=1,\n        rgb_mean=[0.4488, 0.4371, 0.4040],\n        rgb_std=[1.0, 1.0, 1.0]),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=96),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/edsr/edsr_x3c64b16_1xb16-300k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x3_test_config.py'\n]\n\nexperiment_name = 'edsr_x3c64b16_1xb16-300k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nload_from = None  # based on pre-trained x2 model\n\nscale = 3\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='EDSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale,\n        res_scale=1,\n        rgb_mean=[0.4488, 0.4371, 0.4040],\n        rgb_std=[1.0, 1.0, 1.0]),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=144),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X3_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'edsr_x4c64b16_1xb16-300k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nload_from = None  # based on pre-trained x2 model\n\nscale = 4\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='EDSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale,\n        res_scale=1,\n        rgb_mean=[0.4488, 0.4371, 0.4040],\n        rgb_std=[1.0, 1.0, 1.0]),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=196),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/edsr/metafile.yml",
    "content": "Collections:\n- Name: EDSR\n  Paper:\n    Title: Enhanced Deep Residual Networks for Single Image Super-Resolution\n    URL: https://arxiv.org/abs/1707.02921\n  README: configs/edsr/README.md\n  Task:\n  - image super-resolution\n  Year: 2017\nModels:\n- Config: configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py\n  In Collection: EDSR\n  Name: edsr_x2c64b16_1xb16-300k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 35.7592\n      SSIM: 0.9372\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 31.429\n      SSIM: 0.8874\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.5896\n      SSIM: 0.9352\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x2c64b16_1x16_300k_div2k_20200604-19fe95ea.pth\n- Config: configs/edsr/edsr_x3c64b16_1xb16-300k_div2k.py\n  In Collection: EDSR\n  Name: edsr_x3c64b16_1xb16-300k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.3301\n      SSIM: 0.8912\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 28.4125\n      SSIM: 0.8022\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 30.9154\n      SSIM: 0.8711\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x3c64b16_1x16_300k_div2k_20200608-36d896f4.pth\n- Config: configs/edsr/edsr_x4c64b16_1xb16-300k_div2k.py\n  In Collection: EDSR\n  Name: edsr_x4c64b16_1xb16-300k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.2223\n      SSIM: 0.85\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 26.787\n      SSIM: 0.7366\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 28.9675\n      SSIM: 0.8172\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edsr/edsr_x4c64b16_1x16_300k_div2k_20200608-3c2af8a3.pth\n"
  },
  {
    "path": "configs/edvr/README.md",
    "content": "# EDVR (CVPRW'2019)\n\n> [EDVR: Video Restoration with Enhanced Deformable Convolutional Networks](https://arxiv.org/abs/1905.02716?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+arxiv%252FQSXk+%2528ExcitingAds%2521+cs+updates+on+arXiv.org%2529)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nVideo restoration tasks, including super-resolution, deblurring, etc, are drawing increasing attention in the computer vision community. A challenging benchmark named REDS is released in the NTIRE19 Challenge. This new benchmark challenges existing methods from two aspects: (1) how to align multiple frames given large motions, and (2) how to effectively fuse different frames with diverse motion and blur. In this work, we propose a novel Video Restoration framework with Enhanced Deformable networks, termed EDVR, to address these challenges. First, to handle large motions, we devise a Pyramid, Cascading and Deformable (PCD) alignment module, in which frame alignment is done at the feature level using deformable convolutions in a coarse-to-fine manner. Second, we propose a Temporal and Spatial Attention (TSA) fusion module, in which attention is applied both temporally and spatially, so as to emphasize important features for subsequent restoration. Thanks to these modules, our EDVR wins the champions and outperforms the second place by a large margin in all four tracks in the NTIRE19 video restoration and enhancement challenges. EDVR also demonstrates superior performance to state-of-the-art published methods on video super-resolution and deblurring.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144018263-6a1f74a4-d011-47fd-906b-290dd77eed64.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels.\nThe metrics are `PSNR and SSIM` .\n\n|                                    Model                                     | Dataset |  PSNR   |  SSIM  |    Training Resources    |                                     Download                                     |\n| :--------------------------------------------------------------------------: | :-----: | :-----: | :----: | :----------------------: | :------------------------------------------------------------------------------: |\n|       [edvrm_wotsa_x4_8x4_600k_reds](./edvrm_wotsa_8xb4-600k_reds.py)        |  REDS   | 30.3430 | 0.8664 |            8             | [model](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522_141644.log.json) |\n|             [edvrm_x4_8x4_600k_reds](./edvrm_8xb4-600k_reds.py)              |  REDS   | 30.4194 | 0.8684 |            8             | [model](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20200622_102544.log.json) |\n| [edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4](./edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4.py) |  REDS   | 31.0010 | 0.8784 | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228-d895a769.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228_144658.log.json) |\n| [edvrl_c128b40_8x8_lr2e-4_600k_reds4](./edvrl_c128b40_8xb8-lr2e-4-600k_reds4.py) |  REDS   | 31.0467 | 0.8793 | 8 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_c128b40_8x8_lr2e-4_600k_reds4_20220104-4509865f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_c128b40_8x8_lr2e-4_600k_reds4_20220104_171823.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/edvr/edvrm_8xb4-600k_reds.py\n\n# single-gpu train\npython tools/train.py configs/edvr/edvrm_8xb4-600k_reds.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/edvr/edvrm_8xb4-600k_reds.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py python tools/test.py configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth\n\n# single-gpu test\npython tools/test.py configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{wang2019edvr,\n  author    = {Wang, Xintao and Chan, Kelvin C.K. and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title     = {EDVR: Video restoration with enhanced deformable convolutional networks},\n  booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW)},\n  month     = {June},\n  year      = {2019},\n}\n```\n"
  },
  {
    "path": "configs/edvr/README_zh-CN.md",
    "content": "# EDVR (CVPRW'2019)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">EDVR (CVPRW'2019)</summary>\n\n```bibtex\n@InProceedings{wang2019edvr,\n  author    = {Wang, Xintao and Chan, Kelvin C.K. and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title     = {EDVR: Video restoration with enhanced deformable convolutional networks},\n  booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition Workshops (CVPRW)},\n  month     = {June},\n  year      = {2019},\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                       算法                                       |      REDS4       |         GPU 信息         |                                       下载                                       |\n| :------------------------------------------------------------------------------: | :--------------: | :----------------------: | :------------------------------------------------------------------------------: |\n|         [edvrm_wotsa_x4_8x4_600k_reds](./edvrm_wotsa_8xb4-600k_reds.py)          | 30.3430 / 0.8664 |            8             | [模型](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522_141644.log.json) |\n|               [edvrm_x4_8x4_600k_reds](./edvrm_8xb4-600k_reds.py)                | 30.4194 / 0.8684 |            8             | [模型](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20200622_102544.log.json) |\n| [edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4](./edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4.py) | 31.0010 / 0.8784 | 8 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228-d895a769.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228_144658.log.json) |\n| [edvrl_c128b40_8x8_lr2e-4_600k_reds4](./edvrl_c128b40_8xb8-lr2e-4-600k_reds4.py) | 31.0467 / 0.8793 | 8 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_c128b40_8x8_lr2e-4_600k_reds4_20220104-4509865f.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_c128b40_8x8_lr2e-4_600k_reds4_20220104_171823.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/edvr/edvrm_8xb4-600k_reds.py\n\n# 单个GPU上训练\npython tools/train.py configs/edvr/edvrm_8xb4-600k_reds.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/edvr/edvrm_8xb4-600k_reds.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth\n\n# 单个GPU上测试\npython tools/test.py configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/edvr/edvrm_8xb4-600k_reds.py https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/edvr/edvrl_c128b40_8xb8-lr2e-4-600k_reds4.py",
    "content": "_base_ = '../_base_/models/base_edvr.py'\n\nexperiment_name = 'edvrl_c128b40_8xb8-lr2e-4-600k_reds4'\nsave_dir = './work_dirs'\nwork_dir = f'./work_dirs/{experiment_name}'\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228-d895a769.pth'  # noqa: E501\n\n# model settings\nmodel = dict(\n    type='EDVR',\n    generator=dict(\n        type='EDVRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=128,\n        num_frames=5,\n        deform_groups=8,\n        num_blocks_extraction=5,\n        num_blocks_reconstruction=40,\n        center_frame_idx=2,\n        with_tsa=True),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n    train_cfg=dict(tsa_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[50000, 100000, 150000, 150000, 150000],\n    restart_weights=[1, 0.5, 0.5, 0.5, 0.5],\n    eta_min=1e-7)\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/edvr/edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4.py",
    "content": "_base_ = '../_base_/models/base_edvr.py'\n\nexperiment_name = 'edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4'\nsave_dir = './work_dirs'\nwork_dir = f'./work_dirs/{experiment_name}'\n\n# model settings\nmodel = dict(\n    type='EDVR',\n    generator=dict(\n        type='EDVRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=128,\n        num_frames=5,\n        deform_groups=8,\n        num_blocks_extraction=5,\n        num_blocks_reconstruction=40,\n        center_frame_idx=2,\n        with_tsa=False),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n    train_cfg=dict(tsa_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_dataloader = dict(num_workers=6, batch_size=8)\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[150000, 150000, 150000, 150000],\n    restart_weights=[1, 0.5, 0.5, 0.5],\n    eta_min=1e-7)\n"
  },
  {
    "path": "configs/edvr/edvrm_8xb4-600k_reds.py",
    "content": "_base_ = '../_base_/models/base_edvr.py'\n\nexperiment_name = 'edvrm_8xb4-600k_reds'\nsave_dir = './work_dirs'\nwork_dir = f'./work_dirs/{experiment_name}'\n\n# model settings\npretrain_generator_url = (\n    'https://download.openmmlab.com/mmediting/restorers/edvr/'\n    'edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth')\nmodel = dict(\n    type='EDVR',\n    generator=dict(\n        type='EDVRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_frames=5,\n        deform_groups=8,\n        num_blocks_extraction=5,\n        num_blocks_reconstruction=10,\n        center_frame_idx=2,\n        with_tsa=True,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint=pretrain_generator_url,\n            prefix='generator.')),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n    train_cfg=dict(tsa_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_dataloader = dict(num_workers=6, batch_size=4)\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[50000, 100000, 150000, 150000, 150000],\n    restart_weights=[1, 1, 1, 1, 1],\n    eta_min=1e-7)\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/edvr/edvrm_wotsa_8xb4-600k_reds.py",
    "content": "_base_ = '../_base_/models/base_edvr.py'\n\nexperiment_name = 'edvrm_wotsa_8xb4-600k_reds'\nsave_dir = './work_dirs'\nwork_dir = f'./work_dirs/{experiment_name}'\n\n# model settings\nmodel = dict(\n    type='EDVR',\n    generator=dict(\n        type='EDVRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_frames=5,\n        deform_groups=8,\n        num_blocks_extraction=5,\n        num_blocks_reconstruction=10,\n        center_frame_idx=2,\n        with_tsa=False),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n    train_cfg=dict(tsa_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=4e-4, betas=(0.9, 0.999)),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[150000, 150000, 150000, 150000],\n    restart_weights=[1, 0.5, 0.5, 0.5],\n    eta_min=1e-7)\n"
  },
  {
    "path": "configs/edvr/metafile.yml",
    "content": "Collections:\n- Name: EDVR\n  Paper:\n    Title: 'EDVR: Video Restoration with Enhanced Deformable Convolutional Networks'\n    URL: https://arxiv.org/abs/1905.02716?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+arxiv%252FQSXk+%2528ExcitingAds%2521+cs+updates+on+arXiv.org%2529\n  README: configs/edvr/README.md\n  Task:\n  - video super-resolution\n  Year: 2019\nModels:\n- Config: configs/edvr/edvrm_wotsa_8xb4-600k_reds.py\n  In Collection: EDVR\n  Name: edvrm_wotsa_8xb4-600k_reds\n  Results:\n  - Dataset: REDS\n    Metrics:\n      PSNR: 30.343\n      SSIM: 0.8664\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth\n- Config: configs/edvr/edvrm_8xb4-600k_reds.py\n  In Collection: EDVR\n  Name: edvrm_8xb4-600k_reds\n  Results:\n  - Dataset: REDS\n    Metrics:\n      PSNR: 30.4194\n      SSIM: 0.8684\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_x4_8x4_600k_reds_20210625-e29b71b5.pth\n- Config: configs/edvr/edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4.py\n  In Collection: EDVR\n  Name: edvrl_wotsa-c128b40_8xb8-lr2e-4-600k_reds4\n  Results:\n  - Dataset: REDS\n    Metrics:\n      PSNR: 31.001\n      SSIM: 0.8784\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_wotsa_c128b40_8x8_lr2e-4_600k_reds4_20211228-d895a769.pth\n- Config: configs/edvr/edvrl_c128b40_8xb8-lr2e-4-600k_reds4.py\n  In Collection: EDVR\n  Name: edvrl_c128b40_8xb8-lr2e-4-600k_reds4\n  Results:\n  - Dataset: REDS\n    Metrics:\n      PSNR: 31.0467\n      SSIM: 0.8793\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/edvr/edvrl_c128b40_8x8_lr2e-4_600k_reds4_20220104-4509865f.pth\n"
  },
  {
    "path": "configs/eg3d/README.md",
    "content": "# EG3D (CVPR'2022)\n\n> [Efficient geometry-aware 3D generative adversarial networks](https://openaccess.thecvf.com/content/CVPR2022/html/Chan_Efficient_Geometry-Aware_3D_Generative_Adversarial_Networks_CVPR_2022_paper.html)\n\n> **Task**: 3D-aware Generation\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nUnsupervised generation of high-quality multi-view-consistent images and 3D shapes using only collections of single-view 2D photographs has been a long-standing challenge. Existing 3D GANs are either compute-intensive or make approximations that are not 3D-consistent; the former limits quality and resolution of the generated images and the latter adversely affects multi-view consistency and shape quality. In this work, we improve the computational efficiency and image quality of 3D GANs without overly relying on these approximations. We introduce an expressive hybrid explicit-implicit network architecture that, together with other design choices, synthesizes not only high-resolution multi-view-consistent images in real time but also produces high-quality 3D geometry. By decoupling feature generation and neural rendering, our framework is able to leverage state-of-the-art 2D CNN generators, such as StyleGAN2, and inherit their efficiency and expressiveness. We demonstrate state-of-the-art 3D-aware synthesis with FFHQ and AFHQ Cats, among other experiments.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/204269503-b66a6761-00e8-49ba-842f-65aae3110278.png\"/>\n</div>\n\n## Results and Models\n\n|                            Model                            |    Dataset    |     Comment     | FID50k | FID50k-Camera |                                            Download                                            |\n| :---------------------------------------------------------: | :-----------: | :-------------: | :----: | :-----------: | :--------------------------------------------------------------------------------------------: |\n| [ShapeNet-Car](./eg3d_cvt-official-rgb_shapenet-128x128.py) | ShaperNet-Car | official weight | 5.6573 |    5.2325     | [model](https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_shapenet-128x128-85757f4d.pth) |\n|       [AFHQ](./eg3d_cvt-official-rgb_afhq-512x512.py)       |     AFHQ      | official weight | 2.9134 |    6.4213     | [model](https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_afhq-512x512-ca1dd7c9.pth) |\n|       [FFHQ](./eg3d_cvt-official-rgb_ffhq-512x512.py)       |     FFHQ      | official weight | 4.3076 |    6.4453     | [model](https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_ffhq-512x512-5a0ddcb6.pth) |\n\n- `FID50k-Camera` denotes image generated with random sampled camera position.\n- `FID50k` denotes image generated with camera position randomly sampled from the original dataset.\n\n### Influence of FP16\n\nAll metrics are evaluated under FP32, and it's hard to determine how they will change if we use FP16.\nFor example, if we use FP16 at the super resolution module in [FFHQ model](./eg3d_cvt-official-rgb_ffhq-512x512.py), the output images will be slightly blurrier than the ones generated under FP32, but FID (**4.03**) will be better than FP32 ones.\n\n## About generate images and videos with High-Level API\n\nYou can use the following command to generate sequence images with continuous changed camera position as input.\n\n```shell\npython demo/mmagic_inference_demo.py --model-name eg3d \\\n    --model-config configs/eg3d/eg3d_cvt-official-rgb_afhq-512x512.py \\\n    --model-ckpt https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_afhq-512x512-ca1dd7c9.pth \\\n    --result-out-dir eg3d_output \\  # save images and videos to `eg3d_output`\n    --interpolation camera \\  # interpolation camera position only\n    --num-images 100  # generate 100 images during interpolation\n```\n\nThe the following video will be saved to `eg3d_output`.\n\n<div align=center>\n<video src=\"https://user-images.githubusercontent.com/28132635/204278664-b73b133b-9c3f-4a87-8750-133b7dedaebb.mp4\"/>\n</div>\n\nTo interpolate the camera position and style code at the same time, you can use the following command.\n\n```shell\npython demo/mmagic_inference_demo.py --model-name eg3d \\\n    --model-config configs/eg3d/eg3d_cvt-official-rgb_ffhq-512x512.py \\\n    --model-ckpt https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_ffhq-512x512-5a0ddcb6.pth \\\n    --result-out-dir eg3d_output \\  # save images and videos to `eg3d_output`\n    --interpolation both \\  # interpolation camera and conditioning both\n    --num-images 100  # generate 100 images during interpolation\n    --seed 233  # set random seed as 233\n```\n\n<div align=center>\n<video src=\"https://user-images.githubusercontent.com/28132635/205051392-e3e47ee3-bd18-4cd7-92ac-1cfc66014601.mp4\"/>\n</div>\n\nIf you only want to save video of depth map, you can use the following command:\n\n```shell\npython demo/mmagic_inference_demo.py --model-name eg3d \\\n    --model-config configs/eg3d/eg3d_cvt-official-rgb_shapenet-128x128.py \\\n    --model-ckpt https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_shapenet-128x128-85757f4d.pth \\\n    --result-out-dir eg3d_output \\  # save images and videos to `eg3d_output`\n    --interpolation camera \\  # interpolation camera position only\n    --num-images 100 \\  # generate 100 images during interpolation\n    --vis-mode depth  # only visualize depth image\n```\n\n<div align=center>\n<video src=\"https://user-images.githubusercontent.com/28132635/205051103-b0a0e540-c6b8-4f3c-a9ee-0e01ee9fd75b.mp4\"/>\n</div>\n\n## How to prepare dataset\n\nYou should prepare your dataset follow the official [repo](https://github.com/NVlabs/eg3d/tree/main/dataset_preprocessing). Then preprocess the `dataset.json` with the following script:\n\n```python\nimport json\nfrom argparse import ArgumentParser\n\nfrom mmengine.fileio.io import load\n\n\ndef main():\n\n    parser = ArgumentParser()\n    parser.add_argument(\n        'in-anno', type=str, help='Path to the official annotation file.')\n    parser.add_argument(\n        'out-anno', type=str, help='Path to MMagicing\\'s annotation file.')\n    args = parser.parse_args()\n\n    anno = load(args.in_anno)\n    label = anno['labels']\n\n    anno_dict = {}\n    for line in label:\n        name, label = line\n        anno_dict[name] = label\n\n    with open(args.out_anno, 'w') as file:\n        json.dump(anno_dict, file)\n\n\nif __name__ == '__main__':\n    main()\n```\n\n## Citation\n\n```latex\n@InProceedings{Chan_2022_CVPR,\n    author    = {Chan, Eric R. and Lin, Connor Z. and Chan, Matthew A. and Nagano, Koki and Pan, Boxiao and De Mello, Shalini and Gallo, Orazio and Guibas, Leonidas J. and Tremblay, Jonathan and Khamis, Sameh and Karras, Tero and Wetzstein, Gordon},\n    title     = {Efficient Geometry-Aware 3D Generative Adversarial Networks},\n    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},\n    month     = {June},\n    year      = {2022},\n    pages     = {16123-16133}\n}\n```\n"
  },
  {
    "path": "configs/eg3d/eg3d_cvt-official-rgb_afhq-512x512.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\nmodel = dict(\n    type='EG3D',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='TriplaneGenerator',\n        out_size=512,\n        triplane_channels=32,\n        triplane_size=256,\n        num_mlps=2,\n        sr_add_noise=False,\n        sr_in_size=128,\n        neural_rendering_resolution=128,\n        renderer_cfg=dict(\n            ray_start=2.25,\n            ray_end=3.3,\n            box_warp=1,\n            depth_resolution=48,\n            depth_resolution_importance=48,\n            white_back=False,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type='GaussianCamera',\n        horizontal_mean=3.14 / 2,\n        horizontal_std=0.35,\n        vertical_mean=3.14 / 2 - 0.05,\n        vertical_std=0.25,\n        radius=2.7,\n        fov=18.837,\n        look_at=[0, 0, 0.2]))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_afhq.pkl'\nmetrics = [\n    dict(\n        type='FID-Full',\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type='FID-Full',\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', color_type='color'),\n    dict(type='PackInputs')\n]\ntest_dataset = dict(\n    type='BasicConditionalDataset',\n    data_root='./data/eg3d/afhq',\n    ann_file='afhq.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 4` cost nearly **9.5GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "configs/eg3d/eg3d_cvt-official-rgb_ffhq-512x512.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\nmodel = dict(\n    type='EG3D',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='TriplaneGenerator',\n        out_size=512,\n        triplane_channels=32,\n        triplane_size=256,\n        num_mlps=2,\n        neural_rendering_resolution=128,\n        sr_add_noise=False,\n        sr_in_size=128,\n        # NOTE: double hidden channels and out channels for FFHQ-512\n        sr_hidden_channels=256,\n        sr_out_channels=128,\n        renderer_cfg=dict(\n            ray_start=2.25,\n            ray_end=3.3,\n            box_warp=1,\n            depth_resolution=48,\n            depth_resolution_importance=48,\n            white_back=False,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type='GaussianCamera',\n        horizontal_mean=3.14 / 2,\n        horizontal_std=0.35,\n        vertical_mean=3.14 / 2 - 0.05,\n        vertical_std=0.25,\n        radius=2.7,\n        fov=18.837,\n        look_at=[0, 0, 0.2]))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_ffhq_512.pkl'\nmetrics = [\n    dict(\n        type='FID-Full',\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type='FID-Full',\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', color_type='color'),\n    dict(type='PackInputs')\n]\ntest_dataset = dict(\n    type='BasicConditionalDataset',\n    data_root='./data/eg3d/ffhq_512',\n    ann_file='ffhq_512.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 4` cost nearly **9.5GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "configs/eg3d/eg3d_cvt-official-rgb_shapenet-128x128.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\nmodel = dict(\n    type='EG3D',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='TriplaneGenerator',\n        out_size=128,\n        zero_cond_input=True,\n        cond_scale=0,\n        sr_in_size=64,\n        renderer_cfg=dict(\n            # Official implementation set ray_start, ray_end and box_warp as\n            # 0.1, 2.6 and 1.6 respectively, and FID is 7.2441\n            # ray_start=0.1,\n            # ray_end=2.6,\n            # box_warp=1.6,\n            ray_start=0.4,\n            ray_end=2.0,\n            box_warp=1.7,\n            depth_resolution=64,\n            depth_resolution_importance=64,\n            white_back=True,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type='UniformCamera',\n        horizontal_mean=3.141,\n        horizontal_std=3.141,\n        vertical_mean=3.141 / 2,\n        vertical_std=3.141 / 2,\n        focal=1.025390625,\n        up=[0, 0, 1],\n        radius=1.2),\n)\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_shapenet.pkl'\nmetrics = [\n    dict(\n        type='FID-Full',\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type='FID-Full',\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig'),\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', color_type='color'),\n    dict(type='PackInputs')\n]\ntest_dataset = dict(\n    type='BasicConditionalDataset',\n    data_root='./data/eg3d/shapenet-car',\n    ann_file='shapenet.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 16` cost nearly **12GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=16,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # save_at_test=False,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "configs/eg3d/metafile.yml",
    "content": "Collections:\n- Name: EG3D\n  Paper:\n    Title: Efficient geometry-aware 3D generative adversarial networks\n    URL: https://openaccess.thecvf.com/content/CVPR2022/html/Chan_Efficient_Geometry-Aware_3D_Generative_Adversarial_Networks_CVPR_2022_paper.html\n  README: configs/eg3d/README.md\n  Task:\n  - 3d-aware generation\n  Year: 2022\nModels:\n- Config: configs/eg3d/eg3d_cvt-official-rgb_shapenet-128x128.py\n  In Collection: EG3D\n  Name: eg3d_cvt-official-rgb_shapenet-128x128\n  Results:\n  - Dataset: ShaperNet-Car\n    Metrics:\n      FID50k: 5.6573\n      FID50k-Camera: 5.2325\n    Task: 3D-aware Generation\n  Weights: https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_shapenet-128x128-85757f4d.pth\n- Config: configs/eg3d/eg3d_cvt-official-rgb_afhq-512x512.py\n  In Collection: EG3D\n  Name: eg3d_cvt-official-rgb_afhq-512x512\n  Results:\n  - Dataset: AFHQ\n    Metrics:\n      FID50k: 2.9134\n      FID50k-Camera: 6.4213\n    Task: 3D-aware Generation\n  Weights: https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_afhq-512x512-ca1dd7c9.pth\n- Config: configs/eg3d/eg3d_cvt-official-rgb_ffhq-512x512.py\n  In Collection: EG3D\n  Name: eg3d_cvt-official-rgb_ffhq-512x512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.3076\n      FID50k-Camera: 6.4453\n    Task: 3D-aware Generation\n  Weights: https://download.openmmlab.com/mmediting/eg3d/eg3d_cvt-official-rgb_ffhq-512x512-5a0ddcb6.pth\n"
  },
  {
    "path": "configs/esrgan/README.md",
    "content": "# ESRGAN (ECCVW'2018)\n\n> [ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks](https://arxiv.org/abs/1809.00219)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nThe Super-Resolution Generative Adversarial Network (SRGAN) is a seminal work that is capable of generating realistic textures during single image super-resolution. However, the hallucinated details are often accompanied with unpleasant artifacts. To further enhance the visual quality, we thoroughly study three key components of SRGAN - network architecture, adversarial loss and perceptual loss, and improve each of them to derive an Enhanced SRGAN (ESRGAN). In particular, we introduce the Residual-in-Residual Dense Block (RRDB) without batch normalization as the basic network building unit. Moreover, we borrow the idea from relativistic GAN to let the discriminator predict relative realness instead of the absolute value. Finally, we improve the perceptual loss by using the features before activation, which could provide stronger supervision for brightness consistency and texture recovery. Benefiting from these improvements, the proposed ESRGAN achieves consistently better visual quality with more realistic and natural textures than SRGAN and won the first place in the PIRM2018-SR Challenge.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144018578-6bb10830-b5fd-4d14-984e-4d7d85965c20.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                                      Model                                      | Dataset |  PSNR   |  SSIM  | Training Resources |                                      Download                                       |\n| :-----------------------------------------------------------------------------: | :-----: | :-----: | :----: | :----------------: | :---------------------------------------------------------------------------------: |\n| [esrgan_psnr_x4c64b23g32_1x16_1000k_div2k](./esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) |  Set5   | 30.6428 | 0.8559 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth) |\n| [esrgan_psnr_x4c64b23g32_1x16_1000k_div2k](./esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) |  Set14  | 27.0543 | 0.7447 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth) |\n| [esrgan_psnr_x4c64b23g32_1x16_1000k_div2k](./esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) |  DIV2K  | 29.3354 | 0.8263 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth) |\n| [esrgan_x4c64b23g32_1x16_400k_div2k](./esrgan_x4c64b23g32_1xb16-400k_div2k.py)  |  Set5   | 28.2700 | 0.7778 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth) |\n| [esrgan_x4c64b23g32_1x16_400k_div2k](./esrgan_x4c64b23g32_1xb16-400k_div2k.py)  |  Set14  | 24.6328 | 0.6491 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth) |\n| [esrgan_x4c64b23g32_1x16_400k_div2k](./esrgan_x4c64b23g32_1xb16-400k_div2k.py)  |  DIV2K  | 26.6531 | 0.7340 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth\n\n# single-gpu test\npython tools/test.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{wang2018esrgan,\n  title={Esrgan: Enhanced super-resolution generative adversarial networks},\n  author={Wang, Xintao and Yu, Ke and Wu, Shixiang and Gu, Jinjin and Liu, Yihao and Dong, Chao and Qiao, Yu and Change Loy, Chen},\n  booktitle={Proceedings of the European Conference on Computer Vision Workshops(ECCVW)},\n  pages={0--0},\n  year={2018}\n}\n```\n"
  },
  {
    "path": "configs/esrgan/README_zh-CN.md",
    "content": "# ESRGAN (ECCVW'2018)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">ESRGAN (ECCVW'2018)</summary>\n\n```bibtex\n@inproceedings{wang2018esrgan,\n  title={Esrgan: Enhanced super-resolution generative adversarial networks},\n  author={Wang, Xintao and Yu, Ke and Wu, Shixiang and Gu, Jinjin and Liu, Yihao and Dong, Chao and Qiao, Yu and Change Loy, Chen},\n  booktitle={Proceedings of the European Conference on Computer Vision Workshops(ECCVW)},\n  pages={0--0},\n  year={2018}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                  算法                                   |       Set5        |      Set14       |      DIV2K       | GPU 信息 |                                   下载                                   |\n| :---------------------------------------------------------------------: | :---------------: | :--------------: | :--------------: | :------: | :----------------------------------------------------------------------: |\n| [esrgan_psnr_x4c64b23g32_1x16_1000k_div2k](./esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) | 30.6428 / 0.8559  | 27.0543 / 0.7447 | 29.3354 / 0.8263 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420_112550.log.json) |\n| [esrgan_x4c64b23g32_1x16_400k_div2k](./esrgan_x4c64b23g32_1xb16-400k_div2k.py) | 28.2700 /  0.7778 | 24.6328 / 0.6491 | 26.6531 / 0.7340 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508_191042.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth\n\n# 单个GPU上测试\npython tools/test.py configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='RRDBNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=23,\n        growth_channels=32,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=data_root + '/Set14',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_000_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[250000, 250000, 250000, 250000],\n    restart_weights=[1, 1, 1, 1],\n    eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py",
    "content": "_base_ = './esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py'\n\nexperiment_name = 'esrgan_x4c64b23g32_1xb16-400k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\n\nscale = 4\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\npretrain_generator_url = (\n    'https://download.openmmlab.com/mmediting/restorers/esrgan'\n    '/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth')\nmodel = dict(\n    type='ESRGAN',\n    generator=dict(\n        type='RRDBNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=23,\n        growth_channels=32,\n        upscale_factor=scale,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint=pretrain_generator_url,\n            prefix='generator.')),\n    discriminator=dict(type='ModifiedVGG', in_channels=3, mid_channels=64),\n    pixel_loss=dict(type='L1Loss', loss_weight=1e-2, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'34': 1.0},\n        vgg_type='vgg19',\n        perceptual_weight=1.0,\n        style_weight=0,\n        norm_img=False),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=5e-3,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_cfg = dict(\n    _delete_=True,\n    type='IterBasedTrainLoop',\n    max_iters=400_000,\n    val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    _delete_=True,\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    _delete_=True,\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[50000, 100000, 200000, 300000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/esrgan/metafile.yml",
    "content": "Collections:\n- Name: ESRGAN\n  Paper:\n    Title: 'ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks'\n    URL: https://arxiv.org/abs/1809.00219\n  README: configs/esrgan/README.md\n  Task:\n  - image super-resolution\n  Year: 2018\nModels:\n- Config: configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py\n  In Collection: ESRGAN\n  Name: esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.6428\n      SSIM: 0.8559\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 27.0543\n      SSIM: 0.7447\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 29.3354\n      SSIM: 0.8263\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth\n- Config: configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py\n  In Collection: ESRGAN\n  Name: esrgan_x4c64b23g32_1xb16-400k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 28.27\n      SSIM: 0.7778\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 24.6328\n      SSIM: 0.6491\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 26.6531\n      SSIM: 0.734\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth\n"
  },
  {
    "path": "configs/fastcomposer/README.md",
    "content": "# FastComposer (2023)\n\n> [FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention](https://arxiv.org/abs/2305.10431)\n\n> **Task**: Text2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDiffusion models excel at text-to-image generation, especially in subject-driven generation for personalized images. However, existing methods are inefficient due to the subject-specific fine-tuning, which is computationally intensive and hampers efficient deployment. Moreover, existing methods struggle with multi-subject generation as they often blend features among subjects. We present FastComposer which enables efficient, personalized, multi-subject text-to-image generation without fine-tuning. FastComposer uses subject embeddings extracted by an image encoder to augment the generic text conditioning in diffusion models, enabling personalized image generation based on subject images and textual instructions with only forward passes. To address the identity blending problem in the multi-subject generation, FastComposer proposes cross-attention localization supervision during training, enforcing the attention of reference subjects localized to the correct regions in the target images. Naively conditioning on subject embeddings results in subject overfitting. FastComposer proposes delayed subject conditioning in the denoising step to maintain both identity and editability in subject-driven image generation. FastComposer generates images of multiple unseen individuals with different styles, actions, and contexts. It achieves 300x-2500x speedup compared to fine-tuning-based methods and requires zero extra storage for new subjects. FastComposer paves the way for efficient, personalized, and high-quality multi-subject image creation.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/14927720/265914135-8a25789c-8d30-40cb-8ac5-e3bd3b617aac.png\">\n</div>\n\n## Pretrained models\n\nThis model has several weights including vae, unet and clip. You should download the weights from [stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) and [clipModel](https://huggingface.co/openai/clip-vit-large-patch14),and then change the 'stable_diffusion_v15_url' and 'clip_vit_url' in config to the corresponding weights path and \"finetuned_model_path\" to the weight path of fastcomposer.\n\n|                    Model                     | Dataset |                                            Download                                             |\n| :------------------------------------------: | :-----: | :---------------------------------------------------------------------------------------------: |\n| [FastComposer](./fastcomposer_8xb16_FFHQ.py) |    -    | [model](https://download.openxlab.org.cn/models/xiaomile/fastcomposer/weight/pytorch_model.bin) |\n\n## Quick Start\n\nYou can run the demo locally by\n\n```bash\npython demo/gradio_fastcomposer.py\n```\n\nOr running the following codes, you can get a text-generated image.\n\n```python\nimport numpy as np\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\nimport torch, gc\n\ngc.collect()\ntorch.cuda.empty_cache()\n\nregister_all_modules()\n\ncfg_file = Config.fromfile('configs/fastcomposer/fastcomposer_8xb16_FFHQ.py')\n\nfastcomposer = MODELS.build(cfg_file.model).cuda()\n\nprompt = \"A man img and a man img sitting in a park\"\nnegative_prompt = \"((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))). out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck)))\"\nalpha_ = 0.75\nguidance_scale = 5\nnum_steps = 50\nnum_images = 1\nimage = []\nseed = -1\n\nimage1 = mmcv.imread('https://user-images.githubusercontent.com/14927720/265911400-91635451-54b6-4dc6-92a7-c1d02f88b62e.jpeg')\nimage2 = mmcv.imread('https://user-images.githubusercontent.com/14927720/265911502-66b67f53-dff0-4d25-a9af-3330e446aa48.jpeg')\n\nimage.append(Image.fromarray(image1))\nimage.append(Image.fromarray(image2))\n\nif len(image) == 0:\n    raise Exception(\"You need to upload at least one image.\")\n\nnum_subject_in_text = (\n        np.array(fastcomposer.special_tokenizer.encode(prompt))\n        == fastcomposer.image_token_id\n).sum()\nif num_subject_in_text != len(image):\n    raise Exception(f\"Number of subjects in the text description doesn't match the number of reference images, #text subjects: {num_subject_in_text} #reference image: {len(image)}\",\n    )\n\nif seed == -1:\n    seed = np.random.randint(0, 1000000)\n\ndevice = torch.device('cuda' if torch.cuda.is_available(\n    ) else 'cpu')\ngenerator = torch.Generator(device=device)\ngenerator.manual_seed(seed)\n\noutput_dict = fastcomposer.infer(prompt,\n                                 negative_prompt=negative_prompt,\n                                 height=512,\n                                 width=512,\n                                 num_inference_steps=num_steps,\n                                 guidance_scale=guidance_scale,\n                                 num_images_per_prompt=num_images,\n                                 generator=generator,\n                                 alpha_=alpha_,\n                                 reference_subject_images=image)\n\nsamples = output_dict['samples']\nfor idx, sample in enumerate(samples):\n    sample.save(f'sample_{idx}.png')\n```\n\n## Citation\n\n```bibtex\n@article{xiao2023fastcomposer,\n            title={FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention},\n            author={Xiao, Guangxuan and Yin, Tianwei and Freeman, William T. and Durand, Frédo and Han, Song},\n            journal={arXiv},\n            year={2023}\n          }\n```\n"
  },
  {
    "path": "configs/fastcomposer/README_zh-CN.md",
    "content": "# FastComposer (2023)\n\n> [FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention](https://arxiv.org/abs/2305.10431)\n\n> **任务**: 文本转图像\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n扩散模型在文本到图像生成方面表现出色，尤其在以主题驱动的个性化图像生成方面。然而，现有方法由于主题特定的微调而效率低下，因为需要大量的计算资源，而这限制了扩散模型高效部署的可能性。此外，现有方法在多主题生成方面存在困难，因为它们经常在不同主题之间混合特征。因此我们提出了FastComposer，它可以实现高效、个性化、多主题的文本到图像生成，而无需进行微调。FastComposer利用图像编码器提取的主题嵌入来增强扩散模型中的通用文本条件，只需进行前向传递即可基于主题图像和文本指令进行个性化图像生成。为了解决多主题生成中的身份混合问题，FastComposer在训练过程中提出了交叉注意力定位监督，强制参考主题的注意力定位于目标图像中的正确区域。简单地基于主题嵌入进行条件设定会导致主题过度拟合的问题。为了在以主题驱动的图像生成中同时保持身份和可编辑性，FastComposer在去噪步骤中提出了延迟主题条件设定的方法。FastComposer可以生成具有不同风格、动作和背景的多个未知个体的图像。与基于微调的方法相比，它实现了300倍到2500倍的加速，并且对于新主题不需要额外的存储空间。正因如此FastComposer为高效、个性化和高质量的多主题图像创作铺平了道路。\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/14927720/265914135-8a25789c-8d30-40cb-8ac5-e3bd3b617aac.png\">\n</div>\n\n## 预训练模型\n\n该模型有几个权重，包括vae，unet和clip。您应该先从[stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) 和 [clipModel](https://huggingface.co/openai/clip-vit-large-patch14) 下载权重，然后将配置中的“stable_diffusion_v15_url”和”clip_vit_url“更改为对应的权重路径，将”finetuned_model_path“更改为fastcomposer的权重路径。\n\n|                    Model                     | Dataset |                                            Download                                             |\n| :------------------------------------------: | :-----: | :---------------------------------------------------------------------------------------------: |\n| [FastComposer](./fastcomposer_8xb16_FFHQ.py) |    -    | [model](https://download.openxlab.org.cn/models/xiaomile/fastcomposer/weight/pytorch_model.bin) |\n\n## 快速开始\n\n您可以通过以下方式在本地运行来演示\n\n```bash\npython demo/gradio_fastcomposer.py\n```\n\n或者运行一下代码，您就能获得依照文本生成的特定图像。\n\n```python\nimport numpy as np\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\nimport torch, gc\n\ngc.collect()\ntorch.cuda.empty_cache()\n\nregister_all_modules()\n\ncfg_file = Config.fromfile('configs/fastcomposer/fastcomposer_8xb16_FFHQ.py')\n\nfastcomposer = MODELS.build(cfg_file.model).cuda()\n\nprompt = \"A man img and a man img sitting in a park\"\nnegative_prompt = \"((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))). out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck)))\"\nalpha_ = 0.75\nguidance_scale = 5\nnum_steps = 50\nnum_images = 1\nimage = []\nseed = -1\n\nimage1 = mmcv.imread('https://user-images.githubusercontent.com/14927720/265911400-91635451-54b6-4dc6-92a7-c1d02f88b62e.jpeg')\nimage2 = mmcv.imread('https://user-images.githubusercontent.com/14927720/265911502-66b67f53-dff0-4d25-a9af-3330e446aa48.jpeg')\n\nimage.append(Image.fromarray(image1))\n\nimage.append(Image.fromarray(image2))\n\nif len(image) == 0:\n    raise Exception(\"You need to upload at least one image.\")\n\nnum_subject_in_text = (\n        np.array(fastcomposer.special_tokenizer.encode(prompt))\n        == fastcomposer.image_token_id\n).sum()\nif num_subject_in_text != len(image):\n    raise Exception(f\"Number of subjects in the text description doesn't match the number of reference images, #text subjects: {num_subject_in_text} #reference image: {len(image)}\",\n    )\n\nif seed == -1:\n    seed = np.random.randint(0, 1000000)\n\ndevice = torch.device('cuda' if torch.cuda.is_available(\n    ) else 'cpu')\ngenerator = torch.Generator(device=device)\ngenerator.manual_seed(seed)\n\noutput_dict = fastcomposer.infer(prompt,\n                                 negative_prompt=negative_prompt,\n                                 height=512,\n                                 width=512,\n                                 num_inference_steps=num_steps,\n                                 guidance_scale=guidance_scale,\n                                 num_images_per_prompt=num_images,\n                                 generator=generator,\n                                 alpha_=alpha_,\n                                 reference_subject_images=image)\n\nsamples = output_dict['samples']\nfor idx, sample in enumerate(samples):\n    sample.save(f'sample_{idx}.png')\n```\n\n## 引用\n\n```bibtex\n@article{xiao2023fastcomposer,\n            title={FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention},\n            author={Xiao, Guangxuan and Yin, Tianwei and Freeman, William T. and Durand, Frédo and Han, Song},\n            journal={arXiv},\n            year={2023}\n          }\n```\n"
  },
  {
    "path": "configs/fastcomposer/fastcomposer_8xb16_FFHQ.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nclip_vit_url = 'openai/clip-vit-large-patch14'\nfinetuned_model_path = 'https://download.openxlab.org.cn/models/xiaomile/'\\\n                       'fastcomposer/weight/pytorch_model.bin'\n\nmodel = dict(\n    type='FastComposer',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    pretrained_cfg=dict(\n        finetuned_model_path=finetuned_model_path,\n        enable_xformers_memory_efficient_attention=None,\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        image_encoder=clip_vit_url,\n        revision=None,\n        non_ema_revision=None,\n        object_localization=None,\n        object_localization_weight=0.01,\n        localization_layers=5,\n        mask_loss=None,\n        mask_loss_prob=0.5,\n        object_localization_threshold=1.0,\n        object_localization_normalize=None,\n        no_object_augmentation=True,\n        object_resolution=256),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    dtype='fp32',\n    data_preprocessor=dict(type='DataPreprocessor'))\n"
  },
  {
    "path": "configs/fastcomposer/metafile.yml",
    "content": "Collections:\n- Name: FastComposer\n  Paper:\n    Title: 'FastComposer: Tuning-Free Multi-Subject Image Generation with Localized\n      Attention'\n    URL: https://arxiv.org/abs/2305.10431\n  README: configs/fastcomposer/README.md\n  Task:\n  - text2image\n  Year: 2023\nModels:\n- Config: configs/fastcomposer/fastcomposer_8xb16_FFHQ.py\n  In Collection: FastComposer\n  Name: fastcomposer_8xb16_FFHQ\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n  Weights: https://download.openxlab.org.cn/models/xiaomile/fastcomposer/weight/pytorch_model.bin\n"
  },
  {
    "path": "configs/flavr/README.md",
    "content": "# FLAVR (arXiv'2020)\n\n> [FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation](https://arxiv.org/pdf/2012.08512.pdf)\n\n> **Task**: Video Interpolation\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nMost modern frame interpolation approaches rely on explicit bidirectional optical flows between adjacent frames, thus are sensitive to the accuracy of underlying flow estimation in handling occlusions while additionally introducing computational bottlenecks unsuitable for efficient deployment. In this work, we propose a flow-free approach that is completely end-to-end trainable for multi-frame video interpolation. Our method, FLAVR, is designed to reason about non-linear motion trajectories and complex occlusions implicitly from unlabeled videos and greatly simplifies the process of training, testing and deploying frame interpolation models. Furthermore, FLAVR delivers up to 6× speed up compared to the current state-of-the-art methods for multi-frame interpolation while consistently demonstrating superior qualitative and quantitative results compared with prior methods on popular benchmarks including Vimeo-90K, Adobe-240FPS, and GoPro. Finally, we show that frame interpolation is a competitive self-supervised pre-training task for videos via demonstrating various novel applications of FLAVR including action recognition, optical flow estimation, motion magnification, and video object tracking. Code and trained models are provided in the supplementary material.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/56712176/169070212-52acdcea-d732-4441-9983-276e2e40b195.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels.\nThe metrics are `PSNR / SSIM` .\n\n|                                   Model                                    |  Dataset   | scale |  PSNR   |  SSIM   | Training Resources  |                                    Download                                    |\n| :------------------------------------------------------------------------: | :--------: | :---: | :-----: | :-----: | :-----------------: | :----------------------------------------------------------------------------: |\n| [flavr_in4out1_g8b4_vimeo90k_septuplet](./flavr_in4out1_8xb4_vimeo90k-septuplet.py) | vimeo90k-T |  x2   | 36.3340 | 0.96015 | 8 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.log.json) |\n\nNote: FLAVR for x8 VFI task will supported in the future.\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py\n\n# single-gpu train\npython tools/train.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\n\n# single-gpu test\npython tools/test.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{kalluri2020flavr,\n  title={Flavr: Flow-agnostic video representations for fast frame interpolation},\n  author={Kalluri, Tarun and Pathak, Deepak and Chandraker, Manmohan and Tran, Du},\n  journal={arXiv preprint arXiv:2012.08512},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/flavr/README_zh-CN.md",
    "content": "# FLAVR (arXiv'2020)\n\n> [FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation](https://arxiv.org/abs/2012.08512.pdf)\n\n> **任务**: 视频插帧\n\n<!-- [ALGORITHM] -->\n\n## 预训练模型测试结果\n\n在 RGB 通道上评估。\n评估指标 `PSNR / SSIM`。\n\n|                                      算法                                       | scale | Vimeo90k-triplet  |      GPU 信息       |                                       下载                                       |\n| :-----------------------------------------------------------------------------: | :---: | :---------------: | :-----------------: | :------------------------------------------------------------------------------: |\n| [flavr_in4out1_g8b4_vimeo90k_septuplet](./flavr_in4out1_8xb4_vimeo90k-septuplet.py) |  x2   | 36.3340 / 0.96015 | 8 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.log.json) |\n\n注：FLAVR 中的 8 倍视频插帧算法将会在未来版本中支持。\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py\n\n# 单个GPU上训练\npython tools/train.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\n\n# 单个GPU上测试\npython tools/test.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n\n## Citation\n\n```bibtex\n@article{kalluri2020flavr,\n  title={Flavr: Flow-agnostic video representations for fast frame interpolation},\n  author={Kalluri, Tarun and Pathak, Deepak and Chandraker, Manmohan and Tran, Du},\n  journal={arXiv preprint arXiv:2012.08512},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'flavr_in4out1_8xb4_vimeo90k-septuplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='FLAVRNet',\n        num_input_frames=4,\n        num_output_frames=1,\n        mid_channels_list=[512, 256, 128, 64],\n        encoder_layers_list=[2, 2, 2, 2],\n        bias=False,\n        norm_cfg=None,\n        join_type='concat',\n        up_mode='transpose'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=4,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(type='DataPreprocessor', ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='FixedCrop', keys=['img', 'gt'], crop_size=(256, 256)),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(\n        type='ColorJitter',\n        keys=['img', 'gt'],\n        channel_order='rgb',\n        brightness=0.05,\n        contrast=0.05,\n        saturation=0.05,\n        hue=0.05),\n    dict(type='TemporalReverse', keys=['img'], reverse_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ntrain_dataset_type = 'BasicFramesDataset'\nval_dataset_type = 'BasicFramesDataset'\ndata_root = 'data/vimeo90k'\n\ntrain_dataloader = dict(\n    num_workers=16,\n    batch_size=4,  # 8 gpu\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=True),\n    dataset=dict(\n        type=train_dataset_type,\n        ann_file='txt/sep_trainlist.txt',\n        metainfo=dict(dataset_type='vimeo90k_septenary', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='GT', gt='GT'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(\n            img=['im1.png', 'im3.png', 'im5.png', 'im7.png'], gt=['im4.png'])))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=val_dataset_type,\n        ann_file='txt/sep_testlist.txt',\n        metainfo=dict(dataset_type='vimeo90k_septenary', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='GT', gt='GT'),\n        pipeline=val_pipeline,\n        depth=2,\n        load_frames_list=dict(\n            img=['im1.png', 'im3.png', 'im5.png', 'im7.png'], gt=['im4.png'])))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(type='EpochBasedTrainLoop', max_epochs=500)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99)),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type='ReduceLR',\n    by_epoch=True,\n    mode='min',\n    factor=0.5,\n    patience=10,\n    cooldown=20)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=1,\n        save_optimizer=True,\n        by_epoch=True,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n    param_scheduler=dict(\n        type='ReduceLRSchedulerHook',\n        by_epoch=True,\n        interval=1,\n        val_metric='MAE'),\n)\n\nlog_processor = dict(type='LogProcessor', by_epoch=True)\n"
  },
  {
    "path": "configs/flavr/metafile.yml",
    "content": "Collections:\n- Name: FLAVR\n  Paper:\n    Title: 'FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation'\n    URL: https://arxiv.org/pdf/2012.08512.pdf\n  README: configs/flavr/README.md\n  Task:\n  - video interpolation\n  Year: 2020\nModels:\n- Config: configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py\n  In Collection: FLAVR\n  Name: flavr_in4out1_8xb4_vimeo90k-septuplet\n  Results:\n  - Dataset: vimeo90k-T\n    Metrics:\n      PSNR: 36.334\n      SSIM: 0.96015\n    Task: Video Interpolation\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\n"
  },
  {
    "path": "configs/gca/README.md",
    "content": "# GCA (AAAI'2020)\n\n> [Natural Image Matting via Guided Contextual Attention](https://arxiv.org/abs/2001.04069)\n\n> **Task**: Matting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nOver the last few years, deep learning based approaches have achieved outstanding improvements in natural image matting. Many of these methods can generate visually plausible alpha estimations, but typically yield blurry structures or textures in the semitransparent area. This is due to the local ambiguity of transparent objects. One possible solution is to leverage the far-surrounding information to estimate the local opacity. Traditional affinity-based methods often suffer from the high computational complexity, which are not suitable for high resolution alpha estimation. Inspired by affinity-based method and the successes of contextual attention in inpainting, we develop a novel end-to-end approach for natural image matting with a guided contextual attention module, which is specifically designed for image matting. Guided contextual attention module directly propagates high-level opacity information globally based on the learned low-level affinity. The proposed method can mimic information flow of affinity-based methods and utilize rich features learned by deep neural networks simultaneously. Experiment results on Composition-1k testing set and this http URL benchmark dataset demonstrate that our method outperforms state-of-the-art approaches in natural image matting.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144176004-c9c26201-f8af-416a-9bea-ccd60bae7913.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                              Model                               |    Dataset     |    SAD    |    MSE     |   GRAD    |   CONN    | Training Resources |                              Download                               |\n| :--------------------------------------------------------------: | :------------: | :-------: | :--------: | :-------: | :-------: | :----------------: | :-----------------------------------------------------------------: |\n|      [baseline (our)](./baseline_r34_4xb10-200k_comp1k.py)       | Composition-1K |   34.61   |   0.0083   |   16.21   |   32.12   |         4          | [model](https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.log) |\n|           [GCA (our)](./gca_r34_4xb10-200k_comp1k.py)            | Composition-1K | **33.38** | **0.0081** | **14.96** | **30.59** |         4          | [model](https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.log) |\n| [baseline (with DIM pipeline)](./baseline_r34_4xb10-dimaug-200k_comp1k.py) | Composition-1K |   49.95   |   0.0144   |   30.21   |   49.67   |         4          | [model](https://download.openmmlab.com/mmediting/mattors/gca/baseline_dimaug_r34_4x10_200k_comp1k_SAD-49.95_20200626_231612-535c9a11.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/gca/baseline_dimaug_r34_4x10_200k_comp1k_20200626_231612.log.json) |\n| [GCA (with DIM pipeline)](./gca_r34_4xb10-dimaug-200k_comp1k.py) | Composition-1K |   49.42   |   0.0129   |   28.07   |   49.47   |         4          | [model](https://download.openmmlab.com/mmediting/mattors/gca/gca_dimaug_r34_4x10_200k_comp1k_SAD-49.42_20200626_231422-8e9cc127.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/gca/gca_dimaug_r34_4x10_200k_comp1k_20200626_231422.log.json) |\n\n<!-- |                   baseline (paper)                    |   40.62   |   0.0106   |   21.53   |   38.43   |         -          |                                              -                                               |\n|                      GCA (paper)                      |   35.28   |   0.0091   |   16.92   |   32.53   |         -          |                                              -                                               | -->\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/gca/gca_r34_4xb10-200k_comp1k.py\n\n# single-gpu train\npython tools/train.py configs/gca/gca_r34_4xb10-200k_comp1k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/gca/gca_r34_4xb10-200k_comp1k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth\n\n# single-gpu test\npython tools/test.py configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{li2020natural,\n  title={Natural Image Matting via Guided Contextual Attention},\n  author={Li, Yaoyi and Lu, Hongtao},\n  booktitle={Association for the Advancement of Artificial Intelligence (AAAI)},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/gca/README_zh-CN.md",
    "content": "# GCA (AAAI'2020)\n\n> **任务**: 图像抠图\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">GCA (AAAI'2020)</summary>\n\n```bibtex\n@inproceedings{li2020natural,\n  title={Natural Image Matting via Guided Contextual Attention},\n  author={Li, Yaoyi and Lu, Hongtao},\n  booktitle={Association for the Advancement of Artificial Intelligence (AAAI)},\n  year={2020}\n}\n```\n\n</details>\n\n<br/>\n\n|                        算法                        |    SAD    |    MSE     |   GRAD    |   CONN    | GPU 信息 |                                                   下载                                                    |\n| :------------------------------------------------: | :-------: | :--------: | :-------: | :-------: | :------: | :-------------------------------------------------------------------------------------------------------: |\n|                    基线 (原文)                     |   40.62   |   0.0106   |   21.53   |   38.43   |    -     |                                                     -                                                     |\n|                     GCA (原文)                     |   35.28   |   0.0091   |   16.92   |   32.53   |    -     |                                                     -                                                     |\n| [基线 (复现)](./baseline_r34_4xb10-200k_comp1k.py) |   34.61   |   0.0083   |   16.21   |   32.12   |    4     | [模型](https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.log) |\n|    [GCA (复现)](./gca_r34_4xb10-200k_comp1k.py)    | **33.38** | **0.0081** | **14.96** | **30.59** |    4     | [模型](https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.log) |\n\n**其他结果**\n\n|                                 算法                                 |  SAD  |  MSE   | GRAD  | CONN  | GPU 信息 |                                                  下载                                                   |\n| :------------------------------------------------------------------: | :---: | :----: | :---: | :---: | :------: | :-----------------------------------------------------------------------------------------------------: |\n| [基线 (使用 DIM 流水线)](./baseline_r34_4xb10-dimaug-200k_comp1k.py) | 49.95 | 0.0144 | 30.21 | 49.67 |    4     | [模型](https://download.openmmlab.com/mmediting/mattors/gca/baseline_dimaug_r34_4x10_200k_comp1k_SAD-49.95_20200626_231612-535c9a11.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/gca/baseline_dimaug_r34_4x10_200k_comp1k_20200626_231612.log.json) |\n|    [GCA (使用 DIM 流水线)](./gca_r34_4xb10-dimaug-200k_comp1k.py)    | 49.42 | 0.0129 | 28.07 | 49.47 |    4     | [模型](https://download.openmmlab.com/mmediting/mattors/gca/gca_dimaug_r34_4x10_200k_comp1k_SAD-49.42_20200626_231422-8e9cc127.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/gca/gca_dimaug_r34_4x10_200k_comp1k_20200626_231422.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/gca/gca_r34_4xb10-200k_comp1k.py\n\n# 单个GPU上训练\npython tools/train.py configs/gca/gca_r34_4xb10-200k_comp1k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/gca/gca_r34_4xb10-200k_comp1k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth\n\n# 单个GPU上测试\npython tools/test.py configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/gca/gca_r34_4xb10-200k_comp1k.py https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/gca/baseline_r34_4xb10-200k_comp1k.py",
    "content": "_base_ = [\n    '../_base_/datasets/comp1k.py', '../_base_/matting_default_runtime.py'\n]\n\nexperiment_name = 'baseline_r34_4xb10-200k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='GCA',\n    data_preprocessor=dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        proc_trimap='as_is',  # proc by pipeline FormatTrimap\n    ),\n    backbone=dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(\n            type='ResShortcutEnc',\n            block='BasicBlock',\n            layers=[3, 4, 4, 2],\n            in_channels=6,\n            with_spectral_norm=True,\n            init_cfg=dict(\n                type='Pretrained',\n                checkpoint='open-mmlab://mmedit/res34_en_nomixup')),\n        decoder=dict(\n            type='ResShortcutDec',\n            block='BasicBlockDec',\n            layers=[2, 3, 3, 2],\n            with_spectral_norm=True)),\n    loss_alpha=dict(type='L1Loss'),\n    test_cfg=dict(\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ))\n\n# dataset settings\ndata_root = 'data/adobe_composition-1k'\nbg_dir = 'data/coco/train2017'\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='RandomLoadResizeBg', bg_dir=bg_dir),\n    dict(\n        type='CompositeFg',\n        fg_dirs=[\n            f'{data_root}/Training_set/Adobe-licensed images/fg',\n            f'{data_root}/Training_set/Other/fg'\n        ],\n        alpha_dirs=[\n            f'{data_root}/Training_set/Adobe-licensed images/alpha',\n            f'{data_root}/Training_set/Other/alpha'\n        ]),\n    dict(\n        type='RandomAffine',\n        keys=['alpha', 'fg'],\n        degrees=30,\n        scale=(0.8, 1.25),\n        shear=10,\n        flip_ratio=0.5),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='CropAroundCenter', crop_size=512),\n    dict(type='RandomJitter'),\n    dict(type='MergeFgAndBg'),\n    dict(type='FormatTrimap', to_onehot=True),\n    dict(type='PackInputs'),\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='FormatTrimap', to_onehot=True),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(\n    batch_size=10,\n    num_workers=8,\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=200_000,\n    val_interval=10_000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=4e-4, betas=[0.5, 0.999]))\n# learning policy\nparam_scheduler = [\n    dict(\n        type='LinearLR',\n        start_factor=0.001,\n        begin=0,\n        end=5000,\n        by_epoch=False,\n    ),\n    dict(\n        type='CosineAnnealingLR',\n        T_max=200_000,  # TODO, need more check\n        eta_min=0,\n        begin=0,\n        end=200_000,\n        by_epoch=False,\n    )\n]\n\n# checkpoint saving\n# inheritate from default_runtime.py\n\n# runtime settings\n# inheritate from default_runtime.py\n"
  },
  {
    "path": "configs/gca/baseline_r34_4xb10-dimaug-200k_comp1k.py",
    "content": "_base_ = ['./baseline_r34_4xb10-200k_comp1k.py']\n\nexperiment_name = 'baseline_r34_4xb10-dimaug-200k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(backbone=dict(encoder=dict(in_channels=4)))\n\n# dataset settings\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged'],\n        crop_sizes=[320, 480, 640]),\n    dict(type='Flip', keys=['alpha', 'merged']),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged'],\n        scale=(320, 320),\n        keep_ratio=False),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='FormatTrimap', to_onehot=False),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='FormatTrimap', to_onehot=False),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(dataset=dict(pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/gca/gca_r34_4xb10-200k_comp1k.py",
    "content": "_base_ = [\n    '../_base_/datasets/comp1k.py', '../_base_/matting_default_runtime.py'\n]\n\nexperiment_name = 'gca_r34_4xb10-200k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='GCA',\n    data_preprocessor=dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        proc_trimap='as_is',\n    ),\n    backbone=dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(\n            type='ResGCAEncoder',\n            block='BasicBlock',\n            layers=[3, 4, 4, 2],\n            in_channels=6,\n            with_spectral_norm=True,\n            init_cfg=dict(\n                type='Pretrained',\n                checkpoint='open-mmlab://mmedit/res34_en_nomixup')),\n        decoder=dict(\n            type='ResGCADecoder',\n            block='BasicBlockDec',\n            layers=[2, 3, 3, 2],\n            with_spectral_norm=True)),\n    loss_alpha=dict(type='L1Loss'),\n    test_cfg=dict(\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ))\n\n# dataset settings\ndata_root = 'data/adobe_composition-1k'\nbg_dir = 'data/coco/train2017'\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='RandomLoadResizeBg', bg_dir=bg_dir),\n    dict(\n        type='CompositeFg',\n        fg_dirs=[\n            f'{data_root}/Training_set/Adobe-licensed images/fg',\n            f'{data_root}/Training_set/Other/fg'\n        ],\n        alpha_dirs=[\n            f'{data_root}/Training_set/Adobe-licensed images/alpha',\n            f'{data_root}/Training_set/Other/alpha'\n        ]),\n    dict(\n        type='RandomAffine',\n        keys=['alpha', 'fg'],\n        degrees=30,\n        scale=(0.8, 1.25),\n        shear=10,\n        flip_ratio=0.5),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='CropAroundCenter', crop_size=512),\n    dict(type='RandomJitter'),\n    dict(type='MergeFgAndBg'),\n    dict(type='FormatTrimap', to_onehot=True),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='FormatTrimap', to_onehot=True),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(\n    batch_size=10,\n    num_workers=8,\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=200_000,\n    val_interval=10_000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=4e-4, betas=[0.5, 0.999]))\n# learning policy\nparam_scheduler = [\n    dict(\n        type='LinearLR',\n        start_factor=0.001,\n        begin=0,\n        end=5000,\n        by_epoch=False,\n    ),\n    dict(\n        type='CosineAnnealingLR',\n        T_max=200_000,  # TODO, need more check\n        eta_min=0,\n        begin=0,\n        end=200_000,\n        by_epoch=False,\n    )\n]\n\n# checkpoint saving\n# inheritate from _base_\n\n# runtime settings\n# inheritate from _base_\n"
  },
  {
    "path": "configs/gca/gca_r34_4xb10-dimaug-200k_comp1k.py",
    "content": "_base_ = ['./gca_r34_4xb10-200k_comp1k.py']\n\nexperiment_name = 'gca_r34_4xb10-dimaug-200k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(backbone=dict(encoder=dict(in_channels=4)))\n\n# dataset settings\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged'],\n        crop_sizes=[320, 480, 640]),\n    dict(type='Flip', keys=['alpha', 'merged']),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged'],\n        scale=(320, 320),\n        keep_ratio=False),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='FormatTrimap', to_onehot=False),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='FormatTrimap', to_onehot=False),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(dataset=dict(pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/gca/metafile.yml",
    "content": "Collections:\n- Name: GCA\n  Paper:\n    Title: Natural Image Matting via Guided Contextual Attention\n    URL: https://arxiv.org/abs/2001.04069\n  README: configs/gca/README.md\n  Task:\n  - matting\n  Year: 2020\nModels:\n- Config: configs/gca/baseline_r34_4xb10-200k_comp1k.py\n  In Collection: GCA\n  Name: baseline_r34_4xb10-200k_comp1k\n  Results:\n  - Dataset: Composition-1K\n    Metrics:\n      CONN: 32.12\n      GRAD: 16.21\n      MSE: 0.0083\n      SAD: 34.61\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.pth\n- Config: configs/gca/gca_r34_4xb10-200k_comp1k.py\n  In Collection: GCA\n  Name: gca_r34_4xb10-200k_comp1k\n  Results:\n  - Dataset: Composition-1K\n    Metrics:\n      CONN: 30.59\n      GRAD: 14.96\n      MSE: 0.0081\n      SAD: 33.38\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/gca/gca_r34_4x10_200k_comp1k_SAD-33.38_20220615-65595f39.pth\n- Config: configs/gca/baseline_r34_4xb10-dimaug-200k_comp1k.py\n  In Collection: GCA\n  Name: baseline_r34_4xb10-dimaug-200k_comp1k\n  Results:\n  - Dataset: Composition-1K\n    Metrics:\n      CONN: 49.67\n      GRAD: 30.21\n      MSE: 0.0144\n      SAD: 49.95\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/gca/baseline_dimaug_r34_4x10_200k_comp1k_SAD-49.95_20200626_231612-535c9a11.pth\n- Config: configs/gca/gca_r34_4xb10-dimaug-200k_comp1k.py\n  In Collection: GCA\n  Name: gca_r34_4xb10-dimaug-200k_comp1k\n  Results:\n  - Dataset: Composition-1K\n    Metrics:\n      CONN: 49.47\n      GRAD: 28.07\n      MSE: 0.0129\n      SAD: 49.42\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/gca/gca_dimaug_r34_4x10_200k_comp1k_SAD-49.42_20200626_231422-8e9cc127.pth\n"
  },
  {
    "path": "configs/ggan/README.md",
    "content": "# GGAN (ArXiv'2017)\n\n> [Geometric GAN](https://arxiv.org/abs/1705.02894)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nGenerative Adversarial Nets (GANs) represent an important milestone for effective generative models, which has inspired numerous variants seemingly different from each other. One of the main contributions of this paper is to reveal a unified geometric structure in GAN and its variants. Specifically, we show that the adversarial generative model training can be decomposed into three geometric steps: separating hyperplane search, discriminator parameter update away from the separating hyperplane, and the generator update along the normal vector direction of the separating hyperplane. This geometric intuition reveals the limitations of the existing approaches and leads us to propose a new formulation called geometric GAN using SVM separating hyperplane that maximizes the margin. Our theoretical analysis shows that the geometric GAN converges to a Nash equilibrium between the discriminator and generator. In addition, extensive numerical results show that the superior performance of geometric GAN.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143051600-6a3e5c37-259e-4b77-a847-c6ad1eafa65f.JPG\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> GGAN 64x64, CelebA-Cropped</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/116691577-9067d800-a9ed-11eb-8ea4-be79884d8502.PNG\" width=\"800\"/>\n</div>\n\n|                                 Model                                 |    Dataset     |               SWD               | MS-SSIM |   FID   |                                 Download                                 |\n| :-------------------------------------------------------------------: | :------------: | :-----------------------------: | :-----: | :-----: | :----------------------------------------------------------------------: |\n| [GGAN 64x64](./ggan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py) | CelebA-Cropped |    11.18, 12.21, 39.16/20.85    | 0.3318  | 20.1797 | [model](https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m.pth)  \\| [log](https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m_20210430_113839.log.json) |\n| [GGAN 128x128](./ggan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py) | CelebA-Cropped | 9.81, 11.29, 19.22, 47.79/22.03 | 0.3149  | 18.7647 | [model](https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210430_143027-516423dc.pth) \\| [log](https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210423_154258.log.json) |\n| [GGAN 64x64](./ggan_lsgan-archi_lr1e-4-1xb128-20Mimgs_lsun-bedroom-64x64.py) |  LSUN-Bedroom  |      9.1, 6.2, 12.27/9.19       | 0.0649  | 39.9261 | [model](https://download.openmmlab.com/mmediting/ggan/ggan_lsun-bedroom_lsgan_archi_lr-1e-4_64_b128x1_20m_20210430_143114-5d99b76c.pth) \\| [log](https://download.openmmlab.com/mmediting/ggan/ggan_lsun-bedroom_lsgan_archi_lr-1e-4_64_b128x1_20m_20210428_202027.log.json) |\n\nNote: In the original implementation of [GGAN](https://github.com/lim0606/pytorch-geometric-gan), they set `G_iters` to 10. However our framework does not support `G_iters` currently, so we dropped the settings in the original implementation and conducted several experiments with our own settings. We have shown above the experiment results with the lowest `fid` score. \\\nOriginal settings and our settings:\n\n<!-- SKIP THIS TABLE -->\n\n|       Model        |    Dataset     | Architecture | optimizer |  lr_G  |  lr_D  | G_iters | D_iters |\n| :----------------: | :------------: | :----------: | :-------: | :----: | :----: | :-----: | :-----: |\n| GGAN(origin) 64x64 | CelebA-Cropped | dcgan-archi  |  RMSprop  | 0.0002 | 0.0002 |   10    |    1    |\n|  GGAN(ours) 64x64  | CelebA-Cropped | dcgan-archi  |   Adam    | 0.001  | 0.001  |    1    |    1    |\n| GGAN(origin) 64x64 |  LSUN-Bedroom  | dcgan-archi  |  RMSprop  | 0.0002 | 0.0002 |   10    |    1    |\n|  GGAN(ours) 64x64  |  LSUN-Bedroom  | lsgan-archi  |   Adam    | 0.0001 | 0.0001 |    1    |    1    |\n\n## Citation\n\n```latex\n@article{lim2017geometric,\n  title={Geometric gan},\n  author={Lim, Jae Hyun and Ye, Jong Chul},\n  journal={arXiv preprint arXiv:1705.02894},\n  year={2017},\n  url={https://arxiv.org/abs/1705.02894},\n}\n```\n"
  },
  {
    "path": "configs/ggan/ggan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\nmodel = dict(discriminator=dict(output_scale=4, out_channels=1))\n# define dataset\nbatch_size = 128\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0.5, 0.99))))\n\ntrain_cfg = dict(max_iters=100000)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(\n    checkpoint=dict(\n        max_keep_ckpts=20, save_best='FID-Full-50k/fid', rule='less'))\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/ggan/ggan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_128x128.py',\n    '../_base_/datasets/unconditional_imgs_128x128.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nmodel = dict(discriminator=dict(output_scale=4, out_channels=1))\n\n# define dataset\nbatch_size = 64\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))))\n\ntrain_cfg = dict(max_iters=160000)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        max_keep_ckpts=20, save_best='FID-Full-50k/fid', rule='less'))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 128, 128))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/ggan/ggan_lsgan-archi_lr1e-4-1xb128-20Mimgs_lsun-bedroom-64x64.py",
    "content": "_base_ = [\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nmodel = dict(\n    type='GGAN',\n    noise_size=1024,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(type='LSGANGenerator', output_scale=64),\n    discriminator=dict(type='LSGANDiscriminator', input_scale=64))\n\n# define dataset\nbatch_size = 128\ndata_root = 'data/lsun/images/bedroom_train'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))))\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        max_keep_ckpts=20,\n        save_best=['FID-Full-50k/fid', 'swd/avg', 'ms-ssim/avg'],\n        rule=['less', 'less', 'greater']))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\ntrain_cfg = dict(max_iters=160000)\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n\nval_metrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n]\n\nval_evaluator = dict(metrics=val_metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/ggan/metafile.yml",
    "content": "Collections:\n- Name: GGAN\n  Paper:\n    Title: Geometric GAN\n    URL: https://arxiv.org/abs/1705.02894\n  README: configs/ggan/README.md\n  Task:\n  - unconditional gans\n  Year: 2017\nModels:\n- Config: configs/ggan/ggan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py\n  In Collection: GGAN\n  Name: ggan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      FID: 20.1797\n      MS-SSIM: 0.3318\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m.pth\n- Config: configs/ggan/ggan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py\n  In Collection: GGAN\n  Name: ggan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      FID: 18.7647\n      MS-SSIM: 0.3149\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/ggan/ggan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210430_143027-516423dc.pth\n- Config: configs/ggan/ggan_lsgan-archi_lr1e-4-1xb128-20Mimgs_lsun-bedroom-64x64.py\n  In Collection: GGAN\n  Name: ggan_lsgan-archi_lr1e-4-1xb128-20Mimgs_lsun-bedroom-64x64\n  Results:\n  - Dataset: LSUN-Bedroom\n    Metrics:\n      FID: 39.9261\n      MS-SSIM: 0.0649\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/ggan/ggan_lsun-bedroom_lsgan_archi_lr-1e-4_64_b128x1_20m_20210430_143114-5d99b76c.pth\n"
  },
  {
    "path": "configs/glean/README.md",
    "content": "# GLEAN (CVPR'2021)\n\n> [GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution](https://arxiv.org/abs/2012.00739)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe show that pre-trained Generative Adversarial Networks (GANs), e.g., StyleGAN, can be used as a latent bank to improve the restoration quality of large-factor image super-resolution (SR). While most existing SR approaches attempt to generate realistic textures through learning with adversarial loss, our method, Generative LatEnt bANk (GLEAN), goes beyond existing practices by directly leveraging rich and diverse priors encapsulated in a pre-trained GAN. But unlike prevalent GAN inversion methods that require expensive image-specific optimization at runtime, our approach only needs a single forward pass to generate the upscaled image. GLEAN can be easily incorporated in a simple encoder-bank-decoder architecture with multi-resolution skip connections. Switching the bank allows the method to deal with images from diverse categories, e.g., cat, building, human face, and car. Images upscaled by GLEAN show clear improvements in terms of fidelity and texture faithfulness in comparison to existing methods.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144019196-2642f3be-f82e-4fa4-8d96-4161354db9a7.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nFor the meta info used in training and test, please refer to [here](https://github.com/ckkelvinchan/GLEAN). The results are evaluated on RGB channels.\n\n|                                      Model                                       | Dataset  | PSNR  |    Training Resources    |                                      Download                                       |\n| :------------------------------------------------------------------------------: | :------: | :---: | :----------------------: | :---------------------------------------------------------------------------------: |\n|                      [glean_cat_8x](./glean_x8_2xb8_cat.py)                      | LSUN-CAT | 23.98 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614_145540.log.json) |\n|                    [glean_ffhq_16x](./glean_x16_2xb8_ffhq.py)                    |   FFHQ   | 26.91 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/glean/glean_ffhq_16x_20210527-61a3afad.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/glean/glean_ffhq_16x_20210527_194536.log.json) |\n|                     [glean_cat_16x](./glean_x16_2xb8_cat.py)                     | LSUN-CAT | 20.88 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_16x_20210527-68912543.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_16x_20210527_103708.log.json) |\n| [glean_in128out1024_4x2_300k_ffhq_celebahq](./glean_in128out1024_4xb2-300k_ffhq-celeba-hq.py) |   FFHQ   | 27.94 | 4 (Tesla V100-SXM3-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/glean/glean_in128out1024_4x2_300k_ffhq_celebahq_20210812-acbcb04f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/glean/glean_in128out1024_4x2_300k_ffhq_celebahq_20210812_100549.log.json) |\n|                 [glean_fp16_cat_8x](./glean_x8-fp16_2xb8_cat.py)                 | LSUN-CAT |   -   |            -             |                                          -                                          |\n|               [glean_fp16_ffhq_16x](./glean_x16-fp16_2xb8_ffhq.py)               |   FFHQ   |   -   |            -             |                                          -                                          |\n| [glean_fp16_in128out1024_4x2_300k_ffhq_celebahq](./glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq.py) |   FFHQ   |   -   |            -             |                                          -                                          |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/glean/glean_x8_2xb8_cat.py\n\n# single-gpu train\npython tools/train.py configs/glean/glean_x8_2xb8_cat.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/glean/glean_x8_2xb8_cat.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth\n\n# single-gpu test\npython tools/test.py configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{chan2021glean,\n  author = {Chan, Kelvin CK and Wang, Xintao and Xu, Xiangyu and Gu, Jinwei and Loy, Chen Change},\n  title = {GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n"
  },
  {
    "path": "configs/glean/README_zh-CN.md",
    "content": "# GLEAN (CVPR'2021)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">GLEAN (CVPR'2021)</summary>\n\n```bibtex\n@InProceedings{chan2021glean,\n  author = {Chan, Kelvin CK and Wang, Xintao and Xu, Xiangyu and Gu, Jinwei and Loy, Chen Change},\n  title = {GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n\n</details>\n\n<br/>\n\n有关训练和测试中使用的元信息，请参阅[此处](https://github.com/ckkelvinchan/GLEAN)。 结果在 RGB 通道上进行评估。\n\n|                                         算法                                          | PSNR  |         GPU 信息         |                                          下载                                          |\n| :-----------------------------------------------------------------------------------: | :---: | :----------------------: | :------------------------------------------------------------------------------------: |\n|                        [glean_cat_8x](./glean_x8_2xb8_cat.py)                         | 23.98 | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614_145540.log.json) |\n|                      [glean_ffhq_16x](./glean_x16_2xb8_ffhq.py)                       | 26.91 | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/glean/glean_ffhq_16x_20210527-61a3afad.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/glean/glean_ffhq_16x_20210527_194536.log.json) |\n|                       [glean_cat_16x](./glean_x16_2xb8_cat.py)                        | 20.88 | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_16x_20210527-68912543.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_16x_20210527_103708.log.json) |\n| [glean_in128out1024_4x2_300k_ffhq_celebahq](./glean_in128out1024_4xb2-300k_ffhq-celeba-hq.py) | 27.94 | 4 (Tesla V100-SXM3-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/glean/glean_in128out1024_4x2_300k_ffhq_celebahq_20210812-acbcb04f.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/glean/glean_in128out1024_4x2_300k_ffhq_celebahq_20210812_100549.log.json) |\n|                   [glean_fp16_cat_8x](./glean_x8-fp16_2xb8_cat.py)                    |   -   |            -             |                                           -                                            |\n|                 [glean_fp16_ffhq_16x](./glean_x16-fp16_2xb8_ffhq.py)                  |   -   |            -             |                                           -                                            |\n| [glean_fp16_in128out1024_4x2_300k_ffhq_celebahq](./glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq.py) |   -   |            -             |                                           -                                            |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/glean/glean_x8_2xb8_cat.py\n\n# 单个GPU上训练\npython tools/train.py configs/glean/glean_x8_2xb8_cat.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/glean/glean_x8_2xb8_cat.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth\n\n# 单个GPU上测试\npython tools/test.py configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/glean/glean_x8_2xb8_cat.py https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/glean/glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq.py",
    "content": "_base_ = './glean_in128out1024_4xb2-300k_ffhq-celeba-hq.py'\n\nexperiment_name = 'glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    generator=dict(fp16_enabled=True), discriminator=dict(fp16_enabled=True))\n"
  },
  {
    "path": "configs/glean/glean_in128out1024_4xb2-300k_ffhq-celeba-hq.py",
    "content": "_base_ = '../_base_/models/base_glean.py'\n\nexperiment_name = 'glean_in128out1024_4xb2-300k_ffhq-celeba-hq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 8\n# model settings\nmodel = dict(\n    type='SRGAN',\n    generator=dict(\n        type='GLEANStyleGANv2',\n        in_size=128,\n        out_size=1024,\n        style_channels=512,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-ffhq-config-f-official_20210327'\n            '_171224-bce9310c.pth',\n            prefix='generator_ema')),\n    discriminator=dict(\n        type='StyleGANv2Discriminator',\n        in_size=1024,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-ffhq-config-f-official_20210327'\n            '_171224-bce9310c.pth',\n            prefix='discriminator')),\n    pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'21': 1.0},\n        vgg_type='vgg16',\n        perceptual_weight=1e-2,\n        style_weight=0,\n        norm_img=True,\n        criterion='mse',\n        pretrained='torchvision://vgg16'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-2,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ),\n)\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='CopyValues', src_keys=['gt'], dst_keys=['img']),\n    dict(\n        type='RandomBlur',\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['iso', 'aniso'],\n            kernel_prob=[0.5, 0.5],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416],\n        ),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomResize',\n        params=dict(\n            resize_mode_prob=[0, 1, 0],  # up, down, keep\n            resize_scale=[0.03125, 1],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[0, 50],\n            gaussian_gray_noise_prob=0),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[5, 50]),\n        keys=['img']),\n    dict(\n        type='RandomResize',\n        params=dict(\n            target_size=(1024, 1024),\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n        keys=['img'],\n    ),\n    dict(type='Clip', keys=['img']),\n    dict(\n        type='RandomResize',\n        params=dict(\n            target_size=(128, 128), resize_opt=['area'], resize_prob=[1]),\n        keys=['img'],\n    ),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='RandomResize',\n        params=dict(\n            target_size=(128, 128), resize_opt=['area'], resize_prob=[1]),\n        keys=['img'],\n    ),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=6,\n    batch_size=2,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='ffhq_celebahq', task_name='sisr'),\n        data_root='data/FFHQ_CelebAHQ',\n        data_prefix=dict(gt='GT'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='ffhq', task_name='sisr'),\n        data_root='data/CelebA-HQ',\n        data_prefix=dict(img='BIx8_down', gt='GT'),\n        ann_file='meta_info_CelebAHQ_val100_GT.txt',\n        pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/glean/glean_x16-fp16_2xb8_ffhq.py",
    "content": "_base_ = './glean_x16_2xb8_ffhq.py'\n\nexperiment_name = 'glean_x16-fp16_2xb8_ffhq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    generator=dict(fp16_enabled=True), discriminator=dict(fp16_enabled=True))\n"
  },
  {
    "path": "configs/glean/glean_x16_2xb8_cat.py",
    "content": "_base_ = '../_base_/models/base_glean.py'\n\nexperiment_name = 'glean_x16_2xb8_cat'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 16\n# model settings\nmodel = dict(\n    type='SRGAN',\n    generator=dict(\n        type='GLEANStyleGANv2',\n        in_size=16,\n        out_size=256,\n        style_channels=512,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-cat-config-f-official_20210327'\n            '_172444-15bc485b.pth',\n            prefix='generator_ema')),\n    discriminator=dict(\n        type='StyleGANv2Discriminator',\n        in_size=256,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-cat-config-f-official_20210327'\n            '_172444-15bc485b.pth',\n            prefix='discriminator')),\n    pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'21': 1.0},\n        vgg_type='vgg16',\n        perceptual_weight=1e-2,\n        style_weight=0,\n        norm_img=False,\n        criterion='mse',\n        pretrained='torchvision://vgg16'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-2,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ),\n)\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(type='PackInputs')\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cat', task_name='sisr'),\n        data_root='data/cat_train',\n        data_prefix=dict(img='BIx16_down', gt='GT'),\n        ann_file='meta_info_LSUNcat_GT.txt',\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cat', task_name='sisr'),\n        data_root='data/cat_test',\n        data_prefix=dict(img='BIx16_down', gt='GT'),\n        ann_file='meta_info_Cat100_GT.txt',\n        pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/glean/glean_x16_2xb8_ffhq.py",
    "content": "_base_ = '../_base_/models/base_glean.py'\n\nexperiment_name = 'glean_x16_2xb8_ffhq'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 16\n# model settings\nmodel = dict(\n    type='SRGAN',\n    generator=dict(\n        type='GLEANStyleGANv2',\n        in_size=64,\n        out_size=1024,\n        style_channels=512,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-ffhq-config-f-official_20210327'\n            '_171224-bce9310c.pth',\n            prefix='generator_ema')),\n    discriminator=dict(\n        type='StyleGANv2Discriminator',\n        in_size=1024,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-ffhq-config-f-official_20210327'\n            '_171224-bce9310c.pth',\n            prefix='discriminator')),\n    pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'21': 1.0},\n        vgg_type='vgg16',\n        perceptual_weight=1e-2,\n        style_weight=0,\n        norm_img=False,\n        criterion='mse',\n        pretrained='torchvision://vgg16'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-2,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ),\n)\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(type='PackInputs')\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='ffhq', task_name='sisr'),\n        data_root='data/ffhq',\n        data_prefix=dict(img='BIx16_down', gt='images'),\n        ann_file='meta_info_FFHQ_GT.txt',\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='ffhq', task_name='sisr'),\n        data_root='data/CelebA-HQ',\n        data_prefix=dict(img='BIx16_down', gt='GT'),\n        ann_file='meta_info_CelebAHQ_val100_GT.txt',\n        pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/glean/glean_x8-fp16_2xb8_cat.py",
    "content": "_base_ = './glean_x8_2xb8_cat.py'\n\nexperiment_name = 'glean_x8-fp16_2xb8_cat'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    generator=dict(fp16_enabled=True), discriminator=dict(fp16_enabled=True))\n"
  },
  {
    "path": "configs/glean/glean_x8_2xb8_cat.py",
    "content": "_base_ = '../_base_/models/base_glean.py'\n\nexperiment_name = 'glean_x8_2xb8_cat'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\nscale = 8\n# model settings\nmodel = dict(\n    type='SRGAN',\n    generator=dict(\n        type='GLEANStyleGANv2',\n        in_size=32,\n        out_size=256,\n        style_channels=512,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-cat-config-f-official_20210327'\n            '_172444-15bc485b.pth',\n            prefix='generator_ema')),\n    discriminator=dict(\n        type='StyleGANv2Discriminator',\n        in_size=256,\n        init_cfg=dict(\n            type='Pretrained',\n            checkpoint='http://download.openmmlab.com/mmediting/stylegan2/'\n            'official_weights/stylegan2-cat-config-f-official_20210327'\n            '_172444-15bc485b.pth',\n            prefix='discriminator')),\n    pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'21': 1.0},\n        vgg_type='vgg16',\n        perceptual_weight=1e-2,\n        style_weight=0,\n        norm_img=False,\n        criterion='mse',\n        pretrained='torchvision://vgg16'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-2,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ),\n)\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(type='PackInputs')\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ninference_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='Resize',\n        scale=(32, 32),\n        keys=['img'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cat', task_name='sisr'),\n        data_root='data/cat_train',\n        data_prefix=dict(img='BIx8_down', gt='GT'),\n        ann_file='meta_info_LSUNcat_GT.txt',\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cat', task_name='sisr'),\n        data_root='data/cat_test',\n        data_prefix=dict(img='BIx8_down', gt='GT'),\n        ann_file='meta_info_Cat100_GT.txt',\n        pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/glean/metafile.yml",
    "content": "Collections:\n- Name: GLEAN\n  Paper:\n    Title: 'GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution'\n    URL: https://arxiv.org/abs/2012.00739\n  README: configs/glean/README.md\n  Task:\n  - image super-resolution\n  Year: 2021\nModels:\n- Config: configs/glean/glean_x8_2xb8_cat.py\n  In Collection: GLEAN\n  Name: glean_x8_2xb8_cat\n  Results:\n  - Dataset: LSUN-CAT\n    Metrics:\n      PSNR: 23.98\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_8x_20210614-d3ac8683.pth\n- Config: configs/glean/glean_x16_2xb8_ffhq.py\n  In Collection: GLEAN\n  Name: glean_x16_2xb8_ffhq\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      PSNR: 26.91\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/glean/glean_ffhq_16x_20210527-61a3afad.pth\n- Config: configs/glean/glean_x16_2xb8_cat.py\n  In Collection: GLEAN\n  Name: glean_x16_2xb8_cat\n  Results:\n  - Dataset: LSUN-CAT\n    Metrics:\n      PSNR: 20.88\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/glean/glean_cat_16x_20210527-68912543.pth\n- Config: configs/glean/glean_in128out1024_4xb2-300k_ffhq-celeba-hq.py\n  In Collection: GLEAN\n  Name: glean_in128out1024_4xb2-300k_ffhq-celeba-hq\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      PSNR: 27.94\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/glean/glean_in128out1024_4x2_300k_ffhq_celebahq_20210812-acbcb04f.pth\n- Config: configs/glean/glean_x8-fp16_2xb8_cat.py\n  In Collection: GLEAN\n  Name: glean_x8-fp16_2xb8_cat\n  Results:\n  - Dataset: LSUN-CAT\n    Metrics: {}\n    Task: Image Super-Resolution\n- Config: configs/glean/glean_x16-fp16_2xb8_ffhq.py\n  In Collection: GLEAN\n  Name: glean_x16-fp16_2xb8_ffhq\n  Results:\n  - Dataset: FFHQ\n    Metrics: {}\n    Task: Image Super-Resolution\n- Config: configs/glean/glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq.py\n  In Collection: GLEAN\n  Name: glean_in128out1024-fp16_4xb2-300k_ffhq-celeba-hq\n  Results:\n  - Dataset: FFHQ\n    Metrics: {}\n    Task: Image Super-Resolution\n"
  },
  {
    "path": "configs/global_local/README.md",
    "content": "# Global&Local (ToG'2017)\n\n> [Globally and Locally Consistent Image Completion](http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf)\n\n> **Task**: Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe present a novel approach for image completion that results in images that are both locally and globally consistent. With a fully-convolutional neural network, we can complete images of arbitrary resolutions by flling in missing regions of any shape. To train this image completion network to be consistent, we use global and local context discriminators that are trained to distinguish real images from completed ones. The global discriminator looks at the entire image to assess if it is coherent as a whole, while the local discriminator looks only at a small area centered at the completed region to ensure the local consistency of the generated patches. The image completion network is then trained to fool the both context discriminator networks, which requires it to generate images that are indistinguishable from real ones with regard to overall consistency as well as in details. We show that our approach can be used to complete a wide variety of scenes. Furthermore, in contrast with the patch-based approaches such as PatchMatch, our approach can generate fragments that do not appear elsewhere in the image, which allows us to naturally complete the image.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144175196-51dfda11-f7e1-4c7e-abed-42799f757bef.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n*Note that we do not apply the post-processing module in Global&Local for a fair comparison with current deep inpainting methods.*\n\n|                    Model                     |       Dataset       |  Mask Type  | Resolution | Train Iters |   Test Set    | l1 error |  PSNR  | SSIM  | Training Resources |                        Download                         |\n| :------------------------------------------: | :-----------------: | :---------: | :--------: | :---------: | :-----------: | :------: | :----: | :---: | :----------------: | :-----------------------------------------------------: |\n| [Global&Local](./gl_8xb12_places-256x256.py) | Places365-Challenge | square bbox |  256x256   |    500k     | Places365-val |  11.164  | 23.152 | 0.862 |         8          | [model](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.log.json) |\n| [Global&Local](./gl_8xb12_celeba-256x256.py) |      CelebA-HQ      | square bbox |  256x256   |    500k     |  CelebA-val   |  6.678   | 26.780 | 0.904 |         8          | [model](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/global_local/gl_8xb12_places-256x256.py\n\n# single-gpu train\npython tools/train.py configs/global_local/gl_8xb12_places-256x256.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/global_local/gl_8xb12_places-256x256.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth\n\n# single-gpu test\npython tools/test.py configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{iizuka2017globally,\n  title={Globally and locally consistent image completion},\n  author={Iizuka, Satoshi and Simo-Serra, Edgar and Ishikawa, Hiroshi},\n  journal={ACM Transactions on Graphics (ToG)},\n  volume={36},\n  number={4},\n  pages={1--14},\n  year={2017},\n  publisher={ACM New York, NY, USA}\n}\n```\n"
  },
  {
    "path": "configs/global_local/README_zh-CN.md",
    "content": "# Global&Local (ToG'2017)\n\n> **任务**: 图像修复\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">Global&Local (ToG'2017)</summary>\n\n```bibtex\n@article{iizuka2017globally,\n  title={Globally and locally consistent image completion},\n  author={Iizuka, Satoshi and Simo-Serra, Edgar and Ishikawa, Hiroshi},\n  journal={ACM Transactions on Graphics (ToG)},\n  volume={36},\n  number={4},\n  pages={1--14},\n  year={2017},\n  publisher={ACM New York, NY, USA}\n}\n```\n\n</details>\n\n<br/>\n\n*请注意，为了与当前的深度图像修复方法进行公平比较，我们没有在 Global&Local 中使用后处理模块。*\n\n**Places365-Challenge**\n\n|                     算法                     |  掩膜类型   | 分辨率  | 训练集容量 |    测试集     | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                           下载                                            |\n| :------------------------------------------: | :---------: | :-----: | :--------: | :-----------: | :-----: | :----: | :---: | :------: | :---------------------------------------------------------------------------------------: |\n| [Global&Local](./gl_8xb12_places-256x256.py) | square bbox | 256x256 |    500k    | Places365-val | 11.164  | 23.152 | 0.862 |    8     | [模型](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.log.json) |\n\n**CelebA-HQ**\n\n|                     算法                     |  掩膜类型   | 分辨率  | 训练集容量 |   测试集   | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                             下载                                             |\n| :------------------------------------------: | :---------: | :-----: | :--------: | :--------: | :-----: | :----: | :---: | :------: | :------------------------------------------------------------------------------------------: |\n| [Global&Local](./gl_8xb12_celeba-256x256.py) | square bbox | 256x256 |    500k    | CelebA-val |  6.678  | 26.780 | 0.904 |    8     | [模型](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/global_local/gl_8xb12_places-256x256.py\n\n# 单个GPU上训练\npython tools/train.py configs/global_local/gl_8xb12_places-256x256.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/global_local/gl_8xb12_places-256x256.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth\n\n# 单个GPU上测试\npython tools/test.py configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/global_local/gl_8xb12_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/global_local/gl_8xb12_celeba-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_gl.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/celeba.py'\n]\n\nexperiment_name = 'gl_8xb12_celeba-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=1,\n        iter_tc=40000,\n        iter_td=50000,\n        start_iter=0,\n        local_size=(128, 128)), )\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='bbox',\n        mask_config=dict(\n            max_bbox_shape=(128, 128),\n            max_bbox_delta=40,\n            min_margin=20,\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=12,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=300002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# runtime settings\n# inheritate from _base_\n"
  },
  {
    "path": "configs/global_local/gl_8xb12_places-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_gl.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/places.py'\n]\n\nexperiment_name = 'gl_8xb12_places-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=1,\n        iter_tc=90000,\n        iter_td=100000,\n        start_iter=350000,\n        local_size=(128, 128)), )\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='bbox',\n        mask_config=dict(\n            max_bbox_shape=(128, 128),\n            max_bbox_delta=40,\n            min_margin=20,\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=12,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=500002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# runtime settings\n# inheritate from _base_\n"
  },
  {
    "path": "configs/global_local/metafile.yml",
    "content": "Collections:\n- Name: Global&Local\n  Paper:\n    Title: Globally and Locally Consistent Image Completion\n    URL: http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf\n  README: configs/global_local/README.md\n  Task:\n  - inpainting\n  Year: 2017\nModels:\n- Config: configs/global_local/gl_8xb12_places-256x256.py\n  In Collection: Global&Local\n  Name: gl_8xb12_places-256x256\n  Results:\n  - Dataset: Places365-Challenge\n    Metrics:\n      PSNR: 23.152\n      SSIM: 0.862\n      l1 error: 11.164\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_places_20200619-52a040a8.pth\n- Config: configs/global_local/gl_8xb12_celeba-256x256.py\n  In Collection: Global&Local\n  Name: gl_8xb12_celeba-256x256\n  Results:\n  - Dataset: CelebA-HQ\n    Metrics:\n      PSNR: 26.78\n      SSIM: 0.904\n      l1 error: 6.678\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.pth\n"
  },
  {
    "path": "configs/guided_diffusion/README.md",
    "content": "# Guided Diffusion (NeurIPS'2021)\n\n> [Diffusion Models Beat GANs on Image Synthesis](https://papers.nips.cc/paper/2021/file/49ad23d1ec9fa4bd8d77d02681df5cfa-Paper.pdf)\n\n> **Task**: Image Generation\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe show that diffusion models can achieve image sample quality superior to the current state-of-the-art generative models. We achieve this on unconditional image synthesis by finding a better architecture through a series of ablations. For conditional image synthesis, we further improve sample quality with classifier guidance: a simple, compute-efficient method for trading off diversity for fidelity using gradients from a classifier. We achieve an FID of 2.97 on ImageNet 128x128, 4.59 on ImageNet 256x256, and 7.72 on ImageNet 512x512, and we match BigGAN-deep even with as few as 25 forward passes per sample, all while maintaining better coverage of the distribution. Finally, we find that classifier guidance combines well with upsampling diffusion models, further improving FID to 3.94 on ImageNet 256x256 and 3.85 on ImageNet 512x512.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/22982797/204706276-e340c545-3ec6-48bf-be21-58ed44e8a4df.jpg\" width=\"400\"/>\n</div >\n\n## Results and models\n\n<div align=\"center\">\n  <b>hamster, classifier-guidance samplings with CGS=1.0</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/212831070-470034df-0a9f-4a75-8ab8-97d39bc1806c.png\" width=\"400\"/>\n</div>\n\n**ImageNet**\n\n|                               Model                                |     Dataset      | Scheduler | Steps | CGS | Time Consuming(A100) | FID-Full-50K |                               Download                                |\n| :----------------------------------------------------------------: | :--------------: | :-------: | :---: | :-: | :------------------: | :----------: | :-------------------------------------------------------------------: |\n| [adm_ddim250_8xb32_imagenet-64x64](./adm_ddim250_8xb32_imagenet-64x64.py) |  ImageNet 64x64  |   DDIM    |  250  |  -  |          1h          |    3.2284    | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth) |\n| [adm-g_ddim25_8xb32_imagenet-64x64](configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-64x64.py) |  ImageNet 64x64  |   DDIM    |  25   | 1.0 |          2h          |    3.7566    | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-64x64-2c0fbeda.pth) |\n| [adm_ddim250_8xb32_imagenet-256x256](configs/guided_diffusion/adm_ddim250_8xb32_imagenet-256x256.py) | ImageNet 256x256 |   DDIM    |  250  |  -  |          -           |      -       | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm_8xb32_imagenet-256x256-f94735fe.pth) |\n| [adm-g_ddim25_8xb32_imagenet-256x256](configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-256x256.py) | ImageNet 256x256 |   DDIM    |  25   | 1.0 |          -           |      -       | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-256x256-aec3fc9f.pth) |\n| [adm_ddim250_8xb32_imagenet-512x512](configs/guided_diffusion/adm_ddim250_8xb32_imagenet-512x512.py) | ImageNet 512x512 |   DDIM    |  250  |  -  |          -           |      -       | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm-u_8xb32_imagenet-512x512-60b381cb.pth) |\n| [adm-g_ddim25_8xb32_imagenet-512x512](configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-512x512.py) | ImageNet 512x512 |   DDIM    |  25   | 1.0 |          -           |      -       | [ckpt](https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-512x512-23cf0b58.pth) |\n\n## Quick Start\n\n**infer**\n\n<details>\n<summary>Infer Instructions</summary>\n\nYou can run adm as follows:\n\n```python\nfrom mmengine import Config, MODELS\nfrom mmengine.registry import init_default_scope\nfrom torchvision.utils import save_image\n\ninit_default_scope('mmagic')\n\n# sampling without classifier guidance, CGS=1.0\nconfig = 'configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-64x64.py'\nckpt_path = 'https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-64x64-2c0fbeda.pth'  # noqa\n\nmodel_cfg = Config.fromfile(config).model\nmodel_cfg.pretrained_cfgs = dict(unet=dict(ckpt_path=ckpt_path, prefix='unet'),\n                                 classifier=dict(ckpt_path=ckpt_path, prefix='classifier'))\nmodel = MODELS.build(model_cfg).cuda().eval()\n\nsamples = model.infer(\n            init_image=None,\n            batch_size=4,\n            num_inference_steps=25,\n            labels=333,\n            classifier_scale=1.0,\n            show_progress=True)['samples']\n\n# sampling without classifier guidance\nconfig = 'configs/guided_diffusion/adm_ddim250_8xb32_imagenet-64x64.py'\nckpt_path = 'https://download.openmmlab.com/mmediting/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth'  # noqa\n\nmodel_cfg = Config.fromfile(config).model\nmodel_cfg.pretrained_cfgs = dict(unet=dict(ckpt_path=ckpt_path, prefix='unet'))\nmodel = MODELS.build(model_cfg).cuda().eval()\n\nsamples = model.infer(\n            init_image=None,\n            batch_size=4,\n            num_inference_steps=250,\n            labels=None,\n            classifier_scale=0.0,\n            show_progress=True)['samples']\n```\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/guided_diffusion/adm-u_ddim250_8xb32_imagenet-64x64.py https://download.openmmlab.com/mmgen/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth\n\n# single-gpu test\npython tools/test.py configs/guided_diffusion/adm-u_ddim250_8xb32_imagenet-64x64.py https://download.openmmlab.com/mmgen/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/guided_diffusion/adm-u_ddim250_8xb32_imagenet-64x64.py https://download.openmmlab.com/mmgen/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{PrafullaDhariwal2021DiffusionMB,\n  title={Diffusion Models Beat GANs on Image Synthesis},\n  author={Prafulla Dhariwal and Alex Nichol},\n  journal={arXiv: Learning},\n  year={2021}\n}\n```\n"
  },
  {
    "path": "configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-256x256.py",
    "content": "_base_ = ['./adm_ddim250_8xb32_imagenet-256x256.py']\n\nmodel = dict(\n    classifier=dict(\n        type='EncoderUNetModel',\n        image_size=256,\n        in_channels=3,\n        model_channels=128,\n        out_channels=1000,\n        num_res_blocks=2,\n        attention_resolutions=(8, 16, 32),\n        channel_mult=(1, 1, 2, 2, 4, 4),\n        use_fp16=False,\n        num_head_channels=64,\n        use_scale_shift_norm=True,\n        resblock_updown=True,\n        pool='attention'))\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-512x512.py",
    "content": "_base_ = ['./adm_ddim250_8xb32_imagenet-512x512.py']\n\nmodel = dict(\n    classifier=dict(\n        type='EncoderUNetModel',\n        image_size=512,\n        in_channels=3,\n        model_channels=128,\n        out_channels=1000,\n        num_res_blocks=2,\n        attention_resolutions=(16, 32, 64),\n        channel_mult=(0.5, 1, 1, 2, 2, 4, 4),\n        use_fp16=False,\n        num_head_channels=64,\n        use_scale_shift_norm=True,\n        resblock_updown=True,\n        pool='attention'))\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-64x64.py",
    "content": "_base_ = ['./adm_ddim250_8xb32_imagenet-64x64.py']\n\nmodel = dict(\n    classifier=dict(\n        type='EncoderUNetModel',\n        image_size=64,\n        in_channels=3,\n        model_channels=128,\n        out_channels=1000,\n        num_res_blocks=4,\n        attention_resolutions=(2, 4, 8),\n        channel_mult=(1, 2, 3, 4),\n        use_fp16=False,\n        num_head_channels=64,\n        use_scale_shift_norm=True,\n        resblock_updown=True,\n        pool='attention'))\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/guided_diffusion/adm_ddim250_8xb32_imagenet-256x256.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_64.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nmodel = dict(\n    type='AblatedDiffusionModel',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    unet=dict(\n        type='DenoisingUnet',\n        image_size=256,\n        in_channels=3,\n        base_channels=256,\n        resblocks_per_downsample=2,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type='MultiHeadAttentionBlock',\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=False),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='linear'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader = dict(batch_size=32, num_workers=8)\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(type='VisualizationHook', interval=5000, fixed_input=True)\n]\n"
  },
  {
    "path": "configs/guided_diffusion/adm_ddim250_8xb32_imagenet-512x512.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_512.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nmodel = dict(\n    type='AblatedDiffusionModel',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    unet=dict(\n        type='DenoisingUnet',\n        image_size=512,\n        in_channels=3,\n        base_channels=256,\n        resblocks_per_downsample=2,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type='MultiHeadAttentionBlock',\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=False),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='linear'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader = dict(batch_size=32, num_workers=8)\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/guided_diffusion/adm_ddim250_8xb32_imagenet-64x64.py",
    "content": "_base_ = [\n    '../_base_/datasets/imagenet_64.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nmodel = dict(\n    type='AblatedDiffusionModel',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    unet=dict(\n        type='DenoisingUnet',\n        image_size=64,\n        in_channels=3,\n        base_channels=192,\n        resblocks_per_downsample=3,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type='MultiHeadAttentionBlock',\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=True),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='squaredcos_cap_v2'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader = dict(batch_size=32, num_workers=8)\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/guided_diffusion/metafile.yml",
    "content": "Collections:\n- Name: Guided Diffusion\n  Paper:\n    Title: Diffusion Models Beat GANs on Image Synthesis\n    URL: https://papers.nips.cc/paper/2021/file/49ad23d1ec9fa4bd8d77d02681df5cfa-Paper.pdf\n  README: configs/guided_diffusion/README.md\n  Task:\n  - image generation\n  Year: 2021\nModels:\n- Config: configs/guided_diffusion/adm_ddim250_8xb32_imagenet-64x64.py\n  In Collection: Guided Diffusion\n  Name: adm_ddim250_8xb32_imagenet-64x64\n  Results:\n  - Dataset: ImageNet64x64\n    Metrics:\n      FID-Full-50K: 3.2284\n      Steps: 250.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm-u-cvt-rgb_8xb32_imagenet-64x64-7ff0080b.pth\n- Config: configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-64x64.py\n  In Collection: Guided Diffusion\n  Name: adm-g_ddim25_8xb32_imagenet-64x64\n  Results:\n  - Dataset: ImageNet64x64\n    Metrics:\n      CGS: 1.0\n      FID-Full-50K: 3.7566\n      Steps: 25.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-64x64-2c0fbeda.pth\n- Config: configs/guided_diffusion/adm_ddim250_8xb32_imagenet-256x256.py\n  In Collection: Guided Diffusion\n  Name: adm_ddim250_8xb32_imagenet-256x256\n  Results:\n  - Dataset: ImageNet256x256\n    Metrics:\n      Steps: 250.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm_8xb32_imagenet-256x256-f94735fe.pth\n- Config: configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-256x256.py\n  In Collection: Guided Diffusion\n  Name: adm-g_ddim25_8xb32_imagenet-256x256\n  Results:\n  - Dataset: ImageNet256x256\n    Metrics:\n      CGS: 1.0\n      Steps: 25.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-256x256-aec3fc9f.pth\n- Config: configs/guided_diffusion/adm_ddim250_8xb32_imagenet-512x512.py\n  In Collection: Guided Diffusion\n  Name: adm_ddim250_8xb32_imagenet-512x512\n  Results:\n  - Dataset: ImageNet512x512\n    Metrics:\n      Steps: 250.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm-u_8xb32_imagenet-512x512-60b381cb.pth\n- Config: configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet-512x512.py\n  In Collection: Guided Diffusion\n  Name: adm-g_ddim25_8xb32_imagenet-512x512\n  Results:\n  - Dataset: ImageNet512x512\n    Metrics:\n      CGS: 1.0\n      Steps: 25.0\n    Task: Image Generation\n  Weights: https://download.openmmlab.com/mmediting/guided_diffusion/adm-g_8xb32_imagenet-512x512-23cf0b58.pth\n"
  },
  {
    "path": "configs/iconvsr/README.md",
    "content": "# IconVSR (CVPR'2021)\n\n> [BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond](https://arxiv.org/abs/2012.02181)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nVideo super-resolution (VSR) approaches tend to have more components than the image counterparts as they need to exploit the additional temporal dimension. Complex designs are not uncommon. In this study, we wish to untangle the knots and reconsider some most essential components for VSR guided by four basic functionalities, i.e., Propagation, Alignment, Aggregation, and Upsampling. By reusing some existing components added with minimal redesigns, we show a succinct pipeline, BasicVSR, that achieves appealing improvements in terms of speed and restoration quality in comparison to many state-of-the-art algorithms. We conduct systematic analysis to explain how such gain can be obtained and discuss the pitfalls. We further show the extensibility of BasicVSR by presenting an information-refill mechanism and a coupled propagation scheme to facilitate information aggregation. The BasicVSR and its extension, IconVSR, can serve as strong baselines for future VSR approaches.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144011348-c58101d4-5f69-4e58-be2b-7accd07b06fa.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels for REDS4 and Y channel for others. The metrics are `PSNR` / `SSIM` .\nThe pretrained weights of the IconVSR components can be found here: [SPyNet](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth), [EDVR-M for REDS](https://download.openmmlab.com/mmediting/restorers/iconvsr/edvrm_reds_20210413-3867262f.pth), and [EDVR-M for Vimeo-90K](https://download.openmmlab.com/mmediting/restorers/iconvsr/edvrm_vimeo90k_20210413-e40e99a8.pth).\n\n|       Model       | Dataset |  PSNR (RGB) | SSIM (RGB) |  PSNR (Y) | SSIM (Y) |   Training Resources    |       Download        |\n| :---------------: | :---------------------: | :-------------------------: | :------------------: | :-------------------: | :-------------------------: | :------------------: | :----------------------: | :-------------------: |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | REDS4 (BIx4) | **31.6926** | **0.8951**  |-|-| 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | UDM10 (BDx4)   | -|-|35.3377| 0.9471| 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | Vid4 (BIx4)   | -|-|**27.4809**| **0.8354** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | Vid4 (BDx4)   | -|-|  25.2110  |  0.7732 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | Vimeo-90K-T (BIx4)   | -|-|36.4983  | 0.9416  | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) | Vimeo-90K-T (BDx4)   | -|-| 34.4299 | 0.9287   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) | REDS4 (BIx4) | 30.3452 |0.8659 |-|-| 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) | UDM10 (BDx4)   |-|-|34.2595 |0.9398 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) |  Vid4 (BIx4)   |-|-|27.4238  |0.8297   | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) | Vid4 (BDx4)   |-|-|24.6666|0.7491 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) | Vimeo-90K-T (BIx4)   |-|-|**37.3729**| **0.9467** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) | Vimeo-90K-T (BDx4)   |-|-|34.5548 | 0.9295 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | REDS4 (BIx4) |29.0150 | 0.8465 |-|-| 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | UDM10 (BDx4)   |-|-| **40.0640** | **0.9697** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | Vid4 (BIx4)   |-|-|26.3109| 0.8028 | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | Vid4 (BDx4)   | -|-|   **28.2464** | **0.8612** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | Vimeo-90K-T (BIx4)   | -|-|34.6780| 0.9339| 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) | Vimeo-90K-T (BDx4)   |-|-|**37.7573** | **0.9517** | 2 (Tesla V100-PCIE-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) | [log](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/iconvsr/iconvsr_2xb4_reds4.py\n\n# single-gpu train\npython tools/train.py configs/iconvsr/iconvsr_2xb4_reds4.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/iconvsr/iconvsr_2xb4_reds4.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth\n\n# single-gpu test\npython tools/test.py configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{chan2021basicvsr,\n  author = {Chan, Kelvin CK and Wang, Xintao and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title = {BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n"
  },
  {
    "path": "configs/iconvsr/README_zh-CN.md",
    "content": "# IconVSR (CVPR'2021)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">IconVSR (CVPR'2021)</summary>\n\n```bibtex\n@InProceedings{chan2021basicvsr,\n  author = {Chan, Kelvin CK and Wang, Xintao and Yu, Ke and Dong, Chao and Loy, Chen Change},\n  title = {BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n\n</details>\n\n<br/>\n\n对于 REDS4，我们对 RGB 通道进行评估。对于其他数据集，我们对 Y 通道进行评估。我们使用 `PSNR` 和 `SSIM` 作为指标。\nIconVSR 组件的预训练权重可以在这里找到：[SPyNet](https://download.openmmlab.com/mmediting/restorers/basicvsr/spynet_20210409-c6c1bd09.pth)，[用于 REDS 的 EDVR-M](https://download.openmmlab.com/mmediting/restorers/iconvsr/edvrm_reds_20210413-3867262f.pth)，以及 [用于 Vimeo-90K 的 EDVR-M](https://download.openmmlab.com/mmediting/restorers/iconvsr/edvrm_vimeo90k_20210413-e40e99a8.pth)。\n\n| 算法 | REDS4 (BIx4)<br>PSNR/SSIM (RGB) | Vimeo-90K-T (BIx4)<br>PSNR/SSIM (Y) | Vid4 (BIx4)<br>PSNR/SSIM (Y) | UDM10 (BDx4)<br>PSNR/SSIM (Y) | Vimeo-90K-T (BDx4)<br>PSNR/SSIM (Y) | Vid4 (BDx4)<br>PSNR/SSIM (Y) | GPU 信息 | 下载 |\n| :-: | :-----------------------------: | :---------------------------------: | :--------------------------: | :---------------------------: | :---------------------------------: | :--------------------------: | :-----: | :--: |\n| [iconvsr_reds4](./iconvsr_2xb4_reds4.py) |       **31.6926/0.8951**        |           36.4983/0.9416            |      **27.4809/0.8354**      |        35.3377/0.9471         |           34.4299/0.9287            |        25.2110/0.7732        | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413_222735.log.json) |\n| [iconvsr_vimeo90k_bi](./iconvsr_2xb4_vimeo90k-bi.py) |         30.3452/0.8659          |         **37.3729/0.9467**          |        27.4238/0.8297        |        34.2595/0.9398         |           34.5548/0.9295            |        24.6666/0.7491        | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413_222757.log.json) |\n| [iconvsr_vimeo90k_bd](./iconvsr_2xb4_vimeo90k-bd.py) |         29.0150/0.8465          |           34.6780/0.9339            |        26.3109/0.8028        |      **40.0640/0.9697**       |         **37.7573/0.9517**          |      **28.2464/0.8612**      | 2 (Tesla V100-PCIE-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414_084128.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/iconvsr/iconvsr_2xb4_reds4.py\n\n# 单个GPU上训练\npython tools/train.py configs/iconvsr/iconvsr_2xb4_reds4.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/iconvsr/iconvsr_2xb4_reds4.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth\n\n# 单个GPU上测试\npython tools/test.py configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/iconvsr/iconvsr_2xb4_reds4.py https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/iconvsr/iconvsr_2xb4_reds4.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_reds4.py'\n\nexperiment_name = 'iconvsr_2xb4_reds4'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='IconVSRNet',\n        mid_channels=64,\n        num_blocks=30,\n        keyframe_stride=5,\n        padding=2,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        edvr_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'iconvsr/edvrm_reds_20210413-3867262f.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\n"
  },
  {
    "path": "configs/iconvsr/iconvsr_2xb4_vimeo90k-bd.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_vimeo90k-bd.py'\n\nexperiment_name = 'iconvsr_2xb4_vimeo90k-bd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='IconVSRNet',\n        mid_channels=64,\n        num_blocks=30,\n        keyframe_stride=5,\n        padding=3,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        edvr_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'iconvsr/edvrm_vimeo90k_20210413-e40e99a8.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\n\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/iconvsr/iconvsr_2xb4_vimeo90k-bi.py",
    "content": "_base_ = '../basicvsr/basicvsr_2xb4_vimeo90k-bi.py'\n\nscale = 4\nexperiment_name = 'iconvsr_2xb4_vimeo90k-bi'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BasicVSR',\n    generator=dict(\n        type='IconVSRNet',\n        mid_channels=64,\n        num_blocks=30,\n        keyframe_stride=5,\n        padding=3,\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        edvr_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'iconvsr/edvrm_vimeo90k_20210413-e40e99a8.pth'),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(fix_iter=5000),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ndefault_hooks = dict(checkpoint=dict(out_dir=save_dir))\nfind_unused_parameters = True\n"
  },
  {
    "path": "configs/iconvsr/metafile.yml",
    "content": "Collections:\n- Name: IconVSR\n  Paper:\n    Title: 'BasicVSR: The Search for Essential Components in Video Super-Resolution\n      and Beyond'\n    URL: https://arxiv.org/abs/2012.02181\n  README: configs/iconvsr/README.md\n  Task:\n  - video super-resolution\n  Year: 2021\nModels:\n- Config: configs/iconvsr/iconvsr_2xb4_reds4.py\n  In Collection: IconVSR\n  Name: iconvsr_2xb4_reds4\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 31.6926\n      SSIM (RGB): 0.8951\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 35.3377\n      SSIM (Y): 0.9471\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.4809\n      SSIM (Y): 0.8354\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 25.211\n      SSIM (Y): 0.7732\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 36.4983\n      SSIM (Y): 0.9416\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 34.4299\n      SSIM (Y): 0.9287\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_reds4_20210413-9e09d621.pth\n- Config: configs/iconvsr/iconvsr_2xb4_vimeo90k-bi.py\n  In Collection: IconVSR\n  Name: iconvsr_2xb4_vimeo90k-bi\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 30.3452\n      SSIM (RGB): 0.8659\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 34.2595\n      SSIM (Y): 0.9398\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 27.4238\n      SSIM (Y): 0.8297\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 24.6666\n      SSIM (Y): 0.7491\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 37.3729\n      SSIM (Y): 0.9467\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 34.5548\n      SSIM (Y): 0.9295\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bi_20210413-7c7418dc.pth\n- Config: configs/iconvsr/iconvsr_2xb4_vimeo90k-bd.py\n  In Collection: IconVSR\n  Name: iconvsr_2xb4_vimeo90k-bd\n  Results:\n  - Dataset: REDS4(BIx4)\n    Metrics:\n      PSNR (RGB): 29.015\n      SSIM (RGB): 0.8465\n    Task: Video Super-Resolution\n  - Dataset: UDM10(BDx4)\n    Metrics:\n      PSNR (Y): 40.064\n      SSIM (Y): 0.9697\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 26.3109\n      SSIM (Y): 0.8028\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 28.2464\n      SSIM (Y): 0.8612\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BIx4)\n    Metrics:\n      PSNR (Y): 34.678\n      SSIM (Y): 0.9339\n    Task: Video Super-Resolution\n  - Dataset: Vimeo-90K-T(BDx4)\n    Metrics:\n      PSNR (Y): 37.7573\n      SSIM (Y): 0.9517\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/iconvsr/iconvsr_vimeo90k_bd_20210414-5f38cb34.pth\n"
  },
  {
    "path": "configs/indexnet/README.md",
    "content": "# IndexNet (ICCV'2019)\n\n> [Indices Matter: Learning to Index for Deep Image Matting](https://arxiv.org/abs/1908.00672)\n\n> **Task**: Matting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe show that existing upsampling operators can be unified with the notion of the index function. This notion is inspired by an observation in the decoding process of deep image matting where indices-guided unpooling can recover boundary details much better than other upsampling operators such as bilinear interpolation. By looking at the indices as a function of the feature map, we introduce the concept of learning to index, and present a novel index-guided encoder-decoder framework where indices are self-learned adaptively from data and are used to guide the pooling and upsampling operators, without the need of supervision. At the core of this framework is a flexible network module, termed IndexNet, which dynamically predicts indices given an input. Due to its flexibility, IndexNet can be used as a plug-in applying to any off-the-shelf convolutional networks that have coupled downsampling and upsampling stages.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144176083-52604501-1f46-411d-b81a-cad0eb4b529f.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                                Model                                 |    Dataset     |   SAD    |    MSE    |   GRAD   | CONN | Training Resources |                                Download                                 |\n| :------------------------------------------------------------------: | :------------: | :------: | :-------: | :------: | :--: | :----------------: | :---------------------------------------------------------------------: |\n|        [M2O DINs (our)](./indexnet_mobv2_1xb16-78k_comp1k.py)        | Composition-1k | **45.6** | **0.012** | **25.5** | 44.8 |         1          | [model](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_20200618_173817.log.json) |\n| [M2O DINs (with DIM pipeline)](./indexnet_mobv2-dimaug_1xb16-78k_comp1k.py) | Composition-1k |   50.1   |   0.016   |   30.8   | 49.5 |         1          | [model](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_dimaug_mobv2_1x16_78k_comp1k_SAD-50.1_20200626_231857-af359436.pth) \\| [log](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_dimaug_mobv2_1x16_78k_comp1k_20200626_231857.log.json) |\n\n<!-- |                    M2O DINs (paper)                    |   45.8   |   0.013   |   25.9   | **43.7** |         -          |                     -->\n\n> The performance of training (best performance) with different random seeds diverges in a large range. You may need to run several experiments for each setting to obtain the above performance.\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py\n\n# single-gpu train\npython tools/train.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth\n\n# single-gpu test\npython tools/test.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{hao2019indexnet,\n  title={Indices Matter: Learning to Index for Deep Image Matting},\n  author={Lu, Hao and Dai, Yutong and Shen, Chunhua and Xu, Songcen},\n  booktitle={Proc. IEEE/CVF International Conference on Computer Vision (ICCV)},\n  year={2019}\n}\n```\n"
  },
  {
    "path": "configs/indexnet/README_zh-CN.md",
    "content": "# IndexNet (ICCV'2019)\n\n> **任务**: 图像抠图\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">IndexNet (ICCV'2019)</summary>\n\n```bibtex\n@inproceedings{hao2019indexnet,\n  title={Indices Matter: Learning to Index for Deep Image Matting},\n  author={Lu, Hao and Dai, Yutong and Shen, Chunhua and Xu, Songcen},\n  booktitle={Proc. IEEE/CVF International Conference on Computer Vision (ICCV)},\n  year={2019}\n}\n```\n\n</details>\n\n<br/>\n\n|                          算法                           |   SAD    |    MSE    |   GRAD   |   CONN   | GPU 信息 |                                                   下载                                                   |\n| :-----------------------------------------------------: | :------: | :-------: | :------: | :------: | :------: | :------------------------------------------------------------------------------------------------------: |\n|                     M2O DINs (原文)                     |   45.8   |   0.013   |   25.9   | **43.7** |    -     |                                                    -                                                     |\n| [M2O DINs (复现)](./indexnet_mobv2_1xb16-78k_comp1k.py) | **45.6** | **0.012** | **25.5** |   44.8   |    1     | [模型](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_20200618_173817.log.json) |\n\n> The performance of training (best performance) with different random seeds diverges in a large range. You may need to run several experiments for each setting to obtain the above performance.\n\n**其他结果**\n\n|                                   算法                                    | SAD  |  MSE  | GRAD | CONN | GPU 信息 |                                                  下载                                                  |\n| :-----------------------------------------------------------------------: | :--: | :---: | :--: | :--: | :------: | :----------------------------------------------------------------------------------------------------: |\n| [M2O DINs (使用 DIM 流水线)](./indexnet_mobv2-dimaug_1xb16-78k_comp1k.py) | 50.1 | 0.016 | 30.8 | 49.5 |    1     | [模型](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_dimaug_mobv2_1x16_78k_comp1k_SAD-50.1_20200626_231857-af359436.pth) \\| [日志](https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_dimaug_mobv2_1x16_78k_comp1k_20200626_231857.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py\n\n# 单个GPU上训练\npython tools/train.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth\n\n# 单个GPU上测试\npython tools/test.py configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/indexnet/indexnet_mobv2-dimaug_1xb16-78k_comp1k.py",
    "content": "_base_ = ['./indexnet_mobv2_1xb16-78k_comp1k.py']\n\nexperiment_name = 'indexnet_mobv2-dimaug_1xb16-78k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    test_cfg=dict(\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ))\n\n# dataset settings\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='LoadImageFromFile', key='bg'),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        crop_sizes=[320, 480, 640]),\n    dict(type='Flip', keys=['alpha', 'merged', 'fg', 'bg']),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        scale=(320, 320),\n        keep_ratio=False),\n    dict(type='GenerateTrimap', kernel_size=(1, 30)),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(dataset=dict(pipeline=train_pipeline))\n\nval_dataloader = dict(dataset=dict(pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py",
    "content": "_base_ = [\n    '../_base_/datasets/comp1k.py', '../_base_/matting_default_runtime.py'\n]\n\nexperiment_name = 'indexnet_mobv2_1xb16-78k_comp1k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='IndexNet',\n    data_preprocessor=dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        proc_trimap='rescale_to_zero_one',\n    ),\n    backbone=dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(\n            type='IndexNetEncoder',\n            in_channels=4,\n            freeze_bn=True,\n            init_cfg=dict(\n                type='Pretrained',\n                checkpoint='open-mmlab://mmedit/mobilenet_v2')),\n        decoder=dict(type='IndexNetDecoder')),\n    loss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5, sample_wise=True),\n    loss_comp=dict(\n        type='CharbonnierCompLoss', loss_weight=1.5, sample_wise=True),\n    test_cfg=dict(\n        resize_method='interp',\n        resize_mode='bicubic',\n        size_divisor=32,\n    ),\n)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='alpha', color_type='grayscale'),\n    dict(type='LoadImageFromFile', key='fg'),\n    dict(type='LoadImageFromFile', key='bg'),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='GenerateTrimapWithDistTransform', dist_thr=20),\n    dict(\n        type='CropAroundUnknown',\n        keys=['alpha', 'merged', 'fg', 'bg', 'trimap'],\n        crop_sizes=[320, 480, 640],\n        interpolations=['bicubic', 'bicubic', 'bicubic', 'bicubic',\n                        'nearest']),\n    dict(\n        type='Resize',\n        keys=['trimap'],\n        scale=(320, 320),\n        keep_ratio=False,\n        interpolation='nearest'),\n    dict(\n        type='Resize',\n        keys=['alpha', 'merged', 'fg', 'bg'],\n        scale=(320, 320),\n        keep_ratio=False,\n        interpolation='bicubic'),\n    dict(type='Flip', keys=['alpha', 'merged', 'fg', 'bg', 'trimap']),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='alpha',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',\n        key='trimap',\n        color_type='grayscale',\n        save_original_img=True),\n    dict(type='LoadImageFromFile', key='merged'),\n    dict(type='PackInputs'),\n]\n\ntrain_dataloader = dict(\n    batch_size=16,\n    num_workers=8,\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=78000,\n    val_interval=2600,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-2),\n    paramwise_cfg=dict(custom_keys={'encoder.layers': dict(lr_mult=0.01)}),\n)\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    milestones=[52000, 67600],\n    gamma=0.1,\n    by_epoch=False,\n)\n\n# checkpoint saving\ndefault_hooks = dict(checkpoint=dict(interval=2600, out_dir=save_dir))\n\n# runtime settings\n# inheritate from _base_\n"
  },
  {
    "path": "configs/indexnet/metafile.yml",
    "content": "Collections:\n- Name: IndexNet\n  Paper:\n    Title: 'Indices Matter: Learning to Index for Deep Image Matting'\n    URL: https://arxiv.org/abs/1908.00672\n  README: configs/indexnet/README.md\n  Task:\n  - matting\n  Year: 2019\nModels:\n- Config: configs/indexnet/indexnet_mobv2_1xb16-78k_comp1k.py\n  In Collection: IndexNet\n  Name: indexnet_mobv2_1xb16-78k_comp1k\n  Results:\n  - Dataset: Composition-1k\n    Metrics:\n      CONN: 44.8\n      GRAD: 25.5\n      MSE: 0.012\n      SAD: 45.6\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_mobv2_1x16_78k_comp1k_SAD-45.6_20200618_173817-26dd258d.pth\n- Config: configs/indexnet/indexnet_mobv2-dimaug_1xb16-78k_comp1k.py\n  In Collection: IndexNet\n  Name: indexnet_mobv2-dimaug_1xb16-78k_comp1k\n  Results:\n  - Dataset: Composition-1k\n    Metrics:\n      CONN: 49.5\n      GRAD: 30.8\n      MSE: 0.016\n      SAD: 50.1\n    Task: Matting\n  Weights: https://download.openmmlab.com/mmediting/mattors/indexnet/indexnet_dimaug_mobv2_1x16_78k_comp1k_SAD-50.1_20200626_231857-af359436.pth\n"
  },
  {
    "path": "configs/inst_colorization/README.md",
    "content": "# Instance-aware Image Colorization (CVPR'2020)\n\n> [Instance-Aware Image Colorization](https://openaccess.thecvf.com/content_CVPR_2020/html/Su_Instance-Aware_Image_Colorization_CVPR_2020_paper.html)\n\n> **Task**: Colorization\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nImage colorization is inherently an ill-posed problem with multi-modal uncertainty. Previous methods leverage the deep neural network to map input grayscale images to plausible color outputs directly. Although these learning-based methods have shown impressive performance, they usually fail on the input images that contain multiple objects. The leading cause is that existing models perform learning and colorization on the entire image. In the absence of a clear figure-ground separation, these models cannot effectively locate and learn meaningful object-level semantics. In this paper, we propose a method for achieving instance-aware colorization. Our network architecture leverages an off-the-shelf object detector to obtain cropped object images and uses an instance colorization network to extract object-level features. We use a similar network to extract the full-image features and apply a fusion module to full object-level and image-level features to predict the final colors. Both colorization networks and fusion modules are learned from a large-scale dataset. Experimental results show that our work outperforms existing methods on different quality metrics and achieves state-of-the-art performance on image colorization.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://github.com/ericsujw/InstColorization/blob/master/imgs/teaser.png?raw=true\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                                              Model                                              | Dataset |                                              Download                                              |\n| :---------------------------------------------------------------------------------------------: | :-----: | :------------------------------------------------------------------------------------------------: |\n| [instance_aware_colorization_officiial](./inst-colorizatioon_full_official_cocostuff-256x256.py) | MS-COCO | [model](https://download.openmmlab.com/mmediting/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256-5b9d4eee.pth) |\n\n## Quick Start\n\n<details>\n<summary>Colorization demo</summary>\n\nYou can use the following commands to colorize an image.\n\n```shell\n\npython demo/mmagic_inference_demo.py --model-name inst_colorization --img input.jpg --result-out-dir output.png\n```\n\nFor more demos, you can refer to [Tutorial 3: inference with pre-trained models](https://mmagic.readthedocs.io/en/latest/user_guides/3_inference.html).\n\n</details>\n\n<details>\n<summary align=\"right\">Instance-aware Image Colorization (CVPR'2020)</summary>\n\n```bibtex\n@inproceedings{Su-CVPR-2020,\n  author = {Su, Jheng-Wei and Chu, Hung-Kuo and Huang, Jia-Bin},\n  title = {Instance-aware Image Colorization},\n  booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},\n  year = {2020}\n}\n```\n\n</details>\n"
  },
  {
    "path": "configs/inst_colorization/README_zh-CN.md",
    "content": "# Instance-aware Image Colorization (CVPR'2020)\n\n> [Instance-Aware Image Colorization](https://openaccess.thecvf.com/content_CVPR_2020/html/Su_Instance-Aware_Image_Colorization_CVPR_2020_paper.html)\n\n> **任务**: 图像上色\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\nImage colorization is inherently an ill-posed problem with multi-modal uncertainty. Previous methods leverage the deep neural network to map input grayscale images to plausible color outputs directly. Although these learning-based methods have shown impressive performance, they usually fail on the input images that contain multiple objects. The leading cause is that existing models perform learning and colorization on the entire image. In the absence of a clear figure-ground separation, these models cannot effectively locate and learn meaningful object-level semantics. In this paper, we propose a method for achieving instance-aware colorization. Our network architecture leverages an off-the-shelf object detector to obtain cropped object images and uses an instance colorization network to extract object-level features. We use a similar network to extract the full-image features and apply a fusion module to full object-level and image-level features to predict the final colors. Both colorization networks and fusion modules are learned from a large-scale dataset. Experimental results show that our work outperforms existing methods on different quality metrics and achieves state-of-the-art performance on image colorization.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://github.com/ericsujw/InstColorization/blob/master/imgs/teaser.png?raw=true\" width=\"400\"/>\n</div >\n\n## 结果和模型\n\n|                                              Model                                               |                                                 Download                                                 |\n| :----------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------: |\n| [instance_aware_colorization_officiial](./inst-colorizatioon_full_official_cocostuff-256x256.py) | [model](https://download.openmmlab.com/mmediting/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256-5b9d4eee.pth) |\n\n## 快速开始\n\n<details>\n<summary>图像上色模型</summary>\n\n您可以使用以下命令来对一张图像进行上色。\n\n```shell\npython demo/mmagic_inference_demo.py --model-name inst_colorization --img input.jpg --result-out-dir output.png\n```\n\n更多细节可以参考 [Tutorial 3: inference with pre-trained models](https://mmagic.readthedocs.io/en/latest/user_guides/3_inference.html)。\n\n</details>\n\n<details>\n<summary align=\"right\">Instance-aware Image Colorization (CVPR'2020)</summary>\n\n```bibtex\n@inproceedings{Su-CVPR-2020,\n  author = {Su, Jheng-Wei and Chu, Hung-Kuo and Huang, Jia-Bin},\n  title = {Instance-aware Image Colorization},\n  booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},\n  year = {2020}\n}\n```\n\n</details>\n"
  },
  {
    "path": "configs/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256.py",
    "content": "_base_ = ['../_base_/default_runtime.py']\n\nexperiment_name = 'inst-colorization_full_official_cocostuff_256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nstage = 'full'\n\nmodel = dict(\n    type='InstColorization',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    image_model=dict(\n        type='ColorizationNet', input_nc=4, output_nc=2, norm_type='batch'),\n    instance_model=dict(\n        type='ColorizationNet', input_nc=4, output_nc=2, norm_type='batch'),\n    fusion_model=dict(\n        type='FusionNet', input_nc=4, output_nc=2, norm_type='batch'),\n    color_data_opt=dict(\n        ab_thresh=0,\n        p=1.0,\n        sample_PS=[\n            1,\n            2,\n            3,\n            4,\n            5,\n            6,\n            7,\n            8,\n            9,\n        ],\n        ab_norm=110,\n        ab_max=110.,\n        ab_quant=10.,\n        l_norm=100.,\n        l_cent=50.,\n        mask_cent=0.5),\n    which_direction='AtoB',\n    loss=dict(type='HuberLoss', delta=.01))\n\n# yapf: disable\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(\n        type='InstanceCrop',\n        config_file='mmdet::mask_rcnn/mask-rcnn_x101-32x8d_fpn_ms-poly-3x_coco.py',  # noqa\n        from_pretrained=None,\n        finesize=256,\n        box_num_upbound=5),\n    dict(\n        type='Resize',\n        keys=['img', 'cropped_img'],\n        scale=(256, 256),\n        keep_ratio=False),\n    dict(\n        type='PackInputs',\n        data_keys=['box_info', 'box_info_2x', 'box_info_4x', 'box_info_8x']),\n]\n"
  },
  {
    "path": "configs/inst_colorization/metafile.yml",
    "content": "Collections:\n- Name: Instance-aware Image Colorization\n  Paper:\n    Title: Instance-Aware Image Colorization\n    URL: https://openaccess.thecvf.com/content_CVPR_2020/html/Su_Instance-Aware_Image_Colorization_CVPR_2020_paper.html\n  README: configs/inst_colorization/README.md\n  Task:\n  - colorization\n  Year: 2020\nModels:\n- Config: configs/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256.py\n  In Collection: Instance-aware Image Colorization\n  Name: inst-colorizatioon_full_official_cocostuff-256x256\n  Results:\n  - Dataset: MS-COCO\n    Metrics: {}\n    Task: Colorization\n  Weights: https://download.openmmlab.com/mmediting/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256-5b9d4eee.pth\n"
  },
  {
    "path": "configs/liif/README.md",
    "content": "# LIIF (CVPR'2021)\n\n> [Learning Continuous Image Representation with Local Implicit Image Function](https://arxiv.org/abs/2012.09161)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nHow to represent an image? While the visual world is presented in a continuous manner, machines store and see the images in a discrete way with 2D arrays of pixels. In this paper, we seek to learn a continuous representation for images. Inspired by the recent progress in 3D reconstruction with implicit neural representation, we propose Local Implicit Image Function (LIIF), which takes an image coordinate and the 2D deep features around the coordinate as inputs, predicts the RGB value at a given coordinate as an output. Since the coordinates are continuous, LIIF can be presented in arbitrary resolution. To generate the continuous representation for images, we train an encoder with LIIF representation via a self-supervised task with super-resolution. The learned continuous representation can be presented in arbitrary resolution even extrapolate to x30 higher resolution, where the training tasks are not provided. We further show that LIIF representation builds a bridge between discrete and continuous representation in 2D, it naturally supports the learning tasks with size-varied image ground-truths and significantly outperforms the method with resizing the ground-truths.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144032669-da59d683-9c4f-4598-a680-32770a369b74.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                                    Model                                     | Dataset | scale |  PSNR   |  SSIM   | Training Resources |                                     Download                                     |\n| :--------------------------------------------------------------------------: | :-----: | :---: | :-----: | :-----: | :----------------: | :------------------------------------------------------------------------------: |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x2   | 35.7131 | 0.9366  |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.log.json) |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x2   | 31.5579 | 0.8889  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x2   | 34.6647 | 0.9355  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x3   | 32.3805 | 0.8915  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x3   | 0.8039  | 30.9808 |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x3   | 28.4605 | 0.8724  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x4   | 30.2748 | 0.8509  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x4   | 26.8415 | 0.7381  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x4   | 29.0245 | 0.8187  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x6   | 27.1187 | 0.7774  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x6   | 24.7461 | 0.6444  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x6   | 26.7770 | 0.7425  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x18  | 20.8516 | 0.5406  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x18  | 20.0096 | 0.4525  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x18  | 22.1987 | 0.5955  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x30  | 18.8467 | 0.5010  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x30  | 18.1321 | 0.3963  |         △          |                                        △                                         |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x30  | 20.5050 | 0.5577  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x2   | 35.7874 | 0.9366  |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/liif/liif_rdn_norm_c64b16_g1_1000k_div2k_20210717-22d6fdc8.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/liif/liif_rdn_norm_c64b16_g1_1000k_div2k_20210717-22d6fdc8.log.json) |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x2   | 31.6866 | 0.8896  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x2   | 34.7548 | 0.9356  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x3   | 32.4992 | 0.8923  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x3   | 28.4905 | 0.8037  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x3   | 31.0744 | 0.8731  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x4   | 30.3835 | 0.8513  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x4   | 26.8734 | 0.7373  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x4   | 29.1101 | 0.8197  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x6   | 27.1914 | 0.7751  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x6   | 24.7824 | 0.6434  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x6   | 26.8693 | 0.7437  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x18  | 20.8913 | 0.5329  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x18  | 20.1077 | 0.4537  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x18  | 22.2972 | 0.5950  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set5   |  x30  | 18.9354 | 0.4864  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  Set14  |  x30  | 18.1448 | 0.3942  |         △          |                                        △                                         |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  DIV2K  |  x30  | 20.5663 | 0.5560  |         △          |                                        △                                         |\n\nNote:\n\n- △ refers to ditto.\n- Evaluated on RGB channels,  `scale` pixels in each border are cropped before evaluation.\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth\n\n# single-gpu test\npython tools/test.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{chen2021learning,\n  title={Learning continuous image representation with local implicit image function},\n  author={Chen, Yinbo and Liu, Sifei and Wang, Xiaolong},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={8628--8638},\n  year={2021}\n}\n```\n"
  },
  {
    "path": "configs/liif/README_zh-CN.md",
    "content": "# LIIF (CVPR'2021)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">LIIF (CVPR'2021)</summary>\n\n```bibtex\n@inproceedings{chen2021learning,\n  title={Learning continuous image representation with local implicit image function},\n  author={Chen, Yinbo and Liu, Sifei and Wang, Xiaolong},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={8628--8638},\n  year={2021}\n}\n```\n\n</details>\n\n<br/>\n\n|                             算法                              | scale | Set5<br>PSNR / SSIM | Set14<br>PSNR / SSIM | DIV2K <br>PSNR / SSIM |   GPU 信息   |                              下载                              |\n| :-----------------------------------------------------------: | :---: | :-----------------: | :------------------: | :-------------------: | :----------: | :------------------------------------------------------------: |\n| [liif_edsr_norm_c64b16_g1_1000k_div2k](./liif-edsr-norm_c64b16_1xb16-1000k_div2k.py) |  x2   |  35.7131 / 0.9366   |   31.5579 / 0.8889   |   34.6647 / 0.9355    | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.log.json) |\n|                               △                               |  x3   |  32.3805 / 0.8915   |   28.4605 / 0.8039   |   30.9808 / 0.8724    |      △       |                               △                                |\n|                               △                               |  x4   |  30.2748 / 0.8509   |   26.8415 / 0.7381   |   29.0245 / 0.8187    |      △       |                               △                                |\n|                               △                               |  x6   |  27.1187 / 0.7774   |   24.7461 / 0.6444   |   26.7770 / 0.7425    |      △       |                               △                                |\n|                               △                               |  x18  |  20.8516 / 0.5406   |   20.0096 / 0.4525   |   22.1987 / 0.5955    |      △       |                               △                                |\n|                               △                               |  x30  |  18.8467 / 0.5010   |   18.1321 / 0.3963   |   20.5050 / 0.5577    |      △       |                               △                                |\n| [liif_rdn_norm_c64b16_g1_1000k_div2k](./liif-rdn-norm_c64b16_1xb16-1000k_div2k.py) |  x2   |  35.7874 / 0.9366   |   31.6866 / 0.8896   |   34.7548 / 0.9356    | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/liif/liif_rdn_norm_c64b16_g1_1000k_div2k_20210717-22d6fdc8.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/liif/liif_rdn_norm_c64b16_g1_1000k_div2k_20210717-22d6fdc8.log.json) |\n|                               △                               |  x3   |  32.4992 / 0.8923   |   28.4905 / 0.8037   |   31.0744 / 0.8731    |      △       |                               △                                |\n|                               △                               |  x4   |  30.3835 / 0.8513   |   26.8734 / 0.7373   |   29.1101 / 0.8197    |      △       |                               △                                |\n|                               △                               |  x6   |  27.1914 / 0.7751   |   24.7824 / 0.6434   |   26.8693 / 0.7437    |      △       |                               △                                |\n|                               △                               |  x18  |  20.8913 / 0.5329   |   20.1077 / 0.4537   |   22.2972 / 0.5950    |      △       |                               △                                |\n|                               △                               |  x30  |  18.9354 / 0.4864   |   18.1448 / 0.3942   |   20.5663 / 0.5560    |      △       |                               △                                |\n\n注：\n\n- △ 指同上。\n- 这两个配置仅在 _testing pipeline_ 上有所不同。 所以他们使用相同的检查点。\n- 数据根据 [EDSR](../edsr/README.md) 进行正则化。\n- 在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth\n\n# 单个GPU上测试\npython tools/test.py configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/models/base_liif.py', '../_base_/datasets/liif_test_config.py'\n]\n\nexperiment_name = 'liif-edsr-norm_c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale_min, scale_max = 1, 4\n\n# model settings\nmodel = dict(\n    type='LIIF',\n    generator=dict(\n        type='LIIFEDSRNet',\n        encoder=dict(\n            type='EDSRNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16),\n        imnet=dict(\n            type='MLPRefiner',\n            in_dim=64,\n            out_dim=3,\n            hidden_list=[256, 256, 256, 256]),\n        local_ensemble=True,\n        feat_unfold=True,\n        cell_decode=True,\n        eval_bsize=30000),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.4488 * 255, 0.4371 * 255, 0.4040 * 255],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/liif/liif-rdn-norm_c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/models/base_liif.py', '../_base_/datasets/liif_test_config.py'\n]\n\nexperiment_name = 'liif-rdn-norm_c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale_min, scale_max = 1, 4\n\n# model settings\nmodel = dict(\n    type='LIIF',\n    generator=dict(\n        type='LIIFRDNNet',\n        encoder=dict(\n            type='RDNNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16,\n            upscale_factor=4,\n            num_layers=8,\n            channel_growth=64),\n        imnet=dict(\n            type='MLPRefiner',\n            in_dim=64,\n            out_dim=3,\n            hidden_list=[256, 256, 256, 256]),\n        local_ensemble=True,\n        feat_unfold=True,\n        cell_decode=True,\n        eval_bsize=30000),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.5 * 255, 0.5 * 255, 0.5 * 255],\n        std=[0.5 * 255, 0.5 * 255, 0.5 * 255],\n    ))\n"
  },
  {
    "path": "configs/liif/metafile.yml",
    "content": "Collections:\n- Name: LIIF\n  Paper:\n    Title: Learning Continuous Image Representation with Local Implicit Image Function\n    URL: https://arxiv.org/abs/2012.09161\n  README: configs/liif/README.md\n  Task:\n  - image super-resolution\n  Year: 2021\nModels:\n- Config: configs/liif/liif-edsr-norm_c64b16_1xb16-1000k_div2k.py\n  In Collection: LIIF\n  Name: liif-edsr-norm_c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 35.7131\n      SSIM: 0.9366\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 31.5579\n      SSIM: 0.8889\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.6647\n      SSIM: 0.9355\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.3805\n      SSIM: 0.8915\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 0.8039\n      SSIM: 30.9808\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 28.4605\n      SSIM: 0.8724\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.2748\n      SSIM: 0.8509\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 26.8415\n      SSIM: 0.7381\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 29.0245\n      SSIM: 0.8187\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 27.1187\n      SSIM: 0.7774\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 24.7461\n      SSIM: 0.6444\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 26.777\n      SSIM: 0.7425\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 20.8516\n      SSIM: 0.5406\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 20.0096\n      SSIM: 0.4525\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 22.1987\n      SSIM: 0.5955\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 18.8467\n      SSIM: 0.501\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 18.1321\n      SSIM: 0.3963\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 20.505\n      SSIM: 0.5577\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/liif/liif_edsr_norm_c64b16_g1_1000k_div2k_20210715-ab7ce3fc.pth\n- Config: configs/liif/liif-rdn-norm_c64b16_1xb16-1000k_div2k.py\n  In Collection: LIIF\n  Name: liif-rdn-norm_c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 35.7874\n      SSIM: 0.9366\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 31.6866\n      SSIM: 0.8896\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.7548\n      SSIM: 0.9356\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.4992\n      SSIM: 0.8923\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 28.4905\n      SSIM: 0.8037\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 31.0744\n      SSIM: 0.8731\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.3835\n      SSIM: 0.8513\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 26.8734\n      SSIM: 0.7373\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 29.1101\n      SSIM: 0.8197\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 27.1914\n      SSIM: 0.7751\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 24.7824\n      SSIM: 0.6434\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 26.8693\n      SSIM: 0.7437\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 20.8913\n      SSIM: 0.5329\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 20.1077\n      SSIM: 0.4537\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 22.2972\n      SSIM: 0.595\n    Task: Image Super-Resolution\n  - Dataset: Set5\n    Metrics:\n      PSNR: 18.9354\n      SSIM: 0.4864\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 18.1448\n      SSIM: 0.3942\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 20.5663\n      SSIM: 0.556\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/liif/liif_rdn_norm_c64b16_g1_1000k_div2k_20210717-22d6fdc8.pth\n"
  },
  {
    "path": "configs/lsgan/README.md",
    "content": "# LSGAN (ICCV'2017)\n\n> [Least Squares Generative Adversarial Networks](https://openaccess.thecvf.com/content_iccv_2017/html/Mao_Least_Squares_Generative_ICCV_2017_paper.html)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nUnsupervised learning with generative adversarial networks (GANs) has proven hugely successful. Regular GANs hypothesize the discriminator as a classifier with the sigmoid cross entropy loss function. However, we found that this loss function may lead to the vanishing gradients problem during the learning process. To overcome such a problem, we propose in this paper the Least Squares Generative Adversarial Networks (LSGANs) which adopt the least squares loss function for the discriminator. We show that minimizing the objective function of LSGAN yields minimizing the Pearson χ2 divergence. There are two benefits of LSGANs over regular GANs. First, LSGANs are able to generate higher quality images than regular GANs. Second, LSGANs perform more stable during the learning process. We evaluate LSGANs on five scene datasets and the experimental results show that the images generated by LSGANs are of better quality than the ones generated by regular GANs. We also conduct two comparison experiments between LSGANs and regular GANs to illustrate the stability of LSGANs.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143052264-afd97b91-5fd1-4134-ad4d-529e364fdcc8.JPG\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> LSGAN 64x64, CelebA-Cropped</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/116498716-f4e74200-a8dc-11eb-9c28-5549d96e20a6.png\" width=\"800\"/>\n</div>\n\n|                                 Model                                 |    Dataset     |               SWD               | MS-SSIM |   FID   |                                 Download                                 |\n| :-------------------------------------------------------------------: | :------------: | :-----------------------------: | :-----: | :-----: | :----------------------------------------------------------------------: |\n| [LSGAN 64x64](./lsgan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py) | CelebA-Cropped |     6.16, 6.83, 37.64/16.87     | 0.3216  | 11.9258 | [model](https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m_20210429_144001-92ca1d0d.pth)\\| [log](https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m_20210422_131925.log.json) |\n| [LSGAN 64x64](./lsgan_dcgan-archi_lr1e-4-1xb128-12Mimgs_lsun-bedroom-64x64.py) |  LSUN-Bedroom  |      5.66, 9.0, 18.6/11.09      | 0.0671  | 30.7390 | [model](https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_dcgan-archi_lr-1e-4_64_b128x1_12m_20210429_144602-ec4ec6bb.pth)\\| [log](https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_dcgan-archi_lr-1e-4_64_b128x1_12m_20210423_005020.log.json) |\n| [LSGAN 128x128](./lsgan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py) | CelebA-Cropped | 21.66, 9.83, 16.06, 70.76/29.58 | 0.3691  | 38.3752 | [model](https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210429_144229-01ba67dc.pth)\\| [log](https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210423_132126.log.json) |\n| [LSGAN 128x128](./lsgan_lsgan-archi_lr1e-4-1xb64-10Mimgs_lsun-bedroom-128x128.py) |  LSUN-Bedroom  |  19.52, 9.99, 7.48, 14.3/12.82  | 0.0612  | 51.5500 | [model](https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_lsgan-archi_lr-1e-4_128_b64x1_10m_20210429_155605-cf78c0a8.pth)\\| [log](https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_lsgan-archi_lr-1e-4_128_b64x1_10m_20210429_142302.log.json) |\n\n## Citation\n\n```latex\n@inproceedings{mao2017least,\n  title={Least squares generative adversarial networks},\n  author={Mao, Xudong and Li, Qing and Xie, Haoran and Lau, Raymond YK and Wang, Zhen and Paul Smolley, Stephen},\n  booktitle={Proceedings of the IEEE international conference on computer vision},\n  pages={2794--2802},\n  year={2017},\n  url={https://openaccess.thecvf.com/content_iccv_2017/html/Mao_Least_Squares_Generative_ICCV_2017_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/lsgan/lsgan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\nmodel = dict(type='LSGAN')\ntotal_iters = 100000\ndisc_step = 1\ntrain_cfg = dict(max_iters=total_iters * disc_step)\n# define dataset\n# batch_size and data_root must be set\nbatch_size = 128\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0.5, 0.99))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# METRICS\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        real_nums=50000,\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/lsgan/lsgan_dcgan-archi_lr1e-4-1xb128-12Mimgs_lsun-bedroom-64x64.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_64x64.py',\n    '../_base_/datasets/unconditional_imgs_64x64.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nmodel = dict(type='LSGAN', discriminator=dict(output_scale=4, out_channels=1))\ntotal_iters = 100000\ndisc_step = 1\ntrain_cfg = dict(max_iters=total_iters * disc_step)\n\n# define dataset\n# `batch_size` and `data_root` need to be set.\nbatch_size = 128\ndata_root = './data/lsun/images/bedroom_train'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_bs = 32\nval_dataloader = dict(batch_size=test_bs, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(batch_size=test_bs, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))))\ndefault_hooks = dict(\n    checkpoint=dict(save_best=['FID-Full-50k/fid'], rule=['less']))\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/lsgan/lsgan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/dcgan/base_dcgan_128x128.py',\n    '../_base_/datasets/unconditional_imgs_128x128.py',\n    '../_base_/gen_default_runtime.py'\n]\nmodel = dict(type='LSGAN', discriminator=dict(output_scale=4, out_channels=1))\n\ntotal_iters = 160000\ndisc_step = 1\ntrain_cfg = dict(max_iters=total_iters * disc_step)\n\n# define dataset\n# you must set `samples_per_gpu` and `imgs_root`\n# `batch_size` and `data_root` need to be set.\nbatch_size = 64\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))))\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# METRICS\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n\n# TODO\n# metrics = dict(\n#     ms_ssim10k=dict(type='MS_SSIM', num_images=10000),\n#     swd16k=dict(type='SWD', num_images=16384, image_shape=(3, 128, 128)),\n#     fid50k=dict(type='FID', num_images=50000, inception_pkl=None))\n"
  },
  {
    "path": "configs/lsgan/lsgan_lsgan-archi_lr1e-4-1xb64-10Mimgs_lsun-bedroom-128x128.py",
    "content": "_base_ = [\n    '../_base_/datasets/unconditional_imgs_128x128.py',\n    '../_base_/gen_default_runtime.py'\n]\n# define model\nmodel = dict(\n    type='LSGAN',\n    noise_size=1024,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='LSGANGenerator',\n        output_scale=128,\n        base_channels=256,\n        noise_size=1024),\n    discriminator=dict(\n        type='LSGANDiscriminator', input_scale=128, base_channels=64))\n\ntotal_iters = 160000\ndisc_step = 1\ntrain_cfg = dict(max_iters=total_iters * disc_step)\n\n# define dataset\nbatch_size = 64\ndata_root = './data/lsun/images/bedroom_train'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_bs = 32\nval_dataloader = dict(batch_size=test_bs, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(batch_size=test_bs, dataset=dict(data_root=data_root))\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.99))))\ndefault_hooks = dict(\n    checkpoint=dict(save_best=['FID-Full-50k/fid'], rule=['less']))\n# adjust running config\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='PyTorch',\n        sample_model='orig')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/lsgan/metafile.yml",
    "content": "Collections:\n- Name: LSGAN\n  Paper:\n    Title: Least Squares Generative Adversarial Networks\n    URL: https://openaccess.thecvf.com/content_iccv_2017/html/Mao_Least_Squares_Generative_ICCV_2017_paper.html\n  README: configs/lsgan/README.md\n  Task:\n  - unconditional gans\n  Year: 2017\nModels:\n- Config: configs/lsgan/lsgan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64.py\n  In Collection: LSGAN\n  Name: lsgan_dcgan-archi_lr1e-3-1xb128-12Mimgs_celeba-cropped-64x64\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      FID: 11.9258\n      MS-SSIM: 0.3216\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-3_64_b128x1_12m_20210429_144001-92ca1d0d.pth\n- Config: configs/lsgan/lsgan_dcgan-archi_lr1e-4-1xb128-12Mimgs_lsun-bedroom-64x64.py\n  In Collection: LSGAN\n  Name: lsgan_dcgan-archi_lr1e-4-1xb128-12Mimgs_lsun-bedroom-64x64\n  Results:\n  - Dataset: LSUN-Bedroom\n    Metrics:\n      FID: 30.739\n      MS-SSIM: 0.0671\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_dcgan-archi_lr-1e-4_64_b128x1_12m_20210429_144602-ec4ec6bb.pth\n- Config: configs/lsgan/lsgan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128.py\n  In Collection: LSGAN\n  Name: lsgan_dcgan-archi_lr1e-4-1xb64-10Mimgs_celeba-cropped-128x128\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      FID: 38.3752\n      MS-SSIM: 0.3691\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/lsgan/lsgan_celeba-cropped_dcgan-archi_lr-1e-4_128_b64x1_10m_20210429_144229-01ba67dc.pth\n- Config: configs/lsgan/lsgan_lsgan-archi_lr1e-4-1xb64-10Mimgs_lsun-bedroom-128x128.py\n  In Collection: LSGAN\n  Name: lsgan_lsgan-archi_lr1e-4-1xb64-10Mimgs_lsun-bedroom-128x128\n  Results:\n  - Dataset: LSUN-Bedroom\n    Metrics:\n      FID: 51.55\n      MS-SSIM: 0.0612\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/lsgan/lsgan_lsun-bedroom_lsgan-archi_lr-1e-4_128_b64x1_10m_20210429_155605-cf78c0a8.pth\n"
  },
  {
    "path": "configs/nafnet/README.md",
    "content": "# NAFNet (ECCV'2022)\n\n> [Simple Baselines for Image Restoration](https://arxiv.org/abs/2204.04676)\n\n> **Task**: Image Restoration\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nAlthough there have been significant advances in the field of image restoration recently, the system complexity of the state-of-the-art (SOTA) methods is increasing as well, which may hinder the convenient analysis and comparison of methods. In this paper, we propose a simple baseline that exceeds the SOTA methods and is computationally efficient. To further simplify the baseline, we reveal that the nonlinear activation functions, e.g. Sigmoid, ReLU, GELU, Softmax, etc. are not necessary: they could be replaced by multiplication or removed. Thus, we derive a Nonlinear Activation Free Network, namely NAFNet, from the baseline. SOTA results are achieved on various challenging benchmarks, e.g. 33.69 dB PSNR on GoPro (for image deblurring), exceeding the previous SOTA 0.38 dB with only 8.4% of its computational costs; 40.30 dB PSNR on SIDD (for image denoising), exceeding the previous SOTA 0.28 dB with less than half of its computational costs.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/43229734/199919292-81d307d9-144b-4d07-9f26-0c09d86e84a5.jpg\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                                  Model                                  | Dataset | image size |       PSNR       |      SSIM      | GPU Info |                                  Download                                  |\n| :---------------------------------------------------------------------: | :-----: | :--------: | :--------------: | :------------: | :------: | :------------------------------------------------------------------------: |\n| [nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd](./nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py) |  SIDD   |  256X256   | 40.3045(40.3045) | 0.9253(0.9614) | 1 (A100) | [model](https://download.openmmlab.com/mmediting/nafnet/NAFNet-SIDD-midc64.pth) \\| log(coming soon) |\n| [nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro](./nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro.py) |  GoPro  |  1280x720  | 33.7246(33.7103) | 0.9479(0.9668) | 1 (A100) | [model](https://download.openmmlab.com/mmediting/nafnet/NAFNet-GoPro-midc64.pth) \\| log(coming soon) |\n\nNote:\n\n- a(b) where a denotes the value run by MMagic, b denotes the value copied from the original paper.\n- PSNR is evaluated on RGB channels.\n- SSIM is evaluated by averaging SSIMs on RGB channels, however the original paper uses the 3D SSIM kernel.\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py\n\n# single-gpu train\npython tools/train.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](../../docs/en/user_guides/train_test.md).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint\n\n# single-gpu test\npython tools/test.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint\n\n# multi-gpu test\n./tools/dist_test.sh configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint 8\n```\n\nPretrained checkpoints will come soon.\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](../../docs/en/user_guides/train_test.md).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{chen2022simple,\n  title={Simple Baselines for Image Restoration},\n  author={Chen, Liangyu and Chu, Xiaojie and Zhang, Xiangyu and Sun, Jian},\n  journal={arXiv preprint arXiv:2204.04676},\n  year={2022}\n}\n```\n"
  },
  {
    "path": "configs/nafnet/README_zh-CN.md",
    "content": "# NAFNET (ECCV'2022)\n\n> **任务**: 图像恢复\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">NAFNET (ECCV'2022)</summary>\n\n```bibtex\n@article{chen2022simple,\n  title={Simple Baselines for Image Restoration},\n  author={Chen, Liangyu and Chu, Xiaojie and Zhang, Xiangyu and Sun, Jian},\n  journal={arXiv preprint arXiv:2204.04676},\n  year={2022}\n}\n```\n\n</details>\n\n|                                     方法                                      | 图片尺寸 |       PSNR       |      SSIM      | GPU信息  |                                     下载                                      |\n| :---------------------------------------------------------------------------: | :------: | :--------------: | :------------: | :------: | :---------------------------------------------------------------------------: |\n| [nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd](./nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py) | 256X256  | 40.3045(40.3045) | 0.9253(0.9614) | 1 (A100) | [模型](https://download.openmmlab.com/mmediting/nafnet/NAFNet-SIDD-midc64.pth) \\| 日志(即将到来) |\n| [nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro](./nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro.py) | 1280x720 | 33.7246(33.7103) | 0.9479(0.9668) | 1 (A100) | [模型](https://download.openmmlab.com/mmediting/nafnet/NAFNet-GoPro-midc64.pth) \\| 日志(即将到来) |\n\nNote:\n\n- 评估结果a(b)中，a代表由MMagic测量，b代表由原论文提供。\n- PSNR是在RGB通道评估。\n- SSIM是平均的分别在RGB通道评估的SSIM, 而原论文使用了3D的SSIM卷积核做统一评估。\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py\n\n# 单个GPU上训练\npython tools/train.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py 8\n```\n\n更多细节可以参考 [train_test.md](../../docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint\n\n# 单个GPU上测试\npython tools/test.py configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py /path/to/checkpoint 8\n```\n\n预训练模型未来将会上传，敬请等待。\n更多细节可以参考 [train_test.md](../../docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/nafnet/metafile.yml",
    "content": "Collections:\n- Name: NAFNet\n  Paper:\n    Title: Simple Baselines for Image Restoration\n    URL: https://arxiv.org/abs/2204.04676\n  README: configs/nafnet/README.md\n  Task:\n  - image restoration\n  Year: 2022\nModels:\n- Config: configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py\n  In Collection: NAFNet\n  Name: nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd\n  Results:\n  - Dataset: SIDD\n    Metrics:\n      GPU Info: 1.0\n      PSNR: 40.3045\n      SSIM: 0.9253\n    Task: Image Restoration\n  Weights: https://download.openmmlab.com/mmediting/nafnet/NAFNet-SIDD-midc64.pth\n- Config: configs/nafnet/nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro.py\n  In Collection: NAFNet\n  Name: nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro\n  Results:\n  - Dataset: GoPro\n    Metrics:\n      GPU Info: 1.0\n      PSNR: 33.7246\n      SSIM: 0.9479\n    Task: Image Restoration\n  Weights: https://download.openmmlab.com/mmediting/nafnet/NAFNet-GoPro-midc64.pth\n"
  },
  {
    "path": "configs/nafnet/nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'nafnet_c64eb11128mb1db1111_lr1e-3_400k_gopro'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='NAFNetLocal',\n        img_channels=3,\n        mid_channels=64,\n        enc_blk_nums=[1, 1, 1, 28],\n        middle_blk_num=1,\n        dec_blk_nums=[1, 1, 1, 1],\n    ),\n    pixel_loss=dict(type='PSNRLoss'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,  # gpus 4\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root='./data/gopro/train',\n        data_prefix=dict(gt='sharp', img='blur'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='gopro', task_name='deblur'),\n        data_root='./data/gopro/test',\n        data_prefix=dict(gt='sharp', img='blur'),\n        pipeline=val_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=400_000, val_interval=20000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='AdamW', lr=1e-3, weight_decay=1e-3, betas=(0.9, 0.9)))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineAnnealingLR', by_epoch=False, T_max=400_000, eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nrandomness = dict(seed=10, diff_rank_seed=True)\n"
  },
  {
    "path": "configs/nafnet/nafnet_c64eb2248mb12db2222_8xb8-lr1e-3-400k_sidd.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'nafnet_c64eb2248mb12db2222_lr1e-3_400k_sidd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='NAFNet',\n        img_channels=3,\n        mid_channels=64,\n        enc_blk_nums=[2, 2, 4, 8],\n        middle_blk_num=12,\n        dec_blk_nums=[2, 2, 2, 2],\n    ),\n    pixel_loss=dict(type='PSNRLoss'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.0, 0.0, 0.0],\n        std=[255.0, 255.0, 255.0],\n    ))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,  # gpus 4\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='sidd', task_name='denoising'),\n        data_root='./data/SIDD/train',\n        data_prefix=dict(gt='gt', img='noisy'),\n        filename_tmpl=dict(img='{}_NOISY', gt='{}_GT'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='sidd', task_name='denoising'),\n        data_root='./data/SIDD/val/',\n        data_prefix=dict(gt='gt', img='noisy'),\n        filename_tmpl=dict(gt='{}_GT', img='{}_NOISY'),\n        pipeline=val_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),\n    dict(type='PSNR'),\n    dict(type='SSIM'),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=400_000, val_interval=20000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='AdamW', lr=1e-3, weight_decay=1e-3, betas=(0.9, 0.9)))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineAnnealingLR', by_epoch=False, T_max=400_000, eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nvisualizer = dict(bgr2rgb=False)\n"
  },
  {
    "path": "configs/partial_conv/README.md",
    "content": "# PConv (ECCV'2018)\n\n> [Image Inpainting for Irregular Holes Using Partial Convolutions](https://arxiv.org/abs/1804.07723)\n\n> **Task**: Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nExisting deep learning based image inpainting methods use a standard convolutional network over the corrupted image, using convolutional filter responses conditioned on both valid pixels as well as the substitute values in the masked holes (typically the mean value). This often leads to artifacts such as color discrepancy and blurriness. Post-processing is usually used to reduce such artifacts, but are expensive and may fail. We propose the use of partial convolutions, where the convolution is masked and renormalized to be conditioned on only valid pixels. We further include a mechanism to automatically generate an updated mask for the next layer as part of the forward pass. Our model outperforms other methods for irregular masks. We show qualitative and quantitative comparisons with other methods to validate our approach.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12726765/144175613-1bc9ad1b-072d-4c1f-a97d-1af5be2590bd.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n|                         Model                          | Mask Type | Resolution | Train Iters |    Dataset    | l1 error |  PSNR  | SSIM  | Training Resources |                              Download                              |\n| :----------------------------------------------------: | :-------: | :--------: | :---------: | :-----------: | :------: | :----: | :---: | :----------------: | :----------------------------------------------------------------: |\n| [PConv_Stage1](./pconv_stage1_8xb12_places-256x256.py) | free-form |  256x256   |    500k     | Places365-val |    -     |   -    |   -   |         8          |                                 -                                  |\n| [PConv_Stage2](./pconv_stage2_4xb2_places-256x256.py)  | free-form |  256x256   |    500k     | Places365-val |  8.776   | 22.762 | 0.801 |         4          | [model](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.log.json) |\n| [PConv_Stage1](./pconv_stage1_8xb1_celeba-256x256.py)  | free-form |  256x256   |    500k     |  CelebA-val   |    -     |   -    |   -   |         8          |                                 -                                  |\n| [PConv_Stage2](./pconv_stage2_4xb2_celeba-256x256.py)  | free-form |  256x256   |    500k     |  CelebA-val   |  5.990   | 25.404 | 0.853 |         4          | [model](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_celeba_20200619-860f8b95.pth) \\| [log](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_celeba_20200619-860f8b95.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py\n\n# single-gpu train\npython tools/train.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/partial_conv/pconv_stage2_4xb2_places-256x256.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth\n\n# single-gpu test\npython tools/test.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{liu2018image,\n  title={Image inpainting for irregular holes using partial convolutions},\n  author={Liu, Guilin and Reda, Fitsum A and Shih, Kevin J and Wang, Ting-Chun and Tao, Andrew and Catanzaro, Bryan},\n  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},\n  pages={85--100},\n  year={2018}\n}\n```\n"
  },
  {
    "path": "configs/partial_conv/README_zh-CN.md",
    "content": "# PConv (ECCV'2018)\n\n> **任务**: 图像修复\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">PConv (ECCV'2018)</summary>\n\n```bibtex\n@inproceedings{liu2018image,\n  title={Image inpainting for irregular holes using partial convolutions},\n  author={Liu, Guilin and Reda, Fitsum A and Shih, Kevin J and Wang, Ting-Chun and Tao, Andrew and Catanzaro, Bryan},\n  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},\n  pages={85--100},\n  year={2018}\n}\n```\n\n</details>\n\n<br/>\n\n**Places365-Challenge**\n\n|                          算法                          | 掩膜类型  | 分辨率  | 训练集容量 |    测试集     | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                       下载                                        |\n| :----------------------------------------------------: | :-------: | :-----: | :--------: | :-----------: | :-----: | :----: | :---: | :------: | :-------------------------------------------------------------------------------: |\n| [PConv_Stage1](./pconv_stage1_8xb12_places-256x256.py) | free-form | 256x256 |    500k    | Places365-val |    -    |   -    |   -   |    8     |                                         -                                         |\n| [PConv_Stage2](./pconv_stage2_4xb2_places-256x256.py)  | free-form | 256x256 |    500k    | Places365-val |  8.776  | 22.762 | 0.801 |    4     | [模型](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.log.json) |\n\n**CelebA-HQ**\n\n|                         算法                          | 掩膜类型  | 分辨率  | 训练集容量 |   测试集   | l1 损失 |  PSNR  | SSIM  | GPU 信息 |                                         下载                                          |\n| :---------------------------------------------------: | :-------: | :-----: | :--------: | :--------: | :-----: | :----: | :---: | :------: | :-----------------------------------------------------------------------------------: |\n| [PConv_Stage1](./pconv_stage1_8xb1_celeba-256x256.py) | free-form | 256x256 |    500k    | CelebA-val |    -    |   -    |   -   |    8     |                                           -                                           |\n| [PConv_Stage2](./pconv_stage2_4xb2_celeba-256x256.py) | free-form | 256x256 |    500k    | CelebA-val |  5.990  | 25.404 | 0.853 |    4     | [模型](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_celeba_20200619-860f8b95.pth) \\| [日志](https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_celeba_20200619-860f8b95.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py\n\n# 单个GPU上训练\npython tools/train.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/partial_conv/pconv_stage2_4xb2_places-256x256.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth\n\n# 单个GPU上测试\npython tools/test.py configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/partial_conv/pconv_stage2_4xb2_places-256x256.py https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/partial_conv/metafile.yml",
    "content": "Collections:\n- Name: PConv\n  Paper:\n    Title: Image Inpainting for Irregular Holes Using Partial Convolutions\n    URL: https://arxiv.org/abs/1804.07723\n  README: configs/partial_conv/README.md\n  Task:\n  - inpainting\n  Year: 2018\nModels:\n- Config: configs/partial_conv/pconv_stage1_8xb12_places-256x256.py\n  In Collection: PConv\n  Name: pconv_stage1_8xb12_places-256x256\n  Results:\n  - Dataset: Places365-val\n    Metrics: {}\n    Task: Inpainting\n- Config: configs/partial_conv/pconv_stage2_4xb2_places-256x256.py\n  In Collection: PConv\n  Name: pconv_stage2_4xb2_places-256x256\n  Results:\n  - Dataset: Places365-val\n    Metrics:\n      PSNR: 22.762\n      SSIM: 0.801\n      l1 error: 8.776\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_places_20200619-1ffed0e8.pth\n- Config: configs/partial_conv/pconv_stage1_8xb1_celeba-256x256.py\n  In Collection: PConv\n  Name: pconv_stage1_8xb1_celeba-256x256\n  Results:\n  - Dataset: CelebA-val\n    Metrics: {}\n    Task: Inpainting\n- Config: configs/partial_conv/pconv_stage2_4xb2_celeba-256x256.py\n  In Collection: PConv\n  Name: pconv_stage2_4xb2_celeba-256x256\n  Results:\n  - Dataset: CelebA-val\n    Metrics:\n      PSNR: 25.404\n      SSIM: 0.853\n      l1 error: 5.99\n    Task: Inpainting\n  Weights: https://download.openmmlab.com/mmediting/inpainting/pconv/pconv_256x256_stage2_4x2_celeba_20200619-860f8b95.pth\n"
  },
  {
    "path": "configs/partial_conv/pconv_stage1_8xb12_places-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_pconv.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/places.py'\n]\n\nexperiment_name = 'pconv_stage1_8xb1_places-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=0,\n        start_iter=0,\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='SyncBN', requires_grad=True),\n            norm_eval=False),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='SyncBN'))),\n)\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=12,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=800002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.0002))\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=50000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/partial_conv/pconv_stage1_8xb1_celeba-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_pconv.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/celeba.py'\n]\n\nexperiment_name = 'pconv_stage1_8xb1_celeba-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=0,\n        start_iter=0,\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='SyncBN', requires_grad=True),\n            norm_eval=False),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='SyncBN'))),\n)\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=1,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=800002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.0002))\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=50000, by_epoch=False, out_dir=save_dir)\n"
  },
  {
    "path": "configs/partial_conv/pconv_stage2_4xb2_celeba-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_pconv.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/celeba.py'\n]\n\nexperiment_name = 'pconv_stage2_4xb2_celeba-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=0,\n        start_iter=0,\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='SyncBN', requires_grad=False),\n            norm_eval=True),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='SyncBN'))),\n)\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=2,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(\n    batch_size=1,\n    dataset=dict(pipeline=test_pipeline),\n)\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=300002,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.00005))\n\ncheckpoint = dict(\n    type='CheckpointHook', interval=50000, by_epoch=False, out_dir=save_dir)\n\n# load_from = 'pconv_stage1_8xb1_celeba-256x256/iter_800002.pth'\n"
  },
  {
    "path": "configs/partial_conv/pconv_stage2_4xb2_places-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_pconv.py', '../_base_/inpaint_default_runtime.py',\n    '../_base_/datasets/places.py'\n]\n\nexperiment_name = 'pconv_stage2_4xb2_places-256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nmodel = dict(\n    train_cfg=dict(\n        disc_step=0,\n        start_iter=0,\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='SyncBN', requires_grad=False),\n            norm_eval=True),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='SyncBN'))),\n)\n\ninput_shape = (256, 256)\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='irregular',\n        mask_config=dict(\n            num_vertices=(4, 10),\n            max_angle=6.0,\n            length_range=(20, 128),\n            brush_width=(10, 45),\n            area_ratio_range=(0.15, 0.65),\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\ntest_pipeline = train_pipeline\n\ntrain_dataloader = dict(\n    batch_size=2,\n    sampler=dict(shuffle=False),\n    dataset=dict(pipeline=train_pipeline),\n)\n\nval_dataloader = dict(batch_size=1, dataset=dict(pipeline=test_pipeline))\n\ntest_dataloader = val_dataloader\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',\n    max_iters=500000,\n    val_interval=50000,\n)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.00005))\n\ncheckpoint_config = dict(\n    type='CheckpointHook', by_epoch=False, interval=50000, out_dir=save_dir)\n\n# load_from = 'pconv_stage1_8xb1_places-256x256/iter_800002.pth'\n"
  },
  {
    "path": "configs/pggan/README.md",
    "content": "# PGGAN (ICLR'2018)\n\n> [Progressive Growing of GANs for Improved Quality, Stability, and Variation](https://arxiv.org/abs/1710.10196)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe describe a new training methodology for generative adversarial networks. The key idea is to grow both the generator and discriminator progressively: starting from a low resolution, we add new layers that model increasingly fine details as training progresses. This both speeds the training up and greatly stabilizes it, allowing us to produce images of unprecedented quality, e.g., CelebA images at 1024^2. We also propose a simple way to increase the variation in generated images, and achieve a record inception score of 8.80 in unsupervised CIFAR10. Additionally, we describe several implementation details that are important for discouraging unhealthy competition between the generator and discriminator. Finally, we suggest a new metric for evaluating GAN results, both in terms of image quality and variation. As an additional contribution, we construct a higher-quality version of the CelebA dataset.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143053374-c03894c3-6def-49c2-94ed-80c4accee726.JPG\" />\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> Results (compressed) from our PGGAN trained in CelebA-HQ@1024</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/114009864-1df45400-9896-11eb-9d25-da9eabfe02ce.png\" width=\"800\"/>\n</div>\n\n|                              Model                              |    Dataset     | MS-SSIM |     SWD(xx,xx,xx,xx/avg)     |                                         Download                                         |\n| :-------------------------------------------------------------: | :------------: | :-----: | :--------------------------: | :--------------------------------------------------------------------------------------: |\n| [pggan_128x128](./pggan_8xb4-12Mimgs_celeba-cropped-128x128.py) | celeba-cropped | 0.3023  | 3.42, 4.04, 4.78, 20.38/8.15 | [model](https://download.openmmlab.com/mmediting/pggan/pggan_celeba-cropped_128_g8_20210408_181931-85a2e72c.pth) |\n|  [pggan_128x128](./pggan_8xb4-12Mimgs_lsun-bedroom-128x128.py)  |  lsun-bedroom  | 0.0602  |  3.5, 2.96, 2.76, 9.65/4.72  | [model](https://download.openmmlab.com/mmediting/pggan/pggan_lsun-bedroom_128x128_g8_20210408_182033-5e59f45d.pth) |\n|  [pggan_1024x1024](./pggan_8xb4-12Mimg_celeba-hq-1024x1024.py)  |   celeba-hq    | 0.3379  | 8.93, 3.98, 3.07, 2.64/4.655 | [model](https://download.openmmlab.com/mmediting/pggan/pggan_celeba-hq_1024_g8_20210408_181911-f1ef51c3.pth) |\n\n## Citation\n\n<summary align=\"right\"><a href=\"https://arxiv.org/abs/1710.10196\">PGGAN (arXiv'2017)</a></summary>\n\n```latex\n@article{karras2017progressive,\n  title={Progressive growing of gans for improved quality, stability, and variation},\n  author={Karras, Tero and Aila, Timo and Laine, Samuli and Lehtinen, Jaakko},\n  journal={arXiv preprint arXiv:1710.10196},\n  year={2017},\n  url={https://arxiv.org/abs/1710.10196},\n}\n```\n"
  },
  {
    "path": "configs/pggan/metafile.yml",
    "content": "Collections:\n- Name: PGGAN\n  Paper:\n    Title: Progressive Growing of GANs for Improved Quality, Stability, and Variation\n    URL: https://arxiv.org/abs/1710.10196\n  README: configs/pggan/README.md\n  Task:\n  - unconditional gans\n  Year: 2018\nModels:\n- Config: configs/pggan/pggan_8xb4-12Mimgs_celeba-cropped-128x128.py\n  In Collection: PGGAN\n  Name: pggan_8xb4-12Mimgs_celeba-cropped-128x128\n  Results:\n  - Dataset: celeba-cropped\n    Metrics:\n      MS-SSIM: 0.3023\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pggan/pggan_celeba-cropped_128_g8_20210408_181931-85a2e72c.pth\n- Config: configs/pggan/pggan_8xb4-12Mimgs_lsun-bedroom-128x128.py\n  In Collection: PGGAN\n  Name: pggan_8xb4-12Mimgs_lsun-bedroom-128x128\n  Results:\n  - Dataset: lsun-bedroom\n    Metrics:\n      MS-SSIM: 0.0602\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pggan/pggan_lsun-bedroom_128x128_g8_20210408_182033-5e59f45d.pth\n- Config: configs/pggan/pggan_8xb4-12Mimg_celeba-hq-1024x1024.py\n  In Collection: PGGAN\n  Name: pggan_8xb4-12Mimg_celeba-hq-1024x1024\n  Results:\n  - Dataset: celeba-hq\n    Metrics:\n      MS-SSIM: 0.3379\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pggan/pggan_celeba-hq_1024_g8_20210408_181911-f1ef51c3.pth\n"
  },
  {
    "path": "configs/pggan/pggan_8xb4-12Mimg_celeba-hq-1024x1024.py",
    "content": "_base_ = ['../_base_/gen_default_runtime.py']\n\n# define GAN model\nmodel = dict(\n    type='ProgressiveGrowingGAN',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    noise_size=512,\n    generator=dict(type='PGGANGenerator', out_scale=1024, noise_size=512),\n    discriminator=dict(type='PGGANDiscriminator', in_scale=1024),\n    nkimgs_per_scale={\n        '4': 600,\n        '8': 1200,\n        '16': 1200,\n        '32': 1200,\n        '64': 1200,\n        '128': 1200,\n        '256': 1200,\n        '512': 1200,\n        '1024': 12000,\n    },\n    transition_kimgs=600,\n    ema_config=dict(interval=1))\n\n# MODEL\nmodel_wrapper_cfg = dict(find_unused_parameters=True)\n\n# TRAIN\ntrain_cfg = dict(max_iters=280000)\n\noptim_wrapper = dict(\n    constructor='PGGANOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    lr_schedule=dict(\n        generator={\n            '128': 0.0015,\n            '256': 0.002,\n            '512': 0.003,\n            '1024': 0.003\n        },\n        discriminator={\n            '128': 0.0015,\n            '256': 0.002,\n            '512': 0.003,\n            '1024': 0.003\n        }))\n\n# DATA\ndataset_type = 'GrowScaleImgDataset'\n\npipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Flip', keys='gt', direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type=dataset_type,\n        data_roots={\n            '64': './data/celebahq/imgs_64',\n            '256': './data/celebahq/imgs_256',\n            '512': './data/celebahq/imgs_512',\n            '1024': './data/celebahq/imgs_1024'\n        },\n        gpu_samples_base=4,\n        # note that this should be changed with total gpu number\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4\n        },\n        len_per_stage=300000,\n        pipeline=pipeline),\n    sampler=dict(type='InfiniteSampler', shuffle=True))\n\ntest_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type='BasicImageDataset',\n        pipeline=pipeline,\n        data_prefix=dict(gt=''),\n        data_root='./data/celebahq/imgs_1024'),\n    sampler=dict(type='DefaultSampler', shuffle=False))\n\n# VIS_HOOK + DATAFETCH\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n    dict(type='PGGANFetchDataHook')\n]\ndefault_hooks = dict(\n    checkpoint=dict(\n        max_keep_ckpts=20,\n        save_best=['swd/avg', 'ms-ssim/avg'],\n        rule=['less', 'greater']))\n\n# METRICS\nmetrics = [\n    dict(\n        type='SWD', fake_nums=16384, image_shape=(3, 1024, 1024),\n        prefix='SWD'),\n    dict(type='MS_SSIM', fake_nums=10000, prefix='MS-SSIM')\n]\n\n# do not evaluate in training\nval_cfg = val_evaluator = val_dataloader = None\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/pggan/pggan_8xb4-12Mimgs_celeba-cropped-128x128.py",
    "content": "_base_ = ['../_base_/gen_default_runtime.py']\n\n# define GAN model\nmodel = dict(\n    type='ProgressiveGrowingGAN',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    noise_size=512,\n    generator=dict(type='PGGANGenerator', out_scale=128),\n    discriminator=dict(type='PGGANDiscriminator', in_scale=128),\n    nkimgs_per_scale={\n        '4': 600,\n        '8': 1200,\n        '16': 1200,\n        '32': 1200,\n        '64': 1200,\n        '128': 12000\n    },\n    transition_kimgs=600,\n    ema_config=dict(interval=1))\n\n# MODEL\nmodel_wrapper_cfg = dict(find_unused_parameters=True)\n\n# TRAIN\ntrain_cfg = dict(max_iters=280000)\n\noptim_wrapper = dict(\n    constructor='PGGANOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    lr_schedule=dict(generator={'128': 0.0015}, discriminator={'128': 0.0015}))\n\n# DATA\ndataset_type = 'GrowScaleImgDataset'\ndata_roots = {'128': './data/celeba-cropped/cropped_images_aligned_png'}\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Resize', keys='gt', scale=(128, 128)),\n    dict(type='Flip', keys='gt', direction='horizontal'),\n    dict(type='PackInputs')\n]\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(type='Resize', keys='gt', scale=(128, 128)),\n    dict(type='PackInputs')\n]\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=64,  # initialize batch size\n    dataset=dict(\n        type=dataset_type,\n        pipeline=train_pipeline,\n        data_roots=data_roots,\n        gpu_samples_base=4,\n        # note that this should be changed with total gpu number\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4\n        },\n        len_per_stage=-1),\n    sampler=dict(type='InfiniteSampler', shuffle=True))\n\ntest_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type='BasicImageDataset',\n        pipeline=test_pipeline,\n        data_prefix=dict(gt=''),\n        data_root=data_roots['128']),\n    sampler=dict(type='DefaultSampler', shuffle=False))\n\n# VIS_HOOK + DATAFETCH\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n    dict(type='PGGANFetchDataHook')\n]\ndefault_hooks = dict(\n    checkpoint=dict(\n        max_keep_ckpts=20,\n        save_best=['swd/avg', 'ms-ssim/avg'],\n        rule=['less', 'greater']))\n\n# METRICS\nmetrics = [\n    dict(type='SWD', fake_nums=16384, image_shape=(3, 128, 128), prefix='SWD'),\n    dict(type='MS_SSIM', fake_nums=10000, prefix='MS-SSIM')\n]\n\n# do not evaluate in training\nval_cfg = val_evaluator = val_dataloader = None\n\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/pggan/pggan_8xb4-12Mimgs_lsun-bedroom-128x128.py",
    "content": "_base_ = ['./pggan_8xb4-12Mimgs_celeba-cropped-128x128.py']\n\n# Overwrite data configs\ndata_roots = {'128': './data/lsun/images/bedroom_train'}\ntrain_dataloader = dict(batch_size=64, dataset=dict(data_roots=data_roots))\ntest_dataloader = dict(dataset=dict(data_root=data_roots['128']))\n"
  },
  {
    "path": "configs/pix2pix/README.md",
    "content": "# Pix2Pix (CVPR'2017)\n\n> [Pix2Pix: Image-to-Image Translation with Conditional Adversarial Networks](https://openaccess.thecvf.com/content_cvpr_2017/html/Isola_Image-To-Image_Translation_With_CVPR_2017_paper.html)\n\n> **Task**: Image2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe investigate conditional adversarial networks as a general-purpose solution to image-to-image translation problems. These networks not only learn the mapping from input image to output image, but also learn a loss function to train this mapping. This makes it possible to apply the same generic approach to problems that traditionally would require very different loss formulations. We demonstrate that this approach is effective at synthesizing photos from label maps, reconstructing objects from edge maps, and colorizing images, among other tasks. Moreover, since the release of the pix2pix software associated with this paper, hundreds of twitter users have posted their own artistic experiments using our system. As a community, we no longer hand-engineer our mapping functions, and this work suggests we can achieve reasonable results without handengineering our loss functions either.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143053385-1b03356d-43df-423b-88b2-7a82b73d2edd.JPG\"/>\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> Results from Pix2Pix trained by mmagic</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/114269080-4ff0ec00-9a37-11eb-92c4-1525864e0307.PNG\" width=\"800\"/>\n</div>\nWe use `FID` and `IS` metrics to evaluate the generation performance of pix2pix.<sup>1</sup>\n\n|                                     Model                                      |   Dataset   |   FID    |  IS   |                                              Download                                              |\n| :----------------------------------------------------------------------------: | :---------: | :------: | :---: | :------------------------------------------------------------------------------------------------: |\n|           [Ours](./pix2pix_vanilla-unet-bn_1xb1-80kiters_facades.py)           |   facades   | 124.9773 | 1.620 | [model](https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_1x1_80k_facades_20210902_170442-c0958d50.pth)   \\| [log](https://download.openmmlab.com/mmediting/pix2pix/pix2pix_vanilla_unet_bn_1x1_80k_facades_20210317_172625.log.json)<sup>2</sup> |\n|        [Ours](./pix2pix_vanilla-unet-bn_1xb1-220kiters_aerial2maps.py)         | aerial2maps | 122.5856 | 3.137 | [model](https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_a2b_1x1_219200_maps_convert-bgr_20210902_170729-59a31517.pth) |\n|        [Ours](./pix2pix_vanilla-unet-bn_1xb1-220kiters_maps2aerial.py)         | maps2aerial | 88.4635  | 3.310 | [model](https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_b2a_1x1_219200_maps_convert-bgr_20210902_170814-6d2eac4a.pth) |\n| [Ours](./pix2pix_vanilla-unet-bn_wo-jitter-flip-1xb4-190kiters_edges2shoes.py) | edges2shoes | 84.3750  | 2.815 | [model](https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_wo_jitter_flip_1x4_186840_edges2shoes_convert-bgr_20210902_170902-0c828552.pth) |\n\n`FID` comparison with official:\n\n<!-- SKIP THIS TABLE -->\n\n| Dataset  |   facades   | aerial2maps  | maps2aerial | edges2shoes |   average    |\n| :------: | :---------: | :----------: | :---------: | :---------: | :----------: |\n| official | **119.135** |   149.731    |   102.072   | **75.774**  |   111.678    |\n|   ours   |  124.9773   | **122.5856** | **88.4635** |   84.3750   | **105.1003** |\n\n`IS` comparison with official:\n\n<!-- SKIP THIS TABLE -->\n\n| Dataset  |  facades  | aerial2maps | maps2aerial | edges2shoes |  average   |\n| :------: | :-------: | :---------: | :---------: | :---------: | :--------: |\n| official | **1.650** |    2.529    |  **3.552**  |    2.766    |   2.624    |\n|   ours   |   1.620   |  **3.137**  |    3.310    |  **2.815**  | **2.7205** |\n\nNote:\n\n1. we strictly follow the [paper](http://openaccess.thecvf.com/content_cvpr_2017/papers/Isola_Image-To-Image_Translation_With_CVPR_2017_paper.pdf) setting in Section 3.3: \"*At inference time, we run the generator net in exactly\n   the same manner as during the training phase. This differs\n   from the usual protocol in that we apply dropout at test time,\n   and we apply batch normalization using the statistics of\n   the test batch, rather than aggregated statistics of the training batch.*\" (i.e., use model.train() mode), thus may lead to slightly different inference results every time.\n2. This is the training log before refactoring. Updated logs will be released soon.\n\n## Citation\n\n```latex\n@inproceedings{isola2017image,\n  title={Image-to-image translation with conditional adversarial networks},\n  author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={1125--1134},\n  year={2017},\n  url={https://openaccess.thecvf.com/content_cvpr_2017/html/Isola_Image-To-Image_Translation_With_CVPR_2017_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/pix2pix/metafile.yml",
    "content": "Collections:\n- Name: Pix2Pix\n  Paper:\n    Title: 'Pix2Pix: Image-to-Image Translation with Conditional Adversarial Networks'\n    URL: https://openaccess.thecvf.com/content_cvpr_2017/html/Isola_Image-To-Image_Translation_With_CVPR_2017_paper.html\n  README: configs/pix2pix/README.md\n  Task:\n  - image2image\n  Year: 2017\nModels:\n- Config: configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-80kiters_facades.py\n  In Collection: Pix2Pix\n  Name: pix2pix_vanilla-unet-bn_1xb1-80kiters_facades\n  Results:\n  - Dataset: facades\n    Metrics:\n      FID: 124.9773\n      IS: 1.62\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_1x1_80k_facades_20210902_170442-c0958d50.pth\n- Config: configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-220kiters_aerial2maps.py\n  In Collection: Pix2Pix\n  Name: pix2pix_vanilla-unet-bn_1xb1-220kiters_aerial2maps\n  Results:\n  - Dataset: aerial2maps\n    Metrics:\n      FID: 122.5856\n      IS: 3.137\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_a2b_1x1_219200_maps_convert-bgr_20210902_170729-59a31517.pth\n- Config: configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-220kiters_maps2aerial.py\n  In Collection: Pix2Pix\n  Name: pix2pix_vanilla-unet-bn_1xb1-220kiters_maps2aerial\n  Results:\n  - Dataset: maps2aerial\n    Metrics:\n      FID: 88.4635\n      IS: 3.31\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_b2a_1x1_219200_maps_convert-bgr_20210902_170814-6d2eac4a.pth\n- Config: configs/pix2pix/pix2pix_vanilla-unet-bn_wo-jitter-flip-1xb4-190kiters_edges2shoes.py\n  In Collection: Pix2Pix\n  Name: pix2pix_vanilla-unet-bn_wo-jitter-flip-1xb4-190kiters_edges2shoes\n  Results:\n  - Dataset: edges2shoes\n    Metrics:\n      FID: 84.375\n      IS: 2.815\n    Task: Image2Image\n  Weights: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_wo_jitter_flip_1x4_186840_edges2shoes_convert-bgr_20210902_170902-0c828552.pth\n"
  },
  {
    "path": "configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-220kiters_aerial2maps.py",
    "content": "_base_ = [\n    '../_base_/models/base_pix2pix.py',\n    '../_base_/datasets/paired_imgs_256x256_crop.py',\n    '../_base_/gen_default_runtime.py'\n]\n# deterministic training can improve the performance of Pix2Pix\nrandomness = dict(deterministic=True)\n\nsource_domain = domain_a = 'aerial'\ntarget_domain = domain_b = 'map'\n# model settings\nmodel = dict(\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain],\n    data_preprocessor=dict(\n        data_keys=[f'img_{source_domain}', f'img_{target_domain}']))\n\ntrain_cfg = dict(max_iters=220000)\n\n# dataset settings\ndataroot = 'data/pix2pix/maps'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot, test_dir='val'))\nval_dataloader = dict(\n    dataset=dict(data_root=dataroot, test_dir='val', test_mode=True))\ntest_dataloader = val_dataloader\n\n# optimizer\noptim_wrapper = dict(\n    generators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))),\n    discriminators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full/fid', rule='less'))\n\nfake_nums = 1098\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=fake_nums,\n        fake_key=f'fake_{target_domain}',\n        inception_style='PyTorch',\n        sample_model='orig'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=fake_nums,\n        inception_style='PyTorch',\n        real_key=f'img_{target_domain}',\n        fake_key=f'fake_{target_domain}',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-220kiters_maps2aerial.py",
    "content": "_base_ = [\n    '../_base_/models/base_pix2pix.py',\n    '../_base_/datasets/paired_imgs_256x256_crop.py',\n    '../_base_/gen_default_runtime.py'\n]\n# deterministic training can improve the performance of Pix2Pix\nrandomness = dict(deterministic=True)\n\nsource_domain = domain_b = 'map'\ntarget_domain = domain_a = 'aerial'\n# model settings\nmodel = dict(\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain],\n    data_preprocessor=dict(\n        data_keys=[f'img_{source_domain}', f'img_{target_domain}']))\n\ntrain_cfg = dict(max_iters=220000)\n\n# dataset settings\ndataroot = 'data/pix2pix/maps'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot, test_dir='val'))\nval_dataloader = dict(\n    dataset=dict(data_root=dataroot, test_dir='val', test_mode=True))\ntest_dataloader = val_dataloader\n\n# optimizer\noptim_wrapper = dict(\n    generators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))),\n    discriminators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full/fid', rule='less'))\n\nfake_nums = 1098\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=fake_nums,\n        fake_key=f'fake_{target_domain}',\n        inception_style='PyTorch',\n        sample_model='orig'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=fake_nums,\n        inception_style='PyTorch',\n        real_key=f'img_{target_domain}',\n        fake_key=f'fake_{target_domain}',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/pix2pix/pix2pix_vanilla-unet-bn_1xb1-80kiters_facades.py",
    "content": "_base_ = [\n    '../_base_/models/base_pix2pix.py',\n    '../_base_/datasets/paired_imgs_256x256_crop.py',\n    '../_base_/gen_default_runtime.py'\n]\n# deterministic training can improve the performance of Pix2Pix\nrandomness = dict(deterministic=True)\n\nsource_domain = domain_b = 'mask'\ntarget_domain = domain_a = 'photo'\n# model settings\nmodel = dict(\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain],\n    data_preprocessor=dict(data_keys=[f'img_{domain_a}', f'img_{domain_b}']))\n\ntrain_cfg = dict(max_iters=80000)\n\n# dataset settings\ndataroot = 'data/pix2pix/facades'\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(dataset=dict(data_root=dataroot))\nval_dataloader = dict(dataset=dict(data_root=dataroot, test_mode=True))\ntest_dataloader = val_dataloader\n\n# optimizer\noptim_wrapper = dict(\n    generators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))),\n    discriminators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full/fid', rule='less'))\n\nfake_nums = 106\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=fake_nums,\n        inception_style='PyTorch',\n        fake_key=f'fake_{target_domain}',\n        sample_model='orig'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=fake_nums,\n        inception_style='PyTorch',\n        real_key=f'img_{target_domain}',\n        fake_key=f'fake_{target_domain}',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/pix2pix/pix2pix_vanilla-unet-bn_wo-jitter-flip-1xb4-190kiters_edges2shoes.py",
    "content": "_base_ = [\n    '../_base_/models/base_pix2pix.py',\n    '../_base_/datasets/paired_imgs_256x256_crop.py',\n    '../_base_/gen_default_runtime.py',\n]\n# deterministic training can improve the performance of Pix2Pix\nrandomness = dict(deterministic=True)\n\nsource_domain = domain_a = 'edges'\ntarget_domain = domain_b = 'photo'\n# model settings\nmodel = dict(\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain],\n    data_preprocessor=dict(\n        data_keys=[f'img_{source_domain}', f'img_{target_domain}']))\n\ntrain_cfg = dict(max_iters=190000)\n\n# dataset settings\ndataroot = './data/pix2pix/edges2shoes'\n# overwrite train pipeline since we do not use flip and crop\n_base_.train_dataloader.dataset.pipeline = [\n    dict(\n        type='LoadPairedImageFromFile',\n        key='pair',\n        domain_a='A',\n        domain_b='B',\n        color_type='color'),\n    dict(\n        type='Resize',\n        keys=['img_A', 'img_B'],\n        scale=(256, 256),\n        interpolation='bicubic'),\n]\ntrain_pipeline = _base_.train_dataloader.dataset.pipeline\nval_pipeline = _base_.val_dataloader.dataset.pipeline\ntest_pipeline = _base_.test_dataloader.dataset.pipeline\n\nkey_mapping = dict(\n    type='KeyMapper',\n    mapping={\n        f'img_{domain_a}': 'img_A',\n        f'img_{domain_b}': 'img_B'\n    },\n    remapping={\n        f'img_{domain_a}': f'img_{domain_a}',\n        f'img_{domain_b}': f'img_{domain_b}'\n    })\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n\ntrain_pipeline += [key_mapping, pack_input]\nval_pipeline += [key_mapping, pack_input]\ntest_pipeline += [key_mapping, pack_input]\n\ntrain_dataloader = dict(\n    batch_size=4, dataset=dict(data_root=dataroot, test_dir='val'))\nval_dataloader = dict(\n    dataset=dict(data_root=dataroot, test_dir='val', test_mode=True))\ntest_dataloader = val_dataloader\n\n# optimizer\noptim_wrapper = dict(\n    generators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))),\n    discriminators=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))))\n\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(type='Translation', name='trans'),\n            dict(type='TranslationVal', name='trans_val')\n        ])\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full/fid', rule='less'))\n\nfake_nums = 200\nmetrics = [\n    dict(\n        type='TransIS',\n        prefix='IS-Full',\n        fake_nums=fake_nums,\n        fake_key=f'fake_{target_domain}',\n        inception_style='PyTorch',\n        sample_model='orig'),\n    dict(\n        type='TransFID',\n        prefix='FID-Full',\n        fake_nums=fake_nums,\n        inception_style='PyTorch',\n        real_key=f'img_{target_domain}',\n        fake_key=f'fake_{target_domain}',\n        sample_model='orig')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/README.md",
    "content": "# Positional Encoding in GANs (CVPR'2021)\n\n> [Positional Encoding as Spatial Inductive Bias in GANs](https://openaccess.thecvf.com/content/CVPR2021/html/Xu_Positional_Encoding_As_Spatial_Inductive_Bias_in_GANs_CVPR_2021_paper.html)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nSinGAN shows impressive capability in learning internal patch distribution despite its limited effective receptive field. We are interested in knowing how such a translation-invariant convolutional generator could capture the global structure with just a spatially i.i.d. input. In this work, taking SinGAN and StyleGAN2 as examples, we show that such capability, to a large extent, is brought by the implicit positional encoding when using zero padding in the generators. Such positional encoding is indispensable for generating images with high fidelity. The same phenomenon is observed in other generative architectures such as DCGAN and PGGAN. We further show that zero padding leads to an unbalanced spatial bias with a vague relation between locations. To offer a better spatial inductive bias, we investigate alternative positional encodings and analyze their effects. Based on a more flexible positional encoding explicitly, we propose a new multi-scale training strategy and demonstrate its effectiveness in the state-of-the-art unconditional generator StyleGAN2. Besides, the explicit spatial inductive bias substantially improve SinGAN for more versatile image manipulation.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143053767-c6a503b2-87ff-434a-a439-d9fb0e98d804.JPG\"/>\n</div>\n\n## Results and models for MS-PIE\n\n<div align=\"center\">\n  <b> 896x896 results generated from a 256 generator using MS-PIE</b>\n  <br/>\n  <img src=\"https://download.openmmlab.com/mmediting/pe_in_gans/mspie_256-896_demo.png\" width=\"800\"/>\n</div>\n\n|                                 Model                                  | Dataset | Reference in Paper |     Scales     | FID50k |   P&R10k    |                                  Download                                  |\n| :--------------------------------------------------------------------: | :-----: | :----------------: | :------------: | :----: | :---------: | :------------------------------------------------------------------------: |\n| [stylegan2_c2_8xb3-1100kiters_ffhq-256x256](./stylegan2_c2_8xb3-1100kiters_ffhq-256x256.py) |  FFHQ   |   Tab.5 config-a   |      256       |  5.56  | 75.92/51.24 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-a_ffhq_256x256_b3x8_1100k_20210406_145127-71d9634b.pth) |\n| [stylegan2_c2_8xb3-1100kiters_ffhq-512x512](./stylegan2_c2_8xb3-1100kiters_ffhq-512x512.py) |  FFHQ   |   Tab.5 config-b   |      512       |  4.91  | 75.65/54.58 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-b_ffhq_512x512_b3x8_1100k_20210406_145142-e85e5cf4.pth) |\n| [mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-c   | 256, 384, 512  |  3.35  | 73.84/55.77 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-c_ffhq_256-512_b3x8_1100k_20210406_144824-9f43b07d.pth) |\n| [mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-d   | 256, 384, 512  |  3.50  | 73.28/56.16 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-d_ffhq_256-512_b3x8_1100k_20210406_144840-dbefacf6.pth) |\n| [mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-e   | 256, 384, 512  |  3.15  | 74.13/56.88 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-e_ffhq_256-512_b3x8_1100k_20210406_144906-98d5a42a.pth) |\n| [mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-f   | 256, 384, 512  |  2.93  | 73.51/57.32 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-512_b3x8_1100k_20210406_144927-4f4d5391.pth) |\n| [mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-g   | 256, 384, 512  |  3.40  | 73.05/56.45 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-g_ffhq_256-512_b3x8_1100k_20210406_144758-2df61752.pth) |\n| [mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-h   | 256, 384, 512  |  4.01  | 72.81/54.35 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-h_ffhq_256-512_b3x8_1100k_20210406_145006-84cf3f48.pth) |\n| [mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   | 2  Tab.5 config-i  |  56, 384, 512  |  3.76  | 73.26/54.71 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-i_ffhq_256-512_b3x8_1100k_20210406_145023-c2b0accf.pth) |\n| [mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-j   | 256, 384, 512  |  4.23  | 73.11/54.63 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-j_ffhq_256-512_b3x8_1100k_20210406_145044-c407481b.pth) |\n| [mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-k   | 256, 384, 512  |  4.17  | 73.05/51.07 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-k_ffhq_256-512_b3x8_1100k_20210406_145105-6d8cc39f.pth) |\n| [mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896](./mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896.py) |  FFHQ   | higher-resolution  | 256, 512, 896  |  4.10  | 72.21/50.29 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-896_b3x8_1100k_20210406_144943-6c18ad5d.pth) |\n| [mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024](./mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024.py) |  FFHQ   | higher-resolution  | 256, 512, 1024 |  6.24  | 71.79/49.92 | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-f_ffhq_256-1024_b2x8_1600k_20210406_144716-81cbdc96.pth) |\n\n|                               Model                               | Dataset | Reference in Paper |     Scales     | FID50k | Precision10k | Recall10k |                               Download                                |\n| :---------------------------------------------------------------: | :-----: | :----------------: | :------------: | :----: | :----------: | :-------: | :-------------------------------------------------------------------: |\n| [stylegan2_c2_8xb3-1100kiters_ffhq-256x256](./stylegan2_c2_8xb3-1100kiters_ffhq-256x256.py) |  FFHQ   |   Tab.5 config-a   |      256       |  5.56  |    75.92     |   51.24   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-a_ffhq_256x256_b3x8_1100k_20210406_145127-71d9634b.pth) |\n| [stylegan2_c2_8xb3-1100kiters_ffhq-512x512](./stylegan2_c2_8xb3-1100kiters_ffhq-512x512.py) |  FFHQ   |   Tab.5 config-b   |      512       |  4.91  |    75.65     |   54.58   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-b_ffhq_512x512_b3x8_1100k_20210406_145142-e85e5cf4.pth) |\n| [mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-c   | 256, 384, 512  |  3.35  |    73.84     |   55.77   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-c_ffhq_256-512_b3x8_1100k_20210406_144824-9f43b07d.pth) |\n| [mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-d   | 256, 384, 512  |  3.50  |    73.28     |   56.16   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-d_ffhq_256-512_b3x8_1100k_20210406_144840-dbefacf6.pth) |\n| [mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-e   | 256, 384, 512  |  3.15  |    74.13     |   56.88   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-e_ffhq_256-512_b3x8_1100k_20210406_144906-98d5a42a.pth) |\n| [mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-f   | 256, 384, 512  |  2.93  |    73.51     |   57.32   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-512_b3x8_1100k_20210406_144927-4f4d5391.pth) |\n| [mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-g   | 256, 384, 512  |  3.40  |    73.05     |   56.45   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-g_ffhq_256-512_b3x8_1100k_20210406_144758-2df61752.pth) |\n| [mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-h   | 256, 384, 512  |  4.01  |    72.81     |   54.35   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-h_ffhq_256-512_b3x8_1100k_20210406_145006-84cf3f48.pth) |\n| [mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-i   | 256, 384, 512  |  3.76  |    73.26     |   54.71   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-i_ffhq_256-512_b3x8_1100k_20210406_145023-c2b0accf.pth) |\n| [mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-j   | 256, 384, 512  |  4.23  |    73.11     |   54.63   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-j_ffhq_256-512_b3x8_1100k_20210406_145044-c407481b.pth) |\n| [mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512](./mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512.py) |  FFHQ   |   Tab.5 config-k   | 256, 384, 512  |  4.17  |    73.05     |   51.07   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-k_ffhq_256-512_b3x8_1100k_20210406_145105-6d8cc39f.pth) |\n| [mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896](./mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896.py) |  FFHQ   | higher-resolution  | 256, 512, 896  |  4.10  |    72.21     |   50.29   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-896_b3x8_1100k_20210406_144943-6c18ad5d.pth) |\n| [mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024](./mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024.py) |  FFHQ   | higher-resolution  | 256, 512, 1024 |  6.24  |    71.79     |   49.92   | [model](https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-f_ffhq_256-1024_b2x8_1600k_20210406_144716-81cbdc96.pth) |\n\nNote that we report the FID and P&R metric (FFHQ dataset) in the largest scale.\n\n## Results and Models for SinGAN\n\n<div align=\"center\">\n  <b> Positional Encoding in SinGAN</b>\n  <br/>\n  <img src=\"https://nbei.github.io/gan-pos-encoding/teaser-web-singan.png\" width=\"800\"/>\n</div>\n\n|                             Model                             |                             Dataset                              | Num Scales |                             Download                              |\n| :-----------------------------------------------------------: | :--------------------------------------------------------------: | :--------: | :---------------------------------------------------------------: |\n| [singan_interp-pad_balloons](./singan_interp-pad_balloons.py) | [balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png) |     8      | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_balloons_20210406_180014-96f51555.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_balloons_20210406_180014-96f51555.pkl) |\n| [singan_interp-pad_disc-nobn_balloons](./singan_interp-pad_disc-nobn_balloons.py) | [balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png) |     8      | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_balloons_20210406_180059-7d63e65d.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_balloons_20210406_180059-7d63e65d.pkl) |\n| [singan_interp-pad_disc-nobn_fish](./singan_interp-pad_disc-nobn_fish.py) | [fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_fis_20210406_175720-9428517a.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_fis_20210406_175720-9428517a.pkl) |\n|            [singan-csg_fish](./singan-csg_fish.py)            | [fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_fis_20210406_175532-f0ec7b61.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_fis_20210406_175532-f0ec7b61.pkl) |\n|        [singan-csg_bohemian](./singan-csg_bohemian.py)        | [bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_bohemian_20210407_195455-5ed56db2.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_bohemian_20210407_195455-5ed56db2.pkl) |\n|       [singan_spe-dim4_fish](./singan_spe-dim4_fish.py)       | [fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_fish_20210406_175933-f483a7e3.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_fish_20210406_175933-f483a7e3.pkl) |\n|   [singan_spe-dim4_bohemian](./singan_spe-dim4_bohemian.py)   | [bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_bohemian_20210406_175820-6e484a35.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_bohemian_20210406_175820-6e484a35.pkl) |\n|   [singan_spe-dim8_bohemian](./singan_spe-dim8_bohemian.py)   | [bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png) |     10     | [ckpt](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim8_bohemian_20210406_175858-7faa50f3.pth) \\| [pkl](https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim8_bohemian_20210406_175858-7faa50f3.pkl) |\n\n## Citation\n\n```latex\n@article{xu2020positional,\n  title={Positional Encoding as Spatial Inductive Bias in GANs},\n  author={Xu, Rui and Wang, Xintao and Chen, Kai and Zhou, Bolei and Loy, Chen Change},\n  journal={arXiv preprint arXiv:2012.05217},\n  year={2020},\n  url={https://openaccess.thecvf.com/content/CVPR2021/html/Xu_Positional_Encoding_As_Spatial_Inductive_Bias_in_GANs_CVPR_2021_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/metafile.yml",
    "content": "Collections:\n- Name: Positional Encoding in GANs\n  Paper:\n    Title: Positional Encoding as Spatial Inductive Bias in GANs\n    URL: https://openaccess.thecvf.com/content/CVPR2021/html/Xu_Positional_Encoding_As_Spatial_Inductive_Bias_in_GANs_CVPR_2021_paper.html\n  README: configs/positional_encoding_in_gans/README.md\n  Task:\n  - unconditional gans\n  Year: 2021\nModels:\n- Config: configs/positional_encoding_in_gans/stylegan2_c2_8xb3-1100kiters_ffhq-256x256.py\n  In Collection: Positional Encoding in GANs\n  Name: stylegan2_c2_8xb3-1100kiters_ffhq-256x256\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 5.56\n      P&R10k:\n        PSNR: 75.92\n        SSIM: 51.24\n      Scales: 256.0\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 5.56\n      Precision10k: 75.92\n      Recall10k: 51.24\n      Scales: 256.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-a_ffhq_256x256_b3x8_1100k_20210406_145127-71d9634b.pth\n- Config: configs/positional_encoding_in_gans/stylegan2_c2_8xb3-1100kiters_ffhq-512x512.py\n  In Collection: Positional Encoding in GANs\n  Name: stylegan2_c2_8xb3-1100kiters_ffhq-512x512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.91\n      P&R10k:\n        PSNR: 75.65\n        SSIM: 54.58\n      Scales: 512.0\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.91\n      Precision10k: 75.65\n      Recall10k: 54.58\n      Scales: 512.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/stylegan2_c2_config-b_ffhq_512x512_b3x8_1100k_20210406_145142-e85e5cf4.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.35\n      P&R10k:\n        PSNR: 73.84\n        SSIM: 55.77\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.35\n      Precision10k: 73.84\n      Recall10k: 55.77\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-c_ffhq_256-512_b3x8_1100k_20210406_144824-9f43b07d.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.5\n      P&R10k:\n        PSNR: 73.28\n        SSIM: 56.16\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.5\n      Precision10k: 73.28\n      Recall10k: 56.16\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-d_ffhq_256-512_b3x8_1100k_20210406_144840-dbefacf6.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.15\n      P&R10k:\n        PSNR: 74.13\n        SSIM: 56.88\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.15\n      Precision10k: 74.13\n      Recall10k: 56.88\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-e_ffhq_256-512_b3x8_1100k_20210406_144906-98d5a42a.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 2.93\n      P&R10k:\n        PSNR: 73.51\n        SSIM: 57.32\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 2.93\n      Precision10k: 73.51\n      Recall10k: 57.32\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-512_b3x8_1100k_20210406_144927-4f4d5391.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.4\n      P&R10k:\n        PSNR: 73.05\n        SSIM: 56.45\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.4\n      Precision10k: 73.05\n      Recall10k: 56.45\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-g_ffhq_256-512_b3x8_1100k_20210406_144758-2df61752.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.01\n      P&R10k:\n        PSNR: 72.81\n        SSIM: 54.35\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.01\n      Precision10k: 72.81\n      Recall10k: 54.35\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-h_ffhq_256-512_b3x8_1100k_20210406_145006-84cf3f48.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.76\n      P&R10k:\n        PSNR: 73.26\n        SSIM: 54.71\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.76\n      Precision10k: 73.26\n      Recall10k: 54.71\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-i_ffhq_256-512_b3x8_1100k_20210406_145023-c2b0accf.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.23\n      P&R10k:\n        PSNR: 73.11\n        SSIM: 54.63\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.23\n      Precision10k: 73.11\n      Recall10k: 54.63\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-j_ffhq_256-512_b3x8_1100k_20210406_145044-c407481b.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.17\n      P&R10k:\n        PSNR: 73.05\n        SSIM: 51.07\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.17\n      Precision10k: 73.05\n      Recall10k: 51.07\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-k_ffhq_256-512_b3x8_1100k_20210406_145105-6d8cc39f.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.1\n      P&R10k:\n        PSNR: 72.21\n        SSIM: 50.29\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.1\n      Precision10k: 72.21\n      Recall10k: 50.29\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c2_config-f_ffhq_256-896_b3x8_1100k_20210406_144943-6c18ad5d.pth\n- Config: configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024.py\n  In Collection: Positional Encoding in GANs\n  Name: mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 6.24\n      P&R10k:\n        PSNR: 71.79\n        SSIM: 49.92\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 6.24\n      Precision10k: 71.79\n      Recall10k: 49.92\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/mspie-stylegan2_c1_config-f_ffhq_256-1024_b2x8_1600k_20210406_144716-81cbdc96.pth\n- Config: configs/positional_encoding_in_gans/singan_interp-pad_balloons.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_interp-pad_balloons\n  Results:\n  - Dataset: '[balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png)'\n    Metrics:\n      Num Scales: 8.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_balloons_20210406_180014-96f51555.pth\n- Config: configs/positional_encoding_in_gans/singan_interp-pad_disc-nobn_balloons.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_interp-pad_disc-nobn_balloons\n  Results:\n  - Dataset: '[balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png)'\n    Metrics:\n      Num Scales: 8.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_balloons_20210406_180059-7d63e65d.pth\n- Config: configs/positional_encoding_in_gans/singan_interp-pad_disc-nobn_fish.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_interp-pad_disc-nobn_fish\n  Results:\n  - Dataset: '[fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_interp-pad_disc-nobn_fis_20210406_175720-9428517a.pth\n- Config: configs/positional_encoding_in_gans/singan-csg_fish.py\n  In Collection: Positional Encoding in GANs\n  Name: singan-csg_fish\n  Results:\n  - Dataset: '[fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_fis_20210406_175532-f0ec7b61.pth\n- Config: configs/positional_encoding_in_gans/singan-csg_bohemian.py\n  In Collection: Positional Encoding in GANs\n  Name: singan-csg_bohemian\n  Results:\n  - Dataset: '[bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_csg_bohemian_20210407_195455-5ed56db2.pth\n- Config: configs/positional_encoding_in_gans/singan_spe-dim4_fish.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_spe-dim4_fish\n  Results:\n  - Dataset: '[fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_fish_20210406_175933-f483a7e3.pth\n- Config: configs/positional_encoding_in_gans/singan_spe-dim4_bohemian.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_spe-dim4_bohemian\n  Results:\n  - Dataset: '[bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim4_bohemian_20210406_175820-6e484a35.pth\n- Config: configs/positional_encoding_in_gans/singan_spe-dim8_bohemian.py\n  In Collection: Positional Encoding in GANs\n  Name: singan_spe-dim8_bohemian\n  Results:\n  - Dataset: '[bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/pe_in_gans/singan_spe-dim8_bohemian_20210406_175858-7faa50f3.pth\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-c_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=None,\n        deconv2conv=True,\n        up_after_conv=True,\n        head_pos_size=(4, 4),\n        interp_head=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]),\n    ema_config=ema_config)\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-d_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(type='CSG'),\n        deconv2conv=True,\n        up_after_conv=True,\n        head_pos_size=(4, 4),\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]),\n    ema_config=ema_config)\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-e_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=True,\n        head_pos_size=(4, 4),\n        interp_head=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c1_8xb2-1600kiters_ffhq-256-1024.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\ntrain_cfg = dict(max_iters=1500002)\n# `batch_size` and `imgs_root` need to be set.\nbatch_size = 2\ndata_root = './data/ffhq/images'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256,\n        channel_multiplier=1),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 4, 12],\n        multi_scale_probability=[0.5, 0.25, 0.25]),\n    ema_config=ema_config)\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-f_c2_8xb3-1100kiters_ffhq-256-896.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 4, 10],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/images'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-g_c1_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256,\n        channel_multiplier=1),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator',\n        in_size=256,\n        with_adaptive_pool=True,\n        channel_multiplier=1),\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]),\n    ema_config=ema_config)\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-h_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=None,\n        deconv2conv=True,\n        up_after_conv=False,\n        interp_pad=4,\n        no_pad=True,\n        head_pos_size=(6, 6),\n        interp_head=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-i_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(type='CSG'),\n        deconv2conv=True,\n        up_after_conv=False,\n        interp_pad=4,\n        no_pad=True,\n        head_pos_size=(6, 6),\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-j_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=False,\n        interp_pad=4,\n        no_pad=True,\n        head_pos_size=(6, 6),\n        interp_head=True,\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/mspie-stylegan2-config-k_c2_8xb3-1100kiters_ffhq-256-512.py",
    "content": "_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nema_half_life = 10.\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\nmodel = dict(\n    type='MSPIEStyleGAN2',\n    generator=dict(\n        type='MSStyleGANv2Generator',\n        head_pos_encoding=dict(\n            type='SPE',\n            embedding_dim=256,\n            padding_idx=0,\n            init_size=256,\n            center_shift=100),\n        deconv2conv=True,\n        up_after_conv=False,\n        interp_pad=4,\n        no_pad=True,\n        head_pos_size=(6, 6),\n        up_config=dict(scale_factor=2, mode='bilinear', align_corners=True),\n        out_size=256),\n    discriminator=dict(\n        type='MSStyleGAN2Discriminator', in_size=256, with_adaptive_pool=True),\n    ema_config=ema_config,\n    train_settings=dict(\n        num_upblocks=6,\n        multi_input_scales=[0, 2, 4],\n        multi_scale_probability=[0.5, 0.25, 0.25]))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\ntrain_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root))\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Resize', scale=(256, 256)),\n    dict(type='PackInputs', keys=['img'])\n]\n\nval_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\ntest_dataloader = dict(\n    batch_size=batch_size,  # set by user\n    dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# define optimizer\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\ndefault_hooks = dict(checkpoint=dict(save_best=['FID-50k/fid'], rule=['less']))\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='pytorch',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan-csg_bohemian.py",
    "content": "_base_ = ['../singan/singan_bohemian.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_csg_bohemian_20210407_195455-5ed56db2.pkl'  # noqa\ntest_pkl_data = None\n\nnum_scales = 10  # start from zero\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE',\n        num_scales=num_scales,\n        padding=1,\n        pad_at_head=False,\n        first_stage_in_channels=2,\n        positional_encoding=dict(type='CSG')),\n    discriminator=dict(num_scales=num_scales),\n    first_fixed_noises_ch=2,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan-csg_fish.py",
    "content": "_base_ = ['../singan/singan_fish.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_csg_fis_20210406_175532-f0ec7b61.pkl'  # noqa\ntest_pkl_data = None\n\nnum_scales = 10  # start from zero\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE',\n        num_scales=num_scales,\n        padding=1,\n        pad_at_head=False,\n        first_stage_in_channels=2,\n        positional_encoding=dict(type='CSG')),\n    discriminator=dict(num_scales=num_scales),\n    first_fixed_noises_ch=2,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_interp-pad_balloons.py",
    "content": "_base_ = ['../singan/singan_balloons.py']\n\n# TODO: bugs here\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_interp-pad_balloons_20210406_180014-96f51555.pkl'  # noqa\ntest_pkl_data = None\n\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE', interp_pad=True, noise_with_pad=True),\n    fixed_noise_with_pad=True,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_interp-pad_disc-nobn_balloons.py",
    "content": "_base_ = ['../singan/singan_balloons.py']\n\n# TODO: have bugs\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_interp-pad_disc-nobn_balloons_20210406_180059-7d63e65d.pkl'  # noqa\ntest_pkl_data = None\n\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE', interp_pad=True, noise_with_pad=True),\n    discriminator=dict(norm_cfg=None),\n    fixed_noise_with_pad=True)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_interp-pad_disc-nobn_fish.py",
    "content": "_base_ = ['../singan/singan_fish.py']\n\n# TODO: have bugs\n# MODEL\n# test_pkl_data = './work_dirs/singan_pkl/singan_interp-pad_disc-nobn_fis_20210406_175720-9428517a.pkl'  # noqa\ntest_pkl_data = None\n\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE', interp_pad=True, noise_with_pad=True),\n    discriminator=dict(norm_cfg=None),\n    fixed_noise_with_pad=True,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_spe-dim4_bohemian.py",
    "content": "_base_ = ['../singan/singan_bohemian.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_spe-dim4_bohemian_20210406_175820-6e484a35.pkl'  # noqa\ntest_pkl_data = None\n\nembedding_dim = 4\nnum_scales = 10  # start from zero\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE',\n        num_scales=num_scales,\n        padding=1,\n        pad_at_head=False,\n        first_stage_in_channels=embedding_dim * 2,\n        positional_encoding=dict(\n            type='SPE',\n            embedding_dim=embedding_dim,\n            padding_idx=0,\n            init_size=512,\n            div_half_dim=False,\n            center_shift=200)),\n    discriminator=dict(num_scales=num_scales),\n    first_fixed_noises_ch=embedding_dim * 2,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_spe-dim4_fish.py",
    "content": "_base_ = ['../singan/singan_fish.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_spe-dim4_fish_20210406_175933-f483a7e3.pkl'  # noqa\ntest_pkl_data = None\n\nembedding_dim = 4\nnum_scales = 10  # start from zero\nmodel = dict(\n    type='PESinGAN',\n    num_scales=num_scales,\n    generator=dict(\n        type='SinGANMSGeneratorPE',\n        num_scales=num_scales,\n        padding=1,\n        pad_at_head=False,\n        first_stage_in_channels=embedding_dim * 2,\n        positional_encoding=dict(\n            type='SPE',\n            embedding_dim=embedding_dim,\n            padding_idx=0,\n            init_size=512,\n            div_half_dim=False,\n            center_shift=200)),\n    discriminator=dict(num_scales=num_scales),\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/singan_spe-dim8_bohemian.py",
    "content": "_base_ = ['../singan/singan_bohemian.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_spe-dim8_bohemian_20210406_175858-7faa50f3.pkl'  # noqa\ntest_pkl_data = None\n\nembedding_dim = 8\nnum_scales = 10  # start from zero\nmodel = dict(\n    type='PESinGAN',\n    generator=dict(\n        type='SinGANMSGeneratorPE',\n        num_scales=num_scales,\n        padding=1,\n        pad_at_head=False,\n        first_stage_in_channels=embedding_dim * 2,\n        positional_encoding=dict(\n            type='SPE',\n            embedding_dim=embedding_dim,\n            padding_idx=0,\n            init_size=512,\n            div_half_dim=False,\n            center_shift=200)),\n    discriminator=dict(num_scales=num_scales),\n    first_fixed_noises_ch=embedding_dim * 2,\n    test_pkl_data=test_pkl_data)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/stylegan2_c2_8xb3-1100kiters_ffhq-256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))))\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_256'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/positional_encoding_in_gans/stylegan2_c2_8xb3-1100kiters_ffhq-512x512.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=512),\n    discriminator=dict(in_size=512),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))))\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 3\ndata_root = './data/ffhq/ffhq_imgs/ffhq_512'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=1100002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=10000, prefix='PR-10K')\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/rdn/README.md",
    "content": "# RDN (CVPR'2018)\n\n> [Residual Dense Network for Image Super-Resolution](https://arxiv.org/abs/1802.08797)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nA very deep convolutional neural network (CNN) has recently achieved great success for image super-resolution (SR) and offered hierarchical features as well. However, most deep CNN based SR models do not make full use of the hierarchical features from the original low-resolution (LR) images, thereby achieving relatively-low performance. In this paper, we propose a novel residual dense network (RDN) to address this problem in image SR. We fully exploit the hierarchical features from all the convolutional layers. Specifically, we propose residual dense block (RDB) to extract abundant local features via dense connected convolutional layers. RDB further allows direct connections from the state of preceding RDB to all the layers of current RDB, leading to a contiguous memory (CM) mechanism. Local feature fusion in RDB is then used to adaptively learn more effective features from preceding and current local features and stabilizes the training of wider network. After fully obtaining dense local features, we use global feature fusion to jointly and adaptively learn global hierarchical features in a holistic way. Extensive experiments on benchmark datasets with different degradation models show that our RDN achieves favorable performance against state-of-the-art methods.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144034203-c3a4ac55-d815-4180-a345-f80ab5ca68b6.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR and SSIM` .\n\n|                               Model                                | Dataset |  PSNR   |  SSIM  | Training Resources |                                             Download                                             |\n| :----------------------------------------------------------------: | :-----: | :-----: | :----: | :----------------: | :----------------------------------------------------------------------------------------------: |\n| [rdn_x4c64b16_g1_1000k_div2k](./rdn_x4c64b16_1xb16-1000k_div2k.py) |  Set5   | 30.4922 | 0.8548 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.log.json) |\n| [rdn_x4c64b16_g1_1000k_div2k](./rdn_x4c64b16_1xb16-1000k_div2k.py) |  Set14  | 26.9570 | 0.7423 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.log.json) |\n| [rdn_x4c64b16_g1_1000k_div2k](./rdn_x4c64b16_1xb16-1000k_div2k.py) |  DIV2K  | 29.1925 | 0.8233 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.log.json) |\n| [rdn_x3c64b16_g1_1000k_div2k](./rdn_x3c64b16_1xb16-1000k_div2k.py) |  Set5   | 32.6051 | 0.8943 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.log.json) |\n| [rdn_x3c64b16_g1_1000k_div2k](./rdn_x3c64b16_1xb16-1000k_div2k.py) |  Set14  | 28.6338 | 0.8077 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.log.json) |\n| [rdn_x3c64b16_g1_1000k_div2k](./rdn_x3c64b16_1xb16-1000k_div2k.py) |  DIV2K  | 31.2153 | 0.8763 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.log.json) |\n| [rdn_x2c64b16_g1_1000k_div2k](./rdn_x2c64b16_1xb16-1000k_div2k.py) |  Set5   | 35.9883 | 0.9385 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.log.json) |\n| [rdn_x2c64b16_g1_1000k_div2k](./rdn_x2c64b16_1xb16-1000k_div2k.py) |  Set14  | 31.8366 | 0.8920 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.log.json) |\n| [rdn_x2c64b16_g1_1000k_div2k](./rdn_x2c64b16_1xb16-1000k_div2k.py) |  DIV2K  | 34.9392 | 0.9380 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth\n\n# single-gpu test\npython tools/test.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{zhang2018residual,\n  title={Residual dense network for image super-resolution},\n  author={Zhang, Yulun and Tian, Yapeng and Kong, Yu and Zhong, Bineng and Fu, Yun},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2472--2481},\n  year={2018}\n}\n```\n"
  },
  {
    "path": "configs/rdn/README_zh-CN.md",
    "content": "# RDN (CVPR'2018)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">RDN (CVPR'2018)</summary>\n\n```bibtex\n@inproceedings{zhang2018residual,\n  title={Residual dense network for image super-resolution},\n  author={Zhang, Yulun and Tian, Yapeng and Kong, Yu and Zhong, Bineng and Fu, Yun},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2472--2481},\n  year={2018}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                算法                                |       Set5       |      Set14       |      DIV2K       |   GPU 信息   |                                    下载                                    |\n| :----------------------------------------------------------------: | :--------------: | :--------------: | :--------------: | :----------: | :------------------------------------------------------------------------: |\n| [rdn_x2c64b16_g1_1000k_div2k](./rdn_x2c64b16_1xb16-1000k_div2k.py) | 35.9883 / 0.9385 | 31.8366 / 0.8920 | 34.9392 / 0.9380 | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.log.json) |\n| [rdn_x3c64b16_g1_1000k_div2k](./rdn_x3c64b16_1xb16-1000k_div2k.py) | 32.6051 / 0.8943 | 28.6338 / 0.8077 | 31.2153 / 0.8763 | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.log.json) |\n| [rdn_x4c64b16_g1_1000k_div2k](./rdn_x4c64b16_1xb16-1000k_div2k.py) | 30.4922 / 0.8548 | 26.9570 / 0.7423 | 29.1925 / 0.8233 | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth\n\n# 单个GPU上测试\npython tools/test.py configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/rdn/metafile.yml",
    "content": "Collections:\n- Name: RDN\n  Paper:\n    Title: Residual Dense Network for Image Super-Resolution\n    URL: https://arxiv.org/abs/1802.08797\n  README: configs/rdn/README.md\n  Task:\n  - image super-resolution\n  Year: 2018\nModels:\n- Config: configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py\n  In Collection: RDN\n  Name: rdn_x4c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.4922\n      SSIM: 0.8548\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 26.957\n      SSIM: 0.7423\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 29.1925\n      SSIM: 0.8233\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x4c64b16_g1_1000k_div2k_20210419-3577d44f.pth\n- Config: configs/rdn/rdn_x3c64b16_1xb16-1000k_div2k.py\n  In Collection: RDN\n  Name: rdn_x3c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.6051\n      SSIM: 0.8943\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 28.6338\n      SSIM: 0.8077\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 31.2153\n      SSIM: 0.8763\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x3c64b16_g1_1000k_div2k_20210419-b93cb6aa.pth\n- Config: configs/rdn/rdn_x2c64b16_1xb16-1000k_div2k.py\n  In Collection: RDN\n  Name: rdn_x2c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 35.9883\n      SSIM: 0.9385\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 31.8366\n      SSIM: 0.892\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.9392\n      SSIM: 0.938\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/rdn/rdn_x2c64b16_g1_1000k_div2k_20210419-dc146009.pth\n"
  },
  {
    "path": "configs/rdn/rdn_x2c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x2_test_config.py'\n]\n\nexperiment_name = 'rdn_x2c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='RDNNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=64),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1000000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[200000, 400000, 600000, 800000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/rdn/rdn_x3c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x3_test_config.py'\n]\n\nexperiment_name = 'rdn_x3c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 3\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='RDNNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=96),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X3_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1000000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[200000, 400000, 600000, 800000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/rdn/rdn_x4c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'rdn_x4c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='RDNNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        # filename_tmpl=dict(img='{}_x4', gt='{}'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1000000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[200000, 400000, 600000, 800000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/real_basicvsr/README.md",
    "content": "# RealBasicVSR (CVPR'2022)\n\n> [RealBasicVSR: Investigating Tradeoffs in Real-World Video Super-Resolution](https://arxiv.org/abs/2111.12704)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nThe diversity and complexity of degradations in real-world video super-resolution (VSR) pose non-trivial challenges in inference and training. First, while long-term propagation leads to improved performance in cases of mild degradations, severe in-the-wild degradations could be exaggerated through propagation, impairing output quality. To balance the tradeoff between detail synthesis and artifact suppression, we found an image pre-cleaning stage indispensable to reduce noises and artifacts prior to propagation. Equipped with a carefully designed cleaning module, our RealBasicVSR outperforms existing methods in both quality and efficiency. Second, real-world VSR models are often trained with diverse degradations to improve generalizability, requiring increased batch size to produce a stable gradient. Inevitably, the increased computational burden results in various problems, including 1) speed-performance tradeoff and 2) batch-length tradeoff. To alleviate the first tradeoff, we propose a stochastic degradation scheme that reduces up to 40% of training time without sacrificing performance. We then analyze different training settings and suggest that employing longer sequences rather than larger batches during training allows more effective uses of temporal information, leading to more stable performance during inference. To facilitate fair comparisons, we propose the new VideoLQ dataset, which contains a large variety of real-world low-quality video sequences containing rich textures and patterns. Our dataset can serve as a common ground for benchmarking. Code, models, and the dataset will be made publicly available.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/146704029-58bc4db4-267f-4158-8129-e49ab6652249.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on Y channel. The code for computing NRQM, NIQE, and PI can be found [here](https://github.com/roimehrez/PIRM2018). MATLAB official code is used to compute BRISQUE.\n\n|                               Model                                | Dataset | NRQM (Y) | NIQE (Y) | PI (Y) | BRISQUE (Y) |    Training Resources    |                                Download                                |\n| :----------------------------------------------------------------: | :-----: | :------: | :------: | :----: | :---------: | :----------------------: | :--------------------------------------------------------------------: |\n| [realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds](./realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py) |  REDS   |  6.0477  |  3.7662  | 3.8593 |   29.030    | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth)/[log](https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104_183640.log.json) |\n| [realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds](./realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py) |  REDS   |    -     |    -     |   -    |      -      | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027-0e2ff207.pth)/[log](http://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027_114039.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n\n# single-gpu train\npython tools/train.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n\n# single-gpu test\npython tools/test.py python tools/test.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{chan2022investigating,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {RealBasicVSR: Investigating Tradeoffs in Real-World Video Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2022}\n}\n```\n"
  },
  {
    "path": "configs/real_basicvsr/README_zh-CN.md",
    "content": "# RealBasicVSR (CVPR'2022)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\"><a href=\"https://arxiv.org/abs/2111.12704\">RealBasicVSR (CVPR'2022)</a></summary>\n\n```bibtex\n@InProceedings{chan2022investigating,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {RealBasicVSR: Investigating Tradeoffs in Real-World Video Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2022}\n}\n```\n\n</details>\n\n<br/>\n\n在 Y 通道上评估。 计算 NRQM、NIQE 和 PI 的代码可以在[这里](https://github.com/roimehrez/PIRM2018)找到。我们使用 MATLAB 官方代码计算 BRISQUE。\n\n|                                 算法                                 | NRQM (Y) | NIQE (Y) | PI (Y) | BRISQUE (Y) |         GPU 信息         |                                  Download                                   |\n| :------------------------------------------------------------------: | :------: | :------: | :----: | :---------: | :----------------------: | :-------------------------------------------------------------------------: |\n| [realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds](./realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py) |  6.0477  |  3.7662  | 3.8593 |   29.030    | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth)/[log](https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104_183640.log.json) |\n| [realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds](./realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py) |    -     |    -     |   -    |      -      | 8 (Tesla V100-SXM2-32GB) | [model](http://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027-0e2ff207.pth)/[log](http://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027_114039.log.json) |\n\n## 训练\n\n训练分为两个阶段：\n\n1. 使用 [realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py](realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py) 训练一个没有感知损失和对抗性损失的模型。\n2. 使用感知损失和对抗性损失 [realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py ](realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py) 微调模型。\n\n**注:**\n\n1. 您可能希望将图像裁剪为子图像以加快 IO。请参阅[此处](../../tools/dataset_converters/reds/preprocess_reds_dataset.py)了解更多详情。\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n\n# 单个GPU上训练\npython tools/train.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n\n# 单个GPU上测试\npython tools/test.py configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/real_basicvsr/metafile.yml",
    "content": "Collections:\n- Name: RealBasicVSR\n  Paper:\n    Title: 'RealBasicVSR: Investigating Tradeoffs in Real-World Video Super-Resolution'\n    URL: https://arxiv.org/abs/2111.12704\n  README: configs/real_basicvsr/README.md\n  Task:\n  - video super-resolution\n  Year: 2022\nModels:\n- Config: configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py\n  In Collection: RealBasicVSR\n  Name: realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds\n  Results:\n  - Dataset: REDS\n    Metrics:\n      BRISQUE (Y): 29.03\n      NIQE (Y): 3.7662\n      NRQM (Y): 6.0477\n      PI (Y): 3.8593\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_c64b20_1x30x8_lr5e-5_150k_reds_20211104-52f77c2c.pth\n- Config: configs/real_basicvsr/realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py\n  In Collection: RealBasicVSR\n  Name: realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds\n  Results:\n  - Dataset: REDS\n    Metrics: {}\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027-0e2ff207.pth\n"
  },
  {
    "path": "configs/real_basicvsr/realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds.py",
    "content": "_base_ = './realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py'\n\nexperiment_name = 'realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027-0e2ff207.pth'  # noqa\n\nscale = 4\n\n# model settings\nmodel = dict(\n    type='RealBasicVSR',\n    generator=dict(\n        type='RealBasicVSRNet',\n        mid_channels=64,\n        num_propagation_blocks=20,\n        num_cleaning_blocks=20,\n        dynamic_refine_thres=255,  # change to 5 for test\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        is_fix_cleaning=False,\n        is_sequential_cleaning=False),\n    discriminator=dict(\n        type='UNetDiscriminatorWithSpectralNorm',\n        in_channels=3,\n        mid_channels=64,\n        skip_connection=True),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    cleaning_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={\n            '2': 0.1,\n            '7': 0.1,\n            '16': 1.0,\n            '25': 1.0,\n            '34': 1.0,\n        },\n        vgg_type='vgg19',\n        perceptual_weight=1.0,\n        style_weight=0,\n        norm_img=False),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=5e-2,\n        real_label_val=1.0,\n        fake_label_val=0),\n    is_use_sharpened_gt_in_pixel=True,\n    is_use_sharpened_gt_in_percep=True,\n    is_use_sharpened_gt_in_gan=False,\n    is_use_ema=True,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    _delete_=True,\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=5e-5, betas=(0.9, 0.99))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n)\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=150_000, val_interval=5000)\n"
  },
  {
    "path": "configs/real_basicvsr/realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n\n# model settings\nmodel = dict(\n    type='RealBasicVSR',\n    generator=dict(\n        type='RealBasicVSRNet',\n        mid_channels=64,\n        num_propagation_blocks=20,\n        num_cleaning_blocks=20,\n        dynamic_refine_thres=255,  # change to 1.5 for test\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        is_fix_cleaning=False,\n        is_sequential_cleaning=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    cleaning_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    is_use_sharpened_gt_in_pixel=True,\n    is_use_ema=True,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='FixedCrop', keys=['gt'], crop_size=(256, 256)),\n    dict(type='Flip', keys=['gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type='Flip', keys=['gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['gt'], transpose_ratio=0.5),\n    dict(type='MirrorSequence', keys=['gt']),\n    dict(\n        type='UnsharpMasking',\n        keys=['gt'],\n        kernel_size=51,\n        sigma=0,\n        weight=0.5,\n        threshold=10),\n    dict(type='CopyValues', src_keys=['gt_unsharp'], dst_keys=['img']),\n    dict(\n        type='RandomBlur',\n        params=dict(\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 3],\n            sigma_y=[0.2, 3],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2],\n            sigma_x_step=0.02,\n            sigma_y_step=0.02,\n            rotate_angle_step=0.31416,\n            beta_gaussian_step=0.05,\n            beta_plateau_step=0.1,\n            omega_step=0.0628),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomResize',\n        params=dict(\n            resize_mode_prob=[0.2, 0.7, 0.1],  # up, down, keep\n            resize_scale=[0.15, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3.0, 1 / 3.0, 1 / 3.0],\n            resize_step=0.015,\n            is_size_even=True),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 30],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 3],\n            poisson_gray_noise_prob=0.4,\n            gaussian_sigma_step=0.1,\n            poisson_scale_step=0.005),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[30, 95], quality_step=3),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomVideoCompression',\n        params=dict(\n            codec=['libx264', 'h264', 'mpeg4'],\n            codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n            bitrate=[1e4, 1e5]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomBlur',\n        params=dict(\n            prob=0.8,\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 1.5],\n            sigma_y=[0.2, 1.5],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2],\n            sigma_x_step=0.02,\n            sigma_y_step=0.02,\n            rotate_angle_step=0.31416,\n            beta_gaussian_step=0.05,\n            beta_plateau_step=0.1,\n            omega_step=0.0628),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomResize',\n        params=dict(\n            resize_mode_prob=[0.3, 0.4, 0.3],  # up, down, keep\n            resize_scale=[0.3, 1.2],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            resize_step=0.03,\n            is_size_even=True),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 25],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 2.5],\n            poisson_gray_noise_prob=0.4,\n            gaussian_sigma_step=0.1,\n            poisson_scale_step=0.005),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[30, 95], quality_step=3),\n        keys=['img'],\n    ),\n    dict(\n        type='DegradationsWithShuffle',\n        degradations=[\n            dict(\n                type='RandomVideoCompression',\n                params=dict(\n                    codec=['libx264', 'h264', 'mpeg4'],\n                    codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n                    bitrate=[1e4, 1e5]),\n                keys=['img'],\n            ),\n            [\n                dict(\n                    type='RandomResize',\n                    params=dict(\n                        target_size=(64, 64),\n                        resize_opt=['bilinear', 'area', 'bicubic'],\n                        resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n                ),\n                dict(\n                    type='RandomBlur',\n                    params=dict(\n                        prob=0.8,\n                        kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n                        kernel_list=['sinc'],\n                        kernel_prob=[1],\n                        omega=[3.1416 / 3, 3.1416],\n                        omega_step=0.0628),\n                ),\n            ]\n        ],\n        keys=['img'],\n    ),\n    dict(type='Clip', keys=['img']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='GenerateSegmentIndices',\n        interval_list=[1],\n        filename_tmpl='{:04d}.png'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(\n        type='GenerateSegmentIndices',\n        interval_list=[1],\n        filename_tmpl='{:08d}.png'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=10,\n    batch_size=2,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='reds', task_name='vsr'),\n        data_root=f'{data_root}/REDS',\n        data_prefix=dict(img='train_sharp_sub', gt='train_sharp_sub'),\n        depth=1,\n        num_input_frames=15,\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='udm10', task_name='vsr'),\n        data_root=f'{data_root}/UDM10',\n        data_prefix=dict(img='BIx4', gt='GT'),\n        pipeline=val_pipeline))\n\ntest_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='video_lq', task_name='vsr'),\n        data_root=f'{data_root}/VideoLQ',\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntest_evaluator = dict(\n    type='Evaluator',\n    metrics=[dict(type='NIQE', input_order='CHW', convert_to='Y')])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))))\n\n# NO learning policy\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        out_dir=save_dir,\n        max_keep_ckpts=10,\n        save_best='PSNR',\n        rule='greater',\n        by_epoch=False),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\ncustom_hooks = [\n    dict(type='BasicVisualizationHook', interval=5),\n    dict(\n        type='ExponentialMovingAverageHook',\n        module_keys=('generator_ema'),\n        interval=1,\n        interp_cfg=dict(momentum=0.001),\n    )\n]\n\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=False)\n"
  },
  {
    "path": "configs/real_esrgan/README.md",
    "content": "# Real-ESRGAN (ICCVW'2021)\n\n> [Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data](https://arxiv.org/abs/2107.10833)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nThough many attempts have been made in blind super-resolution to restore low-resolution images with unknown and complex degradations, they are still far from addressing general real-world degraded images. In this work, we extend the powerful ESRGAN to a practical restoration application (namely, Real-ESRGAN), which is trained with pure synthetic data. Specifically, a high-order degradation modeling process is introduced to better simulate complex real-world degradations. We also consider the common ringing and overshoot artifacts in the synthesis process. In addition, we employ a U-Net discriminator with spectral normalization to increase discriminator capability and stabilize the training dynamics. Extensive comparisons have shown its superior visual performance than prior works on various real datasets. We also provide efficient implementations to synthesize training pairs on the fly.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144034533-f81430df-351b-490c-9e00-733465edf3ee.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on Set5 dataset with RGB channels. The metrics are `PSNR` and `SSIM`.\n\n|                                    Model                                     | Dataset  |  PSNR   |  SSIM  |    Training Resources    |                                    Download                                     |\n| :--------------------------------------------------------------------------: | :------: | :-----: | :----: | :----------------------: | :-----------------------------------------------------------------------------: |\n| [realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost](./realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py) | df2k_ost | 28.0297 | 0.8236 | 4 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth)/log |\n| [realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost](./realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py) | df2k_ost | 26.2204 | 0.7655 | 4 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth) /[log](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20210922_142838.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py\n\n# single-gpu train\npython tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth\n\n# single-gpu test\npython tools/test.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{wang2021real,\n  title={Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic data},\n  author={Wang, Xintao and Xie, Liangbin and Dong, Chao and Shan, Ying},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision Workshop (ICCVW)},\n  pages={1905--1914},\n  year={2021}\n}\n```\n"
  },
  {
    "path": "configs/real_esrgan/README_zh-CN.md",
    "content": "# Real-ESRGAN (ICCVW'2021)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\"><a href=\"https://arxiv.org/abs/2107.10833\">Real-ESRGAN (ICCVW'2021)</a></summary>\n\n```bibtex\n@inproceedings{wang2021real,\n  title={Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic data},\n  author={Wang, Xintao and Xie, Liangbin and Dong, Chao and Shan, Ying},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision Workshop (ICCVW)},\n  pages={1905--1914},\n  year={2021}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，指标为 `PSNR/SSIM`。\n\n|                                       算法                                        |      Set5      |         GPU 信息         |                                       下载                                        |\n| :-------------------------------------------------------------------------------: | :------------: | :----------------------: | :-------------------------------------------------------------------------------: |\n| [realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost](./realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py) | 28.0297/0.8236 | 4 (Tesla V100-SXM2-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth)/日志 |\n| [realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost](./realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py) | 26.2204/0.7655 | 4 (Tesla V100-SXM2-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth) /[日志](https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20210922_142838.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py\n\n# 单个GPU上训练\npython tools/train.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth\n\n# 单个GPU上测试\npython tools/test.py configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/real_esrgan/metafile.yml",
    "content": "Collections:\n- Name: Real-ESRGAN\n  Paper:\n    Title: 'Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic\n      Data'\n    URL: https://arxiv.org/abs/2107.10833\n  README: configs/real_esrgan/README.md\n  Task:\n  - image super-resolution\n  Year: 2021\nModels:\n- Config: configs/real_esrgan/realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py\n  In Collection: Real-ESRGAN\n  Name: realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost\n  Results:\n  - Dataset: df2k_ost\n    Metrics:\n      PSNR: 28.0297\n      SSIM: 0.8236\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrnet_c64b23g32_12x4_lr2e-4_1000k_df2k_ost_20210816-4ae3b5a4.pth\n- Config: configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py\n  In Collection: Real-ESRGAN\n  Name: realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost\n  Results:\n  - Dataset: df2k_ost\n    Metrics:\n      PSNR: 26.2204\n      SSIM: 0.7655\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/real_esrgan/realesrgan_c64b23g32_12x4_lr1e-4_400k_df2k_ost_20211010-34798885.pth\n"
  },
  {
    "path": "configs/real_esrgan/realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost.py",
    "content": "_base_ = './realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py'\n\nexperiment_name = 'realesrgan_c64b23g32_4xb12-lr1e-4-400k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# load_from =  # path of pre-trained real-esrnet\n\nscale = 4\n\n# model settings\nmodel = dict(\n    type='RealESRGAN',\n    generator=dict(\n        type='RRDBNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=23,\n        growth_channels=32,\n        upscale_factor=scale),\n    discriminator=dict(\n        type='UNetDiscriminatorWithSpectralNorm',\n        in_channels=3,\n        mid_channels=64,\n        skip_connection=True),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={\n            '2': 0.1,\n            '7': 0.1,\n            '16': 1.0,\n            '25': 1.0,\n            '34': 1.0,\n        },\n        vgg_type='vgg19',\n        perceptual_weight=1.0,\n        style_weight=0,\n        norm_img=False),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-1,\n        real_label_val=1.0,\n        fake_label_val=0),\n    is_use_sharpened_gt_in_pixel=True,\n    is_use_sharpened_gt_in_percep=True,\n    is_use_sharpened_gt_in_gan=False,\n    is_use_ema=True,\n    train_cfg=dict(start_iter=1000000),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_cfg = dict(\n    _delete_=True,\n    type='IterBasedTrainLoop',\n    max_iters=400_000,\n    val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    _delete_=True,\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n)\n\n# learning policy\nparam_scheduler = None\n"
  },
  {
    "path": "configs/real_esrgan/realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'realesrnet_c64b23g32_4xb12-lr2e-4-1000k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\ngt_crop_size = 400\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\nmodel = dict(\n    type='RealESRGAN',\n    generator=dict(\n        type='RRDBNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=23,\n        growth_channels=32,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    is_use_sharpened_gt_in_pixel=True,\n    is_use_ema=True,\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(gt_crop_size, gt_crop_size),\n        random_crop=True),\n    dict(\n        type='UnsharpMasking',\n        keys=['gt'],\n        kernel_size=51,\n        sigma=0,\n        weight=0.5,\n        threshold=10),\n    dict(type='CopyValues', src_keys=['gt_unsharp'], dst_keys=['img']),\n    dict(\n        type='RandomBlur',\n        params=dict(\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 3],\n            sigma_y=[0.2, 3],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomResize',\n        params=dict(\n            resize_mode_prob=[0.2, 0.7, 0.1],  # up, down, keep\n            resize_scale=[0.15, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3.0, 1 / 3.0, 1 / 3.0]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 30],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 3],\n            poisson_gray_noise_prob=0.4),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[30, 95]),\n        keys=['img']),\n    dict(\n        type='RandomBlur',\n        params=dict(\n            prob=0.8,\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 1.5],\n            sigma_y=[0.2, 1.5],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomResize',\n        params=dict(\n            resize_mode_prob=[0.3, 0.4, 0.3],  # up, down, keep\n            resize_scale=[0.3, 1.2],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3.0, 1 / 3.0, 1 / 3.0]),\n        keys=['img'],\n    ),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 25],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 2.5],\n            poisson_gray_noise_prob=0.4),\n        keys=['img'],\n    ),\n    dict(\n        type='DegradationsWithShuffle',\n        degradations=[\n            dict(\n                type='RandomJPEGCompression',\n                params=dict(quality=[5, 50]),\n            ),\n            [\n                dict(\n                    type='RandomResize',\n                    params=dict(\n                        target_size=(gt_crop_size // scale,\n                                     gt_crop_size // scale),\n                        resize_opt=['bilinear', 'area', 'bicubic'],\n                        resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n                ),\n                dict(\n                    type='RandomBlur',\n                    params=dict(\n                        prob=0.8,\n                        kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n                        kernel_list=['sinc'],\n                        kernel_prob=[1],\n                        omega=[3.1416 / 3, 3.1416]),\n                ),\n            ]\n        ],\n        keys=['img'],\n    ),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(type='Clip', keys=['img']),\n    dict(\n        type='UnsharpMasking',\n        keys=['gt'],\n        kernel_size=51,\n        sigma=0,\n        weight=0.5,\n        threshold=10),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\n\ntrain_dataloader = dict(\n    num_workers=12,\n    batch_size=12,  # gpus 4\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='df2k_ost', task_name='real_sr'),\n        data_root='data/df2k_ost',\n        data_prefix=dict(gt='GT_sub', img='GT_sub'),\n        ann_file='meta_info_df2k_ost.txt',\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='real_sr'),\n        data_root='data/Set5',\n        data_prefix=dict(gt='GTmod12', img='LRbicx4'),\n        pipeline=val_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = dict(\n    type='Evaluator', metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_000_000, val_interval=2000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.99))))\n\n# NO learning policy\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\n# custom hook\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=False)\ncustom_hooks = [\n    dict(type='BasicVisualizationHook', interval=1),\n    dict(\n        type='ExponentialMovingAverageHook',\n        module_keys=('generator_ema'),\n        interval=1,\n        interp_cfg=dict(momentum=0.001),\n    )\n]\n"
  },
  {
    "path": "configs/restormer/README.md",
    "content": "# Restormer (CVPR'2022)\n\n> [Restormer: Efficient Transformer for High-Resolution Image Restoration](https://arxiv.org/abs/2111.09881)\n\n> **Task**: Denoising, Deblurring, Deraining\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nSince convolutional neural networks (CNNs) perform well at learning generalizable image priors from large-scale data, these models have been extensively applied to image restoration and related tasks. Recently, another class of neural architectures, Transformers, have shown significant performance gains on natural language and high-level vision tasks. While the Transformer model mitigates the shortcomings of CNNs (i.e., limited receptive field and inadaptability to input content), its computational complexity grows quadratically with the spatial resolution, therefore making it infeasible to apply to most image restoration tasks involving high-resolution images. In this work, we propose an efficient Transformer model by making several key designs in the building blocks (multi-head attention and feed-forward network) such that it can capture long-range pixel interactions, while still remaining applicable to large images. Our model, named Restoration Transformer (Restormer), achieves state-of-the-art results on several image restoration tasks, including image deraining, single-image motion deblurring, defocus deblurring (single-image and dual-pixel data), and image denoising (Gaussian grayscale/color denoising, and real image denoising).\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/49083766/206964466-95de972a-ff92-4493-9097-73118590d78f.png\" width=\"800\"/>\n</div >\n\n## Results and models\n\n### **Deraining**\n\nEvaluated on Y channels. The metrics are `PSNR` / `SSIM` .\n\n|                             Model                             | Dataset  |   Task    | PSNR (Y) | SSIM (Y) | Training Resources |                                         Download                                         |\n| :-----------------------------------------------------------: | :------: | :-------: | :------: | :------: | :----------------: | :--------------------------------------------------------------------------------------: |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) | Rain100H | Deraining | 31.4804  |  0.9056  |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) | Rain100L | Deraining | 39.1023  |  0.9787  |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) | Test100  | Deraining | 32.0287  |  0.9239  |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) | Test1200 | Deraining | 33.2251  | /0.9272  |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) | Test2800 | Deraining | 34.2170  |  0.9451  |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n\n### **Motion Deblurring**\n\nEvaluated on RGB channels for GoPro and HIDE, and Y channel for ReakBlur-J and ReakBlur-R. The metrics are `PSNR` / `SSIM` .\n\n|                           Model                           |  Dataset   |    Task    | PSNR/SSIM (RGB) | <br>PSNR/SSIM (Y) | Training Resources |                                 Download                                  |\n| :-------------------------------------------------------: | :--------: | :--------: | :-------------: | :---------------: | :----------------: | :-----------------------------------------------------------------------: |\n| [restormer_official_gopro](./restormer_official_gopro.py) |   GoPro    | Deblurring | 32.9295/0.9496  |         -         |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth) \\| log |\n| [restormer_official_gopro](./restormer_official_gopro.py) |    HIDE    | Deblurring | 31.2289/0.9345  |         -         |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth) \\| log |\n| [restormer_official_gopro](./restormer_official_gopro.py) | RealBlur-J | Deblurring |        -        |  28.4356/0.8681   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth) \\| log |\n| [restormer_official_gopro](./restormer_official_gopro.py) | RealBlur-R | Deblurring |        -        |  35.9141/0.9707   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth) \\| log |\n\n### **Defocus Deblurring**\n\nEvaluated on RGB channels. The metrics are `PSNR` / `SSIM` / `MAE` / `LPIPS`.\n\n|                                Model                                 |    Dataset     |    Task    |  PSNR   |  SSIM  |  MAE   | Training Resources |                                Download                                 |\n| :------------------------------------------------------------------: | :------------: | :--------: | :-----: | :----: | :----: | :----------------: | :---------------------------------------------------------------------: |\n| [restormer_official_dpdd-single](./restormer_official_dpdd-single.py) | Indoor Scenes  | Deblurring | 28.8681 | 0.8859 | 0.0251 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth) \\| log |\n| [restormer_official_dpdd-single](./restormer_official_dpdd-single.py) | Outdoor Scenes | Deblurring | 23.2410 | 0.7509 | 0.0499 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth) \\| log |\n| [restormer_official_dpdd-single](./restormer_official_dpdd-single.py) |    Combined    | Deblurring | 25.9805 | 0.8166 | 0.0378 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth) \\| log |\n|  [restormer_official_dpdd-dual](./restormer_official_dpdd-dual.py)   | Indoor Scenes  | Deblurring | 26.6160 | 0.8346 | 0.0354 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth) \\| log |\n|  [restormer_official_dpdd-dual](./restormer_official_dpdd-dual.py)   | Outdoor Scenes | Deblurring | 26.6160 | 0.8346 | 0.0354 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth) \\| log |\n|  [restormer_official_dpdd-dual](./restormer_official_dpdd-dual.py)   |    Combined    | Deblurring | 26.6160 | 0.8346 | 0.0354 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth) \\| log |\n\n### **Gaussian Denoising**\n\n**Test Grayscale Gaussian Noise**\n\nEvaluated on grayscale images. The metrics are `PSNR` / `SSIM` .\n\n**training a separate model for each noise level**\n\n|                                   Model                                    | Dataset  | Task | $\\\\sigma$ |  PSNR   |  SSIM  | Training Resources |                                    Download                                    |\n| :------------------------------------------------------------------------: | :------:|:-:| | :-------: | :-----: | :----: | :----------------: | :----------------------------------------------------------------------------: |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |  Set12   |Denoising|    15     | 34.0182 | 0.9160 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth) | log |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |  BSD68   |Denoising|    15     | 32.4987 | 0.8940 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth) | log |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) | Urban100 |Denoising|    15     | 34.4336 | 0.9419 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth) | log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |  Set12   |Denoising|    25     | 31.7289 | 0.8811 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth) | log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |  BSD68   |Denoising|    25     | 30.1613 | 0.8370 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth) | log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) | Urban100 |Denoising|    25     | 32.1162 | 0.9140 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth) | log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |  Set12   |Denoising|    50     | 28.6269 | 0.8188 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth) | log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |  BSD68   |Denoising|    50     | 27.3266 | 0.7434 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth) | log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) | Urban100 |Denoising|    50     | 28.9636 | 0.8571 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth) | log |\n\n**learning a single model to handle various noise levels**\n\n|                                 Model                                  | Dataset  |   Task    | $\\\\sigma$ |  PSNR   |  SSIM  | Training Resources |                                 Download                                  |\n| :--------------------------------------------------------------------: | :------: | :-------: | :-------: | :-----: | :----: | :----------------: | :-----------------------------------------------------------------------: |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |  Set12   | Denoising |    15     | 33.9642 | 0.9153 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |  BSD68   | Denoising |    15     | 32.4994 | 0.8928 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) | Urban100 | Denoising |    15     | 34.3152 | 0.9409 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |  Set12   | Denoising |    25     | 31.7106 | 0.8810 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |  BSD68   | Denoising |    25     | 30.1486 | 0.8360 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) | Urban100 | Denoising |    25     | 32.0457 | 0.9131 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |  Set12   | Denoising |    50     | 28.6614 | 0.8197 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |  BSD68   | Denoising |    50     | 27.3537 | 0.7422 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) | Urban100 | Denoising |    50     | 28.9848 | 0.8571 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n\n**Test Color Gaussian Noise**\n\nEvaluated on RGB channels. The metrics are `PSNR` / `SSIM` .\n**training a separate model for each noise level**\n\n|                               Model                                | Dataset  |   Task    | $\\\\sigma$ | PSNR (RGB) | SSIM (RGB) | Training Resources |                                Download                                |\n| :----------------------------------------------------------------: | :------: | :-------: | :-------: | :--------: | :--------: | :----------------: | :--------------------------------------------------------------------: |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) |  CBSD68  | Denoising |    15     |  34.3506   |   0.9352   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth) \\| log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) | Kodak24  | Denoising |    15     |  35.4900   |   0.9312   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth) \\| log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) | McMaster | Denoising |    15     |  35.6072   |   0.9352   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth) \\| log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) | Urban100 | Denoising |    15     |  35.1522   |   0.9530   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) |  CBSD68  | Denoising |    25     |  31.7457   |   0.8942   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) | Kodak24  | Denoising |    25     |  33.0489   |   0.8943   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) | McMaster | Denoising |    25     |  33.3260   |   0.9066   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) | Urban100 | Denoising |    25     |  32.9670   |   0.9317   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) |  CBSD68  | Denoising |    50     |  28.5569   |   0.8127   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) | Kodak24  | Denoising |    50     |  30.0122   |   0.8238   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) | McMaster | Denoising |    50     |  30.2608   |   0.8515   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) | Urban100 | Denoising |    50     |  30.0230   |   0.8902   |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth) \\| log |\n\n**learning a single model to handle various noise levels**\n\n|                                  Model                                  | Dataset |Task| $\\\\sigma$ | PSNR (RGB) | SSIM (RGB) |                                  Training Resources                                   | Download |\n| :---------------------------------------------------------------------: | :-----: | :-------: | :--------: | :--------: | :-----------------------------------------------------------------------------------: | :------: |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py)|  CBSD68   |Denoising|   15    |  34.3422  |   0.9356   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py)| Kodak24   |Denoising|   15    |  35.4544  |   0.9308   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py)| McMaster  |Denoising|   15    |  35.5473  |   0.9344   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py)| Urban100  |Denoising|   15    |  35.0754  |   0.9524   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py)|  CBSD68   |Denoising|   25    |  31.7391  |   0.8945   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py)| Kodak24   |Denoising|   25    |  33.0380  |   0.8941   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py)| McMaster  |Denoising|   25    |  33.3040  |   0.9063   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py)| Urban100  |Denoising|   25    |  32.9165  |   0.9312   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py)|  CBSD68   |Denoising|   50    |  28.5582  |   0.8126   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py)| Kodak24   |Denoising|   50    |  30.0074  |   0.8233   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py)| McMaster  |Denoising|   50    |  30.2671  |   0.8520   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py)| Urban100  |Denoising|   50    |  30.0172  |   0.8898   |     1      | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) | log |\n\n### **Real Image Denoising**\n\nEvaluated on RGB channels. The metrics are `PSNR` / `SSIM` .\n\n|                          Model                          | Dataset |   Task    |  PSNR   |  SSIM  | Training Resources |                                              Download                                              |\n| :-----------------------------------------------------: | :-----: | :-------: | :-----: | :----: | :----------------: | :------------------------------------------------------------------------------------------------: |\n| [restormer_official_sidd](./restormer_official_sidd.py) |  SIDD   | Denoising | 40.0156 | 0.9225 |         1          | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_sidd-9e7025db.pth) \\| log |\n\n## Quick Start\n\n**Train**\n\nYou can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\n# Deraining\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# single-gpu test\n# Deraining\npython tools/test.py configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\npython tools/test.py configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\npython tools/test.py configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\npython tools/test.py configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n\n# multi-gpu test\n# Deraining\n./tools/dist_test.sh configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\n./tools/dist_test.sh configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\n./tools/dist_test.sh configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\n./tools/dist_test.sh configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n    title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n    author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat\n            and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n    booktitle={CVPR},\n    year={2022}\n}\n```\n"
  },
  {
    "path": "configs/restormer/README_zh-CN.md",
    "content": "# Restormer (CVPR'2022)\n\n> [Restormer: Efficient Transformer for High-Resolution Image Restoration](https://arxiv.org/abs/2111.09881)\n\n> **任务**: 图像去噪，图像去模糊，图像去雨\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/49083766/206964466-95de972a-ff92-4493-9097-73118590d78f.png\" width=\"800\"/>\n</div >\n\n## **各个任务下模型的测试结果**\n\n### **图像去雨**\n\n所有数据集均在Y通道上进行测试，测试指标为PSNR和SSIM。\n\n|                方法                | Rain100H<br>PSNR/SSIM (Y) | Rain100L<br>PSNR/SSIM (Y) | Test100<br>PSNR/SSIM (Y) | Test1200<br>PSNR/SSIM (Y) | Test2800<br>PSNR/SSIM (Y) | GPU信息 |                下载                 |\n| :--------------------------------: | :-----------------------: | :-----------------------: | :----------------------: | :-----------------------: | :-----------------------: | :-----: | :---------------------------------: |\n| [restormer_official_rain13k](./restormer_official_rain13k.py) |      31.4804/0.9056       |      39.1023/0.9787       |      32.0287/0.9239      |      33.2251/0.9272       |      34.2170/0.9451       |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth) \\| log |\n\n### **图像去模糊**\n\nGopro和HIDE数据集上使用RGB通道测试，ReakBlur-J 和 ReakBlur-R数据集使用Y通道测试。测试指标为PSNR和SSIM。\n\n|                      方法                      | GoPro<br>PSNR/SSIM (RGB) | HIDE<br>PSNR/SSIM (RGB) | RealBlur-J<br>PSNR/SSIM (Y) | RealBlur-R<br>PSNR/SSIM (Y) | GPU信息 |                      下载                      |\n| :--------------------------------------------: | :----------------------: | :---------------------: | :-------------------------: | :-------------------------: | :-----: | :--------------------------------------------: |\n| [restormer_official_gopro](./restormer_official_gopro.py) |      32.9295/0.9496      |     31.2289/0.9345      |       28.4356/0.8681        |       35.9141/0.9707        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth) \\| log |\n\n### **图像去失焦模糊**\n\n所有指标均在RGB通道上进行测试。测试指标为PSNR、SSIM、MAE和LPIPS.\n\n|  方法  | 室内场景图像的PSNR | 室内场景图像的SSIM | 室内场景图像的MAE | 室内场景图像的LPIPS | 室外场景图像的PSNR | 室外场景图像的SSIM | 室外场景图像的MAE | 室外场景图像的LPIPS | 所有图像平均PSNR | 所有图像平均SSIM | 所有图像平均MAE | 所有图像平均LPIPS | GPU 信息 |  下载   |\n| :----: | :-------------: | :-------------: | :------------: | :--------------: | :-------------: | :-------------: | :------------: | :--------------: | :------------: | :-------------: | :------------: | :--------------: | :------: | :-----: |\n| [restormer_official_dpdd-single](./restormer_official_dpdd-single.py) |     28.8681     |     0.8859      |     0.0251     |        -         |     23.2410     |     0.7509      |     0.0499     |        -         |    25.9805     |     0.8166      |     0.0378     |        -         |    1     | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth) \\| log |\n| [restormer_official_dpdd-dual](./restormer_official_dpdd-dual.py) |     26.6160     |     0.8346      |     0.0354     |        -         |     26.6160     |     0.8346      |     0.0354     |        -         |    26.6160     |     0.8346      |     0.0354     |        -         |    1     | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth) \\| log |\n\n### **图像高斯噪声去除**\n\n**灰度图的高斯噪声**\n\n使用PSNR和SSIM指标对数据集上的灰度图进行测试。\n\n|                              方法                               | $\\\\sigma$ | Set12<br>PSNR/SSIM | BSD68<br>PSNR/SSIM | Urban100<br>PSNR/SSIM | GPU信息 |                               下载                               |\n| :-------------------------------------------------------------: | :-------: | :----------------: | :----------------: | :-------------------: | :-----: | :--------------------------------------------------------------: |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |    15     |   34.0182/0.9160   |   32.4987/0.8940   |    34.4336/0.9419     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |    25     |   31.7289/0.8811   |   30.1613/0.8370   |    32.1162/0.9140     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |    50     |   28.6269/0.8188   |   27.3266/0.7434   |    28.9636/0.8571     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth) \\| log |\n|                                                                 |           |                    |                    |                       |         |                                                                  |\n| [restormer_official_dfwb-gray-sigma15](./restormer_official_dfwb-gray-sigma15.py) |    15     |   33.9642/0.9153   |   32.4994/0.8928   |    34.3152/0.9409     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma25](./restormer_official_dfwb-gray-sigma25.py) |    25     |   31.7106/0.8810   |   30.1486/0.8360   |    32.0457/0.9131     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n| [restormer_official_dfwb-gray-sigma50](./restormer_official_dfwb-gray-sigma50.py) |    50     |   28.6614/0.8197   |   27.3537/0.7422   |    28.9848/0.8571     |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth) \\| log |\n\n> 上面三行代表每个噪声等级训练一个单独的模型，下面三行代表学习一个单一的模型来处理各种噪音水平。\n\n**彩色图像的高斯噪声**\n\n所有指标均在RGB通道上进行测试，测试指标为PSNR和SSIM。\n\n|                  方法                   | $\\\\sigma$ | CBSD68<br>PSNR/SSIM (RGB) | Kodak24<br>PSNR/SSIM (RGB) | McMaster<br>PSNR/SSIM (RGB) | Urban100<br>PSNR/SSIM (RGB) | GPU信息 |                   下载                   |\n| :-------------------------------------: | :-------: | :-----------------------: | :------------------------: | :-------------------------: | :-------------------------: | :-----: | :--------------------------------------: |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) |    15     |      34.3506/0.9352       |       35.4900/0.9312       |       35.6072/0.9352        |       35.1522/0.9530        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) |    25     |      31.7457/0.8942       |       33.0489/0.8943       |       33.3260/0.9066        |       32.9670/0.9317        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) |    50     |      28.5569/0.8127       |       30.0122/0.8238       |       30.2608/0.8515        |       30.0230/0.8902        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth) \\| log |\n|                                         |           |                           |                            |                             |                             |         |                                          |\n| [restormer_official_dfwb-color-sigma15](./restormer_official_dfwb-color-sigma15.py) |    15     |      34.3422/0.9356       |       35.4544/0.9308       |       35.5473/0.9344        |       35.0754/0.9524        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) \\| log |\n| [restormer_official_dfwb-color-sigma25](./restormer_official_dfwb-color-sigma25.py) |    25     |      31.7391/0.8945       |       33.0380/0.8941       |       33.3040/0.9063        |       32.9165/0.9312        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) \\| log |\n| [restormer_official_dfwb-color-sigma50](./restormer_official_dfwb-color-sigma50.py) |    50     |      28.5582/0.8126       |       30.0074/0.8233       |       30.2671/0.8520        |       30.0172/0.8898        |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth) \\| log |\n\n> 上面三行代表每个噪声等级训练一个单独的模型，下面三行代表学习一个单一的模型来处理各种噪音水平。\n\n### **真实场景图像去噪**\n\n所有指标均在RGB通道上进行测试，测试指标为PSNR和SSIM。\n\n|                          方法                           | SIDD<br>PSNR/SSIM | GPU信息 |                                                  下载                                                   |\n| :-----------------------------------------------------: | :---------------: | :-----: | :-----------------------------------------------------------------------------------------------------: |\n| [restormer_official_sidd](./restormer_official_sidd.py) |  40.0156/0.9225   |    1    | [model](https://download.openmmlab.com/mmediting/restormer/restormer_official_sidd-9e7025db.pth) \\| log |\n\n## 使用方法\n\n**训练**\n\n可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# cpu test\n# Deraining\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# single-gpu test\n# Deraining\npython tools/test.py configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\npython tools/test.py configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\npython tools/test.py configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\npython tools/test.py configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\npython tools/test.py configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n\n# multi-gpu test\n# Deraining\n./tools/dist_test.sh configs/restormer/restormer_official_rain13k.py https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n\n# Motion Deblurring\n./tools/dist_test.sh configs/restormer/restormer_official_gopro.py https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n\n# Defocus Deblurring\n# Single\n./tools/dist_test.sh configs/restormer/restormer_official_dpdd-dual.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n# Dual\n./tools/dist_test.sh configs/restormer/restormer_official_dpdd-single.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n\n# Gaussian Denoising\n# Test Grayscale Gaussian Noise\n# sigma15\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma15-da74417f.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma25\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma25-08010841.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# sigma50\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-sigma50-ee852dfe.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-gray-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n\n# Test Color Gaussian Noise\n# sigma15\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma15-012ceb71.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma15.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma25\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma25-e307f222.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma25.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n# sigma50\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-sigma50-a991983d.pth\n\n./tools/dist_test.sh configs/restormer/restormer_official_dfwb-color-sigma50.py https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/restormer/metafile.yml",
    "content": "Collections:\n- Name: Restormer\n  Paper:\n    Title: 'Restormer: Efficient Transformer for High-Resolution Image Restoration'\n    URL: https://arxiv.org/abs/2111.09881\n  README: configs/restormer/README.md\n  Task:\n  - denoising\n  - deblurring\n  - deraining\n  Year: 2022\nModels:\n- Config: configs/restormer/restormer_official_rain13k.py\n  In Collection: Restormer\n  Name: restormer_official_rain13k\n  Results:\n  - Dataset: Rain100H\n    Metrics:\n      PSNR (Y): 31.4804\n      SSIM (Y): 0.9056\n    Task: Deraining\n  - Dataset: Rain100L\n    Metrics:\n      PSNR (Y): 39.1023\n      SSIM (Y): 0.9787\n    Task: Deraining\n  - Dataset: Test100\n    Metrics:\n      PSNR (Y): 32.0287\n      SSIM (Y): 0.9239\n    Task: Deraining\n  - Dataset: Test1200\n    Metrics:\n      PSNR (Y): 33.2251\n    Task: Deraining\n  - Dataset: Test2800\n    Metrics:\n      PSNR (Y): 34.217\n      SSIM (Y): 0.9451\n    Task: Deraining\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_rain13k-2be7b550.pth\n- Config: configs/restormer/restormer_official_gopro.py\n  In Collection: Restormer\n  Name: restormer_official_gopro\n  Results:\n  - Dataset: GoPro\n    Metrics:\n      PSNR/SSIM (RGB):\n        PSNR: 32.9295\n        SSIM: 0.9496\n    Task: Deblurring\n  - Dataset: HIDE\n    Metrics:\n      PSNR/SSIM (RGB):\n        PSNR: 31.2289\n        SSIM: 0.9345\n    Task: Deblurring\n  - Dataset: RealBlur-J\n    Metrics:\n      <br>PSNR/SSIM (Y):\n        PSNR: 28.4356\n        SSIM: 0.8681\n    Task: Deblurring\n  - Dataset: RealBlur-R\n    Metrics:\n      <br>PSNR/SSIM (Y):\n        PSNR: 35.9141\n        SSIM: 0.9707\n    Task: Deblurring\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_gopro-db7363a0.pth\n- Config: configs/restormer/restormer_official_dpdd-single.py\n  In Collection: Restormer\n  Name: restormer_official_dpdd-single\n  Results:\n  - Dataset: IndoorScenes\n    Metrics:\n      MAE: 0.0251\n      PSNR: 28.8681\n      SSIM: 0.8859\n    Task: Deblurring\n  - Dataset: OutdoorScenes\n    Metrics:\n      MAE: 0.0499\n      PSNR: 23.241\n      SSIM: 0.7509\n    Task: Deblurring\n  - Dataset: Combined\n    Metrics:\n      MAE: 0.0378\n      PSNR: 25.9805\n      SSIM: 0.8166\n    Task: Deblurring\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-single-6bc31582.pth\n- Config: configs/restormer/restormer_official_dpdd-dual.py\n  In Collection: Restormer\n  Name: restormer_official_dpdd-dual\n  Results:\n  - Dataset: IndoorScenes\n    Metrics:\n      MAE: 0.0354\n      PSNR: 26.616\n      SSIM: 0.8346\n    Task: Deblurring\n  - Dataset: OutdoorScenes\n    Metrics:\n      MAE: 0.0354\n      PSNR: 26.616\n      SSIM: 0.8346\n    Task: Deblurring\n  - Dataset: Combined\n    Metrics:\n      MAE: 0.0354\n      PSNR: 26.616\n      SSIM: 0.8346\n    Task: Deblurring\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dpdd-dual-52c94c00.pth\n- Config: configs/restormer/restormer_official_dfwb-gray-sigma15.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-gray-sigma15\n  Results:\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 34.0182\n      SSIM: 0.916\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 32.4987\n      SSIM: 0.894\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 34.4336\n      SSIM: 0.9419\n    Task: Denoising\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 33.9642\n      SSIM: 0.9153\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 32.4994\n      SSIM: 0.8928\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR: 34.3152\n      SSIM: 0.9409\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n- Config: configs/restormer/restormer_official_dfwb-gray-sigma25.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-gray-sigma25\n  Results:\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 31.7289\n      SSIM: 0.8811\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 30.1613\n      SSIM: 0.837\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 32.1162\n      SSIM: 0.914\n    Task: Denoising\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 31.7106\n      SSIM: 0.881\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 30.1486\n      SSIM: 0.836\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR: 32.0457\n      SSIM: 0.9131\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n- Config: configs/restormer/restormer_official_dfwb-gray-sigma50.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-gray-sigma50\n  Results:\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 28.6269\n      SSIM: 0.8188\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 27.3266\n      SSIM: 0.7434\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 28.9636\n      SSIM: 0.8571\n    Task: Denoising\n  - Dataset: Set12\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 28.6614\n      SSIM: 0.8197\n    Task: Denoising\n  - Dataset: BSD68\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 27.3537\n      SSIM: 0.7422\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR: 28.9848\n      SSIM: 0.8571\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-gray-blind-5f094bcc.pth\n- Config: configs/restormer/restormer_official_dfwb-color-sigma15.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-color-sigma15\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 34.3506\n      SSIM (RGB): 0.9352\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.49\n      SSIM (RGB): 0.9312\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.6072\n      SSIM (RGB): 0.9352\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.1522\n      SSIM (RGB): 0.953\n    Task: Denoising\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 34.3422\n      SSIM (RGB): 0.9356\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.4544\n      SSIM (RGB): 0.9308\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.5473\n      SSIM (RGB): 0.9344\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 15.0\n      PSNR (RGB): 35.0754\n      SSIM (RGB): 0.9524\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n- Config: configs/restormer/restormer_official_dfwb-color-sigma25.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-color-sigma25\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 31.7457\n      SSIM (RGB): 0.8942\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 33.0489\n      SSIM (RGB): 0.8943\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 33.326\n      SSIM (RGB): 0.9066\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 32.967\n      SSIM (RGB): 0.9317\n    Task: Denoising\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 31.7391\n      SSIM (RGB): 0.8945\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 33.038\n      SSIM (RGB): 0.8941\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 33.304\n      SSIM (RGB): 0.9063\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 25.0\n      PSNR (RGB): 32.9165\n      SSIM (RGB): 0.9312\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n- Config: configs/restormer/restormer_official_dfwb-color-sigma50.py\n  In Collection: Restormer\n  Name: restormer_official_dfwb-color-sigma50\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 28.5569\n      SSIM (RGB): 0.8127\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.0122\n      SSIM (RGB): 0.8238\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.2608\n      SSIM (RGB): 0.8515\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.023\n      SSIM (RGB): 0.8902\n    Task: Denoising\n  - Dataset: CBSD68\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 28.5582\n      SSIM (RGB): 0.8126\n    Task: Denoising\n  - Dataset: Kodak24\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.0074\n      SSIM (RGB): 0.8233\n    Task: Denoising\n  - Dataset: McMaster\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.2671\n      SSIM (RGB): 0.852\n    Task: Denoising\n  - Dataset: Urban100\n    Metrics:\n      $\\\\sigma$: 50.0\n      PSNR (RGB): 30.0172\n      SSIM (RGB): 0.8898\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_dfwb-color-blind-dfd03c9f.pth\n- Config: configs/restormer/restormer_official_sidd.py\n  In Collection: Restormer\n  Name: restormer_official_sidd\n  Results:\n  - Dataset: SIDD\n    Metrics:\n      PSNR: 40.0156\n      SSIM: 0.9225\n    Task: Denoising\n  Weights: https://download.openmmlab.com/mmediting/restormer/restormer_official_sidd-9e7025db.pth\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-color-sigma15.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_color_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_color_sigma15'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 15\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-color-sigma25.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_color_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_color_sigma25'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 25\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-color-sigma50.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_color_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_color_sigma50'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 50\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-gray-sigma15.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_gray_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_gray_sigma15'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 15\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=1,\n        out_channels=1,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.],\n        std=[255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-gray-sigma25.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_gray_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_gray_sigma25'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 25\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=1,\n        out_channels=1,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.],\n        std=[255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dfwb-gray-sigma50.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_gray_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dfwb_gray_sigma50'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 50\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma * 255, sigma * 255]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=1,\n        out_channels=1,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.],\n        std=[255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dpdd-dual.py",
    "content": "_base_ = [\n    'restormer_official_dpdd-single.py',\n]\n\nexperiment_name = 'restormer_official_dpdd-dual'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify PackInputs\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[4] = dict(type='PackInputs', keys=['imgL', 'imgR'])\n\n# model settings\nmodel = dict(\n    generator=dict(inp_channels=6, dual_pixel_task=True),\n    data_preprocessor=dict(type='DataPreprocessor'))\n"
  },
  {
    "path": "configs/restormer/restormer_official_dpdd-single.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/deblurring-defocus_test_config.py'\n]\n\nexperiment_name = 'restormer_official_dpdd-single'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_gopro.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/deblurring-motion_test_config.py'\n]\n\nexperiment_name = 'restormer_official_gopro'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_rain13k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/deraining_test_config.py'\n]\n\nexperiment_name = 'restormer_official_rain13k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/restormer/restormer_official_sidd.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-real_test_config.py'\n]\n\nexperiment_name = 'restormer_official_sidd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='Restormer',\n        inp_channels=3,\n        out_channels=3,\n        dim=48,\n        num_blocks=[4, 6, 6, 8],\n        num_refinement_blocks=4,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n"
  },
  {
    "path": "configs/sagan/README.md",
    "content": "# SAGAN (ICML'2019)\n\n> [Self-attention generative adversarial networks](https://proceedings.mlr.press/v97/zhang19d.html)\n\n> **Task**: Conditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nIn this paper, we propose the Self-Attention Generative Adversarial Network (SAGAN) which allows attention-driven, long-range dependency modeling for image generation tasks. Traditional convolutional GANs generate high-resolution details as a function of only spatially local points in lower-resolution feature maps. In SAGAN, details can be generated using cues from all feature locations. Moreover, the discriminator can check that highly detailed features in distant portions of the image are consistent with each other. Furthermore, recent work has shown that generator conditioning affects GAN performance. Leveraging this insight, we apply spectral normalization to the GAN generator and find that this improves training dynamics. The proposed SAGAN performs better than prior work, boosting the best published Inception score from 36.8 to 52.52 and reducing Fréchet Inception distance from 27.62 to 18.65 on the challenging ImageNet dataset. Visualization of the attention layers shows that the generator leverages neighborhoods that correspond to object shapes rather than local regions of fixed shape.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143054130-8cc1d9b7-df13-4fdb-8dbf-af4b2c15ed28.JPG\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> Results from our SAGAN trained in CIFAR10</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/28132635/127619657-67f2e62d-52e4-43d2-931f-6d0e6e019813.png\" width=\"400\"/>\n</div>\n\n|                       Model                        | Dataset  | Inplace ReLU | dist_step | Total Batchsize (BZ_PER_GPU * NGPU) | Total Iters\\* |  Iter  |   IS    |   FID   |                       Download                        |\n| :------------------------------------------------: | :------: | :----------: | :-------: | :---------------------------------: | :-----------: | :----: | :-----: | :-----: | :---------------------------------------------------: |\n| [SAGAN-32x32-woInplaceReLU Best IS](./sagan_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |     w/o      |     5     |                64x1                 |    500000     | 400000 | 9.3217  | 10.5030 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_woReUinplace_is-iter400000_20210730_125743-4008a9ca.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_woReUinplace_20210730_125449_fid-d50568a4_is-04008a9ca.json) |\n| [SAGAN-32x32-woInplaceReLU Best FID](./sagan_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |     w/o      |     5     |                64x1                 |    500000     | 480000 | 9.3174  | 9.4252  | [model](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_woReUinplace_fid-iter480000_20210730_125449-d50568a4.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_woReUinplace_20210730_125449_fid-d50568a4_is-04008a9ca.json) |\n| [SAGAN-32x32-wInplaceReLU Best IS](./sagan_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |      w       |     5     |                64x1                 |    500000     | 380000 | 9.2286  | 11.7760 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_wReLUinplace_is-iter380000_20210730_124937-c77b4d25.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_wReLUinplace_20210730_125155_fid-cbefb354_is-c77b4d25.json) |\n| [SAGAN-32x32-wInplaceReLU Best FID](./sagan_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |      w       |     5     |                64x1                 |    500000     | 460000 | 9.2061  | 10.7781 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_wReLUinplace_fid-iter460000_20210730_125155-cbefb354.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_wReLUinplace_20210730_125155_fid-cbefb354_is-c77b4d25.json) |\n| [SAGAN-128x128-woInplaceReLU Best IS](./sagan_woReLUinplace_Glr1e-4_Dlr4e-4_ndisc1-4xb64_imagenet1k-128x128.py) | ImageNet |     w/o      |     1     |                64x4                 |    1000000    | 980000 | 31.5938 | 36.7712 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_imagenet1k_128_Glr1e-4_Dlr4e-4_ndisc1_b32x4_woReLUinplace_is-iter980000_20210730_163140-cfbebfc6.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_imagenet1k_128_Glr1e-4_Dlr4e-4_ndisc1_b32x4_woReLUinplace_20210730_163431_fid-d7916963_is-cfbebfc6.json) |\n| [SAGAN-128x128-woInplaceReLU Best FID](./sagan_woReLUinplace_Glr1e-4_Dlr4e-4_ndisc1-4xb64_imagenet1k-128x128.py) | ImageNet |     w/o      |     1     |                64x4                 |    1000000    | 950000 | 28.4936 | 34.7838 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_imagenet1k_128_Glr1e-4_Dlr4e-4_ndisc1_b32x4_woReLUinplace_fid-iter950000_20210730_163431-d7916963.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_imagenet1k_128_Glr1e-4_Dlr4e-4_ndisc1_b32x4_woReLUinplace_20210730_163431_fid-d7916963_is-cfbebfc6.json) |\n| [SAGAN-128x128-BigGAN Schedule Best IS](./sagan_woReLUinplace-Glr1e-4_Dlr4e-4_noaug-ndisc1-8xb32-bigGAN-sch_imagenet1k-128x128.py) | ImageNet |     w/o      |     1     |                32x8                 |    1000000    | 826000 | 69.5350 | 12.8295 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.json) |\n| [SAGAN-128x128-BigGAN Schedule Best FID](./sagan_woReLUinplace-Glr1e-4_Dlr4e-4_noaug-ndisc1-8xb32-bigGAN-sch_imagenet1k-128x128.py) | ImageNet |     w/o      |     1     |                32x8                 |    1000000    | 826000 | 69.5350 | 12.8295 | [model](https://download.openmmlab.com/mmediting/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.pth) \\| [Log](https://download.openmmlab.com/mmediting/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.json) |\n\n'\\*' Iteration counting rule in our implementation is different from others. If you want to align with other codebases, you can use the following conversion formula:\n\n```\ntotal_iters (biggan/pytorch studio gan) = our_total_iters / dist_step\n```\n\nWe also provide converted pre-train models from [Pytorch-StudioGAN](https://github.com/POSTECH-CVLab/PyTorch-StudioGAN).\nTo be noted that, in Pytorch Studio GAN, **inplace ReLU** is used in generator and discriminator.\n\n|           Model            | Dataset  | Inplace ReLU | n_disc | Total Iters | IS (Our Pipeline) | FID (Our Pipeline) | IS (StudioGAN) | FID (StudioGAN) |           Download            |            Original Download link            |\n| :------------------------: | :------: | :----------: | :----: | :---------: | :---------------: | :----------------: | :------------: | :-------------: | :---------------------------: | :------------------------------------------: |\n| [SAGAN-32x32 StudioGAN](./sagan_cvt-studioGAN_cifar10-32x32.py) | CIFAR10  |      w       |   5    |   100000    |       9.116       |      10.2011       |     8.680      |     14.009      | [model](https://download.openmmlab.com/mmediting/sagan/sagan_32_cifar10_convert-studio-rgb_20210730_153321-080da7e2.pth) | [model](https://drive.google.com/drive/folders/1FA8hcz4MB8-hgTwLuDA0ZUfr8slud5P_) |\n| [SAGAN0-128x128 StudioGAN](./sagan_128_cvt_studioGAN.py) | ImageNet |      w       |   1    |   1000000   |      27.367       |      40.1162       |     29.848     |     34.726      | [model](https://download.openmmlab.com/mmediting/sagan/sagan_128_imagenet1k_convert-studio-rgb_20210730_153357-eddb0d1d.pth) | [model](https://drive.google.com/drive/folders/1ZYaqeeumDgxOPDhRR5QLeLFIpgBJ9S6B) |\n\n- `Our Pipeline` denote results evaluated with our pipeline.\n- `StudioGAN` denote results released by Pytorch-StudioGAN.\n\nFor IS metric, our implementation is different from PyTorch-Studio GAN in the following aspects:\n\n1. We use [Tero's Inception](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) for feature extraction.\n2. We use bicubic interpolation with PIL backend to resize image before feed them to Inception.\n\nFor FID evaluation, we follow the pipeline of [BigGAN](https://github.com/ajbrock/BigGAN-PyTorch/blob/98459431a5d618d644d54cd1e9fceb1e5045648d/calculate_inception_moments.py#L52), where the whole training set is adopted to extract inception statistics, and Pytorch Studio GAN uses 50000 randomly selected samples. Besides, we also use [Tero's Inception](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) for feature extraction.\n\nYou can download the preprocessed inception state by the following url: [CIFAR10](https://download.openmmlab.com/mmediting/evaluation/fid_inception_pkl/cifar10.pkl) and [ImageNet1k](https://download.openmmlab.com/mmediting/evaluation/fid_inception_pkl/imagenet.pkl).\n\nYou can use following commands to extract those inception states by yourself.\n\n```\n# For CIFAR10\npython tools/utils/inception_stat.py --data-cfg configs/_base_/datasets/cifar10_inception_stat.py --pklname cifar10.pkl --no-shuffle --inception-style stylegan --num-samples -1 --subset train\n\n# For ImageNet1k\npython tools/utils/inception_stat.py --data-cfg configs/_base_/datasets/imagenet_128x128_inception_stat.py --pklname imagenet.pkl --no-shuffle --inception-style stylegan --num-samples -1 --subset train\n```\n\n## Citation\n\n```latex\n@inproceedings{zhang2019self,\n  title={Self-attention generative adversarial networks},\n  author={Zhang, Han and Goodfellow, Ian and Metaxas, Dimitris and Odena, Augustus},\n  booktitle={International conference on machine learning},\n  pages={7354--7363},\n  year={2019},\n  organization={PMLR},\n  url={https://proceedings.mlr.press/v97/zhang19d.html},\n}\n```\n"
  },
  {
    "path": "configs/sagan/metafile.yml",
    "content": "Collections:\n- Name: SAGAN\n  Paper:\n    Title: Self-attention generative adversarial networks\n    URL: https://proceedings.mlr.press/v97/zhang19d.html\n  README: configs/sagan/README.md\n  Task:\n  - conditional gans\n  Year: 2019\nModels:\n- Config: configs/sagan/sagan_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py\n  In Collection: SAGAN\n  Name: sagan_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 10.503\n      IS: 9.3217\n      Iter: 400000.0\n      Total Iters\\*: 500000.0\n      dist_step: 5.0\n    Task: Conditional GANs\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 9.4252\n      IS: 9.3174\n      Iter: 480000.0\n      Total Iters\\*: 500000.0\n      dist_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_woReUinplace_fid-iter480000_20210730_125449-d50568a4.pth\n- Config: configs/sagan/sagan_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py\n  In Collection: SAGAN\n  Name: sagan_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 11.776\n      IS: 9.2286\n      Iter: 380000.0\n      Total Iters\\*: 500000.0\n      dist_step: 5.0\n    Task: Conditional GANs\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 10.7781\n      IS: 9.2061\n      Iter: 460000.0\n      Total Iters\\*: 500000.0\n      dist_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_cifar10_32_lr2e-4_ndisc5_b64x1_wReLUinplace_fid-iter460000_20210730_125155-cbefb354.pth\n- Config: configs/sagan/sagan_woReLUinplace_Glr1e-4_Dlr4e-4_ndisc1-4xb64_imagenet1k-128x128.py\n  In Collection: SAGAN\n  Name: sagan_woReLUinplace_Glr1e-4_Dlr4e-4_ndisc1-4xb64_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID: 36.7712\n      IS: 31.5938\n      Iter: 980000.0\n      Total Iters\\*: 1000000.0\n      dist_step: 1.0\n    Task: Conditional GANs\n  - Dataset: ImageNet\n    Metrics:\n      FID: 34.7838\n      IS: 28.4936\n      Iter: 950000.0\n      Total Iters\\*: 1000000.0\n      dist_step: 1.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_imagenet1k_128_Glr1e-4_Dlr4e-4_ndisc1_b32x4_woReLUinplace_fid-iter950000_20210730_163431-d7916963.pth\n- Config: configs/sagan/sagan_woReLUinplace-Glr1e-4_Dlr4e-4_noaug-ndisc1-8xb32-bigGAN-sch_imagenet1k-128x128.py\n  In Collection: SAGAN\n  Name: sagan_woReLUinplace-Glr1e-4_Dlr4e-4_noaug-ndisc1-8xb32-bigGAN-sch_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID: 12.8295\n      IS: 69.535\n      Iter: 826000.0\n      Total Iters\\*: 1000000.0\n      dist_step: 1.0\n    Task: Conditional GANs\n  - Dataset: ImageNet\n    Metrics:\n      FID: 12.8295\n      IS: 69.535\n      Iter: 826000.0\n      Total Iters\\*: 1000000.0\n      dist_step: 1.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_128_woReLUinplace_noaug_bigGAN_imagenet1k_b32x8_Glr1e-4_Dlr-4e-4_ndisc1_20210818_210232-3f5686af.pth\n- Config: configs/sagan/sagan_cvt-studioGAN_cifar10-32x32.py\n  In Collection: SAGAN\n  Name: sagan_cvt-studioGAN_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID (Our Pipeline): 10.2011\n      FID (StudioGAN): 14.009\n      IS (Our Pipeline): 9.116\n      IS (StudioGAN): 8.68\n      Total Iters: 100000.0\n      n_disc: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_32_cifar10_convert-studio-rgb_20210730_153321-080da7e2.pth\n- Config: configs/sagan/sagan_128_cvt_studioGAN.py\n  In Collection: SAGAN\n  Name: sagan_128_cvt_studioGAN\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID (Our Pipeline): 40.1162\n      FID (StudioGAN): 34.726\n      IS (Our Pipeline): 27.367\n      IS (StudioGAN): 29.848\n      Total Iters: 1000000.0\n      n_disc: 1.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sagan/sagan_128_imagenet1k_convert-studio-rgb_20210730_153357-eddb0d1d.pth\n"
  },
  {
    "path": "configs/sagan/sagan_128_cvt_studioGAN.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/models/sagan/base_sagan_128x128.py',\n    '../_base_/datasets/imagenet_noaug_128.py',\n]\n\n# NOTE:\n# * studio GAN train their model in 'RGB' order\nmodel = dict(generator=dict(rgb_to_bgr=True))\n\n# NOTE: do not support training for converted configs\ntrain_cfg = train_dataloader = optim_wrapper = None\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\n# EVALUATION\nval_dataloader = val_evaluator = val_cfg = None\ntest_dataloader = dict(batch_size=128)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sagan/sagan_cvt-studioGAN_cifar10-32x32.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/cifar10_noaug.py',\n    '../_base_/models/sagan/base_sagan_32x32.py',\n]\n\n# NOTE:\n# * CIFAR is loaded in 'RGB'\n# * studio GAN train their model in 'RGB' order\nmodel = dict(\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(rgb_to_bgr=True))\n\n# NOTE: do not support training for converted configs\ntrain_cfg = train_dataloader = optim_wrapper = None\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\n# EVALUATION\nval_dataloader = val_evaluator = val_cfg = None\ntest_dataloader = dict(batch_size=128)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sagan/sagan_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/cifar10_nopad.py',\n    '../_base_/models/sagan/base_sagan_32x32.py',\n]\n\n# MODEL\ndisc_step = 5\ninit_cfg = dict(type='studio')\nmodel = dict(\n    # CIFAR images are RGB, convert to BGR\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(act_cfg=dict(type='ReLU', inplace=True), init_cfg=init_cfg),\n    discriminator=dict(\n        act_cfg=dict(type='ReLU', inplace=True), init_cfg=init_cfg))\n\n# TRAIN\ntrain_cfg = dict(max_iters=100000 * disc_step)\ntrain_dataloader = dict(batch_size=64)\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sagan/sagan_woReLUinplace-Glr1e-4_Dlr4e-4_noaug-ndisc1-8xb32-bigGAN-sch_imagenet1k-128x128.py",
    "content": "# In this config, we follow the setting `launch_SAGAN_bz128x2_ema.sh` from\n# BigGAN's repo. Please refer to https://github.com/ajbrock/BigGAN-PyTorch/blob/master/scripts/launch_SAGAN_bs128x2_ema.sh  # noqa\n# In summary, in this config:\n# 1. use eps=1e-8 for Spectral Norm\n# 2. not use syncBN\n# 3. not use  Spectral Norm for embedding layers in cBN\n# 4. start EMA at iterations\n# 5. use xavier_uniform for weight initialization\n# 6. no data augmentation\n\n_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/models/sagan/base_sagan_128x128.py',\n    '../_base_/datasets/imagenet_noaug_128.py',\n]\n\n# MODEL\ninit_cfg = dict(type='BigGAN')\nmodel = dict(\n    num_classes=1000,\n    generator=dict(\n        num_classes=1000,\n        init_cfg=init_cfg,\n        norm_eps=1e-5,\n        sn_eps=1e-8,\n        auto_sync_bn=False,\n        with_embedding_spectral_norm=False),\n    discriminator=dict(num_classes=1000, init_cfg=init_cfg, sn_eps=1e-8),\n    discriminator_steps=1,\n    ema_config=dict(interval=1, momentum=0.999, start_iter=2000))\n\n# TRAINING\ntrain_cfg = dict(\n    max_iters=1000000, val_interval=10000, dynamic_intervals=[(800000, 4000)])\ntrain_dataloader = dict(batch_size=32)  # train on 8 gpus\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema.fake_img', 'orig.fake_img']))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='ema')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_dataloader = test_dataloader = dict(batch_size=64)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sagan/sagan_woReLUinplace_Glr1e-4_Dlr4e-4_ndisc1-4xb64_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/models/sagan/base_sagan_128x128.py',\n    '../_base_/datasets/imagenet_128.py',\n]\n\n# MODEL\ninit_cfg = dict(type='studio')\nmodel = dict(\n    num_classes=1000,\n    generator=dict(num_classes=1000, init_cfg=init_cfg),\n    discriminator=dict(num_classes=1000, init_cfg=init_cfg))\n\n# TRAIN\ntrain_cfg = dict(\n    max_iters=1000000, val_interval=10000, dynamic_intervals=[(800000, 4000)])\ntrain_dataloader = dict(batch_size=64)  # train on 4 gpus\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_dataloader = test_dataloader = dict(batch_size=64)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sagan/sagan_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/cifar10_nopad.py',\n    '../_base_/models/sagan/base_sagan_32x32.py',\n]\n\n# MODEL\ndisc_step = 5\ninit_cfg = dict(type='studio')\nmodel = dict(\n    # CIFAR images are RGB, convert to BGR\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(init_cfg=init_cfg),\n    discriminator=dict(init_cfg=init_cfg))\n\n# TRAIN\ntrain_cfg = dict(max_iters=100000 * disc_step)\ntrain_dataloader = dict(batch_size=64)\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/singan/README.md",
    "content": "# SinGAN (ICCV'2019)\n\n> [Singan: Learning a Generative Model from a Single Natural Image](https://openaccess.thecvf.com/content_ICCV_2019/html/Shaham_SinGAN_Learning_a_Generative_Model_From_a_Single_Natural_Image_ICCV_2019_paper.html)\n\n> **Task**: Internal Learning\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe introduce SinGAN, an unconditional generative model that can be learned from a single natural image. Our model is trained to capture the internal distribution of patches within the image, and is then able to generate high quality, diverse samples that carry the same visual content as the image. SinGAN contains a pyramid of fully convolutional GANs, each responsible for learning the patch distribution at a different scale of the image. This allows generating new samples of arbitrary size and aspect ratio, that have significant variability, yet maintain both the global structure and the fine textures of the training image. In contrast to previous single image GAN schemes, our approach is not limited to texture images, and is not conditional (i.e. it generates samples from noise). User studies confirm that the generated samples are commonly confused to be real images. We illustrate the utility of SinGAN in a wide range of image manipulation tasks.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143054395-000ceec1-3be9-4447-b4b9-effc9de94c62.JPG\"/>\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> SinGAN balloons</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/113702715-7861a900-970c-11eb-9dd8-0743cc30701f.png\" width=\"800\"/>\n</div>\n\n|             Model              |                                     Dataset                                     | Num Scales |                                     Download                                      |\n| :----------------------------: | :-----------------------------------------------------------------------------: | :--------: | :-------------------------------------------------------------------------------: |\n| [SinGAN](./singan_balloons.py) | [balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png) |     8      | [ckpt](https://download.openmmlab.com/mmediting/singan/singan_balloons_20210406_191047-8fcd94cf.pth) \\| [pkl](https://download.openmmlab.com/mmediting/singan/singan_balloons_20210406_191047-8fcd94cf.pkl) |\n|   [SinGAN](./singan_fish.py)   | [fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg) |     10     | [ckpt](https://download.openmmlab.com/mmediting/singan/singan_fis_20210406_201006-860d91b6.pth) \\| [pkl](https://download.openmmlab.com/mmediting/singan/singan_fis_20210406_201006-860d91b6.pkl) |\n| [SinGAN](./singan_bohemian.py) | [bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png) |     10     | [ckpt](https://download.openmmlab.com/mmediting/singan/singan_bohemian_20210406_175439-f964ee38.pth) \\| [pkl](https://download.openmmlab.com/mmediting/singan/singan_bohemian_20210406_175439-f964ee38.pkl) |\n\n## Notes for using SinGAN\n\nWhen training SinGAN models, users may obtain the number of scales (stages) in advance via the following commands. This number is important for constructing config file, which is related to the generator, discriminator, the training iterations and so on.\n\n```shell\n>>> from mmgen.datasets.singan_dataset import create_real_pyramid\n>>> import mmcv\n>>> real = mmcv.imread('real_img_path')\n>>> _, _, num_scales = create_real_pyramid(real, min_size=25, max_size=300, scale_factor_init=0.75)\n```\n\nWhen testing SinGAN models, users have to modify the config file to add the `test_cfg`. As shown in `configs/singan/singan_balloons.py`, the only thing you need to do is add the path for `pkl` data. There are some important data containing in the pickle files which you can download from our website.\n\n```python\ntest_cfg = dict(\n    _delete_ = True\n    pkl_data = 'path to pkl data'\n)\n```\n\n## Citation\n\n```latex\n@inproceedings{shaham2019singan,\n  title={Singan: Learning a generative model from a single natural image},\n  author={Shaham, Tamar Rott and Dekel, Tali and Michaeli, Tomer},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},\n  pages={4570--4580},\n  year={2019},\n  url={https://openaccess.thecvf.com/content_ICCV_2019/html/Shaham_SinGAN_Learning_a_Generative_Model_From_a_Single_Natural_Image_ICCV_2019_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/singan/metafile.yml",
    "content": "Collections:\n- Name: SinGAN\n  Paper:\n    Title: 'Singan: Learning a Generative Model from a Single Natural Image'\n    URL: https://openaccess.thecvf.com/content_ICCV_2019/html/Shaham_SinGAN_Learning_a_Generative_Model_From_a_Single_Natural_Image_ICCV_2019_paper.html\n  README: configs/singan/README.md\n  Task:\n  - internal learning\n  Year: 2019\nModels:\n- Config: configs/singan/singan_balloons.py\n  In Collection: SinGAN\n  Name: singan_balloons\n  Results:\n  - Dataset: '[balloons.png](https://download.openmmlab.com/mmediting/dataset/singan/balloons.png)'\n    Metrics:\n      Num Scales: 8.0\n    Task: Internal Learning\n  Weights: https://download.openmmlab.com/mmediting/singan/singan_balloons_20210406_191047-8fcd94cf.pth\n- Config: configs/singan/singan_fish.py\n  In Collection: SinGAN\n  Name: singan_fish\n  Results:\n  - Dataset: '[fish.jpg](https://download.openmmlab.com/mmediting/dataset/singan/fish-crop.jpg)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Internal Learning\n  Weights: https://download.openmmlab.com/mmediting/singan/singan_fis_20210406_201006-860d91b6.pth\n- Config: configs/singan/singan_bohemian.py\n  In Collection: SinGAN\n  Name: singan_bohemian\n  Results:\n  - Dataset: '[bohemian.png](https://download.openmmlab.com/mmediting/dataset/singan/bohemian.png)'\n    Metrics:\n      Num Scales: 10.0\n    Task: Internal Learning\n  Weights: https://download.openmmlab.com/mmediting/singan/singan_bohemian_20210406_175439-f964ee38.pth\n"
  },
  {
    "path": "configs/singan/singan_balloons.py",
    "content": "_base_ = ['./singan_fish.py']\n\n# MODEL\nnum_scales = 8  # start from zero\ngenerator_steps = 3\ndiscriminator_steps = 3\niters_per_scale = 2000\n\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_balloons_20210406_191047-8fcd94cf.pkl'  # noqa\ntest_pkl_data = None\n\nmodel = dict(\n    num_scales=num_scales,\n    generator=dict(num_scales=num_scales),\n    discriminator=dict(num_scales=num_scales),\n    test_pkl_data=test_pkl_data)\n\n# DATA\npipeline = [\n    dict(\n        type='PackInputs',\n        keys=[f'real_scale{i}' for i in range(num_scales)] + ['input_sample'])\n]\ndata_root = './data/singan/balloons.png'\ntrain_dataloader = dict(dataset=dict(data_root=data_root, pipeline=pipeline))\n\n# HOOKS\ncustom_hooks = [\n    dict(\n        type='PickleDataHook',\n        output_dir='pickle',\n        interval=-1,\n        after_run=True,\n        data_name_list=['noise_weights', 'fixed_noises', 'curr_stage']),\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='SinGAN', name='balloons'))\n]\n\n# TRAINING\ntotal_iters = (num_scales + 1) * iters_per_scale * discriminator_steps\ntrain_cfg = dict(max_iters=total_iters)\n"
  },
  {
    "path": "configs/singan/singan_bohemian.py",
    "content": "_base_ = ['./singan_fish.py']\n\n# MODEL\n# NOTE: add by user, e.g.:\n# test_pkl_data = './work_dirs/singan_pkl/singan_bohemian_20210406_175439-f964ee38.pkl'  # noqa\ntest_pkl_data = None\nmodel = dict(test_pkl_data=test_pkl_data)\n\n# HOOKS\ncustom_hooks = [\n    dict(\n        type='PickleDataHook',\n        output_dir='pickle',\n        interval=-1,\n        after_run=True,\n        data_name_list=['noise_weights', 'fixed_noises', 'curr_stage']),\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='SinGAN', name='bohemian'))\n]\n\n# DATA\nmin_size = 25\nmax_size = 500\ndata_root = './data/singan/bohemian.png'\ntrain_dataloader = dict(\n    dataset=dict(data_root=data_root, min_size=min_size, max_size=max_size))\n"
  },
  {
    "path": "configs/singan/singan_fish.py",
    "content": "_base_ = ['../_base_/gen_default_runtime.py']\n\n# MODEL WRAPPER\nmodel_wrapper_cfg = dict(find_unused_parameters=True)\n\n# MODEL\nnum_scales = 10  # start from zero\ngenerator_steps = 3\ndiscriminator_steps = 3\niters_per_scale = 2000\n# NOTE: add by user, e.g.:\n# test_pkl_data = ('./work_dirs/singan_fish/pickle/iter_66001.pkl')\ntest_pkl_data = None\n\nmodel = dict(\n    type='SinGAN',\n    data_preprocessor=dict(\n        type='DataPreprocessor', non_image_keys=['input_sample']),\n    generator=dict(\n        type='SinGANMultiScaleGenerator',\n        in_channels=3,\n        out_channels=3,\n        num_scales=num_scales,\n    ),\n    discriminator=dict(\n        type='SinGANMultiScaleDiscriminator',\n        in_channels=3,\n        num_scales=num_scales,\n    ),\n    noise_weight_init=0.1,\n    test_pkl_data=test_pkl_data,\n    lr_scheduler_args=dict(milestones=[1600], gamma=0.1),\n    generator_steps=generator_steps,\n    discriminator_steps=discriminator_steps,\n    iters_per_scale=iters_per_scale,\n    num_scales=num_scales)\n\n# DATA\nmin_size = 25\nmax_size = 300\ndataset_type = 'SinGANDataset'\ndata_root = './data/singan/fish-crop.jpg'\n\npipeline = [\n    dict(\n        type='PackInputs',\n        keys=[f'real_scale{i}' for i in range(num_scales)] + ['input_sample'])\n]\ndataset = dict(\n    type=dataset_type,\n    data_root=data_root,\n    min_size=min_size,\n    max_size=max_size,\n    scale_factor_init=0.75,\n    pipeline=pipeline)\n\ntrain_dataloader = dict(\n    batch_size=1,\n    num_workers=0,\n    dataset=dataset,\n    sampler=None,\n    persistent_workers=False)\n\n# TRAINING\noptim_wrapper = dict(\n    constructor='SinGANOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))))\n\ntotal_iters = (num_scales + 1) * iters_per_scale * discriminator_steps\ntrain_cfg = dict(max_iters=total_iters)\n\n# HOOK\ncustom_hooks = [\n    dict(\n        type='PickleDataHook',\n        output_dir='pickle',\n        interval=-1,\n        after_run=True,\n        data_name_list=['noise_weights', 'fixed_noises', 'curr_stage']),\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='SinGAN', name='fish'))\n]\n\n# NOTE: SinGAN do not support val_loop and test_loop, please use\n# 'tools/utils/inference_singan.py' to evaluate and generate images.\nval_cfg = test_cfg = None\nval_evaluator = test_evaluator = None\n"
  },
  {
    "path": "configs/sngan_proj/README.md",
    "content": "# SNGAN (ICLR'2018)\n\n> [Spectral Normalization for Generative Adversarial Networks](https://openreview.net/forum?id=B1QRgziT-)\n\n> **Task**: Conditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nOne of the challenges in the study of generative adversarial networks is the instability of its training. In this paper, we propose a novel weight normalization technique called spectral normalization to stabilize the training of the discriminator. Our new normalization technique is computationally light and easy to incorporate into existing implementations. We tested the efficacy of spectral normalization on CIFAR10, STL-10, and ILSVRC2012 dataset, and we experimentally confirmed that spectrally normalized GANs (SN-GANs) is capable of generating images of better or equal quality relative to the previous training stabilization techniques.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143154496-6a03def4-4507-4d80-a948-89a5b747d916.png\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> Results from our SNGAN-PROJ trained in CIFAR10 and ImageNet</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/28132635/125151484-14220b80-e179-11eb-81f7-9391ccaeb841.png\" width=\"400\"/> &nbsp;&nbsp;\n  <img src=\"https://user-images.githubusercontent.com/28132635/127621152-7b7a0f2c-c743-485a-bf2e-2beca849a6e6.png\" width=\"400\"/>\n</div>\n\n|                                Model                                | Dataset  | Inplace ReLU | disc_step | Total Iters\\* |  Iter  |   IS    |   FID   |                                Download                                 |\n| :-----------------------------------------------------------------: | :------: | :----------: | :-------: | :-----------: | :----: | :-----: | :-----: | :---------------------------------------------------------------------: |\n| [SNGAN_Proj-32x32-woInplaceReLU Best IS](./sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |     w/o      |     5     |    500000     | 400000 | 9.6919  | 9.8203  | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_woReLUinplace_is-iter400000_20210709_163823-902ce1ae.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_woReLUinplace_20210624_065306_fid-ba0862a0_is-902ce1ae.json) |\n| [SNGAN_Proj-32x32-woInplaceReLU Best FID](./sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |     w/o      |     5     |    500000     | 490000 | 9.5659  | 8.1158  | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_woReLUinplace_fid-iter490000_20210709_163329-ba0862a0.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_woReLUinplace_20210624_065306_fid-ba0862a0_is-902ce1ae.json) |\n| [SNGAN_Proj-32x32-wInplaceReLU Best IS](./sngan-proj_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |      w       |     5     |    500000     | 490000 | 9.5564  | 8.3462  | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_wReLUinplace_is-iter490000_20210709_202230-cd863c74.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_wReLUinplace_20210624_063454_is-cd863c74_fid-191b2648.json) |\n| [SNGAN_Proj-32x32-wInplaceReLU Best FID](./sngan-proj_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py) | CIFAR10  |      w       |     5     |    500000     | 490000 | 9.5564  | 8.3462  | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4-b64x1_wReLUinplace_fid-iter490000_20210709_203038-191b2648.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_wReLUinplace_20210624_063454_is-cd863c74_fid-191b2648.json) |\n| [SNGAN_Proj-128x128-woInplaceReLU Best IS](./sngan-proj_woReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py) | ImageNet |     w/o      |     5     |    1000000    | 952000 | 30.0651 | 33.4682 | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_woReLUinplace_is-iter952000_20210730_132027-9c884a21.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_woReLUinplace_20210730_131424_fid-061bf803_is-9c884a21.json) |\n| [SNGAN_Proj-128x128-woInplaceReLU Best FID](./sngan-proj_woReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py) | ImageNet |     w/o      |     5     |    1000000    | 989000 | 29.5779 | 32.6193 | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_woReLUinplace_fid-iter988000_20210730_131424-061bf803.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_woReLUinplace_20210730_131424_fid-061bf803_is-9c884a21.json) |\n| [SNGAN_Proj-128x128-wInplaceReLU Best IS](./sngan-proj_wReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py) | ImageNet |      w       |     5     |    1000000    | 944000 | 28.1799 | 34.3383 | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_wReLUinplace_is-iter944000_20210730_132714-ca0ccd07.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_wReLUinplace_20210730_132401_fid-9a682411_is-ca0ccd07.json) |\n| [SNGAN_Proj-128x128-wInplaceReLU Best FID](./sngan-proj_wReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py) | ImageNet |      w       |     5     |    1000000    | 988000 | 27.7948 | 33.4821 | [ckpt](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_wReLUinplace_fid-iter988000_20210730_132401-9a682411.pth) \\| [Log](https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_wReLUinplace_20210730_132401_fid-9a682411_is-ca0ccd07.json) |\n\n'\\*' Iteration counting rule in our implementation is different from others. If you want to align with other codebases, you can use the following conversion formula:\n\n```\ntotal_iters (biggan/pytorch studio gan) = our_total_iters / disc_step\n```\n\nWe also provide converted pre-train models from [Pytorch-StudioGAN](https://github.com/POSTECH-CVLab/PyTorch-StudioGAN).\nTo be noted that, in Pytorch Studio GAN, **inplace ReLU** is used in generator and discriminator.\n\n|           Model           | Dataset  | Inplace ReLU | disc_step | Total Iters | IS (Our Pipeline) | FID (Our Pipeline) | IS (StudioGAN) | FID (StudioGAN) |           Download           |           Original Download link            |\n| :-----------------------: | :------: | :----------: | :-------: | :---------: | :---------------: | :----------------: | :------------: | :-------------: | :--------------------------: | :-----------------------------------------: |\n| [SAGAN_Proj-32x32 StudioGAN](./sngan-proj-cvt-studioGAN_cifar10-32x32.py) | CIFAR10  |      w       |     5     |   100000    |       9.372       |      10.2011       |     8.677      |     13.248      | [model](https://download.openmmlab.com/mmediting/sngan_proj/sngan_cifar10_convert-studio-rgb_20210709_111346-2979202d.pth) | [model](https://drive.google.com/drive/folders/16s5Cr-V-NlfLyy_uyXEkoNxLBt-8wYSM) |\n| [SAGAN_Proj-128x128 StudioGAN](./sngan-proj-cvt-studioGAN_imagenet1k-128x128.py) | ImageNet |      w       |     2     |   1000000   |      30.218       |      29.8199       |     32.247     |     26.792      | [model](https://download.openmmlab.com/mmediting/sngan_proj/sngan_imagenet1k_convert-studio-rgb_20210709_111406-877b1130.pth) | [model](https://drive.google.com/drive/folders/1Ek2wAMlxpajL_M8aub4DKQ9B313K8XhS) |\n\n- `Our Pipeline` denote results evaluated with our pipeline.\n- `StudioGAN` denote results released by Pytorch-StudioGAN.\n\nFor IS metric, our implementation is different from PyTorch-Studio GAN in the following aspects:\n\n1. We use [Tero's Inception](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) for feature extraction.\n2. We use bicubic interpolation with PIL backend to resize image before feed them to Inception.\n\nFor FID evaluation, we follow the pipeline of [BigGAN](https://github.com/ajbrock/BigGAN-PyTorch/blob/98459431a5d618d644d54cd1e9fceb1e5045648d/calculate_inception_moments.py#L52), where the whole training set is adopted to extract inception statistics, and Pytorch Studio GAN uses 50000 randomly selected samples. Besides, we also use [Tero's Inception](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) for feature extraction.\n\nYou can download the preprocessed inception state by the following url: [CIFAR10](https://download.openmmlab.com/mmediting/evaluation/fid_inception_pkl/cifar10.pkl) and [ImageNet1k](https://download.openmmlab.com/mmediting/evaluation/fid_inception_pkl/imagenet.pkl).\n\nYou can use following commands to extract those inception states by yourself.\n\n```\n# For CIFAR10\npython tools/utils/inception_stat.py --data-cfg configs/_base_/datasets/cifar10_inception_stat.py --pklname cifar10.pkl --no-shuffle --inception-style stylegan --num-samples -1 --subset train\n\n# For ImageNet1k\npython tools/utils/inception_stat.py --data-cfg configs/_base_/datasets/imagenet_128x128_inception_stat.py --pklname imagenet.pkl --no-shuffle --inception-style stylegan --num-samples -1 --subset train\n```\n\n## Citation\n\n```latex\n@inproceedings{miyato2018spectral,\n  title={Spectral Normalization for Generative Adversarial Networks},\n  author={Miyato, Takeru and Kataoka, Toshiki and Koyama, Masanori and Yoshida, Yuichi},\n  booktitle={International Conference on Learning Representations},\n  year={2018},\n  url={https://openreview.net/forum?id=B1QRgziT-},\n}\n```\n"
  },
  {
    "path": "configs/sngan_proj/metafile.yml",
    "content": "Collections:\n- Name: SNGAN\n  Paper:\n    Title: Spectral Normalization for Generative Adversarial Networks\n    URL: https://openreview.net/forum?id=B1QRgziT-\n  README: configs/sngan_proj/README.md\n  Task:\n  - conditional gans\n  Year: 2018\nModels:\n- Config: configs/sngan_proj/sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py\n  In Collection: SNGAN\n  Name: sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 9.8203\n      IS: 9.6919\n      Iter: 400000.0\n      Total Iters\\*: 500000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 8.1158\n      IS: 9.5659\n      Iter: 490000.0\n      Total Iters\\*: 500000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4_b64x1_woReLUinplace_fid-iter490000_20210709_163329-ba0862a0.pth\n- Config: configs/sngan_proj/sngan-proj_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py\n  In Collection: SNGAN\n  Name: sngan-proj_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 8.3462\n      IS: 9.5564\n      Iter: 490000.0\n      Total Iters\\*: 500000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  - Dataset: CIFAR10\n    Metrics:\n      FID: 8.3462\n      IS: 9.5564\n      Iter: 490000.0\n      Total Iters\\*: 500000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_cifar10_32_lr-2e-4-b64x1_wReLUinplace_fid-iter490000_20210709_203038-191b2648.pth\n- Config: configs/sngan_proj/sngan-proj_woReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py\n  In Collection: SNGAN\n  Name: sngan-proj_woReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID: 33.4682\n      IS: 30.0651\n      Iter: 952000.0\n      Total Iters\\*: 1000000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  - Dataset: ImageNet\n    Metrics:\n      FID: 32.6193\n      IS: 29.5779\n      Iter: 989000.0\n      Total Iters\\*: 1000000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_woReLUinplace_fid-iter988000_20210730_131424-061bf803.pth\n- Config: configs/sngan_proj/sngan-proj_wReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py\n  In Collection: SNGAN\n  Name: sngan-proj_wReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID: 34.3383\n      IS: 28.1799\n      Iter: 944000.0\n      Total Iters\\*: 1000000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  - Dataset: ImageNet\n    Metrics:\n      FID: 33.4821\n      IS: 27.7948\n      Iter: 988000.0\n      Total Iters\\*: 1000000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_proj_imagenet1k_128_Glr2e-4_Dlr5e-5_ndisc5_b128x2_wReLUinplace_fid-iter988000_20210730_132401-9a682411.pth\n- Config: configs/sngan_proj/sngan-proj-cvt-studioGAN_cifar10-32x32.py\n  In Collection: SNGAN\n  Name: sngan-proj-cvt-studioGAN_cifar10-32x32\n  Results:\n  - Dataset: CIFAR10\n    Metrics:\n      FID (Our Pipeline): 10.2011\n      FID (StudioGAN): 13.248\n      IS (Our Pipeline): 9.372\n      IS (StudioGAN): 8.677\n      Total Iters: 100000.0\n      disc_step: 5.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_cifar10_convert-studio-rgb_20210709_111346-2979202d.pth\n- Config: configs/sngan_proj/sngan-proj-cvt-studioGAN_imagenet1k-128x128.py\n  In Collection: SNGAN\n  Name: sngan-proj-cvt-studioGAN_imagenet1k-128x128\n  Results:\n  - Dataset: ImageNet\n    Metrics:\n      FID (Our Pipeline): 29.8199\n      FID (StudioGAN): 26.792\n      IS (Our Pipeline): 30.218\n      IS (StudioGAN): 32.247\n      Total Iters: 1000000.0\n      disc_step: 2.0\n    Task: Conditional GANs\n  Weights: https://download.openmmlab.com/mmediting/sngan_proj/sngan_imagenet1k_convert-studio-rgb_20210709_111406-877b1130.pth\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj-cvt-studioGAN_cifar10-32x32.py",
    "content": "# _base_ = ['../_base_/models/base_sngan_proj_32x32.py']\n_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_32x32.py',\n    '../_base_/datasets/cifar10_nopad.py', '../_base_/default_runtime.py'\n]\n\n# NOTE:\n# * CIFAR is loaded in 'RGB'\n# * studio GAN train their model in 'RGB' order\nmodel = dict(\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(rgb_to_bgr=True))\n\n# NOTE: do not support training for converted configs\ntrain_cfg = train_dataloader = optim_wrapper = None\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=128)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj-cvt-studioGAN_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_128x128.py',\n    '../_base_/datasets/imagenet_noaug_128.py', '../_base_/default_runtime.py'\n]\n\n# NOTE: studio GAN train their model in 'RGB' order\nmodel = dict(generator=dict(rgb_to_bgr=True))\n\n# NOTE: do not support training for converted configs\ntrain_cfg = train_dataloader = optim_wrapper = None\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=128)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj_wReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_128x128.py',\n    '../_base_/datasets/imagenet_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\ndiscriminator_steps = 5\nnum_classes = 1000\ninit_cfg = dict(type='studio')\nmodel = dict(\n    num_classes=num_classes,\n    generator=dict(\n        num_classes=num_classes,\n        act_cfg=dict(type='ReLU', inplace=True),\n        init_cfg=init_cfg),\n    discriminator=dict(\n        num_classes=num_classes,\n        act_cfg=dict(type='ReLU', inplace=True),\n        init_cfg=init_cfg),\n    discriminator_steps=discriminator_steps)\n\n# TRAINING\ntrain_cfg = dict(\n    max_iters=500000 * discriminator_steps,\n    val_interval=10000,\n    dynamic_intervals=[(800000, 4000)])\ntrain_dataloader = dict(batch_size=128)  # train on 2 gpus\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=128)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj_wReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py",
    "content": "# follow pytorch GAN-Studio, random flip is used in the dataset\n_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_32x32.py',\n    '../_base_/datasets/cifar10_nopad.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\ndiscriminator_steps = 5\nnum_classes = 10\ninit_cfg = dict(type='studio')\nmodel = dict(\n    num_classes=num_classes,\n    # CIFAR images are RGB, convert to BGR\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(\n        act_cfg=dict(type='ReLU', inplace=True),\n        num_classes=num_classes,\n        init_cfg=init_cfg),\n    discriminator=dict(\n        act_cfg=dict(type='ReLU', inplace=True),\n        num_classes=num_classes,\n        init_cfg=init_cfg),\n    discriminator_steps=discriminator_steps)\n\n# TRAINING\ntrain_cfg = dict(max_iters=100000 * discriminator_steps)\ntrain_dataloader = dict(batch_size=64)  # train on 1 gpu\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=64)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj_woReLUinplace_Glr2e-4_Dlr5e-5_ndisc5-2xb128_imagenet1k-128x128.py",
    "content": "_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_128x128.py',\n    '../_base_/datasets/imagenet_128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\ndiscriminator_steps = 5\nnum_classes = 1000\ninit_cfg = dict(type='studio')\nmodel = dict(\n    num_classes=num_classes,\n    generator=dict(num_classes=num_classes, init_cfg=init_cfg),\n    discriminator=dict(num_classes=num_classes, init_cfg=init_cfg),\n    discriminator_steps=discriminator_steps)\n\n# TRAINING\ntrain_cfg = dict(\n    max_iters=500000 * discriminator_steps,\n    val_interval=10000,\n    dynamic_intervals=[(800000, 4000)])\ntrain_dataloader = dict(batch_size=128)  # train on 2 gpus\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.00005, betas=(0.0, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/imagenet-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=128)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/sngan_proj/sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py",
    "content": "# follow pytorch GAN-Studio, random flip is used in the dataset\n_base_ = [\n    '../_base_/models/sngan_proj/base_sngan_proj_32x32.py',\n    '../_base_/datasets/cifar10_nopad.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\ndiscriminator_steps = 5\nnum_classes = 10\ninit_cfg = dict(type='studio')\nmodel = dict(\n    num_classes=num_classes,\n    # CIFAR images are RGB, convert to BGR\n    data_preprocessor=dict(output_channel_order='BGR'),\n    generator=dict(num_classes=num_classes, init_cfg=init_cfg),\n    discriminator=dict(num_classes=num_classes, init_cfg=init_cfg),\n    discriminator_steps=discriminator_steps)\n\n# TRAINING\ntrain_cfg = dict(max_iters=100000 * discriminator_steps)\ntrain_dataloader = dict(batch_size=64)  # train on 1 gpu\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.5, 0.999))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\ninception_pkl = './work_dirs/inception_pkl/cifar10-full.pkl'\nmetrics = [\n    dict(\n        type='InceptionScore',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig'),\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\n# EVALUATION\nval_dataloader = test_dataloader = dict(batch_size=64)\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/srcnn/README.md",
    "content": "# SRCNN (TPAMI'2015)\n\n> [Image Super-Resolution Using Deep Convolutional Networks](https://arxiv.org/abs/1501.00092)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe propose a deep learning method for single image super-resolution (SR). Our method directly learns an end-to-end mapping between the low/high-resolution images. The mapping is represented as a deep convolutional neural network (CNN) that takes the low-resolution image as the input and outputs the high-resolution one. We further show that traditional sparse-coding-based SR methods can also be viewed as a deep convolutional network. But unlike traditional methods that handle each component separately, our method jointly optimizes all layers. Our deep CNN has a lightweight structure, yet demonstrates state-of-the-art restoration quality, and achieves fast speed for practical on-line usage. We explore different network structures and parameter settings to achieve trade-offs between performance and speed. Moreover, we extend our network to cope with three color channels simultaneously, and show better overall reconstruction quality.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144034831-79f48aae-196e-42e7-92b9-069149733e3e.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                                Model                                 | Dataset |  PSNR   |  SSIM  | Training Resources |                                            Download                                            |\n| :------------------------------------------------------------------: | :-----: | :-----: | :----: | :----------------: | :--------------------------------------------------------------------------------------------: |\n| [srcnn_x4k915_1x16_1000k_div2k](./srcnn_x4k915_1xb16-1000k_div2k.py) |  Set5   | 28.4316 | 0.8099 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608_120159.log.json) |\n| [srcnn_x4k915_1x16_1000k_div2k](./srcnn_x4k915_1xb16-1000k_div2k.py) |  Set14  | 25.6486 | 0.7014 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608_120159.log.json) |\n| [srcnn_x4k915_1x16_1000k_div2k](./srcnn_x4k915_1xb16-1000k_div2k.py) |  DIV2K  | 27.7460 | 0.7854 |         1          | [model](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608_120159.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth\n\n# single-gpu test\npython tools/test.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{dong2015image,\n  title={Image super-resolution using deep convolutional networks},\n  author={Dong, Chao and Loy, Chen Change and He, Kaiming and Tang, Xiaoou},\n  journal={IEEE transactions on pattern analysis and machine intelligence},\n  volume={38},\n  number={2},\n  pages={295--307},\n  year={2015},\n  publisher={IEEE}\n}\n```\n"
  },
  {
    "path": "configs/srcnn/README_zh-CN.md",
    "content": "# SRCNN (TPAMI'2015)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">SRCNN (TPAMI'2015)</summary>\n\n```bibtex\n@article{dong2015image,\n  title={Image super-resolution using deep convolutional networks},\n  author={Dong, Chao and Loy, Chen Change and He, Kaiming and Tang, Xiaoou},\n  journal={IEEE transactions on pattern analysis and machine intelligence},\n  volume={38},\n  number={2},\n  pages={295--307},\n  year={2015},\n  publisher={IEEE}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                 算法                                 |       Set5       |       Set14       |      DIV2K       | GPU 信息 |                                    下载                                     |\n| :------------------------------------------------------------------: | :--------------: | :---------------: | :--------------: | :------: | :-------------------------------------------------------------------------: |\n| [srcnn_x4k915_1x16_1000k_div2k](./srcnn_x4k915_1xb16-1000k_div2k.py) | 28.4316 / 0.8099 | 25.6486 /  0.7014 | 27.7460 / 0.7854 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608_120159.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth\n\n# 单个GPU上测试\npython tools/test.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/srcnn/metafile.yml",
    "content": "Collections:\n- Name: SRCNN\n  Paper:\n    Title: Image Super-Resolution Using Deep Convolutional Networks\n    URL: https://arxiv.org/abs/1501.00092\n  README: configs/srcnn/README.md\n  Task:\n  - image super-resolution\n  Year: 2015\nModels:\n- Config: configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py\n  In Collection: SRCNN\n  Name: srcnn_x4k915_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 28.4316\n      SSIM: 0.8099\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 25.6486\n      SSIM: 0.7014\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 27.746\n      SSIM: 0.7854\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth\n"
  },
  {
    "path": "configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'srcnn_x4k915_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SRCNNNet',\n        channels=(3, 64, 32, 3),\n        kernel_sizes=(9, 1, 5),\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(metrics=['PSNR'], crop_border=scale),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1000000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[250000, 250000, 250000, 250000],\n    restart_weights=[1, 1, 1, 1],\n    eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/srgan_resnet/README.md",
    "content": "# SRGAN (CVPR'2016)\n\n> [Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network](https://arxiv.org/abs/1609.04802)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDespite the breakthroughs in accuracy and speed of single image super-resolution using faster and deeper convolutional neural networks, one central problem remains largely unsolved: how do we recover the finer texture details when we super-resolve at large upscaling factors? The behavior of optimization-based super-resolution methods is principally driven by the choice of the objective function. Recent work has largely focused on minimizing the mean squared reconstruction error. The resulting estimates have high peak signal-to-noise ratios, but they are often lacking high-frequency details and are perceptually unsatisfying in the sense that they fail to match the fidelity expected at the higher resolution. In this paper, we present SRGAN, a generative adversarial network (GAN) for image super-resolution (SR). To our knowledge, it is the first framework capable of inferring photo-realistic natural images for 4x upscaling factors. To achieve this, we propose a perceptual loss function which consists of an adversarial loss and a content loss. The adversarial loss pushes our solution to the natural image manifold using a discriminator network that is trained to differentiate between the super-resolved images and original photo-realistic images. In addition, we use a content loss motivated by perceptual similarity instead of similarity in pixel space. Our deep residual network is able to recover photo-realistic textures from heavily downsampled images on public benchmarks. An extensive mean-opinion-score (MOS) test shows hugely significant gains in perceptual quality using SRGAN. The MOS scores obtained with SRGAN are closer to those of the original high-resolution images than to those obtained with any state-of-the-art method.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144035016-8ed4a80b-2d8b-4947-848b-3f8e917a9273.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on RGB channels, `scale` pixels in each border are cropped before evaluation.\n\nThe metrics are `PSNR / SSIM` .\n\n|     Model    |Dataset|  PSNR | SSIM | Training Resources |                             Download     |\n| :-------: | :--------: | :--------: | :-------: | :--------: | :--------: | :----------------: |\n| [msrresnet_x4c64b16_1x16_300k_div2k](./msrresnet_x4c64b16_1xb16-1000k_div2k.py) | Set5|30.2252  | 0.8491   | 1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521_110246.log.json) |\n| [msrresnet_x4c64b16_1x16_300k_div2k](./msrresnet_x4c64b16_1xb16-1000k_div2k.py) | Set14|26.7762   |  0.7369   | 1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521_110246.log.json) |\n| [msrresnet_x4c64b16_1x16_300k_div2k](./msrresnet_x4c64b16_1xb16-1000k_div2k.py) | DIV2K|28.9748   | 0.8178   |  1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521_110246.log.json) |\n| [srgan_x4c64b16_1x16_1000k_div2k](./srgan_x4c64b16_1xb16-1000k_div2k.py) |Set5|27.9499  | 0.7846   |1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200506_191442.log.json) |\n| [srgan_x4c64b16_1x16_1000k_div2k](./srgan_x4c64b16_1xb16-1000k_div2k.py) |Set14|24.7383   |0.6491   |  1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200506_191442.log.json) |\n| [srgan_x4c64b16_1x16_1000k_div2k](./srgan_x4c64b16_1xb16-1000k_div2k.py) |DIV2K|26.5697   |0.7365   |  1          | [model](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth) | [log](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200506_191442.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py\n\n# single-gpu train\npython tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth\n\n# single-gpu test\npython tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{ledig2016photo,\n  title={Photo-realistic single image super-resolution using a generative adversarial network},\n  author={Ledig, Christian and Theis, Lucas and Husz{\\'a}r, Ferenc and Caballero, Jose and Cunningham, Andrew and Acosta, Alejandro and Aitken, Andrew and Tejani, Alykhan and Totz, Johannes and Wang, Zehan},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition workshops},\n  year={2016}\n}\n```\n"
  },
  {
    "path": "configs/srgan_resnet/README_zh-CN.md",
    "content": "# SRGAN (CVPR'2016)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">SRGAN (CVPR'2016)</summary>\n\n```bibtex\n@inproceedings{ledig2016photo,\n  title={Photo-realistic single image super-resolution using a generative adversarial network},\n  author={Ledig, Christian and Theis, Lucas and Husz{\\'a}r, Ferenc and Caballero, Jose and Cunningham, Andrew and Acosta, Alejandro and Aitken, Andrew and Tejani, Alykhan and Totz, Johannes and Wang, Zehan},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition workshops},\n  year={2016}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                  算法                                   |       Set5        |      Set14       |      DIV2K       | GPU 信息 |                                   下载                                   |\n| :---------------------------------------------------------------------: | :---------------: | :--------------: | :--------------: | :------: | :----------------------------------------------------------------------: |\n| [msrresnet_x4c64b16_1x16_300k_div2k](./msrresnet_x4c64b16_1xb16-1000k_div2k.py) | 30.2252 / 0.8491  | 26.7762 / 0.7369 | 28.9748 / 0.8178 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521_110246.log.json) |\n| [srgan_x4c64b16_1x16_1000k_div2k](./srgan_x4c64b16_1xb16-1000k_div2k.py) | 27.9499 /  0.7846 | 24.7383 / 0.6491 | 26.5697 / 0.7365 |    1     | [模型](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200506_191442.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py\n\n# 单个GPU上训练\npython tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth\n\n# 单个GPU上测试\npython tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/srgan_resnet/metafile.yml",
    "content": "Collections:\n- Name: SRGAN\n  Paper:\n    Title: Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial\n      Network\n    URL: https://arxiv.org/abs/1609.04802\n  README: configs/srgan_resnet/README.md\n  Task:\n  - image super-resolution\n  Year: 2016\nModels:\n- Config: configs/srgan_resnet/msrresnet_x4c64b16_1xb16-1000k_div2k.py\n  In Collection: SRGAN\n  Name: msrresnet_x4c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 30.2252\n      SSIM: 0.8491\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 26.7762\n      SSIM: 0.7369\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 28.9748\n      SSIM: 0.8178\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth\n- Config: configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py\n  In Collection: SRGAN\n  Name: srgan_x4c64b16_1xb16-1000k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 27.9499\n      SSIM: 0.7846\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 24.7383\n      SSIM: 0.6491\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 26.5697\n      SSIM: 0.7365\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth\n"
  },
  {
    "path": "configs/srgan_resnet/msrresnet_x4c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'msrresnet_x4c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='MSRResNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=data_root + '/Set14',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_000_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='CosineRestartLR',\n    by_epoch=False,\n    periods=[250000, 250000, 250000, 250000],\n    restart_weights=[1, 1, 1, 1],\n    eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py",
    "content": "_base_ = './msrresnet_x4c64b16_1xb16-1000k_div2k.py'\n\nexperiment_name = 'srgan_x4c64b16_1xb16-1000k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\n\nscale = 4\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/msrresnet_x4c64b16_1x16_300k_div2k_20200521-61556be5.pth'  # noqa\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\nmodel = dict(\n    type='SRGAN',\n    generator=dict(\n        type='MSRResNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=16,\n        upscale_factor=scale),\n    discriminator=dict(type='ModifiedVGG', in_channels=3, mid_channels=64),\n    pixel_loss=dict(type='L1Loss', loss_weight=1e-2, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'34': 1.0},\n        vgg_type='vgg19',\n        perceptual_weight=1.0,\n        style_weight=0,\n        norm_img=False),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=5e-3,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    _delete_=True,\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    _delete_=True,\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[50000, 100000, 200000, 300000],\n    gamma=0.5)\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=400_000, val_interval=5000)\n"
  },
  {
    "path": "configs/stable_diffusion/README.md",
    "content": "# Stable Diffusion (2022)\n\n> [Stable Diffusion](https://github.com/CompVis/stable-diffusion)\n\n> **Task**: Text2Image, Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nStable Diffusion is a latent diffusion model conditioned on the text embeddings of a CLIP text encoder, which allows you to create images from text inputs. This model builds upon the CVPR'22 work [High-Resolution Image Synthesis with Latent Diffusion Models](https://ommer-lab.com/research/latent-diffusion-models/). The official code was released at [stable-diffusion](https://github.com/CompVis/stable-diffusion) and also implemented at [diffusers](https://github.com/huggingface/diffusers). We support this algorithm here to facilitate the community to learn together and compare it with other text2image methods.\n\n<!-- [IMAGE] -->\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/12782558/209609229-8221c7cc-d5c9-44d5-a1af-c254b5a95fae.png\" width=\"400\"/>\n  <br/>\n  <b>A mecha robot in a favela in expressionist style</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/12782558/210951970-a81e80c3-822e-4782-901e-db52e34b85a3.png\" width=\"400\"/>\n  <br/>\n  <b>A Chinese palace is beside a beautiful lake</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/12782558/210952108-df82e5ad-6eb6-4948-8d22-3802299d1131.png\" width=\"400\"/>\n  <br/>\n  <b>A panda is having dinner at KFC</b>\n</div></td>\n  </tr>\n</thead>\n</table>\n\n## Pretrained models\n\n|                                        Model                                         |    Task    | Dataset | Download |\n| :----------------------------------------------------------------------------------: | :--------: | :-----: | :------: |\n|          [stable_diffusion_v1.5](./stable-diffusion_ddim_denoisingunet.py)           | Text2Image |    -    |    -     |\n| [stable_diffusion_v1.5_tomesd](./stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py) | Text2Image |    -    |    -     |\n|  [stable_diffusion_v1.5_inpaint](./stable-diffusion_ddim_denoisingunet-inpaint.py)   | Inpainting |    -    |    -     |\n\nWe use stable diffusion v1.5 weights. This model has several weights including vae, unet and clip.\n\nYou may download the weights from [stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5) and change the 'from_pretrained' in config to the weights dir.\n\nDownload with git:\n\n```shell\ngit lfs install\ngit clone https://huggingface.co/runwayml/stable-diffusion-v1-5\n```\n\n## Quick Start\n\nRunning the following codes, you can get a text-generated image.\n\n```python\nfrom mmengine import MODELS, Config\nfrom torchvision import utils\n\nfrom mmengine.registry import init_default_scope\n\ninit_default_scope('mmagic')\n\nconfig = 'configs/stable_diffusion/stable-diffusion_ddim_denoisingunet.py'\nconfig = Config.fromfile(config).copy()\n# change the 'pretrained_model_path' if you have downloaded the weights manually\n# config.model.unet.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\n# config.model.vae.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\n\nStableDiffuser = MODELS.build(config.model)\nprompt = 'A mecha robot in a favela in expressionist style'\nStableDiffuser = StableDiffuser.to('cuda')\n\nimage = StableDiffuser.infer(prompt)['samples'][0]\nimage.save('robot.png')\n```\n\nTo inpaint an image, you could run the following codes.\n\n```python\nimport mmcv\nfrom mmengine import MODELS, Config\nfrom mmengine.registry import init_default_scope\nfrom PIL import Image\n\ninit_default_scope('mmagic')\n\nconfig = 'configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-inpaint.py'\nconfig = Config.fromfile(config).copy()\n# change the 'pretrained_model_path' if you have downloaded the weights manually\n# config.model.unet.from_pretrained = '/path/to/your/stable-diffusion-inpainting'\n# config.model.vae.from_pretrained = '/path/to/your/stable-diffusion-inpainting'\n\nStableDiffuser = MODELS.build(config.model)\nprompt = 'a mecha robot sitting on a bench'\n\nimg_url = 'https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png'  # noqa\nmask_url = 'https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png'  # noqa\n\nimage = Image.fromarray(mmcv.imread(img_url, channel_order='rgb'))\nmask = Image.fromarray(mmcv.imread(mask_url)).convert('L')\nStableDiffuser = StableDiffuser.to('cuda')\n\nimage = StableDiffuser.infer(\n    prompt,\n    image,\n    mask\n)['samples'][0]\nimage.save('inpaint.png')\n```\n\n## Use ToMe to accelerate your stable diffusion model\n\nWe support **[tomesd](https://github.com/dbolya/tomesd)** now! It is developed based on [ToMe](https://github.com/facebookresearch/ToMe), an efficient ViT speed-up tool based on token merging. To work on with **tomesd** in `mmagic`, you just need to add `tomesd_cfg` to `model` as shown in [stable_diffusion_v1.5_tomesd](stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py). The only requirement is `torch >= 1.12.1` in order to properly support `torch.Tensor.scatter_reduce()` functionality. Please do check it before running the demo.\n\n```python\n...\nmodel = dict(\n    type='StableDiffusion',\n    unet=unet,\n    vae=vae,\n    enable_xformers=False,\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    tomesd_cfg=dict(\n        ratio=0.5))\n```\n\nThe detailed settings for `tomesd_cfg` are as follows:\n\n- `ratio (float)`: The ratio of tokens to merge. For example, 0.4 would reduce the total number of tokens by 40%.The maximum value for this is 1-(1/(`sx` * `sy`)). **By default, the max ratio is 0.75, usually \\<= 0.5 is recommended.** Higher values result in more speed-up, but with more visual quality loss.\n- `max_downsample (int)`: Apply ToMe to layers with at most this amount of downsampling. E.g., 1 only applies to layers with no downsampling, while 8 applies to all layers. Should be chosen from 1, 2, 4, 8. **1, 2 are recommended.**\n- `sx, sy (int, int)`: The stride for computing dst sets. A higher stride means you can merge more tokens, **default setting of (2, 2) works well in most cases**. `sx` and `sy` do not need to divide image size.\n- `use_rand (bool)`: Whether or not to allow random perturbations when computing dst sets. By default: True, but if you're having weird artifacts you can try turning this off.\n- `merge_attn (bool)`: Whether or not to merge tokens for attention **(recommended)**.\n- `merge_crossattn (bool)`: Whether or not to merge tokens for cross attention **(not recommended)**.\n- `merge_mlp (bool)`: Whether or not to merge tokens for the mlp layers **(especially not recommended)**.\n\nFor more details about the **tomesd** setting, please refer to [Token Merging for Stable Diffusion](https://arxiv.org/abs/2303.17604).\n\nThen following the code below, you can evaluate the speed-up performance on stable diffusion models or stable-diffusion-based models ([DreamBooth](../dreambooth/README.md), [ControlNet](../controlnet/README.md)).\n\n```python\nimport time\nimport numpy as np\n\nfrom mmengine import MODELS, Config\nfrom mmengine.registry import init_default_scope\n\ninit_default_scope('mmagic')\n\n_device = 0\nwork_dir = '/path/to/your/work_dir'\nconfig = 'configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py'\nconfig = Config.fromfile(config).copy()\n# # change the 'pretrained_model_path' if you have downloaded the weights manually\n# config.model.unet.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\n# config.model.vae.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\n\n# w/o tomesd\nconfig.model.tomesd_cfg = None\nStableDiffuser = MODELS.build(config.model).to(f'cuda:{_device}')\nprompt = 'A mecha robot in a favela in expressionist style'\n\n# inference time evaluation params\nsize = 512\nratios = [0.5, 0.75]\nsamples_perprompt = 5\n\nt = time.time()\nfor i in range(100//samples_perprompt):\n    image = StableDiffuser.infer(prompt, height=size, width=size, num_images_per_prompt=samples_perprompt)['samples'][0]\n    if i == 0:\n        image.save(f\"{work_dir}/wo_tomesd.png\")\nprint(f\"Generating 100 images with {samples_perprompt} images per prompt, without ToMe speed-up, time used : {time.time() - t}s\")\n\nfor ratio in ratios:\n    # w/ tomesd\n    config.model.tomesd_cfg = dict(ratio=ratio)\n    sd_model = MODELS.build(config.model).to(f'cuda:{_device}')\n\n    t = time.time()\n    for i in range(100//samples_perprompt):\n        image = sd_model.infer(prompt, height=size, width=size, num_images_per_prompt=samples_perprompt)['samples'][0]\n        if i == 0:\n            image.save(f\"{work_dir}/w_tomesd_ratio_{ratio}.png\")\n\n    print(f\"Generating 100 images with {samples_perprompt} images per prompt, merging ratio {ratio}, time used : {time.time() - t}s\")\n```\n\nHere are some inference performance comparisons running on **single RTX 3090** with `torch 2.0.0+cu118` as backends. The results are reasonable, when enabling `xformers`, the speed-up ratio is a little bit lower. But `tomesd` still effectively reduces the inference time. It is especially recommended that enable `tomesd` when the `image_size` and `num_images_per_prompt` are large, since the number of similar tokens are larger and `tomesd` can achieve better performance.\n\n|                              Model                               |    Task    | Dataset | Download | xformer |            Ratio            | Size / Num images per prompt |                     Time (s)                      |\n| :--------------------------------------------------------------: | :--------: | :-----: | :------: | :-----: | :-------------------------: | :--------------------------: | :-----------------------------------------------: |\n| [stable_diffusion_v1.5-tomesd](./stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py) | Text2Image |    -    |    -     |   w/o   | w/o tome <br> 0.5 <br> 0.75 |         512  /    5          | 542.20 <br> 427.65 (↓21.1%) <br>  393.05 (↓27.5%) |\n| [stable_diffusion_v1.5-tomesd](./stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py) | Text2Image |    -    |    -     |   w/    | w/o tome <br> 0.5 <br> 0.75 |         512  /    5          | 541.64 <br> 428.53 (↓20.9%) <br>  396.38 (↓26.8%) |\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/49406546/234613951-43b94470-89ff-4edc-a2e2-bea9e7a8a566.png\" width=\"400\"/>\n  <br/>\n  <b> w/o ToMe </b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/49406546/234613969-213e3436-b73c-4b8e-82ce-b91492b44db3.png\" width=\"400\"/>\n  <br/>\n  <b> w/ ToMe Speed-up (token merge ratio=0.5) </b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/49406546/234613983-82fee9a3-05f7-4b1d-85dc-a507e85ecb31.png\" width=\"400\"/>\n  <br/>\n  <b> w/ ToMe Speed-up (token merge ratio=0.75) </b>\n</div></td>\n  </tr>\n</thead>\n</table>\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://huggingface.co/runwayml/stable-diffusion-v1-5).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@misc{rombach2021highresolution,\n      title={High-Resolution Image Synthesis with Latent Diffusion Models},\n      author={Robin Rombach and Andreas Blattmann and Dominik Lorenz and Patrick Esser and Björn Ommer},\n      year={2021},\n      eprint={2112.10752},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n\n@article{bolya2023tomesd,\n  title={Token Merging for Fast Stable Diffusion},\n  author={Bolya, Daniel and Hoffman, Judy},\n  journal={arXiv},\n  year={2023}\n}\n\n@inproceedings{bolya2023tome,\n  title={Token Merging: Your {ViT} but Faster},\n  author={Bolya, Daniel and Fu, Cheng-Yang and Dai, Xiaoliang and Zhang, Peizhao and Feichtenhofer, Christoph and Hoffman, Judy},\n  booktitle={International Conference on Learning Representations},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/stable_diffusion/metafile.yml",
    "content": "Collections:\n- Name: Stable Diffusion\n  Paper:\n    Title: Stable Diffusion\n    URL: https://github.com/CompVis/stable-diffusion\n  README: configs/stable_diffusion/README.md\n  Task:\n  - text2image\n  - inpainting\n  Year: 2022\nModels:\n- Config: configs/stable_diffusion/stable-diffusion_ddim_denoisingunet.py\n  In Collection: Stable Diffusion\n  Name: stable-diffusion_ddim_denoisingunet\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n- Config: configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py\n  In Collection: Stable Diffusion\n  Name: stable-diffusion_ddim_denoisingunet-tomesd_5e-1\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n  - Dataset: '-'\n    Metrics:\n      Size / Num images per prompt:\n        PSNR: 512.0\n        SSIM: 5.0\n    Task: Text2Image\n  - Dataset: '-'\n    Metrics:\n      Size / Num images per prompt:\n        PSNR: 512.0\n        SSIM: 5.0\n    Task: Text2Image\n- Config: configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-inpaint.py\n  In Collection: Stable Diffusion\n  Name: stable-diffusion_ddim_denoisingunet-inpaint\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Inpainting\n"
  },
  {
    "path": "configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-inpaint.py",
    "content": "# Use DiffuserWrapper!\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-inpainting'\nunet = dict(\n    type='UNet2DConditionModel',\n    subfolder='unet',\n    from_pretrained=stable_diffusion_v15_url)\nvae = dict(\n    type='AutoencoderKL',\n    from_pretrained=stable_diffusion_v15_url,\n    subfolder='vae')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\nmodel = dict(\n    type='StableDiffusionInpaint',\n    unet=unet,\n    vae=vae,\n    enable_xformers=False,\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler)\n"
  },
  {
    "path": "configs/stable_diffusion/stable-diffusion_ddim_denoisingunet-tomesd_5e-1.py",
    "content": "# MMagic's implementation of Stable Diffusion\n# unet = dict(\n#     type='DenoisingUnet',\n#     image_size=512,\n#     base_channels=320,\n#     channels_cfg=[1, 2, 4, 4],\n#     unet_type='stable',\n#     act_cfg=dict(type='silu'),\n#     cross_attention_dim=768,\n#     num_heads=8,\n#     in_channels=4,\n#     layers_per_block=2,\n#     down_block_types=[\n#         'CrossAttnDownBlock2D',\n#         'CrossAttnDownBlock2D',\n#         'CrossAttnDownBlock2D',\n#         'DownBlock2D',\n#     ],\n#     up_block_types=[\n#         'UpBlock2D',\n#         'CrossAttnUpBlock2D',\n#         'CrossAttnUpBlock2D',\n#         'CrossAttnUpBlock2D',\n#     ],\n#     output_cfg=dict(var='fixed'))\n\n# vae = dict(\n#     type='EditAutoencoderKL',\n#     act_fn='silu',\n#     block_out_channels=[128, 256, 512, 512],\n#     down_block_types=[\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#     ],\n#     in_channels=3,\n#     latent_channels=4,\n#     layers_per_block=2,\n#     norm_num_groups=32,\n#     out_channels=3,\n#     sample_size=512,\n#     up_block_types=[\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#     ])\n\n# Use DiffuserWrapper!\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nunet = dict(\n    type='UNet2DConditionModel',\n    subfolder='unet',\n    from_pretrained=stable_diffusion_v15_url)\nvae = dict(\n    type='AutoencoderKL',\n    from_pretrained=stable_diffusion_v15_url,\n    subfolder='vae')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\nmodel = dict(\n    type='StableDiffusion',\n    unet=unet,\n    vae=vae,\n    enable_xformers=False,\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    tomesd_cfg=dict(ratio=0.5))\n"
  },
  {
    "path": "configs/stable_diffusion/stable-diffusion_ddim_denoisingunet.py",
    "content": "# MMagic's implementation of Stable Diffusion\n# unet = dict(\n#     type='DenoisingUnet',\n#     image_size=512,\n#     base_channels=320,\n#     channels_cfg=[1, 2, 4, 4],\n#     unet_type='stable',\n#     act_cfg=dict(type='silu'),\n#     cross_attention_dim=768,\n#     num_heads=8,\n#     in_channels=4,\n#     layers_per_block=2,\n#     down_block_types=[\n#         'CrossAttnDownBlock2D',\n#         'CrossAttnDownBlock2D',\n#         'CrossAttnDownBlock2D',\n#         'DownBlock2D',\n#     ],\n#     up_block_types=[\n#         'UpBlock2D',\n#         'CrossAttnUpBlock2D',\n#         'CrossAttnUpBlock2D',\n#         'CrossAttnUpBlock2D',\n#     ],\n#     output_cfg=dict(var='fixed'))\n\n# vae = dict(\n#     type='EditAutoencoderKL',\n#     act_fn='silu',\n#     block_out_channels=[128, 256, 512, 512],\n#     down_block_types=[\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#         'DownEncoderBlock2D',\n#     ],\n#     in_channels=3,\n#     latent_channels=4,\n#     layers_per_block=2,\n#     norm_num_groups=32,\n#     out_channels=3,\n#     sample_size=512,\n#     up_block_types=[\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#         'UpDecoderBlock2D',\n#     ])\n\n# Use DiffuserWrapper!\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nunet = dict(\n    type='UNet2DConditionModel',\n    subfolder='unet',\n    from_pretrained=stable_diffusion_v15_url)\nvae = dict(\n    type='AutoencoderKL',\n    from_pretrained=stable_diffusion_v15_url,\n    subfolder='vae')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\nmodel = dict(\n    type='StableDiffusion',\n    unet=unet,\n    vae=vae,\n    enable_xformers=False,\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler)\n"
  },
  {
    "path": "configs/stable_diffusion_xl/README.md",
    "content": "# Stable Diffusion XL (2023)\n\n> [Stable Diffusion XL](https://arxiv.org/abs/2307.01952)\n\n> **Task**: Text2Image, Inpainting\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe present SDXL, a latent diffusion model for text-to-image synthesis. Compared to previous versions of Stable Diffusion, SDXL leverages a three times larger UNet backbone: The increase of model parameters is mainly due to more attention blocks and a larger cross-attention context as SDXL uses a second text encoder. We design multiple novel conditioning schemes and train SDXL on multiple aspect ratios. We also introduce a refinement model which is used to improve the visual fidelity of samples generated by SDXL using a post-hoc image-to-image technique. We demonstrate that SDXL shows drastically improved performance compared the previous versions of Stable Diffusion and achieves results competitive with those of black-box state-of-the-art image generators.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/okotaku/diffengine/assets/24734142/27d4ebad-5705-4500-826f-41f425a08c0d\"/>\n</div>\n\n## Pretrained models\n\n|                               Model                                |    Task    | Dataset | Download |\n| :----------------------------------------------------------------: | :--------: | :-----: | :------: |\n| [stable_diffusion_xl](./stable-diffusion_xl_ddim_denoisingunet.py) | Text2Image |    -    |    -     |\n\nWe use stable diffusion xl weights. This model has several weights including vae, unet and clip.\n\nYou may download the weights from [stable-diffusion-xl](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) and change the 'from_pretrained' in config to the weights dir.\n\n## Quick Start\n\nRunning the following codes, you can get a text-generated image.\n\n```python\nfrom mmengine import MODELS, Config\n\nfrom mmengine.registry import init_default_scope\n\ninit_default_scope('mmagic')\n\nconfig = 'configs/stable_diffusion_xl/stable-diffusion_xl_ddim_denoisingunet.py'\nconfig = Config.fromfile(config).copy()\n\nStableDiffuser = MODELS.build(config.model)\nprompt = 'A mecha robot in a favela in expressionist style'\nStableDiffuser = StableDiffuser.to('cuda')\n\nimage = StableDiffuser.infer(prompt)['samples'][0]\nimage.save('robot.png')\n```\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-xl](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0).\n\nThanks for the efforts of the community!\n"
  },
  {
    "path": "configs/stable_diffusion_xl/metafile.yml",
    "content": "Collections:\n- Name: Stable Diffusion XL\n  Paper:\n    Title: Stable Diffusion XL\n    URL: https://arxiv.org/abs/2307.01952\n  README: configs/stable_diffusion_xl/README.md\n  Task:\n  - text2image\n  - inpainting\n  Year: 2023\nModels:\n- Config: configs/stable_diffusion_xl/stable-diffusion_xl_ddim_denoisingunet.py\n  In Collection: Stable Diffusion XL\n  Name: stable-diffusion_xl_ddim_denoisingunet\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n"
  },
  {
    "path": "configs/stable_diffusion_xl/stable-diffusion_xl_ddim_denoisingunet.py",
    "content": "# Use DiffuserWrapper!\nstable_diffusion_xl_url = 'stabilityai/stable-diffusion-xl-base-1.0'\nunet = dict(\n    type='UNet2DConditionModel',\n    subfolder='unet',\n    from_pretrained=stable_diffusion_xl_url)\nvae = dict(\n    type='AutoencoderKL',\n    from_pretrained=stable_diffusion_xl_url,\n    subfolder='vae')\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\nmodel = dict(\n    type='StableDiffusionXL',\n    unet=unet,\n    vae=vae,\n    enable_xformers=False,\n    text_encoder_one=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_xl_url,\n        subfolder='text_encoder'),\n    tokenizer_one=stable_diffusion_xl_url,\n    text_encoder_two=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_xl_url,\n        subfolder='text_encoder_2'),\n    tokenizer_two=stable_diffusion_xl_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler)\n"
  },
  {
    "path": "configs/styleganv1/README.md",
    "content": "# StyleGANv1 (CVPR'2019)\n\n> [A Style-Based Generator Architecture for Generative Adversarial Networks](https://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe propose an alternative generator architecture for generative adversarial networks, borrowing from style transfer literature. The new architecture leads to an automatically learned, unsupervised separation of high-level attributes (e.g., pose and identity when trained on human faces) and stochastic variation in the generated images (e.g., freckles, hair), and it enables intuitive, scale-specific control of the synthesis. The new generator improves the state-of-the-art in terms of traditional distribution quality metrics, leads to demonstrably better interpolation properties, and also better disentangles the latent factors of variation. To quantify interpolation quality and disentanglement, we propose two new, automated methods that are applicable to any generator architecture. Finally, we introduce a new, highly varied and high-quality dataset of human faces.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143055313-f4988870-2963-4a2f-916e-0de0e04eb474.JPG\"/>\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> Results (compressed) from StyleGANv1 trained by mmagic</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/113845642-4f9ee980-97c8-11eb-85c7-49d6d21dd46b.png\" width=\"800\"/>\n</div>\n\n|                                Model                                | Dataset | FID50k |  P&R50k_full  |                                                  Download                                                   |\n| :-----------------------------------------------------------------: | :-----: | :----: | :-----------: | :---------------------------------------------------------------------------------------------------------: |\n|  [styleganv1_ffhq_256](./styleganv1_ffhq-256x256_8xb4-25Mimgs.py)   |  FFHQ   | 6.090  | 70.228/27.050 | [model](https://download.openmmlab.com/mmediting/styleganv1/styleganv1_ffhq_256_g8_25Mimg_20210407_161748-0094da86.pth) |\n| [styleganv1_ffhq_1024](./styleganv1_ffhq-1024x1024_8xb4-25Mimgs.py) |  FFHQ   | 4.056  | 70.302/36.869 | [model](https://download.openmmlab.com/mmediting/styleganv1/styleganv1_ffhq_1024_g8_25Mimg_20210407_161627-850a7234.pth) |\n\n## Citation\n\n```latex\n@inproceedings{karras2019style,\n  title={A style-based generator architecture for generative adversarial networks},\n  author={Karras, Tero and Laine, Samuli and Aila, Timo},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={4401--4410},\n  year={2019},\n  url={https://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/styleganv1/metafile.yml",
    "content": "Collections:\n- Name: StyleGANv1\n  Paper:\n    Title: A Style-Based Generator Architecture for Generative Adversarial Networks\n    URL: https://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html\n  README: configs/styleganv1/README.md\n  Task:\n  - unconditional gans\n  Year: 2019\nModels:\n- Config: configs/styleganv1/styleganv1_ffhq-256x256_8xb4-25Mimgs.py\n  In Collection: StyleGANv1\n  Name: styleganv1_ffhq-256x256_8xb4-25Mimgs\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 6.09\n      P&R50k_full:\n        PSNR: 70.228\n        SSIM: 27.05\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/styleganv1/styleganv1_ffhq_256_g8_25Mimg_20210407_161748-0094da86.pth\n- Config: configs/styleganv1/styleganv1_ffhq-1024x1024_8xb4-25Mimgs.py\n  In Collection: StyleGANv1\n  Name: styleganv1_ffhq-1024x1024_8xb4-25Mimgs\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 4.056\n      P&R50k_full:\n        PSNR: 70.302\n        SSIM: 36.869\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/styleganv1/styleganv1_ffhq_1024_g8_25Mimg_20210407_161627-850a7234.pth\n"
  },
  {
    "path": "configs/styleganv1/styleganv1_ffhq-1024x1024_8xb4-25Mimgs.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv1.py',\n    '../_base_/datasets/grow_scale_imgs_ffhq_styleganv1.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\nmodel_wrapper_cfg = dict(find_unused_parameters=True)\nema_half_life = 10.  # G_smoothing_kimg\nema_config = dict(\n    interval=1, momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\nmodel = dict(\n    generator=dict(out_size=1024),\n    discriminator=dict(in_size=1024),\n    nkimgs_per_scale={\n        '8': 1200,\n        '16': 1200,\n        '32': 1200,\n        '64': 1200,\n        '128': 1200,\n        '256': 1200,\n        '512': 1200,\n        '1024': 166000\n    },\n    ema_config=ema_config)\n\n# TRAIN\ntrain_cfg = dict(max_iters=670000)\n\noptim_wrapper = dict(\n    constructor='PGGANOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    lr_schedule=dict(\n        generator={\n            '128': 0.0015,\n            '256': 0.002,\n            '512': 0.003,\n            '1024': 0.003\n        },\n        discriminator={\n            '128': 0.0015,\n            '256': 0.002,\n            '512': 0.003,\n            '1024': 0.003\n        }))\n\n# VIS_HOOK + DATAFETCH\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img')),\n    dict(type='PGGANFetchDataHook')\n]\n\n# METRICS\ninception_pkl = './work_dirs/ffhq1024-full.pkl'\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, k=3, prefix='PR-50K'),\n]\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv1/styleganv1_ffhq-256x256_8xb4-25Mimgs.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv1.py',\n    '../_base_/datasets/grow_scale_imgs_ffhq_styleganv1.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\nmodel_wrapper_cfg = dict(find_unused_parameters=True)\nema_half_life = 10.  # G_smoothing_kimg\nema_config = dict(\n    interval=1, momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    nkimgs_per_scale={\n        '8': 1200,\n        '16': 1200,\n        '32': 1200,\n        '64': 1200,\n        '128': 1200,\n        '256': 190000\n    },\n    ema_config=ema_config)\n\n# TRAIN\ntrain_cfg = dict(max_iters=670000)\n\noptim_wrapper = dict(\n    constructor='PGGANOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n    lr_schedule=dict(\n        generator={\n            '128': 0.0015,\n            '256': 0.002\n        },\n        discriminator={\n            '128': 0.0015,\n            '256': 0.002\n        }))\n\n# VIS_HOOK + DATAFETCH\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img')),\n    dict(type='PGGANFetchDataHook')\n]\n\n# METRICS\ninception_pkl = './work_dirs/ffhq256-full.pkl'\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=inception_pkl,\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, k=3, prefix='PR-50K'),\n]\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\n# use low resolution image to evaluate\n# NOTE: use cherry-picked file list?\n# val_dataloader = test_dataloader = dict(\n#     dataset=dict(\n#         data_root='./data/ffhq/ffhq_imgs/ffhq_256',\n#         file_list='./data/ffhq256.txt'))\nval_dataloader = test_dataloader = dict(\n    dataset=dict(data_root='./data/ffhq/ffhq_imgs/ffhq_256'))\nval_evaluator = test_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/README.md",
    "content": "# StyleGANv2 (CVPR'2020)\n\n> [Analyzing and Improving the Image Quality of Stylegan](https://openaccess.thecvf.com/content_CVPR_2020/html/Karras_Analyzing_and_Improving_the_Image_Quality_of_StyleGAN_CVPR_2020_paper.html)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nThe style-based GAN architecture (StyleGAN) yields state-of-the-art results in data-driven unconditional generative image modeling. We expose and analyze several of its characteristic artifacts, and propose changes in both model architecture and training methods to address them. In particular, we redesign the generator normalization, revisit progressive growing, and regularize the generator to encourage good conditioning in the mapping from latent codes to images. In addition to improving image quality, this path length regularizer yields the additional benefit that the generator becomes significantly easier to invert. This makes it possible to reliably attribute a generated image to a particular network. We furthermore visualize how well the generator utilizes its output resolution, and identify a capacity problem, motivating us to train larger models for additional quality improvements. Overall, our improved model redefines the state of the art in unconditional image modeling, both in terms of existing distribution quality metrics as well as perceived image quality.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143055738-58b15493-ab87-436d-94fd-c4c19e4a0225.JPG\"/>\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> Results (compressed) from StyleGAN2 config-f trained by mmagic</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/113825919-25433100-97b4-11eb-84f7-5c66b3cfbc68.png\" width=\"800\"/>\n</div>\n\n|                                  Model                                   |   Dataset   |     Comment     | FID50k | Precision50k | Recall50k |                                  Download                                   |\n| :----------------------------------------------------------------------: | :---------: | :-------------: | :----: | :----------: | :-------: | :-------------------------------------------------------------------------: |\n| [stylegan2_c2_8xb4_ffhq-1024x1024](./stylegan2_c2_8xb4_ffhq-1024x1024.py) |    FFHQ     | official weight | 2.8134 |    62.856    |  49.400   | [model](https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth) |\n| [stylegan2_c2_8xb4_lsun-car-384x512](./stylegan2_c2_8xb4_lsun-car-384x512.py) |  LSUN_CAR   | official weight | 5.4316 |    65.986    |  48.190   | [model](https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-car-config-f-official_20210327_172340-8cfe053c.pth) |\n| [stylegan2_c2_8xb4-800kiters_lsun-horse-256x256](./stylegan2_c2_8xb4-800kiters_lsun-horse-256x256.py) | LSUN_HORSE  | official weight |   -    |      -       |     -     | [model](https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-horse-config-f-official_20210327_173203-ef3e69ca.pth) |\n| [stylegan2_c2_8xb4-800kiters_lsun-church-256x256](./stylegan2_c2_8xb4-800kiters_lsun-church-256x256.py) | LSUN_CHURCH | official weight |   -    |      -       |     -     | [model](https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-church-config-f-official_20210327_172657-1d42b7d1.pth) |\n| [stylegan2_c2_8xb4-800kiters_lsun-cat-256x256](./stylegan2_c2_8xb4-800kiters_lsun-cat-256x256.py) |  LSUN_CAT   | official weight |   -    |      -       |     -     | [model](https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-cat-config-f-official_20210327_172444-15bc485b.pth) |\n| [stylegan2_c2_8xb4-800kiters_ffhq-256x256](./stylegan2_c2_8xb4-800kiters_ffhq-256x256.py) |    FFHQ     |  our training   | 3.992  |    69.012    |  40.417   | [model](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth) |\n| [stylegan2_c2_8xb4_ffhq-1024x1024](./stylegan2_c2_8xb4_ffhq-1024x1024.py) |    FFHQ     |  our training   | 2.8185 |    68.236    |  49.583   | [model](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth) |\n| [stylegan2_c2_8xb4_lsun-car-384x512](./stylegan2_c2_8xb4_lsun-car-384x512.py) |  LSUN_CAR   |  our training   | 2.4116 |    66.760    |  50.576   | [model](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_lsun-car_384x512_b4x8_1800k_20210424_160929-fc9072ca.pth) |\n\n## FP16 Support and Experiments\n\nCurrently, we have supported FP16 training for StyleGAN2, and here are the results for the mixed-precision training. (Experiments for FFHQ1024 will come soon.)\n\n<div align=\"center\">\n  <b> Evaluation FID for FP32 and FP16 training </b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/117523645-18e90880-afec-11eb-9327-da14362b8bfd.png\" width=\"600\"/>\n</div>\n\nAs shown in the figure, we provide **3** ways to do mixed-precision training for `StyleGAN2`:\n\n- [stylegan2_c2_fp16_PL-no-scaler](./stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py): In this setting, we try our best to follow the official FP16 implementation in [StyleGAN2-ADA](https://github.com/NVlabs/stylegan2-ada). Similar to the official version, we only adopt FP16 training for the higher-resolution feature maps (the last 4 stages in G and the first 4 stages). Note that we do not adopt the `clamp` way to avoid gradient overflow used in the official implementation. We use the `autocast` function from `torch.cuda.amp` package.\n- [stylegan2_c2_fp16-globalG-partialD_PL-R1-no-scaler](./stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256.py): In this config, we try to adopt mixed-precision training for the whole generator, but in partial discriminator (the first 4 higher-resolution stages). Note that we do not apply the loss scaler in the path length loss and gradient penalty loss. Because we always meet divergence after adopting the loss scaler to scale the gradient in these two losses.\n- [stylegan2_c2_apex_fp16_PL-R1-no-scaler](./stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256.py): In this setting, we adopt the [APEX](https://github.com/NVIDIA/apex) toolkit to implement mixed-precision training with multiple loss/gradient scalers. In APEX, you can assign different loss scalers for the generator and the discriminator respectively. Note that we still ignore the gradient scaler in the path length loss and gradient penalty loss.\n\n|                                  Model                                   |                 Comment                 | Dataset | FID50k |                                   Download                                   |\n| :----------------------------------------------------------------------: | :-------------------------------------: | :-----: | :----: | :--------------------------------------------------------------------------: |\n| [stylegan2_c2_8xb4-800kiters_ffhq-256x256](./stylegan2_c2_8xb4-800kiters_ffhq-256x256.py) |                baseline                 | FFHQ256 | 3.992  | [ckpt](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth) |\n| [stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256](./stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py) |         partial layers in fp16          | FFHQ256 | 4.331  | [ckpt](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_fp16_partial-GD_PL-no-scaler_ffhq_256_b4x8_800k_20210508_114854-dacbe4c9.pth) |\n| [stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256](./stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256.py) |           the whole G in fp16           | FFHQ256 | 4.362  | [ckpt](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_fp16-globalG-partialD_PL-R1-no-scaler_ffhq_256_b4x8_800k_20210508_114930-ef8270d4.pth) |\n| [stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256](./stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256.py) | the whole G&D in fp16 + two loss scaler | FFHQ256 | 4.614  | [ckpt](https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_apex_fp16_PL-R1-no-scaler_ffhq_256_b4x8_800k_20210508_114701-c2bb8afd.pth) |\n\nAs shown in this table, `P&R50k_full` is the metric used in StyleGANv1 and StyleGANv2. `full` indicates that we use the whole dataset for extracting the real distribution, e.g., 70000 images in FFHQ dataset. However, adopting the VGG16 provided from [Tero](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/vgg16.pt) requires that your PyTorch version must fulfill `>=1.6.0`. Be careful about using the PyTorch's VGG16 to extract features, which will cause higher precision and recall.\n\n## Citation\n\n```latex\n@inproceedings{karras2020analyzing,\n  title={Analyzing and improving the image quality of stylegan},\n  author={Karras, Tero and Laine, Samuli and Aittala, Miika and Hellsten, Janne and Lehtinen, Jaakko and Aila, Timo},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={8110--8119},\n  year={2020},\n  url={https://openaccess.thecvf.com/content_CVPR_2020/html/Karras_Analyzing_and_Improving_the_Image_Quality_of_StyleGAN_CVPR_2020_paper.html},\n}\n```\n"
  },
  {
    "path": "configs/styleganv2/metafile.yml",
    "content": "Collections:\n- Name: StyleGANv2\n  Paper:\n    Title: Analyzing and Improving the Image Quality of Stylegan\n    URL: https://openaccess.thecvf.com/content_CVPR_2020/html/Karras_Analyzing_and_Improving_the_Image_Quality_of_StyleGAN_CVPR_2020_paper.html\n  README: configs/styleganv2/README.md\n  Task:\n  - unconditional gans\n  Year: 2020\nModels:\n- Config: configs/styleganv2/stylegan2_c2_8xb4_ffhq-1024x1024.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4_ffhq-1024x1024\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 2.8134\n      Precision50k: 62.856\n      Recall50k: 49.4\n    Task: Unconditional GANs\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 2.8185\n      Precision50k: 68.236\n      Recall50k: 49.583\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_1024_b4x8_20210407_150045-618c9024.pth\n- Config: configs/styleganv2/stylegan2_c2_8xb4_lsun-car-384x512.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4_lsun-car-384x512\n  Results:\n  - Dataset: LSUN_CAR\n    Metrics:\n      FID50k: 5.4316\n      Precision50k: 65.986\n      Recall50k: 48.19\n    Task: Unconditional GANs\n  - Dataset: LSUN_CAR\n    Metrics:\n      FID50k: 2.4116\n      Precision50k: 66.76\n      Recall50k: 50.576\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_lsun-car_384x512_b4x8_1800k_20210424_160929-fc9072ca.pth\n- Config: configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-horse-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4-800kiters_lsun-horse-256x256\n  Results:\n  - Dataset: LSUN_HORSE\n    Metrics: {}\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-horse-config-f-official_20210327_173203-ef3e69ca.pth\n- Config: configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-church-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4-800kiters_lsun-church-256x256\n  Results:\n  - Dataset: LSUN_CHURCH\n    Metrics: {}\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-church-config-f-official_20210327_172657-1d42b7d1.pth\n- Config: configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-cat-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4-800kiters_lsun-cat-256x256\n  Results:\n  - Dataset: LSUN_CAT\n    Metrics: {}\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-cat-config-f-official_20210327_172444-15bc485b.pth\n- Config: configs/styleganv2/stylegan2_c2_8xb4-800kiters_ffhq-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2_8xb4-800kiters_ffhq-256x256\n  Results:\n  - Dataset: FFHQ\n    Metrics:\n      FID50k: 3.992\n      Precision50k: 69.012\n      Recall50k: 40.417\n    Task: Unconditional GANs\n  - Dataset: FFHQ256\n    Metrics:\n      FID50k: 3.992\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_ffhq_256_b4x8_20210407_160709-7890ae1f.pth\n- Config: configs/styleganv2/stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256\n  Results:\n  - Dataset: FFHQ256\n    Metrics:\n      FID50k: 4.331\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_fp16_partial-GD_PL-no-scaler_ffhq_256_b4x8_800k_20210508_114854-dacbe4c9.pth\n- Config: configs/styleganv2/stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256\n  Results:\n  - Dataset: FFHQ256\n    Metrics:\n      FID50k: 4.362\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_fp16-globalG-partialD_PL-R1-no-scaler_ffhq_256_b4x8_800k_20210508_114930-ef8270d4.pth\n- Config: configs/styleganv2/stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256.py\n  In Collection: StyleGANv2\n  Name: stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256\n  Results:\n  - Dataset: FFHQ256\n    Metrics:\n      FID50k: 4.614\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan2/stylegan2_c2_apex_fp16_PL-R1-no-scaler_ffhq_256_b4x8_800k_20210508_114701-c2bb8afd.pth\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2-PL-R1_8xb4-apex-fp16-no-scaler-800kiters_ffhq-256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = ['./stylegan2_c2_8xb4-800kiters_ffhq-256x256.py']\n\nmodel = dict(loss_config=dict(r1_use_apex_amp=False, g_reg_use_apex_amp=False))\n\ntrain_cfg = dict(max_iters=800002)\n\n# remain to be refactored\napex_amp = dict(mode='gan', init_args=dict(opt_level='O1', num_losses=2))\nresume_from = None\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2-PL-R1_8xb4-fp16-globalG-partialD-no-scaler-800kiters_ffhq-256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = ['./stylegan2_c2_8xb4-800kiters_ffhq-256x256.py']\n\nmodel = dict(\n    generator=dict(out_size=256, fp16_enabled=True),\n    discriminator=dict(in_size=256, fp16_enabled=False, num_fp16_scales=4),\n)\ntrain_cfg = dict(max_iters=800000)\noptim_wrapper = dict(\n    generator=dict(type='AmpOptimWrapper', loss_scale=512),\n    discriminator=dict(type='AmpOptimWrapper', loss_scale=512))\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = ['./stylegan2_c2_8xb4-800kiters_ffhq-256x256.py']\n\nmodel = dict(\n    generator=dict(out_size=256, num_fp16_scales=4),\n    discriminator=dict(in_size=256, num_fp16_scales=4),\n    loss_config=dict(scale_r1_loss=True))\n\noptim_wrapper = dict(\n    generator=dict(type='AmpOptimWrapper', loss_scale=512),\n    discriminator=dict(type='AmpOptimWrapper', loss_scale=512))\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4-800kiters_ffhq-256x256.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/ffhq/ffhq_imgs/ffhq_256'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-cat-256x256.py",
    "content": "\"\"\"Note that this config is just for testing.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/lsun_stylegan.py',\n    '../_base_/models/base_styleganv2.py', '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-cat'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-church-256x256.py",
    "content": "\"\"\"Note that this config is just for testing.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/lsun_stylegan.py',\n    '../_base_/models/base_styleganv2.py', '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-church'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4-800kiters_lsun-horse-256x256.py",
    "content": "\"\"\"Note that this config is just for testing.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/lsun_stylegan.py',\n    '../_base_/models/base_styleganv2.py', '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-horse'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4_ffhq-1024x1024.py",
    "content": "\"\"\"Config for the `config-f` setting in StyleGAN2.\"\"\"\n\n_base_ = [\n    '../_base_/datasets/ffhq_flip.py', '../_base_/models/base_styleganv2.py',\n    '../_base_/gen_default_runtime.py'\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=1024),\n    discriminator=dict(in_size=1024),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\nextra_parameters = dict(num_batches=1, sample_model='orig')\n\ntrain_cfg = dict(max_iters=800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv2/stylegan2_c2_8xb4_lsun-car-384x512.py",
    "content": "_base_ = [\n    '../_base_/gen_default_runtime.py',\n    '../_base_/models/base_styleganv2.py',\n]\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel = dict(\n    generator=dict(out_size=512),\n    discriminator=dict(in_size=512),\n    ema_config=dict(\n        type='ExponentialMovingAverage',\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg = dict(max_iters=1800002)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * g_reg_ratio, betas=(0,\n                                                        0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n# DATA\nbatch_size = 4\ndata_root = './data/lsun/images/car'\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='NumpyPad',\n        keys='img',\n        padding=((64, 64), (0, 0), (0, 0)),\n    ),\n    dict(type='Flip', keys=['gt'], direction='horizontal'),\n    dict(type='PackInputs')\n]\n\nval_pipeline = train_pipeline\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type, data_root=data_root, pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/README.md",
    "content": "# StyleGANv3 (NeurIPS'2021)\n\n> [Alias-Free Generative Adversarial Networks](https://nvlabs-fi-cdn.nvidia.com/stylegan3/stylegan3-paper.pdf)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\nWe observe that despite their hierarchical convolutional nature, the synthesis\nprocess of typical generative adversarial networks depends on absolute pixel coordinates in an unhealthy manner. This manifests itself as, e.g., detail appearing to\nbe glued to image coordinates instead of the surfaces of depicted objects. We trace\nthe root cause to careless signal processing that causes aliasing in the generator\nnetwork. Interpreting all signals in the network as continuous, we derive generally\napplicable, small architectural changes that guarantee that unwanted information\ncannot leak into the hierarchical synthesis process. The resulting networks match\nthe FID of StyleGAN2 but differ dramatically in their internal representations, and\nthey are fully equivariant to translation and rotation even at subpixel scales. Our\nresults pave the way for generative models better suited for video and animation.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/22982797/150353023-8f7eeaea-8783-4ed4-98d5-67a226e00cff.png\"/>\n</div>\n\n## Results and Models\n\n<div align=\"center\">\n  <b> Results (compressed) from StyleGAN3 config-T converted by mmagic</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/150450502-c182834f-796f-4397-bd38-df1efe4a8a47.png\" width=\"800\"/>\n</div>\n\nWe perform experiments on StyleGANv3 paper settings and also experimental settings.\nFor user convenience, we also offer the converted version of official weights.\n\n### Paper Settings\n\n|                                     Model                                     |      Dataset      |  Iter  |      FID50k       |                                      Download                                       |\n| :---------------------------------------------------------------------------: | :---------------: | :----: | :---------------: | :---------------------------------------------------------------------------------: |\n|   [stylegan3-t](./stylegan3-t_gamma32.8_8xb4-fp16-noaug_ffhq-1024x1024.py)    |  ffhq 1024x1024   | 490000 | 3.37<sup>\\*</sup> | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma32.8_ffhq_1024_b4x8_best_fid_iter_490000_20220401_120733-4ff83434.pth) \\| [log](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma32.8_ffhq_1024_b4x8_20220322_090417.log.json) |\n| [stylegan3-t-ada](./stylegan3-t_ada-gamma6.6_8xb4-fp16_metfaces-1024x1024.py) | metface 1024x1024 | 130000 |       15.09       | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ada_fp16_gamma6.6_metfaces_1024_b4x8_best_fid_iter_130000_20220401_115101-f2ef498e.pth) \\| [log](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ada_fp16_gamma6.6_metfaces_1024_b4x8_20220328_142211.log.json) |\n\n### Experimental Settings\n\n|                                     Model                                     |    Dataset     |  Iter  | FID50k |                                             Download                                              |\n| :---------------------------------------------------------------------------: | :------------: | :----: | :----: | :-----------------------------------------------------------------------------------------------: |\n|     [stylegan3-t](./stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256.py)     |  ffhq 256x256  | 740000 |  4.51  | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma2.0_ffhq_256_b4x8_best_fid_iter_740000_20220401_122456-730e1fba.pth) \\| [log](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma2.0_ffhq_256_b4x8_20220323_144815.log.json) |\n| [stylegan3-r-ada](./stylegan3-r_ada-gamma3.3_8xb4-fp16_metfaces-1024x1024.py) | ffhq 1024x1024 |   -    |   -    |                                            [ckpt](<>)                                             |\n\n### Converted Weights\n\n|                                 Model                                  |    Dataset     |     Comment     | FID50k | EQ-T  | EQ-R  |                                       Download                                        |\n| :--------------------------------------------------------------------: | :------------: | :-------------: | :----: | :---: | :---: | :-----------------------------------------------------------------------------------: |\n|  [stylegan3-t](./stylegan3-t_cvt-official-rgb_8xb4_ffhqu-256x256.py)   | ffhqu 256x256  | official weight |  4.62  | 63.01 | 13.12 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhqu_256_b4x8_cvt_official_rgb_20220329_235046-153df4c8.pth) |\n|  [stylegan3-t](./stylegan3-t_cvt-official-rgb_8xb4_afhqv2-512x512.py)  | afhqv2 512x512 | official weight |  4.04  | 60.15 | 13.51 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_afhqv2_512_b4x8_cvt_official_rgb_20220329_235017-ee6b037a.pth) |\n|  [stylegan3-t](./stylegan3-t_cvt-official-rgb_8xb4_ffhq-1024x1024.py)  | ffhq 1024x1024 | official weight |  2.79  | 61.21 | 13.82 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhq_1024_b4x8_cvt_official_rgb_20220329_235113-db6c6580.pth) |\n|  [stylegan3-r](./stylegan3-r_cvt-official-rgb_8xb4_ffhqu-256x256.py)   | ffhqu 256x256  | official weight |  4.50  | 66.65 | 40.48 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhqu_256_b4x8_cvt_official_rgb_20220329_234909-4521d963.pth) |\n| [stylegan3-r](./stylegan3-r_cvt-official-rgb_8xb4x8_afhqv2-512x512.py) | afhqv2 512x512 | official weight |  4.40  | 64.89 | 40.34 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_afhqv2_512_b4x8_cvt_official_rgb_20220329_234829-f2eaca72.pth) |\n|  [stylegan3-r](./stylegan3-r_cvt-official-rgb_8xb4_ffhq-1024x1024.py)  | ffhq 1024x1024 | official weight |  3.07  | 64.76 | 46.62 | [ckpt](https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhq_1024_b4x8_cvt_official_rgb_20220329_234933-ac0500a1.pth) |\n\n## Interpolation\n\nWe provide a tool to generate video by walking through GAN's latent space.\nRun this command to get the following video.\n\n```bash\npython apps/interpolate_sample.py configs/styleganv3/stylegan3_t_afhqv2_512_b4x8_official.py https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_afhqv2_512_b4x8_cvt_official.pkl --export-video --samples-path work_dirs/demos/ --endpoint 6 --interval 60 --space z --seed 2022 --sample-cfg truncation=0.8\n```\n\nhttps://user-images.githubusercontent.com/22982797/151506918-83da9ee3-0d63-4c5b-ad53-a41562b92075.mp4\n\n## Equivarience Visualization && Evaluation\n\nWe also provide a tool to visualize the equivarience properties for StyleGAN3.\nRun these commands to get the results below.\n\n```bash\npython tools/utils/equivariance_viz.py configs/styleganv3/stylegan3_r_ffhqu_256_b4x8_official.py https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhqu_256_b4x8_cvt_official.pkl --translate_max 0.5 --transform rotate --seed 5432\n\npython tools/utils/equivariance_viz.py configs/styleganv3/stylegan3_r_ffhqu_256_b4x8_official.py https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhqu_256_b4x8_cvt_official.pkl --translate_max 0.25 --transform x_t --seed 5432\n\npython tools/utils/equivariance_viz.py configs/styleganv3/stylegan3_r_ffhqu_256_b4x8_official.py https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhqu_256_b4x8_cvt_official.pkl --translate_max 0.25 --transform y_t --seed 5432\n```\n\nhttps://user-images.githubusercontent.com/22982797/151504902-f3cbfef5-9014-4607-bbe1-deaf48ec6d55.mp4\n\nhttps://user-images.githubusercontent.com/22982797/151504973-b96e1639-861d-434b-9d7c-411ebd4a653f.mp4\n\nhttps://user-images.githubusercontent.com/22982797/151505099-cde4999e-aab1-42d4-a458-3bb069db3d32.mp4\n\nIf you want to get EQ-Metric for StyleGAN3, just add following codes into config.\n\n```python\nmetrics = dict(\n    eqv=dict(\n        type='Equivariance',\n        num_images=50000,\n        eq_cfg=dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True)))\n```\n\nAnd we highly recommend you to use [slurm_test.sh](../../tools/slurm_test.sh) script to accelerate evaluation time.\n\n## Citation\n\n```latex\n@inproceedings{Karras2021,\n  author = {Tero Karras and Miika Aittala and Samuli Laine and Erik H\\\"ark\\\"onen and Janne Hellsten and Jaakko Lehtinen and Timo Aila},\n  title = {Alias-Free Generative Adversarial Networks},\n  booktitle = {Proc. NeurIPS},\n  year = {2021}\n}\n```\n"
  },
  {
    "path": "configs/styleganv3/metafile.yml",
    "content": "Collections:\n- Name: StyleGANv3\n  Paper:\n    Title: Alias-Free Generative Adversarial Networks\n    URL: https://nvlabs-fi-cdn.nvidia.com/stylegan3/stylegan3-paper.pdf\n  README: configs/styleganv3/README.md\n  Task:\n  - unconditional gans\n  Year: 2021\nModels:\n- Config: configs/styleganv3/stylegan3-t_gamma32.8_8xb4-fp16-noaug_ffhq-1024x1024.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_gamma32.8_8xb4-fp16-noaug_ffhq-1024x1024\n  Results:\n  - Dataset: ffhq1024x1024\n    Metrics:\n      Iter: 490000.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma32.8_ffhq_1024_b4x8_best_fid_iter_490000_20220401_120733-4ff83434.pth\n- Config: configs/styleganv3/stylegan3-t_ada-gamma6.6_8xb4-fp16_metfaces-1024x1024.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_ada-gamma6.6_8xb4-fp16_metfaces-1024x1024\n  Results:\n  - Dataset: metface1024x1024\n    Metrics:\n      FID50k: 15.09\n      Iter: 130000.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ada_fp16_gamma6.6_metfaces_1024_b4x8_best_fid_iter_130000_20220401_115101-f2ef498e.pth\n- Config: configs/styleganv3/stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256\n  Results:\n  - Dataset: ffhq256x256\n    Metrics:\n      FID50k: 4.51\n      Iter: 740000.0\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_noaug_fp16_gamma2.0_ffhq_256_b4x8_best_fid_iter_740000_20220401_122456-730e1fba.pth\n- Config: configs/styleganv3/stylegan3-r_ada-gamma3.3_8xb4-fp16_metfaces-1024x1024.py\n  In Collection: StyleGANv3\n  Name: stylegan3-r_ada-gamma3.3_8xb4-fp16_metfaces-1024x1024\n  Results:\n  - Dataset: ffhq1024x1024\n    Metrics: {}\n    Task: Unconditional GANs\n  Weights: <>\n- Config: configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_ffhqu-256x256.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_cvt-official-rgb_8xb4_ffhqu-256x256\n  Results:\n  - Dataset: ffhqu256x256\n    Metrics:\n      EQ-R: 13.12\n      EQ-T: 63.01\n      FID50k: 4.62\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhqu_256_b4x8_cvt_official_rgb_20220329_235046-153df4c8.pth\n- Config: configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_afhqv2-512x512.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_cvt-official-rgb_8xb4_afhqv2-512x512\n  Results:\n  - Dataset: afhqv2512x512\n    Metrics:\n      EQ-R: 13.51\n      EQ-T: 60.15\n      FID50k: 4.04\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_afhqv2_512_b4x8_cvt_official_rgb_20220329_235017-ee6b037a.pth\n- Config: configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_ffhq-1024x1024.py\n  In Collection: StyleGANv3\n  Name: stylegan3-t_cvt-official-rgb_8xb4_ffhq-1024x1024\n  Results:\n  - Dataset: ffhq1024x1024\n    Metrics:\n      EQ-R: 13.82\n      EQ-T: 61.21\n      FID50k: 2.79\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhq_1024_b4x8_cvt_official_rgb_20220329_235113-db6c6580.pth\n- Config: configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4_ffhqu-256x256.py\n  In Collection: StyleGANv3\n  Name: stylegan3-r_cvt-official-rgb_8xb4_ffhqu-256x256\n  Results:\n  - Dataset: ffhqu256x256\n    Metrics:\n      EQ-R: 40.48\n      EQ-T: 66.65\n      FID50k: 4.5\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhqu_256_b4x8_cvt_official_rgb_20220329_234909-4521d963.pth\n- Config: configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4x8_afhqv2-512x512.py\n  In Collection: StyleGANv3\n  Name: stylegan3-r_cvt-official-rgb_8xb4x8_afhqv2-512x512\n  Results:\n  - Dataset: afhqv2512x512\n    Metrics:\n      EQ-R: 40.34\n      EQ-T: 64.89\n      FID50k: 4.4\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_afhqv2_512_b4x8_cvt_official_rgb_20220329_234829-f2eaca72.pth\n- Config: configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4_ffhq-1024x1024.py\n  In Collection: StyleGANv3\n  Name: stylegan3-r_cvt-official-rgb_8xb4_ffhq-1024x1024\n  Results:\n  - Dataset: ffhq1024x1024\n    Metrics:\n      EQ-R: 46.62\n      EQ-T: 64.76\n      FID50k: 3.07\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhq_1024_b4x8_cvt_official_rgb_20220329_234933-ac0500a1.pth\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-r_ada-gamma3.3_8xb4-fp16_metfaces-1024x1024.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/ffhq_flip.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\nr1_gamma = 3.3  # set by user\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nload_from = 'https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhq_1024_b4x8_cvt_official_rgb_20220329_234933-ac0500a1.pth'  # noqa\n\n# ada settings\naug_kwargs = {\n    'xflip': 1,\n    'rotate90': 1,\n    'xint': 1,\n    'scale': 1,\n    'rotate': 1,\n    'aniso': 1,\n    'xfrac': 1,\n    'brightness': 1,\n    'contrast': 1,\n    'lumaflip': 1,\n    'hue': 1,\n    'saturation': 1\n}\n\nema_half_life = 10.  # G_smoothing_kimg\nema_kimg = 10\nema_nimg = ema_kimg * 1000\nema_beta = 0.5**(32 / max(ema_nimg, 1e-8))\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=ema_beta,\n    start_iter=0)\n\nmodel = dict(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(\n        type='ADAStyleGAN2Discriminator',\n        in_size=1024,\n        input_bgr2rgb=True,\n        data_aug=dict(type='ADAAug', aug_pipeline=aug_kwargs, ada_kimg=100)),\n    loss_config=dict(\n        r1_loss_weight=r1_gamma / 2.0 * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC'),\n    ema_config=ema_config)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.0025 * g_reg_ratio, betas=(0,\n                                                         0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/metfaces/images/'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=160000)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4_ffhq-1024x1024.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/ffhq_flip.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\n\nr1_gamma = 32.8\nd_reg_interval = 16\n\nmodel = dict(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        synthesis_cfg=synthesis_cfg,\n        rgb2bgr=True),\n    discriminator=dict(type='StyleGAN2Discriminator', in_size=1024))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4_ffhqu-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/unconditional_imgs_flip_lanczos_resize_256x256.py',\n    '../_base_/gen_default_runtime.py'\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 32768,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\nmodel = dict(\n    generator=dict(\n        out_size=256,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1))\n\nbatch_size = 4\ndata_root = './data/ffhqu/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-r_cvt-official-rgb_8xb4x8_afhqv2-512x512.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py', '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/unconditional_imgs_flip_512x512.py'\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\nmodel = dict(\n    generator=dict(\n        type='StyleGANv3Generator',\n        noise_size=512,\n        style_channels=512,\n        out_size=512,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(type='StyleGAN2Discriminator', in_size=512))\n\nbatch_size = 4\ndata_root = 'data/afhqv2/'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_ada-gamma6.6_8xb4-fp16_metfaces-1024x1024.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/ffhq_flip.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 6.6  # set by user\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nload_from = 'https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhq_1024_b4x8_cvt_official_rgb_20220329_235113-db6c6580.pth'  # noqa\n# ada settings\naug_kwargs = {\n    'xflip': 1,\n    'rotate90': 1,\n    'xint': 1,\n    'scale': 1,\n    'rotate': 1,\n    'aniso': 1,\n    'xfrac': 1,\n    'brightness': 1,\n    'contrast': 1,\n    'lumaflip': 1,\n    'hue': 1,\n    'saturation': 1\n}\n\nema_half_life = 10.  # G_smoothing_kimg\n\nema_kimg = 10\nema_nimg = ema_kimg * 1000\nema_beta = 0.5**(32 / max(ema_nimg, 1e-8))\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=ema_beta,\n    start_iter=0)\n\nmodel = dict(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(\n        type='ADAStyleGAN2Discriminator',\n        in_size=1024,\n        input_bgr2rgb=True,\n        data_aug=dict(type='ADAAug', aug_pipeline=aug_kwargs, ada_kimg=100)),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.0025 * g_reg_ratio, betas=(0,\n                                                         0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/metfaces/images/'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=160000)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_afhqv2-512x512.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py', '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/unconditional_imgs_flip_512x512.py'\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nmodel = dict(\n    generator=dict(\n        out_size=512,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=512))\n\nbatch_size = 4\ndata_root = 'data/afhqv2/'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_ffhq-1024x1024.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/ffhq_flip.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\n\nmodel = dict(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        synthesis_cfg=synthesis_cfg,\n        rgb2bgr=True),\n    discriminator=dict(in_size=1024))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_cvt-official-rgb_8xb4_ffhqu-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/gen_default_runtime.py',\n    '../_base_/datasets/unconditional_imgs_flip_lanczos_resize_256x256.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 16384,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nmodel = dict(\n    generator=dict(\n        out_size=256,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1))\n\nbatch_size = 4\ndata_root = './data/ffhqu/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/unconditional_imgs_flip_lanczos_resize_256x256.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 16384,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 2.  # set by user\nd_reg_interval = 16\n\nema_config = dict(\n    type='RampUpEMA',\n    interval=1,\n    ema_kimg=10,\n    ema_rampup=0.05,\n    batch_size=32,\n    eps=1e-8,\n    start_iter=0)\n\nmodel = dict(\n    generator=dict(out_size=256, img_channels=3, synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.0025 * g_reg_ratio, betas=(0,\n                                                         0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=800002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='Equivariance',\n        fake_nums=50000,\n        sample_mode='ema',\n        prefix='EQ',\n        eq_cfg=dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True))\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/styleganv3/stylegan3-t_gamma32.8_8xb4-fp16-noaug_ffhq-1024x1024.py",
    "content": "_base_ = [\n    '../_base_/models/base_styleganv3.py',\n    '../_base_/datasets/ffhq_flip.py',\n    '../_base_/gen_default_runtime.py',\n]\n\nbatch_size = 32\nmagnitude_ema_beta = 0.5**(batch_size / (20 * 1e3))\nsynthesis_cfg = {\n    'type': 'SynthesisNetwork',\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 32.8\nd_reg_interval = 16\n\nema_config = dict(\n    type='RampUpEMA',\n    interval=1,\n    ema_kimg=10,\n    ema_rampup=0.05,\n    batch_size=batch_size,\n    eps=1e-8,\n    start_iter=0)\n\nmodel = dict(\n    generator=dict(out_size=1024, img_channels=3, synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=1024),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper = dict(\n    generator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.0025 * g_reg_ratio, betas=(0,\n                                                         0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam', lr=0.002 * d_reg_ratio, betas=(0,\n                                                        0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/ffhq/images'\n\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=800002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "configs/swinir/README.md",
    "content": "# SwinIR (ICCVW'2021)\n\n> [SwinIR: Image Restoration Using Swin Transformer](https://arxiv.org/abs/2108.10257)\n\n> **Task**: Image Super-Resolution, Image denoising, JPEG compression artifact reduction\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nImage restoration is a long-standing low-level vision problem that aims to restore high-quality images from low-quality images (e.g., downscaled, noisy and compressed images). While state-of-the-art image restoration methods are based on convolutional neural networks, few attempts have been made with Transformers which show impressive performance on high-level vision tasks. In this paper, we propose a strong baseline model SwinIR for image restoration based on the Swin Transformer. SwinIR consists of three parts: shallow feature extraction, deep feature extraction and high-quality image reconstruction. In particular, the deep feature extraction module is composed of several residual Swin Transformer blocks (RSTB), each of which has several Swin Transformer layers together with a residual connection. We conduct experiments on three representative tasks: image super-resolution (including classical, lightweight and real-world image super-resolution), image denoising (including grayscale and color image denoising) and JPEG compression artifact reduction. Experimental results demonstrate that SwinIR outperforms state-of-the-art methods on different tasks by up to 0.14~0.45dB, while the total number of parameters can be reduced by up to 67%.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/40970489/204525707-272fb8c6-1bb3-41f2-9a9b-612c48ddd9b4.png\" width=\"800\"/>\n</div >\n\n## Results and models\n\n### **Classical Image Super-Resolution**\n\nEvaluated on Y channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                               Model                                | Dataset |          Task          | Scale |  PSNR   |  SSIM  | Training Resources |                               Download                                |\n| :----------------------------------------------------------------: | :-----: | :--------------------: | :---: | :-----: | :----: | :----------------: | :-------------------------------------------------------------------: |\n| [swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x2   | 38.3240 | 0.9626 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth) \\| log |\n| [swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x2   | 34.1174 | 0.9230 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth) \\| log |\n| [swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x2   | 37.8921 | 0.9481 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth) \\| log |\n| [swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x3   | 34.8640 | 0.9317 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth) \\| log |\n| [swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x3   | 30.7669 | 0.8508 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth) \\| log |\n| [swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x3   | 34.1397 | 0.8917 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth) \\| log |\n| [swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x4   | 32.7315 | 0.9029 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth) \\| log |\n| [swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x4   | 28.9065 | 0.7915 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth) \\| log |\n| [swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x4   | 32.0953 | 0.8418 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth) \\| log |\n| [swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set5   | Image Super-Resolution |  x2   | 38.3971 | 0.9629 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth) \\| log |\n| [swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set14  | Image Super-Resolution |  x2   | 34.4149 | 0.9252 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth) \\| log |\n| [swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  DIV2K  | Image Super-Resolution |  x2   | 37.9473 | 0.9488 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth) \\| log |\n| [swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set5   | Image Super-Resolution |  x3   | 34.9335 | 0.9323 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth) \\| log |\n| [swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set14  | Image Super-Resolution |  x3   | 30.9258 | 0.8540 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth) \\| log |\n| [swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  DIV2K  | Image Super-Resolution |  x3   | 34.2830 | 0.8939 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth) \\| log |\n| [swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set5   | Image Super-Resolution |  x4   | 32.9214 | 0.9053 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth) \\| log |\n| [swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  Set14  | Image Super-Resolution |  x4   | 29.0792 | 0.7953 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth) \\| log |\n| [swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k](/configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  DIV2K  | Image Super-Resolution |  x4   | 32.3021 | 0.8451 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth) \\| log |\n\n### **Lightweight Image Super-Resolution**\n\nEvaluated on Y channels, `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                               Model                                | Dataset |          Task          | Scale |  PSNR   |  SSIM  | Training Resources |                               Download                                |\n| :----------------------------------------------------------------: | :-----: | :--------------------: | :---: | :-----: | :----: | :----------------: | :-------------------------------------------------------------------: |\n| [swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x2   | 38.1289 | 0.9617 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth) \\| log |\n| [swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x2   | 33.8404 | 0.9207 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth) \\| log |\n| [swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x2   | 37.5844 | 0.9459 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth) \\| log |\n| [swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x3   | 34.6037 | 0.9293 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth) \\| log |\n| [swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x3   | 30.5340 | 0.8468 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth) \\| log |\n| [swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x3   | 33.8394 | 0.8867 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth) \\| log |\n| [swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set5   | Image Super-Resolution |  x4   | 32.4343 | 0.8984 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth) \\| log |\n| [swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  Set14  | Image Super-Resolution |  x4   | 28.7441 | 0.7861 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth) \\| log |\n| [swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k](/configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  DIV2K  | Image Super-Resolution |  x4   | 31.8636 | 0.8353 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth) \\| log |\n\n### **Real-World Image Super-Resolution**\n\nEvaluated on Y channels.\nThe metrics are `NIQE` .\n\n|                                Model                                |      Dataset      |          Task          |  NIQE  | Training Resources |                                Download                                |\n| :-----------------------------------------------------------------: | :---------------: | :--------------------: | :----: | :----------------: | :--------------------------------------------------------------------: |\n| [swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 5.7975 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth) \\| log |\n| [swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 7.2738 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth) \\| log |\n| [swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 5.2329 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth) \\| log |\n| [swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 7.7460 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth) \\| log |\n| [swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 5.1464 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth) \\| log |\n| [swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost](/configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py) | RealSRSet+5images | Image Super-Resolution | 7.6378 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth) \\| log |\n\n### **Grayscale Image Deoising**\n\nEvaluated on grayscale images.\nThe metrics are `PSNR` .\n\n|                                   Model                                    | Dataset  |      Task       |  PSNR   | Training Resources |                                    Download                                    |\n| :------------------------------------------------------------------------: | :------: | :-------------: | :-----: | :----------------: | :----------------------------------------------------------------------------: |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py) |  Set12   | Image denoising | 33.9731 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py) |  BSD68   | Image denoising | 32.5203 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py) | Urban100 | Image denoising | 34.3424 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py) |  Set12   | Image denoising | 31.6434 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py) |  BSD68   | Image denoising | 30.1377 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py) | Urban100 | Image denoising | 31.9493 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py) |  Set12   | Image denoising | 28.5651 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py) |  BSD68   | Image denoising | 27.3157 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py) | Urban100 | Image denoising | 28.6626 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth) \\| log |\n\n### **Color Image Deoising**\n\nEvaluated on RGB channels.\nThe metrics are `PSNR` .\n\n|                                   Model                                    | Dataset  |      Task       |  PSNR   | Training Resources |                                    Download                                    |\n| :------------------------------------------------------------------------: | :------: | :-------------: | :-----: | :----------------: | :----------------------------------------------------------------------------: |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py) |  CBSD68  | Image denoising | 34.4136 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py) | Kodak24  | Image denoising | 35.3555 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py) | McMaster | Image denoising | 35.6205 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py) | Urban100 | Image denoising | 35.1836 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py) |  CBSD68  | Image denoising | 31.7626 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py) | Kodak24  | Image denoising | 32.9003 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py) | McMaster | Image denoising | 33.3198 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py) | Urban100 | Image denoising | 32.9458 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py) |  CBSD68  | Image denoising | 28.5346 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py) | Kodak24  | Image denoising | 29.8058 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py) | McMaster | Image denoising | 30.2027 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50](/configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py) | Urban100 | Image denoising | 29.8832 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth) \\| log |\n\n### **JPEG Compression Artifact Reduction (grayscale)**\n\nEvaluated on grayscale images.\nThe metrics are \\`PSNR / SSIM\n\n|                             Model                             | Dataset  |                Task                 |  PSNR   |  SSIM  | Training Resources |                             Download                              |\n| :-----------------------------------------------------------: | :------: | :---------------------------------: | :-----: | :----: | :----------------: | :---------------------------------------------------------------: |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py) | Classic5 | JPEG compression artifact reduction | 30.2746 | 0.8254 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py) |  LIVE1   | JPEG compression artifact reduction | 29.8611 | 0.8292 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py) | Classic5 | JPEG compression artifact reduction | 32.5331 | 0.8753 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py) |  LIVE1   | JPEG compression artifact reduction | 32.2667 | 0.8914 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py) | Classic5 | JPEG compression artifact reduction | 33.7504 | 0.8966 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py) |  LIVE1   | JPEG compression artifact reduction | 33.7001 | 0.9179 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py) | Classic5 | JPEG compression artifact reduction | 34.5377 | 0.9087 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py) |  LIVE1   | JPEG compression artifact reduction | 34.6846 | 0.9322 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth) \\| log |\n\n### **JPEG Compression Artifact Reduction (color)**\n\nEvaluated on RGB channels.\nThe metrics are `PSNR / SSIM` .\n\n|                             Model                             | Dataset  |                Task                 |  PSNR   |  SSIM  | Training Resources |                             Download                              |\n| :-----------------------------------------------------------: | :------: | :---------------------------------: | :-----: | :----: | :----------------: | :---------------------------------------------------------------: |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py) | Classic5 | JPEG compression artifact reduction | 30.1019 | 0.8217 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py) |  LIVE1   | JPEG compression artifact reduction | 28.0676 | 0.8094 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py) | Classic5 | JPEG compression artifact reduction | 32.3489 | 0.8727 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py) |  LIVE1   | JPEG compression artifact reduction | 30.4514 | 0.8745 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py) | Classic5 | JPEG compression artifact reduction | 33.6028 | 0.8949 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py) |  LIVE1   | JPEG compression artifact reduction | 31.8235 | 0.9023 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py) | Classic5 | JPEG compression artifact reduction | 34.4344 | 0.9076 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40](/configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py) |  LIVE1   | JPEG compression artifact reduction | 32.7610 | 0.9179 |         8          | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth) \\| log |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n\n# 002 Lightweight Image Super-Resolution (small size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n\n# 003 Real-World Image Super-Resolution\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n\n# 004 Grayscale Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py\n\n# 005 Color Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py\n\n# color\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py\n\n\n# single-gpu train\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\npython tools/train.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\npython tools/train.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\npython tools/train.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\npython tools/train.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n\n# 002 Lightweight Image Super-Resolution (small size)\npython tools/train.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n\n# 003 Real-World Image Super-Resolution\npython tools/train.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n\n# 004 Grayscale Image Deoising (middle size)\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py\n\n# 005 Color Image Deoising (middle size)\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py\n\n# color\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py\n\n\n# multi-gpu train\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\n./tools/dist_train.sh configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\n./tools/dist_train.sh configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n\n# 002 Lightweight Image Super-Resolution (small size)\n./tools/dist_train.sh configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n\n# 003 Real-World Image Super-Resolution\n./tools/dist_train.sh configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py 8\n\n# 004 Grayscale Image Deoising (middle size)\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py 8\n\n# 005 Color Image Deoising (middle size)\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py 8\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py 8\n\n# color\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n\n# 002 Lightweight Image Super-Resolution (small size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n# 003 Real-World Image Super-Resolution\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n# 004 Grayscale Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n# 005 Color Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding usesx8 blocks)\n# grayscale\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n\n# color\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth\n\n\n\n# single-gpu test\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\npython tools/test.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\npython tools/test.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\npython tools/test.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\npython tools/test.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\npython tools/test.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\npython tools/test.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n\n# 002 Lightweight Image Super-Resolution (small size)\npython tools/test.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\npython tools/test.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\npython tools/test.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n\n# 003 Real-World Image Super-Resolution\npython tools/test.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\npython tools/test.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\npython tools/test.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n\n# 004 Grayscale Image Deoising (middle size)\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n\n# 005 Color Image Deoising (middle size)\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding usesx8 blocks)\n# grayscale\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n\n# color\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth\n\n\n\n# multi-gpu test\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\n./tools/dist_test.sh configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\n./tools/dist_test.sh configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n# 002 Lightweight Image Super-Resolution (small size)\n./tools/dist_test.sh configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n# 003 Real-World Image Super-Resolution\n./tools/dist_test.sh configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\n./tools/dist_test.sh configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\n./tools/dist_test.sh configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n# 004 Grayscale Image Deoising (middle size)\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n# 005 Color Image Deoising (middle size)\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n# color\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/\n\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{liang2021swinir,\n  title={Swinir: Image restoration using swin transformer},\n  author={Liang, Jingyun and Cao, Jiezhang and Sun, Guolei and Zhang, Kai and Van Gool, Luc and Timofte, Radu},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},\n  pages={1833--1844},\n  year={2021}\n}\n```\n"
  },
  {
    "path": "configs/swinir/README_zh-CN.md",
    "content": "# SwinIR (ICCVW'2021)\n\n> **任务**: 图像超分辨率, 图像去噪, JPEG压缩伪影移除\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">SwinIR (ICCVW'2021)</summary>\n\n```bibtex\n@inproceedings{liang2021swinir,\n  title={Swinir: Image restoration using swin transformer},\n  author={Liang, Jingyun and Cao, Jiezhang and Sun, Guolei and Zhang, Kai and Van Gool, Luc and Timofte, Radu},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},\n  pages={1833--1844},\n  year={2021}\n}\n```\n\n</details>\n\n<br/>\n\n### **Classical Image Super-Resolution**\n\n在 Y 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                算法                                 | Set5 PSNR | Set14 PSNR | DIV2K PSNR | Set5 SSIM | Set14 SSIM | DIV2K SSIM | GPU 信息 |                                下载                                 |\n| :-----------------------------------------------------------------: | :-------: | :--------: | :--------: | :-------: | :--------: | :--------: | :------: | :-----------------------------------------------------------------: |\n| [swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k](./swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  38.3240  |  34.1174   |  37.8921   |  0.9626   |   0.9230   |   0.9481   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth) \\| log |\n| [swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k](./swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  34.8640  |  30.7669   |  34.1397   |  0.9317   |   0.8508   |   0.8917   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth) \\| log |\n| [swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k](./swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py) |  32.7315  |  28.9065   |  32.0953   |  0.9029   |   0.7915   |   0.8418   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth) \\| log |\n| [swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k](./swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  38.3971  |  34.4149   |  37.9473   |  0.9629   |   0.9252   |   0.9488   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth) \\| log |\n| [swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k](./swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  34.9335  |  30.9258   |  34.2830   |  0.9323   |   0.8540   |   0.8939   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth) \\| log |\n| [swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k](./swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py) |  32.9214  |  29.0792   |  32.3021   |  0.9053   |   0.7953   |   0.8451   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth) \\| log |\n\n### **Lightweight Image Super-Resolution**\n\n在 Y 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                算法                                 | Set5 PSNR | Set14 PSNR | DIV2K PSNR | Set5 SSIM | Set14 SSIM | DIV2K SSIM | GPU 信息 |                                下载                                 |\n| :-----------------------------------------------------------------: | :-------: | :--------: | :--------: | :-------: | :--------: | :--------: | :------: | :-----------------------------------------------------------------: |\n| [swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k](./swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  38.1289  |  33.8404   |  37.5844   |  0.9617   |   0.9207   |   0.9459   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth) \\| log |\n| [swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k](./swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  34.6037  |  30.5340   |  33.8394   |  0.9293   |   0.8468   |   0.8867   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth) \\| log |\n| [swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k](./swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py) |  32.4343  |  28.7441   |  31.8636   |  0.8984   |   0.7861   |   0.8353   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth) \\| log |\n\n### **Real-World Image Super-Resolution**\n\n在 Y 通道上进行评估。\n我们使用 NIQE 作为指标。\n\n|                                         算法                                          | RealSRSet+5images NIQE | GPU 信息 |                                         下载                                          |\n| :-----------------------------------------------------------------------------------: | :--------------------: | :------: | :-----------------------------------------------------------------------------------: |\n| [swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](./swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) |         5.7975         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth) \\| log |\n| [swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](./swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) |         7.2738         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth) \\| log |\n| [swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](./swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) |         5.2329         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth) \\| log |\n| [swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost](./swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py) |         7.7460         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth) \\| log |\n| [swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost](./swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py) |         5.1464         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth) \\| log |\n| [swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost](./swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py) |         7.6378         |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth) \\| log |\n\n### **Grayscale Image Deoising**\n\n在灰度图上进行评估。\n我们使用 PSNR 作为指标。\n\n|                                      算法                                       | Set12 PSNR | BSD68 PSNR | Urban100 PSNR | GPU 信息 |                                       下载                                       |\n| :-----------------------------------------------------------------------------: | :--------: | :--------: | :-----------: | :------: | :------------------------------------------------------------------------------: |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py) |  33.9731   |  32.5203   |    34.3424    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py) |  31.6434   |  30.1377   |    31.9493    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py) |  28.5651   |  27.3157   |    28.6626    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth) \\| log |\n\n### **Color Image Deoising**\n\n在 RGB 通道上进行评估。\n我们使用 PSNR 作为指标。\n\n|                                  算法                                   | CBSD68 PSNR | Kodak24 PSNR | McMaster PSNR | Urban100 PSNR | GPU 信息 |                                   下载                                   |\n| :---------------------------------------------------------------------: | :---------: | :----------: | :-----------: | :-----------: | :------: | :----------------------------------------------------------------------: |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py) |   34.4136   |   35.3555    |    35.6205    |    35.1836    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py) |   31.7626   |   32.9003    |    33.3198    |    32.9458    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth) \\| log |\n| [swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50](./swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py) |   28.5346   |   29.8058    |    30.2027    |    29.8832    |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth) \\| log |\n\n### **JPEG Compression Artifact Reduction (grayscale)**\n\n在灰度图上进行评估。\n我们使用 PSNR 和 SSIM 作为指标。\n\n|                                   算法                                    | Classic5 PSNR | Classic5 SSIM | LIVE1 PSNR | LIVE1 SSIM | GPU 信息 |                                   下载                                    |\n| :-----------------------------------------------------------------------: | :-----------: | :-----------: | :--------: | :--------: | :------: | :-----------------------------------------------------------------------: |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py) |    30.2746    |    0.8254     |  29.8611   |   0.8292   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py) |    32.5331    |    0.8753     |  32.2667   |   0.8914   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py) |    33.7504    |    0.8966     |  33.7001   |   0.9179   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py) |    34.5377    |    0.9087     |  34.6846   |   0.9322   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth) \\| log |\n\n### **JPEG Compression Artifact Reduction (color)**\n\n在 RGB 通道上进行评估。\n我们使用 PSNR 和 SSIM 作为指标。\n\n|                                   算法                                    | Classic5 PSNR | Classic5 SSIM | LIVE1 PSNR | LIVE1 SSIM | GPU 信息 |                                   下载                                    |\n| :-----------------------------------------------------------------------: | :-----------: | :-----------: | :--------: | :--------: | :------: | :-----------------------------------------------------------------------: |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py) |    30.1019    |    0.8217     |  28.0676   |   0.8094   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py) |    32.3489    |    0.8727     |  30.3489   |   0.8745   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py) |    33.6028    |    0.8949     |  31.8235   |   0.9023   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth) \\| log |\n| [swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40](./swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py) |    34.4344    |    0.9076     |  32.7610   |   0.9179   |    8     | [model](https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth) \\| log |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n\n# 002 Lightweight Image Super-Resolution (small size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n\n# 003 Real-World Image Super-Resolution\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n\n# 004 Grayscale Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py\n\n# 005 Color Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py\n\n# color\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py\n\n\n\n# 单个GPU上训练\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\npython tools/train.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\npython tools/train.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\npython tools/train.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\npython tools/train.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n\n# 002 Lightweight Image Super-Resolution (small size)\npython tools/train.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\npython tools/train.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n\n# 003 Real-World Image Super-Resolution\npython tools/train.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\npython tools/train.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n\n# 004 Grayscale Image Deoising (middle size)\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py\n\n# 005 Color Image Deoising (middle size)\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py\npython tools/train.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py\n\n# color\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py\npython tools/train.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py\n\n\n\n# 多个GPU上训练\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\n./tools/dist_train.sh configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py 8\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\n./tools/dist_train.sh configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py 8\n\n# 002 Lightweight Image Super-Resolution (small size)\n./tools/dist_train.sh configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n./tools/dist_train.sh configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py 8\n\n# 003 Real-World Image Super-Resolution\n./tools/dist_train.sh configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py 8\n./tools/dist_train.sh configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py 8\n\n# 004 Grayscale Image Deoising (middle size)\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py 8\n\n# 005 Color Image Deoising (middle size)\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py 8\n./tools/dist_train.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py 8\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py 8\n\n# color\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py 8\n./tools/dist_train.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n\n# 002 Lightweight Image Super-Resolution (small size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n# 003 Real-World Image Super-Resolution\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n# 004 Grayscale Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n# 005 Color Image Deoising (middle size)\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding usesx8 blocks)\n# grayscale\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n\n# color\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth\n\n\n\n# 单个GPU上测试\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\npython tools/test.py configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\npython tools/test.py configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\npython tools/test.py configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\npython tools/test.py configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\npython tools/test.py configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\npython tools/test.py configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n\n# 002 Lightweight Image Super-Resolution (small size)\npython tools/test.py configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\npython tools/test.py configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\npython tools/test.py configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n\n# 003 Real-World Image Super-Resolution\npython tools/test.py configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\npython tools/test.py configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\npython tools/test.py configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\npython tools/test.py configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n\n# 004 Grayscale Image Deoising (middle size)\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n\n# 005 Color Image Deoising (middle size)\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\npython tools/test.py configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding usesx8 blocks)\n# grayscale\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n\n# color\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\npython tools/test.py configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth\n\n\n\n# 多GPU测试\n# 001 Classical Image Super-Resolution (middle size)\n# (setting1: when model is trained on DIV2K and with training_patch_size=48)\n./tools/dist_test.sh configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n\n# (setting2: when model is trained on DIV2K+Flickr2K and with training_patch_size=64)\n./tools/dist_test.sh configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n\n# 002 Lightweight Image Super-Resolution (small size)\n./tools/dist_test.sh configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n\n./tools/dist_test.sh configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n\n# 003 Real-World Image Super-Resolution\n./tools/dist_test.sh configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n\n./tools/dist_test.sh configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n\n./tools/dist_test.sh configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n\n./tools/dist_test.sh configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-25f1722a.pth\n\n# 004 Grayscale Image Deoising (middle size)\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n\n# 005 Color Image Deoising (middle size)\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n\n# 006 JPEG Compression Artifact Reduction (middle size, using window_size=7 because JPEG encoding uses 8x8 blocks)\n# grayscale\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n\n# color\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\n./tools/dist_test.sh configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/swinir/metafile.yml",
    "content": "Collections:\n- Name: SwinIR\n  Paper:\n    Title: 'SwinIR: Image Restoration Using Swin Transformer'\n    URL: https://arxiv.org/abs/2108.10257\n  README: configs/swinir/README.md\n  Task:\n  - image super-resolution\n  - image denoising\n  - jpeg compression artifact reduction\n  Year: 2021\nModels:\n- Config: configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 38.324\n      SSIM: 0.9626\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 34.1174\n      SSIM: 0.923\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 37.8921\n      SSIM: 0.9481\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k-ed2d419e.pth\n- Config: configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 34.864\n      SSIM: 0.9317\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 30.7669\n      SSIM: 0.8508\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.1397\n      SSIM: 0.8917\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k-926950f1.pth\n- Config: configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.7315\n      SSIM: 0.9029\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 28.9065\n      SSIM: 0.7915\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 32.0953\n      SSIM: 0.8418\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k-88e4903d.pth\n- Config: configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n  In Collection: SwinIR\n  Name: swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 38.3971\n      SSIM: 0.9629\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 34.4149\n      SSIM: 0.9252\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 37.9473\n      SSIM: 0.9488\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k-69e15fb6.pth\n- Config: configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n  In Collection: SwinIR\n  Name: swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 34.9335\n      SSIM: 0.9323\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 30.9258\n      SSIM: 0.854\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 34.283\n      SSIM: 0.8939\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k-d6982f7b.pth\n- Config: configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py\n  In Collection: SwinIR\n  Name: swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.9214\n      SSIM: 0.9053\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 29.0792\n      SSIM: 0.7953\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 32.3021\n      SSIM: 0.8451\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k-0502d775.pth\n- Config: configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 38.1289\n      SSIM: 0.9617\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 33.8404\n      SSIM: 0.9207\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 37.5844\n      SSIM: 0.9459\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k-131d3f64.pth\n- Config: configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 34.6037\n      SSIM: 0.9293\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 30.534\n      SSIM: 0.8468\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 33.8394\n      SSIM: 0.8867\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k-309cb239.pth\n- Config: configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py\n  In Collection: SwinIR\n  Name: swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k\n  Results:\n  - Dataset: Set5\n    Metrics:\n      PSNR: 32.4343\n      SSIM: 0.8984\n    Task: Image Super-Resolution\n  - Dataset: Set14\n    Metrics:\n      PSNR: 28.7441\n      SSIM: 0.7861\n    Task: Image Super-Resolution\n  - Dataset: DIV2K\n    Metrics:\n      PSNR: 31.8636\n      SSIM: 0.8353\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k-d6622d03.pth\n- Config: configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 5.7975\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-c6425057.pth\n- Config: configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 7.2738\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-6f0c425f.pth\n- Config: configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 5.2329\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-36960d18.pth\n- Config: configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 7.746\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-os-a016a72f.pth\n- Config: configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 5.1464\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n- Config: configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py\n  In Collection: SwinIR\n  Name: swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost\n  Results:\n  - Dataset: RealSRSet+5images\n    Metrics:\n      NIQE: 7.6378\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-os-9f1599b5.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15\n  Results:\n  - Dataset: Set12\n    Metrics:\n      PSNR: 33.9731\n    Task: Image denoising\n  - Dataset: BSD68\n    Metrics:\n      PSNR: 32.5203\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 34.3424\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15-6782691b.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25\n  Results:\n  - Dataset: Set12\n    Metrics:\n      PSNR: 31.6434\n    Task: Image denoising\n  - Dataset: BSD68\n    Metrics:\n      PSNR: 30.1377\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 31.9493\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25-d0d8d4da.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50\n  Results:\n  - Dataset: Set12\n    Metrics:\n      PSNR: 28.5651\n    Task: Image denoising\n  - Dataset: BSD68\n    Metrics:\n      PSNR: 27.3157\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 28.6626\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50-54c9968a.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      PSNR: 34.4136\n    Task: Image denoising\n  - Dataset: Kodak24\n    Metrics:\n      PSNR: 35.3555\n    Task: Image denoising\n  - Dataset: McMaster\n    Metrics:\n      PSNR: 35.6205\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 35.1836\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15-c74a2cee.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      PSNR: 31.7626\n    Task: Image denoising\n  - Dataset: Kodak24\n    Metrics:\n      PSNR: 32.9003\n    Task: Image denoising\n  - Dataset: McMaster\n    Metrics:\n      PSNR: 33.3198\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 32.9458\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25-df2b1c0c.pth\n- Config: configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py\n  In Collection: SwinIR\n  Name: swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50\n  Results:\n  - Dataset: CBSD68\n    Metrics:\n      PSNR: 28.5346\n    Task: Image denoising\n  - Dataset: Kodak24\n    Metrics:\n      PSNR: 29.8058\n    Task: Image denoising\n  - Dataset: McMaster\n    Metrics:\n      PSNR: 30.2027\n    Task: Image denoising\n  - Dataset: Urban100\n    Metrics:\n      PSNR: 29.8832\n    Task: Image denoising\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50-e369874c.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 30.2746\n      SSIM: 0.8254\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 29.8611\n      SSIM: 0.8292\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10-da93c8e9.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 32.5331\n      SSIM: 0.8753\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 32.2667\n      SSIM: 0.8914\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20-d47367b1.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 33.7504\n      SSIM: 0.8966\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 33.7001\n      SSIM: 0.9179\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30-52c083cf.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 34.5377\n      SSIM: 0.9087\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 34.6846\n      SSIM: 0.9322\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40-803e8d9b.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 30.1019\n      SSIM: 0.8217\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 28.0676\n      SSIM: 0.8094\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10-09aafadc.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 32.3489\n      SSIM: 0.8727\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 30.4514\n      SSIM: 0.8745\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20-b8a42b5e.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 33.6028\n      SSIM: 0.8949\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 31.8235\n      SSIM: 0.9023\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30-e9fe6859.pth\n- Config: configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py\n  In Collection: SwinIR\n  Name: swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40\n  Results:\n  - Dataset: Classic5\n    Metrics:\n      PSNR: 34.4344\n      SSIM: 0.9076\n    Task: JPEG compression artifact reduction\n  - Dataset: LIVE1\n    Metrics:\n      PSNR: 32.761\n      SSIM: 0.9179\n    Task: JPEG compression artifact reduction\n  Weights: https://download.openmmlab.com/mmediting/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40-5b77a6e6.pth\n"
  },
  {
    "path": "configs/swinir/swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py']\n\nexperiment_name = 'swinir_gan-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n"
  },
  {
    "path": "configs/swinir/swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py']\n\nexperiment_name = 'swinir_gan-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n"
  },
  {
    "path": "configs/swinir/swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py']\n\nexperiment_name = 'swinir_gan-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n"
  },
  {
    "path": "configs/swinir/swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['../_base_/default_runtime.py']\n\nexperiment_name = 'swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\nimg_size = 64\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=scale,\n        in_chans=3,\n        img_size=img_size,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='nearest+conv',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\ntest_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicImageDataset',\n        metainfo=dict(dataset_type='realsrset', task_name='realsr'),\n        data_root='data/RealSRSet+5images',\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\n\ntest_evaluator = [dict(type='NIQE', input_order='CHW', convert_to='Y')]\n\ntest_cfg = dict(type='TestLoop')\n"
  },
  {
    "path": "configs/swinir/swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['swinir_psnr-x2s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py']\n\nexperiment_name = 'swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n\n# model settings\nmodel = dict(generator=dict(upscale=scale))\n"
  },
  {
    "path": "configs/swinir/swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost.py",
    "content": "_base_ = ['swinir_psnr-x4s64w8d6e180_8xb4-lr1e-4-600k_df2k-ost.py']\n\nexperiment_name = 'swinir_psnr-x4s64w8d9e240_8xb4-lr1e-4-600k_df2k-ost'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# model settings\nmodel = dict(\n    generator=dict(\n        depths=[6, 6, 6, 6, 6, 6, 6, 6, 6],\n        embed_dim=240,\n        num_heads=[8, 8, 8, 8, 8, 8, 8, 8, 8],\n        resi_connection='3conv'))\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/decompression_test_config.py'\n]\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nquality = 10\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=1,\n        in_chans=3,\n        img_size=126,\n        window_size=7,\n        img_range=255.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='CharbonnierLoss', eps=1e-9),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedRandomCrop', gt_patch_size=126),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[quality, quality], color_type='color'),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[quality, quality], color_type='color'),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=2,\n    batch_size=1,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DFWB8550sub_GT.txt',\n        metainfo=dict(dataset_type='dfwb', task_name='CAR'),\n        data_root=data_root + '/DFWB',\n        data_prefix=dict(img='', gt=''),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=2,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='live1', task_name='CAR'),\n        data_root=data_root + '/LIVE1',\n        data_prefix=dict(img='', gt=''),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', prefix='LIVE1'),\n    dict(type='SSIM', prefix='LIVE1'),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_600_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[800000, 1200000, 1400000, 1500000, 1600000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR20'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 20\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR30'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 30\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-colorCAR40'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 40\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/decompression_test_config.py'\n]\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nquality = 10\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=1,\n        in_chans=1,\n        img_size=126,\n        window_size=7,\n        img_range=255.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='CharbonnierLoss', eps=1e-9),\n    data_preprocessor=dict(type='DataPreprocessor', mean=[0.], std=[255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedRandomCrop', gt_patch_size=126),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[quality, quality], color_type='grayscale'),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomJPEGCompression',\n        params=dict(quality=[quality, quality], color_type='grayscale'),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=1,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DFWB8550sub_GT.txt',\n        metainfo=dict(dataset_type='dfwb', task_name='CAR'),\n        data_root=data_root + '/DFWB',\n        data_prefix=dict(img='', gt=''),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='classic5', task_name='CAR'),\n        data_root=data_root + '/Classic5',\n        data_prefix=dict(img='', gt=''),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', prefix='Classic5'),\n    dict(type='SSIM', prefix='Classic5'),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_600_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\ntest_dataloader = _base_.test_dataloader\nfor idx in range(len(test_dataloader)):\n    test_pipeline = test_dataloader[idx]['dataset']['pipeline']\n    if idx > 0:\n        test_pipeline[0]['to_y_channel'] = True\n        test_pipeline[1]['to_y_channel'] = True\n    else:\n        test_pipeline[0]['color_type'] = 'grayscale'\n        test_pipeline[1]['color_type'] = 'grayscale'\n    test_pipeline[2]['color_type'] = 'grayscale'\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[800000, 1200000, 1400000, 1500000, 1600000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR20'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 20\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR30'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 30\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40.py",
    "content": "_base_ = ['swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR10.py']\n\nexperiment_name = 'swinir_s126w7d6e180_8xb1-lr2e-4-1600k_dfwb-grayCAR40'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify JPEG quality factor of RandomJPEGCompression\nquality = 40\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['quality'] = [quality, quality]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['quality'] = [quality, quality]\n\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['quality'] = [quality, quality]\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_color_test_config.py'\n]\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 15\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=1,\n        in_chans=3,\n        img_size=128,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='CharbonnierLoss', eps=1e-9),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma * 255, sigma * 255],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma * 255, sigma * 255],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=1,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DFWB8550sub_GT.txt',\n        metainfo=dict(dataset_type='dfwb', task_name='denoising'),\n        data_root=data_root + '/DFWB',\n        data_prefix=dict(img='', gt=''),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='mcmaster', task_name='denoising'),\n        data_root=data_root + '/McMaster',\n        data_prefix=dict(img='', gt=''),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', prefix='McMaster'),\n    dict(type='SSIM', prefix='McMaster'),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_600_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[800000, 1200000, 1400000, 1500000, 1600000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25.py",
    "content": "_base_ = ['swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py']\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN25'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 25\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['gaussian_sigma'] = [sigma, sigma]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50.py",
    "content": "_base_ = ['swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN15.py']\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-colorDN50'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 50\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['gaussian_sigma'] = [sigma, sigma]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py',\n    '../_base_/datasets/denoising-gaussian_gray_test_config.py'\n]\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 15\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=1,\n        in_chans=1,\n        img_size=128,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='CharbonnierLoss', eps=1e-9),\n    data_preprocessor=dict(type='DataPreprocessor', mean=[0.], std=[255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=1)),\n    dict(type='PairedRandomCrop', gt_patch_size=128),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='grayscale',\n        imdecode_backend='cv2'),\n    dict(\n        type='RandomNoise',\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=1,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DFWB8550sub_GT.txt',\n        metainfo=dict(dataset_type='dfwb', task_name='denoising'),\n        data_root=data_root + '/DFWB',\n        data_prefix=dict(img='', gt=''),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set12', task_name='denoising'),\n        data_root=data_root + '/Set12',\n        data_prefix=dict(img='', gt=''),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', prefix='Set12'),\n    dict(type='SSIM', prefix='Set12'),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=1_600_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[800000, 1200000, 1400000, 1500000, 1600000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25.py",
    "content": "_base_ = ['swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py']\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN25'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 25\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['gaussian_sigma'] = [sigma, sigma]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n"
  },
  {
    "path": "configs/swinir/swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50.py",
    "content": "_base_ = ['swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN15.py']\n\nexperiment_name = 'swinir_s128w8d6e180_8xb1-lr2e-4-1600k_dfwb-grayDN50'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# modify sigma of RandomNoise\nsigma = 50\ntest_dataloader = _base_.test_dataloader\nfor dataloader in test_dataloader:\n    test_pipeline = dataloader['dataset']['pipeline']\n    test_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[-2]['params']['gaussian_sigma'] = [sigma, sigma]\n\nval_dataloader = _base_.val_dataloader\nval_pipeline = val_dataloader['dataset']['pipeline']\nval_pipeline[2]['params']['gaussian_sigma'] = [sigma, sigma]\n"
  },
  {
    "path": "configs/swinir/swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x2_test_config.py'\n]\n\nexperiment_name = 'swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\nimg_size = 48\n\n# evaluated on Y channels\ntest_evaluator = _base_.test_evaluator\nfor evaluator in test_evaluator:\n    for metric in evaluator['metrics']:\n        metric['convert_to'] = 'Y'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=scale,\n        in_chans=3,\n        img_size=img_size,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='pixelshuffle',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=img_size * scale),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', crop_border=scale),\n    dict(type='SSIM', crop_border=scale),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=500_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[250000, 400000, 450000, 475000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = ['swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x2s64w8d4e60_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\nimg_size = 64\n\n# model settings\nmodel = dict(\n    generator=dict(\n        img_size=img_size,\n        depths=[6, 6, 6, 6],\n        embed_dim=60,\n        num_heads=[6, 6, 6, 6],\n        upsampler='pixelshuffledirect'))\n\n# modify patch size of train_dataloader\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n"
  },
  {
    "path": "configs/swinir/swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k.py",
    "content": "_base_ = ['swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x2s64w8d6e180_8xb4-lr2e-4-500k_df2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 2\nimg_size = 64\n\n# model settings\nmodel = dict(generator=dict(img_size=img_size))\n\n# modify patch size of train_pipeline\ntrain_pipeline = _base_.train_pipeline\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DF2K3450sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DF2K',\n        data_prefix=dict(\n            img='DF2K_train_LR_bicubic/X2_sub', gt='DF2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n"
  },
  {
    "path": "configs/swinir/swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x3_test_config.py'\n]\n\nexperiment_name = 'swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 3\nimg_size = 48\n\n# evaluated on Y channels\ntest_evaluator = _base_.test_evaluator\nfor evaluator in test_evaluator:\n    for metric in evaluator['metrics']:\n        metric['convert_to'] = 'Y'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=scale,\n        in_chans=3,\n        img_size=img_size,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='pixelshuffle',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=img_size * scale),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X3_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', crop_border=scale),\n    dict(type='SSIM', crop_border=scale),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=500_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[250000, 400000, 450000, 475000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = ['swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x3s64w8d4e60_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 3\nimg_size = 64\n\n# model settings\nmodel = dict(\n    generator=dict(\n        img_size=img_size,\n        depths=[6, 6, 6, 6],\n        embed_dim=60,\n        num_heads=[6, 6, 6, 6],\n        upsampler='pixelshuffledirect'))\n\n# modify patch size of train_dataloader\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n"
  },
  {
    "path": "configs/swinir/swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k.py",
    "content": "_base_ = ['swinir_x3s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x3s64w8d6e180_8xb4-lr2e-4-500k_df2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 3\nimg_size = 64\n\n# model settings\nmodel = dict(generator=dict(img_size=img_size))\n\n# modify patch size of train_pipeline\ntrain_pipeline = _base_.train_pipeline\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DF2K3450sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DF2K',\n        data_prefix=dict(\n            img='DF2K_train_LR_bicubic/X3_sub', gt='DF2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n"
  },
  {
    "path": "configs/swinir/swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/sisr_x4_test_config.py'\n]\n\nexperiment_name = 'swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\nimg_size = 48\n\n# evaluated on Y channels\ntest_evaluator = _base_.test_evaluator\nfor evaluator in test_evaluator:\n    for metric in evaluator['metrics']:\n        metric['convert_to'] = 'Y'\n\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SwinIRNet',\n        upscale=scale,\n        in_chans=3,\n        img_size=img_size,\n        window_size=8,\n        img_range=1.0,\n        depths=[6, 6, 6, 6, 6, 6],\n        embed_dim=180,\n        num_heads=[6, 6, 6, 6, 6, 6],\n        mlp_ratio=2,\n        upsampler='pixelshuffle',\n        resi_connection='1conv'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=img_size * scale),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = [\n    dict(type='PSNR', crop_border=scale),\n    dict(type='SSIM', crop_border=scale),\n]\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=500_000, val_interval=5000)\nval_cfg = dict(type='ValLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[250000, 400000, 450000, 475000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/swinir/swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k.py",
    "content": "_base_ = ['swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x4s64w8d4e60_8xb4-lr2e-4-500k_div2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\nimg_size = 64\n\n# model settings\nmodel = dict(\n    generator=dict(\n        img_size=img_size,\n        depths=[6, 6, 6, 6],\n        embed_dim=60,\n        num_heads=[6, 6, 6, 6],\n        upsampler='pixelshuffledirect'))\n\n# modify patch size of train_dataloader\ntrain_dataloader = _base_.train_dataloader\ntrain_pipeline = train_dataloader['dataset']['pipeline']\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n"
  },
  {
    "path": "configs/swinir/swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k.py",
    "content": "_base_ = ['swinir_x4s48w8d6e180_8xb4-lr2e-4-500k_div2k.py']\n\nexperiment_name = 'swinir_x4s64w8d6e180_8xb4-lr2e-4-500k_df2k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\nimg_size = 64\n\n# model settings\nmodel = dict(generator=dict(img_size=img_size))\n\n# modify patch size of train_pipeline\ntrain_pipeline = _base_.train_pipeline\ntrain_pipeline[3]['gt_patch_size'] = img_size * scale\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=4,\n    drop_last=True,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DF2K3450sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DF2K',\n        data_prefix=dict(\n            img='DF2K_train_LR_bicubic/X4_sub', gt='DF2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),\n        pipeline=train_pipeline))\n"
  },
  {
    "path": "configs/tdan/README.md",
    "content": "# TDAN (CVPR'2020)\n\n> [TDAN: Temporally Deformable Alignment Network for Video Super-Resolution](https://arxiv.org/abs/1812.02898)\n\n> **Task**: Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nVideo super-resolution (VSR) aims to restore a photo-realistic high-resolution (HR) video frame from both its corresponding low-resolution (LR) frame (reference frame) and multiple neighboring frames (supporting frames). Due to varying motion of cameras or objects, the reference frame and each support frame are not aligned. Therefore, temporal alignment is a challenging yet important problem for VSR. Previous VSR methods usually utilize optical flow between the reference frame and each supporting frame to wrap the supporting frame for temporal alignment. Therefore, the performance of these image-level wrapping-based models will highly depend on the prediction accuracy of optical flow, and inaccurate optical flow will lead to artifacts in the wrapped supporting frames, which also will be propagated into the reconstructed HR video frame. To overcome the limitation, in this paper, we propose a temporal deformable alignment network (TDAN) to adaptively align the reference frame and each supporting frame at the feature level without computing optical flow. The TDAN uses features from both the reference frame and each supporting frame to dynamically predict offsets of sampling convolution kernels. By using the corresponding kernels, TDAN transforms supporting frames to align with the reference frame. To predict the HR video frame, a reconstruction network taking aligned frames and the reference frame is utilized. Experimental results demonstrate the effectiveness of the proposed TDAN-based VSR model.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144035224-a87cc41e-1352-4ffa-8b07-eda5ace8a0b1.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on Y-channel. 8 pixels in each border are cropped before evaluation.\nThe metrics are `PSNR / SSIM` .\n\n|                                 Model                                  |     Dataset     | PSNR (Y)  | SSIM (Y)  |    Training Resources    |                                 Download                                  |\n| :--------------------------------------------------------------------: | :-------------: | :-------: | :-------: | :----------------------: | :-----------------------------------------------------------------------: |\n| [tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi](./tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi.py) |        -        |     -     |     -     | 8 (Tesla V100-SXM2-32GB) |                                     -                                     |\n| [tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bd](./tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py) |        -        |     -     |     -     | 8 (Tesla V100-SXM2-32GB) |                                     -                                     |\n| [tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi](./tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py) |   Vid4 (BIx4)   | **26.49** | **0.792** | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528_135616.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi](./tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py) | SPMCS-30 (BIx4) | **30.42** | **0.856** | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528_135616.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi](./tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py) |   Vid4 (BDx4)   |   25.93   |   0.772   | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528_135616.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi](./tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py) | SPMCS-30 (BDx4) |   29.69   |   0.842   | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528_135616.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd](./tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py) |   Vid4 (BIx4)   |   25.80   |   0.784   | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528_122401.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd](./tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py) | SPMCS-30 (BIx4) |   29.56   |   0.851   | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528_122401.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd](./tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py) |   Vid4 (BDx4)   | **26.87** | **0.815** | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528_122401.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd](./tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py) | SPMCS-30 (BDx4) | **30.77** | **0.868** | 8 (Tesla V100-SXM2-32GB) | [model](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528_122401.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\nTDAN is trained with two stages.\n\n**Stage 1**: Train with a larger learning rate (1e-4)\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py\n\n# single-gpu train\npython tools/train.py configs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py\n\n# multi-gpu train\n./tools/dist_train.sh cconfigs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py 8\n```\n\n**Stage 2**: Fine-tune with a smaller learning rate (5e-5)\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py\n\n# single-gpu train\npython tools/train.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth\n\n# single-gpu test\npython tools/test.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@InProceedings{tian2020tdan,\n  title={TDAN: Temporally-Deformable Alignment Network for Video Super-Resolution},\n  author={Tian, Yapeng and Zhang, Yulun and Fu, Yun and Xu, Chenliang},\n  booktitle = {Proceedings of the IEEE conference on Computer Vision and Pattern Recognition},\n  year = {2020}\n}\n```\n"
  },
  {
    "path": "configs/tdan/README_zh-CN.md",
    "content": "# TDAN (CVPR'2020)\n\n> **任务**: 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">TDAN (CVPR'2020)</summary>\n\n```bibtex\n@InProceedings{tian2020tdan,\n  title={TDAN: Temporally-Deformable Alignment Network for Video Super-Resolution},\n  author={Tian, Yapeng and Zhang, Yulun and Fu, Yun and Xu, Chenliang},\n  booktitle = {Proceedings of the IEEE conference on Computer Vision and Pattern Recognition},\n  year = {2020}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的8像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                            算法                            |   Vid4 (BIx4)   | SPMCS-30 (BIx4) |   Vid4 (BDx4)   | SPMCS-30 (BDx4) |         GPU 信息         |                            下载                            |\n| :--------------------------------------------------------: | :-------------: | :-------------: | :-------------: | :-------------: | :----------------------: | :--------------------------------------------------------: |\n| [tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi](./tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi.py) |        -        |        -        |        -        |        -        | 8 (Tesla V100-SXM2-32GB) |                             -                              |\n| [tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bd](./tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py) |        -        |        -        |        -        |        -        | 8 (Tesla V100-SXM2-32GB) |                             -                              |\n| [tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi](./tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py) | **26.49/0.792** | **30.42/0.856** |   25.93/0.772   |   29.69/0.842   | 8 (Tesla V100-SXM2-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528_135616.log.json) |\n| [tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd](./tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py) |   25.80/0.784   |   29.56/0.851   | **26.87/0.815** | **30.77/0.868** | 8 (Tesla V100-SXM2-32GB) | [模型](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528_122401.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\nTDAN 训练有两个阶段。\n\n**阶段 1**: 以更大的学习率训练 (1e-4)\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py\n\n# 单个GPU上训练\npython tools/train.py configs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/tdan/tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi.py 8\n```\n\n**阶段 2**: 以较小的学习率进行微调 (5e-5)\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py\n\n# 单个GPU上训练\npython tools/train.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth\n\n# 单个GPU上测试\npython tools/test.py configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/tdan/tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi.py https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/tdan/metafile.yml",
    "content": "Collections:\n- Name: TDAN\n  Paper:\n    Title: 'TDAN: Temporally Deformable Alignment Network for Video Super-Resolution'\n    URL: https://arxiv.org/abs/1812.02898\n  README: configs/tdan/README.md\n  Task:\n  - video super-resolution\n  Year: 2020\nModels:\n- Config: configs/tdan/tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi.py\n  In Collection: TDAN\n  Name: tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Video Super-Resolution\n- Config: configs/tdan/tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py\n  In Collection: TDAN\n  Name: tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Video Super-Resolution\n- Config: configs/tdan/tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py\n  In Collection: TDAN\n  Name: tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi\n  Results:\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 26.49\n      SSIM (Y): 0.792\n    Task: Video Super-Resolution\n  - Dataset: SPMCS-30(BIx4)\n    Metrics:\n      PSNR (Y): 30.42\n      SSIM (Y): 0.856\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 25.93\n      SSIM (Y): 0.772\n    Task: Video Super-Resolution\n  - Dataset: SPMCS-30(BDx4)\n    Metrics:\n      PSNR (Y): 29.69\n      SSIM (Y): 0.842\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bix4_20210528-739979d9.pth\n- Config: configs/tdan/tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py\n  In Collection: TDAN\n  Name: tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd\n  Results:\n  - Dataset: Vid4(BIx4)\n    Metrics:\n      PSNR (Y): 25.8\n      SSIM (Y): 0.784\n    Task: Video Super-Resolution\n  - Dataset: SPMCS-30(BIx4)\n    Metrics:\n      PSNR (Y): 29.56\n      SSIM (Y): 0.851\n    Task: Video Super-Resolution\n  - Dataset: Vid4(BDx4)\n    Metrics:\n      PSNR (Y): 26.87\n      SSIM (Y): 0.815\n    Task: Video Super-Resolution\n  - Dataset: SPMCS-30(BDx4)\n    Metrics:\n      PSNR (Y): 30.77\n      SSIM (Y): 0.868\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/tdan/tdan_vimeo90k_bdx4_20210528-c53ab844.pth\n"
  },
  {
    "path": "configs/tdan/tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py",
    "content": "_base_ = [\n    '../_base_/default_runtime.py', '../_base_/datasets/tdan_test_config.py'\n]\n\nexperiment_name = 'tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\nscale = 4\n\n# model settings\nmodel = dict(\n    type='TDAN',\n    generator=dict(\n        type='TDANNet',\n        in_channels=3,\n        mid_channels=64,\n        out_channels=3,\n        num_blocks_before_align=5,\n        num_blocks_after_align=10),\n    pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n    lq_pixel_loss=dict(type='MSELoss', loss_weight=0.01, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.5 * 255, 0.5 * 255, 0.5 * 255],\n        std=[255, 255, 255],\n    ))\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='PSNR', crop_border=8, convert_to='Y'),\n        dict(type='SSIM', crop_border=8, convert_to='Y'),\n    ])\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=192),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateFrameIndiceswithPadding', padding='reflection'),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vimeo_seq', task_name='vsr'),\n        data_root=f'{data_root}/vimeo90k',\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_train_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        fixed_seq_len=7,\n        load_frames_list=dict(\n            img=['im2.png', 'im3.png', 'im4.png', 'im5.png', 'im6.png'],\n            gt=['im4.png']),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=f'{data_root}/Vid4',\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=val_pipeline))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=1e-4, weight_decay=1e-6),\n)\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=400_000, val_interval=50000)\nval_cfg = dict(type='MultiValLoop')\n\n# No learning policy\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=50000,\n        save_optimizer=True,\n        out_dir=save_dir,\n        by_epoch=False))\n"
  },
  {
    "path": "configs/tdan/tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi.py",
    "content": "_base_ = './tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py'\n\nexperiment_name = 'tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\ntrain_dataloader = dict(dataset=dict(data_prefix=dict(img='BIx4', gt='GT')))\n\nval_dataloader = dict(dataset=dict(data_prefix=dict(img='BIx4', gt='GT')))\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=400_000, val_interval=50000)\nval_cfg = dict(type='MultiValLoop')\n\n# No learning policy\n"
  },
  {
    "path": "configs/tdan/tdan_x4ft_8xb16-lr5e-5-400k_vimeo90k-bi.py",
    "content": "_base_ = './tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bi.py'\n\nexperiment_name = 'tdan_x4ft_1xb16-lr5e-5-400k_vimeo90k-bi'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(_delete_=True, type='Adam', lr=5e-5),\n)\n\n# load_from = 'tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bi/iter_400000.pth'\n"
  },
  {
    "path": "configs/tdan/tdan_x4ft_8xb16-lr5e-5-800k_vimeo90k-bd.py",
    "content": "_base_ = './tdan_x4_8xb16-lr1e-4-400k_vimeo90k-bd.py'\n\nexperiment_name = 'tdan_x4ft_1xb16-lr5e-5-800k_vimeo90k-bd'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type='OptimWrapper',\n    optimizer=dict(_delete_=True, type='Adam', lr=5e-5),\n)\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=800_000, val_interval=50000)\n\n# load_from = 'tdan_x4_1xb16-lr1e-4-400k_vimeo90k-bd/iter_400000.pth'\n"
  },
  {
    "path": "configs/textual_inversion/README.md",
    "content": "# Textual Inversion (2022)\n\n> [An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion](https://arxiv.org/abs/2208.01618)\n\n> **Task**: Text2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nText-to-image models offer unprecedented freedom to guide creation through natural language. Yet, it is unclear how such freedom can be exercised to generate images of specific unique concepts, modify their appearance, or compose them in new roles and novel scenes. In other words, we ask: how can we use language-guided models to turn our cat into a painting, or imagine a new product based on our favorite toy? Here we present a simple approach that allows such creative freedom. Using only 3-5 images of a user-provided concept, like an object or a style, we learn to represent it through new \"words\" in the embedding space of a frozen text-to-image model. These \"words\" can be composed into natural language sentences, guiding personalized creation in an intuitive way. Notably, we find evidence that a single word embedding is sufficient for capturing unique and varied concepts. We compare our approach to a wide range of baselines, and demonstrate that it can more faithfully portray the concepts across a range of applications and tasks.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/28132635/b2dac6f1-5151-4199-bcc2-71b5b1523a16\">\n</div>\n\n## Configs\n\n|                    Model                    | Dataset | Download |\n| :-----------------------------------------: | :-----: | :------: |\n| [Textual Inversion](./textual_inversion.py) |    -    |    -     |\n\n## Quick Start\n\n1. Download [data](https://drive.google.com/drive/folders/1fmJMs25nxS_rSNqS5hTcRdLem_YQXbq5) and [template](https://openxlab.org.cn/datasets/ferry/ViCo/tree/main)(two txt files)\n   and save to `data`\n\nThe file structure will be like this:\n\n```text\ndata\n└── cat_toy\n    ├── 1.jpeg\n    ├── 2.jpeg\n    ├── 3.jpeg\n    ├── 3.jpeg\n    ├── 4.jpeg\n    ├── 6.jpeg\n    └── 7.jpeg\n└── imagenet_templates_small.txt\n└── imagenet_style_templates_small.txt\n```\n\n2. Start training with the following command:\n\n```bash\nbash tools/dist_train.sh configs/textual_inversion/textual_inversion.py 1\n```\n\n<div align=\"center\">\n  <img src=\"https://github.com/open-mmlab/mmagic/assets/28132635/635a336c-fd6c-4c6f-b2c1-c1621420b9b9\" width=\"400\"/>\n  <br/>\n</div>\n\n3. Inference with trained textual embedding:\n\n```python\nimport torch\nfrom mmengine import Config\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef process_state_dict(state_dict):\n    new_state_dict = dict()\n    for k, v in state_dict.items():\n        new_k = k.replace('module.', '')\n        new_state_dict[new_k] = v\n\n    return new_state_dict\n\n\ncfg = Config.fromfile('configs/textual_inversion/textual_inversion.py')\ncheckpoint = torch.load('work_dirs/textual_inversion/iter_3000.pth')\nstate_dict = process_state_dict(checkpoint['state_dict'])\nmodel = MODELS.build(cfg.model)\nmodel.load_state_dict(state_dict)\n\nmodel = model.cuda()\nwith torch.no_grad():\n    sample = model.infer('a <cat-toy> bag')['samples'][0]\n\nsample.save('cat-toy-bag.png')\n```\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_controlnet.py).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@misc{gal2022textual,\n      doi = {10.48550/ARXIV.2208.01618},\n      url = {https://arxiv.org/abs/2208.01618},\n      author = {Gal, Rinon and Alaluf, Yuval and Atzmon, Yuval and Patashnik, Or and Bermano, Amit H. and Chechik, Gal and Cohen-Or, Daniel},\n      title = {An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion},\n      publisher = {arXiv},\n      year = {2022},\n      primaryClass={cs.CV}\n}\n\n```\n"
  },
  {
    "path": "configs/textual_inversion/metafile.yml",
    "content": "Collections:\n- Name: Textual Inversion\n  Paper:\n    Title: 'An Image is Worth One Word: Personalizing Text-to-Image Generation using\n      Textual Inversion'\n    URL: https://arxiv.org/abs/2208.01618\n  README: configs/textual_inversion/README.md\n  Task:\n  - text2image\n  Year: 2022\nModels:\n- Config: configs/textual_inversion/textual_inversion.py\n  In Collection: Textual Inversion\n  Name: textual_inversion\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n"
  },
  {
    "path": "configs/textual_inversion/textual_inversion.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\n# config for model\ndtype = 'fp16'\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nplaceholder_token = '<cat-toy>'\ninitialize_token = 'toy'\nnum_vectors_per_token = 1\nval_prompts = [\n    'a <cat-toy> on packbag', 'a <cat-toy> on sofa',\n    'a <cat-toy> in swimming pool', 'a <cat-toy>'\n]\n\nmodel = dict(\n    type='TextualInversion',\n    placeholder_token=placeholder_token,\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='unet'),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    initialize_token=initialize_token,\n    num_vectors_per_token=num_vectors_per_token,\n    val_prompts=val_prompts,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor', data_keys=None))\n\ntrain_cfg = dict(max_iters=3000)\n\noptim_wrapper = dict(\n    modules='.*trainable_embeddings',\n    optimizer=dict(type='AdamW', lr=5e-4),\n    accumulative_counts=1)\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='Resize', scale=(512, 512)),\n    dict(type='PackInputs')\n]\n\ndataset = dict(\n    type='TextualInversionDataset',\n    data_root='./data/',\n    concept_dir='cat_toy',\n    placeholder=placeholder_token,\n    template='data/imagenet_templates_small.txt',\n    pipeline=pipeline)\n\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\ndefault_hooks = dict(\n    logger=dict(interval=10),\n    checkpoint=dict(type='CheckpointHook', interval=10))\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=50,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "configs/tof/README.md",
    "content": "# TOFlow (IJCV'2019)\n\n> [Video Enhancement with Task-Oriented Flow](https://arxiv.org/abs/1711.09078)\n\n> **Task**: Video Interpolation, Video Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nMany video enhancement algorithms rely on optical flow to register frames in a video sequence. Precise flow estimation is however intractable; and optical flow itself is often a sub-optimal representation for particular video processing tasks. In this paper, we propose task-oriented flow (TOFlow), a motion representation learned in a self-supervised, task-specific manner. We design a neural network with a trainable motion estimation component and a video processing component, and train them jointly to learn the task-oriented flow. For evaluation, we build Vimeo-90K, a large-scale, high-quality video dataset for low-level video processing. TOFlow outperforms traditional optical flow on standard benchmarks as well as our Vimeo-90K dataset in three video processing tasks: frame interpolation, video denoising/deblocking, and video super-resolution.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144035477-2480d580-1409-4a7c-88d5-c13a3dbd62ac.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on Vimeo90k-triplet (RGB channels).\nThe metrics are `PSNR / SSIM` .\n\n|                   Model                   |     Dataset      |        Task         |                   Pretrained SPyNet                   |  PSNR   | Training Resources  |                   Download                    |\n| :---------------------------------------: | :--------------: | :-----------------: | :---------------------------------------------------: | :-----: | :-----------------: | :-------------------------------------------: |\n| [tof_vfi_spynet_chair_nobn_1xb1_vimeo90k](./tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Interpolation | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth) | 33.3294 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.log.json) |\n| [tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k](./tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Interpolation | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_kitti_20220321-dbcc1cc1.pth) | 33.3339 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.log.json) |\n| [tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Interpolation | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_clean_20220321-0756630b.pth) | 33.3170 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.log.json) |\n| [tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Interpolation | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_final_20220321-5e89dcec.pth) | 33.3237 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.log.json) |\n| [tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k](./tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Interpolation | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_pytoflow_20220321-5bab842d.pth) | 33.3426 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.log.json) |\n\n|                  Model                   |     Dataset      |          Task          |                   Pretrained SPyNet                   |  SSIM  | Training Resources  |                   Download                   |\n| :--------------------------------------: | :--------------: | :--------------------: | :---------------------------------------------------: | :----: | :-----------------: | :------------------------------------------: |\n| [tof_vfi_spynet_chair_nobn_1xb1_vimeo90k](./tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Super-Resolution | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth) | 0.9465 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.log.json) |\n| [tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k](./tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Super-Resolution | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_kitti_20220321-dbcc1cc1.pth) | 0.9466 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.log.json) |\n| [tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Super-Resolution | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_clean_20220321-0756630b.pth) | 0.9464 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.log.json) |\n| [tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Super-Resolution | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_final_20220321-5e89dcec.pth) | 0.9465 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.log.json) |\n| [tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k](./tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet.py) | Vimeo90k-triplet | Video Super-Resolution | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_pytoflow_20220321-5bab842d.pth) | 0.9467 | 1 (Tesla PG503-216) | [model](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.pth) \\| [log](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.log.json) |\n\nNote: These pretrained SPyNets don't contain BN layer since `batch_size=1`, which is consistent with `https://github.com/Coldog2333/pytoflow`.\n\nEvaluated on RGB channels.\nThe metrics are `PSNR / SSIM` .\n\n|                           Model                           | Dataset  |          Task          |       Vid4       | Training Resources |                                    Download                                     |\n| :-------------------------------------------------------: | :------: | :--------------------: | :--------------: | :----------------: | :-----------------------------------------------------------------------------: |\n| [tof_x4_vimeo90k_official](./tof_x4_official_vimeo90k.py) | vimeo90k | Video Super-Resolution | 24.4377 / 0.7433 |         -          | [model](https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\nTOF only supports video interpolation task for training now.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py\n\n# single-gpu train\npython tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\nTOF supports two tasks for testing.\n\n**Task 1**: Video Interpolation\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth\n\n# single-gpu test\npython tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth 8\n```\n\n**Task 2**: Video Super-Resolution\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth\n\n# single-gpu test\npython tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@article{xue2019video,\n  title={Video enhancement with task-oriented flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n"
  },
  {
    "path": "configs/tof/README_zh-CN.md",
    "content": "# TOFlow (IJCV'2019)\n\n> [Video Enhancement with Task-Oriented Flow](https://arxiv.org/abs/1711.09078)\n\n> **任务**: 视频插帧, 视频超分辨率\n\n<!-- [ALGORITHM] -->\n\n## 预训练模型测试结果\n\n在 RGB 通道上评估。\n评估指标 `PSNR / SSIM`。\n\n|                         算法                         |                        预训练 SPyNet                         | Vimeo90k-triplet |      GPU 信息       |                         下载                          |\n| :--------------------------------------------------: | :----------------------------------------------------------: | :--------------: | :-----------------: | :---------------------------------------------------: |\n| [tof_vfi_spynet_chair_nobn_1xb1_vimeo90k](./tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py) | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth) | 33.3294 / 0.9465 | 1 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.log.json) |\n| [tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k](./tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet.py) | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_kitti_20220321-dbcc1cc1.pth) | 33.3339 / 0.9466 | 1 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.log.json) |\n| [tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet.py) | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_clean_20220321-0756630b.pth) | 33.3170 / 0.9464 | 1 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.log.json) |\n| [tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k](./tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet.py) | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_sintel_final_20220321-5e89dcec.pth) | 33.3237 / 0.9465 | 1 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.log.json) |\n| [tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k](./tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet.py) | [spynet_chairs_final](https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_pytoflow_20220321-5bab842d.pth) | 33.3426 / 0.9467 | 1 (Tesla PG503-216) | [模型](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.pth) \\| [日志](https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.log.json) |\n\n注: 由于 `batch_size=1` 预训练的 SPyNet 不包含 BN 层，这与 `https://github.com/Coldog2333/pytoflow` 一致.\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\nTOF 的训练仅支持视频插帧任务。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py\n\n# 单个GPU上训练\npython tools/train.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\nTOF 的测试支持视频插帧和视频超分辨率两种任务。\n\n**任务 1**: 视频插帧\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth\n\n# 单个GPU上测试\npython tools/test.py configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py https://download.openmmlab.com/mmediting/video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth 8\n```\n\n**任务 2**: 视频超分辨率\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth\n\n# 单个GPU上测试\npython tools/test.py configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/tof/tof_x4_official_vimeo90k.py https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n\n## Citation\n\n```bibtex\n@article{xue2019video,\n  title={Video enhancement with task-oriented flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n"
  },
  {
    "path": "configs/tof/metafile.yml",
    "content": "Collections:\n- Name: TOFlow\n  Paper:\n    Title: Video Enhancement with Task-Oriented Flow\n    URL: https://arxiv.org/abs/1711.09078\n  README: configs/tof/README.md\n  Task:\n  - video interpolation\n  - video super-resolution\n  Year: 2019\nModels:\n- Config: configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py\n  In Collection: TOFlow\n  Name: tof_spynet-chair-wobn_1xb1_vimeo90k-triplet\n  Results:\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      PSNR: 33.3294\n    Task: Video Interpolation\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      SSIM: 0.9465\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_chair_nobn_1xb1_vimeo90k_20220321-2fc9e258.pth\n- Config: configs/tof/tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet.py\n  In Collection: TOFlow\n  Name: tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet\n  Results:\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      PSNR: 33.3339\n    Task: Video Interpolation\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      SSIM: 0.9466\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_kitti_nobn_1xb1_vimeo90k_20220321-3f7ca4cd.pth\n- Config: configs/tof/tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet.py\n  In Collection: TOFlow\n  Name: tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet\n  Results:\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      PSNR: 33.317\n    Task: Video Interpolation\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      SSIM: 0.9464\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_clean_nobn_1xb1_vimeo90k_20220321-6e52a6fd.pth\n- Config: configs/tof/tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet.py\n  In Collection: TOFlow\n  Name: tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet\n  Results:\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      PSNR: 33.3237\n    Task: Video Interpolation\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      SSIM: 0.9465\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_sintel_final_nobn_1xb1_vimeo90k_20220321-8ab70dbb.pth\n- Config: configs/tof/tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet.py\n  In Collection: TOFlow\n  Name: tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet\n  Results:\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      PSNR: 33.3426\n    Task: Video Interpolation\n  - Dataset: Vimeo90k-triplet\n    Metrics:\n      SSIM: 0.9467\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/video_interpolators/toflow/tof_vfi_spynet_pytoflow_nobn_1xb1_vimeo90k_20220321-5f4b243e.pth\n- Config: configs/tof/tof_x4_official_vimeo90k.py\n  In Collection: TOFlow\n  Name: tof_x4_official_vimeo90k\n  Results:\n  - Dataset: vimeo90k\n    Metrics:\n      Vid4:\n        PSNR: 24.4377\n        SSIM: 0.7433\n    Task: Video Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/tof/tof_x4_vimeo90k_official-a569ff50.pth\n"
  },
  {
    "path": "configs/tof/tof_spynet-chair-wobn_1xb1_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/models/base_tof.py'\n\nexperiment_name = 'tof_spynet-chair-wobn_1xb1_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# pretrained SPyNet\nload_pretrained_spynet = 'https://download.openmmlab.com/mmediting/' +\\\n    'video_interpolators/toflow/pretrained_spynet_chair_20220321-4d82e91b.pth'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='TOFlowVFINet',\n        flow_cfg=dict(norm_cfg=None, pretrained=load_pretrained_spynet)),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n        pad_size_divisor=16,\n        pad_mode='reflect',\n    ))\n"
  },
  {
    "path": "configs/tof/tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/models/base_tof.py'\n\nexperiment_name = 'tof_spynet-kitti-wobn_1xb1_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# pretrained SPyNet\nload_pretrained_spynet = 'https://download.openmmlab.com/mmediting/' +\\\n    'video_interpolators/toflow/pretrained_spynet_kitti_20220321-dbcc1cc1.pth'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='TOFlowVFINet',\n        flow_cfg=dict(norm_cfg=None, pretrained=load_pretrained_spynet)),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n        pad_size_divisor=16,\n        pad_mode='reflect',\n    ))\n"
  },
  {
    "path": "configs/tof/tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/models/base_tof.py'\n\nexperiment_name = 'tof_spynet-pytoflow-wobn_1xb1_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# pretrained SPyNet\nload_pretrained_spynet = 'https://download.openmmlab.com/mmediting/video_' +\\\n    'interpolators/toflow/pretrained_spynet_pytoflow_20220321-5bab842d.pth'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='TOFlowVFINet',\n        flow_cfg=dict(norm_cfg=None, pretrained=load_pretrained_spynet)),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n        pad_size_divisor=16,\n        pad_mode='reflect',\n    ))\n"
  },
  {
    "path": "configs/tof/tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/models/base_tof.py'\n\nexperiment_name = 'tof_spynet-sintel-wobn-clean_1xb1_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# pretrained SPyNet\nload_pretrained_spynet = 'https://download.openmmlab.com/mmediting/video_' +\\\n    'interpolators/toflow/pretrained_spynet_sintel_clean_20220321-0756630b.pth'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='TOFlowVFINet',\n        flow_cfg=dict(norm_cfg=None, pretrained=load_pretrained_spynet)),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n        pad_size_divisor=16,\n        pad_mode='reflect',\n    ))\n"
  },
  {
    "path": "configs/tof/tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet.py",
    "content": "_base_ = '../_base_/models/base_tof.py'\n\nexperiment_name = 'tof_spynet-sintel-wobn-final_1xb1_vimeo90k-triplet'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# pretrained SPyNet\nload_pretrained_spynet = 'https://download.openmmlab.com/mmediting/video_' +\\\n    'interpolators/toflow/pretrained_spynet_sintel_final_20220321-5e89dcec.pth'\n\n# model settings\nmodel = dict(\n    type='BasicInterpolator',\n    generator=dict(\n        type='TOFlowVFINet',\n        flow_cfg=dict(norm_cfg=None, pretrained=load_pretrained_spynet)),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    required_frames=2,\n    step_frames=1,\n    init_cfg=None,\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n        pad_size_divisor=16,\n        pad_mode='reflect',\n    ))\n"
  },
  {
    "path": "configs/tof/tof_x4_official_vimeo90k.py",
    "content": "# only testing the official model is supported\n_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'tof_x4_official_vimeo90k'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs'\n\n# model settings\nmodel = dict(\n    type='EDVR',  # use the shared model with EDVR\n    generator=dict(type='TOFlowVSRNet', adapt_official_weights=True),\n    pixel_loss=dict(type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0.485 * 255, 0.456 * 255, 0.406 * 255],\n        std=[0.229 * 255, 0.224 * 255, 0.225 * 255],\n    ))\n\nval_pipeline = [\n    dict(type='GenerateFrameIndiceswithPadding', padding='reflection_circle'),\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndemo_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ndata_root = 'data/Vid4'\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type='BasicFramesDataset',\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='BIx4up_direct', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        pipeline=val_pipeline))\n\n# TODO: data is not uploaded yet\n# test_dataloader = val_dataloader\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n# test_evaluator = val_evaluator\n\nval_cfg = dict(type='MultiValLoop')\n# test_cfg = dict(type='MultiTestLoop')\n"
  },
  {
    "path": "configs/ttsr/README.md",
    "content": "# TTSR (CVPR'2020)\n\n> [Learning Texture Transformer Network for Image Super-Resolution](https://arxiv.org/abs/2006.04139)\n\n> **Task**: Image Super-Resolution\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nWe study on image super-resolution (SR), which aims to recover realistic textures from a low-resolution (LR) image. Recent progress has been made by taking high-resolution images as references (Ref), so that relevant textures can be transferred to LR images. However, existing SR approaches neglect to use attention mechanisms to transfer high-resolution (HR) textures from Ref images, which limits these approaches in challenging cases. In this paper, we propose a novel Texture Transformer Network for Image Super-Resolution (TTSR), in which the LR and Ref images are formulated as queries and keys in a transformer, respectively. TTSR consists of four closely-related modules optimized for image generation tasks, including a learnable texture extractor by DNN, a relevance embedding module, a hard-attention module for texture transfer, and a soft-attention module for texture synthesis. Such a design encourages joint feature learning across LR and Ref images, in which deep feature correspondences can be discovered by attention, and thus accurate texture features can be transferred. The proposed texture transformer can be further stacked in a cross-scale way, which enables texture recovery from different levels (e.g., from 1x to 4x magnification). Extensive experiments show that TTSR achieves significant improvements over state-of-the-art approaches on both quantitative and qualitative evaluations.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/7676947/144035689-e5afa799-f469-40a0-aa94-0b84a46726a1.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\nEvaluated on CUFED dataset (RGB channels), `scale` pixels in each border are cropped before evaluation.\nThe metrics are `PSNR and SSIM` .\n\n|                                   Model                                    | Dataset | scale |  PSNR   |  SSIM  | Training Resources |                                      Download                                       |\n| :------------------------------------------------------------------------: | :-----: | :---: | :-----: | :----: | :----------------: | :---------------------------------------------------------------------------------: |\n| [ttsr-rec_x4_c64b16_g1_200k_CUFED](./ttsr-rec_x4c64b16_1xb9-200k_CUFED.py) |  CUFED  |  x4   | 25.2433 | 0.7491 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-rec_x4_c64b16_g1_200k_CUFED_20210525-b0dba584.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-rec_x4_c64b16_g1_200k_CUFED_20210525-b0dba584.log.json) |\n| [ttsr-gan_x4_c64b16_g1_500k_CUFED](./ttsr-gan_x4c64b16_1xb9-500k_CUFED.py) |  CUFED  |  x4   | 24.6075 | 0.7234 |    1 (TITAN Xp)    | [model](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth) \\| [log](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.log.json) |\n\n## Quick Start\n\n**Train**\n\n<details>\n<summary>Train Instructions</summary>\n\nYou can use the following commands to train a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu train\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py\n\n# single-gpu train\npython tools/train.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py\n\n# multi-gpu train\n./tools/dist_train.sh configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py 8\n```\n\nFor more details, you can refer to **Train a model** part in [train_test.md](/docs/en/user_guides/train_test.md#Train-a-model-in-MMagic).\n\n</details>\n\n**Test**\n\n<details>\n<summary>Test Instructions</summary>\n\nYou can use the following commands to test a model with cpu or single/multiple GPUs.\n\n```shell\n# cpu test\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth\n\n# single-gpu test\npython tools/test.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth\n\n# multi-gpu test\n./tools/dist_test.sh configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth 8\n```\n\nFor more details, you can refer to **Test a pre-trained model** part in [train_test.md](/docs/en/user_guides/train_test.md#Test-a-pre-trained-model-in-MMagic).\n\n</details>\n\n## Citation\n\n```bibtex\n@inproceedings{yang2020learning,\n  title={Learning texture transformer network for image super-resolution},\n  author={Yang, Fuzhi and Yang, Huan and Fu, Jianlong and Lu, Hongtao and Guo, Baining},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={5791--5800},\n  year={2020}\n}\n```\n"
  },
  {
    "path": "configs/ttsr/README_zh-CN.md",
    "content": "# TTSR (CVPR'2020)\n\n> **任务**: 图像超分辨率\n\n<!-- [ALGORITHM] -->\n\n<details>\n<summary align=\"right\">TTSR (CVPR'2020)</summary>\n\n```bibtex\n@inproceedings{yang2020learning,\n  title={Learning texture transformer network for image super-resolution},\n  author={Yang, Fuzhi and Yang, Huan and Fu, Jianlong and Lu, Hongtao and Guo, Baining},\n  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},\n  pages={5791--5800},\n  year={2020}\n}\n```\n\n</details>\n\n<br/>\n\n在 RGB 通道上进行评估，在评估之前裁剪每个边界中的 `scale` 像素。\n我们使用 `PSNR` 和 `SSIM` 作为指标。\n\n|                                    算法                                    | scale |      CUFED       |   GPU 信息   |                                             下载                                              |\n| :------------------------------------------------------------------------: | :---: | :--------------: | :----------: | :-------------------------------------------------------------------------------------------: |\n| [ttsr-rec_x4_c64b16_g1_200k_CUFED](./ttsr-rec_x4c64b16_1xb9-200k_CUFED.py) |  x4   | 25.2433 / 0.7491 | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-rec_x4_c64b16_g1_200k_CUFED_20210525-b0dba584.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-rec_x4_c64b16_g1_200k_CUFED_20210525-b0dba584.log.json) |\n| [ttsr-gan_x4_c64b16_g1_500k_CUFED](./ttsr-gan_x4c64b16_1xb9-500k_CUFED.py) |  x4   | 24.6075 / 0.7234 | 1 (TITAN Xp) | [模型](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth) \\| [日志](https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.log.json) |\n\n## 快速开始\n\n**训练**\n\n<details>\n<summary>训练说明</summary>\n\n您可以使用以下命令来训练模型。\n\n```shell\n# CPU上训练\nCUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py\n\n# 单个GPU上训练\npython tools/train.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py\n\n# 多个GPU上训练\n./tools/dist_train.sh configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Train a model** 部分。\n\n</details>\n\n**测试**\n\n<details>\n<summary>测试说明</summary>\n\n您可以使用以下命令来测试模型。\n\n```shell\n# CPU上测试\nCUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth\n\n# 单个GPU上测试\npython tools/test.py configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth\n\n# 多个GPU上测试\n./tools/dist_test.sh configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth 8\n```\n\n更多细节可以参考 [train_test.md](/docs/zh_cn/user_guides/train_test.md) 中的 **Test a pre-trained model** 部分。\n\n</details>\n"
  },
  {
    "path": "configs/ttsr/metafile.yml",
    "content": "Collections:\n- Name: TTSR\n  Paper:\n    Title: Learning Texture Transformer Network for Image Super-Resolution\n    URL: https://arxiv.org/abs/2006.04139\n  README: configs/ttsr/README.md\n  Task:\n  - image super-resolution\n  Year: 2020\nModels:\n- Config: configs/ttsr/ttsr-rec_x4c64b16_1xb9-200k_CUFED.py\n  In Collection: TTSR\n  Name: ttsr-rec_x4c64b16_1xb9-200k_CUFED\n  Results:\n  - Dataset: CUFED\n    Metrics:\n      PSNR: 25.2433\n      SSIM: 0.7491\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-rec_x4_c64b16_g1_200k_CUFED_20210525-b0dba584.pth\n- Config: configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py\n  In Collection: TTSR\n  Name: ttsr-gan_x4c64b16_1xb9-500k_CUFED\n  Results:\n  - Dataset: CUFED\n    Metrics:\n      PSNR: 24.6075\n      SSIM: 0.7234\n    Task: Image Super-Resolution\n  Weights: https://download.openmmlab.com/mmediting/restorers/ttsr/ttsr-gan_x4_c64b16_g1_500k_CUFED_20210626-2ab28ca0.pth\n"
  },
  {
    "path": "configs/ttsr/ttsr-gan_x4c64b16_1xb9-500k_CUFED.py",
    "content": "_base_ = './ttsr-rec_x4c64b16_1xb9-200k_CUFED.py'\n\nexperiment_name = 'ttsr-gan_x4c64b16_1xb9-500k_CUFED'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\nscale = 4\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\nmodel = dict(\n    type='TTSR',\n    generator=dict(\n        type='TTSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=(16, 16, 8, 4)),\n    extractor=dict(type='LTE'),\n    transformer=dict(type='SearchTransformer'),\n    discriminator=dict(type='TTSRDiscriminator', in_size=160),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    perceptual_loss=dict(\n        type='PerceptualLoss',\n        layer_weights={'29': 1.0},\n        vgg_type='vgg19',\n        perceptual_weight=1e-2,\n        style_weight=0,\n        criterion='mse'),\n    transferal_perceptual_loss=dict(\n        type='TransferalPerceptualLoss',\n        loss_weight=1e-2,\n        use_attention=False,\n        criterion='mse'),\n    gan_loss=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=1e-3,\n        real_label_val=1.0,\n        fake_label_val=0),\n    train_cfg=dict(pixel_init=25000, disc_repeat=2),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ))\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=500_000, val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n    extractor=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-5, betas=(0.9, 0.999))),\n    discriminator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-5, betas=(0.9, 0.999))))\n\n# learning policy\nparam_scheduler = dict(\n    _delete_=True,\n    type='MultiStepLR',\n    by_epoch=False,\n    milestones=[100000, 200000, 300000, 400000],\n    gamma=0.5)\n"
  },
  {
    "path": "configs/ttsr/ttsr-rec_x4c64b16_1xb9-200k_CUFED.py",
    "content": "_base_ = '../_base_/default_runtime.py'\n\nexperiment_name = 'ttsr-rec_x4c64b16_1xb9-200k_CUFED'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')\n\n# model settings\nmodel = dict(\n    type='TTSR',\n    generator=dict(\n        type='TTSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        num_blocks=(16, 16, 8, 4)),\n    extractor=dict(type='LTE'),\n    transformer=dict(type='SearchTransformer'),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    train_cfg=dict(),\n    test_cfg=dict(),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5, 127.5, 127.5],\n        std=[127.5, 127.5, 127.5],\n    ))\n\ntrain_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='ref',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='ModCrop', key='gt'),\n    dict(type='CropLike', target_key='ref', reference_key='gt'),\n    dict(\n        type='Resize',\n        scale=1 / scale,\n        keep_ratio=True,\n        keys=['gt', 'ref'],\n        output_keys=['img', 'ref_down'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=float(scale),\n        keep_ratio=True,\n        keys=['img', 'ref_down'],\n        output_keys=['img_lq', 'ref_lq'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Flip',\n        keys=['img', 'gt', 'img_lq'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip',\n        keys=['img', 'gt', 'img_lq'],\n        flip_ratio=0.5,\n        direction='vertical'),\n    dict(\n        type='RandomTransposeHW',\n        keys=['img', 'gt', 'img_lq'],\n        transpose_ratio=0.5),\n    dict(\n        type='Flip',\n        keys=['ref', 'ref_lq'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip',\n        keys=['ref', 'ref_lq'],\n        flip_ratio=0.5,\n        direction='vertical'),\n    dict(\n        type='RandomTransposeHW', keys=['ref', 'ref_lq'], transpose_ratio=0.5),\n    dict(type='PackInputs')\n]\nvalid_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='ref',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='ModCrop', key='gt'),\n    dict(type='CropLike', target_key='ref', reference_key='gt'),\n    dict(\n        type='Resize',\n        scale=1 / scale,\n        keep_ratio=True,\n        keys=['gt', 'ref'],\n        output_keys=['img', 'ref_down'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=float(scale),\n        keep_ratio=True,\n        keys=['img', 'ref_down'],\n        output_keys=['img_lq', 'ref_lq'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(type='PackInputs')\n]\ndemo_pipeline = [\n    dict(\n        type='LoadImageFromFile',\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type='LoadImageFromFile',\n        key='ref',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='ModCrop', key='img'),\n    dict(\n        type='Resize',\n        scale=1 / scale,\n        keep_ratio=True,\n        keys=['ref'],\n        output_keys=['ref_down'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(\n        type='Resize',\n        scale=float(scale),\n        keep_ratio=True,\n        keys=['img', 'ref_down'],\n        output_keys=['img_lq', 'ref_lq'],\n        interpolation='bicubic',\n        backend='pillow'),\n    dict(type='PackInputs')\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=9,\n    batch_size=9,\n    persistent_workers=False,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cufed', task_name='refsr'),\n        data_root=data_root + '/CUFED',\n        data_prefix=dict(ref='ref', gt='input'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=8,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='cufed', task_name='refsr'),\n        data_root=data_root + '/CUFED',\n        data_prefix=dict(ref='CUFED5', gt='CUFED5'),\n        filename_tmpl=dict(ref='{}_1', gt='{}_0'),\n        pipeline=valid_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(type='MAE'),\n        dict(type='PSNR', crop_border=scale),\n        dict(type='SSIM', crop_border=scale),\n    ])\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=200_000, val_interval=5000)\nval_cfg = dict(type='MultiValLoop')\ntest_cfg = dict(type='MultiTestLoop')\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999))),\n    extractor=dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-5, betas=(0.9, 0.999))))\n\n# learning policy\nparam_scheduler = dict(\n    type='MultiStepLR', by_epoch=False, milestones=[100000], gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n"
  },
  {
    "path": "configs/vico/README.md",
    "content": "# ViCo (2023)\n\n> [ViCo: Detail-Preserving Visual Condition for Personalized Text-to-Image Generation](https://arxiv.org/abs/2306.00971)\n\n> **Task**: Text2Image\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nPersonalized text-to-image generation using diffusion models has recently been proposed and attracted lots of attention. Given a handful of images containing a novel concept (e.g., a unique toy), we aim to tune the generative model to capture fine visual details of the novel concept and generate photorealistic images following a text condition. We present a plug-in method, named ViCo, for fast and lightweight personalized generation. Specifically, we propose an image attention module to condition the diffusion process on the patch-wise visual semantics. We introduce an attention-based object mask that comes almost at no cost from the attention module. In addition, we design a simple regularization based on the intrinsic properties of text-image attention maps to alleviate the common overfitting degradation. Unlike many existing models, our method does not finetune any parameters of the original diffusion model. This allows more flexible and transferable model deployment. With only light parameter training (~6% of the diffusion U-Net), our method achieves comparable or even better performance than all state-of-the-art models both qualitatively and quantitatively.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/haoosz/ViCo/assets/71176040/0ee95a57-fecf-4bba-bc64-eda46e5cc6d1\">\n</div>\n\n## Configs\n\n|       Model       | Dataset | Download |\n| :---------------: | :-----: | :------: |\n| [ViCo](./vico.py) |    -    |    -     |\n\n## Quick Start\n\n1. Download concept data and imagenet_templates_small.txt from [here](https://openxlab.org.cn/datasets/ferry/ViCo/tree/main).\n   and save to `data/vico/`\n\nThe file structure will be like this:\n\n```text\ndata\n└── vico\n    └──batman\n       ├── 1.jpg\n       ├── 2.jpg\n       ├── 3.jpg\n       └── 4.jpg\n    └──clock\n       ├── 1.jpg\n       ├── 2.jpg\n       ├── 3.jpg\n       └── 4.jpg\n    ...\n    └──imagenet_templates_small.txt\n```\n\n2. Customize your config\n\n```\n# Only need to care about these\n\n# which concept you want to customize\nconcept_dir = 'dog7'\n\n# the new token to denote the concept\nplaceholder: str = 'S*'\n\n# better to be the superclass of concept\ninitialize_token: str = 'dog'\n```\n\n3. Start training with the following command:\n\n```bash\n# 4 GPUS\nbash tools/dist_train.sh configs/vico/vico.py 4\n# 1 GPU\npython tools/train.py configs/vico/vico.py\n```\n\n4. Use the [pretrained checkpoins](https://openxlab.org.cn/models/detail/ferry/ViCo) to inference\n\n```python\nimport torch\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n# say you have downloaded the pretrained weights\ncfg = Config.fromfile('configs/vico/dog.py')\nstate_dict = torch.load(\"./dog.pth\")\nvico = MODELS.build(cfg.model)\nvico.load_state_dict(state_dict, strict=False)\nvico = vico.cuda()\n\nprompt = [\"A photo of S*\", \"A photo of S* on the beach\"]\nreference = \"data/vico/dog7/01.jpg\"\nimage_ref = Image.open(reference)\nwith torch.no_grad():\n    output = vico.infer(prompt=prompt, image_reference=image_ref, seed=123, num_images_per_prompt=2)['samples'][0]\noutput.save(\"infer.png\")\n```\n\n5. (Optional) If you want to use the weight trained by the\n   commands at step3, here are codes to extract the trained parameters, then you can infer with it like step4\n\n```python\nimport torch\ndef extract_vico_parameters(state_dict):\n    new_state_dict = dict()\n    for k, v in state_dict.items():\n        if 'image_cross_attention' in k or 'trainable_embeddings' in k:\n            new_k = k.replace('module.', '')\n            new_state_dict[new_k] = v\n    return new_state_dict\n\ncheckpoint = torch.load(\"work_dirs/vico/iter_400.pth\")\nnew_checkpoint = extract_vico_parameters(checkpoint['state_dict'])\ntorch.save(new_checkpoint, \"work_dirs/vico/dog.pth\")\n```\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://github.com/open-mmlab/mmagic/assets/71176040/58a6953c-053a-40ea-8826-eee428c992b5\" width=\"800\"/>\n  <br/>\n  <b>'vico'</b>\n</thead>\n</table>\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_controlnet.py).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@inproceedings{Hao2023ViCo,\n  title={ViCo: Detail-Preserving Visual Condition for Personalized Text-to-Image Generation},\n  author={Shaozhe Hao and Kai Han and Shihao Zhao and Kwan-Yee K. Wong},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/vico/README_zh-CN.md",
    "content": "# ViCo (2023)\n\n> [ViCo: Detail-Preserving Visual Condition for Personalized Text-to-Image Generation](https://arxiv.org/abs/2306.00971)\n\n> **Task**: 文本图像生成\n\n<!-- [ALGORITHM] -->\n\n## 摘要\n\n<!-- [ABSTRACT] -->\n\n最近，个性化文本到图像生成使用扩散模型的方法被提出，并引起了广泛关注。给定包含新概念（例如独特的玩具）的少量图像，我们旨在调整生成模型，以捕捉新概念的精细视觉细节，并根据文本条件生成逼真的图像。我们提出了一种名为ViCo的插件方法，用于快速轻量级个性化生成。具体而言，我们提出了一个图像注意力模块，以对基于补丁的视觉语义进行扩散过程的条件建模。我们引入了一种基于注意力模块的对象蒙版，几乎没有额外计算成本。此外，我们设计了一个简单的正则化方法，基于文本-图像注意力图的内在属性，以减轻常见的过拟合退化问题。与许多现有模型不同，我们的方法不对原始扩散模型的任何参数进行微调。这使得模型的部署更加灵活和可转移。通过仅进行轻量级参数训练（约为扩散U-Net的6%），我们的方法在质量和数量上都达到了与所有最先进模型相当甚至更好的性能。\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://github.com/haoosz/ViCo/assets/71176040/0ee95a57-fecf-4bba-bc64-eda46e5cc6d1\">\n</div>\n\n## 模型结构\n\n|       模型        |                                  数据集                                   | 下载 |\n| :---------------: | :-----------------------------------------------------------------------: | :--: |\n| [ViCo](./vico.py) | [textual_inversion_dataset](mmagic/datasets/textual_inversion_dataset.py) |  -   |\n\n## Quick Start\n\n1. 下载 [数据集](https://drive.google.com/drive/folders/1m8TCsY-C1tIOflHtWnFzTbw2C6dq67mC) 和 [模板](https://drive.google.com/drive/folders/1SpByLKECISmj5fhkaicT4yrsyqqpWL_T)\n   and save to `data/vico/`\n\n文件夹结构应如下:\n\n```text\ndata\n└── vico\n    └──batman\n       ├── 1.jpg\n       ├── 2.jpg\n       ├── 3.jpg\n       └── 4.jpg\n    └──clock\n       ├── 1.jpg\n       ├── 2.jpg\n       ├── 3.jpg\n       └── 4.jpg\n    ...\n    └──imagenet_templates_small.txt\n```\n\n2. 自定义你自己的config文件\n\n```\n# 请关注以下需自定义的内容\n\n# 设置concept文件夹名\nconcept_dir = 'dog7'\n\n# 设置代表这个concept的新字符\nplaceholder: str = 'S*'\n\n# 初始化字符，最好是设置这个concept所属的类别\ninitialize_token: str = 'dog'\n```\n\n3. 使用以下命令进行**训练**:\n\n```bash\n# 4 GPUS\nbash tools/dist_train.sh configs/vico/vico.py 4\n# 1 GPU\npython tools/train.py configs/vico/vico.py\n```\n\n4. 使用 [预训练的权重](https://drive.google.com/drive/folders/1GQGVzzOP2IgEfsQ-6ii6o2DqElnFThHM) 进行**推理**\n\n```python\nimport torch\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n# say you have downloaded the pretrained weights\ncfg = Config.fromfile('configs/vico/dog.py')\nstate_dict = torch.load(\"./dog.pth\")\nvico = MODELS.build(cfg.model)\nvico.load_state_dict(state_dict, strict=False)\nvico = vico.cuda()\n\nprompt = [\"A photo of S*\", \"A photo of S* on the beach\"]\nreference = \"data/vico/dog7/01.jpg\"\nimage_ref = Image.open(reference)\nwith torch.no_grad():\n    output = vico.infer(prompt=prompt, image_reference=image_ref, seed=123, num_images_per_prompt=2)['samples'][0]\noutput.save(\"infer.png\")\n```\n\n5. (可选) 如果你想使用第3步训练得到的checkpoint进行推理，可以先使用以下脚本将训练过的参数提取出来（文件大小会轻量很多），再使用第4步进行推理\n\n```python\nimport torch\ndef extract_vico_parameters(state_dict):\n    new_state_dict = dict()\n    for k, v in state_dict.items():\n        if 'image_cross_attention' in k or 'trainable_embeddings' in k:\n            new_k = k.replace('module.', '')\n            new_state_dict[new_k] = v\n    return new_state_dict\n\ncheckpoint = torch.load(\"work_dirs/vico/iter_400.pth\")\nnew_checkpoint = extract_vico_parameters(checkpoint['state_dict'])\ntorch.save(new_checkpoint, \"work_dirs/vico/dog.pth\")\n```\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://github.com/open-mmlab/mmagic/assets/71176040/58a6953c-053a-40ea-8826-eee428c992b5\" width=\"800\"/>\n  <br/>\n  <b>'vico'</b>\n</thead>\n</table>\n\n## Comments\n\nOur codebase for the stable diffusion models builds heavily on [diffusers codebase](https://github.com/huggingface/diffusers) and the model weights are from [stable-diffusion-1.5](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_controlnet.py).\n\nThanks for the efforts of the community!\n\n## Citation\n\n```bibtex\n@inproceedings{Hao2023ViCo,\n  title={ViCo: Detail-Preserving Visual Condition for Personalized Text-to-Image Generation},\n  author={Shaozhe Hao and Kai Han and Shihao Zhao and Kwan-Yee K. Wong},\n  year={2023}\n}\n```\n"
  },
  {
    "path": "configs/vico/metafile.yml",
    "content": "Collections:\n- Name: ViCo\n  Paper:\n    Title: 'ViCo: Detail-Preserving Visual Condition for Personalized Text-to-Image\n      Generation'\n    URL: https://arxiv.org/abs/2306.00971\n  README: configs/vico/README.md\n  Task:\n  - text2image\n  Year: 2023\nModels:\n- Config: configs/vico/vico.py\n  In Collection: ViCo\n  Name: vico\n  Results:\n  - Dataset: '-'\n    Metrics: {}\n    Task: Text2Image\n"
  },
  {
    "path": "configs/vico/vico.py",
    "content": "_base_ = '../_base_/gen_default_runtime.py'\n\nrandomness = dict(seed=2023, diff_rank_seed=True)\n# dtype=\"fp32\"\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\ndata_root = './data/vico'\nconcept_dir = 'dog7'\n\n# 1 for using image cross\nimage_cross_layers = [\n    # down blocks (2x transformer block) * (3x down blocks) = 6\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    # mid block (1x transformer block) * (1x mid block)= 1\n    0,\n    # up blocks (3x transformer block) * (3x up blocks) = 9\n    0,\n    1,\n    0,\n    1,\n    0,\n    1,\n    0,\n    1,\n    0,\n]\nreg_loss_weight: float = 5e-4\nplaceholder: str = 'S*'\nval_prompts = ['a photo of a S*']\ninitialize_token: str = 'dog'\nnum_vectors_per_token: int = 1\n\nmodel = dict(\n    type='ViCo',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_v15_url),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    # dtype=dtype,\n    data_preprocessor=dict(type='DataPreprocessor', data_keys=None),\n    image_cross_layers=image_cross_layers,\n    reg_loss_weight=reg_loss_weight,\n    placeholder=placeholder,\n    initialize_token=initialize_token,\n    num_vectors_per_token=num_vectors_per_token,\n    val_prompts=val_prompts)\n\ntrain_cfg = dict(max_iters=500)\n\nparamwise_cfg = dict(\n    custom_keys={\n        'image_cross_attention': dict(lr_mult=2e-3),\n        'trainable_embeddings': dict(lr_mult=1.0)\n    })\noptim_wrapper = dict(\n    optimizer=dict(type='AdamW', lr=0.005, weight_decay=0.01),\n    constructor='DefaultOptimWrapperConstructor',\n    paramwise_cfg=paramwise_cfg,\n    accumulative_counts=1)\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='img_ref', channel_order='rgb'),\n    dict(type='Resize', keys=['img', 'img_ref'], scale=(512, 512)),\n    dict(\n        type='PackInputs',\n        keys=['img', 'img_ref'],\n        data_keys='prompt',\n        meta_keys=[\n            'img_channel_order', 'img_color_type', 'img_ref_channel_order',\n            'img_ref_color_type'\n        ])\n]\ndataset = dict(\n    type='TextualInversionDataset',\n    data_root=data_root,\n    concept_dir=concept_dir,\n    placeholder=placeholder,\n    template='data/vico/imagenet_templates_small.txt',\n    with_image_reference=True,\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks = dict(logger=dict(interval=10))\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=50,\n        fixed_input=True,\n        # visualize train dataset\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "configs/wgan-gp/README.md",
    "content": "# WGAN-GP (NeurIPS'2017)\n\n> [Improved Training of Wasserstein GANs](https://arxiv.org/abs/1704.00028)\n\n> **Task**: Unconditional GANs\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nGenerative Adversarial Networks (GANs) are powerful generative models, but suffer from training instability. The recently proposed Wasserstein GAN (WGAN) makes progress toward stable training of GANs, but sometimes can still generate only low-quality samples or fail to converge. We find that these problems are often due to the use of weight clipping in WGAN to enforce a Lipschitz constraint on the critic, which can lead to undesired behavior. We propose an alternative to clipping weights: penalize the norm of gradient of the critic with respect to its input. Our proposed method performs better than standard WGAN and enables stable training of a wide variety of GAN architectures with almost no hyperparameter tuning, including 101-layer ResNets and language models over discrete data. We also achieve high quality generations on CIFAR-10 and LSUN bedrooms.\n\n<!-- [IMAGE] -->\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/28132635/143154792-de359728-101b-4ad1-90c0-ef3c1572d184.png\"/>\n</div>\n\n## Results and models\n\n<div align=\"center\">\n  <b> WGAN-GP 128, CelebA-Cropped</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/12726765/113997469-c00e3f00-988a-11eb-81dc-19b05698b74b.png\" width=\"800\"/>\n</div>\n\n|                              Model                               |    Dataset     |      Details       |              SWD              | MS-SSIM |                               Download                               |\n| :--------------------------------------------------------------: | :------------: | :----------------: | :---------------------------: | :-----: | :------------------------------------------------------------------: |\n| [WGAN-GP 128](./wgangp_GN_1xb64-160kiters_celeba-cropped-128x128.py) | CelebA-Cropped |         GN         | 5.87, 9.76, 9.43, 18.84/10.97 | 0.2601  | [model](https://download.openmmlab.com/mmediting/wgangp/wgangp_GN_celeba-cropped_128_b64x1_160k_20210408_170611-f8a99336.pth) |\n| [WGAN-GP 128](./wgangp_GN-GP-50_1xb64-160kiters_lsun-bedroom-128x128.py) |  LSUN-Bedroom  | GN, GP-lambda = 50 | 11.7, 7.87, 9.82, 25.36/13.69 |  0.059  | [model](https://download.openmmlab.com/mmediting/wgangp/wgangp_GN_GP-50_lsun-bedroom_128_b64x1_130k_20210408_170509-56f2a37c.pth) |\n\n## Citation\n\n```latex\n@article{gulrajani2017improved,\n  title={Improved Training of Wasserstein GANs},\n  author={Gulrajani, Ishaan and Ahmed, Faruk and Arjovsky, Martin and Dumoulin, Vincent and Courville, Aaron},\n  journal={arXiv preprint arXiv:1704.00028},\n  year={2017},\n  url={https://arxiv.org/abs/1704.00028},\n}\n```\n"
  },
  {
    "path": "configs/wgan-gp/metafile.yml",
    "content": "Collections:\n- Name: WGAN-GP\n  Paper:\n    Title: Improved Training of Wasserstein GANs\n    URL: https://arxiv.org/abs/1704.00028\n  README: configs/wgan-gp/README.md\n  Task:\n  - unconditional gans\n  Year: 2017\nModels:\n- Config: configs/wgan-gp/wgangp_GN_1xb64-160kiters_celeba-cropped-128x128.py\n  In Collection: WGAN-GP\n  Name: wgangp_GN_1xb64-160kiters_celeba-cropped-128x128\n  Results:\n  - Dataset: CelebA-Cropped\n    Metrics:\n      MS-SSIM: 0.2601\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/wgangp/wgangp_GN_celeba-cropped_128_b64x1_160k_20210408_170611-f8a99336.pth\n- Config: configs/wgan-gp/wgangp_GN-GP-50_1xb64-160kiters_lsun-bedroom-128x128.py\n  In Collection: WGAN-GP\n  Name: wgangp_GN-GP-50_1xb64-160kiters_lsun-bedroom-128x128\n  Results:\n  - Dataset: LSUN-Bedroom\n    Metrics:\n      MS-SSIM: 0.059\n    Task: Unconditional GANs\n  Weights: https://download.openmmlab.com/mmediting/wgangp/wgangp_GN_GP-50_lsun-bedroom_128_b64x1_130k_20210408_170509-56f2a37c.pth\n"
  },
  {
    "path": "configs/wgan-gp/wgangp_GN-GP-50_1xb64-160kiters_lsun-bedroom-128x128.py",
    "content": "_base_ = ['./wgangp_GN_1xb64-160kiters_celeba-cropped-128x128.py']\n\nloss_config = dict(gp_norm_mode='HWC', gp_loss_weight=50)\nmodel = dict(loss_config=loss_config)\n\nbatch_size = 64\ndata_root = './data/lsun/images/bedroom_train'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n"
  },
  {
    "path": "configs/wgan-gp/wgangp_GN_1xb64-160kiters_celeba-cropped-128x128.py",
    "content": "_base_ = [\n    '../_base_/datasets/unconditional_imgs_128x128.py',\n    '../_base_/gen_default_runtime.py',\n]\n\n# MODEL\nloss_config = dict(gp_norm_mode='HWC', gp_loss_weight=10)\nmodel = dict(\n    type='WGANGP',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(type='WGANGPGenerator', noise_size=128, out_scale=128),\n    discriminator=dict(\n        type='WGANGPDiscriminator',\n        in_channel=3,\n        in_scale=128,\n        conv_module_cfg=dict(\n            conv_cfg=None,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            bias=True,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n            norm_cfg=dict(type='GN'),\n            order=('conv', 'norm', 'act'))),\n    discriminator_steps=5,\n    loss_config=loss_config)\n\n# `batch_size` and `data_root` need to be set.\nbatch_size = 64\ndata_root = './data/celeba-cropped/cropped_images_aligned_png/'\ntrain_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader = dict(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader = dict(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = dict(max_iters=160000)\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.9))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.5, 0.9))))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig'),\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 128, 128))\n]\n\n# save multi best checkpoints\ndefault_hooks = dict(checkpoint=dict(save_best='swd/avg'))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "demo/README.md",
    "content": "# MMagic Demo\n\nThere are some mmagic demos in this folder. We provide python command line usage here to run these demos and more guidance could also be found in the [documentation](https://mmagic.readthedocs.io/en/latest/user_guides/inference.html)\n\nTable of contents:\n\n[1. Download sample images or videos](#1-download-sample-images-or-videos)\n\n[2. MMagic inference demo](#2-mmagic-inference-demo)\n\n&#8195;    [2.1. Check supported tasks and models](#21-check-supported-tasks-and-models)\n\n&#8195;    [2.2. Perform inference with command line](#22-perform-inference-with-command-line)\n\n&#8195;      [2.2.1. Text-to-Image example](#221-text-to-image)\n\n&#8195;      [2.2.2. Conditional GANs example](#222-conditional-gans)\n\n&#8195;      [2.2.3. Unconditional GANs example](#223-unconditional-gans)\n\n&#8195;      [2.2.4. Image Translation (Image2Image) example](#224-image-translation)\n\n&#8195;      [2.2.5. Inpainting example](#225-inpainting)\n\n&#8195;      [2.2.6. Matting example](#226-matting)\n\n&#8195;      [2.2.7. Image Restoration example](#227-image-restoration)\n\n&#8195;      [2.2.8. Image Super-Resolution example](#228-image-super-resolution)\n\n&#8195;      [2.2.9. Video Super-Resolution example](#229-video-super-resolution)\n\n&#8195;      [2.2.10. Video Interpolation example](#2210-video-interpolation)\n\n&#8195;      [2.2.11. Image Colorization example](#2211-image-colorization)\n\n&#8195;      [2.2.12. 3D-aware Generation example](#2212-3d-aware-generation)\n\n[3. Other demos](#3-other-demos)\n\n&#8195;    [3.1. Gradio demo](#31-gradio-demo)\n\n&#8195;      [3.1.1. DragGAN](#311-draggan)\n\n&#8195;      [3.1.2. ViCo](#312-vico)\n\n&#8195;      [3.1.3. FastComposer](#313-fastcomposer)\n\n&#8195;      [3.1.4. AnimateDiff](#314-animatediff)\n\n## 1. Download sample images or videos\n\nWe prepared some images and videos for you to run demo with. After MMagic is well installed, you could use demos in this folder to infer these data.\nDownload with python script [download_inference_resources.py](./download_inference_resources.py).\n\n```shell\n# see all resources\npython demo/download_inference_resources.py --print-all\n\n# see all task types\npython demo/download_inference_resources.py --print-task-type\n\n# see resources of one specific task\npython demo/download_inference_resources.py --print-task 'Inpainting'\n\n# download all resources to default dir './resources'\npython demo/download_inference_resources.py\n\n# download resources of one task\npython demo/download_inference_resources.py --task 'Inpainting'\n\n# download to the directory you want\npython demo/download_inference_resources.py --root-dir './resources'\n```\n\n## 2. MMagic inference demo\n\n### 2.1 Check supported tasks and models\n\nprint all supported models for inference.\n\n```shell\npython demo/mmagic_inference_demo.py --print-supported-models\n```\n\nprint all supported tasks for inference.\n\n```shell\npython demo/mmagic_inference_demo.py --print-supported-tasks\n```\n\nprint all supported models for one task, take 'Image2Image' for example.\n\n```shell\npython demo/mmagic_inference_demo.py --print-task-supported-models 'Text2Image'\n```\n\n### 2.2 Perform inference with command line\n\nYou can use the following commands to perform inference with a MMagic model.\n\nUsage of python API can also be found in this [tutotial](./mmagic_inference_tutorial.ipynb).\n\n```shell\npython demo/mmagic_inference_demo.py \\\n    [--img] \\\n    [--video] \\\n    [--label] \\\n    [--trimap] \\\n    [--mask] \\\n    [--result-out-dir] \\\n    [--model-name] \\\n    [--model-setting] \\\n    [--model-config] \\\n    [--model-ckpt] \\\n    [--device ] \\\n    [--extra-parameters]\n```\n\nExamples for each kind of task:\n\n#### 2.2.1 Text-to-Image\n\nstable diffusion\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name stable_diffusion \\\n        --text \"A panda is having dinner at KFC\" \\\n        --result-out-dir demo_text2image_stable_diffusion_res.png\n```\n\ncontrolnet-canny\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 1 \\\n        --text \"Room with blue walls and a yellow ceiling.\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png' \\\n        --result-out-dir demo_text2image_controlnet_canny_res.png\n```\n\ncontrolnet-pose\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 2 \\\n        --text \"masterpiece, best quality, sky, black hair, skirt, sailor collar, looking at viewer, short hair, building, bangs, neckerchief, long sleeves, cloudy sky, power lines, shirt, cityscape, pleated skirt, scenery, blunt bangs, city, night, black sailor collar, closed mouth\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230380893-2eae68af-d610-4f7f-aa68-c2f22c2abf7e.png' \\\n        --result-out-dir demo_text2image_controlnet_pose_res.png\n```\n\ncontrolnet-seg\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 3 \\\n        --text \"black house, blue sky\" \\\n        --control 'https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/243599897-553a4c46-c61d-46df-b820-59a49aaf6678.png' \\\n        --result-out-dir demo_text2image_controlnet_seg_res.png\n```\n\n#### 2.2.2 Conditional GANs\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name biggan \\\n        --model-setting 3 \\\n        --label 1 \\\n        --result-out-dir demo_conditional_biggan_res.jpg\n```\n\n#### 2.2.3 Unconditional GANs\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name styleganv1 \\\n        --result-out-dir demo_unconditional_styleganv1_res.jpg\n```\n\n#### 2.2.4 Image Translation\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name pix2pix \\\n        --img ./resources/input/translation/gt_mask_0.png \\\n        --result-out-dir ./resources/output/translation/demo_translation_pix2pix_res.png\n```\n\n#### 2.2.5 Inpainting\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name deepfillv2  \\\n        --img ./resources/input/inpainting/celeba_test.png \\\n        --mask ./resources/input/inpainting/bbox_mask.png \\\n        --result-out-dir ./resources/output/inpainting/demo_inpainting_deepfillv2_res.jpg\n```\n\n#### 2.2.6 Matting\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name aot_gan  \\\n        --img ./resources/input/matting/GT05.jpg \\\n        --trimap ./resources/input/matting/GT05_trimap.jpg \\\n        --result-out-dir ./resources/output/matting/demo_matting_gca_res.png\n```\n\n#### 2.2.7 Image Restoration\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name nafnet \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_nafnet_res.png\n```\n\n#### 2.2.8 Image Super-resolution\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name esrgan \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_esrgan_res.png\n```\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name ttsr \\\n        --img ./resources/input/restoration/000001.png \\\n        --ref ./resources/input/restoration/000001.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_ttsr_res.png\n```\n\n#### 2.2.9 Video Super-Resolution\n\nBasicVSR / BasicVSR++ / IconVSR / RealBasicVSR\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name basicvsr \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_basicvsr_res.mp4\n```\n\nEDVR\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name edvr \\\n        --extra-parameters window_size=5 \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_edvr_res.mp4\n```\n\nTDAN\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name tdan \\\n        --model-setting 2 \\\n        --extra-parameters window_size=5 \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_tdan_res.mp4\n```\n\n#### 2.2.10 Video interpolation\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name flavr \\\n        --video ./resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4 \\\n        --result-out-dir ./resources/output/video_interpolation/demo_video_interpolation_flavr_res.mp4\n```\n\n#### 2.2.11 Image Colorization\n\n```\npython demo/mmagic_inference_demo.py \\\n        --model-name inst_colorization \\\n        --img https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg \\\n        --result-out-dir demo_colorization_res.png\n```\n\n#### 2.2.12 3D-aware Generation\n\n```shell\npython demo/mmagic_inference_demo.py \\\n    --model-name eg3d \\\n    --result-out-dir ./resources/output/eg3d-output\n```\n\n## 3. Other demos\n\n## 3.1 gradio demo\n\n#### 3.1.1 DragGAN\n\nFirst, put your checkpoint path in `./checkpoints`, *e.g.* `./checkpoints/stylegan2_lions_512_pytorch_mmagic.pth`. For example,\n\n```shell\nmkdir checkpoints\ncd checkpoints\nwget -O stylegan2_lions_512_pytorch_mmagic.pth https://download.openxlab.org.cn/models/qsun1/DragGAN-StyleGAN2-checkpoint/weight//StyleGAN2-Lions-internet\n```\n\nThen, try on the script:\n\n```shell\npython demo/gradio_draggan.py\n```\n\n#### 3.1.2 ViCo\n\nLaunch the UI.\n\n```shell\npython demo/gradio_vico.py\n```\n\n*Training*\n\n1. Submit your concept sample images to the interface and fill in the *init_token* and *placeholder*.\n\n2. Click the *Start Training* button.\n\n3. Your training results will be under the folder `./work_dirs/vico_gradio`.\n\n*Inference*\n\nFollow the [instructions](../configs/vico/README.md#quick-start#4) to download the pretrained weights (or [use your own weights](../configs/vico/README.md#quick-start#5)) and put them under the folder `./ckpts`\n\n```\nmkdir ckpts\n```\n\nyour folder structure should be like:\n\n```\nckpts\n└── barn.pth\n└── batman.pth\n└── clock.pth\n...\n```\n\nThen launch the UI and you can use the pretrained weights to generate images.\n\n1. Upload reference image.\n\n2. (Optional) Customize advanced settings.\n\n3. Click inference button.\n\n#### 3.1.3 FastComposer\n\nFirst, run the script:\n\n```shell\npython demo/gradio_fastcomposer.py\n```\n\nSecond, upload reference subject images.For example,\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/14927720/265911400-91635451-54b6-4dc6-92a7-c1d02f88b62e.jpeg\" width=\"400\"/>\n  <br/>\n  <b>'reference_0.png'</b>\n</div></td>\n    <td>\n<div align=\"center\">\n  <img src=\"https://user-images.githubusercontent.com/14927720/265911502-66b67f53-dff0-4d25-a9af-3330e446aa48.jpeg\" width=\"400\"/>\n  <br/>\n  <b>'reference_1.png'</b>\n</div></td>\n    <td>\n</thead>\n</table>\n\nThen, add prompt like `A man img and a man img sitting together` and press `run` button.\n\nFinally, you can get text-generated images.\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/14927720/265911526-4975d6e2-c5fc-4324-80c9-a7a512953218.png\">\n</div>\n\n#### 3.1.4 AnimateDiff\n\n1. Download [ToonYou](https://civitai.com/api/download/models/78775) and MotionModule checkpoint\n\n```bash\n#!/bin/bash\n\nmkdir models && cd models\nmkdir Motion_Module && mkdir DreamBooth_LoRA\ngdown 1RqkQuGPaCO5sGZ6V6KZ-jUWmsRu48Kdq -O models/Motion_Module/\ngdown 1ql0g_Ys4UCz2RnokYlBjyOYPbttbIpbu -O models/Motion_Module/\nwget https://civitai.com/api/download/models/78775 -P models/DreamBooth_LoRA/ --content-disposition --no-check-certificate\n```\n\n2. Modify the config file in `configs/animatediff/animatediff_ToonYou.py`\n\n```python\n\nmodels_path = '/home/AnimateDiff/models/'\n```\n\n3. Then, try on the script:\n\n```shell\n# may need to install imageio[ffmpeg]:\n# pip install imageio-ffmpeg\npython demo/gradio_animatediff.py\n```\n\n4. Select SD, MotionModule and DreamBooth checkpoints. Adjust inference parameters. Then input a selected prompt and its relative negative_prompt:\n\n```python\n\nprompts = [\n    \"best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress\",\n\n    \"masterpiece, best quality, 1girl, solo, cherry blossoms, hanami, pink flower, white flower, spring season, wisteria, petals, flower, plum blossoms, outdoors, falling petals, white hair, black eyes,\",\n\n    \"best quality, masterpiece, 1boy, formal, abstract, looking at viewer, masculine, marble pattern\",\n\n    \"best quality, masterpiece, 1girl, cloudy sky, dandelion, contrapposto, alternate hairstyle,\"\n]\nnegative_prompts = [\n    \"\",\n    \"badhandv4,easynegative,ng_deepnegative_v1_75t,verybadimagenegative_v1.3, bad-artist, bad_prompt_version2-neg, teeth\",\n    \"\",\n    \"\",\n]\n# More test samples could be generated with other config files. Please check 'configs/animatediff/README.md'\n```\n\n5. Click the 'Generate' button.\n"
  },
  {
    "path": "demo/download_inference_resources.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os.path as osp\n\nimport mmengine\nimport requests\n\nRESOURCES = {\n    'Matting': [\n        'https://download.openmmlab.com/mmediting/resources/input/matting/GT05.jpg',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/matting/GT05_trimap.jpg',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/matting/readme.md'  # noqa\n    ],\n    'Inpainting': [\n        'https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md'  # noqa\n    ],\n    'Image Super-Resolution': [\n        'https://download.openmmlab.com/mmediting/resources/input/restoration/000001.png',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/restoration/0901x2.png',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/restoration/readme.md'  # noqa\n    ],\n    'Image2Image Translation': [\n        'https://download.openmmlab.com/mmediting/resources/input/translation/gt_mask_0.png',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/translation/readme.md'  # noqa\n    ],\n    'Video Interpolation': [\n        'https://download.openmmlab.com/mmediting/resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/video_interpolation/readme.md'  # noqa\n    ],\n    'Video Super-Resolution': [\n        'https://download.openmmlab.com/mmediting/resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/video_restoration/readme.md',  # noqa\n        'https://download.openmmlab.com/mmediting/resources/input/video_restoration/v_Basketball_g01_c01.avi'  # noqa\n    ]\n}\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Download resources')\n    parser.add_argument(\n        '--root-dir',\n        type=str,\n        help='resource root dir',\n        default='../resources')\n    parser.add_argument(\n        '--task',\n        type=str,\n        help='one specific task, if None : download all resources',\n        default=None)\n    parser.add_argument(\n        '--print-all', action='store_true', help='print all resources')\n    parser.add_argument(\n        '--print-task-type', action='store_true', help='print all task types')\n    parser.add_argument(\n        '--print-task',\n        type=str,\n        help='print all tasks that need input resources',\n        default=None)\n\n    args = parser.parse_args()\n    return args\n\n\ndef main():\n    args = parse_args()\n\n    if args.print_all:\n        print('all inference resources:')\n        for key in RESOURCES.keys():\n            print(key)\n            for value in RESOURCES[key]:\n                print(value)\n        return\n\n    if args.print_task_type:\n        print('all task type:')\n        for key in RESOURCES.keys():\n            print(key)\n        return\n\n    if args.print_task:\n        print('RESOURCES of task ' + args.print_task + ':')\n        for value in RESOURCES[args.print_task]:\n            print(value)\n        return\n\n    to_be_download = []\n    if args.task and args.task in RESOURCES.keys():\n        to_be_download.extend(RESOURCES[args.task])\n    else:\n        for key in RESOURCES.keys():\n            to_be_download.extend(RESOURCES[key])\n\n    put_root_path = osp.join(osp.dirname(__file__), args.root_dir)\n    for item in to_be_download:\n        item_relative_path = item[item.find('input'):]\n        put_path = osp.join(put_root_path, item_relative_path)\n        mmengine.mkdir_or_exist(osp.dirname(put_path))\n        response = requests.get(item)\n        open(put_path, 'wb').write(response.content)\n        print('Download finished: ' + item + ' to ' + put_path)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "demo/gradio_animatediff.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport json\nimport os\nimport random\nfrom datetime import datetime\nfrom glob import glob\n\nimport gradio as gr\nimport torch\nfrom diffusers import DDIMScheduler, EulerDiscreteScheduler, PNDMScheduler\nfrom mmengine import Config\nfrom safetensors import safe_open\n\nfrom mmagic.models.editors.animatediff import save_videos_grid\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nsample_idx = 0\nscheduler_dict = {\n    'Euler': EulerDiscreteScheduler,\n    'PNDM': PNDMScheduler,\n    'DDIM': DDIMScheduler,\n}\ncfg = Config.fromfile('configs/animatediff/animatediff_ToonYou.py')\ncss = \"\"\"\n.toolbutton {\n    margin-buttom: 0em 0em 0em 0em;\n    max-width: 2.5em;\n    min-width: 2.5em !important;\n    height: 2.5em;\n}\n\"\"\"\n\n\nclass AnimateController:\n\n    def __init__(self):\n\n        # config dirs\n        self.basedir = cfg.models_path\n        self.stable_diffusion_dir = os.path.join(self.basedir,\n                                                 'StableDiffusion')\n        self.motion_module_dir = os.path.join(self.basedir, 'Motion_Module')\n        self.personalized_model_dir = os.path.join(self.basedir,\n                                                   'DreamBooth_LoRA')\n        self.savedir = os.path.join(\n            os.getcwd(), 'samples',\n            datetime.now().strftime('Gradio-%Y-%m-%dT%H-%M-%S'))\n        self.savedir_sample = os.path.join(self.savedir, 'sample')\n        os.makedirs(self.savedir, exist_ok=True)\n\n        self.stable_diffusion_list = []\n        self.motion_module_list = []\n        self.personalized_model_list = []\n\n        self.refresh_stable_diffusion()\n        self.refresh_motion_module()\n        self.refresh_personalized_model()\n\n        # config models\n        self.config = cfg\n        self.animatediff = None\n        self.lora_model_state_dict = {}\n\n    def refresh_stable_diffusion(self):\n        self.stable_diffusion_list = ['runwayml/stable-diffusion-v1-5']\n\n    def refresh_motion_module(self):\n        motion_module_list = glob(\n            os.path.join(self.motion_module_dir, '*.ckpt'))\n        self.motion_module_list = [\n            os.path.basename(p) for p in motion_module_list\n        ]\n\n    def refresh_personalized_model(self):\n        personalized_model_list = glob(\n            os.path.join(self.personalized_model_dir, '*.safetensors'))\n        self.personalized_model_list = [\n            os.path.basename(p) for p in personalized_model_list\n        ]\n\n    def update_stable_diffusion(self, stable_diffusion_dropdown):\n        self.config['stable_diffusion_v15_url'] = stable_diffusion_dropdown\n        self.animatediff = MODELS.build(self.config.model).cuda()\n        return gr.Dropdown.update()\n\n    def update_motion_module(self, motion_module_dropdown):\n        if self.animatediff.unet is None:\n            gr.Info('Please select a pretrained model path.')\n            return gr.Dropdown.update(value=None)\n        else:\n            motion_module_dropdown = os.path.join(self.motion_module_dir,\n                                                  motion_module_dropdown)\n            self.config.model['motion_module_cfg']['path'] = \\\n                motion_module_dropdown\n            self.animatediff.init_motion_module(\n                self.config.model['motion_module_cfg'])\n            return gr.Dropdown.update()\n\n    def update_base_model(self, base_model_dropdown):\n\n        if self.animatediff.unet is None:\n            gr.Info('Please select a pretrained model path.')\n            return gr.Dropdown.update(value=None)\n        else:\n            base_model_dropdown = os.path.join(self.personalized_model_dir,\n                                               base_model_dropdown)\n            self.config.model['dream_booth_lora_cfg'][\n                'path'] = base_model_dropdown\n            self.animatediff.init_dreambooth_lora(\n                self.config.model['dream_booth_lora_cfg'])\n            return gr.Dropdown.update()\n\n    def update_lora_model(self, lora_model_dropdown):\n        lora_model_dropdown = os.path.join(self.personalized_model_dir,\n                                           lora_model_dropdown)\n        self.lora_model_state_dict = {}\n        if lora_model_dropdown == 'none':\n            pass\n        else:\n            with safe_open(\n                    lora_model_dropdown, framework='pt', device='cpu') as f:\n                for key in f.keys():\n                    self.lora_model_state_dict[key] = f.get_tensor(key)\n        return gr.Dropdown.update()\n\n    def animate(\n            self,\n            stable_diffusion_dropdown,\n            motion_module_dropdown,\n            base_model_dropdown,\n            lora_alpha_slider,\n            prompt_textbox,\n            negative_prompt_textbox,\n            # sampler_dropdown,\n            sample_step_slider,\n            width_slider,\n            length_slider,\n            height_slider,\n            cfg_scale_slider,\n            seed_textbox):\n        if self.animatediff.unet is None:\n            raise gr.Error('Please select a pretrained model path.')\n        if motion_module_dropdown == '':\n            raise gr.Error('Please select a motion module.')\n        if base_model_dropdown == '':\n            raise gr.Error('Please select a base DreamBooth model.')\n        self.animatediff.cuda()\n        self.animatediff.unet.set_use_memory_efficient_attention_xformers(True)\n\n        # TODO: update lora\n        # if self.lora_model_state_dict != {}:\n        #     pipeline = convert_lora(\n        # pipeline,\n        # self.lora_model_state_dict,\n        # alpha=lora_alpha_slider)\n\n        sample = self.animatediff.infer(\n            prompt_textbox,\n            negative_prompt=negative_prompt_textbox,\n            num_inference_steps=sample_step_slider,\n            guidance_scale=cfg_scale_slider,\n            width=width_slider,\n            height=height_slider,\n            video_length=length_slider,\n            seed=int(seed_textbox))['samples']\n\n        save_sample_path = os.path.join(self.savedir_sample,\n                                        f'{sample_idx}.mp4')\n        save_videos_grid(sample, save_sample_path)\n        seed = torch.initial_seed()\n        sample_config = {\n            'prompt': prompt_textbox,\n            'n_prompt': negative_prompt_textbox,\n            # \"sampler\": sampler_dropdown, # TODO: More samplers\n            'num_inference_steps': sample_step_slider,\n            'guidance_scale': cfg_scale_slider,\n            'width': width_slider,\n            'height': height_slider,\n            'video_length': length_slider,\n            'seed': seed\n        }\n        json_str = json.dumps(sample_config, indent=4)\n        with open(os.path.join(self.savedir, 'logs.json'), 'a') as f:\n            f.write(json_str)\n            f.write('\\n\\n')\n\n        return gr.Video.update(value=save_sample_path)\n\n\ncontroller = AnimateController()\n\n\ndef ui():\n    with gr.Blocks(css=css) as demo:\n        gr.Markdown(\"\"\"\n            # [AnimateDiff: Animate Your Personalized\n            # Text-to-Image Diffusion Models without Specific Tuning]\n            # (https://arxiv.org/abs/2307.04725)\n            Yuwei Guo, Ceyuan Yang*, Anyi Rao, Yaohui Wang,\n            Yu Qiao, Dahua Lin, Bo Dai (*Corresponding Author)<br>\n            [Arxiv Report](https://arxiv.org/abs/2307.04725) |\n            [Project Page](https://animatediff.github.io/) |\n            [Github](https://github.com/guoyww/animatediff/)\n            \"\"\")\n        with gr.Column(variant='panel'):\n            gr.Markdown(\"\"\"\n                ### 1. Model checkpoints (select pretrained model path first).\n                \"\"\")\n            with gr.Row():\n                stable_diffusion_dropdown = gr.Dropdown(\n                    label='Pretrained Model Path',\n                    choices=controller.stable_diffusion_list,\n                    interactive=True,\n                )\n                stable_diffusion_dropdown.change(\n                    fn=controller.update_stable_diffusion,\n                    inputs=[stable_diffusion_dropdown],\n                    outputs=[stable_diffusion_dropdown])\n\n                stable_diffusion_refresh_button = gr.Button(\n                    value='\\U0001F503', elem_classes='toolbutton')\n\n                def update_stable_diffusion():\n                    controller.refresh_stable_diffusion()\n                    return gr.Dropdown.update(\n                        choices=controller.stable_diffusion_list)\n\n                stable_diffusion_refresh_button.click(\n                    fn=update_stable_diffusion,\n                    inputs=[],\n                    outputs=[stable_diffusion_dropdown])\n\n            with gr.Row():\n                motion_module_dropdown = gr.Dropdown(\n                    label='Select motion module',\n                    choices=controller.motion_module_list,\n                    interactive=True,\n                )\n                motion_module_dropdown.change(\n                    fn=controller.update_motion_module,\n                    inputs=[motion_module_dropdown],\n                    outputs=[motion_module_dropdown])\n\n                motion_module_refresh_button = gr.Button(\n                    value='\\U0001F503', elem_classes='toolbutton')\n\n                def update_motion_module():\n                    controller.refresh_motion_module()\n                    return gr.Dropdown.update(\n                        choices=controller.motion_module_list)\n\n                motion_module_refresh_button.click(\n                    fn=update_motion_module,\n                    inputs=[],\n                    outputs=[motion_module_dropdown])\n\n                base_model_dropdown = gr.Dropdown(\n                    label='Select base Dreambooth model (required)',\n                    choices=controller.personalized_model_list,\n                    interactive=True,\n                )\n                base_model_dropdown.change(\n                    fn=controller.update_base_model,\n                    inputs=[base_model_dropdown],\n                    outputs=[base_model_dropdown])\n\n                lora_model_dropdown = gr.Dropdown(\n                    label='Select LoRA model (optional)',\n                    choices=['none'] + controller.personalized_model_list,\n                    value='none',\n                    interactive=True,\n                )\n                lora_model_dropdown.change(\n                    fn=controller.update_lora_model,\n                    inputs=[lora_model_dropdown],\n                    outputs=[lora_model_dropdown])\n\n                lora_alpha_slider = gr.Slider(\n                    label='LoRA alpha',\n                    value=0.8,\n                    minimum=0,\n                    maximum=2,\n                    interactive=True)\n\n                personalized_refresh_button = gr.Button(\n                    value='\\U0001F503', elem_classes='toolbutton')\n\n                def update_personalized_model():\n                    controller.refresh_personalized_model()\n                    return [\n                        gr.Dropdown.update(\n                            choices=controller.personalized_model_list),\n                        gr.Dropdown.update(choices=['none'] +\n                                           controller.personalized_model_list)\n                    ]\n\n                personalized_refresh_button.click(\n                    fn=update_personalized_model,\n                    inputs=[],\n                    outputs=[base_model_dropdown, lora_model_dropdown])\n\n        with gr.Column(variant='panel'):\n            gr.Markdown(\"\"\"\n                ### 2. Configs for AnimateDiff.\n                \"\"\")\n\n            prompt_textbox = gr.Textbox(label='Prompt', lines=2)\n            negative_prompt_textbox = gr.Textbox(\n                label='Negative prompt', lines=2)\n\n            with gr.Row().style(equal_height=False):\n                with gr.Column():\n                    with gr.Row():\n                        sample_step_slider = gr.Slider(\n                            label='Sampling steps',\n                            value=25,\n                            minimum=10,\n                            maximum=100,\n                            step=1)\n\n                    width_slider = gr.Slider(\n                        label='Width',\n                        value=512,\n                        minimum=256,\n                        maximum=1024,\n                        step=64)\n                    height_slider = gr.Slider(\n                        label='Height',\n                        value=512,\n                        minimum=256,\n                        maximum=1024,\n                        step=64)\n                    length_slider = gr.Slider(\n                        label='Animation length',\n                        value=16,\n                        minimum=8,\n                        maximum=24,\n                        step=1)\n                    cfg_scale_slider = gr.Slider(\n                        label='CFG Scale', value=7.5, minimum=0, maximum=20)\n\n                    with gr.Row():\n                        seed_textbox = gr.Textbox(label='Seed', value=-1)\n                        seed_button = gr.Button(\n                            value='\\U0001F3B2', elem_classes='toolbutton')\n                        seed_button.click(\n                            fn=lambda: gr.Textbox.update(\n                                value=random.randint(1, 1e8)),\n                            inputs=[],\n                            outputs=[seed_textbox])\n\n                    generate_button = gr.Button(\n                        value='Generate', variant='primary')\n\n                result_video = gr.Video(\n                    label='Generated Animation', interactive=False)\n\n            generate_button.click(\n                fn=controller.animate,\n                inputs=[\n                    stable_diffusion_dropdown,\n                    motion_module_dropdown,\n                    base_model_dropdown,\n                    lora_alpha_slider,\n                    prompt_textbox,\n                    negative_prompt_textbox,\n                    # sampler_dropdown,\n                    sample_step_slider,\n                    width_slider,\n                    length_slider,\n                    height_slider,\n                    cfg_scale_slider,\n                    seed_textbox,\n                ],\n                outputs=[result_video])\n\n    return demo\n\n\nif __name__ == '__main__':\n    demo = ui()\n    demo.launch(share=True)\n"
  },
  {
    "path": "demo/gradio_controlnet_animation.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport gradio as gr\n\nfrom mmagic.apis import MMagicInferencer\n\neditor = MMagicInferencer(model_name='controlnet_animation')\n\n\ndef process(video, prompt, a_prompt, negative_prompt,\n            controlnet_conditioning_scale, width, height):\n    prompt = prompt + a_prompt\n    save_path = editor.infer(\n        video=video,\n        prompt=prompt,\n        negative_prompt=negative_prompt,\n        width=width,\n        height=height,\n        controlnet_conditioning_scale=controlnet_conditioning_scale)\n\n    return save_path\n\n\nblock = gr.Blocks().queue()\nwith block:\n    with gr.Row():\n        gr.Markdown('## Controlnet Animation')\n    with gr.Row():\n        with gr.Column():\n            video_inp = gr.Video(\n                label='Video Source',\n                source='upload',\n                type='filepath',\n                elem_id='input-vid')\n            prompt = gr.Textbox(label='Prompt')\n            run_button = gr.Button(label='Run')\n            with gr.Accordion('Advanced options', open=False):\n                a_prompt = gr.Textbox(\n                    label='Added Prompt',\n                    value='best quality, extremely detailed')\n                n_prompt = gr.Textbox(\n                    label='Negative Prompt',\n                    value='longbody, lowres, bad anatomy, bad hands, ' +\n                    'missing fingers, extra digit, fewer digits, '\n                    'cropped, worst quality, low quality')\n                controlnet_conditioning_scale = gr.Slider(\n                    label='Control Weight',\n                    minimum=0.0,\n                    maximum=2.0,\n                    value=0.7,\n                    step=0.01)\n                width = gr.Slider(\n                    label='Image Width',\n                    minimum=256,\n                    maximum=768,\n                    value=512,\n                    step=64)\n                height = gr.Slider(\n                    label='Image Width',\n                    minimum=256,\n                    maximum=768,\n                    value=512,\n                    step=64)\n\n        with gr.Column():\n            video_out = gr.Video(label='Video Result', elem_id='video-output')\n    ips = [\n        video_inp, prompt, a_prompt, n_prompt, controlnet_conditioning_scale,\n        width, height\n    ]\n    run_button.click(fn=process, inputs=ips, outputs=video_out)\n\nblock.launch(server_name='0.0.0.0', share=True)\n"
  },
  {
    "path": "demo/gradio_draggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom argparse import ArgumentParser\nfrom functools import partial\n\nimport gradio as gr\nimport numpy as np\nimport torch\nfrom PIL import Image\n\nfrom demo.utils.gradio_utils import (EasyDict, ImageMask, draw_mask_on_image,\n                                     draw_points_on_image,\n                                     get_latest_points_pair, get_valid_mask,\n                                     on_change_single_global_state)\nfrom demo.utils.renderer import Renderer, add_watermark_np\n\nparser = ArgumentParser()\nparser.add_argument('--share', action='store_true', default='True')\nparser.add_argument('--cache-dir', type=str, default='./checkpoints')\nparser.add_argument(\n    '--listen',\n    action='store_true',\n    help=''\n    'launch gradio with 0.0.0.0 as server name, \\\n        allowing to respond to network requests',\n)\nargs = parser.parse_args()\ncache_dir = args.cache_dir\n\n\ndef get_default_gr_state(device='cuda',\n                         init_pkl='stylegan2_lions_512_pytorch_mmagic.pth'):\n    global_state = gr.State({\n        'images': {\n            # image_orig: the original image, change with seed/model is changed\n            # image_raw: image with mask and points, change during optimization\n            # image_show: image showed on screen\n        },\n        'temporal_params': {\n            # stop\n        },\n        'mask':\n        None,  # mask for visualization, 1 for editing and 0 for unchange\n        'last_mask': None,  # last edited mask\n        'show_mask': True,  # add button\n        'generator_params': EasyDict(),\n        'params': {\n            'seed': 0,\n            'motion_lambda': 20,\n            'r1_in_pixels': 3,\n            'r2_in_pixels': 12,\n            'magnitude_direction_in_pixels': 1.0,\n            'latent_space': 'w+',\n            'trunc_psi': 0.7,\n            'trunc_cutoff': None,\n            'lr': 0.001,\n        },\n        'device': device,\n        'draw_interval': 1,\n        'renderer': Renderer(disable_timing=True),\n        'points': {},\n        'curr_point': None,\n        'curr_type_point': 'start',\n        'editing_state': 'add_points',\n        'pretrained_weight': init_pkl\n    })\n    return global_state\n\n\ndef reverse_point_pairs(points):\n    new_points = []\n    for p in points:\n        new_points.append([p[1], p[0]])\n    return new_points\n\n\ndef clear_state(global_state, target=None):\n    \"\"\"Clear target history state from global_state If target is not defined,\n    points and mask will be both removed.\n\n    1. set global_state['points'] as empty dict\n    2. set global_state['mask'] as full-one mask.\n    \"\"\"\n    if target is None:\n        target = ['point', 'mask']\n    if not isinstance(target, list):\n        target = [target]\n    if 'point' in target:\n        global_state['points'] = dict()\n        print('Clear Points State!')\n    if 'mask' in target:\n        image_raw = global_state['images']['image_raw']\n        global_state['mask'] = np.ones((image_raw.size[1], image_raw.size[0]),\n                                       dtype=np.uint8)\n        print('Clear mask State!')\n\n    return global_state\n\n\ndef init_images(global_state, cache_dir='./checkpoints'):\n    \"\"\"This function is called only ones with Gradio App is started.\n\n    0. pre-process global_state, unpack value from global_state of need\n    1. Re-init renderer\n    2. run `renderer._render_drag_impl` with `is_drag=False` to generate\n       new image\n    3. Assign images to global state and re-generate mask\n    \"\"\"\n\n    if isinstance(global_state, gr.State):\n        state = global_state.value\n    else:\n        state = global_state\n\n    state['renderer'].init_network(\n        state['generator_params'],  # res\n        os.path.join(cache_dir, state['pretrained_weight']\n                     ),  # StyleGAN2 checkpoint path from Official DragGAN\n        state['params']['seed'],  # w0_seed,\n        None,  # w_load\n        state['params']['latent_space'] == 'w+',  # w_plus\n        'const',\n        state['params']['trunc_psi'],  # trunc_psi,\n        state['params']['trunc_cutoff'],  # trunc_cutoff,\n        None,  # input_transform\n        state['params']['lr']  # lr,\n    )\n    state['renderer']._render_drag_impl(\n        state['generator_params'], is_drag=False, to_pil=True)\n\n    init_image = state['generator_params'].image\n    state['images']['image_orig'] = init_image\n    state['images']['image_raw'] = init_image\n    state['images']['image_show'] = Image.fromarray(\n        add_watermark_np(np.array(init_image)))\n    state['mask'] = np.ones((init_image.size[1], init_image.size[0]),\n                            dtype=np.uint8)\n    return global_state\n\n\ndef update_image_draw(image, points, mask, show_mask, global_state=None):\n    image_draw = draw_points_on_image(image, points)\n    if show_mask and mask is not None and not (mask == 0).all() and not (\n            mask == 1).all():\n        image_draw = draw_mask_on_image(image_draw, mask)\n\n    image_draw = Image.fromarray(add_watermark_np(np.array(image_draw)))\n    if global_state is not None:\n        global_state['images']['image_show'] = image_draw\n    return image_draw\n\n\ndef preprocess_mask_info(global_state, image):\n    \"\"\"Function to handle mask information.\n\n    1. last_mask is None: Do not need to change mask, return mask\n    2. last_mask is not None:\n        2.1 global_state is remove_mask:\n        2.2 global_state is add_mask:\n    \"\"\"\n\n    if isinstance(image, dict):\n        last_mask = get_valid_mask(image['mask'])\n    else:\n        last_mask = None\n    mask = global_state['mask']\n    # mask in global state is a placeholder with all 1.\n    if (mask == 1).all():\n        mask = last_mask\n\n    # last_mask = global_state['last_mask']\n    editing_mode = global_state['editing_state']\n\n    if last_mask is None:\n        return global_state\n\n    if editing_mode == 'remove_mask':\n        updated_mask = np.clip(mask - last_mask, 0, 1)\n        print(f'Last editing_state is {editing_mode}, do remove.')\n    elif editing_mode == 'add_mask':\n        updated_mask = np.clip(mask + last_mask, 0, 1)\n        print(f'Last editing_state is {editing_mode}, do add.')\n    else:\n        updated_mask = mask\n        print(f'Last editing_state is {editing_mode}, ' 'do nothing to mask.')\n\n    global_state['mask'] = updated_mask\n    # global_state['last_mask'] = None  # clear buffer\n    return global_state\n\n\nvalid_checkpoints_dict = {\n    f.split('/')[-1]: osp.join(cache_dir, f)\n    for f in os.listdir(cache_dir)\n    if (f.endswith('pth') and osp.exists(osp.join(cache_dir, f)))\n}\nprint(f'File under cache_dir ({cache_dir}):')\nprint(os.listdir(cache_dir))\nprint('Valid checkpoint file:')\nprint(valid_checkpoints_dict)\n\nif __name__ == '__main__':\n    init_pkl = 'stylegan2_lions_512_pytorch_mmagic.pth'\n    device = 'cuda'\n\n    with gr.Blocks() as app:\n\n        # renderer = Renderer()\n        global_state = get_default_gr_state(device, init_pkl)\n\n        # init image\n        global_state = init_images(global_state)\n\n        with gr.Row():\n\n            with gr.Row():\n\n                # Left --> tools\n                with gr.Column(scale=3):\n\n                    # Pickle\n                    with gr.Row():\n\n                        with gr.Column(scale=1, min_width=10):\n                            gr.Markdown(value='Pickle', show_label=False)\n\n                        with gr.Column(scale=4, min_width=10):\n                            form_pretrained_dropdown = gr.Dropdown(\n                                choices=list(valid_checkpoints_dict.keys()),\n                                label='Pretrained Model',\n                                value=init_pkl,\n                            )\n\n                    # Latent\n                    with gr.Row():\n                        with gr.Column(scale=1, min_width=10):\n                            gr.Markdown(value='Latent', show_label=False)\n\n                        with gr.Column(scale=4, min_width=10):\n                            form_seed_number = gr.Number(\n                                value=global_state.value['params']['seed'],\n                                interactive=True,\n                                label='Seed',\n                            )\n                            form_lr_number = gr.Number(\n                                value=global_state.value['params']['lr'],\n                                interactive=True,\n                                label='Step Size')\n\n                            with gr.Row():\n                                with gr.Column(scale=2, min_width=10):\n                                    form_reset_image = gr.Button('Reset Image')\n                                with gr.Column(scale=3, min_width=10):\n                                    form_latent_space = gr.Radio(\n                                        ['w', 'w+'],\n                                        value=global_state.value['params']\n                                        ['latent_space'],\n                                        interactive=True,\n                                        label='Latent space to optimize',\n                                        show_label=False,\n                                    )\n\n                    # Drag\n                    with gr.Row():\n                        with gr.Column(scale=1, min_width=10):\n                            gr.Markdown(value='Drag', show_label=False)\n                        with gr.Column(scale=4, min_width=10):\n                            with gr.Row():\n                                with gr.Column(scale=1, min_width=10):\n                                    enable_add_points = gr.Button('Add Points')\n                                with gr.Column(scale=1, min_width=10):\n                                    undo_points = gr.Button('Reset Points')\n                            with gr.Row():\n                                with gr.Column(scale=1, min_width=10):\n                                    form_start_btn = gr.Button('Start')\n                                with gr.Column(scale=1, min_width=10):\n                                    form_stop_btn = gr.Button('Stop')\n\n                            form_steps_number = gr.Number(\n                                value=0, label='Steps', interactive=False)\n\n                    # Mask\n                    with gr.Row():\n                        with gr.Column(scale=1, min_width=10):\n                            gr.Markdown(value='Mask', show_label=False)\n                        with gr.Column(scale=4, min_width=10):\n                            enable_add_mask = gr.Button('Edit Flexible Area')\n                            with gr.Row():\n                                with gr.Column(scale=1, min_width=10):\n                                    form_reset_mask_btn = gr.Button(\n                                        'Reset mask')\n                                with gr.Column(scale=1, min_width=10):\n                                    show_mask = gr.Checkbox(\n                                        label='Show Mask',\n                                        value=global_state.value['show_mask'],\n                                        show_label=False)\n\n                            with gr.Row():\n                                form_lambda_number = gr.Number(\n                                    value=global_state.value['params']\n                                    ['motion_lambda'],\n                                    interactive=True,\n                                    label='Lambda',\n                                )\n\n                    form_draw_interval_number = gr.Number(\n                        value=global_state.value['draw_interval'],\n                        label='Draw Interval (steps)',\n                        interactive=True,\n                        visible=False)\n\n                # Right --> Image\n                with gr.Column(scale=8):\n                    form_image = ImageMask(\n                        value=global_state.value['images']['image_show'],\n                        brush_radius=20).style(\n                            width=768,\n                            height=768)  # NOTE: hard image size code here.\n        gr.Markdown(\"\"\"\n            ## Quick Start\n\n            1. Select desired `Pretrained Model` and adjust `Seed` to generate\n            an initial image.\n            2. Click on image to add control points.\n            3. Click `Start` and enjoy it!\n\n            ## Advance Usage\n\n            1. Change `Step Size` to adjust learning rate in drag optimization.\n            2. Select `w` or `w+` to change latent space to optimize:\n            * Optimize on `w` space may cause greater influence to the image.\n            * Optimize on `w+` space may work slower than `w`, but usually\n            achieve better results.\n            * Note that changing the latent space will reset the image, points\n            and mask (this has the same effect as `Reset Image` button).\n            3. Click `Edit Flexible Area` to create a mask and constrain the\n            unmasked region to remain unchanged.\n            \"\"\")\n        gr.HTML(\"\"\"\n            <style>\n                .container {\n                    position: absolute;\n                    height: 50px;\n                    text-align: center;\n                    line-height: 50px;\n                    width: 100%;\n                }\n            </style>\n            <div class=\"container\">\n            Gradio demo supported by\n            <img src=\"https://avatars.githubusercontent.com/u/10245193?s=\n            200&v=4\"\\\n                height=\"20\" width=\"20\" style=\"display:inline;\">\n            <a href=\"https://github.com/open-mmlab/mmagic\">OpenMMLab MMagic</a>\n            </div>\n            \"\"\")\n\n        # Network & latents tab listeners\n        def on_change_pretrained_dropdown(pretrained_value, global_state):\n            \"\"\"Function to handle model change.\n\n            1. Set pretrained value to global_state\n            2. Re-init images and clear all states\n            \"\"\"\n\n            global_state['pretrained_weight'] = pretrained_value\n            init_images(global_state)\n            clear_state(global_state)\n\n            return global_state, global_state['images']['image_show']\n\n        form_pretrained_dropdown.change(\n            on_change_pretrained_dropdown,\n            inputs=[form_pretrained_dropdown, global_state],\n            outputs=[global_state, form_image],\n        )\n\n        def on_click_reset_image(global_state):\n            \"\"\"Reset image to the original one and clear all states\n            1. Re-init images\n            2. Clear all states\n            \"\"\"\n\n            init_images(global_state)\n            clear_state(global_state)\n\n            return global_state, global_state['images']['image_show']\n\n        form_reset_image.click(\n            on_click_reset_image,\n            inputs=[global_state],\n            outputs=[global_state, form_image],\n        )\n\n        # Update parameters\n        def on_change_update_image_seed(seed, global_state):\n            \"\"\"Function to handle generation seed change.\n\n            1. Set seed to global_state\n            2. Re-init images and clear all states\n            \"\"\"\n\n            global_state['params']['seed'] = int(seed)\n            init_images(global_state)\n            clear_state(global_state)\n\n            return global_state, global_state['images']['image_show']\n\n        form_seed_number.change(\n            on_change_update_image_seed,\n            inputs=[form_seed_number, global_state],\n            outputs=[global_state, form_image],\n        )\n\n        def on_click_latent_space(latent_space, global_state):\n            \"\"\"Function to reset latent space to optimize.\n\n            NOTE: this function we reset the image and all controls\n            1. Set latent-space to global_state\n            2. Re-init images and clear all state\n            \"\"\"\n\n            global_state['params']['latent_space'] = latent_space\n            init_images(global_state)\n            clear_state(global_state)\n\n            return global_state, global_state['images']['image_show']\n\n        form_latent_space.change(\n            on_click_latent_space,\n            inputs=[form_latent_space, global_state],\n            outputs=[global_state, form_image])\n\n        # ==== Params\n        form_lambda_number.change(\n            partial(on_change_single_global_state,\n                    ['params', 'motion_lambda']),\n            inputs=[form_lambda_number, global_state],\n            outputs=[global_state],\n        )\n\n        def on_change_lr(lr, global_state):\n            if lr == 0:\n                print('lr is 0, do nothing.')\n                return global_state\n            else:\n                global_state['params']['lr'] = lr\n                renderer = global_state['renderer']\n                renderer.update_lr(lr)\n                print('New optimizer: ')\n                print(renderer.w_optim)\n            return global_state\n\n        form_lr_number.change(\n            on_change_lr,\n            inputs=[form_lr_number, global_state],\n            outputs=[global_state],\n        )\n\n        def on_click_start(global_state, image):\n            p_in_pixels = []\n            t_in_pixels = []\n            valid_points = []\n\n            # handle of start drag in mask editing mode\n            global_state = preprocess_mask_info(global_state, image)\n\n            # Prepare the points for the inference\n            if len(global_state['points']) == 0:\n                # yield on_click_start_wo_points(global_state, image)\n                image_raw = global_state['images']['image_raw']\n                update_image_draw(\n                    image_raw,\n                    global_state['points'],\n                    global_state['mask'],\n                    global_state['show_mask'],\n                    global_state,\n                )\n\n                yield (\n                    global_state,\n                    0,\n                    global_state['images']['image_show'],\n                    # gr.File.update(visible=False),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    # latent space\n                    gr.Radio.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    # NOTE: disable stop button\n                    gr.Button.update(interactive=False),\n\n                    # update other comps\n                    gr.Dropdown.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Checkbox.update(interactive=True),\n                    # gr.Number.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                )\n            else:\n\n                # Transform the points into torch tensors\n                for key_point, point in global_state['points'].items():\n                    try:\n                        p_start = point.get('start_temp', point['start'])\n                        p_end = point['target']\n\n                        if p_start is None or p_end is None:\n                            continue\n\n                    except KeyError:\n                        continue\n\n                    p_in_pixels.append(p_start)\n                    t_in_pixels.append(p_end)\n                    valid_points.append(key_point)\n\n                mask = torch.tensor(global_state['mask']).float()\n                drag_mask = 1 - mask\n\n                renderer: Renderer = global_state['renderer']\n                global_state['temporal_params']['stop'] = False\n                global_state['editing_state'] = 'running'\n\n                # reverse points order\n                p_to_opt = reverse_point_pairs(p_in_pixels)\n                t_to_opt = reverse_point_pairs(t_in_pixels)\n                print(p_to_opt)\n                print('Running with:')\n                print(f'    Source: {p_in_pixels}')\n                print(f'    Target: {t_in_pixels}')\n                step_idx = 0\n                while True:\n                    if global_state['temporal_params']['stop']:\n                        break\n\n                    # do drage here!\n                    renderer._render_drag_impl(\n                        global_state['generator_params'],\n                        p_to_opt,  # point\n                        t_to_opt,  # target\n                        drag_mask,  # mask,\n                        global_state['params']['motion_lambda'],  # lambda_mask\n                        reg=0,\n                        feature_idx=5,  # NOTE: do not support change for now\n                        r1=global_state['params']['r1_in_pixels'],  # r1\n                        r2=global_state['params']['r2_in_pixels'],  # r2\n                        # random_seed     = 0,\n                        # noise_mode      = 'const',\n                        trunc_psi=global_state['params']['trunc_psi'],\n                        # force_fp32      = False,\n                        # layer_name      = None,\n                        # sel_channels    = 3,\n                        # base_channel    = 0,\n                        # img_scale_db    = 0,\n                        # img_normalize   = False,\n                        # untransform     = False,\n                        is_drag=True,\n                        to_pil=True)\n\n                    if step_idx % global_state['draw_interval'] == 0:\n                        print('Current Source:')\n                        for key_point, p_i, t_i in zip(valid_points, p_to_opt,\n                                                       t_to_opt):\n                            global_state['points'][key_point]['start_temp'] = [\n                                p_i[1],\n                                p_i[0],\n                            ]\n                            global_state['points'][key_point]['target'] = [\n                                t_i[1],\n                                t_i[0],\n                            ]\n                            start_temp = global_state['points'][key_point][\n                                'start_temp']\n                            print(f'    {start_temp}')\n\n                        image_result = global_state['generator_params'][\n                            'image']\n                        image_draw = update_image_draw(  # noqa\n                            image_result,\n                            global_state['points'],\n                            global_state['mask'],\n                            global_state['show_mask'],\n                            global_state,\n                        )\n                        global_state['images']['image_raw'] = image_result\n\n                    yield (\n                        global_state,\n                        step_idx,\n                        global_state['images']['image_show'],\n                        # gr.File.update(visible=False),\n                        gr.Button.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        # latent space\n                        gr.Radio.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        # enable stop button in loop\n                        gr.Button.update(interactive=True),\n\n                        # update other comps\n                        gr.Dropdown.update(interactive=False),\n                        gr.Number.update(interactive=False),\n                        gr.Number.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        gr.Button.update(interactive=False),\n                        gr.Checkbox.update(interactive=False),\n                        # gr.Number.update(interactive=False),\n                        gr.Number.update(interactive=False),\n                    )\n\n                    # increate step\n                    step_idx += 1\n\n                image_result = global_state['generator_params']['image']\n                global_state['images']['image_raw'] = image_result\n                # image_draw = update_image_draw(image_result,\n                #                                global_state['points'],\n                #                                global_state['mask'],\n                #                                global_state['show_mask'],\n                #                                global_state)\n\n                # fp = NamedTemporaryFile(suffix=\".png\", delete=False)\n                # image_result.save(fp, \"PNG\")\n\n                global_state['editing_state'] = 'add_points'\n\n                yield (\n                    global_state,\n                    0,  # reset step to 0 after stop.\n                    global_state['images']['image_show'],\n                    # gr.File.update(visible=True, value=fp.name),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    # latent space\n                    gr.Radio.update(interactive=True),\n                    gr.Button.update(interactive=True),\n                    # NOTE: disable stop button with loop finish\n                    gr.Button.update(interactive=False),\n\n                    # update other comps\n                    gr.Dropdown.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                    gr.Checkbox.update(interactive=True),\n                    gr.Number.update(interactive=True),\n                )\n\n        form_start_btn.click(\n            on_click_start,\n            inputs=[global_state, form_image],\n            outputs=[\n                global_state,\n                form_steps_number,\n                form_image,\n                # form_download_result_file,\n                # >>> buttons\n                form_reset_image,\n                enable_add_points,\n                enable_add_mask,\n                undo_points,\n                form_reset_mask_btn,\n                form_latent_space,\n                form_start_btn,\n                form_stop_btn,\n                # <<< buttonm\n                # >>> inputs comps\n                form_pretrained_dropdown,\n                form_seed_number,\n                form_lr_number,\n                show_mask,\n                form_lambda_number,\n            ],\n        )\n\n        def on_click_stop(global_state):\n            \"\"\"Function to handle stop button is clicked.\n\n            1. send a stop signal by\n            set global_state[\"temporal_params\"][\"stop\"] as True\n            2. Disable Stop button\n            \"\"\"\n            global_state['temporal_params']['stop'] = True\n\n            return global_state, gr.Button.update(interactive=False)\n\n        form_stop_btn.click(\n            on_click_stop,\n            inputs=[global_state],\n            outputs=[global_state, form_stop_btn])\n\n        form_draw_interval_number.change(\n            partial(\n                on_change_single_global_state,\n                'draw_interval',\n                map_transform=lambda x: int(x),\n            ),\n            inputs=[form_draw_interval_number, global_state],\n            outputs=[global_state],\n        )\n\n        def on_click_remove_point(global_state):\n            choice = global_state['curr_point']\n            del global_state['points'][choice]\n\n            choices = list(global_state['points'].keys())\n\n            if len(choices) > 0:\n                global_state['curr_point'] = choices[0]\n\n            return (\n                gr.Dropdown.update(choices=choices, value=choices[0]),\n                global_state,\n            )\n\n        # Mask\n        def on_click_reset_mask(global_state):\n            global_state['mask'] = np.ones(\n                (\n                    global_state['images']['image_raw'].size[1],\n                    global_state['images']['image_raw'].size[0],\n                ),\n                dtype=np.uint8,\n            )\n            image_draw = update_image_draw(global_state['images']['image_raw'],\n                                           global_state['points'],\n                                           global_state['mask'],\n                                           global_state['show_mask'],\n                                           global_state)\n            return global_state, image_draw\n\n        form_reset_mask_btn.click(\n            on_click_reset_mask,\n            inputs=[global_state],\n            outputs=[global_state, form_image],\n        )\n\n        # Image\n        def on_click_enable_draw(global_state, image):\n            \"\"\"Function to start add mask mode.\n\n            1. Preprocess mask info from last state\n            2. Change editing state to add_mask\n            3. Set curr image with points and mask\n            \"\"\"\n            global_state = preprocess_mask_info(global_state, image)\n            global_state['editing_state'] = 'add_mask'\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(image_raw, global_state['points'],\n                                           global_state['mask'], True,\n                                           global_state)\n            return (global_state,\n                    gr.Image.update(value=image_draw, interactive=True))\n\n        def on_click_remove_draw(global_state, image):\n            \"\"\"Function to start remove mask mode.\n\n            1. Preprocess mask info from last state\n            2. Change editing state to remove_mask\n            3. Set curr image with points and mask\n            \"\"\"\n            global_state = preprocess_mask_info(global_state, image)\n            global_state['edinting_state'] = 'remove_mask'\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(image_raw, global_state['points'],\n                                           global_state['mask'], True,\n                                           global_state)\n            return (global_state,\n                    gr.Image.update(value=image_draw, interactive=True))\n\n        enable_add_mask.click(\n            on_click_enable_draw,\n            inputs=[global_state, form_image],\n            outputs=[\n                global_state,\n                form_image,\n            ])\n\n        def on_click_add_point(global_state, image: dict):\n            \"\"\"Function switch from add mask mode to add points mode.\n\n            1. Updaste mask buffer if need\n            2. Change global_state['editing_state'] to 'add_points'\n            3. Set current image with mask\n            \"\"\"\n\n            global_state = preprocess_mask_info(global_state, image)\n            global_state['editing_state'] = 'add_points'\n            mask = global_state['mask']\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(image_raw, global_state['points'],\n                                           mask, global_state['show_mask'],\n                                           global_state)\n\n            return (global_state,\n                    gr.Image.update(value=image_draw, interactive=False))\n\n        enable_add_points.click(\n            on_click_add_point,\n            inputs=[global_state, form_image],\n            outputs=[global_state, form_image])\n\n        def on_click_image(global_state, evt: gr.SelectData):\n            \"\"\"This function only support click for point selection.\"\"\"\n            xy = evt.index\n            if global_state['editing_state'] != 'add_points':\n                print(f'In {global_state[\"editing_state\"]} state. '\n                      'Do not add points.')\n\n                return global_state, global_state['images']['image_show']\n\n            points = global_state['points']\n\n            point_idx = get_latest_points_pair(points)\n            if point_idx is None:\n                points[0] = {'start': xy, 'target': None}\n                print(f'Click Image - Start - {xy}')\n            elif points[point_idx].get('target', None) is None:\n                points[point_idx]['target'] = xy\n                print(f'Click Image - Target - {xy}')\n            else:\n                points[point_idx + 1] = {'start': xy, 'target': None}\n                print(f'Click Image - Start - {xy}')\n\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(\n                image_raw,\n                global_state['points'],\n                global_state['mask'],\n                global_state['show_mask'],\n                global_state,\n            )\n\n            return global_state, image_draw\n\n        form_image.select(\n            on_click_image,\n            inputs=[global_state],\n            outputs=[global_state, form_image],\n        )\n\n        def on_click_clear_points(global_state):\n            \"\"\"Function to handle clear all control points\n            1. clear global_state['points'] (clear_state)\n            2. re-init network\n            2. re-draw image\n            \"\"\"\n            clear_state(global_state, target='point')\n\n            renderer: Renderer = global_state['renderer']\n            renderer.feat_refs = None\n\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(image_raw, {}, global_state['mask'],\n                                           global_state['show_mask'],\n                                           global_state)\n            return global_state, image_draw\n\n        undo_points.click(\n            on_click_clear_points,\n            inputs=[global_state],\n            outputs=[global_state, form_image])\n\n        def on_click_show_mask(global_state, show_mask):\n            \"\"\"Function to control whether show mask on image.\"\"\"\n            global_state['show_mask'] = show_mask\n\n            image_raw = global_state['images']['image_raw']\n            image_draw = update_image_draw(\n                image_raw,\n                global_state['points'],\n                global_state['mask'],\n                global_state['show_mask'],\n                global_state,\n            )\n            return global_state, image_draw\n\n        show_mask.change(\n            on_click_show_mask,\n            inputs=[global_state, show_mask],\n            outputs=[global_state, form_image],\n        )\n\n    gr.close_all()\n    app.queue(concurrency_count=3, max_size=20)\n    app.launch(\n        share=args.share,\n        server_name='0.0.0.0' if args.listen else '127.0.0.1')\n"
  },
  {
    "path": "demo/gradio_fastcomposer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport gc\n\nimport gradio as gr\nimport numpy as np\nimport PIL\nimport torch\nfrom mmengine import Config\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\ngc.collect()\ntorch.cuda.empty_cache()\nregister_all_modules()\n\n\nclass ModelWrapper:\n\n    def __init__(self, model):\n        super().__init__()\n        self.model = model\n        self.device = torch.device(\n            'cuda' if torch.cuda.is_available() else 'cpu')\n        self.model = self.model.to(self.device)\n\n    def inference(\n        self,\n        image1: PIL.Image.Image,\n        image2: PIL.Image.Image,\n        prompt: str,\n        negative_prompt: str,\n        seed: int,\n        guidance_scale: float,\n        alpha_: float,\n        num_steps: int,\n        num_images: int,\n    ):\n        print('Running model inference...')\n        image = []\n        if image1 is not None:\n            image.append(image1)\n\n        if image2 is not None:\n            image.append(image2)\n\n        if len(image) == 0:\n            return [], 'You need to upload at least one image.'\n\n        num_subject_in_text = (np.array(\n            self.model.special_tokenizer.encode(prompt)) ==\n                               self.model.image_token_id).sum()\n        if num_subject_in_text != len(image):\n            return (\n                [],\n                \"Number of subjects in the text description doesn't \"\n                'match the number of reference images, #text subjects: '\n                f'{num_subject_in_text} #reference image: {len(image)}',\n            )\n\n        if seed == -1:\n            seed = np.random.randint(0, 1000000)\n\n        generator = torch.Generator(device=self.device)\n        generator.manual_seed(seed)\n\n        return (\n            self.model.infer(\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                height=512,\n                width=512,\n                num_inference_steps=num_steps,\n                guidance_scale=guidance_scale,\n                num_images_per_prompt=num_images,\n                generator=generator,\n                alpha_=alpha_,\n                reference_subject_images=image,\n            )['samples'],\n            'run successfully',\n        )\n\n\ndef create_demo():\n    TITLE = 'FastComposer Demo'\n\n    DESCRIPTION = \"\"\"To run the demo, you should:\n    1. Upload your images. The order of image1 and image2 needs to match the\n    order of the subects in the prompt. You only need 1 image for\n    single subject generation.\n    2. Input proper text prompts, such as \"A woman img and a man img in\n    the snow\" or \"A painting of a man img in the style of Van Gogh\",\n    where \"img\" specifies the token you want to augment and comes\n    after the word.\n    3. Click the Run button. You can also adjust the hyperparameters to\n    improve the results. Look at the job status to see\n    if there are any errors with your input.\n    \"\"\"\n\n    cfg_file = Config.fromfile(\n        'configs/fastcomposer/fastcomposer_8xb16_FFHQ.py')\n    fastcomposer = MODELS.build(cfg_file.model)\n    model = ModelWrapper(fastcomposer)\n    # model = ModelWrapper(convert_model_to_pipeline(args, \"cpu\"))\n    with gr.Blocks() as demo:\n        gr.Markdown(TITLE)\n        gr.Markdown(DESCRIPTION)\n        with gr.Row():\n            with gr.Column():\n                with gr.Box():\n                    image1 = gr.Image(label='Image 1', type='pil')\n\n                    image2 = gr.Image(label='Image 2', type='pil')\n\n                    gr.Markdown('Upload the image for your subject')\n\n                prompt = gr.Text(\n                    value='A man img and a man img sitting in a park',\n                    label='Prompt',\n                    placeholder=\n                    'e.g. \"A woman img and a man img in the snow\", \"A painting'\n                    ' of a man img in the style of Van Gogh\"',\n                    info='Use \"img\" to specify the word you want to augment.',\n                )\n                negative_prompt = gr.Text(\n                    value='((((ugly)))), (((duplicate))), ((morbid)), '\n                    '((mutilated)), [out of frame], extra fingers, '\n                    'mutated hands, ((poorly drawn hands)), '\n                    '((poorly drawn face)), (((mutation))), '\n                    '(((deformed))), ((ugly)), blurry, ((bad anatomy)), '\n                    '(((bad proportions))), ((extra limbs)), cloned face, '\n                    '(((disfigured))). out of frame, ugly, extra limbs, '\n                    '(bad anatomy), gross proportions, (malformed limbs), '\n                    '((missing arms)), ((missing legs)), (((extra arms))), '\n                    '(((extra legs))), mutated hands, (fused fingers), '\n                    '(too many fingers), (((long neck)))',\n                    label='Negative Prompt',\n                    info='Features that you want to avoid.',\n                )\n                alpha_ = gr.Slider(\n                    label='alpha',\n                    minimum=0,\n                    maximum=1,\n                    step=0.05,\n                    value=0.75,\n                    info=\n                    'A smaller alpha aligns images with text better, but may '\n                    'deviate from the subject image. Increase alpha to improve'\n                    ' identity preservation, decrease it for '\n                    'prompt consistency.',\n                )\n                num_images = gr.Slider(\n                    label='Number of generated images',\n                    minimum=1,\n                    maximum=8,\n                    step=1,\n                    value=4,\n                )\n                run_button = gr.Button('Run')\n                with gr.Accordion(label='Advanced options', open=False):\n                    seed = gr.Slider(\n                        label='Seed',\n                        minimum=-1,\n                        maximum=1000000,\n                        step=1,\n                        value=-1,\n                        info='If set to -1, a different seed will be '\n                        'used each time.',\n                    )\n                    guidance_scale = gr.Slider(\n                        label='Guidance scale',\n                        minimum=1,\n                        maximum=10,\n                        step=1,\n                        value=5,\n                    )\n                    num_steps = gr.Slider(\n                        label='Steps',\n                        minimum=1,\n                        maximum=300,\n                        step=1,\n                        value=50,\n                    )\n            with gr.Column():\n                result = gr.Gallery(label='Generated Images').style(\n                    grid=[2], height='auto')\n                error_message = gr.Text(label='Job Status')\n\n        inputs = [\n            image1,\n            image2,\n            prompt,\n            negative_prompt,\n            seed,\n            guidance_scale,\n            alpha_,\n            num_steps,\n            num_images,\n        ]\n        run_button.click(\n            fn=model.inference, inputs=inputs, outputs=[result, error_message])\n    return demo\n\n\nif __name__ == '__main__':\n    demo = create_demo()\n    demo.queue(api_open=False)\n    demo.launch(\n        show_error=True,\n        server_name='0.0.0.0',\n        server_port=8080,\n    )\n"
  },
  {
    "path": "demo/gradio_inpainting.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport json\nimport os\nimport os.path as osp\nimport subprocess\nimport traceback\nimport warnings\nfrom typing import Dict, List, Optional, Union\n\nimport cv2\nimport gradio as gr\nimport numpy as np\nimport torch\nimport yaml\nfrom mmengine.registry import init_default_scope\n\nfrom mmagic.apis.inferencers.inpainting_inferencer import InpaintingInferencer\n\n\nclass InpaintingGradio:\n    inpainting_supported_models = [\n        # inpainting models\n        'aot_gan',\n        'deepfillv1',\n        'deepfillv2',\n        'global_local',\n        'partial_conv',\n    ]\n    inpainting_supported_models_cfg = {}\n    inpainting_supported_models_cfg_inited = False\n    pkg_path = ''\n    error_color = '#FF0000'\n    success_color = '#00FF00'\n    warning_color = '#FFFF00'\n    notice_message = ('', None, '')\n\n    def __init__(self,\n                 model_name: str = None,\n                 model_setting: int = None,\n                 model_config: str = None,\n                 model_ckpt: str = None,\n                 device: torch.device = None,\n                 extra_parameters: Dict = None,\n                 seed: int = 2022,\n                 **kwargs) -> None:\n        init_default_scope('mmagic')\n        InpaintingGradio.init_inference_supported_models_cfg()\n        self.model_name = model_name\n        self.model_setting = model_setting\n        self.model_config = model_config\n        self.model_ckpt = model_ckpt\n        self.device = device\n        self.extra_parameters = extra_parameters\n        self.seed = seed\n        if model_name or (model_config and model_ckpt):\n            inpainting_kwargs = {}\n            inpainting_kwargs.update(\n                self._get_inpainting_kwargs(model_name, model_setting,\n                                            model_config, model_ckpt,\n                                            extra_parameters))\n            self.inference = InpaintingInferencer(\n                device=device, seed=seed, **inpainting_kwargs)\n\n    def model_reconfig(self,\n                       model_name: str = None,\n                       model_setting: int = None,\n                       model_config: str = None,\n                       model_ckpt: str = None,\n                       device: torch.device = None,\n                       extra_parameters: Dict = None,\n                       seed: int = 2022,\n                       **kwargs) -> None:\n        inpainting_kwargs = {}\n        # if model_config:\n        #     model_config = model_config.name\n        # if model_ckpt:\n        #     model_ckpt = model_ckpt.name\n        if not model_name and model_setting:\n            self.send_notification(\n                'model_name should not be None when model_setting was used',\n                self.error_color, 'error')\n            return\n        elif (not model_config and not model_name) and model_ckpt:\n            self.send_notification(\n                'model_name and model_config should not be None when '\n                'model_ckpt was used', self.error_color, 'error')\n            return\n        elif (not model_ckpt and not model_name) and model_config:\n            self.send_notification(\n                'model_name and model_ckpt should not be None when '\n                'model_config was used', self.error_color, 'error')\n            return\n        inpainting_kwargs.update(\n            self._get_inpainting_kwargs(model_name, model_setting,\n                                        model_config, model_ckpt,\n                                        extra_parameters))\n        try:\n            self.inference = InpaintingInferencer(\n                device=device, seed=seed, **inpainting_kwargs)\n        except Exception as e:\n            self.send_notification('inference Exception:' + str(e),\n                                   self.error_color, 'error')\n            traceback.print_exc()\n            return\n        self.send_notification('Model config Finished!', self.success_color,\n                               'success')\n\n    @staticmethod\n    def change_text2dict(input_text: str) -> Union[Dict, None]:\n        return_dict = None\n        try:\n            return_dict = json.loads(input_text)\n        except Exception as e:\n            InpaintingGradio.send_notification(\n                'Convert string to dict Exception:' + str(e),\n                InpaintingGradio.error_color, 'error')\n        return return_dict\n\n    @staticmethod\n    def get_package_path() -> str:\n        p = subprocess.Popen(\n            'pip show mmagic', shell=True, stdout=subprocess.PIPE)\n        out, err = p.communicate()\n        out = out.decode()\n        if 'Location' not in out:\n            InpaintingGradio.send_notification('module mmagic not found',\n                                               InpaintingGradio.error_color,\n                                               'error')\n            raise Exception('module mmagic not found')\n        package_path = out[out.find('Location') +\n                           len('Location: '):].split('\\r\\n')[0] + os.sep\n        return package_path\n\n    def get_model_config(self, model_name: str) -> Dict:\n        \"\"\"Get the model configuration including model config and checkpoint\n        url.\n\n        Args:\n            model_name (str): Name of the model.\n        Returns:\n            dict: Model configuration.\n        \"\"\"\n        if model_name not in self.inpainting_supported_models:\n            self.send_notification(f'Model {model_name} is not supported.',\n                                   self.error_color, 'error')\n            raise ValueError(f'Model {model_name} is not supported.')\n        else:\n            return self.inpainting_supported_models_cfg[model_name]\n\n    @staticmethod\n    def init_inference_supported_models_cfg() -> None:\n        if not InpaintingGradio.inpainting_supported_models_cfg_inited:\n            InpaintingGradio.pkg_path = InpaintingGradio.get_package_path()\n            # all_cfgs_dir = osp.join(osp.dirname(__file__), '..', 'configs')\n            all_cfgs_dir = osp.join(InpaintingGradio.pkg_path, 'configs')\n            for model_name in InpaintingGradio.inpainting_supported_models:\n                meta_file_dir = osp.join(all_cfgs_dir, model_name,\n                                         'metafile.yml')\n                with open(meta_file_dir, 'r') as stream:\n                    parsed_yaml = yaml.safe_load(stream)\n                InpaintingGradio.inpainting_supported_models_cfg[\n                    model_name] = {}\n                InpaintingGradio.inpainting_supported_models_cfg[model_name][\n                    'settings'] = parsed_yaml['Models']  # noqa\n            InpaintingGradio.inpainting_supported_models_cfg_inited = True\n\n    def _get_inpainting_kwargs(self, model_name: Optional[str],\n                               model_setting: Optional[int],\n                               model_config: Optional[str],\n                               model_ckpt: Optional[str],\n                               extra_parameters: Optional[Dict]) -> Dict:\n        \"\"\"Get the kwargs for the inpainting inferencer.\"\"\"\n        kwargs = {}\n\n        if model_name:\n            cfgs = self.get_model_config(model_name)\n            # kwargs['task'] = cfgs['task']\n            setting_to_use = 0\n            if model_setting:\n                if isinstance(model_setting, str):\n                    model_setting = int(\n                        model_setting[0:model_setting.find(' - ')])\n                setting_to_use = model_setting\n            else:\n                model_setting = 0\n            if model_setting > len(\n                    cfgs['settings']) - 1 or model_setting < -len(\n                        cfgs['settings']):\n                self.send_notification(\n                    f\"model_setting out of range of {model_name}'s \"\n                    'cfgs settings', self.error_color, 'error')\n            config_dir = cfgs['settings'][setting_to_use]['Config']\n            config_dir = config_dir[config_dir.find('configs'):]\n            # kwargs['config'] = os.path.join(\n            #     osp.dirname(__file__), '..', config_dir)\n            kwargs['config'] = os.path.join(self.pkg_path, config_dir)\n            kwargs['ckpt'] = cfgs['settings'][setting_to_use]['Weights']\n\n        if model_config:\n            if kwargs.get('config', None) is not None:\n                warnings.warn(\n                    f'{model_name}\\'s default config '\n                    f'is overridden by {model_config}', UserWarning)\n            kwargs['config'] = model_config\n\n        if model_ckpt:\n            if kwargs.get('ckpt', None) is not None:\n                warnings.warn(\n                    f'{model_name}\\'s default checkpoint '\n                    f'is overridden by {model_ckpt}', UserWarning)\n            kwargs['ckpt'] = model_ckpt\n\n        if extra_parameters:\n            kwargs['extra_parameters'] = extra_parameters\n\n        return kwargs\n\n    @staticmethod\n    def send_notification(msg: str, color: str, label: str) -> None:\n        InpaintingGradio.notice_message = (msg, color, label)\n\n    @staticmethod\n    def get_inpainting_supported_models() -> List:\n        \"\"\"static function for getting inpainting inference supported modes.\"\"\"\n        return InpaintingGradio.inpainting_supported_models\n\n    def infer(self, input_img_arg: Dict) -> np.ndarray:\n        result = self.inference(\n            img=input_img_arg['image'], mask=input_img_arg['mask'])\n        result = cv2.cvtColor(result[1], cv2.COLOR_RGB2BGR)\n        return result\n\n    def run(self) -> None:\n        with gr.Blocks() as demo:\n            with gr.Row():\n                with gr.Column():\n                    input_model_dropdown = gr.Dropdown(\n                        choices=self.inpainting_supported_models,\n                        value=self.model_name,\n                        label='choose model')\n                    input_setting = gr.Dropdown(\n                        value=self.model_setting, label='choose setting')\n                    input_config = gr.Textbox(\n                        value=self.model_config, label='model_config_path')\n                    input_ckpt = gr.Textbox(\n                        value=self.model_ckpt, label='model_ckpt_path')\n                    input_device_dropdown = gr.Dropdown(\n                        choices=['cuda', 'cpu'],\n                        label='choose device',\n                        value='cuda')\n                    input_extra_parameters_input = gr.Textbox(\n                        value=json.dumps(self.extra_parameters),\n                        label='extra_parameters')\n                    input_extra_parameters = gr.JSON(\n                        value=self.extra_parameters, label='extra_parameters')\n                    input_seed = gr.Number(\n                        value=self.seed, precision=0, label='seed')\n                    config_button = gr.Button('CONFIG')\n                    input_extra_parameters_input.blur(\n                        self.change_text2dict, input_extra_parameters_input,\n                        input_extra_parameters)\n\n                with gr.Column(visible=False) as output_col:\n                    input_image = gr.Image(\n                        image_mode='RGB',\n                        tool='sketch',\n                        type='filepath',\n                        label='Input image')\n                    infer_button = gr.Button('INFER')\n                    infer_button.style(full_width=False)\n                    output_image = gr.Image(\n                        label='Output image', interactive=False)\n                    output_image.style(height=500)\n                    infer_button.click(\n                        self.infer, inputs=input_image, outputs=output_image)\n\n            with gr.Row():\n                label = gr.Label(\n                    value=self.notice_message[0],\n                    color=self.notice_message[1],\n                    label=self.notice_message[2])\n\n            def show_infer(*args) -> Dict:\n                self.model_reconfig(*args)\n                return {\n                    output_col:\n                    gr.update(visible=True),\n                    label:\n                    gr.update(\n                        value=self.notice_message[0],\n                        color=self.notice_message[1],\n                        label=self.notice_message[2])\n                }\n\n            def change_setting(model_name: str) -> Dict:\n                settings = InpaintingGradio.inpainting_supported_models_cfg[\n                    model_name]['settings']\n                return {\n                    input_setting:\n                    gr.update(choices=[\n                        str(i) + ' - ' + settings[i]['Config']\n                        for i in range(len(settings))\n                    ])\n                }\n\n            input_model_dropdown.change(\n                fn=change_setting,\n                inputs=input_model_dropdown,\n                outputs=input_setting)\n\n            config_button.click(show_infer, [\n                input_model_dropdown,\n                input_setting,\n                input_config,\n                input_ckpt,\n                input_device_dropdown,\n                input_extra_parameters,\n                input_seed,\n            ], [output_col, label])\n        demo.launch()\n\n\nif __name__ == '__main__':\n    inpaintingGradio = InpaintingGradio()\n    inpaintingGradio.run()\n"
  },
  {
    "path": "demo/gradio_vico.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\n\nimport gradio as gr\nimport torch\nfrom mmengine import Config\nfrom mmengine.runner import Runner\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\ncheckpoint_dir = 'ckpts'\nckpts = os.listdir(checkpoint_dir)\n\n\ndef load_base_model():\n    global cfg, model\n    cfg = Config.fromfile('configs/vico/vico.py')\n    model = MODELS.build(cfg.model)\n\n\ndef train(train_data, init_token, placeholder):\n    data_root = 'tmp'\n    concept_dir = init_token\n    image_dir = os.path.join(data_root, concept_dir)\n    os.makedirs(image_dir, exist_ok=True)\n    for i, data in enumerate(train_data):\n        image = Image.open(data.name)\n        image.save(os.path.join(image_dir, f'{i}.png'))\n    global train_cfg\n    train_cfg = Config.fromfile('configs/vico/vico.py')\n    train_cfg.work_dir = os.path.join('./work_dirs', 'vico_gradio')\n    train_cfg.dataset['data_root'] = data_root\n    train_cfg.dataset['concept_dir'] = init_token\n    train_cfg.dataset['placeholder'] = placeholder\n    train_cfg.train_dataloader['dataset'] = train_cfg.dataset\n    train_cfg.model['placeholder'] = placeholder\n    train_cfg.model['initialize_token'] = init_token\n    train_cfg.custom_hooks = None\n    runner = Runner.from_cfg(train_cfg)\n    runner.train()\n\n\nclass DummyModel:\n\n    def __init__(self, model):\n        self.model = model\n\n\ndef infer_fn(checkpoint, img_ref, prompt, negative_prompt, guidance_scale,\n             width, height, seed, inference_steps, bs):\n    state_dict = torch.load(os.path.join(checkpoint_dir, checkpoint))\n    dummy_agent = DummyModel(model)\n    dummy_agent.model.load_state_dict(state_dict, strict=False)\n    dummy_agent.model = dummy_agent.model.cuda()\n    img_ref = Image.open(img_ref)\n    with torch.no_grad():\n        output = dummy_agent.model.infer(\n            prompt=prompt,\n            image_reference=img_ref,\n            width=width,\n            height=height,\n            negative_prompt=negative_prompt,\n            guidance_scale=guidance_scale,\n            num_inference_steps=inference_steps,\n            num_images_per_prompt=bs,\n            seed=int(seed))['samples']\n\n    return output\n\n\nif __name__ == '__main__':\n    load_base_model()\n    block = gr.Blocks().queue()\n    with block:\n        with gr.Tab('Train'):\n            with gr.Row():\n                gr.Markdown('## ViCo')\n            with gr.Row():\n                with gr.Column():\n                    train_data = gr.File(\n                        label='Training Samples',\n                        file_count='directory',\n                        file_types=['image'],\n                        interactive=True,\n                    )\n                with gr.Column():\n                    init_token = gr.Textbox(label='Init token')\n                    placeholder = gr.Textbox(label='Placeholder')\n                    train_button = gr.Button(value='Start Training')\n        train_button.click(\n            fn=train, inputs=[train_data, init_token, placeholder])\n        with gr.Tab('Inference'):\n            with gr.Row():\n                gr.Markdown('## ViCo')\n            with gr.Row():\n                with gr.Column():\n                    checkpoint = gr.Dropdown(ckpts)\n                    img_ref = gr.Image(\n                        label='Image Reference',\n                        source='upload',\n                        type='filepath',\n                        elem_id='input-vid')\n                    prompt = gr.Textbox(label='Prompt')\n                    with gr.Accordion('Advanced options', open=False):\n                        n_prompt = gr.Textbox(\n                            label='Negative Prompt', value='')\n                        guidance_scale = gr.Slider(\n                            label='CFG',\n                            minimum=0.0,\n                            maximum=13.0,\n                            value=7.5,\n                            step=0.5)\n                        width = gr.Slider(\n                            label='Image Width',\n                            minimum=256,\n                            maximum=768,\n                            value=512,\n                            step=64)\n                        height = gr.Slider(\n                            label='Image Width',\n                            minimum=256,\n                            maximum=768,\n                            value=512,\n                            step=64)\n                        seed = gr.Number(\n                            label='Seed',\n                            value=0,\n                        )\n                        num_inference_steps = gr.Slider(\n                            label='Inference Steps',\n                            minimum=20,\n                            maximum=80,\n                            value=50,\n                            step=5)\n                        bs = gr.Slider(\n                            label='Batch Size',\n                            minimum=1,\n                            maximum=4,\n                            value=1,\n                            step=1)\n\n                with gr.Column():\n                    output = gr.Gallery(\n                        label='Output Image', elem_id='image-output')\n                    run_button = gr.Button(label='Run')\n\n            ips = [\n                checkpoint, img_ref, prompt, n_prompt, guidance_scale, width,\n                height, seed, num_inference_steps, bs\n            ]\n            run_button.click(fn=infer_fn, inputs=ips, outputs=output)\n    block.launch(server_name='0.0.0.0', share=True)\n"
  },
  {
    "path": "demo/mmagic_inference_demo.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# isort: off\nfrom argparse import ArgumentParser\nfrom mmengine import DictAction\nfrom mmagic.apis import MMagicInferencer\n\n\ndef parse_args():\n    parser = ArgumentParser()\n    parser.add_argument(\n        '--img', type=str, default=None, help='Input image file.')\n    parser.add_argument(\n        '--video', type=str, default=None, help='Input video file.')\n    parser.add_argument(\n        '--label',\n        type=int,\n        default=None,\n        help='Input label for conditional models.')\n    parser.add_argument(\n        '--trimap', type=str, default=None, help='Input for matting models.')\n    parser.add_argument(\n        '--mask',\n        type=str,\n        default=None,\n        help='path to input mask file for inpainting models')\n    parser.add_argument(\n        '--text',\n        type=str,\n        default='',\n        help='text input for text2image models')\n    parser.add_argument(\n        '--result-out-dir',\n        type=str,\n        default=None,\n        help='Output img or video path.')\n    parser.add_argument(\n        '--model-name',\n        type=str,\n        default=None,\n        help='Pretrained mmagic algorithm')\n    parser.add_argument(\n        '--model-setting',\n        type=int,\n        default=None,\n        help='Pretrained mmagic algorithm setting')\n    parser.add_argument(\n        '--config-name',\n        type=str,\n        default=None,\n        help='Pretrained mmagic algorithm config name')\n    parser.add_argument(\n        '--model-config',\n        type=str,\n        default=None,\n        help='Path to the custom config file of the selected mmagic model.')\n    parser.add_argument(\n        '--model-ckpt',\n        type=str,\n        default=None,\n        help='Path to the custom checkpoint file of the selected det model.')\n    parser.add_argument(\n        '--device',\n        type=str,\n        default='cuda',\n        help='Device used for inference.')\n    parser.add_argument(\n        '--extra-parameters',\n        nargs='+',\n        action=DictAction,\n        help='Other customized kwargs for different model')\n    parser.add_argument(\n        '--seed',\n        type=int,\n        default=2022,\n        help='The random seed used in inference.')\n\n    # print supported tasks and models\n    parser.add_argument(\n        '--print-supported-models',\n        action='store_true',\n        help='print all supported models for inference.')\n    parser.add_argument(\n        '--print-supported-tasks',\n        action='store_true',\n        help='print all supported tasks for inference.')\n    parser.add_argument(\n        '--print-task-supported-models',\n        type=str,\n        default=None,\n        help='print all supported models for one task')\n\n    args, unknown = parser.parse_known_args()\n\n    return args, unknown\n\n\ndef main():\n    args, unknown = parse_args()\n    assert len(unknown) % 2 == 0, (\n        'User defined arguments must be passed in pair, but receive '\n        f'{len(unknown)} arguments.')\n\n    user_defined = {}\n    for idx in range(len(unknown) // 2):\n        key, val = unknown[idx * 2], unknown[idx * 2 + 1]\n        assert key.startswith('--'), (\n            'Key of user define arguments must be start with \\'--\\', but '\n            f'receive \\'{key}\\'.')\n\n        key = key.replace('-', '_')\n        val = int(val) if val.isdigit() else val\n        user_defined[key[2:]] = val\n\n    user_defined.update(vars(args))\n\n    if args.print_supported_models:\n        inference_supported_models = \\\n            MMagicInferencer.get_inference_supported_models()\n        print('all supported models:')\n        print(inference_supported_models)\n        return\n\n    if args.print_supported_tasks:\n        supported_tasks = MMagicInferencer.get_inference_supported_tasks()\n        print('all supported tasks:')\n        print(supported_tasks)\n        return\n\n    if args.print_task_supported_models:\n        task_supported_models = \\\n            MMagicInferencer.get_task_supported_models(\n                args.print_task_supported_models)\n        print('translation models:')\n        print(task_supported_models)\n        return\n\n    editor = MMagicInferencer(**vars(args))\n    editor.infer(**user_defined)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "demo/mmagic_inference_tutorial.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# MMagic Inference Tutorial\\n\",\n    \"\\n\",\n    \"Welcome to MMagic! This is the official tutorial for using MMagic inference api to predict your own image or video.\\n\",\n    \"\\n\",\n    \"In this tutorial, you will learn how to\\n\",\n    \"\\n\",\n    \"[1. Install MMagic](#1-install-mmagic)\\n\",\n    \"\\n\",\n    \"[2. Check inference supported tasks and models](#2-check-inference-supported-tasks-and-models)\\n\",\n    \"\\n\",\n    \"[3. Perform inference using MMagic\\n\",\n    \" inference API](#3-perform-inference-with-mmagic-api)\\n\",\n    \"\\n\",\n    \"&emsp; [3.1 Prepare some images or videos for inference](#31-prepare-some-images-or-videos-for-inference)\\n\",\n    \"\\n\",\n    \"&emsp; [3.2 Perform inference with two lines of python code](#32-perform-inference-with-two-lines-of-python-code)\\n\",\n    \"\\n\",\n    \"&emsp; [3.3 Infer with different settings of a specific model](#33-infer-with-different-settings-of-a-specific-model)\\n\",\n    \"\\n\",\n    \"&emsp; [3.4 Infer with extra parameters](#34-inference-with-extra-parameters)\\n\",\n    \"\\n\",\n    \"[4. Perform inference with models of different tasks including](#4-perform-inference-with-models-of-different-tasks):\\n\",\n    \"\\n\",\n    \"&emsp; [4.1 Inference of conditional GANs models](#41-inference-of-conditional-gan-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.2 Inference of inpanting models](#42-inference-of-inpainting-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.3 Inference of matting models](#43-inference-of-matting-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.4 Inference of super resolution models](#44-inference-of-image-super-resolution-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.5 Inference of image2image models](#45-inference-of-image-translation-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.6 Inference of unconditional GANs models](#46-inference-of-unconditional-gan-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.7 Inference of video interpolation models](#47-inference-of-video-interpolation-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.8 Inference of video super resolution models](#48-inference-of-video-restoration-models)\\n\",\n    \"\\n\",\n    \"&emsp; [4.9 Inference of text-to-image models](#49-inference-of-text-to-image-models)\\n\",\n    \"\\n\",\n    \"Let's start!\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 1. Install MMagic\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"shellscript\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"torch                         1.12.1+cu113\\n\",\n      \"torchvision                   0.13.1+cu113\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Check PyTorch version\\n\",\n    \"!pip3 list | grep torch\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"shellscript\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# Install mmcv dependency via openmim\\n\",\n    \"!pip3 install openmim\\n\",\n    \"!mim install 'mmcv>=2.0.0'\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"shellscript\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# Install mmagic from source\\n\",\n    \"%cd ..\\n\",\n    \"!pip3 install -e .\\n\",\n    \"%cd demo\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"1.0.0rc7\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# Check MMagic installation\\n\",\n    \"import mmagic\\n\",\n    \"print(mmagic.__version__)\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 2. Check inference supported tasks and models\\n\",\n    \"\\n\",\n    \"There are multiple task types in MMagic: Matting, Inpainting, Video Super-Resolution, Image Super-Resolution, Image2Image, Unconditional GANs, Conditional GANs, Video Interpolation. \\n\",\n    \"\\n\",\n    \"We provide some models for each task. All available models and tasks could be printed out like this.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"all supported models:\\n\",\n      \"['inst_colorization', 'biggan', 'sngan_proj', 'sagan', 'dcgan', 'wgan-gp', 'lsgan', 'ggan', 'pggan', 'styleganv1', 'styleganv2', 'styleganv3', 'gca', 'global_local', 'aot_gan', 'pix2pix', 'cyclegan', 'srcnn', 'srgan_resnet', 'edsr', 'esrgan', 'rdn', 'dic', 'ttsr', 'glean', 'real_esrgan', 'flavr', 'cain', 'edvr', 'tdan', 'basicvsr', 'iconvsr', 'basicvsr_pp', 'real_basicvsr', 'disco_diffusion', 'eg3d', 'controlnet_animation']\\n\",\n      \"all supported tasks:\\n\",\n      \"['Unconditional GANs', 'controlnet_animation', 'Video Interpolation', '3D-aware Generation', 'Conditional GANs', 'Image Super-Resolution', 'Text2Image, Image2Image', 'Colorization', 'Inpainting', 'Matting', 'Image2Image', 'Video Super-Resolution']\\n\",\n      \"translation models:\\n\",\n      \"['pix2pix', 'cyclegan']\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# print all supported models for inference.\\n\",\n    \"inference_supported_models = MMagicInferencer.get_inference_supported_models()\\n\",\n    \"print('all supported models:')\\n\",\n    \"print(inference_supported_models)\\n\",\n    \"\\n\",\n    \"# print all supported tasks for inference.\\n\",\n    \"supported_tasks = MMagicInferencer.get_inference_supported_tasks()\\n\",\n    \"print('all supported tasks:')\\n\",\n    \"print(supported_tasks)\\n\",\n    \"\\n\",\n    \"# print all supported models for one task, take image translation for example.\\n\",\n    \"task_supported_models = MMagicInferencer.get_task_supported_models('Image2Image')\\n\",\n    \"print('translation models:')\\n\",\n    \"print(task_supported_models)\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 3. Perform inference with MMagic API\\n\",\n    \"\\n\",\n    \"Next we describe how to perform inference with python code snippets.\\n\",\n    \"\\n\",\n    \"(We also provide command line interface for you to do inference by running mmagic_inference_demo.py. The usage of this interface could be found in [README.md](./README.md) and more guidance could be found in the [documentation](https://mmagic.readthedocs.io/en/latest/user_guides/3_inference.html#).)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 3.1 Prepare some images or videos for inference\\n\",\n    \"\\n\",\n    \"Before we start to perform inference with a pretrained model, some input images or videos should be prepared. \\n\",\n    \"\\n\",\n    \"Take image translation for example. We need a input image to be translated.\\n\",\n    \"\\n\",\n    \"Put your image to some directory and make a directory to save processed image.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"shellscript\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# make a dir for input image and output image\\n\",\n    \"!mkdir -p ./../resources/input/translation\\n\",\n    \"!mkdir -p ./../resources/output/translation\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"We also have prepared some images and videos for you. You can download by running [download_inference_resouces.py](./download_inference_resources.py).\\n\",\n    \"\\n\",\n    \"This script allows you to see what resources are available and makes download easier.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"vscode\": {\n     \"languageId\": \"shellscript\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"all inference resources:\\n\",\n      \"Matting\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/matting/GT05.jpg\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/matting/GT05_trimap.jpg\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/matting/readme.md\\n\",\n      \"Inpainting\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md\\n\",\n      \"Image Super-Resolution\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/restoration/000001.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/restoration/0901x2.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/restoration/readme.md\\n\",\n      \"Image2Image Translation\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/translation/gt_mask_0.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/translation/readme.md\\n\",\n      \"Video Interpolation\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/video_interpolation/readme.md\\n\",\n      \"Video Super-Resolution\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/video_restoration/readme.md\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/video_restoration/v_Basketball_g01_c01.avi\\n\",\n      \"all task type:\\n\",\n      \"Matting\\n\",\n      \"Inpainting\\n\",\n      \"Image Super-Resolution\\n\",\n      \"Image2Image Translation\\n\",\n      \"Video Interpolation\\n\",\n      \"Video Super-Resolution\\n\",\n      \"RESOURCES of task Inpainting:\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png\\n\",\n      \"https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/GT05.jpg to ../resources/input/matting/GT05.jpg\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/GT05_trimap.jpg to ../resources/input/matting/GT05_trimap.jpg\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/readme.md to ../resources/input/matting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png to ../resources/input/inpainting/bbox_mask.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png to ../resources/input/inpainting/celeba_test.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md to ../resources/input/inpainting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/000001.png to ../resources/input/restoration/000001.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/0901x2.png to ../resources/input/restoration/0901x2.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/readme.md to ../resources/input/restoration/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/translation/gt_mask_0.png to ../resources/input/translation/gt_mask_0.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/translation/readme.md to ../resources/input/translation/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4 to ../resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_interpolation/readme.md to ../resources/input/video_interpolation/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 to ../resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/readme.md to ../resources/input/video_restoration/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/v_Basketball_g01_c01.avi to ../resources/input/video_restoration/v_Basketball_g01_c01.avi\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png to ../resources/input/inpainting/bbox_mask.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png to ../resources/input/inpainting/celeba_test.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md to ../resources/input/inpainting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/GT05.jpg to ../your_dir/input/matting/GT05.jpg\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/GT05_trimap.jpg to ../your_dir/input/matting/GT05_trimap.jpg\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/matting/readme.md to ../your_dir/input/matting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/bbox_mask.png to ../your_dir/input/inpainting/bbox_mask.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/celeba_test.png to ../your_dir/input/inpainting/celeba_test.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/inpainting/readme.md to ../your_dir/input/inpainting/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/000001.png to ../your_dir/input/restoration/000001.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/0901x2.png to ../your_dir/input/restoration/0901x2.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/restoration/readme.md to ../your_dir/input/restoration/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/translation/gt_mask_0.png to ../your_dir/input/translation/gt_mask_0.png\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/translation/readme.md to ../your_dir/input/translation/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4 to ../your_dir/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_interpolation/readme.md to ../your_dir/input/video_interpolation/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 to ../your_dir/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/readme.md to ../your_dir/input/video_restoration/readme.md\\n\",\n      \"Download finished: https://download.openmmlab.com/mmediting/resources/input/video_restoration/v_Basketball_g01_c01.avi to ../your_dir/input/video_restoration/v_Basketball_g01_c01.avi\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# see all resources\\n\",\n    \"!python download_inference_resources.py --print-all\\n\",\n    \"# see all task types\\n\",\n    \"!python download_inference_resources.py --print-task-type\\n\",\n    \"# see resources of one specific task\\n\",\n    \"!python download_inference_resources.py --print-task 'Inpainting'\\n\",\n    \"# download all resouces to default dir '../resources'\\n\",\n    \"!python download_inference_resources.py\\n\",\n    \"# download resouces of one task\\n\",\n    \"!python download_inference_resources.py --task 'Inpainting'\\n\",\n    \"# download to the directory you want\\n\",\n    \"!python download_inference_resources.py --root-dir '../resources'\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 3.2 Perform inference with two lines of python code. \\n\",\n    \"\\n\",\n    \"There are two steps:\\n\",\n    \"\\n\",\n    \"First, create a MMagicInferencer instance by a pretrained model name.\\n\",\n    \"\\n\",\n    \"Second, infer your own image with this MMagicInferencer instance. The translated image will be saved to result_out_dir.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_1x1_80k_facades_20210902_170442-c0958d50.pth\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance\\n\",\n    \"editor = MMagicInferencer('pix2pix')\\n\",\n    \"# Infer a image. Input image path and output image path is needed.\\n\",\n    \"results = editor.infer(img='../resources/input/translation/gt_mask_0.png', result_out_dir='../resources/output/translation/tutorial_translation_pix2pix_res.jpg')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"You could see your result image by plotting it out.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# plot the result image\\n\",\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"img = mmcv.imread('../resources/output/translation/tutorial_translation_pix2pix_res.jpg')\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 3.3 Infer with different settings of a specific model\\n\",\n    \"\\n\",\n    \"There are some different configs and checkpoints for one model.\\n\",\n    \"\\n\",\n    \"You could configure different settings by passing 'model_setting' to 'MMagicInferencer'. Every model's default setting is 0.\\n\",\n    \"\\n\",\n    \"Take conditional GAN model 'biggan' as an example. We have pretrained model for Cifar and Imagenet, and all pretrained models of 'biggan' are listed in its [metafile.yaml](../configs/biggan/metafile.yml)\\n\",\n    \"\\n\",\n    \"There are six settings in this metafile. If you choose setting 1, then the config 'configs/biggan/biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py' will be used. If 'model_setting' is not passed to 'MMagicInferencer', the config ‘configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py’ will be used by default.\\n\",\n    \"\\n\",\n    \"And you could also use 'config_name' to replace 'model_setting'. For example, you can init a MMagicInferencer with 'MMagicInferencer('biggan', config_name='biggan_2xb25-500kiters_cifar10-32x32')', which is the same with 'MMagicInferencer('biggan', model_setting=0)'.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"result_out_dir = '../resources/output/conditional/tutorial_conditinal_biggan_res_setting1.jpg'\\n\",\n    \"# configure setting to 1\\n\",\n    \"editor = MMagicInferencer('biggan', model_setting=1) \\n\",\n    \"results = editor.infer(label=1, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 3.4 Infer with extra parameters\\n\",\n    \"\\n\",\n    \"Some models may have extra parameters that could be configured to perform inference.\\n\",\n    \"\\n\",\n    \"Take 'biggan' for example. You could configure 'num_batches' in a dict and pass it to 'MMagicInferencer'.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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5513utfX6/jvuusuev/7309Hjx51PydOnHDvr9dxW5w6dYouueQS+tjHPkZPPPEEvfLKK/Tggw/St7/9bXfMel33FhYWJu77Qw89RADo0UcfJaL1f+/PFGvOQLnpppto37597v9KKdqxYwfdfffd5/GsfrCYNlC01rR9+3b64z/+Y/fa0tISRVFE//AP/0BERC+++CIBoP/5n/9xx3zta18jIQS9/vrr5+zcfxBYWFggALR//34i4rEGQUBf+tKX3DH/93//RwDoscceIyI28KSUdOzYMXfMPffcQ51Oh7IsO7cD+AFg06ZN9Dd/8zcbZuz9fp+uuOIKeuihh+jHf/zHnYGynsd/11130XXXXbfqe+t53Baf+cxn6Md+7Mfe8P2NtO7deeeddPnll5PWekPc+zPFmkrx5HmOp59+Gnv37nWvSSmxd+9ePPbYY+fxzN5ZvPrqqzh27NjEuLvdLnbv3u3G/dhjj2F2dhY33nijO2bv3r2QUuKJJ5445+f8drC8vAxg3LX66aefRlEUE+O/6qqrsGvXronxf+ADH8C2bdvcMR/+8IfR6/XwwgsvnMOzf3tQSuG+++7DcDjEnj17NszY9+3bh1tvvXVinMD6v/cvv/wyduzYgXe/+9247bbbcPjwYQDrf9wA8JWvfAU33ngjfvEXfxFbt27F9ddfj7/+679272+UdS/Pc3zxi1/Exz/+cQghNsS9P1OsKQPl5MmTUEpN3BQA2LZtG44dO3aezuqdhx3bm4372LFj2Lp168T7vu9jbm5uTV0brTU+9alP4YMf/CCuueYaADy2MAwxOzs7cez0+Fe7Pva9Cx3PP/882u02oijCHXfcgfvvvx9XX331hhj7fffdh//93//F3XffveK99Tz+3bt34/Of/zy+/vWv45577sGrr76KD33oQ+j3++t63BavvPIK7rnnHlxxxRV48MEH8YlPfAK/+Zu/iS984QsANs6698ADD2BpaQkf+9jHAKzvOX+28M/3CdSoUcW+fftw4MABfPOb3zzfp3JOceWVV+LZZ5/F8vIyvvzlL+P222/H/v37z/dpveM4cuQI7rzzTjz00ENoNBrn+3TOKW655Rb372uvvRa7d+/GJZdcgn/8x39EHMfn8czODbTWuPHGG/FHf/RHAIDrr78eBw4cwF/+5V/i9ttvP89nd+7wt3/7t7jllluwY8eO830qFxzWVARlfn4enuetYDMfP34c27dvP09n9c7Dju3Nxr19+3YsLCxMvF+WJU6dOrVmrs0nP/lJ/Ou//iseffRRXHzxxe717du3I89zLC0tTRw/Pf7Vro9970JHGIZ4z3vegxtuuAF33303rrvuOvzpn/7puh/7008/jYWFBfzQD/0QfN+H7/vYv38//uzP/gy+72Pbtm3revxVzM7O4r3vfS++/e1vr/v7DgAXXXQRrr766onX3ve+97k010ZY9w4dOoT/+I//wK/+6q+61zbCvT9TrCkDJQxD3HDDDXj44Yfda1prPPzww9izZ895PLN3Fpdddhm2b98+Me5er4cnnnjCjXvPnj1YWlrC008/7Y555JFHoLXG7t27z/k5nw2ICJ/85Cdx//3345FHHsFll1028f4NN9yAIAgmxn/w4EEcPnx4YvzPP//8xGL10EMPodPprFgE1wK01siybN2P/eabb8bzzz+PZ5991v3ceOONuO2229y/1/P4qxgMBvjOd76Diy66aN3fdwD44Ac/uEJO4KWXXsIll1wCYP2vewBw7733YuvWrbj11lvdaxvh3p8xzjdL92xx3333URRF9PnPf55efPFF+vVf/3WanZ2dYDOvRfT7fXrmmWfomWeeIQD0J3/yJ/TMM8/QoUOHiIjL7WZnZ+mf//mf6bnnnqOf/dmfXbXc7vrrr6cnnniCvvnNb9IVV1xxwZfbERF94hOfoG63S9/4xjcmSu9Go5E75o477qBdu3bRI488Qk899RTt2bOH9uzZ4963ZXc/8RM/Qc8++yx9/etfpy1btqyJsrvPfvaztH//fnr11Vfpueeeo89+9rMkhKB///d/J6L1PfbVUK3iIVq/4//0pz9N3/jGN+jVV1+l//7v/6a9e/fS/Pw8LSwsENH6HbfFk08+Sb7v0x/+4R/Syy+/TH//939PzWaTvvjFL7pj1vO6p5SiXbt20Wc+85kV7633e3+mWHMGChHRn//5n9OuXbsoDEO66aab6PHHHz/fp/S28eijjxKAFT+33347EXHJ3e/93u/Rtm3bKIoiuvnmm+ngwYMTn7G4uEgf/ehHqd1uU6fToV/+5V+mfr9/HkZzdlht3ADo3nvvdcckSUK/8Ru/QZs2baJms0k///M/T0ePHp34nO9+97t0yy23UBzHND8/T5/+9KepKIpzPJqzx8c//nG65JJLKAxD2rJlC918883OOCFa32NfDdMGynod/0c+8hG66KKLKAxDete73kUf+chHJjRA1uu4q/iXf/kXuuaaayiKIrrqqqvor/7qrybeX8/r3oMPPkgAVoyHaGPc+zOBICI6L6GbGjVq1KhRo0aNN8Ca4qDUqFGjRo0aNTYGagOlRo0aNWrUqHHBoTZQatSoUaNGjRoXHGoDpUaNGjVq1KhxwaE2UGrUqFGjRo0aFxxqA6VGjRo1atSoccGhNlBq1KhRo0aNGhccagOlRo0aNWrUqHHBoTZQatSoUaNGjRoXHGoDpUaNGjVq1KhxwaE2UGrUqFGjRo0aFxz+H3bgwRzto99uAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"result_out_dir = '../resources/output/conditional/tutorial_conditinal_biggan_res_sample6.jpg'\\n\",\n    \"# use a dict to pass the parameters, num_batches means images output num for one inference\\n\",\n    \"editor = MMagicInferencer('biggan', model_setting=1, extra_parameters={'num_batches':6}) \\n\",\n    \"results = editor.infer(label=1, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image and we could see 6 images in a inference batch\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"To know what extra parameters that a model have, do like this.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth\\n\",\n      \"['num_batches', 'sample_model']\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"editor = MMagicInferencer('biggan', model_setting=1) \\n\",\n    \"editor.print_extra_parameters()\\n\",\n    \"# 'num_batches' and 'sample_model' are extra parameters in 'biggan' model.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 4. Perform inference with models of different tasks\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.1 Inference of conditional GAN models\\n\",\n    \"\\n\",\n    \"Conditional GAN models take a label as input and output a image. We take 'biggan' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/mnt/petrelfs/liuwenran/miniconda3/envs/py38pt19cu111/lib/python3.8/site-packages/mmcv/cnn/bricks/conv_module.py:153: UserWarning: Unnecessary conv bias before batch/instance norm\\n\",\n      \"  warnings.warn(\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/biggan/biggan_imagenet1k_128x128_b32x8_best_fid_iter_1232000_20211111_122548-5315b13d.pth\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/mnt/petrelfs/liuwenran/miniconda3/envs/py38pt19cu111/lib/python3.8/site-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  /pytorch/c10/core/TensorImpl.h:1156.)\\n\",\n      \"  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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8Hu/93vhe77ne8Lh4WG4cePG8920e9p+8Rd/MfyDf/APwn/9r/81AOGtb33rmfd/4id+IhwcHIRf+IVfCL/zO78T/vpf/+vhpS99aajrejjm67/+68OrXvWq8Bu/8Rvh//yf/xO+5Eu+JHzHd3zH5/lK7i37uq/7uvBzP/dz4QMf+EB43/veF77hG74hPPjgg2G5XA7HfN/3fV948YtfHN7+9reH3/7t3w5/7s/9ufDn//yfH9631oav/MqvDI888kh473vfG37xF38xXLp0KfzIj/zI83FJ95T99//+38P/+l//K/zhH/5h+NCHPhT+/t//+yHP8/CBD3wghLDr+8+H/eZv/mZ46KGHwitf+crwAz/wA8Pru77/3Nmb3vSm8BVf8RXhiSeeGH5u3rw5vP9C6ft7DqB8zdd8TXjDG94w/O2cC/fff39485vf/Dy26gvLtgGK9z5cu3Yt/ORP/uTw2vHxcSjLMvzH//gfQwghfPCDHwxA+K3f+q3hmF/6pV8KSqnw6U9/+vPW9nvdnnzyyQCEd77znSEE6ec8z8N//s//eTjm93//9wMQ3vWud4UQBFxqrcP169eHY372Z3827O/vh7ZtP78X8AVgFy5cCP/6X//rXd9/HmyxWISXvexl4W1ve1v4S3/pLw0AZdf3n1t705veFF71qled+94Lqe/vKRdP13W85z3v4ZFHHhle01rzyCOP8K53vet5bNkXtj366KNcv379TL8fHBzwmte8Zuj3d73rXRweHvLVX/3VwzGPPPIIWmve/e53f97bfK/ayckJAEdHRwC85z3voe/7M33/8pe/nAcffPBM33/VV30VV69eHY75uq/7Ok5PT/m93/u9z2Pr721zzvGWt7yF1WrFww8/vOv7z4O94Q1v4Bu/8RvP9DHsxv3nwz784Q9z//3380Vf9EW8/vWv55Of/CTwwur7e6pY4FNPPYVz7kynAFy9epU/+IM/eJ5a9YVv169fBzi339N7169f58qVK2fez7KMo6Oj4ZidPbN57/nBH/xBvvZrv5av/MqvBKRfi6Lg8PDwzLHbfX/evUnv7eyZ7f3vfz8PP/wwTdMwn89561vfyite8Qre97737fr+c2hvectb+H//7//xW7/1W097bzfuP7f2mte8hp//+Z/ny77sy3jiiSf4sR/7Mf7iX/yLfOADH3hB9f09BVB2trMvZHvDG97ABz7wAX7913/9+W7Knyj7si/7Mt73vvdxcnLCf/kv/4Xv/M7v5J3vfOfz3awvaHvsscf4gR/4Ad72trdRVdXz3Zw/cfa6171u+PcrX/lKXvOa1/CSl7yE//Sf/hOTyeR5bNlZu6dcPJcuXcIY8zQ18Y0bN7h27drz1KovfEt9+0z9fu3aNZ588skz71truX379u7efAb2xje+kf/5P/8nv/Irv8KLXvSi4fVr167RdR3Hx8dnjt/u+/PuTXpvZ89sRVHwJV/yJbz61a/mzW9+M6961av4qZ/6qV3ffw7tPe95D08++SR/5s/8GbIsI8sy3vnOd/LTP/3TZFnG1atXd33/ebTDw0O+9Eu/lI985CMvqHF/TwGUoih49atfzdvf/vbhNe89b3/723n44Yefx5Z9YdtLX/pSrl27dqbfT09Pefe73z30+8MPP8zx8THvec97hmPe8Y534L3nNa95zee9zfeKhRB44xvfyFvf+lbe8Y538NKXvvTM+69+9avJ8/xM33/oQx/ik5/85Jm+f//7338GIL7tbW9jf3+fV7ziFZ+fC/kCMu89bdvu+v5zaK997Wt5//vfz/ve977h56u/+qt5/etfP/x71/efP1sul3z0ox/lvvvue2GN+8+a3PbzZG95y1tCWZbh53/+58MHP/jB8L3f+73h8PDwjJp4Z8/dFotFeO973xve+973BiD883/+z8N73/ve8IlPfCKEIGHGh4eH4b/9t/8Wfvd3fzd80zd907lhxn/6T//p8O53vzv8+q//enjZy162CzN+Fvv+7//+cHBwEH71V3/1TMjfer0ejvm+7/u+8OCDD4Z3vOMd4bd/+7fDww8/HB5++OHh/RTy91f/6l8N73vf+8Iv//Ivh8uXL+/CLT8D++Ef/uHwzne+Mzz66KPhd3/3d8MP//APB6VU+N//+3+HEHZ9//m0cRRPCLu+/1zaD/3QD4Vf/dVfDY8++mj4v//3/4ZHHnkkXLp0KTz55JMhhBdO399zACWEEH7mZ34mPPjgg6EoivA1X/M14Td+4zee7ybd8/Yrv/IrAXjaz3d+53eGECTU+Ed/9EfD1atXQ1mW4bWvfW340Ic+dOYct27dCt/xHd8R5vN52N/fD9/1Xd8VFovF83A1946d1+dA+Lmf+7nhmLquw9/6W38rXLhwIUyn0/At3/It4Yknnjhzno9//OPhda97XZhMJuHSpUvhh37oh0Lf95/nq7n37Lu/+7vDS17yklAURbh8+XJ47WtfO4CTEHZ9//m0bYCy6/vPnX3bt31buO+++0JRFOGBBx4I3/Zt3xY+8pGPDO+/UPpehRDCZ4+P2dnOdrazne1sZzv749s9pUHZ2c52trOd7WxnfzJsB1B2trOd7WxnO9vZC852AGVnO9vZzna2s5294GwHUHa2s53tbGc729kLznYAZWc729nOdraznb3gbAdQdrazne1sZzvb2QvOdgBlZzvb2c52trOdveBsB1B2trOd7WxnO9vZC852AGVnO9vZzna2s5294GwHUHa2s53tbGc729kLznYAZWc729nOdraznb3gbAdQdrazne1sZzvb2QvO/v9PftkIpywvzAAAAABJRU5ErkJggg==\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"result_out_dir = '../resources/output/conditional/tutorial_conditinal_biggan_res.jpg'\\n\",\n    \"editor = MMagicInferencer('biggan', model_setting=1)\\n\",\n    \"results = editor.infer(label=1, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.2 Inference of inpainting models\\n\",\n    \"\\n\",\n    \"Inpaiting models take a masked image and mask pair as input, and output a inpainted image. We take 'global_local' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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Cz7L4u97q/nj3zt+/Dh2797deT+KIiwvLz8nxu26667Da17zGhw4cAD3338/3ve+9+EVr3gFDh8+DKXUc2Z8rLV4+9vfjpe97GW45JJLAOAJranjx49vOb/8ez9PstUYAcAb3vAGnH/++di3bx/uvPNOvOc978GRI0fw+c9/HsAzM0bbSnHNpSuveMUrwvPLLrsMV1xxBc4//3z88z//M/I8P4tXNpftKr/9278dnl966aW47LLLcNFFF+GWW27BVVdddRav7NmVQ4cO4a677urkjOfSlccao3a+89JLL8XevXtx1VVX4f7778dFF130jJx7W4UKd+7cCaXUJhTPQw89hJWVlbN0Vf93ZHFxEb/wC7+A++67DysrK6iqCqurq51jnstj5e/7TPNnZWVlE9BHa42TJ08+J8ftwgsvxM6dO3HfffcBeG6Mz9ve9jZ86Utfwje+8Y1Og8MnsqZWVla2nF/+vZ8Xeawx2kquuOIKAOjMoac7RttKcSVJghe/+MX42te+Fl6z1uJrX/saDh48eBav7P+GrK+v4/7778fevXvx4he/GHEcd8bqyJEjOHr06HN2rA4cOICVlZXOmKytreG2224LY3Lw4EGsrq7i9ttvD8d8/etfh7U2LMDnkvz4xz/GiRMnsHfvXgA/3+NDRHjb296GL3zhC/j617+OAwcOdN5/Imvq4MGD+P73v99R7jfffDOGwyEuvvjiZ+dGfobyeGO0ldxxxx0A0JlDT3uMniKY5KzJP/7jP1KapnTTTTfRPffcQ295y1tocXGxg1B5rsi73vUuuuWWW+iBBx6g//iP/6Crr76adu7cSQ8//DAREb31rW+l8847j77+9a/Td7/7XTp48CAdPHjwLF/1z1ZGoxF973vfo+9973sEgP76r/+avve979EPf/hDIiL6i7/4C1pcXKQvfvGLdOedd9KrX/1qOnDgAE2n0/Ad1113Hb3oRS+i2267jb71rW/R85//fHr9619/tm7pGZUzjc9oNKI/+ZM/ocOHD9MDDzxAX/3qV+mXf/mX6fnPfz7NZrPwHT+v43PDDTfQwsIC3XLLLXTs2LHwmEwm4ZjHW1Naa7rkkkvommuuoTvuuIO+8pWv0K5du+i9733v2bilZ1web4zuu+8++uhHP0rf/e536YEHHqAvfvGLdOGFF9KVV14ZvuOZGKNtp7iIiP7u7/6OzjvvPEqShF760pfSd77znbN9SWdFXve619HevXspSRLav38/ve51r6P77rsvvD+dTukP//APaWlpiYqioN/6rd+iY8eOncUr/tnLN77xDQKw6XH99dcTEUPiP/CBD9CePXsoTVO66qqr6MiRI53vOHHiBL3+9a+nfr9Pw+GQfu/3fo9Go9FZuJtnXs40PpPJhK655hratWsXxXFM559/Pr35zW/eZBT+vI7PVuMCgD71qU+FY57ImnrwwQfpFa94BeV5Tjt37qR3vetdVNf1s3w3Pxt5vDE6evQoXXnllbS8vExpmtLznvc8eve7302nT5/ufM/THaN5W5O5zGUuc5nLtpJtleOay1zmMpe5zGWuuOYyl7nMZS7bSuaKay5zmctc5rKtZK645jKXucxlLttK5oprLnOZy1zmsq1krrjmMpe5zGUu20rmimsuc5nLXOayrWSuuOYyl7nMZS7bSuaKay5zmctc5rKtZK645jKXucxlLttK5oprLnOZy1zmsq1krrjmMpe5zGUu20r+PwKBWqaN2WKvAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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rOrqam9PsrKy1NraqpqaGm9OeXm5urq6vG/AoeSrr75SS0uLUlNTJQ3u/XHOqaioSHv27FF5ebnS09Mjzl/P91RWVpY+++yziLiXlpbK7/dr+vTpA/NC+tG19qg7R44ckaSIr6Eb3qNeXkwSNa+//rrz+Xxu586d7vjx427NmjUuISEh4gqVoWLjxo2uoqLC1dfXu3/9618uOzvbJSUluebmZuecc2vXrnUTJ0505eXl7vDhwy4rK8tlZWVFedX9q62tzX3yySfuk08+cZLcH/7wB/fJJ5+4f//738455373u9+5hIQE984777hPP/3UPfjggy49Pd19++233mPk5eW5H//4x666utodPHjQ3XHHHW758uXRekl96mr709bW5p588klXVVXl6uvr3T//+U/3k5/8xN1xxx3uwoUL3mMM1v1Zt26di4+PdxUVFa6xsdEb58+f9+Zc63uqs7PTZWRkuJycHHfkyBG3b98+N27cOFdcXByNl9TnrrVHdXV17rnnnnOHDx929fX17p133nGTJ0928+bN8x6jL/bIXLicc+6ll15yEydOdCNHjnT33HOPO3ToULSXFBVLly51qampbuTIke7WW291S5cudXV1dd75b7/91j366KPulltucaNGjXIPPfSQa2xsjOKK+9/+/fudpO+NFStWOOf+75L4Z555xqWkpDifz+fmz5/vamtrIx6jpaXFLV++3I0ePdr5/X63cuVK19bWFoVX0/eutj/nz593OTk5bty4cW7EiBFu0qRJbvXq1d/7P4WDdX+62xdJbseOHd6c6/me+vLLL11+fr6Li4tzSUlJbuPGja6jo2OAX03/uNYeNTQ0uHnz5rnExETn8/nc7bff7jZt2uRCoVDE49zoHvHPmgAATDH1GRcAAIQLAGAK4QIAmEK4AACmEC4AgCmECwBgCuECAJhCuAAAphAuAIAphAsAYArhAgCYQrgAAKb8L3uWrWd0nKDdAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Loads checkpoint by http backend from path: https://download.openmmlab.com/mmediting/inpainting/global_local/gl_256x256_8x12_celeba_20200619-5af0493f.pth\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAa4AAAGiCAYAAAC/NyLhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9S6wkWXffh/72Ix6ZeR51qqq72f09SYukdHUt6UKWaQL2xJAhaGDAsAeGRoZhwCNq4M8emBPLHBF3cGEPTM0EaSRI9tiAB+boQhZtgLowKdqUyI/8nt1d7/PIV0Tsxx2svXdE5sk8daq6+vvUH2s3TldmZDx2ROy911r/tdZ/qRhj5H1739639+19e9++Ik3/tDvwvr1v79v79r69b2/S3guu9+19e9/et/ftK9XeC6737X1739639+0r1d4LrvftfXvf3rf37SvV3guu9+19e9/et/ftK9XeC6737X1739639+0r1d4LrvftfXvf3rf37SvV3guu9+19e9/et/ftK9XeC6737X1739639+0r1d4LrvftfXvf3rf37SvVfmqC67d+67f49re/Tdu2/Mqv/Ar/x//xf/y0uvK+vW/v2/v2vn2F2k9FcP3jf/yP+c53vsPf+Tt/h3/2z/4Zf/kv/2X+xt/4Gzx9+vSn0Z337X1739639+0r1NRPg2T3V37lV/hrf+2v8T/8D/8DACEEvvGNb/C3//bf5r/+r//rn3R33rf37X173963r1CzP+kL9n3P7/7u7/Lrv/7rZZvWmr/+1/86//Sf/tODx3RdR9d15XsIgZcvX/Lo0SOUUl96n9+39+19e9/et3fbYozc3NzwySefoPWbgX8/ccH1/PlzvPd89NFHO9s/+ugj/vAP//DgMb/5m7/Jb/zGb/wkuve+vW/v2/v2vv0E2w9/+EO+/vWvv9ExP3HB9Tbt13/91/nOd75Tvl9dXfHNb36Tf/j/+X+zmM8BhVKqWF/yrwKdrLH8HVBKo5Qu+xWLTStI3xVmZ/vOfkqhFCj0eD5txuvosQ8ZhQ0BYojEGPHRE0LA+0DvHd57gvc47/FBfgsBYoQQI947tDFU1tLWDVVdY63BWktlK4wxKK2pKotWCq00WmsUkz4z3j/AFB2O7CLF+8jxISR5auW+Dmm+l0UcIzr1IxAJ5ZTyzGIkvcP0b4xEIjHE8oplv4j3gRAChEDM20NAGQg+MAwOWxmccwy9RxnYrlZstx3D0NPUDcYatNYYpYnR47xjs1zj3IBzDmst1lbYqkIZjTHpeQPeRUIMxBAZhoEYAzFGmqZN9wPGGDSKSCSEUJ5hGWcxEmOg67Y47/BpnJRnCvK0orw9OSY9R62IMRBCLOfxPuCGLcHL+1YqovOYTcdro9HaYK1BI2NKW4O1VfpNIS5xBUqea4hh7DdKukCQvqQuQekaKkzuU2sUGqUUxqTzpmaMRikzmVfyP2M0xqhyvDEWozXKaHnnaQxoI+9Pa5nrWmmUlrlROoTamwfp1pQCLfNblT5pGXdKYZVJH9XOmpHvq8ynfGh6R8T03tI7yWM2BC/PMQaiD8QQCNHR9zLWvHN0w7aMbyCtESGNdy/bvSdM9pm+22l3ptv2diz9HR/K5Pmkz9N/w+2zwGTd0VrGhdK6rKNa6TK/tl3Hf/6d73B6enrwTHe1n7jgevz4McYYnjx5srP9yZMn/NzP/dzBY5qmoWmaW9vnsxmL2YyDgmsiROSlTATNIcFldBF4eUIlCbWzn0wGVa4pA9eUz7Fc8rDgciELLk+VFiSfBZefCi7Zf/AuCSlL27RUVSXfq4qqEsGltcZaK0JLqTJpx7ZrhscDA/K+38vzveP3Y/sebTGWHgZEYOdzy/ljEQDTc04nsCykjqoyMknDZFIrhXc9QSkqY+j7jkprqtYwDB3EgIqeedugtSYEz2q1ZFY3MvliYLW8xnuPUorzs1OstRhjQOuykMtlHWHwbLYbbm5u6LqOYRioqorTxYL5bE5d1yhr06KtirD1PpQxEENg6Ae23Yau27JarfDeJaEcyz3HvWdlK03wnujDzrj1fgBEABmjyziejhWlFEFBjOPzzecOITBrF9iqoqqrnXdvrS37bLrtRGioneNjjKIQGEPbzMpYNsaUvhhjMLqWfmpT7kEpJWM899dorDbyfozZG2uj0NFmVOKUsQfGZBJoaqobSV/GxVwWYG00Wo19ulNwjYN795/yzsLOcwnRi7KV1oa66nDO4ZzDdHpn/Ofjpn8xjfXpmJje6/SeD83J6bsqPY9xFF4HBNf0TidXvLVW5n/L5zT+puPuTdtPXHDVdc1f/at/ld/+7d/mP/gP/gNAJshv//Zv82u/9mtf0lWPv6jbn48ftX9Msezu2CfGmBTG9HkyEdXOeY70fMdq2t1/+q/KluCBgZqP3V/4c39yy98PDfy3ieE59CwOf5/29dB11CicQjiIh2erI0+o6D3ODUV4GasI0dNvB3xICoMLrDfLIji223XSdD3D0NNXNSGI5fPkyZMiuLquo2lbqrqmnbVsNhuGYWAYBrbbju12y3K5YrPZFEEEcLJYMG9ntG1L0zSySBtTNOe+75Og6xmGgW67JQRPjAHn3GSR2tV1lR4XW2sNKkaIovFqvSuEQCWrbHcRzFZM1dRYa4tyN33tV1evRKuHZDUolNLUtQUUIUS6vhMrR8v5tNLFOhv7gFhLRmO0oapqtBGhVdmK+XyelNWWuq4wxmKtLFV5wdPREHQkKg1JSGfLTGuTFFQlCiN5nPvbcxgR1qoonTEpL2FirSQhFsehKs9P7Y7c8rBuz5/pccmo3vldo4kqTgTh7XVhf95Oran7zM7XCa+8/b5zvRiV99p7FNpq8v1t208FKvzOd77Df/Kf/Cf8G//Gv8G/+W/+m/z3//1/z2q14j/9T//TNz5XUqjvbFlw3Np+7OXt7nSncJExpiYD//Y1omAEZXF9fW8P7KQO93dnME6E2/5v8pxuC6n8ufT1wPb9c71JOzZZdgZtuuUdDW5P84txHPi3LcaJFpitkRDw3qUF3xOjwIObzVoEWDfQbTtWq5sEhxnc0LNeb+iHgWHo2RqLc471esXzF8/xPqC1YnCOdtZSNw2z2YzlaknfibDZdlu6bcdyuabv+6QpQ4iB1c0NbSNCq67rBDnaAhm6wbHttrhhwDkRXPLcRogpysmKYJEdAmIAZMtbJcs7P/Os1Ggy/CrKgAgT53wSXIraN8myMQUeVAl+3nZbgVidwwefLBmBqZXSxAjD0FMQEKMx2ToGYoJvp01rRWWT4EpCbL1e0zQNbdsym81o6pq6aYgRqmzpAj5ElAqoJCRREJUiRtA6opUucNZUGOyMQxk42XgClRdXNelrtvqzlbFrheyM7cl4ZDrfJ8jN4bmn5SlNlNDJbCj77p9D1pdx26E2VbDvEljTa5RzTaXsW7b99YX8iL5qgus//o//Y549e8Z/89/8N3z++ef8lb/yV/hf/pf/5VbAxuvaCCPdf2HdH7iHjxthwHuccaL5jIP9TTSX3b4dtnrUgUl3oCsHfp/AGHcM7J9CVsROCweE17RNhVbR3GOE6MffnZ9YOIFhGPDO4VzPejWw3WxZ3Szp/cDqZsnN9Q3rzYqz0zPm8zkAN6sVm+2W1WqZrK2Om5sbrq+vAdH4P3vy+Q4ctu07vPfFEszCYNpv5xyvEIEC4zjM8FiBe3WCe9ODCMXvGRBrQGGNxZjs0xPrMDhH8J66rgv0luEorTVt21LXdbmnuq5LX6dw62qzKtZGVVW0rUCbcqzD+YHB9fR9T/DJZ2cVWhnE6tq1rHSy5LTWVFVVnpGfWJGjQAGlRCgZbbDGcHJywsnJCaenpzx8+IjF4pSmbrDWY7X44ow1GIOgGgQ8nqAy3Cf7CLQXd2Cr9CKICFRtVLZQI1FNhAuR/EICcVQQ9wTQKLwoXuVxOqrRH8mR+TYRdNM+ZqVtd9fdcRR3/NhTJOOwwD7WVBL8sm8W4rcB0C/UMgT5BU76UwvO+LVf+7UvDA0W03Oy8L6tZcCBF3sIKrwF1anb+0w/34IK96556Lhy7PTNHrHmdv6dDNBDUOFdsN/bCq+3Oe7o/nvG5qH9poJL6QhTnD8pMkpFhsFxs7xmvVpy/eqSqq5wg1hPT589Y7vZ0HUC6z158gStNCenJ6A13ntWqxWAQHZdx3q9Hv0RIchiOIHh9p3X+Znn37K1nd/KIdinCMN0ePS++LNUUkq0YvQFGYEG67pC1RUqRrbbDSG4IngyBLler2U/vTuQsr819yeoUZhtt+Jby35hrfXOfSdnIsMQiHFI9wVWiw/Me0/vXIIKYxHQSuudwJQMG8oz8GNgSYCbm5vi023bGYv5gvl8zsWDC85OzwVSbCva2VwCZqwtvm3vPRhQyULVEXwIZd7l4A2ZaxCUWKIaRVSRqMZ3p/L+E9+OUqoIea11efeaXcGT14mDIPjOOJAHOPUPTgXIdP+72+215D4w4dimHqt30/atrn3k5E3bVyKq8CfR9heU8Ye7TespPDeFCqfm/A5U+Fa9ytrbbaF0XyG6P0aOwXZvayneXriP73PousemyDjgx3sI3oOKaHSJ1ApBLBwJdnFst1uur6+5ub7i5vKyLOLb7RbvXPJHbVkul3SdWEzL9SpBd7DdbomAd45t19EPAyFFbnnvivM+hLCj6GYLYmp9hRDkvEHgvh2Yb6Idq6TxZz055vDSSIH98iKqlAQLVJWh8clfphQhL4CoFKEZ8DHgg4dBnqP0KZYFO4ZJIEdagMOeQiDPXiVYTiWrTkNELKco5zDGoKsUHJE06xBSAJJz5fhsnUVA66EIkGJ5oUsUoHPyrtbrNavlkqZp2KzXXC2ukuCqOT+/YDabMZ/PqZq6CEhNTD4vQEPYwfMTRKhzRKRCgiLFwipjGtB5oZ2M2bDjr0mW4974Ha22/aYmYzorNmqiQN9WpI8FXhxrBxXtO/bN19iFCqXzd64Ld0zjfT/6u2rvBRf3HwD7n/ePV9PQpHfdvzu0pmP9Sd/KtltY84H975oYXxacGHf8lHtml+zBeB8QvAMiyhi0MUBMfqxI3wuMdX19zZMnT7i5vmLYbkv0pvee8/NzhkHCja+vr9lst3R9Dy9fFm03RonozIu3nizozrmyXz/0oLT0P4yBDsbYHWgzw4UhhINjKLccQqwRmE0W/5B+ywET2eqMaCPRdnVlaepaIk0ThOaCw0VPVBFtpf9DL0JA2c0Y6DD5M9qW6+wKX0/XSaSbT5CktRI4MQwDPgmutm3RKIwWtUIbldIbIs4PBDcKwahyyscYwAJQVRVNXTNLUbTBB4J39H3HarUEFM9fPEcpsTzruuLjjz/h4uKCR48ecf7gQfEhSgRnBUYG2lT2KAwxCyiliEoTlUHE6ZhOoSbPQRtTTlAEPiS/Y57/o4IxHcITW23y75jmgMqoyf2XEbnO6wXSm0GFu7Anr1FmVd6vfEmHfklCC77igmuECt/tedUBbefgfgesnJ9ku2V9cUy7+il28p5tHOSj5TYGXmQIEJncWkm4+NDjnJIIwL5ns9lwdXXFzc0Nq/UNT548YbVcst1sCN7jnaPve7773e8WNpZt35frdV03whggVopCFq4QCWnpsUpyUFzwBS4iRowaIZ59H1fOwzpkne6+x+StiGIz6bQw6QRh7kJGqZ/e03dbVkjqSFVV2MpQ1/WOII6pv9ZauqEvaQc5utFaizW7IfYZlhSorsW50ZolBWdYawsUNvQD10H6ba1FG1OiEN1EOMW9PLIcXZkhyn7bsdarW2ke6QiB/JLAURvFcrUqgurxB4+5eHDBgwcXPHz4kLad0TQ1s9lix8cVylyJEDVBBaIKkqqQUwJiFGsL2cdMYFWlR8t5Z1nP73hfeO3sosraVQRpGQO7ltK7gNZ+Uu0Lu2zu2X4GBNdt8/a+Qud1i/tdlsxoZU2+qz2r+ZCmckTzOTgop9bPgX2mg/luqPC25XQfK+u+E+X1+037ETm2+xT/zueVSLowanVpwQopajCEQNd3bDcbPv30UwY3MPQDl5eXXF5eslqt6BM8mM+9zUJru2XwDpKzfMgh5zHp3CEWwZV9G1FBJEhknfcorQgpPD2omJz7t5UHN0kgTje3c9/jZ7I7HU0o1lzwnmx5ipad3nvS9EOMED1qUPjgMd7gnKeqq5QbpTHWolTAh4AaJFBEKSU5b8ETXCBUccfHki2sEAJNI3luTdOyWPiURpDfRRKqcRwP/TCMglOJf0mpFAGow85zmgoBY0wZMYNz4l9KWov4wiR9W6cJF2LEDb1YYNYQCazXay6vrri6vioQ4ocffMRivsBWSRiiIAjkq7RBp2zCLOAhBWPErE5kizrBhyQLOUVUllerMkIgx5YXuzfO07dxLYmqhO7vK6SHYML95PVpu6+Fdej4ooyVnXIvJoZVfj7eF9Vy/xxln0lqwbsSwl9pwSVtXOTeRsqPFgpHhcp9B8F0EE77NA2zuOtcoy+BncV7hCB2z3GXP+n2591j7grQOHbu+wi14/dW9uA2rjCFMKcCWYSW9x6rE9dEgshCEOit6zq23YbVasmffu9PmM/nWGu5vLzk1atXrFYrXN8XeK+ua1novKd3A4Nz5ZrZDxNCGFkB0iJlUpIqSjG4aaTf+Cy0jug4LsA72n2Me4tBLL6qyUY5LlkYSkEgoBgXEpUsj6LLx5DCw2WM9cOAcg7VK7TumM1SzljbYquKYAKBiO1d6aNLPj/vPT4JqBxyLuwfwgKilKKqauq6oarqkru2XC7xKaJzukCV+1Xi1/IhlACNbHHlsW1TQraC8hmEpzSmpOsQo4TDW4NWEatzWHwgDA6UQnuFv/RcXV9htOXk5ITZbMbp6akIoMePmc1mYl3GSNSaqDTaAlpSl0P2YcoIFGUkZsHlyziQYBtDYXHJUK5KAigdM0US9pWznZagwv3Ix6kAOPT9rnbXunVonh/eP4020aB29gkpTy4qgYen5znW79f5w+/TvtqC68iNj/DhOzBXX6vJfHkm8V2v9ZAAvA9UeF+Lan+Qvcu2P2GmWliGjZwTSygv1BJ8EUqQQgiO1WrF1dUrrm+uubq6Yr1e8/LlS4ZhIITAcrkUi6vvUvi2F38Jo5Ug5zegFC4EhmRdKJUd9onB5Mhz0BNtOO4Jp/yOphbM5KaLlpoXNjlUWBQiCmN1SY7O5wGKdSOwX1rktEGhR+aN1N8cqOKc4+z0lLZtOTs7Y1Uv2aw3rNfrW4tM3/dYa2mahsVigffi37q6usIYS103nJ2dFUumaRo2m02Ba3MC7zAMO5Rp207eA4C1NaayyUcJ2xx9mNIKMkRZniUyH9bdmrAJaGuoqwajUxK3mHp4Dz52CW5V5f4qW/H86XO+9rWvcX5+zsXFRbqHOYvFHKsk9UApjTYVLoq1ne8lxohLQTZCKWXFuvRhB/WZJsdnyDmmc+XAl2PzQRg8Mqw8mafcHlu713izOTr11+Y+Zyh6f5+pIrv/OftttTEYa8p8UkrtQOMZii5K3E4U8Nu1r7TgOmZ2qmzL37MdEgCv269MdvWGeG58O2EwhSSnwmn6dxwq3BUWh6zC6ef9/e6abPfr9QhxHTrfNOhATZ5nsUiUSomlKu2v8N6xWt2w7bZcXl7y2eefs95sALBVRYyRdjZjcI7NdoNPuVVuGPBx5BMEsDYmi2Dki0zq7+ExNlGKMomFKvc19VslxTwmAXnLUk5MIPl9xMnCpCLOjZF6u4rK+M6ygFAqQ0qhPEOhjhJrIPjAzfUNm82Wtm0x6VkaY4pVpZTCDYNYl0mIqNTXytoC1wbn2KxXVClxOziPimC1Zt7O6IcBtPjbssWaA1zGlAJPdBGVhUVKA8gLaIlCTHM5+8ky9ha8x/tNeabCHWmpqwqljPweHD6xagxuIL4SSHT+Ys7Z6SkPHz7k7OyMi4sLFidnzOcL2nZGiCFFNCqcG0Y/nzUQQ8pfixiliNrkYEAkoXuCtGSlKI2KeID1ZVfRFJ7H20qOIBHy72GF79hcPDS/swDUWktwTBBLWxhVRmu5zL84BhhN0R4XPKayxSLP58zCcGpZOe+QYJqMXHBrvXqT9jMjuPZfdpQdbgulA5bKoTbud/e+b/rsd7SjNxRgr+/3bWvr0OdjgmkKFR7ab9qOQYrjMaMj/Vibnj8vajt3k9XsODqxc8LtdrtluVqy2Wx49eoVT548QWnNbDajrir6vhfN2BicD/gQ8SH5pkLYISSNpAUziP9nvx/79xgmzyj4WJKGp0qJUpAJb7MgUWlxnoKlkMOs8z0rWZxVxLtQkpJz8MLOkXEM/JgKxiw0ZR+K4Oq7HrXtGPqBk/m8CMUh+aIAXO/koBDxg4OcHK0N2qoSVdlvt8QqlOhJksVgayusGlHOjUo+KOewxgg0F+MInYaQrEVKovBUI5cFUGR6JKCtwI7BxTFdAITEWCEsHunZ+BBwXiBRh8M5yWmrqoqXTcv1zTUPzh+wWq14+OgxFxcP5V3amM6j8d4BRsLmicIJiAIVUEmhiFH8XGRyY2KxYqIa39Xu2N5V6mBXYd6dcqoIr0NWz77geh2MP0Lbqc9Jkah0VaZrFt4ZDZheQyeWkhAjdVUVMuAdC3lPOZY5M1qxuyP5zdvPjOC6tfjKtzuP3xFixwSV2t3vmOArlsGb9P2e+x5q+9bWqOEf6ueXB2fma30Rs38Kg+TPMqlAwoXFr+X9wPX1NX/83T/i5uaazWbD9fU1P/jhD/nRj3/MyclJWYQ//fTTAl9leMp7X0h8p3lKzrudRXMf9jsE9cl+FGEVd5YdCoySJK8InmRdVZVQPSnAuwT7adAma6pCtqqsLUwOIrxSoEYSHnkRq+zuNM79N8aU/nnvmc1mo48p+WRmsxlN0xRCV2ttSVpWSrFYLAr0UyVLNgs5IXoe2TgyhDmbzRN/IviJBp+DO7KwXG82dF2P94HB9USEcTxbgKPAzqwT0PVDyv8KZHJrYxTr1YbNesvV5TWz2ayQUFdJiRncgFYBl8bHUi95eflKaKas5eLhIz7+5BM++frX+Pmf/9fKORRGrN/g6LZXhQGkbVuxTLOyozWVtVhjUKYq42gffrvdRjVm6g3fh5jjZMzm38u7nsydQ/NwX7HP8zWkZOxs6U5TNXLeowseozVVXZWKB86JP7Gu62JpVdVIvDxC8GP/TVob83WnVtrbtJ8JwbW/7Zhl8jpLRD4fv97h89626Kb9+CILetYms1C83dfdsNm7+3yY5PZ1sOHhbsWd41+n4U2vd1fLwjfGFPodZAGPMdJ1W25urvnBD37Aixcv0Frx4OKCP/3e93j56hU3Nzd477m8vCREWUgH53DDwGazzT1PsEWOgEsh7j7AhLJpXxkKCUbZewiCWiXLMsSAiruUQiJcxCpQxhTYzQ0SKWeNYdY2yd8lwShyvJEyHDG/c5LllWAaIlVlCF6ErusH8W8mRnWdWCiEAqoSa8lo/DCgYqSZSXh4HhNKi5WntEq+CodP1kmIHq00dV1JyY30J0LXFTipsgZrE+N3YsZw3jGr6kRRZbi6vgJkkZy3JzR1nXxn1/gEKaIktk+sZPGtkRbB+XyODloCa4Z+jOYMkCs6KAWbrqN3DtN3WCUWoETYxBSdObKPKGATofee5XrN50+f8OLFSz768EMenD/g5OSUs9MzmrZhtpgL48p2w3az4uLBI5TJBLyRoDQej2GMiiw1etTt+ZfH2u05cNhXfQwWzOjS6yDDfL6MNoTgd2Do6d9UeYsxpMALhba2bNv3U+WxpLKQStaksOqPguuwAH+z9hUXXPnvNvXTaIBLuw88WPa9zz4HBEjc+/0LCa1bfbpvZOM9zrUndA5BhHcJpkO/HRKEb9KPqYCVdWAMhY8xstmsuby85Mc//jHXN5c0jZDB3iyXJfhgnVjaffBYawsh7OCGnWtOteCpBph/3215QdD7m3fOIfCUsGIIK7sGDCEooW6KY/h3CJ6gNVFrTAqnlmmeHdm5xpcmm3XZD5SFl/cer9N5rS1KjpDWikXXdV0JXjDGJD+DdH4U0vKnlMXabM1pnBYi3Szgjda4IBGOuoyTUFhEJHnZoK0kPwuLfCi0VLk0T0jnsNbSIiHlayOEvgLB6bQIu4m/cWxaawygvcEXq0ZgKKWEYcQHTyTig8JPq0YplfyaERVDOZ4QcVHSJK5vpHzNernk4cUFDx48pHv8mLOzMx5e6PFY53FDj45CMKw0RJVgRD0hy90ZMLeVRHmUh4XavtAqsPL+foylgMZ9ubVf/i3/N/09s+/nfQv3ZhQYO1u82YJVCFPLdA0YhgGiKFDajL6uonhPoUaOWaD3a19xwZUXt6lzf0zse107BBWq5IXID1vt73fg+HGgHcFt1esF2V1WyxQGfJ2FdVd7nXV0SAjdR3jl/r+JsD48OacwSCBDhABPnz7le9/7Hr/3+79HjGPtoRyQMZvPWa2FX9Bay2w2KyHe+1DyvqYoGiioFK5d4I1UoDAEKVAJmdlihHVi9JRab4waZdu2GGOE5HcYWK9XEnatFBFP8ANBBbwdhVVV1zvlTqwek3JzpJ8xhqZpWC9XdKHDoXh4cVESgwHm8zmz2YzVtdQD673n9PSU2bwlQ5jZ15MF/Gw2o04WUN8L0721tkRoZqgwv2s3SQkI6bmhoDIVdV2LgeN0gmu7RJqrCFHhQ6RbS/ShUZpZ00rADCKEClwbAsGIgPHes1wuaWYzjK1oW5tY9F1i4XfpuVUYU5V323Vd+ZzvOY/THOKvtaG1Bt/Lc/6TP/kTvv+n38Maw9nZGZ988nU++vAjfvHP/Tm+9a1vcbI4wVrL9fWyJG5rU6GjRJlSHVKADltYU6hw2rJCvmv97Pr0s2DIFtR0nB9TxPLamKHxnFw+n893mFI2m02CSqGuaq6urgghsFgscM5RVRUXFxf0fV8CaZ49eyYQt1ZFsQRK2kSeGzndwf5ZhQoPkZu+flE/4p868LMoQ28Czd21/c2F1hu3fTNz5/rp0wHIYl9gHdtvv793Cbudq9/xTkatKxKCElLZhKv7oHDeF/qmzz77jFcvX+GCWFF917HebHbGQM7DGtzAtu9wKUl5H9KIccyZE+UkC54AMdesStaFmgZcCFG4iFWF8wGtQ/FwZWUqRE9bNVTWECqLcwMxeIiRuq6pMky1XWG0oW0aZrOGedsmyyAUayxiCN5hjKapax5ePOB0Pi9MIcTAvG25OD9jmQpOrm5uWMxnzNpGAlr6Hpu1YBRGK2L09L0ELVSVASxnpydcXV7hhx6jFOu+I3jP0Btmsxm53IkUpJQ6XN5LHlg/9HR9x6NHD7GVJWCoTIoSHHrWq5Vo5EoWtmEQGHU+bzFWzjX4wHK9SnW9Ii5K4rUPkgwdtx3aSLRgwsgw2qZIxEDwHd4HrDEYYzk5PZOoOefZdh3DtiNPFGGul/G6XK+xSmONprYWjyK4gefPtqyWS374g+/zx//yD/nmN7/Jxx9/wre//W0enF+AUgTncW4kYDa2BuXToBJfEEodrBg8MUR25sT+lCnjKoz0Y/tzbDoP7oL8ZUzFIoDqumY2mxXFJ+c7Zr+laUWA5wjW7DsESvqDrSrOLx7gneS5nZ6e3hKEMcZyvQzZv237SguunN9wCCo81qaWy9F97nHtu6ww2BNGE/hy/7fX9fcWnn1k/xhj6fixfh3D2O+ymg7dzzHht2uF3baoJr2lWLVkoaGJKjD4gaHriQT6fstms+Hp0yc8e/aMy8tLur6jd2IR9H3PcrkEpRKUNeYwuSBaoN9Tbo49blEtRCKJ22pUNsQSjwWqI0ZUQMpa5DtVFOGVgyecd8JYYQxt2+K9CK9SgRgwBS0IwkIQo9AbmVEzzRM+W97eOQnysJZZ25aAFK00J/OFCGsfSqAFUP7NGq+tbOmrII1jIIExGp0CKPIDy4uWMSHVEcslSlSylF0KUZfnbqyhqS3RpUTlOKCVSu+DYskBWKYVhyXJmDSnh8RLGWJ6t85Bym3TSTBkMt4YcvSa+LRiJCWYCzBmrIVpQU6tUF6iD+VFB4jCkmIy40eIJXp1tbyhHwaurq9ZrZZ8/PHXODk5ZTFfULczeee1WHy2TvleSqxmRY7iY2+eTsammlaPGOdQmTUTt0g+Ju97SLGcft+dh7sBINM8rrwtj4e8rWlEAdpsNmXtizGy3W7luSYryxlXri/BSYzVwqGUtsnj/G3bV1pwwYEXmfwjUm77nu3WjveDCmHHIHttP0vfXr/37nGHzvWaNvb5bsHzOj/VXdDidJ/DPq4DD6cI2FgmsVYCGUUf2W7WXF9f4ZwwMlxfX/O97/0J3//+93nx8oVEd00i2LbbreD7Crouw2k53Pb2BBZW9P2bkb8QQKsMyYzvVimFnUxygbF88v3cfibOe9xGFsi2aZg1Laenp3g/JGb6Lt2zoqnnRWBsNhvqqhK2i7aRnKIEk2WGi+A9r168LBF689mCTksgymq15uOPPy5Rhi9fvigCop3NJCDEWuZzifqbPp/MQqKUkuTeuubm+npnYev7vixAYn2Nwq/kXznHdrPBWM3F6TlGGfpe0hdUpHBErtfrAstut53QUSUWi8yxaKskeGMSnEhCdYgjJKuUVA7OvpuQLAmhtRJC4QKHnSyKYN1ut7hJsnZbNwJXBgn8aOuGytpUDsfTDwPbrmOz3fLDH/+I//P3/k++/vWv841vfJNvfP2bfPK1r1PXDXVTE0Lk7OyMumnQ1iQmDoMtYeRMKkkUlWkPMVHsr2D7a11W3Kcy7j4IVE7nqKqqvM8cVZqtpByNm4NZxEKW55kJjGOMIsi0xgfPxcWFwOOpCsNmu0UBZ2dnAAVWLRDzF0CavtKCa3yRMWl9ogEGVUry3H28kr9bGUdp+z5UKALtthl/8Nyo9BdkkGp2GKRvV0sWaCqHBIfJsiJCSN+CvKbHKWWOSNHIKAhva3H5/HdBhK+zZo/tkwMrJAlTngaAKfWSIgSP85HBB7773T/i1atXXN/c0DSW9WaD945vffub3KxuWG6WvPrTl6zXa6y1nJye8q//5X89FXtc8oMf/EAWBglzSBZMECFz5KlEGPnkkEVFRdAmlsd2S5BHj8zvnHsWU1QfpVR9DB7fD/QBcLKwnyzmnJ7OiQRWyyVD3zEMjlnbUtmKqrZUxhJ9pN/0WKVpZzPaxZy2nfPy5UtulktuVmuWa4FevAvYyqbjG66WK9q6prKW+eIEaysJUEkpASFZMbWpSqSXqSwkSM9FsagqrZifLFitVsQIVVVTpSrExMhyJe/AWIsy0s+6rpNlIsTG65sVFxcXVMai2xlt09D1faoQvSqWTlNZNt0WP+SikpSaX6cnc+ra0g81s5mn63sG5+idJ0RhQckQnVIKZRTBSwBFCb13Tui9hoF2NksFKhd02608mwRzMhkLgx+PDzFboobee3Q0WGX4kx9+nx9+/int7/+ffPub3+LrX/8GDx8+Yt7OOD895ez8AZ988jUWiwW6qtHIHBXrOqBtPfqtiKDFT0jI7CEGo0yZtSr1L4Yo/tEYZF2JgB+V1UOw+JQlI5+HEBm6HqM0eqaYNW1JzI8+MG9nopDEwLYTBfHswbkoOEbTzFpm8zlVXbFYLPJkgaRkRZDSMtYSkq+36/tCK1alYqZv077SgmuacyOaxxQSup2YfMxqisC0Mm1Z2/d2H49/jVWxexQ7FhTsxfTsnWeKME5M+im88PbBGem88bDFNP187N+8z3jOw5bXlCUBJnyLE4ZzEA186Hu6zYYnn3/O1fUV682ahxcXxChFBufzGfP5jLqpi8bsQ0CtVnRdl4IDNHVTS9BAlDIcmbX90DOYPuqs7e6+qdutjLMEPaGm0DPFMiHGok1Ox+EIzaQoPwlFozJSxqNtG+ppleBkwfiUhFzXNW3TsKm7FHgS6Poe5wPOBpxPC3+E4CXxGaUKVJNhHynUKIuKSRBPp1TRlDMsaasKbQ1uEIGRYUaTne7O0fW95DzZCmtNghTleTnnEk2U3K9PwTe2qpgvFvR9j/OZsb4iMtB3A123larGKTgkp0YYrbBWmCpcCGQXidJglCnzKhsukZEeK0NffdfhjZDxamOo0jtxzsmCzVhDTSezO/c7KoUnokPABQ8hoHvDutuifgjL9Yrz03POTk754PFjHj18hNGajz76SHLbAIxEXWY4NI/PrCSLxatQ/XALMRnnzWiyyXg8Pm6nxxVofgJpw1gsNT+rkd1Efu+6jo4RWsyWcgiBk9OTEjnYdZ1YsTGWitv5mvncxhia5Of6s+vj2tMm1M7LHfdhKovUlCJJlcGSf0t7vd4PdkAgHho8+1rQVGjdDzb8Yu1t/F3HoL9j8MMhwTcyPYzXUAiDegjjor5er1kvl1xfvuLZ06fcrJYMruf09EQgnsRuXtU1lZUE2BAjPkEZ0+ilqq4JscP1suCPU3R677c/525OkZopVJgF1c7CQbLWJ1x8+b6JkuM1DbvPk12ejxk59nygMpamqpm3c2xlUQlSHoaR269t5yVasnc+VWTuEpTY0/cDSm0BRfQBV8nCWNcjFdLgRj+UDxFjRTi1sxkhxgLpucSCIFGHFcPg2Kw3EsLeCmmvQHzigzSpnIi1liYIKW2uj/bixQusrZjPZ/gYJDClqgWuVArV97gYqGtx9nfbnq7rsN5SIQU9M/+itgZrxGrphwHlxWLUWqG0HfkRlQgZiHg3sorkIAGlJQl8Np+XyMoYYxqbyeKIEZQwX4hsSPDwNLoeMNrggufTzz/j6dOn1FXNBw8f8bWvfY2rDz4khEBVWR48kH4YW9GkRb0b+h3FLle3lr/tuAZNfFvZX6fY3caB73neTefzdK5OE5ozp+N0TS2+qlQIVGvNYrEoY9k5x8nJyU6V7T5Faj548KAEcKxWqxLB2bat1GzTGr/d8rbtZ0Jw7VhY7/gaO4LuwG/sLYRvK4ruEmK3r5+xR83rLb6dM5X9jwmk1/Xj0O+HLLKpbyE7eQVSy4uysGCsVisuX77kyWef8tFHH6GeaT797FN+7/d+j4cPHzKbz/mXf/Qv+OGPfsSz58/RStggvBffz9Onz8q77/1oYankR4vx8BPacQyrPJZ29ykVbpXaFWRAprTqh4AxUklXR4G4tNaYyiCRHgEfBkI09H1HTDCQ0hJt5vqBFy9f0DYNMUY++rkPi7+o76Xq7/X1DU+fPufs7IzF4oRvfPK1VBF4w6tXlzx7/pwhQWiXL15QNTV1U3NyclI05LqumbWtWBpacX19VcKgLx485PSDU8xHhsvLSz799FNWqxU0An3WtsZVYj0tl0tubm54+PAhg3f03vHpZ5/y6NEj5vMFJimDOgVvnKRnF5Xm7PSM6+trXrx4yTA4Tk9P5Rl04hcjLXha68KKki33zOIQkeg8YwwVYzJtDAHvA85FJM4j5MEtv2cFUqXgmW3PthswJqUjVFYSZZMPUyo1a5TRxEk+2XRxr4wtVnFtKjyBbdfxwx//iCdPn3KyWPAnf/o9hmHgk48/4ec++pjz8wdowBqNjlI9OwIuBgmp1xCCIyjAKElw1lLNubgY4v2U3n3IsIzrvdw45xw3NzfF3zUVdFm49QniW61WPH78mBACl5eXLJfLorDlYIwYI59/+qn0l12rL0cuKqXY/FkVXIfa/gvNmv7r2l0Can+/ne93fLur3dfaug/Ued82Hn43TDj9vC/U7urD9Pd9upqyT464S9Fe2+2Wbdfh0+TI8ODLl7Ig57Imy/WK9WZdLGhhstgNC576NXOYs1z02PPY7Z9So/UVQhZa6QSTEOWcDCwLiS/XVuwyYQv8FJLTX5ggtFc0TY2KkaAUTVNhmpq6rjHGTJzfpgRgKDWwWm1YrVYSLWgsVQriiFGqOa/XazabDUPf4wYnASLO7+SIDW6gbVrm8xntbA6IlfX82XM++rmPOHt4VnwVr169Yrlc4oax4nGbIhi32y03K1mw6roW5ePqim3XcTJfUDe1sF84V/LfQBz85+fn1HXNs2fPinXXtm2icUIqJxsjfrtEMZUtLh+lyEtEoi6NMagQBHKSiI1kAY+KSFbVdi2RlPirJMw+4oiKBHemgBCVx0GuNRYSpGnzYEerHJAillhWhkKmgYqR+Omn/O4/+2c8/fozfunPbfjmN75B121ZdB0nZ6cSvAFsVxvxNSWEYRxfMQ2ucW2KGRuMojBF7p8/eQsFmQioqVCeMsiPEanSjxzEkwN/9teM6ffIYaEZYyyC7m3aV1pw7ZvFP6n2JgLkdX18l/dQ2DWm1lT5bRcKK8ccgP3y9mNCbb8dstiy4NqZKElDzgmJIWlwmdZnk2AhrTXr1Zqnz56wXC3F52Jywm8sWLtK2nxuVo+lGEgKy/7EOXTPu7/tQockS0slh5ZW2TeUBHMWkAkezIKr9A9KDTESLFRZIyS2SJRfjmDTRjMMrlhIAqmIENysJRpPIr8M5+fnVJVlsZjTdadFWA7DwKbr6XuXwteF7sn2HSGxRdRNw+nJXJSIoefy8oqz8/ME8VyU47ptVyCjzM9X4N31hnYmSdbT96iUWClGC2v8qN2LUM/1sZZLCTHvuq4kPwtMRxJAeocLL0RJAg9RXpI1EomKBpX6KFWXdYkKzQjMNBAqKyNKFftfzul9CfGfJvVOCX+NGeuGxRhLSROf4MURWZZgnRAi205SN26ub1ARamN58HBL3/fUTU2tBHYd+h5X1xitqWe2CGABVlShUtqZb2lOKYTR8z5tfx7vw4N5n/17FwNALL5uK5B0iOP+03SLYrWmyTSdfVmJIFnJb9t+JgTXWy/8xyyse1pfP812qG9RKaLSaYDpsnjn394gQeCd9S+/m8wLF4Pj+vqaZaJq+t73vodWcH52xosXL8qC1rYtQAm+8FFofMS520hBxBDY9t2ta5ZACCN5Mzmk93BQzAErWo1Ob9EDFJisAYswUokFwyA+u5ByiPKEFR7CVqrpxkid/ECVHdnUYxTrczU4mqamqkUQ1bVYYA8efMhyecNyuaK2Da9evWKz2fCjqx+wWl7QNA1N09A2DYv5jA8/fMzTp0+5vLrmerlkvV4LL6PzrLYD225gs+1BKc5OTzm/eMB8PuOzz57w+dNnvLy85P/1l/4yZ6fnzNq5BDyEyHq9wnkvUGOqvXS9XNIPkn7w4OKC6+sbNtuO7ulTtt251OpqZ/j0wL33PHv2jAcPHnB6esq3v/ktLi8vubm54clnnzM/WRRr5uZmhTGWJo0BH6JEng5e6ncpjXcRdEjvQnx1Odx6uVqlatbJHzTxZfqI5GmZsXZWjuTNFbAzGjAdGxKYIqTCkPPQRiVtSJZlljWD8wx4AoFwFVjeLPnen/wJTz77lD/3i7/Iz//CL3B5/YqPPvqI8/NzFk1Nt10zuI4TcyZWcmXpnRX0QEkkYSh1mtNYTZHIb9Kmc3Na221KwbQvzPIzsday7bfF+qysFTKAYUgpEuM58rxTkxeQx/4tXP4N21dacE3b1Gl5n/Y2QunwMW92nkMWwH2umYXOVKAegxF3nsOeL2d6rrL/AYvkLtjwWD+P+cqUUsXPtUkWVFVVPH/+nM8//5y+75i3baFpmuaUVFUlEU9JcE2TanObOpmnzafIOj0JEz322vd9fkqpkSCVbNntOsK1Ulg9TvgSHIDARm1bS+Xe5LzO27XW1E0lVpqC9WopltJmw3w+LwuKQIYVDx48gBA5OTlhtVrx7Nkzrq6uUEoiAi8uHhaap4uLC+q2ZXF6youXL1iu1nT9IHx8IbDebnDPHMZYPnKOqq55/OEHXL58xWq15A//5b/k8aOH1JWwGwgDguLm5oaulxBnmyIfJapwkJBnIwziXd+zXK0ZBk8MJOVBFqoQJDrx1atXJdQ691vqhkm+WecGhsGxvFkm3kGBJMXPJYup8z75feRdBHJidEr8DWH0c+21iEDBbjJmVPItZYtAjOld2Hs697TWDGGsHqB9KOKjsFIqiFEVKDN4x+//X3/A9XLJq8tLvvXz36brOh49esTXv/H1lIyu8IPDVHZiuY+BXSBKqNZ6HJ/x/q6OnfHNcT/Y/lwuASyJ3itDfRm6n/4Ou8FIU1hwuu2LCK+vtOB6W4vrtoZ93I90bCAcOuZevdjZSU3+jrccBCLX+eJW077pvn+tY0LrUEDH9Jj946ewoVAx+QJDZRLYYRjYbrYMCTfP3Gd5slRVxWazwXlXJu5OuZGxQ6OcmdypUgKz7EMWua/yDFR5EDv3ORX0k+PL/SmFTVBeLlseowiqGAKVrcX6DSEFZoSSW2ZThJwxmuAn0X4JKlVKsV5vJBm5aZi3sxSRV7Ferbi5vmEYeoa+p20aSQdIvy+0xlY1vRtwQQIT4iCLTD84+mHgxctXGGtpZi0XDx6AElaLFy9foJRiMZ9jlCr+p+12S+8GNBqjbOI49JKw20skn1QGNgyDI8ZEHdQ0Aq+mRa3vOtYAZ7H48CS5tU+uROF5VKpnk3LVBO5MrOR9j0+WUSY4kQT0EZYsqS2ktVGNfq/JcCGLmogE1pCsbDkHoPfPNY5xnYTmIW05AkGNP/sQklXnefrsKUoJzFY1lVj0WvH48WNUZdAx4vpeBH4Snnn+7yq9AlvvW4ZwfNv+9/118y4hlo8VppUx8Vz2G+vpHVKsp8re/rnftn2lBde92xeC/b7EqMKcAX07G/lgP8Yowt3BcbRvhy7J60Xf6wTR/j7Htk37lrW0XBgRJDv/m9/8ZlqIr7i+vsYHj/OeqqmZzeeltEW/6iW4YQpFhMQ0rg0BsepCjCVi2SSo9FC+yFQFmAaSqOmzmwR4hD2pGFVMLBtS0kMbjSVT2UD0DqslwMIag0KSTomBfrtl3rbUsxmPHz/mwdkZ260EX+RcqbpuePXyFZu2ZbFY8PDBRbnnk8UJDx903Nxcc3n1ihcvYbPdCMQ6n2GrirqpePToEXXTst5suby+Yr3ephw4z7MXL7m6ueHHn33GN772CacnJ8wXC4au5+mz5zR1zb/289+WuZOsK6UNvevphp75fI61Fduu5+rqhrqpqOqKk7NzNpstfT+weXnJbNbQNjWzWStFI9NjvLkRAmBrDfN5y2Yj1Etd1/HBhx/ig2e92kjNLCth+U3TwM0NcbvBB0cmOg4xElL6AyD+JnEnSsh6Yux3eKleDCWHK8ZcATjNsKzAAD5Zvqn+YalplhkncrRd3/f4dB2lVGHVly5E+uilH0CrDM9fPed6dc2mWxOix1aGP9bwrW99i/l8zna1BBVkHMew6zMt8zLNN398xdlXOl8nMA4Js3xctq6mPq+pVeWHMUlbGYMfXMl1zHPsXfrz/2wIrtRuL/KvFwCvO8cu7JZ1rOmnd9MK2HVAo5nCBPeBEo917hjcd8gKm57z2GAcF/3RyZud8Lvs0g7FGTc3N2y3Hf0g+VlAYS73+MJaPr1eDuEtfq10e9MKx7esyiP9nN7TdKLt/57D2Y1RzJoGkGi2TB7qnWfoOlarFUpBc3LChx9+yGa9odtuiTGWsGChwNl1bKtkIdR1JVGX2w2VFZLbGCPWmCQ4DKdnJ2KRuoGXL18SX8GsnVE3LaqS2lrGKClPPxfaopvljQTIOM/VzQr3ve+zmM9YzOecn56hiPT9lv/rD/+QDz/4gKauuUgM9CEGBu8Sd51AsU1TSQ20vqMbnFBBKc3gAmHd4ZxUoJ43deJUFPgspGcQQoaRpPrw1dUlVSVM+Y8ePUIpDUqXIJ66qgjXVyXexRhhugjes14Ll16uoeYTxZdYxYYY/S6bepJuNhXszPMiRgTq1CmaLiZ4MUFeU6LbfO7M9hFCQugVqKjQxqBiIPpAT8D5gWHr+f6PfkiIkSdPnvBLf+4XaduWjz76iJOTE7abrQguLYqZ0VoSy3N9NxiDsSZj+JAVdQxFmh6TIcDpvJ/O26ww5meb55uf+LHKeUMQ+FirktC9f+1ptOLbtK+04Lq1YL4xZHjsh+k+x2DEw7BdYQmfnP+2tnPg2CNdvwvGvK/28rbW5rHrHYMgXivoGCe8MbIQn56eCvmqc1KSPfhSwgMoPi2dQtCn+SJ39VlPhc3ebwV6TRBhtgIikzzAyaKW302enDHm/fTOOYVtXApGOkUpaeKdYz5riW2DVhL5F0Ng6Hu22w0axpDvCVFtjOMEv7q+Rikh1m2ammEQeNAHqbarncP5QJ94+PphQNeVCI0YhU4IEuHvDG00fT/QD47lZkNIpMQhBOrE97hmLRbRbMZ8Niuw1vSeBaKs6IY+3UPEVomHSCmpbjxIHTCrJPFXWQsqQWgxVSU2Gq0jfois1mvq2tM2wj0oD1tegtEaawy1tTgfEgtIwChhtSAmotz03jJcmN+ZyJa8L2PAjro9m/P3WMYHDIPDp+rRMYxRjpk/Ny/RcRx0CeaTf12MKRVCGOmfPnuKd47FbM4HH35QSqlkBc0khg11YKpPx+N+O2ZtHYIU7/r3dajKMVfCoZYt5Ckk+7btKy24mGpOcTc4403M0tsP/LblcmgfGZ37Iz5BWSoeEaS34cGs+R0aJIfu5ZB2NX0Oh4TdfYXXffa7y781/T1bJ865JCzGc2dfxieffMLz58+4vHqFNkLbMwwd2+0arRXz+TzlA/kSsAC7+SDT75DUgj1oIlsyYxG7FHUIqZRK1gDlvXkfKAy6ahxZ41iT78IyIdRNwXmqShJGK2uIMTAMPZv1mqauadqG+XwmoeObDW7oWd3cUFVVgZ2yRuu9l0rJSqK3rq+uqKzlZLHg5HRBiJ6+1/S9kgg+JdVpb1Zrrq+uub5ZEjVEZWTBdR5jKqq65uzsjG2/ZbVe4YLDB+i8w2/XXF1dc3oyZ9Y2tHXD937wPdqm5cPHj+VdJ7+hlG+nQL8+pLIiLuC1FwjXWnyy7Abn0QTmzMoxgUAho4jgnceHnthtMUYY6KMCY6uSFpC19KYSlhQfPM4NWFMlxUYTQrIWVBQqvyD5XzKPU7BDyhuLMV0/TAXbZB6k3/M4Wm1GRouS04WE5QtxrLDOZ2GomdB/aS0chQjUrILnxctXrFdrgR+toet6fv4XfgHX9XJcEBg0eF8qaGc4e/p3qMTTIaFybF2McYwwnLZDgi6fc3+tyWTL+bOKGQWZMAdlujGmQVNv3r7aguuOdtcCfF9Y8C2u+iWc8wA8eQAa3IcJ73XeL6Ozey3GWBJJhTtwDL/NA32WfD1XV6/QWkK0nz17Vo4XfjyDCWI1lDDmvYm6D0kcm4QZ6ht/GIXsyG0H+MxRR3EOlvOmgocr51gsZgJ/JcJWpRCroK6xyT+x3W6xlVhLjx49Yr1ciaWhdaHNub6+ZrvdFnqcvhtrHzUJNoRIUz8oUXY5H25wjmG1om1bTk9PqOqay+vrSZVfTz84hr6j7ztUZRJce856vaayhsoYvDW4MLBaO7yTfnTbjlcvXvDo0SOqusZUtkC+Pr9jW6V30OGGAVTy1VUtwYtwWW0GBid+rPOTU4zN/rx6tDa3iWsyDlJxWSm08ygtzzFk+ielqI1NvIy+GGUKMIiAQlNKxUQ/8hjuN8UoPIMYihOrOo3jyb65ifBW47gopvm4T0DgvWL1GTWOr+BJlPl87/vf5+bmhqfPnmGN4Zf/wp8XDsmug0hBHKY8gm+7hB1SePe3H9r3dee6r2X3LtrPrOCCibWx9/3Ofb8UgXZ3m1779stV5e+LCtxJVtdo8L27sbR7rQmWnf+NE60QZCD3fZdgkUBlLfXpCer8jL7b8uz5c9abVYnII95OWrxljY4/3N4vYe9yLhIN0AgVai2Js5BLmwj7gdvpd/IvTAxtqY1lqKux8q5WlDIkA8IIMpu1xCC1nmazFtq2lBnJPoblcpkEoGO13jA4h+464mImlYCDL1aBSxGINpUE0SkARqok18xnMxFW3olfJ/gEzfXEoBP7hMCPNtEd1W2bkIyAG7I1KUv+cnlD07ZSIkXvavtK5Vwnk6LoIMaAQs5rK4tziT5ocHRDT6ObVHesKmHvtqogWy7p3YYYUSEkrkpJ5paaZjVVZambCh8kD6vvevw0pw7Yl0DZft4ZIXH3s1K7+4+7qL3t6Wx7Y3B/TGZ0zKQOhSgJ6ELcFhmc5/rmhs8++4zf+/3f59EHjzk/PwelJDIznStnYxbY7Q3Vz0NW0yFf7rHj9re9zr/9ZbWfacEF2Z9xOGDh4L67W47v+w7slWPayu519AhJ3rPdB2ueiLC3Ou9d2Pc+LDFqiX4H4hPS0zWb9Yq+22KtWB/inF7z5NkTrq+vhCE80SeFONLI7OduTfuwP6VjTNGGiY08N63VDozYVHWBpLKvKVsWxCy08qItJVqsEaF1crooJLtucLx69SpVPpaQtWGYEZwj+oq2aXdIa2OM5XPmIby8vmbbbVMfhBqp7y3r1ZLZbDYpG2+oEUF8eXmJ1oamqtFnmtVmQ9f1xEgq5Cj31A8BZUBbzaKdoWWkMWtbYXn3nqtXl8QYhM2hbrm+lqAORaSetUVYTR34VVXh/IAPWejI8VZXGCXVll2qRmyrikopTFWBlwCMCGjvcV7C9qeQVGUNKikOudCmTkUvu8GxXm2E/d35Iij0LipPSDImIVZl9E9LG4lsUeOGbCGV/dV4bNybCxN/3PSYDB3GyX4+ynUNCrRms93y9Nkzuv/fP+MXf+kXCx1W0zRy2pCKjKoJndpUCb1nOyRw7hJArxNO03+n0Y9H17SJ0Hzb9pUXXF9Msh+zYO4nKPb9Nl9WU2oUNHdBgl8eBHp3OxaMAePCppREXqETS3ayDi4vL7m6vOTly+clusxay/n5OdZIWYvValUWxxhFHZ5qtVnoxBhT2bPXCK9J/0JASHInVDXTvhtjsCGgMn9dUYBkUbQqMZi7gUhgPp/TNi0PHpxwenpK123ZrNdcXl6KL8PY0UcEvHz5spQdsday3W4l/H8Y+Pjjj0XIdB2vUlFICfjoub6+pqlrTk5PMVqLNTYpSyEqj+J0seB0sSAE2KzXbLZbrpc3KU9IEqu3q3VhJo/OcXp2wmzW8vhf+3mW11fCAr/eslhIcvRqtZIyJSkZ2GgtDB0pt2pW1xJKnoNTlARxWGNQKuAj3Kw6hDBXkpwzW7z3npcvX9InWrDMoCLWeSpsGKGhwUeIQaIidJTAjaqygMK5VOYlSQ2VprT4l2QIWBKUV8YxJVJvJ7k5UXbFJKlyQMb+WM8cgndNwTDx8VRa8rk6H1F9R6UVgxtYrpb8zv/+v/Otb32Lb33rWzRtK+Nis6Vq6luoRfCjMngMljsE4e0f8zbtmCV2V8DGF70m/AwIri/S3sUaP9XO3oVxrNQu7FCE0QGr8Zbf68B/MpHU7VX8Lfq1byHmdsyXlPue60ARI6SowJFlQqFTaPnTp895+fIlxhhevnzJixfP8d7tnCuEICUrJhPxLqh1/7anSsD4nHORS4HTUJLcKe9VE6MhB2gorYrVpbN2nRa3brOVYnn1luAcs9mc2laodkbfCty5WW9k4U1JwxJ1l9g2tJaihr2U9jCVkA8H77F1LczmRLEwup7Brdl0W+azecn1kYXWEZwTeqSshKWFva4s87bFIdZrCJIvpLQqTCD9ZoMfesLQs5jPJRerbdlsNgQvCoRzA6RgiPzcssAEsUm0UeggC3oRqjGWF9L1A3G5RqvnnJ6e0jQNdd1gq5rae3zwJd1BwtED0YsPzHtHJKCjlDlR2mCtpm1qKhMYnAS39EOumLxXeViN6mmq8cquIhvH70ohRV5DHiVifavM1r6HW+wtBNna2oUUFagcfSnFPUGnhGN4efmKxckJ5+fnXF5eynvKtei8nygesQjY+7RjCuZ92339VXdZXO/C5/WVFlxfhtNv2t406GFP5nyh6+5/vgViHujbvrAqS3T5/u76lds+Zj4drNPcj/KHKYuYsGiMhelevnxROAyvrq7ohr5ou+UeJ4EZx97JLf/FZLs+8DwzY50iJr9Mjj5DkpCtJrJ7LyVAxA2ghFC173vCNtBXPQQJWDBafEiztiV4CYEnir8tR9f1w1AIS3Nto77v8d22PEvJm5IcJKtNqp8lgRbeB5qmpqmbsrjHGLHEROEgS7RWUk6jrWtcDCXZO2qdyIMVlTFSB6zzDN2Ws9OTIlCmIfOD67FVLeH/amTrJ1XqzrHh2siz8Yn6SiH7xih+HZcCTHyitDK2wlgrSdQhKzyjhRsGVSDI6DOTucIo+auswWqLNR5nxJ/pQhTrbAL5ZQtsVGIoAkipkeKrjAw1MrPsj627pnycfigXU2mMjh1wKTnboLFac3Vzw8nlKy6vLnnx8gV1JdUDYhJcJphRmd3rwH3dIccES+nyO1pX39Q/dp/2lRZcsCu83pkAu0NQFYHwE0HkJpbVGwjQN77Kawbw646FwxrWDrN0WuyrWoZchgpnsxmr5Q3X19ellEYWXLaqSsh6SXScMGfktu9cFmtofE7TWkqH+q61Rpuxj5lPUGst+WAxEiYwYoaPsgUISSDm5GEkMOPFixdJWMLJyQmqkt+897x69ar4tWwlfirJsWoLw3zvXeFuXC6XiSlEGBoAqqpCa8VytWS1El/bxcWF+ORSPlfm72sqETzROfzQCd2UkmMkFFuqIRulcc7QDz3L9ZpPf/QjFosFjx8/5sMPH7PZbLm6uubm5oaq9tRNy8nJSSnLAnCzXLHddiyXq/T+wVqFdyOZq1BGySLc9Z6Xry5ZbzalAjPEQvclMkahjcJWkmOWIbJcl02pXhQD72iaGU3TMJvNqaqmXGfbS7kXH1NuWxyVnPxvjJJnNYWFs8UGuzLiLuXpYAsp2hERvMEL+4dWCqMVDsltczHw/NVLfBROxuvlkq998gmffPxJCXCKIeLjmMB7rBfHXAr7/X+bIIv7WF3Htv+ZF1xv2w5ZNfc/+B13hjxP3l6A7JzrDe7tdY7U153/mPM1/5b9Wbk55+i6rvhynj17wmef/Zjvf/973Fxd4oJHa2jamhiRSEAmkytDhRxSVtRESE6fgc6dZV89NcakiLpRaBUhW8n0qGtLlSLiZMHx6Vpgqnm6BglulNDl4huJAjCJL0ieg59APs45tBWBdXZ2JqzsWqwoqyhVZDebTWEO2WzWVJWVvibrMMOV6/Vatqdn54YeYmDW1CzmMxpXYbTQbaHEwrIpmjIz+OtKymt4H0CDcwPX11fMF3Mqa3n8+BExBradJFCH4LDWFOF1cqKwVnLT1psN3kuiccxWD+IL07ZCGUvoJfR9kyoBzNqWqrLlnDExOHRdR/QivK1NFaSJDN6nGLtJ9eVB6CvErybCDmMY0nPvvVicKkpyb6KzLIEUsfxvsu3WSNeTSMOxLtWYLHy7sK2KjMekHwOxCEyFLMrLzabkj4UYqaxlPl8wm8+om0ZK/Uzm7P5c2If1j/m47tP2gymO+dLu8mvttz/TgutNb/yQb+jWPj8ZU+p23zPOuIdz3aUx5c/3gzGPAWhfTpsKr0KflPxaOfdIa83V1RUvX77k1atX9H0HWihyqsriBo9LC1VuxybkuE0XwTWFLGVCRVLBp1HTNVJbyxhVBFwycPciDkPKNQq4DPQoVYTb6CdL1kGy2ITJIU/UFDSRou+UUol6SRKNszADlWBGW57jlB6n7zoJhVeZ5FcT47i4V9ZitCaGSIgeogRKWCPUQZW1uFS0U6cFU0OqXgxGVxijaZxjCAMheLbdFmMNs5lhPms4Pz8jXl3TD1KHq2n6BPk2KUhC6ndlH5748UazJUaJDFSAMT4lMHu23qcioAGQwo7KjEU8YwqTJ2bfEylqU4IpxAr2ZWGsqqaMA7HUZD+bz4UoHCqhqpMuvmaATz5MEtTLb3Fvt1tnVWnKy7YMQ2okWKR3DrXdcKUUta04WSxYnJ5w4S9KMI+p7M48y//mv0N+6WNBG0dv88D5p8ce828fusa7RIu+0oIrt9c+fI4Iral/qPiE9OTnn4wQmza1L7k44s86sG3/mJ9mmwqNnNibWca991RVxUcffcQf/MHvs91sCM6VROUS2aXGpGAFYmlNfFTHJufU2pI+yBHyn0A1CmF0r23mByw9LyhRcoOIFmw0IflZtDL5YkAqHqk1dW1Hn0MU9vPgPd4NpVKu0ToVgazw3vPixQsur65YLpd0XUddNZyennJxccH5gzOW6xWr9Zq2qlnM58QIm/mCZ8+e4QaHruQ5RSi+Q52gUqnA7HHDwIu+p0kVfuu6RiNCs3fCOyiCWgR42zSgFMPQ47YpnF8HVsslwYvl+PWvf526fkYMkRevXvHi+TOh8ZqfJJb6mgcPHtA0LavVipubG2L0xYdE8AKtao01FqsFdnXOMww9wQ90nSSnN6k+WdM0rJdL+m6LGxyBkRarrmsUWupqJbYOIVcemS6UFiGoAasN0YIOAseFGFNAjrxaHxJjxmQM3LtYYx6Lk+PHXybfUixL7l/OUYxKCHljDHRDz9NnT+n6jhevXvK1jz/hk08+4fHjxzz64LG8yz1ezX1WmTwv8u/7hL3H1s9Dltr0OoeE4FRofpntqy24VPIAH2tRQdTEKJqZQCppGCoNQUpTSNkLPY6pe1gxr7PMDnGL7Q8k8hq391umhJrCh3fhwiJu93S7vcGTfQ3H7mYX6T/Q4vh4Yj6EiQZMTAzqWWDZct0stDJz++LkBLTm+sc/5rPPPufy8lL8O02bFvhAGEJKAh7JUJVSKCPPJiRtOXPZjWuOOOCNSuSmKTFX5Xwra6ltlWA20baNkTFgNLIghkAgSn6NnBEAY7XcV0jwX4wpnN6gtSos4toYqlQp1xqDboTlwiSy1Fybq65rfuEXfoHVei3s8MuV5HCtViLMg6dpGh6cntNXLX0SgPbklLqq6bqO9Xot7BA2EqpURTiGcg1jTfH39d7hQhAfj5d7jAo2/QYXHKYX0tvlaonSmhB88ed67+m6ofiutBYB8OjhBRAl7N0H3NDh+h6U5ubmmtlsgdGapq6xOuC8wydrO8OrwvMn/YwxyvsHlPJpXEkkYZ1YRKyWApd93zM4L0nevUMZI+9aGSqrMbqiHwaBUSPE4NDRlERpXMBFeb/GmgkkKNa5DxE3scB2ZkeEQkE/nRdTU2tvKiXbajLn8gVv7+ggMb87gvaE6yu2Xcd2s+HJsyecnZ7yja9/g5//hV/g7OwMPUELtBalRSx/CVoR35ikmjCZp4dzwHYFmorjQqUSciIaw4G1Qt1NXTfdNq308Kbtqy24uMOkn66uk2WtfJ4qP+Xzm2kJxyyd8sJfc748SW4nAU/7e/v8O1DhPa6ze95jPbmtHx7r0X5/M8q5M4ljKLDdVAPMbO8hBJ49e8bN8qZw9GmlCEyf3+SeC9wWx7VBK0xMfoayfarvpt5G4U0TBWbCFq4Y4UKjU4BCgtgSniUarE95TskPFMSv4lNicqZ10mmBD94zRGHIUMaAEd9ZVVmssbgElQbv0VpxMl/Q1jVtXbNcrem7jr4f2K43Ep1YSdFJawxWywLfVDV93WCUFgsl+YGEocQXhaLUwopSEypGjzAVJYs2heRL4Ibcr0vRfCZz7iUhTTrP0A8SnFFVoIStnRhRyifLL9feGtDaEBJDe9s2DINmcMNkek7etZKowCHVDouRQmul0nO2VYWpJXfLJ+g2jzFhkxAlVWspNRMh5ZilcP00d7RPFk44DEUrknUdb6vGO6LqmDaY0Uz2huXe6NzfttMXRDa4EKCX4BOtFau1WLCzdsYnn3xCPDlBWbXLep8V1Tg52cFO3ha9t3ebkk9P/27vX7wdr4EHv2ig2VdacL2LQIYv3HYe/i4ceR/89/WnPwwJjt+/nIFxqB162sU1p9QOZOES4ay1tggmkGTdxWLBer3m//6//2+pcuv9ThKt9z453uWaWmt8TA5+L6wIGWLSaiSl9WG/MrLfqVeklKI3hr4SAVBpQ9NWKCUBCxqDretJeYpRGBgoofvRB+jER6SMwiYWh6qqWK1WqRTJlsVsRlXJdk3EzmZSmqS2rFcbNqs1bui4ePCQ08WCjz58zGYtVtRyueTly5esl0tAohJPz89pmrqQlnrvOZnPWK2XO1WjczVh56TQpPeOYfBYnYI4vMNWFcpoojKEQcnirCYWPhGfSlxlRKCt6+QHFIaOHLFY4ElrJWw/SMHK9WrD1dVlsnAEOuy7QYJz+m6yyMro0lpR2RrIVnos5MNuGGiahpOU4K21put6nPMC9w2emPx5Co2xVeF5XG829NmCVxJgwzAIQ3wa2NH7xCs4jnUFWD3Chnl0Fdj6vpPkjrar6OZzp8p7CZUJJNoxHDerJYTIarni5z78KEVUStqB6we5x7C71kSZoChGftBpd2NSSnInspWtRo30TsRnF90Z4cocOTx1b7yrNfsrLbimbfrwYxb7r23vbnEvwurgVe4vtA691/sGX3wZwiq3Y8Nt/3p5cObJ4Zwri5tSio8++oinT5/ywx/9kOubS87OTtisYb28wnnH4AdhLPeOrhsDF+JENVTi2MAjZK6ywCgJZiBbUzr57/MzGcPWJSBBoEY/KIYQCL1iMF0KqECsghixlZQBsdaKlu/ExzNrZ8wAn2CyGDzBwaypqa1h1tSlVlcIUjxyozXROypjmM/aBFEHrq8vWa+XnGzmPHjwkKY+5/zshMePLoRBoh9Yb9Ysb664uQ40Vc1icUJdVyzmZ5wsZgyD5H7l522MIXiH63O5EUe3kXInfdeJ5Zh8TL3a4lJAQ13XuCAWmB8cg3NJeTB0204If9uW6Aa5J58tRznXMAzU7Yy2FV/darVks+nYbLbc3FyhlUEbxaxtygI39GJhSVBOLfliSuF9GjvBQwis10sWsxm0oKxhtpgTFPRLJyzzURKhjVbCz0iksjV126KrCtVt6HpHSHXEzCSJt+SecQABOwD73QGq36MpESQ5mT1O/U1pj6w8RQn7V4BXoQTjaGuZzee0sxlVU0PMNbJIwS2yHuZimEZptNI7Eb5A8fhmFEUlM7HYWGnu3CW0pv+Srlus4AMK987+b9l+ZgQXTLSHezZV3s3bL/YZ4ihfDl7+fsP8oP9qEoyQv7+t5faF2tHDx+ioaTis1mbHUTt1HF9dXbHdbPj44495YQ3+7IQYHvODH36P66triTpMfrNbglFuRmCvEPHs8gfmJ5ihMaUUxpoU8CHwT1JkxfoIPrlCNQqFTZRMSil8cMUvVXL3kp8g98vEIKUrgihLWqUoRa1ommqETcKAUpHghuRbkkARrRRWAcHTbTeslzdF8FRGozAYFQmhgujxHpSKDMOWGJz4bVROLlbCCZiCRbCamMqrKAVuPmfoe9abNUMvQl8bjVVCUBtCwNYVVRSoN1SB3g3F6vQpIjO4IVEvSTSi0COJdu76QQQiEso/m80AYU8Zul7y1awVKC9HXjJd5JBkW+1wQ9L8jZEImxjph4Gu71nUNVVT04TAtu/ohwxvavohW08R52O5nqkqlPMFHpsC46LsSOiOCzK2iico7sN4EyX1EA44/TqxRHbH8N4sUinpeWf7hBMxjSOXLCznhKh423f0XY9OZVUyBju1kHR6P8csnt0VZu/zEWF1NLAjjhD7eF9xZ916F1bXz5Tg+llsZeE+IrCyv+bgMfdo9x5Ee5NxvESeDLsMF5mjcHqdEDybzYYXL17Q9T2//Eu/xHe1+FIuHpyx6TYMw8Dy5kYWSa3QURcIcOe+IlJDqyQXjzW3FJlENSQNtC7CR0Oh1cnniOm4qrIpAVgTQmQYepRChNnk2VZVVVSRGEXDz9CdTgssRlFXtoSga3xa7D0hwND7FIlY01SWGAND13E1vKCua9q2lYixGLEK5rMaa1TxoXX9liFG3NbQtE1+ExIhmN6VNRZdWYHgKptYMQaWyyWvXl2JYNeaUFmGDDVmSyxBv0Pf0zupnDwkP9Ew9PhAYX1XSjj4vA90fZ8omTxKC2kygPeOy1dXqCAKTd2M5eitMeKHSspKW9cEb+iVTuwqJuVnSbi/0pr5YkHdNESg6ztW623yI1Ys1z06RGwMDINQYtV1lRSCkRR4OvalL6l+tvJ4pGrzdNwXKI+JL2esQnrnvMk/FxV2zw9+cB5OFesogrQfBjTQacPNasnNzTXz+Yy2qVMQjljx09pamZkGbifj7/9b+hohU1vt3M7k+yHhVR5H3I34fddI0FdecB0zYXNTO4vsF29K/WSYM25FIP4r0e6yHNXO75mfUClV2BCMEbaE6+trljc3zOcfYKxlubzi6bNPefr8CTerJb13bLsuRRWmWkRmDPTQKFTKv8oCYycUXCskJ3cKUSAlPIwIE5WDL3wQ6DEd64ae4LUwL7SnAo01jcBmfU8/9KgQSRm+BD+U+l4ahfdDmuyRoXfouqGxLY/Oz3GDE5b7GOm2a4bB4/stDx6cY4yltppuvSEOkaBBV8ki0RrtJDEbY5nPTguE5BOzRlZs3Hab8tI0ldEJQhWrrkqC5OceP2L1wYbVasVyuWRIfo9cnbnrJdijmbXFT+G84/LmuvjvnM8afS7TnqEozWboGYaO9RK6zZqQGCAWJ/OkwETWN9e0bSv+P2PQMRRexnY2Q+sG7wMvXjwX6ihtWSxO6IaB9XLFZ8PA+YMHKKVomgZrbUrO3lDb5MNJzBrrzZp+kHfa1DWVtXRdx+BSiRQNOtFvKaXBaIyRxX9ITPPTthNOVT68bo6qdGQ6KB2XEYP9WeWCSmNUkrWN1sJq4h0B6Jzj8ydP+eGPf0yIkY8/+lCs7CR8swKnkrWrIomeaxSUU2vo4GyeyK3Ma3mXr2u/7Vtd+fO7cGl8pQVX1tDGz4f3uc8juq8fST7cs4NjL97API63JsqxS962tG7/duy+3txc3wVLjj/3ieY2hSqgEOtWdYWtLKvVivVmw9XVFS+eSwmTbbfdgY1ijAzBY+IYzh9Jfqqde79d0qQ4oTNrQ1BEFYQcNtE8oYMIRiWaakyQn4oB0l8MXgIw2oa2EXYI7x0+OIZhDNevjJZKvEoi4HxKEg5hoNKWSoOtZPGY1afEpBkT5FwxRKyWa4eho1tHiaIzBhVC6lPEddsiAAHmbVMER2hqyRsLnuh6YpSFWBtFbTRGQ/SOk1nLyazlg0cXrFZrur6jdw6amm0nDBMxBqyS6Ly6bqjrhwxuoOsGlquVCOIQsU0lJe29CCilVaKjBe+GEmQRVBCIUCmaWiIR3eCwyYSRdIJUXqYII/HbEcWa1IkqqnOOzXpNVYl1Op+1bLVi6AeiKfZxijIMxMQTaa1FkyMhpVRODKLAhFxF0hhJL9GaYNJvcUwOPjSjsv10vN3hH9qfQQKjpHGVtsWkKKWrhBC4vrnhydOnhBBYrZYMyXfZNFKYtW0a6koqhpNYW3Jwxq3gjcm1p+CmUmpSXHU3R+ygz4vRx/W69mc6qlCU5Ylj8OB+95M1x8Lbv6iGMMWo31Ub+zMVULeTlN/dBTOsodidvntQwqRXU6gCxG8iNYYaNhvL5eUlNzfXXF5e8vTZM5bLlfi3IME24qdyIRLxRRgpYpHS0wipcr/JWSC/TeqBxYD3iO9IaXF0p8KRIre8QGVIBCPBE7wieCl2WBgLtMG5Aec1RkcGJ1aWSYuytYamsgxOypAE71BRkns1GmMNTS1w4zQXixCpKwkCCcHhOo+KHiqLUhqFhG/73icflcCBbbWQvqUquV2/pe87YYhPAkHHgNVCUuSHjsXijNl8Rjufc311xfXyhtV6jQZqq+j6XrgOtTBcaGuwC6G3CiHy8tUrttuOwTlsXScLxjE4L0UjUzKxwKMBFSIuepRBIv6aiqGXQpth4sfNuePWWhaLuVhR6zVD34u1RJSCkTfCaRljZDafMZ/PRHkJeUFVkNIxhiElgPcDGqEgq62VPjnEqvJBmDOUcEEqNXIIhkypsYsckmyiMhvi3q/vouXzE2OaDVmARlabNc9fvMQ5z81yyfrmGqMN8/mCSOTs9IyTxQnz2ey2cDoguKZw+PS3Y1bWjrK4J6yOWXLvqv0MCK5pkupk+0+1Z3e0t+3YOzKx374du26a1Dv+3IgbfCGLzTlFSinquubs9JRXr17yz//5P+fzz3/Mzc0VV9dXKSlWg1a46ArXX60zvJEvKeHb3ntUyjnSOjOfZKe65LVorQoLu4qSx9T1Uo1ZVVBZk9gwSLCM7BfcUHxsOkbC0NP30oHKVhijaIzmpD1FKRF8xgp0KYwcIsSGvmfoO0kPyP4uJRyBxIh2A/V8BqScMmsLdCQRhT1+s0Ebw6yusbUUFdRpoVZK4YaOEAappjw74eHZQ+rEQrJa3rDdbui7ntBtwBiJpgsDOtY0Gr720Qd88PAB267j6tUrNl0rFlfiZuydY7XeErqOtm05OT/l8cU5l1fXhfVjUdeotgWtWHeS6ByIdF2HGzxDqsSchYpWYJsq+RKHndG0Wd2gYqAyira2RF+hCFijqJoWlESNXl5esul7wuB49OgRs7omes/V1RVKSxCINRqtLCFotltJD4jWUNmWphH2/ug9wwQWi7GXiD+dlSMgilBMhUhK1N10LZ/E5h2fJ/doMQqBrmJ0dYxpAyTHtgZlZIx4V3yiy5sbvvfDH/CHf/Qv+ejDD/nm17/B//P/8Rexp4a6qqmqilyN/FDb6fkk0CIrf4f6uuPrComLci+5+F2vXV9pwSXtuPPwXbeftND4ItbeXVbXsWd053WOPNbkNy7aJylAw9qROaMIFmU5OZnTzmTRsFbYGTI0GGMmoPVMQ2mzbwvEetuvfJx6ggRPibYsDmnpTwyBurKY5IdSQKUNlbFUdvQDVdZg7cjgoIIHB1FB3bRUaeLHkOpB+QFdSQSh1gqtBM6yibhWAdFaQtsQQ7IYUdRVTV2JFdpt25FwdxgSTZEIsZPZSan6PPS9+JKUsD40dTMGoyiFtbI9hoghoKMXuiQNw6yl7zqqWgh7vfeEoWfYKDYqwmwmkNvJnHllWK3XpbSKqSzaSFTe01TMctiuOX9wTvv4EY8uznn29Blu8InZPDKfS9mVwXu6bU+X6otFEvu583TDgDGWhMilKD6J5nNuYLNZEYKnqqSmWNM0LBZzyekLkdoKOXIInr7b4ocBrRSL+Yx+K+H9IeRnCUpLra6YwsajD+L70yIcVe9KUUlB5aQv6ARfKlLtrSy4KNbPOEWycBqjWzMyoI64AO5qox8tFtTITOaopDRIgvdqs+H68lKqLLx8WeZdZoL5+MOf49HDRzx+9IgqKXK3ZtAEsdiHBg/tu284yLaAirulh/ZRoD/zUYVTLeSQKXsoAuZ17b5C4hhbxbt6MW/cn6P7TcG7L6eVUF5ieS45l2QHMlDC6t02NbO2TaHSeYBTJopPoda3YdBRmI+TYvfeRyE58fkpUrCCwHyKiNWaShtqm7ZPghmyMBanOBgitdW0taVparwP9L04/isNJgWDQKQ2KglDEZS5j5pYqHbaqsHWQig11DaVs3dJWHTFKmmaLJyg63oyw7rWmqYyKdpOypLYSoRuvxHaJq1gVllaawg+0Lc1RpviZ+y6HhU9fuhxSlFpha009XxGZYSNY7vtBCKsamazOTH65JdcY5WibhuUnhN62XcYHL33YCqi0oQY2dYd682WVVImBu8LM4a1VpAERp7FoCO+94VdJIZaCktWYj2hNDH6lKysiUHjAjjXo7VJvIYValDib8tjUgkVV16HFWC1JiqJNA3eS84T8pqyAJOaYklQpfEk0F36Xzp+3D51NOeTTL6+4dzaR49UEZ4y/n0IdIPj+uaGl69esVouWa3XWGOkFI4PNLW8e6U189mMxWJBpRTjDHvdtac92D9qX3jpHTfBtL23uFKLE1M2fz+Mx05+V/cI1jhi6ezjtuJE3TmwbH+d8LobOz7WrUP9muZMyHc5fygL/k+qqQyWxBHvz34mYT/o2a43LGZzPnj8mG987WP+9Lt/BDGTqzqCC5ASLoXlG5QKpcLveM5cvHA6IcQScokGqLJJIFW2wJaVMbJIaxFUi7ahriqs0SmJeJBFv2lp6ioJQUVjDXWlaazCtg1hVqXij6nicBAHPkOPVtDWNYt5W9gbamNLxeToQ/HlhER/la3EXPZls9kI6W4il63rurBIXF1dMfQdyhhmiwVtLewc1loWti4w0KySApZa6yIYp2wgmanE9WvWbku/sZyfn3NxOsfaU7rtwOXNtQgK3/OL3/w63TCwXK749MnnuI1Da8MHDx7QdR39MLDuenofsFXD+YMLlssVl1fXvACqpsalAI7FfFZqjWkFzumUuwdTv2RMkZsDkfV6lZLZIQbHfNbSNjXBw9BtMcZi64Z52+Aqi08wZL5fYpS8N22Ytw3zWVueqQ8OFXwuF4pPxS9dkOR2VGasl/EdVF7SR2VNqyTgMjtv2mP8/xSXODiBbre4+7OLMbH4K1zw3CxvWK1XeD8wbDuxpoHBe+h6iIphcGw3W1arFZc316X8TA4emkYa5pZD6DWJNV/FdP/5c6oplhL5y7EhpiAcfXANhXcDG36lBReMC+RUiN0yYb9Uh9fu4vkuLvVloJ3Zihi/3x6sd5+A18y2cWqKhTNm6OfIMJeYEKxVnJ2d8PjxI+q6AlSprDtCiznLfywtkvs7hS+K1UVWLGQcqAgqClFuW1UYIjoGdFAp2spSG0NtNK3VNJWlrlqhZkrMFk1To5MGqaJER1qtqaomwZLC9Zc/AyV02WojVoJNzPFGp+tWKBXZbjZiVRBomhMpw0LED544awjnJ1I7ymVSWmiaOUaf8MHFBV23IfhUlkNBXVU0VZNKsZgUmVelOls5UCUlAg/ic5u+n75Pgufmmn6zljpltmJeGXzwdJslKggcGIeeeV0RM2G191iicEc2Fb1XoAxuu+Xh2SkXp6d8/eOPuLpZsu229P2QKjBLTaxt13OzWtH3A30/0NS2FIX0IWCNpqqNWL+p1Iw1c4IX7svttsNvB0IY8E6iLHs3SGVpr0rCeAyRfkj5YNs1TRL4TbNAm0jXC1OLtjb5SKF3kqidE9qHVAzTaiUcgoESQakSMbZ491Sq8yVE3qOCOnrCDs6l/fVcUag8AqAi+CQ0SETKSim866V+WkIvvBfy4kDkZrlE66d0fc98PudkLpBrXefcr1GRHsv4aHL9uWmbCurxuPEzjM7Co5GHR7a/SftKC664Z6buSP6JJfI6k/idtbfBAl53yp9aMMax9mb+MSGTFRVUK4Wpa1C+WAhSAsMmtgmDlEnPvIeHI6AUyBxXIiRUsaKT1h7FsV4bQ2WFgUIrMEq051ltaapKLC0VaStLU1fM27qUf5/NWmZtK6S2WhY9hTjnra0S64MEU9hSGkWlYoAqBWAk8l4t/pimssWPVgGDtfT9VvxhWnx0UVsRvoAPnn6QyEQQklprLQqDc83IpJ8YPqypqCoROMZYqsokBz+JQNiK72kwY0VppXCuodtWdN2W9TZxCHpf3oMmYgTPQxGptGLRtJJ3FYSXMqZzKa3xLibL12Pmc+qmxlYLmqpms92wSVyF2ewMKF5dXbJeb1gu12hrCrnuervBVlYSiI3GGiFF1qaCmFjQVWTwQ7KqAraqiEp8ZsEnYl2liDpSEfAOXD8Qo8eamtmsReuI3XaSw0ZEa4vShhnCvTh4T4xbYhgKr6NGwQTByX4vEViy6siSMFpnr51bWRPJ80pe0s5aJteI+BASJVqCWkNikUGhjS1w/Wa7pW1biXJNz3UYBgnUyJ65MtcykiFX2p/V++hW+iJWcDIe1N7vx4TUFxFeX23BlR7YfmLcvhag3rU0mbQ8sL7MdpfJvS+S7xJ005/efMxE7mu6Zqg0E79G5zBaUTc1TVMxOCk62Pc983nLyWLOerXGarOTTLwTSZX7wBjsYa1YZcKGEUFJtVsQ+qPKVqm6r+i5lRGhdbqYMatrmqpCR09TWdqqYjGbYYwwOczamtP5grquSuh6LNFYqmilQq5rMUbgyDxxxSpIIdVKBGdIrO2Nrjh/8IAYIzc3V9zcrCBA3TY0s1asSu+IVMRGWDEyPKqUTteayzrnY1mQvA80TUVdN1RVjbW5DpoHFYtTPrbVjuCSd5VCzzeSYJwXN9dLgvXZfI7PSFFdM29mdENPPwxsNp0wnADOB1bbDb3zhAjbuqY6PWU2n/Poaw/YdB3rzZrPnzyV+21bTi8e8Oz5My6vrnn27DlVXZcF9sWLF8nPVhW42BhD3TZUVqDHqjagItttT9cPokiYCmPH3KW8Rpja4rUiugGCo7KKs9M5pyczVpsNy9Wam5sb2rqmaVtmJwu6Xsq5GBkEDE4sT6sUUatkEKkS3KFiFBLemCZauC2ydnGKyZepX0wdX7kiQk0V3DAGPjByFC5OZqkEiWe5XPLw4oJZK5Go/dCz7TaSU0hK8J/Qb+0HXBB3BVFJL8nr7uQ/4sj9mK22L1K+5Fj7GRBctxPijvmO3qa9GR57nA8st2wl3tq+t230Wx2+9hil86+WVTbtizEarSqi1vggGq5zjpuba168eM7nn3/Kixcv2Gw2JUwXZGJk6DCE0X8n1kN6t0GB1yg1KVWhtECCWuiWWit1sZq6pq0MtTG0dZUEV0Vb1cybmnlb0zby2aQSJEZJkmxVieCq7Ah9yvTWaC0hxpnVQyU8tkCdWYNGFhBbNYUSKg4DWiseP3jAxel5slAGtEocj1aXMhUgeU1aJb9D4k/Mz0qpWVmcdaqGqBXUtsI2DSjoBymLQQjCKlJeGFRGBDdzxYNT8UF55xj6gcGJH2roBtCSz1bXNVXbFmqomCBI7z1d71itO1brDZdX1yhrBB7G069uIEYao/jo0QUoja0tD04WNEZzvljQaIHlfAh456mUJGHXbcNivuDq+prNdoMfOkxlqRvLvL3gwckpy9WKV68uuby5EbomBfOmESgtBlbLFUqBrS3zRp55TFUHHpyfc3Ky4OKs52Xb0DQNVV1jqoqNlYKjRks5mW3fs+46uq4jFx+QJOuRoNfaVNBUKeFRjLEUppzO9FsgzRQeEjPo+BybWDoTWYfRik23xSBRtDE4PnvyOf0w8PVvfJ3ZfM7J6SlNVRVdNAuYrBjsQ/f70b13tUOW1nQ9ew8VHvFp3d5n8hDfEjf8V0k43Ke9SX+nz+xd3Gc5Q9z1QTrnWK9XfP8H3+dHP/oBV5eX9H2XnPRDCo33ZTER60qO10oXGCNX+DUpjF0rif6z2mCNUDs1VSV+K2uYtyKcGlvR1pU49SvLrKo4W8yLk7+2yR+UQ+atFv+KkbysPHkNCqXNRFMdqXSyDay0FqaLvCwZqf+lyAwgqhD+NnVFjBYfLN7lY8yupWAMRo0WRxaSAUkQjlHy5bTSBTa3KcQ/BxH5YSi1xnSO6FNSlmVaFdd6T6gsjbW4kKyfRmqcKJ0sPitFG7URiDIL2WHwtE3PYjYrlZRJxoePqYhlCNTG4BNdlCWwaGt0nNGfnbDebCSZmcDJrKFpG9rZnPMHDyA4CI5N12FVes+zGc6JL8wPwquYuQ+NUqAVKsjzN4nWSWtFcEFSHryD4NExYBTMakl70Frj3UD0LsGkAYWQKlutCEajAyUaMQ15sYrtOCZ8qouS38t0hh1cvt9gjdpf/yMpKnLiMtFaapytViuePHlCkxLG66piMZtLnThrU7UAVZTrafDZfjj7dK3dWTOKTD3s53pXBsXPgOCaPIyjAmyiAXyp8ud2rob068CeR6yu2xGGb97hu3K4fiJNKVTiGSQxGXjv6PuO58+f8Qd/8Af8+Mc/5NWrVww52nCzTvv5BGONBR+VEtZvnfKlqhShp9M+VoNV0FRVETZ1VdNUmrqynLQ1ZyfiY5nVNW1V0VhDW1suThfMZzOaukoLW+a2jKNwNJo6CQydOON0Ki8hkVmj5Zt9DOKkF/06M6jHEIg+io9M8EuCc1SNxVYWrWs2m205VwzCEZjJezNrR2VGCMzHVLBSKUD6l3O/rM7sIFJyJKgUnOG95GdlDbukACSIRwFRo6yVmlVRAg9cjkb0oXBRaq2wSqGsAaWoK7EO523D6emJ+NC8l0CTGOiHnt5JuZQ+BacoPzBvairVEM5OwPdswwAETueNBBQsFjx8eMGwXeOHDj8M1NowqyvOz04FMjSakNMKhkHSDNJYCkBjxGJU6TloAio48AOu20gkoQ/UVuq8xeDpNhuGQSBv33f4YSs5YCpSG4vXARciRkWiTv5ZK7lvoAje44wHPHFSLm7f8jo6j9TxYI4dy02NaI8PERki8u7quiES2Ww2fPe738UNA+dnZ1hr+drHH3N6esrp6akkXCuVKpVLsI1OYzxf43YX1c7nMTH77vSkQ9/fpP0MCK7RvxVixMBBIfYupDzkxUm9kQCcwoO71t9h5+Vo9t99kamP612EmL7LNiR+uTy9rq9vePnyOd///p/ywx/+kM8//5Tnz57y8uVLum6bFkJdnPxjdJNCG/ETGa2prMY7oRGKgCVSa0tbV5zM5xIAkSDB2gpkeDqbcXayYFZnwSWUP7W1LJqGxmrhCCSQkUe5lknRdTZBdSI8iTpVbQ+Y9NyzFZhbjBFCKmwYQaMF6rMZUpSKvcZadAjg5b7P5nMGL4svyTJRVYVGleCDGFSydMytayrAJmsBKJyGSmtJoK7Beo8LfgINjYuNjhCNwJnee0wKFtDGUOlUHdqHEsIvfphAGBIZrVIo74XUt0nRfFhQLcpoCc7Ybum9o+9NYZHXSWk4nTVsVhYba2ZWUydGiKaqscFzPpuhzs+xUWGriraynNQ1y/WGWmnO2hb9wSNulktW601i+xfLsK4kiTnGyPX1kpvrV/ggqRc3l6/S3ITODYQA3nlWmw0uir8uRlA+YBHLv9eR6MFky8PqxNgh0bAxRIZIqUigjQiSaS5ZeXf7E+gN53NE3nEybekHhwYqraRu2TDg3cCnn39OXdesVkuI0HcdD87PefToERcXFwKRVlUZD1Orv6yzd7FoHOlfGS/sxiS8bfsZEFy7rMWFBHLy+/Rp7pjBb9tec+jdUTQTs3my77sSrPdt4+2/O2E3xcLFlyM+qvWEieHy1UuefP4Zn3/2GdfXl3TdZkej00TQKsH7kxwTphZB8vMoxbyxzJqaRdtyfjKnthK5N6vFqqqtYdE2kq+VOOoaK1ZLbTRWi7ZshGyq5G0Zo1Ngh8YohUnPTBelRQSSSQnCIE75naeaFpIcaZjVDFFscxRiOiCV3/XBCx0VOambxNIt27L1qSbXyeNZa5O6llfZ8fll1nzplsZAXlFlUQ7JX5wiMKSfJrHsy5ZMgsvE2S4afhgX42SlokXYlf2UeHMkslNjTE1jhfXBJyVkINJYzaKpmSXoqp3Px1wjpThpW0wE5SUYoKoqaq2ptcFbg6sq+q5Dh0AcBkhVmXPACl4KSdZaiSB2TiinfGIcVBJ9qlP/K6PAp/upakAx+EA3DChtsCHivJRAkXvUaYzIibQSCrPeOcIwpHc1rkn59d/ydU3e684cm8zX6U+iR8XdH2IkRNhsNhhk7FZ1zXwx5/z8ASeLBY8fPeRkseDkZFES97UeWWxkzo0C7JDQ2VnDVL6bXVfOPsT4XnC95g92/Sxv6+P6In07BhW+m+CR2+b6648ZF8V7ABZHzwHHBa5WihDFSthsN2w3G9brFc+fP+PZ0yc8f/6UzWYtZUDIC7nckE4YvSoQnCzcISqCkjB3m6yvk/mMxWzGyXzOw5NZqjulmVUVbS1+q3llaKwIOqOEJb0yilorLCm/K1J+V1r+tSrV70qWjCYxYJA0XEgWF+OzGM3lRNbKaHmq0SeQ64PlcOT81kIpz5JOkyvShpFZ3aSk7mxhEWPxt+XxFkNEmQlzxzTXTMtdxOR7knLvwqBOWSwzPKtHhVBMKrHy9FjXSvqcLP8k7HOpkzz7IhJxqGISXnWFoiICfcrxUzHgtGJWVyglcG+7WAirRcpno2molBG2d+/QxlIpRa013hgGa6SSgA+Qztlay3zWYm3Ncnkt9FBRlBEdAtE5ETBKnokyEtYQdcQNUm8MranbBm0sXT8QQ8BqjY9IonIWXhFiSsdASWRpTM97cO4IIe+BlhSPcX7dntdpl53veTClt0GIAhG2dUVTVcKkP59zdn7GRx98yIPzU9qmoW3bBEmPULlULwgFJbprzRrX2lGZmv6Wv+8Ivj/TgivEWw9iR2jFveCMn3J7l7Dlv8rNe0/fS+SVMYo//d53+YN//vv8b//b/5fl6oYQwg4B7zjVkuWlxkKDIUgBRhDfvFZKLKmm4uHpKaeLOaeLGadtS5Ugp7apWLSN0DkFj0WomyyRWkkCqTXJ0sq1jxTEIAEIqqpQMSRmdVDeoaJJNY3kHlUJDhELyHtfCluWpkYLTacoL7HcZLNNuWAieABdpQXDEWuFsORHei9BCTGqQpBntKaqDDFaMmxuq6pYXCIA5RwBEUwqsYZ45ySgggghRY4l67IoP+HQYpWELyLsQqr1pNXk9xRgE5B3nP19/XZdaJiqTJwMoBWVliTxXklqg9YIF2HflfD8pplRK42pK8J8LhYBoEKgURGPZ+sduIGTuqJ98IDTszM++PBDzs7POT0947vf/SOpst07TuqKeWXh9IT1Zi0qRBLK2d+qQs26D5Js3G+xszmmtlR2QT940BplDAHFthvoBydRhNoQo/j3XNcTvC/vXmWFg9GCeq0gYxRdu0Jh8gO5AnJ+Q/K1946Tak47nzE4x3q9Zrlccro4kRI3J4tCL0Yax5n4WCmKxTW1nKbR0/uRgtN7mQqs/P1fSajwv/1v/1t+4zd+Y2fbL//yL/OHf/iHAGy3W/7L//K/5B/9o39E13X8jb/xN/i7f/fv8tFHH735xSYTK+OrKsbydxCHLa9TJncm0HwX7dh7yPDk3YEXU19FuGO/3e/7QnkfXjgeTr/f99y/+2DrSTUtnzMcQCIlFeFSWUmmdasNy5srXr58nmpY9Wli5BwPURPHIASdYCmAgFWkxV2E0sXJiTj/5y0XpycS2m40tYLaagl7ryy1VhIeT8AAFglWqBJUplL4uEaKUxKT5UcsEWTSs8x9GEc4MUN/uWaXYDWT5SIvStnijqhc0SmbOirFL4Yg0jE/03SeGIOEFUwEQ7Y+pQ+Soyh+pHSZROabB8dIMhSkvFhUpc+KLNzSuYuSlyzKSNH6gx8jC2K6pxATXLrnjyk+3cmt+lT3Sqeb0CACAhHAEalh1tQNlbHFKp21LUZrYZlPrB+D83TbTlhBEhxsVUV0A52GxiiqtkYhCo6NDu16quB4dLJgUVmIivV6CYCxRvqYCJ77YUjMG45ZXbHtZwzB40IUdnoxX9HG0ntPPzhWmw5lNYZUFcAF4WXsR8op7z250GO2TYrfZ39tSE8yvcas+5RRNf56rGXLX97BarthcAMqRl68eok2mrPTU1xiBpnNNjIuyruMKd1B+pujRuPEvzVBJNN3CU5RaSGIeSal8btjYJTI4bdrX4rF9Rf/4l/kf/1f/9fxIna8zH/xX/wX/M//8//M//Q//U+cn5/za7/2a/yH/+F/yD/5J//kzS800SzH70zkUn61E6gwQTaRkNFoKIvkbnsbP9h9tYjbGLE6+Fvpy2v6to8lv70Pb2L97EAVh3u0i81nn00q82EUYFAxsN2sWS1v8N4lbj+XhIEAcKCIcWRGV+NLLPCeNRIwcbaYczKfcTpvOZvPEvQntEqNEeLcEQaMwvwQQes40gaRLKmYhFSGurKQKtMuC6wUHZiYEnQ2pILPckmee5zom+nhZAFM0bhBGBfyuJUVPkY1Gc8xbSc9EwoEJCHZpjyjfB6lRm13DCDKSERMfYDoVbk3ic7MKxCQIhLzAlMi1fw0JC7fYcpoK3DpeKf5ujnCMST+yQzJFeRUZVhZ4E5rco5aSkmoqhQQ4nFuSwheilO6QYIdtBIfpbX4lLs3r+3oZ0VRxYj2DuUdp/OWRVtjtGXVCDu9MHM0OCeUU9vtlm3fsx0G2qZi20tJlu3g0Sl6UmlN1TR0w8Cm68Uvmd51iODdqMSoJLyLcjeZP3e2UfZM/pWHVmbp7gTk1mKWrt07STmxKK5vbqirmpvlkqFuUAgNmtVjUJS1VmrTmYjKuYU7cOFobZVLJYh5OkxGRShvGzceK61yn/alCC5rLT/3cz93a/vV1RV/7+/9Pf7hP/yH/Lv/7r8LwN//+3+fv/AX/gK/8zu/w7/1b/1bb3Sd8Rns+bT2Pv+r1A7181AX7+r3lws33kfg7VuKKScpTdTcP9E0B/zQ023WrFc3rNfrgpt776jrNsGBwm+oE5SSF+4Mp9XW0FjLYtby4aML8W21LSdtRaU0lVbUWsrTGyWwoPIiHK2S0vVidUkUmFYpECR6COJAV0lgZiGVfVp5GZU7TVpnWo1C8dGlZWUPxslBBdJCsbJGX0LSTSOUbNY0qcc6wsmKLUJVAgjGNSMtjioHfkytH+lHiMk6RKX9UrCFmgRaiH0nxR0zMW3uefqcmUCgGB6j/0zJuU2U5GnnPX7wBZKstJHAm9Sx4FwyIlTR5okxiWSBVUMuRhmE+SPXOiM4qcDcBwYFpycn2MUcq6CtbDJeFdv1lqYy1DoS+i0PThepCrJmMatkfFjLfD7fSXzfDgNdP3CzXLPpe7Z9z3KzZb3d4HxgCEK11VaWedNwNj/h2atLLm+kGGqdIlKNrWDbSW0yl/gLJ282C7S3a9N5ePsc0y2h6PSRq+trvPfUTc28blnMZlxfXfHh40fMZjPaVsihi+WsdwZbEVxTqHC3wMsooA6iXjHcGl9v2r4UwfVHf/RHfPLJJ7Rty6/+6q/ym7/5m3zzm9/kd3/3dxmGgb/+1/962ffP//k/zze/+U3+6T/9p28huCL7zBk7NCS3tITxuAKvqAkM84XvPGlDbzwQRz/cT1PQ3jewA9iZFeNxsbwTceorQohcXl5yfXPNer3GOSf8faYiquybydF8emJFkAKzFG1TczJrmbctF2enPH54wbxtaK2l0eJkNwpqk3xGSmGilLrXyCC3RpdggzHyMScxk7gSdSLNnSQ3a0lcFe65MGqLIsJ2wnwzCFSeSwEaJ9+C+G90EmpG3Z7wo2aejlGjBZwtieyPiFkK5P3V+AcjBJUjHrPw9TGTpUZAFwgopGrApDDxfC5b27EPe2q+lPMQ6zACSpnSpRiS5cgYsUnifvTpBoRKyxMGh++Hsq/RyQqPAaUitdFgDbGyKCLdtmdwju1mXRLErdHM52MIvJ/PcYm9f7teAZ6maTiZn3C6mJd1Yug6sf6S0LTaEK1UCfCigWBtxWzWMDhP7xzXyyWDG+jjQNMuOD89KcEbvXPEELFGiJa1M+WpxQmqwdRCf007vF+C9Y7tEyf/iEFPNzjics2nP/6Mjx4/Fl5K4PRkQTNrqZsm0wQnH9ckmjBDhXG09IVreTdh+Whv87r7Bde6dy64fuVXfoV/8A/+Ab/8y7/MZ599xm/8xm/w7/w7/06qdis5BA8ePNg55qOPPuLzzz8/es4u0avkdn19DXBLMO08jHs8kxSwNR1GO4vEu2634cHX71e2Hf3t3Qi6Y7DgQf9aHAdfgb8UIzvAZDLGGHn58hWr5Yq+78dFVUVilAi6srCrDLWNUXxGQW0Ns7ZhMZ9xenJC2wjPYK01VglUZBVUZhIZGCMqpH/Ttsy6UfLDspBTiYnDmLSPLnlZef9xPmbBtfuspiJq+qz2hQ5kFpADeV97ZywL/d75xm17YvKOsbuzLZthSdLkIKeQgi3ixLrSOULQ6KJ174c2j49FnopJM0ozCu3IpH4aUirDIEEjPkU0hpR8rgBDei9R3mlUOvlcRBg3dY1RWkq1OCeFOpN/tI4WW1XYyhIr6J2ws2xcx3azJnhHbSqaWS2Wf7rvfK9idU/ePxGtYrKiGlwVqJxjvVkLT6ST4KHaSmpGZS1apTzGlNqQx1GYwGy7L2T3laaZdfC317UylBJyFyfoYUSCLQY3cLNcspi1xBBwwXN+dko7a3GnHj9MSwnFvRNTFs59d0zp+xFe0wwnftH19Z0Lrr/5N/9m+fyX/tJf4ld+5Vf41re+xf/4P/6PpXDgm7bf/M3fvBXwAXmRPEKye8h0vkPK7ywI70Bo3UejOGQJ7prf4/Zjx7/LdnhBvE/LtV+z1esLEBKC5/vf/x4vX72k6/vESehTkEbSrpUWi2aqySlS1J6wqp8uFpyfnHBxdips7wnSsyisSuHtNtEqxQheIAlFRKdCkSYtbJkhw04+ayV5WzuJz6jyX8G3UMW6IC9sKbR9N8hnXOSndcTy92nZF9h9l/k92AnN1ORRlw+3RN09x22MKdE4w7k+VUXO2nQyd8UyHhk2cqBFbiUcfk9ZIaFLMSkFufBifp4gggkjb9EPg2j9TqwuHeSdVNoIS4mxWCV0RC5RL7VNg2lnuMT5mBUUZTSaSgpKNhUxQBurImBevXrJCgjDwMPHD1GkhHZAWVV8iYGAmkDd0XtsJQKxUZqWyPX1FX0XCUNPv1mDramMoWkqqm2fKj33yfeVLZTpEzz2vtTuqz6w5/5vd64Ek/eWkYwYI+uu48XLlyzrZarcLblz9UxquOU6cNbUyVIei0TGmNMjdpEvSkDHpK9TyZmun6NY37Z96eHwDx484Jd+6Zf44z/+Y/69f+/fkyTUy8sdq+vJkycHfWK5/fqv/zrf+c53yvfr62u+8Y1vAHn6BiI+eSNGv9ExqPBN2hfVDI5BlbfbIQrOnRNNtNv7CUV4ff9v+2YO768mf7u9zImbOtdgzz1gvV7y8tVzKUaoFO2sZb3dpIXclMVbyrU7oncFIqq0lCNpKilBctLWnMxqYcMAbIyJGSBSleAMhY4CTfkstFTJsy2fjU5+ryRsjFKpjHvSFJX0n+jTcw+J/Dbd/VhPT5J+Yyb6nVhHMAlaSLBLSiKWU+9Ff8rLKPRNQsWUAgEm77SoZHH3/U2twhj2FgpGiKZozREJg48xMXyE9BfTNXPIxiSPB1XuM6b+5guonKkcYgp+SfepxmdhzGhDSKK1l+Rj70p+V5UYOkxm3deGPKdRIri89/RuoDYGTaS2ls1qLdCytXTbDoJDxSb1WXp8ejJHq8C261jeXDNftEKSrLTQWLlADIa6bqVMytATh4HGaJwSFpJuu5HnYwwPT0/Aeyng6Hqy7lUbTV2ZVG8s4gPF4oo+Ujw7KplD05cV83O9/3o1PcPrjoowlpPxkeVmKxRc3vEv//iPubq+4urmhl/4hV/A+4gbPItFqradlBCBCtP5Jv2PyPtHx/J9HLvjcIlKpWTtt2/vnm9+ry2XS7773e/y8ccf81f/6l+lqip++7d/u/z+L/7Fv+AHP/gBv/qrv3r0HE3TcHZ2tvNX2o51NY14ya5m9kza2+2+i/vrWtx5mZPPU+F1ZJ9pv79I27/PY0JuX5MfYahdSKr87Vgeewvm9Dw6aVIKBjew2WxKwqsv5RA8PvjCSyjEuhkijGWRa6ylrWtmTZMonEyCBiUXKX82Sfik2ERy3awMA2YuPi1KY4KAYBcO3BXOKnP8ZMrvvMjHyKg9w+SF7rzjXRBvst/evjtW9t672B874/nH/bOQm76jUStO/Z3Anbt/qkBi8qx08fUVzsakCBzqS+7E/lgRK3T3e4nCTAIz+iC5ZINLgSjy3qtUsbqyRqwslTkjzY6SUWDW9I588inpdA8q/VZXqSRNSn6urVSjDt6zXW8Y+l58m6V/IsiDdwTvMEqqWc/qmrqSsBHvBvrtGoP43draogHvhHezsTZV1RbFbCSG1kXI7Ko505Ey3bpvVx0+6q6f9ltUuRClDFIfo6QX9APr7ZoXr17x408/5bPPP+fFi5dcX9+UytlM0IM8TmFc46ZTQlwAr4EEv4DweucW13/1X/1X/Pv//r/Pt771LT799FP+zt/5Oxhj+Ft/629xfn7Of/af/Wd85zvf4eHDh5ydnfG3//bf5ld/9VffODADJhpomUxTC2e0YLJg+yLW17EXsKcvHbSK4uS3KcBzHCqMB4Xgl9UORcS95gBZnKfPRIm1EgOpgJ1icBJa3LYtMQb6viMElwRWqtUVU+h8Wjy0FqFVWUvbNizaGSfzGbOmoansqJUbiSQsPipAizoIUWicVErqlcAMEVo56MKkoAthlZsEVkRKVGOMSLQhiI9FTefa7jPbDVqJO5NSPu76pw4qE+wKgUNjNW/bUSjSv5QuxFEHGo0iSFaXCpNFhiwUNEEn5SHdaEkri+KUl+16ksK3e91xHKT+EwvzRkzWWP4c0hjwYazaa7QoKxLhaVCoxBgi1wkxSoHIpIAQpUhpSKS/UgPNEBNXo0KxmM1YrjxD3+Odk+rUqYbberXCaM3Z4mSHxsq7Ae96gh+orcbWNTFGNj1CCt33bDZr5gvxq87bmmHdsd10DC7QtAuaWhKRY9yic0HRiVUs7ylw2HZQE+RisunAnreOVBNf9f7ilL6GhHQnSkpcCMS+R2nFq+srlusVgciHH3zA44tHzOdzrLWlKsEhf3iZB3E3PUOxK5/2lZy3be9ccP3oRz/ib/2tv8WLFy/44IMP+Lf/7X+b3/md3+GDDz4A4L/77/47tNb8R//Rf7STgPzWLSKaoA9EvRthKIIil3fLocCaoCZ5OF+gRbX7Uo7veBjmO7Ztf03b8R9w28p5t+3IeY+hF4pxISPJNBXxw8BqteTlqxe8evWS6+trVqt1CYG1tqKdz1mvVwmKExogq6BSinndcH56woMTKVV/vphJCQutsURMDJiosVaqC1cpujChexBkYhol1FDFr6VFKBpEaJnESad1XlQmVm+MENPCEj2jnZIHjzyUHQumPIvd7UpJ+RG9N+nHjzIGvHfEIDRBO6Hqe4qQWFl5sdh9bTkoIiQBphJOIwItj7MxZy6m6xjymJaT+alSSB6vAZRJ7/q2kI0EOXdSIkwaHzHEVKVX8roUiYW+IIxJqVOSFiFrd8AjjBNaC+ltpsRqK0vwkWgUs6aCMENr8XUGFxmGjn7YcnI6p22lqOZ6vWa73aIVPHr4gOcvX7C6Eaj57PQUa2uMNnRDX8LubV2jjZUS9rFCn55gFHSbNd16hXMe5T2zqsL5QECUNWs17axhNgxcLoVE2lqLGoZb8/vAlPqCuMvkROnDKESEtDrGiHOhjNEQodECb/abjj/50z/lxYtXPLx4wOAcX/v4E85OT5m1TbKmpgpvZtXQE+Qob5crZFSAyXFfpL1zwfWP/tE/uvP3tm35rd/6LX7rt37rC19rR7NI/94WAofCNN7RwHhdv3If7tjnkO8ra9T3u9ZheHD/+GPnnGpPdwVnqIkRESfHhrIYpgDxCYQE4Lzj008/5fr6mmHox0GuFbg8kOV/ldUJjhPLqzYCFc6bRshztRZrS5HgwbQoh5CvTg6fzozchZIpQU4ZFssWllY53H3nbgs+r9I8nEYAquK8ibJAJ3Z1vadR7z5TRIFh10rLP48Rh4ctsx1G7iIo2E143nufRUiVa4+WT0GWlAjW8k73+lIspHJtEYtZwOXnUq6RFa/0XiQKdXesC1O6SX3VBCTnK6QSJDp1LCp5C9nvqfI9TZ4JEfFTTSy7Ap3GmNIvhOG/rmv6vkfrQAgpFSHGwqCf/2wiY1YwWhlRxtF8NgMizg1c39zQBY8bBqKyNHUF2rK5WSNV26S/OTo057tN39lYCETdf016jWRT03fCOM6Kn20yR7NFpJNiE5LyMDjPcrUUgWvkWfT9Iy7Oz+V5GkNlzQHkII2zxJSSooBu9e2Ltq80VyEcXrRvbT+i4hywpF97nUMPfrzW+FuBMI/0rSwiR8+19/0AbLS/330F3v4+uxGMR86ftfeD58/Oc/mcTxSiJHR+9tlnLJdLnPNonRacQOL1G9+CMRoVIipIjak6EeW2dSVFIpUWjsEiuMbFTDgrfdL2R+gp+0OMmvq0cnLxuG1qHWVv2xjMPf1N5RCgdOd5n9vUYUUNSAvEjo9qIhyYCKtdwbUrvG6PwQNjvbzH29Z8yC94Ok7UeI87Z5kKVJWCXvKdKkXUuwJWhbAjvIhZkdntQxGKOldPlpyykI9nd4yZOBbcHKM8UxRrCCgFdVXRNDXO+5JyYbSWMeacwFxaS+XmVGk7V/xVqBSCr5BqBsIaUdmKzOyen5NWwjBhkpBcrzeo2ImfVinqZoapNC9uVuNzjmNagdZhd72J4zucKg+vbTHNmXz8kSk/3XxLgUrzNQstraRKdD5fBLbbjq7rGbZbZk1DcB4NzOdzmrrepXFKNyQfwxGey3fXvtKCK5LIPPdIG3egwiNC4ihG+wU0gqIFC15GVLcHVYgeSb28vbCM17/dtzj9HONEA/8ybcfbrcBBiDaa839ijNhU3j5ET99vub6+4vnz51xeXuLSApIFl/ce73wK+QahQFJSdsRYLs4f8PDBAy7OT5lVFhNiqlYLUYMyYn3VNmNNqRxIgjGstdhKYESrwRo7BmqkxcTm6LcchafzIpnYJTK8oXRhjUfJ8ZEEgaEKBGjU9BnlSMYx0TeGkTZJxQQF6tH6U2oMwReWjMRYHiMD7Agba20Rbvtj/y7lSqXjJ6Ze+mcM6ghIKYvpuMwh8Qq9e3w5P+I7CwJ3KoSqK7P/a62xVpdzGqPxXgo3RjcQ3SDJ5rMWjDDPD8NAjIGhd9JHo6lqW4RhXVtRe5TCaEsIkaaS6r6l1pgScqzKWBYnJ2gtkOHV1VWBLqOTAKAYwTmPMYbT01Mi0KUK3aQxZYyhNVLheLVag9YErXl+ecNJO6eqWx6cnfP8aknwXiopDw6i3I8EKoVUiZryTrKqdD/fA6Pweu1+8r9EmpJKlaR3qpITJQceMbHAymUi2+2WP/2TP+XVi5dsN2u+/e1vk8dztkinQRuji+bw2qS1lLP5Iu0rLbikxcmnI1I+HtZKD7U3FVx5oYiTgXRIoNzu1zFL8fDi80U1l12r6rhlNkF2jp4nL3CFnVvJ4q0QSMl7z2az4eWLF3z66Y/phw6IaXCPikYW0grRkK3WtHXNSdNwcf4gFYasC9yS4UGbfFU2Ec3GKKHVU4hQo9BRlRpSeftUYy+x2vJQUgmRMRrK5AW6JC7rZB2lQyAFbaiiVU8FxMjSkSG86e+TSD91+/POe0tCNgvEcaGQ8jQl5GfPIt6HgfP5SX0D8YNlMl0UAoml55PrMe2MHdJzKpZ1uZvkL4MSGKV2/Rpaaw7lXO4XJlST6TNVPnXMlrEWB6bevT+tk7WUCiHmCgRi2cn3tm3Le7q5ucENA13XpeAOs5Nfl63s3DIsarTBtJbFYoELAecDl2ZNSKVU6lqSkK0JVFYR3Ao/OHwurpr6rNPoF49fVrA52A7P/7uF13Ss3XKE5kc8eY3HzhSB9XZDJFJ/WvH48WPqumLWNOU6/3/y/ibUtm1LC0S/1n/GmHOttff5u/ecGzc0MkPTlyk8noJCIFhQDNCQJypWAqJgQQwQoiAWBEEFA0EQCxIiRFEErWQWomAhQLQQlSBQIRJSxIx43gyMm9577jln/6y15pxjjN57e4XWWu99jDnX2mvvczPJc+44zLPnmnPMMfrof621r7X2NfPhXXKN9HNg/f7/wXlc/1ceW00Tm7+faqq+CWI7X7zrQe5N5Sa8zoWVtPHy9du/5/DPU5/hTd8/VShfinyzAAOxJgF08KBtGijC+MzMmOYJr29v8cXnn1cmBiKg5LZJmQ9FEo09PMSK2o0jnl1fYT9IWRKUXCMCK9zntBoxbNyV1JQa40SD+LqNGzYGncOaBVqkKrx6WMq2L1pdpwFnqH1gz/jQFkDthFV/NoaM1qbteKyCOjookdEpGiuYUceP2ta7EiLeiZUEljAzHVbSCD5RFlwNpjEhWJ++m8p9m50jlA1o0GvkVZg+skFTtw763rM5bP3oqItY1M+ddwgh1ITqlioggksgQEJOCUOMKCkhpUWsRLKAmDVY3BQZp/LYIcSAq/0e05IwTguC9wJBpoQYpUSI1U7jvghjQ+OqClVMrrReuNw573oww3IQ+22i38cYnWzbCDOG1BLj0wlfvHiBV69eScTvfr/yLTahdT7/twrVl/V1fQ0EVy+k+s95c9769Tb3uCS0nmion7XnTW1527atJiI3P9cPA/p86J79dVlXXM4ZJSUAGY4YyzLj7vY1XnzxAkMI4LxgzhlJueiMN7CwFPEbQoQHEJ3HGCJurvbYDQGDc0DJGDRiLJBEBUbvFKoUx7rBfc7ykMg4CNdBE2dCAV0QBrB6b0crvLIOXtYRVQtFo1brgLhVXzFzR4HUePsk/N+tFrOVkjDrCgZTypcXx0KEka9kwTYmUppYLQXTcNWKBKtvUC7WCUS95kVlh1FDtW1O2/nQTT5E9ByiW2vf+tmTA3kCx/XayDlXNo5e4ImFBdmE2QSmhe0zoGMdo0dKhJxZIUqB+HLKgJcxHILH9X6HkhYc04J5ngBHCHFALqmOg/MOARGuiGBKbGVmPG6ePcOUEu6PR+x3O9xNC1LKuH7/BqIPFH0GFYG5U6SsQ6oljE3Qxkb6n/2ln1ywpPrj0rxXvU2EOZqF+5AFxlAG/5zx4uVL/Kf//J/x+u4WIXg8f/5cLNG6fqgpZ67xam6F1ZdFkL7Sgmt7bIXBWgu4+IOnS58n3X/116pd/ef174vC9e2so9X1LrZpvXleev/QsYpA6p+jn4QEhXuExsmRFEa0MiZ3d6+xLAuWJdXSGHVBE2E3jAjBIzoppT5qJGEgrVALlmrHTisSk5Q48V7yvlLO6jcsWhLDeAjRkmA3oE8TC1pq5NIksD0BNh4yNj2pbrWgeB0taBfYWq5NhKBaAwaVrRe2tssFuU67WxUw1vlmtZFzQnfUwZX9ehDfCsOCAKzt4s/bQjirO64/V6v0ErO3neM13LpnAN+2qVrqEAFWvG8WlX7u4FcwYpt/jFSyPn+/veom24VeC+GzKArLUpDSoj5WgfT2+z2YJfow5Ax4BqkvjiFJt0bYy2CUeUZh1sKWI/b7K1xdT3j2fMb08hbLtIgvS/tvmU9wIKUbU5ISoAvwKTBqaSuzpCrQZgRQf7H56EHh9eDK3nzBm495cyKrC8A7ST959eoVgve4udrj9/2+34fduEPwXlINvIezemobCHjVhB9li0uOXlidCy394/xXT5T47+LzutSGrRA13P7c6roEk7zd/ft29xbYu0yWfmOgCtesW6hGwQr+koikCcsyr3nwWkNVeInz3EMCMyz8PZrVROLTMqaLoAnKghIWFGMPh4a7O6oCq1YcBkC0hc30X9UQCb0PbA0RPtg3/YVWY0hA7RN0ndULnfUcPJ8zBE8dn+Gl+Wrtda5ZZN31toKDgS7nTi0Zjayr/aGJ1oobal7u2rIzqEu1rNVzmE+vvjexa0JPr7b9jdEJre7TwebVL1qfU5J3ZT661fUMUpa5aOvJ9gfNM4MEE8UYMQxRvtf2ifDHygolQHPrqFqFIUbEGLHf7XG1nzAcTjgtGSklWEHUopGPRjkGQg3uqc/fvbB5j0vTa3ucCa+n7R/1ZxcOg0ft5jZmRIRlWXA4HPDixQucTkclDxiUXcMB9DTGoi9zfLUFV104GVK+/FwneQiie+tb6b9PtoMu3KLH9qUdfXJ0dxDL4NO5Vvvw/dYw4da6eig446kCrW5udTdGLVNPpM5+76XAKwru7u5wmqYarCF5HWW9SAuDlwQgwHmHm/0e7z+7wYfvPcfVEKUYJAmvoFW1HnyAMXYXLUop1k0HEzrRXS0/i7rNt98eiDzMEiOynC6vsFSDN6oQ21gmtX+x3Yhbgrvu1+f92V2rWmSb6FjnY/tB6avTri6kcCLqhmrXqFV37VAqpGp/kgj5Go/QCySy52ghBKvnZidJ/53lZc9UtIyIMb3XPrS5UzLMF4ruewndacwdlhqQc67zuDLrZ9jZsGRqs0CFHJjq2DNKLVzqvAh6l4EYPMoQAB71c4AcK9SYkbNFgppiINaX8SWmXBDCgJtnz3E3ZVwdJpyWgsM8YxgCdmUEvb6Fme/UdUHzc6GmBBrZYe3rzuIxid/E+aWjcQPiwnl04YvLtlo/ngBBuRx1fsUQsKQFX3zxOV69eqkNu4b38exi2/UCnCNj73J8tQXX6hCi3d4Cq0LrgV/0WsSXPZq/qWk9l4SlWVn97+TfNw/o9nePnf8UKPBdjqq7rtqi3+jiBDO+//3v4/WrV0gpIeelOfkB7IZRiux5D8dFSXUJz6+u8Gx/hatxB8dC4SQbEQsprhO/FTijcEEuC0g1WmF/t3B2PkvkbVYUVtaYCDn7TSO4JTThBahl0l2z9uvGOX1+Dq2UhwqFdWS6lxZ16+32Xb2mCSpq1uJqjHrh1/mItsLS3nvfKtziQpiy+Vu2fgqnPFpb2PBsznf3MlizF3jGlm9lVSp0qhyX1k8tEKD0N5NaXrBzfC3H0fv62DHIAYE8wA7suN5XogCjchwyovdqyWYsi0DRyFQtMADIXDBNk9yXCPv9HldXVziljCkfkOcJeUkIzoFzAlSIWz6uCaxqNYMbNF1Hn3E+um9rV739bx3W88VRU4iXXMBYAGL4A+HTT38AZkYIAfu9g0TOukfnwBn68g7H10ZwrRf7RjC8hXRngwfsKva3/Z6ozt9eMLJuMm3AHrzBmbB57PxLcOdWaDw0QbZ/PyTMniLkelonrM7vIE9I/k/OC16/foXj8VitLdv4XL8R66IPziN6YR6IwQvngGA19WxHkpPjCFopV7idiJR3UHOp7B7Gsl41ftsg7L1r5xN49V17tm6z3Qgd+1x0lXPh0q5jU4j60y6ctxZu1kMPHp1QXI1Tf0pvYW3abYcjt9kcz/0orGNV9RNDkKoZYHRSG62ebZcWzkHa9Nt2Xm6fmKDgQ71cW+PNB6Tzz95tFASxYNbMJ4zOwvbCcGHs52bjSPqFx5KyZW63deIIBk8WlgRqb+TAUQpHSn6poAGFW/qHI2Uo5F4JRG1ne6pe2eJV261zyH77wNHPItFxCOarfYrVZf1GYgrLZ96DNKVlXhbc3t3i+uYKy7JoGoIUkE0pwYcM1ykiq3Z16NO7HF9pwXVmcTxgtdhS5Cd01nrirP/Vi1ShZQuwleHup8BamNT2btp+6Xm2bdz+7rH+eAgaBN5sfT1mfVob6mZd33Pr91KQS8I0HfHy5UvcH+5rKXTbSLwu+JwzPBx8kBD4cRiwGwZE56RMSLdCqTB8CAgK/2SDHQtXX4L3WvMKxh6vBeBtwaLlVFmoch8qTd0zNcsGorR0wqW3lABoJeH2220/M7c2NN3nch+vfq+CqQFH55sLUd9NuuUqpAhra9fu/h6FDZ5zgOa76VDWOdQfRb+3Yp/1+arYQLtA3VVrJ8jbvlp0F0RSumrLrZ91HLibXyYIATDbtayHLHim/d57sewsLB3QSEudq85JTTaufJVO13aBc6G1s5SqrBKERzIEj1KAZRGyaHJAiB7DIH4vEVyKABXJ0vLOIfsCr94B1n7tFeBmf0k39uHmD6f01h+fHRYF+/jKf+CoSh5JoU4iDENASQuYWUpUvX6Nm2fPNABrATPBe1UoUwI5V6HeWpeuqorvLrm+0oKrP0zjB4BCUrH0IoTWQ3Vms2Njadlm9IaN/sF2dBbUVnitNJ0L59pzvMlCbILvS6gtb3kwsyRoKlEqa/9ZTtWyLJinCa9evMDv/u7v4NWLF+CUhaS0yIbhld/MelY45CL2uwH7QTgJvQOGGDCAEVg2SiHDVQ1b60YRxE/hvUdwDlQKnGM4T43su8qfPmKNKixY5VMPI1bGDKpzoOZ1UYOtAFQf0mNKwdpiuwwRbn7RXt0pRZ/ZLIn+ewvE2MIwPWxWrUg1n6X8THvG1f87a2hr0a8sgP5zbi13IHTetbP+OFsX3fVKWlDI/GWlPqYxkxRe+9W8c43NxKxw5SdkbpDgNsLRxoGZheGiC74QWjAT/Bqw4hzICbO8D4zjNCOVgtM8I2uIUQwDiA54/vw5KEQcl4xhiMggKXdGBMqSPpEYyrOpY2V2pDkddXIya+QpW8XBy6v+omJj02SDAkg/rH93pqTr4UDwWh7GOSVl1nlgLCRffPEFvvGNj+u6CCEIa41GuvbMGsIdxFvP/lsdXwvB1QuiLTS4tWAMfjizscV+XY++qVn274X7mmbU36fXjfqFb0JKkhBVo94IOFJYpbuLKt8VWJCNe1U0s7EwPwQVbq2uFTxjG9qF45LV2FpmEAwr3RJwOh7wvf/23/DF51/geDjoxuFX8BcpzZFN7BgDxmEQpvcgn1ntK5D4HDyJVVA4o+Sii0iDMaDh0wb/QZgIaoBEba0UhJTIQ7NYuGnTrr2cRq+xRmvJ/t5r9+eb4MNWbntt+1GYGi6MiY1HJ1iqVWXf64ZmvxWYts0doYWSB+L2Q4EQO2uoP7ZCxQSVcypEmKvgqE9rF7cloL8TTb3dYysAq3FmG6oWoSzGzMGN/JXAYNLn1SjSDttA5TRiS5RmBG+UWV1gkAlEVcKqoHKuWl2FWU1MLfypxTTBSshr0CRLGP3pNCOTw2maMC0LQoigJQNETbFxjb1FwAESdnt9VL2LbkOWOCFPXjuqe2Ybv542qveRtZlolniby21urq91tgPU/RTV+vLk4IJWMU8LlmnG/d0dXrx4iWmatGJy0JQUfREUCeiV8y+ncn/lBdd2I13Bat2rP6mXA20xPaD9dpbY+qP2m2bqr9D2C0KrE15s69mSKjvBtXqmApARlvZVks9fW/l6CTrcarjn/i7rufPv6kZfP6gfgpVx/Hg44L/9n/8nXr98idPpVDcFqV8h5ztC9UvF4BGjWF0+COQXrFCQtjVoJCFgUXMFRKJFm9ASjbxFolXY1hQS7Rur+VWVgdLGsTey6qKGQcEd52DdWNbH5T5uyokoIc0P2jTgygzXxsFuji4go41M/dfuV0p7AWYF++pX6qFegy5t/mOj7NTzO0FjxlnpPjPhqT9o7dOPnCPtXsJ2DawVmTZXnXOtYJQOGmufOy4oGoVrgaJymjG2yPUkqVaEoH1fOIM25Vicl/4xKNs5B/IeJZWauN33E5eCJWnUJskpKSVM84yZgeNpwrwkyfliIOeClFOz0iHC3GlNMbOgegyQwWKFqcJjRMXgBiGuZ4L2dTdvViNZoWHuptdWrNVR7xS9bj8tAJGsOUcEFyNyJhFcS8L93QFfhBe4v7+HIyds8rrOJG2FZdxYCbarUH530fWVF1x2bAWUdbr91S/CH8bdmNfO9vNT3u5+Wy33TDtlPPD9+qkvCSv73Zt8XE9pY9vQG50NAYLrl4z7wx3+y3d+G8u8gJX4tg/SJWo1tIbgMYwBMQTRdjuB4SDsGtFZVB4qdY5VufWrx2kwWhUIrjOkO80+q8WqckH49R5K4iRJhG74SndBtDnwsG+wFQtcOajfMDbbPYYAYcWwraVuyqpYufpEG2hyo1yZDwxN5rQ2nLff/EiWi/eYhdZ/Rsql6BTbsvD4/lznugECmjZZe0AVDm5WlrHUb5VRC3awGmTgUsmUweZnQrVQDU7sIyJLFqFhwRfSuCyCqIgQmqdJ4D4fsKRS9Z772zssKlimacKLF1/g1d09GITr62vEwjilDL4/YkmMXKRWmVn+lgHDLFCaTHgCnIPTrrCKcE1k8YUZe/l4bCeqfke9qnF9isxhzPOC6B0oBMAHeHIYhh2udzu8evkSx+MRKSV8+umnCErZBq2/VuegCzD/OINrNfR3Pb42gmt1dNr6OYa+FmirLy5YJ6uFqYtghf8DKxP48j27z/v78/rcS8L1TYPLfPl+2w3rkjDbXGnzty4Mapthg0RVi1PYxiTAPM+4vb3FD37wA4AlvFzgHRWoIMCtN9am0XfUMLAF1KKamEULLrkItZFJnb7F1L8nbM+wvpJxKyjchb5jHQixusaZxQOdB5bn1Hqs9jXQbYqmrbpqAa3HpN+wL49PHTd97vNZoXyRfbmR7l7be26n1bl1bVukWfIdiTB3kXvaF1VRY1MYWn8xC2zbgnRMuJEtKR2TjSJWFbTGgdlbBcXWuSpPIPETSVFKapGwRca73QMt4rIT7gZbMhqLerMusZqzOSUss/Ab7nZXcPdH5GnGcV5we3eUUHlmxCECmRFyQWCGCw5UWsQjdI478sjZrGZV9qx/SWcny6a/nSGP7RCrveHC1DI1oEHT698SoIEtJMVAU0L0kne5GyIOMQqVFjNevniJ95+/h+fPnqul1lnYtldirXy/6/G1FFxv2Orl/xuBgR72wFpo1YnNXDcw9Eb72bWwGqT1550VdaEt/d/rzeShwV5bZZegwrMeuGCNXbrfJYtiyaXWkDJrC7qgpmnG4f4eL1++7K7ZCWTd/0nZLewwWKFRNLV7yibYPXu3kbQx6MPZz3tnS5/DurHZRtX+pTNl4pKV1Ma2PV9tU39+7WtUa3IlDLtWmnCw64JZNPv+Yhc2l1VD0ISWPZc1eD3efd/1R1NWrN12aSJXo/9w8Rn6dp7/yX279Iu2rDpfSv2hQmPdJrcaFyfRpk2npNo21r8dUDdPIYBWCJloXcYD3TUcqWXPKhOtSKkczjmULNbjkhIApz4dh5QzpmnC/b1URgbEz5iVJDp4rgnyWWuKkHaEkB6vCajRKUzVp9d03otdvl3B/V8rGbaylFVJIVFKt+4A38PN2p+OOiZ+BrgU3L5+jePxWOmwzF1S2/KAYv8ux9dScH3Z44cBq4EvaxTbhXgJIgT6Taz5xS5f4/yajz3Dl4EQDe8n9Z/YzsYlY1lm3N6+xqtXr/D69WvM84xStrFDsjgk2VeCM2o1Ve8666eDLIjUB7CFqUz7ZjiN/2qbti0yqEb7yPNgrXWbhfBwJ3SbMTOEtYHOvrykZKxgzDcoDv3GUWFBZx9ol2zv4ba+WO516YcfiRTaIwDwEFjOhNZacD91A3pontdnY16xehQtS1P9XOBajFCiJbtaZiqkDRplSJQoyGaF9BNBoEMu4lMSQmFtu9PP+n7Q/wQWbZ+nlCRs3TnEOKJgQZ5nzPOCDEIWSVmpkG5vb0FxQPQRMze6Ku89hhhqIxuZsDGtcBUawcta6NK0oc4mZC54ZIZeHo9Hv2O1YKHrSeBKAglMGdwZc4sx4lxdXeFERxwPR3z66af46KOP8MEHH2C32yEO8Wxtlc7y+jLHV15wPWXTfWh9mWb7tht5tdBsGdB6EzEI8ZIweVPDvow2YtOeiCxocfWtWVDcWm66FtQNrJ+dnyfl3i1EWTdsB81xkXOOxxNmLZYniz8rht/Csd0KKoPkvQxBE0AbVVLbgmT7MVaOwE65C9e1rnokrb5MYbUNSsfCKbdfg7vkxwJVrpOAq1BhVoHdldJgbrRXAOAkQpAhTWZzRBs8ClFqzZIBKZyo1pGE+bva76TKAZMEszTI0q1zqQjoa19tZ4VZYmtkwL7Tf7Wt7LSfutF3UEhVn7kJVWoXo+YT2Vqe/YDXmlzVdGARWFU5E4YLNZvWVlp/KQYYGl0KIWNmtfyNvZ5g5MIiwPpEYJRm9esMQ84JJWW1kDwsaKYUYX1PzJraUZR1PuJ4OOLueETKCeM44vnz5zjNGQsDc5ZQ+XE3IrCgFUQn2Ny21BKGzT3NLSOpgMBgcC5SbLN/dlhMcVvibxVaTh2M2llw2y3D3qeUlI+wwcUlCyfjOI7IOeF0OoJRcJpOuLu7w3vvvYdcSke0K3PEUavJ9hBP4lOOr7zg+r/yOPMV6Y7T8H8VXoyVcOohrfPPO4HWff6ogJNPHzhnCwisJ3TbZtZtbh8bHgQYpMTdeVVf103BNsBSWiK29dPhcI/T6XTWctvIRDAZY4Xc2nta0TVpB+m+p/1ILfDCkeWF1P1ez2vttEWyflbWSC0TImtYrbfWtpvlJcupfra1AlWTqdDXGXZjMGU3b2xo9HoM1BqXZjOx3rcJi9qxQNfm87mztpj6oz1CF+nF59dYsabQ+fUYIthX311oRdlAkPWLs+l+Pv/7ZzPoD2ysGICROzQIkNXadsjMmulbtH+ddhu127MEWvRRk9YSZkk0X5YFlLmOhdPgjnmaUBwJ4S457HZH5HkBZwkmkhwoS7o11UZSDBgOtevIfLpK0MsM6iMsL/RpHf8Llsyqn9/iaKqcXIRrP3fKp35u+XIxSg20vjCn0XcVZU1Zratuz3yX40dEcL3ZEXjJz7TaCDqh1U5lu3r9zZmg6t5z1WTX3/f33Aqmh6DC9l0nPC5ch2xz2zzXped86F+5Qtv0S1HtNZnGK4v4Bz/4AV6+eAEuUnnWVCpZ6NzVynKrMPZK0cRoDmhG51QXclRHgPMe3ouAsd/LZpTl/JrYyyBSzrnNkpbF19cK6uii7DvVtut28IAV7rprtp5u97Pnq/1d52J3ptYSk65WIWJ9z93uQ/Z5szBNwNlz2JjW+7P1TzeOZIUpWwBJVaQy2+3XsGZ/zQuWUCmNcNfEQW9dF92AGazxPPZbEeI2Zr3Sd+l+thn2n9tGSqrFNz8pgZwHKySHwnUu2lhX5VH/LdzooZgZmQsKoZYyyWWG8xExDpU5P+UMRsCwGxEGwvX1hPv5JVJKWJZFIvF8wDgaH6KMS/Ri4Zul6bSMShwinAtIuSAja3+s55T1c1UebK09sM31+kHVCS+fWm9gyAt0fTvltAxBaK28VqAehgHPnj3D69evK1yaUsKSJDUgxigRlNz82I+19SnH10dwdcroQ8dTJLyZtQ/BhaYxbreoNQzzuO/p/Nw3C9bt+Zd+y1AtlFw3KUwTt/em4T3cWVvhBXtcvab3Do4dUlnULyX1uE6nE+7u7/Hq9euuX0otoQ7YBosaBjzGiDEGBGUkcGCpw+Vtg9FzNZnRUxN42/oQdfMpqDWhalKyWWsbC6tPWgYAIteJVBP+bSPrw6cJqNFp6w6U6DZstExWy1CSTg2S7B+BW8c4OY+sA+A0HVYkFasGb1YyacQia+RenRPUrAa7BwGqKDA8EUppQpdXQTNtHiQuknjMwvrgNFzcIGaGwX9scvhsnhdurPCcLT9xfbS8JYZEY3IVohVyAoNT1iqhXq0VWl/D5kdHvg1Irp+ckVcbN0GjMiE+pKJJ/bk0ZhTvPaZ5AucisJ8PGMcR7z1/jmMuyMqiDgDeed3gA5Z5Bg8y170npYsqYHLgJSEbsTGL5UQAgvcgR8gchKi6NOvbdbCwzfmHjo5mcDUWb3v089h7jxgighe/nvcOu90Or169wrzMmOajlhtaw4HGSyoK05eQWvgaCa43yKxHD7FWzq+w2rg7rdc0pAYZtvO7X1+83uVzHz7P/m6a+iO/7zTHbYJ0r+WIAr3elC9d85Jwk5Bm3bR0MynKTHDz7Bn2+73kw1zQ0FtODYOVRscWt/dqOpgFoYS68jtuofGmoNjp7WdrVK67f7Ws0BKUK9BiQqy3ALSfDIID2gbR95vBJ2j7TrOmSC0t2miYqmFboINdp40bNOrSoZgQAwmfXn14vRtjtaFcGjvzJ/RWCoDGzmLWeiecu15882f9rdfL4c0KmVpgpszIZwSg84F1z2P8hNZ30tO8GiP5t1kfpsxVC1CVTmmbBRyoMqVWfqsr1R5KqiGL8pVTxpwyhvEK5BxCHEBlQk5ZCqZ2Cc3eeyx5QU4ZOSWAoQn4Tsh2ibSUi9SfYyIEhQpRUCmTRBCgzjlLq8hlLZa2U+FtxMN2KK0PCSzzxTn4IJBgdoQYhor0OOew3+9BJD4x2x/JWchLf+1LK/btjq+N4Hrq8abF1G/sZ1ChnkDd5AewWmSXrr2652Zhv6ltl3730HPBICRe3eTybKbNb/WoujdtzlUrsvTPjxbxxSXhW598Cx99+BGc8w2WUE218pWVrBFLDCBUweWsfD2akPNOamp50vIjTlOTSKwBs4tq4EO1pFDNDOImuCyx0h6xhWi7aiFU7R4X8mW68TFozva2frOUzyyYQoUFA1xhIWi+FS7MMW2T9Zdp19SE4EUFg2hDFfawxe+cE0tiqwjRZuqgRZI1AUkrYXemANnUWd23CVmDD8US7+admgZs3aB92QfDEJqF2/srLx1FmTRM4ZN5SI2kQoW5FeF00PwvRQjafNR6ZETwPoLIIaUFx3kCuQiGVPzm0wnzPOM0zVhy0txhHUNmlJQxnyZNIVHrzjZ9CIqRgwjGGLxafw7BCQ9nUX5QeebuutR8UKtZ0YERl6yuVSej2w7OJ73MBFWAYoyYJnmOUaMGbY48fy75WyK4jN7Kd8piu3c/F97l+EoLrhUGf0F6PwaHAbbZq8bGDf/e+oH05HMBgLXQsmuWUuoGcAYNYr2JbElRHxasD8OObWEzyJwehtdQ02+kT+rl2nP1h5kwzJ2Ao/bbBwRvKQUffPAhPv74E3z88cf4zquXmjkP7Pf7ylSObBWLCdEHaWcp6vNirf3TPRMZnGZOasvqp7W1ZRaMMctb5OFDsfAqIGQzKFXIFB0jIeiR5z2ztKol1qwnUic7l2KEB0oobF3crFMRohq1xhAhogs5xqgwIYF8EM3a9dZTYxS3jbyW7LD1sBmfddvVErD2dPOvzZMWPCQPyCBPIF4zX7RJrsS3zeTp5lWLMnQq1ZgcGIxswpbFqc/2cFbXTX/vdSyLKpRMhGFPKvhYCldWhaQJSqATjkQAPKyRbcN1Nh2kX4hAJasyxuiD7pkZ3gcQzViWBZ+/eIH9zQ12V1cYpgg3L1XAMWYUiD/IO6/TvGjtM5MHBcEDjjzCMEgJFRDGccRpXpA0MjcEh8KuQrVeuTRzyoAy0JsAtIcpq8HYzPwHFJ3VOeiiWEuu88FqtxEJTLjf7wEVVtI/QnptCdgANAqzv/+b9+Y3HV9pwfVlDlv4Tz1XzTA0f5FZW7223U+SB6ypzUa4+u4t23/+obTFhNcWAqL+RDsuwUx2ygovoKqVr9CqTnBK8IVMXO6uUctr2PWdlSLxKyupn8yEvrBjKxBp0BCRUdN0wquaO23h9aH4F/uxe1SzIJgZcBtWjE5Jcl14u1lpdk+TphIMYAKxMvqaUdXur8oFFFapVpeNTX9uHXPbSlEtm207V+O5sZpqiZOy6XMiUAdlwtoABjqYro0R6pyzuQCgFqO0OmwwK1jbW+df/x4K3ekmzMyrdbYeA8DsCK735e59+53NWdVqOova1bHnGlFIlblCfEoF3gX9DK08h/fwPmCak1gfECUjhIgQC9ySTDzW+Wfj5MkBXkc4ZxSNSPLkEEPQsdf8RBJIkR3BuyLsIyaHbbyc5FoRaX5X1we9nrnVV01Rr9dCf8L5d8yStzXPcz1xWaCkug7DMGCe5zpGKSUUpfhy3tUbmBJXx+Ydjx9ZwbU9bPPqN6IVDGLaK2zhnE2F1W8Y5xaRaC18du7Z35dl0qMD3VsoNnl7IbsVuJd8Gisht3lvGlf/6E0Yn7eLy/o+pgUTWeFHyd3yzgRB22DBmjMGgxucWmKA2UTir4JqmrLY+wi/Cg+69WZ70Zre9OO2P883924j7qURA2TEssySD0RetE1HjYqPWpyjwZWor9bJ/cbT3e2s/Wfzgrqougtt179QYczV91j9DSeJr30xQNrMfdbQdJsLrM/flKXmQ5Z+LdXStZyrqkL0ybUX5lVbm5s5vFIIt+sK1RJrioyEyQvcrTXemDRqnpGVh5CiE59s9X1pyZQ4AJOEfi85I149g48RQXO1rIccKdExiwUnc9nBk6ynTFksfCLEEGEBLg6QCFlHAApydtUfZv0glrPuKI7AWTgQV7K6/isjkE3JqKJ1LbjayFpgRevjUgrmeUYIAWDCwvK33+8QY5QISjQhJwnWStFmORX0lJT4Nx9fa8H1po3+ooTofvcUqNHG9qKQurShb767aH3h/Bxszr/8aqHSVuZk/f483P1S+7a+i9q+bteoGhmh+hvmZcJxOuJwOFSmA0c9qwUDBRiCxzhE7MaIIUYt+ggQa0g7kWiigeC84P+dd0JvbAvONlM5aqFHD31dfsbVODwwzv1G3/+77jeGZO22zcRB0owKa9KydyqgvP2i0q0TAbBS8b11pgEaIg/lSfvii+jHSIZEmULanAQ3hg0bN/MfVnb11TxToFTXBjmI9Q5IAvrm2VnMlCqQqTR4sSlwtlHZvC6VrLdNeytTcklxa+sBWJPk9mOYOzirdHCBJCA3/paqJOiVhfxXSV9BKrwK5mVGSkoMDI/MRZk+ZByGYUAcZpzmBafDAQM8EALiMKg/VgOCGBjHEW5ZME2zFEQNEc55+NMRy6IBHTkjKFKxpIQQAwI5jSxNyNnBJ0LOAp1G70GBkFl+47zHaZ6wpIyl5MoWwwwkQNZe17c2Jr7raRNgUq9OoXaIUA86b0II2O12IDDSMuN4vK/jZ74tZsarV69wff0McRxxc/OsjmNNmNBI2Xc9vtaC603HSjM0HjMA1DnRtxu3WWVtdTWI4k2CRk+/aFk9JGTfaE6vBF8TYFUbroLsXBC9yfrYniO6X+f/2RyiZSXkklAtV1O07C3Jhuw14soSkGv9K22bLByb2lxfK6iN7Dv7cw2HbS0tu1RvWZxZHG79+4esmx4Ws+XIYHXgq0ufWULinau1lppPxcxFUuFAK2FUhQpMO3aruXD+nrAVtOKrIyn813cZUd24tsdqvho8iBb8shIgLELLLCsywdoJlZVtVizMPCuMKNGDlX2FDQLr2oNmeJ31/arha4uricHz1AB7FpPwbDe2IS2lRgimItWQCwMpSbRhYRlHR14hPJaSHuMOrNa0zO2CWTdzG5MqHIgwRKn6XQpjnqdahoZUMBLJvEmpVBjeOa5CMYSgpV7kiCGCWaIe5cl0Lpv/UdeTIUZGv0SbF4CqbDodV7AId4EKJXna6TPlnBs/IUv75nlGsfJDIUjFbV28Vcl6w9b22PE1E1yXN+E37f1ArxnK+Vu4EB1c2M/ytrFsr/ewNbV933//xnZur3fhkbdQnzT/PALs0v1WgvqBz8+ftxfSa05Bah1Z/7WNw6A8K7NutgWo8RRWNo3VPZtQbsX+mtDpkxwNFukhE21ZB/udv7YRT5eEhig8BiHJ31rxSS2lthNLfhWawKo7dE+/w7XKsRRErHvrxblkzyEC4lxwEdGD89PWitkerT+t21T5Ygi8Q64KIgYUHuyEFiwSk6oVXkl5TfqwCKnCBhGKfdR4KHvFhGv7xBq352h+KiKL5SA9oSusSQ10k7VG9fcWqVlnQr0prQRgYanG7Eh+n4sFcqGDHEWYTKeD5Ih52VJDCAiFgSmtBHO9R9GyPcOAIQtVkswnZaIIEVbUcvKpReYSak25GCNQMkgjDr338CXXrar2U7YxfZi3c9XX/d9kY4vav0tahGc0RGH/KAXLsuDq6qrOy5RSZdchEjo3KERbyuUZ+TbH10ZwdQjAxeNNEB5M+3iSBQK04T0XPm2Sts/e1K6nnHv5N9vn2oTxd8elz7dW11botd+wqevoFYT+WQmSeCmZ/8ampuXtSac/i79AkEChx/VOEho9L/AgRHII0SF4DQtmsYJNh3ZserIlkXK1ZIga60Xfn7a5kusFZrOqHrLU1pr8VoDZfts+03QX2fg05y1nRs4MDpYAaxewZGR5sgyAdLE7MJxvwqe3mtf9rlRCnbAmcxrCtPwLc6omvXJ37U7hMKiN1gJRZE3RaNBOqTPZ0f5U/U5EXe2nUtrvLV+rSFJzHai+82GBCjp3XP+sBMeMTIzCzYfLLDBtYUBKGOpFHcCSGl77SYBEiR4sRVKVnXMIUays0zILDAkSa6tkgKT4qckhKyUzzzMKEkIIGInAzuM0Z9wfD5jnGXnJiGFQn5oEcMQQQdcOc1owzxpGrhaX914YO7SW2TzP6AM3hmFAmSdkFRwhtET+ZBaWvoo2tumR5czS6q0smfhS2iWXIghJCGIJOq1eHqRgZCkJ07SglOsKgy7LgpSWGlmMWt8Mq3571+MrLbj6BVU3kc3xJqEBgzRWmzWvrtUHZ6DfyGFL68KmhgcEEl9u05uF2yOf0/nnDx1b4fUmQb36LfS5oCUiqmNdjnlZcJomHI9HDdNu4bNiSeggUbO4vNdwbqvZpdGGonG2a1vy8WqDZdksQRqO7XwnxDVZGgTPqIwQb1IMVrDwhbHazrliWrjOEQY0uktL3JcCUFlFDxrxqz0E64O6zT2cM9+YtGOV00SmBbcxrYX7VN2Wdp4n8wIiIM0SEIb7cyXKeCEfsrZNC78EW3YfoNbTUj+UWJZZrXP7vAvL79ZYj3ywzh3m9Tj0ULYjIGcTeFAb0PpDFIeqqMCs35WWCcCYLwCXE1ISZauQ0Po6L2HzPgSkacbxeFKGjAUZGbvhCss81fQGKbIKECdwbadTmFjuN44jvA9ye83xk2haj/2wwzIvODpX53XhLqdKeQEpxgoh5rlBlKIsyRqEWoy1vyBKiiEcTYj1SozcMy0LTqUgDgGOBBLf7QYAA9D5AInEj3l7e4v9/hoffnhCHEZN4KbV2n/X4ystuM6Py5vSQ4Ki37L75Wbje/Z73ZxWUNuFff8Mzuu09UtC7rF29i28/H13bW5/b62mS9c/t6zqI9bHvdiSqtmur2cEm8fjUSan7yG38w1RwuTbYhRfka+chlQjwfrAgAaOM9BY0glYk8U2IcdMLb9t9Rwq5LCeOb2Sse2rtU9MN8beIqFmJ6ByBwLk3foaXT/bYm4Gbcs/I3vO7t/213pQ+k/Ino+sD9bzznOzCrcKSP/MvVBgtZZNyahCa6Ww1QoYrV31ZVlyUEGm9zb4UK/QLse1Q6siaEuuU1Dss354+x6yz92FCU16G7v+SngrtAVO1RorJD5DqmtGoDMXB7XyVLUr7TreB0h6nkfOBeQYcFI1PCeJNnRO/L0MmytmCbKSULuuLpb8z/62DiN9RoEV8xo2ZkUp9Fn7PjMLeRscU6c0NZ9lLgWxjpOcaKw0uWRIcrT4vY5HCdSa5xk+RICMHPvdLS07vtKC6xLs9xAc+BhUaD6CS9cH0Gm3F/K4NhvGSkg9Vbv/kkcPG1Zz/Ex7fdP7Xmi1Jb9GzdoW2gSDnV8wzRPu7+/w6tUrRLiajGiQEum9hE16QPQDAPGFpFTgqYAC2u841U3VeYF4hAtO7q96JAx7KJx1gQKoLOfq5+kEuPSP/GvsCQxLlFxrgTXaD81KXF2DTBA1wSX9SSB4/Y0HvFAGNShShVcpIOfbtXUnMeuKgNZ/3QZlwCnLQ3QW1vroBdPK0tZhuwgp1/8Z2oAa8m5VqOv87tZU9auVUotgmoCqkYRdwjMrMW+1xDoLq/axWkt1leWi/rNOWBr0yDbOnfIFtJSD7pm3wto25axFInNmFOUdLPr5rJGHFBip7gUtmi7njMzANE2Y51mCO1JCDAHBC0P8iy9egbkgOI/9fo9pmiVnjG1+EcIwAAwhFEYGQdELtcIa/yfBom29F6WOCIghICfNJVNiW0YGF7W/e4UMhlooKlKXvghtIlqlQvggPjjnHFJKmGeCDwLro7AEj+gl7u/vMY5Sm28Yd1DS0brXfpn97ystuN50vLljuu+593FxnUiXrkn9yr5wv97vsxWYW4G21YTf5LY8v1Zrigmfh9oFtGfibuHZ5+ebu1orZGHIDBd8vaFYnGIROeNiYoizxrf7sQMMOfcExCjs0s7b5qVErwGV3805BySIhl+xcIHDagJwB3tUy0mtiJbhD1mEbm3xbC1q7t73/WTHme/r0tjYuRpJZQpPgQre3ipT7VyCrVt+EdxlAdS3q2nAgE21XrF66His9Wu/nlzYNjL7RhjgufZxL7j6vpXPSyUTFqtKQr515iiZrMHO/GBbelg2mV9mNee7NcXc/DtVsdE2kPm+SBQFhxoBKBaJ1goLBEoEhsBx4u+KYErASQRXSaw+KkIcd7i+Yby4vasC8ng4SYB4gUbXMZwT4bXb7TRnjDEdTygsQRpDjJimuSoFUs+OseSE4CNYlarBh1Vov/mkHGyNUi01knNRijb1+zquJMy97W693VtfRsVmvjtbS9YfwXt4QOvoSQt24yjArN7zdDjiMN7XZGTnPJgKSDkfv4ze/jUSXJd74SFIzhZ+2xIbHCKWRhNeTaj0f1v5ia2VhTPoob+n3a0HqC4JvPPjTBWtm0DTeNs9tkJp2xe9oOq13V749ULcDoF0mqNVLyw4eFbYQwUFuLFAswp703RX8JoewQUJCe4FTIVDqFozZP92/VI3tAaAtFfl+3MauKCv6uOg7jOo/KXmrDah1eFPcitTYrSfXb8NrC31/lCWK/tV3+Gr35q1KHfQsdLTq9DWKdMgU676Q+sdVVSsrwitfIyOC9kXHQs8wC2E3MbL+suure8rw36dw51Qq0qhtZPrnOunUbv8Gv+o87PeB1rtxdZQs/ZEAejmObfxLOpvFJ+OU++frmHiFt3ZQWMA4LyDKx6AUD0VkPglQ5B5EgKgEYCZGakAmaF5YNo2CLdljAOQElJOmOcFRGLtC+OMvA8+NOFfCthJ1GpNG9H15onqcAQfkLu1ZX5F1G7uygh186xSsTHAxoSvuYdOCX5D8Urp1O+PTmHJoIK2wIKMwKgFI5d5xuH+HjfXz0AR1YL7smjT10JwvZVltfpNt9GvzFcRSj3kYAu0CQO9LrfPda5BwpfyWbvkLynnwNVXo0wQ/WTabOh1w+g/swt22mf/bFuLyq7z8OfrZz7z4+k9cs5dNV5U7RwoSPOMkrMyYojvKi2KtWuF46zkqq2N7fLRR/hOcDnn4FhzdSUjCSE0vjlpvGtWQVHLCvYi1CWrDAbO+1pZ2KI/xBozgdaECHW+ODvKBmKqygJBIEEbFlOOVuPhBOIr5msgDWJRn1a3cRqbsJWdR2cdcG0jqpXB20nQTNFuzpBu2lCFq2iJ+iYoWDCqynxSOp+EKBINekVdC1TrfklAjFplbPlEGrGm4W18IRzahLHv7tVbUoBasiq4xSNqAq0JLtlMqc0xvVYhgJMIAltfhU3IC+DWF5FsmzQ0uk+uczydpDBlCHAYkZiFFzNG5HnGXDIKApaUMS8SlecoqOAijOMOjAkp55qQbJGuMUSQE8tlmiZlj5dxEu5LFVyFhXzaiSZFBMQ4aBFXeRrhWtSk6oJGn4YGYJRSELxYVSiMpeSmoDgC+ZYvZhXNc0Y37g4hDEjLLIEpg+X9icW2LAvmecaLL17gGx99s66leWk11d71+EoLLn5gopmmt/3uHKaT/5Hu1jbJn3pv0agvSI6HftO93uboF69daPss9TxdxIZLr9gWsBZe7TfnFtpDkJk9syWQ6s6H4ByOxyOOxxOSEenaZuKDFJUDsB+EpKYokWkpsgkEP2h5E1+tLCKnAKNGxvUbpbXHqZHBZhmtGrvSnldzoN+ML1h/9fdnH/VCXzaOfhTqcmSWSEY9t7BYos4LCwMX+z1a3a16cJ1XXS75WTsfUtj6se3P6P11q6OeJ9CgIwd26u84G3+0RGP9rW2IYPHBGOGqfN9ROpVuHkvFRxGkHfR7aSWtP+99awKFGftFUxS6fmBW9nc5ivrfPGRzLeD226I0RUWUS+fEchILQshvd7sFx1nY4VEKmDwSgDktWFJGygw48cVyKSooZM5M04xx3FVFKISAq6srxGHANE2Ylhkgwn7cSQ2uLD5bpxZiUKZ19POAZZxiCEhVwIjJJ8qRQqSSbCGfZcs7BNKSZF66FkHqnKvXISJ4EIZhAAAsyyLUTgy4KALTaKy4FMQYMQSJOMxJoh3vbl/heDwgDoOkCeS0BSHe+vhKC67+sAHqNV2gLe6LfqVOTxUT93IEXi/Y6t92zkozPP9tuwhW8m27+Z2d/hYCdAtDbtv4kOX11PfNDEPFsNeCVO5/f3+P0+kI5oKUuVos5Nsmao5d8+k4nfQ1t4q6MPTOwWLQqskcUxcIHXRI+kkVSrrvbjb+ivFzs9AM/uitPTKrx8Zoqyyoti4bifZ5qZdWIa/CTS2lGm3ogFq+uOa4mDVDIAmw7Ee0tdvGHXQ212Tc6rBUTYlaR1ZzvdortaS9Odab9Wfdx8zaXLVjlU2hTgEIvG5jCqhFozukbaLteWw8t316AW24cFTlY6u8Fe6enzXgplmprH4gVkvVLMVe2a1IgEAEtUSKcw7DOCCDsDBjLkWgQRaYHNytG66jpqV/GClLXp8FcwzDgGEcJVyeGyxrvzMLEtCEfNeRUkPD4nNDdupexqx8mdUo1+8b3NpGDauXlROqhoAqL17XQtFoRYtezPrchrIAisp4Lbui0YXH4xH7/ZXQRTmd32+twrfjayG4mm+oE1qXBNXKCuO6QdrvzzduWxvrhbU9p96ns77OZNeFMWpMBZeF19sc5uOyRXnJour/7o83Wlvc+eTIJvW65aUU3N3f4aiCK5cC5+R3vlo5ohl6FVLeeQQnE15gvBY0YeeTbrKtDfqsrfUwvN2EWG17t9H3cJf+Sv+vkU7UBFfdfM1iA9QpxZu+UaElH6gA6oS9FiisqB1sA5W2ttwuVwWb7vB1JjFQf2P+GPteNuaHAzJEcPUaUxOO9f8bi7Rp81LAs40/qvJSL2WPZv+TjmiWb3EVcqzWEADLVLZ79tGc5ZG5u4LTnROBW6MvWyh63XQBscpKp5RYlGPOoKB5f6X9xtjhDVKV8iHik3HOYYgDMhPmUjCdJmSthlyyWifkas060nZKGfuCxaIP1cczDANijBWKY6IGRa+UMYDIwfvel2cCsZwVCW2BM/ZZE1AeqAKGlNnEiKzBRQiwnVuVZpJzRLnkEup77z1ySvV98B6cM3JZQBQEMs5FBNfhiOlmxnMS65GpfJn846+24LoEl13+nt/8OTeosC0YXauPan1AW829YNgEZqx/+JTHe/KxtirPowWf8ttHhVenFEDmtxx66VIKlmXC5599jtvXtyutG0AN8/bUFhJ64UOARSba91VjtHtYRFm/YdrPSRcWUS0MCGPGUBHlvKv+M7PyhPutFZm0tp6zZ5xbW41esLea1LrURhWzoMy2J1LflZZ50d969Y0VNKFVlQS7f9ff1ucrJezCZi++RR3LIl5VIg2t8VGiGTmL/0dD01v/dGOu31m/c9cUax8DWrSTVuPTuwRlw2LIJNKGQAIaDJbaogPb56u6CBEcvLSNhWWEAXDOmz4CkAX6884ju4ICxrIsonBB4ECCWAd5mZEXCZqQOzhMOWFZEubEyKocDcOAWAjLaULOwoo+jiNcGIShnU4gSiACptMJKQksfn9/L3MxSFDDsixV8Bgbx7IsVRgAwJJLV0xVlSuF5ntY1nsvqSVk/lAdb93DGluMq+cDfSRvq9q8UmYKawpLxH6/x+FwkDYSAYVxdbXHzbXQPU3HI1LKCvvL88zzjFevX2J/fYVvfvPjVvboSxxfacH14NF3Omzfae+709qGRJZ3smXRoPr99gLVgQyz+s6FxCVBdvn77ui0qroBvUEAPXq97ruLPqvHrK3aej1fV4Q8c66aXCkFh8MBk3Ku9fdk5oqj9+PSlHfRVI0dwwQbGnCl1pS1fz0GspAVSlFKoD5nysHBuaBVhX2DAclVElyDZqiD7aoFXwVH035tTEyuU7X8bHOXfKZCSmakdPVEDuQ3y86EHxPglHuRUOG4tYUJEfqbOdoUKBMrxtBhQrejVPKuBjawCV2CUiL1462Ckzq4l9FBit252kfmc2co7VLDKlcTSeAsud6Kemv1mJ3iV5+Tq+Dq+090ArO+ClAsuEdZTKCVtL0DFSDlguxyFcSFizBQqCA0ASk6kNwrpYSpSA5XsoA9MuFX4FnmQYwBccm1hpdEJQrkSA6VOolZhCWR8g76tj6882Cv1ap5qbmN4xg1l1ES/gEoQ0eA8X4yMzxN1RIlQq1/573HsqTOSpMu9L6Ngc2xkjNKFotuHEcQqf9tTsg5IS0LhhDrMJwrUzbhgMPhiMP9Peb5BB8HXct45+NrJLg6H1f/6WYTXevqXSdjvRFs/0V33a2Pq2sBgHONcdXKpwqvzVE19Eevu2nzU699Qcu9+HvqvmNJ2HS66TELw/VslWxru7RPVWD0C4ao+YYq5Qy1fdy+W4k4WsOzvZCv5dad6ywpjTDsPzNfQcd71wuj+lpZsia06CwnrG9HC9nryZa6qEXtB+DiTBQhUTuoWbx1v97MuX6zYeoRArHuavi5awhB70tBbwkWACjVl7Uad3Ji3cCc/U28b+HLJry7L7sHrtq8Rv5VwYUWyLBSGtH9rl1ktR7W44DKuu8KkLlFSVarjyVwQCBaTfYtzV9kmz4sqpIEmpuXjMystbxa+kQuuh64ILqoQiJXC8YXOYdcy7MqykEIksAPp9yEKSWxytTJ6dWCCVGsHqLUfgsVXCFU4ZNSXhWdtIKUdl+x8vJq/pwptYxag6zCkcyIQUoRLcxYlrkKXyHVXSe72/oGEZZ5lsTsZcYYgg3VOx9fG8HF3f/PvusssPULbQEY3HE2iHreW1o8T5AXTz56i6tOhie24yGL6tI9HrO8THNvAk00UB8DoJaQMQU8dH3B5Vm5CANidFLWxCwkUg44nGWKnfuvgE7Y9ULJAkK6KCk0K2t7Xt+2beg7r3DR9b2tF3u2CxjMghZA5+DAzsHHoHCMb2MJo7raHM4Jrrq5Zz+pttarfL1BA7RdzOqiW3coQBptR15yrUS6dVYvKgoBZk3i7RRD6t44ax+BPMEVQqGic0kSeqWNuba7qG8phAi1UauCthVea4X0/F1vxUvfiPQMwaHMRUL8UxaBZruF9n1hxrzMkgws5gmSCiIu0gnOO7gYwEvCkjJOKSOThMk7J1ROp+mEJWfc+CAVjZ3HRITdbg/nF8nfS7kKkMPhgNMknIbjOCLuRngI84ZVB2dmhCiJy8M44OrqCqfTSUlshfw2hoAxRoWCHVIyuqfWT957DCEiDFHD5ts8OUNXVJmwBGRhtknC8nGVsd/vNTBDKkCXnDBNJ8ToK3KSs8GFDmGIIGLkvGA6njDGEfgSPIXA10hwbcyss0W9OrXXpFeC5tIGrxum/X22wWO9w77xMAe+g1BMtINIQs1XMCG0emh1svcWyOVnu+Tv2G5w/WRt2pF8tnKWl9I2j47B2y5XCgMlI+UF8zwJ5k6Q0F0VBNE7dfQXeBInrve6gevmaI5a27icQV4MbKe4tdUTIfjQCSVfoUCn1ycieBfUgNFADIUUK5cgOalZ5XyjKoLWOVLB2DvLqQ/C6CBGRx6OfAumMOvIeWXOaILS+t3C3al7NvvjIdi274O2qXcT0Sy/ag4Jb2RRaLB0Cbr2q2rYVqhPGtaPeeVQVKZ2sEk2e5FCTAKLlfpgbc46EjySK3tCs8CZDbWoD7l6L/KUu8u1iViQUKz5TLVZQBPyYu2rv9U7LDmrf41bgi1ILCqtJpwLsBTGklUokwdIbWmzEr2HD0GuN8+Y5xnOB7gYEFNEyhMk+ThiWpL415hxe3uLJSUQSbi5jwFerRHzM5kAiDFq/a4Ry7xg4eYHqykvqqEQF9F7rE9Jcr5C9IjRY4gBUAjVfi/fh2ppD0OUccwF0zTJ54qeSNkVYdaY5xmsqS3OjZprJkngzqEKwGGQHM2UFjAxyAio3/H4Wgiut4Xm7HPqz+ngkUtwYV1EW8FQF+bbNPjh89coP3X/rl9nPg6shS/wsIX1mOVVm/io0O9gF+VNS0nyO2oJE7VgLPwdEKjBUahOZoEZi7lX1k9ItHr6FXJllpbvgys0xN5ZgIZEBTpqzuZaosOtQ99VKlXBUgEphb/seSpMiH5j79tnurxdDwLXVRhy05f6G7E0OgtL713qXcTB/phHu35VKycrhGttcagWTasHbPNHnoT0Va9Y+meSfgCRwI9SCGttkarg66Pa+gG0ZxToVgVOIYCznYSLhL8m1ex9J6RXChjM39z1C1uIvkcupf7W2XVUoEmdMFEccynVYi5FGTBKi+C0uUU28DrXOSXkXDDNM8ZdqEiABGaUClFLMJOsFxNc0zRJflS3dgANLY9DtdJCCNJ2Fvgvu8beX4UXtyjC2oVW987SThwpq0cdVuEb1COEgOIYmTLcLInwtveZJbbb7TBNUlaFsvR10ShOp9C07Q+GFBlEuZm1b318LQTX9th2xxYiPDu/W2RbgdD7uPSEM4vl/47DNvP+2FpXfTj8Q+dd+nsLzVyEDV0nVNXM9M6jZKHBOZxOOByPWiG13cMgDys14ZwkUkYfEDR6rfo3AGwkQf1/T+VDBKmi7P0qUrD6qlzbTByp9WXPU4VcH2pMVTFpc6TzpTm9qVpyDlbvyfwaDlRYKdfNQvHq2XeA00R1o60Cal4RodEl1XHT3ZfZyHP1kivFpBvPrr+c98IF1wtlUG23+KjsPqX1i0GDHgCMtZ2hzjGJKnRo1FKe1IlCAHXUQt4ofXS+dAJCnl2Fh0e1mouWWHnoWKEFD/i4UMfzfO6LcgOUpbkDnPNwKWkyeIEDIZeCpLlZ/dafc0LKEpBBmsbhfURSC6QUwLmAUhbMKSHfH+GDlCkheByVkzAOOwQvAtSiAc3imdUHZPOWisyHZVkQhrH5ysxShfyWFJrnUpQk2BKHJcKzlC5Xa7MHiJ9Mh1MFo613UfaE5DrnjJIZ3heEELDf70EE7Hcjbm9fVx8YESGnBZnn6sNzOSOVjOvra2XeyM3H+wbl+bHjayO4qs8KbUlf2sCZ2+dbvw3QYLKtxfWY0Ggf9vddQ3OXxsg23F6olsIIPuqGcS4ce839KcSvDx1b/4Fd2973k4vINqkepmHknLDMCw6HAz7//HN8+umnePX6lUAynlBKRkozyA+ySakFJsIMWFLCGMWvFZ0XrjTvIFVlgcY5Z74Ppw5oWZREwsphgsj7UKFCts1JrQ8XukTnaj1DrRElCtXAiBrEzu3+pllrCqe0jxnLcpQ+cgzng54jfePUdwSWqDMorVYcB7H6VFgJ4ewa+qtaM5eLDBa1hIsKPRJcRvtP20pi3ZjQrZaLCSUXqsLQs7hLPwkRrdXNKoXguGnk6J32JqtJhFUIJKHlSDD7FCTPAn2VXDSxV19Yrxk7tpCo2KdyXiqt7plUTCF9Xr44x4kkT6rkjKLl7T05natFwuK134sGUyxLAZEHOUZJWfy4ar1zKTgcj7g9HiUpOS2Ss7Vk7PYThkHgN5BGdzpBCVC0YrGGxDMzTqcTTp3gmpa5IhjDMFShYtF9XAqid8hBwti99zgejyIYiLDf7TCrVccMpHnCDMbN/iPc7HcIjnB/f48YBLqPMWCMQ1XSmSFM/DmDc0HKCZQIyzzh5vpjxBiF9X0YsMyTjZasQRL/t1mXx+mEcdwhDoNYlTo2D/nDn3J8LQTXeoPZvjs7e/2WUBfE9por4dW+uCjEzo9z7c8+re/p3DoCHoiWeuQabzr/8XZurq1tMgG+terEGJHFlnNCLhnLsuDu7g73d3c4nSYAwoEn0ACBnQkCvYcjzbvS4ImNtixCyp5NEsVb5eK14LIN3cLRLYfrXBvvEop1swe1/ltDee2a8qafH9Si7ggK/6C7vohZCyYge5gOOWtA17mSVfOlmNd+v+7cOp7UrEXuMZ8OyuLaLoUPzfKr/ly9Qw0TZPWP6R21XEiD+bo+hTFIYqPTMByrcG0LZ2VMy+N2CkR3zYfg7b73TDnkOq/67zf91CMtZs2iWbuwSD/tR1bfF2/2ClZLkjVww/qzlIxpyUjJohJJoEVWf9AQAYULK9sE+iKrBdMkvjGzfKy9lpslpVbyyvKSICexrnvl1xTibQASIFCdBUcFRSJMUYoK65tvrfhWwgRZnn/pQvDF9xZQcoso9H5A8C162Pp/noW3MOVUC572gVBve3wtBNe7HCs8uNuY7d9za6pBhQ8eplwStfP7rx/57fa71Yaq933b36+bz2ffb53//fP3lqBBD4AywIM1bHepeP2rV69wd3eH6XRCHAIyt3Bb9gzmrOXVWelinC6Udu315my5OaR1iFzVLEW4m1Wom03Feo2qqQlayWdqqgRrfzrzh6ndwT0UR64KDhFc2kIy+0/+DnGQ9jgJx69GspHRovm6KnFtKevx0c205hChWS/o33f9VDf5VVSjvjzVROd2sYB2CQ8pi9jBokpDVQW4Shhm6WOnEGK9v6URFBIm3mJP2ywn4gAjm65UTFXg6E0scdv6mEi57Np8JROiTcrrGmv9cab+9cKq+8wsWWdjqdcJIYjMDowyTVIUETZeGhaeW6DSvMwI414Z1AmHw0EKTCo0LYEdUiDyan+Fw+mE4yQWigmuoIEYOWe8nF7jdDo1QeOofj/P8yrXLcZYrbA2fcpqzZpCaFCkvVJa4JyvlZkN2jfLzoTpPM9VuJzChCUt4FJqRGPUassxyvMkTaSWXLOh7R3MCBQwpxnTPGFZpFZZjLHCnu9yfC0E1yXHtx1b/1Y/oQ0qtPO2G7hcW055SGiwfHmhTZ3G/hbPsX3Vz1fPag5/3z7Dw218sN0PfG4mft8uxWIER+dSz/POYVkWfPe73wVIHbdoUGPOGQxllra9prN0qh+K0IWrEwJJmLz34gfpF65ZF9TZIkwErlGFvo6LONK9JoqSWALUEpHF/6UIlvBx69i1cWU0665ZiPKNJ9OOSZKMex+MDyCvSc6wYn+QzRmdFadCq9YtIql268ImgMTGCNSsIrKwd72PD5U9pKg1qODvapzJy5gKVEdaksW1oAs7z2mIPARS1QYAzPAaXShwIQu+VrJabQBcgUDe+iN1b63WFyQhl9WvJvXXfH3aVXpC9Y+QQpoSZs8oYCpK+dSv+YfREGe+R5WznpT6iBxC3OFwmkDTjHk5YplPmOaE05yQyWFaFhxPJ/CcsOQMD4dSMpaSAHIYfMThdMSSMpgJ8B4g8WP5GLGUjKVkyd1yDlQ8rq6uqhCJ44Cr3b6un2lJdR5IgcqlIiKV5QISCcjsa7AU4BtTPrQ0SlA6J2Sph6fWVUoJKc0QkSBrawgR0QdMu7lafMfTEXeHe/ggAvnm5hrOkRaLDKDgUAgI44B5msGQ3K9lkdD50+mEnJNYkhdG5qnHV19wPbJZPwaNiW8BqFAht1D09XmPG1nvelyGCduGvv2st7jahv2wpfU2js9LFuaZ/6vzB5IWl3TeIanF9fr1a+x2O5zGEafpiDGGaq3V69imj95IaFQ0ntrLLCqi9TPW5FkGCvX5XhvokEhzubwID/0NE9qmb75M+XlTUKxxqBeX66tAsKRrEEn4cSeQq23mW5g8ObPeNEy7Kk5owQ72uT5cfw4z6u/rGBusZZZWTXBuL6vsbD3eUDtW4Wm3I7UquYUv1sf3tV1M3VWq9QNI8oLGQLK0pVnAahmS2EUCo6pCUxIAxuAtDFuSg/uyPqv5rJbXSqnrhL/2XDf3LwdjkSpJ0OCFho7I2A77URPmPaZpUZ9slnylXCQAIy3ImbGUgqS5WUtesOSEcjrB+YAcitIeOQnIyHmVgBxjrOvDOWFkT1paxBTHPgG4D4Lw3lfLK5eCeZnhXKi/maZJlW6u1wUMnhTfUk8rRUQVwvPeY1CLqkdlLGJXfGMRV/srhBCw24215Ir5rkIQC7+iDPr5aZrr3P0ypU2+0oKrt0TOjids3GZxGV7+thbSOx9PuM3Wiuotru1m3mvlvN0In3hsAzQaJt5yusyS6vH3RTXAu7s7SY48HnA43teF2GfdEzTZmBoMaEKrhepafar2rOukYPvXKpqpZdVZcVXQO4mwc+on6DqxwmrkxMpgMlogKMzWd7r+z6xdEw5EADq2hWZQyVyyYAmvtFIqE5hbuHgLeN8IaDbfjQiRAlebwXZvE8Ka1Mxd+9g5tQDtaPRR6NcNM1pemgks9bPZefV3KgZJnqGmJNrDk/AzWjQhE7VaYdpeE8RLTuCcQBDiZWIHQlmPdQ/dYq3UGXzIytzeLK2+/1pag13PEAtLFGdqbA/SvYRxGOFcgHcSETgtCfOSgJIxTxPmJAhC4oKlFCw5I3qHIzPSkrAkCdTJscCFgBil6vGSUxUMQWmfpmmqgit1pURMoNkaMqtoK7gsei+pFWPH4XBYrWVObc32PqYQPJglr818aM45xMHIfxuBr9NctMPhIGTD778P7wOGkRGHIFbbsiCXJBRWepj/K6WM4/EEy5/8kRVcjx4XLJctXPjDEFOrwI0HvrcNuLbrgTtvrbBtgMFD1z5P0X33o4cKbXILLNOaUJ3KinmnlHB9fY1nz65xPN7Cv5bCfYWFDkYIOSUJ0il2P8QBY4wYvCQr+y7iTxYJNLoNICrVotk+e00+9n4z3g4hRDgfQC7A9dWhna8atVgpDKstlsUcQCUjNY0fugEzgMJw6merPH82bq4JTx9DJ+Qa7GeEtjCfkHIYBghrtuywgECcJkwaEwaRCkQTvJo4DSKw92CraWb1mwCAmwVtQpxaeeM6g6z4YLPAhDaKS64bjiGjVdi5LibQFUUvmqBazy/ZhJdlQV5mEBgxaEoDETwpWwMzMue6ccq8C/W2rRCrjJ3oRtq/ll+IzrqthpVazO2J67yXqEqBtBx5xBBxc3VdqZOOpyNe3t5inmaclgUlRCFSZkbKC1ISJY4pSGYEEzLf4ZvfuFaBUXB/f1BYblGrROZJOTHGnZQ4WZalzpWcW4h7Sgm7ndTqEn9VwjAMFa2Q4XLwwVfGeSJgv99VeJFzrvla8zxLQnBhgD1KTjJ3IDqPBEB5jOOIeZYQ948++kh82fOE43RAKknppCQZuRawZK77xLIIa8iyLLi9vZX0gy5w5F2Or4XgapbXW4oi2yBWH6050t7Gb/T4cclyWltVF3918by11tl/d9EhfeGajx19H9ToQug2oQnGDMY0nRSSIHzzm9/Ed377fweAumhyycjglpSspKE++Lq4wAIXyWQ3nwOpFm34lFoXJjx1vKuPrPN/QdtJrvsd7LcaOt5ZZQYRWr+sAieolTcxu8gczqxhkzVpU6EwIoGgnHfNqiPqLDQ0Lj8uKLmxO5FzAl1VDcEyr6pNJm0i6H2c+E9qRWeAXGhQofd1foAhLOl6HYHvJIy/V6Wk/0snnLStFrFZJwk6adCFq7CHOAzbfDTLp4Z2kMKu5EHgCsfbmD+2LqpMX0GGayV1bVU2f5eNUw2qpG4OVevXoaQEF0WJCs5hiBFX+x0+/PADTLnA390j393ibprU+nXISaxH7xymlEGuAJRRFlSrarfb1aAHq8FlXJkmrLLWr6rM8Mtcg41sLZo10895770IDuc0YMQp2iHWlRWCZGYM44jBFM/DEaXWUfM1mKNCgxDW+7u7uzqW+/0eMYYafp8zw9XIdtJ2t+hD1n4vLMLyNE2IGgjyrsfXQnABQA8XPfUQGIGrv8sWzcWowkdv3a1wMmHRIKCz8+jCZ+2TzkrbBGh01tulz58KDT5k1V2CC/uNhwFkhTUKF3EUa77GBx98IPCdLq6cc3WW16RDhWq8c432KS16fYYFCvSOdfNc9J0mBojrCHIbPNW/Nr1fLZcm5Bu8pw++7lez5lxHqYO2GZP+Zn0bQoUTVbPnnsC3tp3BWSyb3pxczQdb9Oar6QMy1KIyi64Kau+bkNQgB66Srw8dV2HsWumXam13O3udK9Wvp8+YgVbvmcwYkyTsrP4zk0b9SFCbA/AiuNozS/usrta2P6zPm6LRzX9rca/A8Pn646qsmHBT/yqb/Sv5h+K71KAa5zAOAyh4nOYFTITjMuPuOElbnVAjWbRsmWYUl8X5wMDpdAI54SN8/fq1QHwmuDbJ8Oaf2l/tAQZSToh+7KbEuuxI/2w5Zzj93CBBO8fywFJKGIcBDBGofcrL+Z4jAxZiqNfPuQWVmEAWKyvX/EwGqp+LtL/Nps9Z4NZ8dfWjK7j6Tn7bYwsVrqK8tuc99R66emQhtaTSN7fTtEaAqFyYQOfC7CHhZm3+ssdWiAlCxl2p9FzhhxA8nj9/LtqUhsvWhcVAyhmD5Z1EiVSyYnbmTK+Cqlo0soizTXmFzJgkCk2e2wHswIXAGhXnXIDzXrXqC8550rpX2usGA9VIRYUcnffwMXYb4zoitVltFvihAsgpYwb5KsQgwKKMMRvaqHCaWpe16rNBWI4Ag8Zs4++CShDEsmLvNZSdzgIzlAYDBqn1hUuLPYNtAc0Bh9rRqIyNFZKVo8j9CjWZZEwhhVFhURNyCj0KNOThiUAoKD5UqFD6VtgfOK+DB0yYmU+kwp/9GnAOjltdr34zXo2Zb+E8Zr45ciC23CtdxjmjsM7xNMMR4Woc8fFHH2EcR7FwcsHrwz3uT0eApLQIUcEX0yukUhDigDjs8fnnn2G3v8J7H3yAzz77DOQII401UMN7j48++qgmHC/LgqTPmpmxC8bryGcQvvm9+iAo5iL5VSUjpaUKqGGQBOOoeWJR16OhFiaYjO3GKjcLbFswJ0l7+eijj0CEmkA8TSfM8yTKKxEyF4E4NUQ/hACGQPNEJGTEy4LxR1VwPXiQOxNC26AFMm3w3eTeOx+XaAp7mXZJ0J2/P9fOt4KxF7hviq689NnW8pQAC6V10QUS46ClD4zxOsJrwmLLildt1BHiECuZqNTLglo0orFXLkH9nYSoMwoRKosGsQgHUZHBlAEm1dKVlsi3za1BRJs+7j5e9YAK0UKlPoP0Qdv8nPqknJYwaQyAsvETX/ZiFrXaOLeNpm+aQZy2EbNr7BciAzuhpJsAwym3baf1K9xqFqb8uEDjn9Hqn+j9zRqGWA+OABQJfECx6/Sh+Q6lpJUVarChKRSsm6GR3koHKGu5I4mAC6IQOO9h7BxgaLQh6iYqGrtQMjGJ0L8MI/LZv01oQdIk1BIvpeU7wZlyxlWBtdB8B8nn4lyQeUJwDs+u9nDeY84J/gsnzPDHGakkzLkghoiUC+YyYUkMhgP8hHB/L+PKQE4Jz549xzxNSDkjDrEqiFQkEMOs614omdAy35H10zRNlZXGrC0LADFFsg/ysMCPfq8xAWc5VsICkuAcsNvtqoA7HA4YhojdblSOxVRfBPFFSjCGjONut4d4C0iDSVh9dz/iwRnbSUwV0/hhXBvo1Mq24Zk21+PrZ1Bha9GqXRcEUy8/Lgmk9Wfrz7ff2T37RWsWzds9O3XwjG5MQINXySHEgLCECoUMwyC5USl1/caqXRplk8EHKqxcg6qYuZbPKMygArG61OIiMNirH4qKRL45vQdQLTPYe2vDBfSWWeh81pBx24hLLrWdMmatb9cv7W+0azju6InsPXMlK7U9n4AWKq6WHZxYkNwGG6t5U/1NBjN1AprX7ROrjtu16rj2A13/p1GWALuikB9VQ6zX87YIYD2BLWxC2um8U4ojSASfRUc6p60TyG6lYJiVxLy+vv1D3H+Eik/1c8iE1mob4DYHCHUcUJqlwqxKj+a4EakPkiSHMQQHigHkPT56/z0RUDnj7vQCc04oKSM4h1TE91PyAhcilpRwPJ2qwlxSQfQBCyZwyWDuEuuDRMGaEiPkvqiCg4vYwX3kYS5ZBI4qjuKvkoTgaZq0mxyAViyzZ8exvy3C0QQXV6vJI2Wx8iT0ngCM1QomCM2X1xSUnIuuH5mHVqzACI1rZO07Hl95wVU38PbJ2/y4vTdt54Imt72fnCOQA1HnS9FFYT4Xy5QRXdwCgx+o79RBZdtom23wgd33vG0mUIAGD9n91jvV1gI9b0/T7my9gyGatp4jGrEWt3Me773/AV69foW7+1vMulhskzEkS35a6sviChiMnAqcEw08O6BkRoYkunpD4IjgKIEKi39GI9K8d6BAEvWtYKAjD6GnykpBJRCgwHJFLRzhE5Qk2tLQLd3Iqm+KrN8F9isMKAdutciKctBJULgNqlqLKoQtr4XNKgKBbbhJrDIy4VuhQ3XO56Y8eJ0TcL4mz5o1QexAynhhEV6pZBCsQrSvn0tvQRQDhghyB6sPIhYdF5QlAyZ06gavxMcM7eOMnDJKSkAp8KS5SjkjYcacMqyKdaEiSdBgJC7IWsSRIHx3pWSknKoVK+ui0Utlw3hVQBdu0Xc2N5lZFAAVshlZLUhTBjSSMMPSmEU5cKh0Zp6AwTtkknvAAYUE4vs9n3yC6+sb3Dx7hlev7zHNC5ALghPIkJmRUsYQBqQl4Xa5xTiOQoi7LAjOIXiHZWEc7+8F7vYOMY5iDek4LzljNwzYjzvs4oCpMDILdZJE8slcDkOs0F+pLC1Ct3R1RVqEUvtL6auMfcMiFaPW/ooxVujQgjAzZ0zzhJFGhBKwLNLHwXv4cYecE4IfEZzHdDwBLBGc4k4YUArjcDjUsP+cf0S5Ctebt7mYfziW1pvv93a/q7995BIP+bTOr3Xenvaez85/G6hwK9DMsmosC1mZAOR+KadK5hmGoVpdwxA1SVM2kjBEjPsddjvB2XMpWEoGoWhtJi33kBPyksDeyYYMRkbRlCjCGALYSeVa6jjbhAWj9U1lKCeA4Krgaj4rqCAW0lXWUGE2JWHTJyIInCxGUxyoWT0gIDDX0hmcMhDk3iDW/GCDFwHnuG6oTi1GMISIVqVnMdWnXlf0AOe4auTIIsBFqAIidZTymxhstbFyBkgtyNJ44kzTFsIMXikp0noCyMMHU7y4WbuqPZckpdyr4IfIvVl9oOYf9AoJVoLgfrbqHEtZobkVz+F6DdSQHZ2fAn+J4NzSafUWQVP4mrJZb1EUItWS8lwy8pIwTzPMZxeDQNwZpMirx/s3N4hxwPQHC/5/v/O7+G8/+AKf3x0QyIEdY4EgD5lZ6nWVjP0wYlQ4LucsuZA54+r5DVyMSu4r1k5xjOvdHvtxh+v9lUSzmvWZhGqJAeyu9nUdWG5Xn8RsMN04CrzXw+BmYfUUU3aO9G/zLxocaVBlzlZ0ktbjysbxypimCUMcMe5HPB+eS390gSPvcrx1IP2v/dqv4c/9uT+Hb3/72yAi/Mqv/Mrqe2bG3/27fxc/9mM/hv1+j5/+6Z/Gb/3Wb63O+eKLL/BzP/dzeP78Od5//338lb/yV3B3d/fOD9E7ghsc986Xe+pN6wb3mK/pcV/VQ5d+SGA9bHE9JPSaT6x/vz628ErvG6jBEvY30GHUgpcbVr7fS5VW1DNlM3RW4dgLdGT9xhALpOQCziJoStHcr5SwpISkm1JOBSVzhaBqNFYP1Rl8pS+zYi0BUvwWxnYufxtDuVFaVSvV/rZnt4ubyl/v0wRQs9ZUASjcXdMa1I8nYDyIZIJnQx4s/W/2gFrv9Vms/Ii82CiXlJWCc5a/S1EItN2rVo9G8wczy3hw4RW5bu1l5lX/6oChpCxC3xLN9doNOaC6Qa6Eio238hjavEol10CJlIu8ChsYXOeznN+sLGvtah7rtVeoZif4+n/tClZmBixE0qVag+3ulpc4xIDr/R7f/Ogb+MZHH+GD99/DGEPtL0cGj8k9ks7pXLJYHrnUPnAdqa0gilwDJOx5TqeT5l8Zsa00aLXedZmbEAMaA0eN9AP0XuKvtS6we9o9cif4HUn6h9MYgqrYwgJpAoz8mohqyotBlzFE7Pd7HWtBJ971eGvBdX9/jz/0h/4Q/uk//acXv/+H//Af4pd+6Zfwy7/8y/iN3/gNXF9f40//6T+9Khf9cz/3c/iP//E/4l//63+Nf/Wv/hV+7dd+DT//8z//Tg9wDhWaln0ZTnuna9dJ0b3vb9adsz7/8v2f2q43Xeex+65fmkz7ln1iUYHGWG7+lZyLOmMX0fhKQYwRz58/w36/q5sJa6KrVyLSWgHYUc0JyoWRU0aa5yocCnNl5JiXVB25pbDmE2lSsTFGmIDKAvuI3CGBhQq0PRmliGUgbNYJhbMGGTR/Rim5vnpJ2IRZE34CM+nLNs9q8lXJKc+U8maDlxeXbsNHP4+5CaeStR0mTIu0nSUMGbmAcgalDCgjBacEpEUCIopWxQUQSErIOPKVHSK4AKfWJBeIElEKyGo5MatFWlr7C0vZiySCC5nlfAaCc4jeYwhBkstdq9Rb5xWkr3PJIoAKIxXGkjKW1ITVNC+YlgVLztqdTWiZhSVWHdVionLtUv0sJoyrElOaBVGh/U7J8+Rr5YIa1FAa5RKzJOR7EIbgsd8N+Pijj/Dj3/oEP/6tb+G9mxshwSoJ3hFyEtiRiLDkjDlJ3a7pdELKGVw0zYQ8vDPB1Z5jWeZqBd3e3uL+cFDOv6yMMxqdp8E8WaFDp1GDRKSBFksVZERaddkLN2HOa1op40RMi0CI3kkdPXm5ynKjk74FdXT18YZhwLjbYbfbSRHMGAUqVWW4XCoa+sTjraHCn/mZn8HP/MzPXPyOmfGP//E/xt/+238bf/7P/3kAwD//5/8cn3zyCX7lV34FP/uzP4v/9J/+E371V38V/+7f/Tv80T/6RwEA/+Sf/BP82T/7Z/GP/tE/wre//e13e5IHNvhHN2rVVi79phcG3Tfv1rbVFR6ywHjz97lAau8fa+P62s3n1f5+m0N0fMH3a+ACUQ2NtgkfvcM3P/oIr774EM+ur3C8fVXDziuRrjI9pJwxzQCVhBF6XaXPsc1+8A67IWIIARQGOE+Ad8hwoDCCgkchQsoa3MGE4IR0lSqaogX1gi6wAoEm61isD4ceHjWbsFkbtonJtWodECgRviYrC5wmviZ7sbASKI+fC7GNBbOWfWkyD3a/kmFWhHNKHaXwizFcCB9hAmmZGGZtm1pDXC2aAniP4hzYJWUa0VyzIiiiYxlPq5BM4hVrTdLrSJXbhJIWlJTkPGfQrmySGksHKUrZrE6pqRblYRfUTb0UCPdfLtWRTwRM09I0+l2QqNFqMbWgjj4fiZMGfXDWAJ+yWi8AJIXA5rI9I1FFBNp5prDJzKGS4XyADw4+BCQQwMDoHb798ce4vn6GAkLm/4LPXr7C7ZQAFiWI0cLYp2nCaZ4wjCN8jJhfvsTxeMKiOY9SvFEssvtpATGUw1NbS+otdwTyDj42X1WNFlRFdRzHavnsdjvc3t4CAK6urrAsuYbhW7CG5WnZZ8JHuAMR4Xg8ApCEZ/OFmQVqBNsGC1ux1xgjxt2IYTdi2O/w/L3nGHfjl4IKf6g+ru985zv43ve+h5/+6Z+un7333nv4qZ/6Kfz6r/86fvZnfxa//uu/jvfff78KLQD46Z/+aTjn8Bu/8Rv4i3/xLz75fl/WonriXfCAdOvM8hZ9Z+/XmMpT72OXviyUmp/sskDrj+rfqZmha1jkku/rwYlE7ZoWsguwlPFYWpht8AExxK6eEFchW1hgIEHQxGezJBUkRRbptCwCLRKBxxHkjPV7EdihMAoc4GaE4OGjx8ACSXhPADu4YgLHnplrGLbBZOazIAIo1xg4GAEsEYkvidsmKScIezy41F9YwjRsQzH6I7VS5J7GE4hqaQFouVs2d2quxHruEKFu5rUp9p7VMrOMK2UaIdLIxNzgza3vDsqcIdCmQo6dgsJQrZg1TJybQHMK7XHW751D0TyzCs2qBWv3Z3uvm7g9YVbLNSt8VINe1LICZP7MOcMVGRNWK83mU52bbNCatLSHwNoSoQqv9XPfIC0T6BLsUoHU2usMfWb1wxGLgB+Dx/V+h4+/8RE+f/UaBYTjDz4HMymDzFKfJel8v9K8RhNmhRn7q6tqCVq5FVtX8yxM7SmrcuA8fAjwLmjAEKNkxjBG5JQxz4tCpVT7Q6arUKL1ZU9W/m3td6tA0aovU32Z1Wa+TgvwcEQYxp2uS48YBnnFAUMcsb+6xjAMmNOCdz1+qILre9/7HgDgk08+WX3+ySef1O++973v4eOPP143IgR8+OGH9ZztMU1TDekEgNevX6++f6rv6Ox4wNp68snd56IJo044g4hoK/eq7HlzO1eCqfv7EgzaWwh2MBOcaw7qPi/rbQI2+ufLGo3HYM1JacnIRMJv1i8Cy82SiLOkfhSgkDBrs0ZHLUtCOR2VZsfDBym+lwFMyAhJ8PLEhLmcEIKXABB2iHCIZPLAIDqj4BXB6nVBSeHAjhfRytSDm89HSX7ZBrTrVYuik28azg9mkTuWe1ZKDcSAauV1F1WBJlYZa+ClCF4Akg4Aq1NmQtG2elQFyVqRS4PDoFYYTHB11IfGzC99JNGMLfxfhVYxOFLzzjruOafj650lTYtVl3MBXK7RdsWgVLZcHbtHRp3N3ERB1sKMOUuQCAyiJCiLh/TdnFKNsWz+KTnHohIl39C6WhafRdithbekaEgbrExPE1xkoXRMgGNFREzAK7tGWsSu1HUWnMMuBnzjww/w7bt7ZAZ+8OKV5O1lDZBRIZUYmOcF19diuZXCEggCws0zr+tGqNE8OQzjUNnkk/p/AcB5g2E9MrO6O6WKeloyTtOMZHCpKhvWL1bapw/MMIiV0Iq8thIqoesf6cUaNbokzPNUr2VJ2uJni5KMra/9XvLgluqbfPvjKxFV+A/+wT/A3/t7f+/Rc7607XUBanwIqqva9eOXq7raCh7srnv5d9vAinbP9v783Hb1BoTJQnuY++2ppnofGr9oBVMLGDA4gYhQckJaZizTSX0dHiF6BB8BhgRcLAuW4AEmpDzjOJ3gS0FkwLNwwyF4TAxM8wxMsrGPw4AQI2Iu2A2MWIDBBeTECJzgUkG5O0hAR5J8GmapDeW9wxCD5pF53OyvKrN29AGmjwrcxRLlVwoAS9BErQm2Gkeu8Xtd33KNtFu4gENEjMqSXvdPNYc7+JGIGrSGloMk2nIGXBBeQWeC11ri4NnotVSlyEI6m7rABe89XInCX+gDKJpw15tk8b+hBq5IZGTKkrxKLCHiltYQtY6ZDwGFFywpqe/PBIJYFW2O8bpAZE0LIKQCLNkCDTyWsogV6hwoyNzhAhxOMwJJ6D4ZHEUEwLXwfn2ZX8qUiHXKhxPfU86oOgOzVujNldev+uVMigI1bSKnBUSLlpbxoLhDgJQweb7b4ce/9THIOXz2xQt897PPQZlrDSqGpAAYrBdCgB8EPg4x4vr6Gha1l+ZFxmFeMDmpZ9WsQyX4TQnOLYCXumAWMbgsC47HI47HYw2WmaapzglLYI4x4ubmBsfjUSs93MKRCJ8YI/KsvuFSKvTXkwwYPJhSqUFbu92uFrsk7xDHQfgJY8DhdEQIsSMpePvjhyq4vvWtbwEAvv/97+PHfuzH6uff//738Yf/8B+u53z66aer36WU8MUXX9Tfb4+/9bf+Fv7G3/gb9e/Xr1/j9/7e3wsAm03b3hIekQ3tNFwWIm+C6gRuugQVUl0E6wtabs768y1cZ1bNpYCMrfV1qc39bS89l+Hrl87ZRlhtn8EWuVg1BjtwjQwKIUitKtXgdrsdWDXsIUaMw4BxGFCYcZpOmMGgtIDSjKBWkFJpyN4zS8a+RDIFAA6pMOYlY+EFsTAigFNSLZ60pMQyi98kZRQ24lPCOMQKdzy/lkq04xgxDiOCWmBD8OKY9yJISzCBRZLvBbNpqcJfKLU3mnCyPiwGgzb/FCAh/lw6iM5pNFzphE83LtLvWawwJlCWEiniZxT/mQWwkFl9RepG2XgPw4DgvYT7s2y8iuMKK0SSNIRlmZUlnaWEvUVh5tzVTgNmphrwkpYkliMkIICNzbxosUcVJGluBQlLTp1iByzzDIARXMCcLIovqw+l2kjiD1P/X+CW49jKaomfUawowOCxon2iS7eyc6iGWRWvZUlmkAKAMndwndsinHU9EVfuQ2JIXhoRAgP7YcB7N9f49re+iS9ev8acJMct1+lBmNKMOS3KImN+raL9qVC1QaGWtsFcmS3mnJDVpDa/1pIyDscT4njCZJGByhtqz2NCZ1kWiH/SA4EwuwUEBy6Aj41PdFkWDXIpZ/thSkkDWQAffA3kquVXQsAwipW121/h+voalbjaXdrJnnb8UAXXT/7kT+Jb3/oW/s2/+TdVUL1+/Rq/8Ru/gb/21/4aAOCP/bE/hpcvX+I//If/gD/yR/4IAODf/tt/i1IKfuqnfuridcdxxDiOF78DmhXSoDTgaTbYZaFlW1EPA65f6KCadk6HLG0Orgtme8smIC+36JIQA9aCdS1k18LoISuyOrIvWF2XhFfvR1idZzCUaxxwjiSiKKUFYIk4HIcBQ4woYK1tVOBygisZ7KgKCIY46VNeqhAcnMBJxJITNGdGyAUDMxxmWMCAlcoQwaW5RWAE5zDGKLCK85imjN1uxG434voqYwgBMQSUEuEdwxdfy7Czc/AwLV/zmlSE9UJKOqTNQ+21KryEBcGEHldIkVmi8awgZLW0AO1bFWKyg0lqs1nASqwnzyrChogkRL1IFdyisGT2orSQbt655E5wZczTjGVecDodJQLSrC5ukXvBh5pELtCkRmAuLSfIe4/MAi/mkhGDUBnlnDGfJqScNIrU2BwA7zxmrTKwH3eYF4v0BGDlbuDEV1TEOiwlgQGFuwgpZ+0XW4ukRp3CpRpqL2OTwc7y0aQRtVSPURFpWLf3HrziD7Wxlra7uuRUOXUyV8bocXO1x8ff+BBX//V3cZhm8CxttnYtacG8zB1NmpRxSUurl9Unlhcd9xgl0Xg+JF2HquAUifY9nk7YKwF2tTZ1nvb7Qc4S/OO0QniNTmQVcJtI0O2+YAKQSWFWb3ClRtk68T8bzDkMA3a7HaBj1rgv3/54a8F1d3eH3/7t365/f+c738Fv/uZv4sMPP8RP/MRP4K//9b+Ov//3/z7+wB/4A/jJn/xJ/J2/83fw7W9/G3/hL/wFAMAf/IN/EH/mz/wZ/NW/+lfxy7/8y1iWBb/wC7+An/3Zn33riMKV9H/k+8ub/9td/8Hv6VxWiY9LNretMHnX+5t1eAlKfOp1emH1kNB60yHJsLmSr1bkshQs81zD4/tEyZ2GxA5xRE4SmUVgeO2bxMCpFI32Fn9ASqnCc957OFjhu1D/HeeoGqWFuVt4eQbngmk6ouSM4DxiaIvk+c0d9vs9rq6u8N6zG+x3O4zDiOv9iDEOiEH4EUEeA6y0SaXuqInBNvLMYo1qwgE8ifadjWmiSDi8c17U6CJJnWZhFYKwE3AHRdrcdYRAohVnLhI2viSUjmeuas4axg3vUKioht/GuGremZD12kSEtCw4HA443B/w+uVLTNOkmxrqBhrGQTd2CesHgBg8ghLAng5HzPOM4/FYmeqJCPv9vs3TymjMmKalWl/zNGE+HhGCx3vvvSf3sLDscelgXY9lTsjLJPWsfAtbn+cZIEm92O12VfNvFldZPVMl7HUOLngQeaEr0+rNGRKY4rwwpdgjsLbfARL+r1GOJUuZeqYAD4d9DHDProDwLfzOd7+LVAruplkKTKofyUp8OBUYlq8FAPthB44FKQ44HY8CJ2pU4LNnzxCHAa/ubpXZwiG6gJOSXB8OBzx79kwol7qjlILD4XC2DxRuZL0WqCF9Ied4LcQqRMdCNrDb7XBzc7Ni9WFmLJOMjVWECDHAx6g1yJIwgwSJKqWc8a7HWwuuf//v/z3+5J/8k/Vvg/D+8l/+y/hn/+yf4W/+zb+J+/t7/PzP/zxevnyJP/7H/zh+9Vd/VSStHv/iX/wL/MIv/AL+1J/6U3DO4S/9pb+EX/qlX3rnhwDQoLtHT7n8/SWf0kN+oXNB1PmSOqjQgigu3O2N7ewTNS/e/4ly8CIUufF5bbnKgKZR2flGKWMwFlTjXpa5QQLe43Q8Sn5Jtwi8d3oNc5xLPzkVXAUi31IuuEvH6rEnkkgs5AKeJf8khIBRoShXCibVsmvOGGdpk4Zoz0mqri7zEVG1R+88TstLDHcHjOMtXt/d4ebqGtf7PT58/z3sd1nKPhDBoACgVwABAABJREFUuQjnAgYXsBThl2PFS0UbluYaVGJ91wdsgMSZ7xwJzlq4wY0ksKH8EG1j175e0W0V+Y1jCQLQEtEgcojRWZSCzB8f4CJhKcKjV3KRWlyUqlBZOFUIapln3N3d4e7uHrevbzW3SHLiiCBhzdOEZRYLYT6JYJOoMQmBnucZaV4wzzOcd9VBf5xSDSgg7TciwqSbsSMCMqOQw5QKPvv8pcCuOndOxxNiDBjGER+9/z58kPDrVAqWlGG5CCkliexnj3I4yniIyaYTysEHpTEq4p/1PsACMVJK8B6AFwiLLeAFZpiqBeYcGKUFkHC3HAsDJG0KPqJ4EWCffOMjHOcFX9ze4aRDUYqs82VZcKCjFK5UCPB0OiHsd1VBI0cgL6H6JuydVhteSgaRgw+p+q+urq6a1QMhNF5SqgFu5hskEmUn51LreQGW99iIfS2HjQDsRqnaTN0+kbMoiikngBqNVMkSKHN9fY1lVihzThiH/WX46S2OtxZcf+JP/IlHNXUiwi/+4i/iF3/xFx8858MPP8S//Jf/8m1v/eg912LizZv721hg54LN/rc+p8I7RGsIqT/vwbacW0GrNvb3v9C2t3mOi9fv/u4tNDtYnf8Gb62SOPW6eRE/Sa55M1gJRguC0N2/lklZBSlAM/RDUOIJvY/BGr7T0lJSm0Yi7hyhRig6cmKdZMacMlIyahrGkhPmRcKRJZlafhNjhDENOu/hfYRzHsMAUFcrDEwI4mCp49aqm7T6RAAA5wRKQXtO0HqusoXYbWx3so+odplulAZxtTEtWeBSghmGDqQVnhmS0Mu8aLVoh1QSUhYteD7NlZFhXhax1EpBTi3njSHl4E/ThNPpKJudRqUVZqHp0s0uBI8QA3ZLQvBBCoqmBKelTQiE+TRhtxsRQ5AyJz4ARfw7KFktnSDQr/q1TvOMwTu4EOBzxKJ5ZcxCqUQFADXaKBH6EiHq1I/Yl+YR2i3p4KpwlCJ91kFjtbMh/Wpzly1qhAggza0jVcyIEQgYgsPz6ys8u77CfjciTYsEMeial5w3IIQBYxwaXROzpjp0ibrUWY5EQqkFCSYSbsMGIzZmCrWGlGXE1rcpECFEAKl+1hPw1j5BI/QN3mPR+dv3Wc4ZXOTZzR9ohxSMlehJ7trUUnXe/vhKRBU+dKzCwu0far6ES5v6Jcvqsc380fubsHrjeY9be1thdalN1L1/SCr3v+mtpv6z/u/HgjX6o+bHcM8ikFe/sQUlr6JVWmW3lcCOFplYEiuJaQKUHcKiq8whLPCgWBy5CCfaXCRZ1fLEjIg0eo8hivZeskBp1iZANoV5WYCUkYpEjQmFUsay3GGaZhyOJ1gRi1RYCF6zsHqACLvgkWwsAUQWv1ggCNO5Spmk/rWSU4M2tax6FUwswKJZz6QbZ7Y8KWoL3+l4rzYTAM4qDOs1U+6YEbKricOm/Z5m0cZDDNhdXSGngnlZME0nHO9P6twXiOh+PmCepI5TLgXTsuD27g5ffPESp9Oplr8AZIM/nU5wEDqg6+tr7HajJOhGj+hiExw2j5lRloyUivoad9iNe3it5zUdD2KlZdnkUmaUacEPPvsM3/jgA1zt9xh3wqCSkwR6JOVkzBrYkeYZOS0Yhl0dM4L9j1drwVgfapCDwoRtDbXxFbeumNrFUgeMrd4FsBMSZwrCMDEGh2fXO7z/7BofPH+G5dWdXld8kAzAZemL66sr7MZdLbCYUqoMFgbhWb4XzTMOhwPiOMDqXN08a9Dd559/voL+bB1bEIg9v3cOC/Oq6rKVSbHfZV2fhqzYvOuZNvrIY+ck6dkHCZ0vGdjvryQqeBggzCMBg1Zyfpfjqy24uk3eIv0un/dmy+StoMKVIGl6soISb9X2tjjw4P3tnu3HXVve4ahaeikbiwirz4DOcGRokqEsNlbLUph/JDBimqdGrEpCweNINlFigRfTkrCcTuA0w3GGR1digSRIw1NGYCmZLomXV9oOsWymaRLaJpKIweADQgwYQ0AgwjIMQClCF1XEeogxaJvV8azdWHRjZjBevn6FwhmHqz2eP7sBsQiElBfcXF0LZBUDPDmkUlDmGfCigTtu17M+9sHBOyUKLglCuKssJJonZFqn+U6YzFu2nknS5x1vpEYFmOYrm4bHkrLUq0rCCr4kCVW/O0gYdVgyCrnOwpowT4tu2ozjYcLpNGGeF6Sc8fnnL3B7d4cXr14iJfFvtppOALMw8zsfwORxmhbc3t+DUeA8wbuogoMRYsRujBjjAO8CaFlQIIE3KSUE7xGCQ64ckow0S10q52S+fv7yJe4OB9xcX2v9twEoGakUpFqIUchxl2VGga9Chwprbp3048CSxFy0+KVE3NWVXReaWQmOnKR2eIBCwTIvgMU9aKkZRyyBN2kBnEcgh6sQcT0MuNntkOBwdzjK6zgJHFkrGJQqrEoIGAYJUx/LqAn7CUtZMNCIGDyudnstCSR+yt1+jyFGhBjwkgSELiiIwa0onVgTx5eUcb2/kmR+b1YY1zXS/KyAmrM1KpFA1YKzvw05ck4TpzVCOKUEi62T0H3/pQIzgK+B4LJ/V8LJVKx25uXf9lYagK1wWwnGLVRHbYLbW+60anpIij0oa/QHF+5v3158/4BA3lpy6H7z2N9bgdoOhbM6BmjdNqvgSSlXhzBB8qIkEk0BPc1/MR5AEVRecoMA7Hc72bycwAq7YahM85b06D3hNA0aHs7wJL6Q4D3GOEg4vEYtnuYZS04CBZbm02k+nKztl/fzPOFwlJBngkA18zwipb0Ux4NGTzqJ8HIk4dvIXBk75JoFJo5Yr9+6Tf0nNk23FjQDRBYWb77Ts5HQ8ilc+1+olAi5LJpkKkTFWS3krKwVWcdpnhdxyGfGMi9VGJ1OJxyPSuSaE6ZpbuHQjHofIidwMaPmCBEsKjRLZGEqCK7lwlXmfAaiN2hcQviZi4x9djUJmhlISnvlWNjZp3lBStJWsU4CvINEWzoHYo9c5hoFu2gpFbAFyEh3M0voPqjAdRZFU4R1PZhlq0qDuSSMYquCqf0gcYEU6yR4chhjwH4ccLUbMYOwpITTNMs4FeHb8lqDK+u8pBjgg8duN8Jlj2meJAhHoV4fAsZhwGL9Iw6+ui69c0gGv1O/Rxm7SF/MdI34uA7qIyL4GMBTU24FaVJlw6qRV+KBUu9V9ybu5mn1O75bwJwdX2nBBXSbbz/Z8ESocAU1nltYb+rYN0GF7V6PWG9Y+5Jo8/3q+TbXe+ie22v2n5tQMthgCxWuhRewntSsGmbdVqsllnNeBWVQzvBOIrVsXIwwlFiYLMboMXiHwXuMMeBqvxeGCx2X3SAlUvZXOwQv5RRCDBWiIQKCwjiOgDHuUIrmLuWC0zxhWhYcTpPUfNL6RXd3d5imCbMKFK1chWWZcTywJFHPE6bjEfvdDs+fPVNYQzbb7GWL9gREb7WP1N8B8dMFs2QLo5D2sSNAN3zAhBcBmiPmsJ5P1foFag00QPfEUtAb4uQ8gncK4wrktaQF2Zzr3MpMJHXUs27u0zRVCPBwONb+MdjTO4/r/RVOCsEatJaz+MGWeQbB1TyvEiMoS1JxYQnCsXDzlDLAM7LL2kYhgV2WpOe1ZHHnhNcSADw8nA9ISUL2P/vsB7i+usEwjBh3WoeKHJyPSPkAKcUCLGmpc3SaJq3/pjDqIIEPvrgKddf1ppaMd7762NBFIoII5D2oBkF0BxewhooGAq7GHW72V3jv5goLCKfTBE9Cx5UhfRppkFL3qtSJdTpif7UHZkkjAAT6jTEiDlI3Kx9PYEieXtbk40bPJEnGvfVk86r3Za38WTpPehh1v7/SsUv1+1K4XluKVmo+nbLXWF8aQa/xXIJdhRNzeio+dX585QUXYMKKVsJnhazRZSFmzu3+nO37S9+ZkJS/u62dHrJ03uF5niBAv4zGYu3c3ke0JrMGWsIhARpFpyzdMGGUu8kPDWYYQKWI491LUqIQ6TK8c7ja3eBqiHh+vcc+OKkWnDPef/4M4xAxDBFjGGruV4zCmu29QxxijeJjLpo8LBump6Ch1LL4BXISdgspk7JgOgnD9u39HW7v7/Dy5UsNLy9qZRVlkUg4HQ6i/UL8aPM0YbmeNPqLEL3HOEQhcVWIxDuvvIICpRQNig8hCK8fce07g/lE69aNot9kCCgsllKx+e2gOU0aSm9+sSyKRQgBS8qa07MAzukmk2qI8m7HmKa51iHLKaHoi7Mwmg/Bw4ExaCTe5B1uriW3J3gPr4nBBGUO19D0AtZEXOn/MY4IWs7mNJ2EOWVecH9/J8wQecb9fcEQooRfowjrikJlabHNckEhYHBCgbTbXeE0J8ypIHOBn8VfWkrGMI6ay7dIigXJ3MxckBZNZiDCvGSQk4TzgcS6W+ZU2SGsSKr5dM1/BkArb3sAuW4APZRLhUFU4MC4HgM+en6DU/oE99PvYqdl7+Nwi1QKclFGmWVRX2HA/f29+IFZas9N8wnTImzyRRdgvyeFEMQydgJPX1+JEmfFGo3RfzqKgkJEuL6+FkUsZ5xOpxb2Xlr5EyKPGIPWDpMwflF4E+bThBgCKFANnbeqycsiCkMlBtaIXgkeCWKdlx9RwbW2ELZQ4UObeiecuutsr/vY+83ZuoluB2GNFT5FyDwoYDf3fOhSTxVkl4RW+3y9IPpj9Ywsm2pKC5ZlVoZpAU68Dwhe2pw178eTlDsP3osmuRtxvd/jegjwYHguuNnvMEQJ0BhiwC56xOgxDAHBR/l8jBV6BBjR+1ou3JGr9ZNIpIMhNlgUCluWBc+ud7g/XOH13R5j8NXfsyxZrTcNXydJsl2WGYfDvWD3Gt4fggd0oZKWuQAEGhVfh6vsGMDa90VOYCaYP8X6dWvxUksjyCy8dJaQ22vJ8j7D6B5a1JzTdAO5vgWLhBBwfbUXDtDTsSPwlecdQpCaUjofcs6Yd6OQuervvQadOHJCnmpKCgFxiCAnbOpBw+UZ0Oq3Esl40NIcSSNDhxABAnISwea9XjfGKqSDbnhgBvmAwUurxUcmiehWzLAlMKst64SQlrv8Suu7XJQPn1uUooxZg2t74l5ZFk256BcnGUphColGwwZPuN7vde4vuFqSbPoswLJs+kudeykDKXuklDHux6rQFCWktlwwCXyiinbYOAu5bVAigKR9wpX31awwy5Gz5zTI2BAS861WKwmo1jNR1kT0grJR7qt7QIM4qAvegPr1zizVtzi+NoILanVdggrXFtPjEN5DVteFm5+1RZAzFQhnguy87d1feGpYh7X7Ke18TPBcFloSWst87ucy2MtaC4ijflkkd8d8IgAQQkQEVFCIzyl4B0Qg+oDdMGI/jtiNA672IwZHGAjYBS9Jx0SIjhA9YfDA6EWAxeAxDkE47DSaawxDjUQkAFlhH8cQKMcRmIR+qGhy85JucDhe4+5whTEE3N3f43g84v7+IJQ/gLSXhToo5QXH40E306BWaQY4qJasBL1Bxh8kFE+AAykXkUWSMVPNKQNpaQqLdvHUFr3x/WlwSeYCdpLcWud0B/XkZAm2yrTAssEYTZCMS1AGg6hcg4zT6VD1PCnEzNiNo9B0jWO1NlLKlXsuxKE66b1zGBXSDT7AeYdxvxPqJ7L9W/xqh8NBxkA30NPphKT+M4sUXeYJh/v7akX0lEdEjLIIJyIKYxhEqM3zjCUt1e/JeVJmBqCqp0qga4EvTXCxkvuWagFLHhPDe42W02w728CJWrCIGD9dxCQMmVCy39SS08cxYr/f4SplTDljiBFeI1mXJEogQZKovSOkIlGw10NAWHxVWCyvKmuiPkN5B0kmUwt1F8FlsF0vuExYmQVkvIeNMFuCiJA0h4uMHSer4AK8N2LjLkiDAGGeV8VHA2/AqPuypQ38yAsuQJmv3Xozfwjy2wqx7bX687ffVYuuvn+qyLl8Xfn3nAj3oXvKB49bZ/abx/Lttm0xmK/oBnHehxL5RMS6IcnEW5JAHJJ5L41zzkmZkmmqBJ9Xuz2Ck4g8uZ8Q0VKWYoO74DF4sWiCd9jvdtgPA4YYMESBh8QIWsCLlK333iIWC0ghtQDUoDxHWs+KgN3gAXi1UgjP9hEfPL/Ch+89x2kSBoPXr+7w6vUrHI4H3N8dcZomKZQIxmQbZ0nIeanci4N3lTU9eod5Fl9TCAE7jUB0F8bI0pAfGRn1bQHsirL5iiAFipRPUQshZ4n0BDGmk5aaV+e6KQ+seWgyVgum0wHH+3vc390qrMPwgfDhh88F4nVe0gz2uyqk9lc7xBARfax+S+c0+tOCcLwDYgST+jtIrE/vQy3bUTqBa/44oKVUGJTlnNT4qnOwCMvGNE24ffmqg6kzsrKTn05HTMcjlpxQFqOBkvkrwSEyd4y30TgJSykSkTcMSj7bra2+KKiTSFDnPOZlapaYp1XAjSMzYxXWY4kufXZ9jSVLJOs4RrCPKORxOs011yqlBArCEXh/fwfyYvV6HzAMYw2cWFc3TiAl2Z0nSRJfJkkKl7IoQpnFnGW+cMbhcIebmyvknEBkRVS14jO1MPiUZhVcJK4CAD4Qrq/3WmalIOdUk87HYcBuFIiYdK/IOlYMpd76UY4qNGillSB3dZOnC5v7+Sb/8KZ/6TdvhAr1nkXfbyXa20B5l+55+f6Xr7uFAvu/L8Ga9gxbgWUv54S3jzJWUUlEkqwrWngre7AsJ6WAmrFTItughKVcMnJyqm1HsCegODjH8ACikzIlDgUoSWpKOaFcokLi9ymEAodMALw4fanX6pS81hSLECwEQ6C6QAAFB7cfsYsB8zgiOof9fsRpmnB7e4+721upPDvPmKYDcl4kNygGWJmRo5Zvj8GDXRSfglI3JdX6W4RWV/eoCGcgG+xEXeSXDJL4eyB+BlCDbYqWlgGztkM3ryyQYSkZyDoujoAhiMJRoLlOCWkWYWaKgSEEwTkMcZAkYifBMMFKVezEqoo+opaF0Twhr4VCXQhACGASmNIi8UCA9yQWo27+LSBANk2bl2lJNTG9lBYwkdVvQkSg91GDLkqRCtrTNEmdp2FQ6FeCbHTSIynsKUqP1aGSf01omNUllQTEYilZIUWlurI4PCHg1ZIqdWy4IhYOToM/hAYsOpnbwTvE4PHs5gYLS95gTlL1O+eM6XgC7U1AUa1zFWPAHKzdhKubK9wfD5KjaHMmS1qArXOBjAkED0C+H0KAU3/WCrI1iDGy1k6TpP6iuYzmN82FpW9iBGubTUGQ4pda7VuhcgKtLEUflNfxrVX+dnylBRfVf81Ub/+eiReyz3qBpNAXtXMuCYE1tFhPXrXE/mJaC60VuMb2ntfNI4JVnb1474vP8fixtbjqpriaK2vpurX2zoWXtoWbtk9OuN6cD/AxaFE7j2PqSiGobygETeTUooVcWLRZ1WgdAcGRlgYXDZXAUhOKGMxOCVOzRtYJZFh0MxLVBbVAoxGgFjBK0s2SlLaHZNQGRwhaaRmlYL/bYU4Ju2HEGMVJ/vr1a0ynA9JcMHHGPF1JBBwzJjAIIxwN4CAh85aPk9UiZDIIxcagYxIhgfZofUK1tkSpcA324g3ka5KZWfqVAM7qpyGBMKN3cBwwaxAKZ02QBjAoa74J4ugkzNo4IaXwtEQRDlEKFho0u6Im07XnSeezIxQrHcIGoWrpGC+lbsx3ZYEsDBY/5ZCr9WV1p8CslaQlhSGEUKFNIfA9VQqpIXiJGp0jTiRKjNWMyrnvw7ZngIVgNykk3pegBwRlMD+NjaH4EBVK5G5cGToTTZkWHcqTq4hC8A7XV9c4LQlTygg+I5FYRPOSEIdQ/ZgWVBNDhKdJ/WAe407yF618jSevkbuSl2gKZozicDa2m+BlvQp0KP7dXHIVXACkZpwqD2Lt+frcIvwDnA+axymCznsvc09rjzXBpX5XLm3MjU3mHY+vtOBydWJpckYnU8zikr9t823+AQCyGbhmKb35INsa1x9rCXHLvmnCxeknBjVYCQ7Za/ocEAuKINdKkJuD0973hJbrV292X5oM5mS2vbEvgdI0/fpJt2BLUWdsSfp7D4k2lI0xxgHMwIEP2F9f4/rmBofb17h7+YVo6vsBz64H3FxFXO0CogOCE+jiWpNIY/DYxYjdENQCCJLs670IGc6gkoQfURMxC0vAmKNQrb9RNy4HhrMyLACK1gM0YdHT0ex2Owy7PUIYsA8ehQN2PiCC8Hy/w/F0xKvrEV+MvrIYHG9fAfMEHndw5UoEa8oYfEAcB4VdhOXbwyN6ghGp1pBjOOHtdQ7kxR9gjORiqRRxyDuCZwffBQqgdJaxAxJneGL4IHNkIYFus2reNbFVyXOZhY6INFpsCFrCwnnsB6VhsgCYInNWCnHqBgyAiuaqbSZPyhmOAXYO2blaeBRwcEF9d7ppSXqFRLt5g5TyAs7qE2GGQ2MMicGDS6hJwh6AFTLNaUHIQSNRfSWALSnj7v4Wx+MBw3hUiyBhSTPyLOkC7B2AKFZXypV7LysxrDGlj/uh+nob6zrq2pIAT8krtMAbCRVRGjMH7McB+3mQ4KTrDDpN4GnGAYxxkMjK+/m+8g6KH+gaQxiFpDq/qtZXyaxrNGGaEna7HUoB5lng7cIZjljyx6YJS15QckLwg+xMOYE5gjwhDrEqBdERRnLqD05YjifEqxsMfsBuvMKUMsgHuGFAJhJG+FwwFOUiZQCFwFn4CksR9UQCdrMGhjy0Vz3t+EoLLiLUnB/7TzYus7rWQqT9vT3WHXgZKuyu2TdAr181uLpBng/LNpWUqOepO793/9lTDhNKQA8NNqF1fu7qaWq7z+9n5Lv9c5rCIDCC8xHPbp5hPh5wu9tjtxuRHYDiNTNftMxdCMKG4YUaJ3iJTGNm0U/1+dM8g0IQPwSLk7oorZEl1abCGMcrYc7wETWwrpZVSZrQyfBRYUpWKEU1v+P9EaBXUm+LPIbdKGHOLARQgyc8u9rhavyWQIanCceDbCrLPOEeWvBvlzBEYX4QclzGos52gpTmod5CUSHFqu0zxFI06NupACOItDAeRgAaot+c6WlepFCv3teUtlIWFN2Il2URcmLIecNuL+c5CZiJXnxz0XsAWn+LCY4kaAG5YJ5mWEVlF0SpkITsjiGcHHzOQPBg71HM3+YKiH1lll+gkWYsQqtqbyVLSoKWkJFAB/FPWU6XOf7N4nIuCQ1UiEjjKOwupt0H40+UaEirYOAm0mAOmfehKokKe/YWJbV13QIyGKk0pdf6vK6hGkSj32uun0TMSoDMED2mRSsfqIB2YKlQ0JEXS85cVus5YD/ucLXb4+Wr13J/J0EQVn3YrDDbAzIkHWKe54pGlMJI0yTlolTgmFXrGEBO2AWP0REoJ1BJIJJoUxHSjOl0qsVHSWmvJHJVSpjEGGstvbrNWeRrYeT/pxSS/L/7qNBgtbA66wodlLgRBlvor4KLF85r529vfkm4cBUQrEKpXq/ejp6kaDzsl2sPZs9wfk5P2NuElyy+9vfbHuv+cCtI1hFh3O0wjqNyDgZQyMJqrhuxJxIHuOb8CKO7tpBbaHfJhq9bnpH4lqTCcmpOfQa8y3DwNZKOASlZzw6lkLyY4NkLPMEEx8qdCCDnWf0r4pDPOQv0qeHwxEVymsadbDghglhYrlOW3J7kRKDOGqQSgmw6uTASZXifEVmu5UzoN12qG49+HHUj7zj+6pjqxrniikOnMJWiMJH4GzhnqX9m4+A9fAhGMC++LC8RgkS6oavAl+g4sfLm6aTjwwILW80m71QQO6m1lItUWg4B7L0INudA1KAikBPBCHX6y66m1mhToBwRCjk4FRRGy2S+seab86C6mxWUoudAQr6ZWXyqKUmNNS0TY/4XiVo0dhYP0gRocmJBWTDBKgWhgxrXS7ApD23spF1eIzHtJVZsVz2ARbjFEFDYODNztf6crqFxGNo6dE7QHKLK/l+KBqHECHBRSqyM6Jtaz9mElShNHrJGgyMM3sFrKaBUMoJByURYwEglYTlphGenkovg8lo5QOYHtW5BU/Jbisi7HF9pweXIHMQ9HLgWQo6aj6g/B1CtCA7i/H5EUHTHSrjRZZRW2rDNk7rsP7t43e6z7ffNl+fOrtlbh0K9YkLKrLBLUOHTDssBytmDCykk6sGsFWFZGALuh13NoheNVSwrRwI37YYBAQTPQJ4XcIwoBBTnMKdFkzEJV1dXwryQEm7vXmM+TaoZe3CSTcb7gBIYS84ojpQ9QQpRzvNJGdMhzONM4mtzDqMXOh3nHfb7GyzKb3d/f4v7uztNwHRwXmDSYRgUzvIY4wi6DihXYvXdHw5CAQWWkh9aydcWPTFAhbCj0fZ/hUo8mBjOcVUCZG+TDZEJ4GCKCTTB8+FxYy6VicCq3grkVuCchGJ70mRhjUYDQRO3nSJbCmCXIkrCaapktcm4/7RmVIyx+jSb8HLwPgIUACcWF7Q+GOkz16COOICcRPblXmB7CWqQ4A6tBQaGI9Xc9VnneULRMGspjZIqz1/OS1v/6rchksABi4AlQk2hKKXgdDoKabIP1b8nQUfynERUYVarLRXDqMqAQ/Za48ssLmc+YSfCWXP9vDNUCCBIXS+vltRcZnBmgSXHUYTjqcATMJ+OeJUWOMh83O+vMI53CDHAzQ65ZCnrUgqW0wn3x4NW+R7V6mbMKYFcxJ68RIEaSsVAZAmfH0PALgQ83+9r2saclVOSGZwSTmkCLwsmLSXjYciTUFeFQZK3yTuQJ/SeDJnj5vh6uz2oP77SgssmpwfByCHPhFO1yM5ZIuz8/lqX3usvQP0C6z59e/vlYSH2VAF26fPtb54SDn/pPr1Fap/VZM3qtVPhRA7BCfyBxSNE0RZDcKIpMxDJYQgjxmGH/W6HARLY4JRxAqWAMxD9iOBE68vTgpwXzPOE1y9eaaCAR/EOJcl4ojC0BBAMa7NF4pjA5JUqSarLSn6YQwiALyLEyA2gkuC8w/P3PkTOC9I84/7+NaajCKGjO8D7AcMwYhj2GG6uMVvS9U5SAjgXHO7uAYbmp+3gNUQa7FBYWO2993DkLWlKgyiklIbAUs2vmWE8h8pFB1HW2DXKLkCgs1zEqjJaHi4C8QWt8RR9aGH5GuRgRp/T1IRcMpZ5xjKdsEwzjvcHzFoR2bgEDY4SlhH5/aAURN4H+Dggxj2cE+GVzNwgJ9yJ+ro/TAprEsYQxQJ2BBcD/BBEqJGTiFO1SHzQEPsiwSLshJWFcwLpJivWVa5zNs0ixAQFkMKWOSexQiF+51IyOC0Stu+k+KEEzjcaJLte/7cd5hgwpdJU4vqX+uukoOgCLklXkPY/ATEGraiQpa/UPxlCqInzzED0UUrEeGVu1/yvrEnDzAJdC6zLAJOyeBBiHDAOY4XwQhAS4IyC6Aj7GDEGj10MeG+/E7Z+ZlA6CqJBhDh4eAw4zoQwM47TLFGRLFGj7BgUHdgDxTGK4N91HxGoVSKPze/7LsdXXHA1SGHl09oIr3o+1vAhLgii9fWfABUSqr/hh3VcEk4PCbOtoLajtecyVNhOf7jtF2Ur2zUBC++WiKeA5MSqiUGIWFEamCg+CRJIwqr6AvAEOGpRRuLY1dLzyyxh20vRE0Vkcmah6gkBINHO4RyKWdgkcKyPwkLNZAEv+lBBFmHWNhWp0og4BPgSao4O2GprFSzLSYs5OoTRA6BKY8NOyYVLEYc/CV+fhH4XobTioi+nwlWe1yBL9WdLz1LbrC3gRyC0blwULqwpDDLozVdBVKmYhEVB2gzmmqgrm6n4G1KS/K7T8YjpeMA8TTgdjkjzDLCQGUt2egftagh+KYySdQxzQYZYwOSBTFBaJVknwhgCsFaCBjNKEgZ+JgbPDiENAjH5ABeDwnQOwgEowRGVeYSAzK76Z8BcE5Z7n633DuM41hxDgbgMTk2YT9KH5t+y9BZALbrOeluvD4nKYM22JkM4LFqjLqI2NmJhGVQoe4u33DI9DcySthG8Vvi2OQYls5aaZatyMd3ad0Si2C3i1/TOAyqwLDIUpPMDDMSIXQjKHeqws2R7AjyPsAzCKTMAj0AMR0VTFATyN3Jeck5QFJ3XTJ1zgs0EIFHg3vH4SgsuUBNeqNZW29T7KDzjru6/X/uKzt9fuN2DUKFoO8Db+I96a8b+vnT/R/1dm++37Bj9tZ8KFfYW1/lhQS6s0E9W7rqA2Qk+PoYg1EgJ4idR6wiFwSnDR7F8huARHEtEHInmnM0aSAXz8YR5XuAz4NQyYWbwwqDBYYg7yRtzAfABxWtovvNAytjt93AxIJvmrrYiaRRUThIBl4okZ5IbZIGTQIj7OAgF0TThxf0r5DljmRcMN0I5RCD1C3nRLhODl4RCDhwXAGI5uFxAWep/FRWgzmluFRURvMQaZVoEXtLSEGyRZR1riRQYLDWHqQYiFCskqcpbCJpasE6CzgwpjFkKCmcRHMsirBWvb3E4HLDME9KsWr/zGEZJFHfkQEzq/8oie0iSUJ1PcC6hFEmCdiGiOEKIAwYVGt4FRE/wcdAggILT6YA0T5iTVPR1g7BzhDhgUBYOYY0QGFiCHIzBhACvVrv59pQ9vk9sBhhhiJWhAya4ckJKWoqHzd8kELhAqQo1OmGtEM6+XFksAC2GWgTCrHArZ4A1TB4kAQwQuDAGj904YNCgJacBITEEACRBKI4QgnD7HU7SzlwyHEl0q9A2iXAZQsCkxVMt6nSMQw2AIHIYvKyR4CSHLPgA5owheJAnjMTYaX5jdMAuEG72Upkh7YVoeEkZd6cToguYg8MuesynEwjCrBFiqJGjxQGFJF05cUHU6IyWJODg+N2TkL/SgsuczdWX1eTJIxZJ7+N6OlS4DvdoRw8V2vUes764qlQPHw9ZUdvv3uQzu2R1te/Pm9EL0u09nHOAau+cS8vRYLNaIA5iaGXZIoEI0Qe8//w9/Pgn38I33v8Az3cRey9+C0oz8nQA0ox5XnD44jNJ1mRgOZ7wg08/w4uXr/Dq9SssC0Dksb8e8OzqPTx/731885NPMDx/hqlkHJcFh2XChx9+iBgC/rf/9X9FKhl+iLj55od4/v77uL+7w+/+1/+K1y9ewsNh8BEfvvc+PvzgA9xcX4NQcLh9BccZHzy/wk/+3m/j5nqP5zfX+PEf/z1YcsEpJcwgnCZJTDaiWmQGMnB//xp3JeMLYiBnjAobPn92g+tnz3B1fY399TWG/R5uGNTnA7BD1WqdQizHw6FtwBqYQES1Mq7NJSJj3l+qw5uIKn1WbyFJjs2CsswC2y0zJmWGn+cJ0+Eomx0zxmA5XsIGfjjN1fIIw06ES3DICZi5wIwgKeHu4EKR5wkLwjRrHpNEMEaCWqLyDNEFuAC4Qsrof0LKBRQchnHUfrxGGEZleGHkNFXhDWPoJ0YcPOIQQHCViSLnDB+0ECJrXbj5JNcpC3JipYkSiLYlQAv8ahGhVtYeQBWCxnfo0Nw2omzIX0UVRY+26AjQfC6Nuk0F3mtNrgzlg/TiH3SEXAqO8wQaPV69fiVpEkPUNSoCy0PmQZkX8T1CcqeGECrZraWLcE4oaYHfiV84cQGnBPIkgS6csIsOz693GIcblJKwLAm39wcsAJgcshOy4M9f3+Lz2wNOiwRPzTkhxIjEDCoZXq35YLlxFNTa6qqZv+XxlRZcLaKnf+k3tBZQwCXL6ilQoThYz87trbZL8oHaH1tTvn+CBr09BNdtrK0Wa3H2TP3f29B2s7aa1YV63kO/eeiwYIwqGHWRB7W4jAIJTjSrwUo07HbYRY/RE7yyO5AuLs4L0uEoVW8T4+UXL/DpD17i1es7nE4T9vsddmPE9X6PD957D++//z4+eP99hGfP8OpwwO1pwm//zu/g98eAb37jG/joxz7G9fNnuPrgfXzjf/jvwfOCz77/fdydjrh+9hyBPKILOB2OmAGcSsE+BlzdPINHQQiEly9egXPC/uNviA9iHzAS4Yu7A2hJFdIzKE8K9GX1Y2RwSghcULwDlQwsC8o0oQwROQSxiojAThPNnMCP5DR/zWe4Qloio3a6BHmUriyFCc9OkJFCi8LmINAYZ2M5T+C0IC/iz5uORxVckttk68qTtosIMIgPhEwOzgUUF1F8BPlBogjJoSjbBjkP8h5zkoKfSwHmNEuirXNIpH5OiMVdlByZSwJSkrD4UsAJyJwxLRPKPGO8ukaMI4i8qEsGydmkrPO4Fey0vaBYORnlJxQr2yMOO9w8E7Fj87GUxsCfcyOJ7deII6r1yEplguC2NmzJUsvzLErabDl1RJAQ+YGQkgQT+QKBwFVhYPObKSVbSgnzsiBAFUcigRFzAWmZHg8JpqCSMQbxQXv9vfmucgGiJxArJC3OY6GI8oT9bsCzmz2udzsQSerF9dUOS2EUcsgUcNIKBHNilFmep0a7ckZhp2wipY5PXTNv2H8fO77SgmttbfURd+2crYBa7ckX+u1806b6OrN0yKLrziG6s5CNM7nXAb/8sBW1CpSoAvRpA97aRfV9lX8rCPHN8ObKKd29J9swSl4JLqkNJcwR0QcMccBuiBg8YQAEH0eBkyxFCQ44TUjTguWU8IPv/wCffXHA3f2CGB2eP7/Be89v8PzZe/jWN7+F5++9j/c+/Ah8fY0ZhPLqFX7r//g/8P7H38A3vv0J/rv/1+/HT/z+n8Q3fuL34OP/z/8b3/ut38LNf/kOTtOEZ/sbjGGAh8P//p9/S/o4BOxvrvFsDIhglNM9Xv7geyh5wQcfvIfEGftxj+ura9ymDLcsoMXV/ivKko1srwxehHMulILRObhSwPMCXhawn0U7J5KoRw2+IEfqu3DKHq6+sMRVF7LIPmOXMMFVZ0bVUgS+kk2pgFOrXow0KxP7hOl0kgTVeQFpVJsjBweHXAB2kqcnU1Uj/vyA7CMoDHBxB3Ya9k4Bw9W++h/z6ShcdqVgWSaknJHIIQHwzPBgjF5yzrLx6BUhLiaSROwyC83Q6f4OeUkY93uEYawaPFVWeAAgUR5YilzGONY5nBU6s74DAOcFlry+uhI4LiXlIBTrZ6kWb3M9ALr3QOZ6Yf1XE6pLQa2f1rslmEVAL/OM4/FUSZG9DxgJWJaCwoTCDpmk/VAuRHJeIUyjn0pgWGJzkPOy+Jo8EQJDLeyM/RCx3+8RQ8B8miCBTRkzd4LLQaI0iwOxkyTuqx3ee/4M711fSfI3M47TCdOSkEFI8FhYwIbDacbp7qjCXIW/vTqFQlFVzVP8URVcxiaB3o+lPBokWCoAmP/L/ujhvzfCcbgsUOq56IUX0FtObwfnXbh3byG+oS+ecu23+V2zXtffeSehv86SDknrEeWM0TtERyDOAlN5iVraDSOudntc7fbYocAvE0qasRwPmA/34DSDlwnLfMJnn36Gzz79Aj7ukAojjhH/4//4E/jWJ9/EfrcDsRQH/PyLL/Dpi9f4nRcvMHvCgRm/8zrj/U9fgK+/i6udx50n7D7/DIff/E38z//z/4LD61t8+Ow5/tyf/v/i409+DN/88Jv4+Cd+EsfDAdPxhHR/i3T/GrkseO+D95HnA0pJ+O53v4v3jgd8/O0fx4998BH+wP/0P+H73/8Un336A3z6u0ecphnL6YQ8z0jzCcgZrmTk01HqPA0ReVoQLAh6nlHIwSiaSpTy9kxAngsySSRcdF6od4oGaFgwgwlJg7Nyq4lWNF/LbHyD0qy4pvwuq6BSItZFiFgHF+AtHwsS7GJBL4kJKUQUcihwuEuy+bllwZAC4hCUSogwZVerAIS4R1QhNN/fyfPkAp6OEhCSM6bTDE8Sxyckr0nqjnlSRg0N8y4Fx9cvcbq/hYuDXj9KRCtJCkguRcPyg6ZviAUpECFJ7SiNPnQKraWUkJZJ6Is0/00nvPRht47qezJ2eF69DCtUNQQggd4AQnYCAZZSMM0TCut+pQENNdApSnDTvCw4HA7/f/b+JVaWbUvTAr8x5zQzd1+P/Tjn3nvuIyKfKCqhyGyAhGhUCQiUGZElGmR2UsoGJAha2aKBBL0USHRogVRktRANaNMEUUKhrEYK8SgqUZJUEUEQGRE3btx7ztl7r73Wcjebr2qMMaeZr732PnufR0ScG9jROnstd3N3c7Np4/GPf/yjz8lKOTPsdhTLAofJc3V1xTSMpNNMjglBZ5aNQ0ByJJH55KNnPLm+wjvHb/7mb7IbB/28LIxS8A52h4klz9r8XSIfPbnmRz/4hF/44Q/57kfPcU5VUW5vX3Nze0/MhYSwO1whLnB/WrhZksm/bWroLWHvWW9WVmf9EDbAm9u32nF1KM76Oc8gNPuxTq23Qmrt97c5sYdbz+D6v5xdAcWb25z2Ny9Naz6tJW8ee0iiWHHw/pmbi/8Q+nwTAn037Pd2FuHqtOyRs9d3MMayrMYErAb35JxwFIUmfFBlgWp0ae/wIpqJlNSbXLGeoZwWXr56yeu7I6elMIjJ5XjHMB0Ydgf8MHB/d8erF6+4O868PkVeu0AaAkcnHGvlhOMonpwq//tPfsbpt3/Mr//27/Abv/Upyxz56YtI+LX/F8+vn/D06gn/yJ/+0zy5uuJiN7G7vuT5D77DYXTspBBC5XT7mrKcePHiJdP+guunz3h69ZTLyys1qEviZ0Upyfe3M96i6uV4Rz7eq+TOfgKUzVdKoqaMTKoU4kUQi7wbHFRRbbyadZ20ZmIjIxqbbx0o2Jh2tdReZ92ug1prV+VozdlgWnY52qBPDcIM6aICqcJcMnMu3KXEXSocY+JuiRxTUecrnmHc452yMZ1XVt44jlxdXXJxccFuN3Gx23EYByYfrB2hkq3BuUuWWZNsqdpnVbPOsarWRB10fLEeX4wsJZOjh3ECt0K24zQZ9FhAvEJV5ry8DzQ2bEoqI9bV9JumlTTt0IrzgoheExEVmm3nda2rK5RaxZmSf1bSCED1PQNuweAQ1Knf35+IsRALhKBTvksQrf2N6oyPp5Nl5dpTdtgfGAcluqQY8a2+Ze0OfVKBAzcG8BOuJHbBaZ1w8uwnlZYKUgi1sV4zMgRcLUzBMQ3BZNgGxmnSZuZacEG/57wkYq6kGnj+9Cnf/eiO3/7ZCzJia41ev4QVHci16pRn55S09SW3b7njAmg0500G1ZE8ObuR3zDw7wEbyoO/9V97gTRAcOt03vJmmw9SAyF27OdO6yxTehuuufkujzmtx/5uDunN2tcHLJ66fttqhfUmzqqyPEkla4JG39UaRFWc1VlR2JQcTCqmNimnFLm9veV4WohFKEkL+94L+IFchTllXt8f+b2ffcbL17d8/voeefoxeTcxe0dynlk8x+qYl8jv3/yMT1+84P/z9/8BmR25DLy+Wfgf/v7/wuQDl7sDscA/8qf+BMP3vsPusOfp977D04sdY03c37zgtXccbyq3n7/k9vaW169ec/WdzG5SRmNZIvf3t5xOR1LVrCHmyO39PcSZfZ5QsKR2WnBTv+jyZErzUw3Ctl8Fbe4uNFHiBv+1Sb86H8115Yde36JpTbbPag7NaOM9IDGh5Nqk0zC9PYV7lly4WyJ3MfJynnl5iryeZ14ej9yeMgVTtXAjvYRhbMhpmnj69AkXFweuLi54dn3Nd58942q/42Ia2clAlkiVjHcDtSYqpY88AW17cNWrEzJyhdggz1yKsgG9riuc3VfiqOOgMBmihraoJXUu2AQD64Fq4s7OlD+c6/dWQ0+cUxmrfg9tz6mRZSraXF+Kw0klC3bdZFN7M5V8dMLxNIzUck/OycgYojT14NRJDyOpZGvnMCp+COx2e8ZBp4DHeUHGUdeSU0URZQUKnswgHhccHnVGF1PgYgpMo1cFlRqoOZuiS2WcBgJVe7nGwdiH3pi6GnCHMbAsGecjfslkN/L0+pqPnx+ZQlDYvhFl2j+WMbdZbEVHZ1K/Qs71rXZcItp8DE1m1xhVPSN6zJi//b22zmCbdbzzGL7cob/7PR9kVl/uPYwae+ZUHx9t8kWwYjse5xwuZxWxtShKxW8T5MQgjsl79uPAGBxSVK1hN04IOqXW10RNMyXNkBfm0z1xPrEsJ45zJFNxg+fzVyeGSesP90vi13/zt5hPR25e3fDZyzvmVEgCyykifqSGkf3Tp9wV4Xdf3ZPmO/6nv/+/8tmLV2TgL//f/q9IrfzW//abDAK7YWQ3jPzPv/lbuMMBORwI+x3/39/6hxwGx5/85DuMF5dcO2G3n5AwkHLmH/7Df8jF04/YXVwwThM//MVfIOYF5x3zfOKnv/e73L56xetXL/jhdz/m6uk1l0+vKQJuCAy7CRlcr3moYK5B2xbxV6z51QgKvjfE1G4HtzWuOC8rmzD4fo1LyqbybSM4SiXXaiNNlKU4TRPIQE2FmjXPSLkQl8SnL1/yO5+/5C4lZifcO090nrK/YKkzuIEqnhevj7x+fcvxeOJ4PPGP/qN/jvHyCadh4n/4f/89ghOeXl/zZLfjT3z/E370yff44bNnHIJjFyamsIO8UNOCuEo5Wg9fmpm863W74+mWYdRJzBKc1VcLKaqzxGj/JS4muWaFA7EZWlj7gvdUtDm7yw7ZRWgCvts67nZ7rAFZA+dVJ9XZZ/dAxSb+VqmW9Wlm6tsxiaq+xGj1UZq/UxJMpeJtUvH+sFf1mFz4/PPP+f4nn7DbTRwHTxBhNw5cH3bE+zvIjiCZJxcTTy8mLi72fPTkgvmkbMzr3cjt61dQK7th4OPra3bjyH4a+e7Taw7jgMK3aIO318LI7rDHDyPjWDi4ERcmKp5nV/8rL5fIsbVvPHoOte0j16zjib7k9u12XLCm4KwZ1zaZerPO1P52m/0bsLj5qRso8A/q+zx2rGc9+OdZ4GNEEjGIsrZMtNU63gMefJiVPTyms2xNdBE7M7OQGYdAnkb244h3DoLObhrHkSFoE+wgivWr4K2KxZZaiVFhhJgKp7mSgBQz6e7ET37/Uy4OE7k6jjEzHC44HC7YPX3G70d4XSq3BXbPvsPJTfz0duYnv/tjPjueOKKx7sXHn3C6P/Lp7QkpmV/84VM+/tGP+N/+1/8f49PnfPwn/xQfffyc+89+gitRiQe7HaMTplGJCTcvXnJzc8OPf/u3+Pi73+PJ06c4OWif0zjgg9dJy0CYJi6fPuXiyVP2V9cM04AbBxg8NThVABElBG9XXtu8ZS9aa9LovVrRWygmRKsZa0qLFerdCiW2zMUyO+89YfRIVWXy5XRkOR451TuFanMklsjrmztujydOKRGr8MNf+BHs9tT9gdM48nqJfH5/ZLpXx1WqkH76Ka9iIufKs+cf8X/5i3+J7//g+6S48OMXL7m9ecXrnEn396Tf+wmf3dzw2fPnPD3suNqNfHS953I3MHpHOFySneCWEzI7pYDXapOkFSL0pTBK6NMTaM24VjPSnqmmn4jWy5zWjVQezkaSVMEVXcEUb7BewHl7UV17wFoG9pjj0q324MNVZyzD5uh0gnUsdBWMGKOx7db3c94TrEzWalopJiSowx38Kj3VGn+9t5lp4wA5EwbP5cWeu6hqF0E8h11gN3p2g+MwBZa715ALh8OO+xuFoPdj4OPnT7k67Lnc7/no6VMu9ntGbxPHvepQIpVht0N8xkmCMHGd4eOnhaeXlxxvbjjNi6nhZFU3yWXjaex8Ush/XB0XrA6rRUwt+jnLoHgzi5I3TIU9I+a0ZH3+i0gWX/e2ZSLJg+OwX96SHb7xTrxPCfQhpLg+/vZ9hVYSMAy7Vh1J4gPBCVJUISD0gX0toLB8oirDTanHlZRV9qiaI6sYey4m7u6O7KYJ50fG3YHD/oLp6pr98+/w6acvIaqG3OGJGr3jsvDifiGJqgXkXHh1P3O8PfLq/sTFbsLtDuyun1LHHcPlFYcnz9hfPyGe7nDxpGy5cWeZJuz2e4539ziB+9evOe4PjCFow3TKHRIBjGI9MkwTYZrw44AbBo30xejvTnSchlvPc4NfaTCVoHqGtckPGXvOYMHGGmsDPZtcVDUtuAZtiTmuYRitt8sU2XMhzQuJzJILyxI5HpVskoDpcMnHn3zCeP0Ed3XNq1oZbu+YX7wk7wtFPCnD/rTgPntJnSMyjiTnyM7jdjsOT56wlEyaZwpwFyP59pZBhGXecT+NHE+v+ej6ksNu4rAfAaH6AZnoLQaY8kjNCjmFAE4CUr05cYPvalHOi2tlAvo1NK/Wf5pTk4pOITBBXe+1Ti3lHDZ8VO6pw+eV1QxpnYcNjF5NoaRkJSfklHpzeS1K9HCuNbRLb3Modhze4MycEzmm3hyuNVBvuojSm5uX4EE8g1Rt9PfgRWHAwes8uovdxK3pe15MI08vL7i6uODyoBT4aRg6c7PVAcVBYEJIGnWFwG6Cy4sLri8v+fz+HplP9BaF1vPJJgOrXQ/mC23T27ZvtePqEBbNeQGyqXk1w39m6Nu4wQ0k9+Bn+/4fciwPWYV/0NvqjAWxuso7937w9R5mWm9PN5WY4b0gWVlqnsx+nFiCM4MYVbtuVOVqncybWOJCSTMxzhyPxy56mlLW5tQBxjExpEQyFKcUcH7g4vKSj773ffbXT6nDyCyB008+RYaB68Ml++9+h89uXnIfI4cnz3D7A6d55vbmNf/PX/s7lBg5vr7hF//kX+Dw9BklDHz3R7/A7vopJYwUH5gurgl5x7AbtY8IIc0zzjkury5UXTvB8dUrlvsj7rDjeDxyf3vHfJoZ/QC7HXX0lIrOD6uFffA6rbkV9U1BO4yqRI4o9bsrZNRV6qmUQo1ZlcJLIaeVBp9TVi06v8oR9ddU7a1rAsnj0OoWjpIiZVzIYeCU77i9vePm1Q33xxPj/sD14ZIn3/uEH/7ZP8vu2TPc1RX/82//Dp/f35Nz5vrJFXOqnJbM9ZMn7A4Hbm7v+P1Pf8b//f/xt3n69Cm/9Eu/xMVhz0fhO5zu77ja7QlFGZcxF26OR25ev+J/+eynfPf5E55cXfD8+ROeXl5wsd9xebgkjDtyXJSxeX9HXo5ITHgKbie4oOSJppBfpEJxuMEmLjuDYAVKyUixWqtpO7YV7lUBF6mOZJJPK9JQ3nBaW2TioYahWLGw1TLp9kgfb2od2dT7c4ZlnhnHPQRHOh6JVZXha82kWM1xV26WheV4Isekqhr3t+Q04qQyjIHdNLCbRvJuwFXH5IXdMCAlU+LMFDxPry/x3vPxR88hRRzw5OKCj58+5WK3YzeO7IbA5NXJYULk4rRZmgDZJVXgxzFOI9dXwve/910+v7/j5fGe1CK5xrTM1eaYaRDmHtibD92+5Y7rQXbyRfWo96wbbRmG33Sm9U46/FfBKe27bp3pFg4UwYqo55+9/Xd7PG3WU85JCRlVb6YSI+TYi8KkyPH2FkEVxA+HPcE7Ylw41og73cDpnnQ66vTVk/azjGHi2ZNn5HjDzasTKRurkErOC5dXl3zvk0/43vd/SBbhmAqv5oU//YMf8On9PS/nBU73XASPv7piGkdevb6hCPwjv/R/4td/4zcoCa4/es7h6pI5Rn726af8hX/sH+NP/PAXeXb5lClM7A4FiTPLcmSogogKx55iJs+JukTGMFDywmmZufnsM+tRWggI+93O1Lwry7zoz5JIex2EKGEghGFl4LlV9qaWYvO59MIVY1yWksmxjT6vJjTbIllUYWEjwV1r7Urm06ijZvb7C6QWYkwc72duX75iPh5Z5hmqME4jF1eX7PYXliVOml3e3ZKcMNTKTuByCFyNI8f7I1PQmUtyeaD8wg/57tMn3B3vldm3m7jcBZ5eXypb8HLP5agw8i4Expw43rzk/tVLlpT4vZ/+lJ997tj//sjT60uuLy959uSa59fXjCEQ3EAUhw8DvohNAFClkBACUoqOIvFO5aQaGSInq3y7HshVI2HkZCM5RAO9Vg8Uq3U9mmlZoOzsOrWsqWyCxN4Ybq9TebCWkuvnORGGoIEaojKQh4sDucDr+3tqXAjBcXV1xe3trX6XFvTUog3aeHKMRBQyfrK7Zh88oeocuUE80+AZnAYw0zjy/e99T2n1PvDs6TOu9xdIKexD4PriUuFaHbGgsli1OXcB8eCtcb4K3mdVDHH6Xb7znedcf/pTplefd9RkU9ig1pZJFkRWJf0vs327HVf7aaWojfPagF8PzP8WYnv46Bd83tkLvj6H9j5ahR8KVz4ECR8jZ7wdImznaJt5SUNj7ael/0rWGAffWYNxWTpzSqm7issvpRDiQo2L6cMlQ2VthIhTmRsfPLLkHq06UaM/jgP73UQslVQjvhau9xP384nbpI5rN45Mu4nLiwNDUJmq733/B5SUOR7vqTkqLb9kXC18/7vf4eOnT3myvyBgNOYCKSZc1CbiPEdub7XnLJ2ORNMzLBVO9wsu6OiW3TASQ6AkTzK4qOZKSeqCvVONONdmmanvR5zBgM1pNVil6e+VTfTarlNt67oajKSzjzgLTkQnTA8j3nudIRYjp+OJ29e3StKw+lAYBqZSyaHihgEXPNSs6vBOiKVSYyTkzA5YUgJUAzLUzPVuZJALLqaAN0X6EDyjYcpD8Fzudzy7vuLJxQU+Rl4H4VXNfLabmI93nE4nTqd7jqd7bl7f8Pr1Dcdnz7nc7zmME64mJqoRMA1mqysTUOy81JIpyZGJuoRq1fqMq9b4asqlJa/1JVHYbSUMPHKv1dYjavdi2fRw9bttnRX2Zia21rzAoHTnyM5mhWUlQqQYtdeJqtOU9V3V5LSWB7Ttoma9h7BM1lVt6h+DJ1AIIgzec9jtuLq8ZDdNprXoub64ZPJBa2MVpnHEo9MCNDDKfTZeh0BboGW9Z+pAK87BxWHHbjcyhMD9nB44poaH0x34V9m+1Y6rQVZtE7RrHHSRdGHRh5nZttb1SN3oXduZA5HHCQ1fdMwfcskeo7i/j/vqt5F59DePb3Xcjzmxc5alDgFsozfEIFkkAxnvKofdDsk6qC8tC3uTeNqbuGrKkZoXSJG8zOQ4g+hk2iqVnFQzLoTAxcXEcb7XCQ8I0+DxUjvcAR5JEdKJywAHyYzxyHJXOIzP2O8vuPj4Ozy9vEDCwPd/9Av82T/xJ7l59ZIf/+5vc/vqJUP1PN3v+OHHH/P958/56OqKuxefEedInmeYF2o8kY53nG5u+OnPPiUe76nLTE4L+92BYZgoGcZxxA8Dg/OcjnckUeHUYEK8JRW8eAY3MPjBVPJV6aCQkdAgbSvEKFugR7u6rh3F1nuTc9KaDn1uVBhG7e1iNTLTNDHa0MG4RObTieP9kRcvXyFFh2ROw46xaoYSY4YGXebEfH/PvETyzWtiGJB5YVczp6zDN0vKcH9kJ0qnvp4Grq6vqcDd3R1uOdlxVq6niR989BGffPwRzDMvdwMXQ+D15z/j888Kd3eJ29s7Xr74rE/7/fjpE55d68/3nj+FIOAqIoVQAUzhfBgMDtS635IzLMKw3+OMYIB4nANXfSd1dGFedQUdFtwa1m37gjxAdt50XGvN66w5uaMWpWtGepum4KRwd3fPONySC9zf3pEcOs8qOErJeKfHXpI6Cu+EHCMlRV0gOSubMgUkT+yHASkKqe6HkWdPnvDxd77D1dU186yTD3bjRLm6ViWXeSFQVW4rq2RZTgs5zjo2BmxIpVsdkhPrxdJa3sV+x2E3Mg2BfD/jfKvXurOfdnq/Cpr1rXZcZ0y7LbR2lhittZovSzF/Z7ajYVT/2C/OjoQvmuC1dbLf1NYcWtu2zqtBg1sHJrI2eIqYggYGQfiB66tLXv/0J8ynIznF/l6lVpY448pCKJGJTCWDqLTQMI6AI2fIfmA4TFw8uaDW3yPOEapwtR8ppzvuX37GzRAQoz4/3w1MoVKOHi4GxmdPODy9ZvfkmsuPrrl/ckX1A4cnT8B7bkPgIi786C/8eb73/Bnfe/6cHzx7ir97zc3tDfn+COmEL4lBIDjH4hwR4fL6Grm8wNXC689fsN8dmHZ73DAw7naUUnj54gU5ad3JYRF5TORlwRdlCvoCkrRugkMNMShWJBVMN05r/aU7pwpqnHImmqhrLqqioaM6CklUXT8XhRVDI4Ogrx+mCR88+92Owzhqn10ufax7XBaFz8yBpoqK/9aMzxWpwmWpSAhcXU3MuXKK2n81p0SuKqF0VRPDOPL9j59x8+oVOVfEwRMH7u41x5qZnGNMiSfTyC/94i/y4vqSu7tbXr16xYsXn3E6HjkdT7z49AV3L275bPoZ99/9iB995znPrg4MkyfZ+a0Ohq52Ad4HY2Rq7cgHzTCqOMRps25wLZNpah21Eyy20Lrus0FnNvJSyj84D0RXRLERO6zeuC0BmANs04wrgVOw+WAiTNNErZFUCvmkk7+1Z9yrMosNB/U2uVonFnuGmhlqYRLHYRpNwQa+993v8id+9It87/uf4EJQTcTWPpGLTjQ4ncine9J8JB0Ty7wQZ48LA2PKlJRxwYrO3unC8EKNulyGQbi6OnB5ceCw31E/f9lFBhobtqEELfByX8HAfbsdlxnf7WKwR3i31T/PMN6o6fBuB7SCAg8+5SE+9yW2LwMLPvo++mZv1Lge7vVYb9fbPnubxalGmzLfgnPshsBnS2RZFlMk0J6a4AVVjV/hhnEYVV2ayDhMgCMXIQN5HBjHgadPr1iOOnH3Yj+Zplohx5nJZHtcEFKBnYOLIHzv42eEw4EwDeyD52q/w4079k+e4MLAcRq5ksKPvv89nl4cuD7sCSnCMiszb4mQFxxFR284TzGNuP3hAi+okQgjOjlbmWil6oyk0+lEU1TwzvVeljZjrDdfWwReW8ZeDDNUGqHVJrVdgObECta3tapmVINddNlZM/Gm1pXbyPc2Ql1UmUMGYdrtwfq8XFhs5IgOe1RPpwoOuWoxXdl6iVIrB6dTpHeD42Ka2E8Tc0wkI0hM06gqDZeXXHhPqQXvPM+vr5mGgYGKS5FQKzvvqReXSMkcxpHDNDE44fb1DTcimpmgU3rn44n7+3t2QdhPl6o64loLvJ23UsnWPoAFs+LM0ZDJUQNN8Spv1Ru8+8RwXfvOMmCx3/ttbUGEsgHbPbOSNNrmRFQdojY2qF5vdTR6rktKgDICp2kiGOQ8jIF5VkWTRsIpTic4U2pXx9gNg+oQDgN7LxwGz85rw7EryepagcvDQacSHA7aopLVceWYVbVFHAWIeaFGhbmbCr6qqhiLtcGe4izzQtVyRFsxxhCYxoFpHMwWazCwlSNTKNfuiz+urMJed6HnVH3xNVXoNxyYjiM1yPDt7/vWhx+85dmpf8/r8Nhuj7Ia33ocbzq2LU297bP9pHMo8Px1j8GcD2uAzTi0txYBVa1TeHYMweYENccVrADtta7khIBOMR6mHTIUkouM40jFkauA15s5LyPL86ec7k7klNmNe6ZxIARBamL0Dj/oWPDoYeeFi9HzJ773EVk8WTyDE3YXB4aLS3bXV4zTnuXywMe7gY+eXTOKEEqhHu/t5qyIFhhwUgkudPki7wOHqysG5xi858nVU47HI/NpZsmZJSXmeeb+/t78jzf8f5VSqrnYT6ZQkKJOr1JNFaNBMCrH1Hq0emnAqNQqj5XX4XxVM/g2o0uc7/WzpiLeByDWauvCK3wmTo1HG0boHGKDI2utuKxtCrlUcldgt34x72EYIQzIuGNOiWTnAiq73cSz5894st8hVdsiLnZ7as7kFEnzidGBDwG/2xNqJe52PL28YBTh5TgyiKx0+KyEhPl04jg46tMrI2N4I7qEXhfMTbFCwLvaG4CbOC1Yb5t4mttTx6Wagq4FHVJwYn10/T5gw9pcb7FO/OgomgWDIjb7S8kJg/eMQddnsfqUOFUaCYOSTIbRIzNQVvX/4oSSkmUqMDjH1X7H9X7HfgxcDIG9F3bB40uCCGEaOYwD14cD+/1E2E0QgtYIUybKAnE1aHUeyNbwXSyb7wo5Vl8t2BBP9PvnlBXS9I7BO2UkTuPGcWn7Qt0IQ1PFlE3W8/qh27facbUIfn2gPf5mP9ebda0HcMDbsquNs2pZTHOYD0uMbVE/pM5u93tY4Wqfu52j1FPqB/s89ro3t0fd4juee3yrZqREdFHWkrUxUlAcPC0M2AiFKqqrh5By4TQvTJd7hsnhvRaexzGwC4FQIFR9zW46aPTllA0WgifHRB4SJRfux3vt8k+Z/eWOy4tLrp884eLykjAMiHeUm8IPPvke3//hD/jko49w44SEQKww7AOQmF9+xnB1TahF+1qO9zpMslTGMFBLUnHWnKglkmohHrXvpdZM8CMXl090RpJzvL55DSOacR11ltVpWdbrgmajcY6kcYCSgKJNvrEy+hFcpUpRJ2bwsRi82Cxi07OsFWquSguPqWvvIaJUenN8UiHHWYc8Vp1OqzJaJy5SIjivYzVOsw63bJ+TLLrO60BKvf4ZJ6pPt/OBIo5UIGY45UjjMVRRNXInwm63g+DZH/Y8e/JUBxpapjAFJW5I3ZGGQbOOnLl5+ZKdN2mnqpnX954/5/6TT0imYl9yAtPc240BP3qm3Z7RhlROu9EajnU8SMsYClXnXXltCejyTj3gdSBBJ2wDtJq5U2PtBXV6Jle03h/tvn5ESaNlbSgz1leD2KsK4O6Hkcv9gbulcBczuSxkPCWp0nqlWhY2MO13pNNCwBFKwDkYpLILnk+eXPH0YsduDEzesXeia/h0x/6w5/nFju9+/JyPn14yuQrLEfxeiRWD4PD6Daq2WDRzUqHDz3GOpBh1fp5zZBwSlArpgvV5lUKtkV3wXB/2PL260Ox3xVfJkkk1kWpiQltkumrJl9i+1Y7rbGuwgHQPg9SHu8hqwzue/SZU+LZNTbn+77FZMl8N3Hv/7W2f88Xo4vs5sDebLLefYS61wVTibGqsDu3L5uC8Vz00vSkyBNdnB3kRPEpgkNDOpbLjMGkiZaUFylAoTptnh3EgDCY9YwoIw2CDCaeJJ9dXhHEE5zku0fqi1PE8MfWLRWzgnxXmXY60gnnJSRlV1UgQDj3GYcJJQHUBzbeIRyR0HQARGMaRE3earVRh2k3sxolhazCVS90lgErNNoyzSRttTrgZPAwWtFhMa17mdKRAdQrnCK4P+WzOR2nxaEF+GDVit4yij0WxZlh6Q2wjhuh1aBlbFY/XOEMnNwcPwSMhkIppIlhztWAwkhn2kq0GFoLVZrxKFznHYb9TkeYSgMJuGkhXl8Q0k7IazpQiOS06FmdwXB527KaDDVwMTJMyJ8U7assUs/YPNnq7jiVpUPeDGpTVHat975YhnN1TWyjQCQ/t7trXVej0dbtn+ngaYwV6cUzjSJJMTZmUdBDokgvzcjIxX33dNIwE0Ynho3hGqRwGz7OrC77z9IrJO/JyZBIU9hs9F/uR/aTi1jkupHkmnk4MQyCja7jkgtPeiqYtvC4yNOvK2WqAWacUIA58MCTBrXagogxVUVKNF9fHRJbWB0dz4NUO4I+543pIZtj2DmwePvv9fRmE21e/8RrLjtpzraj+ZbZ3UeHf+vnv2L5Ie/DhflvI8I3PqdCxfxP93L5XM8rquIpBNGaINwKwqnFo9SlR2LCRQHQsusFlxa+OKxeqr+a0VFbJe9cJeCp3M7Lb7znsdzp/yUbdzEumolT6iyGAwFCDEiiMxNCnAhk01w2MGR+xWhfVhH9roWQLYUw1vJ0HbQBu+D3sp4lp1AF+W+VusYbYavuumNO6nnptrGXv9rBCRY0BJ1YvUOPTjnt9T0z+CWLUCbTeKfSpKg4b1RJzVrWyXi+hOy3vV70/nS8p1GFAwoAfBmK2IdAiFBtH0uofvc5Rk07RdoJ4HZZJRbM0NOgRqQS3R6GoRMqRmNR5xTgTnA05nEYGU0l3Tqck+2AQaKETVGpObQH38y2iDcfinEKLpWjAVdZZZ48iJ/136c7wjf3qeRYmyHrtqS2lQkT1CUccSRySF2JKLEtiWWaTLHS4CsMQCOIYnGMfPJODizHw5OLAs6tLRge3L08MAgRHxXM47MyZC2lZiPOJYVY1F52XZZT9tn7EgjWhtwTWNk+rtWXUavJPwXoIDR0yvc1aitW1NVDLbGHVxr6kQ1DvMFFfuH2rHde7SAwt+xILsR6lwL/Xh7z7cz50sxLy259/K/T5zeRzW2LGQ5LGIzu/8buTZoiFWJQ04L23pth1ZlFTtx7EMZgBpJ6PPxcRsstkySr+WpQ5VauOqhjGQY3UOOK8FpQvwkAYR6Zp12E2j7AbJ5xEKqKq4jnqzbYsSIpIzkqvN2kqQafGClg9KammYIZUFvLgtIYT4yZIKQxhILbIE9T5UU0hfadznwx2QVbVdqXrmd5T0fNXG32wrs6v3eXqp1dBXmGdeVRbGlhs2rFdHh+EnFbYsPiBYdSRI12QPre4+DENvtY0ur6fFw0q/Ah+3OGHHW7aK7GmYgMGMfkkz7SbSMvALEcEmHZawM9RoGg2OPoRCWoctZnV6nxkckkqc5R1dAwl6TRpsKGW5qxcAPGoMKEa+7Fllqayn5I2c7fz2IKwgjJcS2MLboxt+/uh0+rlghYk1M1+bcyMrSfntMfRFah1AynbetDE1VNOs05HXhbmU8I5zzAMeJR8GlzF18phmnh6eeDjJ9dcTiM1LeTlRDBVlOGw4+nHH7GfdoRhYJ5nhrt7vAiTC30aQBVdU6AOvpJAcndgSKWivW6lFh382RagOa025sU5rTcOw8A0aWN6qY5Usex+PYfdsf9xdVyc2XibvCVNReAt2cvZaza9Su35B49/1e2NnpD3uFqro3rbd/jqx/YuJ/UGSaTdZCLE0uBSrX8VoFQjblgkGUIgDC0zUrquNyaVF+1d8ba/AxDVMtR6meLoaZpwOIagCt7DEBQKEtGszqsjDC7Y2AXRYZAx6bgJ5009SSjLwqncUEshLtEyFBP+qlWnDksTAkPrmuZsnI3pOJ2OKk2Vk7EpFbNTKKjipOKq9sZU59XQeG04HoI2Vjsb0NgUxMXOYUMItKy0stzsFjfD2Opg54zOAmoYctZnS8Gpqqy2LEg5gxmboXVDIMga3OUYFVrLea2zio6kryhxxaPDQX0YrHdqhxtVi7GazmQNnqUUiujsr904kBxQB2XMDR7vdfRFse+oepYTrW+tkrWPKKvTKrV0OFa8V81Hi/6d9/hhxI+DnktReNd7hSNXVl/Fe/uORUd5NPp7h0INKmxB1JuQ+UPnZY9jzMMWgCH9urXzLTbl3IsjGNpQ0mxomWOc9gwxE5I65WEMKIAMpSRCGNmPA0OOTN6xC57RCaQF0sIUHLtB1f4PFwe+872PGcKox2LNxPE0c+Kmw784sdpe7aLNCIhrsGaxqQG5B0a9DlsUhk8pmYPW/Rtz1XuHRjANBWjN9OfDN7/s9q12XGvf1kNoUB6z+Zs9Hvvjm9satvuh24cc3qPEkodF4+aYH+z7Ljr8G+SVSqMRaJbQI811HxGF17yNmWjjJsRep05KrObl1i9bHeLVOE/jaGMoPDlnlfURjXJzyUjVMQ7BexoFPCc1TOJUGkh7mBwlZUqMaliMVaZiphrZS3W2hPqQcYsSM6BGLUWdGZZMSklrJoCUDt958dqXI0JA2VdOnDWPrmoZdMd1prC7XgOd2U7DU1oSRm3Nx9IL//qiQimCiOpk6ekwSBbXIRqxz8k5400eSRh61IwIuUJjNjYI1c4IxQKNNmFYJas0ELEUBhk8Uj2FShEhBAfVMyQb4eHXWp+R0yybc90555zPRIWb0gRGEGghXRsM6YbQ6f6gCICz66vnQs+BM/SkFKEm1QFsW5+mLnLmtLb3xkpYenhvbu6X1Sr1LKzrT2L1XdGRJhjDDgw2HAZmW+fBasJSFRZWABAdXRI8+yEoNJgTUgqHcWAYPLtp4OLiwPX1td4DFZbjjIjO+YqnE4RAtaDS24id1u3XFToM3iVrD5eukbXxvU/jztqy4VBEoq2lM5vyEHrdrvUvuX2rHddZ5POG4f4wr6TY63l/19e2vef1eV9IcJsdfp3bQ9jQOdejz2YsenEVvedKVfpxNrhFjKQRbO6QN1UDL1pobhFuEIfHdyORczYDCIjH7yfSMJBTJsbYI3WopByRpDUWvRGKCU3o9FyFyiJiorM5184o61lVKcoyoHbYTgc36rHM86znJIvBVJm4KL08hNDPUy0RKZY1TBPEieLa3LL1Win1eg2wBI8T3//qUJ1l6LVixeu1LqBK8OpMu4G0Wh21jZjR53qg4DdGVehZzDhOWvNq58UHUozMzAZTWo3NmqARIVWLvlOy+V4ZSZHsBHE6FsQ7nXhdnQdvRt4DYzv/+l1D8JrNFdPEw1Rw6qbW0p06KxRrmVYIo0LGLVsC2mRjEenkgzC02hw0BkLO7bs0+aVz6O6t91a/EGwCDlYSWJfmwuDClmHQH/cIwQWGoOQxKRrIDdPELiUWO7fBIL2StW5UUySWzPV+5Go38eSwI6BM2CCVZ8+ekkti3E1cXFxw9fQJ47RDcBxf31OWhRojKc6QdHKyCw6pGoDgKp6Ml2q920puSbkyzzO7nHpG1pqwaymkGKFkncqQEnPr4+x1NGPZbmqHTcPxq2zfcsfVNjO49tOWna6vLyY9tHf4euHBL37+C9NlOc9i3nj6Hc+97/a26HKbaTkRikGUClXaKEk74alo/UCcwhLLMoNNVXVVjZSzqC54dVrBYEMpamQE6QsdsCK+p3hdos6tTk6smTelxQyZt2J/jwk7bIGICq425XVp5BC7B/U06z7OM88zJSeUVq2jG1wunE4nnHMcDocefYL2OCl8JzjvSItKRknJ7K8u1IFbpqrNV4LHt4VAP4q6zXOMIN8MJVCzGXVLe9TnambXVBmciMGk65rokKRzlKxGI2atn1SvDtcHz+ic1hCDV928Vjdr9SARUsqkWikp6vWrFdcaVEUPKuSAlEEP0HkthZgRFydkU1PIxmLE+pS2GZ5zYqxUqDZzStfAqFOLRRU6fLCsT3QMSQVyLXhz4aBN2NhZlroqRvgGI7Ky3r7oPnvssX7/Fs0w2986UVrXWbKgRPp1rniUqFStLuyyZe6GHgQT5i0Cvg6U+cRyWrj++Ic8vbrgycUByZkaF9zgub644Ob2hloqKWdVK/GBcdoRhpF8UoX9Mp8UfSiqYFOyNWG72jMrEdFLZ/XRlJI+l406WgoU1UlswX6bkJxKZknRgjosWwRYYdg+zuWPbcaleNVau2pITHvuC+x5j3/NwH2V7X2Kje97nd5KOPnAY/yQ/R9zYG+yC02XkfZVVTUi58o8L2cOucENAgTnu6Pw0lhW0ps0pZtrM+OyufGBEPKmFlQ7BKMGz3W17tr15HW3kmu/rqlFruIQCVaTacV4FWvV76vGTEeBeHWmxngMITAMA6lk6y2ybKRU1R1MqcOVwWo3QwjW/6U1LtfyMAvOz85wFas1rM9toZb2oPrBBlmJjpdpU34bBNrPLT3z0xdUm/K7Rr9eRIWNDcYU58kpdaOvpRBHNmJBdVrYb1DlOg9Lp1J7h7U1lM1xWGa8oZxDXUffqavWz1O+PVXodU1nx5iKqa6rNzU40G0g64pYbxzQA4vmuOyIu7GtlnFvUQY9l5YB0sIIC9zqCgZuHVpvz6+o/qTdJ0UaFR5tSEf/9nZeqQpJl5zO7McwDD2bHoKnZI9Ux9XFQRmVwSM14Z1nDAPTODGEAfGB4DzZGserOPyotS7nHdlBEjG2ZbEgFMsQ9Zs4aTCrrEiGKXi02la1Ngox+Febp5Vs069R1bupw4s94zpLor/U9q12XK3mAQ1ueZNUsLlt6Xu+p0H/UEexvRAPmUi9HbE+/r4fdEzvAyduo8EP/IzHthadOudIokQ47z0FIabE7d29jYmwHi4nfdDk4D3e8HNnUajYMMPScHVscCIrIuGc6qGNw9CPoTWB1lrMsJpDk9alXzspg0Kn7pfuOB3idlRLW0SMEF8NzhC0T0yEEEZyzhznI/v9bh27XoRjUoV7VwslZfISme+PpLhAzbgQGIeRadRernEYaHUgdVz2swEQG5zUssr2PUvOxqJusNZq7FvdBnNa3XF1B77JZEShQ+dDPy89Q/Ae7wJhnPDLsk7pbRRn5zWjoIJTkoZrRX7v+qTgUhKuqHHWvi3fHQLWbuBQB1zbBRc1Q825aT1Qs+9aixF7PGEciDlrhl9UqqiKecps58ocfM+o21iO2tbYWp/13mtDfTOoRcldznlK2TI4raetQ7t61Vprh9g1STVZq4DTPjf7HGdoAlkluTzKiQiigUpNlRTXwI9qLQKlMMfI4B1+NzHuR54/fcphGu09tOH7Yj+x2+3YxwMSArvpQIyFZUn4MTHtdnqcY0BG7b0rMVl9TNdGKYZmVIfH4V3AOYU5S1LB3ZIWyAmioy46zNKhTnY67BiKajLm3O5DdVtrD5e2bbTmjfzHNeOypbje+LL99z1Srg9wYl/bJtJTr8eYfX/gx/OO7W3sHzUoDlwAccRcePX6ljllxHn2+70a6+AZRBi84HJEqg2UqOCsGVlc7TWCVgpomxes0G7sKDQCdRLsdzWUtWykZECNhQSyZU9VVP7G+8BoWZMzwsg4jv2DY5z75YlRJ8w2fTXvVFG8NFp2LaqqsKjTWuaZ0/2RIDpKfT+N5ojqCnHaENPOKrTvua3lKKym0W3wUFMh50TKKrukjlVHjmj6pSr0LUDrEkb6zt1ol2wtCc7r2BLvyNbvlLJeN+dgHCf8MDIZ5KuklMRpnsn1wXs415l9rl04E7ctbSQGyvZTQ155dA5ZrQSDFYv1ftmdsWZctv8wKtDqc1oXSoNKG7nCMsBiun5bM7Cu5XrWn7TNuNpPRyCcw9W6Kj1skIV2/Zw5wlpbO/3mM3Nj5mVVynKeKoHdNDKkjLe6bHvPXDLzfIRcWOLSpZSu96PC4SVB9Tx/9pSrw45pHGzQ6hOGacfFk2ck4H5eWBAODXr1DmEEcUjSWqXoIkBSxtVFk2JnMHtVGDXGyHKaCaeZixRBhBIX4umkMKfzDMNElSO5VmLe9MRxfq561vXHGircbrKNXXsyf7bDVoD0rW/zTsexBbQePg5fJfl9jIL+Vbf3eY+3LZ6tw1p7VRoUo/8VkxqqIixRterEax0oBGMSimVZTnBWqNXOecseaoNx2jHTr52z2owXdwYxKCzYoCXXNQW3jkshlGC1FsHZjKjB6yRg10e7W52hZM3gDBosORmbV+sw2s+ix1hiVKjFKNslK/7vRKNIlcpZSMNASgO5aJ1GnP5409drcFI/t1tRXgx+bA3cm2uSU7KpybJxjs37GyRnTm3bfmGVM8146ppRaINwJuUIeZ0Q7sOo/VFuYYlJe9tM9y84pyoYXhl9W4heDIbUPilHx9AaxNuM1gqX9EypoIa+fZfGBjSoog969C7QWk36mmypT8Hmaq39Qv2utfeqZf1pWamw1oyVkLSSkqRlaCn379onAPRz+KYxbk3kAn09I0KuyjBsuXG16yuCThk2ME1LR/pv8F6DP/EMQ+Di4oL9fsI7R0qZcX9gd7jk8voJM7XPUYulUnxVKv6gcKIbKjVlZEnUlKFG8NZMXIoO44yqQVWKzeQqReXeECV6pGSEK4Vtl5Q4LZHTEtV5VbpGZFu/X0Xmabt9qx3XmaPqhn+FAkTEIJF1CZ4REL7EJ77puB6+yxc4rwfZ1Tbaa8e1vrP0/b6IhPGu4vLD933b7217rPmyGYDa6yyqS4gZp2giq845Li4ulG4NqJq1WH3HyAWbBe2csxqAQTq9PrNG0C4oZk+pWjuhGQFtOPVeDSjVGfomeB+Y9gdc0zQ0CM07x+C8OchKtP6l7oDqmvE0EoZCUApvUpWcUFMywVvT0ata00q5EFMkU9lPEyklsjHFnA8d0vNuHfqoWaNqBTZISwRyKuYUraZjtYNSEsGNCrdVhUhp8GhmxRINomnRgOhsDBM4XUkdiChBIUVyrXg/4JyeUx/UAfolMqdIz1TEqVbdMOCMZdnXXlmdRq7rJOBSpa8vsOYDcwiprjWepm3YHHIRVYff0tXVsdROInHbe1tqzzu742q3rQUFjRjS4Fl1WrUfw8ra5CzjK6wU+p7NFoUF25p5SG7SYAGCd1Sv94srVRl8FkQorq3nbZxGrUOaOLErWeuMptThvWccJy4uL9kNA6UW7uc7DvtLDtdPuHzyFJcSpxxJOZEa2ClCmEbN+SuQKlUWqkRKFm1FqShLdppwS4SoQZwY2YqkqvV1WUgx9oy4IhyXyHGeOc4zMSeKkZC2zmqbpdav4MS+1Y5r3YS1ltXlSv8Qtsdgtbc7si9kFf4R2aTf9eCqasJ32ScLDrI0x+k67Vlg/d2kZWouptOHTW61hdyiYguLWy9OGwLoqqM6jcibxJTzSilXhpnH+4E2bkTE4acRFzzVBGJ1lYjZdB0hnpaZbIoKUK3gXLk47JCiju10OiFOIcAwBGqKnHIizzPx/qSF65RJS+R4PCIlM3nP4JwSU5zTyN7TDWBtGUjLqExyiebEiha/y4YCX3JRlXapSE7qqHG4bEVB0YGfSkFuVH+7iM4pBFQEcZkQRiU1oNF/7ffN+b0jzjFOI0+HZ1xcXtJ6qsI4bBpZzynkbvA9nuuBD81P6AFlNsV6I3G0o1Yle9Ygr03bbhkLet5ahixV6yaNQWnLUqFmrM2hqMvxyBvH1tZ4y7icnavaPutBptAc5xdlDy0o0POkn1MGT8nqIMYhMARHSHA3n8iKY6i8UxgQXyhSKLcnBrfjcr8jtHEm04QPOptOSgE/Mh2umC6fEK6u2eWCy4lQMn43EEZdv9NhDwQNcObIko/kOpMTBHSSthfHUBbGmEml8vrmSIyzDqqMmSqZsszUFJkOB/wQSFRujyde3x+5PZ60j97ssRIRyxs/X2X7uXBc603zFne15vuPvObrgeXe8aFr5Gfbu5zVWdYkH35sD5mBX9drGsSnEay0g1PgSZT6LKYv2PqcpEFS+iEKzeRCcavqg0Ih0is0zXggrjMQBbHxP9JnI51l2LLJqQ0CbKxDHRvh1WmyJibFWIAl6cgMqdh8J80URxeoVcdOaF5nUEm2ZuaUwTKiZZ6Jy8xyf09ctCYxjgPjNDIOpjLh3Vrr2pzzuoEIabDkWdNtv0od9ivVdBarkVsMkhWpG3JGg9v0C7exFC2DVC8CSh7QhuFW06g1Ic4UJLLrDEs3jX1NNtJFH+W+2UpVh6KomOuH0dWuYO2ns6ys38H1wb/2P4XalAnazuG6Htudb+eww61i6096zaZazx/SxnMoG7UYvNqzK3OeTTy6Hev2Hin9nNKvaVubbP5uP2eP16zyTIMnJA9zohE+xiEoDJ0S+bTgcyJ4YTcNgA6RbAxXMbJPGCeG/Z6w28O4w5eEz55QTeDaB8QH8AOC6nbWVCGMRnEHFwZInuIEn464ELRtolTyEhX+nmcbP6TBgA+KIiwpc7/M3J1m7udZG9lbNr/Vf9wELF9l+3Y7LnnrH2/u2IonW+P8+K9f42YG/pFr9NiF+8MgZrz3Aqr1gR0Vq19YpiuaHTlzXLr72rtCrVYPKO3lenpaX06LlLHfpYt4baAcNZSpCeD2OsT2v4aSGSSWBefKZvKPGrKSs44IScmkbFB40xQuAqoi4Ws19pf1j9VKjVHZVUVHMyzzzHw6cbq7p+bM6LUnahyC6sc5vzGS3X/QMvSqHsPgMc221l6x9oXat6tnEGGpYk3izU4IbOjgtL44VqdVq+hQS7EmbBuJ0pxoy4Bw2oYQvMc7nRflTHHBvNJ6P5lAL9D7v6jSdSzPj4IzQk4X22przM5Nq2eJvd6JU93BohONSzeCBotu+oN6k3yt9u56//cZUxYEIWLfeV0bSsevVFc7PPnovbIxwNtntoxenTrVUAU7v7VQatZRPt4zeA/E7oCHECgxUmIkLTO+FoJ3TGNzXKqsMQyDMfMqYRwZdjuduTWMuOrwRrPPItZT5wFV+Vf1sQBBSU2uiirFe6cZ/ayEj3YuckqkZSHFGclBJwoYbFmAJWeOszqt42nRFShrEFlNYuthEP9lt2+347JNF//7b2vvxbvrRt/E9r6XrBnlPwpbixzb7wXtTynNGIveFM7GVZRhoC5L82f2QswwVRvjYf1BD2EmMWKaFa5pChe1qoF1sBt09pJCVH6tHzWjg4DDoDBIp5lsDlQBtKwZl2VPPXurRlGmkuYTKS1qYMReZ2KvJS469r4oI+t0PHG8v2M5nThMg+rFHQ4qkNqliNq1lzODB2bQKMYWy+ZcrHFWQKzZSXutnJJGZOUO5pwt29K/vXObE2/3RkUDh1pUGT+lPiRTlL5JI29owmTke4HsHHFZ2O1MgT2ozFbTomzrwj4c12j7GpnQyjh5M0xwCyE2JiKt1PNIRK7MvXqm8+iczZMqpRvS0ppjLVDSVMKkx6rCja2lorEAS23q8PpvhRXCllVBBnRNtev3aFlgW8PZ7FPaeS8Kv5WsDNs2WNILPQv2vb8sQ44c9hMXu4nDNOJyZBgHhlFrt6SEc8Ll9YFpv8OPA3iHuElrY1l78lResFJisnvEAd7m1w0wTISSqYvWf91wiw+D6lIGR04LcT6S55nETGytL0MgIczzwqu7e27u7rk9nigmVyV2H29AGr0mH2y1z7efG8fVtrXP6W3woUav2xv7az+et0QU7xNpfFOO9LG+rscef0jK6Pvpzn0BVlQNvHH7VhkihdpyLiZ+rjWuuvm8dolaHUx4EEz0g2lGt7bcy0R6XWdnuaDGN4TQMXU9Gpv66xxlWL9PNakfdb4VJHQoShWlTM2hRDUcJknU5lrVWow4kZiPR25vb1nmhZor4zCy301M49idofNO62ztu1t9DnGWhDYjazWuWnrDaiprFqMG3s6B07qBGup2zYr6eGqHvfQzjbJuNlUQGwDZdCa1daClQCupfuNPSqWWSJwLaVnRiw5Luo1ocLBeJ8E0CVfHlptTwuDRzeLqdVTTj0QMWu4ZTdXzJdq75r0SbdrabJT0YCrvLcLHnFlBz80W7ksbZ9eJUEgnWIA6t2yko9ar1m8Lt6qb9CGc23vpwT0liHFO2j1mCAO6puuyaEBVbVKBd8gQdFDkEBiDJ0hlGgamYWQMg+4PeC/kHMkp4muGMCHFNC1TtutfKDEh06DnwHvtTStVs+sMlIAETxhGhnHHMM69r07Xpso8aUM/BiUW5pS4uTtyN0fmXChiwQJimTEPtro5Qx++/Rw4rjWafWjzzwGkB695/9TnC3f5oNT3ESfxTWwP8fh3bQ/3e2c9TtZCfpNn6ka5D/IxhhUOrE7fHdeDf9vvK4PSfq+tdtWe0/cXVKQUo1l7t9bVSm1OWI/Pm/xRtWhbZwtBqWLOVDXa2sE5Sqd7O1kHi6/Nzi2qLqQUmZeZ4/FoBhA1KOPY+8QamcAFbzbZMkKn56658/ae1WSpupuvPUk1J2sQqluFc2mVr6rMTPVZ0mNa18Pd1VA4zGj2LLhlSKs6ibSTb6/KpSqTkpaNWW3NbQg5TnAldKeNX0WUNbOp9n3ezKY6w9G179K+XenXp7cJWNbag/a6CQpsERWxKt+ZM3kzQ1qJF2t99fzxDVzZ6mTmANU2rN8pGyu17XvuyAyW7Ood7bqzwpYmf1VK1YkKAniv6yqo43IUlduyerLEpa+dlCIuRYIp/CtJya9X3iSY1DPacRo0qF/C2SBQj7M5ayEMm++iBKackmWG67SG0xK5PZ6Yl0gyxY52Bdua+hDi2hdt32rHdQb1yXqKVmO34vDb3ozH32xT7H/jqQ/Pgt63APltYBUC3Ti2jLVuc/+G79l5KtbUOghIMUo7oobH4JsiUC1aq66ps59fU9eyBefxpnThTHVezAEEy7bCMKwRfdV3auxDlbYBKSCiGVN1TaTHd+JCj4vFIeiQyBqVmp1MVV5ESClyOh25v7vj/v6emgvBe1Uv2O/ZTUMX9fXeM4Sh/+6ct2zV6h1JWYPViB9N47G7muZXazu287XYKgeCQoqlrqLIesAq5dRmMHWIrVo2LGIjPvRDWtbcM0aDW7PbMMJyppbUocRtJukWHTejAwfXKbjdAXdyxbp+HPQMWlrfl92rjRnYnJpzGydCW09WxzJnWbMzJuY22KjY4Jf1MR7cp/aZKqqs2VhvyXiEhLLd2mtai4cyIxsc+hAFap/b1DWMAVl1LpYOT9Wm58EJl/sdlxc6KHV5vdCUPMZx5DSfSDEzn064+9dU5wjTnuFw0KjFr9ldY/fVpO0buAfmvzk7p/qVwzCQ2jy5opPMa27EG8+421GoHJeFV7e3vLp5zf08q+QTus6dXZtiMHWv+rVewy+5fasdl97YX6Yf6+3OqAMGbzz/ICsBW5hfcIxvwcO3x/FFzuuLerje9dmPve6txeb3eb83XtKyH0dBGWKpZBtouBZoS0sfgBUCpBtVqdU00pphckaWaPUrM2ybWULvOvoKpKKRoev5h+ZiWhoRpYjX3JORakSHtR5RNLOwunbOhZwSp/nEEiOpZG0Wtdqet0F6w6jK5Q3KagbfFS3451Js+nBRp9V61Cqmp9ecqGtBfYfKqCpf1Qrdzaho7eccOmtsQ1DR1Soq6VNrJUigsT4xgdcqqmJPa3pFulNUnqK6yeKgiF+dZqu3Vc3Klhgtw3SdANEA3BZLBgk9uyopb67QCj16cUhQRQ/Xg5vuerqqyUrAUONYrE+Nfh7sJW+pnyHG1MyJGCN3d3fdcel05s29Iuv90ycn9PLEuUPcPl5K1eZ0Uyvp2Zz9eO+ZxlElaWMkiDYoD0H45Hvf4fnTJ1zsJmRWDcNlmbm5ueF4uidllZqKpwE/jCzLiRATbhgIfmAcd1C0FwsvOok6FVQny5r7U8GXon1aTfkiq/qI1EKOiWQjhgSVDRvHHcuicm8vX93w6vVrTvNCypAVbLFBnWuWel7f/GOacZ1ta1j68MHHt7Ob4OHjjzz85YODL9ze5pS+jlzsrE61+Zx3Oa23tQo0J7TGjufAXym1SwhxdqOfxZprnevhe24zYxGbZeUsS1kzZ29NyrVF+z3Q2EBcFe0XqzoBFzlXR2hnt/a0pgVAtf9sjZwYzJNSYl5Uxy8nE//10nuaxOSCulKGNAFYg8ty6WQA7dfa4IGWXvUrs1mjZ+y12mjXdPjUSasCrue0bSoUnCgUzYSkaE+ZNcKKVMRVmsJ7m/mlfPuNw7dz2q+VZRPNcWlC3ZRGLINo8LEoNKpEE8C1gYsoaYSW9SrLTVssLGNf5Xz1ebv29DrZCpe28+REKe1SGpNy68gM+mqN2Jtz2yC/lmFvob++gh84v76mNo5K1gWux0tRDT/aFIQGNa5rPYSBsSr0JqXgnTD6wPXlBftpRASmaewU/ZvXN+SsTeHeCyUt5DiTo/ZYife4ITAET04mbtzuxS6LZUSllFW3MClbtuY1w85FUQdFBnK/V8SJqsHHxHFeuD8qaaOtdSN7tku0wsRfg2H7uXFcCpVsb1oL5R/dUW+FPqpo6zjqup+85fFH3/O9LsbjOz2WGVULr79OssaHkEMe3qzNWGkdY4Vce19GMU29lIjLoqK6dh8r96s5HjqV2kkbdnjuClfWmDoplQ7SZzUT8wYt6XuJCdK5BleK3TidxaaOy5mhd0iPsmkNwO1mpM21qsSq0F3bci7Mc+R4PHGaF5YlgQQVgTXHVeqaCYnXbKxpFDb1j8ZgM2l9ulI6a/zVIKT+z9n9bme/QzvWuGtO0m2WTDZV75QzJeqbOecofsSJjo5xPqzNxO1auKqjVNo1fiDwu16xvjjU6PdXmCTSthZFXmG/mqjFrltZ15FRSvSaVtbGdXOG1TsV5+3f36BGWZ1fqy8GHJRKjEtfC53lWSvR1EpKrTi/6g22raE5W1ZhE48tm3UhTmtF6mTN6be1aBek5EosiSquZ/Q4b8xYheeGARCn12ueCU7YjwPPrq+YvDL7Li8POtk6R372s58wTRPD4JkGT40zJZ5IpzvKctLm5HFgDI5Fl5qyeW391JIpMZFjpixRWYClIDlSU+x9jjGnnn2vCIWSQlIpLDFyPM3cHY8sMZ8HEd0G/x81rrNtTdW3jmZby1qx1F7QPssA7Ded194j2bPPqOtu59Tm9bfCKm2zPl7WnwcNpSJy1kU+DGsR9KwY/PD7sj32b2brtY1auwMpbo00BXX6roCOA1FabYyJeZ6Zl4WDrPpsOS0qb+MVBhKnmZTvWUJzPDqunCL4oBi/svxyr5voHafn0XtVunZO1eiD811iSAQGcTYj0hNThLo6y9LUKkrtLD4HSG0kjowz4+Sc537J3N8deXVzwxwzS6qkojU2nQemjqrJOmURsgVICXAdIhGavFX7yXnrIF3XvlPDp5FyLhlX9Hmcru9a1ZDqvDOx7K4dc8ssVH/fwcb5ac2vUog5IznrxGrvIQjiVcW82d1SCzEnpmmyIKGSclp7nGobMQOhESTs2qvfKmtvWKmW9XkaBAqiGnkARihQgg6UZPVJjEhQi10o6VlLNQKME6hOM8FWKkslWeOyp5RFv69dayyzkZ75amXm+dMnpJQ1QyqFaCNeVkq8KORqsF9K0R73vZ6TU+4XeMmRbFl/romMkm0UboaEJ5dIjFUzllKocSa4gcvdgcNuwNdMWTK73chu2uHE8emnnxFPR3wZuLx4Spln8B6338NyC0OFkJTqntHsuioDsuRCiQvEjEsJYkSyzs8TY9LWFImL3s/TOCqyIGoLRCo5Rz5/fcdPPvucH3/6GceYSQVqY223Ol7dzkdT+LGUL++04OfAcbWts9K2j8mbj22f25661dE92Lu++VDbqznBL4ok5C2PPzyeL6plfRMO631qbG0/UKiobQ5s1IUYFLCqbTcHU4vp/JVeEdlg3M2Q2h3+IEBY6xPqiFS+zSLxfkwt/DeGW2kAlJjhFWURylpkb6MotHhSLTnfjNtAj907NZQxFZYlEmMi5cK8JGoVbdC0UetbcE5rOxvoULwqF2wNdc8uDB5sBawHgVGFzrhbayYr564z4Fbgre/TzqNzDi/BnKBlomcpXO3/rR9eumPc1mTa5XoMIeiitfZ8UzkpVfpnax8UHV7r17+TH1yHzkRaIKmf1eplFhGdrVvNDtt3aJCkXhXvPHgoWfqQTGnXF7322r+l58S5FrjxuNSTrZVsa72cISZiDcaa/YmTzYgPU/ivikDkqmzNnAspV0MrInFZcLUwBseTiwO7wSMFcml1VJ3vtt/vSPOs3xFRUk/O5PnEcvcaT8HXgt+D5KLBU9YxKjUXaozUmGyqdYRsgal6ZG1SL7mvTYW6E85IHaVkbu/vuLm95dXNLUvM1oq2YggdNtz+fA1Y4bfcca2mr21N8+78wTdvNH38Yab2Hp9YV+PSD+Et+72VkPHGYXwzOdS73rdlU++kvm/fR9Z/Wwra+zTEWHIPvnMrxhb0ZhCUnNCLtGIUAHu/ekaBP3derb+oO7a3nPdm9HRTlQiqkTwMCuoG0wfN+CzjaTUZZR5qBlez0n/nRfH7UmGeEyKeMJimXMlrACMNzrRR9U4zQhUBpkNemAL6+Y0s6z8tELCHenZzVmtp+xkpQdp8qE1TsDlsL06L7KWQyRQKXVHSSVe42MYQHdZsNaBW+9peG4OQ2ndrSvjO+wZIYbGHZoNitS5ZmXq1Sle6wBxW6xHT4NA+q012bsdLc6w2iLGdRWdAZXOgjSTjPSdzDrVkdrtdZ1W2jFGzQs56yIQNq7AFZIaodBRic12647J12tQz9KdY24ZiMSlXYi4ssbBEPbblNLOXzH4IPL++ZBo8ZMhV2are2j8uLy+4MycspeKDZjlpnjnevmYohSEXXMWyWNRRRcMNYzSHpdlVzepyaoWaU3dcdvn0+qaIH5Vxm0rh9vaOVzevefn6hiVmsrF/+4va+drahhaofQWz9y13XO/YzqA92fz+JbeHDuu9X/Z2B/ZHcXtI5lizQCuIa3uxwl2ijY8UiCV1xpCzqNXe0Jo/zz+jmFE9e6J/rhEGpCkSrXUt7Z2Vtyx6t9Y6rLlYrDeqDYfENWPt+neogvUa69TYgmOY9sR5JuaF2/sjxyVyf5q5vTuqfmHwOgerYoZUnYvfwqBVEzod4yKmhejRCegKGwJm/M3IN5RA7Jm6MgPpGYxx/axvLeeqdR/RES+bHF97bZwgXgvpvijBRGFZUSdXndHZG3PTnGSpCk/WuqGsr85AEx/dN4inukKMCsflnDsrFOhq/v37tUZrcTaI0gxmdwi2/theajEWZlXH2O7HCjmmvnadh2Rw8RisBukE8YGXS+T+/k7rsG1CtWuyWQ36fLge9bNp/1Y0v7F7e9vj10Lpzji0c9zWdEyZWCBWIVdvTjdTk9WbUiLHhAyVcQhcXV0SNplhC4aCH9jtDty9fE1cIvev73n69AlCIKUKc6LITKyOmorOWfMBYqLGYp+3UFK06cZJWylQOLEskXk5cpqPnO7umLw5vpzJFgDNc+Tm/p6buztu746m9s85mtWd1RYdaI7/y9vjnyvHtfUr8taT8vjjX82nvYdj2mYiX7Drl6W/v/mR7+cwt5nX49Dh6ry2m6qeA1Tr8SgmK1Qtam74Hmd1QlgJGCqK23p4HhBCWvDRnZtBh5v9ulNtRqMZl82xN+O5jb6bRiJOmWeIwm04r5CLOFIpzDFxPJ14/fqOe2uwPM6R/R7qKNScGLzCUc4N5lOrZnDmXGh8v9rgk+13PIcAbTeL/FtzKGf0/1rN2UKHXrfjuDTD1bfz3tvUY1VncLXiw0CrMdmhrka7ZV7OqZhrXZudOxt09YtnUXRL1xpzMiWdLeWsfubDSnzgUcP1AL6sax9VWysp1lXp3XrM2EDU6znSL5dYqfQt008psyyLOnBpWi/retmAoi3112sqsuXq6DJqrQ6P9Hk1J9auVWFtwm6ptMKRdVW6R+uE0+iYhsDgHLWoQ3FOr2HwAe8HsiuI81ScjhTyAR90IoLzeo3FZJ4KDucrLmsflzqu2DMrctIygGXvKUdSWsg2NHUMnp1JmJUqpJw51apO6/6e4+mkY45CQES1OTWz7mnDG+eG97RPj20/P46rRahybhTe2E0ef/zha7/p7b3qSl8hInns/R8/H+92WtuM68yBbWA8oZ7NIlozB9nAe5sqoqyvd5v5W7RPkXZTdzO0+Xd1cOv7tGctE9niiBbpOzM8vWi8vpumdVWhS9moUswpc1oWjseZ27t7TvPCvETujydVzvaeHBecqH58I0TYwdOEcQVR/9NgkwJb8TaxtK9rpItlHk1Cf3vsDUfsXr19l8bubJAe4NsYD+2z80ZqEIMzW00q50Z/t307JOdoIw3pzquuyUd7fOM0WxBRjDlZayUMgreG7AeL6zw6f8u2hSVb5K6UezuQJurb1oimPJRaSdRVD3Mb9RdVQyneUTbfp9G42ayvnmm1c7/dl/U91zXa9u9A6YP97H2L2PnXY6mlZbbCfhrYjQOhkU1odV6Ht1lp4pJOPhBHLhXntRG/NiV4Halgwy8jtZhwcUqQEjVGGw5qkKCDJnmWkzKEdVikNtgPQdmnGSWlnFLi9f0dd8cjp2XRY0BMwcT+k23A84jz+pLbBwv2/Z2/83f4F/6Ff4Ef/OAHiAj/+X/+n589/y//y//ymWEREX7lV37lbJ/PP/+cv/7X/zrX19c8ffqUf/Vf/Ve5vb39Cl/jwfbAeb2TofcH6KzAjPFbnMrXlWl9U9u25rQmCRYBx8WmpzYa+ursYIVMW/e8SO3R/VkmZJ+z7SGpdUMhB2WXea9K1l6Nssiqkdc/tyt6QBGnPTRoQbyPWmB1YhoIC6kUXt/d8fmLl3z6+Qt+9uIFt/d3vHp9w+cvX7DEyLIsRBukF4InBIcP0hXm+3fut6fNvmJ7XvTYVR7n4XW35+3HNTHh4BGbPaZ1NO1xy0VrDktKxJRZUiYumRgzOaqxDMPENO05HC7Z7fbs9nvG3Z5x2qm6+DDiBp0a3aBHCUZACd5mqDnEBYYwEWzgpNjxV8vYwjAwDKNCU9ICiorg9UcC4k19PAx9RMcwWA3HxsAoMlmgmlJHWlShZBgJNl+t1cY8ynT1Tgiic9CCOGrOqq0XVX19Gkb2u50yJBv0KuhAzJ7BreuwX4t6fn1ETIMPzaRSyZ3RqpC1Xje93cX8gY4B8cOAHwMViDEyzyeWZbGBpBknhY+eXPHxkyuuL3aMztlP6DVasTUlLug4Ej/ipz1h3OGHUTM5m4BAStQlUuaZOi+k44l4f0863pHu70jHe/J8pMaZmhZKWojLkTTfk+Z7m8OlavUxRl1nuXA3Rz5/+YqbuzuWnBls/t3bbMd63laZ3S+7fXDGdXd3x1/4C3+Bf+Vf+Vf4K3/lrzy6z6/8yq/wH//H/3H/e5qms+f/+l//6/ze7/0e/9V/9V8RY+Rv/I2/wb/+r//r/Gf/2X/2oYfz6NZt18PHvyAbe9fjD7dvumq1zUq+sfeHs8LyY82W2/23i69lUoqPR3Luc1a7ynXH+2vpqhoDrW6xZktN2kkd2LkDr3V19i2TWKepiDosc05bR1g3wqlKkYaWqagBFvvTUUWzLTZReYyRly9f8fruHpw6PcTjw8C0P3C4uOCw27ObPKOrjH7t5dpmXi1OqbJ+X20Idigc1mpW9LoOtESi0Ylb7aA1Y+v3KLXq3KPWY2TEiMZoK5Z15FIMLqztK3aHJw58WOHLuj3mimUj1pjc3GtzaljF02qIOHBBZ0DVUpQC3th9btMwbpldte/oxfI6U7hf0cLa60Ut8AnBGIcVmmSS3u/tvL15Z65wpsokNVQgGCMUtGZZleanCiHWuKyKGucDEB8jNLWaFpZlNIfWxsSUqgvXOXRwZxViitpflzM9mKsVVwv7YWQ/jezGgcG3OpnTWmKBlEqXVou5UILgxkHHmnjPnBNtAl1wXsmzSRurl+ORuCykZabaPauQqV6HUouOVIkLJS6E9dbSwI/KnDOvTydevL7l9jiz5EyyhnVxawO7/mbUqq/Rln2w4/rVX/1VfvVXf/Wd+0zTxCeffPLoc//gH/wD/ov/4r/gv/1v/1v+yX/ynwTgP/wP/0P+8l/+y/z7//6/zw9+8IP3PpbzOseX2B553WPNwO+zfRH0V99jn/WwVuP1vp/9Icf80IE/dF5v/6Dz166QkPZ99FxiU75oRIxS63l634wYa8aldYzVadsb2EevwqsddjCosTZntIEya3euqiZeqyoyqM1Up9Go17U6kHXQZC6F07xwd39knuc2RV5JImFg2u0Yp4lxGtntPKEWgrBxWivRgWbuWw1JoBbRjKaoAavS+p30xHQTXHN3IBi8J2b8ygMDXe2898y2VO1FqtUci8eFRFMjHCZPr0PKVjhZ4UZ1rqUtEr02dVXB0ABALIpoTbeo8RPV6QudUm/QZ4OFG1TZ6ljdccu54xExB8Lq4EvpDch1kx6JwXi1rrAcZ/Ccyi05k+UqderoAWCKIUVp9NYQrSPSNk6rrkK623tl9YtKwNDsuq5rv1jevYGpc6mkrCSHUtdeQhGtYw1Bx52MweOdaEuF2Bga6OelU+2dQ4YBN446WiYaulFt3E1ekZG4zDoUMi5Ia8y39arHbWQNI24EWYe6VpRBvKTM3enE3WnmFCO56LQIR1uwWwxhzVzXbPGrbd9IjevXfu3X+O53v8uzZ8/45/65f45/99/9d/noo48A+Lt/9+/y9OnT7rQA/vl//p/HOcd/89/8N/yL/+K/+Mb7zfPMPM/975ubm82z7Tb/ZjKTD9m2vQrvs70vNPh1Xex3vf8XOt6OcLYjqWALvKYEORGcEJxFxKgxzsbUc1KtB+wB5OKk9820vxvVmc3ufek3A26NzI3pVgVl4NFuQG3y1JlffgPRFht3It1YZCq1WLNwzhxPJz797FNOpxPzPBOzNgEHrxnXbrdjHEeGITAMXgf9icruOK/N022WkR8G3KCQmJlSCNpLoxGpwYHy5o2+Za6p0zWVkGJjWbaQlv1esgmaGgkhL1F7iUomldKV9C+dIzQ4zxibrYbUcJycM7XL5AKElj7aLhowFBFrQ9Hz7n1Ygws7zvNR7erQS1UnUHLqGWlTNRFRYJHec16tBFNt/pi5qgprc79lmnXVxCsbuaemYSjeaS2oQcXSWK7aLpEtUqmlmF6fOphkU4lbVn7uxDZBn689m8xZNQo1uw2kHFlSYY6ZGNUxtKglOGVn7qcdk4dBYIR+T6k+4AjiKThCrfgQNKPejch+gv0ITvBBkNzaBERVMkriNB853t+RFtUk9F6UiBPoTfklJ8oSKVHv7TEExqDQdBbHUip3y8Jnr254fZpZTBRYzzc4McdVZQVDNgFZR0Xe004+tn3tjutXfuVX+Ct/5a/wp/7Un+I3fuM3+Lf/7X+bX/3VX+Xv/t2/i/een/zkJ3z3u989P4gQeP78OT/5yU8efc9/79/79/hbf+tvPfrcH2ZJ6F3NdN8UDf6xXqn3ypYevAe8H3Tan9/u0yPVYlGq0uOH4MkhELzpCVpEmErGO6yR1p9dtIp7EJttFvXmkLY+s2U1dQPLtF2tO0qjWDOQmVWQVSPi0o1F0x9MMRLnmWVZWJalGyZAay8xIT4QxomnT58Rgjflj4L3QnBOG0ODX7Mt7/SG9o5kGYr2v+g57HI/rAy/VX9vG9icX5vS193aD1VtOGFK0bImLfir82nST1rLCePAuNtRLTvyPiDdr9hx0+AzhbJiimr0WzIsoatTNCZpu2TZILItrb1njG41YYGgjuOhioKYE7R1Jr1toF1HGwJpmVCMmdpc6RbOFnXkfQ1tnFgIoU8PVul8p59TAVIPMlqm1TPcuo476dOWZeO4zFC/cSdacBWLqpVEm6PVsrhlPhLGwDgFnl5dcnk4sBsHDbxaplorDkcVj0MoGUR0EvL+sMMNGgzEOZNy7CLOrqBU+0UFhE/HI3mJUIrWZp0j56AkDuuJm48n5vsj8TRzNe4JFtykXFjEcYyZm/sj93FhLqrB2OD+9t+b2zlC9lWgw6/dcf21v/bX+u//+D/+j/Pn//yf58/8mT/Dr/3ar/HLv/zLX+o9/61/69/i3/g3/o3+983NDb/wC7/wztd8HTnKl4UNH77H2wgZDz/nXZ/18NUPj+2xY33Yk/WYw3rsWB4ee2dCrSCWQXeYIGei5qSK1hYdUhtMSM+ANkfTfxQeXLOtFUqyKF42L2HroKsZ0FYzwaL29XM6Rf7ByasGzSjSlK2WoUyqxu4KITBNIyKOXGEcR1wYGKYd+/1OnSfg8mzK8Dqh2LXmW++UeRgC4r06MEyesEWdVQdj4p06ju06qRsKeu1aIArvGfTZnPQbhuDsOqvBK1mhw0aiiEtCXMb5iq+ba7NtdK4mz0Q1HT6DdZE+nqUhgN15NVHb/n563TRDNt3GFmiBkitkuzJMSFe/WZ+GLfaMbI+T9cDb+Wmnb5Usc9A6hyyr0s+vSJeDs/VtWZyztoFSbZxHU/2QdX02aa1qUGDOZZP5ytm909Zggw0b9Nyb1JtTEhi852K/47CbmIaBVn8yjLvbic5ANWfpg+d0OsJ8Yp4XlrSonmKteHGUJVGWhePxnpyiIggGfXs7Bp0FpoSOtCwqvFuFcRyNbav9cUvJnGLi9nhiSUXrrJ0dvAkkHzEzLVP+I5dxPdz+9J/+03z88cf8+q//Or/8y7/MJ598wk9/+tOzfVJKfP7552+ti03T9AbB4322L+N0HnvN+ziwFS//sIvRqLnhMbrwZp+3OZ23ObyHi+Jtju2h83v4eeuT9FHcLdp3HnKOpGUmnU5MqD5gMKORi8EEPgBZIZmeo25lkaQL724JFs29qS3QxwtKNnCl4oIZ0qCOojX2np1bKq62PjE6zGNAl0Xw2gybogqLOoGL/YFnT59xfzxyd3fEHy50TMSoa9F5ldhhSQzBqfMaPGEYlPo9BPyoNQc3jMgQSKXorCKn86L0Ozq8F8QVZULUBh2pykKjzavNdQp74pCiwrmpXUOHTrw1Zly/trWpkRuEaCNETqcFnPb9lNzWFkgwRqFlAsru036itt6aGmHztb6KTrwulSI6UwqsttKuZ7u+0iY0ba+FXmOH9maVkpp4ucU3bVp0wVmNB7uCiCjLNK+O3skGhXAqpVRLmxRsdU1KzzL7vlY3GoZBDbWtj5ySQaCmSSmY2vqqJJ9z7YohxihXmLCocyxVmXjZPkOcMI0D06gs0CF4huDZTYEn1xc8uTqw341QV/JSF2w2VRInYsom+kU++9nPiEnbNe7n+74GDtOO3KC/mJj8yBAGpt2ey8OFOa3IfHdHSYkcVb1DamUMgYuLC5zz5AqxVo4p8fp44vPXd8xRlUDwD3r0ZBvqPtiazXKPPvte2zfuuH7nd36Hzz77jO9///sA/NP/9D/Ny5cv+e//+/+ef+Kf+CcA+K//6/+aUgr/1D/1T32JT1gj7hXJkrecsW9u+6agwbb9QdHkH/sOZ+ezCXUaqbWWSMmRUpLWq0RhwhijwWm6oFtUmsXZPCd6oZeqNGbnVZZJ1RjWaHWFXqwmlbPKG0VB8LhakKoGvRE1tIZlzsoMcbF+n5SjqhDUSk5K881RHXDOyZqpE6N3pOCZg0OGkWGclDo+eOMkFGQYFOLxjjF4hkmNQhhHhv2EHydcmKhDYMThKyyzxy0OSsLhCagklsuZghpZxOSqRIylqVFAg5ZyY9Q1qJCqzEELGprjgQzJ1A5yVqmflDj6Iyo67BnCaIYR1a/r5IdqGYxeC60NqgEF+iy1nCttYKWvFWGg5di5rgioEmla5igdEsRqMLVWimjLQNuvutZcrlDoCjQW09p1nR3YgsB65hDP17NCyJZQsq6vtsZaVuaDZxSdq3ZaZmJKPUhsUGxs9PCUaOLHKl+1ySakZVuimZY0KSodxjjtJoW8S+ZyF3hysePJxSX7cWL0QUVtAS/aArHbHxAfKLVyd3dPjpHj6chPfrwgrVwqwn43deJNXBbivJBjwlcIh5HD7sDV5SWH3R5Be73yvOh9kAoUGMNE8J5x3CFhIIpjzpVXd0de3t3z+jizlEqsKrzb+gzPSC9v276iOftgx3V7e8uv//qv979/8zd/k//xf/wfef78Oc+fP+dv/a2/xV/9q3+VTz75hN/4jd/g3/w3/03+7J/9s/ylv/SXAPhzf+7P8Su/8iv8a//av8bf/tt/mxgjf/Nv/k3+2l/7ax/EKIRzg9pugEep3B/6JTfb1wEXPnjH93JwqzOW88f+ALaHEOPmmX7Ta7ZiXfe1ELxmWlmkR6LOCaX6FSqhUbztp8N7xprqlPgWkWvYXbdZ4eaYqu1TqmuI1KpnxxaKWI1YNdxfqkFaJVFyIudITgs5mQRP0Wwj+HXisvfOitm1G99OEjFleHE6h8sZkcOHgAyBGgI6bVnFSQsFshosqs1CEoO2zNl607SrYg7APEBbkw7WMRz23bfUbzCmfINtqd3ozqeZpqm43x/wQYd16jwt6edrjZrrptG3mkK9rghp7Qbm5NaBlo0R2LKMzTBIabCRZoVr3iXrQdPqgk2Y1hxRfdMh0RwK50SQJgrd1yT0AKvWtibq2oRux+qM9OOC7++pdPywgf/qg0OQDhc2CFxHhVQNRCzjLChRppSkslpOGIdgLMLA0Nadt34wy7h0TQWcN0KG9VCWuDDfRabdSBiC1jBD0Nc7R0AIVUjiFQLMWV/vvLWFaKvKkhIxpj4sMgwD4zDgh0BxnmLEjNvTzO1p5rhEgwnN9m6cljSm6eb+a3+1vb+KYf5gx/Xf/Xf/Hf/sP/vP9r9b7elf+pf+Jf6j/+g/4u/9vb/Hf/Kf/Ce8fPmSH/zgB/zFv/gX+Xf+nX/nDOr7T//T/5S/+Tf/Jr/8y7+Mc46/+lf/Kv/Bf/AffKkv8F7f/YED+Fq3D0yyVrvyHs7Lvt3bjv3rdKrvyhhX8ocSI4oV3rN13oPqqk3iyE5sgmrpeP5mYEcXIG1gHTaLqDEEm3o7tPakNXI1G9cbi1stvZHbMafXRm80gy3qJnpEnrMRSmxkSskKj8S46AyirOrYwakeYXtPvT/NQttHSCNYyDo4Ur+Hqhs4c1w4JUKoQuJAlkpNDuKsYyYw49+Yg7XicVoTqxYkmExVhZWFCSZd5BB/7rhExBK1liXkfg5Ox6PWVZzj8vKyO8JSCo31DkbTbpkGxSj30GSPtxG2Pq6wr41Is9E3Rns3vbvmZJpIM8Y+o7Y+MdMxrKtxq1L0mjdleyqpjUJBHVDrFdwyCZ1bPz+bwLGKC/uGyK6ztUrthI8Q1DS2+us2m3t437R7pCnaw6bOWyrZaT+bDsdUlqH2cOkal1IYvFOH5UTJTZY9KzRpwZDzWjdt+o+16tQFEw4+TAOTD0zTRBhaI7enhpFlmFjmhdcpEVNiNqWLXHRdLMuisk2L3gMiWtvaTRMuDGRjFM4x8/o48/p+5n5e+oCe7fRyZzB/r1229dTssNkT9xU81wc7rn/mn/ln3ml0/8v/8r/8wvd4/vz519Zs/LbtQ8kZLZL7OsgYX2V7W83qnC319Trh9zrmljZtHsg5kktEKExDYOcD6Rhs5ANIqbiSybVBf/rKUpVanEphtMxS4+tWB9HPU9jLqmIPVTasf4s+72zr4NooCb2tmritWPa2kha0gTqlSIwzy/Ge+Tir5pqNLUkxUuJCbsecMzuvDELnHa4OKq9jZIVcDfYrmVgLQ616kzlTl2h1GVOnqEDMBZLOxXLVaj3mdJrRXTXxbB1Ys3PYBBUgkPLGaCvjzHsTZ82pSx2dTsqelPt7jvf3AIy7qeG33WHkokbMO0cm9zjNBXPGziF+WDM+g/e6Ur1r/UTg/LBmKqVQe2ZdaTO4RKSL3mpjrtUBXdU6Ss5dkqiy1nd6VL+BDIux5rYM1fYcIgo5G8klbBxUSolUcs+0Ohzb4Mf2Hmf3jzJZvRXmGjIBWg8rFT1fBZ0LFtWBNPPtqDgp+kMTJdbPDcOIHybcOGk9D9M9zAnvlC6fUsVXISAM0gSeK2Lzr3yFgFAzzMtCSXC7u0VEB1fe3x+ZlwUBhmliGAPTOGrbgNOAdCmV25h4cXfk1fHEKVVkmEy2zXV9yzVLX51UZxuKfC027OdHq5B1oax/P3ZyvgajX8+BijVbWRf29t+3v81Xc3IP3+PLMHXeVtPaLq5+44sKqFaD2ZS11H5qL64Pw0CZo81x0sbPXIwMgTWk2mMqPLpRj8Dgp36ZWj5lTqtJKnm9UaoNcJTG5nPWo1UaOaGyaV0+g3OoKg4cl4X5dOJ0PHK8P5FTQcTjQ9YpuXoS+pTnKlWNStAMSh2XDds0CKqUotmbzxSvAqjqk7d1EmtONZpZqxkV89xtlllzSpo7CtmyRUHZfT5Y9lAqxYZMtmng2anx0iRJurpGihmopLgwzyfCoOQSbXRd4bgGp+XcMk5lNqoyie2D6DUQJUr0LNSJCi9j6iSba9wNGlaTNJRQfxoRxH42zqDdZ84g0movFsvYdKx9NOeSSamYkr0O/Wz+vTu3xoAsZY19euCz6Rmz4y3Wu1UfcVx6T8gbMFgumVQhiYrTJusL06xTs0ZVL9O2Cu/Wc2MRgcKEg0psNVp/LonGOgzeM/jAOAxM44gfmiqIkNJi96cQQiCWTCmV++ORYdyB1euUY6FN6c4y29YgPafMKcP9HLkzmFDbOrSwJk0J27LkJiTQ4PQuv/Y1bT8XjmutdbWi79vxU/kC2PBt8Ftdd3jTQ26e2r7P+2xvrye9e//3YRJ+3Vs3uL0W0AbNqREUUccVQiCXjGRnfq2ujssMdnWtHgHZorQg6rSaLFwv4rdr0puOzfiLqGKA03EeDWpUVYp1vlLXRbOsQJxlMyjRIy6RZZ45nU6cjidyygr1DWUzPxt0EnHqGaB4o4g7K8xTqbU1Xmd9H5+QkHWas2yiUXNIrXZjD2lLUXfwrYdoVbagrmoJmk1iTDb1erU5NFMFIVdELGvNK018CIuJqEaW5cSYRoaUcIPrbr4dYG3qDi3bdRWtxrfkOBs93e4v049E0BpPBYycAPRmcZAuvbUdUNoVUIykg4g1iztwhYrDtfcqmnUr7GiQZIea7XzYcTvxvU7W17DVDMvayKafXc6hwW0mpxDgSodv/7b3630clQ5RplpJCEvKpLQKEFdql1Pyok6rMR/buUA0OPJh0NYKG/iYDabX16gI7hAC4zAyjEEDnVIRFg0QWlCZVdvy/nhimmYEzTIxOLxNbijNGZfCXDLHVLifF+5OC6claWO12VtVPVlNr1jw2ZzWNhj+OtzXz4Hj2kYn20faH5vE9StDbC0s/Oa2PygCxodsZzi+c+RUKTmynE4qG2OqGYPzROfxzpNi6lh8UUwOSiIFKMF3wkUqGakOX/VGa8u+Qu+VAgyGUHJEzhkKSBBTpDcD05xq2RgZO+5Ok2+wj3OUDDkl4rKwHGfm44nT/b1mI87jw4ILA34a8djE2lxYlkUjfhGqC/R3F8jNK6ECquI9EgN+GBHv1sGQ4kD0PBS7+RvwWQEpmk0UM5I56yytpiqibEwdNV+aQ0YY3IDHd4JEjIlkMxb9hrIcQlDnuiSW00wcZ9Iw6NyqLZSTk422N0ksI6LofRXsuFXBTq+d39wmooLAKGzVKO5OrfS6wLIyKKt583ateg3M8jr1CRbZe8vFxRpx7doqW68NotTXPmQaNgSrOfGcM8fj0daXJ4SgAUtd108P2vJmTfWsa0UmSi14a44vltnhhJJUJuk0zzqUNEabWKOBkDiQSQebNqhQ2wAExJvy+wghaO9kLdQUcVS8iU2HaSSME8M4Egav91GFCxFKKqRUSFlwLjHPC69evYIqNgm6MrRAAQ0unMlenGLkLkdu5synNzd89vqGm+ORVOn3bFsuGkxJvx5926I4m/P5ZbefA8f15bYv5SAe+K0WMb3zJS0S45vPiL7RzaC17WyjJc6UnAhU1VQLTsVWYRUkZfPde+3BGnGbDp1Ft9myBc0Yzm+Is4Vfadqtm0iOxsbtUWO1niaF1AJI0eyoEURy6nWMUlRloh03BbwfOgyTjcrd4A7nnKpkWOFc7atCMGKQUcmFkgolFGvmtGylrqxE5xxFTKIK0J4yPdc1aU0qlUKy8xyc4GVQ1gGyQk5s9B7tRLRzWihnclur4LD1WrV8rjUg9ZNekaKCuVIaHKYOxLtsGZFTMkcxeoQkWx/OoKdAY9iVUrs4susyXHZ5wc6LkUpY2ZNrULLq+Sn82HHUrvdXG3TmPISBUmL/Prmswx0Rhxdv66iSUsT72q/tiiqs5BRnjJNajGRkZBcxJ90zuJKp3nQay+ow2/fqyFBtOoaqddnU7QWDQJu5cBrkIEJJiWVZmOeZnDPjOBCCI4SBab9T1XmR3vMFaIN5yYhkxmkHEjUI8J7705G2rPeDEZ4EJiMhVaksqXAfC7enhVevX3N/PLHEpEzXDTrS2vbsdqV9gYf0+JXs8+W3b7njesT5fIBD+sPKbf6w3deHsBHPKOW19DoN6M1Ag6wMm3dGNYbV0J3X/1p9wfThzPY0aZ1msN51HfvEFNabQpo+GgbJbbIGNRLK8nLFsgaLChuLrM1Eaj/UQhjOWWRndGen2nE62kPp+JKgUkybb2WoNRmdpuHYvnQz0k5E2wjM+GGacdVoy23irB6DBgdmEvr5bLW1rt1YsfqE1SJXX2Tn2SSS7Jo11uQZTAjWQ6bXfjXSaOYhBSRjKR9IUdnAok6lCD3r1rdU4LVH3e2AnDPHuMJMbKC/5rTOb5xtWUD0fNl/DssivCexjp7ftlFIO5fSoMW6WZvnSvBi2Yf33iDcbCoTq2GmQbmYPmK28R3l/LitXNeh73YPOVEmoXcr164vPWn6m2IIQSQukVIqwxAQNzBOe8b9jmEcTa0l9HPsSsVGceNDYEQoBcZpYp5P1FJwAqPzXQdg9MZmrZWlVE4pc1wSd8cT86JN0xXfIUKo/Ty0S2LVT84d2IqifBV06dvtuER6s2RfDLoiH+72RwaC+7JO6w87Wyu1kMmqLOiaPE0gu0CoBQUmNNKdhsGQoEKtmUKweEzv2pK1plB8k/aBVAtDLZSihrzUshkySVc+yKVopF/XLMHVNk4lazpRjJzAqq1XbA4YNt+pWEPuvCzMs/4sy8LxeCQt1lDqvTq5NJBAYRo3KOnODQzTgf1+ryPBSqXOOs+IXHq/GlWVJPKiAyedOP0OOVkdTgcdOmNuzaVQUtTG6CWhQrwbqNZgodzIBBVAIaUmdttqO20Q4BqoSNeOLLWa2r3Sp4dRBYHxwcgQK1OzER2wq6WfkZBcoXooBTdUhKCOs2VnVEpNep8KpFg6jOekOTS9Z5vzAM0QdGRL7dcemt7Geh84t1kf1tPUMsY2YqaS1wDGuY34rp1TJ3i89WfpczpzKvdstmXGIQRirZb1xPWaOF39fcIxmEyUQbo0x9iaxh3B5lZlMmISY2MYGayZOhcdBVSboLRg/XcL93d3nI53QGU67Bmnif3lFdNhr32D9n1L1qbt4D1RKlUK3nmmw47dbg9eePHiBcsyU3PuNWO8Eo1SgSXDCcdtytwsmZvjzGlJpFS1Yb1do3aOWc1vC9Na40S/bi1Y++MKFdYmH2OzhVqaK3b2KlucHEu319NY6wobvLV81TP2Bjp9wTGx1ilWmPBxSLFh5Csev/nY5oS37/1IpvRlWIVvc+Jve1zpw5gyQG7gHwIEHAFPQA2WAMOggxUrOgK8VMPlc6FkD8EgpgqpqCMJmFq4xdzO+TfhBVBISqpG+1WFfbXvqfXiAIIy+qz+pQF5K8YX4nwiLwt5nkkpcZxn7k5HUlYWZC46fBDnOc0L9fVrTiI6jNI79tfXZDwSRp589DFDcFAyp1rUcTr9rqlEfPYMJaijiotmHabMUYv2k+W46LiJ04l4mklRR04s82KivcKyJA6Xl53ogOnoLUtSiSJR2aWTqZdrUtfmSjUH1ERpI7FkfPAcpgOHq2um3Q4fRnXWpteowYPYPaD0dIWfKpIqtYTWqKXXrIBUhwTAOSUbeLu/vMNtMy6wJvAV7pP1YiPmfLRpuDm12rP5NmS0wc+1OUsxB2Lwb49c9AM7lE2pxJh6ZtX61SqVJS4ky3abMnxTnG+PVzvgNViGkoqpiKjJLrWScsYNIy7pOq822ytZRi21diZuY2Q2Bl4bfDo4HbmS40w6LaT5SEmR3WHP5ZNrzbT2B8JuQtpn54Skik+VWCPeDwRfSTF1hORitycdFmYfWOKsxyee4gKnWogIswgvs+fT08yn95H7pdhsumrHvjGp3m0v4grl0y5fu94KLPrHzc17bd9qx9VXDG1ZmzltD28tXz33TSsaJW91WnXz2/twYVZA7N1H/IX79ON+92c+dGTffFZmMAjFAmWDBloAUPXYfQg6SoN1hHuDv0qX4tsoF3RShf7Q+ns2W7/SLc2o1VQkGj3Q4K+iAUxOaa1BtONugYSNeEgpqSHK2aDC0mHMlBKyLMricp7kPFkKpXh21ZFyJVfh4uPvkI53xOM9qVZV0bY7dWVgllWMGK1d1ZTt+Ap5WUhxJi4n4jKrUn2cmZcFlzSrSLmaoodqGOZcSFmVxvs9YMdNdwZrgAFr3bEUrfWFYWDcTQzTpH1ZRirQDMnRlB9b4KV9ZAqpaUGuBRPOMp0KOVt/lkbktJJZtY4lu+ZsnVZzrO1/22Csnn+H7Vps79HP8eaxDpFu15C9SXv79rpVMHfVHyw5d2fVFeLrJvzc1m3eYjtajcu1D69r6NvWopN1rM/a6L6KUjeIs5ZCLpEcZ6SoQO44HhinHcO0w0+TamLagE/EhIBrQUTbO3RKeOrHGLxnHAbLBAspQRFHRsjVseCYEe4S3MyJ16fIcc66Fu1iSbOND85FD062p2c9ebTZeF92+1Y7rhadq5bXduFvjHk3sG8aw/f8kHf7jwe+4l3Oo7Gc/qhu78rYmkGvJW2K5N4ckGLmxRTAwzhoUlArpWaNjC0qjsmchF9rEtr/gsEVjuoq+BZ7rCe/VDWMLmh2V8jkGJGsxrbU2jUQU6PS2fkuRecSiag6QbZoeJkjOSuNPSVzrEVfnzkRxolxPzGOE9UHCIFnT58zjnsIE5/80p/jd/7+/8Tx8xccTwtPLna46jd0aYUKzd0jxZPjopRoc5ppOaqjOh1Z5ua42k8i54IbBs2uYiZVHTOSi8Jpy7z0a9R7jMwIO3e+fFuwM+0mpt2OaX8gjCOI02pQKWr8vBrAtLneuSZqWWsYvRpTnDbQok2x4o3RhgYJCi9Wbb7FIkarndWHTqq0n2K9YptApa0Bas+wdf3kDmW2c9BJNmwEdzfYyUMaO6I9fTpjK1uwUVcH1jI7i3jFu25RSodG6Y3y1b5rZZU5a5BjX9NN29NgTS/O2KDGJu3fT+HJnArxdCJ4zzTu2V/sceOA80GJRC70oM9VpySRkkDyqryxaaT23jGOQ/uU3k+ZsrYeLHhOFV6eTnx+P/Pi7sTN/Yk5Jp1w4B2Gydt30p69tuKcnGddIo10taqufNnt2+24RDY6dsLboK6z1+iuX8nbP/q+m5uwPrgh33f7o1KHe2xrrKpctD5RXMD5gRIGqErqTeL0x5hy2XqTc2lKAPQ6Vc6ZXISUPOqlKtmpMntyCkGo5sR6TgE1DEUZa6kASzV4xRlLsa6GojXIGHR2ZvAS1KUQl0RNFSkGX/gAgyDiOc2J0zFyc/eC6ALj5SWXz57x5Pl3uH72lMvrK37yP/3PvPi9n3B/+xpy4mZ5jUcVM8b9HnIlS8Ih5LKQUeWCtFjGRSGnxRwrDMHjncKthb3W35aFU0y8vrvlfpm5ub3nOM8KhYcBEY2eh3FgP+1MckdrNeuQRRA0ovfecfXkqU1y3uGtMbca5OdN7Lh6UdFfqkX8jU1XEafZl3ilf0tjaIqHlMBV7dVT5ExFI0oxYo3YmAx1SM2Y1mrMxg6tV5Rm36x4Xb9PIx5YzO82dSyoiG8Cv5nVMOtn5FJIMXZmXi7anwerc2sQ4NtQFCXVtNEpSudvjMBcIeU2Iqf04ZfLsnT2akpJzXcISvwwseDBe+vn8gQXGPygM7jMvh32l0bbd3gXcC7g8EhRyruI3Q920EUAVxEPfnBUwqruX4r15TmqOApCLJVUChI897lwu2Q+v73j85sbXtzecDsfSej+YoHgQzzqMTv2ddu2b7XjaltnFzWPdHaOVk27s8iT9/D3tdpOj+/5oTT3tv9j2xkDrj328O8/AMd21sPz8DNrW6jabSLeg4lvxpq1zwmxhlmtcTWlDNGXdwNSzIAolIhxARoDT6guK5Ze6ybIsGbWVsiyKLgX7Us1v9SwIDq1XKBnI7UUaspak+t2UBiHEZXEy4gLpDKTokKKS46cXt/yeokw/QYfffdjnn/0EWEI3L6+Yz4eIUUihcFpNLr4BamDxZerhptCk2kljFhU6r1CdFJAiqPmotp0pXB/85ow3BHGkSVFxJtxG0aGYWAYAuM4cHE46HcthbvbW2KcKTYrSgdd6n7jMBHCcNbbRcsIGmRVVRG+VKtvOU8tqjQvBhcpuz1p7RJ07lix69MM+wYOpF2HB4EeD35ag8A5q9CuXX++IQErkeTsFpH1ujdouWzeY3s/rtCWtVE0wg+Pw/tiBKIWCXemZFVCRJs4nWuFrNOoU04d2mxSUmJ3k2CkBVMdwaB0MLaoOLxHaf62pZwJWRvafDUdR6Gf7zN2JJuRQg3O6w392tJR8KRSmJMSOe6WxM0p8vr+nrvTieOyqDiwX+twWC1rPVP6ew8k+rd7aH2/2vZz4bh0uTXH9eZzzXl9iNl/J2X8zAG9/0U4uwn/iG9v0snR6Fg82eBB57X2U3DMOTINniyQcRTndW4W6ri8ha6t9qBRrpBLwhf0Ri1Fe5pyIUuGavOTHAhaO+o9SKjCRGuMVYWGup1JaLW3aurcqiKQk8KLJWpjbQctRJh2O6QKySljLuFIbkEK5Ji4ef2al7//U37zx7/Pd7//CT/44Q84XBw43d0ST0fKcmJwwi543DRwNCMpBps2kVnVwktqHL3ZABXMohbL/kpljtYr5Tw3N7eIG9kdKn4cOez3hHFgGCYuLi7UcQ2Bw+GgGXCKVqtREoj3nt1ur7Pt9jumadTjEWcMQ+tV8l5ltezaazOuwqo+BLLV2lJK6mgRRBKStGfO+UCt2aKU2m8P7aVbG8Flew+YU1of08XSYMLGFqzkPvdL1Vray03q1RBIzmpX29pmWaG35jikqWpI36+U80bZXjfr8KNuLSBojE39XsrmS61uWgXymmXVzee0pSzV2OqWwTQCTG8bKeCDWBPy0AeexpiozjO4oOfbyp1NhaRYpteILKVueiVFtA0heGWHukwmshThmDIZ4dVx5sX9kRd3t9yejhyXSGTVUawbHFqkhZMbunu/ux6Wad6Wx77/9vPhuKyY2U+YbE/fh28f0uf0Pu91Fl0+ss/7fNYfJoy4JYt4PMV5xA/s9lfkuyNzTJyOd0y7HbiBMo5k8RSUHLGkaNFjJVYtAgdXaeqFpWZKcUpasJsrU6EGqK47Lw2nfVc0qIArWZ2Ta+j5GvVVo4LXUjtTjlwpaabESEkRLwpLBi+wG0gpUgsscWF/fcXkPPtSORXhWUp8NC/85o9/j//9d3/Mb/7uj7m7u+P5k2sOu4mL0TN5RwyekkaWwZFqUcUMBy5pAS3lpHU/KgG/1kZQ55qqjXb3wuefv+TFyxte3d3zS//nP88Pf/QjhmnsDMimZB5sEOE8z8ynE/N8Yo4LwzSxP1xwdXXJfrfXQZSCsf3suhpEuDZzN4gVG9xo/0klRk9cZpa4tBSaGDW3DmSmccAz6D2pKBSuMc80/NDMrmvbtZ6yzVar1cAyUhVOVRYbWjmr2tDd2K7OWe2kZfQpaUZbMiKmGG8M05ZtQVOGMN1FccomLYUYc4cQtw4rpUROaYNc1jOn1ViHrd2gQa9bdus4BGoZNJhwMAZP8Jq1aACjm/c6vgTxDLsdw6gZsojghoIvBV8jrblbIXk7H2K1J5tysCqHaHtKrlpLc0EFkourzEV4NS/cHE+8Pp2YgRe3Rz6/ved3f/YZL+7uOMWkUwzaXLZWe7T10sQJzmwHnAWHqy35PxzXG6dA02FLY//gD2c9jo2zeluW9U05rYef92UdX3tdvxlqBRziAsOkNNycEvPxjlg1yptjJVWtLjgzxqq5t7K9SsnkksgZky1SiZwiGtEp/p67kIOaTm1yLTmv0bBpzJ3DqgruZDNUZBWTVcq0RsBt0quSBxQvbDWnSu1WxHkheMeAJ3vHJMJ+v2OOqvP38uUrSoxc7CfyxYHd4Dl5x+no2A2OZVnIOXN5sSdYJpNNpV0rOMXmXK5Zgk5Kzry+O3KymUfjtGO0mpTznkpSI1R0rEXOibjA/f29ZlspqXyRUw07VbAwULWUNVqu/XSdB34iICbf5DRbDGFQQ55z1wNUw679ZiIoGcDGeEhxVMmdm9jN8sNAk9aM3oglGSnKxMQgO7GpxhJMaWRTu+sxDfXsPBYLDhqjtDNLWwZnv7csKhv1PVlGU8wot/tXIUpZgZ0uLeUsaay9Kdk5r0QjY19iWYpzyrodiqplBO91lp132nxsGVnORYdyOqdizoONyBFv8mm5Z3yII2VT7q9CkWIdPmvDb5+XZrPPigX3sQqxwCkX7mLi9RJ5dYrcxsiL23te3N5xczxyiklrX96CkpZhPkBmWqVGWg9mX0tbm6L7fhXX9XPguN40yKt+1nsa66/i3d7n7H+VKyTv/wbfJATpTDQ1l0hFJWj8MDFMe1KMyDCREGKqHGPqOmYimMJ5oxM3Ve5MLqoXWNAbqTjXCTddc1AUlmyquLWKydfoDat1DGs05pyKTik2BqOqkzIigCofJCVFmEpGd1yN7m9VAaUTO1NO0MbR3W7iECPzLNzfHqkxspxGXM7EaSA4cBT2YyCmxVS8i2rIeY+O41BDrX2cBolVNdrZIvfb+xMxF8QHDheXDKNOKtYaoTa5xpx1GGVR9uL9/X2HzlrtawiDzYdaCQqrEkWD9LY1pw1qIVXlgyhICWroNzOhlOyQTcxXrNdLGZxrRud03Etv+JHuAGifUVpLRDaHZd/JMhWHXm5vdIxSpB97q3HWVsmx96mbzKeaZ9728zXYUCdF02uuKSUl+mBTnzf31dam+KaIL6LM1M25c953Z0n7mqJQoApRe3VczhyXMf7a++fWJO4VznPBI8GDH5AsSIZaVVyaqj18ImvGs/p1qzFVu4Ws0bV9o1hgzpVTztzFxO0cuTktvDgeefH6lld399zNJ5as4sahNX2viWY/L81x9cdYY6NzI7s6ui+7fasdV+0zmXjjpL3X1hpZ3+jt/hLH8g6n0SKMLzycx/Ls/u83Xxd7GxuyNWYCVuPQGyCLg2lPKIV9zsT7e27TPZ+9viVh6giC9X6tS7jVLXJMJHRWkF7L1KVagzOsXuXSFe5DWVMKphtVrZ0zm23VRoRQoUSr81DIRCqVnCHmyJJPzOnEEo/mjBPURC2Rmhfm0z1LShphDiNJtL5TU2FC2NvwyzjPuJIpSyKeZqbBMXhh9I5p9NzcDrx69QqRyn6/ZxzH3qZmZGlKyqs6hGWbKetk52HaszsMXF1dMe0OLKlwWuYOYbV/c1yI88w8z2CEliAON4zK+mMDbYlmxkK1Xit1ALlY/aNnWWtPEDa6wvvAOE7sx2h1NM32alUiTjqdIFTEJ9ygmoo6EVr7xDRr1gavs/Vus24q6oCxHiSKZaROmZ7UiqulQ2qaZWz6uYoqUbRa57Isev+ZZNO25cNzHvX3c5mtEd4cDeR+7nxYHfbZPeLoQZd4UfWPnElVG3bb7qVfZz2tCqUK4zT0xn0RuvK6Hwf8NCCjtmIwjtqKFVXzM0xBYb+l4tgEEzlbPCIWv1VyrqTc4FFl4d4cI6+OM5/dHfnp3cznd0c+v73jJy9f8er2lrvTTCqKnvTxJJY9wjo8skOBcGaHv3o16/HtW+24tlsr5365fq36lfxWX8QfmPFsb6LzdPvrw4IfHmPvaXnwd3vsYU1OnxCFGGor4DtycVpsRnBhZLq4UuN7HMg4nB90VpRUxGjZLfKtG0MjFkH350umCpRiyu+iZI3qoJhIoY59aOdGDGIyJ1CsllWMoFAyqej4BzVKKteTkk5vzjlpllBVZXsYAqUWxhiQoNp0S1zIKFFi8I7r/Y7dMBCTNS23xumqzb85F05xISWoecCVzMtXNybFBMMYjHKuUk1aIVJWGM76aRAOl5dUcxjDbsfd8ciSEtnqWl0FYz6Zkd9kLrUSXSQGNWxNDX5LSKBimoNijkEoKZOKafNV35W+K63/R/AuMFjjqk7AtnVbKzktBupW68UbNOaXpmxvGUjOpqtoav+1mbiWdRm5orZ709hruehMuLJCxK2Xq9p76KBhwVWDFFv2+HCNs96yGlzZY63M0MfV0L/jlrqfTUlkzSTbfaTZWyqFJSVwjoJmnK0uWUrR3tPWd2U9XC0Ad95qUMHmcAXr0ap6Ht0QGJhsmKlQgyIONJHfVtutjeEbDNnQtZYKnFLhs7t7Prt5ze99/orf/umnvLi749X9kRd3R04pEWvtCJbea9IvVZ90bOd1s9fjgbrYHft/QIW2yXrKerr+hS95sMcWdP+S27tqWed7vflZHwrzfRUCyfa1j33uGU0ZaOe1Q0uGXedqs6KcV1mbccSPk/4MI64klfmRdBZ5GTC2PtKhxII3WLBFv07E6iRqTGsRbXwEnFhFqtdGDAra/K50+9yNZnNerZ5VNjWuJqQajDKO86QCkhXCc15rFBfTxH4SMtq0vCwLOUVyEoKvZnQTJRdycsSUOR5PTOOOYcyEUbUblbEmQLasQexHde6GYURHWnjGaccSI/MS9TzY+ZlPM0tT+HYmo1PNccdEGjLB525kXWMPFhPjbdIWVaPpKo04reNCGkQM7b4yuMt7nYrsXG85oCoxwom3mWhee4wQnJS+dqrdoOoAlGXZMhCkbgIBC2ja/DR3Ln7bnm/rpeFjzRx0s7BZdT072wDCQK/BVs7FYtv6bzCfnquWnWntTdVE3nRcTU9Sf9f3KXXzHbzr521r9KvV1hqzpfb0TLqnFefwQ9AwvYgxb9t9auujGlJRHQVHwZNFiKUw58LNaeHT17f87NVrfvLiFb//4iU3xxN3p5nbJZL72Wm1K7OxtRFlpCO90gAV2Zq2x53X2576kO1b7bgeUlG329dFTnjwrrpuvuC93ga56YGc30BAL3T/QWxf5PAeZl1v/BQdR5JK7fIwFYVF/G7H4foJH6XIfLwnne6py9xVI7S0bQX/JoWzee+SjQ7v2ogIZRfWWvC+UKsymUoVA0U8zRlZHb5H1mvurZBiIWPtVaoILtWIfMZYcxVM2s57z36/JxfV38NXleTDIy5wsTuoph+OJWZi1Oyt5IiQTNoqQ1kYglcnWDAqfsahpAknjkzGEwChlITzA7kmUo6QE4erA4eLSy4vr/jss884nU6EEEzlI+t5TouKwHpPmLQO1rQFc0ok701sd/1+2QgW3mpu2rQqON/mKYnOybLbS0fLe8vsMmMYVN4pZxZmbWEwmNa5gPMO7Qwq/XpTcof3a046Hypl5rgwTRMheLx3SuG3NeGkXVdNaJWsYQFHm43lKq53KbX1ra+fwmDO2DLw2vUszAHqut86RBXctUyjVrzz0KY4F6W6x6VlmiYTVUwhw2KAWHTQYhgGjsd7hf7wxJTIRQOnMSijsaS8gSkL4jPBMLcqjhgzOB1pozep/s83DUdpt4JB62jGnqvJglXHUh0LlWOu3KfCzfHIb//kp/xvP/4xn756xe99/oKfvLxhjpmlFFL3/OuwUidt2NDqrNq/TlThX2yGV3e+dj92AeJqx7gZs/Nltm+14zqL4m3BdMf/SEbzNoPdT2ZLhr4WJ7d9//fPqP6gaO9vgwrftm9FSyG5L8AG7OiAxQJqnCsUZwMSLTrzTkV2S6lkKrk6ctP7C6s0DjQbZ47MQIptIbhCZ3yJy+bMWvTnOuRUa1PobrO2Uh9ZUlKlpkpJlbQ0x5MpRdiOIxEJeC+M3hTtq0bMKc64otNoB++gat9a9RUvYSUT1KiFeBu7XmplWRZub+84eR24GYLeglWUmhxzJeZKSqonKKLj1qdpYrfbdVp260Pa7/csixhTTr+Lb7CdqTVo8/FgWoxKo99NShQhBB12WSuuug4nOrH3lDXz8R7Nbmy6czZpoHEcu0KEwsdzJ7qEkHDOPiOMaPiiLDw95xmphVoSJVechLbo9LMw+SQbP1KyZswpLVq7s0ygbjIZkXXIo7Pak8Kvm6ZcsAxGP64Th6D3mimRqPa5U04cxSSw2gTqZmhSyeYEm0agg5p7rankSqrJQAvX65zbz8ulknKB7CgG8SFO2boxsSRFILyIJWM9H1IEBIWpo9HWU3UspXIfF06xcIqZT1+/5qcvXvDZqxt+6/d/n9/52c+4ubvn1f2R45JJtVIMnkaaOskaELbgsAeIFuR0PySbhKJliQ9sWhMt/ipZ17facel2DhOesZUatGVbw2H77x/gJDSAeCSz+8LX1Xfs1a72+8KEj0cp3ySb8LHPalBfc17VnJdq0RkT0LhyipAofVZ/qhWxtQCdazFHVvA4o8ur7qDr+xpU05SzjWCwlftq0Z32hemxNSdkFDxF5FKFVCm5UpvHbTx8xCjNQN30NVUxHRDdignbKrnB06BGzWaMgeh0UKET+930+1LOzKeF6PWxiZZxa+SlNzUgjjCMqm4RlHE2DAPjOK4GRcSM96QZX1qzzZVWnYlpVUHPRZ1OMHki55Tl1gICSWkdF2J1muZEGjmibmAwaEMhlYaNZXo98yngfMHXsCr+22Vz6Nh5NwQTmZUOOWlSYQGMkQG2k4xLKTgv5rTOVSI6MsKKYZ3tU1cIrL9f3T5OP8fdyBpcuL3Vtga6tAytwXWyQobFNCVzKauAtDiF8kTvn2rP51JxivSqikVMjDHhMwrRig429U7wvpFt9PiSISEx6z0US2XOqoBxe5q5Pc387qef8bs//RmfvnrF7376GT97+Yr7ZeE+RpKxeLUZ3fV1ZDM4OlQoDTrc/jSIdnNumhOrmx3X2uJXs1nfcse1MVw26gFju9i4Wlr5/8s4935q63pRtkXFdzulNy/O9m+9gGsfxjkh432O6sO+0cPM6l01rn58j/ysvViN1t5uMv0l2w2scFUTCzUJVoM+sIbcVAoxFZwOCekjNMSZYK59S++06dF5pQV7b6NM+jiadlNASgo5ZquTSKn4Ikj1pmog1KVQU6HGSrAZUrlq79RclIWlzAINfoqpNbTbtuZMLAWyHlcx6NdwZJzzDGNgCOt19Qb9pFyI6bSB6RrbTRl3ueq3DmHk4upaRXDDSKmV8f/P3r/EyrJlZ8HoN8acMyIy19qPs0+5qjA2XKR7BVgggRCSCySEELIb9KANRqJllZHANBCIBg8JCzq0DC1kWhYSEgjJIMRTIMCIK0tXAnzN9c9vU3a5jqvqnLMfa2VGzNe4jTHmjMhcudZ+nGP73/Y/j9bZa2VGZkZGzDnHGN/4xjfGEcSMsRQssxIyPDN2OzVcJSXEGHvE1dTvkbWNSdsccy1YjDTA3sMRnXR/ZrXA+j1TUqiWyAxFNcNVzAlR1mBrEcSiZQXFiCvZJfgQEGRUhQdWkgKxR/AOgRk++BNUoqAaImnxCGuORme9rblmBMxArF2sM5oGX4OtGiGiRdxqWCxKE6CUNQoTtC7fOp/W9jg46Yzc1dxtP6hGJKqbJE+FFt9nKd0otadZgFwA73XPqgLkXMGugkUjriUW5Fe3kOEKwSS6uAqC1x5bwQHkGsNPEFNBzgXRFDuWpM0fPznM+NbzF/j28+f4//6vn8PXv/1tfHpzg49vXlnpiuaqG2vUdSnc1UFii6wcqR6GI1IfEgq767Ve95VOAGprEw2hOd1b3nW854ZLx2o+NoZBnb0HOYaX4LJLf/9Kj+3n3WUVPjw+C0nj0nttiRmrN1pQxLTXSkJrVbJ68abuLibECjLjpASOWDMClASRIEiVV1027wHvULVvOch7e6xJLqgmkrAqMbRIi8wzLLJuXClrY8iUE1LMKClDlP9u+RlAasUxZaScNXcwTnBCoFox39xCXNDPJOiClopCgDhdykyMMDBamUwl3YRgBpw8gT2Dg4cbfO85la0uqbvsUsGWwxvGCd4HDMGhFuqpCjLjxsy9XbuIYJomOEfIOWGZjyhzMngzI+WISqo0Tlbw7JxJ7bNGlu3cSy2IOen17QK6DWLTfl+wPBM710rp1KFwXkkJVVBi0fterdRYjOxQUzcU5Dy4ZJBUEKvzoWQXXaPFqAB6L3P/aYobet2MRGPrvOlcKjTY2sS0ObtKvzapIxEtpIZF/ClnVdVAU16xSM0ijtbLrLEpgRV56QXYaFGKW6M8oR5h6eXUDVzYqPaWCwwgBCJU55AEWHKBcAYN2u/s0298Ez//9a8j7J/gi1/8Mn7Tb/rN+NJ3fAH7ccTgCVxqX4vaKcCMqACfPn+F5y9v8fzlDX7pW5/g69/8Jj761sf42a/9Ag45IdaKBQA5I4C0U7d/2SS7hETX4mbct19tjZa9DdCv3F1n+HVcgYfGe264NqE5sF747dPrU907uny57rH+Zy/oG/u7nO7nPM6N1taDeTsY9CwS3BivU6mcBtWgQ0atiV+D5pqA7pJS3xg8AeSbJ1dRmdSMEVCIjJDBgHPKnnDNaJEx3chymHqsdgWmXoJUoZBjNqmoAn3fzC1PADRSSK2EOROWLIi1qCoBayQYGcA0wMEC+Kxsv0CtK69uVM7agIC0ZkcvlsJCgw8I3iMMg8r7mDxRqQXBO3jnDDJTL7mUavI+Tllilfp99SEAbEn2nBFThAiU7GH3t7baK1LSBULQ6dr2eYNWlZXpwJ7gjCKeRQuzm4o+QQ1OzklfUytCk/dpOoOiZQnMRg1gAYrT/mI2B0ovJjZUoRRwznA+g02dfGV1Mpi1IKAZiE6Dh/TWGCCFaDW4sMjMCoeJmpKGzf0eiel7bIkX23Wx7dHWomuyyLijKvZ+BC0qLmnDkLX/iV3b1htO7L3XDsoM4gqq1Hu+QaSryhRRRfYkytbzICzHBR998hw/+79/Ecfyy3j27Nv44te/ie/+zd+JDz94isfX13h0Pdk0UHJIQzBiSvjGR9/Gpy9f4dMXN/jWpy/w0ccf49vPX+D54RbJ1kfhVvmlU8X1b7z59rK5Dv23FkhtVDH6z9m1uw8Z+r+hwtMLc5HejctG6069lL3dfVHMm0Q37xr+Xoqy3ibyunQe98GD9x1/Hm1tf2/QIIC+MbZ6mp4YL5bMrhXH4xEpLspAY4YbAoIjuKrsuwyBIyCLTUJWo9WUAlqUpYapy612qLItHM2vKekjoqIwQZpX7RRyJINwVGS3Ys4Rhyg41Iwg0HyPA2ZPmMZxVUxPuoE759C61hYR7HZ7hW2cgw+ue9+lVHjn9cfrT8naTbnWiuurPa72WoRMBs/d3Nx0GI9Ia6TUiDDCOBi8qJHkHCMAwZh12baNt0kPOSaMQ+iSRaipo+i1VvghgB1bZKPsOG0qqQQQZtaOzHll9Xm/Q1MCX+cCLKJT48UlASmjNmPY6OyANvikAqGoIrEClaAsCWLV5q1QXUkh2u2XTAqrwVGNSWimDWr0y2Ze24ZrkXg714YQqCJKn+yak+o1b229tf9t1gCh97FiZkQ2Ag9Bc6RNg9E5ja5qBbjlbw3uppXM0FqdAEr2KIZSpKqF+ASCJ8anL2/w9W99jJ/9hV/CL357wTh4PLqa8N3f9V34rd/1Xfjyl76I7/6u34TdOMA5heGP84LjvODFy1f42i/8Ep6/usGLmwNe3Bzw/PYWr+YjjrWgEPdODe162JJer+PGEdBHV7jv1HiZk8zUGahAQ7vaA2cRm2xU+99xvOeGax06gX9tP//Sxv+6cck4/aqTLR4wWGvUtQ3zVazzJCFujLKUs8oQeQdyjFrIIiCgsE7o0hxcxygOyKRGZ6Atnq7ev2aBgGwGiyvgXTDDBqSiOZuUNW9TOnuRkNAiMM25FQgSCl6mBYe0YM4Jj3baTHEwVYJiXYqJVKOQSAuec1Y1eS+CaTds8iDFogL12LXUpqjwrG3gFYJxGjBMA/w4wA8DgvOACMgTDocjjvOCm9tbDMOA3bTDtJuQSzKtxAGPHz/GOI6otWjOjxTKYWbM6aisQCI8vn6EcRzU+2dBTgrxHpdZW2wQIZVshAxT6oeAaqudy6qmbyNboTDVikqbOVDQ8148jAhg8JARcsLx9mDRkCDGhCXPkHnGHCPGaYdxmrBz++5UaNQLEGmY2PQjiWxrFYUES80n+eo2N1vR7hacasSUJcV1rkNrxmon8LRib2MFkr62Obkt37VGyLYNWxEyeVqhU3ucQWASjaK5AqSiu7k2DcRmtKBRrWjfuiyE6gZUPyCC8bVvfYxfev4SM3tEjjjEjI/jDX7x+c/i//OzP4f9OOALHz7BB0+fYBgHiAhSyliWhNvDETFp6UElxpwy5piwZEGFRtA2XXtOszkNAEwOa4Xje8qlOfbNSAHdWOnXacSN12/Ev6GhwuYBvMlGf05IuKRacXG87tq+o425GBkahPCmr38TgkUb57j06977jvE12KW3i2jnajdBFd6zUZwrttRisSJK0WSJppBEUKBae47IFplBf2Lt/0gXEUvVPlnWuqTADiyMXJoorf5oF2SFEqX3C2I4760vUu2khDAInPcQSGePrRuUyvuoZ1hBUuGZwOwxOGOyFWMTikOjkDtuhaoaAcE0/fbThOC9EUSyafcRxmFQz78KlvkIoJFfislDOb2WojVBgAeJKmYU02wcx1FbXaRkRmllDLL26FTj4F33jouRCVYo0fJVJXeFfYWgCqhQ7yTeojWNOIDWB5i8Mt2YCYPVmKlhtFxSyYgpdc+8RX/KrjNRXthcqts51qeeVqwYg04Mojo1WGpsxPI+DT5cCVVrzNAdxvbehboxc44ttj91LEWUhODIrmPBKuS8Qdja2qQ278vq4NHGILTrXoxyX4mQBJiXiE9uDng5RywGYUdRdMJJxRIjbkrGQTK+fXuLYM0oxco5cqkAea1NZMGSrTZLZMPE1a3NAX3uNodR1261ui275+3qbfJXFUrM6LHb5rl2abefdoIoAqZ2827j14Xh2o6TLbltviKvtT+XRn/NrxA8ePG93unIzy/UPDdY3Yg1H7Tnu2T9ZIvCGrNLLOFdxRTam6agbeQMhYNKioilwLcEcVvI5sNaysPqb2RtCCoZUsjyNC0xrYr0nW5LWDc31vxRqzAmx/BBO8s6p0l1hZ1qZ09p2wkreK7aKypYl+HAygDTOieALTcBi87UQ2d7vT4+jaPJLAmkFO1v5RyGaQCGgFoKjoOqr5Nd52EY9LtUbYXS4DzleSjNmpkxjAPismixcc4Qp0aTndMiVYKyB73XTVMENUbUfp3QmZG5KINQN+uKIgWopNd7Oz9IjUdnl1kDSiFCGKVDyKUShKIJAmdIVA9+nEYEGrSrthRAzFxuJKsAfR9qN94mRLWC4pb7Oh9lU8DcxpqLoYYoAkSdWKMhvn0/09Wtm3kOWD7Rasecc1rYXGB0+ZXm3SH1bghwch6qYKKQba2CzOrkFYOzb+KM54cjXsWIBYRIQCSVKHRESACoVMy3R/jjDGZSsV52YPZwLqg6i1L4rKuxrLVTdh01Ojw1KG1RV5uHlVZF/HaA2DGtsHt7C06Mls0tWwLdQHY08v+GCs+GbH5g11zWRffaiANik/vycZ+XmTpn5PxqsxlfN04iL5tkvQ7mbNKpHupK3shJG92VVMDjsBYkA5rHEkCS9r5rzUSySeiAVU/NWx1UMzY9SjbJpypAMiabbsJrjqXR20GMMHrEqMW4t8cDAMY4TeAdwxNrdCCCvZ9AUIWL+XCLqt2jQFUQiDAFj900AlCZnyIEImdRll6i/TDCh9CNTGsgSLorQgSqjpESalYNRUD7Mn3w5DGEWHNBPmiOC2pUX7640XowZgyj5tcCE3gM2E0D0jgihIDD8QDlXniM+10vHSBmzbdZ8XA7t5QyglfokC2blAzmY2aMrNBSqRUpp3VTDg5k6iOlzZWqjTrDMBolH3DDDiknjGnB7c1LxJywHBOYGfv9HsOg10pcy3MpZGionREx15xZLasxabT9dk5tyRdre9PyZrp/1x4VsClQtF6XWoRoG6s5F7k5AaJKIG1tupZPdAFznvte0KEzESzLokXAVu83hAAiLZ6Gtxop0hxnFgClIorCtSkmfPPFC7yYZ7xaEm6XhLkoyiBOhZ25taQhWB2kIBfAFcEwEPwwomyiHx4GFW/O+oVraxfjnFFhLcpinCjUi0WzKzh7vj9plCdNNPqBvfUE4sVno8ID77nhYlhOxFrJazi6TtiGu7YL3qUwt15WH809oPVP80w6reNeu6Jq1zou5YnuehdEqsbQNvKtUb1PAqrBwiKn3+t1462MYkMA6+bHhDXF8igVpkTQjEQRPcauIQngTNKoClByRnVQOFC0Mh/GlKOS4Zkt8tJNhYVWj1Q0mvJEtllriwy9NVaXVCpSqZhTtg1LmYm1ai1ZPiaNykpBFQbYNORa9GgiuxkCzw6OgDEEiMGYIQRtPeE9HAgxRjAxnA9wpvRQTQqo5gxyHoPzCEPo86BvruYEtKi15twp2kTaq8l5NVxqdBycB/bXghzVcMSYUFKGdw7jboLzDrkA4ITd7sro3MCcIlxV6vkQAnJR/USIkkj6pGrwFZqOIKs8lvPIRfMdKhNVe4NF8rHXcDGzlUFAa66Y9TlYuYAjDEEhT58icopIKSJG1yccQY9rc7AtUt1ku3lQx6ZP5ba+ihW9r2vWjra5armsxrIEbaCsVaOSDAItrczDnA4lZ2itWst5sTV6LCUiF10DaBs/NDIq0IiuEuCZQeOI3NuPEJaUtNYNQGGHpVQsueLVMWoxcalYjnEDP1tEb68PTMgpaY2haARcRJByRgjB6rtaBNoKs+t63WqFkNtEQ2peyKxwu9R08rvtsRaqd+KJ2HMtWCAYCUNM4WPdE4GN0/CO4702XN04bf4PdPO1MV4r2te3++0ElxYOUzcOfbTjNh7V9oANGIFzo4ULR22HtJi7bRhvMNrHr4aIzp4/g0feYnSYbZvC2kavJxBiM3CrcbZAVRcuc6cyt3brW4ig0aZJjIHV1AVE+qRsx9UqPd/gvUdNGqmosypIuSDmjHmJcC5ooSyh07NzsSohUdiQNhT/UquJ6KohcV7hDO9Vz88xYxwG+FZwCv3O3hO883CsunZFaleZZ+hGNVjfKmLCssS1zqhVbYtek+blF27itaoe750HOWUZjq3soLVqsYngw2A1cUU1Ar2HmPhwmVOf/M14tuaKvZcU1vnfIloy48/OoQnJes9d3qtYzZwrFb6KUeVNNokI1RTTiWCyXUp0qdPUmykuByVwqFNjVPK6EfTt/zeYmoCWqWqOZCMKVSva3hquZvvEHKyGEpA0ceFVxaGtldPlIifzjyC6UVublqYKr++jaEMvkTj5T78SW12dIJtwsQMXq3+za1bM+TouSVuJFL3OzNSRB7Z1xc3QNCcTqzFoTpJ+L4s2N4br7l5jUWA/4/ONoR/VjdT5z/a1292YzqDEzdu9qd99cbzXhms7to0FelQFrHqOn3W0nXlrtE428jcLf+877jwq+jxgw7ciobzuvS5EksAaiWkkYZMaBE8ejh0KsVGzvUUv3tqxA0Tatpyd14Jlanku9I6uQqoSsLX9sjmflv9RhXYxRR2NZlM2CnsRhGnskexibd9LrpCSUa0TsoO2lm9qEn4YMXiP/TR2wy2iUdkQBgzDAE927gYv+WlECB7eUZ8uzIxpmpBiRE7KagN0ExrDiHGcUEngszZgFFJR12GwbsekOTUXklLga9XILAQ4p+3c/QAMIqiSUUX1/4ZpAkRM247Rmis2eSXvVUIqHmcITB4qJQCA916Fhpt2IWsnXs1CKo071QKyHKXA1LNqBXvuJQX9PklV1RMJAAQ1DJ3FBph3vnEmYU5MXyubKAvNYJmwbd083XJ2oMb4a7WFpk9o9PcWzbd1Ib0Ie1XFaDJdTA5EziSp9LFOtjCV9sNxBomq4ocQsKRsToIGeVqLp0ZWdQ8JAJvyhYMw4xAzbuaIw7JgXhJiLp1WToY4qK4kemG7bJzFu4tWtsvmwf3p0t7wLumL7Wuagd2+/+eVDnn/DRfRiUrG53NZXjO2E+IBW1XRWiW0l8lmZbWlfv/NfNuJ86tFo+9oTYsats81T8s8+ipiFPMBZKrrkiMkEShUsCi8l3JRFWpS1pZr9UYX7qiYtE/M6rGjkRSCRgmAYJ5jh7l8GHC8PZowbMEwaFfgadghLjOiNd31zkN7Ghm5gVQZ3JFT5pvdDz+o4vsQBiV4+KBFrwB4UG1B51TxXb1hi/aE4dhj8AyGtwS4RykAO49xHHRjJDKZIy1YraLwIIHhfQBVE5EVzZO06Ml7j9vDUTdMEkzjZLkh6+xrRmmaJni/bsDsHWKMiHFBSgneOygjsECkmNRjsd6deu48BMAxCgsanaaiIuUI51Wh3jsHz76F5topmYoqqzDBBa11a/CutPyNrBF6Mw4tqS9QOK8LPXfjY32kW+FvQ1hI54OIFnJ3koZt+LD8n7M0QSPcUKNjQiN2ErH8lm42zSFspKRG/29ahI0800brnaYRm36PVHJLr2nrmyVhXiJKESwxIeeis9+ILzASRsvJdgEAWQ1uXyN9XW7IF/2cT73A1rBiu9TedN+5lALZPHlne/y89qj33nA1E9Ai2HcfsskdveUrz26GPHjDtqvm8xmfx2R43XvcgRBk+4+sRtZyb8RqRBSTdx2uWllpysxiiMF6pidnHrRq/UhfTJ3XaK9VOnrp581Elr8w9YacdeNg1TNcjjNiSpazuEbwgxoX0vYk1bQtld1m6tiixqHKGr1qXZdXsghTh496kapXmjcxd5u+XlqFZFR7UCWFiLVSTUBwrM03lWEJLSOo0nONZBR7ciqRtG1q2CK7rhABjZpqyVZLumrseYMw+7FMPQIh1kahbFFUYxx2Y2BwKTmnjZNrVZ42rzVNMSe9B+3+otVYNho7d1htizi166Pr+Yzdav87OZ7aa4CetELTDmwQo9O/m4Fj6gXK2EBqTR1ekQA9xzafayvHsLm0Xd2q1m+dq8xA19rjP4sOzYGrpRcLt7REm9MxZcSkNZBCWnRerMlnX1e0JTiskKDYG11cwyIb03X+1Hp8M2wPje36vY/otn2s2cI3RaPeZrz3huvOeMdQ9N5wG22irvjtg+/Tb5BceOz0uM+Sj3rovd/29W/6HuuEPH9NuzYGabADO1UzxzRhsGZ7KSW8epURSHsLDQbJNe25Iion1Jh1TBWtoqa2zzRsn01YVD+PQKIVRa0AWSwJDiGUlHF7c4slLsilYBp3GIJ54UW0vUoWJAhG7wDSNvNVosroJPWmvSM4z0oGIiWJoBawRQVCtjFS2yjOnCEijZqsQWStAnKMLJokZw6qHUctl8LW+t3UG1q3aPbIOXVjJVJO7k+7Jo1wUKFt2xXucvB+6N73lrrNzAjjaALB3vT3NOpNVvcllqMi59TZyBmpFoTBirKdw+1hhlQBG7zuHWMIHrtxgIAtmmETndW6uiKmQE4Kx63zi9d52kDiboSMAAJ0FEOkSYBZ6xtCVzxpUR6Zwa8pGSJgCvrtE2VVRidqqvTtOm3WgYiK2sZlrW8SMbLSujq2eVotYtQecUIrO/bV4YglK9GIvfbtyrVorZupqbT3345O9pHTtbxND5yzlvt7XFj2nxe7uZ8HTg0eNn+/614NvOeG604UYDCA0Ge6Jn3c3ZrvPv55jHeN8n516fO66a5Qpz1qSe3Tf7WwNh4IORZMk4cLBMdAytqrqTLBjwHjMCiGLwrRCLNqFzqtu2rEh1IqqlN5ojC0qMbBpYzDvGCJC2JU2aHmYwbvbRN02I07EFjp2EsC0YxaAR9GjBMhscfh9gh2Ct/k6oBc4ItFYjWjOKWFO4sumAtSLIi5gJ0SKlxKYHZdfzBYW5JhGIzabd6ysTCJPZxBTE05m0ij1Gm6wmTR5W7cqaBuTgAEIVgezjGW5YhcVAnee68tL4iQFmXw1VLRGwxWwfF4VDkqY81p2QAQxqG3OCFmUAg9ui3SelNpcaqDQyoZKScsS8Rup1JWYRjhB6eNJVNGLbG7Ht4rY5ODByenPdKsiDo7Jc24Nq8tgrYAe5Or5Y5VdwdBtJFoixBhkWqRurbcsmOrXvwe3YtFaauYmepbihXKawduc1zZ6/cvGrm3l7BzoFK1BRfaz2o42FTXg1f5sqI3AuSNgAPCq5tbpApjEwqWlNWIsZI6uuyZdcHQFVjWCfXa1btCgtuc/8m+9jnvKRolf967pY732nDpWD2Ez30bb6sG1LMtdzyJfujlG3T38c/vRr51pCSnZI23ee0aRVyqOdNixgZrbJ9T2K9tCLpReK8tP0II5iE3WpRYTyGtFWttTk6hNuo5HS1qrZYEhqoHNFhPRItZqSInzRUEZ/2gBMgpY8aCcVRmYhVSSn3M2tDPFUiM8KwsOskRzjG8Z23HkRRuy7nA5WqwaADHbL97/X4DQOQQPCzJr9ATm5wRk/bubfCZmkm7nqLwIDMw+AHFpU4xhmn5eeeQHUOJkWpUG6Mz54xiRJQG1QEaYaBHGsmMsEK7PRqRteC29XvSzsQaIWgbGs3ZMevjpQg4a8sY1a4s1tBSae3eGm+24uhW9HwxT7Jxgra/d+arzYcG8DXmYOuL1eC4ToW3adiKhZsALhpCINXYtNLp8C2Pti09EVkbdHqv0VsIAdHEd9Xqd7O19rYSQMAmQKzEI83rOstnwhpeVszLgtSYo7x2wmrv/7rd7hKSs90jGxy6hfHuI3JtH7/0c+kzt6+59NrNgfd+h9eN995wrSgM9Xu55lrebdzHwrvokcjp8+vv90GEl+G5i6H8Ped1/rqHnjufxPd9t0vveenfc+ajepS0aUBn8Eoz6qaUWgWoRUAVGK8m7AaPyTssxyNavyNHAHGBy2z5ANc3zm1DyZbQd7WAKStDzrHWaBWty9Jcg7a6OBwiUKsSLbxHSsqeawlwJTlUxFxRJcJFQnCMGhd4BpaSUOYZjgDnGUMIGH2Ad0qFZ5e1Vb0LSlFmNrLFiDJWoBIGNyB4ZzJHGn2qX2T3RMgaVqrZYgAlJcA5KzzWxDyxGj2VD0KHCwkApPTaRiLq8lvVVNTbKFZvlnNGKtF09cJJbkJhsKxqG8wAWKWLYE00iU3tXg0DkYrMppiQlqiKFyB4BmrNKCUBpWAcAoagvbjYmHwidZ1bdDq3tjR1Zkbe6GY2BY1Wy7fmqcTgVkLORZl8+g6dFq9FykYG8g6egJy1OLtpCqqSOwCsdHQRJWu0ztLsdE4djvNmXQAC7WRAps6SpaAiW5NHjfbmlDCQA3nqudgigpvDrXVWEGNemvEWdAeaqBX1mlN9D8T30J7x0NjuE69zdM/hyfa7o5ZvPNc6vWDE3nK814arYmUT3je2i+HzGs2bWv2X0xsmct9jb/EZDQIw/EPaR9537D2PXzJe2+deZyzPJ/k5Xt7kgSpZfy3TZ5umPdIyI8VZC42pQKgiWK6gkQRkGBGTwnfCBCQBJGMekm4M3sPD9ULSIoBfHWAAsGJLxp4HzEvEsiQwFghY+2CVjGWJ1khQ676SbXalAtHEged5xjCOCN5rS5KcEBxjPwag6O9DYIQlgkU3jsmPcE6LhZ2LBvNpNHL0Xmnz4w3mnQro+hAQwqAlAMQQ0vMRAOR8n6/Cgsor/BqcMzKBgkY5zWikjELFvls29XHT0qvV8kw6jYJ1GvbEmI83qDlBrFjVEcAmn+VYKfgxJaWwW15GqfeMWlVEthVJT9MeKTZDqIZLG1AKgqNuuCKpev00DtjvRpNzgjoJ0gDFdm9ppdRbDZLNajUetXToS0TFltduxVCSCTFyXnrU7yyeVWtUVUeSGUIOOSclR+SMlHKvZWyOQVvuZFEpLKIdnLN77zqdvli93gliIyqou8Sk0DcEN/OCIIALAwR6zVOteHFzi1w0QjMBMJxqT6zBCsHgzM2avy+nfomSfsmQnD//kPF66PXVkA+VVTNno0WzG2LMu4z32nBdchzOIwLg3e1Wv1WXIi2sUOGbRkhvbbywRmj3eUnvYhC3E/i+COzSdTxfFNTB8rvnRo1ZB8K8LBAHwAHBrcSD1qFWOwbDsmhiwqwFg6soXOEYXUGjmMQTW/2MS0bFFqVqD16ntHfKJsu52h7lsCwRx8OM+XCLJRqdHrRqHVaBxKSJfJNs8iGAdjvswjV244D9NMJVQY4ROSYcDwtcBZzR0jXa0bjJ5YSYEsISUWK2/JPTf41CL1Clg6ponKllmPJHaIbL2ohADCqsKCX2SKKo6JJ6+rLK9tTGrFRMEt5yc0IVpWYIqjr6UvTmKHakNHi7pyqYrO/fKN6lijkCKlLMplFIzAhQY1ZL0b5eza0UpX8DBVKzirOKSkZJcWZUtUdU+y7nc7KRdKqdC3cIGgZvSs+ZMVyPiFrrkmIakc3wtc2PiJBLNvgQCh86nY3nkcx2k240+M4qhYBEZbTU71TtQZDNWef6PVMI2GmuswgyVSSb9ykXvWxdjWazyjaIDbW1ebYPbaG/O+vyHiP0kLG7Q6p4w9HP7x1e+7rxXhuuu+MM2tv8e3Hb3z5hv5/ccLEHNy8We0xO3uTCW8v2+Lu/v/W4xwh+3gSN7WS7ZLzWz5aT63LX8LFFFGq4KDAYplDe+m4Ztk9M8BzUo6zFioq1eNiL1mJ1eSljOBCrPFIIpec2HDMkqFIFgpIMSocIAw58RFkSSoyIxwVzzCoAzMrycj4o9KQWBOQ8/G7C9OQxHl/tcH21x6P9Hl4E8+0tDje3+DR+y5TsBULSC2kJAIqAKcFRREwRjrgbNm9RImTti1VFlKruHTh41JG74VI+gknoVIXsqokZF8m9YJbdqjVXSzUvXenthTQPSNA+VajWMqbkHkVojy/bMImseFwAuB7RFAHSsmiOxoqYmxPn2IGta3MrdWDWurRUtABbmoI9WQWDUzkqVxjVWYuTTc4UoH6PmyPXclUE9DpOEVHokaH3gLUrgJhMVamrZFURZYI2w1Q2CjACVUVRhQucGIu+idvnlVoBI+cQCmAQY2s6qlCZwpdkkaW0fKaVQtQqKFQRiyCWamzLBv+u25QSJ9d8cFuC253htUaJ1nyZ3POaS3muc+N1H9x33370ebEV23ivDdfdnMvp80KqE3aGLG2PMDjAwnG5dOHbzTuXhDkd2y6rbzIazt5asz+E+25zdp+XwbrkeTErUYDqmnO4lNNyVoTZEsprqwQ9T5WlaUyqgJelwpHKIDkf4P1gsBOQYtRkvwtwji0XVhET4F0CkcAjqOqDCJhnTLsBHnrddrs9nNfIhuBAOYNzhVK/FdYafMB+t8O8n7AfAkbvcXtzxO1hxpwyputrDLs93H6vzShJgOAxTCOePH2C7/zOL2PwjP004vpqjy8++wLmwwHH2xt8+s2PsBwP1p2XsBxmpGXBcpzx6vkLoGYQEublsM5BYSNQaNTJIKCuEJMwtAnm4MBBjZHkrAZbRCE9qUrvHlwnGkgVhCGczMXduAOzw5K0MFitYIXLEQyV5qoQla/yHmHcgYhVb3GYkEoCTDUi1Wz6hIx5SZCcgLhgqlNvSS+1osZo5wsMQfVIEDwO0Nwji2BZtIULE8NN6IZ3S74BAA6MWgRcSJUkTDsTWI3Ndt01I6R1a8AwTJCk51NqRUoRuWiPLO8HMKtxnaYdUsyIkpBKVIjae83ZpQgY5JVMeHeatLi7dYwm8vr+JaMrDwMAmzJMEYVmwdpDLus5aDsTQSZGKirzJADWVghA34MMMd2sSHSFWzy894i9ZQ/gNo51d3QeWPft2PbveeS5fU0rhNbPeTPD9rbjvTZcbXzWi9FyBXcf22zIm8caZ6h5me13nPx+2TNpHuPbnx9dfOwhGPF149J7nj93miQ/M2Jn7kC3r6Rin+QcwjBiGCd4VjmmIsDt8YAcGQubFE4qOBxmPH782DT6HFATcilICcgWSVQ0bUJluznv4YMHWYJcBHDJIfuqigQiWsdMDsF7BCYEAE4IkwsYyOHTl69ApaCmCF9GrQ9zDuQ9fAhwwwCaRvDgQdME7K/A11fYTSPC9R7joz1ePv8EUgqePn4CmML38eYWH3/r20oKIYLkbM6RoKTSu0fnnBHnBZCKkRjTbgcXHNzgMT7ZqxSRCPKyoBpLMM8zci1wwakCfNBl3O6edl3OWJYFV/srjOOEab8DyCGVhOPhFvn2FZb5iDjP2F1dYZwmDGGwXJFGEreHW5DzFhUcO0OvlIplWayezuHVzQ2WWduqOBCQI6gbqFHJGM6hpAQRax9j88VbPZjYBGJvhcnSOh4bmUK0DrBF8cyusxWj1WPB4MqW1ysiSFHPq5jh8d73TVw3XYFzwOCDEWWgtXN2b4hV2LaWU8e01awl64HWoG9ngsnZUIPWf05ggSvbH6I6hFVr3kGDR0kRKWvfMmk6QNJagZytcbqkAnjXqNy7Nzy4390dDznWl47VU7wbZX1ecOGvC8PVaTb4DEZsAxueGyhsbuolqPByeI7N8Xd/f3hc+A6biXjp34vvcmbY3tTI3c8mNAO2Oa5DWdTi2jXv0HJEIQygqjp7uVSVtWHtihw2On8AdOOBSjBpDgEnGxuIDLICPLlOSW6qEUwMV2rXI2SB5iqY4MSDxgF1V0C5QlLB4XDQiCVGlGWBDF4LPoHe00tYIaxiP3UY4McR4WqP8XqHBIGUjKdf/CKCDygpY769BU2jkQ9cnxAiqvJestYCxSXi1csXkFoRfMCTx48RxgF+DLj68LEVDxfk4xElZeQYcXh1g1QS/BBw9fgRwjicEAbykpBiwu3tAY+uH2G/v8KTZx9ovjHOePniU8wvBuDlCyQIrj54hv3VFYZxxO1hxpISasqIh1kZnNBC7VKKEWkU8tNWKBmHwwGHm1uUlBCcg5cCT7AO0gUyBtA4QKWciklSGamHGxS/wooANvmqVcGjlKLafma41LChR5xkXQGIVjStlNKllxrrlem0A0NjqooA2WnuTKzOawgDwArPKckI615jNW8acei+sJYTqJEHLF2FVhrCmvMirdkSqDivZ2fixeqcwO5nM14tl3WS3mjR04VxEh098DxoLSk4f+4SceshmPDcWJ7uE3TnuAchrNeMXxeGSzc1fKYL0fDkbrz6mzcjdv8kWQ/d3syHvZMHjZitVMXrV0y9ve4S6+d15wXczVNdTN62f88jLWIt+s9r7uEOnMCr/BFZ6wcfAth5pHhEzBFeCmh0gCd4rwy3YZhwff0YjhglZ8RkHjtUhFdAgL1fGIJ1VNYuxn4YwbWCnVK8nRPUIqj1iFSa4rtDTVkLR+MMj4r94OCud4jHHW6OC47zjFfzDN7vgHGE5IQkFX6acJwj5pqxQJC8w1XJ+ODJU4zjiPnVK9TxVs/b7+CmHdyOsNs/wVg0Z7W/usKTx48B73VDMl07qQU5RnzjG19HyRnjOOLp06cYQlCFh8d7ZRKWDBxnoGTkZcHzb3+C4zIjjAOefvhM+yqRGoAcE5Z5QZwjHs0Rj64fY7e/wv7ZB0ApiMuM6dULxFcv8fLFp5hePMf/8//123H1+DHCNOLVi1d4eXuL28OMT54/x/XVI2UdMuOTjz/Fi0+eI377Y1zvPWouiIcjvvbzv4DbF69QUsJu9HhyNWK/G/H4eg+SUfNypKUEtfouiSSoKiJhClDG5e+5o5QrQtAcpKLTqrjinAPYg6yFDjnrvC0CJBO2NZJL8H5tU1KrijHX0rU0nXMIIWCaJlSZIfOi9X9Vi3+vdjvMAkTrUhzCoK1lkqr9F+u2DMlG9FGmKjudu5WcFbQLSm1MaG23UqoZayI49khR2a85V/hgdWt31mgzg7Yv0N3Iqq33Xgups+3EmLWhkslbZf37nf9Lr39wH7sHcnzt695g/LowXG8zGozXjNH5LVonwdmzGw+lT5rzyXCCAZ++568EVKinc5nufumY88jrTc+jRVaAXRU6f655ssYWtN5VcQGWZM3yTG6oQmVyCjnwoHRn7z32+70qLeRsrc4zCgkyK+ySSgEzkKtHMP3AVDKCbRw5596bqNaCXOLaodh6DokjjMEjJU2UU3D44PoKgw84xITnxyNizogl4/bmFcb0GMM4oqaCYRzA5AEwiBxiVubYcY6Yi0DAKH4A7fYACDVGZA5gH4AwIvnQGXhajWzFxjGCHz2G5KIN/64fA94BngEfVAXcOUgRUB0ACqB9hAiBdjsMj58hptgjUhd28LygcsTAC3jcAX5ALUCuhEweHCZE3ADDDrsnjOnxB3DTpI0KdwVOCIED9mA8ffYMTIxlXvDkmYMIIy0JT/bXoFKwHI/4pZ//BUxwYBE8fXKNZ0/2uL6a8OjRFcZpgIiKIZfSGmd6FdyFRmVuCGp8W4NH+y4wWr4YPKlq8FD2KbPWtDmGHwZgSUg5Y4lR6/oIcKzEh2o5Qa3P0ihtsGafRGQ9ziJijL15ZKNrN6X49tOOTzGtvbugBJciRsuHsi0JDBFCsXKLmBPmZUGxPYDYmbZlQK0F8zIjLsumDKDtVe2i3B0aUTWtmNOIaJMee3C8bh+4hMCcP/cmr38oWnvb8evacF0KZU8276bS3rAFC/f1plO/6S2sFf1jJUq0n2aUsNq39TPvP5+3/DIX81r3eVvnY2uoHjRaD85DuReeOI3QVj06aW9qTKrW9bWYegKT5hCCVw9+jfBWb60L8FYlb7TWJ7U1L2ywLBReagW37JT44BwB4tU7HwFKApSKmgt246hUbseYDb6TokawMmG+ukI6HnH1+BokQF4iUkyI7JC54OZwxJy0Z1KFSvNo/iMAPkBcgDiPQu0aOQir4YRAjYUfQFTAYQCFAPJeN3HS9vAggnAwlInBwwSZI+BH8O4ahIMa6YYkOdHv7gQiDrmqqkUWQqmECodcCUIebmCQH1HhIJVQhAEOIC/wIWO3vwYRo2RBDUUlioi0yLtUUK3YjwPYBwTn8PTxNZ4+2WG/G3H9aIdhCMg5qSxV7rMIyEuPeJyzImebL0Skcl4OAGkdWC4K3bGQlU2szMdWXiGA9uYS1+HFKkrh78aIVK2kGS2gQdLFlPS1sWTOFbWoWHN7jGnNvZVa+mcqXFlQTEwXdm5VYBGYki6y5a+09KEVoisLM1dBTirbxexO11jfm85Xo5z8uz38FKd5u9Gc00uO/UOG6qE96ZzY0X5/1/HrynDdh7vee7FtkkGUygw5jSza/zq+DGyM1unn6JRvn6MdkRv76aHzfd332BrF7fd5IyN09vxDv6+PbT/t/HxOHz8nbTR5G2grWGtBr51iKztI0QJMYkFwJv1kDRNb9pqJtWcXPIInhQrFGvoJlErMumG12idypCK7ldXgVO0RpY0eWWugAkEGQR0KuOqqrLlgt2M4r3VEMWXEm5dYcoJLCa++9W14Irz68EP85t/0nViWjFcvXuHm6gnKXtUyPvn4EywxYhgGpFywLAuCMSeHcTJSCZnunO5Xyg5TGDPFAsCKljnAwWmE2FTjDcMWp1EdhQIfEipFFJ6A6RFcBpALSq4adRYjGtSCZSkohRC8VmOlDCwJiBGoVWWqUmGkKig147Bk5CKQyhBhTMMeTIzoFszpFmleMN8ccJw/0TdLCY/GEU+vH2E/TZgGh3HyGAaPMQyYxgHFa41TCa1bdEWpWmDunUfwA5i95bNaVwGAnNfoOSYsMSPVVpKrUFuuojXZLbfVfuz6ETmUmk9IFc60I6dp6tFVKassVvAOjgnLfETKGbe3rzA4by13xKKyBMCYq+Zk5VLU+EMdsiUXpFJwjEULnItGdcf5qMxM51UVxWr65pgQU0FOVaXEWv2d3v07RKi2SlvbJDFYsG85Pc/3euPQDbjtYK2gmTS9ZlmYC2mF10Vbcre+bH1qDQDeZbzXhmsbEj9koM6Thq97zxUqBN4k1j6fGnehwu3NuzyZHgqfe9j/Bue+HecEjktGr7//JqH6uuuoC+b08y5Bmc45DMMORE5FQ+cFIyqu9gHDMML7gGkY4IgQ5wU5RtSaNSdiGm0ipOoW0HqZlCvmJSGXiuAdxjzCuot0OnLOCZMfeqkBmTdbc0aJGVkywIAfTPw3e7gUEEtBIUEYBgxxAd3cQg5HfON//RxKTDgsC26XBV+4foYhEzKA//On/394/uIT7HY7XDuP8ctfhhsrMiKOz18iDAOCEFwYQLzZatp9EMCRh1AFCaGkokG9FxBrXZlUQUkVHoISMw43M55//ALTMeGDx8+RYrR7xwgUkHPFckj4xf/jaxjGEVdXV3g0XUNKBkqBy8DLT1/g9uYGaVmQl4pnzz7A9fU1xspIt0fcPH+On/mf/xMf/++vYzeOCOzw/ONv48XHH+PFN7+JfDxgP464Gkf85i99iOvdHrtpxPV+B5BGvjnPKEmLrL03SvhG/seHAD8Mptium2WxOaXaiQypDCoFXApG7LXjs3PIUnFcZpRStXWORV1Ai7RUnT6E0OnvUgvCoBBhCEGjrHYu3tt8HXBzc9P7Z6WUYGlm1FqteNxjnCbEqI0/Vb0/6Xy1+puYM5aUEVMBBzUo5JxBthlCRUswfFDWbV0dZCmyqc+6y3iGNDLFVlHk4T3k0r7wWcbrWMfno53b9v6/M5EO77nhAu73Khr1+M7j2ygKm01bBA0Uvg8q3L6J4Fzw0z71LDpZjzmNZi6FznfP9XL0eAoV3v1uwOXc1yWDtf374c+X09+aR7d99NxYo4md9pNQDztoL6xStZBYqlKdHZPWd8FgHYu0tueTS0YqTp1sIc2VMPeOsO1zmNfaPM1PCIS5aydqYRlp9GNd14fRY0oeFVrYu4SMSgw5Lnjx0bfw4uYGL25u8bWf+T/wwbNnYM/41s9/DS9efIphHPDz0x4vP/ompmnSDfBwwKPHj7BzHhgnvSZe37vnWEWJAFIrxOAk7X8MkG/9uARIKgJbloR4OyPeHsEViK8ONh8YxIJaMuoSUY8Lji9eIfItZF5Qnj2DHzwkFxxe3eDjX/plvHzxHPPxCMoFcpiBL3wBwXvkFzeYP36O57/wSyifPFdtxuBxvLlBiQuGUnC9m3C1n3C9m/D00TWmccA4DNjvhl7bJOKsJgtwYFBGj3K8DxaZ+tVJAfp2rLZd7F5qLshbNIOWZ7LGoEIegTQWq0Qq7Fu1uzUTm6MArXuzKKcVHyvgIt3Raj23WuDShJ5hDucwaC1chSCnCqJNzyzRfUfBAyuYplVo2nnt41atCDoAdt8a9d2+f7UJ2Zfl+t7tz77YtmjQZp3ch9j0sfHNzw3JyT5jn3EpL34HcXkDw3VyTr9RocL7kLit4bl7QxRfugOZUU9x6bGb//XX65vg7K6vkcg9UVZbBt3YiZzcyPNzfyuoEJuL0D2xyxHofcSNk8/HfZPsgiHd2nKLJLbXorVMF0BVDJzDMDDGcYQLHrFJHdWKGBc83l8heA/nGYfDATUllFpB1DYLYElJpZ6cbnQ55y5E276PeuuNlVm18Fb0StValVHmC1AJJRZkZFSqCKPDmIJuOBWokyCLqpsfvvUpnn/8Mb718af4b8P/G1/4whcwTgM++t8/j+PhFZgI9eMXGKYJ027Co8eP8eTZM9B3fhlPhgl1GMBDgASv10nl7JX+nZPWCYmgOFaV9+p7TgVFQEtBzRXluGB5eYP46gBOFcdPXmIYNLok5zDfHpXafzggv3iFw7Ig73eYP/wQjz98hhIjbr/1bXzjf/0cPvn0ExwPByyfvER9eYC8OuCDpx9gfv4cx29+Gze/8Eu4qQVEgDch4+v9Ds+ePsJ3fMcz7PcjpkkZhM4xnGMMg4NUIDmg1IxhGFStg4Djss63cZgQTLuRndeyA421tQhdlILXvpcPoTPsmnpHLkVFkp2z+dByS9UEndVQNYNITSbMm7qKhepdtYRUWZ9EmXaOWOu7SN8TgBouJpuXS98KiJpgcMvJKrTNlgcDax829h5IWXNnG6dOWjfxvvYI2sJlbUja8lxtv0JrigkC6uW9ZLtCxV4jHWO/85KT13Y29dmedWnvehsCx0P735uO99pw/cqP1ZI9hMk2qPL0ZlxOSL7TWTTP57Vn+/rPuGSw2iSttdriu2w873u/1ViuBk4vl3b73V1dIy9HxLRgKYr5g4K2D8mCwA5X+2v44AEyfTzzpoHa62dq1bbntRZUUeHOZVlQLFdWSrG8iQOTNlusOaPmiuB893qdZ1R4VAJSOUKy5jinaUROBQzC4AKCC5iXhMNxQWCHR1/8Ev4fX/wSnr96iY9fvgAJsGfgiTVmrB+/RPGvcAPghQgOH36I8OoWH4jDdQUwjsYoJLjBg0OAmyYMh4jSxG6zCtiSd5DbqHubABQz0mHG/OIVPvnfv4CPf/HrIAFuf/GjLgo8hoCbFy9RYkJeIo4vXyrb0jH++6ef4PrpE8xxwS9/85so3/oYT6Ti2biHu7nFt3/mZ/H8f/0cHl9fIaeMFBd86ByG3YQQPKZpwKPH19jtJlxd7bDbjxhGhxAc3KBRld6jApASDoZh0vo6UTX+m5tbVQchYJhGi35cj1hUsUMdkNYrzBukV4rmD8n6sIVxQBhHEGd1VkzhfUfqzPSfWhBC6KzAHlUBJ/9656wvHE6OZ2tb0j6/VkEtFUtMqoOYkwr05owCNlVHVcNQQ+GUBi9G5x+C9myz3mm1ajH34XDAEhdT0/EqO3ZxjZ+K0xKtCvF31uXWeRVc4ndc3Bvu/L1JNZy/fz+HS3vjhcdP9pTfqFChtjS3O2Jt1vsFpVVbGec3cfseaNdPeiKcujAoTr2SfrFFP6sZJzMsLS4T6SlT9ZgbHrWZdOeRYHt/2p7Phcl4h2DRviNO4sDL1+uea3ByDu2Lm/T2RtZ0M1k3Z2Y7lnSul14JJu0SrMbCQUj7XaXjES9DgJQCmoJqBTolErRrW6v0Taa1oiCLlqV6LWLNCYkE5L3W+NBa/0MCa+ZYzbtUhQ7CmjvhqtJVbMoIDQrSuh4AKNhBmWQkomK97fqOATVloFYMzNiFAY4dmgqciv4KripAn77E85/736gvXiJMo+a6gkNoahwh4KNf+gbiEgEm7HZ7zcMMA8h5E9cF8nHGfHvAfHOL229+E+7VLVAr5uOMBGBxjCMz0rJArLWLi9FqxoB5OQK3N7ox3tzgsSX/uaEQNYFLVr3FohqRj6cB427EMASMuxGPHl9hmiaM0wgO1CEzz7RSxcXiHmYM06hzTnRFsfeQqnO2NXREqfChwbm6BasmoXYdjstszLyCJS4aMQUBhBEGZVqWUk0815qRSkPPFGKrdV1XzoyUI4ZjLQwvVZX1YZGW5rIcgNDPSXufeeSkMF/OxcgMyoDMxeq4QJortdYlxfQHcxWkpl5PqrrhTKuy5qJ5StuMWrsWw4bWVd0CpbZONuvxfC03GabtawSCE7snsoH9WwuVdQtooZ6e1rpXXU7N4GSv3KJUVbTFyec53mvDZbtNN1rYXlRpRqtetOzN4rd72zbqzt7ZeAR3PJEOeq/vtd4mWc/r/O+zCOzEiGw/o1vBTdRzdh5rrgsn3+8S++jSuNdbovVaqLGqm+9zeqp63QhrE8QmA9XYhdSvY4W2UF+OM154BykFgQhCzujtWeEz+zjdCD3UT4UaNnDPB5WcEWsxvT2FeJo3DIv2HHsI1jYKTTFBa8703jvibjxzaS0YmpFnOCKVLpojaimQUjBOAdURJBd4IVz5gCFohCat95NtdO7mFjfzgvlb30IYRrhhgBsCht0EDh7ChI9+6SMcTcbp6uqRyi9N2i6lRQLz7Q0ON7dIy4I6zxikqqBrfqVK7BBEyMZ1AAIE3AgIR0G6vQWIMNWKIJZzLRXsbT5Xgs8JjTzi9yOmq52SVXYj9ld7DOOAMAwo0DY1W6klolXaipngw6DRsqiT4MIA1IIqptJe17XZohtsjJaIMvGqaPHwkhYM2k8GwgwXGEIepS7IRbn2CjPaGrWNWFHHqjVj7NTJsDmgBM+qhquKNo0Rgbd+Yc6tBb+OGSllZBPpbdeJnVfYEkAWIOZqnaKBVAVL1j5c0ajxYq9xzplhVeZkW0/q4mqeq5EwWrS0XemX8lcnaEl3hJtDcbo7nL/u9Al1ztfjlCh1aWx8BEM/7ThaFYbav9v95jcsVHgnfMXDkNo2Ymhei667M8LDPQYMWG1KRYMI7/+M7d9vepMuHXsesn8WNs6lz9O3phPa8F1jffpd2rF187sY1NjYYzllzHO0pnusGxc7HOdF2W0APjweIUNAYFrzDD5ArNuunoZuBKgFpSTUEtSjraqWERcP7x2CC6hFdfDmecFo+ZOC1FXOKSmluVgxakFZoU4A5JT0kTOZ0IUaDwdBnLXlBIlg9AqDcsy4cozBMQbPvctx6yjMVnjNBcCcUOeEWDLmtuEHB7o9YKwVk2MgvkSiV0gElAprhcKoOQFF+5mxCAZmg9aMOYmqXZ/NW9cLRyikCg21ChgqiUWeEatKE8GJ6j0yaVuY/Q4UVMXf7waMVzuQcygQhMDWkNe8c+Ie8bT5klMBOQGxtolpXQAcGH4cUJYFOWbEGLu4dK2197TKOSPHZCr1OtdaOxIiMuX1iLzMWpBsNViBQ4cXIdQZgkSkxq9WuCFARIlAjQIPSJcLa8XOwipWTACcJ/2com1ZeipJCHOMkJZnIi1GX3JBFAA8aCeEQkjHZMZLoUt2DiEMKtQLQo3KXqzmZGjUhdMIBtD7K1iRngvr9PIifxiNEVFjeroHPozQ/FqP99pwbYdCEpvfT26EbB4DmuFqvwOnoTABq1W6CC8KRBqd+XLC8jxCOnniDb/PQ8eew4afdZzj1+djE4idnaMZMFMoaBHa2jBOE+lCBFgbk1wLUgFSzjgej6CaUT3BW6fjAmCJEU2QVVBBUuEdoVSHmJJ2S7aT0Q2L4a6MVi2Cw/EWUierI+PVuFokWTdQSxE99yrWX8qpLE9OBQSB84xpN8J7hzwOyDGCq4CqUeq9EhOct5ox0o3Tc4t/BNS6/LLWl5WyZisKO1QydXRj2ZFTI6jSRQQpA6TULgHlSDcyqgVE1upFoFFytf5PRCgmGJtS1PyRCeNS0JwfMyEMg8Kn3mHcTYDXgmw3BoRpBDltDipmhDR14wDSiL/lhoDWT8xBiG0ttbmwdhdOSQu9vfd23WtX1RD7u1oPLWaGg55rzLk3dawpI+dWmF7gBt9hKcA61XgGQ3NUgGCcRu1sXFWE2HlnKv1Njd6irRC0EBxaxF5i7jqCgIMiClpHKEU6JNiYhFo4rqoZUjXnFmPEHCNSXBD8gGE0Q11qz5+lYt2abQ71pSYrdsMd6THDRavz3NNZfT/a7BNvsMbvG8bXPIUSz/aGZhybYT0PBrafq53JWzT5buO9NlxvSog4NVDqiapncwqt3ck7rTPhLLy9339Zocqzv9s54c0nzdaz2p7fXcP8mvfZvMdDNPl+jpe8uQ5VyLpSIP3aysZDbl70WrOxLry2uTTG4RwjHAkYjMQEYYIDkPKqJK4wDSBozSEzKhMcAc5aWJRSME3aWgRVEJeoOQQCAoeTa7qFgMUea1lJFfkluKARD1MFSODHQVu8Dx4LEyRlzQU5LWBmp0aALd/j7GdNiKs6PrN2M868GvuBVeKnqUiwXwtTFYIDWkteqRWSkuaRLAoVFHvONn677swMR8akZEN+TEuy1T2xY4zjpJu8dxinUUsFHKlC/qCFsnDKpGvlDSsVep0iRGosWwPRapuZGqbSo6iTeSYGlZVsyPKpd9QMlfT1S72Eohppo9aKGqSLMfccs61vVckAnPdIWTtyl1rg4BQJcK3vlp4z+7rpqq5GNNeKVIveU8vrAtQZhPq1TKvTDFdjLJaihjItC1KKqpZhUTlycyySfo+z7bz/tfmn7T79OIvO+hrbrM/z9fume892V7Fb3q//vce3k8PlaG3dG5qD8hvUcLWx9TAId40FdXcAZ4/fY7QegArvfPbJ558uyvuN6H3nfxlW/DyhwvPXb//eFgfeO8Fp41pt8nDVck9toZZc+nvUJntToWAuOxB7gByOcwRLhYNHgCrGc49k148NIWAI2i4+52w5E1VdKFWLjl+9emWK5QSqgpnnbkAB21SJlL0ogBgJhFijFaZG4rBjYNBUKWCuEO90wZBqEVIpGEFwTUHB+mhp3oPsllH/XDZPOgQPNkJByoLRaT7QeQdnOo9uHExhQVu6eEcIlpupuYAhUA1AjV5qUYp1rdW6+RajYNumnb3VE0FVJnxQhQrvMEyTFvE6rZMip/VulaBGy/IupRkV4d6WpBEA2u9MVmsFjZzB0C6/YkXIgOWPVuOXUlJ2aM5GPi4AALkaSURBVCmd6Ue0qrzXohMhZ6XXe+sinbMSTzpEaKPNwZQSqrUscY57ZNM+p8GQkNqLoBkEqaxFwlWzTXNcNFrKCTAnBaSGXlumVLgwYHIeToAojFiBkpojoT3mSk5Kg5cN+YhW9Q51CLivSzFjulm9p2v57BF9zd11+7bpijbOKe2fCTSU1SA35+o3rOG6Yxyw3qAWSbTICrKF1jZV6vZep7VRuAMV9ueosQlXqPDSed0XkV0673sff+C+vg1UeCmqOjde20jpPGrSSaZJ9WagpIqJ4Zo3XUunLevx5mmWrH2HLDkgUJZXrurFagdfVbwo1XXvcRwGgwJr91IBbdvBUkFVfyfn4J3KS5WS7G+HMQR4MxSppG44HLM1v0TbbVVhG9Z0tF+nakpCDB8cSl6/t58CeAxwIhgrYHwB0110BqkoQaVFX4MP/R6wc3CZgAyABMEHM3ZG1w4BPA4I+6suY+ScwZAghQshqDUDMSEvC5AzqGRQrUCOQM6oJCCv0ZWbAry1yiCnyvot4grD0LHgCs3zgW1jtLbzqgsp1oML1udsm/slgyrFmL7taeqUckcOtXrknLEsc88xwRTOBap+AlinZmIsacGyRMS4IJdkpRFmLEWgUHVBSrOK1hL1sgh1EpR5KBDM82zECJ0jmuMUZAImu8ZgtoaTmnNiR0hZWYFFoEr9tQIomFNUjUEB/DhpO5JckJaMVAm5AgK2tiuqNu+9xxAChnHsRlrr0iq2+M8GJNqu5EsP2rGbPW3j6K5ELz3wjYzXSRS9IW8R9Xn+kBHr0TgUodnOEkVmVuj+Xcd7bbjaWOG5+6IcxeK3MF9XLti8/r5I5O4H9v/dmUb3RkunL36z73Xf43IXMnzduEOjv3CeDxkw/X0bka1GrQmPnhi69tNbmbf8knruxYzXChuuMFDbcGDv27JZUnWBN4mfBncRAcSEKmv1S88RbL5nRYWmg9rCRl+k1ZyR9Xqo6nc7J4Yqo0sVBFZ6rwMhFAFV6UWr3Lr3Ku5o5Ak1RrURArwZN1aNPdUDIjW63sGFAW4c4PcTyDvAvq8jq9kpCl/Can6cY5AZLoYAyYNyBqSCrX8VmagxGZmAvEUYbGQYamSbqk11aY141YA1GFAN7NYDP2XHrtdX2uW3eapaehuYdjMf2/t1t0EEhGLCs9l6c+nG1wRxt3OyVm3YSc5vNlqcbN5VlDVK0O/SIvF+6m0uiEbDpWQE8mi1wUQm8mxzP6aEIkAxiFBZlkBKxQwXWTG7oUECbWgaPIL3BqMaHb9qTm9rsAR6HwjUjdLmaXt+87jI3TYo21zZycMP7xv9Mzf3l9q9wh0A6+R919fh7Ng17/YuEeB2vNeG6y7EhlOPA6vRWn9Xc3UOFa4vwJpcXN/kTo5re80v3YB2g+6e5+lxF2vLZJ2a59/l/DV3DOzZ5L5ksO7DnztT8ELU1SOpehpdlZLtZ30sZ4WtWhFoMYmbRlPOtYIgKkRaxRa+g7dOuYEddrsd4rJYOwtBTtotFrViN1whBC26bZASoAw8sSS6lGK1OoxhGPT7WOM+kZWYQRsYrEGHAnR2GjfqdNA8lC7EAAeFlQIIlEtHTvuGbhsdGeEC7FBiRE6ixiw4WFN71KzGGcwYxlEbSe4m1CGAhgDydg72vlL0eK4CNxZMZdL7k4sWaBcrvK6NLKOGzrnGeCSI5xZwGmymx7Z6Nf0olZkiZs23WVTYNQHlNPdBdFpbJKLBSXNYBAUxRizWPoRI80+73a6fWxulFKSSMS+zFkRY1CaCk3lVi274VAXs7V7XVTHerBRgzlBrGVKSReHMWrPlVKFCarH3LyilglnFd9lpU9ScBSUXxJRxPC5aP8gOlVVIOaaMw3FGLIQqjAJnNWt6jrtpwDQMGIfQpbFaO5VclI4P3vhb270L62P9L3P4ztMZ9+ai6G6x8qVjzn+/8373OfUXxkMIz7uOtzJcP/IjP4J//I//MX7mZ34Gu90Of+AP/AH8rb/1t/Dbf/tv78fM84y/8Bf+Av7hP/yHWJYF3//934+/+3f/Lr70pS/1Y772ta/hB3/wB/Hv/t2/w/X1NX7gB34AP/IjP9Ix8Dcdl6DCFkGdGBr7aUzCfg0NnjjxPmjjITQ3CXc3+Wb8Trydkxvy5jfldTmrPmnvMVj993PZFzqNzs4n0EPEjPPISbX0iipa5GagElKKPZ+w3VCiCZQ26nHJxRS01SPLAhxjwnGJCCxIgZCqkiuYGHOMuL29xTLPuhG3/A8T5uOMmgOkNOOqBlSV15XEEJixmyYAHim1PlBke5gymoShsBmrOnuBIGVtAy9FQKzq5DUJiDUxz85hGseeSwvC6C55mxt2STmE3tAwC5AZyJ5RmeF96K3kvdkKIYYbRtAYgGFA9QQ3at2Xd6pqTqRGBkVQs/aFAgQ5JeSU4Lm5YwIpBbkYzbpmK2tqifGKajRRB1gvLAKKRq8AIMWiVAIcCcjR2VJQ48SNQNKhoLUzca6aA2rEjMUMF0jVM4YQ4LXiW6Msm5+lqpErpcB5Dx8cUkpmuKsKJpd1Hg6DGqDdbgfnB5PQ0s8sVft2Od/U6YsxBKEOkw8oVXtqpVQwz7N1GTDFdXOsnG+XSFCyYM5F84AsKOyxpIIlVZWjyirsW0Rr/5iBcfB4dHWF66sr7MYJR4PRY9J10RYtkbE0141KrzU2Edlr7MZ9iMrbjJWAc1eTkGDwOJrQlqApTupMurRnvn6ve9PxVpbi3//7f4+vfvWr+P2///cj54y//Jf/Mr7v+74PP/3TP42rqysAwJ//838e/+yf/TP8o3/0j/DkyRP80A/9EP74H//j+E//6T8BUE/qj/2xP4Yvf/nL+M//+T/jG9/4Bv7Un/pTCCHgb/7Nv/lWJ3/Hcj9wc9YLt9nMgTuGbnv8CvlcuvCXocJfqXHpc84jKfX0VwN8Kbq7BC9u/74EF655rXoSdTV4sEVjrRtsMYgwn0RdVuNFWshYRaGWJSWkoMXDpRQUYjiqpkOnr1XWl3qVzM687gLIYpCWnpMLK6TmSJsIZpTulRKRtb3QzZkq9S1BsOoqihgkKdWWpC1KUsPngjfDxSA4UDdc1KFNBsFPo9aAsUMuSSOXUiBVQIPq1vkw9HSqgMDjAA4BCB7ktc4LnlF5JU44eNRcIaSkDBGgegagBc0doqkerjCoZNTCILKIsxagGX0IRLKxH/V7s7X3qS3ilwbJ2XufbGBk8NsazYo5dVuiSC7avyrlrCSH5kyhnccmFbNFJmhVqBFzKBpM2Na7GjCLvIi0bAEw58POpRSFWe33LdxWq1iX5PZ9gcYzr5uyhebVCrQ2LpWi7EG7bjFV7boNVqHmqkLAOSsLdAgeu0mjLe9VLqrYetGPNOeBtts+9fN8aEPoe8HZGr4U7QDNDJ46tid7xfYMtvf7xPFdz7Cd5VrkfBfReshpftvxVobrX/yLf3Hy9z/4B/8AX/ziF/FTP/VT+EN/6A/hxYsX+Pt//+/jx3/8x/FH/sgfAQD82I/9GH7n7/yd+C//5b/ge7/3e/Ev/+W/xE//9E/jX//rf40vfelL+D2/5/fgb/yNv4G/+Bf/Iv7qX/2rKmL5huMOVIhTR2R7U9ZrtoEKW7OZk9foMfdBhW9+bpe9nn6L3+k9HzY6p9998zs2RhiXJ+1DUOEWWus1OQYP5nwKEyp8s8KJKSXEqA3yqol7Nm+8low5BiyDKsWnVNDMAURMxkcQwqSi7q1tuxBKrkgx9vwNWSQ1jgMG78ECpGSQlNsoMwCmnwcQKTlgpZAXNUSWS6kmQyXECMauI6dCrcwObIAhmyssQmDRVheOPYarCd4F7fwcj/BB4cics+oUhgA/TfZihdXcOCirzzPYaw6ssqngi34iOY8iglyApWq3aAAgzw2v7Al0ygJ26EQQSMvzFZNMq8jWjRgQpJKMJm7Rk02mnDM8NUUU9CiVjYCiBvEU4u5zwIyVay1GSoEzckRK1EkLbWM0uWa9X1aY3iIsMQeo5adEtKCYee2q7NihkJE87HOkKnO06XH2eV/NwapqOtno7MxqPEtRGamuyEHce4GlnCHOg8gj1WIRV0G12KNBgWmJGAJhHHa4miYMQ1C9THP2iqxyYi3Ppubwbn5qC/Ot6/h03TeHYLtvnL/L9vE32YtO8lZn0dd9o73vnWjtDV77uvGZclwvXrwAADx79gwA8FM/9VNIKeGP/tE/2o/5Hb/jd+C3/Jbfgp/8yZ/E937v9+Inf/In8bt/9+8+gQ6///u/Hz/4gz+I//E//gd+7+/9vXc+Z1kWLMvS/3758uWdY3oOg8/zXlujdf6aCqnUNzR79PwoPBSXn3qJ29dexnEJa0ffJua5jZxOIc71ve2AByeZyCbnsP3M9jhd+HabyduMVNlEO61gtBgUtSwLUk5IRX+PaUEp63EpJcQUkdpG0z1vM3ZVULLCeZ4Zc0w4zozDOOB6msC5QnLCfjdid3UN2gukZG3sJxXVB3AxaIJ0Y/HkVGFcCCULYs2oKcLzKqjaNrpaVXHCOd3YVcHBwftGjRZoQ1FTEgFQoTRs5z3CMBghxKLAqqw/geaqlqKNAEfvUJzmThwzaBzBpg8YWk6CCIWgbDUiVbRg0rljkRQVsrwV8OL2pREMVrmgUmtP9Pfo0dhxYoK2Us0AttwYBXgS1EKolZCWlVjjidvupxENThPqmQucK9aOxCTTOn5lsKHNNRbC1dUVbm9vcXN7A8QIcg7jOOpnBa+q79AcI5MKJA8bweRYcm99cjweNQ9U14LdJUYcj0c4F3qhr0KCVSNMkd6qpDa2oZUqpBhRagGTGpEG3w7OI82LymtpeI7W1bvC+sPlAmEHIX3sdlm051ypABjOeXghUEwgUrmoyTs8efQYcB7JzienhBiT5nktgtXr6fo+crpqT5EesWi4r3tzXNoe0zQLT1RxtnsKcLLnXN5b2jncjbbefBiASMa8ZXeHHPM2450NV60Vf+7P/Tn8wT/4B/G7ftfvAgB89NFHGIYBT58+PTn2S1/6Ej766KN+zNZotefbc5fGj/zIj+Cv/bW/du+5XMrTnD/WoiaFE05v0mlkRts3xmnS627U9LpE552xea/X5rbe4O3unWxbg7mBEqXtcGfvIZuJvqW1342kDCpsv2+jrS10mLPmGayfVIMQk5E5SCqISTeflHGYZ9wePGRQ1QLdLPS8YtbGkSQVhRTyaYl1MYitLwzW+hrPVmtk34/tGlXzsAkabZApVlTzwotBaI6dNacskKyaeW0474y04RBIJYEAzX2owoSqTBTFbiHQ7sN6L2D5JH1OjTuM4cer1JFyyzWiEY2kSnMuNBGl95VJmYdAp6HDJIjABCIHFGhEa6QY77iXA7Tr2DYmgrZobvPFs+sRh0J1er7cJKdIJ1TfhCzyJSb4IShh0nKDLWJVBuhKD9frvwHk2PqrgdbNlzVH1aOtjdfe5KJ8yxma6nqtFa6tD4sUWj+wRgaRqj3e2j0Hi6prFIO8G3RnkHQWIJWKSgT2QXOXVaXAclECkhJA9H0srAXDIXj9qczaS8wcumzrRusQ2gavF7OZmjukinM0p811bCIxXIq21tdecpj7PTiDF3WfOc3fX4QgXxu9rQbs1yTi+upXv4r//t//O/7jf/yP7/zhbzr+0l/6S/jhH/7h/vfLly/x3d/93ReOvAvNbSOu8+hr60NcwoIv3ZjV2K1v8lmw2ofH/QzANk6fO2Ut3gcp6pGnz1+isq9MwtoNT2NydaN2dmw3YrkZtDX3VYsy/mopariEkRhmuBbcBgeGFowKVq8xpqRepcCS9UFrdpzrRouavJJpA44+aMRh5weDfrVVyorLsylJOKeeeRbdmJ3VPIkZ5xgjGhzdoUL2SitvdWAt2nEMcYRMVvvU6t/a2ZockgCabxKLAqG1WQoZqVCtE8vFstHnATWObNkERyrfVM08OsvjQPd2hfEEaVFIkKCixKKTQg2XbbR6gaUXhpJFQABQAJSWTyvlZD1svf8qAiYxh8CrIgYT2KS3WtTfvlPTFFxi1AivXRf7aTWBDJXjKrn0aLW1IxmGoXcmboYrpdRRGI2wdJ0Ug6ybwS6yOmmOHRw5U9ZQp6sKtFCPNAe6lKrSTADgnCq7l4JUTEC3GS5RUgtENSQdE8YhIHiHpItPc38tN2xwSYuYmvHS3ONrmIDnRu1klZ8/In3tn6QetnBNf9vL+86dFM1bQI53Y8d3G+9kuH7oh34IP/ETP4H/8B/+A77ru76rP/7lL38ZMUY8f/78JOr65V/+ZXz5y1/ux/zX//pfT97vl3/5l/tzl8Y4jhjH8e4Tdy7gqSE6P655h6+7wHIhsXj6sQ/Dh+1cfrXHhblnj288q35epxO45XSUfr7S3LP1GypGcW9FxV2kNmudTa21a9HlnFGNVhxTVMZhyshJG/xpvZTCa0tMoFrAUvB4v0MWQhLg5c0txqANAv0QwBj0PqYMYqe6h2R5oTBgd3UFgTLCbm9vMTL3JHhwxlqrxZoMNvaieeKNRSdan9WuSzPELdJIpJEMzw7OB7Cr8BxWQVRyYM+oDEQUEwbOCukV7fPFFin54OHN6y/GgIs1YclRW6sMA2gIGrmxKt077+FgwrtOC5pLzhpxiaiig0G9Yj+A5hIPx9mCMf2unNV5ELsexdQ3pGjer9d9EfVaOWYlvKhByTBUzL46m1EmhDAAxChSsSwJUrVdyzAMputnSv9gpCJwovdR9ZkrjsurPo9URT3AsTcoUH+8HzCODlUqQowK5bIyD4Mf4P2IcaTuMAFAzhXHo6YcnPMYxxEiETHPSEtESRXJK+QNMNhPYOPNZamYU8bNcsScEuaUcLtkxFIRc0GqVSOuKgihqhh00p/BE673E5598BTjOKDErPOw5bi6SHHLIXLfn15PXt+s87M1vzVO3WHYwL7tuJN8/tl4s6iIzn7uPr7x80+IOO86Lqsm3jNEBD/0Qz+Ef/JP/gn+7b/9t/htv+23nTz/+37f70MIAf/m3/yb/tj//J//E1/72tfwla98BQDwla98Bf/tv/03fPOb3+zH/Kt/9a/w+PFjfM/3fM9bf4FLBIg7j508vznm0rGKPb3JJz94Hvef7xsd9pnHdmK2fx86x/X5U3LG9jn1YLfswtoX4AltvlrRcdbaolrqCT1ZvV1dpFWAXCqWVHBYIm6XGbfLjFSLRhVOj1lSUumdnJByNtZhxcubW3z6/AU+/vRTxJThvMe428OPkwr2lqqbXUqdINI3Y14LmRs13Tmv7d5r7XCnVGuJgpaDWEkqsUSkrDm9LKoAHnPCnGZVB5GCVDMKCjL076UkxJyQLBrRrrwecNSZljEXkAuASWMJezg/IIw7jLu9dg9W+XqtQ6tQoddaN0QapcyXpEQMRx4EQpwXK+xdo+Scs1Lqcz6Z2c2oibHyWluYbS50S9zJpSBmvQYx6U+uyuJLFsmACOO0A5lKxbLo9Ws50nle9CcuJ+eXrPbKB49xmiziRhfs9d6DAaSUEZcFyzxbZ2Fs7tmKCmzneKlF71uM2trEgObGHoy5KAO2aN1hZY/KjEqECkLM+r1TzliOM46HI+bjAXlZcL3f4fH1Ffa7HXKKiElzw6nkTptvos/bkoA334uwsRmXc+tvsu+8zdZ0Gm2dQ4dnBmyT010fOv37bcdbRVxf/epX8eM//uP4p//0n+LRo0c9J/XkyRPsdjs8efIEf+bP/Bn88A//MJ49e4bHjx/jz/7ZP4uvfOUr+N7v/V4AwPd93/fhe77ne/An/+SfxN/+238bH330Ef7KX/kr+OpXv3o5qnpg3N2IL4TGsqpmNJz23N7fm+N6y/E647A9x3f5nHO48s7j9xx/ns9bz0QuHntutE4eB84Yhhv2oTG2NA9h8Jht/KsY6ek1Vi9bVTSWlDHHhOA9puB7681Srb7KWGUDKTFBWHBcFmRRZtYwDBgGbc2ORq+vApLSUkLKWNwspO01dc5BuGgBqzUp1bow3JlaTYMu5aTxOSvho1GtKxHcELBl57HR62G9owSw1vXmZVeVK6ogcKldqNV8cdN4dGBWVZHG5CtAr7ETEpDUfr7tfpAo264WQY4JYCW3MK0wcWvC2SInwkpqIVGWI5Hm3RqRpda6ticRpYUXO9/2d+vZVQy2Y8cYQtBC5JJ7vlSgEWFMGumXmuF96M/lor2+yGkxckwJkpWg0s4XApRmBGOCd/5OjlpEOuzdIp1qUXWtgHehRyipZGSRnotV6SetVqpktHdoNJebkyNAXGYld+SEq91TXO932I0DDsusmoW9dKSYYW/5DFuXGwf7kv7g69h8+u+pQ3rf3nTHkT/fIrs9uj8ye5Pzas/3veg17/XQeCvD9ff+3t8DAPzhP/yHTx7/sR/7MfzpP/2nAQB/5+/8HTAz/sSf+BMnBchtOOfwEz/xE/jBH/xBfOUrX8HV1RV+4Ad+AH/9r//1d/4Sl6DCswN0IrZjLhz0rkarwUrvMs6por+aY6XS3hNZ3WOEtxO8RWBrxLXS4HMyOLGW9TjR4kzNg2zWg2gDviVXDFkwZD1uzhm5EkrVSKakjJISPHkENsKFCfYKGK9ublUolggsqqbkCPAEeK/sPm2lAY0KIZobKqf0ahHdRhgEFlJyA1UIVUveF5BtllIBIWOqOWDJSZmTgHY8NpYekVKoIUAlNRKuFAiZerkpdlTScoAqwLykvqENAaiuonBBSY38UnrRcUlKux6Dh2ct1GYAoKZW7uBBSFV7ZrEV0wqt95mtqLpR3ZvklgBAtTYtJvfkvbYaaXVSySDkGCPYeYX4gtcCb3N4yAeEYUAYAsZxRHrxAmmJWOZZob4m7muNI3PW2qxozSmbogURY9ztgJKVNUnAvCwbJ6T2PJyIdh4gIjgWBKPkp5QhMuu9ZmMMWn4vjAEiGuUdlgVJtHv3MSUkALkKlloQqyCJNoucl9QFALIUpHlGiQscCj58+hgfPn2Cx1d7HJe5k1KYuLdEcd5DxHQ0dSKao3jBkNy3ptt6Jbp3/erTd53Yk/c5MykVBqdb7k1aL7aTn7sn2Py9RpLqj9s9+yzjrQzXm2zQ0zThR3/0R/GjP/qj9x7zW3/rb8U//+f//G0++o3HSUTxGSOoN/qszwn7e209hB70uXxWi5xkAyusuoN3o7DtR/fzOHlAx2q8sv1o/cw5K7FV6oAAsugjQiGYOSXgtiKw4KpOGIJHjgtKTHBEePTkMbgoJbkWpWWXKphjwpIidvsJu2nEftyByUCfWuGDCrA6MxDt5ImhreXtQa0dgkYkxodg1iiiGBOMWOuDmB1cTQAzqDIyWbE1BMKsEkyuqdIzSs0oWSMqlZfSmjQXiskTkdGXdSOoubbwx7rzasSJrLm6kjNyjEZ1V21C7wiM1jhSSQHkuTPdnCPsdiOkZAANooL1S9ONqYjmIlnEmImtP5RGbk1PspECVukvNXK5VjAyxFqhaB5RxXxdUHhTe09Jn0tkCiMqO7WWUuh7CooZEkUaBcfjEcuiUOJ+v9dWIQb5tpwRydrCvlHCW26zimBZlrUjNnPPNxVYjy3La4kL2pATpDBuKVhKwct5AZkisTCpM5FVNSYvMxwEj672eHJ9jd049HvUop8lqdxTTBGlcm/mKLl2Xcq+vAQPRjzNKcdmXZ9GWa104d33q5M96MJe9KZ7bTeqn2E7e6+1Ci+N13kTn3U0aOHzGG8Scb0uefo24+SaNGx6CxHgfqgQWDer0/OmzevOmIm9SWA5M4z6U2oFGRmAbSFDVNnh5ggIKsbBgyR3NhyoMeoAguaptEBVN0/nHYIPkNEiIcCKRm1YLyDiVjxLq3EAdJNmAA3wsk2tdjhJC6MDW5v5Ipa+B2qqqknHpEn9ou3XyYR0tYeU6v9pnVJW0oWgawDWovVHpVS4osXMYEIhKzKGwpCAWCuTCBQymLZAJBgpREzjj4BaVXqoAoDAedf/FrHjyO4xNNJS6E9r0rbzp9U+khnCZlx6R2GyNcjb60naDZjX/GBbR9paxXeNyGKdBNq0K43AULPBkkoYafkwIsJut1ORY7a8lEF22/kMoJM0gFWst9aq0DLBDGRFLBmpqurFkhIImssqQO9qkKVaTpU6VJpLRUkJdZ6BXDAMDo+u9thPI0JzLrA6iqmseVf0tbRChivTDPduOeds4e3YLN3+Pg8df984V9FosOxbBwW0hQd/FZUz/i8/Pufgql/WC5Hb217z+24ynRmCzxYhnrIZ7y9UbnDY/UbrfFIRreoTzWt1rW08tQ1pZeJto69ezNyldgSCCpQClAYhJnz6UrAfAnbjANSIw+EGQ2B88PQRrqYJTISXNzd4tLvG4D2CbarJSADzPFvUot528E7hQgCU1ViSAM4Rgvfap4mD5j3tWrVi1b7mTVeQAIXD6qoAwuzA2WqdqhINvGMTDB4g2XT+HKtUUa4oKUMKekE9wWMQi+CcQ84VpSaoAPw6JxZOSpW3DXrwDiIFKS5YSumMwSWrEYPVEDHpPY5pgeOVQo5Wa23wJWEtKZCyknOoee4QoMNvWJs2GoRXqpI0wIwwqFoIObbicP09ZhX/BRHYWJKTnU+t2krk9nBUSNVq0JbGSs0ZIQSEQYuE53nupIwQgvVTU8mtFokBmvurZhQacaXd3R4hbjQNcy3IxwNSFixLxs3xgAACnEMBEGvVnnHB9zlPrAY2xog0z5D5iNERpmGHL37Hh7jeq7blsiw98muF+lWqEnSIIRzsPAHqaiavH+u+IadboEFy72oets4pnQF+9+1bd/awFkj0vACwgofvvtf9ujBcWy/g9cd99s/7PKMu4Ncu13WelD3/OWcXtmhLiE2jDSeAtXaK1c09pQU522aL1v1W+3q1okwS6AYHZ00cVXg35YSaHfbTAHIBKVcsMYIJmtOhGTRN2E2TFv8WLRQtENwej5hjxOF4xPV+xDQEjMGjltjFcPf7PbxTvUGF0DQKYvIoVnNFTPBdQ1E9eOcAYcYYPMYQlHYdlG4v0DyL8wqHcQg4zjOSJvWMNacsxSGMqK72SDHOqvYwDKzQkz1ec+m1yhmCuMzauZcZshs1D1UKclr69fROC4zZNkPVMrRNkAkgQa4NskKPKLVvGOBAqNZ0saRFNQapgl1Qgy1iSuyr00LeqWNgmoSuGYdaMe4mjai8w+2L2SIw1Sycl9lU+NUYl6x5rQbvsXcgqifrw1uE5p1DYmV/LscjxjAqPNsLfqXnehgaBZdmmK0KP+WqcksJYD8gQ+u6UsrIGViyMl0De8B7FAFu5wXCDD+OyiZcFpTDEbc3L0GlYvCM6fEV9oHx7PEjfPnDDzB5p3lA1tygyIIlRhN/1prBXMVIO6RRO8giFCt+1sV2Zw13e9D2jnujr/vz1pfGpb1oa5zedXxeSNh7bbj6Zt+ShqBep6KhqP77OiPTfIruFtDd12zZZ4o/vdWZrq/VzOvJ+feIZ/O92utOHJUWGKx25OLv9437yBZi0JK64KfwyvbcVl/VrtjG2DZWWesvVM1IKTmjGsRkbTbuwJD6CSlbLygBKoWuCXdzOCAuBM+MYBTqXAqOy6IJbivubXBTlWrq30qZDiFoYW5VhfvgPByp0rqyDJ2J09pPL9BVRpeQ1kg5UTFZVWVqkKM1vxRlr2oUWyE5I8fFlNk3hqtWjdAsrMs5AbXCi3UINqeICKg5m3o9wbNDFEFN2VrIE0JwcMwoKUFqsc7Po7bgsMJqUxFE5Y1XDGUGijWOhDl0ZHBhWzZkslIK/THqRtOQSNvBKElXo8wtsqUPE1LJqKRVWyUXsCc4AXLRmrslRiXNOG/CzMXKEtSYLstRDRuxEV0A1IqcksKDRn5han78GiW276rzu3WcNgq6SKe9C7Rguop2LUi5olTSXlv2WqoVYId5iahECNbyBqIEmZIzAhGCY1xNA55ejXj25BEeXe0QPCNXVYgHWQ+uUrUODuasYKNMeLaYBWvkdGmZb3erNT5e/2tR5nYN93t0Z0ewub15v+0xW6N1L3lrPXhzjg2G1ihfSDqc+y7jvTZc6BsnaT7j3BNo0cB9dku2T9F6cXt4TO2w04/tic6HT68V2qJnWFTGqJ3nViOxv9VJyI0VT7Z36sbrwu/v4su0yApiifd74EKxb9FZT9hM4gYVWo6gSEFFo/pmM1ZqwDSHY/dMTMzWKNMFBYNjVYLwA4QZqQoOz5/DScUUPJ49eQKZlL0XY8Q4jP27KzOrbaoEFwaM44SrqwmeALEcxBgGlfwRAguboTLpo6BzqZpSRkUzXK4XPQpZAW4GamDksl6lWrRTtCQgHo8g56xFRsUS9V/nGASVq4pR5ZtEKsLggao1bp4YJUUwApgDpjBgIUYsBfPhgMExPE0Y9yM+nRdILQiO4Qja08wHhc4IqHzKMmMAwXljeOb1XpLllIy+T/YebT3UuspTgV13VFQyXyMwL87misA5xrwsINMoTLkgkNMcXi44HGYc5yNCCBhCgFRBTAn7qycKuULw6sULEEEbbJoUVElaK+WdRomdRdk3d4sm0VJ8SnNf4oJ5nhFLQSoAW+dp9VkdCvTxORbTJQSENBriqlJfx2VBKhU+FYzjpDnHrJ2nvXcYAuPRfsAXv/ABvvD0MR5f7yCismHsgBq1dCNVUTQXKh3Gm3NWYfrV0OjM2u5U6xOGBKsD0RxC0uvfflrJbyNEtaauONsa+7onU+QnbG3PqaP6mn3lTl5emrOrUbIQbXKObz/eb8PVxpnB+rWimL/t+LWkw7/1EILU84TqGm1tDrQNvygLThrLsDU1PHtbQYePUBWKq0y4OR6RM2NwjMkN8KQEhlJFa6ScA1vBrrL9CqZp6uoPg/d4eXtQhfjlgN0QMIYBV7sdgvPG9LPFZfVn4ziq4KktKDHHgR1317NRwUV0gyylIEzBSAyEXJJpBjqjlAskJ6SU4Z0HDwGSC5Z4BBHj+tFjrW8CIc0Lrq6vzSstcCAgaynAfHuLZTmiloyr3Q67YUAgRokLxsFjHPa43u/0O5WKggw/hH6fev2aqKebmrKGwWZrPV7BCky1v9WJY6PAw+q4KjRQX+ZFDYvzGMYdjssMqQWeNAKOKSPeHjFOk+aUckYqFeO0AztvzDp1cIhUCZ8ZCMy4utrpBifSIy5mxqNHj5DjAuccduNoEVtBTlFr2gCACBUqJxZzAbuAVCpSFqQKre8z8swxLjgcZ9wejrg53GJ/9Qh+GLB//Bg3xwUxJlARCDTCLqXi9vYWUoqVHhSkZYYrjOGDHZ49eYRnTx9hDIR5LpCSkEvqEGEpFSmfMnk3sczGQMiqbXlmLXilBWF1jrdr69T5/KzEjDc6/izfdf5pbwtZ3jfef8N1hrtujcA58+11o0cSdz7iXQzLuxuk89f9ahi2PqGwQg8a5dGFJdGcu4dggxZVnR53+nmrxygsxt5TJQ3lcil8MvoAPwQM3oF9ADmVXBp8QI4RRRSSy8VEcwNht7+C98oQ1E2igCljiQmZivbsYlYaNa2RtrLclGkmnUigBlOnkrIRmwoIs/Z/YmYUk3q3wzB432G3Wp1R7wWlZNU4MjhQ0UG99sWgM25RrBmUYsLAQwhaaB2CUfsrpmHENA5ddb0DQVK7wXJNrqkZJxObPb+nRAQmLdptHZBhpBsfvEKCxMrqs2ue7L1EoPJcG0WMKqKGKyYQO2v46EGUjbqeEeOi8CAz/OAwzwswBAy7EY10oOLIqsKxQrqu0+AhjRik50MmkyWiIs1LTBgnt4HJVhZirYLjcVanpRpbMCVUEwduupkEgrOWMq0AW6zMQ2rB4Bx244Cr/R67acQYLGK1829QaM4Fueg8aBqF3NMIbblQ/+O8rqofc+JDGoJx+uDd173hWHfNewHFh19P1Fm923FCBHsnjEjHe2+4dJO4a7Te/c0+8yn9yoxfAeN10emxfBeZUWnG664xP/v77hF3fpQHsoEfZcU3a1VoSWpFqgVUFVZgAuqosI4btIcVOQ/2AX4YNLpJGUVUQd4HBxcCdvs9CBUsxtIrFREZQASJwLO2r/Be4J3rEVhTIXfeGzGhibGaIjkZ3LExXC0fo//qd9fml/7kezaKuRQT5qOKHBc1BuxABORlAXlt91FK6bnHkjPC4BGCxzRNGLw3gyiYxtEEXL0K4TbjZVCyA6EQQWCyW1AGHQxWtaIBaCrLDAEBRVTQtlj9GJtMFlleMS4RS0pqCOy+Nsp6qYJ5nlFhrM+YwE67DTdKe1uvaricKmr4gOcvPgVJxX4au/HWZpTVJJFYC5aJrZ6OOxNSmzdm64NGa4SXM0KD3wwuCyYnVlLWlikGk+ZizS69A0zwuc1a5xzI2viQCKRk1JQgJWMcd7ja73FtdVvBioybU1isF1surcC6KYZQzyhQX1zbaOWuOVoTCO07WUeAjoKsR8smpfAme2TPxdtP0/J803GCIl34vM+DoPFeG67z6Gr7++nF+9WJWt5lfH5U+HcZ90+gu3RXgCwqOoUDWBPkTcmP+CR3B9yFLLZeV6lrVHDMESamg0USSvEoxaHkjMPhiEf7Pb77O78MYYfDsuCTT59jmWc40uQ+CyC5okrCtz59jsERAhPGFs2JIKWM3ThiCAOGaURJuqkRKeE3hADvPYZh6IrwAE76pm1Zl4AKqgIO3gPOTT3KJFMo1/5MrpcJMAjVCmVvX77EtNthN+3xaL/Dq5sb5BmmWO/6xjyNAdM0WbQCsKOeL/XOA1BDEZj7lkcAvHOar4hi4rGqvl9lbRmi+UdTmeDWWkPWecAMsDFGY0RcEgoEL1/d4PZ4wG6/x453YDgsOQHksKSMV7e32O+voB2DlTGYrWsAGz18WRZcX1/bddfWJIfDDVKc4QgoJSHFiJyi5k+Lfufpao/raafny15lrkhA7E0pRGvvNJzxABUcl4Q5KUy5pILp6hFqLrg5zHh1e6PHs4r/avcBlR07zDMOc7TeXDaHS8V8PGjftBKRjgeMTx7h6aNHePb4iRJwTuaOSlHFqPT+UtY2KKu3vF2PbQ2teIcQcKr+ZIjGPcv4PkhuS6jq9/hB9OTN98/XQYWf13ivDVfHZNqf92z+9MBfr3v48pDNv5/PraHzf88mE4DeqmJ73Oc9LhnSuzVda2HuyfG8iue+bqJvse4CachZV5kgMGJSGMbvR4SrHdww4LBEzPOsEE0uoKKNFAWMUiJKSZBaEYYB17sJ19OIJ08fdR3BZZ7hmDEOo0U6taupe+sZxUQYx7HXA3nvVbbIIqfWywlQxXSpmu9hk0OqVaxB4NKjGnYBngnCzkSHFS4cvcfkA4JjSCnaPpDU31bmoNYpDV41GIlIoUZZe3DVTe6Qhu29W8sdHLveokSJKQBZXVbKBY1j5+C6FmUu2coF0COXZV5we5ixu7pSAx+GPhdadFFrU76AivuyN3X4Ebv9Dvv9FV7dvEKMEfO84Pp6jxgjlrna/CG7jgX7/R4zKRkmxQZJEnJW5XkCI4QBBOqal+wCcq1IccGw2ysdvygE2ASMl1T075hwWI5ItSKEES4ElNsDUilAyoBTZZZSVU3DeYeUCm5vb7EcbjA4xuBISyQ8Y/CM3RAwBKcF85s1I6KKL8VILWsctRouMejwDoxm0RRJMyKGYLTg6DU8h4vGaLvDXHDuL+XI2r+v23/uGq3TGtPPOt5zw0VvGE2dQomXj3+XiOez3YlzQ7s1Wu2Bk3M6h8E/47gbVb0ecj1hO569hprRIc0dvC6a3EYwVQSuIxQqf5RLUVHYWq3bLGNeEnJalAoNpVaDil0cwTLPKCVjVwTTMECI4YcRRAIpqnqQNn3EquUrmnxU+y7bhoSq4YeeSG/PExEctwVu6umkeSdVtUjdcIHIlOdJsxa1ALUieO3R5EjzXWx3l6FGPHiHYdB8XlMm0Vb0aumlVlRa82p6HVtYINb1GCZ35ezdLU9n0lutxq4jRKJU/9aFWO21qn5E64I97vZrqQFRj54lZ+QiPaoQWPTIvhcLtyLi9l2ICDFGZItQmyEECMMwaqSyRJQy2/1hbQCZCxJrmYFzCk8qL8ZBDIrzIj16yktGylqnlXLBElUN/rhElCoIvOawYi6onEDVFDFKQSwVAdo5+Xg4IM0z3BjAfsAwBExDwBSc1fiZtqNYA1fZoG+yqZG8sMbk7N9L+wFB4UGb9nfW1Pbvdk3vLuYLD92DYj302L2D1pPTf84c4M+wi73Xhut1m21/fnvD6fLrt4/9SpzjfVHL9vdLj/1KDoX19Petptv5OW3P2X5bvWzeFrCuenFr3sd1mIyZ74jZtmJuzYtoSw0iQS6ayyBW8d1Pnr/CPC/48IMnCG5AcA6Dd5hvDzjGjKNE7MKAOaqK/NOnezx5+gzXuxHHOcLtBrhhxE4IRQpu5gW5VLAISkogiLISTc/OWYv51niybTTtOoXglbJN1hLeMiEMzSkxAO9Y27uUglyO8Kz1Y5DaSRnsVcqKIFZITL0wuloPr+B0maakzLRSMkJgbQhZimoRWrS7zPMm37bmVxp8qxGWCsLmrNqJUtWwNoek54qSkhVg9XH6t4Ccx+F41Nd4fe7V4Vb1EZ1HsWNvDwc8fvIURNp5mL3TQnLncHV1hUePHqFWZecty6JR13HG9aMrhDBimCYjv3h4H/Dq1Q2urx9jHMcenYuICvva9yOywuWqecSYsonEOoAcSpGeK3vx6qVGXPOsMHIpkCb3dJwhR82K3hyOmJeIw1Gv7TLPWI5HOCmg6uBE8B0fPsMXP3iKLzx9jKv9gGkIcEQoMarMl9RuKGpV2bBGaGnQ8krKOHVWdb2Zn25ElHXbZ9vT7uqMnjP4zteyGOHkfP/ZIinnsP+7jNVoXUZw3mW814YLeL0BAC5HJ82gCZ3e0Df5vDe78M2/WhUKaOOBnJzHaz8TfVMBcIZzb47b5CYuHbKF/tbf1wnaowvb8C5FZO1YkdbLyq29rPzaOn0Yhp7T8d6v+Z2N8Wrn0phuhoAgi2YnHJSbkErFAFWQn2PGsSwYvMfVblJv2JTSHTvANuxUKz5+/gLzPODpox1oUcWHmrLK6YiqMOyHoEoTZqxEKkquyvqTatGR6gLWJv7qPKRoJMKOlE4PAVVauyPTBB8clnnBnAtKTmqkPCF4hhj5oqQFNQ/wYdAmg0Vh01IKYOy8Ugp24wgaBvjiUGvCNA66cdeKEDwgFaVmzPPcN/vdbmdsPM2ttPvnnAOLbob6ndsGV/u9yCVrDZYRMmDGh4gwDEMnrjh2GPc7zPOiyu3M2JnBZ3NarAwWx+PhbA7pHLu5uT1Zs8VIC2QRNkwNfhynk9e1DbYZruYopSWpygcTDvOxF7LnUnptUyoFeTHnhbWTcc4FRSLCMGKJ2l/ruEQsUSHFeZ4tis3wziFIxUBAIOALT57gCx88xbOnj7EfB3iy1dg0LRs5B6RRf87W/RgolQAyd8eW8IZbYeuCWuVCj4KbAynSorDVURECzB/RfKisBtFA5JPoTR0B7n3nzo1X+/vSntIe3x5zChUKmlrJ5zXea8P1UHRwduTJ8Q8c8jmPN7tRD0V9F0+ZTsPsfrxsvJrzsHxjcO/+fh/st3n8znOMRsRomoUtumo/qoDgTqKu7efcUedoC5YIAKs8FAS5aE+uXAVLykqTN+UMybkXUGeBMg5NFHdJCY6BKhPmJQK1oqaMwelG3AReHZHqGRKhC8xWOeFt9VjToB/YRg9h6ySMrgxCsCJix0jMm41hVXbx1jG42mPEsEiLNSqolgep1rGZCYGUMl4KTPkDtpmde9frptPziBY59s3IlEOcW5tCts21JfyrqAoFVWVUNlYhC2mxNwCwdXPOVXNPtRgrkRCGoBGpCeXmbBp9RnoREYMMVbWemy6kvV5EOyI7YjB7hDAaEcjydJvO1U2mC6R9v5rbGFPSvlkCU3Rp6i61RxshBFTRSKiIsh9BGpUlYyS2RpYQAUuFY4IXlf/aTyOeXO9xvZ+spoxBTR6LNh21ZT3X1oCzdiGZLZzXnM+z6Ot0C+hPrZHyemyL5KT9TtuMlmz+sWgbjad42Vl9HQJ0nu/ejvb9ziHN37B0+EtQ4eugv18NCO7uOEet7443mRybo+9/WNqvdOewc4Nx6bMfMl5b76u9j3Pe1CC0ALVFXMEiiiaEmnPuxus04lsjO4XptG8WoLp3uVRUJiyxAJThfcKT62tIKXjx6gYkwOAcxuAhxJoPCt6MKQGkLLHbww1yTCgp4QtPn8IPI/bXjzCyvt4xQ2oGsm6YVTQC7BCUiLYvcQ7Bc5cXQi0aAdeKGs14MkNE+0o1WZsxDBiGEc45a6fhEMJgzVNtw4Xg8f4KIK0buz0eAcBYj4xh0LqkeVZDWWtVtl1J/d7sdjsE7+GDP7mP7R4ABgsHNYLqlFRrE7PRCXQOwXttagbdfIZxZ603CLurPea4aDNHqKpEqRXH461dJ6Wqq25lMlFhRowRgIoMhxCUeDIMNg88dk/2IAK886qQ79iCX8E07lCrfodhGPr0bmQZZjVmxKSixkUQl6ydikEm5aSKFdk0I4MP8H4ADgfczkcsMSJMOxUG5oIi6Er0tRSQ5QI9A5PzePLoCl/6wlN84dkTXO8njN5ZTstIMcTaDWBD8NB+YEn7f1VTsrAidwJMoonuQivN3mwc1PvGHajwrIEuASZMjLUUZLPGt2t9G3HdIWSdHXffHtbrNjdO82eBDN9rw9XGudFqHh9IOz/RxtM9e+U94a9sIp03M3J34MkTCLJ5wg06VOruCZT9ORjYt5kGl9+bLIpyJ7g0swOLdGZdY5o12KlWNVQ5e9RqTQLTThdl1UR9gwe3LdPbhqOq8va+BGvwWAFoDs7ZxpOL4DgnPHmsm0MFoZaEnCOOMzC4A8ZhwGANCx/tRhAT5pSNbcbYhz2cd4gp4tWrVxieXGtjS6Nl+eBNqEAV1LWgNSEmLTKVWlBShJh2nh8G7WBb9X62Yma924RpHDF4pdYrlBqw3+8VDhRRLb8KhfamEcNusg3YYf/okba7L1ZPZb2cGrGBoPR9Zo32UAXsld1HNt288x3O3aqmp5RQiMGOOpzrXIueASp690srFWDtl6UFugnptskIEWIq2jQUgmk3IZYERx776ysQMWqKSKVgHIK2to8RL17e4PrqCj4EhHHC8Tjr+RO0lQ0YKanj02bq/tEjVCO8OKfwHjFhmibE1Ag6VjRcKlLJOMxHkA8g7zFME445mQwS7L1VqV5sPVYInr+60fMWLRIuOaGWrFE5KjwRJufwwfUOX/7Ch/iuL38RHzx+hF2DnaEMUxFBitnIP7XnANl7kA+2hnTdqbNULZJqeCGtUQqt/+jSPM1dXdo/Guzn2HUnRUSAunnfzThnEN7nzJ50idg4sfeSQC4wCntk/47jvTZcepEuh7PUwOGHIrGt4bj4Aeef1f+4k6t6/Wjhv6Cf2n1HfpY7+ga2bvtdZLMy3jTqOveydMPz9lPOoq619USLzLbFqjrZgX59zMA36nmDWlpCmwAc5wWOoJ49OzhSdXmpgpizMgYBBKeqFqkU3TDsO7UcQ4xRSQNOF7Nj6HEW/ek5VBNzbVCKkjFA2murZLZuu5ZLsGPa/HOs7jkRKczW67NIGx1CBXy91/oxZu69uZhch+gUvtJr0qNAqJNV6zqhnEGTsIisBd79c+21LOhMwVwKnCNzJNaWJa3+CERg5zWaMVi51AJiDyXQqFiv6hwao1AqhjICYuzQLnyMDpWVWuFELPoMBrVaE0wmc6A08i6lmMZjgxQ9ojWjbHV4IOoFygJYoa/CnSzKsGxU9CrmEIlqGMZWGFyqRcTeFP700jq1iWAhDI4xeodHVzs82u9wNU2dReiIVxivrsalwYViwLPOD0aD/YkYEGVhUo+4+irFueZqBxPpshE6We9na19OEg2XDzx1wh+GDrfoSTNe9+1hl0gj7zLea8MFdLv0YHTyusjl3AC+9tjPYlg+w1gDuDXr8rmBntvv/ppJ2hLkjZzBXG3jDUZxzhiGodOdt0SNYRj6R7bHWnS6NVpiuaQqhFwBKgVVCCUXPH/xEtMYsBtHMCtMOAwBy+GIuMxIKYLY43CcQUSIpeJ6GlUpPWcsSVUPHBSyqs4hMGMaHIgHEAE5Zu00bC1NmpGupSgTD5qfmnOx3JWpSsiaE2QA7LWNvV4DzZsIQXt2ERkk5TbU8nZ1VjagY1YnoKoqBnW4Vg1rn7u8QjkQnOa1HJvGos5dT4ycE5Y4W0PGYOUA6iAUu1e5FAhpHRoxWwmC1Y4RACYEH5CyGqtlWTDHBVQccMtgcDdSKR0783Q7r0RWRudyOCKXCucJPmjX4GXW2j3nGeMQ4K22TR2PgnR7xH6/13O3powazdaeJ8pFENNR26ZY7seHgJwLjocjlqJ1XSkXzMsCZm0xQgA8EcCkDgY8Rqe1Wh88foRH+x2mwcOTtpFRUoZ+wArT6R2tlt+SRuaxRqYiLadXjeizLuzVp5Pmt2xGhXJY7xqni0scDUPBxY2DcHetX0rBnEOK58935nA7dZD5+qtz2nJ97zrea8PVLnT/e3sRL9y89vi56vHDo11+wlrN/u7jdFIATKLN/gCcG4nXnVV/z8/hfECW6G8botN/VcGdTLX8lNGlnu/aCTeEgFaTlfMqrJvz1F/XoEIAnaVGDdfC1gtrcUuLzoyoAM0VgBz8MEKKasrlKjgm9ZohwESMAkKqFbfzrAbUMybv1HjNR7zICagZV9OI3TjAuQkpJbCdZ1Nj0BVf1CMWpY8LoO3V3SqIVUpBOh7MryH4EOClIhBAZDJH9k1DUIMGqHFTsVen7VdsJ4pL7IZLSkFJWdmXqN2BItE276XoNU9xlalypqgOIpSckRpUSIAEVeAYx7GXNQAmVcUED2C/3+HlzSvElHA8HiHHA5zl6rJJOsWUMU47KEvTQ42EEkoqET784ANwdoi1IM4zrq9HTNOET1+8xMtXryw6HxBEWYvH42zswYLkCkpJiDkj5qJ9raCtR26PM1wYAC44HI54dbjV9xlGvLy9xbxEpKwq70WAXDJe3KzqGNNuh5QLYlQdw9vliGS5KGavpQdJCRmSEqhkUEkaaY0jvvD0Mb74wRM83u8wOgZV7QHGZmBa5+amTqLklIKcVEGkZDNi1lYFFknC5kgzrhpsSd+CLsjWdvKQ2zyrDoKDZ4dgjlErHyjdOby7F5wbpfsQGN4cd9Ll4l64cH2+5VF/wxquNi4aL/3j3ot4J71537V+Q+jtTcLe5glv33qdFK953Ruc09vkxO6crxl1FYJtHrwuyPbel39OE7jOqUJDYxXmvBI2GkFjW9i7nvP59TvxDze8PsESM5hNGXwKqCJYkjaP1CCAMFsUEapgya2GrCDHhOtxgB9GuGGAC0FhMNJGhhERDO2TZWl2SN12ddbW9UzUNxZi/VtZgMaVMvWQTjYhQhWF6Nj7DtsphGRv1CEUu+aMDsOqUS+oVRtxqplpEZcqTmhX3uZwiEoldcdEv4ca/4paM1oNnhY2Q40yWJl4orCuwnQqcKufpC1jGiRLVt6g7Dut+xrHSaOz4AFyEGj+SVve6DbbBIG1O3YF7XZ6mqZeAhHr5aYOY3N6qiibsVTNF9cKELOpyzPYBRyOM+akBi+VqhCgaH7pOM8AMdiPvf1HKhqFlwoUqONQSkFKESVGUK1wEIzB4/FuwpPrKzx7fI3r3YTd4OGZ4Gwz5wbVAkbQaWzCNo/brVaHSG+1MezkrINx4931ZbAaqebY9bUibRlvjMzZatqu47a+tvyPS6mA16ULHnK2H9oRf0NDhdtN/3VQ4X2R2YOvW1/wwEngrVgRJ4e/keVsp3BpGup40+jrrq92+v7tM1qt1X1Q4enkVqhjhQ1Lz6c0I6UwYuoGrBUj36n7uJPBbcKh2+XKRqeuBjE9VeZajDjOC7wZzmOM2iW3amPA4FTY9BgjHu12GIcJU3AIo54fW7FwrKqXWEsGrOFjteS6Gi+DgbDmLfo1AYxUojeCSTc0R9x7HIHIlNBNvslyL9h4sYDCRs4FJXQ4FZFVhXGVPaLWkFO0BYhzziShtHC5lIK5k2I0jwZjOhYpyDmBmZU5aNeYSKHZ4/FoeS8HFby36AGEmhNSrVhihguh90BTAouqt19dPYILwTouW06FWk2a5p3GaUJcFqSk6vAhBDXSwXKMWHOaba6llBAGDydsQbBByuyQ0gJBBpeKwzwj5qKahDlr3zGoUHNMtxApGKZqPcXQm3zqcYwCK85OGSUlBBI4z7gaJ3zw6BofPL7GsyePcDWNGINHYO6GazUK3bVQqv0G/9tklZuN7izE85W8xlCyeXR1zNVoWcx2tsed721tjXWX8N41/XAN1337wp0h9yiD/EbPca0G6/Ti3QcVvvn7vs1r28WveCMLJoo+rdU9p5/7dp/99pBhXwY2e5vWme6pd4379rwuFSZv813eO4j4k6JjzXGNJq4q8H7pFPkeqTlTX9fEUT8hsXCkrXkmQEjhvypWZPrtTzEOHsE7UAi4PR4hteLZsw8xlwJXKnjYIdYMqnbuIYBDAPsVTiQiXO13KGlByVG7ClPvEGnGitESDb0uhzXqIWZ4Xgtuc63IOXZSgjDB+QDnAwBBSkvPd8WkhnyQASSaA1wZY4JSCHmJiHHu7TSoatRUckKtqrPYGIbOoj3HQDYq97Ic0ZTfXXBdcDcyYZwGJYQAyLFiiTOy5Smn62uMYAQfEK09TMxa6ByqSiApvEVwLiAQw48TnPXuSimB2GPaXeGTT19oHV5MKBUYd1eY9oR5no1yrh0CCgpyyjjMBzhLBwiAF69eIteEaZqw3++Rk6pS5KpReCqCWIDjnAHW6CsdoxmxglgF2fIEx5RQS8RxnnFcIrJAi5SrFhqXGCE1YxwYIwH7ccB3fPAY3/3FL+LRfodHuxHXY7CmnV6JGSddpteIp2426VKs+SZZHaE1uy0gm/uthELu7GG0/T/RSkxmgmyaqJ6vT3dmfNiaqPb8ssGU5/WYWxjwPkP40J613Zu2Nupd9rnz8V4bLuDMWG3/1T/uvUCvu3BvcmHVgwHOm7i9KdVzCxXe99mXn7/onL1x5Nf9oLNosXtkFzyqS+dyyVNbJ76H940Ndrco+cSzw/Yz2nczmE7WrybmkJDw+hisUaE1IyyisOLtccZN1sT+0ydP8MH1FUgqyjLjxc0tFseYHKHsRmAa4UmbUtaUe4ddNQCW2ayk0UIpkKIsQ88EKlW1E2llDIK1hxkzq5YiCAxTCxdV+sjZ6tm8U8FggUVUpV8IR0Ax+C0tixpIa2CWs2r7pTgrrGnR0zBo2xAmQq7aTiRbv6zm7xdj95VSUFMBO8CJ3hONxAjeWrKkGAETz6X2nZxDGAb4YdB6MVKlklIyYkpwc8QwMXa7PZZFjdw8H3G1f9Try47HI8ZxRAiqev8q6Xkile5EaQdnwhACvNN2LmSyTTFlSFGB4MNxgVitF0oFnNMOu6LMQiGGsOD21SskEYU3AaRUkHLW45JGaKkULMsCKgUOgsF5TN5hNwzYhYDd4LELDqN38ASLtFYGZrVi7bVbuFb8gayztlhLk96Liy36ZqBq/rQxNKU7bdKzve3/Oss3dVNniElbn42B2YrHRURJPt3fvuuIntdjnb/ffdDhxb3mbKN63d72puO9NlwXw1T7dZvDejCcfeDx1332uhlcGm8eCr/p55/e9Ps+1Z7vB72hET0zWm96Ppc8PDrpUXVXv/C8YLEtuo7n35PvEhCki/hiVUEoVTf4ostZAMwxokQt3F1iRJVrMLQe7PY4IzOQWZW9J++QvdNiWmMNLkaMULFbgMxw5ay9qTw7iHNwAmQxIVvWPlrk9BqIOFOasPzVJleWjZnooYW/BKOJ19SvR/XeYCxt7TF4K6oWhTJLSZYjSgbjZUDW3GG252utxqZWzKpYfqU1cYQTDDJYlJzBJoFVbYM1fmQvXXDOYRip5wbJ6aadS7W+W9GiLC2+zbmoCvzVY6sBrFq3ZRvZbrfrm2NTqFAF/wFChFJ1Dp0wUi3qzaWa/mGAlNJlp0pVVmGpgspqxOYlIkNUe5EI8xzVQBiEmXPWvFjKCJAOpe6GgN04YBo8Ru8wOIehw4MNEaU+J9doqc3tNs9XckK1XCPg+7ppLqVYjd7pKpD+/2a8+pqz6K1Bj9TLJcjWojsxXICVCdg5XTRCdLrG76z3Cwasn+nZhtMKprd1Z5eOe5vx3huuc3hQAAjfvaDnF//Oe+HuDXibHNRnOffzx9vYUmnfZGxLPU6mBN1jDzafec4Gepdwfl1Id41Wy4FtYYiLk76dMOzLqCwFYC3TAQDOQ6Qgp4LjHPvG4bxHTbohgwRPnn6AR1d7gBy+8c1vwhGwCx5+N6mmoffwYdTC5uMCDE71Eas2s/Si9UlSNUnSRGlJCAhavNsusECNjuQKqrpJKGNP9QkBUQguFxSpIOj18EXbuLPTmqU0JwAEcoxhGVfV9CrA9R5D8BapowsBj8GrcketiMvcmZvON528VZ+vw5i14DjPOBwOCK88njx5guvra4ABZzVby7IooYNUx26JEc57jNMOUxhwezjo60ctsF7iguPxiFQIS64o0HzeOO0BYnzyyad4/Pgx9rsJz1+8xLxETOOIlBKur68h+z1ub17i61//OkLwGIJHrYKbuEBE9LtalOaHEYebW+QiYKfQb8qa6wy7Peb5gJvDASDGvER1ZADcHmYzJg63xxnLEhFjxLTfIxWlwtciYE8YgsN+nPDB4z0eTQOeXGledPSMKXg4BrxXiFxlqjaOI6+9w4mt4aUV7vd7UgWt0ptAWr+1MXwEgVxYggT0msS2loL32hFvu55sojSnsaMZliMsYsuqvY936nTZsdrkQb/Red6rCUHft0+0nN2pSsZqsD5TrSrec8N1PtYo4w2Pv9dI3X3w5G37DPi/4Ljz/VsIujGC98CDethlA3YJNjz3oLZe4EkERiuR407ExatXKLax2o3cnC+hopoN04XtmBFGjzAEY9tVuGGAMRVwvDnC8UHbfDiHkQmTtZ4v1UQ/iVFL1U2WBFO4gpAovMMKgUkVFMlAtRwXC0haJ2A1csE7OBcs8li18NplFxEsy4yUW/PAit3uWiEcYlV39w7jMEKSbVqeu7ZjI0CIaCPMkpLGQMzwjpGXCmG2FivKnqy1qFgwVtiNiEwwuPROyURkXXkzsslXSVKV/sNhhh8HOE9gb5qDMSEVYLrWjXjcTRjGCZ88f4mb21vMMeMLTyaEcULMCZ88fw5tmUIAOYNz5x6R5FLx6fMXKjI8DNhfP8Juv9d8JggggfNqSMf9DssScYwJV2CIc6AgoGoRGBHgPF7c3CCXCnIeL29vUaBsSGLXW60kU7LIueA4L6ishfHBe1QR7EdVXnny+AofPLrC492Ip1cTHu0mBOcgtcC5AE9aAK/w40pGUAbnGl1la6eSi6AKKXhMDgUtCstgy+n2dWcguvRkVgMeqRubVuN3tdufrNEW2YkRc9gKoyvk4no/l3TawvgXocTNcef7QXvf9fc7u9SdY952/LowXCcexpsct/n93FtQltLdWq8TCO5eGFDO/j31Lt7kRp3IrrT/fb7B3oPjdZGWBbaw/PLmOq7X62K0u4FMTiGJc4N4HmnaBRCNakQaaEioYKPEKIQopI0awWKU7QKOEYd50SiLnRbS0ppHiDGBpCCQQl0VpiYhhFpEC0JNkFXzbLwBbbAuZmP15Zw7dNO6FZdisj+1mLyVJsU7KxPUxWObUCwTazNDbDT4SGt+BAA5p0ofRChZ67xaYatgZW1tNxYAvUasq2NstAizYq2mqqGUc0nZ+lxR/9ZSVSy3tQsRE7GtAjUyJt2VSsbt8QCIGR9i5CIoVRXfwQxYIXRKWaWJ/Ib+TyYAzQZNeYcya16L///t/XusZFl1H45/9vOcU1X30Y/p6RkYxgN2sDADcRx7NLFCkEA8giwn9h+OjRIcRRCTIYofsRCWbWxHCQmRoiiRZf9nIsV2EusHQUGOFTAPi3hMYgIiQJgw8wUPmGnm0d33UVXnnP1Yvz/W3vucqlu3u+cBk56pNbrT99bz1K6999rrsz7rs7qer5G4EJx1ADkntux6UIp32r7nnFcaR4BVP/qeSSuZDamc4xysVIjCwyR1jIk1mFRV+bFZlFmIIqNUcrRl6SZ1duJDCiW4PusV8tiL8h+P6TDnhUB5TXY2A3AoyvqSxXlppVFVVSm7QJrDuX4MYtAjZBYqj2su6VhZk/nvgnpszmeNg4Rh/x3pEI72kyFdMeyiWWzgqdpN77hWIMAb2OFvBP4a58cAFFovgNR0b8NzMsUTAUUobtNr0xB6b7quFec2mlhjLyrEqjdbP+mMx2STszwNj94Mpw6STLm+KN++9sk2TvD8yIyLIx0KIBkOW2E7CYEoCCQBdj2jlczZ7qQzxxugjz06z5ulNhrBpzqlCOiqQYwBzhEL9E4NlK1RNxMYEIgclm0LalsYCVRa4dgu0/MjXOfg+x6SCFoK1BUrnQuiJBvELlNrww4loiiFGGOwu7sLqTW6vkfbsYKH1gpSISlVEIRkVXTe9APavoXQfKbm4u0BZqrrmkWAiWArm/QUCYgBMhr4pUfXtQAGRYLSvVkOZBYhBbS1WPY9hBQw1sIYA6E4GnLOQZmhNc3RfME6kqZDNZ3BKI5aj46PITRDdH1oIbXBZLYLZTVcDOhbj0ARfd+zhJMLmExmif4fEaEgdQVtLYyx6LoeznlozQXDQjLjM2/qAhE1+GASEHD5+AhAOvkrjZAcgwuEhfOlUWjrPGRkQobUfLhwrcfBwQGzLfsezjlY71OPNw3fd9CRoCPQKIWZ1ZhZg4mxUOD+aJVJ+bakaZgVL3ibDqAo03ph2j1JiUgSzkc4z9eJkfNSGWAQgBA6LS9ev2q0TrMobtYK1MrA2gqTyQRWM4wcKedRk6p9CNzUUkrmvmT1DjGsdcnBLTgW5P1FijFashph5R0uE6ZWpK3yms0nXIwOpDwz02d7nhYgP9kczJN93TR3MPrnW/Z+607jqeSYsl2vev3Gr2vzNa5aWpxrj1uPaDfBh8PpLdc6UZnslE6tIiUOBj+aJ3xOZIN7KUWCzjqIkRA8dxhmLT2N3b09nN3bxZndHfz5//dliNCjkoRgFKySCFHBLFpYYyGFgjSESmmkozLaroOW3JFYawVtDKRW6L2HSpCdUVVhTXrv0S2XcN7Bh8D5IyERiND2Hdqug48sh+VCPvQAQnBrD2Mr7s+VCppZ2T31BwvMRhRCAFLDWBanNUbD920qkuYcA3d5jkXPjzd6CaU1XB/Q9R2a2RQmsRF9DLAVq9gv2w46t/wgwnLRJoFYdhSubeHnS0BrHC+W6H2AjhG6rtA7jytXLsM5D6k0jEragqmBZRc4aopCYqdpcDw/hgRhOq0hlGY5quMF9s/uF5jMEeCI0MdYoioICW0Iy85hsVzi6OgYLmY9wvS5E1RJxL3EhJQQHZcDKK3RTKYw2qAyGpXWaKYNGiUwtQqNMajTT5UeMwh2pwJysP7FGCIpBIzsJIihUtbXEBiSVxlRoNKmhSMjUe7jNcLvpFPXA84da1RVjUlTY9ZMYK1NEXzKd/acv1u2bYq4AEDz3MjLaUTIkiNuwDh/tWlNf6v23hu1m9pxsZ1MRg6/PnkHsBKtlHfAqVHthnhmhc59mm3CgDdCmWMY4tmdK9e09TE+bdw3TX4xhhzHjz35bAwRoMhIBgCU3FJWx+ENIyB4zuF0XY+27bBMtV5WEmxloCzr4bkQECDQO45qgu+5LkuIlPSWUNrwcyK38eBTL9ef5by6SsoPIZ14WTCW8xAEAYSYNoYkTKw1AkKCXkWB8Di/pVagGggJgSQRViCYrIcnBiWONKhSyLR5Uin6BjHvMtfvZacUM5STI2POzBe6O4RE1zM1PzrHfc8gIBExbztO9EvB8GZS0eh6l/prqdQPi3N/LgR0vYPSGtIpLJXiaxECzgfWKATgfAcImWq8ethAiKkztvMsmCuytFfw6LzDsu/gkzpuBNC6HsKzAyACszJ5wqTNnFmqgusRIECwWqOpNKaVwWzSoLaWyQ+l5Q4SDJsiDEpQ2AilIMIgGkzDwSTSQHMfVrgA5Np+NXJcWThZCPB1pG7XSttEWKnRNA13hhYAxOj7Ro7whzWW4csiJA0M47DhgHk9hYzxuj4N4dmY/3o+57iKzxIDVLgOrZXbNvy+6e9yO4DxQeq0YR6+CI4AOCqgE48Z57tW3/MkXDd8phTCi9Ov80Y+y40/h0Y/Jx93rde/7nuL1cU5bMgnvzeZL2XjNchyUAVvwxx/JYFVAYAociRGrKl3+cpluG6J5fwI8+USalJDVw2mOztYHh9wF12t0S6W6NsWy8UCja1QWYNJXaO2FZqmxrRpEHsHJRi2sVKWVhsxEKIWEISUz2JqujYatrIIESDBxdd1XcNWFWxVQXbc00prjd75lMh38J6FbrXJArisM8gENiZZeO9BiWhBFLm9B6UyDaUQKEsnpWaRAogB8MlZEQS8jyDhIaMCQSIfyKVW/P7WwlQ1rh4cYdl16Poe050aRhsEIjx+cABT1ZDSYNm2CF2PPhUZT+spYqTkqChJKXkcLxYQqd6q6zrs7EwhpMSic9jb2wE6jc4FhEg4Op7j6OgI0+kUk8kEUipWOfEOBAEVCR7cOdtTRNunZpCSSx/GOea6rhPCGorzkhDouhaSNIIARM30993ZFGf29jGpDWwqceBSjLyO8wRlRyUSrTcTclhUNzEIKTJEmkghHGGxaDFxEqrkoZRSCJHntkh1XlwrJlBZCylTPZ22aGp2WtPpFHVdl4jLOVZGiTGibdu0btLhKB1QiGiFwLMOC47/Hj9mfR9YR3ieCdbg9eymdlxPN1xdOfU/hXBmLNNCGd4qp6vT5fs3famn3vYUosZn0k6Lmk7LnwGnT9wCsGyACkXaQDJuHteeL9Yi2Hx3rmui9Lo60YJlBKB9yv8Trl69isXxEY4qg4vnzqCuK0SlcLRsUVUTNJMZ+gj0IaJPtU4RlPqJBTTGQkgNpQygBYyS/IMISkLDA82fNQbzMVkqVSKESITZ7g6kVHDe4+rREStOpPqvcc8smbx37pDsHBcSV5Xh6Md7eNcX+acYArqkJiGIYKuKnZPg3GI++QcQjhcL9vNKAooFfqVW0Nawor2UsFrBBYacpIvwRFDWYlbVgNJonecu01Wd6usEdvb3cXg0RyQPbatUINzi6PgY0+kUBJZYWvQO8fgYresxaRocP/YYlJCYTBqoZcURjbY4mnfoHCGSwqOPX8V02qOqa+zun8HVQ3akR0lUt+8d2o5JIxC8mTaTSSkpyGr5xhjUtsbx4RFc36NzLSaTCYwSUEnTUSuFyhooNRyuCEAfOA9nqoqJDyMl9Eg5+l6FASlGBB9SkXzPQsmS508mFXGeKWlbpo4BSGxFrTRUirJqMzgubSs0TYNJ02BnZwdN00AIznFx406GmK215RwfQijsRyklaJRqPy2qOs1Z5Z8b3ZvynvFM7Gc3teM6zUqQ/WSiA/EUndf4dzrlDozjmBuFD5/chLiR265nY8WPZ8JRnnReAyMpt7EXGBreBYwWCa2O1InFhFXYJdN/cwEubwoKFCPa5bLU3YSoQYI3ZGo7wJoEkQC+7zjfZgwqamCN4etKShfeefQ9R1dBCEjBTiBvODKx6RhuE4leIhITEiVpKpNad87pqVQ/E4nSyZthG60MpGS1Bee4dxijjekUrBSITFJcSMK7SqXNM6suJOgvSlAMRdGhqhvWDgRBGwupVSolkBBZrsm7VPslIEXAsu+5Fs8oOOfROofOe0it0fcO0QdUSdZKE6AjwXsqfbGOF8viAKq64SaWAFrn4PskQeU9hOLuzDEzMQmQyiBSi8WyQ+8DR1iBo8ZcGO4jl/Qu+x6amGDC7NHU7iTBJhQJEdxt22gDkxyDIIKMQGU0tGJ5L+8dRJV0FIVIkEp6qTL3gMJ4zT+poDh//zHpPVI5lLCaPiV2pRCc5811j0LqRDnna5SpqL9Ov0vFjquua9QNR13ZcYXERg0+oLc9t8spaxJgPdGT3YqfKqJzrQPste5fR8WejD0nHNd4MCVEgdau9binZ2M1itMEI9eirwxnXe+V17HgUz+H2Pica2HQN4I/n3yfzdd22mPHJ7FyIktXK0X6fpAdlizOqxw00mlVSLny0cVKJWYSrC0bNBXHRUlyRyvO97gQsFzMUe3u8EJVGgECnQvoomcihmAF9Ni3mFYW1ljUxsKKJCrbdvA+sLCs7FPOITlgRBjFjkoqWSR/kCjiyN+hVKNNj4uPIQjaMCNSSM7z5CJVdr684cTo4fthnH0IMGqQ8Yme251QEMz0S6d8SD4QRJY75801JQbrSQ0XWPJIp/o3EgBJkejjQOd82vD5Iy3aDsoY1MqgdQ6tc3A+QFUV3LLjNiLGcwQJiT4Qun5ZZLiOl8tCKmgm07TZM7SX+7gdzR10VcEolSDXHHEqQCosux6xbdGFOFLIGJyjJ2DZdbBEgJAIgQuvQ4xQQpbEHoGjKqmZOOJdB0kRSgCTumKVEgDe9ZBimqjyAsGfRE9i8laxzEOeo4ltw3M05pwSy3YpyQcE/lz8Paok1aW1Tk06s2STZccpBSpjoZITU8lxNXUzclwiEXmS43KrjivGCBmH3FXMtQ9PwTZFXKehS9sc18iuTQA4xUk9Tec1jkrGv6cbNm7cJzfykw7hmcCEnxnHvAbRjcb4yTi4632eVZLGSfy85AI3PDcL++YHcGwjEyTjIWLkjbNrEaNHU1lMJpOyuJe9g9EKla0h6waXDw8QuhYX9vcQhEQU7DyW3QK+6+CXLaZVnUgerFIgIsNsxkqOEgI7yXwyJmUGMVUhYasaIeWk5osF6qaB1Nz6IxABCT5qppOUB3I4Xi5gDMOI08mEN+rgcXB4FdPplO/TFk4KhJ7gewelmR3IG6WH0pq7RWsJkbT5etfjeD5PkNs+mukOetej63t0XY9pknI6nrcciUEgUMC866F8hCMBXTfQUgGG82pVM4EFQELhyuExYiQYU0HoAEiPCAkIxR2mlULbd9jf34fWCo89/iiMtZCRKfkHx3NeIxGYzSZolx26toMxCl0S+V2GY67Hcg7H8zm6AsVGmLoCpEDvHdplz9qKxoBcgNYGs2aC/d09dMsFBBGM5Jo4LRkCvnBuH41mOTAjcvdrho21MSkikoVIk9cMpZxWIFFq4XIioqANyXEbC8BWEJJhQWU0dBJBNsZAa1sOJmPHVRsLrVPdoLEsOJygQm6myfCgMVy+EaLHfD4vBzvOfSkolXJb6RA4zmddt11JXpvjdXqNx91oauTJ2E3tuNZtJewd3bbp9hNGmY68+QsQSKVEiXiRGTnj3+MGJ8V0ZBpgrVRoOKbL5o14vOFvPKEgT5ZV/7sp3D8tulr/XMPtq++9iUQxPD+BnqfUtG16r+EwkRPcq9ecIcRrWY5yyjgRwDVzoigtKCGhpeRTdJ+/O1FyR33fQyuNpq5BTQN35QDk+qQ5yG09INj5+DYdCkUSR/UeDkg6hfnwnhLt6b2VVolKrGATEQCQnGyXCkoLVHUuyGUFd6lYGSNQ5I7DCU5SimuBQnDouhZKq6G/E7joNsaQ8l3cdiSQgJQaUgIhFiYHAII0ChJcrKwF6zYuug7Hy471CVMEEsDkEhcjrLCc23EeQmoQJLyPgI/wMcJFJoO74JOUlMOy6+BcAKFNkaWEsRU650p9WNt1cJ77flVVzXVc3oMgsWw7ZKJT53tYbWGqCkfHh7BVhcZWOF7Osew6drjOQyjuKB0TGhIDz0+fdA+lUpCGI3Epebs2WiWCjYZCTI5LQFCAFFziUBvFjiJBiey0RMkT5TXPfKFEOV+DhsfHaJGgYSMlhDZAcuSmstzHTqrU4sWknKlOqv8SSnHEpRXPM6kNswrrGnXdoKoacK6VYVfnelhTQQqFAG6KKpWCjAoycPuheEoT22sdWG8ULnwyaM6TteeM47reQFwPyx1OR+nvE86ChqTrCKLKUdbYaXHF/NiBRaw7tOE1TzqrcbSxKRQXYoiyr/W5r+X8xv8++dMPrf1sss2Ob3BaJ8kZJfrC6Ls48fKJarzmZJGeq4SAlgqV0XAyC/dSSc53XQetLQBuMxL7HkYKVFqij5kWztR3kRLiUAzzhRggPIGqOvW1AnxkBqQSnLvShuuEQEBlTaKiDzVaUkmYnHcCQ6dSKT7EuDDqCs2t4rmQNDky4g7DfNoHRKpX8iEdIJIzys09Bb8Bd40m7lsllOIckgACEZZdj7ZtUTcN6qaBFrLQ1iMJVqYglkgCuFg6+ICYYERP7Lg659F7h94HtD0L1Xa9Q1PXvFmnCGDQrmQ1fuG5zsuHJes4RmKh4yR8i46wt6Nhqhpt71BNJjDWIi4X6J1PcGZEZbinGglmSXJTz5jyngSZavAY5qVEaglghXWCEgJGs1qGAEOGevQcdnZJOCAdPCmBrwRKTUfFcKAkAmFcGpNWhWB6u5GKc4maO2HbRLnXSifHpSGlhk7EHc5rCVTawBjN2oNKw1YVKstdqVmEmArlv21tKZAXYBajkDJpiapSYJyv69TVTjeeb99k6/vMM4EMPWcc1zNqayFNSXQDhd4KoERSMcbU3TUOEVYuPkzwQUz5jRAD53fWoqzcuHHFkY3eH3jqX/hTDcs3wQWbYNhNrz8USa729hl+Brpt1j1TSdIobuhtJsuffFrO3w+l92eBUu4EbI3CbNIgdi3aGNG7FkZJuBAxXy5RNxPufNz1qI0GJBAE52Aao9HUFerpFCL2iMaAOhaXzQeJGD3atkdHEcEaTBpWf7DTCWxlEWNE13WYNlMAnCxnyC2PVZLmEYKbXXpuy9K27SAiawz6ruPmjKl/mYlMjW+m06KIICDRTGYgIjjnsGw7Vj6Q7BxYTsnh+HjOdGmloKsKHoSuZbKD1gamqmEsOweV6nygDI7m3FQyRoZCIwEeQJy30NZCJj3AebtE7zy3c1EWngid92gPrsJamxTgVTk8UCQsF3OEEKCtSWODcp3OBywWC47OXA/pNKrJhNU0QkQ9nWHeLiH8IDSbm3OSIiCwQPKkqrlXFgGNrWA0ly9cOT6GoAAtFawxuOXMHiZNg93pBBoBTWVgDfdWkzI3/xSpmzFPRp/lnAAo8MEEApxPJCr7wDi3LaWAhoIUBqgqSM0szrquYbUpfdWUsak1ECubSIGS49JmaBqqLbeFyQLElJy0EFxszWUUw9o1xhSFl7wWM4t1fU2PHdZT3YPW945nynk95xxX2Wif4gmiOKn0mJxnTcFV+UIDsTpBznPFQOXv7LRCCLzoaSj0izEV0AruLCsoQq5FZAU+FNzuXAoJidOv97Tk6LVC9fUx25RU5dsIQlDaZzdHj+uvJaWEiCelYlZV4WU6VeauyTKxofi9ZPku0sAnWgfA+nRCsIRS53yRwAFFFpcNAY21kHu7aK3G5Sst2naBEJi80TsH0/cwFUcEJAhCSezs76GZVBBa4srhAdzREWQMsELiTNMw8wzg96FULyUllEm1TqYqUaNUGm5Elc6fL/gAF3waB2aU9Z1D2/eYL1su7E1MN2upPE8IZh4yySORPwKzDbvelTnqA6XBA39WH1lmKBIUEbQQ0Maidx0CBKKQqKdTkJBY9gy7+bYtERekghQKMUTUVYMu9SoLRIjOg3zEctkxFb3vcfXoGM10B1Jx4fLxfAHddXDOobYGMQb0nYMPnll02sA7z58nEsODPUOK+2fP4ejoCAeHRziaH6eC5R5CiFSbhqQHKdJ3T5xPlBJCKshKoTKcK9JKYdI0zMAMHhqAVllzULCepHOI3kFoAvdCVmgqC61ZXV0rBR8ifIhwwZ9Yd0ShoDLeh6TLyHtDPvBKqZh0o2uQtdDGQhnDNX3awGjWHZTaQCoNJTUqOxAyrDZQmiN3pQyk4ahLW5MOAALKKO6nYC20NVBGg8JwOL6WrTsWvmZ54v78+7VeL+8r49daifCehvN6TjiujQQNvuO6zx1guUwfzgFXin7ShsCPxaqDSYuFi+6pCKiG9JPldvKJJj8nxQxDnmvNEWz8EWOIEeWiTjvFrN9+Gk59bcc2hgJpw20bxlGIAlVsggpXE7+8eY8hi0R6S2y4zSSPDC3m3zFeBJxC5KaKsymMEjieX4WbL1h1Afm7TtebaMsQMrWb5xbzrm0RXQ8DoLJ8slVCpI0vlsUsk6gsJTknLqni12OF+PydSEQKqSA4zYMk85HnSyBuVx/SnLDGlijFx5gLu7ieSzAE6JNCh1aKYSHFOSUiUaA+T5yfDSlLqKUqnYx776FMVcgZgcC1YJFgbMWjJURqd6FBqeEiwP3JIgK61MSzdx5t1wHaQhuWJ3LBFyX62u7xGgge0XtIzZqLRChrKUPJQnIzUqlUqldjZ4MYgNGGyPlEMJVdcosRI1U6EClYbUoUojDUB2o1wIBKiuKclOQ8mFYSWkvYBMvJDO8GPqhm9f+Sm12D+Yf9IP1O2XHxOApjQMbAGHZexrKAr0k5wOy4tDKpkaYszUJXHJdmMefcNkUIAREFhOxT2QXfJ2I+FG4+5K7/fb3USn78ac+53nOfrt3Ujuu0ZCJwMme1fvuJUBgbvsS0qBiO4ifnk1OBBXPDuhAQIkdYvqiBD40DS6SWWlVorRNtNeHewl/zM1KMIDk+wVx/Yl3bNue/rmc3lphdfUx2WJtYS0opxHGlvpCIIp58TUJhPynFJAXnApQ24LxXVkIAK3tbi51pDTdtsJwfwLUtQAEkmLVVJXHZxOrg+p9lB+E6WEHQoYcGC7OauoYwGtHz92q1htWsS1jZCiQl+hDgjucpkc+F0PCxfK4osoJ9UlJPxbCkmLauNOc2mATRQUiJ3bPnuLmhc1jOj6ETrHN0dIR6OkkRm0DneigzxWS2AyRHF2IElOFrhoCXGorYcfUEHM5bHB0dY7FY4OIL7sDRwREuX7kCW1Xc3kRKSNvwfE25u94FtF2P5bKFqWpE4vk+X3bovYPzHkpbdL2DCyzwKxSL1vbdEtOmTgXhkvUkg4MQElpqLHsmz1Qpeui9x8HRIabTpqAQXdcxeQXEepFaAZCgKGCVRmUN6rpKArh8wOuXLZbLFp336DCHVBxhZSKHtga1tTi7t4OdpsasrtBYhdoYWKNhtU76gLJMxPEhbXBcIqlQ5HquwZFFikXYVkkN0hbSVpBVBWNrGFPB1BVqo0vExexQjr5t0r9USjFNX3EvOCk1sxGTskrWFwSw0nV8OCQShLhxYduxAPZpubDTDsfrf6/n79MfN3wt6/accVybrEQoQKpgybHOWn5EjMMqlOcQDY4LxAluIoYEQ5L0CSl5vslxhRDgUtFhhhRDTNiy92VSSSnhZSjXJKSESPVAMi1aJCgsC3w+lWLpU0YJWHHa6/DgSVbh9eCBcWR1otsxVh2ZSCfZgrfTSTgjQ4abPjMRa+8JEiPackD0DjvNGcimwvLMPtr5IeaLDr2PCH2HfqmYgag0tOSo4vD4CNFqVFpgojgfoCoD0zQM24LgYmKfVZzXarsOVlhIkgi+g1ISTVNjNpnynCm1ZQokuI28rRu4pPvHI85EDxdi0jqUkFJj2bsilBoJCSbkYlqCQIyEtuMWITLpHkYA8+USbdtyjgW8cXoCoguYOw9/eAxtLJrZLqSpcHB0jM57CK3QOo/JbAqpNK4eHcP7kNTpJyAIeBIQxkJaC9879D6mGjSG+0xVp0JggvM+9f4KCJ7hUaMVtJLYm+2U+qoYBIRWcM6hbblgTWuFRtaj+QQQafilY6KNE9yDTDGFnVyPtu/QHR+hqRrUFUtqzeoKRorUbkbCGsMqFIISs1CisgZaM4GBUm0fELmjMiKUBKA1tBwOJZEEIg0HTxEJUSAdTuNoScn03fOhRWmOtqS1UIlUoW1iBpoh4tLGsmPSBkZZKMV1gjkCzLR6IRV3R1BMoRfpPYf8Mju03FyUSJ1Yj+O1tL6Or7Xux4/P6Y31vWAT+ays6eer47q2DYMlUuTEodbgpE4btgwkEQCKouS9cq6q5LBiQEjYcXZcIeVYfF6wwa8yDpMTC8EjRA0ZU+5DciSGEIaTU4yI+cSeyRtCZE/6pELzJxOVjR962gS+1nuvQ4MnJJ6u8QNx7QNJPkQA4L5pifQiwclrECEmsoMUQGUM9ndmOJxNISFwvOzReo/Q9+hli7qZQGqO+ro+ojEKBG7w50HMqgNYCUFpCB1T7hGQ6UBBKR+ZWyqRlJDKwPm+yDwxhZ3FavP8isDQgiQ9jkI+/AQsu467LsfAsF/SYjRVVaCociAKrISeX8dH/htpzpBQpVliAJ/8TaUgjYVLTRdN1aA9PkY9mcJYi8sHR3DeQwYCiR5aW56PiuWIAvXwnpU1WJ2Co0chU1t7KWCUQg9C5x1CDDBCpy7KNXS6xvm8Y3hYKdiKW64QMX3be8drKHKvMC0lpDHw3gEUoaBRWwstBLMRQ+A8nhQwUrKKvxSI0SbHldXdAwRFGKPQVAZNXaFS7FSN0TBKJQe3XqohBnJVPLkecgqAD70i9z1FPiwzVCgTU5Gjp9xNWGmdnBA7IqlY/UOrBFcqdvwy1ZEpxQonnDseWIIyEqRQyOxSKVWCYMMo+jq9RutaDuVaKYYbcUSborCnYs9Jx0WDl0LOCQmRnRitRKhUHi/Lhh1pgA5ZRSg5HYwdT4BPwpnec7K2RFze878xJIXw1ZqvvJlbH0q+pjguoECIAIrjGrN/BIbGg4NXfnJkjNPd9vCY0xxRxurHzMhNkMImh7VJwFOuvddpNqx//n6F4G6/IqW4tNQg38P1Ee1ijuA9TG1xy5kz6BfHTJkWx+iuHiJ0HboI+OkUSlTcjNAFQCqGBWNE5x2UDGi9x65UkFbBKoUYAqtGxMiir5r7J5EkVkNQBpAavV+Wk65PEbSQCn3fwhel9CSGmsaRlbyZIt85VxhikQB4PtTs7Ozg+JijIZ6jXJ82n89LdM4QnWM1DPYKMKYCBGBS3odhMoODgwOYuoGqG1w+PMJsdx9NM8FXv/6NFN15+K7DRBluaii5MaPzEZ1z7LRCEvgVAaauYaxF09QwQmKuFaLv4Z0HpZokW1cACaje4fKVQ/5GlUQzneJwMUeMXMzd9y3a5QJ936GqKuzu7sLaBoujY0giWKOwO5thWllQjPCuB6KA1gyfGWsghE0wdGphjwhEBwFCZQ2mkxp70ykMCFoQJnXFOSUhIYECFea9BGCnzP2I83l4yLFSjAiR6+hYy5fKnFVKANlp5Z/UdJQdFjMJtTYrt2fYT2sNqUVi7epC/MkOKu95UnJNWHFq8uQhcbwW1x3WeF2vEyxW1uRo73ky5I+naze14xoGd4ShitVaIIaSkJyXKAnz8QCPJ5YQAj6Gsq2HOLxP3oQicWuGkPoLheS4MkzonIOPYdTaYihUpLQgAcahNcUk6CqhKUKTLtcUk/7c+LMSMXOKRDq9xVg2/vWJ89RyX8Nz153XejO5dUr/RkcnUmEuEoMLgmuFhIQWvDmE8YK6IQg0NxjkPAqSlI6UKSoBobIWCAEyRuzPJlAXL3DbdaGwmM+x6D18G+DaOQRFRMO9jA6PF2g7BQuCERF94LYc052IxnJ7edcuueg1etQQODg8RoyRG/o1DZSt0HmPxbLjvERlESHhnUPvehwdH0IrZoD5EGCMBDdF1Fi2c/jAtVH7+/ul+HQ+X5a+YyEStK1AcFgez8u8bjvHiglSQ6oIoZksEaKHtIbhOsVMxuV8AdH3kJ3GYtmimU5h6wpnzt+CRdej9QGz/TO4/MRV7m0mBDwBbe9wvJijsg2Ol0scL5Ypx5vqvABmCRJHwc3uLqbTKQQFVMaibmrYusLR8QLT2RR20mD//Dk89sQT6NsOonUp/0twfQdjDKzegcQO6tpyHpOAi2fPorYa1nBuSyuZSiK44Dbvj9rahIhEuL4DSc5xWSU4n6Q1rJJQyNB4yjmnbsg6MRL58EBQKqu6AzIOfbfKGwqU2joXCK2LcCEWdrEQJkHjohR858adrJKS6rhSLZdJdPjsuCqrIRNUKCARRe6jpUaOK0VWUqw43MHJXDtntQney+t7HQ4cP++011r//Zmwm9pxbTZ2QJlGzfmqnKga4oyTIWtqVyCYMZTvz45rrHQRk8JBJl54z5CGD0x17r0rCXL+N1HmI/eI4l5MjOkDySlkogaAIGXRExszEvNjIyJSwTtyD6Z83yaG4diG21ejrhudVOOT1yZHdQKCSDBLdkqboq1Ngp8nrjd/f0Qr3A+KwyEF4MNArTVuu3gRlTUMBwmNaV3B9w2OJw0mlUWIHaKL6NslYgSUD7CVRdv3INJQlYXREqQ0glToQ4QKAQIozkOCD0r52KMSswtCwIdU0wQkKC1yA8llC+cCYkjsSyFKvoqJO7J8jyES4Bm07PquDEMIAbu7u4hEXC82nSY4SLAkkec8qq1qzNsOXe+YdRcid53WEp1zEJJbgkBKeIqQIWKys8MtT/oeQrBmYSACBT5g9d5jsWwRSWDZdWj7Hj6wlJI2hss3chQNPrgYYzGdzpgUYQyEEFgsF5gvlwyd5khG8DhozbT5GAnRsTyXUQrkPSQSuUKyQooSXEOlBRJcxkQXSkw+bTScY9QjBo/ec45SW80/kg9QEsyCtCt1h8PcLOtlNJ8BDSIPIJzYT9ZrObPlyCjPFZ3yUFKqVBw85L3HBIvyo7NGpQAfA6nUQW5CPTY5k03kqWut/2tFXOPXWL//ek5rCxUmK8OQo6xhS+e/aOTUxs/LAwwUODDf7sNwAilMwZigwdzRNbAG2AnHVR4/ykfEgBhXHRcASKHLRDMhIgiGgYKUK85oiEzShIsxKVGjPGb8ua51sjoxfrQKo546zqMHbVos4/s2QY6nMQz5QVh5/up1jq+PI2uu3QE7AAKs1pjNprjzzhehPz6ACA4yRkysRWxqzCcT7EzqdCLu0LctXCAo74uaBQgsWKoVhDaIUqPzEUIk2NdzDZ8SuZcSR47aGORW7jFw1J5bm0eK6NoOi8UCABADQ4LWWs5RRYYJx7VuOdcVYmQZJPAcbFtuw5GLeXd3dxlCSuw/2TtACFjLbU06x8rtUA5CCUijEFK/Jk3cd4v7W3ns757B4fEcXd/DR0r9rbmjtKeIPngs2w4BLGbbdj18jJhZrkdCYNKRVqqI2hqtUZkZiAKUZme4WC5xkMgfs929pPvHhzKjNaRnLYrgPUdEUsC1PavPy1TwS5E1IylCJRgw6xLGNJeV0ohp7YIiguu5xYvK0mASWorERlVcM5W/gxyt8KTntAGGSAYARAjpUJr2Fxo26kgc6Y1nsJBJZzDns9IPiz0PeSk1Wh8rjkvKUcQ1hgYzdD+m6V+ffLG+jp+OnRZ1jX/f5rgwHohRcZ1IG33eLEmUsDlvzHm4xjXtnPxNSfOES0cMzqoQMNLffWEOckEi57U8qyCk6CvGBBGMIy6KUEqWWh3jHIyxiIFP0sYYrjfJMBj4JD+ocMSEX6cxSBGXTPAFMGz4N5I3GlvOfV1rPq1DCePXX8fOAQzRlhAn7h9+Rg5sZbFROejSkMrj7zotYO+4+FZJfuAtFy7grhe8AK+8+248+IX/jfmVx4HQo6kr6NSssPMe08MjPHF4jMeu8ubpYg9nXdHcs00N5z2cjxBSQy87LDtAC4JVGooijJRofYC2FSt7G4tF23EUqRS04hYfzPhTrCbhHJqmKfmoCQiGeP6EkE+oQAiEvuvZcVAiW/Q9RxHK4PDgCEKIpEjBtHgoCRcCFm2H4/kSzWxWVNVdbk4ZAtq+Q20N6qZGrTQOr1xFM51gohR6H3D54AAHh0dwzsFWNQQZHB/PIW3P8lNCYtF2WLRdatooufBZcJPIs3szVMZACMLR0RGs0ZhOGkgp4BxD6s3OLsgYzBdLfOPRb7L8k+AyhknToDYa586dhUKEiAGCCPvNhIVoBRNjVAjQSmBiLeqG83e8PgCdGHcCGsZa0GyCs2f2uMCYCFpINFbCSJEkvwzXdWlZ1hlPuKzHmeZuKZpnUhUhR1ahoDHjgyatzX+dnJbRmovWrUm0/rW1OFKeye83Lt4X6VAgM75Z3mddoeYktLcpOns6Nk4VXC8ye6bsOeG4ihoFOO8hhODNDnGAqBIezWQMfuyq4xqcyzgnVSC/GBD98LtLBIyQ8P3esRqAC6zT5mPgDrUjx8XXO7TUFkIgaM0QEYZ8kZKSIz+emXx7clBaaZS+6+t2Clx3vWhrNbLhyU8Uy0IATk+6rjuk/Pp5AUXJMjjXjsw2wxrpaiFGTmstAEutIIYc5bmz5/DCF74Qs91daGNAALquQ1PxxrQzneDs/m5hAR4e59wRRzLNbJrUBgxTucF9wjrPbVBE8Jg1E5jUJ+vq8RyVMUz8SM8BAOU9yHC7EOFH4zI6RRMA58MgCSYFFvOWFTOUZs17ldq2932BnqU2rNyQ2HzLrof0AUJ6TKRJOVMgpB8fI44Wcwit4bzH8XKJqq5BUsITPx9ac0uU4wXazqF3HstFB1tPuVcYgLbv4SLLV4WOIw0hRIL2GHUIIWCxmCNYi0lTo+97LkCmiNnODF3vsGxbzLuWW5GEiOl0Cn94yFGdcwhaIUoAUaGuDSRpVnHnEBuILPHF+VMFo7jWipKjEWmRcxlCSNcVoZAagGrNdVoKkGDClkkCt0CuXxqilvw5N85RZr+U9b0i9UbMH4007DVZ/7JEVSnKKg5JpqJ8DCzBwVmN/wWEkEXZZ/W6Vtf+yuc55QA5ln26Vl5rk0NaH5N1pGR82N2SM0Y2RFibGYMinUoo01SRI6rR7yO5ppAr3ePIcVFMwqID6cJ5nxxXQJdzXJ7JGSW/FfLGxG8cUx0XpejOaw0fI4TQ5YvNeauYNjqo4TNyXMUTJb9OmXQbnEgZnw22cjoq3oGjViEiWL5GlEPBShQ1fp38k987/USRIE2IE4tmdRMQ5TuCWEfg8zdZaCr8eiTAez3DPAKAkhJnzp7FxdtuQzNhBwQpEiRLSVVbY3cy4SjLBzxWXYWLEc4F9F2HesbtQyBTmxTiuqnOB+575XtoUyFKiSAFaJnkkQBoHxA8s9VU2oTyxVGM3BBRpm7DSkEQFYUVSt9f70YsQ8EHF948qcwprxRk5MrE4JnhKEOEEAG2YcgNimV/PBH6ELFsW+i6YfafDyDFhwpH4Bqu3gG6RyAWrw0R6F0oayFGwjJ3ZxZDTorbbmjeoNNaWLYtKEZU1sA5B+cAHzxMVWHZOyy6DodHRxCpw6+1FhKcW47ec+IyBJD3UDAM5UFA5SlKgFbcodmaDLVJPuoJdvSssE8sMuxZqUNICaXr1NKGFeEFMQFKJxiuwG55HhanNYbfRs1B0/wlQtExLE4rrbuYnBcRCpNQjPKALPQ7Rh+yMxvdPqyyvKKQUwYYHeySFxstzLzO8gcar7UNK23ktE7dK27Arpc3e7p2UzuuPEHyKUuMvkH+/5AfYqgpY9D8fFa+Xq2vGiSbWNomjpxXTFT37LjGuazO9SnXxQ5tRa8wQQgAQ0BCCKhOwbTMmqqqCsFHtMbAWovee9R1DWMMK19bC6MNqy8QC4aSFkAkSEo5HsQySXM7jCF6WsWexcqkTTsBBUBkkTtwwSRikrNCOVFy/FUQPG4bjwgmB8d0HZz/YXLCSAR1hNVnx5p7GwWIlRbmgvhULeJ6RnLk2CIVvVqtFHb3dvHCO+7AXd/5nZjs7aGe7UBXDdqjKwBESuZLTLUATWpoAO0tZxEffRxt26L3Dou5HajZVQURgaPlHN5UzDyDxpGLkBSgpMD+lIVNvXdw7QKha6GkxMTWiBAwPsBoLhyORDB1U5TOKbUl4Y0vwgcPaQzLAWU4Oc2lxbLj+QgWmRWa0YFF20HYGhIEqQAvAFFV0ELAAVg6h6Xr4Ig3cxIS1WQKrwzXKMaAliT6pcOiP4aUC1RVBVtNIJdMVec+ZB0616euwboov8QYk3BrQBAeISm8d55wMAeOF4t0sCJcPjqCTTmko+MF57IEQ27LoyOAIupJgx2rIRDRL46wCCyQbJTC7s4U1bROOTOLqrKl5jFH+czQBMOiqS/VrK6g1YSZjdYyW1AQnOthlMKkrmGtTvNPoqoqgCIo8PjnCElKDQiVoFtODWQil1KK9Uul4BxaGoe8xPLheGc6A0wDCM17VprnRbZpnNcSEvyfSoc1du6c9hgir7I+stSaZNZxOchKXiTprMHycRmGX/NdZZ9IB5S0SFfuP80hnZZCuJEo7cnaTe24QmA4jiRPAGA8WAwVAnlrphXHRekkve64fAis9J6dThjyXN4NuavecwW/j7HktvIp3jm3mhdbaXMC5NmSN3FjDLq2Q1VZVFVVdOQqa4tjNNqj8hHRUMl9CSGKGoMQGiJJqI+r2GMkSLmBro51tHHtlhJt5RqykzDJGgC5ep8Qa1DHquNkB6tW7ueAi2m+17iycpuUXJMjiE+tt164gNlsBqU1IAWqSYNmNoE7NFi2LQRF7Ewm2JvNUJketTFoO26q2C6X6BcOi6NjLJcd2naJ3Z2dogq+N51xUS2AXWURg4egAELAsueT/9R7ROehJed8yB1h2jTYmU0RvGdYU0ksfQ8HQpSCGywCKbrVaGYW2rDUj091Sc55LLo2FbgzvDaJnGvyRGi95wNECMBiDucj+hCYHSglhLGIcgFP/BwkmS2X6r+WXRIqFiwc6zwjE4dHxwU+d96h6ztUVY2qqtF3XZnDx0eHmDQ1jFRwAIvEpkjXBy6C1kqhbVtWsEiQHEVCFAGh7zCb1LBaYW86xaSykBxWYXc6wbSpMakr1JUttUk2iedmwsowv9ghCeIIXFLKkQkAFBBcVzoOayVhrYGtDIw13M4l5avTJgGVIspc9OsjSiNrleBJoghPYTUyGsCEAdmXArfeehEkLTovsHTDYXMlj6VkWgXr9AqGB0vUNFpL/N5yhXiWX1eIdRhj/JzV9TmG9HJ0LZ9ElJV/1qHBdef1dGHDm9pxRcpilyfzJkMvnFXHNWDRNIJBhlYkpbA4ESu8HxxQxvBz59VcaOyCH373Ad75QRIqsBMcv/9gvHn3fc+n2t6i6nvECCZ5VFWRiwomAElJJiZ4g0kJClrmiTCefPwAAWCEpG7C4cZrbIATUJCGApPkscTK7yhwysqCEKvfyfh1eEGN4BdRwI/00iN4o3yhfPHsgLF2O0d2+/tn0DSTEsUZyw0IpdHoXc/SThRRG43ERMeZnQnOTBsczy3mncc8fY8LBKZKa67jqg2TCyQIlQus3BAdpIgIUXNreClBPsALCSKgWy5BQkBXFq7jFuqKFGT06INHpDCClHjLaSouPI2S66F618P1Dn1wBbLjXGqAkJzDctEDYHhTdh08cV6rDwEkBRdIK4lQvl6BEFliqnPciDLnXCiyBmSMscgv5bnrXYDRDGsGz0SjGAOTRqzhej01FPKXT0Wsku5TPk/KhEik64nBo5lUaKxBZTSkIFilUNcVdmYTTOoajbUwSgFlzqRXT9fAGzTPnZgOlxlW5iCID1IqMQiFQGL0paLktEAIKPWTAjxPS8dj8BrLG25xNCmPO8Z6+Iw8QIQc4Qjsn9lHgMF86dEeLUbox2YYfXNccvLWzY8fXvdUG31X5c+1nNS1HMy1Xvs0ItczASHe1I7LU1LNjmOxXLZxZMOTMZEtRtFPSFBghgdjggADaFDBcINQbu9dYn8NTsyHsHp7cWKZBj/Uf61+YYO7kFJisVwWauzxnHsS1VWNM/tnMO171FUF1zhUoYc1Fj442GhhtQXp1E4cjJuzqlU++cnR76vjJ8VQg6SVRJGqSaQQQIDTZ/yokisEilKASFgdOyNC3CCDkzcZIVhyUQ7tqPhvIVI0c/IEmI2wjr8z5VyAmOKtFG699SJ2dvdgbA2pDKp6knpvaXTdEkoAztWYVhWUljDCAPtTdMs9SHJwfQfbBSwDoet7LI7mUKaCtjWCYJUCFwMO2yWf3IMHRQ8KFRABawFEwMeAvndYHM+5saMxmM+PYazhaLCMOlZbuUgJqytEEZPjWHAu1Xn0MUUVUkBaC2FY7od8ROsdN4iEQui7pFQPzLsOQUgIayG04XmckYnOMwXfA0fHS4YHrYXrHZbzBdPQU2NCJSUqW6Fddgg+oG87xBDg+paVKgC4rgcioa4s5osFhJBophNordG2Ldq2hTFcBO1jRIgOBCZHIHo01Q6s1uj7DhSAnf093H7xAqzRoBBAgZ33WLTapJowACtwNBNCmCRTzSbQqVFjUxkkH8MNR7VOHZElw540nrPs5JRJ6v/JcYdRrXGe51IOXdHHKQdOLSTZsOQMz99yHo401FGLq8tuWAxYfc2VuT86iK46A0qHRqSawJNO5lRSyXhdifFfoqw1Iia4RHHSoWYEZxMFfpNtet7TsZvaccWkBZhPFoPTGn3RyFEWbyhjtuC4FYkfieTmNhPsuEKB67JTygyqnOPKMk/Xclzrpw+eBCOobNT5drlcpip6g8ODQ8xmM25yt7ODnZ0dNHWNpm5Q1zV67WC0gQ+BG9FpDUMaUDGtifGkShFYxLgzY5lIY1ZgGklICcQ4SE6twwGs9L16+yosiBP3rddwDbRfwYWVklYeH+P6JKcEA+ceXAIgwrlz51A3DYQSRbHCVBWk0pwPEQJd16GSXLtTKwnUBi88fxaz1En24ceu4MrxAlcWPaue9wHaR1y9eghrWdlAs+IthFRwgdAToAjoPMF33MYjhgApFFoSmPceHXGfKTgPpSWrtvsAHxyf/hWr1uu25SjEBxwfHaGyFXRVwSozzB8h4cHtTZZdB1vVIE8gBOias40hEi4fHiJErs+aL5cs0isZhHLdEiEQnOOD2sHhAQv/phYpWa2haWpIwQXUOhW/ZtRBCI5I69qm71CisjUWy5bzvm2L6AOTNryHShstBDCpLKxm7T2rFc6fOYNJU2NW10D00FIgeIfWd2hshbqpkbsxZObiYpFzzA5ac84rN1XMUdZsOiniy0SB57IYSCVKjQqNiWM0pbmQWWJg3PGh1iFSYv1JOVonoszKzOjkdZRYyjlKEwLT6QzCNDCVxyOPX+WDjZSlb1ZeZ8SdKU8QQPiGDP0DqWV3cTLjA95wONwEOq5bSqPklMoG55n3ivFtY1hw3ZFtc1ynmPch6bWNIcLBcTGsNuS1XAxlkEMMCH5ExkgOyyeR3CHiGjuukYPyDr0fVOCzIrzP0Vikko9YwYyT8aY8Er1M+IWAKBGdVhp9x+rgi6ZG33dw3mHSTNBPON9WWQ9r7OoESqQMgJ2AHGeJSqQ0TK71U1A5wRXFdZTXHH5Gzylwx6oNcN+q0+KEsUgBYXJWeYGJa0/qDOlkjJIShCikxGQ6ZdWE9N2bqoKtKgjB6gQiHVhCCDBSs6p4lNitLZQguHgWgQBrDCIdojvsma4uHRbzY3hnYSsD7mxFrDBOCjYQlAdalw9DnG4ySsJFYOlZJDftOYiRHYZ3Ds6zGLBWGoBE1/tynW3noHQFozjP5r1PhA5C3zODtXMBplYIkVUtRGSlCxeYuBHTOulD6gMX0wYOhqNd7+C9Q9su0S5bAMCkmQCCJY5yj6eQujATqDBnJdg5RAIE8R7a56J6Ivi+h3cOFAIUBIJzzOxUCkZK1NagshqTqoLVElpwCXJp8JhxbgqgyIQjmeji1hoI4bkJpAIqW8FYA2u5+WJ2XGMcphyaRoenMVKT1+IwlzfkaGjIWa3kcMq70Op/RCXKlamljqkngIwc4UZuYsrOBQW9wPinXM1wEE+rIV3jKEIafd5hLcsVtGV9eZXnrfirHAzwofBGHc16Lnv87zPJMnxOOK7xcIzpqIWemuqoMruPiRkBwQ8nuHVFjLFgbt7s+pET60bwIDMH079+cGDZIeaI79QwPumWlTyRk4W4EGPEfDGHtRaHhw0Oj48wm86wO9vB/v4+JpMJmqYBw3oR0aZIREiQFqDAwp4CjP7lUyQvik2jyszB7HNWqO1rFF0puXkif5jyv5XPNpbOWY+0eOdjNHP8mPUoMTMkx7fljxA8F3RrrTGZzKCULkoldTPBZMpFuFIbiDBEQ8IaGG2A0ENUBpWRqOsKddNg/+oRiIDj5RUsXEBwPY6vXoUyGqYyaJc29YPSQN3AaK6YIuGhNVPgY3LGbSDENkDpBIRygIqli3C9g+t7CBCsjlDSoO88z0/vsegcqokAlOVWG9QjRI/O9WiTcrwPhF1TwfcObdei9Uu0qbFjFJzfigQmFRDnx7quA1FA17Xo2hZKKCyXc7TLFnVVp7yORO97riUkQud6GGvhXI+2XaLrOphUSBv6HtYYiBhxvFhCS2bAub6D6x1ABKMkuuUSSlVotIJVAhNrMKkrzJoaMTh08w798RGmkwqTukbVTJKz9eha7nxsjIVWGruzaToUMtrWNJNy8AmBt3gQsz2llBAJhlcqyUKVuZZaHiXEgRm5uRMEwIIBTCYRKXIhIHVAz2hKpt2OV1HCBWIsjkZrBa0smmYCU0suHvd+6ABBzBIe99Uav97qTflQmN4p73Mp75fX4EohcongNsCH2S+TACA5Ehw1eD2JpJxc6ytXN/p7RSB8dMB+OnaTO64E3Y1ORYPTGtVmUSZjpFxWJl94Vncfq2K4GArNNb9+jsacG+jwGRIsUOGoB9dQtHx9xwWkJK8eNXzDatV7jBFd2+L46AhXrlxBZSs0zQT7+/vY293F3u4uzp07h2k9RV3VmDYzNE1T4EZjTGmdYEwu1OSNV4ALMBkGxMri4/hPATR0T12HCodJmaO8WD5TIV6sQYjrCypDhUJkVhbK9xlTLVXJsY1ujzGiWyxx8eKteMELXsAXL1isFkpj/8x5wDlMd3fhDnwqSDUsRisVKqV4w2XNc+zUFlVd4+zeLjM6I+HRK8d44qhFHwKC7+FboD0UMBWf7l09Qdc71BUL7O7u7THNuzI4OjoCWgcl26FzrRQgCnB9h5DgQgQPqyMICkJz2w0iQlQWCxcQj5es9h4Cgg/oOo+2cwyhSonWR8y7HlfmC3R9n/QDI6azGTNUncfVw6PSQZmIEEOPrm+x7OZwbVKtaAyaqkYIDm3LTR27bgkiLuJ2wmHZLnB8fMSHmYo7JGujsGi71CwxQAtACcBKAaVTATsEds/uYzadYNLUkBQxndRoaotpzXR+PlwRamNgDH83skBghOlkwlqMkinpwaW1XOAVZsHZkkfkeWishjE60dzB5IP0X86pMlN3mHsx1YGs769lPwGBwkDA4nmN4l3Gm7P3AUQS1taYzaaYTKfoSWI2m4GWLfqk+i+ROySrsg4ovZccoQubrOwvYv3QKAvEO6y/k9HQ+mccfjJharOt7wmbHFpmOa+jTk/Hbm7HlQp+x2EyUSyOKjsrStFXqceiTHUfHJf3oygrjuDB3AwvxiJXk5UzxhDi2GHlPFjWSMu6aTms5/nNYbgQAiLGpE49sOmkyEKaIwkl4vqUrucTd9d3WCzmODo6xGK5xN7OHqaTGXanHWazHVR1hbqqUdUVn47JQEgBDQEh2bHmQsuslpEPcZS28wECWcW5+TTGn6kkp4kgSSJGLmDeNKlXcl3lZ2htsn4IHLPusoUwEF5CCJhOJrhw4UJZFDxeCrZuMNvZxblzt+DxxZwZbYgIvodLcKxtTFKxIHgQrBSY1Qa333IWB0dz1NZA4DIOlx1cTOy4QCBwW5MYeI51XYWudww1WgujddIXZFq2MRE6qATB5qhYc15Ks+K3JwHnCSopuLtAoM6hD1SEaGOMcL1nmDpykbg4PETXO3TOo/Mey65H7xxI8QbfO4fFclkEWpVmdh5fl4GRQ9uMStfDhi6BrmvTPPZonUffc/4qgFl5QQXAg5mFIUAQK2soyQXi1qT2GkJgOmvQJFp7pRX3wDIaVid1EOLoRVCEIBbQreuGxysySUQm6CqknLASXCwcXfpbSWgty/ywqTmjzs5AMB5WonvwRj7kZhJjMYX0Ay08FUhHUZQwMJqVJVe7UsScC/nTupES0+kU9aSB8KyHeThfou86rm8zuijR59eEyFD9qsui4oDT38nJrh8Ux8zHVWgfBVZheHRw0oS1NytvuGq8J/GpnCLLsBXlovHjRr/LFFnmz/VU7aZ2XM45pvAWxzXQ2ynlEvzIcXB0Nq7RCiM2YVyF/UYU+EKT96vKGaUYOYyfOzguGjuuIRYvpzwawW75/vXQfMgLZXYgIPoeS7HEfDHH4dEhmqrGweERzp05h92dXSx2z2C/7zGZTDCdTjFJLSWiGSYV4/TcFVbK1N8rOUfmOiTVcgyV/4Ml5yqHOpYk7wGQglKErBCyUv0/jrrAcA3/DLmH8WOyuxrTxYUUXGoQIkKCiWc7O7h48WI5efNCVLDWQuzs4taLt+Pw0W+i9wESERQ4P9j1PWaTKkFBvDkrcDPJ2285A+cDprWFiA6PPBawdBGdJ7Q9t7KJSVzZOQelDZa2Rd/1qCruaBtC6natFCwBKoTUD4pQGcudg0WArWsoyd2xO0fQAJRgHUSECIie1ejTuMQCafO8Xbi+lHe45LiWXQeXxs4lx2WtZXKJSeQCowFRodK2CLgKyLIhxhixbBccfZDAcslswwyRBe8RlALFWCJIRRzVgnhO180sOQ+FMzs70FrCaInd2RRVZaGlBAWGE4mAGLjwl2uZgElTQyQYzKV8WSSC8w5WGZbEUgreg7shG3bC3vNzirKG5M8lEmFJa83EojR/M9mB11vKBYohj5rXMkW55riGyI57a8WRuvwq7C2FwHQ6hW0moC5gOp0ifPMxLOYL1A079XGNZj7cjf8bLEWZqb8glY6Vpx8Sc/ST3mDFeaE4df51JWeX36qsxQHyE0IkJCPBkPnf0V5WdozxY2iYz0/FbmrH1XUdBFCcRA6rs2xTZvVRisBcGBxKrrsapJlGTMJRBJWd0Koi/ODIQn6vHG2FQYh33AalfJk5JZQcV7axbtj6pC8OAKtq6svlEovFAlcBPH75CXzt63+Ouqpx9ux53HrLBezt7uLM/hns7u2iaRo0TYPZZMo9jqzBZNLA6qEXkMxRFDFrjzMFg8TUGO5chRoyEUQgUIYQNaQkSBkgpYZIxa35OUIOn7U0yFODHA6JVSc2PnIGHxL8IGCbBjs7u9g/c5ZzIkoVpiiERT3ZwZ13fSe++uX/i3bZQkYPbSrOm7iAPoR0Ipfol57p+UpAKeB7vuOFePELLuJ7vvMufO5L/xeXDw5x9egYj185wOEyYtEBS8eEBBIOrVzi8MoVaKNRTxqcv+UWKG0Q0mjC5e+eMKkJSgp0XY/d/bMARRwfHuDq0WV2Ikbh8OgQOp3EQXI49QqBGLnGsO9daVjqvUfTNOh90sw8Pi5zlwt/U50VOFqiGOGDg67Td08E13UF1um6DkeHRwAR6rqGRmKyETdiDB0XJk8mDXaaClLUgHdoFGCVRG01zuzPUFkLazWm0wkQmdjSaMlagYLLUkLqaKylxM50CptUZFyKWjm/Zcq6lOC8qEpRk500aR5bdN3wnDy3tGbnuQK/d12K8AiTyaQI2mYVmpXc+UgSjsCbfozsZCkMbU02xRGRIiCGpo7ZQZ4/dw5f+r8P4vHHH2dVktsuYjaboaoqaK2SYnyWgMq1j9kR5SaWCf5NYsDZQYxt3YGell06AfeJ7BuT41577XX4fwwxjm8fCw0AJ6/vqdiTclzvec978P73vx9f+tKX0DQN/spf+Sv4F//iX+ClL31pecyrX/1qfOITn1h53t//+38fv/mbv1n+fvjhh/H2t78dH/vYxzCbzfCWt7wF73nPe8pp40bNpcUYc6KUhskVY1LGSLfHlKgd09/92AmFMLo9rjqndJ+Lox5ca21NygYxdlqlrcEoGZmOLgxbMCOSv/QBWiNShXoOwVBizv+sMKHSKVUIgHrG0ruuw7LrcHR4gMlkgr29PZw9exbT6RQ7Ozs4d+Ycq283TWIlMqyljYHVJgl/ypQHTKCRVBCRABEhlQZEKAs5X4cQotCAx853XF8TwkjyycuhlYPkliH5cUYZCNEhk0EIolB98/cOIpCU2NudYjabYTqdQSciQh84pyCUgoKAbaY4d/4ChA84uvw4amMgAoGSSoKSGloJWGP4BE0EQRFWArq2qI2Gf8l34OrhES4fHuLrlx7F5cMFDuYtHj9s0QeWD4MguACQ8+gXSxw88RiUMZDaoMoq7gDaroWbdNDagCjisStPAERwfY92uYQxXHe06BxEH4rwqhpBPhm+Lt22nWMoO+d8aeiYUKVWL3myhBDhu77kJpfztpwLJIDWtYiBGYwicNeE2HUQAjBgtqTUFgKAksBew92HBYBmNsHUcLsQqyXO7uzAphzT/t4uTGpRonXKnUYCjEaMIZEcgLquYI2FrRjipjLXqRAhYqzKOojp9hgCvHAQ4FYq3JRRp/wiO7ByyI0ELRUfzNJBayAjiETEQNkvBiRHJmQHWZywIBXZuXB9mIeTscCRSikuzRhBf3VdYzqdQmuNL33pS5g2XOLCZKtU31gkrfhatB4OrxRpYAwSymGQgOLsCFyykscw7yN8CFYF/ckw33g950BAjCDJbOND9fjvTY4rP+4EhPjtirg+8YlP4L777sP3f//3w3uPX/iFX8DrXvc6fPGLX8R0Oi2Pe+tb34pf+7VfK39PJpPyewgBb3rTm3Dx4kX88R//MR555BH8nb/zd2CMwT/7Z//sSV28Dx7SD3UW5USUIqzBccXkuPxKZDUmZYQRPOjDkPxfYQ7SUIycozd+jQESzK+Z3zPEsLLBZ9sECY5zXOUxaycVSZvbFDCRyIOow/F8jqPDA1S2wuzKDFcOrmA2m2Fvdw/tssVsOsNsNkOMEU1d8yZhLWpbJeaTRpHLIpFgQ7YMuUQRT1xD+uVE5FhgFKnWYJR0u+AOu8yu1FA6FqeVddZWCjtjKMHHbDrlvEFdI4vThpCuXqTeRVWNs+cvwC2XOLzyBKROvYwoHz4ESCpobZhynjB7SYG17Koa+vZbcbS3g7PHu6wyf/UAlw+PQBSx7CJLgxFhkTta9w7zQwepuUcWJVV1ADg8niMELvCVSqLtW5b4EQKLxRLWGtSRip5hPtyUuiPBOoY0mqPe+9RhOabmhAogJKq9xDQptccYEL1DnyIZCYHOdWkzFbDaoFssEbzjFiLEmU4RXFGe0Eqm3B934z4zbeA6ZkfuTGvs1BWMYv7d7rSBTWSL/ekEVWVhtUZEgO+4kFkqBaT8FhElQpFN8lLVcKD0vqhe5L1kWMMRRAGUpMnGre61HuZcEQIgKmzBPK8HGBtlPsbcAX0F1Rkikfx4zlenCCPNdyXDyutX1vJjiA8I1hhMJhNYa/Hwww/jru+4E3t7u9jd3U0H2yyWnTREx9cp0juL9L4YoL/s0IRkuF8qidX9JiEkWehztHbH+xQljDDrrG5c72t/rx9m8+/5EDV2dN82x/UHf/AHK3+/733vw4ULF/DpT38ar3rVq8rtk8kEFy9e3Pga/+2//Td88YtfxEc+8hHceuut+It/8S/in/yTf4J3vvOd+JVf+ZVUrX9j1nVdmVBj55WdSIgoTmRwSoNKxhjSy0xC/p1WnVqOskaOKxM4+L0H4kd57QwR5uTuKTb+AvOkjKPNSqx90VmXrSRa030yJVfzHAuB6dGHx0f4xqVHipjvLecvYHeHF8cdd9yBM3v7mE2n2N3dRZVOuEYPrcKVStEWUtHvyBFnJ8TQq0BQSSonMsgowDqJShlIGUZQyWbnprSGjBEisF4bggBGxc95kx6ftC9cuIDd3d1yHXlRd65HpBkgNVQ9wW13fgdC8PjmN76GCA+rFIyyIBC6zsH3LDtU3st79O0S1gQYBZydNtjfmeI2Oo8X3H4rrh7NceXwCA98+as4nC+wbHvMFx2eOLiKReexbIHWAdEF9Msl/HLJq00IdD0htgumXo8g0xwRuM6gb1sUeSEiIAJtIvBoyTJFAMNVbdum21PrGxAUImzNCivBtXjiGwfo+x5SSTR1zSKw3sM7DyNVieYoOFDXIjqPKIHKqlQkrOH7DpIImhRuO3MWk6ZGU1c4t38GWTc0eoeLF85DgHD14ApmVqJpuDBYU4CK3MVYg7shIxXdjuf4ZDJJ2oCqrKWshJEL1X3qGJ7nTlbRyNGJEENTyTxf8nqVQkAaU943vzfbsPHmg8Hg7NJj83OkKDJsQKKjByqpIiDBZ4GgpcSkmfB3nQgkQgg+UO7tYj4/whe/8AV0bYsXvOAFyG2O+r7nMg+tUrSdDueRYEyFEH2CIvnSBzYjx89cJJ6lrdSJvWjFeYwiqxAC56AICElRc93ZrOTM0lwcr+1nsm5r3Z5Wjuvg4AAAcPbs2ZXbf/u3fxv//t//e1y8eBE/9EM/hF/6pV8qUdf999+Pu+++G7feemt5/Otf/3q8/e1vxxe+8AV87/d+74n36bqu4NYAcHh4CADo+w6gQbaJnVVyGIlRGENAoCzvFIuIbqax8sIIw+8jwkaIMdV68WP8aCL73DguJpgi5usI5VrydZ1Wt7AJI+bbMr1cQMRxJHN6uJ0hAICjpOH+5FiCQ9txkalJ+YOvff1hnD1zFnu7u7jllgvY3d3DJOXBJpOGa2aMgSDOxygpSp6AN3iUiDJvChBcOyQo1dKAAMGbkJAaUltoExAIUM5D+ACoAEjWXud9WkApA6U4f0gyIpBPgseU8H0ez3PnzmE2m6UTpgIr3LNyhI8RAQSpDJrdXeydO4tzt17A4rFLAAXW1oshnfaRmGsaSjJjNYYILzx876BSgbCWErOmghBAZRSseDEWyxZd79B2Ho9efhwHx3NcvnKMJ46O0PUBvef8QKLOoTYAkNTHQz6tC1BqvxJEh7BUqVUHb5hKKBYKAeAioU9Vv+ywBDP3knZ/6FjLMGqViqQJOgTAB5AX8H3g/CMIRnCUlJXKK6uwZyfcqTt4TJsa1ho0dQ1BsTBBd2YTzCZMbZ/UBtY0CWYGpk0NoohaA01Tl5yqhEBVmSL9RKlg0CSiRIa58gHN9y7llPi2LEGFUojM8zxvyHkNxBgLK9f3fYHQ8mOVUjB6tWh/2IDFEP1FKr2/csu3DM8TKEUuQ0RR8tk00tNMz9HaYGdnBzJF9iQljF5iZzbD3v4+bF3hkW9eAgTwkpe8BHe96C4YaxJcT0mTlQr5RAjBVSpSQJAEIZQ9QioBGQLGxKjsSvM6LbeLRFiRQAzDPqUEK8znzzHevfL3VG5LDi/XwgkheMwyWgIU2eyx23w6xPin7LhijPjpn/5p/OAP/iBe/vKXl9t/4id+AnfeeSduv/12fO5zn8M73/lOPPDAA3j/+98PALh06dKK0wJQ/r506dLG93rPe96DX/3VXz1xu/eOqbARg0OhVdgw56HGBIrBcY2c1Nhx0eCgQo6+MuQYT/6UiUvDD41OP9cquFsPqded2eComJ6cbx/belKVHVc6dY3eP8aYCjnZoR0cHuDKlSvY2dnBlatXsb9/BtPpFPspIqvqGnXdQCnJEYpWaGoLnVlohVySmFnpXQv8UOA+BaE0ROTuzSKdpktfIpn6U40KnJXSkCpAhAgIXw4BITnRfMKczmaoEkyYIRDG85G+6ySnVNeY7OzgzPnz6K48DuF9ygUIRE+lRMJI3kRlpLIJsWByAKcTBKxWQG1htMIkKcxzZ4CIvV1meD42vYLJExLzZYfF0mHZZziUx8hH1rBjBADg1jwJhopAjB5SqQSfAVLqQWQ5MWCFSBGH4d5SSigIQaDguP8UiQQtAkYCZPNyl5AyciRlDXZ3ppzPIkLT5FonjjrrypScW21tYoHyXJhOGlaFVxqVNTApGmKmb4RJecNMjhBEsJqdmJfMIASYKFKi6Dyj4ugwlHNOQgyb5FrUPl4LkgYiQ0jU+rK+VCY8DPTw8foc/h2YdOwOuc5sHNVEsaqKExN8OxA1UAg1WqnSrVpKCS2ZjFQ3nOeaTCZ4/LHH8Ohjj+Krf/ZV3HbrbTDWsuAyZefJ8z6XyQSeGIw95iL9dLBAgRPH+8hq3mkYw8FBnbScQBOrPyOj0b95zE684LXf5EnbU3Zc9913Hz7/+c/jk5/85Mrtb3vb28rvd999N2677Ta85jWvwUMPPYSXvOQlT+m93vWud+Fnf/Zny9+Hh4e44447uEHgCKojohXHVaDAdTgvq2eMMPKyMa45rhgGp1hu3wBNch3TSJcwrkmxrC2McYS1Wh+1OrnK70KsMBLHNj5N8uvl60CZVVQAjnxtHlevLnBwcBVSSGilMZ1O0TQN9vf3ce7cOezs7GJvbx97e3uorUVtDGY7E1RVw3kxrUt/JZYDSmw354YkrVQw1iZlbcD1Pmm3AcDAKLTWwlhb8o+2svAUIGOAcLwBucilCsaYVL8jMdmZoaqrsiHkMRZCcGQSIssDmQrTvTO4464X4+ojX4M77OH6DpOGW5QEH7BYLDCZShhjU46IUMKc/B0Sa/ZpU2EKQMwmHD0QIJTG7d15zBdLXD04xKXHHsPVwyNcvXqIK1ePEhuNT6F98HCeldn7PutcsmJ6nkOcYxGpwNUh8SQQQlq4BMgQgdhDaEBb1mA0MoIMUBlZ1M8ra1HXFeshag3ve+ymwnWd9j4hBKaTury/Ams7cg6txy3nz6NpGlTWMonCcuQuACAkaI08mD8hYJQoTktrjegDqhy9ibq8NqQccsQ59ySGtiEh5TXblnubKbWKPOS1ePIAtyrESyUiwMpaHDMNB9UJpIPGAEFLiELKCJGhS0oEDfKhqNKXjuf5PQSgjcFsOh3mqVDFce3u7+DChQt44onH8NgTj+F//M9P4TvufDFkitJ8iNBKQhuVOlqkHC8JaGGQEL0Bw4RYWfsZMuRoT4/GYXDwmywfCnLN5rUet+mwPT5YbPpuno49Jcf1jne8Ax/60IfwR3/0R3jhC194zcfec889AIAHH3wQL3nJS3Dx4kX8j//xP1Ye881vfhMATs2LVVXFVe9r1vf9Cg7NDd5GDiWygvhYWDek28eOaxxxxciPKaeoMLx2WIEkQ3nM+N8h+hpYUETl4FXstCTmuuMaHJuAELyZrcxSweQJIQSc6wGMXmPMIU8Ca4MjZQmamBah96ybd3h8gCeuPIGv/fnX+JRd19iZzrAzY4Hf82fPYme2g2YywaRuUFUMBdVVnVQNuG1E2QBAw3iBClkhEsGEpBkZCUJ6juK0hkryQUiMwkjDR+bJT5BKwhqNprYwVrNCfN6AiBAhEIhVBZ2QsMZCT2eYnb0Fe7fchoMYsbjcgZQFKe6QGwJr8A3NBPk74mjKM1GBFMjL1Opdps+XWJYIsCICVkHtTTCtLqLrz6HteiwWbYI/WUvRhQjnPRbLJRaLFn0uKvcZ8hFYtAv0jvUpBcmS78zoAUdcCk1TYTJpMJ1OEMOgclIbA50UKHZmM9R1VfKS1iiOpIwZognBebK+d+l1UmYzMtQ+m81Sbo3JDzHpcE7qhnuNCYAoQEAihoi+7xCCh87NUtNaW7QLgERZf0R+IMUIwWOf5hAfCnk8jLWQYlg3ee0C7ECkEBBqyLWsKLKkdcQEl0HMdmyyjESKG5LzykXFeezzXTExhpHqRYMPqTSBOJpMr2+0KbV9DJ0l6E9wnq+uauzs7UIag+7oEH/+yDfw6c/8Lyy7Ft/7F7+X1UdSnZ+tLO8TBGhT8fpH6hgtRNJ1YyUeaRQL92oNSIkoUhPY5LCkwiAmDCSySXbmw8+YxLK+h40d0vphe9PPM2VPynEREf7hP/yH+MAHPoCPf/zjuOuuu677nM9+9rMAgNtuuw0AcO+99+Kf/tN/ikcffRQXLlwAAHz4wx/G7u4uXvaylz2piw8hQopR1ERUoiKGioZoaOy4WM1llZwxODAWID0J/40iqA3O6gQsuPL3SceVbT3iOv0kkhZTzCF3DqVE2uDzpKOCcwyARfopp0CG9TjySXR9sNMXUcB7h65bpiSyxvz4CIeHB5hMpjg6PMRstlNqwiaTKaqqKpqJmYaccyEZoRjYgGmyp8Z5GTIcTmUDkzCfHENIsj5pwxRprJTiImOt9eCf0/eTn8NzAiApIbSFaabYOXMO3fwI7fEh54qkgjIGrvdw3gFCcE5GcbSVDzYQAjLlPVhdn8eaUzVMHdYSSP+DkRKNtXB1hYm1MNoWxxUTlNn1PbrOoXcObdehdY43FqUwb+dwroMPnlmQSI6EBkcjhYCtLJqmwWQyhQCVKEulk7LWGnu7u7BGM1RJhMqwcC/Db8MGThGINUdUSit451lEV0pW3odApAilNLouieiCuwgomWr+UvNcAw3hGCbTWkELjb7v0fcD0SJHVQBS37ohAiKZD3g8F9gxrkLfZR3l69+AbqyQmEZkoPFaI8qEIjGsNhrBkvlfwaLVsUy4jKzGctANISLLFwIodZLZ6TDMODD/pFKwdQWlmBW77Fr82cN/ht3dXdz14hdjb3cfIuXyDRgqzLBghsXHuwQoCx6kdaZyGUV62qisItPh0xM3blTXirTyv5vQok2R1jNlT8px3Xffffid3/kdfPCDH8TOzk7JSe3t7aFpGjz00EP4nd/5Hfz1v/7Xce7cOXzuc5/Dz/zMz+BVr3oVXvGKVwAAXve61+FlL3sZ/vbf/tt473vfi0uXLuEXf/EXcd99922Mqq5lIXgIDJBghgp5Uq8XIGeSRWo9kPNWm3JVWD3RDQ5qVOy8FmFtggRvJBy+Xu5rE7S4OglEwnmyOKfkpP8IshRy9dSZ68pYWT8taDXkq5CjJEdwjoVSD48OIYTEN0xdWkfMZrMkMzXFTtJMrKoKTdOgtmalhosXDUFSymOk0ywShKGUSadFUTrUEhjeZRo3M6essUCqeTPGMFst5UiG75gVLXK0HSIQlYRSBrqa4MzF29AvF1gcHWFxdBmN0TBWIUSHNjmKqjKobV0OK8EzRV8qsJpFzrNFcINKoQoyk6POqCK8ktBCQMZEU5cqRbuJTSd2AcFixV1wWKYCYKUUXOhBlJ29Qu96hBRN1HVdvk8XArQ2qKqao6+mQWUN+r5D1zLVfXd3F0oKxOjR9z371vyNjzoYcLt7JmRMp1NcvXoIIkI9aWCqenAYgjsat8slrl69CkEVkGCoMQNQJwcopIS1thwOhVAFtpRSYplgwxBCUaGXKUKiQsAaHzRZaqywMX1YWbNj2DivIZOYhOs6oOU5yW1R9gZ0cn1KIUESrKG4vvZjItw4j5gOkzxPWSexrusyP6FTry/JosxVbaHSPHbB48H/78sw1uCOF70IL3vZ90AqhUARprJDe5k4oDqMEnFZDInclQIQ4DTAUH7CDnscjZ5mm2C/p+LETnvO04ELn5Tj+o3f+A0AwKtf/eqV23/rt34LP/mTPwlrLT7ykY/gX//rf435fI477rgDP/qjP4pf/MVfLI9VSuFDH/oQ3v72t+Pee+/FdDrFW97ylpW6rxu13GJ7nMsK13BcBUdPGzcn3TMrcJjkYYNT4tN7BCGORD2HE8oJpzW6zqf6/VAcMlMRNILKTtLhAYafMg295GZACMGV6+CHigQzrbxbicRyqxEmcBEiGP4RJND2Hdq+gxACj19+AkbxQrLGYGeXFTqmkykunD+Puq5QVTYVWSpIJVL7i7TgAnfoFVpBwyR6L5X2MX3fo+s6LLoWIO5IrJRCcCyllB2oUZrz0yL1XPOATpEMb+gAkQSkgaoE9m+5Hb5n5t0jDy3hZYQUEbqqCxGjbeewBVZSqRM2v3aQPJgxRXwQDDJRZChUCcCkqg7XO3SqAyigMhXXisWYcgvpxK016zx6go89Qz+CMK24z5VUCqaqSx1iDASTOiUrKaG0KUXKAukAAwEBA6WobMYECakqTCYVou/Rdx2W7RKVYbV7kRiZQkh4H3H58lUs5tzgtG4a5L5oRAAFQqUr2KkBAlBXFbTSCMRF8DEGRAE0kymQorTjxZIjV8kF7yFG+HQoyZT2uq4TSzDAJSko7wM8edaCTPCcKAeeVLM2UrbIkZXWGnVdF/UbAOlfJvucWENrDghJ2CCv6XUr8FqM3HcsjtCZBDpqKQFrWTe0aeApJC1GSk0qufSjahoYayC1AnkHHyO+8mdfxf/vA+/HAw8+yH34phOcO3cOZ86cwc7OLnZ3zsAaW0SZVYpsIZhGv3Kh+deEashrOBYhUmPX9HM9u1Hnlu1GD/XXsicNFV7L7rjjjhOqGZvszjvvxO///u8/mbfeaCEECAzEjDxpxoSMk8y/wXGtQn5Dl+TNPyNae4q+AJToZRzJjG1wZqd/jmsmLNdggPFiO/n47DAzjHXyxbLzWn3qmsOlAabL5ZZ8X8xYY7nu4CNkL9EqBZe65h5Vh5jPj1FXFaq6wt7ODqrKwliDKkVi/DnA8GEMoBBWrrRtWyzbJdqu41O44gWXP7NKJ3hVIA+URPqYNONyBwFjQUIgQEJXNZqdPeyduwWHT1xCWBzAuSUmdQWKDtH1cK5n7UKZJXeQKNHEp2oM5QdSppbyMgnkiqG+RSmZmkRqdlYg6BStkciQTsoHSkAbVcZWCVU05mSCevMGzeWjElJqqMTOBAalBy4p0EXGS+sRTEVM+zeG/5bIm1kippQTzahtfQRkYIqzFBrSsEYhCYGdnR1oyVtJ6NtErmAYmqNhWWDrcYSS57JMWpFitMOurs9QmsZS4WgPArj54JrHbV0ybf1QydHa6m1CJH3CkAgacShUHr9GjsCLkxvNtxyl8XWgwHBFLSZBqZEVvxnyFaJA8hnCk4mc0nYdHn/iCTzwfx9AXdewVYVmMmGlmMkUZ8/cgr3dXTR1g8mkxi233ILJpEEzqVPOECWy4jmcmJQJ7dhIAButwTH8uvK4Ncvjt26nPfaZsJtSqzB/+LbrU8v5jHcT68Ll6CusUlVjjClHgCHiSptyDCN4cD3ays9D2hhoFTaMI6eWq8xXJaie6gctma3ig/KJch2fBzjPUh6b6LFUXmp4/Dg3MDwXw7sIWRYowwoqYfbsEPOWnR1dQAS8h+u7ctJ99LFHYS1HXGd2d9FMGjR1g9nOhE/VSUWCPMv+ZEZa37No7fH8GMfzORbtkj+z0hAitbpP3ldIyaSGlhsgmjjAVERJb6/v4KNH6Bs+RUYPHXt4SMhqCl3PcHx0Fd28hdlt4IWEJ6BfLiFVjari2pnecb2L8nxCloJ1/xwArVM+TBBkHPKpAJds+N7BhYjO9exwUqI8uy2pPAgCjrhAPp9aXQylw63sI1zfpzpEoAkElaS6tAop3zHMPwEmOTAdXoB8LILRFENSvhCI0qBtO2Q1fyYv8DQIUcARf0dh3sIYVrlQ2sBozoXGEFBXNXxggd/jRVvWgScPkhbJj4GkRgSvw65vy9yTShWiBpLqQ4gB3nE0xrJWHl3XQ0gzMOJ8pnILrrcSXM8GsJNVgdAFgk+fW2kNrUOKdgfCQb6O6LgoG4hAdmCZoE+5pAZFWDt6z2SuELiIPanvOB9BkuADmGwTIlrnMV+2OJ7PIbqAIAxaAMeLBbp0OMuq6VKy6knwHgu/wEMPPZTOi7wHyXRoO3/mFly49Vac2d/HxQsX8KI7X4T9M/s4e2a/rPkQPHrXD+oqgYWKg/d8qAt+kL8baS76lD8r6iD5gHjKZpalra4n7TQ+LPiyVp+8MxP0TLnAb6N9/etfxx133PFsX8bWtra1rW3tadrXvva167LT1+2mdFwxRjzwwAN42ctehq997WvY3d19ti/p/znLtW7b8dls2/G5tm3H5/q2HaNr2/XGh4hwdHSE22+/faWI/EbspoQKpZSp4y2zpbaT5nTbjs+1bTs+17bt+FzftmN0bbvW+Ozt7T2l13xybm5rW9va1ra2tWfZto5ra1vb2ta2dlPZTeu4qqrCu9/97iddtPx8se34XNu243Nt247P9W07Rte2b+X43JTkjK1tbWtb29rz127aiGtrW9va1rb2/LSt49ra1ra2ta3dVLZ1XFvb2ta2trWbyraOa2tb29rWtnZT2U3puH79138d3/Ed34G6rnHPPfecaEz5fLFf+ZVfWVFkFkLgu7/7u8v9bdvivvvuw7lz5zCbzfCjP/qjpWnnc9X+6I/+CD/0Qz+E22+/HUII/Of//J9X7ici/PIv/zJuu+02NE2D1772tfjyl7+88pjLly/jzW9+M3Z3d7G/v4+/9/f+Ho6Pj7+Nn+JbZ9cbn5/8yZ88Mafe8IY3rDzmuTo+73nPe/D93//92NnhjsR/42/8DTzwwAMrj7mRNfXwww/jTW96EyaTCS5cuICf//mf504WzwG7kTF69atffWIO/dRP/dTKY57uGN10jus//sf/iJ/92Z/Fu9/9bvyv//W/8MpXvhKvf/3r8eijjz7bl/as2Pd8z/fgkUceKT+f/OQny30/8zM/g//yX/4Lfu/3fg+f+MQn8I1vfAM/8iM/8ixe7bfe5vM5XvnKV+LXf/3XN97/3ve+F//m3/wb/OZv/iY+9alPYTqd4vWvf30R6gWAN7/5zfjCF76AD3/4w6XT99ve9rZv10f4ltr1xgcA3vCGN6zMqd/93d9duf+5Oj6f+MQncN999+FP/uRP8OEPfxjOObzuda/DfD4vj7nemgoh4E1vehP6vscf//Ef49/9u3+H973vffjlX/7lZ+MjPeN2I2MEAG9961tX5tB73/vect8zMkZ0k9kP/MAP0H333Vf+DiHQ7bffTu95z3uexat6duzd7343vfKVr9x439WrV8kYQ7/3e79Xbvs//+f/EAC6//77v01X+OwaAPrABz5Q/o4x0sWLF+lf/st/WW67evUqVVVFv/u7v0tERF/84hcJAP3P//k/y2P+63/9rySEoD//8z//tl37t8PWx4eI6C1veQv98A//8KnPeT6Nz6OPPkoA6BOf+AQR3dia+v3f/32SUtKlS5fKY37jN36Ddnd3qeu6b+8H+DbY+hgREf21v/bX6B/9o3906nOeiTG6qSKuvu/x6U9/Gq997WvLbVJKvPa1r8X999//LF7Zs2df/vKXcfvtt+PFL34x3vzmN+Phhx8GAHz605+Gc25lrL77u78bL3rRi563Y/WVr3wFly5dWhmTvb093HPPPWVM7r//fuzv7+Mv/+W/XB7z2te+FlJKfOpTn/q2X/OzYR//+Mdx4cIFvPSlL8Xb3/52PPHEE+W+59P4HBwcAADOnj0L4MbW1P3334+7774bt956a3nM61//ehweHuILX/jCt/Hqvz22PkbZfvu3fxvnz5/Hy1/+crzrXe/CYrEo9z0TY3RTiew+/vjjCCGsfGAAuPXWW/GlL33pWbqqZ8/uuecevO9978NLX/pSPPLII/jVX/1V/NW/+lfx+c9/HpcuXYK1Fvv7+yvPufXWW3Hp0qVn54KfZcufe9P8yfddunQJFy5cWLlfa42zZ88+L8btDW94A37kR34Ed911Fx566CH8wi/8At74xjfi/vvvh1LqeTM+MUb89E//NH7wB38QL3/5ywHghtbUpUuXNs6vfN9zyTaNEQD8xE/8BO68807cfvvt+NznPod3vvOdeOCBB/D+978fwDMzRjeV49raqr3xjW8sv7/iFa/APffcgzvvvBP/6T/9JzRN8yxe2dZuVvtbf+tvld/vvvtuvOIVr8BLXvISfPzjH8drXvOaZ/HKvr1233334fOf//xKznhrq3baGI3znXfffTduu+02vOY1r8FDDz2El7zkJc/Ie99UUOH58+ehlDrB4vnmN7+JixcvPktX9f+O7e/v4y/8hb+ABx98EBcvXkTf97h69erKY57PY5U/97Xmz8WLF08Qfbz3uHz58vNy3F784hfj/PnzePDBBwE8P8bnHe94Bz70oQ/hYx/72EqDwxtZUxcvXtw4v/J9zxU7bYw22T333AMAK3Po6Y7RTeW4rLX4vu/7PvzhH/5huS3GiD/8wz/Evffe+yxe2f8bdnx8jIceegi33XYbvu/7vg/GmJWxeuCBB/Dwww8/b8fqrrvuwsWLF1fG5PDwEJ/61KfKmNx77724evUqPv3pT5fHfPSjH0WMsSzA55N9/etfxxNPPIHbbrsNwHN7fIgI73jHO/CBD3wAH/3oR3HXXXet3H8ja+ree+/F//7f/3vFuX/4wx/G7u4uXvayl317Psi30K43Rpvss5/9LACszKGnPUZPkUzyrNl/+A//gaqqove97330xS9+kd72trfR/v7+CkPl+WI/93M/Rx//+MfpK1/5Cv33//7f6bWvfS2dP3+eHn30USIi+qmf+il60YteRB/96EfpT//0T+nee++le++991m+6m+tHR0d0Wc+8xn6zGc+QwDoX/2rf0Wf+cxn6M/+7M+IiOif//N/Tvv7+/TBD36QPve5z9EP//AP01133UXL5bK8xhve8Ab63u/9XvrUpz5Fn/zkJ+m7vuu76Md//MefrY/0jNq1xufo6Ij+8T/+x3T//ffTV77yFfrIRz5Cf+kv/SX6ru/6LmrbtrzGc3V83v72t9Pe3h59/OMfp0ceeaT8LBaL8pjrrSnvPb385S+n173udfTZz36W/uAP/oBuueUWete73vVsfKRn3K43Rg8++CD92q/9Gv3pn/4pfeUrX6EPfvCD9OIXv5he9apXldd4JsbopnNcRET/9t/+W3rRi15E1lr6gR/4AfqTP/mTZ/uSnhX7sR/7MbrtttvIWksveMEL6Md+7MfowQcfLPcvl0v6B//gH9CZM2doMpnQ3/ybf5MeeeSRZ/GKv/X2sY99jACc+HnLW95CREyJ/6Vf+iW69dZbqaoqes1rXkMPPPDAyms88cQT9OM//uM0m81od3eX/u7f/bt0dHT0LHyaZ96uNT6LxYJe97rX0S233ELGGLrzzjvprW9964lD4XN1fDaNCwD6rd/6rfKYG1lTX/3qV+mNb3wjNU1D58+fp5/7uZ8j59y3+dN8a+x6Y/Twww/Tq171Kjp79ixVVUXf+Z3fST//8z9PBwcHK6/zdMdo29Zka1vb2ta2dlPZTZXj2trWtra1rW1t67i2trWtbW1rN5VtHdfWtra1rW3tprKt49ra1ra2ta3dVLZ1XFvb2ta2trWbyraOa2tb29rWtnZT2dZxbW1rW9va1m4q2zqurW1ta1vb2k1lW8e1ta1tbWtbu6ls67i2trWtbW1rN5VtHdfWtra1rW3tprKt49ra1ra2ta3dVPb/B8Fn5pleU7fhAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"img = '../resources/input/inpainting/celeba_test.png'\\n\",\n    \"mask = '../resources/input/inpainting/bbox_mask.png'\\n\",\n    \"\\n\",\n    \"# show input image and mask\\n\",\n    \"input_img = mmcv.imread(img)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(input_img))\\n\",\n    \"plt.show()\\n\",\n    \"input_mask = mmcv.imread(mask)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(input_mask))\\n\",\n    \"plt.show()\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"result_out_dir = '../resources/output/inpainting/tutorial_inpainting_global_local_res.jpg'\\n\",\n    \"editor = MMagicInferencer('global_local', model_setting=1)\\n\",\n    \"results = editor.infer(img=img, mask=mask, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.3 Inference of matting models\\n\",\n    \"\\n\",\n    \"Inpaiting models take a image and trimap pair as input, and output a alpha image. We take 'gca' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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/uVf/mX23vPtt9/OzOfnmE+1z3/+83zppZfyFVdcwW9/+9vr6+fj2N/znvfwC1/4Qn7ooYfqzyOPPFLfPx/HzMx8/PhxvuSSS/hNb3oT33zzzXz33Xfzxz/+cb7rrrvqMefjunb06NG5e33jjTcyAP7Upz7FzOfv/X6y7JxzUF7xilfwtddeW39PKfFFF13E11133dN4Vv//2akOSs6ZDx48yL/1W79VXztx4gS3bct/8Rd/wczMX/nKVxgA/9u//Vs95qMf/SgTET/wwANP2bn/T+zo0aMMgG+66SZmljF67/mv/uqv6jFf/epXGQB/9rOfZWZx7IwxfOTIkXrM9ddfz6urq9x13VM7gP+B7dq1i//4j//4ghjzxsYGP/e5z+Ubb7yRv+/7vq86KOfr2N/znvfwS17ykjO+d76OmZn5Xe96F3/P93zP475/oaxrb3/72/nZz34255zP6/v9ZNk5leLp+x633HILrrnmmvqaMQbXXHMNPvvZzz6NZ/bk2T333IMjR47MjXnnzp246qqr6pg/+9nPYm1tDVdeeWU95pprroExBjfffPNTfs7/HTt58iSAoRHkLbfcghDC3Lgvv/xyHD58eG7cL37xi3HgwIF6zKtf/Wqsr6/jy1/+8lN49v89SynhhhtuwNbWFq6++uoLYszXXnstXvva186NETi/7/edd96Jiy66CM961rPwhje8Affddx+A83vMH/7wh3HllVfiJ37iJ7B//3689KUvxR/90R/V9y+Eda3ve3zgAx/Am9/8ZhDReX2/nyw7pxyURx99FCmluZsHAAcOHMCRI0eeprN6cq2M69uN+ciRI9i/f//c+8457N69+5y4LjlnvOMd78ArX/lKvOhFLwIgY2qaBmtra3PHnjruM12X8t7Zal/60pewsrKCtm3xlre8BR/84Afxghe84LweMwDccMMN+Pd//3dcd911p713vo79qquuwvvf/3587GMfw/XXX4977rkH3/u934uNjY3zdswAcPfdd+P666/Hc5/7XHz84x/HW9/6VvzCL/wC/uzP/gzAhbGufehDH8KJEyfwpje9CcD5O8efTDsnuxkv7Pyya6+9Frfffjs+85nPPN2n8pTYd3zHd+C2227DyZMn8dd//dd44xvfiJtuuunpPq0n1e6//368/e1vx4033ojRaPR0n85TZq95zWvqv6+44gpcddVVuOSSS/CXf/mXGI/HT+OZPbmWc8aVV16J3/zN3wQAvPSlL8Xtt9+OP/iDP8Ab3/jGp/nsnhr7kz/5E7zmNa/BRRdd9HSfyjlr5xSCsnfvXlhrT2M9P/zwwzh48ODTdFZPrpVxfbsxHzx4EEePHp17P8aI48ePn/XX5W1vexv+/u//Hp/61Kdw8cUX19cPHjyIvu9x4sSJueNPHfeZrkt572y1pmnwnOc8By9/+ctx3XXX4SUveQl+53d+57we8y233IKjR4/iZS97GZxzcM7hpptuwu/+7u/COYcDBw6ct2OftbW1NTzvec/DXXfddV7f70OHDuEFL3jB3GvPf/7za3rrfF/X7r33XvzTP/0TfuZnfqa+dj7f7yfLzikHpWkavPzlL8cnPvGJ+lrOGZ/4xCdw9dVXP41n9uTZZZddhoMHD86NeX19HTfffHMd89VXX40TJ07glltuqcd88pOfRM4ZV1111VN+zk/EmBlve9vb8MEPfhCf/OQncdlll829//KXvxze+7lx33HHHbjvvvvmxv2lL31pbhG78cYbsbq6etrieDZbzhld153XY37Vq16FL33pS7jtttvqz5VXXok3vOEN9d/n69hnbXNzE9/4xjdw6NCh8/p+v/KVrzxNNuDrX/86LrnkEgDn77pW7H3vex/279+P1772tfW18/l+P2n2dLN0/6t2ww03cNu2/P73v5+/8pWv8M/93M/x2traHOv5XLONjQ2+9dZb+dZbb2UA/Nu//dt866238r333svMUo63trbGf/u3f8tf/OIX+Ud+5EfOWI730pe+lG+++Wb+zGc+w8997nPP6nK8t771rbxz507+9Kc/PVeWt729XY95y1vewocPH+ZPfvKT/IUvfIGvvvpqvvrqq+v7pSTv+7//+/m2227jj33sY7xv376zuiTv3e9+N9900018zz338Be/+EV+97vfzUTE//iP/8jM5+eYH89mq3iYz8+xv/Od7+RPf/rTfM899/C//uu/8jXXXMN79+7lo0ePMvP5OWZmKSV3zvFv/MZv8J133sl//ud/zktLS/yBD3ygHnM+rmvMUll6+PBhfte73nXae+fr/X6y7JxzUJiZf+/3fo8PHz7MTdPwK17xCv7c5z73dJ/S/8g+9alPMYDTft74xjcys5Tk/eqv/iofOHCA27blV73qVXzHHXfMfcaxY8f49a9/Pa+srPDq6ir/1E/9FG9sbDwNo3lidqbxAuD3ve999ZjJZMI///M/z7t27eKlpSX+sR/7MX7ooYfmPueb3/wmv+Y1r+HxeMx79+7ld77znRxCeIpH88TtzW9+M19yySXcNA3v27ePX/WqV1XnhPn8HPPj2akOyvk49te97nV86NAhbpqGn/GMZ/DrXve6OS2Q83HMxf7u7/6OX/SiF3Hbtnz55ZfzH/7hH869fz6ua8zMH//4xxnAaWNhPr/v95NhxMz8tEA3C1vYwha2sIUtbGGPY+cUB2VhC1vYwha2sIVdGLZwUBa2sIUtbGELW9hZZwsHZWELW9jCFrawhZ11tnBQFrawhS1sYQtb2FlnCwdlYQtb2MIWtrCFnXW2cFAWtrCFLWxhC1vYWWcLB2VhC1vYwha2sIWddbZwUBa2sIUtbGELW9hZZwsHZWELW9jCFrawhZ11tnBQFrawhS1sYQtb2FlnCwdlYQtb2MIWtrCFnXW2cFAWtrCFLWxhC1vYWWf/H5ptlRtoTq+RAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/mattors/gca/baseline_r34_4x10_200k_comp1k_SAD-34.61_20220620-96f85d56.pth\\n\",\n      \"The model and loaded state dict do not match exactly\\n\",\n      \"\\n\",\n      \"unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\\n\",\n      \"\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"img = '../resources/input/matting/GT05.jpg'\\n\",\n    \"trimap = '../resources/input/matting/GT05_trimap.jpg'\\n\",\n    \"\\n\",\n    \"# show input image and mask\\n\",\n    \"input_img = mmcv.imread(img)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(input_img))\\n\",\n    \"plt.show()\\n\",\n    \"input_trimap = mmcv.imread(trimap)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(input_trimap))\\n\",\n    \"plt.show()\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"result_out_dir = '../resources/output/matting/tutorial_matting_gca_res.png'\\n\",\n    \"editor = MMagicInferencer('gca')\\n\",\n    \"results = editor.infer(img=img, trimap=trimap, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.4 Inference of image super resolution models\\n\",\n    \"\\n\",\n    \"Image super resolution models take a image as input, and output a high resolution image. We take 'esrgan' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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vueyyy6T5zznOfKZz3xG/vVf/1XOP/98ecUrXrF8/eTJk3Lw4EG5/PLL5aabbpL3v//9MplM5C//8i8fqWWegoda8ytf+Uq57LLLTjnnx48fP+U9p9uaL730Unnve98rN910k9xwww3y0z/903L22WfLzs7O8j0Px7X8X//1XzKdTuW3fuu35Ctf+Yq8613vEuecfOxjH3vMrff//b//J6961atOOc8nT548LdcrIvIP//AP8k//9E/yn//5n3LzzTfL2972NgkhyE033SQie+v8LvBQa95r5/hb8bnPfU6e8pSnyIUXXiivf/3rlz9/LJ3nPVfgvOAFL5Arrrhi+f9TSnLWWWfJO97xjkfxqL53vP3tb5fnPOc5D/jaiRMnJIQgf/d3f7f82Ve/+lUB5NprrxURfZhaa+Xo0aPL97znPe+R9fV16bruB3rs3y2+/WGfc5ZDhw7Jn/zJnyx/duLECanrWt7//veLiMhXvvIVAeTzn//88j0f/ehHxRgj3/zmN0VE5C/+4i9k3759p6z3zW9+s1xwwQU/4BU9NB6swHnZy172oH/ndF+ziMhdd90lgFxzzTUi8vBdy7/zO78jz3zmM0/5t17+8pfLpZde+oNe0nfEt69XRB9+3/pg+HaczutdYN++ffJXf/VXe/78fisWaxbZu+d4e3tbnva0p8lVV111yhofa+d5T42o+r7nuuuu45JLLln+zFrLJZdcwrXXXvsoHtn3h6997WucddZZnHfeeVx++eXcfvvtAFx33XUMw3DKep/+9Kdz9tlnL9d77bXX8uxnP5uDBw8u33PppZeytbXFl7/85Ud2Id8lbrvtNo4ePXrK+jY2NrjoootOWd/m5ibPf/7zl++55JJLsNby2c9+dvmeF73oRVRVtXzPpZdeys0338y99977CK3mu8PVV1/NmWeeyQUXXMBrX/tajh07tnxtL6z55MmTAOzfvx94+K7la6+99pTfsXjPo/39//b1LvA3f/M3HDhwgGc961m89a1vZTabLV87ndebUuLKK69kd3eXI0eO7PnzC/df8wJ78RxfccUVvPSlL73fcT3WzvOeShO/5557SCmd8sEBHDx4kP/4j/94lI7q+8NFF13E+973Pi644ALuuOMO/vAP/5AXvvCF3HTTTRw9epSqqtjc3Dzl7xw8eJCjR48CcPTo0Qf8PBavPZaxOL4HOv5vXd+ZZ555yuvee/bv33/Ke84999z7/Y7Fa/v27fuBHP/3issuu4xf+IVf4Nxzz+XWW2/lbW97Gy95yUu49tprcc6d9mvOOfOGN7yBn/iJn+BZz3rW8pgejmv5wd6ztbXFfD5nMpn8IJb0HfFA6wX45V/+Zc455xzOOussbrzxRt785jdz880384EPfAA4Pdf7pS99iSNHjtC2Laurq3zwgx/kGc94BjfccMOePb8PtmbYm+f4yiuv5N///d/5/Oc/f7/XHmvf4z1V4OxFvOQlL1n+94UXXshFF13EOeecw9/+7d8+Kl/mET94/NIv/dLyv5/97Gdz4YUX8tSnPpWrr76aiy+++FE8socHV1xxBTfddBOf/vSnH+1DeUTwYOt99atfvfzvZz/72Rw+fJiLL76YW2+9lac+9amP9GE+LLjgggu44YYbOHnyJH//93/PK1/5Sq655ppH+7B+oHiwNT/jGc/Yc+f4G9/4Bq9//eu56qqraJrm0T6ch8SeGlEdOHAA59z9GNt33nknhw4depSO6uHF5uYmP/RDP8Qtt9zCoUOH6PueEydOnPKeb13voUOHHvDzWLz2WMbi+L7T+Tx06BB33XXXKa/HGDl+/Pie+AwAzjvvPA4cOMAtt9wCnN5rft3rXsc//uM/8slPfpInPelJy58/XNfyg71nfX39UdkQPNh6HwgXXXQRwCnn+XRbb1VVnH/++Tzvec/jHe94B895znP4sz/7sz17fuHB1/xAON3P8XXXXcddd93Fc5/7XLz3eO+55ppr+PM//3O89xw8ePAxdZ73VIFTVRXPe97z+PjHP778Wc6Zj3/846fMRE9n7OzscOutt3L48GGe97znEUI4Zb0333wzt99++3K9R44c4Utf+tIpD8SrrrqK9fX1ZRv1sYpzzz2XQ4cOnbK+ra0tPvvZz56yvhMnTnDdddct3/OJT3yCnPPyZnLkyBE+9alPMQzD8j1XXXUVF1xwwWNuPPVA+J//+R+OHTvG4cOHgdNzzSLC6173Oj74wQ/yiU984n7js4frWj5y5Mgpv2Pxnkf6+/9Q630g3HDDDQCnnOfTZb0PhpwzXdftufP7nbBY8wPhdD/HF198MV/60pe44YYbln+e//znc/nlly//+zF1nr97/vRjG1deeaXUdS3ve9/75Ctf+Yq8+tWvls3NzVMY26cT3vjGN8rVV18tt912m/zbv/2bXHLJJXLgwAG56667REQleWeffbZ84hOfkC984Qty5MgROXLkyPLvLyR5L37xi+WGG26Qj33sY3LGGWc8ZmTi29vbcv3118v1118vgPzpn/6pXH/99fL1r39dRFQmvrm5KR/+8IflxhtvlJe97GUPKBP/kR/5EfnsZz8rn/70p+VpT3vaKZLpEydOyMGDB+VXfuVX5KabbpIrr7xSptPpoyaZ/k5r3t7elt/+7d+Wa6+9Vm677Tb5l3/5F3nuc58rT3va06Rt2+XvON3W/NrXvlY2Njbk6quvPkUyO5vNlu95OK7lhbz0TW96k3z1q1+Vd7/73Y+KpPah1nvLLbfIH/3RH8kXvvAFue222+TDH/6wnHfeefKiF73otFyviMhb3vIWueaaa+S2226TG2+8Ud7ylreIMUb++Z//WUT21vld4DuteS+e4wfCtyvFHkvnec8VOCIi73rXu+Tss8+WqqrkBS94gXzmM595tA/pe8bLX/5yOXz4sFRVJU984hPl5S9/udxyyy3L1+fzufzmb/6m7Nu3T6bTqfz8z/+83HHHHaf8jv/+7/+Wl7zkJTKZTOTAgQPyxje+UYZheKSX8oD45Cc/KcD9/rzyla8UEZWK/97v/Z4cPHhQ6rqWiy++WG6++eZTfsexY8fkFa94hayursr6+rr82q/9mmxvb5/yni9+8Yvykz/5k1LXtTzxiU+Ud77znY/UEu+H77Tm2WwmL37xi+WMM86QEIKcc8458qpXvep+BfrptuYHWi8g733ve5fvebiu5U9+8pPywz/8w1JVlZx33nmn/BuPFB5qvbfffru86EUvkv3790td13L++efLm970plM8UkROn/WKiPz6r/+6nHPOOVJVlZxxxhly8cUXL4sbkb11fhf4Tmvei+f4gfDtBc5j6TwbEZHvruczYsSIESNGjBjx2Mae4uCMGDFixIgRI0bAWOCMGDFixIgRI/YgxgJnxIgRI0aMGLHnMBY4I0aMGDFixIg9h7HAGTFixIgRI0bsOYwFzogRI0aMGDFiz2EscEaMGDFixIgRew5jgTNixIgRI0aM2HMYC5wRI0aMGDFixJ7DWOCMGDFixIgRI/YcxgJnxIgRI0aMGLHn8P8B+ZApPFfehXsAAAAASUVORK5CYII=\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"img = '../resources/input/restoration/0901x2.png'\\n\",\n    \"result_out_dir = '../resources/output/restoration/tutorial_restoration_esrgan_res.png'\\n\",\n    \"editor = MMagicInferencer('esrgan')\\n\",\n    \"results = editor.infer(img=img, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.5 Inference of image translation models\\n\",\n    \"\\n\",\n    \"Image translation models take a image as input, and output a translated image. We take 'pix2pix' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/pix2pix/refactor/pix2pix_vanilla_unet_bn_1x1_80k_facades_20210902_170442-c0958d50.pth\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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t7zlLTzyyCMAfPKTnySldNlYfeu3fisve9nLXrRj9fDDD3Pu3LnLxuTo0aPccsst6zG577772N3d5a/+1b+6fs3tt9+OtZZPfOITL/g1X4m45557OHnyJK961au48847OX/+/Pq5F9P47O3tAXD8+HHga7un7rvvPm6++WZOnTq1fs0b3vAG9vf3+dznPvcCXv0LE396jFbxa7/2a5w4cYKbbrqJd73rXSwWi/VzX48xuqpEdp944glKKZe9YYBTp07x+c9//gpd1ZWLW265hfe+97286lWv4uzZs/zCL/wCf+2v/TU++9nPcu7cObquY3d397KfOXXqFOfOnbsyF3yFY/W+n27+rJ47d+4cJ0+evOx57z3Hjx9/UYzbG9/4Rr7/+7+fG2+8kYceeoif/umf5k1vehP33XcfzrkXzfjUWvmxH/sxvvu7v5ubbroJ4Gu6p86dO/e082v13DdTPN0YAfzwD/8wN9xwA9dddx2f+cxneOc738kDDzzA+973PuDrM0ZX1ca1icvjTW960/r717zmNdxyyy3ccMMN/OZv/ibT6fQKXtkmrtb4W3/rb62/v/nmm3nNa17DK17xCu655x5e//rXX8Ere2Hjrrvu4rOf/exlPeNNXB5/1hg9td958803c+bMGV7/+tfz0EMP8YpXvOLr8revqlLhiRMncM59FYrn0Ucf5fTp01foqv7fid3dXf7iX/yLPPjgg5w+fZoYI5cuXbrsNS/msVq972eaP6dPn/4qoE/OmQsXLrwox+3lL385J06c4MEHHwReHOPzjne8gw9+8IN89KMfvczg8Gu5p06fPv2082v13DdL/Flj9HRxyy23AFw2h/68Y3RVbVxd1/Ht3/7t/O7v/u76sVorv/u7v8utt956Ba/s/404PDzkoYce4syZM3z7t387IYTLxuqBBx7gkUceedGO1Y033sjp06cvG5P9/X0+8YlPrMfk1ltv5dKlS3zyk59cv+YjH/kItdb1Dfhiii996UucP3+eM2fOAN/c4yMivOMd7+D9738/H/nIR7jxxhsve/5ruaduvfVW/viP//iyzf1DH/oQOzs7vPrVr35h3sg3MJ5tjJ4uPv3pTwNcNof+3GP0PMEkVyz+w3/4D9L3vbz3ve+V+++/X97+9rfL7u7uZQiVF0v85E/+pNxzzz3y8MMPy3//7/9dbr/9djlx4oQ89thjIiLyoz/6o/Kyl71MPvKRj8gf/uEfyq233iq33nrrFb7qb2wcHBzIpz71KfnUpz4lgPyrf/Wv5FOf+pT8yZ/8iYiI/PN//s9ld3dXPvCBD8hnPvMZ+b7v+z658cYbZblcrn/HG9/4Rvm2b/s2+cQnPiEf+9jH5JWvfKX80A/90JV6S1/XeKbxOTg4kH/8j/+x3HffffLwww/Lhz/8Yfkrf+WvyCtf+UoZhmH9O75Zx+fOO++Uo0ePyj333CNnz55dfy0Wi/Vrnu2eyjnLTTfdJHfccYd8+tOflt/5nd+Ra6+9Vt71rnddibf0dY9nG6MHH3xQfvEXf1H+8A//UB5++GH5wAc+IC9/+cvltttuW/+Or8cYXXUbl4jIv/23/1Ze9rKXSdd18p3f+Z3y+7//+1f6kq5I/OAP/qCcOXNGuq6Tl7zkJfKDP/iD8uCDD66fXy6X8g/+wT+QY8eOyWw2k7/5N/+mnD179gpe8Tc+PvrRjwrwVV9vfetbRUQh8T/7sz8rp06dkr7v5fWvf7088MADl/2O8+fPyw/90A/J9va27OzsyN/9u39XDg4OrsC7+frHM43PYrGQO+64Q6699loJIcgNN9wgb3vb274qKfxmHZ+nGxdAfvVXf3X9mq/lnvq///f/ypve9CaZTqdy4sQJ+cmf/ElJKb3A7+YbE882Ro888ojcdtttcvz4cen7Xv7CX/gL8lM/9VOyt7d32e/5847RxtZkE5vYxCY2cVXFVdXj2sQmNrGJTWxis3FtYhOb2MQmrqrYbFyb2MQmNrGJqyo2G9cmNrGJTWziqorNxrWJTWxiE5u4qmKzcW1iE5vYxCauqthsXJvYxCY2sYmrKjYb1yY2sYlNbOKqis3GtYlNbGITm7iqYrNxbWITm9jEJq6q2Gxcm9jEJjaxiasqNhvXJjaxiU1s4qqK/x8ypveH+FnSkAAAAABJRU5ErkJggg==\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"img = '../resources/input/translation/gt_mask_0.png'\\n\",\n    \"\\n\",\n    \"# show input image and mask\\n\",\n    \"input_img = mmcv.imread(img)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(input_img))\\n\",\n    \"plt.show()\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"result_out_dir = '../resources/output/translation/tutorial_translation_pix2pix_res.png'\\n\",\n    \"editor = MMagicInferencer('pix2pix')\\n\",\n    \"results = editor.infer(img=img, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.6 Inference of unconditional GAN models\\n\",\n    \"\\n\",\n    \"Unconditional GAN models do not need input, and output a image. We take 'styleganv1' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/styleganv1/styleganv1_ffhq_256_g8_25Mimg_20210407_161748-0094da86.pth\\n\",\n      \"Switch to evaluation style mode: single\\n\",\n      \"Switch to evaluation style mode: single\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAikAAACtCAYAAAB1Le/5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9Saxt2Z3eif1Wt7vT3v7e10UwOvZJZoopSrJkuCCVNTM0MKChoHlqkkAByokEjQTUwNBAggc24IELsDVxVQ1KkAUlnBKkkjKLZCa7YPQRL153+9Of3azOg7XvfUEyU8mQ4CIJ3z9x+eJ2556z9z57fev7f9/3FzHGyF3d1V3d1V3d1V3d1a9YyV/2E7iru7qru7qru7qru/rT6g6k3NVd3dVd3dVd3dWvZN2BlLu6q7u6q7u6q7v6law7kHJXd3VXd3VXd3VXv5J1B1Lu6q7u6q7u6q7u6ley7kDKXd3VXd3VXd3VXf1K1h1Iuau7uqu7uqu7uqtfyboDKXd1V3d1V3d1V3f1K1l3IOWu7uqu7uqu7uqufiXrDqTc1V3d1V3d1V3d1a9k/VJByj/7Z/+MV199laIo+Pa3v80f/dEf/TKfzl3d1V3d1V3d1V39CtUvDaT883/+z/nd3/1d/uE//Id873vf4xvf+AZ/82/+Tc7Pz39ZT+mu7uqu7uqu7uqufoVK/LIGDH7729/mt3/7t/mn//SfAhBC4OHDh/y9v/f3+Pt//+//Mp7SXd3VXd3VXd3VXf0Klf5l/NGu6/jud7/L7/3e791+TUrJ3/gbf4P/8B/+w8/9fNu2tG17+3kIgevra/b29hBC/K/ynO/qru7qru7qru7qv6xijKxWK+7du4eUf34z55cCUi4vL/Hec3R09FNfPzo64p133vm5n//H//gf84/+0T/6X+vp3dVd3dVd3dVd3dX/D+vJkyc8ePDgz/25XwpI+bz1e7/3e/zu7/7u7eeLxYJHjx7x3/y3f5+/9O3/PTFmnF19QlSSTCu6riOTJUJKvHBsujk+eowweOvYG98n0wWNbZDa0LRr2rZmUu1iTMFyPSczGUUxonOOzXaO94EYQSmFFoJqMCHGiLUNWucE3+FDxIeIIOIDtK4lxA2eBtGlr3kZEEogkSgUGQVBBjQCEwUZmoHOkUKy7hrsdoVsO4ZXNfdmGfflPvmmIzhPiI4YGkI3w87Podkim4gpp0hzAFYgmg66LWpc4TZrRCmJ0z0wE+jWuCJyNYWr7Skrv2HbOpwQ6LyiHg0wD47QewMaYbHC47zF47DB0W5bpMoZVAOyfMhweISzG06vP+FyfUU93/D08RMuLy6Zr5YoZQgB1nVN1zmEVGgt0VoyGg7YmUzZGQ7Y3dlnNBpz79ErjPYP+fTdD/jv/s//J779177Oi9Mlq3lN13b4CEJC0JCPSnYmI/bHY6aTIaNJSZZrdGYQUiJERCBACIjpH4GECN4HbOeom5bVZk3dbLHOAwKjFWVRMS5LBlVJMcwxWkGMuOAQCLLMYDKDkILgHTF6pJRIKVFKIZVECkmMEYRHkr6HACJEIhJQShMF4D0xQhQQoid6T4yRECMhBJxzWOfS10JIHz69KK0NCEUk4p3He4ezFu99+rkYCT4di4hIn8cICKSUGJ1hdIZU8uYgQX/copAQA94HvPe44An9wVRCYZRCCYVQEilEOr5IhNQYYyiLgrIoKYqCTOfkOsMojZIKiHTOsW7W/L/+H/89j7//Nq/dP0BKQVUUWOdYbxo655lWGUYrFo0l05rJzpTxeILzHucc8+WSpmkotKK1FtsfByEVyhgKk4GUWO9xziIAISUR8M71nwtiSIfAu45cK4R3XM1XKO+RIuKsZdN4lFIMlWe5bVl7iEHQWA8iooToPyACUmsmwwqISK2wETbbmmbbUTtPCBEESCGQUpHnGZFIrtOOU4hIdJ66c3Q2PUEfI8RIBEKMaK3Q6ubWnr5nO4cP6WdefqTzHkmvUwqBlgKt0/moW0cMkUyna8E5T6YEmdFEIqL/27Z/IxZaIQksO0+6wsTLa/wzqoIQ+/di//zapuV/+p/+BX/5r/yV25/50/jx+J/8TPwZvxP7r//sd+PtI7z8/p/+lRA82+2S67OnnD17ymK95mq+YrlqUNKjo0UJyPKSj5/NEXlFmeXo+hpn5wihWC+uUcakGxaghcAoiTY5kUBbN2y2W9q6JsqcgAQimVG024a23RIRDEdjdg4OKYyCdslgWDI9eMDx61/h4OGbxBjoupZ62zBfzjk7O+Xjd3/A4w/fY7NaEYDGOqwP+JDe++k+kF65UoJMS0bDEfcfPmCzuOLDDx9Td46v/fZf5dGb38S1C7rWIoSk3iz46J0fcvriFCUFj15/nePXf5O23nD94hNOXzxjvVrjrMVZh2s7Pv34Y2KMjEajP+WM/Xz9UkDK/v4+SinOzs5+6utnZ2ccHx//3M/neU6e5z/3dT2siL5jPByBuM+z5YcU5T0mo4Kr1RzhHYWuyEYl15tTUBEZDNY7ilyRR8VgMCEOplzPTpFaIIwmy3MIHpPljEf7FIXh6uqcerui3NlHhIBSkigl2kiU0nROk8kMIyKNbemco92u8coho0JlBu2BIEFBFBHhIxpBJQx7+ZgJFYMgUG1kuZqTLefITc3xUvKg3qdsx3BRo9qGEBqc3dBuzwhuxbBQaDlGUiLqMXEZcFjk8T7SrhAxIxqBX13i68eY0SG6nNK4lvb0jGFoGdsdlJtAPgCtaaLh6cxzWRboYcnMXtNaiw8e6yxdF5hOSw4OH7Cz9waus1xevk+93eBqx/ViwfPrK1abFVWZk6mS6+WCNnqEkulN4iw+KuJmi1SagKSNl2x8xJtnvDbaYTDZIwZo20hwQAApJFIJooSs0JSZoTQZeWbIC4MxGVlhMFojpAQRkVLf3DpvQUoMEAJoZYlR4GxLjBlKe5CCzBgGeUFRVuRlug4zI4kRdAxIAcZoTJZuQDE4YgwIQCqJ0QmkJFCQAKwQEiUlNwtEjAElEnCJAP3vhxjxwRJDIEZBiAHnHVJrpLXECEEk0BFjSLBXZQAEAsE7nDN4rRNIifSAxgPpNQQCCaAopNIYbVBSgxTpuKWjdXurD9HjnScEj/O+BzjpfCipUEojlOrbsLJ/rRqtDTrLMXlBlufkWUahM4wyKKFAgA4OVKQsSzKtKHNN27ZkEqSWNDqBTesDRabQIhBjRCvN3v4+1nmEEAgBM9Ix1CH0F4xEIvtFWCCVRklBSyAEj1Y3xx60TIBLa00IHttC9I7ZaoUMjlwrus7SdY7SCDIZqFvPpou4AG2IECIhRJyIGCURKpIpxXiQMRkX1DbQuUizbYguEEJEREHCA4I80+SZ6S/UBJadtbRtD6KQaAk2xPSctSJEyKRAK4n1AS3SdWe9T9ejED8NUiLpmr39SiolSEAkxATwImRKEGRazJQgAcsYQEkyCa0HL8AoRRYCrUuXTrpqEvBKkEggBYh4AxoEQgiqwYDxeHz7HH4eUvz0v+JnPv/Zr/35IoCfeaQe5CFA9AenaRoWizMunn2AWy9YbTqWqy1nZzNm8xnOdghJf00InF7zxsk+n5ytmS8XPNwb0smCzCi6VjMej9L7Qyrq5QLXNGzrDQGBNpoQOrrgadsVB5MJFkVeDpjuHlIvrljOrrl68ZSrsxdMdnc5uneCcorLp4+5evoRanzAq1/9TSYH90AKYoy4rmY8nXJ8csxyUDDcPUGW+3jXgYhEoYgIbLula7a09QZBoKxKlDGUgxHKGBQKU1RMd/cpzB7OeQSS1eKK02dPEOeXmDxj/94rvPWl36DICy4vn/PJ+2/z8QfvcHVxjqhrnHX9RjH+wlKNXwpIybKMv/AX/gK///u/z9/6W38LSDfP3//93+d3fud3fuHHeXj8JZbrS4bFmEwbcjNg1l6wJ06QUrLdNhiRIwVMqgNm86eUZsBic8b18pSdfIIQCqVLtNTgA9FZtNLUzQbXLMmG+6g2YzSYIrzH2Q7XOTJdkFWjxA54y6gcsT8+pnFbnr/4GNfWWF/jQ0BJk7bFEbQwRB9wscH4wD0HX6ne5NA9Qq0DcjknXl+yOL1AOEe+gXKtEJenBPcYJUusdMT1BbQbCr9BGYPoFHZbE2OLUFsEnnw0pfnSm5jrGfzkjxEXl0igMxnatdBcIdtz9pVAqwniWhOaOUJdoyZD8r0D4sTSPv0UXt/FTCuufGCOS6xPVjCpBuAE52cfMKuvWC+WdE2kXVpyMcA1ltIYvvnm15mtNlzOF+AlksjueErnOrZNg0TQWUfTtmnXLheUgx2uLy/ZzmtCiNg24H0khv4CjyCkSqxUFKgAMUSCBxCImN6A/R4U+l1qYlYEIoqeWEmPJ/rFUDtJjIEoFEpotNJIpeAWWEiQEH0kEgmkXbeUghDTDijGtHiEKJExLYAxBACUTj8jYr+7DhKpNEJEiJJcD3qGw6NUwDmL947oWmKgZ18AIdOzEaQlOSpilEgpUKTdr5aeKGNiBZAg0oItSIuUQCKkRMq0+1YygTohZWJ1Yv96+QxrEwLBB2KIxNiDHxle3vYjPSiI6TUhEEHhQ+zZDo+WHicSWAoyJsYihh7ICZSSDIoCQmRbN2SZIYaAc56oIiJmCUxphTKKyXRK6IGXc5ama7mczxEugRAbAloKVIwJlkWfAJf3IARSakLPaUmVQJoLPjEr0TObL2iaDkFiUJrGomViilaNY9GkxTwIgZIgEQgpElBVAiMlSqZFelN3BAFITW4M0nkwkSoD3f+OkAKlFNZ7fAjUW0uICUyGEJEiEETa64cInQv4GDFSEkLEZIZBURC8Q3WC4BOLZkMgBIgiLWKRiPek91xMbK/1HmMUmVYoIej6XXemFd4HOu8ZKJGYZUhsqILGC3wQDDONC65nlfv3Yv8ekyIBnZ91a/yXKgvFn/HfP/sz8ec+iwmsEQne0zU1i/mcxWLGcnZOvVnQrBesZzO2m5pV3VJMdjnYmdI2NZvNCtvWxGhY1C0+XPHo+JDvfPcJC90ipUdLw3g4YjyagJS8ePKE1fyKLM85evCQerni7MULnp1e4NCMp7sEITk7Paepa44OD3j1jbc4fu0tnn34AVeXp9SbJc+fWMqiZDweM6gKZh+8x4+/98fsPXqN17/0NQbjKZPxPrZtOTw8wVrL8StvcXjyRYzWWO9Z1w3X15c8+fht5rMFbbthb3eX6e4xw+GAzfwceB/v0wZgOBgwKcvEqDuPbVuE1EipyPKcyWSP144P2Znu8rgaENB0Nr3nl8yoG/u5z+0vrd3zu7/7u/ydv/N3+Na3vsVf/It/kX/yT/4Jm82Gv/t3/+4v/BjT4SGz5YdcLS4YDXY5rE748PonnNrn3B89JBeK+faaqR7yYOdrFDrnw+d/QqEGdI1n0QQMkuE03dhnsyvGkx2MKVE6Y7teUBaXCO+ZDCbkUrPYXOOJyODZG+6hjOLy6glGCqzruF7M2TQbvPfomJOlLTEQ02IVA3jLqKv5cjvmre4NyvNj5GyF6DYIYfEXFwyfPcd3YwrnEZstfnOGUIFtaBJNvZ2BkIz27tHJHNnWaKGQ0qKNQAaNUYb8vZ8glxfU19eYoiKi0YMJ7eqSsGpQLhC9I8QaukCQYLIcu1xggmXalnxlf5fT92suJ1umBwWPZcel8ohSsVom6jMbjBFKUBVjqsMR9bbFOsGX3/gKo+EQYwyfPHtOYRRDM2FZr9Fak5sMhUQaSdM1SEAL8EbThYzx9JiPP/i3aVfg06Jys/OLCESMyAjCRegBTOwX0RA80oMngREpE4KPIdHTsd9ABh9TOy8AUYJQIBOguOUQRASRljEfQk8DB6KIaeGL6e8mYBKI0SOERvm044gi4J1DCoXOdGIwhCBTOaNixKiaIpCUJiNTOUWWY72jbhq0UnSh4WI+Y7ldY2PLfH1FxCJjwAeQKKIQaXcbelgW055b9IxGot8VQqbFScS0e0cIpEjADZHYHm7p+cTSpFZRwHuHdw4f0u7fx55NiRIXAk5JVHAIoRBSIaRGIRDSYp3GeI11CqXSOQmAjgoh6RfNl8fYKMW4LJhttsQAudb4KIjB03iPVgrVMz4mLzB5hXOO4wevEAV0nWO1XOJ9eu5C6bRQkhZY78NtW05KUEiUyZFa4kK6sSoii/WKbdtiQ0SEdK1oKRFKULcW23lkjLiYcKxMtAVGpr+lpCRTAqMTEGg6T5SSsjIMDkYI72gWC4K16ToPYGOkblpad9MmSi20EALOezqf3g/xpl1D+ntGS4zW5LmhyA1EidcCF8BZj7KO1nlcDyCEECDjLd0fIvhAYm+MQimJsD79jg/kWuF8wPlI1vewFBHdg7GtDXgEhVGs29QO7N92iUvs/47o24h/mrn08wCWzwtuXgKVeNtqJUaazQpnLVlZkZUDtqfPePHph8wvLtPrTeQYeTlgMh4TTc7583OyrkMNJM12A0JgfSDWK/Yrw3YxI6tyRoOcnck+2WDIp598xGa1IM8LhqMhTz/6mNVyzovzGY2D6c6Asiqpredgb8rVpeXTTx+zXl5zdHTMZO+I3Cgur84hBIwEa2tm13ViWIl89OMf8uGPf8TJvSNeffULZKMpG5der4qeTPdtdiXp2ob17JynH7/HerWgyBSjL7zB3tEjBoUmtFusizjrCN4zrgYc7e7hfUfTtKw3q3TNGU2WFQzKAeNBzuHugK21XC2mDMY75OUAvd4Q+83656lfGkj523/7b3NxccE/+Af/gNPTU775zW/yL//lv/w5Me1/qiKSqtrh8voFmVTIomRvvM8nlx9xUO2SK4O1NdedYzBYEzsYZgPaziNVZFhOqeuGtn1ONRwyKCuabcNob59yVDBbnHF++YTR6IDOtzRdQ/QJoGRK0DbX2K3CW8vaXbBcXbNY23RRuw6tMzKTeu7eW5yzhK7lYNvw7c1Dds+n8HwOzSVeSDjeRYcV9XvfwaxnmKaneOsa79ZsQiTTGSYTjAcjkDk+eDIZiNLjXIuINgGseknorhguMkI2QIyPCS5gYyT4lvX1p0yqKdQSg0cYhxUKKQUtW4IT2DpQFPco3C6HFGRPP6HsAq+OdzhrtvzEnvIitoSyRL/+CLO3S7NZsd40FOWEwXCPvelXWSwvuZxdsTs94NV7D9HK8Mc/+T7L7YbGeUZ5hRKK1nas7ZYYPFEoqsUpH3xg2S6ubkFKCOFWnwEgYn/3AKIPeOdT77NH70JEZEzthyA9UgqiuGFXIsFFnI/YzuJsh3eO6AO4HohIhQ9J0+C9wvpAEBHRMwpCpp27EgIhQr+ge4J3oEBmaZFKd2mDUjkylIyyIbujCTvjCXleUOYViASWpVQJzMrUKnG2pW07DqYnOGexrmO5XrPaLFhsF5zNLnG+xseWIAJSaAiC4D0x+ESe3GoPElgO0fdsTLylt4kJqEWZjk0vdUiAJCa9h/ceH5J2wt+ClJB67VIhfdKnSNEDFC2IWiAdSOnoOptuji6dhyDARYUKAiEiPjgikcViQ9O2VJmhyLIE8LRC+cCm6UDA7rBCGkVV5Qwne4k2D5E8Rva7jrauaZuarm3RQqBlujELAs6mPp8WYHTSWEQCOlPYrmO1WpEZg4+RzaZlvbUYo4ghkmeGrmlxPiJJugyjFd6Fno1IbE1EMMwUZd+mCjE1G8siQ2mD0JIyN6k1khmi91ibGAhnA15IpL5ZyEV/fUDAc9PUSNegxKjU/lQiMTBCSJz3ECOt9VjXqxwEPaNBDy6BvgWT2JT0vEOICeR4T3AeIyWdT9e80ZLGhdTe61GCiBEpIoWWLDtHZhSZCtjQNzlFvAUq9JsGIX6e2/j5e/zP138u6/JTbaCb3l7wzK8u0DrDFBXXszkff/whTz54m25xRmjTwrraWhabhkGVsZxf0LlI6w2ZEkRbU5Q51lq8bbBWcXKyz8cffEhVFWRKYztL0824Pr+gLEq8C1xfzTl9ccpsWbNpA+Wg4vT0gs5B21ra9ZJhDqWAUaEQdLjtFa5LOrXOO7LOoo1iNB3Tti35sGI/y2ic4PTimuvFgqPDQ4bjMcOswDUtnW1pu8C2rnn80Xt89O6fYOsVIgaGowl7x48YjXdQscV2Hdu6wVqH7RqMlkxGA5Qes922zJcLqsGQzBh0lqGzjDzTTAY5u9MBeZ7jbct2vaRpEsP/M5TWn1u/VOHs7/zO73yu9s7P1ryeczgZM5+d8eLqOce7hwyrAcfjI043jznJH3IyfMD5/IwXT79PpnMmxQlbs+Hy8pQwqVivX2C3WwZtTVYUjIa7bOvrtCsVoJVib+cA72rOmxpVFgQJm87SrdcorcizjLZe0znLOM9Z1woQxGCJQeAAozJCZ3lQO/7yiz3yJ5Hw3g+QzmL37uFPHqC2l8z/8L9Hzi+JsgJ06jPnGV5rKg8yBiaiBASqtdTNjKzYQVRTnM+IvmYzP2W1WbA/PSQEUDKg1xeowT7BrXjx+EdJ/7C0TKkwaKIUhABITecsQUdMZzGbJfbKkAtPsZ3TPj1jZ/8BJ6MTvpl9lS6DGsfFTxb84PAp3b0Rg0HFXrGLyXLmi2vyQUm5rciNYWc8po2e1+4/4r1PH+N8TQAyKZkUIzbtmuhBSU3dLrg8a2hW29Tf965fTNLOL4rEiihiry1JbIXrHK6zWJNaIEqnNo+Sst/qSiIBosD7pPOwvsP6jhAdIThCSG+mGNyt6NSHgAoenAT6xdmnVoUSCQiJnnmIIe1Wc1MgqBjkA3aqMSd7R+RFQZYVZCYjBIc2SYwrpUotDWvJ8xKpVBK+OklZlkkkHAPWOcq84HBvn852HM+WbDcLnl4+53pzBUakzlSA6ERqj5HEvrKn+BERH24Wu17zEuiBVmo3xAg+xlv9ifMJ/IWYQMoNuxIg0QfBE4QkCI+UGgXg08IcSAJUrxRdd6NZSQulkiExIkS8d4QYqZuGi9mSBwc7GCXTeUQQM8Gqbujalk5LhsWIvCgIMaB0SZABZzuKqiIvC5ROrA0xaUOyzNBZC0S0UknX1B+Tzlq29YK2aTEqASjv0uJETHoLbWRajELESIHzSaiKEGRaJa2STmDTSNBEtABQVLmiLAxbH6jbjlAHWpt0TaTbdwJ7CjKlUEhsCFgfcT7go0/MnpSIEBEy9uxp0qEY/VKs7ZzHuZD0TTGB8tCzX4IbVjEdlxumAymQsme4+taR955cSYL3GJWAj5KJiWxsoDAKeYOhSCyoiWCtJzOK0KX2qgv+RgTDLVy4BUmp/qx160/TnfznVvzs/4fA1fkpeTEgRPjg3Z/w7tvfwW3W1I3FuUjTgXWesiipiiKdV5M2h08fP2W4s0tWDdisF0QfEQq6esvu3iGFkkwGAzKtcd5zeX5BmeWsZnOqsgDvGA+HGJVzdrXg9PScxWLNar3l8PCQr3zlS0Rnmc+ueHq6pnlyxaOTKUeHRwgpaJYt282GUV2lFqNIzPJiuaLpLNO9fYbTCQ2Kq6fPyIJnvZyzmp+jq4rr2YpnT5+gomVvZ0rdNNx78Ap7+yeUeYEIga7rsNYl/VpI75OiMIxGA4oi5/xySFFWKGMSs9mzNGVu2BtVTIYDlALvLYKIyRKb+XnIlF8Ld8+fVdfLC17Zf4vd8S6Pzz4k04IjdcRBeYAQnqv6kj1ziJSC69ULjgZH5NUQIQuYCLxbgY+M84rp5JD5esbl7JwQI2WWUxVDvO+wLu3GZHRs2w6cJ1OGyWCCkoHNdkXwgTKvCDHSdTVCRoRQSXnvHcI5jpqab11NyT+wNO++jXAROX2NcPwanH2P8z/5HymFYKwmhE7S+Q4ZBV47bLMlzyfkOqdVCmM9bdMgqh2EGtIuFoS6pusWRAWjnb0kkAyKZr0iIMjMjKfX77CUNXuM2W42KOPYr47xoUTILa1oAINzLVoJPI58u0V4Syl22Cw+5Xz2Lq8/FPhWUTiFUZpJIbk3K/mPzZp37heIQYHttmgpGQ8PmIz2eXRywvX8iutPnzLd2WF0eUWlNCYr8SEgZEQKDyZd5PVqSWxyum3bMylJkxBubBdCIG5cKMRbd4cLFus7pE3shY+RpPMTyUETY3+TTiyBDQ4XLT66xAzgCSIxKYrEFvhev+Bd0niEGIjBIUTERYERHqMURJBC4z0M8iGHoxOOdg84OjikLKtbcakU0LUtmc7Isgyt0m6+8468KNAmwztL8J6yqhIT5D22a5N2pEwaGW0trwwndN0h947ucXV9xbJZM98suNi8QEdPFz0ipNZDiIKoEjAJQhA8PWBLAl4hEyNETDqbEEOv3UitHudTq+fGWZQAjyDGhIpEjAQpkH3bixBQMhB6wO2CR3qHdOn8RSJBBry4OY1J5JllhovZklFVUBqNiIHaOaQpUnsPyapp2ckP2Ns/pOtaSlP1615673Wd7RuDgqZryYuM6D0yppamvNF8WIcPlsura7abOok/BwXCBRaLGi0VWa6pigyiTG4rJRExUpgenEaQKl2PEYE0GQbQ0aOJRNfRectybam9oCOJW2XriEAWPYVWFIVBiSSIbV1q5YUbF0YE6LVAfcvqpo0ppbjV8oyHJWVV0jQtzrrk8rI2vVYfkoYoxs84iVLrq+cm0/dcQMmksREk10fwkSgVLoSkl3EeHRLIcTaQZwolI5WRbF3AugRidqYj5sst66Yjxtjrofrrhj9/U/05N95/Tt0Ao8BidkkUEhclL5495YN3vg+2AdchXEvsHIO8IGYJ0Hvn0DqJuo02vPXKPaIEqXJE8NT1hhAcwnmE80yGQ8ZVhXOezXIOztFsNti2YW0dgshkMMKYgA2STW1p1g2DPGN/Z0BuBMVwwN7uiPVywWa95Xo2Q3HJ3v6E3fE+i42l2dasF0umuwdII1ltz5ktFpxfLZiOSo4fPGSys8tqNkMHR1ycYeuCSmW88eoJWTWmmpxQr65BKbSCSGLml4t50p8J0W9IPMZIqiJDCkFVlSilMVqj+w9jMozRjIeSnfGIyWSHzBharXon3+erX2uQst5cUzdbyrxiWo15sTinygqmeo+j4T0u4ikX6xfEoFCy4nx5RlGWFNmIYrTLbHnB/ftvspi/4HpxgRYqnQjnGE4PKYqCtlUsrs4Z75ywbVu29ZbSFHjX4uwWL5MOoCyHCKW5vLyk7RqKskIohVIGFT2j1ZJvPdfknwjqRUTEAj09Qk72kB/+Wz59918xHE8ZsodfWrzoUCrHYJHRMx7ukpe7oArcdk5drxkcnCCUYPbiI1bLS6qsohoe4I2gzKfIZo40EbUNCGkIrWcetozzAdVG44TkarMkipy9yZg8HmP2CjYy4rZnhM5j1x1eWkKZIblmHea8P9yy3mZ8PX9A7IBW4JYdxTznr2/usbNo+KO35rhxjnOWzbZBKo3vHMpH3rp/wtW25cuvvclsdsFiu01tlBAYDocUWpNpDd7R1pbZfEEk3UjDjY2y11PIkOQjienw+OBwrsNaidCx14wEVJREqYiExLz0zMGN9sC51Ma4YWpi9EQhSF319NjOO6SVKJUW5BhCAg8hEHREZhKCopAVX7p/n0f3HlCWJTrLybOCGHwCGErTNQ3CR1R2I1ZVBO8wJkcbQwScdWRZgTLJZUIEZQzRud6Nk3bOISQlx0BrsqLgnhQsZjOGesCL83NcPUOL1OqxIeL7G7UEEL22ITqQSVRx4zKK/ULmY8C7kCzH4UajkvQkaQv92Q+VdnRCIEhtByGT4V4gE7sTUkvM+971JCHKG3FlWrZ0v2ufrTYM9ia0PrCpLQOR2AznE6PQti1ZVgISa7v++aXnnmcFw2rE9fWczqVFOg8BoxXa6MQUuWSrv7yas1nXxB5sFBK2bZsYBaNQUtI0LcPhgFzmbERyD1nrsc6TJfUyNkSKQYlRCmFb8I7GOurOEQJ0QONj72SDKAJlZjBComNIYCJEOu/xvUVe9CBCEFEqtckEITFBQvQsVGqfaKUwRiOlpChyTJWjlaJtGmzd0HUdnU8tqdZ6bEyPI6S8daUhUjvHhfQ3CUn35X1I+nMhUSQhrAvpXGmVzq2PAaMkA6GoXUAoyf2DMYVRfPxilq6dSGL0boHXL1afh0X5qdbO7ecvdVZd07Jab6jG+7z//ju8871/h1/PUaK/v3hLs1ohtExtDGUwRmHbNa6BQTVAJn86tl0znQzJMkG9WpFJRbQtO5P0uq+ursFaxlWBiREdBYvlEpNnhBCptOTr/9W3+eTJOdvVlq5psNETfIerW1RuODzYQZ8c8M77kfOrK6KMFFnGznCAMyXLbc1yfglFyde+/kWeP7tktlxxeXnJ4idvMxqP2T88wBnD1vYb7cwTsoKdw4cUxQgVHa1te3YtUncN69UiOXGkwHYtddckvZXRhP7cB++RSqUPKTHGoLSmFJHxcMBwPEUbk5x+Wn9uNuzXGqTYtma2Ome32uNo9yGdtzxfX5AXJaN8n73qAB/OWDQ1ZTZi0bScX53y6KQgz6bovXtcrJ7y7kc/YXl2xZe/+FUevvplnr94zPn1JfcOT9INw9bkTY2MgrJMavxBPqRttxiT4V2gGOVs6i2d6xiPpwhtCMFB9IzqDd+qpwxmGeXb7+KOHhIfPCJfLGl+/C+4XH7M8eGrKH0PsdqAWVLXK0xekaHROiNIjfCS0LZY5xkc36fxa56+/2M8gkk5RBQGZxyhs6xch4mSkeiQeooaDQlyzrGqGPgCFwTjcoopMy6bOevac1QdU6qHDKspxfQEd/URshYoYQnLBnE45PjhGyzOP+SZuYBVw29M3yKsOoT3+HaFeXzJb3U7nIkr3nl9hBkUBN/RtQ31do1yASEC0/GQpm3RbcVASbyLNHXLYnnF3tEBg/EIVgIpPVWZE0PEu5DeMKLXeMSbBVPgvUhMh7e4ILFOImxiCUwMxKhAp112DMnNEoi9c8bfgh+46ZVLhEjMwI0QNyZhBUEkd4wkiS1N2nKyOzziwfSIyXjC3u4uKsvRSqN7O2sM6Q16w6YopTFZnm72XQdCoLSGGPHOJcZFqdvXHKLD+0BZDgDYbDZIJXGuQ0qFyTK0NoQYGYw8X3yz4vjomCdPnhJ8w2q9oHUdNng63yWwIgJCuFvgQXSEIHozVNJRpJ18fwxIVL+QSY8hei3DTY6KkEmPIqVG9+4oKW5uYDr9rujzU/pFuH+Q/tjH3m2TWiaL9Zb7O6NbQCFiorWda4hesVzVGF0BKmmRvMW7lq7eUg4qOud6FkJgrSNkAbIcZTTr9QYpYL3est42gCSGQKYUTWepbWDbNBilsSJQGs04i2xqyLKCTdPSuIiBXtGi0CIS24YuROidTI0LBETSqghJ5wIiepSUyNjn3gRP1zNP4abNRuydWILMqL6NGJBCkZskdA69dVb1jiznPfPlisw0ySlEakcarYlCoJVGyEDnAq1L1ncArWRyzvUso0Sk+5pSWOmR0aN7UOJ7eGq0Tu3SEBFKpLZWBBeTIHnYW6jrzYZl3SGiR8Q+k0MIXtryf7Zu34k/9dmfVn8aGPlPfe/GbdQ5jyp3+OC9t/nOv/kXxHpDVZZkgwHttiYGyXg4pnMd1WDCYDygXs5og0GrBBInO7sMRuNe+7Qi00OGUtB2lm6Trj8jBePRECFEH32RMZ6OGC+H1PWG6c4u29WW9dk5r93b5eIKdncfMtnb4+mnzwmu4+knH7FZL9nbnfLmq0fsjkuEyqibjtlyg1Ewqkqcjzz5+Bnb5gPGkymFFrz28D6z5YLWWV68eMEbr7/Cyckx69kC17WMD45ot1uuTp+zXs6Y7O1T5AXT8R6hW7Ldbm/1Q22zZb1ZgEgRHEqrFJPgbCKoQgKxxhi01kgZKYuMoiwxJn8p3v+c9WsNUlarFWfXzzDKMK32ub/3Ch+c/YTL5RV5PgIh2R0eI8WMs9NrptMTZlfPOJ+dc6Q0LhrG+S5fef03+EnzIy4urjm8lyywn3zwLm3bMh6P8c2GqigZFmM+efo+g6KkGoxSvkGMjEZjiLBer1C5QRiFcw5FoOo6vvbCcvyjC+JljQpz1CriXnzC7OwjVj6yd+9NquIebuvwRrJazyjyCqU1wVsaD3k2JTqPzxXl3h7z84/5ePGUvMw51lOCtxhVUW+2eCEpBjnl6CGyc8Q8R1UFfrlmay0DM0Eoj5EZuRlgsjXXccM76w/Y6c7ZLfYodl9ByRK9W+AvnxM3S7guKQ083Ahggh1K3j9/n9eqezitENaz3ZwzOM34q+WQ68maS6NQRpPJyPVqi1aeIBS5cpxMxygR+eT0lFW9YFwM2KwVF1dXjHanlIMBUfT2U3omJb7cycvbHI++fUGvkbhhVLxAKOidroggoBf7xSgIhL6V4/Akl0oUyS2ijU4sjEwhbDF4QlQE+l2gjwgJ1bAiOjBW89r+Q+7fv4/UGXmWJX1ADx5k39+PISBkClvL8hJIVL4QCu86lNJ455PbxqRdind9rox1aG0wxtC2DcE5IprgA5nSadmXgtVmiw8BbXJ2dzOk0mzrhnx+wWq1YL5eoIFok1jWC0UUvnf6cKs5Qfb2YwGQFiJ5KyPov34DMKRECI2UCZTc5KMomVxmRqWWluqDxkxvd5YyuVZSeBn9572mQ2u2rWXdtGRFQRc8y22NkRLhA57AcrHgenbByaM3adptAihtS9d1zBdzXly8oG7qW7DpY1q05/MVwVukEFzPl9RNaqPJmHJa1nVN01i8i2gZmY4G7A2yxDpJmWhtF8B7VC/clsn73rNyEesijeuDzVRqO710FAlCv+i74FDEJEz1SRabdCKxbxtLiiy7vVZCCOmGH9Pv+J6VkCKFhIk+f8j1P4OAuu56gTT4mPRSKR5B9BkrESWSTTwKyHoXj+8zfqwDKSJa9u2g0AOjGGn7UDmFINeyjwgAoRIgW6xrtrW7zelJmhfRi81/sXv9n/Vjv+iS97M/5yM8e/IBH//wj5jmGl3tkeU5hclxoxGyz7Hy0dIsrpg9v8bFkunRPfaP9hhVOcK2dG2DyPP+wG6RpsO1FkQ6rqYoyIKj3dTYZkPTNagsSwJrD1oJXn/rNS7OzlkvNuyMxzRtjVotefMrX6ZxieF8/+23efHslLdef5WBiiy7mtGgIgTDerNhs90wGo3ZGVc8fX7Os7NrqrLgYH8XJRXj0RDrO+r1mrIaUOQDPv7x28ze/zFf+Ma30AqqXIPb4kMLBJpmw3q9QfVZOtv1huVsllhYeROE6ZLYPaaohBA8Uuv0/leRMs8Ss6KSXusGVH+e+vUGKcslzV7FxeoJQknG2S73Rq/wyeVTpBfs7exSlGP2x8cIIZlfrNmdHnH24hMKoSiHu5hyRDVRfOk3vsVmccVicc3O9IjLwRneWT54930mA81oMGAwOWI82WG7WeCjhKwkRMtsuUCpDCEVRklsSP1GuVzxxuNrjj9Q+A9P8fWWptviP/k+dVBUX/gmu7WjKnZwTqDcGh+X5GWJcwHVWYq8RIoBKqsIpcWz5ONPfoAHXt97lUwN2FxcUSiDjx2jYow3EklGs75g0xmKYkzetayaFSJEoky9a9vWDDDsZjtkWcVZN+fF6opN1zBorimyjEJXiG2XRKdNR2frFOS27HiYv8Lz9pSP7Mec6AO0GOO9Y72+4mDxCn95LvkfzDXXwM7OlGhb/vjH73Bxfcmr90547QuvMh2N+GJecn55SV1v2NvZ4fz8lOurK/aP7zOdHLC8nvdAId7+K+TNDa4ncuPNbjb2IWgBGQIypo+krYi9VTTpHlLMV0iZFf0NUwqJ0AaVvtTfiEUvHPM9e6KI0eNajyg13/jClzjYP+Tg4ACTFyiZwtq0SS4OYiB637uQBD54hFBIY4jepccXDkg7lhheXuMh+ATKbNIiEElOgU1NCAGsxXYtWZbjXWA2m1NvNiijGFRDnE25P0oIHhw/4rH/lKZtGeYl23rNtu3tp7I3s4ok4RQxEHvrckSkLIT40vL6clfaZ85ImVxFfW6NQCY2RedkpiDL8lthXdbvtNSt/Tddj1IKpIgopXuxXtplL+uOqdLEEFit1kwmY7ROFmdnHe+/+zbT/WO6tqGzHevlAts1XF7MuLpaImLocyFS62a5bai3NcNCc3o5Z7Vte3s7TEcFq7YhE2C7Dq0EmdYMjaLpHOu6oygy1k2T8l6QyVocAjZ4GusJPtmIt7ZPHhYQbUCpJHB1iP44iRRAR8ovib0IG5EW0RhAhIg2ScSrZW+5FhIfEquY+SToFkKghSDLs55xiX2LMrGBEHsgKIk+cRhSJKA0Hpa0nU0t05jsplpLXHAJWAFZpmi7/pxECERErw0TUmBdxItAnmUYejCYEoTYbCxlpokxo25daifAn8GiwM9Cis9qUv48UPJnfz/e/tN2LY/f/yHX73+fk3FOo3eT9bzURLvBbzZ0Tct6sSQr8tSCnuzio8DENWETsX7AaDJFoAl2iZEKNRxglezzmCR5OcC7jnq+4Pr6iq6psUIgs4z1dgves7q+5vDomFdfe40/+c532dufsH//Hh99+IzlfE4MkXa95ORwl8vTc54/P+fBo2Pccs7T6wVVVSCjZ341x1vLzv4OX/3KG7z7wRNenF+zrTsmowFSCcaTIdum5cnjxzz6wmtM7z/i0/fe4/3v/BHHr3+JerNhfn1JlN9h57f/Ok29pqlrpIQoJF27Zb25AgJSpA2itV0fapcYOedu7mMgEJRZ0qnc5PB8rv5eX7/WIEWhMVmGdRs+Of8Rj3a/zHR6jxNveTZ7zCDLKMwArTQHk2NUuGB+3bC7d49PP33Ca69XVKM9UBo9Mbhuy+X5GcPhmJOT+zgko+Eubjvj6fPn3JPmNo3RiEhR5GT5hOfnz9gsr8myHCki+EC2XfO1jy54471AfL5gM7uiW18hPEx3XyWf3COqMTquENs1ol1iqxwhd7AXC7QUCGVADWjllHxYsrr+CU9m7zI2FbvjAzK1jwwly/ACNRnjWovJBsjQEumAnDg5QE8GNNdnEAVa5KyXC6SHPBisaVExpwgjTsoh1jusC3ilWbmGutmSdQrpFcZ58oGmLDOebK446gKvmns8rh/z3uIj9syEo/yQ4BvcquGLzSu85eEPueDDDz5if2fCo+P75OWAqCJPnz9nd7zLZGfC7mTESgtKI2m2a9ptQ55lPHz1VU6fPAboI9jp0xTTNZBuv73jJ6Sbcwg9Yu8Bza2LoH+TiNgvrCIxGMl+GRHKEGUf7MYNaFEpIqX/fRECRSbJsopMFnz9zS/z2quvkucFSpvUe40ki6nsHTtREpzH2TbFzRNvF+kQEwjyUZAXJVKnvm7wqR0QRHLaOGdRmUGKxKh0TY0pckIIKJGcNevVisXVFSF4RuMxMgYQyTIrRUVWFLz5xpe4ut5nubhAzZOeRbgOFSVeeNAxsUqQ3E8RUqZMT72LmES1NzJLIXuA12exRMXLpFnTg5QMo82tsC4zqQWmVNJ6qL6XLXsRqFYGH9IiarSkaRoYDZACaucp2g5BSljVJuP87Jzv/uEfoHRGAGbXM2aLFacXl9TblFhrtafIMzob2G5q6k2NtzBfbrA2MR9SpZRW6T2+14pkRpJnGus7lusmtb+EYLVuUBLyTKWU6cbhfGDbegKJIUGA1ilILV2AEhdTC0cZQ4wRfdNGi7F3UsUeiCRrcx/7l0SySpIphc5MYrrSCaCzLqXJhohUkui6dJ5ECobrSbF0z1QpR8U6h1QRFxJbaLSiaUNaEPo2kkQkzY0PiODRUhJC70aKqVVlQxKfKyVxIVJbx05hiC4xk3mmiV1yyo2GJVGkfA1BcuT9WUvWz4KS/zLx7GcASr3lx9/7Q7anHzIRHus7ctFiTGC5qNmsNszn1yzmS4aDtLifPp/hbcvu3gHje48YTnYZDAY06zXXL55jm21i7mZXGJMxnUxQ2YCubgiuTe3iGBG6oK1bms2G2XJB3bYc7ow4ml+zs7fLF7/2ZX783e9gvePe4R7b1ZLZ1RUffvgUi6AajLi4nKMyxb0HB6w+OuP8/JrDvR3GkxHLxRK0piwqHtzbx7aW1aam0Q3j8Yi2tnjrWY83XJ+fcnxywnJxwMXTpyzOnnL4xd/i7NOPiJtrnj/+PhfnLwjOJmG1ANs5mk2TrkuZtHib7ZrOdrdsqO/vvTeVm9SyvmVR/v8NpAwGQ8qspLURrSyX6/cQMbA7OmSzvubZ7JI8rzDBIvMB+zvHEK/x3ZB3f/h9qmrAYLxLlg0IwqMUDEdDLi9eMNnZQUdF27WUgyFa55Qqo6NFe4PwjhgcbbOlygdkuuj7zi1Z1/Klx3Neew/isxq/3aJNiaomFMMjhNoHtYPJJP7iQ5azp1THbxC1IWwvGVRTYr2gyAscFWayw3b1PvPLjzguxxRmSM6ULI5o2yUyj+TDCRHPpp5hzCjNFBoMYTRke/EM4ZcEFfG2JXhFFjXKGAJJGLbdzMmGuzzY+02auKTzAdW0KNnQ+RU6KIw0aGc42nnIbDrmk80F39D3eZAd8sJe8Thcs7I1b5b3sXbL4DLyvxsf0p5E/uWzM553DUVuGGcFrW1YrrZcXcx44603OT48YjyYsFpdE6Pg7OwU3zYIXzOoqgRCYnh5ofcL5U28duy/7kMSeaao+BtckkSNaUPZq0l6ICJJ9LZQAinT4ybBZ2I1lJTIkOySEUfXWHJZsLN/yNdf/xKPHj0gL4tkC0VgshzvfUqQpXcf+ZRRoW9aRz2NH71PmSxCEKxHVVkvhE12zZc5Fqnfq/u4eWvb9PykJDiLVinLpV4uqYocUyRg4FyaHZMXqU1RFBVaKcbjEVezHXbGlzw7fcL51QXCC7SMROkJyhOEIPYgJUkIJAL1cqHoqZQbR0g6nml3JXomRSnTZwWZn1b/6/5zpdO8H5mswEnjIlBSp7RSKZEh4CNsmy61gUSKto9IlusNJjPYEHny+BnbtuV6saa1jrrpaFuLlJLcKIz2DFvLZrNlvalptg3rtaOuu6RPkClhVRIZDys6a1Ex6Qvmyw2Z6sPypOBqsUVLxbAwFEbiu4YAdD6do0jsQVekczfJvGmEgVTytoVojEYRsDHgfB+iBkkbItL5l8l6Q3QOYxRSgiEglaTrXT+51gk86ETLB5Es30KKFB5IEo2GEBNIkQKJwsWIcAGBZFhVWLcml9DGQOMSK1lIQRMjLiYAp2X/N3wCOEalcyV7YLZtPMPcpIRdrdg6T2YkrYdyIPExo2lbUoRLvL2UPlt/1jImPvP9z61siBCD5+L0OZuzx4jNJSiB1iVOay4uX3Dx/JzZYtM/1xGzxZqri0vKouT44SOmJ/cx1RQpFS8++ZDr0+esVxtOXzyj3dbcu3efnZPdpPvxHX67puks2hikUNTOJ3dh06CQ5DrjxfWanaenTPf22dk/4OEXXuVHP/ghb33ZoJRBykimIo1NuibrPZuNpW0cVaFZLDu2my1lJtndmbBcrWkby2y2JI0CEWyaDp3VFHnOeLzH9dWKIs/ItOHVL7xCt93iV0tOdnMGw68z/+S72O0Vs/MXvWNM3W64lFY9/yVwLrBar5NWsD8nzqWsn5vKtCIGT9u2fcbV5z1xv+4gZaegHFQUdsh8cY4wnvPNu0yLV3l4/CUen73Hk6vHHI0PqVRGrg17kzFX8xX3X3mNp08/ZbK7x97hfRCaohwy3bnHk0/eYTo6JtDSdB3Bw3L1hMY1hNrhYsTVW6piBEoQoiM3ho21iGbDFz4+440fN/DJEuE7VEz2vnz6ACF3iF6ipIeLn3D66R+x++pX6fIC1WxRLrKplxQ6J6oRcnyEEEsuL99mb3eP2ED0OWFZ43f2sHJO0B7bbelclsJGZUCN98nHhzijcL5GkKObyEhG5v6aLB+wcTWVVtTtGutafLeiKAZUXcbO0T22s1OYXVOWU1bhFG9r8ioH2/LWwSPO/WMaE9g+r9nNR0z0gCu54FwveLAPm8tnTETGXzcDxPiIf99ccT6fs1isOLu+5nK5IjjL86sLfvNrX+WVV77AaLqDA2bzGb5rKYzhwdF94Obm1etGbt0k8WX8AtzaZr1/Gd0e+g8Z+t1b74YgJgagdyOnva5MbQrRJ7DKEDA6Df+rql1UkJzsHPHNr/4Ge/v7ZFmO0klbEWNybUil+mjyHCUlPjpEliVGpGtT1Hp2YzF+mashYiD6QHDJ5aFIbZDoXZq/En1a8LxN4WB4TJ7TNg2hsyiToTODMoqusZRZGg2QetJJtNt1FpPn3D+5Tz3dYTjexf3kB1xenRH7fjIiEtRNO6yP35LpcW7aanBDUH12j6tuhbCp3fMSnKibf3stilLpe1kvLFayBzo9MNRag0xJlgKRFrYYkBLqzlFVJSGSmBJjqeuaTdOxXNW0NjmxbkCqFRKlwIXAum5YLNYoIo21dNYhYlq8Q0ghZKKfe1K3LdvGkkuBzASb1qMkFCZjZ6AZVgVtW9PFNK8nij6Tp88faW06Lje3cCkSk6GUTFoQKfFS0kLPGqVrMtwC7p49jCT7uXVUmcY5R6Z131qO6N5NEfucoCAjwSVxqFSSLMsSGO6BvtJp0GJq8ViEgFGRUTcaI0lZKMHjPHQ+JZS2rU9un75NdSNwzrXEuUBu1G3WTS+DQZA0LJ33GCExMbC7WzJfbntb+0vW8qY+u4Z9fonlz9Zn6FYi1jkW12eE+hKIODT1dsXy6oLLF6c0XnBwfI/Jzi6np2ecz68YjMY8fPOL7O7uJ22ZrXn/7R9z9uF7bLYtXdtRmZyRziiEwG6WCJslvZkQeJeG2BbVkNV2jneRoqxw3qOtQ2vN+dWMxfUVWV6wf3DE/v5zzk5Pee3NLxKiYTodkXeep1dLVJYTgme9ajg53uPictanv2q2dZus59ZzcbVIeiefXIFtY1FSspxfc3B8j9OLNUalES1H946Znb7g+Y/+hEff/stcPM7ZLlbsjysyk4IXkX2CtFC3G61t0zBbzvr7XsoKuomJuCmjJT54mrbjs4MMP0/9WoOUvMwJIjIe7dM5x4uzD9jdU1xtPqbMBjzYe8AHT77PtRWMqjEiVwRvGQ9L7r16n+effsyzp08YDMdMdx8SYmC1mRFDoGlX6LygyDOKbMJqOePq6ozDwxOefvwB08MHCOtoN1u0jBTViCx0PLha8+bbLfHThtB2RL/E5HvIcrdPVvfEcohcPuXJR/+ObH+PbP8+iAHeO9r1lqKsMGpCGJ6Q53D+8XcYlIZoFcIrgt8iKEG0NGGLyiQqFpigWdWgyzHV8Wtk0WK7a3SmEK1jvVmyU+5Q5Iqlb3FCUFNT5lPwCiFbVJ6hwhpXX1A8/C2U/D7b9TWmHBIMbNSKp+dnDLeXPPrCF1gvZgStsFuLqQxHZo/rdsW6OSPbLggvcsarjP/DvT124ob/W/2CZ5enBBc4nk5AGi7nF/zrf/9v+d90DV/98lfIi4rdvUPqpkFGz7Ac3L4xbmeO3KAKlWalvOzmvAQlKdsjoEQfMiYlQfYalSD5DA8An9nF3y6kCKJ0CJHeeKWu+NaXv86rDx5SDce3kepJt5GADDGmHm0/V+fmeQkh0HlO8DHNGdIGbRJwCN6DlHhrCT6kVFzvUWVq9fhgkSmZLf0tGVGFIe9TLoVMNmkpfWoteUHoszFEDORViVIZ1nWI4AnWEWRHWeTo/X2++qWvc3V1yPXsisVmiZcBLxxBJk0CQiJVP+zu5jjzkqn6LL3bx9VCPwNHad23ddQt0FEy7cjTse5nBqnkmEKI3h0kWW8axoPi5o/0LMrLm54xmk2zQURF5z2dDTiXzpXvFyZJspOHKPE+cHW1TG4uAa7zaZCoTkmyldEMBsla6uyarhfABq3S1GcfyTPFqCqZDrNkUw9JvNrY1KeXpPZH24vqRXwJom+Br+i1RkH0/8bPUOE9AE+Hov/dtIx7nxJcc61AKgqjKISgtQ5cGhNAzwAKCYXRCJmmFstC4l0CMUqK3jWWHtMHT6Ylu+MhruvSjCIh+qGRPVDJFN7dJOlKlEhheFoKMi3IJKiblNteZE2MZCIibwK8nEfZlmGhaVuo/c2b+OfrPwVQfjHw8tOPG2Nk27ZkokXlkqvLNd4Luu2GixcvELrgtTdepxyMWc6vWM4ume7s8+prr7C/U4KwLGcbPn3n+1w9fUImIgejXczYYJSmrIYUkwE6N9S1RZca3BojobWOGEhjSkxO3WwYliWtsmmURHScn10yne6SV0Nefe01nj17xunpKa996U3e+0ELcYWJAYugs5aIQJuCL73xgD/50cepldlZdFbgvacsci6uFyllWSvq1iJlRMvAenHF3uE9rmYLXLulyjOkEpyfncM7P+Qb3/4rfP8//s+sZjNGVc62i0QhCTFQb1c09Ya261hsllxeXfXnPLUV27als/7mppfmoMcEplMmzeeXpfxag5Sd8R6L9oKd0UN2x4d8+Pxtth/XvPHaCeeL93kw+RoPdr/Iu5/8ACUCh/tHiHyIzsccHp3w9W99i8cfvc+nTz4hoKkGQ7Atu7sTdncPsTHy/NmHDAbp5iDJOTs9RwqDiJ52PaexLXmm2UTYXSx49ftXyE8aom/xviEf3yOLI6JrEdYhpKRgy+mnf4gYjhk8/E2iLInNFqKlmByQe0VQY/RowPrZf8TJDZko8a1DxBYTFMEYoojU2w2jwQC6HOUU5eQVygePIKxoLj/G01HkFd4MWZ9/irErqlBQIohlga8c8rVvUD7/COo1YnBIxNAt32FQ7GG9RFPCaMCqu+TJ9RmLiWAl1jzQAVVk+AL8qkMpT6ELKqdolzNUGGEXa7I6wywD//X0mCKL/F+qmqfCk1dD5ssFO4MhZ9eWP/rj7yOk4MH9R0x291hcXWE7R5H1Lp6YWhzc0IZKfKblwC14SfNHUg6Hdw4nRLppBoEIEkJyJQjRMwF9W0XeUJpCY6RK81liyveQWjMtDrh38oDheJq0ANstJkvTuSMCY8BZS7AOneVpYVVpUF+S0ki0SQmoKkthSN5agu0ILqXcCpE0HTd6jRADvuuSxdMkzYV0BiXSwK+iKGjrLcF78kGFVGm3QxSphZGXaJMRiSiVpUA7o+msw7cdm7phun9AORyiswz7vGFrW6Q2eCF6G2w/3bjfRdHDr2Tn7tN/4810ghtaS/JyLk4CHWnS80v7tVLqlnlKFlp6Bkb2QlqJtR4lBS4ERsMRMSYNRtc0aK0REro+rt/2wACSBkOKZA/XSlEaRdM0NF0SbroePWYyTePOZGRUZAjXJd1I6B06AUYq9dqLPKVLl5lkVChmm47GOratT8+XCCEghaDoo+MFqe1i+7aZvmnfiAREvXO48DJITYpkP0Yk8H0zY0dJgfOOelsjCkMMLrVttcKIBJCjBJNrohY4JxEqJRhXgxzV2+ZDr32RQtAYmezqVUle5Ait6JRgtamhc2meEon9sZ3D6ARYPRIvwSiBloIyN0mIi0CJNP3bITAizfoRIaY0XQQGyXRYcmmXDEqN9YG2+fl7+89qUv5L6mZUQbu65PnHP+DJR48RUuPbBNp3jh9y9PAViqJgs5pzefqEqiqSgLzdsjqb4X1kfr2gCpbxvfvkpsDoDC0yimqIzgtitMgioxrq3k3oiHHAcrlBeJCDnO12g84lrVPpnGiFlGlj06zXSCHZ2zukMBkff/Qh3neUoxHz6yuUhM16Q8gNwQfW65ZMSnbHA56fXaOlYLNaMRyP2J1UzBfLxFD297dNbTFKslmvGA4W7B0cYZsVjd+ws7dPGA4prKNSW15/4z7f+6NLojSYPBBD0jxt1ytsZ/E+BfjNZwu6rksTt5xndnXKbDHHujSC5OJ6wbOnp/24h9Drsz5f/VqDlN1ihyfLa+bNigGCLxy+wYcf/ZjTq0sO9o+4XH3K3vARj05e58OnP8L6yMnxQ7Rs0OTcv/cQAiwWc548fp+Dgz2MHrJer5jlZ2RZRWEMRZ5ztHeQkKrwRO/wRExRpB2gCIxsx2vvXjP8YI1pWrzbUmQ5Ug4QW4fqttTrNXp6SPP8fVAweeWbSFkRbbIHKhHJql2ClcjRDmLxCc3mgsIMoRVocpxfIWOBynYJTY0jkoUJtAKlCqrpkM3T79F2KzIJYiAppl/Eescm61g0Sw71LrvsELMDROUQ63OM2iPEJaa+IEaDDxnt+cdIp7BhQ9d46nUKY8paiSw1601N2WliGWlk6km3IbBVUHSekfBE3+LqGtYtfl3x16oD9keS/2f1KbPjPd4TnmcvXuCDJ/eKZ09fEFHcu/8AlRk2my3jqkjLnpT4ziVGSohbQau41W7cBEQlsOK9x3qRJhY7bl089HoOiYTb3W3a2WuVoaVCCkmhc/I8Q0TDl159jTdfe42d8Ti1XJwlWo8eJMo0+IBEgRSoXPUtoAR60GkGCsHf5qAIKXFdS7fdpkVIvYyKF4AyOi1EzlKvl2TDIWU5oOsahOl1ACql0A4HI+pNjdQGF1yfVhvI8pRNIJXGOott2wTg2g7nHE3TstlsyJRkOBjw8OQ+8+sLrE95MFFqPH2CrEqzeOjZqrTGx6Sz6PUz4iZoD4CkH7mdON2DFXX7r77VmNwEvilxE1QmaKxjVOXUneVgOmXTbDG2wxhJiIoueLqu7dFRQCsNXQfciPoiSiaLp1KpDdF2juBCmuYbksMr15Iu0DM5AesDVa5Z2w7n4q2mZVl7BnlyY43yHBks601LXbdJb6QEwfVuFy3xNvSgDFyMSH8jkOpD0oTE+xS5Tng57C9h70SLp3A7IEa0lLSdxeKoCcjckEmR/o5WqR3UtkilGZUFaJEcQEqRkebtqH5XHSJYazFCI6kwWt2+B4TS5FVBbR0qCmyX5lKpTKcRFCJlqrQEikxTZhobuZ2yLEhibC2TPiGGkLQ3StC4SGeTgDmTitY5BmXGdtvd3tNT8/AGsn1eiPKzW/SbR4uslzPe/+6/4f0fvo2PguloSLV/j8m4ImhDpjUiOi6fPaZZLlmuGnb3j9nM1zgVadYbjIBytEeucvK8TEJ3pTFZgTIZBIsXgijTe5Mix7UtZV6wWW+oc8m2ELRtiyeNd2hcpByWlJkkOMd2sUT4gNEZh3s7rM/P2TvY5dnjT9I9InhEkHz86QuUOOM3vvQF9neHbJuO69mCzXrFaFQyKDKGeYYNITGCHpCS2TqNfLg6f46h4/79+2wby9X5OdPJkOgjV6en3H/4Bb773R/RBRBKYbSkGg3Ic0OWDfFBJaC0XGC7LsU+OMeTD9/l9//g/83i4hmXsznf/ZMf8IMffJ92OSM6B7bhpez+F6tfa5AyNCO+sPcFPrz4EDN5wMnuQ9btNc9efMyg8pCtEOEJg2qXg51HPH7xjODh3r17GF8RgmBUGCaDB2hTMl9csbN/wmx+ydX1OdPxDsYIcqVo8Tw//RjbNpTDEQE41orpcArdhuO3H3P4ozX5JuDrTRJGVWPoWiIC19WoaoTcXlHXVwzvv0Ejx/htTYohjxRqgBdD3KAit0va+goklPkA13ikKRBSgBiTj0qu589AKrw3QIvTHZvTd+lMwJQTfBsZxwIXKpifc2Qq1kbx8ewUcsG4uEchStaPP6UZniQHy9kP0dWUMDggNmu6sIbCoF2HwmJcGh1fRIGdtYyGO9T2GXI6wc8WmEJRqiHGOeJYI3KF7Cy23sK2xdUdr4UjfkeM+HdPT5nef5WfDKZ8+tE7nC+XPDo+YlCVTMYTqsGI5XbJdr1JF3W46Ti8jAWPfULkbeCCuBHY+iRE9DdGY9e3iPq+vDIpLE0mS7FUfa6B1miZckO6GHjr5BVeObnP0dExg7Ki226QukBpjRmYdHPSAYlM/w3Q6wR6G0QSyvQ0PLc2ap8WtX4EulSJmg8+DdIL3tLVHVIKMmMYFAOEswjXoGQCB223oWk6nPWAILYtUmW3zIvJknC1azt819HUdZqzoRUQ0BKGgzINdIxQDYbs7OyxtXVyh8gkFk2GHUkU8hagpEj8Pga/BwqIm+8lRkQo9ZKdkvo2bfcmpO7G1SP6llkvZACRgv3UzpDae1xwvUtK0HRdz+ZEgve3aZcvwabAhwRklVR9dkhKhqWft6NFP+dEpMGIN0MdjZYoJTCxYdsld8qwMPiYdEOd9eyNK4wgxZE3Dik1hZEQkw3Y+UAX06kvFElsGwQxerQSOJt0IoKYcm7645ms7f3P8zJULUMkxkJBI/qAPR9w1hGNQGd5Eis6i4rJGbSpE4VfZgZrO6Jrsd6x9T4xdGmYSmJ1tUAbhdYqjSzQSfCqjUIElTJ7+rkwMqTj5aUgJ7E44/GQECPrbUPbpuGRIvo+kTR5qUMEEULSZzlHWRZMxiUX12u6zv4U//+fYlB+EcHsT/1+f2w7a3n2znd4/OM/xjaW4ze+zN7umKurGfPVir39A4yEs8cf4+oG1zgmoym7k13K6KjnK0bVgOFojMnTzK2yGmNMgexn1oBAxJRpFGRK2kVKfF4TuoJcKepMY4SkywrarmNQFHRElpsNdBGNxNkWbwuInqoscN6Cc1RlxWK+ItcKoxUvZmuCc/zWV9/g+mrFZFSilGFbb2nrlkFRMBnmLDYNPkrqLmmvBJLLxZZDUXF1cQldzd7hEbnJWc7XEDuGecbrb34Jmf8BUSryUvPg4SN+65t/idZueeedH+G7wPd/8B3OXzzBtW2vmerwyyV/8C/+B/4//+J/vI1SiD6Qi4gVkWjkn38Sf6Z+rUHKcrviYG+ClrC1KwovmGQDzsnoNg3DkeZ8+Yxx6aiGU3Z9xyenn9DZltHOHsNqSJQRjwWVMdndZ7m6Tm4L6RkOJpy++JRm22JjZFXPWG8WTLGU1ZCm3hCc5f5sySs/nJOdrontFhUkpthJb3Lp2D57B4uiOniddv4cU01RO68TlmtCs0XkJXp8gPMCTIEJlvr0Q+JoRFyW4DVRgA8NUQ4pDk5YXr5LJ5fsT6f4TUPtF2xcixkck5UCoSZEu8L5EpWVeHdJpiV7+gH5zgHX7TXSXaMZ4bqOxem7lMMsgSWZoyqB7TqU9sTWQlOzYzKuY40WApzDz2v0/Ud0j99FZpZyUKFEzmhQ0TULnFeIwYTOXxCrksx5RN3Qzs6YhDF/o55wkNUYITj8ylf45OlTykxzsn/Acj7j8N4DttHz/e/+URIP3rgkSLt40UeE31z0QibQEkgpmPjk3EnyQ3Ubxx5iRJvUolEkVuU2LVUplJb9OIOcPB9x/+gexXBIdBalDcVoQD/0BpOVSVoaQWqTQGTwvYYDiLHPQ0mEd4guhR0pnfQKrURneWIalMQ71cdhbxGyd8PkY7RShK4lUxKhBdI6XNsRuy22dsQ+Hp/YoFUOUqQgwLZlu95isrTzNlqTVxWZyxFINm1NBLy1kOfs7R9zMb9Ms4+UIUqddoV9VH4IKTTP9+F5N+xARPSMVpqTBPL2NSmdZnuY3qJttLkFKlKlnI0UHHfzP7DO4XxMg9iIFDqdv2SL7bidM5T+Ei542q4DQi+qhiJLYk7ft2Bu3DtKJqZCSY2LqS1U5hplMgoZyUXAIwmho8zT5GvvA+NhTq4V1joWdUeWG9ousTAyijQio3PQMypGCVxMibREgZZgfXqFWim6fnCbEok9ETcBWT0rqMTNTJ4koo0xCcVlf6xt61BSpkGVLrmFitwgZQIdUiYNgASsdzSdJcY0F4leS2RMCp9UGrRPzh0tJVnPrliXGBgRfGJsQtL5ZCYNNCzyJAiv6za1Xvt2YAgpoZeMNIPIB4wRGKUJXccgN2zLjNW2STOefqZ+EUDy87/zs9xLcvtdPv4JP/n3/5r1fM3rX/sG2mRcvDhlMByxf3SIa2qunj9ju9owP79gPByQ52OMs0Tv2JnsMh5PqEbjpCvJC4rBCG1ytM5SG81ZQkzDQX1wRAVSK6LRBK3RQqKQZKagqeskhBfpvbLZVsyuF2jvqOsNajxmu6qZ7k4QyjBfrjg4OGQ1W7IxTZpQbTRtDORZYt+2m5qiqtjbu0/X1LRdy6AwLFfrxMI5R2bS/d37yIurFeyPMOua4F8w3t3BRcV8XvPBD3/AK299DSkk48mE1994g29/+6/z8Ucf8u/+/b9j/a/+FYXJWC4XeB/IjE4iaUEKIA0BEETVDxdVqS2cmYwtn58h+7UGKe9/+A77O99kf3rMJxdvE8ojcp2zMzzkevacvFSYIufF8hMOhg8oB1PKzYLz9QVRytQnky1GZGRNx/70kI6O4+NDqmzE7u4xnU95I21bU2YDVBAMTMGwqBgUBWVd84UfnjL4ZIPqOkSMydYWI9F3NI9/TF4OyPa/RFxvcb5leO/rKeYekHmVBpoZhVMFRgrqT38EBspqH2uf4FVATcZ4p8iHYxaXHxHFhuneCbFTiEpDOQEFXQuFKNBZgdtsEVToXFLLZdodrzx7g/tkw5woOxarJ2SmopCaYueEwWiMoGW7Oce3Gwo9pFCCxtYEqdkf77Dyluv1BsMGuZwzqb7AZfMBGMVECLI4RI4GyEyizC4bfcpo8IA4W6N2HCo6GrslriJfvzBMy4p/vT1nFjR+W3N8dMLYR1Z1ze7+IcfH924Xo3CTdnXTtqFv/dzknvTupiBlmrsT+zC0EPtdbeoVC69AuESx98ltUkqqPGdYVBztHfLGo7fY29unqKoUXqQkWTZIAlmh0CZD6pSuepMkm/7+TRuJxJyQABT9axB9YJwQEjHqFR4xokyG1AbbgM5Sy0eZpAPxziFESnjMABU8so9wN0NNEq5Jutbf6mx8Z3FN2ye0eggpv0UpTZ6Xt5Za7zx1U6OcoxqOOT64x9n5kwRKkkwSKQ1AP8soIkXA4xEh4Po5R6JvtYX+BcsbsazSaG3QfV5KmkysXoIU8VJblGL3Exjd1A37kyHOdnhEb1VO7hvfub7llAY99gN/UQi8gMIoJlVOY10KXdPJuqxIrpqok9tHSkmuNblRuM4xnA5o1hbrAlVuKI2ibjqUkBRaIwnUnWU0KLDW4zqL8D4xYyHcHgejBFGAioIYHEam0UixzyCJvbVaCIGKKQ/lptFxa4uXgkz3osM+z0SLlFMSeg1Q21i0fDnwzWhFpjWdc2zqGiOgKjJm24ZgXUouDp4qzwkIWufx25o80xRaYXRGGKaJ0NEHBlWBsw6lRZot5ENvTycBR+8RMQmL2y69nzKV3F2NCGgtGFcZ1oO3Lolsi4o2wMGeZlAVrDfnP8WA/FmtgF9kaXsJbhIYdM2Gj/6XP2C1WPP1b/4mJi+4up5x7+Q+xmh8veHi+ac8e/wxKgaM91QhMKoKlFBU1YCdnX2q4ZAiL1BCYPKCvBygtEEqDf08LB889Im6MabBlQhQJqeUCpMZvLU0gxLbtUAay5FlBbkpsLZl2XXgIjrPMdUE7VrcdoMSiv2dXTabDY21GCnIBxWz2RItBI3zuM5R7BZoQsoWiikA0AfITZpL19rAeFBQNw2nV0skI/Iip643FNWIbe2YvZjxvX//b3DeMp4MObu44P/+3/1fuby8TEnqStGJJrVLM5MciBH68U39sErxUghORMqIQSCobtvav2j9WoOUy+2Cpq6ZFhOGVcEsPOfN8V+iyu7xv2zPuZrPuX/4iEExZrG4ZKh2GI93sV3L/uQhdT1ndr3g5P5bPHz0m2xWT9hsZ7z66OsU5Yjl6gojBcPBmEtfc7x7hBSRoigQxhBsx+GzSw7f22BqmyhpXSDVDjF0rJ7/hGI4RY8eISjYzN6j3N8jjO5DN8e6NZ13ZJMTsApdVfgXb9Nuzph+5a8RVytit8UUQ2CM3D8iLj+BrmX34Ws4m2HrLU5bkBWjvVfoVp/gjYbqAH25JKsGCN+wFpaQC/K1p3MWPSmxzQaCgsxjEYiLp2j5KuPJITJziFGGqgOxrelspAuW/eqYaqC4XPyAjWmJq0uUKDF6QCRQtwukz1BqhHYBdfQQVh/i2pp8d4/m+gnKC5QRrNZrurOGeycH/B/LV/nKfuS7ow1vf+9/ZjDdJRtPuWo2lHnWg5K0oMUbh1svMExAJab2gk6agDRjR4BMN3epJFJLdGYwWZYyPG4Xyf6G7x1XqxW70xO+8trXOD7YJ8t7PYySdHVHsF1aDKVCFmm3yo324ubCvPmPmG65Qghin6Nyk8wIAqEVuigIzhKtI/qAVApTlChj0ptZ9i2MJg2a9FGnm1+EXNxMJpVkeZZaPbnABcl2u0Urg8qSJkWKQCxA5QVSmqQ1kIqyGlFvNygfKKo86YFOXiU4x9X8LNmiQ0jan9uJ0317Inqs9KRsmT5MLwZESLtaeQtQNNoYsiwl8Bp1o01J1mDZW8lD9LeaFikFzvvUAnMJUKhIskj3wk/XO1qcT7k4fSQNSghGRZa0FAKqTPe7PEW0DoJLsfAxXU8hhr7dVTAsM2azFUZJxoM8DS30gaJI1l8hIoMqZSKtFjW5BK0MziYgYV1IOS4945cpkYZb0r+w0Gujep2JjwEtex0NkBp3KTNGS4Hpg92UligZiTcJsjHllEQi222D7SxZbmh8SkW2bUcIgcl4QJFr2KZBhFKIZAcWoLMkXr6aL2mtZW8yTNOhgf2dKV3XsVlvsDFC9IQg+pbkjZVasa0bMpMSRa3zdD65ipR0ZE6QKSikoBpUhMxQGIXONTJI6naD64PA/nMEsp8FNH8qsImRzcUL2tWKV195RMr5iezuTEHCdrOgXs+4On3K8uKKaTVgdzBiOt4nG06QwbGzf8RwPKXIczJlUCK1dZXJe+YrbYRk7zpM5z4JklPGj+/ZXIFUOVIaZJanieK2S2y1d5g8o91sWc9mYFuyosJ7j1IZEmhXc3Z2hmy3I16cX+OcI1eKi8sF23WNyQzrzZZxs0XJNKG66WwahuoDgzyj6RyN82gRmQxKatsxW7cUuaGqCrSEpm0gWN7/4x9gzZAXF0uazqG0ITOKPEshlYlADdykG8uePfM+4LzvNVWpQrhJ7Uv5Op+3fq1BysMHj7jcXnOSH/Fg9y1O149Z2XOUGDIdHnN9dU5desrRgMv2glk342B8gigUH1y8x9TkBKl4evkEM9pjs7qgXtd88uxTsqxks7kmV5q6rcF7vIqczS/Yk/sobykv55x8/xy1iQiTIV1EypJ6fclmMyOrdhDD+6CGtFePibIme/TbdEFiXYOUgun0BCVLQjZENzO280+YvPoqaveE7uoUPdRQTZFOInRL3S0oDx7i6pyQ72HjjwnOo/MWmY2ojl9n8fQ/Isf72LzA5gWZ92hhsNsNmRIURtLWgnw4ZtbOccKST47Iz1fotkYM9skyQ5h/hFQWgcQqUCrjYn7B9OiYe6MdWu9x2iG6wKDcY2uvMPsHNHgGAogB2a4Za8PGbRiEHWyr2KoVbnmFdkWK/W8CedvyFZdzMNznX9af8odPf0A2GrN3cMhiNk8nPPZaiL6HHXk5+0OIl/HqWsskChDyVmuSmYwsy8mznDzPUTpH63SjTa0JTWsb2rVH3DfsjkaoPtskeo9rLVJqTJ4RfRKnyl4UmoJWBMTeehdF74y42df1LY2+NZKe743YV6Rp2VL1rqWI1BqpdfrtnmVQQqN8QEdHDDaBSxUhSzt2SUQpgxMKQ0psJQpMnpFXFSrT/Qyg9LjBp6Fgbd1g22RtXq9qykGFNBn3H75B6yzbZoMLHkEabCek7G3CAh8lMd64pTxB9OJJGW9Biu4dPEYbMm0wJkPrGzdPyqgR/eodosDhQaT4+NTnT22+Ku9BhxJorQnOpbwQKdEipbPGkEL7835xN1rdXDSpJ289WkLrk2uHmDQqoWfBJuMhUShsVFRZam2st10SOoeIFhGpJS4E5qsaBRSZpo/qwwuJDq7X+IQ+hROMFHhEL5iFTCXnjw+BXAkIMg3/E306bQ/CtEzHQd440UTswW7sd6NJIOyIcBOiJdMCmak0zqCxFmUGqP6YKikpiyyJekmtyVxLNtuaC+c42JsmCj/LkZlibjvy3GBbT+ccnQ0pRDAGVnVLJgVlZpITjtRaa6xLIV4xoJVhYwOiS1qH3EiEUWTOMx7kXC83uPCz7Z5fDLL8LEARn/2sF3hfvHiKKUtam5KZ5xeXCCkoCoNrVtTLBdvFIoliVcZ0vMPk4IQ8S6aI8e4hVVWloXnc3C9Er5FK2jJiyi4iBEQMfe5Saj6pWxB8MwRAAIkNVEYgpEJ7m/RA3rO3u0NtG/LBAFevU1ijVMSuBa05Otzn4npFCA2buqWuO5bblolI7pv59YxqOCJIQ1Vk1I0lMwLvImWW2HtrO47294irxIrO1w1ZtsVkGaNhznrdINY12U7JaFhhrMdkFU3X3R5b71IyefBpw+T7b9jOpkGePauqlMJog/Pu5k74C53bz9avNUi5v/8K8+4jatsyLg4IY8eT+XcRy0N2hodYF5htl8iq4ni6w9OzSz65+pCBHrOZr1irAmNymtDR1lsW1wuOjw+QUrFGUuQDatuyXG/IB4a1XRFU6iWKesurTy7ZvehV8T4ivYHNGtyKvBwiRIUQOe3yGXXzlMlbv0nQA9xmhSOjOJyQFQOgRPlI++mPYViij15HSkNoryirPcI6p6ky8qsnlKOMrnbEDqLocCKQDacoMybXgkCB8o4yc+idA8JgSLe9pG066DxaFagoqGSBK4eE/AJRGLKswL2YoUJKpA16hB8+YLX8AXnvormMLUNd0rAhGImUAZtr8I4qjJAsMFXGZnlBIxTFeIfm+gmX+ZpZd0rejNClJmwjyIqoIghHu9ngVWSoR+RXBf91cR9VBj6t1zx/8oTFcp2AiRTEcKNBEbeaj9Tq4da6anpBJlIijSTPMvKsJMsL8qIgz/JkH9Q6zYAROk2spuPo+D7/1W//JuWwRIs0h6Pb1kgpMXmZBLFaoUzWzw+SfXhV7Fs7/XSbmGyIN88xMSqf2UXcajn6TrpURBEQ3qVfkqp/mT0oyBKjoYIGJyGopIFRDcoItDYQNUEUdJ0jix4lFCYv0HmOUOqWxbEuDUCjqVHSIFXXaxXSQiMFDAYjvvSFL7Lutjw9O2fbpYnLiNRyu+n/q5hAmgiSINNgQh96kNKLZPUNSDGGPDNobW7nyKTjkto2IXpSUm1aaJOt2KU5MSpFsgfnMFISswzZdrQ2JbEqlxwlISZQkGlFnmmkiLguQIhYXJr0LFKE+01SjhZpuvneuKDZpoyQYalZbToICVSkxScg0LStRwtFVWlciATvUD0unpQZTdMQZRIIipjcUSJCEBKlE2BVPnAzCanMND7wMgZfpDh70/f6JcmCHJBpZx4TGEgC4GTJR6Ypy9EnNqoLMTFWQtHY1IYxWvdjB0gpqErht1tU8FSZorWWy6trssxQ5BnrbUOe6TRvqIPOBZo+bFAAeYBskNHHs6SWmY+3TFjnPESLUjltl2b5+OgY6AyjNKOBZH9nzJPT+U8xIf85rMqfVl3bsF1eEpXCdp52ds3i6pJyUJFnI+rVmqtnF7SLLcNiyO54j73Dh0x2Dvqk5oJyuo/KUuCgDOk9K0WaTB5dAvc3cX30C3MSqMZeo5NekaDPzOmzdF5+9YY5k6gsZzjdxc4uMVqhQqSpa1QEnMN1LTYGjErDSpvOpbZcFHSdYzSquF5viUJSd55casrCkEWw244iz8lNxrLesm1aBmXJcrvF+8D1Yo02knvH+zStpbWW3HZU5Q4oh1ImhQOKlMFknadr2wQ+ep2TFEkY7ft7WAgBo1KUg42RGMN/1tn9tQYpyhgqMeR0ec5ruiTXOZNyn7P5CmOGHO4f8PziMe3W82j/NeRJzuXlFarN2ZuOObu4YLOe841v/DbSGGYXl1xdXHF89Arj6R7LxRwvFdqUrFdX4APTfMowH1EuTnntwzX5qkN7hfY51Fu6zhKQ5GUBOqc+e5ummTN564vE4T287YgSit19sv3jZMO8uGT90R9T54bxwRfwYoRcniOkpfZjwvaKYqKxXZN6lxfPqcaPcLYmzyqy4T4yq8AoaNboTCI7h8wmlAPN8vQxYbGha2vCTk7TWMpo8GuXbGFBoq1DtgFcBsoh5AYvVyhZsKxPcTLjBVd8NewzNPfYaE+drRCZIguK0msyeYgPFW2R82L7MfdsRiZGHOj7hPaMrXvO3ug1qgxsDIBDhJpyfB/Vrek6hTaPeGu35N7Jb/Fs8yF/uDrjD977MUCawwO3oCCR4v2bvF/0blgTpRVCKXSmyLOCzJRkRUGeF+RZgTG6Hyeu0+NIz3g04n/7lb/K3s5Or6uIfVJnuqnnRY7qE1CTU6encm8i+unBSgRE6PNK4mfcC5GbRM5+q9dT1iLtwuBWoJoYFHn7qKK3thLTghS9hJhhTAXRQqYQKKTIMcpRQhIBmwxpNKjEXMQQ0wTkXuj7/yXvT3os3dK8XvC3urfbjTVubt4cP110GZmRCcmFulSjUt1BXqFEQghGKeUIkPgAzJAAiRESYoDgE8CAcQ6RUHVMUhRF3XuTJLuIjNN679bs7u1WV4NnbTM/kQFklBhUiPfIj5vvbbZtN++71vP8n3+TMMzzRCISfADlsdZRNRUpdrx9+1KKSa2JyHgt36FXCpUVOpcNOYGEykFGOClWGyojPAnnnOT4GHuPQiGoUi5jK5XFzE1ymAQdaJqKypiSFq2Yg6epa4bDQMiBEKVAbZ2E4LXO0FWOHBIxRMJ7I5g5Cj8lp0xSojyo6orTVQtJMfiIVpmh5PmI8giclcVWF2Srdo5F47jZD1ijhbeiNabwYQQIks91DJngSxaTNoQYhFirRTGTc5DIg6SYlSAunRHuCooiHdaEOZRMI/DCYr4j0oaQRYWkRZYey/05Z4JPsukUZ9rZB6YQsa6iMpopi1FeZRJ+mhl9ZO96jDGiQPHhrhhPsaQ1I6O1yhkproy6Q59yPsq+DTElZi/usq6qud5P4sRcSWTE2Xop49z3juPlcexFfvI4jnn+5OAgv/dVpr96Thqv+fLzz1HG4ayc693qlDkYrjc9b16+YFV1PDh9yIPHH/Lg0RPhoI0Ti4tHqG6BVoJskSS7i6xIyUtVmlRZIwopKr/33HK8u94lGfquarm77pUyQlZKGaUdpoa2bgjTKHYFwaNypqoaplnS2le1pTIwKy3XLFJAnpQR6GZ3IGKEm1XX+JSo54Cxlhgmmrqin2bWpuF02ZFioNKZ221P1+7FfsoY0jDSNDBbuW59kLTuMQameZI8Ma2x1lEbx+glp8hqOSdq52iquiRsK1EH/v9gOftzXaS8Przl0WrNrr/l1fVXnKxXrOsLxgee7fUr1uoRnV2xPxxwTxc045JHDyput1ucbfjk9NvcvLthc3vLB0+e8b/78/9Hvvrqc07PH6GVIaaAqZaoeWJRdxijOVud4mPk2e3E6ZuECwoVQYVEmEbSPKFWZ6AqDm8/4+bmax5++5cxZ98ihUSuGlToRVroVuTDjvT895hiorv8Jew0YKqWcfsVXkX6/XMSE6Z3VDbSTwGfJ0K3JGwOkGdU1VEvTmD/hnF8g3U1aTcS3Ql+OLA/vMUbTx8DXg+4XBNHMNcH2rUQQPOcSU4Tz5eYbsN09TXj9i1Dv+MF13w/PuM7cYlpIvQK6zqa2GOUYs4zNiRUA2F4zX5+QwoeFRWJmrpqOGkv6W9u2I3X1KePMfuvqc05sTaodcP08i3KZ8ztQFjW+M2eB6tH/B+6MzY/esH/g59cmI5MS9kopQO3OFdTNQ3WybzdVRZnG6q6FlZ+IyQ1V0mHr7UpgYBwcfaUx4+eoKuK4TCitRUb9K4VL4SqRt8b1cqmCiglvhdHO3RUQQdSKovUMThICXm5rGT3bgFZCh5k4T4ahYv9v74vdPK9g0TGcvT/NFUDVgqaLImAYoWOEiWRNhyf+PsOBcYY2rbG2Aturq85HPZUSkZfc0xo15AwbIYtICMRlCnIlTk+88ILkg6xUIfui5SColgrqh57dKHV5sh9vnsPIgGSdOFGa6zR+BBw0Za3NdG0S8LWo1PEKFnofUh3XihWicMqSCevjGXOXjJuNPioCWUu7oqSq1vUtE3Nvp/Y9AOn6w4fElMQgnDtJN3cGEfKxcCssrjK0rW18HFiprIW7yPZRNpK1EvBB+Y0l/GVRhuDn2coiI+7Q7eky1SFR5NTgpQIFC5Qls+vqsSWXgcpQIQQnguvQ4rlSt/RtchZVDl1iV5oawk2nMaZlGZCihJsmGUz1VphnCZGT6WFP6OVKEKORbhW8vmElBnmgJ8irXOE2dNVhpAyPkSsVkxJ+ESjj9TjSFaal9dbzk+WRGZJk//PNNf3JNg/eftPHnc0sHLn4faa57/3H3j3+i2KTFM7qrrl3ZtrVhi2mx1ff/4VYcwsT1Y8OL/kZHVC4ypsDLTnD7GrE0H7Sso0OYIR51ylNMcTXpUIBnEUzqgU0cchplR28tyiWAcoY8jxOALSaOWISrgtKYGrW8bNNck6dBYDtbapuH1zK6icgnVbMYaZw+RpnWOeZ1RKOK3vEql348TDdYtOmWVTMyVZmxaVox8HUk7UztEtFszTgDJwu9nTNrUU2wrCuMfoFa1z6K4hec92tyPnxMlyhVKKGCOzn4uCq5JRWEoYrcgkZi+2AUYbaXR+xuPnukjZbF7y7Pw7PFie8vnbz0icsj4547J7AuEl2+stJ4uH9Lue3/3h/5uHZw9ZLdfoCj77/CuuX2749Nm32Oy2LNcbLp98zJNnnzAfNpytH6Mz6DDRtI45Kbb9DusHzKHn7Me3qF7khjZa9KEnDDdE12JS5nD1Jbf9Nd1Hv4w5+xgTIVlHyOIs67JBj5H47i377TX6kz9D2g/kriEM1wy3X7J9/gfobEl2LdWoqRm8xStFWpwSbg9En7APLtAhM7/7A6IfaRZr5tRCrZhuXrGfdoQ4kl1kM7ziNJ8TvCa5wPVwzdqc06zX+NVI7WqmMbKZ3vBHN3/It+3HnIQW161Y5SV+fwXjDcmMYDPb6zcY3bEb94xhSzYT0cHCLcihR6mGPJ/QVk85mFv6wwsWF0+pz76DP1yhU0DdzLT1U0I90dgB/+6a+dU7DouWD/5Pv8afe3SLUv83UXYUkhrHYNlCptXaYnVFZVoq21LVMspxlZPCpaqom1oIcFWNc64EZ8mFpEis6gVdvSCEKHJkJQZfR46ILnwAUZ9kjknJR2tOVW4/GowpVOGgCLkMre/SlI8oCvk+vVmUQgU718evxWODfDTLync7kNZO5nBociyFTYh36I8qpGBVCqN7d10ZHWUiVV3hKgc5YZ1hnGZBqbRmuVzwweVD3t5+RVABkgMtb7zimG8k12KWlh+yBOuBmOMdpcfV+0WKlgRorY6cInlPdZLnKe+7Kpk+WhQ7xcFymgZy8uTkxL01HREYGTOFUgyGlJhnf+dam5JI1q1R+JRpKkFyurambRv8NDKEzOEw4HTDg7MzXLVnuzmIi6pUXhhrJR3ZmjvC6KEfOD9ZAXAYZITWNhW2qgRFyAqrZqasiEox5XsfFK2gtjDNougxRpXQvuMiLxLl1hrmBLlY1dcVjFO4U32FKIZtVivqcj7GwvmxCtq6RhsjsHwpjGIIpCxGfalI5LWWcSkxM8URjGH0iTkGrFG0zmCTOOH6nPFeIgpOFzWqtmzLhoxR9LNk08xBTPL60bNsaxknTB5l5fz9yUJE8X4B/xP3/mdufv9np+HAqz/4f7Hf79jtR04vHuPqmt3NlYzJXMuLr79iux14YFsenj3iZHXGen1Gs1xTtR22W6GdQ4lWvVynoZzpCmWsIHFGeCgqBHL25TkUxDOr+xFwyWQSBVy4Q04V+d5ksvylj3yhLC6uOsP+sMNpuNluiFgWtWM1efp55uG64d0EOSsWbcu73YGYM/0kqrdp9NR1Rc6e9WpJnD1zrAgxEKKlaWpxTR96IQFby83tlvNFjakG7GJdimfDnALONjw668g5cbPZchh7cs5UriaHeBciGmJgmmY5N43F2oqY5p/+wf0Xjp/rImW7f0lO3+JsccHN7gVf377mO87Src/46MGHvGLD9qanrRe8ef4VtV3iWkOtHM8eXbDbHfjs3ZcMNztiiljb8vjpt3jz8gswS3ofWNQ1Bz+K5tsoDsOWh6+vWX12RfYRnWv06NlvX+KNwS7OGfd7DsGzePZL6KoTJ1BTEccdWY8s2zVmTnB7S7h+wXaOrIMiT3vm3GMCzK+/IOrE6fIB4yFjvSfrmlB079pYslJijnVyQbp5zuHwhuWDJ0wHg2oybrjh5u1nxDgSfGLZrZmmiVt1wzCOLKo167PvoOJIuz7BfbQkh4hTp6htjRnBdhWPq49RriOlmdfxlsfZEn0kB8OUZ0z7gBnLze4lJsGHT3+ADR516HHdCrKl0o62qpn1Hr//Y+rV94imErWGPxCjJ+uKEBLT7VvW3ZImzmz+r/9PYhayZ87pjil/J2NTgD7ayJdCxdbUTrJxnLM4V0mR4qpCnJVxkNamPK4iJ1gtTjBa5MrOaYzTKCRXBiAXJ1YFxfW2bM75SD0R1ERlhFBXjoxwIqRgKVBMljVMKVEOYdQdjH0kRR5h7zsEpMD/lJ9DlRToUvgIQS8VJOcIUxT8OcnvFoWRQeuA90H8SpShalpUP4CO9MOMazxdpyT7SEd8klygnDLZ5GI7b+5GX/KrShGmBOq37xFmrS1Bgsbe5fcIt1k+x5wTaFmQjBITNmfkfWxqJx3ZOOKsE2Qd8cgJWWBk4fEkQpYIixwiWVumeSZnRciJGKCrtST0auhqh9IaP3kmrdgdenKK3G4T52vD+cmKdVuz3/dCZDUIYddVnHQdRmcgkVKirmr2/YG6knTxqq4IOWNspqorQUYihAyV1cxzxGSwWs4bpxVRaZy1pDkQkbFRjEkQF2NolxVDP6NyLCoNcX9NWaTiDkWj1b3nirG0dUfbdOQ0oo1muWhBGRm/dB39OHEYZyFeWzHV00oyhRIyMozzTJgjTVNhtYeQiT6hi8JoN8642ooPjTVYpDBTRlQg1hiGOXIYPWeLlhElyIpxCM3pmxGDf5pe+6d/jzzv21efk3LgsN/StC3rh4+5evUCHxTTlDiMM1dvXnHS1Hx0+YiT0zPOHj+ju3xMtVyKlYAx5ZrhzmBPaRl5YXIJWswkZST+ws4kIiqm0jiIVksVlFHI2ZIsfjcWynL+6xzvRqSijkm4SsIrwzyz6Dr22xtqY8AHEgmlMl1t6IcJtGK1aMUHRxsmL+aH0zSz3Q+cdE05xzTOOaacOatr5uDlPE3QtS3DOLPdHzC2wlpNP85U8Zrl8gHDODDHhDKWRddiUWz3O3wUnpc1DqMd2Wicrcg50U9SsFdVLS7eWs7vn/X4uS5SFPDl2x/x6cX3uDx5xtvd7/L25opP2xWm6nj2tOIPhuesHj0lRMm+WLqOh6dPiLnn0aMPmFLN7/6H/8ih3/Ojz3/IlAIxZOLmFavVijFM7A83rOolT08vUTny7c82nPSWSlvMpNnfvmTSifbyW/h+op+2VA8u0STq7gS9fCAW6NFTuw41HACNChumzVt8MoRXX2PziDp9itrvUN5TUeFncRu1asJmhx1uWZ4u0FajfMCisJue4dWPUDYzq4bh3Zbu2Tnx5iXztEVpSUhtQoOuO17sviToSGdbFsunpHdb0tue9vyCcPMSGxOtaliZhsN8yyknjPuBKe+Z08AhHBgt1K4lJsPy2VOq25HQf8Hq7ILlyXcYp6/Z7V6izQPUuMUmTWNPSU1iN1yT1VekUBEOAaVnUj7Q1I84fPEZuYIFDWfnn9A3gc/2r4Ej/KvJd14dhQuhpfswRhZJUzZD55zwICqJJa/ujMTkfgrSoRScrB7wyZMPZNcoG3rwAaM0CQvRo4xF23Lm5Qy6jHko9QfFGr5wASReq9jkHjsrkhBB1bHjKkUMAhejjoWMdGj37Lv7YddxtK2KidpdW3m36b9vPP0euqMKgpMzxFT4FVLMpBCpnCOkKHHw/YHz05W4uRY1x50yieOmksumpu8KrOMTlJgBUS1JEJ0UJ/d5PlKkHJ+6VhqVyuKvlHTeU2DdOlE6Rc8YMlYJwkAMzFNkitBU96GTCiH3TkUlM86BylmGOZBJ1M5iELdar2HhHCkEtHIYrRmLkmuz3bFYdFycLjhdNCQ/Q1Y45whJRky6JP86a0kxUFtLRpAIkepmkg/knOS8U8LFmgqvxxolCJISuEMX0rBXCm0Ui6aWDKoQcVoI4N4HnFK4bMVYzUi4op+DoIzlfdWFc1U1FW3bMg4zIUQSikVbobKoqOYoeWIqiURZGbE79z6iS8ZTSglXCek5ACFLoZLITD5ixoCzIw/WC7qmph8n5iTFa0hJfGkyTHMUonFWzCFjY6ZxQqJ+b/D5Hlry0wkpP61AyYDKmbHfMo89t6/fQDZcfPRdttevmENmux9YnJ8zDDsWBp49fcbDhx9y8exTFhePcd0SrW2xFSijVl0I7xGylnP97prNijzPZD+TgxcX3yDZUEJgLuiItmirSfMgtykZbqJMmQKrsl4kiEFQV2XEJsE5+sOepm6Z5oll27Ede/wwiJ9kjNzc7Dg/XRGCpISrnEVhkzLbw8SDkyV+mlm1LWMSfl3KkUVXM44Tu+SpG0vbVWz7gXc3OxZNxRwDw+gxhz2zXmCqmqpy9CGwH0dyVjRVS0piFphyxlhTGhpZLqqmlmstFHWPOD3+TIf+r3/L//8etXN89fJz3u6uqeyKTy4/4vVwzdfvvsL6hqU+4898+osEe2D5bMF2OvDjL19wu98z9TO1r7ms1/zFP/8/8ujRY4x2vPj6a/phJx1TDOicOanXxBQJObGqWx6/U9gZcpzxww3aGZrTS/zUsx9vMKsz7PKc5oNfImtLUoqUZmgXZAJqLsmnw45+d4Peb7m9egsqoC6f4DcvwXrqk1PG6xGdFY6ETwaTJlwKKBWwSYFq4c1r+nefYR6cMQULKaDVxLB7TcoR5oTLiso2VKojZk+qArppSf1MGBSGSEgHcroi40l1R7KaK33FbXrLPm6IydNYzY3f8qXeMqaZV8Mbbm//EPa3rNaf0p59ghuusIcD16pnn3eY3R6VRtL5M5pHv8isE1f7FwzTLVm1JGXpw8BhGMVOvDpBxUQ4bMnDyDhcFTRA3Y1JjoqeY+aILh4Qx83RGos1Ml5wxblVF+v0AoHcjWiUSTw8fcSq6zh6mM7jRIxB0AmQby4btZgTqXsiXEoQPTkEUjH2IiWS92J9HsX9QtCOKOMi8p1UFQpKVB5f0nU9OQuErHKUwuJuxlVeguLuZ95/foLaIItdSmUBTeVPJIcgG1kpo7QqoYPTyLDbUTnJq0kxUhlLYzoq20oekSnFR+m4RUJ8hHcof+S9sSXcT4pCfR8yqNTdz9wXOeVrbcqzEqTGGAshEX3EFGv1Y7eYlQT5Hc3wFGCN+HRYLRwhSV0V7kaIuWQeGax1jF5IgOPsOQwT1ioa58hF3pxjZLcfCDGzXHQ8vjjj/HTN+emKxplypogE2mpF2zQsu5a2FYRQG3EBlgLZ0tQGpxKtMzRGUxkxkqu0IcWi4smJxsioiwyr5YLFogOlqZxkzFhtaYwgU9Zqutpysu5oKovRiqqWcVPTVDKSM5KLZLTGT5PA/86iVBaPmQy1qwq5WMIAI3LfMYKgbQR9rBsx5ItJXn1lBBmc54hKkm8kaJkqxccRKRPDsykkkjYMPjD6Qhj+RjHy3tel8Hy/RP/pfBQpvGOcmecbwuGa+eaG5fljRp+4urohKMPz12/FfbvveXh+yeLyI04un7BYn1BVYt52R4ovxYNU8MfoDe5JV6gieS9I6tGxuhTZWsvrSjmRrSEbizJVWX9EUSjEWokaUOW/u6gIpVDWYasGpQ1tJyZoy1WHnyZUlMJ1UVmGYWK372VdCRGnFaEUS2OITD6WeA2D07kU6YmhH7DFeO/d1Yb9Yc/JqqWyhnHyHMbA6DP7m1sa66hdhZ8j4zgzjDNT8HeZXCGI/9Y0z/gQMcqyXpzSVA0gnkeyBP13xkmplcLWS7569yMa921OuwvWiy/5+vU1l901J+6UylR89OSCd29HPrg0vHv9kj/64kdcnp5ytjhh2l3hXMf3vvdLGFPz9uoN291GZo5JPoSoYAgz+2nPxbt3tH/wBQQxeVK6wtYVKcH29hX27JzRB5yx+MMe5zS6abBTj9YJHQ1hCmRrCDdXzMOW0O+pP/mA9OgZejPRjxsqVzH6lhh35NaSB09QEKInmBY1e8bDnsXlJWn/HJ0Tzp1weLFHtWv0uMfHHVZHNtOWdXUOvsY1FbW1JB3vuq1oJ6g10+Y1/jDQGs0YDiy7NftdZp8C69VD0J6Fn7kaNjxYP6ULT3h5/bvoC83500+Zwkz+1iPi7/0OJtYMdaKvZi4WNdZ2pGXDfr5l1EkUATowT+9YXH7MA7dmujlQrR9hFmdwuyMNW+zTb9P6l2Wqo1GxWC1n2bJF2VM8N6yYsxmjCvehXPDmuIkWaDxlKH4cSiWsMay7lRQQsSA0OaKyK+RXxdG06G5cQxnLZMnbScVBMif5eekIIyh956VwXH/vVEocbyo4xHsSRtS9PFHGScefKas2AulnLeMGVaKIcypRAFqJcRjIIqsK/J7EeVYh/IfkvSQdk6iaiv7lDjUOPLh4CDkzzRPOVbRZ4ZFgzWO5RJZ6SKkj4lNey7FQ0fdFihSRZfF9r8CUpyqbmVFH50opcI7mUZnEPE1iCmU0eZqJPhByprKi+gkFwaorS9dUxHEmA8taChZnBU3U1iBZawqnDX4O+Ch25uvVApUCrTUsmkren5zx0bPvpUA6OzkhxEx/GADFPHpqJ+cdSuMqxxwCaHH8bZx4U+Sk7upIHyKpkmDApnZYDfU4k7U4t2ZrUDFhc0LFyMlqIYZ/ydM4R1XXpBgYtzvCKEjRctUQrCb6gLWGuqqxzlI3DZVzNG3D7GecsULsdA6CYp5EPZJCRCmYfGDwvtS5ia5VtFZTNTWmcFc2+0nQLK2prBCcrbX0k6dua2kIQqJyirkUzEoJj6Wf5HUqMnMQZOXoe/TTj/xewfAnj/dvzXlkvnnB7vlXrB48Zm6W7F/8GG0dt7c7QtaEmDAxUa8f0HQL2uUKt1ihrTs+iHC6zP11d3edHrOrjo1JiiVqQ66grA3ZFEQ0ZchRyLB+uOOYCU0lyjgtxMKJE8Jt0cffpYbnKHEX3XLNbrNhuT5lc3tNW1V0VeKQoKkdh33P9e2eyzL2VikTgnBLfAjsh5nLkyUaQ6Uj+/2BKUvBMIdA7QTt3O49thIyrVaKYRRrgv3tLQ8eB3zyzCGQYmIaRzKZrm5xxmGUkbGPtdS2pq0btIb92BNiIsZMyvKzP2uZ8nNdpDi1YnUW+OL5c17XNavLX+Tj0x/wv139Dj968WO+X31Cd37G2i5IreO6T5xfPKLSliFl0jwR40hdB4wynJ99yPL0FFNrHp4/4+3bL9nNA03Vct6dYFJi+cUL6usBJo1NEki2Cxu2mz0+Zc4y2AfPCNOWanFGdI1sYNqgZgnZm/YHnBuYNq85HDbYhx/hzj9Ah5Zwc41SHnPyIfOPrlG1JfkJMozbDSEkRrNAbw8YV2NPH5B3f8Bi/YzxtSK8vmbxyUdMm8+wBvrRM6rIaVOTdwFdz3ccCFst0cuOw7u3TD96R1NX1GeXjLcvebv7IYmZS/sRzeoBG/OapTtjPCSqPPCRfYxyTzh1n7GIiuwnfL4hvByo51NoLevmliZrlHZ41aDevGDlHNk+pW9H+tuBWnk4XVM9/D5m8Y6535NyCTCbIq9e/IjNuy9l7ytk1WNHpbL4c5hkMIhSx1hBUaRbl7FKKp10jAltIjHehxM6ZVi257TdaUmkLfC3KsF5sXQ6+tjrlK4JBKVIuWwgURawKIWJMuYeZSkzfqVyGQ+Vy1QhrrjHRVoXiXLp1BSqLIbitYE+Wu0XUu4xWTfFUviUFGIlLpNS68hIQezL093vFy85URPFaWLyE8F76sWCzWbL9c0ty+VSZubCMCnPVRBFUlGEqFQ4KKXcUhpdNhVJARYy5113+N4ffXw9mbvCTpVUZGcN61WLNjD5WVKLcy4LXhRTsyywcogJ78Um/9GDU+qcuPLyfjsrnV7bVKjZl48jE5VIgElS4ESlGGfPSdvQLQyLVcvkZ4Z+oj8EHl2seHu9YbfrOTtb41xFP4ylWxaOxuKkFafPaSZGSQxerpeEIMXT7CM+BupYSxduxFukcpasNCkq6kax2w/U1gnKgkKnjKvEJVgpCN6TyeIJpJVwRWymMhX1yboYhVn87LFlFGqNQesWZbTwrSrHNEzCS7IW/MwUgki250BGYWuDzULITTnROsduHOSaQrxoMhmfEguj6UPkJGeauuIwB7TOd9lJSolR3WH0VLXCWRmbTHMoWS/Hq+Jn28KO0n/ITJtX9F98Ji6tp4/ZXr2S1SKLnN0ajT/0TH3Pw9WKtqmomhZ7NG3M3CEguZDLCwFKintVrsESGJkRhEgbQ/Tl+ZQiJitNVqYQYBMpRDLCdyNmlDIoCzmFQmK/R2jQhqzNfWGmLU3b0Q8DVbuirnY8OK2Iu4Mo21AMMTEME8vlgsrqu4LQKC1cFVN4NkHWj30/gTFYo5i9+PyA5rCdqevMopZiP/jI5GemeRJOWpT3JcWEdYKaKSZApPLOSmbZFD3zOLPZblGFAxXTTPT+v1KU/snj57pIefH8LT94+JCzB2u+fvuC0/qCh+snfPToE37/y99BPa/4gWmxDZyeVux7xRevXvHu6jUhR7rmhA8ePGCcA37yfO/boE3Fze2WswfCnjfZ0jYt6+WadNhxvg3o1KDShMUwxD3X+9fMQXN69iFq+Qh38TH69ivqJCe17nuC71EqMW+uIVnssGHs35AJLD/8FWyzJB9GsnFYLLN7SJqucA9WRL9lxNNPe1xbk+sTpmHEnZyg88Tu8Jbm/M/C52+orELrme3+La6WRWAVDSYnfI5oRZnpG6w+RTcPsM013G4YJ8/q6TPe7X/Mu/yWs7TEeOEBLMmY6UCtDed5wWI3cWheMeaJkEYO/TvepGsuNorV9BQTHe3Hv8ru6odQ9fjrN0xsac/PZUGYes7Wj4ljT+X3xMMAl4+p1RbVH8jbN+ynPf7djmH7irtZQsqFGqFKDo9GI6ZVRh2lrdLNx9KJKlSRcoIKWTgtWoHOZB1pbcOybsgx4YNHKekQfZhpmg6O/BeOi5UpSElpjRUckRChn8T7rwu6IHLDDDre8VjuWsz3FuachGx3LFTEX0G4Fqo4V5JSQTAUkGTheG+5TlG8E3JR3xx/X/JBOuiySGhtBI0qhYFCyKp1bRj6A4e+p2tWYtgWhVsRcwkYzMKkSXevQd2tsVZr7HEYojRKmfdQlIKg6PcRlXug6fhccs6Ms6cylGJQ0VROPqMEES023sXiPufMowcnPF4vudrsyKg79CSUTT4iBmcpRjLCPdJZitcYM8EPqJRYtKcMw4T3kcl7csq8vR14uG64vr3ldrvn/PRMxkh+JnpYrJeM48gw9ISQUVnz8MFpKSwVREmr1krhqkrGboh3StN2uEbcOf00kyOkJIWaczKmzElqUlss/v0cWFZi0mfrCghYlakqK7EKVrELXkZ5SkmxXdRpMSU21xu22x0hRqZpxntPCv7uvUhKUSnIMaBdU9CERCipxlop2tpyvRuwVvKArLEM/cRivaKuHDGI4dwYjqilwiew710Th2EkHtVo3Nfrd7SU9/7/047jpRf9zHx7A/WSRbvipu/xc0+cJ+ZpRhnLxYNTtld7TitHozWLbkVV17IepigqHoFPRIWTjkq2gn4qitIu3xUoGE1Gk40tY1pdWGdSGGV9X3zn4s56fIVKaTBOSPP+eD2XC+FYpGRB/STraySFSNd1GD9znhUh7rHWoqJnP800bYOhfHYhoiopUvbDJGILJDbCZhhmj3KlqJgF9Zl8YEqKcQ4sajETTDEyjZ7GLTFKUbmKuq7RShP8zOwlgkFn8D6wH8a7UM4Qi0ReO9AVU1b8jDXKz3eRcj3ccHuz5MHqghwTP373h1TOctZd8mj9IV+8eQlK88nTJ1w0T3i4WvKma7l+o1mohkcnF3zx/CuMtpwsTnj96hUfPHpK5ypurl6SsucwDzSpIvgW5yOWFfmiwh2+IOaJl7uvsa7jwfIS7JowKdLXPxR/jtMa1Z3hN69wlcZ7OXEmH+lmj5+3dG5Fff4YFSf0LmBUIvuMjYZoFI3R7PYb2kaTppGmOSEFzWG35fzyKRHPPgfqqmaaZ2KlYbhCaQkJCXrCZYfxBmJAWUejWlF0UBMPPelwjWekcmekfGCf3rHJExf1A/QmUiWPWmi8OXAdtrzUe/Y7z4v9SFsZXLfALS84dR39F/8bfV3DeuLNm+fkmy0qPyUGS150IsMcJ1ZPPyFULa8+/5q6/QhHz/j2OcoPVPMe318xm0BrHJfLFRy455GUfVFnhT46i6FkgpNE6ZGS2FOHINu3Lqm9KVssRvwOksYzcru9QaVIVJlpDCwWDd4HAl7koEYuE3Mk1OWMNrp0XBTTrNJ5lQUXmQSVRem9IiSm+7n2+4uSKsDy0UEU7qyldeFX5ONIp1zlOb83Ky9z8+PimZUqGRsZZSQHKJPJwcu/oXRwiA/HXPKIlJZUUyOW62enC+qqY7/b37vAIpyFlBVJHcdYx6Ijo4wV3WsZ+dyREAvv5Kh4uENVMgVlkuLyOP5JSTqyFAWC9lkRfZQwwSzPYYpROCN1w3efPiKOE7f9jDIVi04yUm72B4GZs3yGbVUTQkBreaDoE1NIVEaMqWIpfFLIojTSUhTM44jViv1hoLJGyMc5Ubctfb9n8p7gA11Vc3ayxFmLshKjgHKQJqyxpKTRjfDAnBOlkdUVSSvGw4g2IgsNMUvIpDFiImg1hoxOYBuJZXCVxTqD9xM6iz9LCJ6orMjtS6BkRjFPE8YgxOhx4nAY6IeZOCdSCqXwlGgJyQ7S5BTwIeIaCdVUWn6+aSzBJ0ICU/g+xsDBR06NpmsapmkWFKGQZbURk6/ZC6oRY6IP070t/k8UKHfHf75GuTv8OGDXT6h2A4ftwGG/heiF8Kw15InKNfhwQ3e+pmlbmm6JcxVwVOWJEZ4uadMcmwIluGYuiFAu6IigpqU5sVo8ipTcnuNRiSixGzkJ0qe0eKXIsiAjwgxkV5HnkaTE3C+TpZEqw1WFpFzXdcV4UOgMXdOwDpHdFPApM8yR7WFg0bU01lAbU3g/mpvNDuMcjRE/qcZqht6TjAalCRFikfP3w8hQXGsbA8vGovJIzlNZ1CJaQwiecRyZ5lnyevCSjK5rlGvQlcYpi+vOqZeXtF1H9gMvPv8D/NT/1z/UcvxcFynWNPzws6/5xU8+5PHpY55fveD57Qserx1t1/JBeszV9go/K3iyZp62XJ485vSXLkjZoFRi2XScn3/I5Hvm8cDNbstq0RHHgaZtufHXDLGnHVuW/cTZq3fk2wPRH3gxvELZikXzEDVVjPMBOk0ee+LZQxrXYg9b8sk5qa3xn/2I/aaHpmHcvyMjmQhmmAl+JO1uSMykUGH8TDaGRmfm7FG6LmqWhE1BvA2sYRzfoZJBz5KbYJYN+/k1qYJpSJhs0I3FJotzBjXNLPOSXLcYpdm//gq/3xPmzMnlOZvtc6btNWkOnKQKqzTzmeZGT9zqW/4ovuGp6XgVtgRteLb6AD044uEFg73ij/xz8vKMug98efs5lbW09hJr1ph2iV4vCfstLlu69Ue8efgFY5YRwfTuJToOkg6bNFadSVrx7ko+8Hw/VkgFLpfb5d8pZWIhWWpb1oCcCTmhU6DCgs4klTAI0U2ljJ8Tu80GH2C1Xon0b5yo65oYJqKXvA7jqlLcBLKyHH9JjrFUB+kOxVDvjUCOx9EQKhfOyf2wWzwTorEoI8TSnATxASVcmcD9i71jE6b7IiVTFuNjvlF5ekmIKcY5KYRSBiU+MPmOhZ+wzjIMsqHMk2cOUcwMjWW5OOHt7WtC9vgQCRkCWTa1I+pTChFjlEhzs/oGIVY4NEfE5X0kRci3dz1zeRzROhwDFGWpz0ne66MaJAJTEPnvpw8veLpa88PtKw5TZCYyesuqqVnVURQ+k3g0GK1Yn50wT9Lxuajop4FsJWNnDjAnaIyDmDA5YkIm9p65KKVubw9Yo1k0opSYRxnBVcpwuuwklbhtSEVh5ABnLSdLy2EKoFo0kdppTCXS+zllIXo3TizMu1ZQhpyoakuXTEFiGpQtKe6zx5BxdYs2ZUwRA/MUqLqO5XKBU5rFakncbkgpMA8T8+RJQQpDY0EFXSB5Ge9UdUXjHDEIvUJrKSrGYcYoWLeGrw5TyalRgr6EiDYV89SzqhfsnRUbgIRshikxxULWTVkcVGO4Q1K+ca38lK/evyX/xD3aVahJ0sBHPxDmHt/vJYgySaozMbNYLum6lnZxIqRUo7/5G1LkqK47mjGS1T3BHeHqZDLZapG6I2MnGQHFe0foUvzcydgKYHPHGyvjWbQVUZ9xKB3JWrKA5FQr3U6mXF+OpumYZg9+pjGKReNEDTcP7MZA24rMvXWaaRQjPd0PNIcetxICrjMaq5DRnrX0s5j6GQWzD8SUmGZLagxNbfDTCKZnKq7MIXhignGaxVtJa5LSNKtLugefkm3DdntDv9+gqguq9gF6uUb5/XtI8p/u+LkuUpTJZJ35nT/+Y37w6ff48OxbPL9+wYt3n7M5bFi6Fb9w+X1e73b8+PaPqGbHsluwHfcs6o5pSngPde0w2jJHw9Xb1+z6hrZrWJkVDxeXLKsFBuje3uC+eoG9zVyFDVPKPFw+IY8VPkxAQEWgqyEl/NXXxBCwT/8HosrkORHnSHXSsnn7hth1GGry/pawv0F7T2UNwTRkn1ksVhCviXrG2FpUO0lhtKciknyP99cstCZsezKZtqvpb7a4ynIIAw6NsS3hoKlMTYgDZrkkJMVw+Jp3/Y7GGerR0ZmBzzdf0VYNQ5CLauwyebpmMAdu/IG6czw1D+mvX9M6x3n9gLyfUDqxUh0XZ0+YNjuW7ikrzng3viZ2AWc9apa5dDAzdYgoc8LHp3+O/vXnuMsTpl5InaZdAgMqT1RZouzhuPEjncuRqHmcAedMiGLtPocAIYtNuxh6oJGwQeI9iuG0JPZaV5XFAkKawI8M/YgxmhACgRHtShIzWhAIlYBACl6MsAqxNiPEO8WxKLn3V1BCvpCFKxSI+6jM0bqQ9jTp+NJU4Y7IDKmMkO4XzDvY+ageKoREEfnISAhjZJMx9h6tOYaiHf/EdEeiNka8OcZxYhhnyeYoJnSzD/gYpEjJYsMetWT5aKXJGqwS2/3IESi/L0Z4b+5+/x+gjvEG92P5EMRK3VoLKotKB8qYRlQfwxyJKJZdy//0536JJ5cXPHz8hMtXr7m6vkU7y8P1ksYi5lI+8EdfveDFrfgiGWs5WTXok8TvDS/RyjAF6D0445h8JPtAo8HlRK0cSWWSkfcsB0+Kiv3e42xFYyuWXc2qbYlKU1eW7WYjEmdr6OoaHwXZOsYuOGdwbc08zugpYlZr9oeBaQxUjWa16kh+Qhto6o7Je6wxzDlhrUKrimXXkEJkHAeGw8g0TdjaCfcmZcZJihKyJsxSTIlRnjgUp5yJhYOVovjgxJSZY6StHSElUopMIZBz5nzVcHOYCTFjTTGkq2uszgzTSJwN2cw0VjE7MYMzMcvoI0QS8viRjJ9lQ7yrU38SRvkpKMo3CxT5Iesq8ciJSXgPyeOngagcsw807Yp+07Nar1ifntGenBc3Zn23HhwjLeQaSYVPVp6S0kVNl49scVSJw0BD8hkCKO1IOpFVaQByLk6zFBGe4r67un8NSmuUq1Ehobwne0+OwnfJyaF0RikZNWtX07QLlKnw9DRmLhmngiCHEKmtY9kk+pCYYmRWcLPd0TiLU4Io1s5AUozlsz6+lxEhOScic1BMsyjgcqPxEUzVoVuNtTXKbuD2VsIyVxcsH36CWVywHyZur67Y3jxnlRt0vUC7Ch3Cf1/jHmsNJ+dL3t2+4/e/+EN+IXzKau14c71hfxjps6euVjg1sd8dMPaC2+3EcPBYE6m6lh998Tu8fPc53/vOL/Dm5i2321uW7QljmFnUHVVTi0xunlh9/Q62E/3Qs99uuDh7jAk109AzhQP12QW6azDNKbk6I++2ZGYMMF7vGPYHTNeS9YHX6ZauPiPPB1YocprRzBCVoAcelEr4wx4fPMMw0KuelXuAcZZOW9JhEPgew7gbyVVL2u9JMTGmRD9OPOweovWKKWjqy3Ni+ppoI1+/e00dHNdh5Kl9iDMt/XDNu3HLCRWPqcFpeu857dY8SAf2t7BYnrA0pzy2nl2cqNAMuic1Fus7HtYf0Y8/ZOIdz9a/THg7w+DBBJxuCHNEqci8u8Fev8bZChP36DnSrZ9yOFxhmhMgYNSauLlBacn2yDnLNEXpu7h6inQ3pkDMgTl5XNCoIIoS6ZQkE0bWHRlZaKPvlDTLekFSCmXF2ZQkndI49DRVxRRiCXmTCAGiL8WAQMCCpAhCorSWoiXIPBoy+qjWKeobGaLHwsU4XrEJkocCzXOciZdxyh0HBsjF+fKoNlAFWUhzmXPrkqAcPCh53jkntJEk5KPbbDo+r5TRGeqmwfW2QPGRcZgEAs6BmCMxTPgYCShiFmMynxXZFM+TDCkbKsVdCKEYrQky8k3LruNmo+6LEwrMDqiUUCEy+0hWCuesZAgZQwyJKXiGGDHG8ezsnA8fPWF5suTs0WO+/b3vkbN4gMSYmKeBl599jrKJ//FXvst/+vFXfP76HUPIfOvROXVleH21YZjF62HykZPlUjr/1KOy5AfVVSXEUpUlKDBBnGYhbOtEWxsWbYOxDm01w35HTpnGVRzTEKzRVApCDKSj4Z9StOsFte3Y73e0bcN+PzCPE13T0jVLnMuYuqKtGsbDAb/fk2MkxYxaV7SdE2QiBCGYh0icJmhrSXzWmiNrqV4smPcHkZRrj5/Fxj4EIeNWlaNpKgyKRe04zB4NbPuJurLEnNkPogqZYmIKkWmeqWqLOvJMUkbFQFc59mOQKAJjJCE7C08oxszsEyl9sza5O0veV/SUsan6yduPd+dEmPak8UBOEsaYsjw3HxOnJ0tsTNRNw8nFY2zTiQfQceR4LH0Ud0U8Sbhr2mjBTlJBRtSxkDlyz8r6og0pR3J4jwhbZr7i36PJWvxCsNXdNa6MrA3aWWyuyTHgpxETI0lpQhYjOEl5VxhrMNaSx4EcA7UVb56uckwhMsdE5yyLyrKqLHEKJBSHfqLvRlaVIJ7OGvo5Sc5TVozzXKwVuAusDOketXWLExkhLs+wTkamwc9cX79mnD2NzmhtSTHSb6/ZvPkROeyZrxx748R7hyieSz/D8XNdpOQ809YnfPLBEz578TW/8/l/5MOLp3zrw+8zXSR2mz2kwL6fsKZhiiPO1szRsz3scGFmtTxl3SxI2lBXLf/DD37A85vPmA8ToJimkRSFtd5u98z7kV3fo12FdS25TygjabCVW1E7S1AONSfC9ddU6zV56Imf/SGb119j25rd9VeMrWc572jdGnV4i9/fEKceTp6QdEPe7yBMTPMBV1lyAO0MqWvJ2lDPipgC8+yZs4YazHLFsHtFzJmb4QZypNYalx25bZinCd2AsZnNdItJkAIkt8I0S678LSfKEfPMR8sF1gd8GAhpTZ4tJMeleUC3+gAz7MnZ46qKd9s3tNrSqpZlaNmrkU244Tx/wsnqKbvrV7SrFlWdU1XnGNuSxx3VZkM8eyijiVpjVr+Aef6/Elan1NrjFw0mRPK0kf25rCO5LFiFAkskiqwvB0KYCVGjYsJkjcGUcUIu+9+9FbsiU2lNpSuM0dxud5wuW7TSTENPs1rhxxHtauZpQqWISh3W2TvVjszcpbDh6J5ZbLSPBUnKqciKS2eVEiqLVXuZ0IhzbEriWKkFrRFDsOMcvBRk5fdKoSLvhdJWpI0+CmJibElVlvchqVA6MjG/y0fDOZCNA/FsURTOxqJB73bC+1GahGJOHp9k9u1zwmeISjFnTSwoktKaCi2ePuSSU/Te9frNi7egRcfbZaM4fs6/+ukz/vff/Zi3Nzs2w8imH9gNIwcf5DuNQVc1tbU8e3CGMo6MhEUaLYVpioBKLBcnfPcHv8z29Wvebl7y7OEpSil+9PUbNHC+WvH0wRlvtnumnEUdQ8Y2FrymTobaWeq2I4weHzMuBawTzo/RmuV6xcnJEqMVPkaczfhpwNmOhw8vuXp7Jfk/VY0Jnu1mYJpnlDfs+57V2RnLhw7dV9SLmkXXsrneYZ2lO1mj01xW6yxKnYJ41Y2THJ4wl8/PYCuFVhk/zxx2B1SGqXj4cDQMy5lxmpkmz+w9SimaumbROqyt6Nqaxhm0zgwhMgdpBpra8m7nqawmK8VhkhTcFAKpltyeyUcyE7U1WETho41BWYuaIyGCjxBiZg4S93A8jlPQuyr2vbPm7qsjy/q9sjdOI9P2lrnfkXKSdGCKNYHWdG3DvL/h5ORMBHvWiCFmidw6Fh5HhFZGslLEp5zujNqUdXdjWHkaxYXWajF8mwMoi8qBHCaZHB1jonUmz9yR1LMVJCOHmRSDFPRZoXRF3Z2g7EAaBmzKxDiilZgiOpeJVSJ2iRBhN4xiKmgUwyT5PZU1GJU5W9RMGaaYmULAe4+uG3EERjNOE2MS5ASl7+IYVBkz5ywI2zSOnHU17fqMbnlGwtHve3wZbztXUdcd2jaErOhv3xKGK2pniMNbDm9rxuRYnpz81CLzv3T8XBcpTy6fMMUbTpuO7z55xh9/+RU/evEls89899NvcXn+kBwU7cUTpnlkO+1JOVJh6A+DkCuxnJw9ZF0taE+XtIuGdd+QTMN+3FLbhtpU5NmTQ5YFWWnqqhYY3WZyNjAlVA4kdY497PHhlv3uDfXZGeHVS6YXP2aaBuxCE3avWZ04VErUTUcKAVtMf2y7IvvMfvcVgRvGJMTXPoyYrHCmpRrKeIKZdDuy1xWtjUy752R/wyZv2M+ey9yxHQ9UU4WzmXn2mGAYxxn8zA7FY7Wi70fWl4aeA+enS276PdWoGacBZ06wPVzf7jGVpe5OyM0aZSN+3xNyZPYTdtrT+Ja2N0wqsve3PB5vuOAB1+oFY9izWFqyM3g/k9KADlvUdI4JCt1WqAdnVLeWbu3QzbcYX/4h2ndQLYD31qx07KgKi14JvJqKL0FMAZO465C04o4HoXVZuAoXwihNZSpSTvhxoM9etP51LYoQP+GDR+cW5RVOW1Tl5NwphltKKSG5HWFjLWNIlCAmQBnzFPRHqeK5lsk+ykIWEeg5xALrZjGv06WcKjJKQFSRR15KIZuiNRhZPo9TdrFGN+X7kcIgiErnvuDLd/JL4fHKczRWsdvektJT2qrlwelD8rai394yRU8gM2vFjCYWJ12VDDErqjwx0TKrJOMRCvXvCH5x/PUymkr6PVfJslmcnZ7w6YfP+OhJImYlG1oMTCGIo2nMOOdYtTUPzs7IdUVQYJIQpLPP6BBpm0rkvUlz/vgRrlMcDj/iwXrB69WS3mdc1XBxfs673UEWeGdRWuFDLLJURVM31N0CUyW6xYIw7KlNljwi5yRYrWS1GKfEaTYp2rYtluAVk59xNtydtxRJ6jiMWGO4QmGVwyexHj89FVdblTKKEuNgNHUrpmzzHBinGRsD02EmzAGjLTF7fAhkbQijeFuMfhLzviK/nqZA8kGs9euKuqkwtqJrHE3bStaKUez7/R3iV9cVN70oOZxV7KdIyuCKLUiMchINc0ChuTjt2AyB2UcWbUc/B1HSGCGLpiQFyv34Jv/EKCC/93++8bX65syHnCOqyHmVSuJjVRCAymoJuVPi4xFJxVSRYi1QiLNFiXNsCOT60aRxRFtHLmqxfFTPHZFNrSFqcpjviLaQSvNQuCplfCTjZyHuK2dhGpFoLkXWmeg92moyTuTfIZCCw5ko64qR9yi5SAwVdR05W52QlKEPmdRPgrYUuXTrLLX1ZVQnTy1EMZEUgz3FHATpOqJEqRD0FZKqrTJo7dDVCtcsyYgUeZ56FInlYsXoI1W7AG2Yhh2H269xVmOsw/sD+fCK9vLPsDy9RCvNfWjIf/34uS5SVm3N9nZgsI6z9oRnzzx/+NlXfPbqC4iRX/nFP0euHdfDnofLMy7PL9EKpjzy7nDL8xfXtLXl3dVrbt4pnjz7mDdvXtDUJ/SxR2VNzmLEXvuAfXlDTDLfrozDZEPKiRhmmTPHTNhtibsXjEpjzp6grGHabonDnpPVEhdvuY0eHQ2oBletIShOm0twFpqO8O4FMVwR24hVHTlFphRoTIXLDaZXxLohzyM6dXh/xfz2PwKe2kITFR4lVuSmom4WKCsMuDwqkhtRNnNQiVo3aO2Y9J6lMxzGAW0q1FixH0ZObUDZkdu4ZWEaqjGT2wO1F+jfpw3WZwyGtBswztAo8CkR5j21XaLrmmneY3SEEEgpMIaJaZxwdcKmFmMa8naHOn2GH2f0qgU9EBYj+3l3Pw5ANu5UJLBSoJSxCEe04rgry88oJUZKymjZy5UoGKwVkqa1tkDznkM/s+xEjjwMIy4nxr4nr06pVou7jZ3gyzxaYSpHnEu4mBLzuKyKT4qJdyurEGJLd6KQ2TP5Xu4Yy1JdCqo7ddBxMVa68FFySSQuRZEyKFehKlkAtRKnU5RCW0Py92MFZS1pnu/fG8qISN1/nVPEVY79IeBDQBvNu92GrT9gKkueYI6BGY3PkUjpAItV+JQDY54ZcmDOSV7r8bPhWKghpEAxbClz//vOeBpHxsMB6yztYo11laiSjC1mfKqEPor5ldUyjy/zQEIYMTmhMcV4LpeMkZbLi8dcOMu3vvUdfvjjr/j6+RWDn8TLxhxt7TXzNBVpqiABzhgq1+CcZvH0Ac7Z0gkntMCpbHcbyJngPV1Vs14sRTHjNJU2VNYwz4HKOoZpZppHeW9iYjqM9FpGJBrD5cMLEpqoBOoPMTDHwP7QF3J5xJafTUHOC+MMhEzdSC6RNpZxuyMWPomyVmTk80xX1Zwu17JhGlnX6kZkzXf+IuXzyjEyevGqaSvNbggcRpEsWyVdvMibIWdLt2hpq4o3m0k8VSrHGCJdbVCqZvBivX/8xO+Ak5963F/LP/3eTJxHEop69YD++go/HJiHnt04c/LwCdPY03ZrpnnG1o1khcGdouz+oYuYX2uSBqYBrSuyMaRRDPxyjihl5RzW6n7sHFNJSFZ3CCVhvi9OSqQHxgg/JyUpPlUSHkuKhWN7VBAaXCXJw6oSCwFjDCYanDJEbUi1qJMS4BPs+wmTBSU2pXmyZaRri+tzKuNdn5I4N2fwXkbDWr/H+yuNl1aKumlxRjP1t+yCgay4vX6Js4auW+KHHm0rUorsbt8w7t+gyMzzBBjM+S/SnH2Adc1/X0jKsmm5OH3AV9fPOfgtK3vKpw8/5svxOS/fbrHtj3n26CkPT5+Rc+Jmt+ds1fHw/GM++fjP8yvfG3h79ZLf/93/yB//6EfMOXF5eUk/zowhlchqRfQBPULTPsOpH4oZWgaisMbTNFCvLqmNY3r3GXOYsZ/+OWK/xStFf3NFzhWrRce713+MSZr5JlNXoJqatNeEaSSGGqsP3PYviHpkUZ3Rpx1BiTwwagMhkeeJhMzPR+2JocRuG0vMkZVZ4uOGbKB2DTqKoZvOiqYScysfIdYG5SuW7Sk+DNh1xX7fc1Gv0BGmMBAN7PWOL/xbftB9i3E/ouwb3sQtr6qBH+wHttYzpxE3V/jKw95jnMbjGTZbqotLdi++YB73YAwHvyHPM2mtSSqgYiK+3FJfLGnqJdPmKxQz49BzM79ljsMdaIBRpFgkqkXOd1xklFEokzBGFnWlxQrclL+t0QXi1aVrSlSuJkbPq1fXnKwWhHlmN4+SX1K3tE4Tt3sqY8ldXRbsUEbXAY1DV9JhJS98AIzBFAfS+x04H3lp0o2lSPATeRhLZ+ZLxyVOkTkpKXbivTpAGYvSjiMZV1lbZuigq0rGPNIu3o1OlFbk2XO/DRQib5JOUWbtxYm1SKmDl9GAUjDPXvg+xtPnAxElxFGQcU5GPD+K4R0xCnkvB2YCXhXpd7lm39sL7v+RRe0gQI7cWDcti/VJ8e8I6LrDVpUUhdqIMivfQ/S65AuFeUIZTZpHQdy0AVcV5VdEaYtzDdlZ6qbmz//S9wkx8sdffc1h8ry4vSkQtiBhOQqXxxSPCWsMy8WS09OWqqoBmcMbVxP9xOwHUpyJM9RVhTGWEAOEQL/bMWiE1KrBGUUympAiXVVR1Q1v9z1DmLlJnrZbYJXCjwPTPHE49ByGQeTB1tJ2DTmJTbnOlLwqS7VckFOi34/sDgfi7Km1RSnJbamUoms6chmNaWuIOdK2FdY6rLbM88hu6MWAbXcgA9OccE7jQ+IwSYGiCqQhJNxEazTG1Tw8WxGV4vow4awjZ+nKu6pCmZp4mBjG6b9QmHzzNHk/K1n9ib8VKWvGSUIlo8A67DZb6tW6jF5mVLNiOPRUTQOpuUNSpHhO5JKlhVZkDXno0SU0j3kWuMgcOV+q+KioYm52b/aWiytynkYxh7SFKK2NkOpzLn5FidBPxOBROmG0AYucs1mRpkGiJIwhIiGQSkl8giLjjCXFRLKRUNecLyIfPlgTU6IyVoIIoyojNClaVE4o5FqdS0xEPBKBj9ciUqwAdyKBatmgxxt2ux17L98zDHsuHjxCq8jeR7KumWJiv91wtPvPKeJOPsJdfB9TN/iQ/vsizl6cfEp90vBy/5b9GKjrxGqx5slTuLnecfVuQxoNwyFR1RWnyxP208hZBqcNrlnCySXDx99h3Z3ifWDeHTh7+JA2VZyuz4gh4A9b6mFkcfopLn5JDFt0VeFjYB57/DxTxZH+EOjnW+rFGfXJJWHs6ddn6JvXGGXIw4bbeQM5sa7OMKliNApbOdSsMO2CcXzDJlxhLTg0hxzwaWKTE6cpM4YJbGbevGSad/ThWiSMeuQNe85Vh8s1jRXpWe9HHp1dMm2vqPUSFWaUU+wtPAgNOlqUy0yMxBkCkYqKaZ6lIFoproe3DCbgkiPOgWHesBv21DrRpxFzmOjmBTORxAar4KACEwnre5ruKYP9EjUPjGEgBs/GBp7qhFUeU2fisGfc76iXhoO1NKcX8EIRtcaUkzqVqPtoiheKEmLbUeaqNdhK42qDdVbcZ63BOJk/m5I7Y7W40yqTaeoFTln2YWa7S3RNRc7g6pqcAvMQ8ENPOlkRQyD6SQyyrJXgvRRx2RJBuCjH/JnCTZFOTd+PeY4Qdk6oIB4s0U/gDXkcIArKoYyFbAoRVtQAShnuGKraFD8SK6Z2rpaFj8JjKVmF2cjzifOMdkJqk4VZkBix35ZnJTlDgSPJ11rDMA3004FVU7EPNfs5oG3GKY1KYLIIlTIalTWVUZgoXh7q6E5ZPFzed5s98grlhVFquXx3W90tOXnwhBAC/X6Hnyd0VWGP+Sr53mBPFct9Yyohux62zNNA8ok6GVynSxGUxLnW2vuMIKPpnONbH37A9b7n+tDjlJYNIYHKWXJ32o666WjbjuWylXGgc2ijsXWLMQ4/GU7PTxh2O5JPaFVhqobt9VtSTDg03k/004jPAqvnDItuQe1qnK5ojPjzXN3c4kNg2S7o+0EcgUPAaoOxNWEKGCsFeF05dF1jjfy7aWq2u57KVaSYMMXB11UOVxuMq/A+ijorJZq2pTKW4CcxZdOaIcLQj9xuduLymzImi8R/mBM+lLgIVc77UqhgDBdnHc4ovnq7ZZojDx50+ChcmjlCP/YcBlHF5YIcvH/cFybHf6u7f6v377ubUQLGMk8z436LnwZUQSzJmd3tLZgaUPh5ZDX3hNDdPfpR7E8uTs4olJ/RVS2I6DSXaAlTfI64d8kt6EkqBnjZKHGA9pEUIQVxoMYYyAEokv1i7KbLCClqpLmIiTwNZD+VZiajlEVrh2uXME/kOOCNhyAFtE2yjtauYt01HMYRqzUpQTgS0cvbnHK6651iQSRzTkLKLW8pKhfU0FAbJC9KQTVfc6I8bbNmO07o2tAtVmRmTHEKn+ceP25QyjDHGVuvsA9/GbtYk1JiGuf3xAJ/uuPnukhZdWtO647tx1t++NUfs/E7yIp1t2LcZTbvtuzTgcVqwRRmwgwXy1PevHnFPB6ompZMxceXH3JaOa63e169nPDjzNNHT1DOEnJkfXrKB9evMX/4v9LvrpkIrOqW7DNhHnFNgwqRMBwYw0R1umBcVqQvb6hf7ZgGUG3F1fg5k00sabCVg6qF2qG8JZqRFK549+73uYp7Ltwp4zCw9yPJKoKrWOdHjIeEVXsO8w3b+IZYRfTSMpE4jImH3kp37ytyHgkWsIZat2gtsdpqsHwnnuDaFpUVh7THaI/fT5yojuwzt3kADVHPXA07qmVL7COmUgzxltkllHHUuqabPXFKLJY1N+ENSiEeGloT0p549QbtKqbDllQ5FEqQoXFicJN4Cvg9av+ayjxApVvScMaie0icA9VcJHsl1l6hROKq5YI/Wqwba6nqiqqucK7CGFHjWCcdprEC2Vsj9vmoxDAE8jIz+Rky2EUrG6FSHLZbKqVoagkDyzGQppnsHGHymLolkwleCz/FlGKijAuOG/Ix+VS9t/QqpcUASmuYNLmqSE1N2u3IQTwStNLgnGQPlQ1NoGRXog0MqhLliLFCGsUasgpkH+5GP6auCMMkWSFlUTxKgo/Q9tFdUwzwPCFGFouO/eGAV4nz1ROS6hhvv0RphzOJEJWEhklMoSAKWmOzxiSFyfLnGGQoC+W96+xx3FTenDK6Kh+1MhhTk1VFd1IxHrbMwx7dLTFVLbEHqhRuRQINGdtU5Lxi8pHd7papn+jUGbZpCl8pUbuGnBImyWcT5xmrEh89OmOcR1IMGB2ZerG9r11F07QsF0varsU4Qbmsq7C2Fe5CkXMr61DG0LUtVdcQg8ckMf9brJfMoyJGGEPAx4hKGafEgycrWC9bBg951vT7A11di/19tnRty6Jd0rqGmCL7fscwDOV8Fn8aa8SQbLVYMeqJtlvgKjF2M9YAQoRUyuDjLO7BxRtHOYcKijl6Rj8z+cA4ijcOSgqaGBFFTpbr0aCprUarzBxg4eCkteynwO1BuByt0fisOfSe3TAwzrPId/8E/+R4ffwE4YS7y/+uKFE/sdFVbYu1MB9u8dOOGAOVM8zDQD97Hn70Xba3G/K0Zx4q8jLcyf+Vojyfe7QT7aQhiMJBRJVwUIEnhaiuIcUof1IU8muKgm5k5P3UZXxbXuIRwc13ppMyQjOmImqD8hM5KnIWok8KsWRWKbSW+AK0XGtKe7Iqo2MtgZdOG3QWtRFl7RFSrb5DK4/rUEiF01fWVG3knqMrudNgcsYBlTJYpXn0wcf8+KsXNMZwcnpBtzoHtSe/fU4KgwTWjhvmeUIpgz37LnnxEKUVMXimMP33VaS8uvqC7376fT59+G3mvOerF1f0PlDbmkcPHnO4PbDZ3XK6O+HTj55Jt6gy77Zb/Ozpupau7fBaE62hWZ3wSDnmYc8YJnycaZ0jjgeqP/iPDF/9HlMcqJoWbWrSMGNyoNaOMM8c5h2+0vDoI+ar12z377hoPmJWoJvE4WZTqtYKW62Y1cS0f44ZLtFTIE/XvIxXqGTw00S1POXgHB/lM+ykOfEdPg/06YZX4R1Bz9iVoyGx9A0Pw5oay0TmVksYmTaO6GVmvhtu6KolpBptO1LJHvJ+YNlpqnDC0lQc9hMeaG1LUoFtmjnJDVOYWTeafRx4mya+pU5QV4ZmslBV2A8e8m73R5xNkU0XGV3G9J7KDSzOP2a//4p6cSnjiimSThV11zLlBdlPuLQjuCfYccZurjB1y2Yfif0BuC9QuGPeU1AUg9EGZxyVaahcS1U5rDVYK4ZS1lmBsq3DWF3SfDUuVdzcbqQTHiYGK2F0TePQWkknpA0ET5oH1HINCCdGzTPaOXKImNoKEU7d+y4IdKoK+sF911iKDa002lZEW5HmiZQrknGkcRCfhCyuudpYVG1k8QtJNmQjSIpCFYO5DCqhk3A0QvKFB5LRxuJaQVg0wkvJoTiZFKVBSumu0DPFM2UYDtQps7xYk+0p1fIh/XjLdt6QdCf27VkVUqwuCbCSXFxjaLIWn5tS/JRyjfdlx+qugAMhTh5hZiETisDC0qzOmMcd42Enssumk8DEnNAcjbNEUaUqx+LBQ+rVGfvNNde3W5w9kJKnaVpALOiVspCyJJwHz8my4/JkwTBOTNNAYwxRa6qmpa5qmq6jslaKAWuASEoD1jRkhDNiTU3XnjKkLVXtSCVawdjIPE1Y11A5Q2sMt5tbXCveNDnMmKZiWTkaHOtFy7Dbs9vtOTk9pdMtClVC8TrCPJNVxBolPJTomcYJqorLp0/RykmBZBymkg0qhlQC3hIheuJsiEe+koYcRZ6/P/Rst1u2+wPz8TxBE0IiK2kMtAYtvmVYYwgx4xScLlvmCMMcyBi6WnG2WrC9GYgpip/O8TPmPerYN8Y56u6WezSl1A6l0/8pNYw8th/Y314zTRPOWcZBctNSSKRhI6m8Mbz36LnI5HOxKchSWKSIzhaFEaKvOhonGmKKxBjlMXNJOy+FCknI8CkjRZCRmAcpDoVInsc9mFZSk5UmWitS55zkMypWCSmKQ3TyMykFcXVNsTjDisxfCsfE0cDfaI2xUgCFUPLHUMV0r6yhqgSi5/dIsuVabJwhZyHX+iCKRR8T87DjzdyThoF5e0M0C558+CG5qhiUYuwPuGaPP2yJ8wGtwNUNWEdOM/M4CH9r2JaG6E9//GzWb8C//bf/lr/yV/4KT58+RSnFb/3Wb33j/pwz/+Af/AOePHlC27b82q/9Gj/84Q+/8T3X19f85m/+Juv1mtPTU/7W3/pb7Pf7n/Wp8OL1S5SzPH34i3z/0ff41qNnLJtTnOtwpuHjZ5/w0Qcf09ULNtuNwGHLUz55/B3mlPjhiy/40fMvefHmLTm3XF58i8tHj9GVhSjeGyln4suXqP/0Q7S1pNrRrFbkeSaEPZWpcDoRw5axhvb8nOrkMfWQOLn8HrnqUPXENL6iDx6bLednH2PtKbd+YoyBxp5gEWLURfuYy+aMB90FLY5P0gOqZNAqc6t3/JF7w+/wij+0N1yZkXqoeMgjHqUnnLqHBK35Mt9wlUZmrUlR8+b6NbNPTDoxNp63es8fqT07H/A60q0d1jiWqwfE5Ngz4VWmVo6v9YGN8zxyC1zQEAImwoNQ8TQvcSlTfXCCelhzyO94u79iO4hKRvJGEiolWmPptS9GWJk2GUzdoRcrtA5MYV8UCwk7n+P7G/rNLRyCMMKQi+yoBhDwXmbARkuooHM1lWuorCApzlV3hYm1VkY/xmBNhTOOxrasFishlyqFrgyb/QFTfEK8DwTvifMkOS+2EvluTGjjoMSzq7oiOxm9qMpJB2WtkFmtE4TF6Lvxz53bqha0wFUtrqqxVYOpG3TTopoGrJHNKGZAJLfaWkFqSoGiskJnfbfip5iKwuToMCtGWcY5TFXJc9AiB83FX4VCjpR5tTxO1zaM/UBTO9Lk2d5coww8On9Cpwwndcuq7lg3Laflz0ndcNI0rKuapanotKXSGsP7ne/7FMmj8+b9ApqPvjdRNgKFwiqLUYa6W1Mvz5mmicP2humwJ86zKKhyQuy6pQBxtqZuOk4eXnLxwYd0Jw9IpmHT7xn9yOxnvJ+JeSakCaM1XV3x6MEpi8rQORldaVdR1w3doqNpKpzTVLV8psY5qrrBOIfShrrpaBanuLZjeXpG5RoW61MWqxXL5ZJuseT8wWNOLi45OXvAxYMLFm2Hs47T0wecrFaAwk+RYRCC53q5FiSldtS1Y7fbsLm9FkfVaYCUsEbOpXaxplucChncWRbLNe2ik3PLVVJ8Vq54+QjvxmiDzqJa06X4CN5jtSHNAZWS+K+WjSUW70GrFSWnFO8j3kdWXU3XtewOI7fbkdpVPDlfAZMo7rSmrd17JQjfOBfU3dc//ZCy4psoy/Er6ypMt5ZrkoRWMmqcp5GLh4+Y97fUOaBSFLl0lNGmIIlyPaaieMkpyXVb/H2y1hIYiHiWBCUZRH72jPteghpnXxx7BUFWriCryhRuRiKFgJpGSFaQjigFkrZOrANCGR2lRAyBECK+nKd+8oRCVBZdWCZjQDnhW2UpILWxVLaSXJ0sJm0pZ5zREvtQHK1TKciAu6DPYwPho/i8SESC8GP6/cgfffmS/+13/5AXX71md3OFHw8YrQtqZdGxJ843aJWw1pAwJB8I/ZZp847x7Y/oX/x7cpr5WY6fGUk5HA782T/7Z/mbf/Nv8tf/+l//E/f/43/8j/ln/+yf8S/+xb/g008/5e///b/PX/pLf4nf+73fo2kaAH7zN3+Tly9f8m/+zb/Be8/f+Bt/g7/9t/82/+pf/auf6bnMMTJNExcnH8LFp1JZzq/obwKNa3jx7hXLuuWjJx+yPjnHe8/Xz7/ka/ucxiqeXHzI25sr3l2/Zj9G3mzekVMgzZ6koHIVC2Nx2x3tLhIKLKe1IymZrVlXCbTs9+jVOctHHxGvt4yHa8yiZXjzFcnVzIc92nWcNyec1ZeMfUB7iIeBkF6RbjeM1Y7BeG7Slu+qhq2/YplrtsOeSltuGHk9b3leD7Re0dkVZ/UZna8wOTDowKu44cdux6VacN4+og0tB3XL0A0c9iPPtxuu48CDpuVkvQCVqddrtjdvqOxMUpnog3Sp2rKp4HxoqLxjzInDMrPVFaHu+JyRT/PIbvMWP2RO1CMCHj1XVNriignStPd0T2smNTH6A04ZdLvAuYzevKZmQawCk49Ub6/Rjz4mvv09sp8Zh5nsy1KktFz0d8FfCqMt1liqqqauG1zlsM5SWYu2WtAU4ySPpESgi0OAIZEYpgPn7ZL9wXN+vuLq9RXzPJEmT/QRqzJ109Ktz6iahSxmPuAqOZdNVbggzorvQSFbCOJzdFXN76E/R+VRQYQ4utMa6RJLZLzYpnjSHAh+wDkpTrR15fGL5bw8BPc2/EeehpUdRN2/d9bq+wIvRVBHOXImZy/vqDbFv8WyXp9QWcuQNFFZ5hhYrE9pr1qquhEX2LvspGJ9j0YrgzOW2jicPr7+km+U9Te2IpXzHU+Hwg5IuXSHUXgnwh+RVlBXLcY6pv0t/WFPZSty3VK1DcYakhKCoOTBacChnMZpTVM7YjgjpMA8TYzDgFEJtJjC5ZjEfdlZ8E4QGpWxztF0rRCw78jXTpCYLO+31gprNLlyaL0ixwqFpMJmJe/pWilygKMAuV2v2d9cs73eME8z52cXNEtox4EQEt57xt2OqT8Qo+Ph5WPW6xN2+y1V09JUNRpRWuWsMLYm5kCMGec02jlBaTTEKNkxwQuJuqpqXE7s+x5thCNVWcM4JlxVse8H5iRIoC6tdypS8MQ9HUSRMTmxrB0nq4558my2B0LWrNcLTlrFm81EnD1KaxbWsDFiwf9N2P99aOS+EFHv33XkoN+xVI4/KqOQxcWjMrJIqBSZ+gPL9ZpFW5PHgaAS0Y8kbyS5HFVQDk2KnlRSxY2TZkRZJ+ObMJPmQPSBQGbyo3wmw07OL2sL39agYkJXTlLHC7eLGCUFOaZyXRpBGOaZFAJoJerQWd7vnAXREi6XJetISMWY0Acm75mCZ45BcrS0xkvqo8jhYyblWcZ4oYRaSsyx8IayuHPHYuVgigUBWb5/ChFntPDOEAsYTeR0scLPgxQ+08SLF1/znbOPOF13PDh9wKGfiX7CWoUxNcmsiXEmXf8hedrCfIsOQ2ko/vTHz1yk/Pqv/zq//uu//lPvyznzT//pP+Xv/b2/x1/9q38VgH/5L/8ljx494rd+67f4jd/4DX7/93+ff/2v/zX//t//e/7CX/gLAPzzf/7P+ct/+S/zT/7JP+Hp06d/6udSdQ3/6av/hRnPxfqch6cfsXsy8TtvP+PtzRtsbXl1c8UUPb/y/V/lyeMP6Psdh/2GYBzj9JL1esXlxWP2w0iYZ1CROQcO+5G2aVAxcjkHatcwM1DVcltKHm0qYgwc/MhWQWsTi1/6i+gvb1HVO3y/wSqNNmtutEXrBrRh3t8wq8BNfYupOp6xoD5T3IZb5v6AU5nkDG/nLfNcU2nYuJFNEtXJYoJfbC/4sLkUG/3DwEjkxbTndxc9S7XizyyecuLW1I3lITVbtWeTHK/jnmfTkk5b9sOB5apBPXhEvT8whQOm6njbJtaupZotH721uLSiWtXYj0743F/zcvOGKUx0bcUu9Ez7HVbVVDnT2prTVcvSGZTTRLJIhI2isY6mXbPPVzSmQXtN7Pe49QOshX7+muWpRvuIsqf44ZaQxGqbQpDN+b730hT5qSu+JnWFsVK0WGsKaiC+JUprzNF+XRW6XFIY43DWMg8TmxtFv++pVKa2lq7rWFaORWWoK3nMI/dEKYVpG3RVoUqmj8yq78c8SqkCT0sWyLEXvHNcLNwTsnRZOUcU4lCrjSFVFbqMuHI+esOU0UYsxY7WpXYTxYuuRKp7XN3fxy3uiieE5Y+SLiiHIGOfFLDGkkuYYVM7lEqE4HHWENNM02rx0qhqppxk1JOkWJEYAIG3xWfjHqg9BjBmLYnGxcdbrP/lO0TdVDrZnLJ07ymBEgKxUSUSQFua9RnzVDPt98SpJ2uoVSMFjS5mWVphbCVdaYaQNVGBVpnatThlRYkTJ2KUsYZweGqYA/uQOMwBWzuc1X9COZmPcLkPdzWn0grbNBjVlOes0aa6J3oiXWyMmaZd0zQnOPeW3WHDPI1CGD6/JBbS8XyyZre95u2rV3w9fc3F4yfYpmM4HLDOsViuWNoatKGqGyAzDQOKTBgHkjOkQvRUWYpCYx0pwjxH6rop8H8kzDPL2EGCLw+viCmhi9w/HAnS+b540CoLZ8tCVcn7vj30+CiZN7URttJuPxJ9pqss1hgaZ5iQSAOVjyPAcp4eq5JvgCr3VcqR2yEka/Xe+yp3iJUAzD6iXc3Fo8dCfjYQcsJoi4pBSupjsvnx3AyxkM8BY4k5oKLHzyPTcGCaBm5v3jLcvmPqD8zBo7IYKYYYcU4UX4vFiqZdlORfuZZU4asoHdE4TJZzQpBZL9lcWoqlOE8FMcl4Ej5FfJgZ+gPDNLIfBvqhxwcvhYaxUnQEj+CJGV88aEJKWKNJOaOVoqksSunCRykjtFJMJY5kbsnlUkpLIGQGVKJuNbuDGPvpHDE3N5y8+hGu7ZjmA7e318Q4UzlHyopx2hL7t7KuHLk/9n1m3p/u+G/KSfnss8949eoVv/Zrv3Z328nJCX/xL/5Ffvu3f5vf+I3f4Ld/+7c5PT29K1AAfu3Xfg2tNf/u3/07/tpf+2t/4nGnaWKaprt/b7dbANbrJfv5DV+9/AOq/AMWq46Hy0s++WTk//Mf/hOHTc/l+SOM1nz59WdU1vDh0494/uoryEJ2fP36JZcozk4v2I1b9vuBzWEjV2SMaO8J00Qs0atWVxhtMTnimord1HM7bAi2pnv4Eel2Ih8m7DQT50xfT7wefsgLc8XjUNNHTVQj03TgJFnqXjE0EXLPq7ilUw4VZ6Yw8jiumZjIjaVPPUllVq7iMQsu3QlNrlA+UZuWbAInquf7vuaZO2NhG+ZwQOGosmEbt7Q4foUT9m7ikGZ0rTmoCfY71mdPUGGk7z0fnXyITQr2A+35Be77T7ja/JhweEe4vsbe3lJhWa89bZo5BCFzqTwzGXFMbbLBG1DKE1UibQ+cL58RXQ0uc3Z+TrU8Z3j9hjQPmLNz4vWPUS5g3myITU0wihAnRn387N/bCBEPDEtBSpwVtUNR8XAsTgqxUvrXQmTNiWOwnXOK1VKM+ba7A9PYk5c1VePQQFvVLJYLqrorfiISCKecxdQNWUshlFJGZZEhpuBRMZOd2PnfzYOjJ0UvY5kQSNOI1uY+zycex1pitiSWqTKjJnrSEKVAyoUlUBYS4WZYlMrkKJuH1raogpQQO8v7R/lZpTTaHbcHWagJoHMsCcEODDTWMaMZyPg4o3VN23XUtobSrSWlSKkoPYqTpTmGCwKUiXnOkZQK4TXdQ8y5IErydy7pz7K4pygZScrI4kq+57FUVYdaaMb9hn6/IU49VbvAVZ3A/ub4mrO8t7MnzxPojDMVPgWmYZLASBLojFGa9XLJcOh5t++praKuLBrJTRFyjSz6PghxMSPeOLr4kogaQ85D4QUVL5tSZMuIRV63rVtc29H1e6bJU1lH1UnRIXLuhm61ZrE85fr2hqvrDZAwCuycSLbl8vIhy9VK/DZiwllLCJMYu6Wyjmm5PhwSIui9IWsxI4xxInnwPpC1kMjnWSSvOQvWl1CgMsYIehfLeV0ZqDU0VjGOE+PoCSGxqB0PVi2vb285jF7WhMrRTx5nhN+ClhTzbxR/+f5Uff9GhRBQ5Vy9o3bdHSklNtfXDP0obuG6YnV6Ui4hfxemOQ8DJsxI6nZ5hJyLOaOVfBmtJSctTAQS/eGGmzcvefPiC/bXb4lZYZqWlDXBH+j3e5HvK1fMIR0Pzi9Ynj+Q7KkohYKEb1q0deWaFAmeyqaMO+UaCEms46dp5LDfMo0HDoc94ziyOezZHQ7s+4HtMLHrR2KGx+cnglYqKTSmaRa+igQOidonJ0HFyBzd7u8bmVKoFG+cmARtqaxjnBP95NnuPTeHCessS1fTDxNXN1d8uFzTVE3hW2oqZ5jmGaM8VWNJSeJGxNbgZyPNwn/jIuXVq1cAPHr06Bu3P3r06O6+V69ecXl5+c0nYS3n5+d33/OTxz/6R/+If/gP/+GfuL2rTyAdeHnzNUTFx0++Q206ni6fEb9tefHia6y2VE46rC+ff8n29obHD59QNRU4Q9aJbb/hpt/ICCBmatWiK1nIGtuwipYqOFJr8IWTYJRjCiO7eU+uKmxlONHnTP/Lf0Iv1szbt7wZN1yfJb7T/QU+2rUcTM+0nRibTMDiDdxsr1mrt2g/EuPEtDakpNm5gclFeu0ZzcSoA94orDbMSZNyz62KVEHR6BY1zPigeGyWLEyD7eWEiExMWqFC5MBEcoreB3SnCCbS6JZ6N7BuP2T2GxbtGYPuCX7B8GhNe6HZvfyctL9hHTUmZl6GAAtLCmC8psEQyaToyZUBawk6kRqHUZY8R5gnbLPk6vpHpNCjVCZETaod0/SOtnlGtVwTpx3mekA/WTDv3zBMW0KKd+wpJQNZGfUA9pi2q47jHCW6WJU56nClUKGQ3wriUdJ1D9OWL1685Prmlm9/+hGh1oQUmIYRMLQPH1I3MmJQWpwWbSUQrwwUNGEY7lwoYwwCHfsAMWObhqPzbI6Bo/tkmuc7Qp1yRhxjg8z/BS1AFANezKByEP8UshDbcggQJBRMWysIUiMLRQy+IAoOjEUZKwiQvINlU5B5s1agfEFXtMNpQ9O0DP0oihBdkVTidtihG0vWS9p2gUqKCoePkVjg+aP66F5mnN/jmhz/JEF7VZbPtLjV5qMh1t2SKVlLWSXhC5HEXPE4wVJS5Niqpl2fc7i9Zr7ZUR8mqnbA2VpGY87IjH/2+GnC9wdwCl0nkh8wOYCSULVjkVQVA6zgZx6s1lRWyi2tlBRfSYksNyuiTmSVsarCKTkfVJHiomS0pbUp5GC5P+v7dGgpVByuWzCPMyFM1E1d3qsA2VI1im615uHTZ4ToGceBfhhKEaSwzqBIOFuhnMD3h13Ah5mcE66q0caI+aKXsY8yDqtU6ZwDWieauiGnzDCOGCWvN1LQIiUmd0f0SJQwwpUTpKXkWGVYNDXf+eCS1bLjR8/fEWJmWZJ6Jy8ohlGUzBp9j4j8545yp1JHhPIn7gApNKolwVX0Y099ekplMofthrZbkMumO409VTAYFNaK0jB5MbpUjRPeWwgoAvthw+H6iutXL7h9/ZxpmFBuIbEZ80S/7xmnSc5765imkbHvqV3F4XDgbBxZrNZYJHuqqsSjxlgnuUkoYtDEEGTUMo2E4nA9eU8/TmwOA7vNjmnqmf3M6AWBslXFUsm1/9WbG/7gy5cljwxiEkPArDQBCD5QV06amyQIo4Q63hd9gvBJVs8RzJpjoo6RbCz73cTiZM21OhAA0y44uTjnuz/4ZR6dP+TNu2u6rqMudgZs9+X3pWKjIOdGOpKafobj50Ld83f/7t/l7/ydv3P37+12y4cffojG0JoFr6ZX/PCrP6YyS85PT1Ex8eD0hJv9FfvDHqMcMSZ89Lx484I+DKxPzlg2S5Z1S1d3zCmy2x2I0XMYdgzzgcvlAxwJlSyxXpKu31JVtcRZ58B22vMuDYw58Oz0KXpMTDdX1CmSxsDD6gPWm2uqy4qbqHmu9zw/D1y5W6Za8S4dMGj+L7/wHdbPe/qDZqMGgoFUT6TOkFcduXFEowXCi5EwBlwER8QmcPRUPrOMNWfBMgZHO1va/YidpClxpqb1njFGtFM8n/ecuYplW9HZDhUit/OE2Q/ETqPXC1L/jmlM2HlJc/uCmGsqVdEoS+sdTVMzT4qkNdlplMosQwn0i5E0JGoqdKWJThNt4uubL6mnzKN+JE09VVdx++YLVr+8oLr8Dmb/hnzSsR1f8NXwgqglyAyPjAeSkEXFKrzIWwuBVTrZ44jnCB+Ln4p0XkayYlQuhUwipURVZYyG3XVP7RR+nvF9z7OLC4T/dr+QamdF2RMTU38oG2sizCPzMDD1e3H0JON9IHqPUVpi7MmkGAT+LIuWsw5XdyijySEUwyaRJ8cQxN/EWIwz4isRhfTnD3sJQKFsGNpg6gblKrLREoQXElkbrHPUyzVGW5rFEtu0om4prrXa2TKtSlglvh0xZsbJ07mED5ll3TApyXl5cPktrl59hsEQVSKqY1FYYHi4g+3vgPpSoNy5buYsbP97/P7uteQMOUpAXnQGRyUdZlRlrCWSXhkDgakU6uSU7TRxc/UObQ2Vc9RVg7WuhKUJUjDNPdqLhbnEzQcxvEMQrIRsvqqqUCguTtZYZQhBis4hhUJSNNR1g3H3yEjM9/4t4r+XC2clF2M5QQCh8BeUIikwyqCNEBhDlNckRGapyI728QAmV7i6ZbXyaCUbTQiBMPXo4AlBnFSruiINif1+x+Gwk1GoqchZyWssijOtxYtIwjhVkbpCUxmmWXKZtJLRqjTl8vNayWMoFamtpi5BnI1zfHT5gKcXp+zGScYgVjKOZh8KNypj41HrlXkP5+M4z3nfvK2cIXdjweN5dT/GBG20mONlhevWGO0YDgPRe3Ybcdvd3F4x7A60p+fikmstqjSdFGmwBkKYmPoth7dfM+wO2KRYnz9lDJ794cDhcGC32XPoB/FnmQNKJ5yzaGPxCbaHAT+/4uEj4bTlFInTiM+Rqm7RGXTlMJVl7gfmcSAFT5jlvBz8xGZ/4PW7K4bhwDSPMrJTyLXuFBZYOcsnTy449APjNDP6gA+KKUSSEpdZX0aSde3uXKwFIStD6KISykrOTlPGYDFnfIykpAlR8LSTZcsv/PKf5emn3yPrxMPHz3j98isO/YG6qslI4TtVnuATg+8JBT1Wx7XqZzz+mxYpjx8/BuD169c8efLk7vbXr1/zq7/6q3ff8+bNm2/8XAiB6+vru5//yaOua+q6/hO3vx0/46I946Ra8fXmNX/84segv4W2Cm8jH3/4bV68+po0R7IHVTX0/Y7N7Q3Pzh/RuYrr/Q3JWLyXzmO7u8FVIj8NaeZwmMnXb7DTgGk7wuwZw0icpfubU8ApxYP1U8LzLTodmL1hXp9zMJ6vxg1fmP87v/fwmtdm4ODEm2K9WtLWayyJP37q+T//z/8Tp6/f0V2/Zh8HYqXRTYWtLK6uSEC/OzD8f8n7k17L1vS+E/u93Wr33mefJk509+bNy5uZZDJFqmiqgSRaECEbFsoT2RpY8EQjCRDAgUb6AIQ+gUaaGBAMaGR4YANVUMEl1cSWSyVSIEhmMpnd7aKP0+yzm9W9nQfP2ifiJlMS0zAMJGpdRNwT50Tsbq31vs/zf/7N5BmGcU7alLnspBR9yGyU4gf7DrW/oxgzF6eWZZ8oBo06/ZCi35K+/BH9FCgnxXJREwZPsa7ZdXcsiyV3/ortmw3q5jVuVbI4uyBNDUMqMaomOs/COVxZYpYL9t2ebDOq0ByGgVgpqEtGIkFBNJ5DjLiYCOmGi6LgzvcEP+H3W3TtGIY98e0X1I+/iR56Yut4/urHPNdbHi1XOBVgI+dco2RUkN9xUvSMFKjZ9llGOsxwdb6HMY/EUm0UrrQUhSLkyK7fUy9bppQoUqZZNOxv7rAz8dAYOy8QUgSllMjTQJg8/WHDsN3RH/ZM3Z6+39OPg2x6RjEOwsz3w0jwIyZFlm3NxeOHLE6WOFuh1QZnRfZr7ByEMhNNtZnJeyqToyZO4ncSx4Gp65jGnnHsGX1g9IluGsUNVFv0nJZqXEFVN5yenNI2Le3ihOX5A+rViXCslKBCzEmrRVFC2srrIdGUC6wzFDbRHzb0rkXrmslv7wMCs8rIJ3zMYzmGP74jO0oRkoTX8BU3XoTHk98xaMI40h925MJBlcQHxlhBovSMWGAwWoMCU1SYh08Ik+ftyy/le1qLgZm14pQbIlOMxykY2hi0eZcuq+dFOprEvh+pnKVtKvrRs3v5Wub6OQqpvm6o6oaiKFBaY4tyzr4pKXLEWYszVjbTxBxVoAR9YEYnDHPm01yAGAUY4n2sw5z2jcikQZFiIEyjJINmL0hGSkSfGILIU4MPRAXOFljj2B9klGTdKOm5c/6YMeJYHGfJa8xSaBbOUNcV3SgigpxFhRXnEivDrKqT4jNkUDpTOUdtS56cn1Kaglf7W6YQsUYzjEKcLZ0TuXwhI440G4m9K0nejWDkOM4E7yk9/DTuIj9WFIWiaVv67Y5x8KSsmabANByIKdIPE34YaJoF7XKNNUZOTkqzyyuSpD7sCf0OUy6ockGqE9aP5KGXTdwWuLKi7jp6P5F2nYz0tGaxWBKCuBtnrdnt9oTkicFR6rnIVuIia5wlBC+FYpAE6+BHgp/ouz373QY/jYQg47eEnKMpSKjpEYlTynCyOqGNgaHvOQwTh2HAz+NSpTSDTzgHzEVmyu+UknkuflISqwA982jIx2DCyLJtIMK3v/NtfuO3/iYozd3tNYe7HV988ZLbuy0ZhSsqiqLgcm0YyprtoeYwdHT9npzCPQ/o5zn+f1qkfPzxxzx69Ih/82/+zX1Rst1u+ff//t/zj//xPwbgr/21v8Zms+H3f//3+c3f/E0A/u2//beklPirf/Wv/lzPt+/eUtvElPcondjsb/n0y89YrVuGOPFo8Ziz9Sm3txtGP3I4HGiLhvXJCT958Rlff/KhQGujZ5omhqnn5nDNWp9ytnxAaRRLDIvNTyj8REDhtGbrRzb7DVHBoDxnRUPtam53b/BxYAyKPzK3/HfmC75f7FhUSy4vzvhg/ZTSCiHr/PwBKUdO2xPqwrAvIg9/6QPOLxsWuw25FvhezWmjAP16ZL8/4CePNo6yLFE542OgG3re3twxpcheKXbs+J4+oGxEG09ObyiWFc0H8Cg2/Eos0TuwGEk4tQ+ZUsfYQD5A05a8tB0XzjHEgbI6xUZHZzeY0pFniNmnBCETtMfZmrdF5DJPvFE9J1PPRVGSu0Hm1n3A6prOTgSVKPyAyQ2+CAyvf8Ri9Zi8+pBp+hw9TTyg4eHXvsZnr38CzPqRrGTkM1uEHRU7ZjZoM0bfG6kdN8d85DjMqIdWml9+8Mv8yqOP2YeOL96+5Vn/nFevd1yuV5BG/CSBbUKCFTm6MZppGEhDN8e8gx8OdPsNh9tZGRYjpXWE5On2O6a+Y3t9w3ZzR9/1FIXj/HRFYRGrbhRxFOOppqlxzmLVbDanNbZsUEXJNBzu3VtjCAxdx9jLnPpw6NgNA7t+5DBO9JMQQZu65GS1ol2sKGuHVQmrEjl07K9f4fs9ZXuCa1psWcM8gmgXC15++Yx+6Fk8ddxlj7IltrLst1f427e0WLphgNIR81GVIzJNNfdoVmWSElRJEKzj+fjqRnOfD/MeAfJme8urq1ectEuWwVO6kqIs0K6c82EUOokKTc8bfVFYHn74NTKJNy+ecbe7ZT9O3E2R635i7yOHfqC0CnLkfH3COE2s2xqjNR9cnnF5skSZzP5uy3rZ0o8Dn+335BCoCstidUJdNcSY2d3tsLOt+jRNaGtZLFvKoqCsaqq6pm0aCltIMnPWKJvJPiHyUWZH0XfsHTKonGY5rJiF+TBKYnKW6xCEXD2NHTlFymZBuTohDj3dfo9xVvw3UkQZaJZL/DQx+VGUa7PXhtYGZR2FE/Kn1poUI23bMo2eaZTrnxDmIEhRTSWtMFZB9NgZZYxJUTpLUxiK0tGNIwaojGbvo2QrkamMImhpFFJKxDSPBu+PI9nkaF7IV6cD79W17z4yRYwT3dvnkq6cM13fk+LI9vYWawz9ODCOnrqsadolVbucC0ghtCtrxHCsH0nTxDROYn44I7NaORprqBZLxq6nGXoWi5GuP7CoK6a5mNN6ViAi4XrOSEipKP3AFGIuaWbOElEzRRkB+2liGOVcD33HYb8lhgFSlNT0IIVJWzjKciF2+TMSFLKYyC2rhtU0sd3vuTscOExBggkj+BBJ2c0E9NkOf/4YU37nqaJQc6yHhA/2StBBayy7bmR72HN785a3V1c8vXxCUxiaqkSbgqZqIWVC7sku0FQlISbGsZ/Hj/9/QFL2+z0/+tGP7v/86aef8gd/8AecnZ3xta99jX/yT/4J/+yf/TO++c1v3kuQnzx5wt/9u38XgG9/+9v8nb/zd/iH//Af8i/+xb/Ae8/v/M7v8Pf//t//uZQ9AGEUeLPUFaUeORxGroY3xHzO+cmazXbLuj2nrgf2+53kFaTIzg+MIfLs6oplu6Q0FUVTUDiZ7SeVySVMeEpdYuyCnA8UqaCLHdvDFmsMSUVu0kA7KdxhwKXMJk/80G/5l+YzPs0jF+en/MZf+FXWdXPfWYWcqKuWzc0rtsOBURWMmy3po69x+fABBZFgg+TzTAIPJxLkRFG8g0lTlEyfEAJj8Oynjv3QMYSIqgxV6cQ91BlUzPQ6wZMln2fNVC2orjoe61PeTj1nDz/g7u0N5sWeF2cHPoqwbFvGzYFyMpi0oHCOQ7EXqVwKmKhwk8HYmps4MbUlYxE5vN1gTzOlT4TuQAyerD13tmNVtoRxR0aUJTFJnkicIiYEYnPJMP4RpMCjasV0t8HMPiA5zbkX81xaK8lxMUaIinrmAEjnN0PGSWD8HPNM7k3UpuLXHn5IbQ3r6pzLcsG5z7x9+YdEP/Lm1SvG/R3qyVO0NRJshzx2t9+SUsC4GSqeBpyBZlHfy2VlLBWZFgtxIV7WdPsF+91OAuVUot/dkH0PWXhQxsJQllRFRWktRVlSLVagvXiGhEn2ixTpdhuGYWQcDvR9z6EfOQw9wXtKDXVlaBdr1qdnrE7PqJslRbOkrJe4usEUhXgzaIPvd3g/Uq1OMa5EKcmFSUox5cSUAqgOZx3JBIrCQz/gs2ZKXtwxmX0bcoI0W/mrJGmz5Psi5N3xvuyYdwXKsbMDXt9c86dffMbD9RmPLy9piopmLCmqUiSiWhENZKMx1qBUELQsKc4fPqZsW27fvuHF9Rv+33/yE27HxPnDJ7y8+oy2qSisJXrNfj9RLlc4V/Hf/Ifv8+R0xSdPHvBqe2Db9YzRY3PkpCqp1iuqqsSWhaAPBPyxmJgVSP0YmaZBfIlG4SY1bUPhKnGGTZDTTOqdzbKOBoCZLBLfEIizrXsIwkGJZMl4AUIUMzlX1sJl8ImgR6qyoraWMM0jH63EtG321lA54ocg1uQxk1TAmEB0GldIzINxjrZt0NpSlRVv375ls9vfv9YIIo+V3EWss4QoXimLUszAdtsdbbvgcn3C2dUNdzc7iqogpIxRQr+KWTFh7u/jP3scq5N3iMosnOOY1/T+9dPdvKHbdQQf0cqhtWV385Zp6JlyJmsZBy0Wp9TNAuvc7BdyHEPKKDcOib7v8d2AKyr0jGzqWWWW50KBGPHjQBgnckw4I8iUsWLOp61F24KyqObmKlFbS6VlFOkKK7y2mW829T3d4cB2u+dmd8uLV6/o+x6SENn7cUShqWtHW5U0TUsxc42OvkIhBkJMTN7TVgXLuuR23/Hm0BNjmmXNCatn/2f1rkCUfFYpjo0190VuSpl+DPTdQF059ts9b19d8/bNK97ebjhpWsZpoHCzH5XKGK0IwF038PbmRkaQQjD7uY3c4P+LIuX3fu/3+O3f/u37Px+5Iv/gH/wD/uW//Jf803/6TzkcDvyjf/SP2Gw2/NZv/Rb/+l//63uPFIB/9a/+Fb/zO7/D3/7bfxutNX/v7/09/vk//+c/94uPPmJTyaq4wK5qXuTXvLnZkK4NfkisFys6c0ucIlVZc+iu0WhOmiWryw+43twxTYFoB4KPOOt4cvZYouOtxZIodeLkf/Vfc/js/4H6wffo9jvaqhTSUxpJKePQTIctm7Th39mX/Lduw4/VgDMFHz95yLpe0ig7w5uR6Cd225HoI+sHj1lUK8bNa3784x/SpcDl6gRDkIVpZnpnRELmrGEKgdvthskLi3vX9+x2e4YQwVraupAk11kJE0OgrRv8NKEU+BwYomb4oOYuBQ7DLWvVc6kzJ9/4kP2d49OXr/mN/ERksslJDL0z0uVpxUAmT5ku9pw8OOfDs1Nu/Ib6qqfaL6lXllpL3ofPHmuh7D2mqKhcI+RJY8GesL78GDMocpxQKjH1d4QY6Lyi3BtMeG9qnWb6QxbI31pH4QrsbAudoiziJiuOPoziR5QhgjaJsjCY/pZ06OHkFHA0Di6bktubK7abDZVRVHU5hxHOJEdkIeuvr2WBsIbgB4yz1KqV4knPm3TOlM4ymYzRAZUHdB4YOkkW9sOeqd+TQiYHcZWdmpq0bMlVCUSMsagURY7MrHKbevpuLyOecWDoR/w4wTRRKCiLkmaxYLE4oVm0lK7AGStz5pykK9biPmvrBluVJKXxQy/Kk3KOEyhKdEgsmnOs0fRakRlh6rBK0fcbhjygkkJlLQqQDIqARmPysTyZ83hmmF6EjjPacvTpPo6C3oP6Y4YxRG52G1KaWC6XtFVN09eUrrjPZSqs+L8oLUTcFBIhZeqypPrgAxanK65C5n/4w+/z/POfkIHgI3GCPN5x0lasbcHFsuaTv/JrTCFx6HuGKTDFyDTBctHSrlaUVUtRLajbFowhZSXcmRiYhpEcPNYUKDIxZIY43hdnqlHoUiIMUFJMHcePkTjbpWdSioQo4ZMphfvwtzh5Ys4zSVq8cmwthY9CclikSxePjhQDyY+YYJjGEa/l2rTGosp6LoqER3a0co8hCCpZOJxztHVNXVW4l8+4vjugg7xXn+UztlYz+SiNQOnISjGlRER4LVEl2roi5h0pZwxAkk0w5kxhLSHme0REHfG1Y3DlPagir1HiL8xPFSiwu7vm9Ysv6IdRzMesYTjsiOOsUFLS4JycntPWC6qmxRXunvtjjHgQTX3PcHNFmsTtu6gKUaT1Azlmhv2OfntHv9sTlJEC8jBw2IkNf4iRZrngZL2iVBqrI0ZlGQtaR12WlBnKqhI0WitSH4gxMA4j27s7nj37ks9fvWBMaUaNEl03sj8MojbcHlhUJYt6T1WW2NlA0s0W/DZnslY0VTV/Shof0yxRFnM+M/PqUv6zqKZWCjt7/owhUTqLDfOgTye+9bXHbF6/5MsvX4BWfPnsFeM4Sgq3jpB7wjQKLWKa6IeenPz9ff1+2fnnPX7uIuVv/a2/9Z+FbJRS/O7v/i6/+7u/+5/8O2dnZz+3cdvPOiY/8ba7Jo4v2O32TCPURuSRi7olBM+r13usKnj2+hkpBM5PLiArXFlxeqHpu47dfo9KClcUdOPAqmk5X53j80TlO8J//J/gy+8Tpx7bluiEqCuUhGJGldj4Df+D+oL/++KKz8jEbDhpa87Xp6A0Y4yEqac73OGqltXpA9rqhDhN7KY3tFXD2Aeef/Ep6fIxZ6sKXVjZJI/oAdI5amsZJ8/r6zu60ZPQlM2Sy7qirRuM0rNpk8Y5x3DYM3QHyaGImcIYclaEaBlz4OJbf4nXP/kjrsyWJ6cLxl3EjAl9yECBLzLYDG3BfspEpzERDuPE6vwxtrVsX31BtqBCoEieNlq0Pwg5VWUsCTtMbONImQxBT4RCobZ3NJ98i7C5IZEwJotSJis2/ZYPlx9SFmaWDJv7jUzMs5yYuNW1bA5H2Wo4ciGOs1axnM4qoWNmPx348Xe/y/a/+/cUn5zz5H/z22LGlibGacCHkTx4UpxmPwV1n29jtDDr/bAXcUoKmLJEuzmwLkbi2NF3ew53d/R7MeOahj1+GogxzI83W4CgUJbZOjrjS0HAlJ4JrYUoLmLyhNDjp44Qxnl2HaQzMhZTO+GNzAtWTp5hvyFOA67c42qRUQdboqsa7ao5tK/EVa0kOc+IhzFS/JkiUdVLptST80Do9ly/+ILHF0/Z7t/Su4lSG7S25KzJWTq0LDMLxPlzfo/q6NByXBSlUxYEZV47eLeANW0r44UoEfIhZ15cvSbHQFstWNYtdVFQOU1VCe9EGyVOwSFgiwJbt7Rlxd/8zrf5+sUFt9s9GfG6scCycqzqCmeNSIiNIitNPw64wvCnXzxDK81iseLB5SPW6zV1LWMcUxRgHEoJKTSGwDj0TNPEOA74/kCKnskH+nHCFCWmcKBl3KhIZG1FCTTzQRRi659n/CllJPfFaPn3xmCMmyWsoh6KShK33fEaze84QmiH0hnjErXWFEVJrKXjnrwX5CnP44LoMSphjAMipEBZGOpKTOwyzxnGiXi3Z/TiYio8DCk4rLHEEIla/HZUTjgnDs8pI6o4KzJYi5nRYJHm3qtMOI7+eA9pE67Q6HtefvbHGOuoFyeo7Al+QNsFzz/7HGUNOidcuSDFWwieom4pVDFnE400J2c4oKoaKe5mh1a0+PWMux2+H1E546yek8onxv2Ot5/9hMI6mtNLYrlkc3vLfr+l60cGn7HKopXl+vUNN2+vefTBE05PTtBqhLIWcjXgjIRkaleIoVyIRB/wk+ew23F9e8vtoSNpccE+HEa2mx0mBC7PznkwO7lrJdjuNI2Ew4gfdgxjhystTdvMGV5iT9BWFX0I7O69gL46bFUziif8FjWjKIJ4VEZRaktpNE1bsd3f8fx6YL/vaJqKq7dXhBBnErki+Mh+t6ef1ZGlK/FBRATHIuWnJ3j/peMXQt3znzosBQpPzIHClhJNvr0lnhgW7ZLL5RmLMvLy6hW7uy1D19FtDyhlSEZmp9pq1ivReVd1Swhi3zwkj1EQp8D4k58Qug5dliILJBNjRjtoR8VtG2imG56pjjsDSjsKbVi1LZUrGIaB/eaa17fXDNFjlyv0m7csLJwvWjSWhXU4pSgKx83NhrK4oFLg5k5Rz9H0IYGdFRvWVayqBVVVUhelWFlnLR13P+G9Z4yR/SBGdVkbDJnh9sDYTygl3dI2f5foI1sGrp9/j8UG/FnFTb8nHHoWznGiaxpVcTm2BDXAakldren6gcPLz3Fa05mIahX1YAXJkOAVihke7X1A2YIyJyYCZWWYbm9xu3MW7QK/v0G3DzAmsFjVDP3EwXe4pkLgXiM+KAqauuJyveDBxTmr5ZKyloC1nAMhhLlLkBwOHSWxN+WI0ontYcuLrGlLy9v/15+y2Vzz0d/8G1wuMlebEVxN9B5bOHRZCyl3hgOMs5Amxu0NthCvlBjmzmG35fr5M+6u7vCpoFmegjbsDoZDb+k7mLoRw8SyNjRNJfNpY3GVo3COqm5pTh/Qrs4p6hW2qkkpkqcDeurJ+RgfoSR7A01SAuXuN3u6XU+KCusqjC0oy4KqkrwZpTJnp2uW55dUp+e4xYJsHEUzUa4thtlFVyuapuT1ZsPbNy84vazYb96wvX7Fwid8f81m9xqzWuAss/eBeDCIRwoc3UgVx6/nL7jnic7v4lisvPsOQM6R5ckSnT3b/kDynkePHnPT7fni1QtKZVjULU1VcLpoWTYVWin6rkNraBdLGQGWNWVZ8I0Pv84Ukhh6uQIVMzHMjp8pCo9XyeZemMhJ03C6WlJbWfTrpqUoKlHg+DAXO4LgJCXKl3rZsC7XxGmg226JSd2bdU1TwNiJ0omiS9Q0GrRBKSEsphhnBYRggO8AA0nyzlnUKwTISoZpyirMPGpSGHQM5BgliTcmUkSKZ5XRovv9agDmLPcIcWIK45yDpGekUqGxnJ2fMQbP3d0OHzPDdDcnX4uKqO/9LG9W6LqSNF3vcVXJ5ANWv8vr8UHUPpV1jCFQFsVXPU/y/W/3bz8DRdVydvkRn/7Jf+Dmj/89YdwTpwPJLnn6rb/MsikZU2CzuYPoKYqSQme8N+gc0K5AKSGF1wvhc6BE0ZSB5CPEJKaPRqTIfhyY9luef/+7nD76GrFd88c//BHf+94f82ZzyxQlcboyikVhOWkXWFcRuo7Pf/IF+aMPOF2tMK6gKCtyBlvVaFugQoIQyT6QfMQPA4fdljebW7bDJIGsPnBzs6MMkadPPqBanXI7el5tX0kOl7UYjewb2qJczc1uy03Xc7ZeztyYhDGatiyJMQo3av5cU3pXlHDvHaUIUYIUC6txanacVYrHjx/yehfop0iIiaubLQopPpUyFMqJpF6bWa6fcVXJrvNMTPfP8fPv87/Ax+3tjgfrxywWK7IrOKkmXjVXvH5zw37fsTu/48NHD3j4aC2VZ1TshoFDd+B0nFifnsuCoRTLxQJjSkKK9ENHPw0UxqKmgO4mbGFIUeGUfGS2UGTt2WdPnxOXBtZIZ7RoK6y2uLlL2txd8fL1Cw4TLJ885M0wcre5pTzsWJWaRXvCRVOxqhtOT1rcomEYvZgvWeFcWO1EfkpCz4oTV1iMcdSuwCiN94muP7Db7Ljb7jj4iU7Bi26gP+wpUmLZNpgUJJ02eXyOmPohxhQsF5quu6N/EPijqzserJb8xarlKUvcmCEYlKtZLR6Rzy959cPvshoyalKMyhNV5GRRU1pHy5w4rBNTjuihB5+JC03cBrxx6MoShzv01JHKBn94i7ldo5FY9SYbYhiwdY0ylnZ9wWlZ0lQll+sljy7WnJ2vKdsCZRJTHNiOt+zHO0LyQkJUiPoiyUgCk4Atr23Jb/zaN2hcz+HmLbff+2Ns09A4w4spwugZx/H+JlZKkzWoIInDMUvScDQJP+x59ZNPefnFW7yuGY3j5eYt4/MrNrd37IeOqij58HTJ1x+doRBi5nBzYLWqcKV4ZdSLlnq5oDq9oLx4SlUvcUVFVjDtbol+7tJjJmlPQNx437y85uZmT8gaV7XYZoHSJbaoWboKtVjQ1A1qCnz24hn62XM+/MY3OLl8RNE2RB/AlbhmIfP5jJD+lGbXdTSHBNuecLVlvVjz8uoKtMWqBVaXs9z2nSW+VlaclpWaCxUpYuQDVO8pNI4LlpKxw1EfCVxcPuCX/+KvY9KE8T1j73nz6i1T37FcLnl5veH1rqO0hnVVsaxLdlOP0oYPVi1uDtd02mErMXcLeaSyJUXTkHwgeU1gIExR1AxaiRw1RIoMVSGqwqQsh2EUhGkSvkHYzqPiJOTx/eEgY5YUGWNEFxWrRUvjLHVZUBWOsB+IraIxFq1n3xWtZ2VUlsSEOUdGazWrpQzBH430BemJyjONg3BVcsa4ElfVImWfnXqtysKiSkDS9wodSCiVZysFOUcxeZGzq2o2HhQlWQ6BjKKoSk7PzshKsTscWDQVcQj4lFAxCJk2BLK1c46WE6Kl0wxJVEdGi9pI+Xks4iy6sOLxcjRp+8/01wpYnT/m1//af83Q7di8+YLd9WuSKgTVConx0HN49RIOHVY5/NjjygLtI6vzS6ZxlAGbtrMqTYpjrQ0+jKRpQOUkTuJZEKdnn32BW5zwerfnf/x3v8/n2xFVnnDjQDUNi8fnPLo84aPH59x9+SX7L59RaMU0JN4+e4F6HFBWmo9Si3LLZMiTRFJIiGAiTSO7/ZZ9PzKFgEHjR4+JiZOmYnO4Y4iecrVg7wO7/chqtaJZljSFY3my5u75MyIaP07c3B2oq2J2ls2UhaVJpZDNOSKas23/0YNKqVnaL7J6xUymVZoYFb6P3O0CWjmMCYRxIgVPSoZhHNCmkM9XSaMTUiSGKI+Jeu88/3zHL3SR8vr2ClNmVictYOgPiYvFGZfLJ3z2/DlfvHzGzfaabzz5kKoqMLni/PSS/dSzXp3gbEFVSN7LUaaaMkzeSz+hFdo68uIc7XYioQqZYRiIMRF0IobMWz3xatjiYuJEGcxJg8YyhkC/3XK4uuZ0ecEvf/wxZ9/6Oj/48gu++PIN/Y9+yIOzmnTylPZsRdzecAiJRYYxQzFr1C2WwihwLXkcydN+vsDFSGoaPTmODL1Ag3e7A9txwi5rTFXTHzydO6fbveXRoxU5jrhqQd0UXH/xErW546StKRsLsabTPe1pw3cPt/zy6oT9dYffjlRn5+zrzKurZzzIPXf9DlMtUduANVBqI063SmRvBZasBNUYxp6pgDGNuOA5GMepH0k+oiIEVTHd3lG0HhUsF6vHHHLFq2mLSpKo+fVPPuFsteD8pOVyveT0tKVZNJjCEEns+x1sMuNtx3gYxNsCuWFSMJikQQl5eas6puUHlKsV/rDBjYliWfH4ouH7X/6YRVlKZ4XMzJXRszdLIoeAcQ4fB9Luih9990/40Q9eY5qa63Hg5jDy3ZfXjFPAdx3aaWxdk60hhcBZoTi/WKPUgn7s5jBLkdGWy1PK9oR6cULVnojsVklWTBg9Uz8w+EhgoO89z758y+ZuR9YFnXL8yZev2fZfcuh2NG1LWVc8PVvx4fmax5cXPL68JI0jP/n8S56kxIMnH1C7muRHcphglvorBXHoWZ2uGQ4D3asbLg89ufP0NrC4OMNVC6yenWAVItFWGqMtTjucshhmZ9zZrI05u+foGnt//NTKpXMkTh1F4aiahtWJ4/LpBbdXG378/R9TlQWbBIP3TGlP25as2prnVxtudOZk0UoIpNPYskBlTZwOVPWaQmeCGLoSZwlvCJNwWmIiDBN+8lKIFRUhZ/b9KIVUDOKT0fXcHno2u4O4cQ4TripBKU6WZ2z7t5y1Jael44NHDzhfn1AWRizGjUVbUYGpOR5AJcnGSTEcYScyRgiPKc0JTzANBw7dnldvr3lzu+XtzQ13uz1F1eBWD1hVmrPlgvWy4eKkpTQSUVBVtXiByCROfE6UhOsZZSh1jQlzuOOcE5Ozn/kgiaIoqOuGoqyoyokxCpcKoHEao5WkPFtDXdcolURKO06URkFM7PY9i0UtBVOMWGcgh3vE7aePfP/7XNJmsYCvl6fUizWPPhbS8ugnvvju7zFe3ZD3A7kPLJuW2LTcbd/ibEndLCTTqCgkpFO6l3uVUZomUpyEw4xcq1M/sNsf2G43PNsFfvW3fpvqLnN+csL/9f/yf+b73/8j1md/nSkp2vUldbvkrmyYPn/GghFUZOgHppljlWJivL7FrS/ItQgh0jBKDEgMTNMkHKYkHBxQFGXBdhp58sETvHKsHjxiev2SH3z3+5xfPuR/+Ut/GZ8NTz/+iCWZz350oBsl4uBotq2UxRlom5KpTzPB/z1TPDW7JefZdwkpnnVKWCtjRKMNr19v6LLFulKKlyTp2DEmhnHCGAmVBAgps+96IcoqZn7kz7jR/xzHL3SRUlSG275jHwbOlydgLV/cvKK1K6q2QSnL9u6W7/3pT/jwyQdc9a/p+4EUFYt6ya998zs8PjujKR3GOaJSZK9Q2pKyzGzr1ZL1X/kb+P/wgjyNaCLZZEpb0sfIISeuwsjL/o6tiTx99IDlk0uuN3vuDh3eR4p2wcnpOcvSUUV42JYM6Yb11865eLRme/Ydnpy1TK9e0d2+pmhKYc0TyUqIjM5ZsinRQ0/2E94HpsEzEfHKEseJsRs47DoOw0DR1jy4uGQ/eb7+YMX2bsA1Z3zr0Tnbbo87fciyrnER7u62VKsKkz2eJMFlMRJV5r/vn/G/Lk6pisDObPh0+yXBec7VyF0xcXA9v6IcmshWJxa6wOqMjRldaFRhMKPCR09NzTh1xOjJVlG0J8QiEb3GaQvZs3/+A1SMVBe/ypA/p337Y57dblkul/yF73ybs5OG81XN6XrBsqlm/oZhSpHbw5ZoIlMYGcOEDyMhBKJSxKgxaLJxKByDmuhby8WDrxN3G9YPPyAvF2Rb8/TkGf0YZ+tq6S60Ei+DsN+jElhXMox7Xn3xnFcv7ihcwb6PLBdnnD9a8bob6WLGPFhIkq6r+a9+7dssDDz/kx9y94PPefzkARcPH5LjSLU8wZYLbLPCtitcs6BoFqDtvZ9BUbVU7Qmu7yFvSUk20cFvMYuSs8dP8NuJwW/JhSHXFdtk+NVHH9G0iv/4h98jxD/kO9/4Bh8+umQ/BOq7Pa5qiVHQhJyka6+riqYsKFWkLkqe/+BL+jfPufgrv0l1YSgWDq0sKgkBEyUmUEYb7Bww6JS5Dynj6IGSjxbn89hn1pi+25Dm/2dxI9VWTNWy0mgND58+YnGy5LPPnkuKQAy8fv6MVVuhETO63k/cdQfQFpTCWfFuUNELkTJF2QSyGKzZ0jHFkW67J4VA8BO7Qwe2oCoLjNEYk+m7Hc9evuHF1TXX+4EpwHqx4uvf/jUOncRplIXlerOjqlsuHjyidorF+SXoiUAijD3FWFEWJYUD0OSZCxPHQM6iqhASbRZDPkClQBw7tjcb3u46WF7w9Y9+FffsBa9/79/x5vUb6t3En+7uMErO34N1y0cPzzhtGxZVxWq1pG7aeS0BVRSSDK6c8FOU+G8QxGcl5YyaVRlKKUF0rXgG+RiFzzJzogor4XpD1+FPlizbimHs2fZBPGG0kHvHyaOtI+WMPRLh57P+/njnfd7CV1G34zcFucsK0tAxvH5F7npKLGpxxt3dFd1wIBJZrlviOGJtMTeedn6I+dqLAWbLeFEECrLRb+/QacRpx6//5n/Fk+/8Cl/+hx/w7PkXXF+9ZX16RnVyTnlyIfLybmJ9ckZ6GEi7A8PdNScXFyyWS+HuzOVYjInovUiKvRCCnbEzwV1iB8ZpxPtMP05cnJ/y4Ycf4O9G3t7est3uWJ2c8PVPvsmBglVhUNNEHkYeLht89GzHgTJqcUGeE9grZXG1nIfKCpqn0nH8k3FaUp9VzjilcNqQtSQsayL7KZKLkjF4/Djh5vc0+ZGUBzlndUNpDGVh2HX53orfWk3ycSbX/8+Ik7Je1GRj2e0GUplxlSOqPVeHG3QqcNlxcfKAfuh4fX3Dxfk5lW24ur7m7dvXfN8VjOnrPMyJpi4pXAGqELJi1GQt8zx9N2CyFA2BhEfyMAIy7+1QfK4Tp+WaJx89YfHggjh8RkHNcrVCjZG6LGm1pkLTLB/yYLWgSiN9WfLh06cs44BfnaH7A027pKkLOfFaTKlUSsTxjuhHYoaQpNPygxe/ltstYfAMPqCdY71csKobyiJRcaB8dDLHfw8kW3F5dgb9gYerUx6vz6jrGnzkTmv6foupG3SteNNf86ne4tLIy9vn+DzwwemaSlWMSQyaKtNiTSQxEnKiVx5GR1Yem2UEtgsDy+aMKXe02hKJxOwxMWBebiguz7EqM4zX1KePWFw8IWeL37xhd3fH8kHNr3zr65yc1KwWNaeLhrZwcmPNxOS6qUk54KPH5yAd4eFOukMSOSgYJZ9l0pHr7sAvn12i/DdZ/dJ32G+v4faWDx884MfPXxOjjCpSiGircUWBOT1FF5aYI3m3I8SaR4+foLTB1adUy1NShgfrU37y5jXdOFAay0cXD/jlR08wk+fRtxRv37xh7HsK5Vg+fkR7UtOuTqjaFeViQbFcYspGyI8pohSEQkykmtUJi6knYdluDqzbNa5qqHLm25cnfDd5wqqAouFRe8K3Pv6IZQiUH2s2+x37Q+TlixsexTWrZcCHSKvNV7xlrNW0bUXsDxSLUz745U+YFgaePMYV12htyOloU5/R86hHKY22Qii380hDHzkqR8VGvqenfMXALb/H/h8PHa8++4LLJ494/PQjcpoIKaCSoagqApk31xt+5aOn5HAppmaTEDoPY+Bq16F0gbJWxokqSizCLPnEe7E/zyKZtEoRp8B+u0OpxHb0lE3LalFRWc3QdWw3G3SIfHB+yTc/WGCMo3A1rqzoTEWlNPVyybe+tsBqh+93nBjDSVKoLCPjfUiM40RegNzcIp8/cgdSRAju6ZgnY3BGoydBcKps+ODkIamoSCkxNQs+evyU4eyUfpx4sGxwMdGWJT71PH/2iiujOF0t+ODJQ840uOJU5KLWyUatkQI+S3ev5RIgp2PeCwhcL9y4kGCKmZAThbaUhaNyDhOjhAf2PSfLil03sh+necSiKGaDO5Qi3xNu3417vkqYlT/PT/0VTtP9oUBnKKqas7M1ty9f40nooqSvFrIhWiEMp3FCF6XIfo+b8azukRGFjNi0OwbwZfADDy4u+eTiCblZEm62fK1t+L2Xb/j4k1/GVg2Vs3x4vmZpYBwH0maLCgGswZ2tOT2/AC3xE8QE5YIcE3kMs5BB7hGnLYWxGK1wGsYp4RTUywUuBK5+/CMeP3rKkOHi0WPOHz2laFuMH/j6ww/g7g4mT0qK1lkOkyRemzkOw1pxXy6tZgqRpioodMeQJRtMH0lhM3G+tIZKG/Z+FNKzPAhOW7rJz6qdObxw9m/qUi8Gp1biE5yzhBkls1YTVBY/mZ9zn/+FLlJykVk1JTEkdocDT+olHz94yuhhu/W8ePmGfbacrE642+/Jb244Pzvn6cMPGMJEUoEXdy/YxR1nzSlnizNcWaK0Fc8IPVI1Cwr3Cp874jQxRDFCMs5K0mYW8543J5GzasXFao0qLKu2whnHxeqE2A0URUPjody+5fL8KcW3f4suRFYXj3hU1eh9ZptHlk3BsqqpC0XMkq+hcgSfwHt0zhTZYkYFGOI0EDVMY8KHRKHlpl3XNWUGWztyXBOnLaqwWFvyzYvHXLQtfcyYEsbeY7IFIot6idZBJNjKEbznf3x9ywd5gm7iMTUfqRXaZR7rBWu1wFU13u8obcXr0FGguKoip85xZh1j4eimEULPrR5pYwajyXVNilfEfk8aDpi6QBGwTsPLDXUuSH2P05G6KvjwyQNOTmqWTc2iFJm1MMYVVYw4Z4k54ZMnpJGMB5U4DIdZPaHAQ7LgTeRmOGDOnrBqvo1uF4yf/4j9Zz9C2Yb1opTHnsleSktnb6slpSsJWXNqalaXHxOGAZ0CKJGlxinw4PSEb3/4SGay5HsL7mgS6/MVq/Mlpq6ZUmR5vpYCpakxVTOTGzUYLdeiNugcsXVF0TbUBJrhwNh1/NKv/hJf/3bBsNljVObjp0/4GwHu9h3JGB6cnXGxOmHZtPCd76AKQ32yAKPpNxuU73G2wBWljB5mtr9SUJUlbuhIPnHy5BEBz2fs8XkP1FIEKPtOuaPmxf7IR1FzHh/3dFjuiUK8j5+8l+0jsAtGKxarE1CGYRiolwtMEuXFj754zk+evUXFSFOWnH/8EbvNhu31DQDXh5GUFXVZUVcF9qBIfkRpTUoeooxVJJVWgU/kKaCzOHR2aeK6H/ilx47SaUrjWKzPeXR+iXUFzpVk7QgRQsgSVwB8M59R1A2LtsESSWFFmhJp8mAX0pUmDynPJFnhS2Wl7rt5UibNadBKCQGxLAtSCtSn5zQYYhQb83HqaVvLo1/7CyhXYssSwkjsezDCExjGjmka8GNH9BOHzQZLhqokFo66bnBlgVIZqxUhzknj926kYsImY6dIjB4fgoQWzqfUWktbV2Q/CX9rHue8vt3Sj4GqMNROiMYxSxqzTzLizFOUguC4pvMOMznWJEf1z/tIy/EnqIx1BYvFCfp0Dbd33Bw6mrIixYB2wo0b5uRjbWbSsn43cjwq+Jy2qLIAMsFPLFdnuGqJqyqytoQ48bH2nH54ymfFN9jstjxqHOdvXtHv7gh3W3zXizuwNbTnJ2K1oGeeFhqdMip6chk4UpMVIq0ubUFhjKwXRuN9wFrJ+hnHyPL2hr90fs7eFOxDollUPHlwwSJHdsMBlWZb/RgpjUbnJCnnWlNoI6Z9CQqlWNYlpbPkfiQihGGtxJpAIxlxWov1vjKWpirocxKEZ5qAJCqxKc3jIQUkkSMnyQ1y1lAVlsJauaZSZBwnrt5e/c8HSUk5oYxivao47D27w4HLtha2uFPU6wWv3rzl5tUeFeFqGPjs+ZdcXJxz+eihzOyLkjgFnm0/JZ5PrBYnFGVJ2yyoTYEeO7rv/xB9s2NSSQhg2hJTxMxyLrwYpqUHFeftik0caKqGwmQenp4y5huUc1ilafcTVfqSZbPG1AtUf0vevCD6QO0jpV2QxwmKgkopmnm+rzO4qiDrkeQzlUkwDdRFydNf+RZf/umP2D9/g9UVzjXocaSuSyrd8ujyKcp+RN0sJF8CzXAYGFWNyQNEz0Ti9PSUslO0jaGoC+mccuIPb6/pHrT89u4h61xSx5qrdCOcgzFjsqWPmgn44XRD6i1DXaPx5JgJOeCRDcCbREPBDkjjgGJkiBPNeINWCVfAFAbciw2TdqSiYDN0OLvi7KRlsahoSkc5u3jKUqoxOaOM5iKvGf3AMO0Ypz39tGOIPdEHEhJKOE6eAsXeenotpnWHZ5/Rv31FqQ0XiwasnhflSPBRuCw5iMMthtX5Q04unxBDpN/eMW43EEZS9ASdKXWFH5ntrqN4Q0xBeA1WxlM4w8nFQ5rFQub9xkqUvNLv1C45CtxuRLaojaNsWk4uLtHasb25YTzsWZ7UFEWDwXCRM369RDlL2TS4pqFarqhXa+qTE6qmRB3tyWc5vXJO/CLm0bFSUGiNDZ40jrjCEhcnbKZrkokkE1EmCFqSzX2eo1YyVjNKCXTNew2wko3hK/1wPhYq6d3GOH9Pa+m40zRh/Qhh5Ieffs71buK8bPnk6UNO25YURlZVTWobHp1IBx1SYBh6DntLDhE3c1ui94AS/lmKEhY4TkzDQM4ZUzm+fH3D6+2ex2OgcRXrxZKqLOcsHTO/Wg2FAjtzcjAoZXBGPFzKoiDEKKGGY08iEdJExTCPUTIqp3vH0xQTKYhFACFhrcUaR8izbT2WlAPkiLaOwlVUCyOmbBls2ci16Sx+GDBWMxz2QBAb9CTqihQ8mYyzjrJwgg4aKdpSRjhD+aj6QXKoIoxTxPskqkaEw5Dnc0pKFG4epRwlrRnebDtiToxRcYgKc7RfjwmdEXNNL0qR4yFU6/xeLftT3CV+elwgMuj69CGp+ILlYkGImrppaZqKQ39gjAlXtuhC46xEXQhHQp5XFD0Ws1yjncIPHcY6Th4+EolyghAVfuooXeDCVpyoC/aN47C9Y7i9EksBpYiFI8SMLh26aUmmoDAlhRIUScsFLk3IzM8iZgxGwj2NoZxztfYhMfYDpoZgLZuhQ+0srXWclRVNmtBvX3Kz2XDoOvqhJ2bx1Sr0nGxmNGVV4aygNFobQjY0dcWiKrjtRolhgDkpGSprKbRG5TijjJrJWIbkudlsGbxwljiuFe+VlkqJ4mu5WMi4PHpWTU1VExg6jQAA/wFJREFUOEpXEKPiy2fPhX/z5zx+oYsUkjDfNUCZuQ1bzKGkrmsWC9gdoCkbduOBqRuJMbBctJyenXNyckZRFaScOF2u8aFhyB0MkSq1+DxwZz0mRh7fbiB5YcUb4QiYLDBdGzSnvWE0kaGMrJ8+pHv+OXVhKdqWDx8+pFcQsmJCEzCokIibA3mzheyJWZNtjS5aYtwxTQd0NCwrw6qusUgHkjM466iWmvMHp1zvDzjT0N2+ZfvFC+rekVtDEQw2Gca9J0x76oXCOcc4RSblSCj6fse+uyEkWCxWYrKkNEXTcrI8py4LpjDSFJau2/KnP/yM7ekZi7eag5n4nr8ih0iqKx4rQ8Yx5YltHimTsPtz8sSYiWMguCwkRm3wJlNqQ6EUvQqoEEiHLUl3+NShO0fstmjTsNQNZRZIvCodpbPiiaHVXP0DyLlAQRMrThdLbpsFN5XDOkXWgcBEyJopaaoopLCDG0hVTTaGcbdj8hO2qqguztFlyX7bCYPdBVK0lHVN0bZoY0XRkBKMI2XdEA97huuXpNCTSaiU0WEi9RNqHBm9FGzJWKhaypM1xekp1XpFU1RU98moYk+ek4TdqZlsqlCYukYXBZZMXYO+KDDNit31LcP1G6brl5R1Rblc0a5WZG2xRYmrK1xhcEahcyCnAquteCnkDNbJTng8chKkYZxkZj6OmLokFiUmOxq7lEwhpVFY9CzHNbMRlNF6Vo7oe+m2+umd5n55O5q45TmlWn52s73jj773XQrrWFQNjx49pCktP/7iDc46vv3wnI8+/BBnFcEPohxBpKQnyxXj1ONHz+RHjAHvPbYoxT9IKQEtZp8K3/WQM1FlXmy3fHq9oYsZpzQuaUzKmCiyY0EXMkrFuRuPEm5pnJAPZx+UFL2ESeqMKR2QyENAZ4XVYNWcQxVnUmyIM5M3YbJIgFWW8UMEkkkkjCBzyaOyFDIohTUWnb0UeiFiVYQ4UZpj+KRCq1ryj4AYPPceJfPIgyyFUoxJ6uJ7DpEgXSHn2dU0khX4lHHOQBIExjlDzhGdI8Yohmnkbhjn+yTTTaIysXOcRGMUKWa8l5BP5Db+yojnnqc0c2J+Zved51yjsqSsWwpbsVw43IMLosk8+/wzdIyotiBmQSbs/DmoGepLIYuLMYkQB+FglCVGO9LYkW0jI5BcQVbst1t8nMhhxKqEqoRjo3Qk60xRL6jXF9TtkqIqqAtLZQsKbSkSWCeGeVIIziZ+Su6RwmiqohCyuZbRjJ7jPpzR+GlkSIEURvpuB/PnmxS40tJHyYCScd6cKWVk5C7nW5LcK2tY1g5nNSpmrFK0s9fQsqrROnHbSahh3dYMpmI/JfpxYpgkINXZAmfBKEVROtqmZnWyYn1ywvl6RVOW5DhhEVv9pDTDJDLon+f4hS5SbnZ7NmFApUCpS7a7xM31l3y0fsDjkwd8uDDUXrHRjqmF3WEn8JlSzG0DPo/cHq5oXSMhVPSMYUBNmSHu8P3E17qXnGkJM9PGEocBaxUuSlLkg2Tp94Fpe4euGlZtSZwGzk9PefToIX30DFNiP43sp0RSFTo3KKsJycsilRP73Q3gOVmtWWg4aVZUzko3riChiKaAwtKc1py/3DH1Hq0iHzx8yvRyR2llFKGyw2ghtB7urgROPnYMtiAHydwp6yXaK6qmhn3Hct1ydnqOJmAnICW+/sEHfPnmFf/T7S3/28Ul482OJYbKtkJwXFhMKECNGC+W9C5pdGHnBVJTKMOQA9FPDFjyBF71TNljNGgdGYYNQxjQuqTJHpM9OicqJzJXZw3WzGnHWqyb380SlBCMraEsLGUh3iAxTfgUmHIQ34psCEkW5HUZsGWFUpqyaTGuxCwWVBdn5KwYDhM+TITosaYBbcnMnaYyGDeblwVPuVgRx3O6t18y7u8I00j2HrImKYuul+i6RZc1pqyxi5bqRFC7Us9ZPUj2h3LmPvDsnkSojczTlVyDrlQoIwnKRb1gW9TsXz0jdrd0hy9Eul5W5HoBbQvtEsaeNKyIK2FTle0CZS2ZyDSN8hrmsUsMYYahrRQrZcUEVGVDtpAxJH0kH+qZkyLEWaPMfcrv/Wag3sH2R7KsFCbH0ULiHSMFLs8f8Je/9avsdx3D2HH96g2f7veElHn68AFPHl1SVIUYjamZO9Q0rE6WFJ3FT46pGGf+i2bf9RR1Q1H0FCGKiCJEsvcCQ/uRL9++5XvPXvJ237Nqa9ZW4HmT8zukSGsQQ2G0hhQzhABGkTTE7NG2IGpFNpCV8B9ijvixRxMprUGrPBNPA3G2ws9RnseaeVnOCU0WMnJZyPx/KkhTkM8ric25MoGsA0QjacVZvFky8hwWJ7lWWgL1rLbzSCnNSMz8K80jnRnhEUBLk3MkxowP4hbMnJ5dOovTklPjfaAwGhMT1hhG7xl9pCwcPmbGkLFGMcVIPQemTj7NHlDHAuR9EvVXy9qfLlCOA8M0B3G6usEtl4SqgTxiqhJ3tsRPI2/uNsSmYLe5ojQlzr7b9nKOM5F7xgPChO5GspUoDF20ZFuI3b4rKbQTT6u6om9Kurs7+sOB6CfQjqZucVWDsSVVU7CsC2xWFFacn22M6NJhikKK1pk8fERtrTI0RYGJCaM1ReEANftlWaw1czCmnpuZjEmJHAMhjKChbSohRM/GnwqJ3lBZ3J8l7FqxKByFlmT5yihqA9on9G7PRVtRFgWf3mxJiyUHH/EZ6qYh64G6aXj6+CmPTs8pnTQjdV1R1zWuUDSFxWpNoQQKHLxniAn09GeQsf/S8QtdpCzMCWMIHHygsIaVcwwhMfawerDivIk8ala83U1cHQacNfSh46a7IZjIKq8oq4Ku3zH2BypXYKwTRGWM2AxpGxjv9hTLmrpac3e9wccMJIY4cacCOUfaZEiHPeGwo65aenvg7PSUZVVia0nt8zGzmzriKIFtmlo2ozgR/IRxjkXRcGoc62pJvbggO4uPnsM40U2jyCPHgf1uJGknZmBFwZOnLdspUkYNVUUsCpytyRoCHp97olLYqqBqV4zbO0xMuFyQug6tIicPznj45DFWe6Y5J8QqxaKqeXpxxg82z3lRnfLEOh7qFVuVmcaAWhqUzox+4GASQVtymq28U0FKGqMdGyZMzsQAGMXU7xhCT6pKclKSbWMjRRkJKhGHDmwizSFm5j7lWN+7tgLzpqfunWHFf4IZEZiIwZNCwicZERIlW2dfTkTE5MwUBYWrMGXN6vIBedfTNQeZ508DdixxthQfDVvM1uT63ok2x0jOD3BtS+j3+KEnBJERMo9wlJmDx8oKd7KmqioZl2gNBojyXrUt7pVF95B3zlKkGEOeJgkftAZrFK6qqaqatqrobq/xfsDvN/h+zzTcYA8HTNtRnQYqErat71UuIMoL4dwAWazZc0wc3rzAZYVyFhZLBi2ZMclEspLcJJAFXkzc5PzoGdk6ng91/O/+a8hf+R3ebUOygp0tVnz97JLYBg53O/bjniufmFTibNHirMzumY3QtK2gNITGS4GYDdaJwdswTPSj53Z7R4wTlZ3HWlFm7Hf7ns/f3PD96w0vDwNDynzt4pRlWc2zeUm/JiUKlcXx9Zi3oxQpWxLCH0rvIXyZJNEM0ZO7HSZ5QR3m001K9y7QJCDMVWlOszQYdJJUaYyhKEuSs+Ryth9IMiKSiksyp7Weq3Zj5441Y61DG+ENhJjFtTqKaiNm8YZJSE5Luld4achWrPljlvsnBEKSkU/hLG1VsmxrfJDX0i4W1GRiSnxxdUs/RRo7NwtGLPhRiKmc1qxq4Sy8uT3MV8DPKE/Uu2sC3o0Cj9/SczI5lSY1NZXRhCCFVtE2rC8fMuXMQWf2x/RhO5OVUyQnUFqsAeI4glfQLHEYObcpkqaR1I9MPkjEwDThx4nkI7ZsqAtx+RaOixL0snAs1ktWdUU+9GhToEPEWoMqJc7AZw9KzsM0TjIWVsIfQSl0VkQUEWbfnFmNZo0YJhIlZiUnospoZ1iUkgiv59FOVrI+BSX8lOTnnCIFjbNUzhCijFo1mTxNKJ9oG8e6aTC153/3v/+7fNnt+fJ2w/PXt3gfWJ+c8Oj8lEUxy5FVpqpKjLLEKJEOaItn5k/F2WAz/XS5+V8+fqGLlEdnF7StY+gFTu/HkSUWnUv6KWCLhqKCB7qkblZoZ3ixe8Wm37O73XPdveVifYpWGh97tIaqLmmKGmPBM5GsZn3+lOJ2IESZJQZA+8yt9Wys52wyXJqCL6bAtNvRniyo65bTswtKBaPJGALGiO58GAL4iEkjKEUI4hVQOUvlJ+psqB99jRHL3asv2Dz/nO76Fj9NokmvK7qU6bOlLU4wFCwuF5w+/Rovfv8PyCGj4xFCDrTLGreqmNJEuTpBVzVjBh/3hGkPU0/VLnjywQe0y4qhuyHPzpU5SZT6ul1RVa/5g/6Ws/YMv4V+2GOKkmHsiDky5MgiWQkTCwldW6JWBIWQp+KBOimMtYyVRekFWC3zbJXoYiAbRZETPu3RxZqJyJj3KHV635HfH/c6Vjh25UqrOWvHoHE4KlxyjD6h0+yFE0SdcHu3Y9N5zi5WVGenlFdLuq7HHwasLajrmqnv6LXGuZJUNaQYMElSfkE6a1fVkCMqB2JhiXVFDP5eZphmtYYqCpR12GZJ2bQURgyTOBp6OUm3ZV5YZEF+n3mqMK4gTRPKCGxrEHTFLEuqqqJdLRn2O/x4fp+e7eoCXcrYR6UsKajMz5OzjBa0mQsj5sA1hc3gdwfc6QqA4CzKRLIGdEabhMoGiV+R16oyHOU86mjjOhdzzIs4SmSOX12ujmwE+bnRUBYGT2a5qnFeU5aW3g80tUOriErhWGNJiq0ytO0KomcYOxkB5kxIiaotyCqx2W2FXOi9oAcxcxgmxhjxKTNFkUx+cLqmKgpBpABilBwTJ+F18tBKUAXrhOysNSFJEJ9SWQzjkif6Dksg5oi+944BQiJGP3NRRFlDjMJ4yeIQa9Azj0GUPmgrSFZWswOtoC/Jz7LqFCEnjFGYPBcFes6xykr8Z+65P3IZ30cTJCG15qRJSUuRpRQxZ6Yo3JEYEjFlysLx4GwNQPIdTekkL4xM9JEvb3ZM87VflA7rNOPoJWtJa0EGjLk/3/ek2Ptber72M+/d48cC9901c7w9stgMixN3GAVhsE7UcO2SFEdslifISQjKZDDGkryXgjEptGuQ6K1MGnrU0GNdCa5EKYO1Bb70hDLggxf34fkcxJhQxlDVJYv1isXqBD3ziRgnTExQlVJIhihp7lHC947hfxpRmmWlRXGGeI4oZ0Eb8fXRiqRETWetxcLMw5JgMw1S5Mz3XVIJlSbSHEQ4f3Izv1LS4dMcj6ByorSK0irGqadZLvjWX/h1fv3BQ549/5z/+Mffw0cZ+xAjIUwM0yQIj84YY+aGTRFMwCgl1ziKlDKTf5dn9ec9fqGLFFfVFAtLdpFwN6EmQ+8npmmizCXr5TmYhCVxWhZk67BNweu7V+z7LaPveX01UBYObRNaZwIVIfaUtWFhGk4efgvzf/xfYP9P/w3hR9/FeyEnRQX9FMBkHqiGfU6ocWJ7dcXpw0e0zcTJ+gnKH9AqYFRE49E2YmsrEkOka1FGYVFYoixIcSK/fcvdmyt++P0/pB9HAgrrCgq02GsvS2rV4IeJu5dvyfGC9be/zcX/4a9y1+/Zvdlixp4qZVZ2h775FH3wmP4AYaJMGfTI6YM1bXHJyZPHtKcnpGmPDkHg4uCJIZAjVLbk4ekZr/trnrkFHxQVh35LLsDgMKXFDG9IlSU3JXfTQNKwGfb4NHFWrUnjgE2Q8RRDxI8bfBho1IqUwSsjqEkONMFTrC2bbo8xM8Htp7gN+diJz2ssGbQyOFvQuAWr8oyz8pKu8Khpw5AigYhPYkW9GzY8u73jG4/OKS8uebBYcvXDH3DzxZdUj56KBbmGcRBvFz90KC08DhMLMO/GTs5a0hzcJkuAnrkkAW0VpmrQzqGsxRWV8AjkTaHUsUvKZCUjOWH9y/FuQ1do4zBFRXIC9eaQUMZRoKGscEVFtT5lOuwYuz3MXb2rSrRzskBH8WYwhSVPcd4kZgB9LpIK6yidk/usqEjGokyBM9I1HRm29zUJ7yl87pEUscvWs4vq8df8Vo4TH44MTPnkpCN11lKUFdokUllQ5hVLAn7qyUxYNY809PxvlBa5bt2ysoZy2BKmET95tLGcn5/StA3jOHJ9teH29Ru6rqdyjilHrLNkJcVD4SwfrJYURtR1GrEd18rKCAxgVkTkGEVy6hzKyIaRQyKrgIoewiQckiR2bHp+DiW7ilzFIclGmZPIzfNsHhLFLU1GTAodBWHhPdJqyiKdxWmIEjaoUhKr/3kcopTEQhwdVtWxMImZLAQUQepQXyn8cxYzw2Po4RQ8vReC7dPLCy7Oz7m5uWG1bDk9XTEehnlcFLntJ7KCsrAkMt0wYq2lLO0sO5Zkd63fbUHv39nH39VP/Sx/5e+9/7cVuV6g20YQoxzRKIy2FK6gZC4AbHGv1lMRyWBLCVKSBPP5Gsy+x8ZE1HNxYjQ5BrTKaD+hZyl7Dp6s9ey3U1CUpZB2ywoTo4ykNWgfSErN68VxnNuDNqQYpGg+ZusgaBtKE8kyGmRGO1NmnCaylRRlNVebOUvz4ZyjMEZ4k9oQUyTkJI9Dvv+7zCNSq2abABRaZUqraI2lLS0hJPYkriePvb3hsy+/oN/e0a5WTETuDgcRRsTA+XpFjIlxHACRMRdWeGryVjQ+RXw88s7+/McvdJHyyeVvEPQdb/xPKOpAtSi4vR3otnc8u33NaXvKx08eg9P4kGmdYm2W2AXcaEc/7Smdw1pF7QpKa6CQ+Z+rLYuyYn2mOf13f4J7/QJiT5c7tnhWwUBSrFNBqTSHmFkMmvjihvxJz3p1yqIsMapn8eCSctEQ3j5nP3UkrYkUUsynIAWKlnwOlzK5KokvXvHyD/6YH/oNGsW6aSkXJSYodOmwiwvqxSmLxQNuPvuM55//gKub/xv1x19HL5YU2bLOG4rdAb+7Zuh6DoeeZA0kjSscl4+e0DhFYRRNXaD9QAgjaZrIXpAA8VbxWON48uAR9JH/+NkrPqo/Ydk15EmQkClPdDGzCyN36cCgFP04onNgQLrWPvec+hIMVAHwUsErU5KyQ1NRLFaUwZCCxxcTUzdiK9kWjvv/n8l/OG6SM//AuZJls+B8eUZ3csAPgSIbhkkQtzF0ZOfJRvHi7XPUr/8yWEN9uebx6QX7N8+43W3pe09VFUzjgeGwxajZKrxsyHWN0pqoDcqZmbg7j520xRQG5cqZQ+Ik80eJSsdoOzuwSsctb0EQB2OtLKTWCelh3jg0mawtpqylOJsd5rMPgEYpi9UWbQqsK3Fti9tsmKYBphEVEyZk4aegIWR0AlUURO9F+qvebWQ6QxpGXOEwTUtvDQaLUwGFIykpnO5D8ObzwJwRJOcpz7Lm+cUC78iY96yU+/cvRlLyfkWyKJuytpVsICpRVQU5jzJYP25Zat5syeKymcEWkjicknS5pyfSZftxoCotD87WXGnNqzcbvth37BLsJnF3XRWOtmnvCZb3C/u8PaqZVKo00uHeIxpZXhaZGCIpTLNxnJjaGyNEU6Uy+EhWQUx4Y5Ri5/i4xwI1HpEnGQ9pKWUlkTyL2Zqe+T85JzCyIaR7sqyC48QR4c+II4uoi2RaJsjCcetQM8qVsierJFyaGAghMo6BfvQ0TcXjy3NWbc1+o1ifLNAKhnHEOsMXb+84jEGCMbOkgasAcR4VWSv3AUqkyO8Ca786/PvpAuX4+n7WJqeUQi8WqNUS0yxEeWkkwsCVBVWaWC7a+0RwSTUP82hrbniyxBkIkFhA6bAxkfxEjhNmmsQTxFgxDjQJlJMXa6AwGqcVTish62akUQlpLkD0PWppioLoJDlaJSGqp9nCXs88Psw8BlQyntZJo62ZYZNIYk6F1rJnVc5ROFEQZSXXPikSjgq6nGfDPhnrke8vLzJQGU3tLKUxmMIxEjkkx/W2g2HPizevqBcN1mr8HJTqU2DZlpTWiI4sJUKKjBNMGiENF2LPH7wnxvBnCUb/heMXukg5WZ1hbMO6bFEKdsM1jyrPmitev9myGzw+KrQxTGES2B04jD3d2DGmgUH1VLkgG022mqwCWz+RU0b3npPDDeYPB/z2S+6YuB0HgoJgDHc68TjWtBRsGKmiZrrasPn8S775l/46pVHY9kTGPG3FZVtTbG7Y7veMIXI0TnKzSZJyltJaVucP6F5veTlOhCJjgiIpWVxwltOPv8Hpr/w61kfy7pb24QXucMfrzz5junrFttuyenDCXbLi5VBaIlpmmxHKlDk7WdEuGuqqYXVxSblYEPwg0CPiDJhiIvnA5CeqoqIsa8aLjs+/eMFt6Pml0yf0+55tN0gYH4o8eu7iDteuscYQcqQwFbkq6MeI05qQhLg4zTLunEUmaYxhCANNcYIhU6xb7KahsSdywr/Sib9bwhSyUQq0LQm+Vd2yXJ6wXu0ZhxEVM53aM6SOwUaSmccRccJnyRXBGIq6oYmePkW6z+9YLBPZD/T7LcY6chqwbSbkeG9upawVuFkBIaBTFESkKEU2PM/Ac8pzqrUiM8PzWtw/M9JtGOvQrpjdUmVryrP6AmUxdSMbUpzE10PbWRqrSEo8FbSRIEn7oMQe9ng/QPLkccKgZBGvG5JPmBmRMcYQEfJkzhkdE3masHWFWrR0CukokdCyhCLOnBDI3NuMZ30/ZvrKcdx18nvfyPmeB3PfDc/nM6aI954YvHTbhUM7SSrWpibPG13OMyKZBT1IPpKjvw+Lg4w2zD+DqRvoDz1KwUnTsGsGrq63bP1cACiNdY6iKmQExtFH4/jqBIq4D/Q7QkmII668szxzU6SAyUeIKUVUihhlsFlJoYIgLyq9/zke/889WdcYIUwmJTRlcbU/CvDlszzu5lobtBbOjTbcQ/xHxY78uyhvLCtxS03CoDnW2op073jrQyIkIc5aa7k4X9OUFqMyq0XFsq0ZB09MMj77/GpLVgrn7OxdlIlIwZKA3icKtIyRZp7LV493F4p6v7h976c/829XFWFZYlYrrJrTxrNCTyP60NEyo3tGjOvkflRSOKYkXCNryBFMXRMnD2kCbcjdAXMYSc6BFa6YtUp4akrQLZMSJieMDxA1zKIH1Y0QErlycv8bSbDWWsu9btQ9AZiUSSphnUUpQ9aC2CQSBC8IqDUi8deChpZFQWkMhX7vXsrcuyqTub+v84yi5RnFF9L03Jxog7Wzn4oreLG5hZMFUwzcvNngs+WkrkhJeEdTCgSVKJyQ/oWOEOdxexSZMvJeheQNMf68OMoveJHSVguqZs1BGVyGpWsYq4nGrCjdFSEbDjHTGs0YE10KhAJ65+nyxDiMkCIDI13RU3WFFMYpzgmq8FbdcXezZ5FgP99QzhoqU/Iwei5VQdaGL8cRQqZ+OTK93bJoTyF5gp4XFO0omhVrV1Et9ozDdna8fDdnVdZSVRWLVcv50w+4+JW/yGc/+AP+4//zv8dZcUtcP/2Q0ydPUd01fuzxd3dw6Hl08ZAPPvyEYT8y3e4x2lAuF+imJOjAmEbuui2bm2t01lx88DWWdUu5EgOxrCBGTwgjMcl8Ms8wsFMG05TEmFm0LY01/NHmBb/05JIL+4DhdsugenobGPvIVZ5YIbBwTBNOVUwkualIeBRpDEwxSIepDDjHdegYh4Fi9IR6xeruU9quwIUCEOj7zyxV761Yat4MjDEUrqSqGtq2ZbVY4McBFYWjk7wjhIh1jtX6FFW1qDl3JYVI8AN+vxWeibVAIuVAt9mCK7BGYXOQhSbluRAxmKKURdU5XFmjimJOUD4iInnmAMR5sUBCI32U+fiMzjD/yvNMXh3VaErGPShNHPyc+zL7TsySYizi7aC0qKZcgfUDcRpIxQhZYZWQB01RkaZREJkER8WI0rJRLx89pF4uiFXJ5DtkgzPzuEMWundIkMDkGiOci+Po4KfapvfwCN5tmO//VP4/TSNdt5FmQRvMZLCVpWxbnCvQRQFaCzU1JlIYifj5/PlZAiyFTspZ0IDuwHa/pR9HVFYMnedtP9LHTEQK4KjgMHmmNIkCRstnqZQV1dKM2M20HLQRPpExWiB8pQjJoJN8CjmNhORlIw4RlxPWzkVIRnggQc5/Nu8+1xngBy2pxVgDxmAQ2bBKgobkGcHh6BicE2iRCStjyP4YQzC/6CyFm5r9XoSEku9HbnkOICQrYsiMU2KaQwGH4GkWLU1To9CziVuD0ZZx6rB1xfO3N2wG4SCUs6Pt4AM+yrgrKYUzIrsVf5SvjnB/1lc/6+p59633NGHGEdenqNMdZr+XNWwaSZtrxjdvUIWlaKWJOZoHHkedZh7XkcWxNiex7Q+zK7GyjtQa+TpMaO/RKRCNno1spGlAO1FD2YByBeRE0KAWNcoJ5QAUKsxmfVZGP0eiecqiGJVidi6Q50+JPNMDsoyfCmNwdh6rzD8XblICpQmTJyY/n9N5BJu5VxNNIUhYaU6onNlN4mnili2v+olnu54njwpCHklhZFEXlEbTec80eLq+pyhFlj14Tz9OaA2lKQStU2CV+EoJATv+3KMe+AUvUlxRU5QFfjyg4oQxloziYn1OUbTcHAYyohmvq5qkNGnMrNSKwQxMccQPXgy+UiDmhEsKky26URijqMoFjYWYDvgYGDWUShHIPDYLCmQmfBIc2xwou0SxSxRz9XjcXHKMkCNaZ8qqQOuF+BX4IAzynNFWSyqoFRvltpn4+BsfMex+jVefv2B5ecnZ06coIrE7EKYeXSjJh4maeNdhU8AtKjSGbKFLHTc3VySd6PYHbl+/5eLpB7h6iSkMaRxJyhIV+K5j9IN0gjOcj864clayAJWrOWtafri54e12QzccMH2kWlt2wyRywghx9OhS5I+VtSgihZcbKYZMVpZK13gKyvYCSOg8cRkdU+iIEcptpMyW8W4A8cm8X0zvu84/AwzP26URG/u6rmkXC0Y/4tOITz0+GEIA61o++fhXcMtTjFWQEqHf071+TthuWLUzB8E6UvT4mAhaMfYH4jhgjdjjKwyurGC1wjQtqixRRYFxxeyFMC/ESpQUOUZSDMQwEfpBsoCaWgK+8izFvX9b6n4hPo6ztBO0JHQDeRxJ4wFrS/TiFOpKChVn567NSmqzKwjFJKMFFGn0M+ETSUHWM+yfIypknDGc/tI3CNPIXd8R1buRh0LIpEql4wmZkSA1FyrvnDTfpzq+X5zc8yCOm/WxWJmvO1uWtMtT8e1ISaB5a6Qw0Rpr3CwFlhFHTgaiRCGEIFJ3HzzDOBBiYBhhOBw47DtSzgQfuTp0fLrZg1LCcUFIit04MUxeum0F2SiU0VKYpDSbgenZ+9/MgX1aOsb5+7IXeKYYGSbPOE24GGmPvhXIe9ZZUH1JQtairkEUH8rINSPn275TtuWZnJvVfHlIJ6+1npEbc99gkOcgwLnxiilJEvhMmM4xcVQp3au9EK5LSCIdHb0npEhVlhL4WFYY53DWYpcLNrd385nNfHF1xzBzbVxKxADTTBx31qBQhJRng0MxODsSto/HseiQK+Wnt7X3r6Xjd47XpcI9eEq83qKnSA4R1XeEzQa/32EfXLJcnco4a5bY31+DSkEMaFvKoyXhh2mliD6ipiAk1Gkke0lTTinD6LEpzXb7ljR5QtTYlInOiQQ4F/L4M++JKZKcZNmQhGwrCLBsx1OIJJUpmJHXmcc0P+kc7DePt30kpXEusMQwkyyKrJjFKXicRoJK7z4tJZ433RjopkBMGacEeYspsx093319x80U+chZNpu3eO9p24acI5Mf6YeeYfQ0ZY0PUcJcM1TKyucS8ywv14Qsz5HSrEr7OUuVX+giJUSPj4aIJoSMJeMjWFuwXsr8/mZ3wMeE1ZrKKLIxrF2Lr07x00ifIU6RPGXifHMlq9DJYlFkbRkLzRh6JsQ51TiHy4ZDDBAUrXEsC4uZIPsEbw74XU90VmBE5yALc/oIaBttQEXSEc6cUym1FgWH0ga8pywtTz7+hOnQcfroIVVVEaZR5tRVQfJSLY8+oFMSktXMCej9wKvdlpdfPufh155wt90yjh5XVegcSSEIMXTcihOhkgF2uu+sZLafRz8vuhljLU3bcqVe8enuhl+ZzqhzIWS9KVBmw6Q1VRDUQGdHWdeM04DtI6NLBBRjCKzbGqtPaFdn9MOPsVrUD0Pw1E4RJlncOMLo9133u038ParAvLln7pctLdCoyLQNplAoCxCJKdDUCx6enhD9AMmgsqK/uWa823D+9ClrV/D2aoOuGlTwJKWYxkGcGYeBZAXit02DqhymLFCzW6RRBpO1jIHmVVdl6SRTioRpZNzdwTTRPnyEW69ko7OWI7tRZX3/fo5qIgDrnJjQhUiYBsLuVma9IaD0AwyVEDedm91BLdppSfROSeSW80ZOTCK9LB1He3oVAmQZH/X7jn3syaWdP//ZWOvYmM+jiXxEGGbVgZ7/noBbX6U7czxlSt3zEUQt825rckVJ2S5kswwJVEQXRsYeVvgM968F2ahTEDg5xsg0iZHb/tAzjCPOTITRy9PPviQvtwdijDiVRRasFEkJlK6TkBSP454jHwRtxLPG2Hfd6exfk5GNPkaZvY9+ou8HpsEzDiOFc7IxzkHHOYtPRjaKpKW8SzHhfZrNLCI2iYcMBkHlsnmvwGM2UDvK1Q1ZGZIWf5UcxWhO2SNql+S60vad/Jl3m0aeG4CU5mTgFPBxYsoRHyNFWVCXoiKrCif/ICb2Q6AksbnbseslydcaTYgJPwmiWjpLWxU4oxmzrCOuLGmqGmuu31vVhZ10vEi+oji+b0rer+Hfp5iDLhu4uCTf7oTA7Cfoe/ztLc3jx5R1NasWZ+l/PiIJAIaUIzrOz2UMuBKcl8aiP6DGEZT4ymitoCjm+1WRElJEG4h2Nsqb0bWcMjqkmQuDILo5iUnoPKIuXEHhLNtRCMgKSS8+Es7z/UeQ7pVYOoOakRxRfIk6LCZJsw4xyTgyIdLs+R6PObP3cl5JIuNXKRPIvB0DbyaPspbT0wXdfk/pChQZP450Xcduf6DzidMkCcjdKCR0r8CHiDMGZ8UxOcdAiIGs9Hur2J//+IUuUmLwDENg2/X4acQqhc1ZpFVlTeMUEc3+0IlRUZZqftW2YDROGzbuln7XM/Q93XBH9IFCRYxzVLWjnzzRaqqixmSPTRpS5i72dCnzsVlRWcM6FAQb8SpRHnrGmz3Li3NUjjN9Qi5aHUWvLoPAdzbgKWdMUljnMHYuUkzEREW7WHDx9BG2qlF+REcPOs3LyyyrJRFdFi2+zqjGoVTBNEQWFw/IqeLN89eYytK0NTpL2qs2GqsLstbEdJRlRtAZYw1pnGeZ0vqhlKZqK1Rp+F6/5a8vP6FMjp25FhVE0kSVsGWJrWs67dGu4qa/5nac0FFhlUMHz1lWNMtH1K3l7csX4mkSNYVzNLol6IjKGk8kZ/uuq9b6vuM+HkcZ5f3nkeIs45VwwZQSMUSi94TgCVH4DtvrNyyUR5UN+82Oux9/n2ZVUJ0+ICoobjdga0KYZPaPBA4q4U2LtPfsDNMuyfMYQlk7O0jOaHp6VzjlEPBhZNhuCfsDq8dPqB8+RruCnMKs+MqyEDF3tulYpCTIsvEUVY1KClvUmBTpX32G31+DtRQnp7PJmXonB57Rh2wy2Viy35P9JOjBNIqttxFjtJwS2JI4jGx2d0zNzDUBvtrDatlQsvAmJPrnHXR93ESOKJL8X95SVu/O1z0a8B4yY43BFgU+ZZl0aNBOVCFHu33Zq6V7TEnugZwEpQopMowju67HB49RzJJg4Wi8PXS8PYy0VvPN0xMenp/y4dmK3X7kP3z6nAJHzhqSoKApSQaKfDbqvpOVjUPGLDFGYgyEKAhK13Vi/50zJkNpZcymjCQw6jxfQ8ISnmXC0pXmLAqULkdwWQz+mL1mlJk3qyhFy3ufcc5JTPlCkD+DNEDzmC5hIOZ7JOf+3kH4LzmIr8VxIw4xMh2TerUWheGMHqms2e46xq6naBzbYSJmMV2MKeG9jGhLa1i2JYtFM9ffYuVQ1eLvo7+CpOSfPemZj6NQ/f3jK1iq1uTFAu3sHDHgCZtb+pevSBdnPPjkG/OYh/tRWfYBlTW6EL8UCifPkMTtNVeVnJv5njJ+FMO+PHNZciIbJ2uS0eIRMhwkfdgaQaWDFxTZqDmTC5JBJMhR3H+bqqYta3bTyGEc6IdMdumeHKu0XI9KyRpxHx8xRywwE/uTluI1BlHeJDcjaPNaEmLEx8xhzqtyCnQUsvSD8zV/9HpDILNqay5OVyyahsIVpJQYpolxmDiME0o7yc3rO7b9gfVyBWQZ3xsl0R9JcnuCP8rjf/6Bzy90kXIYDhRz9kZI4oinUsC6CqcdhkhdVYSkmcZRpFYp4HTA5ExlLMtywaHs2e22vHg7cdffkHSiHpdUucWkAr8ONIsWux8pdMRmRVOUNFoxhUQZDCprsgaXYNElNn/0fdaf/HWsPnYG8wabgvAQpmle0CIhCmnNWRlNaedkDp0tSnt0jlRNK9/zsqCJr0IUx8owzWTUjC5AFQXZJMbuwIOPntKuPqTf7Gg+/UNcUdAsCgyBqDKuaVBKMU0d49Bxb1DmZ2v02bwqBoFoM0LqaozjSg/oukBHxxg9XQ5MZMqsKI1FOQOFI5YFV7stn9Nj65qvUVNli/OGfLbGT1dsD28JVhKmP3zwBDUuCfbAOE5i+JYL8Wk4kr2Yuwj1DmGRTUsKlOOvEIO4xvqRnLyoFhAOwKtXL/nRZ19wohVdfM3u7pb93Rva9ddIPtBvb4l3N6hlK4uyNYQ+kkrQSYHV6Loiu4LsZDSklBC10+yBIeRcISRGMnEame7uiIcDrqypzy/QpkTkyqIwuCcFp4giSceVxbiJHMU1uCjQbiG25LZgvH5DHLewE8TDLZeYqkY5Ny9uWky0lCIFL11yN2BKJ6OGMJGUmMXZQhREMWViWZKRSAlmVQTMCIp8MdvDZ/n6OKI6HvMOcvx39988FigcgSZxOM3qCDsdZaIRVBbb+Zlno+bqQCGokIwp5kdSmZAyU4oMIRBSIKTMGCJpmgjTxG4Y+fS2pzCWv/ntj/i1b3xM2zaURvHq9Zbnb7YsTInLBsc8QvEZZQU+0nORpM0RGZGuOM7Fr/cer2Ca5sC9Oa/JFrPPilGznDTNNZnA+uQ8FwizeInEOAbiRhCsoioxJmOMk0JljuY4vm+lmS0MEjnN6JY10mnnIyaUOMo/7seK83nMM2pjZn+WFIQ8qzMY48Q0TYFFxg8peMaup7KKN9s9z2+2UijOj2mUprCKqnScLBvKqmT0ERWSGJLN46efuW29h6D8WRTuP1PFALquCSaTh14Q7LKEpNm8uXr377UoovKskMoK0iz5TkcZeBaJOYjZY0gJqyAWlai55p9JjTmjG8zrUfCEMEGuSMNIHiZy1QATypQYZ1FxLnpTwFpDXVU0dUPjBzo/MXq5rpyRwtOANB/yrFJkwYxczmRgI3lO0XtiCuScCIMXGfJ8rRkEVRnGCavEv8SQeXyypK0KduOI1ZqzdcvXHl5QNy2FK7nd7Zl8ZArCUzJW0Q0jw3AQxVCUX0K70TPqN6/ZUuaRkuFnn/D/9PELXaS8vX3GabMiJrFWTgpQmikElPdydVtL2UBWiug1JRmdAk1ZyomqPEPd0C1aCpX5dJJFpqLkpDjhbLXC/tVvY8Y3rH7/vyVOUVw4AySVObENrVJs/YBF4ulXqmD3w0+Zrr6DOi3f2XYHT4gTcRoIXlxdQ8r4JB4tupQNQluLMcUsK7SSiWIUWWu0AzCkECU0LwQxWIqCFGkFMRywuqRcNgzTnm7zGd3djvMHpyzOzqicIRPQ1hCyx4+jSDitFYj4uKnMrPswTcSsmbwnxIgrCs5cRTcceKvf0oyWfTVww8SdSnynWrC0JZpAu1zQhY6dH8lG8/HylCIYyljiioryZMHVl3/EPnZk61g0DynLxyQs2Qe6uGWKIzlnMU+KFmfNPaJyHIYAX7H3TkkQq8lPTNPAOHVMfpRFMctG4+PAdz//CR+cnaK7W0mKtUpSk18+Z//2iusXX1I8vGBxcYbRhlTIRhpSxqqCFEEFZu6RjBFQijhOEBLaWuE1zMhZ6HtC1xF9wDUalSJ57GfCrBQ6RLE95yhNlZLhXrXiYyST0W6Bq5e4RUuxPGd4c0s83M3dpvgDmVzOELPwdDCKoeuIyROHkZhFJi0vL2IocEWNnwa0sQSV52JLibxYz2MP0UbKiAolkBHmHVTP/O37/eS9fvfIb8nHAnN+f2SBrBFORoiyEILM7IV9Mvt/RO7TgvO8QEs43qyyinlGZzQhBLqu47Dbc3UYuDoMbMfEX/r6Iz65fEClDBUGmzSFUpy3FZWz4kmEwokT0Hsdv0KsnMP8J0VWgqJM00hUam48JAk2IpwX5lGVsQ7lSrLWpGki+SCc6pkXhwatxYJea4MPie3dnlZpyiLPBosWrQuAe/MupWZsNUPWx5GQwDWzankePUhBfyz2j0jpkah9HPn6mIQfQcZqGWP6SdKaVdZM44SzhrfbgT/68g370WOymIqlLPkwbWkl18lIRy0+IfNoLSfC5N9l93z1KiEjWN39ODfLdWGOyNHxff/UvqBcgVm0xKsNZrVm+dEnVCcPCI/PCcNIVTUzKibvO2lmbxnIMaKVjPmFUyhmliGDDZ5YtTBN4EdBa2eULDN/xgqyEtM1U1czEVbGeTYGqCp0KeaKaRzmfCcxlSvKgrqpqcYS11m60TP5idIZalVgtLkvTt6NgdX9/SSoopeE6ZzwOc1fz+f42OSR2U1SBOUYcQoumopPHj/gD15dM4wTCc2iqVidnJNVSYyaoRfn5n4YICemaWKvFMFP1EU5N4oisXZmjjtICZ2l6FVGUbj0nmLrz3f8QhcpN5vXIqnUQixTal7GgmcCQR6MRSsJdUJJfkKpQEVxzPPjSGhreu9pSsdq0XK72VA3LafrC84uz2g/v8F8/gfkfkNIAYW4S54UC2xSRPy8cMhNaJXi7s0Vt9//lPPf+CWI0hnlMOH9xOQn6bZiYIxiMFY4g3UrXFGilZWAPqXnEZWYBIWkxf3SGGJSsweF+B/ELGTXkKLMo9EiE80jKXjaZY398NFcecdZ5qoYDnuUk1TnMAo0TeXmQENht4cM/eEgxZOzFNryjfWaux38JF7zF4oLqgijgewMHy7WLFJBHCeSS3SHO2605/9D3n/F2rald73or6UeRppppR2rdlW5oouy8TGugkOQhWzdyxt+uxIYiSerbAnMAwLxQBBY8MKT4QmZJwsJCYRkECKIcAEjjn2Irhx2WnuFuWYYqaeW7sPXxlhrV5Vxbc69VyqdLq0w5xxzzjFGb7237/t//7Bs5yxjhc01KIdzMF29zbPb99ilxIVecOfiDbJfYfLIaAJXdsMm7InpgnEK1FWgshatpDs8TKnlAhHI3YeA9xOjHxnGnmHYM00j3gdSUGgc1mSyDTy6fIcvvXuPj5ysmMaJPI1sbteM25Hd1Q3Pnlxhk2Jx/56cY2Px1pCGPURHNfVUwx5dy1qj5GikFEneo4JsNDkrQc/GkTwJohOjp7t8IjNhq9F1Q86ZMHRlI4A0DjIuqBxKZXzfS6K0TSWsrqJerLCrE8z+LqHfkqJHxZFpl7FpLpC1D2AsqjKk6GV2nSOx61FNA056VquLZNRPCPYzFqRCNhK5GR/0J4ULgZJANFXs1A8d+gEtOdxQy82phK4KelL+pCzjrEOIXzoYmunCc6GoUaQ2kvf5mDGjDjQNDpZw4pQKSRl673l4tebtqw3byTNGkY+//ewWG7/Jg/MlL1+cs2xmPL65JRclmcpgs8KU35kPiLkVBcyhmM9aCSo6TcIlcBUpROEjoErWity8s9Yoa7FNQzSWpAwqDzJ6y4KGmOJ7kYqqS2uDnyL7fU/MDbWJaOWxNmFLPIPOqfQUL6hdisxW/AvSc0VZVqSQUKnUlmhyDsUGPhOCoI8+i5rxSApG+D4pBCJSYDy93fF/vvWE226kKjyMSmd8AqPl7NaVxVhBwQDaWYVRmn0Q3suLRcphhAaHyWA+FiQyPs3PUT1dKNzfuelpQ1rMMds9dT3DmAr3qZpsDFdvfpu8CKimlrWXDohIKa+VLuvouKBkFD95cA0+ZZiG0pPImj6uVSvoTAxevFH2IxDIfScS70WFMRW2mWMWc/y+QzuxsbfWoJ3DuorGVbTO0VvPPgTCOGGdwaZUOFAUmTi8AFWWF2+ORf7Bl0ZG4IfIg0wIkXU3ME6BuVbcndV85P5d+gxXt1sxsQRWJydkK9YR/faWXbdlmiZUzlTW0E+BcRS0SitVCO7yO6KfSFbGi+LoHhn8RD+G45jq+z1+oIuUp7ePyZUQyiwVra6pTE0yjspYrLUYV4PWWGSmnbQGY6mVuEMya8hKMYVINWtpFi2L0wVRK6pZzTT2hN/6Mvbpt5lIeBVpjaOxNTon/BTRVuGzdBwuZPIQWFSZR//tayw/co/ciFKI6PHTxOAnsZlOgSmLHKyxmrppkZpTnA8JAZcVydY4V5NDlC5CK0L26CC20kJQE1dBKyA4IYhsVmktDHoixsGsWWKNJeWJGCUPJqdAihJnTyE+Ga2YMkzdyBg8aIVzgu7UTct8MefL+TEVOz7T3mWezpi85Tw5VrqhCtCHiWnacjNs2brMJ9WCenKkEGmrgdvLbzEMW3apYzKW08V9rD3DmgVxt2e7f8abac3izik+RLa7DmvETlu/yHEoBMyUkig6hoFdt2Wz27Dvd+y7PV3fMQ0T0WdyMuRsyw0o8D++9SXiqz/ES6dLrHFMaMZu4nbfczkFnn3zXV75zCdoDw6Kyki3mCJKVXKj7XuoKrKW+b3MnaW7mvruqKRIkxDltK0I48h2/RZhGsW62hlUSsQCU+uciaN0bK6RddwPPdFaxjwx7fcs6orT1V3mL32M6sErcHNFjlMpYCNx7EjBkPYdWIdqGwm/Cx6MloC64FHOEqbA1Te+zcWrd9k+ecTpSy+JxDbKGEAdPFuQ1NWD34ZR8lUo+R9l/HDo+gRWPxQvL37+8HEpUAphGKQYSkrk0jofxkGH31I4IsfCCQ6BoYcCKabMGBP95Lne9by73tPHxOliTu00rsgxv3q15ktPrqnM28xnNf3gef3sHJ8iUR28PUSxJghHGUAoRSpuqTEFfAiM0yhky1ys6mMklrwYpQw+Z8YYcTGhg8cPgyAalOpHlWRhJSGDISUpVpVY0w/bjgQMiDdF7SJV1eJchTnUgEoeX7iV5d9cCMWJpDMpi+9GpmxcB6pAQSpCEkdtGaiV4kKBD4kxBN558ozoPY9vt7x1dcumG1jWVooNBcporBIRg8uKxll0jMSkMdbgqqqQKyUR2hw32O/gmb3wvwO/yRhbir/v9bjnR1qewPWNjP82a1x7jnIVs/mSPBXCsjJkjXDcDqfAGlI+WN/I69fDQHQ10XsIQr42WhOVlkJQCSFeBRm/p2EU47w84IxDDR61WlDN5tiqwi4WmNmMrAu3SZUGxfagRDlmjKPSllFpeh/YdwNuYTD6MN7jiEgchqZJKaLWxQVWuE2eJITVUt/HlBgnz24QT5P7pye8fnbKyXzO29c3kqRSUNez0xXjFJimiXHs2O13x9ymVTOD1EvKeMlLOxAbJj8wTQGlBUUEhQ+RfhzpJlGyfpDjB7pIebx+yN5sqGyNyyI/rtWMk/qc02ZFWzU4Nwk0ao3IQktgmHOOWoPRjeQLeI8lUqvMzIicrJ45zvyIUw6lK3zcY52FrCX5UtUs3QJdJH2aTFVOyAz4+rff5v6bT2hfOxNSa4YwiQXylKRYCVlcA+uqop6fic4+Ckybg4xzSGKVbLWRQiIiN68o6Zax0Xi/YRomsPL6wuRxtaI+GImRqdsG6xSRiRBGlKlAQ/IRrcEYfYRqY0oEH/FTFDhvdYJCSHVZK9Y58LW0556ZE5RhUi1oxcerO1TBcd3d0M4ND8ctOcOrec5LYUG9aFlvLum2Nww+AJExRy6qU2bVOZYFGej7K9ZpyyxpmvqMYdrz9Nk1WuUjcdI58ac4dDMhRLq+Y7275Xp9xc3umvXulu1+Sz90jJN4wIRYQttQpKzY9Vv+yzf+O2+v7nBnec7cVsRhy9PLp7y3vuLdh2t+9MkNb7x6FzIEPzJMAyplqtqScyT5QVQCuthVJyU3QyuQfAxB/BSUwlQ1Rs/ptmseff2rPHn7Pb71zlM2U+DkYsbrr59y1jS0VtZtVqB3Wtw/p4nN7Z6vf+mrtLOGz/yuT2F2gdndj+LOZqAgDrvC4zBHG/xc0o6zH2Vz0gqtHVrZQpYNhC7x7n/9Da6/WXH/9Q9LR0Qm6Vy4MQEShRQrBIisUxlnmtKJpmPXLcVIKVDy8275OVSdC39BHzdYkOIhHYsXXbr/UBCO4j7M8/HEwak1x1RIgZHRB0YfGAbPFCRR9ne9epc/9f/6f1K1DZvLNdvbW54+u+bJzZZ3r9d8/dENYzexWGT6fk9VVVQFraxVXczasiASWhPLmMn7KDLMhHANkODHPE0MKVI3LeYgV88TBnP0b4nkkrlSjMZ0UfFoiwoiqVYpEbIgIU5ZUox0wySF4YHrYxwHJa0qpFcx75K1Hou8PEfEhj9nKWLKex2TjFNjDKUDTygMrRNPoRATU4w8ub7lG+88ZAryPhsFMyvck2GS+1Io46JY1krKEIM0c2H0hJDBaEKUhiIULsiLx/NyRR2BuecTHvX+R74gAToQiO3pHaaba/S+J+62+MUMox2uneFzJof8XHYfo/B7Sh4WSWT6OWeYRnJViV/O2KOVyI1TGQNlWxOi0AtiiIQwEIeBnDVZV9jFErNcoRonKFUM+GEQ7lGQIjZpS9CGqJQgDiGQMLhSqAxpYJrEO8gZfSzYDtO5A/IYY+FgZTFbTEqKr8P5D2V8101ip3A2a3jjlZc5m83JfmI9yP1RohY0jbOE6IGISomh79HaiUN5XeFD4JDSbbQTg7fRM04d/TRQVzOmwqtRZMYp0Ici3f4Axw90kaJVZrvbEeNGwr+sJcQrrrpLTptzztsL5vWCxjZUrqbKCau0WFkri3GGxhicljGF1onaGZZVg9KaZlbT+gH92iuk9l3sXpN9JrvMarmkUTWmQKfYTKMVVbnJugRn68TT//ZtXr84JTZZXDRVYNKRLkSGILrx1iWRr1YzsLWQtZQla0dWJb8jgg6TzIZdRU6i7tA5obGEmJn6Ed+PEvJkFNYp6QJTlAUdPSoHsLVU/tHLc21mhfU9lQo8Enxk7EZiHLFNhVaFDEpkzBNvbW8ZY6JSFqUNvdpzP7f80PIVttdXvBnWvBHmPA4dd5slH/ILzucrdsOaZ/1aFqoBkzTGVdyp79CqljxEstqzHa6Y0sRcVdxuRsbZxOPLZxgCKXpCWNHOWqpiN59iZBxHNts1l9dPeXb7hJv1Jev1NftuQz/2hBBIIROzEJZjjKSYyQSGPNL1HW++/W3G3uOHkTGMhBh49GTDW+9d8sarDwQ90YkQPNvdjnpW0TR14UGIa6WOEWXkRpYmMVAjyIWKEZ8RWzdgLd7O+fa7j3lytQarWL91w+b2Geenc15etdhKk7XF1g1V1TCMgUcPr1H1nMXJimkXWLzxUZqzM/HyqCtITgIigefbuSgPyAk/jWijxQ3TVuL1AfjtltdeuUt9umB2dsrTd95jmE1gStqvimQtTq6qeHbo5zuHoCfquWJNZv6HQuWFjeW4p6iSFiw3RqXM0e7fKElVzvmFQqSMVCnhevkAsxf/hRCfj/tGHxiHgWmacM7QVg0XleVsZmnvPaBCM1OJOnjOjeOV+YyPnZ9we7vh6tnA9mZNZWusLFMq7cQgDUUKWQo2nclaMcXAOI7iYp+LyZtSLNuWq6eXrHd7qmaObhwTIyEkKmPRBwVNuT5lbCZjau1qQXFyEr6QsSxWK+qmlbdv3DOMvYxisgInKeGHQkWKKdmAD+qnnKTASl4QrFTQlRAiPk746AkxMIXIMEVCyhijyBiiF47K1e2G/TgJ/w1wRtPWjhDF4+eAasYkw7sIhQCacSGKF4jyaOMkYVpZnrNQ1HFxfG9y7IuDoPd/5ju/qq2DO/fpb7+BvncXfXqByRFVlaJr8ujWFusHXbxHtDRthdumlIKqIkUvTtIxFIm3IEIxGUGPYhTxQhSJr57NROAQI3maiEoRu1EalbxhGgeq+YLsI0o7stKS1L3bs92uud3smGIU0YIpo9SYiD6SGyEaq4PAQVGSuAsnpUQRxPIaMkIERonxIF4eP68tF+2cVTtn1s7YxYgPCVdVqJBoZw2r0xXGKcSwWBD7xoqKLxJRKkm+l9L44JlCJqbANHn5XJwYvS9FiqzTGD8YHwV+wIuUykgU9VhBchnjFK1xGDLePONpuqb1c1bxLk1YsUgnHAhOGrCmpjIy/jFGU+cGnRN1sSR3bU1dO6Y33iDf/zrx6iEWUfbUpkYlDUFmzaYxNKMphLCMDnDXON76xtu89umPoi9mdHakUz1dTOy8p9ttxJCpsfjRE8YOV8/JCAyvTUVCIsE1CaeMqEpCwrmGbKzwDFwA5VCT5+E7b2GaBlvLeChohTIZo+2xqw8plLhyIzI5rSQ7IkgnGlNm6kb81JM0zGrp0EOOjN5ztdvxtN9z1rS8tDyDMBH2t3zaXLCwM74xfpNYQ+8nrrXno7olRXCV4+nVLc/iwLmpqZUmRmjqhuViAYPBnjR02zfxaos2hsondt2eYfR8+90nbLYb7l7fcPf8lLOzU2Ztg7WGECb2/Z7N5prLm6fcrJ+w3lyz324Ypl5GPVMkhSzy45gJPuEnX9x1UzEFy4zeM02eXR+5vLlBkfn6O+/xB3/P5wSOz4FmNmOz3zP2HX4xL7lsMtPXOqEO6Jo2somoJMRJV2Fdi3ENNYlXP/c5bq5v4be+RPQjop5SGGXYxECdJnJ2LFSNWZzQLCyvLM/Z395ip8DFR36U1Sc+gZo1oLREuOdGCJlFdphiCRHMiqQS0Y/4SaGbCquF00WGJ4+eMesH3L37vPPmQ/qmwi6cFMzKkNGFK1PsxovZ1eFfpRQm6xJbX473yVwTBwlpLq2xqLN08fc5oCTC45HnlY+PExv6g8Q8kXUh0CaRhXs/MQWR//Z+EmdZrdExsYqZ6XrH5vEl9f2XmfZrnrzzJm++c8lXn2x4a9dzOwX6KdD7yKe15UdnC1wZG2s/4ZXCqUr4CXi0qwTdCiODHzG1yFLFUCtTNw33X77HOI34IMF7XfAMk6C71mic0YRxYuoHTFUDUnQ7N1JVJVKhblguluK0W0YdWmv6IeN9wMjOIy7C+uAsKms6RfF/ysj/D1lLOclal8TakquCKA3FL0pJwHNyYvCnS8ig94dpA0ZB7bTkYflYMmfkDMZUDOeUYgyJKUoDWBuNThoVIpWrit3C+83cfqcjFx6GKn8f6t/nQyP5vfXpOdPFHdrTC3TKMAwoHVEEUpggHaIqlHjnlPFjCh5lBO0RnqMi5UC0xffKGoL30nQkQV5QoCuLmS0xtkYPnnC7YXf1lMl7bm9vyUZzfuc+VYi0KJHFK8MUAn3Xs9msuby+ZrPf4WOQVOlS9OaStyN4vSpE9gOakoWjY508No4yzFMCuqcjslkI91px2tQsG4cqUQjZGlzbEqaENpkf+fTH+OjHPkk2Fl1l+t3AcjFntrwLfuRmvS2jKuiHnn4aCVGK9qZZYV2DcnOaRYXSThq2HInDBOq/fqDz/QNdpPRpJGlDg2PpGiprqStHpR21lZORgsXHDX3sCGoiarlZkGW+bI1G6SRSYWNxdYuxiZSk+EBr9uM1+tm7+ClSu4raiWRUa1GapOyxg2GWJak0aul+bEhcbtfsv/I2Z59+nd18z95mhgTTKKOc7Ae63HB7c83Z+SWumlHNVuKmGZJcKNZibUOuNco0JCXTf+loHa5JLFyDVprHjx+y2W1Y5RMZ82iF08XpsECEqkjushLCYQqTwL0piErIJ/qxB6c4WZxD1qK3z4ntfs+7l5e0zvLJV1/hVb9geNpDF3l5fsp+d8k2bHlQuolFdNxRTdm0R55OWxkf6ExWiawsMzsjdAk1n4Od6PpLrLPYCaJzGAX9sOXNt97jsrG8aQ3nJzNeeekOdy9OaGcVMXr6Yc96e8PN9pLt9pq+3zGOIz4IFyiFSEpCBvY+EkYxm8oxC1E5JcIY6fYDfT9xsxuZvMz/v/7tt+j2PfVqRsqa2WJOHCf6fqKdPCkWmSZiea+zOHpGkri/KrHeNvMlVTNDK0OMkdXFHT77kz/JSx96nUff+DLXl8/Y7TNxhN008DgkZssO16yojQbbULcL5ucXnM1OePkzn6FazUHZMsvWSD+nwAtB9iD/Uxqil/BIjCP5AHUjLqkp85++9A3+3//yX3H/pft8+nOf5HO/93MoZYvsUWOExVpGM883CQXFZ1ZIcoc5+wGVP/BPvnNDKUyDAl/rMkaSUZIiFYmqjJRSFAJtLoXOgWEZkxfzNj8yTCP96OlGUS4oNMZkfBjZmohX8C9+8+vYdx7z5S+9yVtPbrjqPV2CKckNXZct8MvbWx50O9qmpao89Hvq6ImxxliDshqTAiF5hjCKK215rRRCr1Gi2mhaTUOWDlYpdv3I7XpH6CYZGSrL6dk9Tu/fF5J1DKQ4lXuUmJ6ZEmSolChejHWoes4w7vFhKri/eOCowt0RkEkKE1G6HoiN6bm6J2Xx9SjFbCaK3DUErDYEJCU4hiDusyEc+Q0oxegDIZTRRwKfpACNWRDlyUeqMv4ZfMAMHmMMzjmUngpN6YCB5BfBlPcdGQ7hzMdqpFBGXyhO3o/CKK2Zv/Y63G7QQyebdDeJt1nwpGAxyJrCFMO0I/kzkr0o3DKC1OYocQNE8fzIJfdHG0vWiLts3eKwmMah2sD63Uc8/tabvPXOW1TtHPvpyFJnaSStYxwnNje3XF0+5snVM57erll3eyDRVDUpCoJlDlwoCkn8eP2U86uFbxKIxCwj+1DQFLSSwMsYy4jQMK8qZq4ix8gUoowuraXzE68/OOMP/sTv5uTsDttessuiUpyd36Wa32F/e4V2mqVdME4T692OruuI2VC3ZwSW6PoE1d4hubm4Xitw1uF8hzb/nBim73uf/4EuUgiZmCP7IMF19cxhkZRZsiVHTbaJZANJwY16wn7oWI538D4Xq/pEaqXAMQqUtrJItfAVxpzZzixNDaYyLOZLbDUnDhE/jSgMziiUtjReou2fqZF7SZQaSwxP332H+iP3GU8tIXj8OMHoqZOSxT7suLqumK+eUM1OjlkR5EBK5RJs2iMBKmbw44QPQbT4yRPGkWHoGVE8ub4mJ1hJSyG5Ljodb6RSnRcmeoacEj4mfBCkZL/bE3NicXomXIOUmGKm6wYeP3nKMHneePkBH0kzmm+O+N3EWXvKrK74z7t36HXktfkF02bPKxoqNK2Dzf6aSzNyL7YkBSFmgjLUtiF7jTk7ZRwf0axO8FcD+IE7dcXXxw3TOPHee0+wzpK8Z1Flnjxc8urLdzg7W6BUxOeO/XjLftjQD3uxg46J4AOphBimlPEh472Yu0kaqCInRQqKoQvcrke6UZQNWRlChsc3G955dMXZciG8oByZrVb0+46hG1Bz6XAsSgow4DC7SCmi6oZUtxhnZVShFGiDqRqWp+e4j3+c+XzOs/feZbO+ZRgDu9tbxtuKza1nNYOTO4nVWcvqzj2a+ZK6mYvqx1goRatk8BTbdmXIKoHWKIQ7o5Lc3HRlCdMEyI05Znh085Rv3l7xmMhHPv8ZkfQjjrlK62PE/FGifuhmDzLQo/OpFrdcmWHw4s2Vw3cVNPPYFRYuwaE7O+bQxDImk6FQ+RnlJhwj8YCg+InRT5Ih4sWArK4qun7PmCPegjKa33hyw2/8xleZfMQgHi+pFE+HkimT2YwTb21uePn0jFmM5CEU0y9IyWKUJUoUJ1EnjLGEdChQZLNNSgy7tDGCMmhDbQyz5SmnZxfstiJFn83mNO2CqqqkCKks5LqEF+ojMpBL16tK8ICxjirP6PZrQNRBJoiFgKgNBXU5xG5IiB0y/ikbWVa5ICWggpJCKCcJB41glHgjhZQZJgkRPBwiUy7rCUF3DkIdoxXWyvqPB2UJSCGVxUHYaAm2/H6OQ+3yQlkLx8/l7/js83VmXEVoG3IMRDcKByhGQr8FMnqxFNVVmMRjpPxM2RsAY4u/VYRwiA3IqMrIuB2xfjC6FnQpJGz0ZGNwizmL+/e4i2X+0ku0Z6c0qxloReh2qGqO94H1zQ2Pnjzm2c0tY/CiFsOwDxGVMrZytFZ4i0YZ4VUW9BJUIeCKhDopcVXnBd8W4YBIcVJIKtRK07jqaNmQEwwhUjvF7//xT3Pv3l1I4FyNs4Hl6gx0jY+a3o+ElKhsRYiR0Q+MYQJVk33G60hsLZqKlC0qGZw1VNphbPweZ+p/fvxAFylWC1ks6ITXiW0e6KZJPDicIRukCk2OuZqjlWI3bRiyl+RPhZCnUNRVxhldmMq6+BYocsykxYJ0ccLy6UCjW3Q27PqtyIprYe5bZ3HBApkdnjNVoWLmBMP6ZGLWjExmRQieXJJqp30QgqWa2O5uefi4olmccK9cHKFIWQOaMAgSECaPj56++LmEKBvtGAKX62u++e7bXD5bc/n0lo+8/hr3OSejqKiKY2cuoXn56FqYUsRPQWDHQWanq7NTjLZipZwSwzDx+PIJV7dr7p6d8Prd+9x7d8RsO2xUnLYL+rDhndDxxuqclW4YdebEBHQKKBW5Ch2tslQK2TBxDFUujopzbJ3ZPd1TLe4QwmPaRcuTYcd63JCawHq9kZt29PQqkPtb0nDL/mJFPbOoxhPNSNQTuCy3cp+O+Tm53JS1VZhoSmeaUUli8SRjAvpRDIvUITiOzDhOPL6+4dP+1WN3pa1jdrJiuN3hqhohN00oW5UiochPqxo9m2PbBmNlBn/YMMiyBq2rmd+7S9aKelax363R2mNaS0CxmNfM5jMaWzNvZ1SzGco6lC2SSaPE2VIJKTYdkDN9SHxNRwNBVQLeRG4phUBIiWebHdG1TKphuxvxPtI0ZTyqCkpSNkkhux6cZQ+fBylSSiGD4kjszAj8z2HD5fDo9xUI6ljUZHLJMiLJOFLrDBhC8vgwErMuKMrEOI5MPjAGzxAD0Yvr7H6/Y8xQNw6rDD4LynWgajqlcGVzEl5sKnwKxVvXN3zmwchqNqeua0xdkStJyjV1RVYJH4K871qVtOHSvRY7BKsMVhWeCrKetDbMZhVNMyvoQDFeMwgHQanChkzHPB6O50uJOqegoMpYdNUwDHusipLijBJeC6CyGLIpigIuS8ctG9MhBbdwMLQCb8hRYYjisYKM4XIWwrm1krVzRBXK65TJg9xD67rGOVv2RU1tKyFQFifbA6dCgkDdC0TYMgz8TjTld9jT8v/kIUopdNsS+x6VFSFExv2eabNG+0C1WB5DPfNBBh9j8ZqR1G1lDHSBfCDNIp2iGkMJcpRrrY6IEWIoidKAm885fa1lpQxYTYhyf/XDyLjr6fuBrh/Y7AaGyYO2JC3CBWssbWtZOEttDE4LAmW1OXrFZP18tCdLqVhTlGszpnRcnzkdCvJMbR1W66O3z20/ctl3fPxjr/DZz/0u6vmKqBzWQ2UUenVCyBq/2TN2G1IMTEnsHVIIaDRTSIxxh6EidjtUBJ811eIu9uQCbSty8r/zCf2O4we6SGlsg2sqggrUtfh+TDHSRU+lMk5ZQlCy+eQ9talJObMNa4ad5270hHyPqAzzBLW1WC2FilzMkPxEMIbT+3eYfXONymByicnWmdpWIho2Ih12KnGiLVEJQ361nHNzOuOpGknDiKsakp2YvGcwHoyiUhZPYrpdYx49RKmaWVUTfMCnxDSJO+g0Tgx+YAoj3nvx/wiRfvLshoGbzYZuTNSzFfvNji9/801CDLykITGjmkv4nIoeXcZZOQmzX4LQBnIKLE4W1OX3xxgYp8DN7TUPHz3F1jUvP3jAGZb2vStUF2lci27h4dUzXq9W/PDsLmbKaJtxY2IdO6yzjDlwHhz77LnjGrKHNoOagW0yhD3OJ8xWsiuoxZGywpJTL2ZryIUVCSyMpt8r+lZj6zmNM1T1nEq3pCymZ9NYPGmmIC6MMZECJA9hzEQf0dlgs2XqJtabsZA1CymzmIullPjat9/h93/2E1RNJYWpLe6ui5bgA7psQJkSNKc0WSl0VeGclaRSH0sHK6S3lIPA7UZi19t5i1Hn1E6RfcDWQu6rmhlNO6eetYVYKVLVVHIxVDHxyCmKNTyQjZbAtEmJbwIjWSNeE8MkqcsASTrlPkairhmTZr2XNZrL2Oo5YlJcdbU+jnyA4+e/G2GRQlB241I48UJH/GKB8sJXXlSngBS1MWZiGBAJsnAkvB+Y/MQQPX1JYh2HEaU03nfs+z3aNbRWM0wDrmk5qR19Em8jpRAktCBK4k0kJl03+47H21vur05FSlmShJWTxGGsJpc04aykIYqlICQfpLUieZcEcIUiEnVAVQpVCJgHtYMykstEOSepvH5ljKBi6bkqJ+ZY+CVgrEO7Fj925OSptDnEcQqnJ6myzsp4J+fyGgUhOIxJchm3KJNRUQibz8+m3BOdtcdzS+EWKSWjY7LIqStnmM0aQAw2m7qmPtr0y6yick5QFKUwL3BSjrXJ9xj7fCeZVn2P/714HL5dG0NeLgmXl+RO1D7TbkcKgZl6TYRnupzHKNc61pKLAsmWDK6kiwJoGklDDyAGa8njksa2c0EIXQn7CxFRTAvpNFlQIZO9EJS77Z6bmxs2fVfWl9wvDtED87pmXhkapcWvx8g+Y4uCs5wWec5lLWBELp8OaK7RYhUQAzHJOVdaCY/PjzJWHj1fu15DZfn853+Mi7svk03LFMH4CWcSUIna1O8Zum3xX/EolalrR8yKfj8xpR0aU/KrenANzeIMayWQMmf3QWuUH+wixVqR5NbGUVUVkYQpFX+tamyqcEYx+pExjYwpYLzBRodPE8+GJ8QpE7LYZrdVLUZh2hTToEgOEyEn9J0znKvR0RHrhmkwWBXxOR5vxhpN1Ipzo9AR1kvYrjLXM0U17qmtxbkZSmfczJLbM0I3wTiQfU9SmkdPnjIOE2fzM5Ky+CCkthACPnqGoWN9c8X11ZquH2WjMAZlLc1sxqLW+JiJ2nB9ecWX33qENY679xTKKHKlyVa8RiiM/5QSMUWsMbTLBqsE4hTmf2K93/LwyVOGEPjQKy9zPpvTfPmS6pnMl89WS66nNZnM5+Z3aKMmJ89t7NmngVm1IKlIkzT7nNFK4ZJjMIl5srSuxmlH7ieqEOnGS2yr8ONEHiNnyxNUtylZM1pmqyqQgj4ajRmtqLRcCFjEAwRIi8J2T7FY1QsxMIUsSp8pkD2kfWSrdih9I0oFKKQ6uTEvZjOerbcM/UDT1Oi6hqxIB8VCzkjIjEU11XFTKexBiRhIyMdJnh9KujWc3JhspaisIa3m+MWCqq7Yb28JIVLNFqxWZ9SrpYxJYkRbjQ/T0WlZQscKAJ4P3IMSbxCKc62PYGS71EaIg7rSdONA1hVJOaao2Q8DPgSOyEjZruT1PDdxOyAfxyRZXkiVPcIrh3k6Ave/wFeRQz54n/FbTqJGK8VDKnESOUsKso8eP3mm6AU98fLvWMaWIHxGr0z58YlZ3WCMZuYU9EJB1MhmDLlwvUSZk5Hi/auXl7xx565A7cngZAXKaLiqSFhUHklJiOIxi+NqjlGcSHPAFg6GhIqmEgoa0c6VVGrxdVFVi3K6mKoljiOyXII1sjpKSQ82ATmLYZoyDl21hKFnDJ6kIvbITdFlZKGIKZZ03IjEyRX4XYmjr1YJnTIpKnFgTYoYMx4Zfztb4glUKiOHMojLuTR3mXGamM0arHNivEYxulTCbUo5U1fueUF3LCfyCytClYiEFz79HaSU7xdsUUphmob04Q8zTj2bd7/NzdUTzMkZ5zEdf5pBxiUJWXviXqyOHiooRfKT2EIcPHoKupWrGlU1xEmyc8Juj9LiDJ6NBWfISbxDUDANI/1+z3a/IeBZna3AKszQEbVCW02tFTYf3ruCXBa7oefXCUd6AkXqrw7TACW8IFFeCRKHBm0y/TRxO3qmmLhKiQ2aH//fPscnPvU5TDUnoiGKu7DVcn1PPhCnjugHDgnhzloq5+iGQMzCacxqQ/R7YuiYX7xCVbVURgqjnOx3FZu/0/EDXaRoHLNmITbpDpkTJ00/dAzjRFSR2rUYNFW2+FFY+EwjM7dCWYUPI7vdlpwzYxOoXIOztoQ2BVmsIeDPVtjZjDSAtjPAUlcVzraSkJsTqjL44DnVFTuX0DWECq6Ch5tbTgJUTSPeFwYIkWwMydVAYLZY0dQ10+j56lvfYorFNTNKaq8ferbrLbttT4xC2LLOMm8a5rMW2zaEnAg+Y9uGdrGk2+548/KGZjZDG0vKlpR1UaGULI+cMUrjKovGSMBZie3uppGb2zU36x1N03Dv9IT6tuP03T1pCjSuZjmrubp+xmvNCQtdE8NETJ53hx375InjnvPFCjMljDPMs6UyhkZJZW2wNHqGConJRHAww9KPe7rkGTt5jjl5SKBjxNh8NGQ7eGfoA7mzMMus1QXKLQFdhdQps3ElsKxPhD6xv+7wYxRSMUAWrxqrNHdPV9y7e05dKXb9xOmpJFrHVEic5QZwyHTJQWDgsB/RJ5UoJ1JGO47KD61EXVM1c9kkvSdOXuR+2dKe3mNx9wG+3xPGEW0cpm5QbY0yiphkzJBSIvWdkKQzJC8R9MpouUlGCdyLORCDKJmoK/H7oTSsWrGfRtq6QmkZL3kvKq/D2Oo7eSjlLSpfe46qHAqU46PyYTPJR8Lt8ZPHSuWFzelYy6TC76A4veri/ZBkzOm9JPSGIM7NPhSPibKJx8CYJoLSOKtpm5rNbodR0jQb2V3LypENVgNjjMVtWZ7Hk9s1b948Y9nMcdEe5/tKK4yz1Ba0l+A1azXjbmS/3ZO8p7KWqDStrTAmEWJG1U4QFpXJEwSFbFwZUhrECcZaUhTOVM4F0tXy+kOIkmCdRV4MHP+fciop3DKGwsj5M8o9H+0eOAhKVEiqICBCbkY4cll4KjFnppTwMROSmELO25a2cozhsEnm8twzsdizj6P4nzQg95yYsEbhjMIoyZOOcaIfJ8giHz+e/xfu798FprzwwWEi9p3f89sdSincbMbJZ38UdfdVNr/573nyza/ysvdUdS1y4XwYPYt9gPceW1ckLcqplAJEQQaTMWhjZTRnMskI6TTHjH9ySd520DSo2RycJqlIDF5GPV3Pfr1mv78lq8hyMeP8wcsMN1c8vHzMZpwIKUhxHiLjOBALgpKUJRspWszhejEGyXEro7IShCg2A6LsSyiptbQ0sc92O266idzUzM4v+MIPf4qf+IkfZ7k6xdiKGCQCQxktKtYoDsN91xFiEh5c8T6SqYMEumolI8YYJ3IOVLMLtD6oCDWBD6bkgh/wIiWGgImS7mpTjTMNO7VHKYkJH8aOyWYq10CULJgwweQ9/XSN7rdUbs35OHI3Z+oUSXUmuRpDROcIKYD3DLVBOQeDhLxZGcsDhqQCsXQWvnQ9VIrGaFyODGGk7yswA8vtNXV06NahQySNIyiJoK+bmuXyjNY6mqbl6996mzffecL1piMEj9NCzHRa01QVi/mMdtYyXyypm1qkcWnC6IkcLcxrGEYeP7miqio+WllmuikQNdgXoHZduDkhCmqTk2IYPZvNhsurK3of+fD9e8y04vTNNfZqIGXN+WyBShHrI6v5Ej1OGAtP+4F3446LoDlvKuba8iRE9jbRBsW9kwXPbnqSU6QkEu5u/xSvBmbnJ+wvb7kMHdo4ztoldI9RKWISqBzlAkVIe1mJM2RGOj9lSnBXyCQdJRfJWqyVC9eUoDxdKYiKYBN6gttmV1QLgFJYYzg7WfDg/jl37pxSO8vOe0KIKBsxriIHTwxJgIxxQhlNCBmNJRsrCczBi8R76AnTSOUc1WKBsZqw3TFdXtE9ecp4c4vvB2FGK83s4oLF2SmZzDhsmIYBZRVutcSeLDHLGaoyZK3wXSeoUArHGb+2Tkiz5f2QwsWVGf5hPKMYU2IKgbPTBUZrPJpQCNtK6WM+z7HGAI6IiVR0lAdzePuO/x4KnBcv3CO6ItEGzz/O0r0eru8kacAxBrHznjxTGJiKCi0h5lhDCEwxMobEOE2EQqL1YUBpRe0sMXoZ5RpTiMZjeQZFnJmSYApKYbXcPxKZIQT++8P3eHl5gnNOkNuyoecYqdoaoxvCOJDGPeO+I04ZusC6u2UIntNFy+lsSb0VBV7T1DTLFjursM6hnEYnRWYixIQ2hpglHyqmjDJGssdA3otCPp38JKhSSPgY8ClgFLRGicM2Ynx4sMUDkW0rgWWONvhyTrKgf1mK3BilkU5BuHkxZprKcWdZUznN5fUt+25fGihNUhBzGTfqLKNqPaFtLBwucXJ1BgkwVIIaCvH2ebnxXKGTORjiv9+H9rD6PvDUQM6t0czunHP+mR/lahjp/IRtW5TWJUen8Hm0jDQTqiBAiRwmaWKsRpWiL05eRtC+yL2HidD3RBKECTMYXD/B5ImVIehMv9+x321EKRUCtdKsZjMGP9D1C3zasBv90dpeeIkJqzKV0agciVFjbEQpJ2O0gs6qpFBK1hAxoXQuo0NQRZ7+0msf4eWqpV7d4eTinK7b8PFPfpLTkwu0q6XQzVHUpdqSlay1bhjYdB24Gp2UeMMEcbYNUeAmay1oQdCsq7HNGdaoozz9g1riww94kTLkHdtscL5hlhdkhRgEaYeKDqInAl4lyBGjHa2bo6Ji6Ee8H7ALR6gmttutRNm7WIywEil5cbqMnjElsq1QVUSrmqQFIj24NlKkXkprIrKYEolqyKxC4t2wQSvF3WXL4uwMo8tNxgdQAWci1lnqqqFpGh5Yd5gIkN98j+22dFDAbNaynLeslnNWpyfMF0vpBhSM00hlJ6weMcVTZb3b87W3H9HOW15xd9BWCGHmILNGZsopJsIkYWcxRLbbDTfbLfsx0i5aLk5XtE923Hk6ESPMl3NOZxJieDqbYaJHW9jHia9MN3QGfkjPuLBihU/KqAnOmwUzu8SaiYWZYW1N3z2m655hzk4JbkZCxjMvNSu+dDtAJa6nKCWQdOE3CK9D4PJ0qDDyd54b2ShjsWpHgykcCVNuSq6yGFdxIMKjFVVlOD9dcnFxwunZCuc0t73kCDFNNHWFsoboR4iISWBO5ODxJHBITk+YhAcQvYQHpobkFJuH79C//R7DzY6pn4hTkAwqrZm2e9JbD6nrqlzciBS9chijqZoat2hwqxPmr97HncyYxol+s8aYAsWbipzFSVgfEI5iEnTsUpUV51+luHNxRts2TENx3CzX2bGGeGGzyAVBUt+xU7z/84ctRh2/vQyj3v+zMxw5K+VrMcajbDymIDb1PgsHJwQCgZiVjHkmCevsR/G3ORQ0w9CDkvdPac2AkEaFjHoYXuVygz2MVGQAIoREed8f32742rMnzJsZtnFUXtKMTQQdIFtZO1Vbs7IVc6/xtz2zquXJ44d84xtvc+fVFQ/OHsA60diKxbZlNm+IlYUitZZKQkgeoXS/WSPFpbNgDUMS6WZUsB16rnxgvdlDt+fsbEkzb8ltxbxyNFWN00ZqQcTITWUkfDA+H7GI43B5+5UWIn2MMjpLiamgHXVVcb6ouFjWvH73nJvtlqv1lt0QGVNFVhXed+S4JxVVmSn5Rd4nGbcbTVNZmsrKCMy6F4Ibv/t435b2YoH8gUuUw89Q1LXj4sED0o99gfz4HVmzRoO2wt/QRRGjKLCbgv1ATBlTaTSWqMAPnvXtLeO2E+m3driqxs5mqBDAisp0mkbInuQTWBm/JIrk2we0tbicmIoCzCgtKrxcSPBlT4lJikCZS4rBm65yee5aCLQxyZpRUhgcNP+qpCc7V/HKJ343q7uvoLSl6zY8ePlDLJYnuGYmCe4544tgQ9kKYmSKnn23ZxhHeY/8xNB1dH3POE3ElDDWYqsGU5+h9FZGS25W+DOC3scXOFDf7/EDXaQkIruhR2fPUHsqBhw1mpbaZWo9p1I1VeXkVqnEKS/OVmw3G/b7jjxlbNZURoywpGfMkOXmmAkoIi6CtnOSnVB6jqvm2ArimMlabHKU0lhrmBRUBcJVAe4MmtyMXHU73DNDTJ7Vak4/7fFjYOj33L1zTmUcrbXURhOt5uzkhE989HWMTjx89ynTGNEK2rpiPmuYtY7lYk47a9DFvrquxPBJYYoN80SzrLi52vD46obzsyVNZYlOYF+ltfh5pIyfvMgTfeR2t2HbDey6gc0w8uHXXqb2idfe2TPfZlTTcuf0jJQC26GnMqLoyNrw1c0NV0v4EXOXZRepk6LSmk0K3Fr43cu7TMFwMltQ5wbjLDc3b9PMGxavf5LU75iS4sw0VEnjUwl8U2LVfeAOCBFPFe2/zMxzPvhsPO+2clbiexPla7mkkh6MmjK5oAwy/jpsvHVTcXK65OR0RTtvsVax8Xv2g2feZHFsVcIJsEZUOzEWczgd8d2Am0emsMVPHj9JJlJ/fct4fcN0u0UHg+8npiAXejObo5Ji7EbZVEoHohLUixbrHHXbUoeE6kbU1Zbtk6fMXr6DOVuy3d4Su1vqusI2M2and8iVI04BFRLGiaGfyEANwRimKaCV5vzslDtnK7ZPbp+PZVQ+jm+Ot5acUQcvloO5FPqojnle1RxM3V70R8lCTC7X44vGXIctSSHwcZAgERn5xETOkSkFQg5FgpwZvPBR+l7M24ZxxJLFBTploko4ayQNO3ja2QLjRlBFrqk0lbMcUn8ra2RjjsL3yIhh3JcfPeGV0zOqphElnwu4XInxmVG4yjHTLS5owpSYMvRj4P7pPUzQ9GNHqjXhpKJZnLLb7om7HbUWJDEoRTZgdCJaIeEmbdAmEfs9brHCnLQMoePRw0vM3fusn23ZPNtwjuaNT32I0wfnBZ6P5ORp6lok0yGRDSUUT0ZZYj6INA5KFHA5SCLxFBPeCx8tREFFlBKfi9paKmtYNZmLVcPd8xOutgMPL3fcDDWmOSczkrnF1gljZDyitSglD66oXT9Sl0JFv6/SfbH8eP9mpo74ym8/6vmdSpfD1+ezBh48wGtNXD/F6Br8JFJsW5HGjpSkRtFZS1Ceq1BW4g2GceDJ40fcPH2C0xVueUpVGSqrSaGET+aMHzpBIqtafnH0qCTvh0JG7gd+YIxlDzFWSKYlHDAfZNpG8oLGJONMU0tmk0aKcFLhj5V8JlGDSa4UxZ5A1kOkv7kixol2sUQrRUyKnMRXy4dI1w+EnGmaVmwcEkzjgPITLnj8NDKNI1OMoDV1JUZyVbvELe5jqhXjuBGloxY+zlj2uv9bBQyq7CAoQoxkJjCWPkzYlFhVZ7TNktq4YsUMqExEpHCVqdDqFu8DPovUV2sZBchc1kvWRQl6O00OVc1hzEJKcy0oT9KSCnog/WUnXZExSowIJ4W7HDh/xfKt0LF7OmD8nlX9Oqt2xoaRbdex7wZCN5CbvowcNHU95/TM8sYUcTGy2QkXpa4bqqpiuTqnahcYV+GqCm08fhIyp8oei7g8tq0j68jtds12t2c5a9BBxhkqihNh8JHoxcit6zr6IdAHz6ObWxarOfPa8eBxz52riEua5dkJ2mi+1T3jZtrx0dkKqzSPph3rPPBj7oxx8gzDxHw2o5sCA4mPt+ecVTPWU8fMzIhTYHP1LaKJzO69Sr24IARLDpaTasblOHCT9hzn32W6mo+zTRkXiOxTup+DSZiAKuUjSRITVCVrdNbFbUJzTI+jOFAWfsWsrVksZ8wWLXVbY6wmqsyT7ZYPuRMZwVlTGP7SocZhRGlDGBIhKfKQ6bsN/eaW9eU1j956j0dvPmG1mFNlg4mKru/ppo7Z6SkPXobsI95Hpn6EmLHOkULC7LeASBMXp6fMT05wzrLtEmp7gztf8PjyEWnacv/eOfPVGTpr5ifnqKpGaXEBFRgbFJY+xiPpcTlvuX9xyjuXazGIyrIOn5Ni1XO78FJ15BKAl0sxgzqUiCLp1Pr58EepgyfGc0JkVupYuBx/DdIJHrqGHESxEJJwLWKMJCJDiAzTRNePDN6zHwZG76m0ElmkAmeFS+FjYFZV7PueGMSmPSEcoSF7nBE9zOTF2Cwf/i7vwXU38ZWnlyzaBaZyMvoZHBgjfh9W0+gGQ6abBlytSauaNEzcOT/FDzX9u7ecf+gVzs5W2Af3qRYt0zCwe/qEbhi4+7FXcE6Qk2Gzpz69w9hv2G83VCdn1Ms5bHdM1xPuauBOl/mh117n7LV7uGWDs+VZR0hZY6yGII2ZvJRDofncfzSVApjE0Z1WxkcQkoTWpSyjIRmXWazJwjFQijtVw+liwelizm9+/ZIuL8gsibZmMj11EzAEcRQmo5WonmIQtd00ju/btNRxhTwvWN9PkH3/SPF/5VBKYYD5vCHcu8tm84yM8MRygZSytsdrBbTIzrMTTsc4sV5veHZ9RUqZZjnDNTXGKOLQY2wtmWJB3GmNMjJCUYo0RqzWuCxcJUyF1ooQEnGMOCUKU6dLurXSeC1eM7mMZ7NW+JwZkkwHrBIULomjJKQsqjEgDUJ+VcUywCjIt4+4fPYYHQLh5Bx971Wqu/fg9Aw9X8hItJDWNQatLTlGXJi4qC0jc1CaMSbGkHBOAjGnrDDtEtOuaMycpOR85+jp9x4/DQzdurzH3//xA12kmFzhckVIATUqjLLUtiIlSYKs24q2mR2rdSH+JWIO1Lamdi3DMNK4lsVsyaxusVqKlANzXitoYuTe4EjZQt1IRxonDEks+JOXKPIosJygMBF0RifNMHjqvWI1a3h7f4XzIxcXd7iY3aOazTiNljCs2dxuaJXB2b3Avxp0VTNfnfPq65bdfkvf9yhVCx/H1jKzT4k0DmQSPmSmEAghFqt7jzWas3bGNA1sdlvunJ9jQiDVDh+FoBWGCT96pinSTwEPPNt1JGO5e3rK6c3I62/3NKNhtmxp53Pe2j3lze0tPzy7wJbO+Hbc86F6znuhZx4ys7ahco5nfU+L4b5boDNYnRmGnn2/xhrHbHUX6+bgFdon6jGRGsO18zwad0dyny6ksAMsHg/8AACFMOGFDk9SMovVyhx5KEppdDEmM9qic/HpOChTEM8HlGY2n7FYLWhnjUSl1xZlMld+y/2wRA89unZHlVScJCfFxEj0oeRo9Ez9mv3mire+9TY31x27LrC5uebZzYbopaB1y4aPfOhlzIfuUGNk1j14+qdrrDYQ4eZ6w37bsbtZgzEs7pyxXM05uzjBtjVv/9aX2O5uef3Dd1mu5lTtRPSjKLdSOnJV5KavScYxpYmDVXbb1jy4d0LzTV1UQkgxcuCdlJ1BpLrPr0NVir1U6pSkxNBOlTGVoFO6ZHg8VwUdRkOoA06jjgVmSolQUsNDkAA/H7x0hVlC67wPZdQT2A8Dm32H0oZKa5wGjMOnRD8OKAXWVaQgkv5C+5SpR8z4OMnoj/KUtMXaGuNarFtg3Ix3u4E718+kKXAOVzu002gyVkkiecrPkThTW+pVi1pHXKqYeYO53hPbPahMjaFdNNj5h2iHLSf3L8BI2Ol6vcdZh2nmpNs902Yi9JFwu+fV3jJrGhavnOFWM3Rr0QeuSUEzjZINPeaiiEpezBtTkcCn0lTxnPjoE/gAIYgizie5l0Q5uzhj0MpgjYTKKTQhRdrGcpIUq5Mz/L7BB0XG0ocKl0da06GJYhpXRrZN5VBOXJffPzIsxUm5povF0fd1fJDC5VCo6NphnCP7SWCTKG+i1iKfTocbgtFo2+Cjp7vecvXskt1mQ/ae07t3QUUJFHVzKmswtqayVbk6DHiP0pnYOJQSn5phHOVa0prRS7Cj0hqTFc2sJY+jpNMri9WC2GYtnDuKL884eVTdYLQWdDMeWFYcx3faWuHspUhlMvb6XZpnV7g4oW8ekx59G3t+wfLiLouzM1id0zZL1s2SSQ3kcaKeRu7XjnG55MaM7ELCjlPJToPKOiyWaAwxjWhrmM0XWCZif8U07ui7XYke+L9RkVLbhko7uTizdE/ZVlR1Q1aZ/bSjaloqa7FaYY2T2VzO1FXDvF0RYkQpTeWc8AHIx0rvAGY/GGB+m+lVQrkapp4cJ5w2TNETcjh285GEtuAVVNbSjZF+DORNpLKWBYZHXce3Hz2jObkjngLzJfs4cftsTd4OuLolo4hpxDpLNV9iqpamXTANka4bCSEwjRGVb8WmW0nMus8yBgshstttWd9uuN329ONAtIb10LFe31CZBWrWoLUlxOno4NkNI0OMbMeRZ5sdZ6sTZkPklW9vOdk5ZrOaZt7yzvaS/375Hh+en9MaTYUoFU5sxe2w5zzCPd0SyNgIW++Z1y1nTUuOHt/13Ow7Zs7iXIMzLdY1uADdboupK9ZhwyaN1HMLaQJVZrKl2znkxhQwReBNo9CW0tVrybIodu5Gi7mWUhp7cFBFiUmY0sSj8gYqZ1nMW9q2paoc2mqMM2gnngeX/chLGKzRogxIoShRophdkfHDXjYEPE074xOf/V3M2lNcdAxPd4xPr9ld3TINAa+h30Te+U9vk51mNqtZtC3dZuTu+Yo8TCxDZlm1TCcOYysuTh+weukes/tneOdRrqJqP0S1MBh3QCiCaHHJkvTdNAXtMHSUdNzyBja1486dFauZ2GUfsn84IB2AUvlYoLyI2r5IqAVJPlYI7qWPj/1umFecZQ+FCseNM8RA3w8lMDDivaSHQ8IrCD7SDwPeB4bJc7Xe0IfErJKiqnIabRpiiHJeNShlOVmuePZsi1YihT28PpF4GqxrsNUCpWYoPSPFCm1m5KTZTE/5P958RFU58b2pLMYqHJqoEsa6kikkPIKsNbq21O2MGHby8z3Et58SakvuTtHzOVk7NJnNu5diuhUj09XA1ZtfoSLjQkKbiegDtbWc3L2LWzaYZU2uJEJAZO0GRUIbVQrnRIwU99R8VPDElGUvzlKoxCjoSQhZuuOY8UnyfkKWYV5txTWUA+nemOLNIdXEmAzRLqSxsmUV5IpNpwm1ZlntMYf1FjxYLWqfgjD8dsd3Iinf6+uHlZX5gIUKgNZUTYuXN0o8gWThitV94eyJASaEwdNt1jx79C43T59hFOyuT6nqhnm7pJoJOVqLzAZiInV74nbH1HVMfsIncTuudcU4dng/0fd7xv2ecRzQIWNNLuGxMspRRkvSpdHFtFH4dImM0kIziEGyHZQW+wE/yfguP597MyMy392yzCNzk7AhUm1HFkPPbLdmvjmhPrvPfH5O3Sx43LZ4XbFMkVi37ELmtvdl8oD4OhmLqRumbBijJags3WJ1QgodfvuEMO7BZ6yy779xfB/HBypSfumXfol/8A/+AV/5yldo25bf+3t/L3/9r/91PvGJTxwfMwwDf+bP/Bn+3t/7e4zjyE//9E/zt/7W3+L+/fvHx7z99tv83M/9HP/qX/0rFosFP/uzP8sv/dIvyVjmAxwzt2A+mzHYniGMGFNT6QajHBhNHzv0eCs5CroqBEJJWjXO4cp7JY6MpRsOngMXHhTN6PnUDai1FwOt7Ahph6ksOUHMk8giSWQlMBwKnNJUGXwKIgcbEIJV1rS64uHVDS9v9ty/uIMxiaZu6a+u6dY7Qo50ITPlhLYV7WLG7OSCmD3j6MkBVNKM/UhMMI7D0aRp6jqSi6h6xvpKvE2mYeKVlx5wce8uSifGOOKqU5q6IqMIvtijZw3GEELk2XqLUoaZMiy+fc2H1zULV2Prikfba/7bzRPObMNL8wVzJQ6UIQTCONIqjbWWr40bfvfsgsknOhX52PwMmzLj1HGzX5OMw1UNRjvpxX3CDB3EPUMVuQk9KkReNnNIXdkky5lRqpgSaYwSJr4gJZZ8UHFwoG1SEBRxajTKlf+bQiRN0gUXcy9rDPO2YbmcM5u3Is22CmUNyoKyiqthz2m+Q41GJU+aBJEw1op0VIkcOGSPaipWd+7SNCe0zYK2ajEfVWivURFc0JjK0e22PPqtr3F1fcmYJwiRUJ1zWp2wXM6pPrzg5OwubrmiunuGWdRkkxjSyJAmXs6foN9eMfgtQ7cWmW2C5D3ZSfcmr1GTjaULY4kcExi5riynJwtOFi1Ef3ROfa73PEDwUlgochkHHS+X8pc6bi4Hkmw6PP57SRCPO9HzbeYgl528rCvx2xCEJcXMNE1Hl+R113HbSZggzqJypKps6dwDOSeMdqQEU5hoa4vVokZBGaybUTULlG5AV4ApaI0QV2OSe0JKI9f7Hb/xzW/TVhW6uKUuckWtLDaHEnUv2TUJTXQO3SrMFKEfS3CiRnlIb10T1DVGW4w2TCpjqoaUI7MEJmu0dUdH2GbZYmYVZlFD7Ui1Eb+cLFJfraUAPzRZKQqJOEYxv4uZ488Sro2Md0IQmbGPYoAYUijqIrkujIbGWZpiXqiUldJTifeOT3DVQTcaSck+xhdADJpdashZsXQbbBa00edMTvqIkD5fBocL/DCYOqyI7yg/SjE7eUlvNsZJAONh9anv+o7vfQjEJk7UWpOC/E6tiuV9GZ1oJVEYyU/EYcDmjE4yNtxeX5N95rpL3JoaGxKqqjGVQ9c1egrMZguRXicxXySD73t2mw2b3Y7bfs8ujPTe41NEOUMyqqAnZU+pLMqWovSFMayyVrKclBGaQuzJORGiRHscYieMVjQp0YyRVsMiZqqQ0CFhYyKqRMiBuXaYoOmGkbGrGJs5jZOgyypBPeyY1Y5qdoGpG4xrGGNm00/YoInZEbMRIUYWBMnWM6oFqOBLivL3f3ygquDf/Jt/wxe/+EV+/Md/nBACf/7P/3l+6qd+ii996UvM53MA/vSf/tP843/8j/n7f//vc3Jyws///M/zR//oH+Xf//t/Dwhr/4/8kT/CgwcP+A//4T/w6NEj/vgf/+M45/hrf+2vfZCnQ1stWNg5Tje0KeJ0g7WN2IUbDVYUHf3UiStno6mtkgAoo5+7JMYoCaESsySzeBQ6BN5YT9x5GJh2O3TtSKOG4LGqIqsoc/LkSaJHIeSEQWDKMSuCVuJE6SN6HaWDqiog8ta773Jxek5bVzTzBbPzTJsVKQUub9dcrrdsNluub3fUt4MQPZ2lnS2xUbO56lBZUemEa8QzJRJY3nuJ68unKFszuYqz1ZLX3vgIq9MThNMAJ4sW5xw+eCid6RhEznm737PuR05mC9zbz/iRG8eFbXCt43K/5j/fPkFlxcfuXbBUBjVO6MoyZkU7a9n0A9t+4qP1ghPj+Maw5bRquNfMqY1iPfaEFFk2M5yrsFVFNXNiLqY9IW3pGdnkkXvzBbFXoC55ftsRzb0xpiQ5m1J0WKxyUnyUiuZAmD4k64pvRCHXKl0IfaWbK92mMYbVcsZqtaCuHdYZ6cSNFiKdUsQqk+dLbGXJSjPtdigNPoRiay7W2NF7jDaYhZZRlFOYWuNqh9or6MAtZ1RnC5Ynr3Hn0x8m+MD+vcfoXCS6GKyrMLOG+vyUlALTzR7UhCehZxprK5JPOL0kTQaVAzp7tJPNOvlBVAJJzJn20ROIYkaFkF2dNawWLeenCy5vt0w+Fgmy4oAtHrqyo3qnjFHfX6g8L1COfx+/sXxd6hs5P8998Q8lCj5GfCpxgkpjtJUATIo6IiWUrRi6icvbHWPJHTEk8eCpLQrHEENBGgVNq4zFuQp0ReXmuOYMdFXGfKoUI7FsAEBOZAI5e/F+AB5e3fJ/fPNbWGePcQRLBXV5AbmMGCPCEUiNQsUZJiuZpyixTTBaPHmUkiLVGItzNUorQvHUSCRyDphaY5eOXClSpSTioiBAB6fjw0gul/lnjofQwBJCF+W1ieeQbMA+ClFWLM2DFCo5lZA6uW4qJ+MZow8JvBw785wS3QSP1xkfVcnoeV5gZAUkzb5viCGzNDfUSlLeA0Vp9T3Liecly/fS8mQyjy7f5r/+l3/Ps6ePmZ/c4aOf+XFefekjnNQ1lhfjFn77QymFnc0Zbq7KmiwS9WmCCKa16Komh1E8Usi085bVaknwnn03sDy/w8XpA/SY6Z5cMT16ir+8YtsP3HQd2sDq7jn3Pv1DnH7oVXY31/j9Ht9Fdt2eZzdXPN2u2Y2TjNnIJI2M/pCGx7WW2WLG/GSBrQ6urQptxT/FOEHRJp1LsKCcazEQLL5YCk5XS1zfU00J3XshVaco6ejFG6qe31DVjn4a+PYY2TZzXrlzj2U7Q9eR1ekp9dkF2bUkXTEGeR3JjrhgGX1mnDwxB4yrcW6B0hW1nVBx+MCp1x+oSPmn//Sfvu/jv/t3/y737t3jN3/zN/kDf+APsF6v+Tt/5+/wq7/6q/zkT/4kAL/yK7/Cpz71Kf7jf/yPfP7zn+ef/bN/xpe+9CX+xb/4F9y/f58f+ZEf4a/8lb/Cn/2zf5a/+Bf/IlVVfd/Px5mKyjaYVAMHS+EGV89Q1sqmR5JQPz8x0qFrxLgpiaIjlROTDyTZctNNyXO/2/PZG0Xey4ajM6ihxyrpkiRzMhBI9DmxT5LvkLNm8uIU6AvCoXOmHj2zkNhrRxci71zf8sZ6x9nZy1hlcCEzjw5nK+pmxWyx4+b2lk3Xs+8nIhmrYWYdM9eyWi1YLRecnC6Zn52TDTx59xvs+4l5nNCzGWrV4BYtJyczmlo246Z2NHVDyOL5ESZJwuymkW038ORmQ9u0rLYdP36reWBbIHO93fKV/pqezI/fuce5qUnjJNbtxuD9yHYc6CbPnfmMl9qGfR+57fd8dH5KlRVpCmx2G6JWzKsKssLHyKpu0W5GSiP78YYudiivuNsseDIEgWGLpE4rsYi2JUr9YBd9LFa0LRtgOZTk+Gh18D8oRY4Wc7dUbpS5kELb2nFysmS5WlC3lRAQDXDQ+2uNqg2zZU3bzklpjt9vmboNSWl82Qi8LwXgsCd0DZV1TL2oKJy2VHUFwZC6iTQNpG2Lbirqkznu5VfJXQ+VJo2SYIqC8fIZfhzIWmHOZuh5S/I9sXCSlNXoKVFZK4W6Etg5lDGEzhmfNbvoyfYw8igYh9HMGsf9iyWPn63pulG4C0Yj7Er1AjVFvfDnQDB9viUcHiMFyvFbRb6oXkRjXoTzFRSicy68E6Vl40tIkRhjIUkbw64fefjsmn4csUpTK6iNZjFrOZk3JK0Z/IRP4ixrjHg4jGZJe3pKSK6E4nkqUzxJELVCyhJvgBIkIedUPJLkeX3r8SWVNfxvClK+IJNZ5JJZg0Jnuc/kHKFy0q1bixom8jgScwl+zMV4z1UYa0UJkzMqeXIewYGuNWrhiI0BI7lfGVBJoP5Dtg5FpaNyPubziJt0SS4uCEmOYv4WQyTEVAqViE8Jnw72+aIOsSpTO4ezYnUqjUEZOaRMyoon28xtByEVJ1Z1KE8FN5NRjGIMM3LONOkJjRY/H20Oa/DFI79/TfB+DRgIovb08k2+9N9/g7fefI+cM996621+9//+k3zqY5/j7nyO/f6qFEzTiDfNMBVTP402DlcJwTep4pUSAipn6sWci5deop4vGceJ2tacP7hP7Rryq6/gr3dM12um6zWv3tySfBAzuH3ANjMWrzRsnzxF7Uasssxsy52F4XSeGKOnjyN98kwx0IfAlBO1rpi1DYvZHG21+C+lJPJla7DOMIR4RC1jkGgG6xwxFI+VnLlY3aW6t2T77lfotx3WR3Tx3dFkTKpo/UjYbbnqt3z1duAJlifrLW/cf8Dp6ZLF3Vc4m5+iXEM/RW7WNxJO6BVZG6YQUGpCqQTOou0SlAMdUXnBMc/r+zz+L3FS1us1AOfn5wD85m/+Jt57/vAf/sPHx3zyk5/k9ddf59d//df5/Oc/z6//+q/z2c9+9n3jn5/+6Z/m537u5/it3/otfvRHf/S7fs84jozjePx4s9kAoJ2RFNiQSMWu21hR8yhjy40xY40mZcUQZf4X7ZyKCoeTm2aBojUUUpnn3tTzE9eZxbOMnybxE4nqeANVStjvoZBsxVAqYJz4jUxZuAlTEHa1jhnjE/MAqfHcqsR6u+etyyd86LWX0U4RnWKcJgyWWbNEGcdsPmO+2TBNAVLGpUxtDYt5zdmHLzh58BpGW6Kx7LcbqAx+u8MuHKcnS5rFHGUybWNAeZqmFnMrEsMw0u32dN1AP0l67OObW3yG2TDykYd77vSOvRkIxvE1v+GZ8vz4xX1eqRfQ++IEb5kUvLu+YvKBe+2cua2osuG633JCsUK2hvWu45n3XCxXVLoh1g5tG5xboqoKf/suO79m7wfmylEpi24EcdBKHRNmnTHY4sJojHBDpFCR+SxakYgoRMILqnSdRjaHgqIcg/K0/KkqS1MvuXP3nMXJnKapUTaDFlMtZQoPRlu00zSzBh8Sp699jKdf/c+SWZGE0Z5SwhjZBPfbDSiLNT3FpxZnLG29xE2K/lbRujmgcE1VunRxjNUo/DgShgkqQ64M9mLJVGcmv2Hc74kpipupzVgSqRLHWa3ccbM/WKNvo8frLHydooo6bApV5bhzscRo2HfD880hS9f53dOa5wiJOhQtL/JTXixQDo8uXAbpS18gAAhJgJxFLdDYihA8qEjSiRzBWkeMmWEYefjoKbfbHQqodWZuFYu64vz8jHsnLUGJXP3ZzVrMukzF29ee9/aamCspeolYA0rbY+FkbUXKhhhBKYMxmaHrIEe0ccQowZ5ffvcxRms+90aW2IqwZDarsdaUkYMETOYsN2uWDWnmUKMlj15kvz6WUEhNziPT5NHWgM2oRsPMQePAVShXHUnhuhTo8hYLd0ilggRFIalKKHMZ9cRyjksEhg+SbD6VGAEfoyinUvn+IKM5o6Fy5mjPUBmK/4bkCN10ibeeJcZwMIaT6yMB6qD4SoeiFHxaCcI4PcIygUI4Q9+xol48vrPOUAg5/v7F63zowx9mv92x2+3ZPHvEt77637l7fo+z9qNiuPl9DH1MVRXDvPTczNHIulSFOC7WS+YYSJgiWDdH2wrtA3Vlmc9baCvSrCWcnTDd7RjXa+K+F+JsSOSvvEluHGa/o+pHFrM5WSnqEBjixK7fE8fI6IOYs9mKyijqxQxTO7EWqGyJ+pCCsG4qLJY+T4KWBfESSmis0mQiKoOL8Pi/fIUP/4E/jP3Ij3Crvsp4+ZgpeB4NI9OY+XxQ2D6hux2P+sC3bkZus+Jms2acRj57+mNc3HmVZrHAR/C7PcoYUX1ZsTnICFqoqhVKz8imlaYxB4Lv/+cko+9x/C8XKSkl/tSf+lP8vt/3+/jhH/5hAB4/fkxVVZyenr7vsffv3+fx48fHx7xYoBy+fvja9zp+6Zd+ib/0l/7Sd39BabCS2kmBheUiDVgF2Wgm5Ql4UJmUAv24I5uJmZ6TqQWCL9+bckKlwN2p5/dt4fSpIu5H8BFtalDiMJqVI8VMjhMxekY8Q/TkHNE4gk+oShF8IkVwWmNjZK4M3kfGXYerNR2Ztx+9x6b7OOeLCtU2jHGPGjpMEG8XnTWLdklaGIZBFqFZLanvnrF4+XVo7rC9esTNw2/hx5GIoz6dU9k57clK0nmZhMyZMrUWZ5AQA2M/st/v6afAdpy4vLllNwaW7YyX3r7m9a06Xq/7caByFZ9frLivGhijGMK1FVjHuzdPqYxmphqsNZwtT9lt1rw17njgFsxsg6mWXI5PaBpLqx2uabGjws5nUNUY7bnpHjOlgNaKs2YOUTGFAaCorQ7IifyxzmKtxVgpVCpnsFZKTpVBBvZy4zSpdEnYo02+LKOi+DEaVxlWiznnd89YLmfYSou9uJGgskPnqhAXUI2mtpo8X3D66ke5fOtr0iWDECiTeAyYnBj6Pa5qxNJ9GvB+oqlqZmZGnWp2ocJlg1UWqx2mrQjDgMqK5L10uK2RjjrcEi5HQpqwM0lFZkpok7FOE5MjlayQLAAUGsOEpouerCwcwvsOnBMlSqPTkwWVM2x3vdwIj+XFcw/QQ/3xvCtSxzHQYYMGynucjxwCOQ7clAPdEUFq8nM7fW20jKqmIlEtzpv9OLHdD7x7+Yyr9VYKSzLLynDvZMnHPvoaq9OVyO9z4uLsDGcdu13Po/XAo03EMyOj0DmKWaNO+KhLm1KhtRWZOqBVhjSichRem6skeDQOpBT4H28/JsTEp159hX4MnKzmLBZzaldhlPCbDhlKSil05cAZ0kz4K5JSnIpqw5KpSNagjdy/cK7EOsgaPSTuHq4HlDRFSie0MuV9Esv7nGIJKSzxMzk9JyLHxBQDU4gMwTMFKVK8F4VfyFpUZ05TFf8gaxSVMYD8nP0Q+fpl5KY3BZGWQjaJ/Wm5H+eSon0YrUNSK3wasdNDyKGssed717GYfX6j/+5bP4q7d17lJz7/h7l77y4315dEPePBa5/h3sldqt9uivS9Di0Ffc7C3zElYkJUbKKisVrM9FS2mFxThxn1fEnGkIcJq0vUQtIYp6C1oBpMbYhdT5pE/eP7PUw91hqq1ZKQM60fMJVFRwgmMFWZ3iv80NP5CCpTJxnJxZxpbIVVWUIPSdRG/IWFFZ0JXorQXEZyhz9+jLx3uWH+7W/x6uf/IEnPuZ4/ZOr39DfPeHd9TRgUEx5D4N+sJ66CIWvoes/1ZotuV8xPzrGVY9p3Ip2OGTikpHu0SiLDdqeoaklWViIBhh1D1/3/zyfli1/8Iv/jf/wP/t2/+3f/qz/i+z7+3J/7c/ziL/7i8ePNZsNrr70mxjXKSsYAcgsNMRBNwlFjskP5A5QFtXJUGFywKBNROqKSFqMjAiZ67oaRn7gJnH6jh10kbbcYVYObkz0iURs68rQnhI6UZMzTRU9dGbIvoX0ZCTrLiTppmtoxi4bBD/ghMRIZXeb2ds17jx9z8bEP4ypLPjHEZkT1mdTJgpuSJwYJhfI506837KeB/T6i8tsMw5pu3Mrs3Xnmpwvqpi6y2Rkmz+WGFQY04ivT957RBzo/sd73bHYjV7uO5XzGyW3Px58l6mDIBKmSa8P9KXF31kBSBKexSIcekqBNVYS5dZxXc/IwMgw9WwcfX66YtXd5tu8Y/MjcGFzhOpjZDDV3cLIk+y2baWLuFnQhk63Gp+eyVClEVUFQbBn5CJLyfNyjS8AWaFWyYBWFMFtIi+rATylx91oKHucsq+WCO3fPOT1b0cwajFVkndBWIGCULnYshhKOjkFShpcPXqHbbfCXjxgTou5IGe3qwoMweD+RlRgFdt2e6+tb8TVIChsUVRDvFKdMkTCK03BWGj2vSY0jt4bpckTZyMnFGasWQojoUGGbRsiWhU+StUE5cf1UpmabPFErCSMsSapH9r+SDnWxaDlbzUQ9Ezw09YuASXlPn5NjZct4YUd4AUkR07jnwx/5XZoXLE6PjyUf0luzRMgPPZMfyekQ2ZBZ73oeXz7j2c2aKUWcUqway4OzUz76xivcuXtBQhEnj9WWtorE2jKOlkddpI8VEgUuCFKKsuFmDUrL3D5E2fBzToQUyRGUmWERO35XQQyW6DtiCnz53ad0U+ATL41c9CecT+dcnKyY1zVZZ0H2Uib5KN48hfeQS+BbzrmcCyUFtTYlNFJGXBqKY9fzMYrAvmUMpVJxlQ2FWCyvKfhAKEFwpHyUcgsHRa7/0Qe8D0w+iOGdj4QovjdWw6JxGC1Ff11b0MJ3mELi21eB99YSoZCzGE2K4kcQSnFtFR5LKkhM1okcDdrdI+QJv39P7BZ4vmaeL6HfvsqQ+4DjlZc+wZ3zVximgZBh3p7SVhXqO9fk73Bk4CCHP9wzpLGLhNGLkdsh/ypFTF2RkmQRhQnS5GEmTVTMsYRjRkylQVUoM5EM2GpBmqy4Uo891WTJdkm1aNBDR+xrxm4Hm4j3IyWCiXHy9NPEMHnqJmErGRdrLY3Z5CV0MkUhmedyn0ul2DJZsd8PhMlz+eabvPKZz3HnpY+gZheYrsefPOX6zd/imzfP2E+eMSveDIKYudKQVO2K2fICZSpGH+kGzzB2JatNiLrTOBBjQts5up6jbC1Gif3A9uYh3fpSRokf4PhfKlJ+/ud/nl/7tV/j3/7bf8urr756/PyDBw+Yponb29v3oSlPnjzhwYMHx8f8p//0n9738548eXL82vc66rqmruvv+rxBNidMmY+qknMQR5JKOBVRydDqSu6LOqIBpwoRsvBPco6oPPBy8PyeDZy9C2kXST6jzQybK3KEeL1GdTcov2eKA2OKDAS2yeN1wmlL9JLjEnIk+CTdag2t0sxHxcYapiGxCJm9zWzHiYeXl3zmo2/IpltbgtNQe3QTsbcZOrFRpjL4YaD3E7fDmnV/i1Gafr8nMGFrx4NXX6Kdr6hcxOgK5yrJLEJmhEbXTH6gH/cMo1iJd0PkdtdTVTVVTDx4Z81FcKASF4sFTlke3655/WRFzokxCOxt6wptK9abLcF7lnXNxeyE7Tgwx/CuH7hjlyxpydryrfQerdNYDLUVg7K8zFTtHarFnOG9J0wesnPkWU0AGD2qqG506ci0LhLi4hIrFtCmoCSCROQymjgYs+kDUbac80Oq6IFkobQE0Z2cLDm/WLE8mVM3MkfNhZxrjEEM34Asxk8ShCdZHmHoOH/lwwzdjnF9S8gGaxyVNkV1oMk6ow3YylG1NUnBOE3s+5FhnJj6kTh5cszYQ4aItbimQveWCoeNBldb5rYFmwi+IyZPVS/RtGRbkbQXB0pn0daiTMWEZYwDGUm5VkiR+SKtRGvNrG24c75kGMORVyNNWYHvy83/QENR311ryCCnjFspG9fxIQcDuFy+4Yi6yPeRIfqJrtsxToEpZNa7Hbt+YL1Z8+x2Qx8CtVasGsf9izM+/kNvcHp2ilKKWKzGtZICoW4qbq4HLveGlJyMt3KW+4FSaOsISRxqlc4YXeFjgGSOHbYUi3153yLG1qAast+RU89bT67YDROv3bvgdR8gZ+zZmRBkC/eCY+KUeh4Cp0r4pZHsKVFviGvskWBYJJ1yrtRzG0N1KALFxZWClEQvhnch+sJFKVk6QZCTyQeGUqBMk0QJjH7CT4kQwSdYLhyrRYMzqgQyyugnlfH2w1vP15/BGEu1VAwWU2HLqjI6OTSPOWViQVokyqLCNq+iwkjK2+M9/UU05cXje5UbqjQebXtC25y87/Pf73HA8nIZX+UYUHVzXNhhnAjBY+oGHb3c33Ey/p86WTdZOHMpStuSSxq5KjC0rlqS1aQplDR0TYwRNoHsLWaxIrmadJWZxo4hBnyS1qzSkrvlQ6Dve/b9QN1UzN0MoxW2ksYrjVKg+hifF6bkYiMgKPqTzY46errtnmdf+i987Pe/RL73Cmocmdo5p7s1j29ueHsKTEosBO47oVXkxRkf+eRPMFteMEZNP4xsu5HNZs1+t2XoR/p+z363ZvABUycRl5hA9CP7q7fYPP0G0zD9/9bMLefML/zCL/AP/+E/5F//63/NG2+88b6v/9iP/RjOOf7lv/yX/MzP/AwAX/3qV3n77bf5whe+AMAXvvAF/upf/as8ffqUe/fuAfDP//k/Z7Va8elPf/oDPXmd5KLPRhGMwJtWSVJpTiLdMhrZXHQmqIgnkkykKt2U1x5L4PWc+T2D4fTdCd1HgcPDAG5JShVq6KHvidMezwTa4n3PmCKdDzgnpD6fElZpiBByLmmkCuM1Llvu4NjYxOQjlQ5Em3n07JoUE04ZnLPUlWWcDPu8Y1Pv2PVbhm4k+kiYMjGKH8t2VFgFOEczW7I8mTFvK6xOVNqinJhqYYsKQIm50AHy7caJfee53nRkZzhtGqqvPeZjo8Upxf3lkllV8fVnV9TWUAM5ZmZ1ywRoa0go+qlj2cxY1Q1919NazcPdDU8I/Fh1QW0co7+m6QZm2lDrCmdrstWcnN/F3HmZ3HXs1ze4+QmPhhu2NtJGy9JYrJe8kkPmCsg44EDis1bSSM0BEseUROLSTannIz3FoXB53rEdihxXFxv8s6UYuFWamLOMBMuoJ2f1fOgRo7gTl5+jUyKEwNnLH2YcvsLQ9yhTQdNSO4eKiRQnMJJz4eqKWQhiWjaOjMMoLr399Lw4KPwDGWuJz09dWWZtzXzelNFWJAaFcel58WZErmicJSuDqU8Yp4kitpcbqaIQLc3zXUCBqxwv3TvlzYfPGIfhhRlyfqFQKd9SCg1RfRy+VjrSMup5vq2WX/EC0sKL/1X6+Jn9fuDhe5es9x3rvmO368gpMXnPmCLOWpZtw4OLU37oox/m4t4dQkzEA5fCAEjQmk+Gb14GxtAAJTQ2S8cLBdQRF4+C4iTAkZWWJPQc8NNIDJMEOAJZNWi3ojInxOmWFG+52uzZT4H9OKEyNE1N5ZbUVsj5ztoyUhKS/yHwTSkpRGV/V0LcTYUornLhznD8V9779793OYuSTALfvAQmHr1S0hEtGXygn7w4Gk+SezSMI1MpUDCa+bzl4mRBVelybqOss8Idue0TX71M7CdTEB0hdafi5idL5GCyKNyOSC4eJAcCPKBnNKsPo5+998Lr+o4lcVh35avfe/DzHd/4QY5iLpail5FkikTvQRtyBGNrtHXH4STayYJxoFVN3k+M3RZlHHWUJODDaJJSrIiiXRCogCdqCNNEP+zoiBilmIaR7a5js9+z2Xf040gKqZjayffGZPCTKIqSkgat0RplhapAkpFdCOKeHr0nJ7n3dZPncr/njrb4lNleXjE8/ArLj32eUK+4jRlbz9HGEibPLHvuVZq2rQh33uD+5/4ffOzjn8TNGrppYLObeHb1jKeP36bf78gR9l3H7e0N4+Sx9Za63WHsEj8N7K7eZtpfEeMBuv3+jw9UpHzxi1/kV3/1V/lH/+gfsVwujxySk5MT2rbl5OSEP/kn/yS/+Iu/yPn5OavVil/4hV/gC1/4Ap///OcB+Kmf+ik+/elP88f+2B/jb/yNv8Hjx4/5C3/hL/DFL37xe6Il/7NDa43NlqTE9TGphNGGVruSuihS1KQSilySRjMhe5KJBB2ps+Ij1vG/u7u0l7co74k+EqcJTINrT0gjhN0N+ImQEkOe2BdviilEVATjZI4p5l2i8Bi8JyBkxTgprLUsQ+DUaPYh0XiNzZFnt1t248RdVYtfiM4s5jOqekYzP+H0zkC/37Pfbem7QVjdiCKgNg7tDFVlaeuaprbUzmKOZlOO5DPWQPSafhjEWyBEhsnThUhQifP5kni55oc3ibvKsWgraq15b9cx+cRLyxlWSTBhP020C7FGHro9J8sl474jDRPzqubh/oYbAh9xS05cQ11ZNreXzLOGBHXlGIHz1Qm2PcMYy9Rdk5xhchUjmm6K+CGxUE1Z04KgCCJC2QeLT4ouEkwlah1dSLHqhc306Ch7kJYq+X9xUUFrhXOGxcmMxXJOVTtpfGW8XjaIg+GY/KyUopjLCbEJpRIqTFRVxdlLrxMevslm8lTKwHxBW9XkcSAMvSAfLlFFTwwe2hkk2WSm4q6aEcXEAeEwWkuIlzG0TUPdtoUjkcQnw1rJ9wgBZTTG1ihtiEFRNwuc6smxO5p65YNFbE4v8HMU1jpOz1bYJ1fs93t5ncX47Gi+xgHW/15bR0EL8gtd7XEneTHd9vmXDi4qB/Ltw6fPYOiPiFUozqQxZ7TRnCxm3Dk94bWX73N6ujrQXohQzr2AmCllHt4OPFknUnagZMav0JBkQ82qQpuWHEcykRQNytRoK2q0TNl4ceK9oh3GnaB0I4m5xhFGTQpXjFPgrSdXhKDFVqCtadsKpxTojMlKil0l77N1okQ7jH9icQyVN1iaEakmiwhcqVJgFhSlKDNiDPgYmbx0/gffpBylC598ZPSeYQoM08Q4+tL9jkwhEzAoozlfNNy/uxLzSyvBgMZUUIzdxpD5+tPAs50qCESU4jSLTF18hwSFOEjLU1FxyWhRkDKtpMvXZoE2zfe8v3933ZG/52f/Lx050T1+m9Tv5GOtSMmDcWC1WMKTi3NvlIIgZbS2gmD4RH1+Rp4C49RJk5yTcI1iQFeuuAgYUtyjVEYl8MPA5AWlTVnTbdfsh47dIMabfhqFL1WyxLSWBOdMZixCDqUEgdOq2OqHyOT9oW8ghYAzDpUUb18+o4+RaB1BZYZx5ObNrzE7uUt197OobCRyRRvOTeJ1rbl7co+b13+M+rM/ycuvv0JTG/o4sb3tuXl2yZOHb/Lw3W8TpgnnKrGx6PeSyD3t8eMe52ZynYUBawyuXJsf5PhARcrf/tt/G4A/9If+0Ps+/yu/8iv8iT/xJwD4m3/zb6K15md+5mfeZ+Z2OIwx/Nqv/Ro/93M/xxe+8AXm8zk/+7M/y1/+y3/5gz1zEOhTG2w2mCKVzFoJ2a1kReQsRLKoIijJI7DIRafTxIdcy+9rzpm/7WE9QoAcAlpbmJ2hTAObG9TQkcMenzo6P7L3IyEnhhiojcElQz8VUzAD4xgYo3TDROhrmRtXwXBqHDcqspUxJjfdnqc3V3zspXNBBBRUxjBvHAtnmZqGcTYnXtwlRiRVM47YqpaAKaeLE6suxjk1lbNys9agrSZHMaaicEgyEkMec+ZsMScMPQ/euuGNqWJmDYu2ZuMjj7cbXl+uWDYNFklUnbWt7ABaUc3m5GHCZwVGMUwjOkGL4eVmgfUZnGcXdjTW4pXCzmZkKmxdka0lpZF+e83VsOdtM3Dtd3Qh8vp8yak6YU6A/aGfygUi18+RE62P0uLD/6UYObjR5iOiIl2wOl7IspOKLXxVO5ydUxcb/KiEFS9UY33cTCGXaPoSQqcy2pbnYSxjt8FVlouXXiU9fshmu8U4izWW+XxJ3QpHKBMxIi0hx5HQd0zjQIjijxFTkITaw9PUIm21ztIsTzGuFg7WOGCrGlVXxCjeB8Y4OcepQuWEtZqZW3G7vy5O9zLD1seCIhe/EyEmzxZz2rZm3/WEGI6KDnEcLXeZY0pd+RplZKEOIPoLhd3hki3FyGEkdChmjlVLGR9thgGrMo021KacXyUjudVyyd2LU166e8H5nXO0dceRgiJL158p1uOBrz3a0U/Pi9OMFo4RmpyU2OUfx1SanA1aWZQSr4dUAi4pIW4oVdSDTp50BGMblFqglJjHvXeT+G/fvuRkPmPRNtSVGCeKXYuS9N8imVdWRpFkxBYhRUAiHHWx9z2kcx/KvFRQksP4xfvAOI5M3otcvZBAQ4wyRgyJYZwYfaTvB7p+YhgmfISExtjM3bMZr9xbCWpo5PeaUpySZB2+eeN58zoSc/EYShKwmEHURQUdOlKPlEQsqGI7fPRQKXkyKb44K/zO4zvL2P/vHilGhje/Sffl/4Y+O0O7mpwF5cg+YGdzUg6CGHtx70VF/DhSVXWR0xtMawkxMWz3OFeJP4mVUE98JCcro6BaitCQE1FlklU4NyckGIaRfdfRDQPDNAqvJEn+FFoV7p0l58Q0jcWFFmwn48EQhIeSsnCPchbbBZUVfpp4tN6L6kopAqJG625uMLffRLFA5yVpStS2ZrV6hdnJh+he/xHsxz/Hyb1TQoarbc9ufcX26bfZXH2T9fU7jPudFJslGsQo6etCTPihR2OkuE/5iGR/0OMDj3t+p6NpGn75l3+ZX/7lX/5tH/OhD32If/JP/skH+dXf84iI6VDRWBZzpIzSQmrMuXRNKaMTZK1EqaHBqsxrzvF7lxcsn2jSdS8pmFWDOmtRwaKzg3WPvr0B//9p781jbMvuu97PGvZw5pruPHTfHtxtpzuOh9jpDARkCxMswiSeiExkhgcKOCIBFBKIAn+gEAskJEAQBonwB0n8iJQEiALIzw5J/HA8tN22u+1ut3u6fYe6Qw1n3nuv6f2x1j5Vt+0k9nu229c5P6t8u+rsOrXP2nuv9Vu/33eYM/MTqsxig8A06UYIgl5WJsdQi5IC13gWdROdKFXEMGS1Q2nwXjCUGZvGcIAlFxJrHJevX+ex1z6ECh4hNEpAoTRZqdDGkmc6iS9ZCh3ASzKtyXVGJrOoyaIEpqojUNiBKjXSeTweL2Jf0tRN8pQR1NaSa00uFf65XR6zHQZKMex1MF5wZTxlkJX0s5xFY2OVQCm8Uqi8IMs7KJVhlnNq39DNOyyaKdNg2CwHCAvdXkltJ5QEZlVDUZRkQhNUFh+0UR9XTbk13WffLLnNnEXWIKVmc3ObfnMaGQws0gLXLiapDSJTr16kZEXIo53cquMsWt3TCE5sqZttf1wGidKKvMhRQpPlGagjnY4WJBpL2amnLiJOKJbo4+QrM4V3kiLvUE/GoDQ7Z88Trl1l9/I1wmmLPrFDWZZomaOzHDxJyEviTU09m+AJWGewpkpiXjE5CBA9U6RAZVnywZAU3T4yz3EBQm3RMgOhsC4nU4KiVARXkw9ORKBfzHjSji+kybaVvZcICWWRMxr0WCxi0pQLnaoux+aAVJGIiUk7/Rztdu/4WdpVtzLqIFaGaUfvd/wdApkIZBK0TDtJLcmLgq2NAWd2ttja3KAo8kTVjpWGVjvHOYdzjt1JxbVDgw9ZZMwQlWTxDu9BhMS+wafkKlpMaOWSwWj0qQlSx2QyxF201BkhSITwYKPrrMo6SJGulx9wZQ8+8dwNumVBcWKLLhon40Qu2huZkPAnCXSaMB2ka9OW+tsWSUi+OzFJSdRhY6mbhuVyiXNRy8N7R2M9TRMrpk2yEVhUDfN5RWM8QcQEudsrOHdiwNZGLxrCEVLblCgq5mMV5frU87lrNVUjESrhHUSbwLtor5CcyKG9p8TqvgnHq2khisuF1Bb6/ePLW96+GNPypVEuIQTstWssn/gU88WU/sYWSsiVWrVN7CihFMFHheMAOGOol0ukLtAyQ3Sifop1FuMtwonUIBOY5RwvBV7ImMhpgVk2VHVF1SwwWCQK6z3LpmK6XDBfLjC2SUlcnLOkEFELRSUwcgBjDdJIGmPI0rlZ77DJmynpM+K8Z3++YF4b+jrKL1gC3lrqumG+f40tkbPrzlLVHp+fYrr5Wq6cex35qVP0leZwPIamppoe0Oy/yPzgOZbzm5hqQSbi/KWVxlgb7RJ8wkgJUEIiZU7Z6dEsPbZpvqzreDzuau8e4xqMtfFBkAJSv1jgUQl05n0gCI8OAhl0fCiU4XSh+O6ds2zclIjDJco4QreLLwcwC6hcw3hBNr5NtdyjDmPqUmFMznx6iFMBFaCbFQQClYu7bqUl46QcaIkyyC6A03FnZCVkHkY6Y7M2LEykDz738jVqEyh0O5EGcA6dJUaJ98gk6CVDnFx1lpHnOVoKcqHpZIJaSxobe6vCRFlwCThrMKbCWk9lPOPFHOscG/0ee1ev8YcOBNtO0et18FnGc7dvM6sNw05OXVvKomTYK6MGDQpZlkidc7B/iDMN/W6PZrbAWceGKthQBb4J5Lni1sEBU2vxCPr9IT4IsjLD9ruUvZzJ4ZSpa9jPDfPC0DSeneGIM+cfZHh7RB4O4Tap5H4sWU46FEqrBKJtwbWs5iRPAuytkBHphbZ9kwouUkYVWCVDLOmSwJUIWj2PFo8SlEdknqLIgLb9EVYASBk0/cGAg4MDGms4cfoMUkpu37iBc46Tp07Q6ZTQJKO2pHgrQ7xvhQdna4T3BGdoTB19pwirCc9ZDckzQ+go+e4aT56XSCWpjUQR9RuUkARb4aWi6G5gl4e4lLTGJekYfyqNXZ5lbI76TOcLjHUUWZaObFtm8TdWvxs5zrTdtHZcRFu1SkeLlTNhcvVpF+pX1ID7nYITwz64WOVCxHZpv9dle2PExnBAUbZaJykFVRolU+XUWerG8uyNBfM6OtoKGSAk7Im3SKkIIfXzAaEyvI3MFmuX+BAxSFqXCNnB+xoIKN3BC41sQfcisYFwIDVKeIKXeJHz7K5Bi5foPKo4vTGi1PF1EULckHiZZiy/Sk4AgnMr8COElT6QTy0eb+OCVFvLsq6ZTCZUVUWhIu29Ni6CY+towlg1ZpWc2ABCaIoi48RWj9M7A7plHltkqfWnZBQA1FLiPNxeGD718pJJJVdVLx98sgrxeC+SyJtI155V9VLKiAHi2PMbL1tIIPTj9PQ2vlSz53dHphwd87v99rFjQsAvFiw++1n2b97CaM+AqM3jCQTlkMFjbQ06j5s7Y6P2jIuCbEIrkCpq2oiIz1N5hg0BpTRmPqPC4FyUkbCVAy2pakNTLVkuZtTOkAuoG4sPDUJG89tYLWal2SJFdPJWKt2rIprKGmej9Lw1OBd1r7z3ONNEEHhW0NSGq/uH8TOL6JWktEKFCKbev3KDfpB0FjfohiHN9qNw4mEWnR7L2ZTlbJ/cTJD1IWF5Aze/gm0O0N6SKRFJKUpHgLaNVcI8y9GJ1VNmOS6I1IJ0SWH4K4u7Oklp9SaUkJBpvJQoJASBIsoECxGQBBrdrFghPQlv2dzkpOkjFwtEbQha4btD3MzC4T5YTXPjBovZmDrz1KKkqRum1W2s9AgbBcUkmkVVYb1HJdOtypgVPXUBlFnGMNNR7E0rEIG+l5xWOTPjKfBcubXHS7tXeeTiWYQPOC+xzqKliFRrWh0CGbUWGo/0FkK8SURWooMlKE3A4ZwgYAlO44LFuaiAWtUNiybqrWz0+hwc7vPI5YoH6pxOUbIIgif2bjE7nHNPd8BWv8Nm0SUjTn5KShrrCc5iGsPSzNFCMVvM6RUZjakZdgeYypPrDOcN02qJlYHN/pA869B40JlCnjxJPTtkYhbMCjjMHHPt6WYFO5vbDLfPIKqK+lYU7xMyydmnKUgm2qZqKypC4qWIXhccb0WkG0aEtFtOU9gxvIRQEcXeJjhH1YE27Y3HBwUqU2wOz3B6dAExn8YJwIcECpSARRAYDvrs3brN/OCA0dYWmZbs7+1xdTnn5KkdBr0eEgmZwWuF8xGfEk3/4kLrbIMQ0FgDPu6YvBQErdF5Dy0UsvFoXZIXPYQQzGcLhA/0+mVqW8Qd+MR6OhsnacwCvFnRXGO0TZg4lplWDId9DsYTmsZAtwvBtVv9o4ew3R2vdsniDibPHYcF0jU5PlG1dZNwtNsOMOx2OX9yJ+LDPNTGEAQMB302R0PysowKskKlMrxEyxC9ihLT5eZ4yQu3KjwZUiYMUfpr0Y8nS9W5tp0FQeYEb3DWIXVnhetRSqJ8WIk/SlcjlEfqQFQaUAiVJSZMVKsNRB+Tp16+iRaWt33ra9nq92OLTbRVwdjGCsIfGU6ncYkb4liRwLdVlVjdaYyjsYZ5XXNjb4/ZbEYmYSEEVWNYVhFguUwMLRfAuZA8bjI2Rl3uObPBoFsmkHHMj1TS1bGhvWqKmwvH4y/OuTW2WJ/ArylRDT6JYQqFT9cguvmqo+eLkOi8xPsnqQhLvjg1eeV98ZVEgJXmyuocv9R7hED1/IvcfvllppMJIY/VL6kzYr3SY61DpPdyIQpW1vMKJwLdQRdP3BBLWSCVjxiwQmOWy9gyEiI6zIfoJm2cw1bRG265nFMZi0BSL2qqpk5WDFHdVxLtY3zaFCmtkxqxSAmhJ1OxWtpYT+Ycy0XFclnhncM2FqUzrA1MZjOWy4YsqWu74OkpTaFkNCi0cHBjHyk6vF46vtB/Hbdkzd6tW9TjK3TCAX25oAgVdT1G+oYyU+nZEwQpCUJSOxshBz5QZAUIjfEGISSmqTGmitYz/kslpL933N1JSjDY0OBliceCBE2eds0hll69x4VmlaGWWeC+3oB71BZibAnLimAM6IJQWWSzxOkcN5vhpaLOS4KvkbYi1HOaOkqF97IcUSd9llYqXQkOqyp6+MhAj5xcBO49cwlnAi/uv8RQZvjKoAvJUOWcCJZhcLxkLB/73DO87uJFtA94G9lIcd2IGbbzIvHgo7y58wKdHnXnGhTJzTWYtNlREBwhCGrbUDeeZWUwjaWTd5gv51x4fsLrpxqlS67ljiebKeO64uF+jzOdDj2pUM7hsgyvc+aNhUJTDEZMbl7DSIe0MByOKGygFg3SCYTU5IMh4/ENpBZkStIpi1hmFQK5uYkYbLC49hy+I6m8YqqgUB0ujna4v/sgXLvF7OU96vHhCstACLFnniZAtaqIiNQDj23A5GQCpAkrfe9JRRQ4SkaIv0eb3KTFQ0iRqloxGZI6Y9Adcnr7Ihd3LiAWM0y9RKTFO7ahovKxkNEjaDQYMB4fUh2O0UWXk6dy6smYyd5t6tkEETxFkZMlEKWpK6yJk1Zj6ihlHuGTICK1XagMmXXIXUZmNZ2yROkcZxrm40MEIQrRpeqBEHGx++yVMWcvnmZjeJLp4TWsVLRqpW1Hph01mUwWpZCYxqzAyy01s22ZtYlJvDSBI/zPsR21aHfBx6soRxUWsfrjbb8Dyjxn1OtSW0fdJAo+kkGvR1HkUU4dwHmEUEiRNE6Cx1lDXdU8c33CeBEFuaSE4KN+jrMmVU983AW6VE4LqSyfALU4lzxxPME3MUlTSfMkSKS3NM0c5yK2JGDT+SuyLMfYyCjLdJenXr5GL8v4roceQPYHRAhdQKYSOUS4C68AFvrUGgkiAohdKunXxjBZznnp2i4HkykCnxh70YS0MQ5jDD5Emm6mdKqe5JzcGXDx9AbdTh4XjRCrgFILnItVEQG4ILkybfj4cxNu7MdER8KxBCQmm1K21zm10hL5WKZzjpI46ZoLEK1MRuDO9mH7UP6uy1hbvftdfiO1QTyRDfelIoSAm86ZXb7MZDxhfnCAl1XUNZGx0uB91PFxpjkC5GdZ1HrRmmZZUXtL2eniG4kOHi8CqsxjklBVMVlNSucoSTCLtBYJgsiQocH6KLkvhCDTml63h/Mx4TDWYH3sAeo8S+flk9aNRYhAKSWBHGs9i7rGOkfdNPH5VApXG1zdUApBJYDgMcaQh0C3iAq7VeNx9ZTeZoczskIvn8Q3u9TjW/QW1+mrhm4ex2XpLCLhv4SPJocIjxCRyWSNgSDIVYYXUcHZWU9jGkSIys1KHW0yv9y4q5MUiYagYm/ZqiS3HYGOMjmYemcJLmapQge2tOLbTpxGzAWiMcQFTuLHY/IajMlQ8wV+MQffkIVAg6CuptRiico1mS/InSAIR+MsNR5yTeUsV9WSTScZyIJM5hS5pq+6LJxluxywqKs4UdYeoT2n8w4XK8euNDzxwmXeOZtxaquPtBYXOaIEGfEuXkQpfueiA2dQEqolLmhCFtUwQ4g9v5AEc2wwmMbE/rSxmABeSCbTOcNnb/Kt45wqtzyZT7g2rxFTw4NFh/vyHj2ZUWY5QSiC0sydRwcYDkbMJgfU3lGONlGLOarTxUxrgpJYH+j0+1gJ+/M9ag1FlpPJkqYJuF5OceE1qMUcm2nqeskic/R0wT2nz/Pg+bew/bkbhKuXEbamkK29XVr4/PHlLe3o0vexFRZFwdrUJKR7od2/x2RCrACkUWwq7vBCOFaqTjbtUij63U3On7jEma3TlGWH0Cypm1lKEWXSTIlYD6kU3sYHUWeSXqdEKcVkOiHokny0g53uMTs4YFlXCBGwwZPJiKOyzsd71wekjODvsGLVSIqix2BjQNnrkZd9sk6HxXif5eEeeZnT6XXRScdcpM8qg2NyeEi90eVtZ85hlhOWzTRildpCetJ2EFIgQpTI73Z7LKoGH5Jq6FFjiKRqR6ttEkGp4miQiT8jHE1Kqwkqlfvba7dqHqVKjbGGg+mMxjici6y9zY0Bw0EXKWWqXkXVY5lyDO8jINBbw83xkudvzPFeE2R6ZpQihASC9RHkDAGVZRBAyiwyiKQk+GTlEGK7ZHUveRC6jDUG4cnKIcY4rF2sKk1SlqA6CO/JteQtb3wUKRo+/cnHUcAb77nIztYmOtdIotBgK6zXJikxEUg4lXR9nI+JR+0ch7MJn3vhJXb3x0BgXtXUjY1AVo4o91plaJ2RFRmbwz4XzozYHpUUmcZav2KtQWwhuMT8qh28sF/xqecPGc98xDt5j5CJmp2YdO21a8v4EauuY2IVIHixgjKtrnHcPiV20h1k6qN763eLENNqlyqX6o6EDhrXYJ2kk2leKTobAuADzZWrTA/2aKYzlrf3MLLG1RVHzMAIzI90MYvIiljNVjr9nYCSmnqxwGYuerkZF5mGRQSq17MFebdHU1WxdRdcnGOI7xmEIO8OCd6xtBMyLcmlQktFURSRzWdNrE7lSXzQxefTeUdVRdBukZdYrTAuYlGMdahMY02NqZYUSrDTK6icw4VA41vjwdj22z2MTKJ7g6I/3ORsfkBHVdzXa6CTI4XGEJg5x0xG3aC5jVCGWO+NXj3LuqZuGrKsmzTLYnssSioscd7Fz56KBV9J3NVJikKiUKmCKFYCXZkQ0QUThU0ATeMblHQ8tDFkw+aIeY1wLjL7pCQ4h7FQL+qIkO528BNLKHLs4T5eWGoX0KqkQGGWFUooamEwUmCAw6ah5xRdXeK1opGC8/0dCjFgWd9Amrj7rElU6SDJc80Fb3nJWa5NDvnwpz/L93/vd5KJiCsxwUbdBAeOBIyycTEUJFMvEVC0xnae4Hx6vurYn0+06tr6WP6tLf1r+3yXGzIVU54sDthfWFg0vC7vcTHvkIeoPzIxjkk9wwXJcGuDweYOi8ZQdDp4a8FZ+uWALO8zw+CEwkjBVqdkMd1lKQwz6+mWPRAKGwJ64wSZVDT1mKLT4+DZT9PpeC4NRrxO38/m/Axib5e5q7C6ImQpvQitYml7B4TVrn6FaUjzgAisKisiJGSJjAcEcbTAxhJ6PC5IkcY56s8IGVVfT21c4NKZB+l3uyCjpoGdHODnU1SrnBpWp4jUCmlUVHsNREExPJ08Y1nNmUzHoEtUZ4RfGqaTQ6bzWXKkjtRRBAQfYq9bKbTO6HQjzb873Ka3eQahNPV4zOTaiwThKcsuRZ6h9ZHyblsixhmKxnF9f4a8dJoTp+9h96WnMMFH3xhxdP6xWCJQWjEadFhWkdLaMj5WInh3JCzpX45E2uIliUmQaKnjv0sZP6RqyuoyBocSITJ7ioJ+vxu9qIp85WospUpJWAKTuqhTU5uG52/OmcxFFOKTAoRCiMTGSriB9pxD+vve1wlDIwlCxU1CkCDzeI/5uADIrIxA3WDjoiwSiF7Gd4sWGhIhPcNRhwcfvEinzJnO53z8059kbzzm9ffew/nTp+nkGVqplaieSFVZmazUvRC45L/TWMuiqdi9fZsnnn2O63sHyRSxjWSeKSS5ztA6p5sXbI46nDs5YmvUod8tkVLgU1UjFq9ald/4dVB5Pnt9xnNXp9SNjvNjaBITSaUEJDHaVl1CueoEtpTZ2AJNZ3a8aklkXqljycvvubdOVcqYnHgWy5qDyZhO2affK8l13CpY65nN53iihk4u1SveOOD2DqivXKaaz2iqKlJ/3ZxmWaVEtbUf0JEJ2dQEJGhNtz9gsZihBDhjVzhIVzmwDpUpjPPovINQdWRAxsFA6RxrTGzhIsg6AwixKqKEIljQumDQ22BRzSAk3ycJXgiausaYBusiItYTgct10+C8pG4iq6vIopZKs1ygtSJLqtellMy9xwFTG7VyIDBvGm5NlmAdF0ygqGuKQZ+TnQ7kGufjBrfwoIxnZhfkWQZSUvvomL0wntmypjFRWLByFcZbrI34QmOiwrZMlaqvtI13VycpUVNErkp9KzqciJOuEAKfZJyllOxozWv72zAziKpB2sRwsC42YbMOouOgl6FmS1RQLKcHNNRUUqHJyYLANg1KKWpnmYiGOY55Ew0QT+gRRZbTLBr6oqS/uUmYG8KiZqRLekXGuF4ybZY0MiCWgi2R8UbZx7sFjz/9Od708AM8ePZE7D+7aBTlXBSGa1xDSL4xQmuE1FgLmTJY4g7Yuijn7Z3HGseycUxry7SqubW/z/7nL/P2w4xglnxquc+NwpMtLQ+LHudVSe4FjRJM6iY9dJqN0QYbG5uExiNkYLZccNjMuXT2PvBdmO0xmx5QW0dv1CfrSg5vjJnKgFYZ3bxH7QJ0crKTJxGzPby07D35OeTeHhujAedUwfCpK6idPj4scN0M8+A9iOFDiF94Mi24YfUlxJEYVrvg+AAyxHE4AtgefQVWnYiUqCQ2gohtGi88aEFR9tganuDkiXs4vXkySYN75rMKNz8gTA9RzqaJOeFRUtLjfOxRY9o/HnUhykIjRUnwSw4ObtNYRxAZ+WCHrixYzGcYZyL4V0dPoqLbiwDpokumNR2tYWkYP/c0Qlh0oSl6A4qyJMuzpBsjoo5C6rDjPcFYNlXghVkF3rK9vYNd3sv+7ctYEfVFkpAupIROKkm/3+X2wSJ6Rqnj04U8Nu5tHCUtR0ljWrVWu6eYcK4WrHSNjgNnA1EI7cTWECl1bIUVBVmWkWtNpiRSxfcUCa8RdUMibXN/uuTZ3QlOZImW3i6YPgqyhUiV9cEgRQZkkRIeLFJn8RxlFHKTCQelJMi8RAidPpJCKkfwDUJE8Gyb3OmspPGAkJw8NWK0MYwVlDe8kavXdnl29zK740POXb3CfadPc2I4oiiK1ZgrJcl0bFu7EKicZTafcfNgn+euXuPKzVvMq5hQKRmNNpVUKUmSaJ1TliUbvQ5ndgac3hnQ65Wp/ZLIBK3Cqo/3awiCxgUuH9Q8dXnMzYMaH7LkT0Wq5mXRlDJesKOW3bFcldBqz4Z0LWMLuvX2Od7i8T62VcOxSltbKQmrb2PS7pyPO/Zlza2b13jx8nNsbJ7h3NnzDAZ9BIHlfMF4ckBedrD9IXlxVEsJIUBjCC88j5tPcMZg6opqWXMwm1AvKkjrROsLJoTEmiquK0WBQ9LpD2iqBSKL7Zzl5BAlNHmnxIuoCaOkRJUdnA9IqXDLGk+D7vZonEBYh8BTVRXWGkwT78myLPF4tNXkRayuOm9oHYqlAOOi51PEkhty6zCuir5WyyWhaWiaJoJjpUYER5bwms4HlIhuyXvzmp6WVIsG4TwvTZZIJMOqoVdV5N0OvdGAkEtYztHBknlJ5hwTb1O1UVI5waw2TGuLDZLKe2rTYF0Tq4qtNUkQCNSqIvmVxF2dpATVSiwD3kZNAZn0BVAI3z43Hk/NheEGQ5ejjEMFRVCSoB0iBGS3jzUS4XVa4ARBekRdoZ0ma3RUuA0OJwO1qBn7mlljWDaGQmaM9BDpM2QIjP0MmZXUoYdWku7AEFyNWc7pZTnzouRWM2fhHf2y5Iwu+JYgeWI842NPfo57T51EKY0IBmwEWYWEhg/eJXMpE9Vkg6eRAXycDFwA5+POYllbDuY1tw4mfP7Flzh86QaPLTJ6JvCRep/dTkCYwP2qy8VOn9IpJtZTKE+n1+NEp0t/tAm1Y344pXKebHvE8vCQne1ttCxAeMbTPQ7rOTuDLWRng/FyykQZKgJnu31AU+Pp7GzS29pBVXssb95gcfM6pQDtoVf0WexPGftPI09uY37grxDe+gjiyY/CL/yrxD4I6cuzkqU/XllJuAYfAEeiJMfXoipqOrIttRD7/ahY1VIy5+zOee4/cx+9/kb0x4g3BFVjWU73aW5eZ5DLVYLcimq1O2FBrMpIrQheo0PU08jz+HD2QokgcLC3z8H+LvPZHO9cdJwVSd3WGbQRiOWSIAVORV2EeR6VavNOh7LXoyijWF6m5MrkTMpW9j/QAu28sQzEkmYyoGk8uiM5efESYrBBdXCbxfwA4xtcelqEEKAUZVFg7SwyfPK8bQzROicfTTpilfytLsfqv+PrIaRlbfUrx7fX4VhLK7KL+oMBWupoeZBFa4I8gZslpCoaqSUWkrqq4/rhkvFcEIgO0GpVvEmYGRkZE84LnCMlPCI+W8EBWdRQSW0LZAS7h+AQJBH4IMD7WM738b0lSS8l60ATJQfOnNykyHNkCJzY2eLtb3sbH/zAB7m5+zKHL1/h2eu7dIucXtmhLIok2qXIdayULuqayXzOeDZnOk8y7CkJbMHibXVRK00nzxn0upzc7HP+5IjNUY8sVda8S+0cEoDRe3yIrZNxHXj62pTnr09Y1gLn47OhcoV3NSCSd1Wrg5IqZsdagLJNWgOrluxxQcVjM3c6LHHuREwiohNzFO5rjMG21F5jsSbijKbjA6699AVefP4ZuqNtpvuvYefEKfK8pF5MqZqK/miLxWhJp8iOJclgr15F7N0ElQD2PrC0hmvjMYt5FXV2VFKmbjc/PuBNE60GVBbFE108BqEIQpJ1csqygzQGY+tYRdIaATTzBS4lrKaxKPyKroskYg1FAC0T9TjSv6PnU4ZdRLiCdZFSHucsu8IHWQTW1DRNg2kaXN2gdfQhw0UNLe8iJtAZhw1RmbtqHB0RpReUUThjuH44p64NbtEwHDRk3lJslAhTUy/nLK3DESs/HV1gZc6kEdRLQeNKKmuxYYkLDiUVuY7tU+FDHKvwlaJRYtzVSQqinecibkOoyL5INeCoxEfcJfSV5sH+CLGooXKIoPFSIK2P7RQkobFIJwl1TbNY4Ga3cC720/Ksh29MvAgyUNWGqTEIoTjZ2yK3Bc5LnDLcXtzmeTHhHJLP732MpbTcPzrNQ2cfpDdZEA73IEhkLtn3FYfGUMice/MRCy/53Gef4/MPXuL+c6eQJpY4jXLJVTmW53GxdK1Shu1CwApACJy3WB+oas/BdMnl3T2+8OIL2L0Jj4YOeTB8ZDZm0c84NW+4UA54zeYmZRB44xl0u2ghyTpdsrzPfDpnMZ8y2N5hmHVpZmNKBIPtk7DwUC25dbjHqOzRsRmqO2J8+wWmGLIsY6h6mMYjR13yrZNkGqr9W9x84RlUJsiLEUXWYzYZIxHMipzu//nn4LFvwwuxojWSwLE+CfS1jBoftZ9X1RLfIiPS5Cd8mnhkK0Z2tD4GKVBKsNXdZtDb5tTmKTb6I3SWmEOSpFcRNRKq/QPCbIzc2LiD/hraCs+qShPpyHEuU0gX2z9aObwSdMuMsDVMxwiq2QxvGryLaYKQQPILEpkmiAx0hsoz8rKg7JSUZU6WabSUaScdcRZS5amnHr1WgovGaKKaMpuMmDUO7wN5phmd2KE72mS4WNDMxzRNRWUrFmaG846O7tCZKhqTcBMrY0CO/k276uMPZlv0OmoDwaoXkJaocEwMLsBq902IgnVFp0SJo1ZIrjU6tXraZ1/FfQlJ4J7GWC7fmmN8sjEQKWFNVTaBIgRDwKOzghDi2HmhkkKrAdGg8g6gY0IkM7xbYupFvKdEjpA5oMiLEXU1jvIHElTWSYtSQGnBaCNWwESIjJf77r3A5p/5U3zu6Wf47FOfYff6VSYHYwgHR7imNg8UsS0SVhRdkaT0YxIaU8SYrBR5wcagx+mtIWd2RmwNu+RaJhxOFHbzqWIS/XwiqaCygSvjmmeujLl5UOGJxnltNQkB3hpU1klJvogCZsfAsgjwLrUD23M/RpNrqy1tq61NW4QSiBDdc/fHU55+7nkm4wOW0ymL2ZimWuBtEw02kwVFs5gzPthjtn+b2c1d6r0b3NjYptffQBAwUrN9xtAtu0gl6XY68flYzgjPfy5WvDoZQkcRRgvcnM6ZzxarpEsEkWw2FDrLCVikUmRFxmwyptPpIrMO3tboPGe5nOOcpVeW+BAF23SeY5qoUG5tA1pRKB1biDQQwKSWTZ4XUfzMmTTmAucs3kUX68bauBn3LqpTK7UCw1d1VCB3TU1wEaOV5RlaqjiHeBA6kAlFwNAQW+ZSxfPc7HWwLnneWU+1NIyNxzmDkA1a9yhkxrSBZd0wdzUyE+RFQ19qPF0Wss9BlVE1PupHBU/INIVQaOlpvMQ4y/lhxkMXz/LS80+zdF++yeBdnaREXxpitis8QQWC8mnHE9A+R3iJFnBmkHHSK9TMIhcOL0E0nrA02Bv7hIMlXnXwXmF0h8Y7mspHpHc+RCzBupoaTyMtJjgyWbLT3aLvSqZMmDWHXG32eUlN8dpyIJa81JljKkO3UTy7f4AJ8MbeDvcNTqNMRZiPMfWUSfBIFPd2twl+yu988rPUteW+s6cJyyUNFus9xkWQbkRQxSqREA5pPU4FQjIIq4zn1uSAJ55/kd29PU4sPK9TPYr5kvHhgvN5h7OdPuc2+nSzDCkVtrGIjoTRKKoVVobZeIozNZsXL+JnCxaT2wgExWgzMqkyxeHNq0wlbHb6KFciwj77bsbLwfCacguNhlzQ29wm3xhhx9e59vwX4iSyMaDoDDBLF3cE3R78xf8DvuPbUsndHbV2pEzUvKQREJKYX1tBSZ3rlnrYAg4linbfL4kmciJ53JR5n9MbFzm9eQadZXHiVAqpEtbFxd2z9QGzXLD/8kuc6KoI0E19fSGPqJjBJVlq7/DWQHBxgVICiUYYgxABpSVFpun3SgRbLIqcarGkqSt80vtRKtKrtVZkuabIM4o8Jy8KsjxPFROBkvE4pTOUjrRaESKmKfgo3OScxSwrFoslMxuwiQKaSYVTHtXrMeiUSKLQX5MM6ZSU7JxesJgckvka502qYnHUPgupTpUyvzsE2+Jg0GKo7shejuUuiNaiIAErlUJnGoUkYjJlwm4k/Iz3KCUS3iSqh3oXe+23ZzXIaNugZKtB4mLrRunIQvAWIYtUEYraIELnCDKCt5HuLfOVKJzUiqByvGmACHwMIhy1WYJPnz0jyRmR5TmD4SCKDnpWjK/t7Q2+/dvfwMMPP8jlK1f43FNP8ewzn2M+n9yRpMAxobOUlMkkJti2urJMszHqc3JrxJmtIae2homVFRe1VlSLAMEFXPD4IKiM4+a04bkbU67eWtBYQQg6XYp43aRU0fE3y5Eqw/m2YpLaGkIlXEu0KjgCwYaUwLS1tuPcruTmEwTCS3rDHsteydPPPM3t/avMDvdYTqf4egm2QToTr3WIGBZB3KCUztDUS8bXZ8xvXaXQOQiJLfpMJjPMvGJ+cEC/12NQCHZ2n0fdvo7fPo3KZdRDkp4az41lxcFsgncOIfJUnUuMvkwSSZYW23hcXWMLjZ03BN8gVUHjlggXIntyviTPNHleUDcNdVVjqxqVZ5RlByUiZiSI6AuGkggdxTt1kaoqTaw6uhCB4LElFxNwnyrpQimEjhXB4Bps1YD3FJ0iSWNEvFDE29m4mSOy34IP5FJSZIpuJvCDDmPTUFtPkc7FVTXlAvpdhR5lkWHqAt4rhAPTWBrvyEVgB9j3mkMGOCXxEoKUTHQfSU3RmXNPVvPm++9h5+SJFZvty427OklBQFCsQH4SwMdeqxcNXhiUVGRC8FCnhx5XsAzIKk6UYTzD3zykmc0J+RAvchAdGidxQhPyARiHtEtqN8Nn4JxnWRtuVxWnTryG3rKkqg+5srjOFT9m6RpmeskDTcmhXpKZBrzlgWKLejTk1299nOfMLm8K9/CHH/0ONiqHvXmNenwLIx250pzr7TBbOv7vD32Eb3nkAc5sbpBJKHVJESTCOFQWdzrOxoTMiEDtHdOqZtE0XLu1x4s3d+mKku8dXeRk4cnHczpbAzbPFhQNlGiUCzil4oNXBprGYhqHn0zAWXaGO2yfOY13nnGoGGxuUNYZQVoEGV56ZvMJw7KDshnZ9oCb85fYE4bTnSE7ckQIku5oRGdrAxHmvPyFp5GFpDvaoOwOsIsGRMAA1fe8ldE7vpe2gR2LEkd4j+CjSqX3SbTLJ3qqCCDja45jpnZCJCXz+B5eRiBrpxwyHJzl7NYFOmWOk1CLKBjWlQKdWjjx4RYYWzPfP2R8/SpnH7gn7mQFCO/TDtWn8wsEHzUDgmsSuyzqpuCi5kmWF4SmiU7IzuCsJrgCJWNCYq1J/dzIeNWZJs9yiqIgz4so7CQEikRjVUR8ktLxnJNEdaIzxDFznmaxxDaGhY04BO8DSnq0iIyBOkBHt7YSscWSC+iVI8TGkKaqmBzuU1XTiNYXbR0pxmo9Da3aaNsGOtYHanffq1fb/zu2GhMXdKk1MpW1Zdo9ti0bpVSqooSVHT3B0zSW2gpAJ0ZSnBNiCT+CEIXUUVYAj09ibqL180mve9dAaFJbxxJcBJL7IEAkRmFb0UubIlAo3cW52FLqFAVbo0Gi7R5TRxaCkGWMhgNe+9BruP/SJV5+/ev52Ed/hy88+3mW1fxoijuG1YmfPt77rY7N6RNbnNreYGfYY7Pfpcx1pOEHCNF0Kt4HAYx3TCvP7Znh8q0p127PqZvYqIrtG7lK2khYguAcWVbifLKd0NFKIHiHT3idtqIiYmaUwMceESRHNaBU0fKAjxUgleV8x5sf5OPVpzk83KNQNbPxIXVV441BOosOFh0cgjjGinhNMxFFFWvb0BiDCUt8CNQcMpvPmR/eZu/6CbpFxvkiMHLL6E+DR2mFVrGS4wLMGsvBeIq1hkAZ71Fi283a+Fldahv1e32WlcE6j1ISYxqKsgfeslhWVMYkk784nlnRYTmb0ziHF5J+pwvEKoYXGpmF6EelM0IjI05Na1SWEbzHOoPwAlsZhJSR4eV8tD1Jz4Kta4y1lEn5VcooRt9i9wIhmhzGoWdmLR1VkoWAWzr6uaKXZ8way6GzsfVtHctGsqhqlPCxzZgJCp2hiigu6irPpKoxywXdak5RPsC+3sEoAVqiBhucHzV8Wz7lTEcw3OgB9ite5u/qJCWTmlyWWBHwMt7IyICmNeuK7ZCTWnGv6KFnDlWnTHU6x84WVKZGjraRxQ74HG8l+nACQSLKDgaPqSoYdjCLhvl4yc3xhFxvMtAnqRcv8bT5Ajf9BOUcPRc44RQbQSCaBWXTUAnBsIaDg5rCRuDTHlNeGu/y0H2vZ7s7wN8eYg+j7sig7FB0BLv7e/zvx59kuDEgyxVaSoZ5h43tDc5t9FgYz8JZ5vWS6XTOZDajMRYZPP2i5LWbZzlT9tioAnIyoSsK8p6CXGNUNFzT1tEEx8Gi4mBaQdMw6A85U3Q5uXOWft5FIlmYilJm9Dp9QtPgyw4+72IPbzNrGnY2TiHYwXU9t/YPcFpwf7ZF1kiEVmTdHn5ri8Obz7P0FZtnT9AZbcDSo2zAS01VdtF/5G2oLF8tLC17R0qBliLKdKey9wrvmrya0pKMotVUibt6IQJCgdCSbjni7NYltjbPoosSRMCq6AmTRxQCsgVzQtzhh4AzjoNrV9GmQrXatal4EzeT7QzMqifvfQRyRjxDQCiNzvJYDobYG3eRYuucTfiaAm3kyqVYKdA6I88ysjwny3K0UsjEWFIqijwJQqw6WUdQAnRkrwQXjc68d5hqiTUVdbKUbyXxIw5GMKsdXkoyJZDK411cFCsEpYJs0GVUduhMpyxnhzRmmUCXyaJ+tXvmCHNCiz1IDKuVmF5LEZdHFZVjEQ0VxapiJdKh0WcpIkZU+l6EgBLxq7IeF5KPktCRlZIYO/HTSKQqsN7hbIPOOlgXjhZaJEKqKKQW+za0MFBnolS60hK5knMP0ZDOO3TeB6kRzoKAXr9DtxN35i12J7KSiFUh4k5YK8UDDz7A+QsXuXljl+e/8DRPPflpbt6+jTF29fut3s/mxpCH7r/Eia0NNkdDyiKjk2nyPF+1DD1x9+1R1I1lf1px9faY3YOK8czgvcC3ejBtDtnSnp1DZtEeABl34FGmPUoJuSSo2Aq6iZXbdXtVE0A3pHpmm3+malPbHrxwZovv+fZLPPVxnZKiKMzXOLAWsAHlA8p7NB6NS+23+HQaHzA2PXsiPnPGGZaHtzH1kuV4jyJTPPTAWVQwUA5Rwz4hROKDV4qKwNI5xtMpxjTRATudrxQxUdE6wzUNShIrpckAsNjahjwHLHXj8Rg8UNcNoMjzjHLUYzafUS3mBGMoylgRcQgqa5O1gEerDOsDSIVtakyqKFrnqY2JGBpBBOTLWGWRAZbzRXQ9VoosyyKdvZ3/aPPTRO33ASUFY+fYXzZc7Gl63YxOriiyDYx1jJuGyht08BgjmVQ1whisVigtyQqNyDRYz5yKWWPwAYZiQT55BlHdRpddVOE5mZc82u9ysb/FsFfQKRSdUiO+xPP+e8VdnaSgFDLLKE10IvZaYLKoKilthhSBPFS8dtCjqFKvUWqEsPh+B9Pro3t99FLhrYMslvd9MNFW3IPMHGqrQ1NPObx1nZuHuyxrw6nuKfLxHk+555Bmydk6YIWhCUu6YoHNMzoaSmvQDSiraXavsVk4pHOc72SUsmTv4BZq7tk+eQZTQg8D3YLDrKLX6VLbijIrGFczDufLqFR4OePec6foI1iYGqdAI9nqDtnu9+kJxSgrkMYklpJG9EtMr6FyFjOf01UFC2Po4lksK24v5+RFzplenzMq5/RgSK4UMi9Y1ksOJrcppMZsnUQtr2Px5LbBjm8z7HYpQhe3tcXh4SeppKMbMvqigw+WrNcl73eYHlznxvg2Ow/dQ2cwQHmJFTVeShbO0Xvd6+kVJ8n2I5Xa9gKuG2dQkRKS6EKbzP1SyVsoAdInv4AoFZZKMLF9oyVaZ2wOznHfqdfQ6w9YCFgET64UQwVZaHukYlXyjpuRyAxxjWV8/To9raNiaGgBsz5Z2McdaPCe4A2QdqitmmgICegd6a+eAr/wSCWTeZiKVRRjY+k8zvu0TRBI9EjdmgBqsqJAqCx+1FQWjslJYm+YhNRwBmcb6mpJMHXSbYhnSIhJmRaQa5EYAJF5gYDaCXqZQiX9Lp9Lsq1NyuEIVy1p6pp6OaNpFtGx+RijSqz+FaldIduXjv/fsX/vlOdvq1+r6kr7fiKs8ECi9bkhVr72ZxXGpXpL0uHwOISSKw0QITOyoodrlinBjdN6NKaMAHWtZazWhYB3MRtVUoHO8c4QvIxMH2xMYQRkZRRpiyrXgpM7o6Qtc+wztdcygbWBVF1w9DoF991/H/c/cInHHnsrT37icX7jtz/EbLFYVZ90VnD67EVE3qMKBdNGcXM6p1OU5HlgsZhjkiZSbTzzyrE/njGdN1jbpodJZ4Z2jOOuX+Yabxqk0gihCCFSEFzSR0GA8xGT0rbgVsDpY9gTH9q0NMm6pZZQrA7GBKbTKXnszZcoe7GlhipiO01qjK9pXMAbH6m93iG8QeEjy0oGSO2QeJ3jAuxJeBs8TV2zEFM2Nvpc6OaE2QKkR5Y5ovHRk0fKqDQuJZPphLpu6CUmTVIoQGc5GST1WIurDTgL3jE92ENmGZsnTrBYzGmWCw729iiLkoCKwpEqQ5YdhPMsaofugBWKqqmovaCqa4QUlMqsDCNDiIliXVU0tolj6uM1bTc2mVYEG2npkkBRZJF9F2KyedTujcmlkq2iU3zOLi+WjCvBfZtdLnS6DPKcB09tsHt7H7lsKHV8rg4bh5Bp45ZEObMyI9Q1uRbkSlA5x6iXsRVq5u4q2nYYZZpv7ZzkxGCbU9sjNoZ9yjyPz+4fpCRFKkAuMaVBCYkWGkWHAFhZo2h4UGleEzLEtMb76MUhhEB0SrSXiBrUeI6SGdKCtQaNI8iA1xYrPIfVLW40u1T37qAfucRWZQlP7TLde46NqkKaOXP2qHoCdnZgdC+qe5pMliyXV+l8/gnmwx0q9xIXbEO3tsjg6PTPEJoFpjEIYvtjNruJy6KRYK40A1FQCoVFoQc9pFY0S0OvU3B2tMFsNqUsMnpZgZACayz1dMa+O6SsBHnjqb1jUTXYqub24QQdFA/dc56t/oiuzpk3Swa9LtoJtvobnNjYQRpLyEsWOK7evkJtDBd3zpLdvoUQCl9khOUEY5b0O0O62QCfLdid3mbcGB7ob8S8oczJB0Nsqbh6cJXBpTOU95xDBGgmS5pOzrRxTJqGSw/eRzGv0S9MEEVDvtmhybux3C8FUgeciA+dS0ZaWkuUJtJMiewFJeJkKDRkumBzeIYTO5fYGe0gJMyJk/NQQSE8agUDiK2OlBaleTXRNGvD5NYeWyOdXou+K8G3Ymt+NRFDnOCjFHhc4EKwsc3gmsgokQqRnE21iiJOjfeoVJ7xIbFJdBQci0wdh7cV5GXC/1qC8ZDpuIMXEiF1wh8kno6NlRRnG6q6JrjIIFjRQWmF8gK5jHim2geWiRmVIcjxqCBRAQoJXgR8LpnrLqrbZ3u0ga0qquWcqprhnMG1EvoCkh7A6rm901Twjv13xCGJY4kpx75iYS22wZLbLkK0+RzOefYmC1xbxUmJanBJp4UkKIUCmcf2oDMoUeCDwHuLUrEW50M8j+AsiMhqca5BhhCBtCR/rdAQgkFJjdQlxiaMi9ScOTFaye0nOtLR50+4nRWNXslkqSBYVg27N/Z46dotkCVFmRGCQqoClXe5esty5eYeQh6gtI6VD5XF8/UhAWNj1ch7n+iqcgVcjZUvsVJTjU7eMlZhksLpqhUnNaBSmypehKgFo1asJrECJ7NKVkQ6LpbYotpsTFDi37333pPcd+/JaDIYYnsxSI0L0XusMQ7bxMqgDA7hY1VciGgXYW30NsqyLCZc3iOVXnlcNcbQ1ZJvP7PJ0DbYvM2yDYho0KnynF5ZsjXscfPmbaplbBkJFX15VMLk6IQLa+oo66AEaALGe+qqYrx3SNVYDvf2cKE1b3U0Zk6n30dkGTLTqEBUXy01oZHU0wbjHFlRojPNZN4kTZxYvbc20o9dCNTGIJXEuEBU2pB4a2mqml43J1MqYYOi1nYr6te2F1shSziSbbhmDNPrE67cnrHdydnuK77l3BAzrWkawyIEZtbhAmRORChk16HLikLWFNZTLAK1jUrYW6ViURmkslzoFexsDNkc9tjZGFGqhAyUrwTZ//5xVycpIbe4POBoErc+uthKNHkInMTzxmJENvHgNFJocAFXRm+BbDxHNAFX5tB4vK1xdQ3eIESNzRpuhT2uZXO697829lIlVKdyDrdOIj7xMeRzuyx1zeTENhv3PkK5cYK5gKrx1JUhz05jNreZneuwfM1DjNx9yGc/T7FcsFOO2L8yZWEMvXtO0+1pylHBoZ1T7S/Zybp0Mk9WaJTqUeNQnZx8FHuWw+4AVTuUCiyqBTdu3WY2ayjmDdrUGC/oZQM2fCCTgiLX7OzscGI0pJAq3qzdHqaJXhEn+iPOXbgHVRtsyKlUznx6E13mbO2cxB/OsMpiGoHsbTO7/xHCeI+6snS2u4yvf46rZg5CM5QxWewOR4iyw/XDQ8TOJp3XXKJScUdrNrrcmEy4Ma+Rm5ILeYM7uIkvp2RbCjGZI0YnCA6yTNLt5kkCPDJ6BIK80GgtExtGIDWoLNIxe90dLpx5HTsbJ/BZNHZzQDctvLIto3PUkmgXEt/uumMdmaa2LGczss3tuN/3kVEUsRDpfkz937hHjecnovUuSmYQJFL3cMLgnSX22aM3R6Zjuda5CHKN4D0F1kMW3X0JDhxoFVs7ofEInSFClG5HRmXdkICi3lm8ja0kYxvmyyUi90dYjdWDdPSfDZG+Loi2C8OMuNDHFRUCqRcOHQG19NGluNeh0+vg3XYyszTU1ZK6WeKcWbE6QvsH20RldQ3aakuaRElaEIAMcXJDHCUpIrXhosprrLwt6opb4zmCfnSyDSEtgjEpcMagVDLsFBKdFdimiiBEYsthVT0LAS2izoTQCXuBjlUUZ5Aq0oWdifghpXv4cATQzouC7e3NtGinio9o24JHA57yKKTUGB944aVdPvbRx7ly+TK1caC3ot9Xiy9BpBYbiNAqJGuc9QkHdAwH0rYZhVolKO3flrJtiab3kpGhI5VOyVd7jRLN2QdCFEwhCIVwYVU5iUlYXAhT0Wll0ClSZS3+/Xh+w/6QN3/rvehcpspjbEs5D8bFikHV2FjddtHiQvj4tBACprbMqzm6KOgXXYSM0gsqKxFKYaoF9XzGd5wc8m2bA9x8jOp18DIjGAdSRd2dTod+p8v9O9u8fPUqk9mcHetWi3hUtI/Mz1zHMfY2gpGF8/SHfQ5nU25ee5liOGK+qMiVxmkRNUasZTY5pOgNCFLiiKaSWZnjFwKpHL28oAmehalRZUY9q7CuxiShNB+iuaFNnjfRtE/hnaNpTATVq6yVfIr3hPcJM+fjmiWO5jQZotCpQ+CFYoHD1Q0L4zBNjqod/Y6k7OYQHDcXlrlzlFIhhQMJuXD4PmAsVjnyUiGDoucVJ/BUeBSefifS4QulUM5GwVUlV4/+lxt3dZLipEGoQO5KQnB46QgikHvDGeH4dl0wqkCQIYoclulB9j62DZzB5prQ7SMOakS1QLsaG2pMD27KJXuqx4nuWQ7291FIiizjyvgmve4mvbe+mXDvFrP9y3T62wy6Z2lyDVWNb5ZRTn20waR/grDp2eqOKCYgL2kWN3d58fnH2cgusaxnLJcepyrq6ZJ+qTk1GtEZltx2FfNmSbCxj1pkOcPBkPnS0O90UabhcD7h9u1DqspyZrhFkS0x0ykdp+iUGRQZTkZ/CDOeowiYxmKxVMuKfrfD+eGQk70ueSfHUFC7ObPZHnY+Q+I5PNxnQ5fMxnMkgtH8FFYo9ps5+egck3rKbnPAjTzwWtlHCUWR5wjfcG33Ks2ZEZv330MTLLWGMBpyvV7w27e+wMMb22xvjrDLJc7eRAxKRFCETokfdlDzOoLdNBHZLmWUZFaOkBlUAXmRURQF/d42W6NTjDbPMhqdYJRnaacXUpumtUDnKKNv2yqinUw5tnjGCbs2AU8CtKVSagtBEVJwh2Sr92nRFXHSJ4CLO1iZZwgdfTWEtEhpkQGUFhR5hg8mCkgRk5Ss1JGGLCMjKM8ykhEqQmpU0YnAFZlFeIf3BBk1P7y3WBfdR5u6YjJbUJ7WFOpIxryNECKkLaQkxPtAR0ORkoHV8rZqWUR7PoNk6QMdlV6UEcSedbqUgxHBOZy1EUBsLc5ajIvKm9HwL6wW6pWtgIw6AkfGBj62XznaEXoffXLaSlbT1Ozuzbg9meFEGdV6k5aFT5WlCIxVqcsVAbJS5amKElCqhpAhEstllUx5ixcyYk9EAJHHsw4B7ywgEarEpaqAEILRsM/2Rm/1+dr0tR3rNmkTKgJP98cLPvHEM3z6U59lsaiAkkCiCaWEIbJqYkIm27JScjWKoyWBWOKXMi5kQPIpSm0toSBZPwQRk6dYgYl6QwEQPn2mRNdnhb9RcfzE6taPv58AsytB/hVYq61Jtm8sybKC1732HOfObqzMGuNIy0jDNYamaajrJl6zBIwX3iGFRyTvIudc9CPKe+iiSyBit6QIcU4Llj9833l0XUevo1lFNvSxwqg0WdGh0+sxHPTZLkuevXqTW7s3OHP+LGo0BBExOwSHDIKsKFdbGFd7MinQUiJDYH54iCp7iKwACVm3pGlq6vmC+WxBJ0h0WVBPxiwWU07snKSTZ1xfLLA2iq9tbG4SmpoA1MYSMo3zlsZ5FnVk9Sgl0+ZC0DQG7z1lHvVY5AobBEpF9mGbfEYVXYEWgpxoGWODp/E+4uGIlaGJ94xMoNuTKB3QAWovWBoQypO7QD/Ajqu5kSmWwkEh6HcyrFX4GrZEztyaKHgqA/1uGefDAIXWkb10bFP05cRdnaRkokCSIVUgWtUEMm+5GAJvEpqtRbQc12UWAYVlRvAKbQJkJV7KuPNYeIQ1KBs1UVwn45Apu1i2ti+y3D2gWhguXbgPysD5jqKqJHNbce6+R+lun0U6CEJjjSMLio6EoD2drGS5tY0qAoUuMNUhXRXQ99zHvhpx89plzu6cA11y7dZlrkyucP7iGYQCnXe4Z7jDdHHI+FAx2tokyzK8ECyyOctmwWxZc/XmTW7t3UajaaxEOk9n7umPOpRbG8giY3825srtXbZ1jgbUItANAW2WnBmN2N7aQo5OUOUli8Vtrl19nmo6ZrPTp1duMOgNGW3fRzW4hR7fRsga95n/B2thuLHBtcuf5KBZ0LWas/0huYg8/aWrER3BzqlNZtJS55qqW3LLLvm/Hv/fdJ2ht32KbfpI57BmRlY32Apcb4vw4hgu70UQaSbQhUJKjeqU9LdHbO2c4uSJezh54hwnts+xORhR5AVOiNj2IfVkjz0ZQbTUWFYLcEufbSsoKimVitRH90JiRNQf8d4l8TWZ1pDYfW9JLIlkGRF+XiCFwouAVHEhiQA4RV50EB6CNcgmUomlj5gVYV3qjcf2lXdxoiBVgLTSiCLHOhOrLDruqr0C4WxkYBCiRoozLGYzbo/nZOcLVJavyvftqFgf3VoDUAdBrgUDHcetVUYJ6bO23QoIlDiWIuK3tIzv5hK7gzSRZ3kBFGn3H5A+luet80c06ST97kMgy3LaNkJbto4ts7gQRkXhuOi7EKm2tXUcVg21DehCr9Q/AyFWs7xPGiMRf9Hu6qXIUKrABnBmSfCxshJCiNorImIyggxgG4TMEMl1u2VxxXZNEYG2IrZOLpzdIs9jCb4VEWwT4LZ9hZTYAM+9dIv/538/wZWXr+NsbBX51sCt/f3V+IvU1mtF3OTRYi/aKolcVb4iaBikUCubhJCAIqsEUIjVeJDE4YTSOB/vyai/EduOpOcqpMQpeI+zbXIZE7f2XCOeXa6qOUVecN99Z3nDt56Pzsuh1YAJFHmeKk3Rrdlag7eRVqtIInzBI4LHWRtZLh4aoVF5FMwUKiZmmdK8454TnNvaxBzu4Wwg1BUyqwnGEJRGKk2n22WjO+DsYEQpHFdffIH7HryfvCwSTTak9o5EI3FSU/Y0QiuaVJEr85Jut0M9n6Glpux34zMtBUFKsk6HpqnAWcoso6obqskULQUnt7e4du0K1XwO/QFKacxyRpbn5MFSV4Fl1WB9wkMh0Fpikou9TsJ/7aYr+g7JiC8XpKpaW30UFEAWAnXwdISkSJYrpYRGQuUt3glk0UEqGC8a9o2g1ApRZPgikOfQE5rTxtErDc0JhXCOSSW4gmeiogHh1BiUDGxvDmOl3nq8i/PTV9jtubuTlBOD8+RZybKeAA2ltdznG77NKEZLEfuTpYpUwyIjDEaEBvy8hixH5Dl+UkdFPFsRMHgc40JyuTog3zpLPZlxMG6498IjTN2MDTVkqyu5vZywWBjq3NDpjqhdoDImyh4HS6Ezyp0+fZkTTl9ADUpsbVnqSHMdjTqMg+DgNdtMbSDPLM+//BzP1y9z2Kt48NxFdq9doz/tMxp0OX/qHGXRxdU1i6qiIOPq7nVu3TrgYPc6p8qSDpqhhfvvu5+eL6EHY294ZvdF9m8fcCJknM9GnKRAdSQbw21Cs6Qoe8jhSZbbp9m79jRXn3+KrIETZ+/hlMzRtaFfjnCNRTQVIe8hyw6L21ehM8Jrz56bM24qdkyHjlR0swxRaJrM09/pU3cUVVdRd0uWpeS3PvMpbu3t88j2Bl5YOnkf3Ti8GeP2wPsceejRV5aoy1cwxlN2+5y9OOTUuQd54MEH+bZHX8OlC+fpdft0c00ho/6BD6DxEeyVZsx2qTtqM8Tj4gOdagMRCo9OVNF21yKlQGWahexhjE04Dx8t2lvMQVrxg2/rripN2CIq2pJEsWQRF57gYivHe1yybQ827oBzoRCFJrGcUUKgM5V2SIJMR5M3Vy1QKocSvGtQKic4F+mxMpqeBQLeOabjGdf3l2zIjH6hV595hScQAS9g7iLuZEuRTODaKtOxmSUc+ydAhwg0DD4xItJOWqwUJtv/T+wsIZIOigKyuNiGVj8jkOUlEKKAV1vVEkdJSkg/DsTkKkiBKEsGoxGdch+rukTNjyg/DoBsRc0MUuokhmYIQQKRSYTUUdIlOJRIvX0RrQYCAhfq1YduVYalEEiZASpde8i05p6z2ysX4Ljwp3YVcUEPwLJ2fPQTz/CJx59iOpklMz6ZwJORCdS2wHyi9rbJQKsZFCtGUT37ONA4atmk31+1mogXKWnPeJ9qMKG9vmJVGRHEZGuV2nuRbmmX2oFiBbptP1NL7Iq5jGwLa+R5xvlzWzz68DnOn92g181SgiJWyrSdTpesgCAjjd45i23qqDfU3qsh6hBFhVWDrxpkbZGFi1VFoQl4Hugpvue1F/E+YIyB2iCXBiEPkPMFSI2Wik63R3dzg5ODLR7e2OYLn/k0j77hTXTKDt1+N84bNlkeZCV5BhYfz0dKnPWURcnW9jb7kykyK9A6J8uiHYNrohu99RETVuQ5LqtwtoptrbpCSMFwNIzib6amquuESTGY2qJlRtGJIorWWuqqAuLGpczzlKQItFTR0wqBEqIt10WjVRHTlT5wT7oX6uBBKhYi0MsiNXvpTMRmLi1yo2TXuajxowWi0JSDAlUusMLgDIwoEVJiraQrAiEHvGOGQ3rPYNih1y842I+CfJXzFEW5mg++3Lirk5Szm+fJOjnXbi/JF2O+xXleM4HOpEFmIAata2QA6SNF00lsWYAHv1iiZhUsHJgG2yxZdAS7csxYCS6NRhyO9+j3NdfGV8nLLvPDQ0SukF5SesF4vsCUfZa1TYwDSd7t0u0N2Tl9CrNsyDqQ9TSL8ZxiMMfojM7WFoUuoTZM8j439/cZDHPOLLpMDw8Q997Hue0TbI826Qz6IKMI09wb5vOKK/s3uHbzBmd6fe7bPsup/oCu7jLo9eltbtEo+OyVZ3nm4Aa5lbxl+yKnVclguM3G9lmql15gONpkcdAglaLWmr3dL7D79DPcMkvecuZ+Tm9fYPz855k2Fl3McZMDGgRlb4h1gYmu6J7Z4DPLF3nGHXI6aO4bDBhmObJQVB2J6WXYYZfFqKTaGWL6BV+48hwvvPgC925tsN0fkHdHoEr8okE3S6gCsjHo5mU6c025+yx5scF3vu0H+ZaHL3HP+TN0imh8JkWkJmeC2IMNrFoCiCNxqdS1aX/MitbKcRCpWHm9rNbktEjkZcGis81kfp3+hsEbi09aHu37kJKctuwa9SYE+NjXdwGkjQtjMC62jJyNxnVEKfjgDHm3kxakIwaTFAElBHkeqyCuqRFCoTo5zkZJfU8SqQOCMTgbTcdc07B/MGVSKe7bPEGZ5a3Qa+xOBc+hDRxaSSEDG4qV9PlxzEhb7k6fNv1u/Kl65QuiFR1b7avjWIejd1mxkVugCSCJvimxqhXfSxJWCWTbVbOpeSKyHNXbQOclG6ag073JzJZIr5JmTdSxkVrRylFHJ4WWOi0hSCQCrQqMD6l65pBCR/Gz5PsjVRHvOakjWDOkBV7mhKBiJiyhyDWbG/146VvXhtS2ad2OZ/OaD/6vT/K5zz5HVTUrb5vYXjxqxR21w6JYmhQCH2yU2A1theboWsZ38Mkz5Rig1cfyV6zAHCUH7S+LdJ/HoqDACx9l8I+9Hq/OscSpVWZVCq1T+0MphIgbsWG/4PTJIfffs8PJkwOKTK2eKylE0o6J95bOCnSnQGZF/NS2wTZ1BCunz+69xzQVTV0RvKVAE7IDhNDABoXM6CjJW7ZLNvsDqskEO56TBYsw4CdT9GxBlnWwSpNnGXmnR6fb57XbJ/jY5Re48tyz9Ppd8kwnqrnAWIekQmU62oDICApXMt5Xgahzcnt/j2AzdKeLECG2b4WIzCAV2TgIgQ3R5duEQNbpIhEs64q6rghIZvM5VW2QKqOfCZq6YlHVWGtjZTW17pWQscqTaNKqpbWnxl/wDttWEwmcFZLXdgtQksO6pgFuWsvCGTa7OdpDP9OooGlm0Rds5KLIaFZmDDScCh6x8DQmJ8iMLASsDQTr0M5jvEcCG6Vga2OELroo5bEobBBovjIhN7jLk5Ru2afT0xRjy2vzktPXpujbBpQkaBmpoSIQOgVa5SgjcHked9oHS0RjwTqo5gQanPRMRM1t0XDm3tfgFhXDQc689Ny8dZMz2SkWNkBtkd5jVEXIOlQhEGRAZIrBRo+SwPagh+708FmGlprKVmSzms7JHfSowOZdagtbmcDkOYveNvmmpnx6wf6NG0znMx4cnSJ3EmUdTSGZ1HNeuvICz199GS/gRNHjjC84rTTnu9uUeReGHebKcbh3m2b3kNcNtnn4wgUGXiCdpzh1luXWDuLKCyzDDJFB0IHnX/wsxjRsDzc5MSs4O9hEYBDf/Ycpd19k+fJ1vG8QRReVdzmYHvByaThdTLly6wqlVtwz6HGi00cVGtuTVCNJs9WlOdWjOjPCntjhpb0bfOLyDTZOnmPU6bJTbKJ8iVo26CqgmwaWhmAqnLGoGqRsuHDxPP/H9/8RchVokHHhSPtkEyJtNs7RYgXs9GnmDohXEkxWC4cULTckrZPiaAFdJS9SkHc12c5pbt26ySljcMbEhU+KWHJAJPn9o8QotpCSNLsPBBfFmUBGenAIBBd34sEZgvNkWR5330loTKS2h5RRTAwRcE2DkBJd6rR7jZL7IURX78jKjROHtQ31YsHu7SmuOMn5cxcZlllKQuL/6iCwQpKLwJaGLO2gbVrHdNqhH6fTEuI6aeInTzt2qNPvJKgnUkQ9h6PN05H+6FE15+iixEmWCKjEryo9wR9Vc4KQkc2Ul6juED3cIe/02bQlvcGLzCZ5ShYVQeTxLL1BiqhKGmmQflVVwNsVxynTJSF4rK1xoULpHIlLc0n8rCEJ2YEnOAlZFhPP9DGG/R7DXisK1rYD28qIYDZv+MAHP8ZTTz6HNf6oGhGXu9VYxvJUas+kQY/Jmkp5zCozOarwEFs7EHFTMtkjhNV7pTZam7C3zaeU4MQCSItdgZDk/FNGSpBRxGxjUPLAvWe4cG6LQb+g28kocn1UXVkZ9aVEyrt0X4tUfUridqt7QCBVjlRFTGSdwZk6JiQh4JMA2mK5wJgGJQKNCzRB42WOyAqyouRUDq8/McTd3MfsH6BmS3wvQ1UGLwPN3iGZysk2NsmKHkWnR29jxFCXnCPj+Y9+mDOXHqCb53QH/VTBiuPgagt5ZNBolZHskCl8EZMVZ5jNlphqSZblKJWh0GiZYZoKE2pUloFzOF+RFfmqRTWbz3AeqsoS0AwGJbapORyPWS6reB3EkXZLrjOKLCNTikynKkrCF0mRkhQR26jBx6ry6UzRKxVZJhlkOd4FzjWCaVNRF4FSaDay6AFmhKbfL6inY4pSs9VXnAk1uRPsuYLxwtHYOTYEsgA9FZ83EwDpuffsKbpbZ6mdikq5BDKdYcOqEPtlx12dpDjr2RaKkVX0X9hjvjuOD3Cex6zVWWyW49wElRco0YNM4LICkefIw6uopUdOl/jasjCWF2TDdHSO+uaE6d4eG90O3U6Ph+95iN3DfayJluwTU0E3Yh+Wdh7xBCqKyi2Ep2pqgpmwWFZY31AvZ/QDnBieQvf6VC3S3lU0tWX3+tNo12C6GU2n4PkrV7l4z4CAYOnn3KoqPv/iC0zMnEG/w05/wKNnH0BevcnABZyHubS4LO4OtS751tc9wkCX6ODwswVOKA739zB+ickM3RAR5S/s73H98JB7z5yin2eIrMdMw3RxyGwCdnadbim5cfuQC4M+jZ9ydXqFl5YHNHqDQwG9TNI/vcmyyVgqx6JjWY5K/OkOfrNkOih54cY1Hn/qGWa1o1f2yEOOd5Jmf0pdCuZeo2wNxuKqBdQNjc/YHxbIA49dLpl7y9JHPYQWKpjLwJSA9RFL0Wk35m3Js92BC3GEgodj7J742BxbK9O/SevBB5raoLKCpw8Lzu3UdKVEWYPMdNodR9NDHyLNNZD+ZlIk9dZg6wbsMlYZHNGThChc5Z2IKschAkoRJDxGWwIKZA5EHaXqdV5ghEM4i9ABhE1gzJhZedNgrKGpFhze2ucLl+dsnH8jJ7dHLBdLxpaomBoChw6mJu6AOoWkEbGK4QJo0YqwpWqJiIuuC5ImxIXCh0CuFIUM1CEwNZ6qkWx1BAMt0BwlIm3jp0VatHo0x9tCy2WFcY7KNLRUcGRc+ITKQGQg88ioUT0IOXiNDXlKRAQeG8X0gkdqjXNLFB4hyqjk6V0CYcdFPTJaoo5Na3rnQmT8HS2yDqWyqJsiomVDe3+IYJIDt2RjWBC8o6rqxEKLi4vSCu8FH/n4M3zu81cieyclbEG0WA53VLFKSQLpnm1xICIloamkEYXlCO1tgsUQKb8yAXuPksGQMCIkbMqqEpOGP3iJlJHxI0Ok+YaUzAmh6He7fPvrH+Q7Hr3A1lYfKyTW2WOGha1NBXhn4y47VbPaP6JSO1VrHYHVzmKrGWjFcr5gPp8ym81YzCY0dYXzkWlmnKc20YdKCtC1RTcBKwt0XtLv93ndiR6y3uNwvMTcPkBJhSq6NJMpIpf4+RRuK0wdmGd96pBTqQ6NlGxlOS88+xwvPfkE6tFH6S0XqDyLmjBCRNr1MmGdpETlOS64KM7mLAhF4yyz8QRJbMuCiJ5DxlBX0XXZmgrbmNSuc5jGUhvL0hj6/T7WNNw+PGAynVBVzVFrEdAqJnhIgfUxgRSIyMwSUfwwiIBPbd7GGJZVBCF3tMCKEGUWimjUWeRQ1B0OG8vmVgTVGmBKVOKtVATRmskUMTLsG8l+Bc9XDdcaj0CynQlOqkAQPmqmFJ4zDz7CuBEcXN2FxqBCIHhLU4fUZvzyQ4SV+tLdE+PxmI2NDTY2N+MNbw3Cupjpr2qrxFVIHhPnQh7NlhBXh9B2CeIuxQmiyI9PN4Zs1StTDziEOyaMldfGK3bpK+nv1ueEyDZoeevtL7Q8eGfNCsgYTeag1FnqVETp5OicKZKhXDRG45VGTStjr1RaDmH1tYK0xR7YiuHhkolZ9IKJnyD2wVtGQpy4vXcoFUvdsZQYy53ee2RIWI70WaNHmYyCVUISpMA6h0nn2zI1lIjtiVYWKkY4ahsQH6yFs4w2No4m49VIw7GmzrGx//Jva/Elf3L0++kjURuHM5ZCs9oxvjLC7/F3X0k//aJDX/n66mevPNF2xX/Fv6884ZTgeOepm9hXL7tlovAeARxXQ80rqMlfIo6PzOrPtK+l320V+dsuzu/9ll/86nwxx9Y1efbFKLujMU+lMXHEavA+UDcNdrVOfomxfCW25vc4ueOLd/vN0edPuI1V4nDUDtNaUxb6jr9+PDmraxs9We44nXDHkavvf7/b+I4s4xUfrT3ZOz6jOBqH1QmkLP53HYujDFNJSVkWaJXmvlee4iu++VKXoX2v9s/N5zM63T4IEUGxSR/E+/YePn7PHX3T4m9EMtdUWtHRCn2M+SUgAdgT/FspkK3IYqwsBecIJsoCuODjhjbPWSnqvmIYXjkuYXWOqdqU5ihx7FLGcQgroPDxgTmih8d39N7jUlL3yuX5aH5rx+D4f3Pn9Q6ktmRMFDUR3/alIvgQ/crSW/j2K+GVZAjoWKDDh8gEdMfmjLaJ40L8Xhclrcpze+8LEd9zOl8AcHh4yGg0+pLnc8dnvhuTlOeff57777//1T6NdaxjHetYxzrW8f8hXn75Zc6fP//7HndXtnu2trYAuHz58peVia3jqxuTyYQLFy7w8ssvMxwOX+3T+QMX6/F/dWM9/q9urMf/1Y3/v+MfQmA6nXL27Nkv6/i7Mklp2xSj0Wh9k76KMRwO1+P/KsZ6/F/dWI//qxvr8X914//P+H8lxQX5+x+yjnWsYx3rWMc61vH1j3WSso51rGMd61jHOr4h465MUoqi4B/+w39IURSv9qn8gYz1+L+6sR7/VzfW4//qxnr8X934eo//XcnuWcc61rGOdaxjHd/8cVdWUtaxjnWsYx3rWMc3f6yTlHWsYx3rWMc61vENGeskZR3rWMc61rGOdXxDxjpJWcc61rGOdaxjHd+QsU5S1rGOdaxjHetYxzdk3JVJyr/6V/+Ke++9l7Iseetb38pHP/rRV/uU7vr4mZ/5Gb7927+dwWDAyZMn+VN/6k/xzDPP3HFMVVW85z3vYXt7m36/z5/9s3+WGzdu3HHM5cuXeec730m32+XkyZP82I/9GNbar+dH+aaI9773vQgh+NEf/dHVz9bj/7WNq1ev8hf+wl9ge3ubTqfDo48+ysc//vHV6yEE/sE/+AecOXOGTqfD29/+dp599tk73mN/f593vetdDIdDNjY2+Ct/5a8wm82+3h/lrgvnHD/1Uz/FpUuX6HQ63H///fyjf/SP7jDYW4//Vy9+67d+iz/xJ/4EZ8+eRQjBr/7qr97x+ldrrD/96U/zPd/zPZRlyYULF/gn/+SffOUnG+6yeN/73hfyPA//4T/8h/DUU0+Fv/pX/2rY2NgIN27ceLVP7a6Od7zjHeHnfu7nwpNPPhmeeOKJ8Mf/+B8PFy9eDLPZbHXMD/3QD4ULFy6ED3zgA+HjH/94+I7v+I7wnd/5navXrbXhkUceCW9/+9vDJz/5yfDrv/7rYWdnJ/y9v/f3Xo2PdNfGRz/60XDvvfeGb/3Wbw0/8iM/svr5evy/drG/vx/uueee8Bf/4l8MH/nIR8Lzzz8f/uf//J/hC1/4wuqY9773vWE0GoVf/dVfDZ/61KfC93//94dLly6F5XK5OuaP/bE/Fl7/+teH3/md3wm//du/HR544IHwAz/wA6/GR7qr4qd/+qfD9vZ2+LVf+7XwwgsvhF/6pV8K/X4//PN//s9Xx6zH/6sXv/7rvx5+8id/MvzyL/9yAMKv/Mqv3PH6V2Osx+NxOHXqVHjXu94VnnzyyfCLv/iLodPphH/7b//tV3Sud12S8pa3vCW85z3vWX3vnAtnz54NP/MzP/MqntU3X9y8eTMA4Td/8zdDCCEcHh6GLMvCL/3SL62O+dznPheA8OEPfziEEG98KWXY3d1dHfOzP/uzYTgchrquv74f4C6N6XQaHnzwwfD+978/fO/3fu8qSVmP/9c2fvzHfzx893d/9+/6uvc+nD59OvzTf/pPVz87PDwMRVGEX/zFXwwhhPDZz342AOFjH/vY6pj//t//exBChKtXr37tTv6bIN75zneGv/yX//IdP/szf+bPhHe9610hhPX4fy3jlUnKV2us//W//tdhc3Pzjrnnx3/8x8NDDz30FZ3fXdXuaZqGxx9/nLe//e2rn0kpefvb386HP/zhV/HMvvliPB4DR47Tjz/+OMaYO8b+4Ycf5uLFi6ux//CHP8yjjz7KqVOnVse84x3vYDKZ8NRTT30dz/7ujfe85z28853vvGOcYT3+X+v4r//1v/LmN7+ZP/fn/hwnT57kDW94A//+3//71esvvPACu7u7d4z/aDTirW996x3jv7GxwZvf/ObVMW9/+9uRUvKRj3zk6/dh7sL4zu/8Tj7wgQ/w+c9/HoBPfepTfOhDH+L7vu/7gPX4fz3jqzXWH/7wh/lDf+gPkef56ph3vOMdPPPMMxwcHHzZ53NXuSDfvn0b59wdkzDAqVOnePrpp1+ls/rmC+89P/qjP8p3fdd38cgjjwCwu7tLnudsbGzcceypU6fY3d1dHfOlrk372jp+73jf+97HJz7xCT72sY990Wvr8f/axvPPP8/P/uzP8rf/9t/m7//9v8/HPvYx/ubf/Jvkec673/3u1fh9qfE9Pv4nT56843WtNVtbW+vx/33iJ37iJ5hMJjz88MMopXDO8dM//dO8613vAliP/9cxvlpjvbu7y6VLl77oPdrXNjc3v6zzuauSlHV8feI973kPTz75JB/60Ide7VP5AxMvv/wyP/IjP8L73/9+yrJ8tU/nD1x473nzm9/MP/7H/xiAN7zhDTz55JP8m3/zb3j3u9/9Kp/dN3/85//8n/n5n/95fuEXfoFv+ZZv4YknnuBHf/RHOXv27Hr8/4DHXdXu2dnZQSn1RYyGGzducPr06VfprL654od/+If5tV/7NX7jN36D8+fPr35++vRpmqbh8PDwjuOPj/3p06e/5LVpX1vH7x6PP/44N2/e5I1vfCNaa7TW/OZv/ib/4l/8C7TWnDp1aj3+X8M4c+YMr3vd6+742Wtf+1ouX74MHI3f7zX3nD59mps3b97xurWW/f399fj/PvFjP/Zj/MRP/AR//s//eR599FF+8Ad/kL/1t/4WP/MzPwOsx//rGV+tsf5qzUd3VZKS5zlvetOb+MAHPrD6mfeeD3zgAzz22GOv4pnd/RFC4Id/+If5lV/5FT74wQ9+UZnuTW96E1mW3TH2zzzzDJcvX16N/WOPPcZnPvOZO27e97///QyHwy9aANZxZ7ztbW/jM5/5DE888cTq681vfjPvete7Vv+9Hv+vXXzXd33XF1HuP//5z3PPPfcAcOnSJU6fPn3H+E8mEz7ykY/cMf6Hh4c8/vjjq2M++MEP4r3nrW9969fhU9y9sVgskPLO5UgphfceWI//1zO+WmP92GOP8Vu/9VsYY1bHvP/97+ehhx76sls9wN1JQS6KIvzH//gfw2c/+9nw1/7aXwsbGxt3MBrW8ZXHX//rfz2MRqPwv/7X/wrXr19ffS0Wi9UxP/RDPxQuXrwYPvjBD4aPf/zj4bHHHguPPfbY6vWWAvtH/+gfDU888UT4H//jf4QTJ06sKbD/H+M4uyeE9fh/LeOjH/1o0FqHn/7pnw7PPvts+Pmf//nQ7XbDf/pP/2l1zHvf+96wsbER/st/+S/h05/+dPiTf/JPfkla5hve8IbwkY98JHzoQx8KDz744JoC+2XEu9/97nDu3LkVBfmXf/mXw87OTvi7f/fvro5Zj/9XL6bTafjkJz8ZPvnJTwYg/LN/9s/CJz/5yfDSSy+FEL46Y314eBhOnToVfvAHfzA8+eST4X3ve1/odrvf/BTkEEL4l//yX4aLFy+GPM/DW97ylvA7v/M7r/Yp3fUBfMmvn/u5n1sds1wuw9/4G38jbG5uhm63G/70n/7T4fr163e8z4svvhi+7/u+L3Q6nbCzsxP+zt/5O8EY83X+NN8c8cokZT3+X9v4b//tv4VHHnkkFEURHn744fDv/t2/u+N17334qZ/6qXDq1KlQFEV429veFp555pk7jtnb2ws/8AM/EPr9fhgOh+Ev/aW/FKbT6dfzY9yVMZlMwo/8yI+EixcvhrIsw3333Rd+8id/8g766nr8v3rxG7/xG19yvn/3u98dQvjqjfWnPvWp8N3f/d2hKIpw7ty58N73vvcrPlcRwjFJv3WsYx3rWMc61rGOb5C4qzAp61jHOtaxjnWs4w9OrJOUdaxjHetYxzrW8Q0Z6yRlHetYxzrWsY51fEPGOklZxzrWsY51rGMd35CxTlLWsY51rGMd61jHN2Ssk5R1rGMd61jHOtbxDRnrJGUd61jHOtaxjnV8Q8Y6SVnHOtaxjnWsYx3fkLFOUtaxjnWsYx3rWMc3ZKyTlHWsYx3rWMc61vENGeskZR3rWMc61rGOdXxDxv8LnEGX+V2Hz0gAAAAASUVORK5CYII=\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"result_out_dir = '../resources/output/unconditional/tutorial_unconditional_styleganv1_res.png'\\n\",\n    \"editor = MMagicInferencer('styleganv1')\\n\",\n    \"results = editor.infer(result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.7 Inference of video interpolation models\\n\",\n    \"\\n\",\n    \"Video interpolation models take a video as input, and output a interpolated video. We take 'flavr' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/video_interpolators/flavr/flavr_in4out1_g8b4_vimeo90k_septuplet_20220509-c2468995.pth\\n\",\n      \"[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 22/22, 0.1 task/s, elapsed: 245s, ETA:     0s11/21 00:31:46 - mmengine - \\u001b[4m\\u001b[37mINFO\\u001b[0m - Output video is save at ../resources/output/video_interpolation/tutorial_video_interpolation_flavr_res.mp4.\\n\",\n      \"11/21 00:31:46 - mmengine - \\u001b[4m\\u001b[37mINFO\\u001b[0m - Visualization is implemented in forward process.\\n\",\n      \"11/21 00:31:46 - mmengine - \\u001b[4m\\u001b[37mINFO\\u001b[0m - Postprocess is implemented in forward process.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import os\\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"from mmengine import mkdir_or_exist\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"video = '../resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4'\\n\",\n    \"result_out_dir = '../resources/output/video_interpolation/tutorial_video_interpolation_flavr_res.mp4'\\n\",\n    \"mkdir_or_exist(os.path.dirname(result_out_dir))\\n\",\n    \"editor = MMagicInferencer('flavr')\\n\",\n    \"results = editor.infer(video=video, result_out_dir=result_out_dir)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Please check the result video in the output directory.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.8 Inference of video restoration models\\n\",\n    \"\\n\",\n    \"Video restoration models take a video as input, and output a restorated video. We take 'basicvsr' as an example..\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"http loads checkpoint from path: https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth\\n\",\n      \"11/20 18:13:55 - mmengine - \\u001b[4m\\u001b[37mINFO\\u001b[0m - Output video is save at ../resources/output/video_restoration/tutorial_video_restoration_edvr_res.mp4.\\n\",\n      \"11/20 18:13:55 - mmengine - \\u001b[4m\\u001b[37mINFO\\u001b[0m - Postprocess is implemented in visualize process.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import os\\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"from mmengine import mkdir_or_exist\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"video = '../resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4'\\n\",\n    \"result_out_dir = '../resources/output/video_restoration/tutorial_video_restoration_edvr_res.mp4'\\n\",\n    \"mkdir_or_exist(os.path.dirname(result_out_dir))\\n\",\n    \"editor = MMagicInferencer('edvr', extra_parameters={'window_size':5})\\n\",\n    \"results = editor.infer(video=video, result_out_dir=result_out_dir)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Please check the result video in the output directory.\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 4.9 Inference of text-to-image models\\n\",\n    \"\\n\",\n    \"Text-to-image models take text as input, and output a image. We take 'stable_diffusion' as an example.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Cannot initialize model with low cpu memory usage because `accelerate` was not found in the environment. Defaulting to `low_cpu_mem_usage=False`. It is strongly recommended to install `accelerate` for faster and less memory-intense model loading. You can do so with: \\n\",\n      \"```\\n\",\n      \"pip install accelerate\\n\",\n      \"```\\n\",\n      \".\\n\",\n      \"Cannot initialize model with low cpu memory usage because `accelerate` was not found in the environment. Defaulting to `low_cpu_mem_usage=False`. It is strongly recommended to install `accelerate` for faster and less memory-intense model loading. You can do so with: \\n\",\n      \"```\\n\",\n      \"pip install accelerate\\n\",\n      \"```\\n\",\n      \".\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"04/24 20:24:33 - mmengine - INFO - Creating ../resources/stable-diffusion-v1-5 by 'HuggingFace'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"application/vnd.jupyter.widget-view+json\": {\n       \"model_id\": \"88258b641d97420bbb07a7970929b7da\",\n       \"version_major\": 2,\n       \"version_minor\": 0\n      },\n      \"text/plain\": [\n       \"  0%|          | 0/50 [00:00<?, ?it/s]\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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1lW1rsrA1bYt73jHO56aaPlZso6u0XdeR9fnO6+j6/Od19H1+c7rj/r6XJWswqN1tI7W0Tpaz951VVZcR+toHa2jdbSevesocB2to3W0jtbRuqrWUeA6WkfraB2to3VVraPAdbSO1tE6WkfrqlpXZeD69//+33PrrbcymUy4++67v2U45R/X9Zu/+Zv88A//MNdffz3GGH7xF3/xiu+XUvjH//gf85znPIfpdMo999zDl770pSsec/HiRd70pjexsbHB1tYWP/ZjP8be3t7T+C7+6Na73/1uvud7vof19XWuvfZa/uJf/Is8+OCDVzxmuVzy1re+lWuuuYa1tTXe8IY3jMNM63r00Ud5/etfz2w249prr+Xv/t2/S4xPfcz4d8v6uZ/7OV72speNotDTp0/zq7/6q+P3n83X5tutn/3Zn8UYw0/+5E+OX3s2X6N3vvOd41iW+ueFL3zh+P2n9dqUq2y9733vK03TlP/8n/9z+fznP1/++l//62Vra6s8/vjjz/RL+yNfv/Irv1L+wT/4B+W///f/XoDy/ve//4rv/+zP/mzZ3Nwsv/iLv1h+//d/v/z5P//ny2233VYWi8X4mD/7Z/9sefnLX14+/vGPl9/6rd8qz3ve88ob3/jGp/md/NGs1772teU973lPue+++8q9995b/tyf+3Pl5ptvLnt7e+NjfvzHf7zcdNNN5YMf/GD51Kc+VV796leX7/u+7xu/H2MsL3nJS8o999xTPvOZz5Rf+ZVfKSdOnCg/8zM/80y8pf+r63/+z/9ZfvmXf7l88YtfLA8++GD5+3//75cQQrnvvvtKKc/ua/PN63d/93fLrbfeWl72speVn/iJnxi//my+Ru94xzvKi1/84nLmzJnxz/nz58fvP53X5qoLXN/7vd9b3vrWt47/TimV66+/vrz73e9+Bl/V07++OXDlnMupU6fKv/yX/3L82uXLl0vbtuW//tf/Wkop5f777y9A+eQnPzk+5ld/9VeLMaZ8/etff9pe+9O1zp07V4DykY98pJQi1yOEUH7hF35hfMwXvvCFApSPfexjpRRJDqy15ezZs+Njfu7nfq5sbGyUruue3jfwNKxjx46V//gf/+PRtTm0dnd3y/Of//zygQ98oPzAD/zAGLie7dfoHe94R3n5y1/+bb/3dF+bqwoq7PueT3/609xzzz3j16y13HPPPXzsYx97Bl/ZM78eeeQRzp49e8W12dzc5O677x6vzcc+9jG2trZ41ateNT7mnnvuwVrLJz7xiaf9Nf9Rr+3tbWBlyvzpT3+aYRiuuEYvfOELufnmm6+4Ri996Uu57rrrxse89rWvZWdnh89//vNP46v/o10pJd73vvexv7/P6dOnj67NofXWt76V17/+9VdcCzi6fwC+9KUvcf3113P77bfzpje9iUcffRR4+q/NVWWy+8QTT5BSuuKNA1x33XU88MADz9Cr+u5YZ8+eBfi216Z+7+zZs1x77bVXfN97z/Hjx8fH/HFZOWd+8id/kj/5J/8kL3nJSwB5/03TsLW1dcVjv/kafbtrWL93ta/Pfe5znD59muVyydraGu9///u58847uffee5/11wbgfe97H7/3e7/HJz/5yW/53rP9/rn77rt573vfyx133MGZM2d417vexfd///dz3333Pe3X5qoKXEfraP2frre+9a3cd999fPSjH32mX8p31brjjju499572d7e5r/9t//Gm9/8Zj7ykY880y/ru2I99thj/MRP/AQf+MAHmEwmz/TL+a5br3vd68a/v+xlL+Puu+/mlltu4ed//ueZTqdP62u5qqDCEydO4Jz7FqbK448/zqlTp56hV/Xdser7/07X5tSpU5w7d+6K78cYuXjx4h+r6/e2t72NX/qlX+LDH/7wFQPqTp06Rd/3XL58+YrHf/M1+nbXsH7val9N0/C85z2Pu+66i3e/+928/OUv59/8m39zdG0QuOvcuXP8iT/xJ/De473nIx/5CP/23/5bvPdcd911z/prdHhtbW3xghe8gIceeuhpv3+uqsDVNA133XUXH/zgB8ev5Zz54Ac/yOnTp5/BV/bMr9tuu41Tp05dcW12dnb4xCc+MV6b06dPc/nyZT796U+Pj/nQhz5Ezpm77777aX/N/7dXKYW3ve1tvP/97+dDH/oQt9122xXfv+uuuwghXHGNHnzwQR599NErrtHnPve5KwL8Bz7wATY2NrjzzjufnjfyNK6cM13XHV0b4DWveQ2f+9znuPfee8c/r3rVq3jTm940/v3Zfo0Or729PR5++GGe85znPP33z5OmljzD633ve19p27a8973vLffff3/5G3/jb5Stra0rmCp/XNfu7m75zGc+Uz7zmc8UoPyrf/Wvymc+85ny1a9+tZQidPitra3yP/7H/yif/exny1/4C3/h29LhX/nKV5ZPfOIT5aMf/Wh5/vOf/8eGDv+Wt7ylbG5ult/4jd+4grJ7cHAwPubHf/zHy80331w+9KEPlU996lPl9OnT5fTp0+P3K2X3h37oh8q9995b/tf/+l/l5MmTfyzozD/90z9dPvKRj5RHHnmkfPazny0//dM/XYwx5dd+7ddKKc/ua/MHrcOswlKe3dfo7W9/e/mN3/iN8sgjj5Tf/u3fLvfcc085ceJEOXfuXCnl6b02V13gKqWUf/fv/l25+eabS9M05Xu/93vLxz/+8Wf6JT0t68Mf/nABvuXPm9/85lKKUOL/0T/6R+W6664rbduW17zmNeXBBx+84jkuXLhQ3vjGN5a1tbWysbFR/upf/atld3f3GXg3//fXt7s2QHnPe94zPmaxWJS/+Tf/Zjl27FiZzWblL/2lv1TOnDlzxfN85StfKa973evKdDotJ06cKG9/+9vLMAxP87v5v7/+2l/7a+WWW24pTdOUkydPlte85jVj0Crl2X1t/qD1zYHr2XyNfuRHfqQ85znPKU3TlBtuuKH8yI/8SHnooYfG7z+d1+ZorMnROlpH62gdratqXVU9rqN1tI7W0TpaR+socB2to3W0jtbRuqrWUeA6WkfraB2to3VVraPAdbSO1tE6WkfrqlpHgetoHa2jdbSO1lW1jgLX0TpaR+toHa2rah0FrqN1tI7W0TpaV9U6ClxH62gdraN1tK6qdRS4jtbROlpH62hdVesocB2to3W0jtbRuqrWUeA6WkfraB2to3VVraPAdbSO1tE6Wkfrqlr/f0rbKyfpyFUbAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"import mmcv\\n\",\n    \"import matplotlib.pyplot as plt \\n\",\n    \"from mmagic.apis import MMagicInferencer\\n\",\n    \"\\n\",\n    \"# Create a MMagicInferencer instance and infer\\n\",\n    \"editor = MMagicInferencer(model_name='stable_diffusion')\\n\",\n    \"text_prompts = 'A panda is having dinner at KFC'\\n\",\n    \"result_out_dir = '../resources/output/text2image/tutorial_text2image_sd_res.png'\\n\",\n    \"editor.infer(text=text_prompts, result_out_dir=result_out_dir)\\n\",\n    \"\\n\",\n    \"# plot the result image\\n\",\n    \"img = mmcv.imread(result_out_dir)\\n\",\n    \"plt.imshow(mmcv.bgr2rgb(img))\\n\",\n    \"plt.show()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"mmagic\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.15\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"2396e09a98edfab6266f814c68e2f319a2f52e823b3715487b27762471d9be4e\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "demo/singan_demo.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport sys\n\nimport mmcv\nimport torch\nfrom mmengine import Config, print_log\nfrom mmengine.logging import MMLogger\nfrom mmengine.runner import load_checkpoint, set_random_seed\n\n# yapf: disable\nsys.path.append(os.path.abspath(os.path.join(__file__, '../..')))  # isort:skip  # noqa\n\nfrom mmagic.engine import *  # isort:skip  # noqa: F401,F403,E402\nfrom mmagic.datasets import *  # isort:skip  # noqa: F401,F403,E402\nfrom mmagic.models import *  # isort:skip  # noqa: F401,F403,E402\n\nfrom mmagic.registry import MODELS  # isort:skip  # noqa\n\n# yapf: enable\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Evaluate a GAN model')\n    parser.add_argument('config', help='evaluation config file path')\n    parser.add_argument('checkpoint', help='checkpoint file')\n    parser.add_argument('--seed', type=int, default=2021, help='random seed')\n    parser.add_argument(\n        '--deterministic',\n        action='store_true',\n        help='whether to set deterministic options for CUDNN backend.')\n    parser.add_argument(\n        '--samples-path',\n        type=str,\n        default='./',\n        help='path to store images. If not given, remove it after evaluation\\\n             finished')\n    parser.add_argument(\n        '--save-prev-res',\n        action='store_true',\n        help='whether to store the results from previous stages')\n    parser.add_argument(\n        '--num-samples',\n        type=int,\n        default=10,\n        help='the number of synthesized samples')\n    args = parser.parse_args()\n    return args\n\n\ndef _tensor2img(img):\n    img = img.permute(1, 2, 0)\n    img = img.clamp(0, 255).to(torch.uint8)\n\n    return img.cpu().numpy()\n\n\n@torch.no_grad()\ndef main():\n    MMLogger.get_instance('mmagic')\n\n    args = parse_args()\n    cfg = Config.fromfile(args.config)\n    # set cudnn_benchmark\n    if cfg.get('cudnn_benchmark', False):\n        torch.backends.cudnn.benchmark = True\n\n    # set random seeds\n    if args.seed is not None:\n        set_random_seed(args.seed, deterministic=args.deterministic)\n\n    # set scope manually\n    cfg.model['_scope_'] = 'mmagic'\n    # build the model and load checkpoint\n    model = MODELS.build(cfg.model)\n\n    model.eval()\n\n    # load ckpt\n    print_log(f'Loading ckpt from {args.checkpoint}')\n    _ = load_checkpoint(model, args.checkpoint, map_location='cpu')\n\n    # add dp wrapper\n    if torch.cuda.is_available():\n        model = model.cuda()\n\n    for sample_iter in range(args.num_samples):\n        outputs = model.test_step(\n            dict(inputs=dict(num_batches=1, get_prev_res=args.save_prev_res)))\n\n        # store results from previous stages\n        if args.save_prev_res:\n            fake_img = outputs[0].fake_img.data\n            prev_res_list = outputs[0].prev_res_list\n            prev_res_list.append(fake_img)\n            for i, img in enumerate(prev_res_list):\n                img = _tensor2img(img)\n                mmcv.imwrite(\n                    img,\n                    os.path.join(args.samples_path, f'stage{i}',\n                                 f'rand_sample_{sample_iter}.png'))\n        # just store the final result\n        else:\n            img = _tensor2img(outputs[0].fake_img.data)\n            mmcv.imwrite(\n                img,\n                os.path.join(args.samples_path,\n                             f'rand_sample_{sample_iter}.png'))\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "demo/utils/gradio_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# yapf: disable\nimport gradio as gr\nimport numpy as np\nfrom PIL import Image, ImageDraw\n\n\nclass EasyDict(dict):\n    \"\"\"Convenience class that behaves like a dict but allows access with the\n    attribute syntax.\"\"\"\n\n    def __getattr__(self, name: str):\n        try:\n            return self[name]\n        except KeyError:\n            raise AttributeError(name)\n\n    def __setattr__(self, name: str, value) -> None:\n        self[name] = value\n\n    def __delattr__(self, name: str) -> None:\n        del self[name]\n\n\nclass ImageMask(gr.components.Image):\n    \"\"\"\n    Sets: source=\"canvas\", tool=\"sketch\"\n    \"\"\"\n\n    is_template = True\n\n    def __init__(self, **kwargs):\n        super().__init__(\n            source='upload', tool='sketch', interactive=False, **kwargs)\n\n    def preprocess(self, x):\n        if x is None:\n            return x\n        if self.tool == 'sketch' and self.source in ['upload', 'webcam'\n                                                     ] and type(x) != dict:\n            decode_image = gr.processing_utils.decode_base64_to_image(x)\n            width, height = decode_image.size\n            mask = np.ones((height, width, 4), dtype=np.uint8)\n            mask[..., -1] = 255\n            mask = self.postprocess(mask)\n            x = {'image': x, 'mask': mask}\n        return super().preprocess(x)\n\n\ndef get_valid_mask(mask: np.ndarray):\n    \"\"\"Convert mask from gr.Image(0 to 255, RGBA) to binary mask.\"\"\"\n    if mask.ndim == 3:\n        mask_pil = Image.fromarray(mask).convert('L')\n        mask = np.array(mask_pil)\n    if mask.max() == 255:\n        mask = mask / 255\n    return mask\n\n\ndef draw_points_on_image(image,\n                         points,\n                         curr_point=None,\n                         highlight_all=True,\n                         radius_scale=0.01):\n    overlay_rgba = Image.new('RGBA', image.size, 0)\n    overlay_draw = ImageDraw.Draw(overlay_rgba)\n    for point_key, point in points.items():\n        if ((curr_point is not None and curr_point == point_key)\n                or highlight_all):\n            p_color = (255, 0, 0)\n            t_color = (0, 0, 255)\n\n        else:\n            p_color = (255, 0, 0, 35)\n            t_color = (0, 0, 255, 35)\n\n        rad_draw = int(image.size[0] * radius_scale)\n\n        p_start = point.get('start_temp', point['start'])\n        p_target = point['target']\n\n        if p_start is not None and p_target is not None:\n            p_draw = int(p_start[0]), int(p_start[1])\n            t_draw = int(p_target[0]), int(p_target[1])\n\n            overlay_draw.line(\n                (p_draw[0], p_draw[1], t_draw[0], t_draw[1]),\n                fill=(255, 255, 0),\n                width=2,\n            )\n\n        if p_start is not None:\n            p_draw = int(p_start[0]), int(p_start[1])\n            overlay_draw.ellipse(\n                (\n                    p_draw[0] - rad_draw,\n                    p_draw[1] - rad_draw,\n                    p_draw[0] + rad_draw,\n                    p_draw[1] + rad_draw,\n                ),\n                fill=p_color,\n            )\n\n            if curr_point is not None and curr_point == point_key:\n                overlay_draw.text(p_draw, 'p', align='center', fill=(0, 0, 0))\n\n        if p_target is not None:\n            t_draw = int(p_target[0]), int(p_target[1])\n            overlay_draw.ellipse(\n                (\n                    t_draw[0] - rad_draw,\n                    t_draw[1] - rad_draw,\n                    t_draw[0] + rad_draw,\n                    t_draw[1] + rad_draw,\n                ),\n                fill=t_color,\n            )\n\n            if curr_point is not None and curr_point == point_key:\n                overlay_draw.text(t_draw, 't', align='center', fill=(0, 0, 0))\n\n    return Image.alpha_composite(image.convert('RGBA'),\n                                 overlay_rgba).convert('RGB')\n\n\ndef draw_mask_on_image(image, mask):\n    im_mask = np.uint8(mask * 255)\n    im_mask_rgba = np.concatenate(\n        (\n            np.tile(im_mask[..., None], [1, 1, 3]),\n            45 * np.ones(\n                (im_mask.shape[0], im_mask.shape[1], 1), dtype=np.uint8),\n        ),\n        axis=-1,\n    )\n    im_mask_rgba = Image.fromarray(im_mask_rgba).convert('RGBA')\n\n    return Image.alpha_composite(image.convert('RGBA'),\n                                 im_mask_rgba).convert('RGB')\n\n\ndef on_change_single_global_state(keys,\n                                  value,\n                                  global_state,\n                                  map_transform=None):\n    if map_transform is not None:\n        value = map_transform(value)\n\n    curr_state = global_state\n    if isinstance(keys, str):\n        last_key = keys\n\n    else:\n        for k in keys[:-1]:\n            curr_state = curr_state[k]\n\n        last_key = keys[-1]\n\n    curr_state[last_key] = value\n    return global_state\n\n\ndef get_latest_points_pair(points_dict):\n    if not points_dict:\n        return None\n    point_idx = list(points_dict.keys())\n    latest_point_idx = max(point_idx)\n    return latest_point_idx\n"
  },
  {
    "path": "demo/utils/renderer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport sys\nimport traceback\n\nimport matplotlib.cm\nimport matplotlib.font_manager\nimport numpy as np\nimport torch\nimport torch.fft\nimport torch.nn.functional as F\nfrom PIL import Image, ImageDraw, ImageFont\n\nfrom demo.utils.gradio_utils import EasyDict\nfrom mmagic.apis import MMagicInferencer\n\n\nclass CapturedException(Exception):\n\n    def __init__(self, msg=None):\n        if msg is None:\n            _type, value, _traceback = sys.exc_info()\n            assert value is not None\n            if isinstance(value, CapturedException):\n                msg = str(value)\n            else:\n                msg = traceback.format_exc()\n        assert isinstance(msg, str)\n        super().__init__(msg)\n\n\n'''\n----------------------------------------------------------------------------\n'''\n\n\nclass CaptureSuccess(Exception):\n\n    def __init__(self, out):\n        super().__init__()\n        self.out = out\n\n\n'''\n----------------------------------------------------------------------------\n'''\n\n\ndef add_watermark_np(input_image_array, watermark_text='AI Generated'):\n    image = Image.fromarray(np.uint8(input_image_array)).convert('RGBA')\n\n    # Initialize text image\n    txt = Image.new('RGBA', image.size, (255, 255, 255, 0))\n    ttf_pth = matplotlib.font_manager.findSystemFonts(\n        fontpaths=None, fontext='ttf')[-1]\n\n    font = ImageFont.truetype(ttf_pth, round(25 / 512 * image.size[0]))\n    d = ImageDraw.Draw(txt)\n\n    text_width, text_height = font.getsize(watermark_text)\n    text_position = (image.size[0] - text_width - 10,\n                     image.size[1] - text_height - 10)\n    text_color = (\n        255, 255, 255, 128\n    )  # white color with the alpha channel set to semi-transparent\n\n    # Draw the text onto the text canvas\n    d.text(text_position, watermark_text, font=font, fill=text_color)\n\n    # Combine the image with the watermark\n    watermarked = Image.alpha_composite(image, txt)\n    watermarked_array = np.array(watermarked)\n    return watermarked_array\n\n\nclass Renderer:\n\n    def __init__(self, disable_timing=False):\n        self._device = torch.device('cuda' if torch.cuda.is_available(\n        ) else 'mps' if torch.backends.mps.is_available() else 'cpu')\n        self._dtype = torch.float32 \\\n            if self._device.type == 'mps' else torch.float64\n        self._pkl_data = dict()  # {pkl: dict | CapturedException, ...}\n        self._networks = dict()  # {cache_key: torch.nn.Module, ...}\n        self._pinned_bufs = dict()  # {(shape, dtype): torch.Tensor, ...}\n        self._cmaps = dict()  # {name: torch.Tensor, ...}\n        self._is_timing = False\n        if not disable_timing:\n            self._start_event = torch.cuda.Event(enable_timing=True)\n            self._end_event = torch.cuda.Event(enable_timing=True)\n        self._disable_timing = disable_timing\n        self._net_layers = dict()  # {cache_key: [dnnlib.EasyDict, ...], ...}\n\n    def render(self, **args):\n        if self._disable_timing:\n            self._is_timing = False\n        else:\n            self._start_event.record(torch.cuda.current_stream(self._device))\n            self._is_timing = True\n        res = EasyDict()\n        try:\n            init_net = False\n            if not hasattr(self, 'G'):\n                init_net = True\n            if hasattr(self, 'pkl'):\n                if self.pkl != args['pkl']:\n                    init_net = True\n            if hasattr(self, 'w_load'):\n                if self.w_load is not args['w_load']:\n                    init_net = True\n            if hasattr(self, 'w0_seed'):\n                if self.w0_seed != args['w0_seed']:\n                    init_net = True\n            if hasattr(self, 'w_plus'):\n                if self.w_plus != args['w_plus']:\n                    init_net = True\n            if args['reset_w']:\n                init_net = True\n            res.init_net = init_net\n            if init_net:\n                self.init_network(res, **args)\n            self._render_drag_impl(res, **args)\n        except CapturedException:\n            res.error = CapturedException()\n        if not self._disable_timing:\n            self._end_event.record(torch.cuda.current_stream(self._device))\n        if 'image' in res:\n            res.image = self.to_cpu(res.image).detach().numpy()\n            res.image = add_watermark_np(res.image, 'AI Generated')\n        if 'stats' in res:\n            res.stats = self.to_cpu(res.stats).detach().numpy()\n        if 'error' in res:\n            res.error = str(res.error)\n        # if 'stop' in res and res.stop:\n\n        if self._is_timing and not self._disable_timing:\n            self._end_event.synchronize()\n            res.render_time = self._start_event.elapsed_time(\n                self._end_event) * 1e-3\n            self._is_timing = False\n        return res\n\n    def get_network(self, pkl, key, **tweak_kwargs):\n        data = self._pkl_data.get(pkl, None)\n        if data is None:\n            print(f'Loading \"{pkl}\"... ', end='', flush=True)\n            try:\n                print('Done.')\n            except CapturedException:\n                data = CapturedException()\n                print('Failed!')\n            self._pkl_data[pkl] = data\n            self._ignore_timing()\n        if isinstance(data, CapturedException):\n            raise data\n\n        orig_net = data[key]\n        cache_key = (orig_net, self._device,\n                     tuple(sorted(tweak_kwargs.items())))\n        net = self._networks.get(cache_key, None)\n        if net is None:\n            try:\n                if 'stylegan2' in pkl:\n                    from training.networks_stylegan2 import Generator\n                else:\n                    raise NameError('Cannot infer model type from pkl name!')\n\n                print(data[key].init_args)\n                print(data[key].init_kwargs)\n                if 'stylegan_human' in pkl:\n                    net = Generator(\n                        *data[key].init_args,\n                        **data[key].init_kwargs,\n                        square=False,\n                        padding=True)\n                else:\n                    net = Generator(*data[key].init_args,\n                                    **data[key].init_kwargs)\n                net.load_state_dict(data[key].state_dict())\n                net.to(self._device)\n            except CapturedException:\n                net = CapturedException()\n            self._networks[cache_key] = net\n            self._ignore_timing()\n        if isinstance(net, CapturedException):\n            raise net\n        return net\n\n    def _get_pinned_buf(self, ref):\n        key = (tuple(ref.shape), ref.dtype)\n        buf = self._pinned_bufs.get(key, None)\n        if buf is None:\n            buf = torch.empty(ref.shape, dtype=ref.dtype).pin_memory()\n            self._pinned_bufs[key] = buf\n        return buf\n\n    def to_device(self, buf):\n        return self._get_pinned_buf(buf).copy_(buf).to(self._device)\n\n    def to_cpu(self, buf):\n        return self._get_pinned_buf(buf).copy_(buf).clone()\n\n    def _ignore_timing(self):\n        self._is_timing = False\n\n    def _apply_cmap(self, x, name='viridis'):\n        cmap = self._cmaps.get(name, None)\n        if cmap is None:\n            cmap = matplotlib.cm.get_cmap(name)\n            cmap = cmap(np.linspace(0, 1, num=1024), bytes=True)[:, :3]\n            cmap = self.to_device(torch.from_numpy(cmap))\n            self._cmaps[name] = cmap\n        hi = cmap.shape[0] - 1\n        x = (x * hi + 0.5).clamp(0, hi).to(torch.int64)\n        x = torch.nn.functional.embedding(x, cmap)\n        return x\n\n    def init_network(self,\n                     res,\n                     ckpt_pth=None,\n                     w0_seed=0,\n                     w_load=None,\n                     w_plus=True,\n                     noise_mode='const',\n                     trunc_psi=0.7,\n                     trunc_cutoff=None,\n                     input_transform=None,\n                     lr=0.001,\n                     **kwargs):\n        # Dig up network details.\n        if '256' in ckpt_pth:\n            editor = MMagicInferencer(\n                'draggan',\n                model_setting=1,\n                model_ckpt=ckpt_pth,\n            )\n        elif '512' in ckpt_pth:\n            editor = MMagicInferencer(\n                'draggan',\n                model_setting=0,\n                model_ckpt=ckpt_pth,\n            )\n        elif '1024' in ckpt_pth:\n            editor = MMagicInferencer(\n                'draggan',\n                model_setting=2,\n                model_ckpt=ckpt_pth,\n            )\n        else:\n            raise NotImplementedError\n        self.editor = editor\n        # Generate random latents.\n        self.w0_seed = w0_seed\n        self.w_load = w_load\n\n        if self.w_load is None:\n            # Generate random latents.\n            z = torch.from_numpy(np.random.RandomState(w0_seed).randn(\n                1, 512)).to(torch.float32).requires_grad_(True)\n\n            # Run mapping network.\n            sample_kwargs = {\n                'truncation': trunc_psi,\n                'return_noise': True,\n                'return_features': True\n            }\n            extra_parameters = {\n                'sample_kwargs': sample_kwargs,\n                'num_batches': 1,\n                'noise': z,\n                'sample_model': 'ema',\n                'infer_with_grad': True\n            }\n            results = self.editor.infer(extra_parameters=extra_parameters)\n\n            w = results[0]['latent'].unsqueeze(0)  # [1, 16, n_dim]\n        else:\n            w = self.w_load.clone().to(self._device)\n\n        self.w0 = w.detach().clone()\n        self.w_plus = w_plus\n        if w_plus:\n            self.w = w.detach()\n        else:\n            self.w = w[:, 0, :].detach()\n        self.w.requires_grad = True\n        self.w_optim = torch.optim.Adam([self.w], lr=lr)\n\n        self.feat_refs = None\n        self.points0_pt = None\n\n    def update_lr(self, lr):\n\n        del self.w_optim\n        self.w_optim = torch.optim.Adam([self.w], lr=lr)\n        print(f'Rebuild optimizer with lr: {lr}')\n        print('    Remain feat_refs and points0_pt')\n\n    def _render_drag_impl(self,\n                          res,\n                          points=[],\n                          targets=[],\n                          mask=None,\n                          lambda_mask=10,\n                          reg=0,\n                          feature_idx=5,\n                          r1=3,\n                          r2=12,\n                          random_seed=0,\n                          noise_mode='const',\n                          trunc_psi=0.7,\n                          force_fp32=False,\n                          layer_name=None,\n                          sel_channels=3,\n                          base_channel=0,\n                          img_scale_db=0,\n                          img_normalize=False,\n                          untransform=False,\n                          is_drag=False,\n                          reset=False,\n                          to_pil=False,\n                          **kwargs):\n        ws = self.w\n        if ws.dim() == 2:\n            ws = ws.unsqueeze(1).repeat(1, 6, 1)\n        ws = torch.cat([ws[:, :6, :], self.w0[:, 6:, :]],\n                       dim=1)  # [1, 16, n_dim]\n        if hasattr(self, 'points'):\n            if len(points) != len(self.points):\n                reset = True\n        if reset:\n            self.feat_refs = None\n            self.points0_pt = None\n        self.points = points\n\n        # Run synthesis network.\n        sample_kwargs = {\n            'truncation': 1,\n            'return_noise': True,\n            'return_features': True,\n            'input_is_latent': True\n        }\n        extra_parameters = {\n            'sample_kwargs': sample_kwargs,\n            'num_batches': 1,\n            'noise': ws[0][:1],\n            'sample_model': 'ema',\n            'infer_with_grad': True\n        }\n\n        results = self.editor.infer(extra_parameters=extra_parameters)\n        img = results[0]['fake_img'].unsqueeze(\n            0) / 127.5 - 1.  # requires_grad==True\n        feat_5 = results[0]['feats'].unsqueeze(0)  # requires_grad==True\n        h, w = img.shape[-1], img.shape[-2]\n\n        if is_drag:\n            X = torch.linspace(0, h, h)\n            Y = torch.linspace(0, w, w)\n            xx, yy = torch.meshgrid(X, Y)\n            feat_resize = F.interpolate(feat_5, [h, w], mode='bilinear')\n            if self.feat_refs is None:\n                self.feat0_resize = F.interpolate(\n                    feat_5.detach(), [h, w], mode='bilinear')\n                self.feat_refs = []\n                for point in points:\n                    py, px = round(point[0]), round(point[1])\n                    self.feat_refs.append(self.feat0_resize[:, :, py, px])\n                self.points0_pt = torch.Tensor(points).unsqueeze(0).to(\n                    self._device)  # 1, N, 2\n\n            # Point tracking with feature matching\n            with torch.no_grad():\n                for j, point in enumerate(points):\n                    r = round(r2 / 512 * h)\n                    up = max(point[0] - r, 0)\n                    down = min(point[0] + r + 1, h)\n                    left = max(point[1] - r, 0)\n                    right = min(point[1] + r + 1, w)\n                    feat_patch = feat_resize[:, :, up:down, left:right]\n                    L2 = torch.linalg.norm(\n                        feat_patch - self.feat_refs[j].reshape(1, -1, 1, 1),\n                        dim=1)\n                    _, idx = torch.min(L2.view(1, -1), -1)\n                    width = right - left\n                    point = [\n                        idx.item() // width + up,\n                        idx.item() % width + left\n                    ]\n                    points[j] = point\n\n            res.points = [[point[0], point[1]] for point in points]\n\n            # Motion supervision\n            loss_motion = 0\n            res.stop = True\n            for j, point in enumerate(points):\n                direction = torch.Tensor(\n                    [targets[j][1] - point[1], targets[j][0] - point[0]])\n                if torch.linalg.norm(direction) > max(2 / 512 * h, 2):\n                    res.stop = False\n                if torch.linalg.norm(direction) > 1:\n                    distance = ((xx.to(self._device) - point[0])**2 +\n                                (yy.to(self._device) - point[1])**2)**0.5\n                    relis, reljs = torch.where(distance < round(r1 / 512 * h))\n                    direction = direction / (\n                        torch.linalg.norm(direction) + 1e-7)\n                    gridh = (relis - direction[1]) / (h - 1) * 2 - 1\n                    gridw = (reljs - direction[0]) / (w - 1) * 2 - 1\n                    grid = torch.stack([gridw, gridh],\n                                       dim=-1).unsqueeze(0).unsqueeze(0)\n                    target = F.grid_sample(\n                        feat_resize.float(), grid,\n                        align_corners=True).squeeze(2)\n                    loss_motion += F.l1_loss(feat_resize[:, :, relis, reljs],\n                                             target.detach())\n\n            loss = loss_motion\n            if mask is not None:\n                if mask.min() == 0 and mask.max() == 1:\n                    mask_usq = mask.to(self._device).unsqueeze(0).unsqueeze(0)\n                    loss_fix = F.l1_loss(feat_resize * mask_usq,\n                                         self.feat0_resize * mask_usq)\n                    loss += lambda_mask * loss_fix\n\n            loss += reg * F.l1_loss(ws, self.w0)  # latent code regularization\n            if not res.stop:\n                self.w_optim.zero_grad()\n                print(loss)\n                loss.backward()\n                self.w_optim.step()\n\n        # Scale and convert to uint8.\n        img = img[0]\n        if img_normalize:\n            img = img / img.norm(\n                float('inf'), dim=[1, 2], keepdim=True).clip(1e-8, 1e8)\n        img = img * (10**(img_scale_db / 20))\n        img = (img * 127.5 + 128).clamp(0,\n                                        255).to(torch.uint8).permute(1, 2, 0)\n        if to_pil:\n            from PIL import Image\n            img = img.cpu().numpy()\n            img = Image.fromarray(img)\n        res.image = img\n        res.w = ws.detach().cpu().numpy()\n"
  },
  {
    "path": "docker/Dockerfile",
    "content": "ARG PYTORCH=\"1.6.0\"\nARG CUDA=\"10.1\"\nARG CUDA_ALIAS=\"101\"\nARG CUDNN=\"7\"\nARG MMCV=\"2.0.0rc1\"\nARG Usrname=\"xxx\"\nARG token=\"xxx\"\n\nFROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel\n\nENV TORCH_CUDA_ARCH_LIST=\"6.0 6.1 7.0+PTX\"\nENV TORCH_NVCC_FLAGS=\"-Xfatbin -compress-all\"\nENV CMAKE_PREFIX_PATH=\"$(dirname $(which conda))/../\"\n\nRUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC\nRUN apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 libgl1-mesa-glx \\\n    && apt-get clean \\\n    && rm -rf /var/lib/apt/lists/*\n\n# Install mmagic\nRUN conda clean --all\nRUN git clone https://${Usrname}:${token}@github.com/open-mmlab/mmagic.git /mmagic\nWORKDIR /mmagic\nENV FORCE_CUDA=\"1\"\nRUN pip install openmim\nRUN mim install mmcv==${MMCV}\nRUN pip install -r requirements.txt\nRUN pip install --no-cache-dir -e .\n"
  },
  {
    "path": "docker/README.md",
    "content": "# Docker Image\n\nWe provide a [Dockerfile](Dockerfile) to build an image.\n\n```shell\n# build an image with PyTorch 1.6, CUDA 10.1\ndocker build -t mmagic docker/\n```\n\nRun it with\n\n```shell\ndocker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmagic/data mmagic\n```\n\n**Note**:\nVersions defined in this [Dockerfile](Dockerfile) is not up-to-date.\nIf you use this Dockerfile in your project, you probably want to make some updates.\nFeel free to submit an issue or PR for the update.\n"
  },
  {
    "path": "docs/en/.dev_scripts/update_dataset_zoo.py",
    "content": "import os\n\nfrom tqdm import tqdm\n\n\ndef update_dataset_zoo():\n\n    target_dir = 'dataset_zoo'\n    source_dir = '../../tools/dataset_converters'\n    os.makedirs(target_dir, exist_ok=True)\n\n    # generate overview\n    overviewmsg = \"\"\"\n# Overview\n\n\"\"\"\n\n    # generate index.rst\n    rstmsg = \"\"\"\n.. toctree::\n   :maxdepth: 1\n   :caption: Dataset Zoo\n\n   overview.md\n\"\"\"\n\n    subfolders = os.listdir(source_dir)\n    for subf in tqdm(subfolders, desc='update dataset zoo'):\n\n        target_subf = subf.replace('-', '_').lower()\n        target_readme = os.path.join(target_dir, target_subf + '.md')\n        source_readme = os.path.join(source_dir, subf, 'README.md')\n        if not os.path.exists(source_readme):\n            continue\n\n        overviewmsg += f'\\n- [{subf}]({target_subf}.md)'\n        rstmsg += f'\\n   {target_subf}.md'\n\n        # generate all tasks dataset_zoo\n        command = f'cat {source_readme} > {target_readme}'\n        os.popen(command)\n\n    with open(os.path.join(target_dir, 'overview.md'), 'w') as f:\n        f.write(overviewmsg)\n\n    with open(os.path.join(target_dir, 'index.rst'), 'w') as f:\n        f.write(rstmsg)\n\n\nif __name__ == '__main__':\n    update_dataset_zoo()\n"
  },
  {
    "path": "docs/en/.dev_scripts/update_model_zoo.py",
    "content": "#!/usr/bin/env python\nimport os\nfrom glob import glob\nfrom os import path as osp\nfrom pathlib import Path\n\nfrom modelindex.load_model_index import load\nfrom tqdm import tqdm\n\nMMAGIC_ROOT = Path(__file__).absolute().parents[3]\nTARGET_ROOT = Path(__file__).absolute().parents[1] / 'model_zoo'\n\n\ndef write_file(file, content):\n    os.makedirs(osp.dirname(file), exist_ok=True)\n    with open(file, 'w', encoding='utf-8') as f:\n        f.write(content)\n\n\ndef update_model_zoo():\n    \"\"\"load collections and models from model index, return summary,\n    collections and models.\"\"\"\n    model_index_file = MMAGIC_ROOT / 'model-index.yml'\n    model_index = load(str(model_index_file))\n    model_index.build_models_with_collections()\n\n    # parse model_index according to task\n    tasks = {}\n    full_models = set()\n    for model in model_index.models:\n        full_models.add(model.full_model)\n        for r in model.results:\n            _task = r.task.lower().split(', ')\n            for t in _task:\n                if t not in tasks:\n                    tasks[t] = set()\n                tasks[t].add(model.full_model)\n\n    # assert the number of configs with the number of files\n    collections = set([m.in_collection for m in full_models])\n    assert len(collections) == len(os.listdir(MMAGIC_ROOT / 'configs')) - 1\n\n    configs = set([str(MMAGIC_ROOT / m.config) for m in full_models])\n    base_configs = glob(\n        str(MMAGIC_ROOT / 'configs/_base_/**/*.py'), recursive=True)\n    all_configs = glob(str(MMAGIC_ROOT / 'configs/**/*.py'), recursive=True)\n    valid_configs = set(all_configs) - set(base_configs)\n    untrackable_configs = valid_configs - configs\n    assert len(untrackable_configs) == 0, '/n'.join(\n        list(untrackable_configs)) + ' are not trackable.'\n\n    # write for overview.md\n    papers = set()\n    checkpoints = set()\n    for m in full_models:\n        papers.add(m.paper['Title'])\n        if m.weights is not None and m.weights.startswith('https:'):\n            checkpoints.add(m.weights)\n    task_desc = '\\n'.join([\n        f\"  - [{t}]({t.replace('-', '_').replace(' ', '_')}.md)\"\n        for t in list(tasks.keys())\n    ])\n\n    # write overview.md\n    overview = (f'# Overview\\n\\n'\n                f'* Number of checkpoints: {len(checkpoints)}\\n'\n                f'* Number of configs: {len(configs)}\\n'\n                f'* Number of papers: {len(papers)}\\n'\n                f'  - ALGORITHM: {len(collections)}\\n\\n'\n                f'* Tasks:\\n{task_desc}')\n    write_file(TARGET_ROOT / 'overview.md', overview)\n\n    # write for index.rst\n    task_desc = '\\n'.join([\n        f\"    {t.replace('-', '_').replace(' ', '_')}.md\"\n        for t in list(tasks.keys())\n    ])\n    overview = (f'.. toctree::\\n'\n                f'    :maxdepth: 1\\n'\n                f'    :caption: Model Zoo\\n\\n'\n                f'    overview.md\\n'\n                f'{task_desc}')\n    write_file(TARGET_ROOT / 'index.rst', overview)\n\n    # write for all the tasks\n    for task, models in tqdm(tasks.items(), desc='create markdown files'):\n        target_md = f\"{task.replace('-', '_').replace(' ', '_')}.md\"\n        target_md = TARGET_ROOT / target_md\n        models = sorted(models, key=lambda x: -x.data['Year'])\n\n        checkpoints = set()\n        for m in models:\n            if m.weights is not None and m.weights.startswith('https:'):\n                checkpoints.add(m.weights)\n        collections = set([m.in_collection for m in models])\n\n        papers = set()\n        for m in models:\n            papers.add(m.paper['Title'])\n\n        content = ''\n        readme = set()\n        for m in models:\n            if m.readme not in readme:\n                readme.add(m.readme)\n                with open(MMAGIC_ROOT / m.readme, 'r', encoding='utf-8') as f:\n                    c = f.read()\n                content += c.replace('# ', '## ')\n        overview = (f'# {task}\\n\\n'\n                    f'## Summary\\n'\n                    f'* Number of checkpoints: {len(checkpoints)}\\n'\n                    f'* Number of configs: {len(models)}\\n'\n                    f'* Number of papers: {len(papers)}\\n'\n                    f'  - ALGORITHM: {len(collections)}\\n\\n'\n                    f'{content}')\n\n        write_file(target_md, overview)\n\n\nif __name__ == '__main__':\n    update_model_zoo()\n"
  },
  {
    "path": "docs/en/.gitignore",
    "content": "model_zoo\ndataset_zoo\nautoapi\n"
  },
  {
    "path": "docs/en/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\trm -rf _build\n\trm -rf model_zoo\n\trm -rf dataset_zoo\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n"
  },
  {
    "path": "docs/en/_static/css/readthedocs.css",
    "content": ".header-logo {\n    background-image: url(\"../image/mmagic-logo.png\");\n    background-size: 142px 46px;\n    height: 46px;\n    width: 142px;\n}\n\ntable.colwidths-auto td {\n  width: 50%\n}\n"
  },
  {
    "path": "docs/en/_templates/404.html",
    "content": "{% extends \"layout.html\" %}\n\n{% block body %}\n\n<h1>Page Not Found</h1>\n<p>\n  Oops! The page you are looking for cannot be found.\n</p>\n<p>\n    This is likely to happen when you are switching document versions and the page you are reading is moved to another location in the new version. You can look for it in the content table left, or go to <a href=\"{{ pathto(root_doc) }}\">the homepage</a>.\n</p>\n<p>\n  If you cannot find documentation you want, please <a href=\"https://github.com/open-mmlab/mmagic/issues/new/choose\">open an issue</a> to tell us!\n</p>\n\n{% endblock %}\n"
  },
  {
    "path": "docs/en/_templates/python/attribute.rst",
    "content": "{% extends \"python/data.rst\" %}\n"
  },
  {
    "path": "docs/en/_templates/python/class.rst",
    "content": "{% if obj.display %}\n.. py:{{ obj.type }}:: {{ obj.short_name }}{% if obj.args %}({{ obj.args }}){% endif %}\n{% for (args, return_annotation) in obj.overloads %}\n   {{ \" \" * (obj.type | length) }}   {{ obj.short_name }}{% if args %}({{ args }}){% endif %}\n{% endfor %}\n\n\n   {% if obj.bases %}\n   {% if \"show-inheritance\" in autoapi_options %}\n   Bases: {% for base in obj.bases %}{{ base|link_objs }}{% if not loop.last %}, {% endif %}{% endfor %}\n   {% endif %}\n\n\n   {% if \"show-inheritance-diagram\" in autoapi_options and obj.bases != [\"object\"] %}\n   .. autoapi-inheritance-diagram:: {{ obj.obj[\"full_name\"] }}\n      :parts: 1\n      {% if \"private-members\" in autoapi_options %}\n      :private-bases:\n      {% endif %}\n\n   {% endif %}\n   {% endif %}\n   {% if obj.docstring %}\n   {{ obj.docstring|indent(3) }}\n   {% endif %}\n   {% if \"inherited-members\" in autoapi_options %}\n   {% set visible_classes = obj.classes|selectattr(\"display\")|list %}\n   {% else %}\n   {% set visible_classes = obj.classes|rejectattr(\"inherited\")|selectattr(\"display\")|list %}\n   {% endif %}\n   {% for klass in visible_classes %}\n   {{ klass.render()|indent(3) }}\n   {% endfor %}\n   {% if \"inherited-members\" in autoapi_options %}\n   {% set visible_properties = obj.properties|selectattr(\"display\")|list %}\n   {% else %}\n   {% set visible_properties = obj.properties|rejectattr(\"inherited\")|selectattr(\"display\")|list %}\n   {% endif %}\n   {% for property in visible_properties %}\n   {{ property.render()|indent(3) }}\n   {% endfor %}\n   {% if \"inherited-members\" in autoapi_options %}\n   {% set visible_attributes = obj.attributes|selectattr(\"display\")|list %}\n   {% else %}\n   {% set visible_attributes = obj.attributes|rejectattr(\"inherited\")|selectattr(\"display\")|list %}\n   {% endif %}\n   {% for attribute in visible_attributes %}\n   {{ attribute.render()|indent(3) }}\n   {% endfor %}\n   {% if \"inherited-members\" in autoapi_options %}\n   {% set visible_methods = obj.methods|selectattr(\"display\")|list %}\n   {% else %}\n   {% set visible_methods = obj.methods|rejectattr(\"inherited\")|selectattr(\"display\")|list %}\n   {% endif %}\n   {% for method in visible_methods %}\n   {{ method.render()|indent(3) }}\n   {% endfor %}\n{% endif %}\n"
  },
  {
    "path": "docs/en/_templates/python/data.rst",
    "content": "{% if obj.display %}\n.. py:{{ obj.type }}:: {{ obj.name }}\n   {%+ if obj.value is not none or obj.annotation is not none -%}\n   :annotation:\n        {%- if obj.annotation %} :{{ obj.annotation }}\n        {%- endif %}\n        {%- if obj.value is not none %} = {%\n            if obj.value is string and obj.value.splitlines()|count > 1 -%}\n                Multiline-String\n\n    .. raw:: html\n\n        <details><summary>Show Value</summary>\n\n    .. code-block:: text\n        :linenos:\n\n        {{ obj.value|indent(width=8) }}\n\n    .. raw:: html\n\n        </details>\n\n            {%- else -%}\n                {{ obj.value|string|truncate(100) }}\n            {%- endif %}\n        {%- endif %}\n    {% endif %}\n\n\n   {{ obj.docstring|indent(3) }}\n{% endif %}\n"
  },
  {
    "path": "docs/en/_templates/python/exception.rst",
    "content": "{% extends \"python/class.rst\" %}\n"
  },
  {
    "path": "docs/en/_templates/python/function.rst",
    "content": "{% if obj.display %}\n.. py:function:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> {{ obj.return_annotation }}{% endif %}\n\n{% for (args, return_annotation) in obj.overloads %}\n              {{ obj.short_name }}({{ args }}){% if return_annotation is not none %} -> {{ return_annotation }}{% endif %}\n\n{% endfor %}\n   {% for property in obj.properties %}\n   :{{ property }}:\n   {% endfor %}\n\n   {% if obj.docstring %}\n   {{ obj.docstring|indent(3) }}\n   {% endif %}\n{% endif %}\n"
  },
  {
    "path": "docs/en/_templates/python/method.rst",
    "content": "{%- if obj.display %}\n.. py:method:: {{ obj.short_name }}({{ obj.args }}){% if obj.return_annotation is not none %} -> {{ obj.return_annotation }}{% endif %}\n\n{% for (args, return_annotation) in obj.overloads %}\n            {{ obj.short_name }}({{ args }}){% if return_annotation is not none %} -> {{ return_annotation }}{% endif %}\n\n{% endfor %}\n   {% if obj.properties %}\n   {% for property in obj.properties %}\n   :{{ property }}:\n   {% endfor %}\n\n   {% else %}\n\n   {% endif %}\n   {% if obj.docstring %}\n   {{ obj.docstring|indent(3) }}\n   {% endif %}\n{% endif %}\n"
  },
  {
    "path": "docs/en/_templates/python/module.rst",
    "content": "{% if not obj.display %}\n:orphan:\n\n{% endif %}\n:py:mod:`{{ obj.name }}`\n=========={{ \"=\" * obj.name|length }}\n\n.. py:module:: {{ obj.name }}\n\n{% if obj.docstring %}\n.. autoapi-nested-parse::\n\n   {{ obj.docstring|indent(3) }}\n\n{% endif %}\n\n{% block subpackages %}\n{% set visible_subpackages = obj.subpackages|selectattr(\"display\")|list %}\n{% if visible_subpackages %}\nSubpackages\n-----------\n.. toctree::\n   :titlesonly:\n   :maxdepth: 3\n\n{% for subpackage in visible_subpackages %}\n   {{ subpackage.short_name }}/index.rst\n{% endfor %}\n\n\n{% endif %}\n{% endblock %}\n{% block submodules %}\n{% set visible_submodules = obj.submodules|selectattr(\"display\")|list %}\n{% if visible_submodules %}\nSubmodules\n----------\n.. toctree::\n   :titlesonly:\n   :maxdepth: 1\n\n{% for submodule in visible_submodules %}\n   {{ submodule.short_name }}/index.rst\n{% endfor %}\n\n\n{% endif %}\n{% endblock %}\n{% block content %}\n{% if obj.all is not none %}\n{% set visible_children = obj.children|selectattr(\"short_name\", \"in\", obj.all)|list %}\n{% elif obj.type is equalto(\"package\") %}\n{% set visible_children = obj.children|selectattr(\"display\")|list %}\n{% else %}\n{% set visible_children = obj.children|selectattr(\"display\")|rejectattr(\"imported\")|list %}\n{% endif %}\n{% if visible_children %}\n{{ obj.type|title }} Contents\n{{ \"-\" * obj.type|length }}---------\n\n{% set visible_classes = visible_children|selectattr(\"type\", \"equalto\", \"class\")|list %}\n{% set visible_functions = visible_children|selectattr(\"type\", \"equalto\", \"function\")|list %}\n{% set visible_attributes = visible_children|selectattr(\"type\", \"equalto\", \"data\")|list %}\n{% if \"show-module-summary\" in autoapi_options and (visible_classes or visible_functions) %}\n{% block classes scoped %}\n{% if visible_classes %}\nClasses\n~~~~~~~\n\n.. autoapisummary::\n\n{% for klass in visible_classes %}\n   {{ klass.id }}\n{% endfor %}\n\n\n{% endif %}\n{% endblock %}\n\n{% block functions scoped %}\n{% if visible_functions %}\nFunctions\n~~~~~~~~~\n\n.. autoapisummary::\n\n{% for function in visible_functions %}\n   {{ function.id }}\n{% endfor %}\n\n\n{% endif %}\n{% endblock %}\n\n{% block attributes scoped %}\n{% if visible_attributes %}\nAttributes\n~~~~~~~~~~\n\n.. autoapisummary::\n\n{% for attribute in visible_attributes %}\n   {{ attribute.id }}\n{% endfor %}\n\n\n{% endif %}\n{% endblock %}\n{% endif %}\n{% for obj_item in visible_children %}\n{{ obj_item.render()|indent(0) }}\n{% endfor %}\n{% endif %}\n{% endblock %}\n"
  },
  {
    "path": "docs/en/_templates/python/package.rst",
    "content": "{% extends \"python/module.rst\" %}\n"
  },
  {
    "path": "docs/en/_templates/python/property.rst",
    "content": "{%- if obj.display %}\n.. py:property:: {{ obj.short_name }}\n   {% if obj.annotation %}\n   :type: {{ obj.annotation }}\n   {% endif %}\n   {% if obj.properties %}\n   {% for property in obj.properties %}\n   :{{ property }}:\n   {% endfor %}\n   {% endif %}\n\n   {% if obj.docstring %}\n   {{ obj.docstring|indent(3) }}\n   {% endif %}\n{% endif %}\n"
  },
  {
    "path": "docs/en/advanced_guides/data_flow.md",
    "content": "# Data flow\n\n- [Data Flow](#data-flow)\n  - [Overview of dataflow](#overview-of-data-flow)\n  - [Data flow between dataset and model](#data-flow-between-dataset-and-model)\n    - [Data from dataloader](#data-from-dataloader)\n    - [Data from data preprocessor](#data-from-data-preprocessor)\n  - [Data flow between model output and visualizer](#data-flow-between-model-output-and-visualizer)\n\n## Overview of dataflow\n\nThe [Runner](https://github.com/open-mmlab/mmengine/blob/main/docs/en/design/runner.md) is an \"integrator\" in MMEngine. It covers all aspects of the framework and shoulders the responsibility of organizing and scheduling nearly all modules, that means the dataflow between all modules also controlled by the `Runner`. As illustrated in the [Runner document of MMEngine](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html), the following diagram shows the basic dataflow. In this chapter, we will introduce the dataflow and data format convention between the internal modules managed by the [Runner](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html).\n\n<div align=\"center\">\n<img src=\"https://github.com/open-mmlab/mmagic/assets/36404164/fc6ab53c-8804-416d-94cd-332c533a07ad\" height=\"150\" />\n</div>\n\nIn the above diagram, at each training iteration, dataloader loads images from storage and transfer to data preprocessor, data preprocessor would put images to the specific device and stack data to batch, then model accepts the batch data as inputs, finally the outputs of the model would be compute the loss. Since model parameters are freezed when doing evaluation, the model output would be transferred to [Evaluator](./evaluation.md#ioumetric) to compute metrics or seed the data to visualize in [Visualizer](../user_guides/visualization.md).\n\n## Data flow between dataset and model\n\nIn this section, we will introduce the data flow passing in the dataset in MMagic. About [dataset](https://mmagic.readthedocs.io/en/latest/howto/dataset.html) and \\[transforms\\] pipeline (https://mmagic.readthedocs.io/en/latest/howto/transforms.html) related tutorials can be found in the development of guidelines.The data flow between dataloader and model can be generally split into four parts:\n\n1. Read the original information of `XXDataset` collected datasets, and carry out data conversion processing through data transform pipeline;\n\n2. use `PackInputs` to pack data from previous transformations into a dictionar;\n\n3. use `collate_fn` to stack a list of tensors into a batched tensor;\n\n4. use `data preprocessor` to move all these data to target device, e.g. GPUS, and unzip the dictionary from the dataloader\n   into a tuple, containing the input images and meta info (`DataSample`).\n\n### Data from transform pipeline\n\nIn MMagic, different types of 'XXDataset' load the data (LQ) and label (GT), and perform data transformation in different data preprocessing pipelines, and finally package the processed data into a dictionary through `PackInputs`, which contains all the data required for training and testing iterations.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> base_edit_model.py </th>\n    <th> base_conditional_gan.py </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n@MODELS.register_module()\nclass BaseEditModel(BaseModel):\n    \"\"\"Base model for image and video editing.\n    \"\"\"\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs) -> Union[torch.Tensor, List[DataSample], dict]:\n        if isinstance(inputs, dict):\n            inputs = inputs['img']\n        if mode == 'tensor':\n            return self.forward_tensor(inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n\n        elif mode == 'loss':\n            return self.forward_train(inputs, data_samples, **kwargs)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\n@MODELS.register_module()\nclass BaseConditionalGAN(BaseGAN):\n    \"\"\"Base class for Conditional GAM models.\n    \"\"\"\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            sample_kwargs = {}\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n            sample_kwargs = inputs.get('sample_kwargs', dict())\n        num_batches = noise.shape[0]\n\n        pass\n        ...\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nFor example, in the `BaseEditModel` and `BaseConditionalGAN` models, key input including `img` and `noise` are required. At the same time, the corresponding fields should also be exposed in the configuration file,[cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py](../../../configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py) as an example,\n\n### Data from dataloader\n\nAfter receiving a list of dictionary from dataset, `collect_fn` in dataloader will gather `inputs` in each dict\nand stack them into a batched tensor. In addition, `data_sample` in each dict will be also collected in a list.\nThen, it will output a dict, containing the same keys with those of the dict in the received list. Finally, dataloader\nwill output the dict from the `collect_fn`. Detailed documentation can be reference [DATASET AND DATALOADER](https://mmengine.readthedocs.io/en/latest/tutorials/dataset.html)。\n\n### Data from data preprocessor\n\nData preprocessor is the last step to process the data before feeding into the model. It will apply image normalization, convert BGR to RGB and move all data to the target device, e.g. GPUs. After above steps, it will output a tuple, containing a list of batched images, and a list of data samples. Detailed documentation can be reference [data_preprocessor](./data_preprocessor.md)。\n\n## Data flow between model output and visualizer\n\nMMEngine agreed [Abstract Data Element](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/data_element.md) for data transfer Where [data sample](./structures.md) as a more advanced encapsulation can hold more categories of label data. In MMagic, `ConcatImageVisualizer` for visual comparison also controls the visual content through the `add_datasample` function. The specific configuration is as follows.\n\n```python\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=[dict(type='LocalVisBackend')],\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\n```\n"
  },
  {
    "path": "docs/en/advanced_guides/data_preprocessor.md",
    "content": "# Data pre-processor\n\n## The position of the data preprocessor in the training pipeline.\n\nDuring the model training process, image data undergoes data augmentation using the transforms provided by mmcv. The augmented data is then loaded into a dataloader. Subsequently, a preprocessor is used to move the data from the CPU to CUDA (GPU), perform padding, and normalize the data.\n\nBelow is an example of the `train_pipeline` in the complete configuration file using `configs/_base_/datasets/unpaired_imgs_256x256.py`. The train_pipeline typically defines a sequence of transformations applied to training images using the mmcv library. This pipeline is designed to prevent redundancy in the transformation functions across different downstream algorithm libraries.\n\n```python\n...\ntrain_pipeline = [\n    dict(color_type='color', key='img_A', type='LoadImageFromFile'),\n    dict(color_type='color', key='img_B', type='LoadImageFromFile'),\n    dict(auto_remap=True, mapping=dict(img=['img_A', 'img_B',]),\n        share_random_params=True,\n        transforms=[dict(interpolation='bicubic', scale=(286, 286,), type='Resize'),\n                    dict(crop_size=(256, 256,), keys=['img',], random_crop=True, type='Crop'),],\n        type='TransformBroadcaster'),\n    dict(direction='horizontal', keys=['img_A', ], type='Flip'),\n    dict(direction='horizontal', keys=['img_B', ], type='Flip'),\n    dict(mapping=dict(img_mask='img_B', img_photo='img_A'),\n        remapping=dict(img_mask='img_mask', img_photo='img_photo'),\n        type='KeyMapper'),\n    dict(data_keys=['img_photo', 'img_mask',],\n        keys=['img_photo', 'img_mask',], type='PackInputs'),\n]\n...\n```\n\nIn the `train_step` function in the `mmagic/models/editors/cyclegan/cyclegan.py` script, the data preprocessing steps involve moving, concatenating, and normalizing the transformed data before feeding it into the neural network. Below is an example of the relevant code logic:\n\n```python\n...\nmessage_hub = MessageHub.get_current_instance()\ncurr_iter = message_hub.get_info('iter')\ndata = self.data_preprocessor(data, True)\ndisc_optimizer_wrapper = optim_wrapper['discriminators']\n\ninputs_dict = data['inputs']\noutputs, log_vars = dict(), dict()\n...\n```\n\nIn mmagic, the code implementation for the data processor is located at `mmagic/models/data_preprocessors/data_preprocessor.py`. The data processing workflow is as follows:\n![image](https://github.com/jinxianwei/CloudImg/assets/81373517/f52a92ab-f86d-486d-86ac-a2f388a83ced)\n"
  },
  {
    "path": "docs/en/advanced_guides/evaluator.md",
    "content": "# Evaluator\n\n## Evaluation Metrics and Evaluators\n\nIn model validation and testing, it is usually necessary to quantitatively evaluate the accuracy of the model. In mmagic, the evaluation metrics and evaluators are implemented to accomplish this functionality.\n\n- Evaluation metrics are used to calculate specific model accuracy indicators based on test data and model prediction results. mmagic provides a variety of built-in metrics, which can be found in the metrics documentation. Additionally, metrics are decoupled from datasets and can be used for multiple datasets.\n- The evaluator is the top-level module for evaluation metrics and usually contains one or more metrics. The purpose of the evaluator is to perform necessary data format conversion and call evaluation metrics to calculate the model accuracy during model evaluation. The evaluator is typically built by a `Runner` or a testing script, which are used for online evaluation and offline evaluation, respectively.\n\nThe evaluator in MMagic inherits from that in MMEngine and has a similar basic usage. For specific information, you can refer to [Model Accuracy Evaluation](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html). However, different from other high-level vision tasks, the evaluation metrics for generative models often have multiple inputs. For example, the input for the Inception Score (IS) metric is only fake images and any number of real images, while the Perceptual Path Length (PPL) requires sampling from the latent space. To accommodate different evaluation metrics, mmagic introduces two important methods, `prepare_metrics` and `prepare_samplers` to meet the above requirements.\n\n## prepare_metrics\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    def prepare_metrics(self, module: BaseModel, dataloader: DataLoader):\n        \"\"\"Prepare for metrics before evaluation starts. Some metrics use\n        pretrained model to extract feature. Some metrics use pretrained model\n        to extract feature and input channel order may vary among those models.\n        Therefore, we first parse the output color order from data\n        preprocessor and set the color order for each metric. Then we pass the\n        dataloader to each metrics to prepare pre-calculated items. (e.g.\n        inception feature of the real images). If metric has no pre-calculated\n        items, :meth:`metric.prepare` will be ignored. Once the function has\n        been called, :attr:`self.is_ready` will be set as `True`. If\n        :attr:`self.is_ready` is `True`, this function will directly return to\n        avoid duplicate computation.\n\n        Args:\n            module (BaseModel): Model to evaluate.\n            dataloader (DataLoader): The dataloader for real images.\n        \"\"\"\n        if self.metrics is None:\n            self.is_ready = True\n            return\n\n        if self.is_ready:\n            return\n\n        # prepare metrics\n        for metric in self.metrics:\n            metric.prepare(module, dataloader)\n        self.is_ready = True\n```\n\nThe `prepare_metrics` method needs to be called before the evaluation starts. It is used to preprocess before evaluating each metric, and will sequentially call the prepare method of each metric in the evaluator to prepare any pre-calculated elements needed for that metric (such as features from hidden layers). Additionally, to avoid repeated calls, the `evaluator.is_ready` flag will be set to True after preprocessing for all metrics is completed.\n\n```python\nclass GenMetric(BaseMetric):\n\t...\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        \"\"\"Prepare for the pre-calculating items of the metric. Defaults to do\n        nothing.\n\n        Args:\n            module (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for the real images.\n        \"\"\"\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n```\n\n## prepare_samplers\n\nDifferent metrics require different inputs for generative models. For example, FID, KID, and IS only need the generated fake images, while PPL requires vectors from the latent space. Therefore, mmagic groups different evaluation metrics based on the type of input. One or more evaluation metrics in the same group share a data sampler. The sampler mode for each evaluation metric is determined by the `SAMPLER_MODE` attribute of that metric.\n\n```python\nclass GenMetric(BaseMetric):\n\t...\n    SAMPLER_MODE = 'normal'\n\nclass GenerativeMetric(GenMetric):\n\t...\n    SAMPLER_MODE = 'Generative'\n```\n\nThe `prepare_samplers` method of the evaluator is responsible for preparing the data samplers based on the sampler mode of all evaluation metrics.\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    def prepare_samplers(self, module: BaseModel, dataloader: DataLoader\n                         ) -> List[Tuple[List[BaseMetric], Iterator]]:\n        \"\"\"Prepare for the sampler for metrics whose sampling mode are\n        different. For generative models, different metric need image\n        generated with different inputs. For example, FID, KID and IS need\n        images generated with random noise, and PPL need paired images on the\n        specific noise interpolation path. Therefore, we first group metrics\n        with respect to their sampler's mode (refers to\n        :attr:~`GenMetrics.SAMPLER_MODE`), and build a shared sampler for each\n        metric group. To be noted that, the length of the shared sampler\n        depends on the metric of the most images required in each group.\n\n        Args:\n            module (BaseModel): Model to evaluate. Some metrics (e.g. PPL)\n                require `module` in their sampler.\n            dataloader (DataLoader): The dataloader for real image.\n\n        Returns:\n            List[Tuple[List[BaseMetric], Iterator]]: A list of \"metrics-shared\n                sampler\" pair.\n        \"\"\"\n        if self.metrics is None:\n            return [[[None], []]]\n\n        # grouping metrics based on `SAMPLER_MODE` and `sample_mode`\n        metric_mode_dict = defaultdict(list)\n        for metric in self.metrics:  # Specify a sampler group for each metric.\n            metric_md5 = self._cal_metric_hash(metric)\n            metric_mode_dict[metric_md5].append(metric)\n\n        metrics_sampler_list = []\n        for metrics in metric_mode_dict.values(): # Generate a sampler for each group.\n            first_metric = metrics[0]\n            metrics_sampler_list.append([\n                metrics,\n                first_metric.get_metric_sampler(module, dataloader, metrics)\n            ])\n\n        return metrics_sampler_list\n```\n\nThe method will first check if it has any evaluation metrics to calculate: if not, it will return directly. If there are metrics to calculate, it will iterate through all the evaluation metrics and group them based on the sampler_mode and sample_model. The specific implementation is as follows: it calculates a hash code based on the sampler_mode and sample_model, and puts the evaluation metrics with the same hash code into the same list.\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    @staticmethod\n    def _cal_metric_hash(metric: GenMetric):\n        \"\"\"Calculate a unique hash value based on the `SAMPLER_MODE` and\n        `sample_model`.\"\"\"\n        sampler_mode = metric.SAMPLER_MODE\n        sample_model = metric.sample_model\n        metric_dict = {\n            'SAMPLER_MODE': sampler_mode,\n            'sample_model': sample_model\n        }\n        if hasattr(metric, 'need_cond_input'):\n            metric_dict['need_cond_input'] = metric.need_cond_input\n        md5 = hashlib.md5(repr(metric_dict).encode('utf-8')).hexdigest()\n        return md5\n```\n\nFinally, this method will generate a sampler for each evaluation metric group and add it to a list to return.\n\n## Evaluation process of an evaluator\n\nThe implementation of evaluation process can be found in `mmagic.engine.runner.MultiValLoop.run` and `mmagic.engine.runner.MultiTestLoop.run`. Here we take `mmagic.engine.runner.MultiValLoop.run` as example.\n\n```python\nclass MultiValLoop(BaseLoop):\n\t...\n    def run(self):\n\t...\n        # 1. prepare all metrics and get the total length\n        metrics_sampler_lists = []\n        meta_info_list = []\n        dataset_name_list = []\n        for evaluator, dataloader in zip(self.evaluators, self.dataloaders):\n            # 1.1 prepare for metrics\n            evaluator.prepare_metrics(module, dataloader)\n            # 1.2 prepare for metric-sampler pair\n            metrics_sampler_list = evaluator.prepare_samplers(\n                module, dataloader)\n            metrics_sampler_lists.append(metrics_sampler_list)\n            # 1.3 update total length\n            self._total_length += sum([\n                len(metrics_sampler[1])\n                for metrics_sampler in metrics_sampler_list\n            ])\n            # 1.4 save metainfo and dataset's name\n            meta_info_list.append(\n                getattr(dataloader.dataset, 'metainfo', None))\n            dataset_name_list.append(dataloader.dataset.__class__.__name__)\n```\n\nFirst, the runner will perform preprocessing and obtain the necessary data samplers for evaluation using the `evaluator.prepare_metric` and `evaluator.prepare_samplers` methods. It will also update the total length of samples obtained using the samplers. As the evaluation metrics and dataset in mmagic are separated, some meta_info required for evaluation also needs to be saved and passed to the evaluator.\n\n```python\nclass MultiValLoop(BaseLoop):\n\t...\n    def run(self):\n\t...\n        # 2. run evaluation\n        for idx in range(len(self.evaluators)):\n            # 2.1 set self.evaluator for run_iter\n            self.evaluator = self.evaluators[idx]\n            self.dataloader = self.dataloaders[idx]\n\n            # 2.2 update metainfo for evaluator and visualizer\n            meta_info = meta_info_list[idx]\n            dataset_name = dataset_name_list[idx]\n            if meta_info:\n                self.evaluator.dataset_meta = meta_info\n                self._runner.visualizer.dataset_meta = meta_info\n            else:\n                warnings.warn(\n                    f'Dataset {dataset_name} has no metainfo. `dataset_meta` '\n                    'in evaluator, metric and visualizer will be None.')\n\n            # 2.3 generate images\n            metrics_sampler_list = metrics_sampler_lists[idx]\n            for metrics, sampler in metrics_sampler_list:\n                for data in sampler:\n                    self.run_iter(idx_counter, data, metrics)\n                    idx_counter += 1\n\n            # 2.4 evaluate metrics and update multi_metric\n            metrics = self.evaluator.evaluate()\n            if multi_metric and metrics.keys() & multi_metric.keys():\n                raise ValueError('Please set different prefix for different'\n                                 ' datasets in `val_evaluator`')\n            else:\n                multi_metric.update(metrics)\n        # 3. finish evaluation and call hooks\n        self._runner.call_hook('after_val_epoch', metrics=multi_metric)\n        self._runner.call_hook('after_val')\n```\n\nAfter the preparation for evaluation is completed, the runner will iterate through all the evaluators and perform the evaluation one by one. Each evaluator needs to correspond to a data loader to complete the evaluation work for a dataset. Specifically, during the evaluation process for each evaluator, it is necessary to pass the required meta_info to the evaluator, then iterate through all the metrics_samplers of this evaluator to generate the images needed for evaluation, and finally complete the evaluation.\n"
  },
  {
    "path": "docs/en/advanced_guides/structures.md",
    "content": "# Data Structure\n\n`DataSample` , the data structure interface of MMagic, inherits from [` BaseDataElement`](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html). The base class has implemented basic add/delete/update/check functions and supports data migration between different devices, as well as dictionary-like and tensor-like operations, which also allows the interfaces of different algorithms to be unified.\n\nSpecifically, an instance of BaseDataElement consists of two components:\n\n- `metainfo`, which contains some meta information,\n  e.g., `img_shape`, `img_id`, `color_order`, etc.\n- `data`, which contains the data used in the loop.\n\nThanks to ` DataSample` , the data flow between each module in the algorithm libraries, such as [`visualizer`](https://mmagic.readthedocs.io/en/latest/user_guides/visualization.html), [`evaluator`](https://mmagic.readthedocs.io/en/latest/advanced_guides/evaluator.html), [`model`](https://mmagic.readthedocs.io/en/latest/howto/models.html), is greatly simplified.\n\nThe attributes in `DataSample` are divided into several parts:\n\n```python\n- ``gt_img``: Ground truth image(s).\n- ``pred_img``: Image(s) of model predictions.\n- ``ref_img``: Reference image(s).\n- ``mask``: Mask in Inpainting.\n- ``trimap``: Trimap in Matting.\n- ``gt_alpha``: Ground truth alpha image in Matting.\n- ``pred_alpha``: Predicted alpha image in Matting.\n- ``gt_fg``: Ground truth foreground image in Matting.\n- ``pred_fg``: Predicted foreground image in Matting.\n- ``gt_bg``: Ground truth background image in Matting.\n- ``pred_bg``: Predicted background image in Matting.\n- ``gt_merged``: Ground truth merged image in Matting.\n```\n\nThe following sample code demonstrates the components of `DataSample`:\n\n```python\n     >>> import torch\n     >>> import numpy as np\n     >>> from mmagic.structures import DataSample\n     >>> img_meta = dict(img_shape=(800, 1196, 3))\n     >>> img = torch.rand((3, 800, 1196))\n     >>> data_sample = DataSample(gt_img=img, metainfo=img_meta)\n     >>> assert 'img_shape' in data_sample.metainfo_keys()\n     >>> data_sample\n\t >>># metainfo and data of DataSample\n    <DataSample(\n\n        META INFORMATION\n        img_shape: (800, 1196, 3)\n\n        DATA FIELDS\n        gt_img: tensor(3, 800, 1196)\n    ) at 0x1f6a5a99a00>\n```\n\nWe also support `stack` and `split` operation to handle a batch of data samples.\n\n1. Stack\n\nStack a list of data samples to one. All tensor fields will be stacked at first dimension. Otherwise the values will be saved in a list.\n\n```\n    Args:\n        data_samples (Sequence['DataSample']): A sequence of `DataSample` to stack.\n\n    Returns:\n        DataSample: The stacked data sample.\n```\n\n2. Split\n\nSplit a sequence of data sample in the first dimension.\n\n```\n\tArgs:\n         allow_nonseq_value (bool): Whether allow non-sequential data in\n         split operation. If True, non-sequential data will be copied\n         for all split data samples. Otherwise, an error will be\n         raised. Defaults to False.\n\n    Returns:\n         Sequence[DataSample]: The list of data samples after splitting.\n```\n\nThe following sample code demonstrates the use of `stack` and ` split`:\n\n```py\nimport torch\nimport numpy as np\nfrom mmagic.structures import DataSample\nimg_meta1 = img_meta2 = dict(img_shape=(800, 1196, 3))\nimg1 = torch.rand((3, 800, 1196))\nimg2 = torch.rand((3, 800, 1196))\ndata_sample1 = DataSample(gt_img=img1, metainfo=img_meta1)\ndata_sample2 = DataSample(gt_img=img2, metainfo=img_meta1)\n```\n\n```py\n# stack them and then use as batched-tensor!\ndata_sample = DataSample.stack([data_sample1, data_sample2])\nprint(data_sample.gt_img.shape)\n    torch.Size([2, 3, 800, 1196])\nprint(data_sample.metainfo)\n    {'img_shape': [(800, 1196, 3), (800, 1196, 3)]}\n\n# split them if you want\ndata_sample1_, data_sample2_ = data_sample.split()\nassert (data_sample1_.gt_img == img1).all()\nassert (data_sample2_.gt_img == img2).all()\n```\n"
  },
  {
    "path": "docs/en/changelog.md",
    "content": "# Changelog\n\n**Highlights**\n\n- An advanced and powerful inpainting algorithm named PowerPaint is released in our repository. [Click to View](https://github.com/open-mmlab/mmagic/tree/main/projects/powerpaint)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/12782558/eba2c6a4-3ff4-4075-a027-0e9799769bf9\"/>\n</div>\n\n**New Features & Improvements**\n\n- \\[Release\\] Post release for v1.1.0 by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2043\n- \\[CodeCamp2023-645\\]Add dreambooth new cfg by @YanxingLiu in https://github.com/open-mmlab/mmagic/pull/2042\n- \\[Enhance\\] add new config for _base_ dir by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2053\n- \\[Enhance\\] support using from_pretrained for instance_crop by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2066\n- \\[Enhance\\] update support for latest diffusers with lora by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2067\n- \\[Feature\\] PowerPaint by @zhuang2002 in https://github.com/open-mmlab/mmagic/pull/2076\n- \\[Enhance\\] powerpaint improvement by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2078\n- \\[Enhance\\] Improve powerpaint by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2080\n- \\[Enhance\\] add outpainting to gradio_PowerPaint.py by @zhuang2002 in https://github.com/open-mmlab/mmagic/pull/2084\n- \\[MMSIG\\] Add new configuration files for StyleGAN2 by @xiaomile in https://github.com/open-mmlab/mmagic/pull/2057\n- \\[MMSIG\\] \\[Doc\\] Update data_preprocessor.md by @jinxianwei in https://github.com/open-mmlab/mmagic/pull/2055\n- \\[Enhance\\] Enhance PowerPaint by @zhuang2002 in https://github.com/open-mmlab/mmagic/pull/2093\n\n**Bug Fixes**\n\n- \\[Fix\\] Update README.md by @eze1376 in https://github.com/open-mmlab/mmagic/pull/2048\n- \\[Fix\\] Fix test tokenizer by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2050\n- \\[Fix\\] fix readthedocs building by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2052\n- \\[Fix\\] --local-rank for PyTorch >= 2.0.0 by @youqingxiaozhua in https://github.com/open-mmlab/mmagic/pull/2051\n- \\[Fix\\] animatediff download from openxlab by @JianxinDong in https://github.com/open-mmlab/mmagic/pull/2061\n- \\[Fix\\] fix best practice by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2063\n- \\[Fix\\] try import expand mask from transformers by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2064\n- \\[Fix\\] Update diffusers to v0.23.0 by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2069\n- \\[Fix\\] add openxlab link to powerpaint by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2082\n- \\[Fix\\] Update swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py, use MultiValLoop. by @ashutoshsingh0223 in https://github.com/open-mmlab/mmagic/pull/2085\n- \\[Fix\\] Fix a test expression that has a logical short circuit. by @munahaf in https://github.com/open-mmlab/mmagic/pull/2046\n- \\[Fix\\] Powerpaint to load safetensors by @sdbds in https://github.com/open-mmlab/mmagic/pull/2088\n\n**New Contributors**\n\n- @eze1376 made their first contribution in https://github.com/open-mmlab/mmagic/pull/2048\n- @youqingxiaozhua made their first contribution in https://github.com/open-mmlab/mmagic/pull/2051\n- @JianxinDong made their first contribution in https://github.com/open-mmlab/mmagic/pull/2061\n- @zhuang2002 made their first contribution in https://github.com/open-mmlab/mmagic/pull/2076\n- @ashutoshsingh0223 made their first contribution in https://github.com/open-mmlab/mmagic/pull/2085\n- @jinxianwei made their first contribution in https://github.com/open-mmlab/mmagic/pull/2055\n- @munahaf made their first contribution in https://github.com/open-mmlab/mmagic/pull/2046\n- @sdbds made their first contribution in https://github.com/open-mmlab/mmagic/pull/2088\n\n**Full Changelog**: https://github.com/open-mmlab/mmagic/compare/v1.1.0...v1.2.0\n\n## v1.1.0 (22/09/2023)\n\n**Highlights**\n\nIn this new version of MMagic, we have added support for the following five new algorithms.\n\n- Support ViCo, a new SD personalization method. [Click to View](https://github.com/open-mmlab/mmagic/blob/main/configs/vico/README.md)\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://github.com/open-mmlab/mmagic/assets/71176040/58a6953c-053a-40ea-8826-eee428c992b5\" width=\"800\"/>\n  <br/>\n</thead>\n</table>\n\n- Support AnimateDiff, a popular text2animation method. [Click to View](https://github.com/open-mmlab/mmagic/blob/main/configs/animatediff/README.md)\n\n![512](https://github.com/ElliotQi/mmagic/assets/46469021/54d92aca-dfa9-4eeb-ba38-3f6c981e5399)\n\n- Support SDXL. [Click to View](https://github.com/open-mmlab/mmagic/blob/main/configs/stable_diffusion_xl/README.md)\n\n<div align=center>\n<img src=\"https://github.com/okotaku/diffengine/assets/24734142/27d4ebad-5705-4500-826f-41f425a08c0d\"/>\n</div>\n\n- Support DragGAN implementation with MMagic. [Click to View](https://github.com/open-mmlab/mmagic/blob/main/configs/draggan/README.md)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/7c397bd0-fa07-48fe-8a7c-a4022907404b\"/>\n</div>\n\n- Support for FastComposer. [Click to View](https://github.com/open-mmlab/mmagic/blob/main/configs/fastcomposer/README.md)\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/14927720/265914135-8a25789c-8d30-40cb-8ac5-e3bd3b617aac.png\">\n</div>\n\n**New Features & Improvements**\n\n- \\[Feature\\] Support inference with diffusers pipeline, sd_xl first. by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2023\n- \\[Enhance\\] add negative prompt for sd inferencer by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2021\n- \\[Enhance\\] Update flake8 checking config in setup.cfg by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/2007\n- \\[Enhance\\] Add ‘config_name' as a supplement to the 'model_setting' by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2027\n- \\[Enhance\\] faster test by @okotaku in https://github.com/open-mmlab/mmagic/pull/2034\n- \\[Enhance\\] Add OpenXLab Badge by @ZhaoQiiii in https://github.com/open-mmlab/mmagic/pull/2037\n\n**CodeCamp Contributions**\n\n- \\[CodeCamp2023-643\\] Add new configs of BigGAN by @limafang in https://github.com/open-mmlab/mmagic/pull/2003\n- \\[CodeCamp2023-648\\] MMagic new config GuidedDiffusion by @ooooo-create in https://github.com/open-mmlab/mmagic/pull/2005\n- \\[CodeCamp2023-649\\] MMagic new config Instance Colorization by @ooooo-create in https://github.com/open-mmlab/mmagic/pull/2010\n- \\[CodeCamp2023-652\\] MMagic new config StyleGAN3 by @hhy150 in https://github.com/open-mmlab/mmagic/pull/2018\n- \\[CodeCamp2023-653\\] Add new configs of Real BasicVSR by @RangeKing in https://github.com/open-mmlab/mmagic/pull/2030\n\n**Bug Fixes**\n\n- \\[Fix\\] Fix best practice and back to contents on mainpage, add new models to model zoo by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2001\n- \\[Fix\\] Check CI error and remove main stream gpu test by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2013\n- \\[Fix\\] Check circle ci memory by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2016\n- \\[Fix\\] remove code and fix clip loss ut test by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2017\n- \\[Fix\\] mock infer in diffusers pipeline inferencer ut. by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2026\n- \\[Fix\\] Fix bug caused by merging draggan by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2029\n- \\[Fix\\] Update QRcode by @crazysteeaam in https://github.com/open-mmlab/mmagic/pull/2009\n- \\[Fix\\] Replace the download links in README with OpenXLab version by @FerryHuang in https://github.com/open-mmlab/mmagic/pull/2038\n- \\[Fix\\] Increase docstring coverage by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2039\n\n**New Contributors**\n\n- @limafang made their first contribution in https://github.com/open-mmlab/mmagic/pull/2003\n- @ooooo-create made their first contribution in https://github.com/open-mmlab/mmagic/pull/2005\n- @hhy150 made their first contribution in https://github.com/open-mmlab/mmagic/pull/2018\n- @ZhaoQiiii made their first contribution in https://github.com/open-mmlab/mmagic/pull/2037\n- @ElliotQi made their first contribution in https://github.com/open-mmlab/mmagic/pull/1980\n- @Beaconsyh08 made their first contribution in https://github.com/open-mmlab/mmagic/pull/2012\n\n**Full Changelog**: https://github.com/open-mmlab/mmagic/compare/v1.0.2...v1.0.3\n\n## v1.0.2 (24/08/2023)\n\n**Highlights**\n\n**1. More detailed documentation**\n\nThank you to the community contributors for helping us improve the documentation. We have improved many documents, including both Chinese and English versions. Please refer to the [documentation](https://mmagic.readthedocs.io/en/latest/) for more details.\n\n**2. New algorithms**\n\n- Support Prompt-to-prompt, DDIM Inversion and Null-text Inversion. [Click to View.](https://github.com/open-mmlab/mmagic/blob/main/projects/prompt_to_prompt/README.md)\n\nFrom right to left: origin image, DDIM inversion, Null-text inversion\n\n<center class=\"half\">\n    <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/34d8a467-5378-41fb-83c6-b23c9dee8f0a\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/3d3814b4-7fb5-4232-a56f-fd7fef0ba28e\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/43008ed4-a5a3-4f81-ba9f-95d9e79e6a08\" width=\"200\"/>\n</center>\n\nPrompt-to-prompt Editing\n\n<div align=\"center\">\n  <b>cat -> dog</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f5d3fc0c-aa7b-4525-9364-365b254d51ca\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>spider man -> iron man(attention replace)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/074adbc6-bd48-4c82-99aa-f322cf937f5a\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>Effel tower -> Effel tower at night (attention refine)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f815dab3-b20c-4936-90e3-a060d3717e22\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>blossom sakura tree -> blossom(-3) sakura tree (attention reweight)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/5ef770b9-4f28-4ae7-84b0-6c15ea7450e9\" width=\"500\"/>\n</div>\n\n- Support Textual Inversion. [Click to view.](https://github.com/open-mmlab/mmagic/blob/main/configs/textual_inversion/README.md)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/28132635/b2dac6f1-5151-4199-bcc2-71b5b1523a16\">\n</div>\n\n- Support Attention Injection for more stable video generation with controlnet. [Click to view.](https://github.com/open-mmlab/mmagic/blob/main/configs/controlnet_animation/README.md)\n- Support Stable Diffusion Inpainting. [Click to view.](https://github.com/open-mmlab/mmagic/blob/main/configs/stable_diffusion/README.md)\n\n**New Features & Improvements**\n\n- \\[Enhancement\\] Support noise offset in stable diffusion training by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1880\n- \\[Community\\] Support Glide Upsampler by @Taited in https://github.com/open-mmlab/mmagic/pull/1663\n- \\[Enhance\\] support controlnet inferencer by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1891\n- \\[Feature\\] support Albumentations augmentation transformations and pipeline by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1894\n- \\[Feature\\] Add Attention Injection for unet by @liuwenran in https://github.com/open-mmlab/mmagic/pull/1895\n- \\[Enhance\\] update benchmark scripts by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1907\n- \\[Enhancement\\] update mmagic docs by @crazysteeaam in https://github.com/open-mmlab/mmagic/pull/1920\n- \\[Enhancement\\] Support Prompt-to-prompt, ddim inversion and null-text inversion by @FerryHuang in https://github.com/open-mmlab/mmagic/pull/1908\n- \\[CodeCamp2023-302\\] Support MMagic visualization and write a user guide  by @aptsunny in https://github.com/open-mmlab/mmagic/pull/1939\n- \\[Feature\\] Support Textual Inversion by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1822\n- \\[Feature\\] Support stable diffusion inpaint by @Taited in https://github.com/open-mmlab/mmagic/pull/1976\n- \\[Enhancement\\] Adopt `BaseModule` for some models by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1543\n- \\[MMSIG\\]支持 DeblurGANv2 inference by @xiaomile in https://github.com/open-mmlab/mmagic/pull/1955\n- \\[CodeCamp2023-647\\] Add new configs of EG3D by @RangeKing in https://github.com/open-mmlab/mmagic/pull/1985\n\n**Bug Fixes**\n\n- Fix dtype error in StableDiffusion and DreamBooth training by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1879\n- Fix gui VideoSlider bug by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1885\n- Fix init_model and glide demo by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1888\n- Fix InstColorization bug when dim=3 by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1901\n- Fix sd and controlnet fp16 bugs by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1914\n- Fix num_images_per_prompt in controlnet by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1936\n- Revise metafile for sd-inpainting to fix inferencer init by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1995\n\n**New Contributors**\n\n- @wyyang23 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1886\n- @yehuixie made their first contribution in https://github.com/open-mmlab/mmagic/pull/1912\n- @crazysteeaam made their first contribution in https://github.com/open-mmlab/mmagic/pull/1920\n- @BUPT-NingXinyu made their first contribution in https://github.com/open-mmlab/mmagic/pull/1921\n- @zhjunqin made their first contribution in https://github.com/open-mmlab/mmagic/pull/1918\n- @xuesheng1031 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1923\n- @wslgqq277g made their first contribution in https://github.com/open-mmlab/mmagic/pull/1934\n- @LYMDLUT made their first contribution in https://github.com/open-mmlab/mmagic/pull/1933\n- @RangeKing made their first contribution in https://github.com/open-mmlab/mmagic/pull/1930\n- @xin-li-67 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1932\n- @chg0901 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1931\n- @aptsunny made their first contribution in https://github.com/open-mmlab/mmagic/pull/1939\n- @YanxingLiu made their first contribution in https://github.com/open-mmlab/mmagic/pull/1943\n- @tackhwa made their first contribution in https://github.com/open-mmlab/mmagic/pull/1937\n- @Geo-Chou made their first contribution in https://github.com/open-mmlab/mmagic/pull/1940\n- @qsun1 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1956\n- @ththth888 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1961\n- @sijiua made their first contribution in https://github.com/open-mmlab/mmagic/pull/1967\n- @MING-ZCH made their first contribution in https://github.com/open-mmlab/mmagic/pull/1982\n- @AllYoung made their first contribution in https://github.com/open-mmlab/mmagic/pull/1996\n\n## v1.0.1 (26/05/2023)\n\n**New Features & Improvements**\n\n- Support tomesd for StableDiffusion speed-up. [#1801](https://github.com/open-mmlab/mmagic/pull/1801)\n- Support all inpainting/matting/image restoration models inferencer. [#1833](https://github.com/open-mmlab/mmagic/pull/1833), [#1873](https://github.com/open-mmlab/mmagic/pull/1873)\n- Support animated drawings at projects. [#1837](https://github.com/open-mmlab/mmagic/pull/1837)\n- Support Style-Based Global Appearance Flow for Virtual Try-On at projects. [#1786](https://github.com/open-mmlab/mmagic/pull/1786)\n- Support tokenizer wrapper and support EmbeddingLayerWithFixe. [#1846](https://github.com/open-mmlab/mmagic/pull/1846)\n\n**Bug Fixes**\n\n- Fix install requirements. [#1819](https://github.com/open-mmlab/mmagic/pull/1819)\n- Fix inst-colorization PackInputs. [#1828](https://github.com/open-mmlab/mmagic/pull/1828), [#1827](https://github.com/open-mmlab/mmagic/pull/1827)\n- Fix inferencer in pip-install. [#1875](https://github.com/open-mmlab/mmagic/pull/1875)\n\n**New Contributors**\n\n- @XDUWQ made their first contribution in https://github.com/open-mmlab/mmagic/pull/1830\n- @FerryHuang made their first contribution in https://github.com/open-mmlab/mmagic/pull/1786\n- @bobo0810 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1851\n- @jercylew made their first contribution in https://github.com/open-mmlab/mmagic/pull/1874\n\n## v1.0.0 (25/04/2023)\n\nWe are excited to announce the release of MMagic v1.0.0 that inherits from [MMEditing](https://github.com/open-mmlab/mmediting) and [MMGeneration](https://github.com/open-mmlab/mmgeneration).\n\n![mmagic-log](https://user-images.githubusercontent.com/49083766/233557648-9034f5a0-c85d-4092-b700-3a28072251b6.png)\n\nSince its inception, MMEditing has been the preferred algorithm library for many super-resolution, editing, and generation tasks, helping research teams win more than 10 top international competitions and supporting over 100 GitHub ecosystem projects. After iterative updates with OpenMMLab 2.0 framework and merged with MMGeneration, MMEditing has become a powerful tool that supports low-level algorithms based on both GAN and CNN.\n\nToday, MMEditing embraces Generative AI and transforms into a more advanced and comprehensive AIGC toolkit: **MMagic** (**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation).\n\nIn MMagic, we have supported 53+ models in multiple tasks such as fine-tuning for stable diffusion, text-to-image, image and video restoration, super-resolution, editing and generation. With excellent training and experiment management support from [MMEngine](https://github.com/open-mmlab/mmengine), MMagic will provide more agile and flexible experimental support for researchers and AIGC enthusiasts, and help you on your AIGC exploration journey. With MMagic, experience more magic in generation! Let's open a new era beyond editing together. More than Editing, Unlock the Magic!\n\n**Highlights**\n\n**1. New Models**\n\nWe support 11 new models in 4 new tasks.\n\n- Text2Image / Diffusion\n  - ControlNet\n  - DreamBooth\n  - Stable Diffusion\n  - Disco Diffusion\n  - GLIDE\n  - Guided Diffusion\n- 3D-aware Generation\n  - EG3D\n- Image Restoration\n  - NAFNet\n  - Restormer\n  - SwinIR\n- Image Colorization\n  - InstColorization\n\nhttps://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\n\n**2. Magic Diffusion Model**\n\nFor the Diffusion Model, we provide the following \"magic\" :\n\n- Support image generation based on Stable Diffusion and Disco Diffusion.\n\n- Support Finetune methods such as Dreambooth and DreamBooth LoRA.\n\n- Support controllability in text-to-image generation using ControlNet.\n  ![de87f16f-bf6d-4a61-8406-5ecdbb9167b6](https://user-images.githubusercontent.com/49083766/233558077-2005e603-c5a8-49af-930f-e7a465ca818b.png)\n\n- Support acceleration and optimization strategies based on xFormers to improve training and inference efficiency.\n\n- Support video generation based on MultiFrame Render.\n  MMagic supports the generation of long videos in various styles through ControlNet and MultiFrame Render.\n  prompt keywords: a handsome man, silver hair, smiling, play basketball\n\n  https://user-images.githubusercontent.com/12782558/227149757-fd054d32-554f-45d5-9f09-319184866d85.mp4\n\n  prompt keywords: a girl, black hair, white pants, smiling, play basketball\n\n  https://user-images.githubusercontent.com/49083766/233559964-bd5127bd-52f6-44b6-a089-9d7adfbc2430.mp4\n\n  prompt keywords: a handsome man\n\n  https://user-images.githubusercontent.com/12782558/227152129-d70d5f76-a6fc-4d23-97d1-a94abd08f95a.mp4\n\n- Support calling basic models and sampling strategies through DiffuserWrapper.\n\n- SAM + MMagic = Generate Anything！\n  SAM (Segment Anything Model) is a popular model these days and can also provide more support for MMagic! If you want to create your own animation, you can go to [OpenMMLab PlayGround](https://github.com/open-mmlab/playground/blob/main/mmediting_sam/README.md).\n\n  https://user-images.githubusercontent.com/49083766/233562228-f39fc675-326c-4ae8-986a-c942059effd0.mp4\n\n**3. Upgraded Framework**\n\nTo improve your \"spellcasting\" efficiency, we have made the following adjustments to the \"magic circuit\":\n\n- By using MMEngine and MMCV of OpenMMLab 2.0 framework, We decompose the editing framework into different modules and one can easily construct a customized editor framework by combining different modules. We can define the training process just like playing with Legos and provide rich components and strategies. In MMagic, you can complete controls on the training process with different levels of APIs.\n- Support for 33+ algorithms accelerated by Pytorch 2.0.\n- Refactor DataSample to support the combination and splitting of batch dimensions.\n- Refactor DataPreprocessor and unify the data format for various tasks during training and inference.\n- Refactor MultiValLoop and MultiTestLoop, supporting the evaluation of both generation-type metrics (e.g. FID) and reconstruction-type metrics (e.g. SSIM), and supporting the evaluation of multiple datasets at once.\n- Support visualization on local files or using tensorboard and wandb.\n\n**New Features & Improvements**\n\n- Support 53+ algorithms, 232+ configs, 213+ checkpoints, 26+ loss functions, and 20+ metrics.\n- Support controlnet animation and Gradio gui. [Click to view.](https://github.com/open-mmlab/mmagic/tree/main/configs/controlnet_animation)\n- Support Inferencer and Demo using High-level Inference APIs. [Click to view.](https://github.com/open-mmlab/mmagic/tree/main/demo)\n- Support Gradio gui of Inpainting inference. [Click to view.](https://github.com/open-mmlab/mmagic/blob/main/demo/gradio-demo.py)\n- Support qualitative comparison tools. [Click to view.](https://github.com/open-mmlab/mmagic/tree/main/tools/gui)\n- Enable projects. [Click to view.](https://github.com/open-mmlab/mmagic/tree/main/projects)\n- Improve converters scripts and documents for datasets. [Click to view.](https://github.com/open-mmlab/mmagic/tree/main/tools/dataset_converters)\n\n## v1.0.0rc7 (07/04/2023)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc7. This release supports 51+ models, 226+ configs and 212+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- Support DiffuserWrapper\n- Support ControlNet (training and inference).\n- Support PyTorch 2.0.\n\n**New Features & Improvements**\n\n- Support DiffuserWrapper. [#1692](https://github.com/open-mmlab/mmagic/pull/1692)\n- Support ControlNet (training and inference). [#1744](https://github.com/open-mmlab/mmagic/pull/1744)\n- Support PyTorch 2.0 (successfully compile 33+ models on 'inductor' backend). [#1742](https://github.com/open-mmlab/mmagic/pull/1742)\n- Support Image Super-Resolution and Video Super-Resolution models inferencer. [#1662](https://github.com/open-mmlab/mmagic/pull/1662), [#1720](https://github.com/open-mmlab/mmagic/pull/1720)\n- Refactor tools/get_flops script. [#1675](https://github.com/open-mmlab/mmagic/pull/1675)\n- Refactor dataset_converters and documents for datasets. [#1690](https://github.com/open-mmlab/mmagic/pull/1690)\n- Move stylegan ops to MMCV. [#1383](https://github.com/open-mmlab/mmagic/pull/1383)\n\n**Bug Fixes**\n\n- Fix disco inferencer. [#1673](https://github.com/open-mmlab/mmagic/pull/1673)\n- Fix nafnet optimizer config. [#1716](https://github.com/open-mmlab/mmagic/pull/1716)\n- Fix tof typo. [#1711](https://github.com/open-mmlab/mmagic/pull/1711)\n\n**Contributors**\n\nA total of 8 developers contributed to this release.\nThanks @LeoXing1996, @Z-Fran, @plyfager, @zengyh1900, @liuwenran, @ryanxingql, @HAOCHENYE, @VongolaWu\n\n**New Contributors**\n\n- @HAOCHENYE made their first contribution in https://github.com/open-mmlab/mmagic/pull/1712\n\n## v1.0.0rc6 (02/03/2023)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc6. This release supports 50+ models, 222+ configs and 209+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- Support Gradio gui of Inpainting inference.\n- Support Colorization, Translationin and GAN models inferencer.\n\n**New Features & Improvements**\n\n- Refactor FileIO. [#1572](https://github.com/open-mmlab/mmagic/pull/1572)\n- Refactor registry. [#1621](https://github.com/open-mmlab/mmagic/pull/1621)\n- Refactor Random degradations. [#1583](https://github.com/open-mmlab/mmagic/pull/1583)\n- Refactor DataSample, DataPreprocessor, Metric and Loop. [#1656](https://github.com/open-mmlab/mmagic/pull/1656)\n- Use mmengine.basemodule instead of nn.module. [#1491](https://github.com/open-mmlab/mmagic/pull/1491)\n- Refactor Main Page. [#1609](https://github.com/open-mmlab/mmagic/pull/1609)\n- Support Gradio gui of Inpainting inference. [#1601](https://github.com/open-mmlab/mmagic/pull/1601)\n- Support Colorization inferencer. [#1588](https://github.com/open-mmlab/mmagic/pull/1588)\n- Support Translation models inferencer. [#1650](https://github.com/open-mmlab/mmagic/pull/1650)\n- Support GAN models inferencer. [#1653](https://github.com/open-mmlab/mmagic/pull/1653), [#1659](https://github.com/open-mmlab/mmagic/pull/1659)\n- Print config tool. [#1590](https://github.com/open-mmlab/mmagic/pull/1590)\n- Improve type hints. [#1604](https://github.com/open-mmlab/mmagic/pull/1604)\n- Update Chinese documents of metrics and datasets. [#1568](https://github.com/open-mmlab/mmagic/pull/1568), [#1638](https://github.com/open-mmlab/mmagic/pull/1638)\n- Update Chinese documents of BigGAN and Disco-Diffusion. [#1620](https://github.com/open-mmlab/mmagic/pull/1620)\n- Update Evaluation and README of Guided-Diffusion. [#1547](https://github.com/open-mmlab/mmagic/pull/1547)\n\n**Bug Fixes**\n\n- Fix the meaning of `momentum` in EMA. [#1581](https://github.com/open-mmlab/mmagic/pull/1581)\n- Fix output dtype of RandomNoise. [#1585](https://github.com/open-mmlab/mmagic/pull/1585)\n- Fix pytorch2onnx tool. [#1629](https://github.com/open-mmlab/mmagic/pull/1629)\n- Fix API documents. [#1641](https://github.com/open-mmlab/mmagic/pull/1641), [#1642](https://github.com/open-mmlab/mmagic/pull/1642)\n- Fix loading RealESRGAN EMA weights. [#1647](https://github.com/open-mmlab/mmagic/pull/1647)\n- Fix arg passing bug of dataset_converters scripts. [#1648](https://github.com/open-mmlab/mmagic/pull/1648)\n\n**Contributors**\n\nA total of 17 developers contributed to this release.\nThanks @plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @liuwenran, @austinmw, @dienachtderwelt, @liangzelong, @i-aki-y, @xiaomile, @Li-Qingyun, @vansin, @Luo-Yihang, @ydengbi, @ruoningYu, @triple-Mu\n\n**New Contributors**\n\n- @dienachtderwelt made their first contribution in https://github.com/open-mmlab/mmagic/pull/1578\n- @i-aki-y made their first contribution in https://github.com/open-mmlab/mmagic/pull/1590\n- @triple-Mu made their first contribution in https://github.com/open-mmlab/mmagic/pull/1618\n- @Li-Qingyun made their first contribution in https://github.com/open-mmlab/mmagic/pull/1640\n- @Luo-Yihang made their first contribution in https://github.com/open-mmlab/mmagic/pull/1648\n- @ydengbi made their first contribution in https://github.com/open-mmlab/mmagic/pull/1557\n\n## v1.0.0rc5 (04/01/2023)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc5. This release supports 49+ models, 180+ configs and 177+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- Support Restormer.\n- Support GLIDE.\n- Support SwinIR.\n- Support Stable Diffusion.\n\n**New Features & Improvements**\n\n- Disco notebook. (#1507)\n- Revise test requirements and CI. (#1514)\n- Recursive generate summary and docstring. (#1517)\n- Enable projects. (#1526)\n- Support mscoco dataset. (#1520)\n- Improve Chinese documents. (#1532)\n- Type hints. (#1481)\n- Update download link of checkpoints. (#1554)\n- Update deployment guide. (#1551)\n\n**Bug Fixes**\n\n- Fix documentation link checker. (#1522)\n- Fix ssim first channel bug. (#1515)\n- Fix extract_gt_data of realesrgan. (#1542)\n- Fix model index. (#1559)\n- Fix config path in disco-diffusion. (#1553)\n- Fix text2image inferencer. (#1523)\n\n**Contributors**\n\nA total of 16 developers contributed to this release.\nThanks @plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @liuwenran, @AlexZou14, @lvhan028, @xiaomile, @ldr426, @austin273, @whu-lee, @willaty, @curiosity654, @Zdafeng, @Taited\n\n**New Contributors**\n\n- @xiaomile made their first contribution in https://github.com/open-mmlab/mmagic/pull/1481\n- @ldr426 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1542\n- @austin273 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1553\n- @whu-lee made their first contribution in https://github.com/open-mmlab/mmagic/pull/1539\n- @willaty made their first contribution in https://github.com/open-mmlab/mmagic/pull/1541\n- @curiosity654 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1556\n- @Zdafeng made their first contribution in https://github.com/open-mmlab/mmagic/pull/1476\n- @Taited made their first contribution in https://github.com/open-mmlab/mmagic/pull/1534\n\n## v1.0.0rc4 (05/12/2022)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc4. This release supports 45+ models, 176+ configs and 175+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- Support High-level APIs.\n- Support diffusion models.\n- Support Text2Image Task.\n- Support 3D-Aware Generation.\n\n**New Features & Improvements**\n\n- Refactor High-level APIs. (#1410)\n- Support disco-diffusion text-2-image. (#1234, #1504)\n- Support EG3D. (#1482, #1493, #1494, #1499)\n- Support NAFNet model. (#1369)\n\n**Bug Fixes**\n\n- fix srgan train config. (#1441)\n- fix cain config. (#1404)\n- fix rdn and srcnn train configs. (#1392)\n\n**Contributors**\n\nA total of 14 developers contributed to this release.\nThanks @plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @gaoyang07, @ChangjianZhao, @zxczrx123, @jackghosts, @liuwenran, @CCODING04, @RoseZhao929, @shaocongliu, @liangzelong.\n\n**New Contributors**\n\n- @gaoyang07 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1372\n- @ChangjianZhao made their first contribution in https://github.com/open-mmlab/mmagic/pull/1461\n- @zxczrx123 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1462\n- @jackghosts made their first contribution in https://github.com/open-mmlab/mmagic/pull/1463\n- @liuwenran made their first contribution in https://github.com/open-mmlab/mmagic/pull/1410\n- @CCODING04 made their first contribution in https://github.com/open-mmlab/mmagic/pull/783\n- @RoseZhao929 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1474\n- @shaocongliu made their first contribution in https://github.com/open-mmlab/mmagic/pull/1470\n- @liangzelong made their first contribution in https://github.com/open-mmlab/mmagic/pull/1488\n\n## v1.0.0rc3 (10/11/2022)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc3. This release supports 43+ models, 170+ configs and 169+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- convert `mmdet` and `clip` to optional requirements.\n\n**New Features & Improvements**\n\n- Support `try_import` for `mmdet`. (#1408)\n- Support `try_import` for `flip`. (#1420)\n- Update `.gitignore`. ($1416)\n- Set `real_feat` to cpu in `inception_utils`. (#1415)\n- Modify README and configs of StyleGAN2 and PEGAN (#1418)\n- Improve the rendering of Docs-API (#1373)\n\n**Bug Fixes**\n\n- Revise config and pretrain model loading in ESRGAN (#1407)\n- Revise config of LSGAN (#1409)\n- Revise config of CAIN (#1404)\n\n**Contributors**\n\nA total of 5 developers contributed to this release.\n@Z-Fran, @zengyh1900, @plyfager, @LeoXing1996, @ruoningYu.\n\n## v1.0.0rc2 (02/11/2022)\n\n**Highlights**\n\nWe are excited to announce the release of MMEditing 1.0.0rc2. This release supports 43+ models, 170+ configs and 169+ checkpoints in MMGeneration and MMEditing. We highlight the following new features\n\n- patch-based and slider-based image and video comparison viewer.\n- image colorization.\n\n**New Features & Improvements**\n\n- Support qualitative comparison tools. (#1303)\n- Support instance aware colorization. (#1370)\n- Support multi-metrics with different sample-model. (#1171)\n- Improve the implementation\n  - refactoring evaluation metrics. (#1164)\n  - Save gt images in PGGAN's `forward`. (#1332)\n  - Improve type and change default number of `preprocess_div2k_dataset.py`. (#1380)\n  - Support pixel value clip in visualizer. (#1365)\n  - Support SinGAN Dataset and SinGAN demo. (#1363)\n  - Avoid cast int and float in GenDataPreprocessor. (#1385)\n- Improve the documentation\n  - Update a menu switcher. (#1162)\n  - Fix TTSR's README. (#1325)\n\n**Bug Fixes**\n\n- Fix PPL bug. (#1172)\n- Fix RDN number of channels. (#1328)\n- Fix types of exceptions in demos. (#1372)\n- Fix realesrgan ema. (#1341)\n- Improve the assertion to ensuer `GenerateFacialHeatmap` as `np.float32`. (#1310)\n- Fix sampling behavior of `unpaired_dataset.py` and  urls in cyclegan's README. (#1308)\n- Fix vsr models in pytorch2onnx. (#1300)\n- Fix incorrect settings in configs. (#1167,#1200,#1236,#1293,#1302,#1304,#1319,#1331,#1336,#1349,#1352,#1353,#1358,#1364,#1367,#1384,#1386,#1391,#1392,#1393)\n\n**New Contributors**\n\n- @gaoyang07 made their first contribution in https://github.com/open-mmlab/mmagic/pull/1372\n\n**Contributors**\n\nA total of 7 developers contributed to this release.\nThanks @LeoXing1996, @Z-Fran, @zengyh1900, @plyfager, @ryanxingql, @ruoningYu, @gaoyang07.\n\n## v1.0.0rc1(23/9/2022)\n\nMMEditing 1.0.0rc1 has merged MMGeneration 1.x.\n\n- Support 42+ algorithms, 169+ configs and 168+ checkpoints.\n- Support 26+ loss functions, 20+ metrics.\n- Support tensorboard, wandb.\n- Support unconditional GANs, conditional GANs, image2image translation and internal learning.\n\n## v1.0.0rc0(31/8/2022)\n\nMMEditing 1.0.0rc0 is the first version of MMEditing 1.x, a part of the OpenMMLab 2.0 projects.\n\nBuilt upon the new [training engine](https://github.com/open-mmlab/mmengine), MMEditing 1.x unifies the interfaces of dataset, models, evaluation, and visualization.\n\nAnd there are some BC-breaking changes. Please check [the migration tutorial](https://mmagic.readthedocs.io/en/latest/migration/overview.html) for more details.\n"
  },
  {
    "path": "docs/en/community/contributing.md",
    "content": "# Contributing guidance\n\nWelcome to the MMagic community, we are committed to building a Multimodal Advanced, Generative, and Intelligent Creation Toolbox.\n\nThis section introduces following contents:\n\n- [Contributing guidance](#contributing-guidance)\n  - [Pull Request Workflow](#pull-request-workflow)\n    - [1. Fork and clone](#1-fork-and-clone)\n    - [2. Configure pre-commit](#2-configure-pre-commit)\n    - [3. Create a development branch](#3-create-a-development-branch)\n    - [4. Commit the code and pass the unit test](#4-commit-the-code-and-pass-the-unit-test)\n    - [5. Push the code to remote](#5-push-the-code-to-remote)\n    - [6. Create a Pull Request](#6-create-a-pull-request)\n    - [7. Resolve conflicts](#7-resolve-conflicts)\n  - [Guidance](#guidance)\n    - [Unit test](#unit-test)\n    - [Document rendering](#document-rendering)\n  - [Code style](#code-style)\n    - [Python](#python)\n    - [C++ and CUDA](#c-and-cuda)\n  - [PR Specs](#pr-specs)\n\nAll kinds of contributions are welcomed, including but not limited to\n\n**Fix bug**\n\nYou can directly post a Pull Request to fix typo in code or documents\n\nThe steps to fix the bug of code implementation are as follows.\n\n1. If the modification involve significant changes, you should create an issue first and describe the error information and how to trigger the bug. Other developers will discuss with you and propose an proper solution.\n2. Posting a pull request after fixing the bug and adding corresponding unit test.\n\n**New Feature or Enhancement**\n\n1. If the modification involve significant changes, you should create an issue to discuss with our developers to propose an proper design.\n2. Post a Pull Request after implementing the new feature or enhancement and add corresponding unit test.\n\n**Document**\n\nYou can directly post a pull request to fix documents. If you want to add a document, you should first create an issue to check if it is reasonable.\n\n### Pull Request Workflow\n\nIf you're not familiar with Pull Request, don't worry! The following guidance will tell you how to create a Pull Request step by step. If you want to dive into the develop mode of Pull Request, you can refer to the [official documents](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)\n\n#### 1. Fork and clone\n\nIf you are posting a pull request for the first time, you should fork the OpenMMLab repositories by clicking the **Fork** button in the top right corner of the GitHub page, and the forked repositories will appear under your GitHub profile.\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167305749-43c7f4e9-449b-4e98-ade5-0c9276d5c9ce.png\" width=\"1200\">\n\nThen, you can clone the repositories to local:\n\n```shell\ngit clone git@github.com:{username}/mmagic.git\n```\n\nAfter that, you should ddd official repository as the upstream repository\n\n```bash\ngit remote add upstream git@github.com:open-mmlab/mmagic\n```\n\nCheck whether remote repository has been added successfully by `git remote -v`\n\n```bash\norigin\tgit@github.com:{username}/mmagic.git (fetch)\norigin\tgit@github.com:{username}/mmagic.git (push)\nupstream\tgit@github.com:open-mmlab/mmagic (fetch)\nupstream\tgit@github.com:open-mmlab/mmagic (push)\n```\n\n```{note}\nHere's a brief introduction to origin and upstream. When we use \"git clone\", we create an \"origin\" remote by default, which points to the repository cloned from. As for \"upstream\", we add it ourselves to point to the target repository. Of course, if you don't like the name \"upstream\", you could name it as you wish. Usually, we'll push the code to \"origin\". If the pushed code conflicts with the latest code in official(\"upstream\"), we should pull the latest code from upstream to resolve the conflicts, and then push to \"origin\" again. The posted Pull Request will be updated automatically.\n```\n\n#### 2. Configure pre-commit\n\nYou should configure [pre-commit](https://pre-commit.com/#intro) in the local development environment to make sure the code style matches that of OpenMMLab. **Note**: The following code should be executed under the mmagic directory.\n\n```shell\npip install -U pre-commit\npre-commit install\n```\n\nCheck that pre-commit is configured successfully, and install the hooks defined in `.pre-commit-config.yaml`.\n\n```shell\npre-commit run --all-files\n```\n\n<img src=\"https://user-images.githubusercontent.com/57566630/173660750-3df20a63-cb66-4d33-a986-1f643f1d8aaf.png\" width=\"1200\">\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202368856-0465a90d-8fce-4345-918e-67b8b9c82614.png\" width=\"1200\">\n\n```{note}\nChinese users may fail to download the pre-commit hooks due to the network issue. In this case, you could download these hooks from gitee by setting the .pre-commit-config-zh-cn.yaml\n\npre-commit install -c .pre-commit-config-zh-cn.yaml\npre-commit run --all-files -c .pre-commit-config-zh-cn.yaml\n```\n\nIf the installation process is interrupted, you can repeatedly run `pre-commit run ... ` to continue the installation.\n\nIf the code does not conform to the code style specification, pre-commit will raise a warning and  fixes some of the errors automatically.\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202369176-67642454-0025-4023-a095-263529107aa3.png\" width=\"1200\">\n\nIf we want to commit our code bypassing the pre-commit hook, we can use the `--no-verify` option(**only for temporarily commit**.\n\n```shell\ngit commit -m \"xxx\" --no-verify\n```\n\n#### 3. Create a development branch\n\nAfter configuring the pre-commit, we should create a branch based on the main branch to develop the new feature or fix the bug. The proposed branch name is `username/pr_name`\n\n```shell\ngit checkout -b yhc/refactor_contributing_doc\n```\n\nIn subsequent development, if the main branch of the local repository is behind the main branch of \"upstream\", we need to pull the upstream for synchronization, and then execute the above command:\n\n```shell\ngit pull upstream main\n```\n\n#### 4. Commit the code and pass the unit test\n\n- mmagic introduces mypy to do static type checking to increase the robustness of the code. Therefore, we need to add Type Hints to our code and pass the mypy check. If you are not familiar with Type Hints, you can refer to [this tutorial](https://docs.python.org/3/library/typing.html).\n\n- The committed code should pass through the unit test\n\n  ```shell\n  # Pass all unit tests\n  pytest tests\n\n  # Pass the unit test of runner\n  pytest tests/test_runner/test_runner.py\n  ```\n\n  If the unit test fails for lack of dependencies, you can install the dependencies referring to the [guidance](#unit-test)\n\n- If the documents are modified/added, we should check the rendering result referring to [guidance](#document-rendering)\n\n#### 5. Push the code to remote\n\nWe could push the local commits to remote after passing through the check of unit test and pre-commit. You can associate the local branch with remote branch by adding `-u` option.\n\n```shell\ngit push -u origin {branch_name}\n```\n\nThis will allow you to use the `git push` command to push code directly next time, without having to specify a branch or the remote repository.\n\n#### 6. Create a Pull Request\n\n(1) Create a pull request in GitHub's Pull request interface\n\n<img src=\"https://user-images.githubusercontent.com/57566630/201533288-516f7ac4-0b14-4dc8-afbd-912475c368b5.png\" width=\"1200\">\n\n(2) Modify the PR description according to the guidelines so that other developers can better understand your changes\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202242953-c91a18ff-e388-4ff9-8591-5fae0ead6c1e.png\" width=\"1200\">\n\nFind more details about Pull Request description in [pull request guidelines](#pr-specs).\n\n**note**\n\n(a) The Pull Request description should contain the reason for the change, the content of the change, and the impact of the change, and be associated with the relevant Issue (see [documentation](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)\n\n(b) If it is your first contribution, please sign the CLA\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167307569-a794b967-6e28-4eac-a942-00deb657815f.png\" width=\"1200\">\n\n(c) Check whether the Pull Request pass through the CI\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167307490-f9ebf9fa-63c0-4d83-8ba1-081ea169eb3a.png\" width=\"1200\">\n\nmmagic will run unit test for the posted Pull Request on different platforms (Linux, Window, Mac), based on different versions of Python, PyTorch, CUDA to make sure the code is correct. We can see the specific test information by clicking `Details` in the above image so that we can modify the code.\n\n(3) If the Pull Request passes the CI, then you can wait for the review from other developers. You'll modify the code based on the reviewer's comments, and repeat the steps [4](#4-commit-the-code-and-pass-the-unit-test)-[5](#5-push-the-code-to-remote) until all reviewers approve it. Then, we will merge it ASAP.\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202145400-cc2cd8c4-10b0-472f-ba37-07e6f50acc67.png\" width=\"1200\">\n\n#### 7. Resolve conflicts\n\nIf your local branch conflicts with the latest main branch of \"upstream\", you'll need to resolove them. There are two ways to do this:\n\n```shell\ngit fetch --all --prune\ngit rebase upstream/main\n```\n\nor\n\n```shell\ngit fetch --all --prune\ngit merge upstream/main\n```\n\nIf you are very good at handling conflicts, then you can use rebase to resolve conflicts, as this will keep your commit logs tidy. If you are not familiar with `rebase`, then you can use `merge` to resolve conflicts.\n\n### Guidance\n\n#### Unit test\n\nWe should make sure the committed code will not decrease the coverage of unit test, we could run the following command to check the coverage of unit test:\n\n```shell\npython -m coverage run -m pytest /path/to/test_file\npython -m coverage html\n# check file in htmlcov/index.html\n```\n\n#### Document rendering\n\nIf the documents are modified/added, we should check the rendering result. We could install the dependencies and run the following command to render the documents and check the results:\n\n```shell\npip install -r requirements/docs.txt\ncd docs/zh_cn/\n# or docs/en\nmake html\n# check file in ./docs/zh_cn/_build/html/index.html\n```\n\n### Code style\n\n#### Python\n\nWe adopt [PEP8](https://www.python.org/dev/peps/pep-0008/) as the preferred code style.\n\nWe use the following tools for linting and formatting:\n\n- [flake8](https://github.com/PyCQA/flake8): A wrapper around some linter tools.\n- [isort](https://github.com/timothycrosley/isort): A Python utility to sort imports.\n- [yapf](https://github.com/google/yapf): A formatter for Python files.\n- [codespell](https://github.com/codespell-project/codespell): A Python utility to fix common misspellings in text files.\n- [mdformat](https://github.com/executablebooks/mdformat): Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files.\n- [docformatter](https://github.com/myint/docformatter): A formatter to format docstring.\n\nStyle configurations of yapf and isort can be found in [setup.cfg](../../../setup.cfg).\n\nWe use [pre-commit hook](https://pre-commit.com/) that checks and formats for `flake8`, `yapf`, `isort`, `trailing whitespaces`, `markdown files`,\nfixes `end-of-files`, `double-quoted-strings`, `python-encoding-pragma`, `mixed-line-ending`, sorts `requirments.txt` automatically on every commit.\nThe config for a pre-commit hook is stored in [.pre-commit-config](../../../.pre-commit-config.yaml).\n\n#### C++ and CUDA\n\nWe follow the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html).\n\n### PR Specs\n\n1. Use [pre-commit](https://pre-commit.com) hook to avoid issues of code style\n\n2. One short-time branch should be matched with only one PR\n\n3. Accomplish a detailed change in one PR. Avoid large PR\n\n   - Bad: Support Faster R-CNN\n   - Acceptable: Add a box head to Faster R-CNN\n   - Good: Add a parameter to box head to support custom conv-layer number\n\n4. Provide clear and significant commit message\n\n5. Provide clear and meaningful PR description\n\n   - Task name should be clarified in title. The general format is: \\[Prefix\\] Short description of the PR (Suffix)\n   - Prefix: add new feature \\[Feature\\], fix bug \\[Fix\\], related to documents \\[Docs\\], in developing \\[WIP\\] (which will not be reviewed temporarily)\n   - Introduce main changes, results and influences on other modules in short description\n   - Associate related issues and pull requests with a milestone\n"
  },
  {
    "path": "docs/en/community/projects.md",
    "content": "# MMagic projects\n\nWelcome to the MMagic community!\nThe MMagic ecosystem consists of tutorials, libraries, and projects from a broad set of researchers in academia and industry, ML and application engineers.\nThe goal of this ecosystem is to support, accelerate, and aid in your exploration with MMagic for AIGC such as image, video, 3D content generation, editing and processing.\n\nHere are a few projects that are built upon MMagic. They are examples of how to use MMagic as a library, to make your projects more maintainable.\nPlease find more projects in [MMagic Ecosystem](https://openmmlab.com/ecosystem).\n\n## Show your projects on OpenMMLab Ecosystem\n\nYou can submit your project so that it can be shown on the homepage of [OpenMMLab](https://openmmlab.com/ecosystem).\n\n## Add example projects to MMagic\n\nHere is an [example project](../../../projects/example_project) about how to add your projects to MMagic.\nYou can copy and create your own project from the [example project](../../../projects/example_project).\n\nWe also provide some documentation listed below for your reference:\n\n- [Contribution Guide](https://mmagic.readthedocs.io/en/latest/community/contributing.html)\n\n  The guides for new contributors about how to add your projects to MMagic.\n\n- [New Model Guide](https://mmagic.readthedocs.io/en/latest/howto/models.html)\n\n  The documentation of adding new models.\n\n- [Discussions](https://github.com/open-mmlab/mmagic/discussions)\n\n  Welcome to start a discussion!\n\n## Projects of libraries and toolboxes\n\n- [PowerVQE](https://github.com/ryanxingql/powervqe): Open framework for quality enhancement of compressed videos based on PyTorch and MMagic.\n\n- [VR-Baseline](https://github.com/linjing7/VR-Baseline): Video Restoration Toolbox.\n\n- [Derain-Toolbox](https://github.com/biubiubiiu/derain-toolbox): Single Image Deraining Toolbox and Benchmark\n\n## Projects of research papers\n\n- [Towards Interpretable Video Super-Resolution via Alternating Optimization, ECCV 2022](https://arxiv.org/abs/2207.10765)[\\[github\\]](https://github.com/caojiezhang/DAVSR)\n\n- [SepLUT:Separable Image-adaptive Lookup Tables for Real-time Image Enhancement, ECCV 2022](https://arxiv.org/abs/2207.08351)[\\[github\\]](https://github.com/ImCharlesY/SepLUT)\n\n- [TTVSR: Learning Trajectory-Aware Transformer for Video Super-Resolution, CVPR 2022](https://arxiv.org/abs/2204.04216)[\\[github\\]](https://github.com/researchmm/TTVSR)\n\n- [Arbitrary-Scale Image Synthesis, CVPR 2022](https://arxiv.org/pdf/2204.02273.pdf)[\\[github\\]](https://github.com/vglsd/ScaleParty)\n\n- [Investigating Tradeoffs in Real-World Video Super-Resolution(RealBasicVSR), CVPR 2022](https://arxiv.org/abs/2111.12704)[\\[github\\]](https://github.com/ckkelvinchan/RealBasicVSR)\n\n- [BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment, CVPR 2022](https://arxiv.org/abs/2104.13371)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR_PlusPlus)\n\n- [Multi-Scale Memory-Based Video Deblurring, CVPR 2022](https://arxiv.org/abs/2204.02977)[\\[github\\]](https://github.com/jibo27/MemDeblur)\n\n- [AdaInt:Learning Adaptive Intervals for 3D Lookup Tables on Real-time Image Enhancement, CVPR 2022](https://arxiv.org/abs/2204.13983)[\\[github\\]](https://github.com/ImCharlesY/AdaInt)\n\n- [A New Dataset and Transformer for Stereoscopic Video Super-Resolution, CVPRW 2022](https://openaccess.thecvf.com/content/CVPR2022W/NTIRE/papers/Imani_A_New_Dataset_and_Transformer_for_Stereoscopic_Video_Super-Resolution_CVPRW_2022_paper.pdf)[\\[github\\]](https://github.com/H-deep/Trans-SVSR)\n\n- [Liquid warping GAN with attention: A unified framework for human image synthesis, TPAMI 2021](https://arxiv.org/pdf/2011.09055.pdf)[\\[github\\]](https://github.com/iPERDance/iPERCore)\n\n- [BasicVSR:The Search for Essential Components in Video Super-Resolution and Beyond, CVPR 2021](https://arxiv.org/abs/2012.02181)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR-IconVSR)\n\n- [GLEAN:Generative Latent Bank for Large-Factor Image Super-Resolution, CVPR 2021](https://arxiv.org/abs/2012.00739)[\\[github\\]](https://github.com/ckkelvinchan/GLEAN)\n\n- [DAN:Unfolding the Alternating Optimization for Blind Super Resolution, NeurIPS 2020](https://arxiv.org/abs/2010.02631v4)[\\[github\\]](https://github.com/AlexZou14/DAN-Basd-on-Openmmlab)\n"
  },
  {
    "path": "docs/en/conf.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport subprocess\nimport sys\n\nimport pytorch_sphinx_theme\n\nsys.path.insert(0, os.path.abspath('../..'))\n\n# -- Project information -----------------------------------------------------\n\nproject = 'MMagic'\ncopyright = '2023, MMagic Authors'\nauthor = 'MMagic Authors'\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.napoleon',\n    'sphinx.ext.viewcode',\n    'sphinx.ext.autosectionlabel',\n    'sphinx_markdown_tables',\n    'sphinx_copybutton',\n    'sphinx_tabs.tabs',\n    'myst_parser',\n]\n\nextensions.append('notfound.extension')  # enable customizing not-found page\n\nextensions.append('autoapi.extension')\nautoapi_type = 'python'\nautoapi_dirs = ['../../mmagic']\nautoapi_add_toctree_entry = False\nautoapi_template_dir = '_templates'\n# autoapi_options = ['members', 'undoc-members', 'show-module-summary']\n\n# # Core library for html generation from docstrings\n# extensions.append('sphinx.ext.autodoc')\n# extensions.append('sphinx.ext.autodoc.typehints')\n# # Enable 'expensive' imports for sphinx_autodoc_typehints\n# set_type_checking_flag = True\n# # Sphinx-native method. Not as good as sphinx_autodoc_typehints\n# autodoc_typehints = \"description\"\n\n# extensions.append('sphinx.ext.autosummary') # Create neat summary tables\n# autosummary_generate = True  # Turn on sphinx.ext.autosummary\n# # Add __init__ doc (ie. params) to class summaries\n# autoclass_content = 'both'\n# autodoc_skip_member = []\n# # If no docstring, inherit from base class\n# autodoc_inherit_docstrings = True\n\nautodoc_mock_imports = [\n    'mmagic.version', 'mmcv._ext', 'mmcv.ops.ModulatedDeformConv2d',\n    'mmcv.ops.modulated_deform_conv2d', 'clip', 'resize_right', 'pandas'\n]\n\nsource_suffix = {\n    '.rst': 'restructuredtext',\n    '.md': 'markdown',\n}\n\n# # Remove 'view source code' from top of page (for html, not python)\n# html_show_sourcelink = False\n# nbsphinx_allow_errors = True  # Continue through Jupyter errors\n# add_module_names = False  # Remove namespaces from class/method signatures\n\n# Ignore >>> when copying code\ncopybutton_prompt_text = r'>>> |\\.\\.\\. '\ncopybutton_prompt_is_regexp = True\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\n# html_theme = 'sphinx_rtd_theme'\nhtml_theme = 'pytorch_sphinx_theme'\nhtml_theme_path = [pytorch_sphinx_theme.get_html_theme_path()]\n\nhtml_theme_options = {\n    'menu': [\n        {\n            'name': 'GitHub',\n            'url': 'https://github.com/open-mmlab/mmagic',\n        },\n        {\n            'name':\n            'Version',\n            'children': [\n                {\n                    'name': 'MMagic 1.x',\n                    'url': 'https://mmagic.readthedocs.io/en/latest/',\n                    'description': 'Main branch'\n                },\n                {\n                    'name': 'MMEditing 0.x',\n                    'url': 'https://mmagic.readthedocs.io/en/0.x/',\n                    'description': '0.x branch',\n                },\n            ],\n            'active':\n            True,\n        },\n    ],\n    'menu_lang':\n    'en',\n}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\nhtml_css_files = ['css/readthedocs.css']\n\nmyst_enable_extensions = ['colon_fence']\nmyst_heading_anchors = 3\n\nlanguage = 'en'\n\n# The master toctree document.\nroot_doc = 'index'\nnotfound_template = '404.html'\n\n\ndef builder_inited_handler(app):\n    subprocess.run(['python', './.dev_scripts/update_model_zoo.py'])\n    subprocess.run(['python', './.dev_scripts/update_dataset_zoo.py'])\n\n\ndef skip_member(app, what, name, obj, skip, options):\n    if what == 'package' or what == 'module':\n        skip = True\n    return skip\n\n\ndef viewcode_follow_imported(app, modname, attribute):\n    fullname = f'{modname}.{attribute}'\n    all_objects = app.env.autoapi_all_objects\n    if fullname not in all_objects:\n        return None\n\n    if all_objects[fullname].obj.get('type') == 'method':\n        fullname = fullname[:fullname.rfind('.')]\n        attribute = attribute[:attribute.rfind('.')]\n    while all_objects[fullname].obj.get('original_path', '') != '':\n        fullname = all_objects[fullname].obj.get('original_path')\n\n    orig_path = fullname\n    if orig_path.endswith(attribute):\n        return orig_path[:-len(attribute) - 1]\n\n    return modname\n\n\ndef setup(app):\n    app.connect('builder-inited', builder_inited_handler)\n    app.connect('autoapi-skip-member', skip_member)\n    if 'viewcode-follow-imported' in app.events.events:\n        app.connect(\n            'viewcode-follow-imported', viewcode_follow_imported, priority=0)\n"
  },
  {
    "path": "docs/en/device/npu.md",
    "content": "# NPU (HUAWEI Ascend)\n\n## Usage\n\nPlease refer to the [building documentation of MMCV](https://mmcv.readthedocs.io/en/latest/get_started/build.html#build-mmcv-full-on-ascend-npu-machine) to install MMCV and [mmengine](https://mmengine.readthedocs.io/en/latest/get_started/installation.html#build-from-source) on NPU devices.\n\nHere we use 8 NPUs on your computer to train the model with the following command:\n\n```shell\nbash tools/dist_train.sh configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py 8\n```\n\nAlso, you can use only one NPU to train the model with the following command:\n\n```shell\npython tools/train.py configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py\n```\n\n## Models Results\n\n|                                           Model                                            | Dataset | PSNR  | SSIM | Download                                                                                       |\n| :----------------------------------------------------------------------------------------: | ------- | :---: | :--- | :--------------------------------------------------------------------------------------------- |\n| [edsr_x2c64b16_1x16_300k_div2k](https://github.com/open-mmlab/mmagic/blob/main/configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py) | DIV2K   | 35.83 | 0.94 | [log](https://download.openmmlab.com/mmediting/device/npu/edsr/edsr_x2c64b16_1xb16-300k_div2k.log) |\n\n**Notes:**\n\n- If not specially marked, the results on NPU with amp are the basically same as those on the GPU with FP32.\n\n**All above models are provided by Huawei Ascend group.**\n"
  },
  {
    "path": "docs/en/docutils.conf",
    "content": "[html writers]\ntable_style: colwidths-auto\n"
  },
  {
    "path": "docs/en/faq.md",
    "content": "# Frequently asked questions\n\nWe list some common troubles faced by many users and their corresponding\nsolutions here. Feel free to enrich the list if you find any frequent issues\nand have ways to help others to solve them. If the contents here do not cover\nyour issue, please create an issue using the\n[provided templates](https://github.com/open-mmlab/mmagic/issues/new/choose)\nand make sure you fill in all required information in the template.\n\n## FAQ\n\n**Q1**: “xxx: ‘yyy is not in the zzz registry’”.\n\n**A1**: The registry mechanism will be triggered only when the file of the module is imported. So you need to import that file somewhere.\n\n**Q2**: What's the folder structure of xxx dataset?\n\n**A2**: You can make sure the folder structure is correct following tutorials of [dataset preparation](user_guides/dataset_prepare.md).\n\n**Q3**: How to use LMDB data to train the model?\n\n**A3**:  You can use scripts in `tools/data` to make LMDB files. More details are shown in tutorials of [dataset preparation](user_guides/dataset_prepare.md).\n\n**Q4**: Why `MMCV==xxx is used but incompatible` is raised when import I try to import `mmgen`?\n\n**A4**:\nThis is because the version of MMCV and MMGeneration are incompatible. Compatible MMGeneration and MMCV versions are shown as below. Please choose the correct version of MMCV to avoid installation issues.\n\n| MMGeneration version |   MMCV version   |\n| :------------------: | :--------------: |\n|        master        | mmcv-full>=2.0.0 |\n\nNote: You need to run `pip uninstall mmcv` first if you have mmcv installed.\nIf mmcv and mmcv-full are both installed, there will be `ModuleNotFoundError`.\n\n**Q5**: How can I ignore some fields in the base configs?\n\n**A5**:\nSometimes, you may set `_delete_=True` to ignore some of fields in base configs.\nYou may refer to [MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md#delete-key-in-dict) for simple illustration.\n\nYou may have a careful look at [this tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md) for better understanding of this feature.\n\n**Q6**:: How can I use intermediate variables in configs?\n\n**A6**:\nSome intermediate variables are used in the config files, like `train_pipeline`/`test_pipeline` in datasets.\nIt's worth noting that when modifying intermediate variables in the children configs, users need to pass the intermediate variables into corresponding fields again.\n"
  },
  {
    "path": "docs/en/get_started/install.md",
    "content": "# Installation\n\nIn this section, you will know about:\n\n- [Installation](#installation)\n  - [Installation](#installation-1)\n    - [Prerequisites](#prerequisites)\n    - [Best practices](#best-practices)\n    - [Customize installation](#customize-installation)\n      - [CUDA Version](#cuda-version)\n      - [Install MMCV without MIM](#install-mmcv-without-mim)\n      - [Using MMagic with Docker](#using-mmagic-with-docker)\n      - [Trouble shooting](#trouble-shooting)\n    - [Developing with multiple MMagic versions](#developing-with-multiple-mmagic-versions)\n\n## Installation\n\nWe recommend that users follow our [Best practices](#best-practices) to install MMagic.\nHowever, the whole process is highly customizable. See [Customize installation](#customize-installation) section for more information.\n\n### Prerequisites\n\nIn this section, we demonstrate how to prepare an environment with PyTorch.\n\nMMagic works on Linux, Windows, and macOS. It requires:\n\n- Python >= 3.7\n- [PyTorch](https://pytorch.org/) >= 1.8\n- [MMCV](https://github.com/open-mmlab/mmcv) >= 2.0.0\n\n>\n\nIf you are experienced with PyTorch and have already installed it,\njust skip this part and jump to the [next section](#best-practices). Otherwise, you can follow these steps for the preparation.\n\n**Step 0.**\nDownload and install Miniconda from [official website](https://docs.conda.io/en/latest/miniconda.html).\n\n**Step 1.**\nCreate a [conda environment](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html#) and activate it\n\n```shell\nconda create --name mmagic python=3.8 -y\nconda activate mmagic\n```\n\n**Step 2.**\nInstall PyTorch following [official instructions](https://pytorch.org/get-started/locally/), e.g.\n\n- On GPU platforms:\n\n  ```shell\n  conda install pytorch torchvision cudatoolkit=11.3 -c pytorch\n  ```\n\n- On CPU platforms:\n\n  ```shell\n  conda install pytorch=1.10 torchvision cpuonly -c pytorch\n  ```\n\n### Best practices\n\n**Step 0.** Install [MMCV](https://github.com/open-mmlab/mmcv) using [MIM](https://github.com/open-mmlab/mim).\n\n```shell\npip install -U openmim\nmim install 'mmcv>=2.0.0'\n```\n\n**Step 1.** Install [MMEngine](https://github.com/open-mmlab/mmengine).\n\n```shell\nmim install 'mmengine'\n```\n\nOr\n\n```shell\npip install mmengine\n```\n\nOr\n\n```shell\npip install git+https://github.com/open-mmlab/mmengine.git\n```\n\n**Step 2.** Install MMagic.\n\n```shell\nmim install 'mmagic'\n```\n\nOr\n\n```shell\npip install mmagic\n```\n\nOr install [MMagic](https://github.com/open-mmlab/mmagic) from the source code.\n\n```shell\ngit clone https://github.com/open-mmlab/mmagic.git\ncd mmagic\npip3 install -e . -v\n```\n\n**Step 5.**\nVerify MMagic has been successfully installed.\n\n```shell\ncd ~\npython -c \"import mmagic; print(mmagic.__version__)\"\n# Example output: 1.0.0\n```\n\nThe installation is successful if the version number is output correctly.\n\n```{note}\nYou may be curious about what `-e .` means when supplied with `pip install`.\nHere is the description:\n\n- `-e` means [editable mode](https://pip.pypa.io/en/latest/cli/pip_install/#cmdoption-e).\n  When `import mmagic`, modules under the cloned directory are imported.\n  If `pip install` without `-e`, pip will copy cloned codes to somewhere like `lib/python/site-package`.\n  Consequently, modified code under the cloned directory takes no effect unless `pip install` again.\n  Thus, `pip install` with `-e` is particularly convenient for developers. If some codes are modified, new codes will be imported next time without reinstallation.\n- `.` means code in this directory\n\nYou can also use `pip install -e .[all]`, which will install more dependencies, especially for pre-commit hooks and unittests.\n```\n\n### Customize installation\n\n#### CUDA Version\n\nWhen installing PyTorch, you need to specify the version of CUDA. If you are not clear on which to choose, follow our recommendations:\n\n- For Ampere-based NVIDIA GPUs, such as GeForce 30 series and NVIDIA A100, CUDA 11 is a must.\n- For older NVIDIA GPUs, CUDA 11 is backward compatible, but CUDA 10.2 offers better compatibility and is more lightweight.\n\nPlease make sure the GPU driver satisfies the minimum version requirements.\nSee [this table](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions__table-cuda-toolkit-driver-versions) for more information.\n\n**note**\nInstalling CUDA runtime libraries is enough if you follow our best practices,\nbecause no CUDA code will be compiled locally.\nHowever, if you hope to compile MMCV from source or develop other CUDA operators,\nyou need to install the complete CUDA toolkit from NVIDIA's [website](https://developer.nvidia.com/cuda-downloads),\nand its version should match the CUDA version of PyTorch. i.e., the specified version of cudatoolkit in `conda install` command.\n\n#### Install MMCV without MIM\n\nMMCV contains C++ and CUDA extensions, thus depending on PyTorch in a complex way.\nMIM solves such dependencies automatically and makes the installation easier. However, it is not a must.\n\nTo install MMCV with pip instead of MIM, please follow [MMCV installation guides](https://mmcv.readthedocs.io/en/latest/get_started/installation.html).\nThis requires manually specifying a find-url based on PyTorch version and its CUDA version.\n\nFor example, the following command install mmcv-full built for PyTorch 1.10.x and CUDA 11.3.\n\n```shell\npip install 'mmcv>=2.0.0' -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html\n```\n\n#### Using MMagic with Docker\n\nWe provide a [Dockerfile](https://github.com/open-mmlab/mmagic/blob/main/docker/Dockerfile) to build an image.\nEnsure that your [docker version](https://docs.docker.com/engine/install/) >=19.03.\n\n```shell\n# build an image with PyTorch 1.8, CUDA 11.1\n# If you prefer other versions, just modified the Dockerfile\ndocker build -t mmagic docker/\n```\n\nRun it with\n\n```shell\ndocker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmagic/data mmagic\n```\n\n#### Trouble shooting\n\nIf you have some issues during the installation, please first view the [FAQ](../faq.md) page.\nYou may [open an issue](https://github.com/open-mmlab/mmagic/issues/new/choose) on GitHub if no solution is found.\n\n### Developing with multiple MMagic versions\n\nThe train and test scripts already modify the `PYTHONPATH` to ensure the script uses the `MMagic` in the current directory.\n\nTo use the default MMagic installed in the environment rather than that you are working with, you can remove the following line in those scripts\n\n```shell\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH\n```\n"
  },
  {
    "path": "docs/en/get_started/overview.md",
    "content": "# Overview\n\nWelcome to MMagic! In this section, you will know about\n\n- [Overview](#overview)\n  - [What is MMagic?](#what-is-mmagic)\n  - [Why should I use MMagic?](#why-should-i-use-mmagic)\n  - [Get started](#get-started)\n  - [User guides](#user-guides)\n    - [Advanced guides](#advanced-guides)\n    - [How to](#how-to)\n\n## What is MMagic?\n\nMMagic (**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation) is an open-source AIGC toolbox for professional AI researchers and machine learning engineers to explore image and video processing, editing and generation.\n\nMMagic allows researchers and engineers to use pre-trained state-of-the-art models, train and develop new customized models easily.\n\nMMagic supports various foundamental generative models, including:\n\n- Unconditional Generative Adversarial Networks (GANs)\n- Conditional Generative Adversarial Networks (GANs)\n- Internal Learning\n- Diffusion Models\n- And many other generative models are coming soon!\n\nMMagic supports various applications, including:\n\n- Text-to-Image\n- Image-to-image translation\n- 3D-aware generation\n- Image super-resolution\n- Video super-resolution\n- Video frame interpolation\n- Image inpainting\n- Image matting\n- Image restoration\n- Image colorization\n- Image generation\n- And many other applications are coming soon!\n\n<div align=center>\n    <video width=\"100%\" controls>\n        <source src=\"https://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\" type=\"video/mp4\">\n        <object data=\"https://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\" width=\"100%\">\n        </object>\n    </video>\n</div>\n</br>\n\n## Why should I use MMagic?\n\n- **State of the Art Models**\n\n  MMagic provides state-of-the-art generative models to process, edit and synthesize images and videos.\n\n- **Powerful and Popular Applications**\n\n  MMagic supports popular and contemporary image restoration, text-to-image, 3D-aware generation, inpainting, matting, super-resolution and generation applications. Specifically, MMagic supports fine-tuning for stable diffusion and many exciting diffusion's application such as ControlNet Animation with SAM. MMagic also supports GAN interpolation, GAN projection, GAN manipulations and many other popular GAN’s applications. It’s time to begin your AIGC exploration journey!\n\n- **Efficient Framework**\n\n  By using MMEngine and MMCV of OpenMMLab 2.0 framework, MMagic decompose the editing framework into different modules and one can easily construct a customized editor framework by combining different modules. We can define the training process just like playing with Legos and provide rich components and strategies. In MMagic, you can complete controls on the training process with different levels of APIs. With the support of [MMSeparateDistributedDataParallel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/wrappers/seperate_distributed.py), distributed training for dynamic architectures can be easily implemented.\n\n## Get started\n\nFor installation instructions, please see [Installation](install.md).\n\n## User guides\n\nFor beginners, we suggest learning the basic usage of MMagic from [user_guides](../user_guides/config.md).\n\n### Advanced guides\n\nFor users who are familiar with MMagic, you may want to learn the design of MMagic, as well as how to extend the repo, how to use multiple repos and other advanced usages, please refer to [advanced_guides](../advanced_guides/evaluator.md).\n\n### How to\n\nFor users who want to use MMagic to do something, please refer to [How to](../howto/models.md).\n"
  },
  {
    "path": "docs/en/get_started/quick_run.md",
    "content": "# Quick run\n\nAfter installing MMagic successfully, now you are able to play with MMagic! To generate an image from text, you only need several lines of codes by MMagic!\n\n```python\nfrom mmagic.apis import MMagicInferencer\nsd_inferencer = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = 'output/sd_res.png'\nsd_inferencer.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\nOr you can just run the following command.\n\n```bash\npython demo/mmagic_inference_demo.py \\\n    --model-name stable_diffusion \\\n    --text \"A panda is having dinner at KFC\" \\\n    --result-out-dir ./output/sd_res.png\n```\n\nYou will see a new image `sd_res.png` in folder `output/`, which contained generated samples.\n\nWhat's more, if you want to make these photos much more clear,\nyou only need several lines of codes for image super-resolution by MMagic!\n\n```python\nfrom mmagic.apis import MMagicInferencer\nconfig = 'configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py'\ncheckpoint = 'https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth'\nimg_path = 'tests/data/image/lq/baboon_x4.png'\neditor = MMagicInferencer('esrgan', model_config=config, model_ckpt=checkpoint)\noutput = editor.infer(img=img_path,result_out_dir='output.png')\n```\n\nNow, you can check your fancy photos in `output.png`.\n"
  },
  {
    "path": "docs/en/howto/dataset.md",
    "content": "# How to prepare your own datasets\n\nIn this document, we will introduce the design of each datasets in MMagic and how users can design their own dataset.\n\n- [How to prepare your own datasets](#how-to-prepare-your-own-datasets)\n  - [Supported Data Format](#supported-data-format)\n    - [BasicImageDataset](#basicimagedataset)\n    - [BasicFramesDataset](#basicframesdataset)\n    - [BasicConditonalDataset](#basicconditonaldataset)\n      - [1. Annotation file read by line (e.g., txt)](#1-annotation-file-read-by-line-eg-txt)\n      - [2. Dict-based annotation file (e.g., json):](#2-dict-based-annotation-file-eg-json)\n      - [3. Folder-based annotation (no annotation file need):](#3-folder-based-annotation-no-annotation-file-need)\n    - [ImageNet Dataset and CIFAR10 Dataset](#imagenet-dataset-and-cifar10-dataset)\n    - [AdobeComp1kDataset](#adobecomp1kdataset)\n    - [GrowScaleImgDataset](#growscaleimgdataset)\n    - [SinGANDataset](#singandataset)\n    - [PairedImageDataset](#pairedimagedataset)\n    - [UnpairedImageDataset](#unpairedimagedataset)\n  - [Design a new dataset](#design-a-new-dataset)\n    - [Repeat dataset](#repeat-dataset)\n\n## Supported Data Format\n\nIn MMagic, all datasets are inherited from `BaseDataset`.\nEach dataset load the list of data info (e.g., data path) by `load_data_list`.\nIn `__getitem__`, `prepare_data` is called to get the preprocessed data.\nIn `prepare_data`, data loading pipeline consists of the following steps:\n\n1. fetch the data info by passed index, implemented by `get_data_info`\n2. apply data transforms to the data, implemented by `pipeline`\n\n### BasicImageDataset\n\n**BasicImageDataset** `mmagic.datasets.BasicImageDataset`\nGeneral image dataset designed for low-level vision tasks with image, such as image super-resolution, inpainting and unconditional image generation. The annotation file is optional.\n\nIf use annotation file, the annotation format can be shown as follows.\n\n```bash\n   Case 1 (CelebA-HQ):\n\n       000001.png\n       000002.png\n\n   Case 2 (DIV2K):\n\n       0001_s001.png (480,480,3)\n       0001_s002.png (480,480,3)\n       0001_s003.png (480,480,3)\n       0002_s001.png (480,480,3)\n       0002_s002.png (480,480,3)\n\n   Case 3 (Vimeo90k):\n\n       00001/0266 (256, 448, 3)\n       00001/0268 (256, 448, 3)\n```\n\nHere we give several examples showing how to use `BasicImageDataset`. Assume the file structure as the following:\n\n```md\nmmagic (root)\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   │   ├── image.png\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   │   │   ├── image_x4.png\n│   │   ├── DIV2K_valid_HR\n│   │   ├── DIV2K_valid_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   ├── places\n│   │   ├── test_set\n│   │   ├── train_set\n|   |   ├── meta\n|   |   |    ├── Places365_train.txt\n|   |   |    ├── Places365_val.txt\n|   ├── celebahq\n│   │   ├── imgs_1024\n\n```\n\nCase 1: Loading DIV2K dataset for training a SISR model.\n\n```python\n   dataset = BasicImageDataset(\n       ann_file='',\n       metainfo=dict(\n           dataset_type='div2k',\n           task_name='sisr'),\n       data_root='data/DIV2K',\n       data_prefix=dict(\n           gt='DIV2K_train_HR', img='DIV2K_train_LR_bicubic/X4'),\n       filename_tmpl=dict(img='{}_x4', gt='{}'),\n       pipeline=[])\n```\n\nCase 2: Loading places dataset for training an inpainting model.\n\n```python\n   dataset = BasicImageDataset(\n       ann_file='meta/Places365_train.txt',\n       metainfo=dict(\n           dataset_type='places365',\n           task_name='inpainting'),\n       data_root='data/places',\n       data_prefix=dict(gt='train_set'),\n       pipeline=[])\n```\n\nCase 3: Loading CelebA-HQ dataset for training an PGGAN.\n\n```python\ndataset = BasicImageDataset(\n        pipeline=[],\n        data_root='./data/celebahq/imgs_1024')\n```\n\n### BasicFramesDataset\n\n**BasicFramesDataset** `mmagic.datasets.BasicFramesDataset`\nGeneral frames dataset designed for low-level vision tasks with frames, such as video super-resolution and video frame interpolation. The annotation file is optional.\n\nIf use annotation file, the annotation format can be shown as follows.\n\n```bash\nCase 1 (Vid4):\n\n   calendar 41\n   city 34\n   foliage 49\n   walk 47\n\nCase 2 (REDS):\n\n   000/00000000.png (720, 1280, 3)\n   000/00000001.png (720, 1280, 3)\n\nCase 3 (Vimeo90k):\n\n   00001/0266 (256, 448, 3)\n   00001/0268 (256, 448, 3)\n```\n\nAssume the file structure as the following:\n\n```bash\nmmagic (root)\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Vid4\n│   │   ├── BIx4\n│   │   │   ├── city\n│   │   │   │   ├── img1.png\n│   │   ├── GT\n│   │   │   ├── city\n│   │   │   │   ├── img1.png\n│   │   ├── meta_info_Vid4_GT.txt\n│   ├── vimeo-triplet\n│   │   ├── sequences\n|   |   |   ├── 00001\n│   │   │   │   ├── 0389\n│   │   │   │   │   ├── img1.png\n│   │   │   │   │   ├── img2.png\n│   │   │   │   │   ├── img3.png\n│   │   ├── tri_trainlist.txt\n```\n\nCase 1: Loading Vid4 dataset for training a VSR model.\n\n```python\ndataset = BasicFramesDataset(\n    ann_file='meta_info_Vid4_GT.txt',\n    metainfo=dict(dataset_type='vid4', task_name='vsr'),\n    data_root='data/Vid4',\n    data_prefix=dict(img='BIx4', gt='GT'),\n    pipeline=[],\n    depth=2,\n    num_input_frames=5)\n```\n\nCase 2: Loading Vimeo90k dataset for training a VFI model.\n\n```python\ndataset = BasicFramesDataset(\n    ann_file='tri_trainlist.txt',\n    metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n    data_root='data/vimeo-triplet',\n    data_prefix=dict(img='sequences', gt='sequences'),\n    pipeline=[],\n    depth=2,\n    load_frames_list=dict(\n        img=['img1.png', 'img3.png'], gt=['img2.png']))\n```\n\n### BasicConditonalDataset\n\n**BasicConditonalDataset** `mmagic.datasets.BasicConditonalDataset` is designed for conditional GANs (e.g., SAGAN, BigGAN). This dataset support load label for the annotation file. `BasicConditonalDataset` support three kinds of annotation as follow:\n\n#### 1. Annotation file read by line (e.g., txt)\n\nSample files structure:\n\n```\n    data_prefix/\n    ├── folder_1\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    └── folder_2\n        ├── 123.png\n        ├── nsdf3.png\n        └── ...\n```\n\nSample annotation file (the first column is the image path and the second column is the index of category):\n\n```\n    folder_1/xxx.png 0\n    folder_1/xxy.png 1\n    folder_2/123.png 5\n    folder_2/nsdf3.png 3\n    ...\n```\n\nConfig example for ImageNet dataset:\n\n```python\ndataset=dict(\n    type='BasicConditionalDataset,\n    data_root='./data/imagenet/',\n    ann_file='meta/train.txt',\n    data_prefix='train',\n    pipeline=train_pipeline),\n```\n\n#### 2. Dict-based annotation file (e.g., json):\n\nSample files structure:\n\n```\n    data_prefix/\n    ├── folder_1\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    └── folder_2\n        ├── 123.png\n        ├── nsdf3.png\n        └── ...\n```\n\nSample annotation file (the key is the image path and the value column\nis the label):\n\n```\n    {\n        \"folder_1/xxx.png\": [1, 2, 3, 4],\n        \"folder_1/xxy.png\": [2, 4, 1, 0],\n        \"folder_2/123.png\": [0, 9, 8, 1],\n        \"folder_2/nsdf3.png\", [1, 0, 0, 2],\n        ...\n    }\n```\n\nConfig example for EG3D (shapenet-car) dataset:\n\n```python\ndataset = dict(\n    type='BasicConditionalDataset',\n    data_root='./data/eg3d/shapenet-car',\n    ann_file='annotation.json',\n    pipeline=train_pipeline)\n```\n\nIn this kind of annotation, labels can be any type and not restricted to an index.\n\n#### 3. Folder-based annotation (no annotation file need):\n\nSample files structure:\n\n```\n    data_prefix/\n    ├── class_x\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    │       └── xxz.png\n    └── class_y\n        ├── 123.png\n        ├── nsdf3.png\n        ├── ...\n        └── asd932_.png\n```\n\nIf the annotation file is specified, the dataset will be generated by the first two ways, otherwise, try the third way.\n\n### ImageNet Dataset and CIFAR10 Dataset\n\n**ImageNet Dataset** `mmagic.datasets.ImageNet` and **CIFAR10 Dataset**`mmagic.datasets.CIFAR10` are datasets specific designed for ImageNet and CIFAR10 datasets. Both two datasets are encapsulation of `BasicConditionalDataset`. You can used them to load data from ImageNet dataset and CIFAR10 dataset easily.\n\nConfig example for ImageNet:\n\n```python\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='RandomCropLongEdge', keys=['img']),\n    dict(type='Resize', scale=(128, 128), keys=['img'], backend='pillow'),\n    dict(type='Flip', keys=['img'], flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ndataset=dict(\n    type='ImageNet',\n    data_root='./data/imagenet/',\n    ann_file='meta/train.txt',\n    data_prefix='train',\n    pipeline=pipeline),\n```\n\nConfig example for CIFAR10:\n\n```python\npipeline = [dict(type='PackInputs')]\n\ndataset = dict(\n    type='CIFAR10',\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=pipeline)\n```\n\n### AdobeComp1kDataset\n\n**AdobeComp1kDataset** `mmagic.datasets.AdobeComp1kDataset`\nAdobe composition-1k dataset.\n\nThe dataset loads (alpha, fg, bg) data and apply specified transforms to\nthe data. You could specify whether composite merged image online or load\ncomposited merged image in pipeline.\n\nExample for online comp-1k dataset:\n\n```md\n[\n   {\n       \"alpha\": 'alpha/000.png',\n       \"fg\": 'fg/000.png',\n       \"bg\": 'bg/000.png'\n   },\n   {\n       \"alpha\": 'alpha/001.png',\n       \"fg\": 'fg/001.png',\n       \"bg\": 'bg/001.png'\n   },\n]\n```\n\nExample for offline comp-1k dataset:\n\n```md\n[\n  {\n      \"alpha\": 'alpha/000.png',\n      \"merged\": 'merged/000.png',\n      \"fg\": 'fg/000.png',\n      \"bg\": 'bg/000.png'\n  },\n  {\n      \"alpha\": 'alpha/001.png',\n      \"merged\": 'merged/001.png',\n      \"fg\": 'fg/001.png',\n      \"bg\": 'bg/001.png'\n  },\n]\n```\n\n### GrowScaleImgDataset\n\n`GrowScaleImgDataset` is designed for dynamic GAN models (e.g., PGGAN and StyleGANv1).\nIn this dataset, we support switching the data root during training to load training images of different resolutions.\nThis procedure is implemented by `GrowScaleImgDataset.update_annotations` and is called by `PGGANFetchDataHook.before_train_iter` in the training process.\n\n```python\ndef update_annotations(self, curr_scale):\n    # determine if the data root needs to be updated\n    if curr_scale == self._actual_curr_scale:\n        return False\n\n    # fetch new data root by resolution (scale)\n    for scale in self._img_scales:\n        if curr_scale <= scale:\n            self._curr_scale = scale\n            break\n        if scale == self._img_scales[-1]:\n            assert RuntimeError(\n                f'Cannot find a suitable scale for {curr_scale}')\n    self._actual_curr_scale = curr_scale\n    self.data_root = self.data_roots[str(self._curr_scale)]\n\n    # reload the data list with new data root\n    self.load_data_list()\n\n    # print basic dataset information to check the validity\n    print_log('Update Dataset: ' + repr(self), 'current')\n    return True\n```\n\n### SinGANDataset\n\n`SinGANDataset` is designed for SinGAN's training.\nIn SinGAN's training, we do not iterate the images in the dataset but return a consistent preprocessed image dict.\n\nTherefore, we bypass the default data loading logic of `BaseDataset` because we do not need to load the corresponding image data based on the given index.\n\n```python\ndef load_data_list(self, min_size, max_size, scale_factor_init):\n    # load single image\n    real = mmcv.imread(self.data_root)\n    self.reals, self.scale_factor, self.stop_scale = create_real_pyramid(\n        real, min_size, max_size, scale_factor_init)\n\n    self.data_dict = {}\n\n    # generate multi scale image\n    for i, real in enumerate(self.reals):\n        self.data_dict[f'real_scale{i}'] = real\n\n    self.data_dict['input_sample'] = np.zeros_like(\n        self.data_dict['real_scale0']).astype(np.float32)\n\ndef __getitem__(self, index):\n    # directly return the transformed data dict\n    return self.pipeline(self.data_dict)\n```\n\n### PairedImageDataset\n\n`PairedImageDataset` is designed for translation models that needs paired training data (e.g., Pix2Pix).\nThe directory structure is shown below. Each image files are the concatenation of the image pair.\n\n```\n./data/dataset_name/\n├── test\n│   └── XXX.jpg\n└── train\n    └── XXX.jpg\n```\n\nIn `PairedImageDataset`, we scan the file list in `load_data_list` and save path in `pair_path` field to fit the `LoadPairedImageFromFile` transformation.\n\n```python\ndef load_data_list(self):\n    data_infos = []\n    pair_paths = sorted(self.scan_folder(self.data_root))\n    for pair_path in pair_paths:\n        # save path in the specific field\n        data_infos.append(dict(pair_path=pair_path))\n\n    return data_infos\n```\n\n### UnpairedImageDataset\n\n`UnpairedImageDataset` is designed for translation models that do not need paired data (e.g., CycleGAN). The directory structure is shown below.\n\n```\n./data/dataset_name/\n├── testA\n│   └── XXX.jpg\n├── testB\n│   └── XXX.jpg\n├── trainA\n│   └── XXX.jpg\n└── trainB\n    └── XXX.jpg\n\n```\n\nIn this dataset, we overwrite `__getitem__` function to load random image pair in the training process.\n\n```python\ndef __getitem__(self, idx):\n    if not self.test_mode:\n        return self.prepare_train_data(idx)\n\n    return self.prepare_test_data(idx)\n\ndef prepare_train_data(self, idx):\n    img_a_path = self.data_infos_a[idx % self.len_a]['path']\n    idx_b = np.random.randint(0, self.len_b)\n    img_b_path = self.data_infos_b[idx_b]['path']\n    results = dict()\n    results[f'img_{self.domain_a}_path'] = img_a_path\n    results[f'img_{self.domain_b}_path'] = img_b_path\n    return self.pipeline(results)\n\ndef prepare_test_data(self, idx):\n    img_a_path = self.data_infos_a[idx % self.len_a]['path']\n    img_b_path = self.data_infos_b[idx % self.len_b]['path']\n    results = dict()\n    results[f'img_{self.domain_a}_path'] = img_a_path\n    results[f'img_{self.domain_b}_path'] = img_b_path\n    return self.pipeline(results)\n```\n\n## Design a new dataset\n\nIf you want to create a dataset for a new low level CV task (e.g. denoise, derain, defog, and de-reflection) or existing dataset format doesn't meet your need, you can reorganize new data formats to existing format.\n\nOr create a new dataset in `mmagic/datasets` to load the data.\n\nInheriting from the base class of datasets such as `BasicImageDataset` and `BasicFramesDataset` will make it easier to create a new dataset.\n\nAnd you can create a new dataset inherited from [BaseDataset](https://github.com/open-mmlab/mmengine/blob/main/mmengine/dataset/base_dataset.py) which is the base class of datasets in [MMEngine](https://github.com/open-mmlab/mmengine).\n\nHere is an example of creating a dataset for video frame interpolation:\n\n```python\nfrom .basic_frames_dataset import BasicFramesDataset\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass NewVFIDataset(BasicFramesDataset):\n    \"\"\"Introduce the dataset\n\n    Examples of file structure.\n\n    Args:\n        pipeline (list[dict | callable]): A sequence of data transformations.\n        folder (str | :obj:`Path`): Path to the folder.\n        ann_file (str | :obj:`Path`): Path to the annotation file.\n        test_mode (bool): Store `True` when building test dataset.\n            Default: `False`.\n    \"\"\"\n\n    def __init__(self, ann_file, metainfo, data_root, data_prefix,\n                    pipeline, test_mode=False):\n        super().__init__(ann_file, metainfo, data_root, data_prefix,\n                            pipeline, test_mode)\n        self.data_infos = self.load_annotations()\n\n    def load_annotations(self):\n        \"\"\"Load annoations for the dataset.\n\n        Returns:\n            list[dict]: A list of dicts for paired paths and other information.\n        \"\"\"\n        data_infos = []\n        ...\n        return data_infos\n\n```\n\nWelcome to [submit new dataset classes to MMagic](https://github.com/open-mmlab/mmagic/compare).\n\n### Repeat dataset\n\nWe use [RepeatDataset](https://github.com/open-mmlab/mmengine/blob/main/mmengine/dataset/dataset_wrapper.py) as wrapper to repeat the dataset.\nFor example, suppose the original dataset is Dataset_A, to repeat it, the config looks like the following\n\n```python\ndataset_A_train = dict(\n        type='RepeatDataset',\n        times=N,\n        dataset=dict(  # This is the original config of Dataset_A\n            type='Dataset_A',\n            ...\n            pipeline=train_pipeline\n        )\n    )\n```\n\nYou may refer to [tutorial in MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/basedataset.md).\n"
  },
  {
    "path": "docs/en/howto/losses.md",
    "content": "# How to design your own loss functions\n\n`losses` are registered as `LOSSES` in `MMagic`.\nCustomizing losses is similar to customizing any other model.\nThis section is mainly for clarifying the design of loss modules in MMagic.\nImportantly, when writing your own loss modules, you should follow the same design,\nso that the new loss module can be adopted in our framework without extra effort.\n\nThis guides includes:\n\n- [How to design your own loss functions](#how-to-design-your-own-loss-functions)\n  - [Introduction to supported losses](#introduction-to-supported-losses)\n  - [Design a new loss function](#design-a-new-loss-function)\n    - [An example of MSELoss](#an-example-of-mseloss)\n    - [An example of DiscShiftLoss](#an-example-of-discshiftloss)\n    - [An example of GANWithCustomizedLoss](#an-example-of-ganwithcustomizedloss)\n  - [Available losses](#available-losses)\n    - [regular losses](#regular-losses)\n    - [losses components](#losses-components)\n\n## Introduction to supported losses\n\nFor convenient usage, you can directly use default loss calculation process we set for concrete algorithms like lsgan, biggan, styleganv2 etc.\nTake `stylegan2` as an example, we use R1 gradient penalty and generator path length regularization as configurable losses, and users can adjust\nrelated arguments like `r1_loss_weight` and `g_reg_weight`.\n\n```python\n# stylegan2_base.py\nloss_config = dict(\n    r1_loss_weight=10. / 2. * d_reg_interval,\n    r1_interval=d_reg_interval,\n    norm_mode='HWC',\n    g_reg_interval=g_reg_interval,\n    g_reg_weight=2. * g_reg_interval,\n    pl_batch_shrink=2)\n\nmodel = dict(\n    type='StyleGAN2',\n    xxx,\n    loss_config=loss_config)\n```\n\n## Design a new loss function\n\n### An example of MSELoss\n\nIn general, to implement a loss module, we will write a function implementation and then wrap it with a class implementation. Take the MSELoss as an example:\n\n```python\n@masked_loss\ndef mse_loss(pred, target):\n    return F.mse_loss(pred, target, reduction='none')\n\n@LOSSES.register_module()\nclass MSELoss(nn.Module):\n\n    def __init__(self, loss_weight=1.0, reduction='mean', sample_wise=False):\n        # codes can be found in ``mmagic/models/losses/pixelwise_loss.py``\n\n    def forward(self, pred, target, weight=None, **kwargs):\n        # codes can be found in ``mmagic/models/losses/pixelwise_loss.py``\n```\n\nGiven the definition of the loss, we can now use the loss by simply defining it in the configuration file:\n\n```python\npixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean')\n```\n\nNote that `pixel_loss` above must be defined in the model. Please refer to `customize_models` for more details. Similar to model customization, in order to use your customized loss, you need to import the loss in `mmagic/models/losses/__init__.py` after writing it.\n\n### An example of DiscShiftLoss\n\nIn general, to implement a loss module, we will write a function implementation and then wrap it with a class implementation.\nHowever, in `MMagic`, we provide another unified interface `data_info` for users to define the mapping between the input argument and data items.\n\n```python\n@weighted_loss\ndef disc_shift_loss(pred):\n    return pred**2\n\n@MODULES.register_module()\nclass DiscShiftLoss(nn.Module):\n\n    def __init__(self, loss_weight=1.0, data_info=None):\n        super(DiscShiftLoss, self).__init__()\n        # codes can be found in ``mmagic/models/losses/disc_auxiliary_loss.py``\n\n    def forward(self, *args, **kwargs):\n        # codes can be found in ``mmagic/models/losses/disc_auxiliary_loss.py``\n```\n\nThe goal of this design for loss modules is to allow for using it automatically in the generative models (`MODELS`), without other complex codes to define the mapping between data and keyword arguments. Thus, different from other frameworks in `OpenMMLab`, our loss modules contain a special keyword, `data_info`, which is a dictionary defining the mapping between the input arguments and data from the generative models. Taking the `DiscShiftLoss` as an example, when writing the config file, users may use this loss as follows:\n\n```python\ndict(type='DiscShiftLoss',\n    loss_weight=0.001 * 0.5,\n    data_info=dict(pred='disc_pred_real')\n```\n\nThe information in `data_info` tells the module to use the `disc_pred_real` data as the input tensor for `pred` arguments. Once the `data_info` is not `None`, our loss module will automatically build up the computational graph.\n\n```python\n@MODULES.register_module()\nclass DiscShiftLoss(nn.Module):\n\n    def __init__(self, loss_weight=1.0, data_info=None):\n        super(DiscShiftLoss, self).__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n\n    def forward(self, *args, **kwargs):\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            kwargs.update(dict(weight=self.loss_weight))\n            return disc_shift_loss(**kwargs)\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            return disc_shift_loss(*args, weight=self.loss_weight, **kwargs)\n\n    @staticmethod\n    def loss_name():\n        return 'loss_disc_shift'\n\n```\n\nAs shown in this part of codes, once users set the `data_info`, the loss module will receive a dictionary containing all of the necessary data and modules, which is provided by the `MODELS` in the training procedure. If this dictionary is given as a non-keyword argument, it should be offered as the first argument. If you are using a keyword argument, please name it as `outputs_dict`.\n\n### An example of GANWithCustomizedLoss\n\nTo build the computational graph, the generative models have to provide a dictionary containing all kinds of data. Having a close look at any generative model, you will find that we collect all kinds of features and modules into a dictionary. We provide a customized `GANWithCustomizedLoss` here to show the process.\n\n```python\nclass GANWithCustomizedLoss(BaseModel):\n\n    def __init__(self, gan_loss, disc_auxiliary_loss, gen_auxiliary_loss,\n                 *args, **kwargs):\n        # ...\n        if gan_loss is not None:\n            self.gan_loss = MODULES.build(gan_loss)\n        else:\n            self.gan_loss = None\n\n        if disc_auxiliary_loss:\n            self.disc_auxiliary_losses = MODULES.build(disc_auxiliary_loss)\n            if not isinstance(self.disc_auxiliary_losses, nn.ModuleList):\n                self.disc_auxiliary_losses = nn.ModuleList(\n                    [self.disc_auxiliary_losses])\n        else:\n            self.disc_auxiliary_loss = None\n\n        if gen_auxiliary_loss:\n            self.gen_auxiliary_losses = MODULES.build(gen_auxiliary_loss)\n            if not isinstance(self.gen_auxiliary_losses, nn.ModuleList):\n                self.gen_auxiliary_losses = nn.ModuleList(\n                    [self.gen_auxiliary_losses])\n        else:\n            self.gen_auxiliary_losses = None\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        # ...\n\n        # get data dict to compute losses for disc\n        data_dict_ = dict(\n            iteration=curr_iter,\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs)\n\n        loss_disc, log_vars_disc = self._get_disc_loss(data_dict_)\n\n        # ...\n\n    def _get_disc_loss(self, outputs_dict):\n        # Construct losses dict. If you hope some items to be included in the\n        # computational graph, you have to add 'loss' in its name. Otherwise,\n        # items without 'loss' in their name will just be used to print\n        # information.\n        losses_dict = {}\n        # gan loss\n        losses_dict['loss_disc_fake'] = self.gan_loss(\n            outputs_dict['disc_pred_fake'], target_is_real=False, is_disc=True)\n        losses_dict['loss_disc_real'] = self.gan_loss(\n            outputs_dict['disc_pred_real'], target_is_real=True, is_disc=True)\n\n        # disc auxiliary loss\n        if self.with_disc_auxiliary_loss:\n            for loss_module in self.disc_auxiliary_losses:\n                loss_ = loss_module(outputs_dict)\n                if loss_ is None:\n                    continue\n\n                # the `loss_name()` function return name as 'loss_xxx'\n                if loss_module.loss_name() in losses_dict:\n                    losses_dict[loss_module.loss_name(\n                    )] = losses_dict[loss_module.loss_name()] + loss_\n                else:\n                    losses_dict[loss_module.loss_name()] = loss_\n        loss, log_var = self.parse_losses(losses_dict)\n\n        return loss, log_var\n\n```\n\nHere, the `_get_disc_loss` will help to combine all kinds of losses automatically.\n\nTherefore, as long as users design the loss module with the same rules, any kind of loss can be inserted in the training of generative models,\nwithout other modifications in the code of models. What you only need to do is just defining the `data_info` in the config files.\n\n## Available losses\n\nWe list available losses with examples in configs as follows.\n\n### regular losses\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th>Method</th>\n    <th>class</th>\n    <th>Example</th>\n  </tr>\n</thead>\n<tbody>\n  <tr>\n    <td>vanilla gan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n\n```python\n# dic gan\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='vanilla',\n    loss_weight=0.001,\n)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>lsgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n</td>\n\n</tr>\n  <tr>\n    <td>wgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='wgan',\n    loss_weight=0.0001,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>hinge loss</td>\n    <td>mmagic.models.GANLoss</td>\n    <td>\n\n```python\n# deepfillv2\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='hinge',\n    loss_weight=0.1,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>smgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n\n```python\n# aot-gan\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='smgan',\n    loss_weight=0.01,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>gradient penalty</td>\n    <td>mmagic.models.GradientPenaltyLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_gp=dict(type='GradientPenaltyLoss', loss_weight=10.)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>discriminator shift loss</td>\n    <td>mmagic.models.DiscShiftLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>clip loss</td>\n    <td>mmagic.models.CLIPLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>L1 composition loss</td>\n    <td>mmagic.models.L1CompositionLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>MSE composition loss</td>\n    <td>mmagic.models.MSECompositionLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>charbonnier composition loss</td>\n    <td>mmagic.models.CharbonnierCompLoss</td>\n    <td>\n\n```python\n# dim\nloss_comp=dict(type='CharbonnierCompLoss', loss_weight=0.5)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>face id Loss</td>\n    <td>mmagic.models.FaceIdLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>light cnn feature loss</td>\n    <td>mmagic.models.LightCNNFeatureLoss</td>\n    <td>\n\n```python\n# dic gan\nfeature_loss=dict(\n    type='LightCNNFeatureLoss',\n    pretrained=pretrained_light_cnn,\n    loss_weight=0.1,\n    criterion='l1')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>gradient loss</td>\n    <td>mmagic.models.GradientLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>l1 Loss</td>\n    <td>mmagic.models.L1Loss</td>\n    <td>\n\n```python\n# dic gan\npixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>mse loss</td>\n    <td>mmagic.models.MSELoss</td>\n    <td>\n\n```python\n# dic gan\nalign_loss=dict(type='MSELoss', loss_weight=0.1, reduction='mean')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>charbonnier loss</td>\n    <td>mmagic.models.CharbonnierLoss</td>\n    <td>\n\n```python\n# dim\nloss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>masked total variation loss</td>\n    <td>mmagic.models.MaskedTVLoss</td>\n    <td>\n\n```python\n# partial conv\nloss_tv=dict(\n    type='MaskedTVLoss',\n    loss_weight=0.1\n)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>perceptual loss</td>\n    <td>mmagic.models.PerceptualLoss</td>\n    <td>\n\n```python\n# real_basicvsr\nperceptual_loss=dict(\n    type='PerceptualLoss',\n    layer_weights={\n        '2': 0.1,\n        '7': 0.1,\n        '16': 1.0,\n        '25': 1.0,\n        '34': 1.0,\n    },\n    vgg_type='vgg19',\n    perceptual_weight=1.0,\n    style_weight=0,\n    norm_img=False)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>transferal perceptual loss</td>\n    <td>mmagic.models.TransferalPerceptualLoss</td>\n    <td>\n\n```python\n# ttsr\ntransferal_perceptual_loss=dict(\n    type='TransferalPerceptualLoss',\n    loss_weight=1e-2,\n    use_attention=False,\n    criterion='mse')\n\n```\n\n</td>\n  </tr>\n</tbody>\n</table>\n\n### losses components\n\nFor `GANWithCustomizedLoss`, we provide several components to build customized loss.\n\n| Method                               | class                                       |\n| ------------------------------------ | ------------------------------------------- |\n| clip loss component                  | mmagic.models.CLIPLossComps                 |\n| discriminator shift loss component   | mmagic.models. DiscShiftLossComps           |\n| gradient penalty loss component      | mmagic.models. GradientPenaltyLossComps     |\n| r1 gradient penalty component        | mmagic.models. R1GradientPenaltyComps       |\n| face Id loss component               | mmagic.models. FaceIdLossComps              |\n| gan loss component                   | mmagic.models. GANLossComps                 |\n| generator path regularizer component | mmagic.models.GeneratorPathRegularizerComps |\n"
  },
  {
    "path": "docs/en/howto/models.md",
    "content": "# How to design your own models\n\nMMagic is built upon MMEngine and MMCV, which enables users to design new models quickly, train and evaluate them easily.\nIn this section, you will learn how to design your own models.\n\nThe structure of this guide are as follows:\n\n- [How to design your own models](#how-to-design-your-own-models)\n  - [Overview of models in MMagic](#overview-of-models-in-mmagic)\n  - [An example of SRCNN](#an-example-of-srcnn)\n    - [Step 1: Define the network of SRCNN](#step-1-define-the-network-of-srcnn)\n    - [Step 2: Define the model of SRCNN](#step-2-define-the-model-of-srcnn)\n    - [Step 3: Start training SRCNN](#step-3-start-training-srcnn)\n  - [An example of DCGAN](#an-example-of-dcgan)\n    - [Step 1: Define the network of DCGAN](#step-1-define-the-network-of-dcgan)\n    - [Step 2: Design the model of DCGAN](#step-2-design-the-model-of-dcgan)\n    - [Step 3: Start training DCGAN](#step-3-start-training-dcgan)\n  - [References](#references)\n\n## Overview of models in MMagic\n\nIn MMagic, one algorithm can be splited two compents: **Model** and **Module**.\n\n- **Model** are topmost wrappers and always inherint from `BaseModel` provided in MMEngine. **Model** is responsible to network forward, loss calculation and backward, parameters updating, etc. In MMagic, **Model** should be registered as `MODELS`.\n- **Module** includes the neural network **architectures** to train or inference, pre-defined **loss classes**, and **data preprocessors** to preprocess the input data batch. **Module** always present as elements of **Model**. In MMagic, **Module** should be registered as **MODULES**.\n\nTake DCGAN model as an example, [generator](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_generator.py) and [discriminator](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_discriminator.py) are the **Module**, which generate images and discriminate real or fake images. [`DCGAN`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan.py) is the **Model**, which take data from dataloader and train generator and discriminator alternatively.\n\nYou can find the implementation of **Model** and **Module** by the following link.\n\n- **Model**:\n  - [Editors](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/editors)\n- **Module**:\n  - [Layers](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/layers)\n  - [Losses](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/losses)\n  - [Data Preprocessor](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/data_preprocessors)\n\n## An example of SRCNN\n\nHere, we take the implementation of the classical image super-resolution model, SRCNN \\[1\\], as an example.\n\n### Step 1: Define the network of SRCNN\n\nSRCNN is the first deep learning method for single image super-resolution \\[1\\].\nTo implement the network architecture of SRCNN,\nwe need to create a new file `mmagic/models/editors/srgan/sr_resnet.py` and implement `class MSRResNet`.\n\nIn this step, we implement `class MSRResNet` by inheriting from `mmengine.models.BaseModule` and define the network architecture in `__init__` function.\nIn particular, we need to use `@MODELS.register_module()` to add the implementation of `class MSRResNet` into the registration of MMagic.\n\n```python\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmagic.registry import MODELS\n\nfrom mmagic.models.utils import (PixelShufflePack, ResidualBlockNoBN,\n                                 default_init_weights, make_layer)\n\n\n@MODELS.register_module()\nclass MSRResNet(BaseModule):\n    \"\"\"Modified SRResNet.\n\n    A compacted version modified from SRResNet in \"Photo-Realistic Single\n    Image Super-Resolution Using a Generative Adversarial Network\".\n\n    It uses residual blocks without BN, similar to EDSR.\n    Currently, it supports x2, x3 and x4 upsampling scale factor.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_blocks (int): Block number in the trunk network. Default: 16.\n        upscale_factor (int): Upsampling factor. Support x2, x3 and x4.\n            Default: 4.\n    \"\"\"\n    _supported_upscale_factors = [2, 3, 4]\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=16,\n                 upscale_factor=4):\n\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.mid_channels = mid_channels\n        self.num_blocks = num_blocks\n        self.upscale_factor = upscale_factor\n\n        self.conv_first = nn.Conv2d(\n            in_channels, mid_channels, 3, 1, 1, bias=True)\n        self.trunk_net = make_layer(\n            ResidualBlockNoBN, num_blocks, mid_channels=mid_channels)\n\n        # upsampling\n        if self.upscale_factor in [2, 3]:\n            self.upsample1 = PixelShufflePack(\n                mid_channels,\n                mid_channels,\n                self.upscale_factor,\n                upsample_kernel=3)\n        elif self.upscale_factor == 4:\n            self.upsample1 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n            self.upsample2 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n        else:\n            raise ValueError(\n                f'Unsupported scale factor {self.upscale_factor}. '\n                f'Currently supported ones are '\n                f'{self._supported_upscale_factors}.')\n\n        self.conv_hr = nn.Conv2d(\n            mid_channels, mid_channels, 3, 1, 1, bias=True)\n        self.conv_last = nn.Conv2d(\n            mid_channels, out_channels, 3, 1, 1, bias=True)\n\n        self.img_upsampler = nn.Upsample(\n            scale_factor=self.upscale_factor,\n            mode='bilinear',\n            align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        self.init_weights()\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n            strict (boo, optional): Whether strictly load the pretrained model.\n                Defaults to True.\n        \"\"\"\n\n        for m in [self.conv_first, self.conv_hr, self.conv_last]:\n            default_init_weights(m, 0.1)\n\n```\n\nThen, we implement the `forward` function of  `class MSRResNet`, which takes as input tensor and then returns the results from `MSRResNet`.\n\n```python\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        feat = self.lrelu(self.conv_first(x))\n        out = self.trunk_net(feat)\n\n        if self.upscale_factor in [2, 3]:\n            out = self.upsample1(out)\n        elif self.upscale_factor == 4:\n            out = self.upsample1(out)\n            out = self.upsample2(out)\n\n        out = self.conv_last(self.lrelu(self.conv_hr(out)))\n        upsampled_img = self.img_upsampler(x)\n        out += upsampled_img\n        return out\n```\n\nAfter the implementation of `class MSRResNet`, we need to update the model list in `mmagic/models/editors/__init__.py`, so that we can import and use `class MSRResNet` by `mmagic.models.editors`.\n\n```python\nfrom .srgan.sr_resnet import MSRResNet\n```\n\n### Step 2: Define the model of SRCNN\n\nAfter the implementation of the network architecture,\nwe need to define our model `class BaseEditModel` and implement the forward loop of `class BaseEditModel`.\n\nTo implement `class BaseEditModel`,\nwe create a new file `mmagic/models/base_models/base_edit_model.py`.\nSpecifically, `class BaseEditModel` inherits from `mmengine.model.BaseModel`.\nIn the `__init__` function, we define the loss functions, training and testing configurations, networks of `class BaseEditModel`.\n\n```python\nfrom typing import List, Optional\n\nimport torch\nfrom mmengine.model import BaseModel\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass BaseEditModel(BaseModel):\n    \"\"\"Base model for image and video editing.\n\n    It must contain a generator that takes frames as inputs and outputs an\n    interpolated frame. It also has a pixel-wise loss for training.\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n        super().__init__(\n            init_cfg=init_cfg, data_preprocessor=data_preprocessor)\n\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n        # generator\n        self.generator = MODELS.build(generator)\n\n        # loss\n        self.pixel_loss = MODELS.build(pixel_loss)\n```\n\nSince `mmengine.model.BaseModel` provides the basic functions of the algorithmic model,\nsuch as weights initialize, batch inputs preprocess, parse losses, and update model parameters.\nTherefore, the subclasses inherit from BaseModel, i.e., `class BaseEditModel` in this example,\nonly need to implement the forward method,\nwhich implements the logic to calculate loss and predictions.\n\nSpecifically, the implemented `forward` function of `class BaseEditModel` takes as input `batch_inputs` and `data_samples` and return results according to mode arguments.\n\n```python\n    def forward(self,\n                batch_inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs):\n        \"\"\"Returns losses or predictions of training, validation, testing, and\n        simple inference process.\n\n        ``forward`` method of BaseModel is an abstract method, its subclasses\n        must implement this method.\n\n        Accepts ``batch_inputs`` and ``data_samples`` processed by\n        :attr:`data_preprocessor`, and returns results according to mode\n        arguments.\n\n        During non-distributed training, validation, and testing process,\n        ``forward`` will be called by ``BaseModel.train_step``,\n        ``BaseModel.val_step`` and ``BaseModel.val_step`` directly.\n\n        During distributed data parallel training process,\n        ``MMSeparateDistributedDataParallel.train_step`` will first call\n        ``DistributedDataParallel.forward`` to enable automatic\n        gradient synchronization, and then call ``forward`` to get training\n        loss.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict or tensor for custom use.\n        \"\"\"\n\n        if mode == 'tensor':\n            return self.forward_tensor(batch_inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            return self.forward_inference(batch_inputs, data_samples, **kwargs)\n\n        elif mode == 'loss':\n            return self.forward_train(batch_inputs, data_samples, **kwargs)\n```\n\nSpecifically, in `forward_tensor`, `class BaseEditModel` returns the forward tensors of the network directly.\n\n```python\n    def forward_tensor(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward tensor.\n            Returns result of simple forward.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        feats = self.generator(batch_inputs, **kwargs)\n\n        return feats\n```\n\nIn `forward_inference` function, `class BaseEditModel` first converts the forward tensors to images and then returns the images as output.\n\n```python\n    def forward_inference(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward inference.\n            Returns predictions of validation, testing, and simple inference.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[DataSample]: predictions.\n        \"\"\"\n\n        feats = self.forward_tensor(batch_inputs, data_samples, **kwargs)\n        feats = self.data_preprocessor.destructor(feats)\n        predictions = []\n        for idx in range(feats.shape[0]):\n            predictions.append(\n                DataSample(\n                    pred_img=feats[idx].to('cpu'),\n                    metainfo=data_samples[idx].metainfo))\n\n        return predictions\n```\n\nIn `forward_train`, `class BaseEditModel` calculate the loss function and returns a dictionary contains the losses as output.\n\n```python\n    def forward_train(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training.\n            Returns dict of losses of training.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        feats = self.forward_tensor(batch_inputs, data_samples, **kwargs)\n        gt_imgs = [data_sample.gt_img.data for data_sample in data_samples]\n        batch_gt_data = torch.stack(gt_imgs)\n\n        loss = self.pixel_loss(feats, batch_gt_data)\n\n        return dict(loss=loss)\n\n```\n\nAfter the implementation of `class BaseEditModel`,\nwe need to update the model list in `mmagic/models/__init__.py`,\nso that we can import and use `class BaseEditModel` by `mmagic.models`.\n\n```python\nfrom .base_models.base_edit_model import BaseEditModel\n```\n\n### Step 3: Start training SRCNN\n\nAfter implementing the network architecture and the forward loop of SRCNN,\nnow we can create a new file `configs/srcnn/srcnn_x4k915_g1_1000k_div2k.py`\nto set the configurations needed by training SRCNN.\n\nIn the configuration file, we need to specify the parameters of our model, `class BaseEditModel`, including the generator network architecture, loss function, additional training and testing configuration, and data preprocessor of input tensors. Please refer to the [Introduction to the loss in MMagic](./losses.md) for more details of losses in MMagic.\n\n```python\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SRCNNNet',\n        channels=(3, 64, 32, 3),\n        kernel_sizes=(9, 1, 5),\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n```\n\nWe also need to specify the training dataloader and testing dataloader according to create your own dataloader.\nFinally we can start training our own model by：\n\n```python\npython tools/train.py configs/srcnn/srcnn_x4k915_g1_1000k_div2k.py\n```\n\n## An example of DCGAN\n\nHere, we take the implementation of the classical gan model, DCGAN \\[2\\], as an example.\n\n### Step 1: Define the network of DCGAN\n\nDCGAN is a classical image generative adversarial network \\[2\\]. To implement the network architecture of DCGAN, we need to create tow new files `mmagic/models/editors/dcgan/dcgan_generator.py` and `mmagic/models/editors/dcgan/dcgan_discriminator.py`, and implement generator (`class DCGANGenerator`) and discriminator (`class DCGANDiscriminator`).\n\nIn this step, we implement `class DCGANGenerator`, `class DCGANDiscriminator` and define the network architecture in `__init__` function.\nIn particular, we need to use `@MODULES.register_module()` to add the generator and discriminator into the registration of MMagic.\n\nTake the following code as example:\n\n```python\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmcv.runner import load_checkpoint\nfrom mmcv.utils.parrots_wrapper import _BatchNorm\nfrom mmengine.logging import MMLogger\nfrom mmengine.model.utils import normal_init\n\nfrom mmagic.models.builder import MODULES\nfrom ..common import get_module_device\n\n\n@MODULES.register_module()\nclass DCGANGenerator(nn.Module):\n    def __init__(self,\n                 output_scale,\n                 out_channels=3,\n                 base_channels=1024,\n                 input_scale=4,\n                 noise_size=100,\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='ReLU'),\n                 out_act_cfg=dict(type='Tanh'),\n                 pretrained=None):\n        super().__init__()\n        self.output_scale = output_scale\n        self.base_channels = base_channels\n        self.input_scale = input_scale\n        self.noise_size = noise_size\n\n        # the number of times for upsampling\n        self.num_upsamples = int(np.log2(output_scale // input_scale))\n\n        # output 4x4 feature map\n        self.noise2feat = ConvModule(\n            noise_size,\n            base_channels,\n            kernel_size=4,\n            stride=1,\n            padding=0,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=default_norm_cfg,\n            act_cfg=default_act_cfg)\n\n        # build up upsampling backbone (excluding the output layer)\n        upsampling = []\n        curr_channel = base_channels\n        for _ in range(self.num_upsamples - 1):\n            upsampling.append(\n                ConvModule(\n                    curr_channel,\n                    curr_channel // 2,\n                    kernel_size=4,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=dict(type='ConvTranspose2d'),\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n\n            curr_channel //= 2\n\n        self.upsampling = nn.Sequential(*upsampling)\n\n        # output layer\n        self.output_layer = ConvModule(\n            curr_channel,\n            out_channels,\n            kernel_size=4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=None,\n            act_cfg=out_act_cfg)\n```\n\nThen, we implement the `forward` function of  `DCGANGenerator`, which takes as `noise` tensor or `num_batches` and then returns the results from `DCGANGenerator`.\n\n```python\n    def forward(self, noise, num_batches=0, return_noise=False):\n        noise_batch = noise_batch.to(get_module_device(self))\n        x = self.noise2feat(noise_batch)\n        x = self.upsampling(x)\n        x = self.output_layer(x)\n        return x\n```\n\nIf you want to implement specific weights initialization method for you network, you need add `init_weights` function by yourself.\n\n```python\n    def init_weights(self, pretrained=None):\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):\n                    normal_init(m, 0, 0.02)\n                elif isinstance(m, _BatchNorm):\n                    nn.init.normal_(m.weight.data)\n                    nn.init.constant_(m.bias.data, 0)\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n```\n\nAfter the implementation of class `DCGANGenerator`, we need to update the model list in `mmagic/models/editors/__init__.py`, so that we can import and use class `DCGANGenerator` by `mmagic.models.editors`.\n\nImplementation of Class `DCGANDiscriminator` follows the similar logic, and you can find the implementation [here](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_discriminator.py).\n\n### Step 2: Design the model of DCGAN\n\nAfter the implementation of the network **Module**, we need to define our **Model** class `DCGAN`.\n\nYour **Model** should inherit from [`BaseModel`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/base_model/base_model.py#L16) provided by MMEngine and implement three functions, `train_step`, `val_step` and `test_step`.\n\n- `train_step`: This function is responsible to update the parameters of the network and called by MMEngine's Loop ([`IterBasedTrainLoop`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L183) or [`EpochBasedTrainLoop`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L18)). `train_step` take data batch and [`OptimWrapper`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md) as input and return a dict of log.\n- `val_step`: This function is responsible for getting output for validation during the training process. and is called by [`MultiValLoop`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/engine/runner/multi_loops.py#L19).\n- `test_step`: This function is responsible for getting output in test process and is called by [`MultiTestLoop`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/engine/runner/multi_loops.py#L274).\n\n> Note that, in `train_step`, `val_step` and `test_step`, `DataPreprocessor` is called to preprocess the input data batch before feed them to the neural network. To know more about `DataPreprocessor` please refer to this [file](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/data_preprocessors/gen_preprocessor.py) and this [tutorial](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/tutorials/model.md#%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E5%99%A8datapreprocessor).\n\nFor simplify using, we provide [`BaseGAN`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/base_models/base_gan.py) class in MMagic, which implements generic `train_step`, `val_step` and `test_step` function for GAN models. With `BaseGAN` as base class, each specific GAN algorithm only need to implement `train_generator` and `train_discriminator`.\n\nIn `train_step`, we support data preprocessing, gradient accumulation (realized by [`OptimWrapper`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md)) and expontial moving averate (EMA) realized by [(`ExponentialMovingAverage`)](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/base_models/average_model.py#L19). With `BaseGAN.train_step`, each specific GAN algorithm only need to implement `train_generator` and `train_discriminator`.\n\n```python\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        # train discriminator, use context manager provided by MMEngine\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            # train_discriminator should be implemented!\n            log_vars = self.train_discriminator(\n                **data, optimizer_wrapper=disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            # update generator, use context manager provided by MMEngine\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    # train_generator should be implemented!\n                    log_vars_gen = self.train_generator(\n                        **data, optimizer_wrapper=gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        # return the log dict\n        return log_vars\n```\n\nIn `val_step` and `test_step`, we call data preprocessing and `BaseGAN.forward` progressively.\n\n```python\n    def val_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        # call `forward`\n        outputs = self(**data)\n        return outputs\n\n    def test_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        # call `orward`\n        outputs = self(**data)\n        return outputs\n```\n\nThen, we implement `train_generator` and `train_discriminator` in `DCGAN` class.\n\n```python\nfrom typing import Dict, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom .base_gan import BaseGAN\n\n\n@MODELS.register_module()\nclass DCGAN(BaseGAN):\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 0. * torch.ones_like(disc_pred_fake))\n        losses_dict['loss_disc_real'] = F.binary_cross_entropy_with_logits(\n            disc_pred_real, 1. * torch.ones_like(disc_pred_real))\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple:\n        losses_dict = dict()\n        losses_dict['loss_gen'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 1. * torch.ones_like(disc_pred_fake))\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(\n            self, inputs, data_sample,\n            optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        real_imgs = inputs['img']\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs, data_sample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        num_batches = inputs['img'].shape[0]\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n```\n\nAfter the implementation of `class DCGAN`, we need to update the model list in `mmagic/models/__init__.py`, so that we can import and use `class DCGAN` by `mmagic.models`.\n\n### Step 3: Start training DCGAN\n\nAfter implementing the network **Module** and the **Model** of DCGAN,\nnow we can create a new file `configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py`\nto set the configurations needed by training DCGAN.\n\nIn the configuration file, we need to specify the parameters of our model, `class DCGAN`, including the generator network architecture and data preprocessor of input tensors.\n\n```python\n# model settings\nmodel = dict(\n    type='DCGAN',\n    noise_size=100,\n    data_preprocessor=dict(type='GANDataPreprocessor'),\n    generator=dict(type='DCGANGenerator', output_scale=64, base_channels=1024),\n    discriminator=dict(\n        type='DCGANDiscriminator',\n        input_scale=64,\n        output_scale=4,\n        out_channels=1))\n```\n\nWe also need to specify the training dataloader and testing dataloader according to [create your own dataloader](dataset.md).\nFinally we can start training our own model by：\n\n```python\npython tools/train.py configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\n```\n\n## References\n\n1. Dong, Chao and Loy, Chen Change and He, Kaiming and Tang, Xiaoou. Image Super-Resolution Using Deep Convolutional Networks\\[J\\]. IEEE transactions on pattern analysis and machine intelligence, 2015.\n\n2. Radford, Alec, Luke Metz, and Soumith Chintala. \"Unsupervised representation learning with deep convolutional generative adversarial networks.\" arXiv preprint arXiv:1511.06434 (2015).\n"
  },
  {
    "path": "docs/en/howto/transforms.md",
    "content": "# How to design your own data transforms\n\nIn this tutorial, we introduce the design of transforms pipeline in MMagic.\n\nThe structure of this guide are as follows:\n\n- [How to design your own data transforms](#how-to-design-your-own-data-transforms)\n  - [Data pipelines in MMagic](#data-pipelines-in-mmagic)\n    - [A simple example of data transform](#a-simple-example-of-data-transform)\n    - [An example of BasicVSR](#an-example-of-basicvsr)\n    - [An example of Pix2Pix](#an-example-of-pix2pix)\n  - [Supported transforms in MMagic](#supported-transforms-in-mmagic)\n    - [Data loading](#data-loading)\n    - [Pre-processing](#pre-processing)\n    - [Formatting](#formatting)\n  - [Extend and use custom pipelines](#extend-and-use-custom-pipelines)\n    - [A simple example of MyTransform](#a-simple-example-of-mytransform)\n    - [An example of flipping](#an-example-of-flipping)\n\n## Data pipelines in MMagic\n\nFollowing typical conventions, we use `Dataset` and `DataLoader` for data loading with multiple workers. `Dataset` returns a dict of data items corresponding the arguments of models' forward method.\n\nThe data preparation pipeline and the dataset is decomposed. Usually a dataset defines how to process the annotations and a data pipeline defines all the steps to prepare a data dict.\n\nA pipeline consists of a sequence of operations. Each operation takes a dict as input and also output a dict for the next transform.\n\nThe operations are categorized into data loading, pre-processing, and formatting\n\nIn MMagic, all data transformations are inherited from `BaseTransform`.\nThe input and output types of transformations are both dict.\n\n### A simple example of data transform\n\n```python\n>>> from mmagic.transforms import LoadPairedImageFromFile\n>>> transforms = LoadPairedImageFromFile(\n>>>     key='pair',\n>>>     domain_a='horse',\n>>>     domain_b='zebra',\n>>>     flag='color'),\n>>> data_dict = {'pair_path': './data/pix2pix/facades/train/1.png'}\n>>> data_dict = transforms(data_dict)\n>>> print(data_dict.keys())\ndict_keys(['pair_path', 'pair', 'pair_ori_shape', 'img_mask', 'img_photo', 'img_mask_path', 'img_photo_path', 'img_mask_ori_shape', 'img_photo_ori_shape'])\n```\n\nGenerally, the last step of the transforms pipeline must be `PackInputs`.\n`PackInputs` will pack the processed data into a dict containing two fields: `inputs` and `data_samples`.\n`inputs` is the variable you want to use as the model's input, which can be the type of `torch.Tensor`, dict of `torch.Tensor`, or any type you want.\n`data_samples` is a list of `DataSample`. Each `DataSample` contains groundtruth and necessary information for corresponding input.\n\n### An example of BasicVSR\n\nHere is a pipeline example for BasicVSR.\n\n```python\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='MirrorSequence', keys=['img', 'gt']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='MirrorSequence', keys=['img']),\n    dict(type='PackInputs')\n]\n```\n\nFor each operation, we list the related dict fields that are added/updated/removed, the dict fields marked by '\\*' are optional.\n\n### An example of Pix2Pix\n\nHere is a pipeline example for Pix2Pix training on aerial2maps dataset.\n\n```python\nsource_domain = 'aerial'\ntarget_domain = 'map'\n\npipeline = [\n    dict(\n        type='LoadPairedImageFromFile',\n        io_backend='disk',\n        key='pair',\n        domain_a=domain_a,\n        domain_b=domain_b,\n        flag='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': [f'img_{domain_a}', f'img_{domain_b}']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(\n                type='mmagic.Resize', scale=(286, 286),\n                interpolation='bicubic'),\n            dict(type='mmagic.FixedCrop', crop_size=(256, 256))\n        ]),\n    dict(\n        type='Flip',\n        keys=[f'img_{domain_a}', f'img_{domain_b}'],\n        direction='horizontal'),\n    dict(\n        type='PackInputs',\n        keys=[f'img_{domain_a}', f'img_{domain_b}', 'pair'])\n```\n\n## Supported transforms in MMagic\n\n### Data loading\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>LoadImageFromFile</code>\n         </td>\n         <td>\n            - add: img, img_path, img_ori_shape, \\*ori_img\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>RandomLoadResizeBg</code>\n         </td>\n         <td>\n            - add: bg\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>LoadMask</code>\n         </td>\n         <td>\n            - add: mask\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>GetSpatialDiscountMask</code>\n         </td>\n         <td>\n            - add: discount_mask\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n### Pre-processing\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>Resize</code>\n         </td >\n         <td>\n            - add: scale_factor, keep_ratio, interpolation, backend\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>MATLABLikeResize</code>\n         </td >\n         <td>\n            - add: scale, output_shape\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomRotation</code>\n         </td >\n         <td>\n            - add: degrees\n            - update: specified by <code>keys</code>\n         <td>\n      </tr>\n      <tr>\n         <td>\n            <code>Flip</code>\n         </td >\n         <td>\n            - add: flip, flip_direction\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomAffine</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomJitter</code>\n         </td >\n         <td>\n            - update: fg (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>ColorJitter</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>BinarizeImage</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomMaskDilation</code>\n         </td >\n         <td>\n            - add: img_dilate_kernel_size\n         <td>\n      </tr>\n      <tr>\n         <td>\n            <code>RandomTransposeHW</code>\n         </td >\n         <td>\n            - add: transpose\n      </tr>\n      <tr>\n         <td>\n            <code>RandomDownSampling</code>\n         </td >\n         <td>\n            - update: scale, gt (img), lq (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomBlur</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomResize</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomNoise</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomJPEGCompression</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomVideoCompression</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>DegradationsWithShuffle</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFrameIndices</code>\n         </td >\n         <td>\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFrameIndiceswithPadding</code>\n         </td >\n         <td>\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>TemporalReverse</code>\n         </td >\n         <td>\n            - add: reverse\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateSegmentIndices</code>\n         </td >\n         <td>\n            - add: interval\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>MirrorSequence</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CopyValues</code>\n         </td >\n         <td>\n            - add: specified by <code>dst_key</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>UnsharpMasking</code>\n         </td >\n         <td>\n            - add: img_unsharp\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>Crop</code>\n         </td >\n         <td>\n            - add: img_crop_bbox, crop_size\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomResizedCrop</code>\n         </td >\n         <td>\n            - add: img_crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>FixedCrop</code>\n         </td >\n         <td>\n            - add: crop_size, crop_pos\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>PairedRandomCrop</code>\n         </td >\n         <td>\n            - update: gt (img), lq (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundCenter</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: fg (img), alpha (img), trimap (img), bg (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundUnknown</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundFg</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>ModCrop</code>\n         </td >\n         <td>\n            - update: gt (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropLike</code>\n         </td >\n         <td>\n            - update: specified by <code>target_key</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GetMaskedImage</code>\n         </td >\n         <td>\n            - add: masked_img\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFacialHeatmap</code>\n         </td >\n         <td>\n            - add: heatmap\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateCoordinateAndCell</code>\n         </td >\n         <td>\n            - add: coord, cell\n            - update: gt (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>Normalize</code>\n         </td >\n         <td>\n            - add: img_norm_cfg\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RescaleToZeroOne</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n   </tbody>\n</table>\n\n### Formatting\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>ToTensor</code>\n         </td>\n         <td>\n            update: specified by <code>keys</code>.\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>FormatTrimap</code>\n         </td>\n         <td>\n            - update: trimap\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>PackInputs</code>\n         </td>\n         <td>\n            - add: inputs, data_sample\n            - remove: all other keys\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n### Albumentations\n\nMMagic support adding custom transformations from [Albumentations](https://github.com/albumentations-team/albumentations) library. Please visit https://albumentations.ai/docs/getting_started/transforms_and_targets to get more information.\n\nAn example of Albumentations's `transforms` is as followed:\n\n```python\nalbu_transforms = [\n   dict(\n         type='Resize',\n         height=100,\n         width=100,\n   ),\n   dict(\n         type='RandomFog',\n         p=0.5,\n   ),\n   dict(\n         type='RandomRain',\n         p=0.5\n   ),\n   dict(\n         type='RandomSnow',\n         p=0.5,\n   ),\n]\npipeline = [\n   dict(\n         type='LoadImageFromFile',\n         key='img',\n         color_type='color',\n         channel_order='rgb',\n         imdecode_backend='cv2'),\n   dict(\n         type='Albumentations',\n         keys=['img'],\n         transforms=albu_transforms),\n   dict(type='PackInputs')\n]\n```\n\n## Extend and use custom pipelines\n\n### A simple example of MyTransform\n\n1. Write a new pipeline in a file, e.g., in `my_pipeline.py`. It takes a dict as input and returns a dict.\n\n```python\nimport random\nfrom mmcv.transforms import BaseTransform\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass MyTransform(BaseTransform):\n    \"\"\"Add your transform\n\n    Args:\n        p (float): Probability of shifts. Default 0.5.\n    \"\"\"\n\n    def __init__(self, p=0.5):\n        self.p = p\n\n    def transform(self, results):\n        if random.random() > self.p:\n            results['dummy'] = True\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(p={self.p})')\n\n        return repr_str\n```\n\n2. Import and use the pipeline in your config file.\n\nMake sure the import is relative to where your train script is located.\n\n```python\ntrain_pipeline = [\n    ...\n    dict(type='MyTransform', p=0.2),\n    ...\n]\n```\n\n### An example of flipping\n\nHere we use a simple flipping transformation as example:\n\n```python\nimport random\nimport mmcv\nfrom mmcv.transforms import BaseTransform, TRANSFORMS\n\n@TRANSFORMS.register_module()\nclass MyFlip(BaseTransform):\n    def __init__(self, direction: str):\n        super().__init__()\n        self.direction = direction\n\n    def transform(self, results: dict) -> dict:\n        img = results['img']\n        results['img'] = mmcv.imflip(img, direction=self.direction)\n        return results\n```\n\nThus, we can instantiate a `MyFlip` object and use it to process the data dict.\n\n```python\nimport numpy as np\n\ntransform = MyFlip(direction='horizontal')\ndata_dict = {'img': np.random.rand(224, 224, 3)}\ndata_dict = transform(data_dict)\nprocessed_img = data_dict['img']\n```\n\nOr, we can use `MyFlip` transformation in data pipeline in our config file.\n\n```python\npipeline = [\n    ...\n    dict(type='MyFlip', direction='horizontal'),\n    ...\n]\n```\n\nNote that if you want to use `MyFlip` in config, you must ensure the file containing `MyFlip` is imported during the program run.\n"
  },
  {
    "path": "docs/en/index.rst",
    "content": "Welcome to MMagic's documentation!\n=====================================\n\nLanguages:\n`English <https://mmagic.readthedocs.io/en/latest/>`_\n|\n`简体中文 <https://mmagic.readthedocs.io/zh_CN/latest/>`_\n\nMMagic (**M**\\ultimodal **A**\\dvanced, **G**\\enerative, and **I**\\ntelligent **C**\\reation) is an open-source AIGC toolbox for professional AI researchers and machine learning engineers to explore image and video processing, editing and generation.\n\nMMagic supports various foundamental generative models, including:\n\n* Unconditional Generative Adversarial Networks (GANs)\n* Conditional Generative Adversarial Networks (GANs)\n* Internal Learning\n* Diffusion Models\n* And many other generative models are coming soon!\n\nMMagic supports various applications, including:\n\n- Text-to-Image\n- Image-to-image translation\n- 3D-aware generation\n- Image super-resolution\n- Video super-resolution\n- Video frame interpolation\n- Image inpainting\n- Image matting\n- Image restoration\n- Image colorization\n- Image generation\n- And many other applications are coming soon!\n\nMMagic is based on `PyTorch <https://pytorch.org>`_ and is a part of the `OpenMMLab project <https://openmmlab.com/>`_.\nCodes are available on `GitHub <https://github.com/open-mmlab/mmagic>`_.\n\n\nDocumentation\n=============\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Community\n\n   community/contributing.md\n   community/projects.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Get Started\n\n   get_started/overview.md\n   get_started/install.md\n   get_started/quick_run.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: User Guides\n\n   user_guides/config.md\n   user_guides/dataset_prepare.md\n   user_guides/inference.md\n   user_guides/train_test.md\n   user_guides/metrics.md\n   user_guides/visualization.md\n   user_guides/useful_tools.md\n   user_guides/deploy.md\n\n\n.. toctree::\n   :maxdepth: 2\n   :caption: Advanced Guides\n\n   advanced_guides/models.md\n   advanced_guides/dataset.md\n   advanced_guides/transforms.md\n   advanced_guides/losses.md\n   advanced_guides/evaluator.md\n   advanced_guides/structures.md\n   advanced_guides/data_preprocessor.md\n   advanced_guides/data_flow.md\n\n\n.. toctree::\n   :maxdepth: 2\n   :caption: How To\n\n   howto/models.md\n   howto/dataset.md\n   howto/transforms.md\n   howto/losses.md\n\n.. toctree::\n   :maxdepth: 1\n   :caption: FAQ\n\n   faq.md\n\n.. toctree::\n   :maxdepth: 2\n   :caption: Model Zoo\n\n   model_zoo/index.rst\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Dataset Zoo\n\n   dataset_zoo/index.rst\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Changelog\n\n   changelog.md\n\n.. toctree::\n   :maxdepth: 2\n   :caption: API Reference\n\n   mmagic.apis.inferencers <autoapi/mmagic/apis/inferencers/index.rst>\n   mmagic.structures <autoapi/mmagic/structures/index.rst>\n   mmagic.datasets <autoapi/mmagic/datasets/index.rst>\n   mmagic.datasets.transforms <autoapi/mmagic/datasets/transforms/index.rst>\n   mmagic.evaluation <autoapi/mmagic/evaluation/index.rst>\n   mmagic.visualization <autoapi/mmagic/visualization/index.rst>\n   mmagic.engine.hooks <autoapi/mmagic/engine/hooks/index.rst>\n   mmagic.engine.logging <autoapi/mmagic/engine/logging/index.rst>\n   mmagic.engine.optimizers <autoapi/mmagic/engine/optimizers/index.rst>\n   mmagic.engine.runner <autoapi/mmagic/engine/runner/index.rst>\n   mmagic.engine.schedulers <autoapi/mmagic/engine/schedulers/index.rst>\n   mmagic.models.archs <autoapi/mmagic/models/archs/index.rst>\n   mmagic.models.base_models <autoapi/mmagic/models/base_models/index.rst>\n   mmagic.models.losses <autoapi/mmagic/models/losses/index.rst>\n   mmagic.models.data_preprocessors <autoapi/mmagic/models/data_preprocessors/index.rst>\n   mmagic.models.utils <autoapi/mmagic/models/losses/utils.rst>\n   mmagic.models.editors <autoapi/mmagic/models/editors/index.rst>\n   mmagic.utils <autoapi/mmagic/utils/index.rst>\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Migration from MMEdit 0.x\n\n   migration/overview.md\n   migration/runtime.md\n   migration/models.md\n   migration/eval_test.md\n   migration/schedule.md\n   migration/data.md\n   migration/distributed_train.md\n   migration/optimizers.md\n   migration/visualization.md\n   migration/amp.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: Device Support\n\n   device/npu.md\n\n\n.. toctree::\n   :caption: Switch Language\n\n   switch_language.md\n\n\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`\n"
  },
  {
    "path": "docs/en/make.bat",
    "content": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset SOURCEDIR=.\nset BUILDDIR=_build\n\nif \"%1\" == \"\" goto help\n\n%SPHINXBUILD% >NUL 2>NUL\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.http://sphinx-doc.org/\n\texit /b 1\n)\n\n\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\ngoto end\n\n:help\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\n\n:end\npopd\n"
  },
  {
    "path": "docs/en/migration/amp.md",
    "content": "# Migration of AMP Training\n\nIn 0.x, MMEditing do not support AMP training for the entire forward process.\nInstead, users must use `auto_fp16` decorator to warp the specific submodule and convert the parameter of submodule to fp16.\nThis allows for fine-grained control of the model parameters, but is more cumbersome to use.\nIn addition, users need to handle operations such as scaling of the loss function during the training process by themselves.\n\nMMagic 1.x use `AmpOptimWrapper` provided by MMEngine.\nIn `AmpOptimWrapper.update_params`, gradient scaling and `GradScaler` updating is automatically performed.\nAnd in `optim_context` context manager, `auto_cast` is applied to the entire forward process.\n\nSpecifically, the difference between the 0.x and 1.x is as follows:\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x version </th>\n    <th> 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n# config\nrunner = dict(fp16_loss_scaler=dict(init_scale=512))\n```\n\n```python\n# code\nimport torch.nn as nn\nfrom mmedit.models.builder import build_model\nfrom mmedit.core.runners.fp16_utils import auto_fp16\n\n\nclass DemoModule(nn.Module):\n    def __init__(self, cfg):\n        self.net = build_model(cfg)\n\n    @auto_fp16\n    def forward(self, x):\n        return self.net(x)\n\nclass DemoModel(nn.Module):\n\n    def __init__(self, cfg):\n        super().__init__(self)\n        self.demo_network = DemoModule(cfg)\n\n    def train_step(self,\n                   data_batch,\n                   optimizer,\n                   ddp_reducer=None,\n                   loss_scaler=None,\n                   use_apex_amp=False,\n                   running_status=None):\n        # get data from data_batch\n        inputs = data_batch['img']\n        output = self.demo_network(inputs)\n\n        optimizer.zero_grad()\n        loss, log_vars = self.get_loss(data_dict_)\n\n        if ddp_reducer is not None:\n            ddp_reducer.prepare_for_backward(_find_tensors(loss_disc))\n\n        if loss_scaler:\n            # add support for fp16\n            loss_scaler.scale(loss_disc).backward()\n        elif use_apex_amp:\n            from apex import amp\n            with amp.scale_loss(loss_disc, optimizer,\n                    loss_id=0) as scaled_loss_disc:\n                scaled_loss_disc.backward()\n        else:\n            loss_disc.backward()\n\n        if loss_scaler:\n            loss_scaler.unscale_(optimizer)\n            loss_scaler.step(optimizer)\n        else:\n            optimizer.step()\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\n# config\noptim_wrapper = dict(\n    constructor='OptimWrapperConstructor',\n    generator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-06),\n        type='AmpOptimWrapper',  # use amp wrapper\n        loss_scale='dynamic'),\n    discriminator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-06),\n        type='AmpOptimWrapper',  # use amp wrapper\n        loss_scale='dynamic'))\n```\n\n```python\n# code\nimport torch.nn as nn\nfrom mmagic.registry import MODULES\nfrom mmengine.model import BaseModel\n\n\nclass DemoModule(nn.Module):\n    def __init__(self, cfg):\n        self.net = MODULES.build(cfg)\n\n    def forward(self, x):\n        return self.net(x)\n\nclass DemoModel(BaseModel):\n    def __init__(self, cfg):\n        super().__init__(self)\n        self.demo_network = DemoModule(cfg)\n\n    def train_step(self, data, optim_wrapper):\n        # get data from data_batch\n        data = self.data_preprocessor(data, True)\n        inputs = data['inputs']\n\n        with optim_wrapper.optim_context(self.discriminator):\n            output = self.demo_network(inputs)\n        loss_dict = self.get_loss(output)\n        # use parse_loss provide by `BaseModel`\n        loss, log_vars = self.parse_loss(loss_dict)\n        optimizer_wrapper.update_params(loss)\n\n        return log_vars\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nTo avoid user modifications to the configuration file, MMagic provides the `--amp` option in `train.py`, which allows the user to start AMP training without modifying the configuration file.\nUsers can start AMP training by following command:\n\n```bash\nbash tools/dist_train.sh CONFIG GPUS --amp\n\n# for slurm users\nbash tools/slurm_train.sh PARTITION JOB_NAME CONFIG WORK_DIR --amp\n```\n"
  },
  {
    "path": "docs/en/migration/data.md",
    "content": "# Migration of Data Settings\n\nThis section introduces the migration of data settings:\n\n- [Migration of Data Settings](#migration-of-data-settings)\n  - [Data pipelines](#data-pipelines)\n  - [Dataloader](#dataloader)\n\n## Data pipelines\n\nWe update data pipelines settings in MMagic 1.x. Important modifications are as following.\n\n- Remove normalization and color space transforms operations. They are moved from datasets transforms pipelines to data_preprocessor.\n- The original formatting transforms pipelines `Collect` and `ToTensor` are combined as `PackInputs`.\n  More details of data pipelines are shown in [transform guides](../howto/transforms.md).\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntrain_pipeline = [  # Training data processing pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        io_backend='disk',  # io backend\n        key='lq',  # Keys in results to find corresponding path\n        flag='unchanged'),  # flag for reading images\n    dict(type='LoadImageFromFile',  # Load images from files\n        io_backend='disk',  # io backend\n        key='gt',  # Keys in results to find corresponding path\n        flag='unchanged'),  # flag for reading images\n    dict(type='RescaleToZeroOne', keys=['lq', 'gt']),  # Rescale images from [0, 255] to [0, 1]\n    dict(type='Normalize',  # Augmentation pipeline that normalize the input images\n        keys=['lq', 'gt'],  # Images to be normalized\n        mean=[0, 0, 0],  # Mean values\n        std=[1, 1, 1],  # Standard variance\n        to_rgb=True),  # Change to RGB channel\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # Paired random crop\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='horizontal'),  # Flip direction\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip direction\n    dict(type='RandomTransposeHW',  # Random transpose h and w for images\n        keys=['lq', 'gt'],  # Images to be transposed\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='Collect',  # Pipeline that decides which keys in the data should be passed to the model\n        keys=['lq', 'gt'],  # Keys to pass to the model\n        meta_keys=['lq_path', 'gt_path']), # Meta information keys. In training, meta information is not needed\n    dict(type='ToTensor',  # Convert images to tensor\n        keys=['lq', 'gt'])  # Images to be converted to Tensor\n]\ntest_pipeline = [  # Test pipeline\n    dict(\n        type='LoadImageFromFile',  # Load images from files\n        io_backend='disk',  # io backend\n        key='lq',  # Keys in results to find corresponding path\n        flag='unchanged'),  # flag for reading images\n    dict(\n        type='LoadImageFromFile',  # Load images from files\n        io_backend='disk',  # io backend\n        key='gt',  # Keys in results to find corresponding path\n        flag='unchanged'),  # flag for reading images\n    dict(type='RescaleToZeroOne', keys=['lq', 'gt']),  # Rescale images from [0, 255] to [0, 1]\n    dict(\n        type='Normalize',  # Augmentation pipeline that normalize the input images\n        keys=['lq', 'gt'],  # Images to be normalized\n        mean=[0, 0, 0],  # Mean values\n        std=[1, 1, 1],  # Standard variance\n        to_rgb=True),  # Change to RGB channel\n    dict(type='Collect',  # Pipeline that decides which keys in the data should be passed to the model\n        keys=['lq', 'gt'],  # Keys to pass to the model\n        meta_keys=['lq_path', 'gt_path']),  # Meta information keys\n    dict(type='ToTensor',  # Convert images to tensor\n        keys=['lq', 'gt'])  # Images to be converted to Tensor\n]\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ntrain_pipeline = [  # Training data processing pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # Set value to destination keys\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # Paired random crop\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='horizontal'),  # Flip direction\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip direction\n    dict(type='RandomTransposeHW',  # Random transpose h and w for images\n        keys=['lq', 'gt'],  # Images to be transposed\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='PackInputs')  # The config of collecting data from current pipeline\n]\ntest_pipeline = [  # Test pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='PackInputs')  # The config of collecting data from current pipeline\n]\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n## Dataloader\n\nWe update dataloader settings in MMagic 1.x. Important modifications are as following.\n\n- The original `data` field is split to `train_dataloader`, `val_dataloader` and `test_dataloader`. This allows us to configure them in fine-grained. For example, you can specify different sampler and batch size during training and test.\n- The `samples_per_gpu` is renamed to `batch_size`.\n- The `workers_per_gpu` is renamed to `num_workers`.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ndata = dict(\n    # train\n    samples_per_gpu=16,  # Batch size of a single GPU\n    workers_per_gpu=4,  # Worker to pre-fetch data for each single GPU\n    drop_last=True,  # Use drop_last in data_loader\n    train=dict(  # Train dataset config\n        type='RepeatDataset',  # Repeated dataset for iter-based model\n        times=1000,  # Repeated times for RepeatDataset\n        dataset=dict(\n            type=train_dataset_type,  # Type of dataset\n            lq_folder='data/DIV2K/DIV2K_train_LR_bicubic/X2_sub',  # Path for lq folder\n            gt_folder='data/DIV2K/DIV2K_train_HR_sub',  # Path for gt folder\n            ann_file='data/DIV2K/meta_info_DIV2K800sub_GT.txt',  # Path for annotation file\n            pipeline=train_pipeline,  # See above for train_pipeline\n            scale=scale)),  # Scale factor for upsampling\n    # val\n    val_samples_per_gpu=1,  # Batch size of a single GPU for validation\n    val_workers_per_gpu=4,  # Worker to pre-fetch data for each single GPU for validation\n    val=dict(\n        type=val_dataset_type,  # Type of dataset\n        lq_folder='data/val_set5/Set5_bicLRx2',  # Path for lq folder\n        gt_folder='data/val_set5/Set5_mod12',  # Path for gt folder\n        pipeline=test_pipeline,  # See above for test_pipeline\n        scale=scale,  # Scale factor for upsampling\n        filename_tmpl='{}'),  # filename template\n    # test\n    test=dict(\n        type=val_dataset_type,  # Type of dataset\n        lq_folder='data/val_set5/Set5_bicLRx2',  # Path for lq folder\n        gt_folder='data/val_set5/Set5_mod12',  # Path for gt folder\n        pipeline=test_pipeline,  # See above for test_pipeline\n        scale=scale,  # Scale factor for upsampling\n        filename_tmpl='{}'))  # filename template\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ndataset_type = 'BasicImageDataset'  # The type of dataset\ndata_root = 'data'  # Root path of data\ntrain_dataloader = dict(\n    batch_size=16,\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # The type of data sampler\n    dataset=dict(  # Train dataset config\n        type=dataset_type,  # Type of dataset\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # Path of annotation file\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # Root path of data\n        data_prefix=dict(  # Prefix of image path\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # Filename template\n        pipeline=train_pipeline))\nval_dataloader = dict(\n    batch_size=1,\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    drop_last=False,  # Whether drop the last incomplete batch\n    sampler=dict(type='DefaultSampler', shuffle=False),  # The type of data sampler\n    dataset=dict(  # Validation dataset config\n        type=dataset_type,  # Type of dataset\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # Root path of data\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # Prefix of image path\n        pipeline=test_pipeline))\ntest_dataloader = val_dataloader\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/en/migration/distributed_train.md",
    "content": "# Migration of Distributed Training Settings\n\nWe have merged [MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x) into MMagic. Here is migration of Distributed Training Settings about MMGeneration.\n\nIn 0.x version, MMGeneration uses `DDPWrapper` and `DynamicRunner` to train static and dynamic model (e.g., PGGAN and StyleGANv2) respectively. In 1.x version, we use `MMSeparateDistributedDataParallel` provided by MMEngine to implement distributed training.\n\nThe configuration differences are shown below:\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Static Model in 0.x Version </th>\n    <th> Static Model in 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n# Use DDPWrapper\nuse_ddp_wrapper = True\nfind_unused_parameters = False\n\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=False)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=False)\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Dynamic Model in 0.x Version </th>\n    <th> Dynamic Model in 1.x Version </th>\n<tbody>\n<tr>\n\n<td valign=\"top\">\n\n```python\nuse_ddp_wrapper = False\nfind_unused_parameters = False\n\n# Use DynamicRunner\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=True) # set `find_unused_parameters` for dynamic models\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/en/migration/eval_test.md",
    "content": "# Migration of Evaluation and Testing Settings\n\nWe update evaluation settings in MMagic 1.x. Important modifications are as following.\n\n- The evaluation field is split to `val_evaluator` and `test_evaluator`. The `interval` is moved to `train_cfg.val_interval`.\n- The metrics to evaluation are moved from `test_cfg` to `val_evaluator` and `test_evaluator`.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntrain_cfg = None  # Training config\ntest_cfg = dict(  # Test config\n    metrics=['PSNR'],  # Metrics used during testing\n    crop_border=scale)  # Crop border during evaluation\n\nevaluation = dict(  # The config to build the evaluation hook\n    interval=5000,  # Evaluation interval\n    save_image=True,  # Save images during evaluation\n    gpu_collect=True)  # Use gpu collect\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nval_evaluator = [\n    dict(type='PSNR', crop_border=scale),  # The name of metrics to evaluate\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # Config of train loop type\nval_cfg = dict(type='ValLoop')  # The name of validation loop type\ntest_cfg = dict(type='TestLoop')  # The name of test loop type\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nWe have merged [MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x) into MMagic. Here is migration of Evaluation and Testing Settings about MMGeneration.\n\nThe evaluation field is splited to `val_evaluator` and `test_evaluator`. And it won't support `interval` and `save_best` arguments. The `interval` is moved to `train_cfg.val_interval`, see [the schedule settings](./schedule.md) and the `save_best` is moved to `default_hooks.checkpoint.save_best`.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x Version </th>\n    <th> 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nevaluation = dict(\n    type='GenerativeEvalHook',\n    interval=10000,\n    metrics=[\n        dict(\n            type='FID',\n            num_images=50000,\n            bgr2rgb=True,\n            inception_args=dict(type='StyleGAN')),\n        dict(type='IS', num_images=50000)\n    ],\n    best_metric=['fid', 'is'],\n    sample_kwargs=dict(sample_model='ema'))\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(\n            type='FID',\n            prefix='FID-Full-50k',\n            fake_nums=50000,\n            inception_style='StyleGAN',\n            sample_model='orig')\n        dict(\n            type='IS',\n            prefix='IS-50k',\n            fake_nums=50000)])\n# set best config\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        less_keys=['FID-Full-50k/fid'],\n        greater_keys=['IS-50k/is'],\n        save_optimizer=True,\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n        rule=['less', 'greater']))\ntest_evaluator = val_evaluator\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nTo evaluate and test the model correctly, we need to set specific loop in `val_cfg` and `test_cfg`.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Static Model in 0.x Version </th>\n    <th> Static Model in 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntotal_iters = 1000000\n\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=False,\n    pass_training_status=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ntrain_cfg = dict(\n    by_epoch=False,  # use iteration based training\n    max_iters=1000000,  # max training iteration\n    val_begin=1,\n    val_interval=10000)  # evaluation interval\nval_cfg = dict(type='MultiValLoop')  # specific loop in validation\ntest_cfg = dict(type='MultiTestLoop')  # specific loop in testing\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/en/migration/models.md",
    "content": "# Migration of Model Settings\n\nWe update model settings in MMagic 1.x. Important modifications are as following.\n\n- Remove `pretrained` fields.\n- Add `train_cfg` and `test_cfg` fields in model settings.\n- Add `data_preprocessor` fields. Normalization and color space transforms operations are moved from datasets transforms pipelines to data_preprocessor. We will introduce data_preprocessor later.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BasicRestorer',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSR',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pretrained=None,\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'))  # Config for pixel loss model training and testing settings\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BaseEditModel',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSRNet',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')  # Config for pixel loss\n    train_cfg=dict(),  # Config of training model.\n    test_cfg=dict(),  # Config of testing model.\n    data_preprocessor=dict(  # The Config to build data preprocessor\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255.,\n                                                             255.]))\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nWe refactor models in MMagic 1.x. Important modifications are as following.\n\n- The `models` in MMagic 1.x is refactored to six parts: `archs`, `base_models`, `data_preprocessors`, `editors`, `diffusion_schedulers` and `losses`.\n- Add `data_preprocessor` module in `models`. Normalization and color space transforms operations are moved from datasets transforms pipelines to data_preprocessor. The data out from the data pipeline is transformed by this module and then fed into the model.\n\nMore details of models are shown in [model guides](../howto/models.md).\n"
  },
  {
    "path": "docs/en/migration/optimizers.md",
    "content": "# Migration of Optimizers\n\nWe have merged [MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x) into MMagic. Here is migration of Optimizers about MMGeneration.\n\nIn version 0.x, MMGeneration uses PyTorch's native Optimizer, which only provides general parameter optimization.\nIn version 1.x, we use `OptimizerWrapper` provided by MMEngine.\n\nCompared to PyTorch's `Optimizer`, `OptimizerWrapper` supports the following features:\n\n- `OptimizerWrapper.update_params` implement `zero_grad`, `backward` and `step` in a single function.\n- Support gradient accumulation automatically.\n- Provide a context manager named `OptimizerWrapper.optim_context` to warp the forward process. `optim_context` can automatically call `torch.no_sync` according to current number of updating iteration. In AMP (auto mixed precision) training, `autocast` is called in `optim_context` as well.\n\nFor GAN models, generator and discriminator use different optimizer and training schedule.\nTo ensure that the GAN model's function signature of `train_step` is consistent with other models, we use `OptimWrapperDict`, inherited from `OptimizerWrapper`, to wrap the optimizer of the generator and discriminator.\nTo automate this process MMagic implement `MultiOptimWrapperContructor`.\nAnd you should specify this constructor in your config is you want to train GAN model.\n\nThe config for the 0.x and 1.x versions are shown below:\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x Version </th>\n    <th> 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\noptimizer = dict(\n    generator=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6),\n    discriminator=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6))\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n> Note that, in the 1.x, MMGeneration uses `OptimWrapper` to realize gradient accumulation. This make the config of `discriminator_steps` (training trick for updating the generator once after multiple updates of the discriminator) and gradient accumulation different between 0.x and 1.x version.\n\n- In 0.x version,  we use `disc_steps`, `gen_steps` and `batch_accumulation_steps` in configs. `disc_steps` and `batch_accumulation_steps` are counted by the number of calls of `train_step` (is also the number of data reads from the dataloader). Therefore the number of consecutive updates of the discriminator is `disc_steps // batch_accumulation_steps`. And for generators, `gen_steps` is the number of times the generator actually updates continuously.\n- In 1.x version, we use `discriminator_steps`, `generator_steps` and `accumulative_counts` in configs. `discriminator_steps` and `generator_steps` are the number of consecutive updates to itself before updating other modules.\n\nTake config of BigGAN-128 as example.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x Version </th>\n    <th> 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BasiccGAN',\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True),\n    gan_loss=dict(type='GANLoss', gan_type='hinge'))\n\n# continuous update discriminator for `disc_steps // batch_accumulation_steps = 8 // 8 = 1` times\n# continuous update generator for `gen_steps = 1` times\n# generators and discriminators perform `batch_accumulation_steps = 8` times gradient accumulations before each update\ntrain_cfg = dict(\n    disc_steps=8, gen_steps=1, batch_accumulation_steps=8, use_ema=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True),\n    # continuous update discriminator for `discriminator_steps = 1` times\n    # continuous update generator for `generator_steps = 1` times\n    generator_steps=1,\n    discriminator_steps=1)\n\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        # generator perform `accumulative_counts = 8` times gradient accumulations before each update\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        # discriminator perform `accumulative_counts = 8` times gradient accumulations before each update\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/en/migration/overview.md",
    "content": "# Overview\n\nThis section introduces the following contents in terms of migration from MMEditing 0.x\n\n- [Overview](#overview)\n  - [New dependencies](#new-dependencies)\n  - [Overall structures](#overall-structures)\n  - [Other config settings](#other-config-settings)\n\n## New dependencies\n\nMMagic 1.x depends on some new packages, you can prepare a new clean environment and install it again according to the [install tutorial](../get_started/install.md).\n\n## Overall structures\n\nWe refactor overall structures in MMagic 1.x as follows.\n\n- The  `core` in the old versions of MMEdit is split into `engine`, `evaluation`, `structures`, and `visualization`\n- The `pipelines` of `datasets` in the old versions of MMEdit is refactored to `transforms`\n- The `models` in MMagic 1.x is refactored to six parts: `archs`, `base_models`, `data_preprocessors`, `editors`, `diffusion_schedulers`, and `losses`.\n\n## Other config settings\n\nWe rename the config file to the new template: `{model_settings}_{module_setting}_{training_setting}_{datasets_info}`.\n\nMore details of config are shown in [config guides](../user_guides/config.md).\n"
  },
  {
    "path": "docs/en/migration/runtime.md",
    "content": "# Migration of Runtime Settings\n\nWe update runtime settings in MMagic 1.x. Important modifications are as following.\n\n- The `checkpoint_config` is moved to `default_hooks.checkpoint` and the `log_config` is moved to `default_hooks.logger`. And we move many hooks settings from the script code to the `default_hooks` field in the runtime configuration.\n- The `resume_from` is removed. And we use `resume` to replace it.\n  - If resume=True and load_from is not None, resume training from the checkpoint in load_from.\n  - If resume=True and load_from is None, try to resume from the latest checkpoint in the work directory.\n  - If resume=False and load_from is not None, only load the checkpoint, not resume training.\n  - If resume=False and load_from is None, do not load nor resume.\n- The `dist_params` field is a sub field of `env_cfg` now. And there are some new configurations in the `env_cfg`.\n- The `workflow` related functionalities are removed.\n- New field `visualizer`: The visualizer is a new design. We use a visualizer instance in the runner to handle results & log visualization and save to different backends,  like Local, TensorBoard and Wandb.\n- New field `default_scope`: The start point to search module for all registries.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ncheckpoint_config = dict(  # Config to set the checkpoint hook, Refer to https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py for implementation.\n    interval=5000,  # The save interval is 5000 iterations\n    save_optimizer=True,  # Also save optimizers\n    by_epoch=False)  # Count by iterations\nlog_config = dict(  # Config to register logger hook\n    interval=100,  # Interval to print the log\n    hooks=[\n        dict(type='TextLoggerHook', by_epoch=False),  # The logger used to record the training process\n        dict(type='TensorboardLoggerHook'),  # The Tensorboard logger is also supported\n    ])\nvisual_config = None  # Visual config, we do not use it.\n# runtime settings\ndist_params = dict(backend='nccl')  # Parameters to setup distributed training, the port can also be set\nlog_level = 'INFO'  # The level of logging\nload_from = None # load models as a pre-trained model from a given path. This will not resume training\nresume_from = None # Resume checkpoints from a given path, the training will be resumed from the iteration when the checkpoint's is saved\nworkflow = [('train', 1)]  # Workflow for runner. [('train', 1)] means there is only one workflow and the workflow named 'train' is executed once. Keep this unchanged when training current matting models\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ndefault_hooks = dict(  # Used to build default hooks\n    checkpoint=dict(  # Config to set the checkpoint hook\n        type='CheckpointHook',\n        interval=5000,  # The save interval is 5000 iterations\n        save_optimizer=True,\n        by_epoch=False,  # Count by iterations\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # Config to register logger hook\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\ndefault_scope = 'mmedit' # Used to set registries location\nenv_cfg = dict(  # Parameters to setup distributed training, the port can also be set\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\nlog_level = 'INFO'  # The level of logging\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # Used to build log processor\nload_from = None  # load models as a pre-trained model from a given path. This will not resume training.\nresume = False  # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved.\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/en/migration/schedule.md",
    "content": "# Migration of Schedule Settings\n\nWe update schedule settings in MMagic 1.x. Important modifications are as following.\n\n- Now we use `optim_wrapper` field to specify all configuration about the optimization process. And the `optimizer` is a sub field of `optim_wrapper` now.\n- The `lr_config` field is removed and we use new `param_scheduler` to replace it.\n- The `total_iters` field is moved to `train_cfg` as `max_iters`, `val_cfg` and `test_cfg`, which configure the loop in training, validation and test.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\noptimizers = dict(generator=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))  # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch\ntotal_iters = 300000 # Total training iters\nlr_config = dict( # Learning rate scheduler config used to register LrUpdater hook\n    policy='Step', by_epoch=False, step=[200000], gamma=0.5)  # The policy of scheduler\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4),\n    )\n)  # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch.\nparam_scheduler = dict(  # Config of learning policy\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)  # The policy of scheduler\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # Config of train loop type\nval_cfg = dict(type='ValLoop')  # The name of validation loop type\ntest_cfg = dict(type='TestLoop')  # The name of test loop type\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n> More details of schedule settings are shown in [MMEngine Documents](https://github.com/open-mmlab/mmengine/blob/main/docs/en/migration/param_scheduler.md).\n"
  },
  {
    "path": "docs/en/migration/visualization.md",
    "content": "# Migration of Visualization\n\nIn 0.x, MMEditing use `VisualizationHook` to visualize results in training process. In 1.x version, we unify the function of those hooks into `BasicVisualizationHook` / `VisualizationHook`. Additionally, follow the design of MMEngine, we implement `ConcatImageVisualizer` / `Visualizer` and a group of `VisBackend` to draw and save the visualization results.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x version </th>\n    <th> 1.x Version </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nvisual_config = dict(\n    type='VisualizationHook',\n    output_dir='visual',\n    interval=1000,\n    res_name_list=['gt_img', 'masked_img', 'fake_res', 'fake_img'],\n)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\nTo learn more about the visualization function, please refers to [this tutorial](../user_guides/visualization.md).\n"
  },
  {
    "path": "docs/en/switch_language.md",
    "content": "# <a href='https://mmagic.readthedocs.io/en/latest/'>English</a>\n\n# <a href='https://mmagic.readthedocs.io/zh_CN/latest/'>简体中文</a>\n"
  },
  {
    "path": "docs/en/user_guides/config.md",
    "content": "# Tutorial 1: Learn about Configs in MMagic\n\nWe incorporate modular and inheritance design into our config system, which is convenient to conduct various experiments.\nIf you wish to inspect the config file, you may run `python tools/misc/print_config.py /PATH/TO/CONFIG` to see the complete config.\n\nYou can learn about the usage of our config system according to the following tutorials.\n\n- [Tutorial 1: Learn about Configs in MMagic](#tutorial-1-learn-about-configs-in-mmagic)\n  - [Modify config through script arguments](#modify-config-through-script-arguments)\n  - [Config file structure](#config-file-structure)\n  - [Config name style](#config-name-style)\n  - [An example of EDSR](#an-example-of-edsr)\n    - [Model config](#model-config)\n    - [Data config](#data-config)\n      - [Data pipeline](#data-pipeline)\n      - [Dataloader](#dataloader)\n    - [Evaluation config](#evaluation-config)\n    - [Training and testing config](#training-and-testing-config)\n    - [Optimization config](#optimization-config)\n    - [Hook config](#hook-config)\n    - [Runtime config](#runtime-config)\n  - [An example of StyleGAN2](#an-example-of-stylegan2)\n    - [Model config](#model-config-1)\n    - [Dataset and evaluator config](#dataset-and-evaluator-config)\n    - [Training and testing config](#training-and-testing-config-1)\n    - [Optimization config](#optimization-config-1)\n    - [Hook config](#hook-config-1)\n    - [Runtime config](#runtime-config-1)\n  - [Other examples](#other-examples)\n    - [An example of config system for inpainting](#an-example-of-config-system-for-inpainting)\n    - [An example of config system for matting](#an-example-of-config-system-for-matting)\n    - [An example of config system for restoration](#an-example-of-config-system-for-restoration)\n\n## Modify config through script arguments\n\nWhen submitting jobs using `tools/train.py` or `tools/test.py`, you may specify `--cfg-options` to in-place modify the config.\n\n- Update config keys of dict chains.\n\n  The config options can be specified following the order of the dict keys in the original config.\n  For example, `--cfg-options test_cfg.use_ema=False` changes the default sampling model to the original generator,\n  and  `--cfg-options train_dataloader.batch_size=8` changes the batch size of train dataloader.\n\n- Update keys inside a list of configs.\n\n  Some config dicts are composed as a list in your config.\n  For example, the training pipeline `train_dataloader.dataset.pipeline` is normally a list\n  e.g. `[dict(type='LoadImageFromFile'), ...]`. If you want to change `'LoadImageFromFile'` to `'LoadImageFromWebcam'` in the pipeline,\n  you may specify `--cfg-options train_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam`.\n  The training pipeline `train_pipeline` is normally a list\n  e.g. `[dict(type='LoadImageFromFile'), ...]`. If you want to change `'LoadImageFromFile'` to `'LoadMask'` in the pipeline,\n  you may specify `--cfg-options train_pipeline.0.type=LoadMask`.\n\n- Update values of list/tuples.\n\n  If the value to be updated is a list or a tuple. You can set `--cfg-options key=\"[a,b]\"` or `--cfg-options key=a,b`. It also allows nested list/tuple values, e.g., `--cfg-options key=\"[(a,b),(c,d)]\"`. Note that the quotation mark \" is necessary to support list/tuple data types, and that **NO** white space is allowed inside the quotation marks in the specified value.\n\n## Config file structure\n\nThere are 3 basic component types under `config/_base_`: datasets, models and default_runtime.\nMany methods could be easily constructed with one of each like AOT-GAN, EDVR, GLEAN, StyleGAN2, CycleGAN, SinGAN, etc.\nConfigs consisting of components from `_base_` are called _primitive_.\n\nFor all configs under the same folder, it is recommended to have only **one** _primitive_ config. All other configs should inherit from the _primitive_ config. In this way, the maximum of inheritance level is 3.\n\nFor easy understanding, we recommend contributors to inherit from existing methods.\nFor example, if some modification is made base on BasicVSR,\nuser may first inherit the basic BasicVSR structure by specifying `_base_ = ../basicvsr/basicvsr_reds4.py`,\nthen modify the necessary fields in the config files.\nIf some modification is made base on StyleGAN2,\nuser may first inherit the basic StyleGAN2 structure by specifying `_base_ = ../styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py`,\nthen modify the necessary fields in the config files.\n\nIf you are building an entirely new method that does not share the structure with any of the existing methods,\nyou may create a folder `xxx` under `configs`,\n\nPlease refer to [MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md) for detailed documentation.\n\n## Config name style\n\n```\n{model}_[module setting]_{training schedule}_{dataset}\n```\n\n`{xxx}` is required field and `[yyy]` is optional.\n\n- `{model}`: model type like `stylegan`, `dcgan`, `basicvsr`, `dim`, etc.\n  Settings referred in the original paper are included in this field as well (e.g., `Stylegan2-config-f`, `edvrm` of `edvrm_8xb4-600k_reds`.)\n- `[module setting]`: specific setting for some modules, including Encoder, Decoder, Generator, Discriminator, Normalization, loss, Activation, etc. E.g. `c64n7` of `basicvsr-pp_c64n7_8xb1-600k_reds4`, learning rate `Glr4e-4_Dlr1e-4` for dcgan, `gamma32.8` for stylegan3, `woReLUInplace` in sagan. In this section, information from different submodules (e.g., generator and discriminator) are connected with `_`.\n- `{training_scheduler}`: specific setting for training, including batch_size, schedule, etc. For example, learning rate (e.g., `lr1e-3`), number of gpu and batch size is used (e.g., `8xb32`), and total iterations (e.g., `160kiter`) or number of images shown in the discriminator (e.g., `12Mimgs`).\n- `{dataset}`: dataset name and data size info like `celeba-256x256` of `deepfillv1_4xb4_celeba-256x256`, `reds4` of `basicvsr_2xb4_reds4`, `ffhq`, `lsun-car`, `celeba-hq`.\n\n## An example of EDSR\n\nTo help the users have a basic idea of a complete config,\nwe make a brief comments on the [config of the EDSR model](https://github.com/open-mmlab/mmagic/blob/main/configs/edsr/edsr_x2c64b16_g1_300k_div2k.py) we implemented as the following.\nFor more detailed usage and the corresponding alternative for each modules,\nplease refer to the API documentation and the [tutorial in MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md).\n\n### Model config\n\nIn MMagic's config, we use model fields to set up a model.\n\n```python\nmodel = dict(\n    type='BaseEditModel',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSRNet',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')  # Config for pixel loss\n    train_cfg=dict(),  # Config of training model.\n    test_cfg=dict(),  # Config of testing model.\n    data_preprocessor=dict(  # The Config to build data preprocessor\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255.,\n                                                             255.]))\n```\n\n### Data config\n\n[Dataloaders](https://pytorch.org/docs/stable/data.html?highlight=data%20loader#torch.utils.data.DataLoader) are required for the training, validation, and testing of the [runner](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html).\nDataset and data pipeline need to be set to build the dataloader. Due to the complexity of this part, we use intermediate variables to simplify the writing of dataloader configs.\n\n#### Data pipeline\n\n```python\ntrain_pipeline = [  # Training data processing pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find the corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find the corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # Set value to destination keys\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # Paired random crop\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='horizontal'),  # Flip direction\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip direction\n    dict(type='RandomTransposeHW',  # Random transpose h and w for images\n        keys=['lq', 'gt'],  # Images to be transposed\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='PackInputs')  # The config of collecting data from the current pipeline\n]\ntest_pipeline = [  # Test pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='PackInputs')  # The config of collecting data from the current pipeline\n]\n```\n\n#### Dataloader\n\n```python\ndataset_type = 'BasicImageDataset'  # The type of dataset\ndata_root = 'data'  # Root path of data\ntrain_dataloader = dict(\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # The type of data sampler\n    dataset=dict(  # Train dataset config\n        type=dataset_type,  # Type of dataset\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # Path of annotation file\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # Root path of data\n        data_prefix=dict(  # Prefix of image path\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # Filename template\n        pipeline=train_pipeline))\nval_dataloader = dict(\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    drop_last=False,  # Whether drop the last incomplete batch\n    sampler=dict(type='DefaultSampler', shuffle=False),  # The type of data sampler\n    dataset=dict(  # Validation dataset config\n        type=dataset_type,  # Type of dataset\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # Root path of data\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # Prefix of image path\n        pipeline=test_pipeline))\ntest_dataloader = val_dataloader\n```\n\n### Evaluation config\n\n[Evaluators](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html) are used to compute the metrics of the trained model on the validation and testing datasets.\nThe config of evaluators consists of one or a list of metric configs:\n\n```python\nval_evaluator = [\n    dict(type='MAE'),  # The name of metrics to evaluate\n    dict(type='PSNR', crop_border=scale),  # The name of metrics to evaluate\n    dict(type='SSIM', crop_border=scale),  # The name of metrics to evaluate\n]\ntest_evaluator = val_evaluator # The config for testing evaluator\n```\n\n### Training and testing config\n\nMMEngine's runner uses Loop to control the training, validation, and testing processes.\nUsers can set the maximum training iteration and validation intervals with these fields.\n\n```python\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',  # The name of train loop type\n    max_iters=300000,  # The number of total iterations\n    val_interval=5000,  # The number of validation interval iterations\n)\nval_cfg = dict(type='ValLoop')  # The name of validation loop type\ntest_cfg = dict(type='TestLoop')  # The name of test loop type\n```\n\n### Optimization config\n\n`optim_wrapper` is the field to configure optimization related settings.\nThe optimizer wrapper not only provides the functions of the optimizer, but also supports functions such as gradient clipping, mixed precision training, etc. Find more in [optimizer wrapper tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html).\n\n```python\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.00001),\n    )\n)  # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch.\n```\n\n`param_scheduler` is a field that configures methods of adjusting optimization hyper-parameters such as learning rate and momentum.\nUsers can combine multiple schedulers to create a desired parameter adjustment strategy.\nFind more in [parameter scheduler tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/param_scheduler.html).\n\n```python\nparam_scheduler = dict(  # Config of learning policy\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n```\n\n### Hook config\n\nUsers can attach hooks to training, validation, and testing loops to insert some operations during running. There are two different hook fields, one is `default_hooks` and the other is `custom_hooks`.\n\n`default_hooks` is a dict of hook configs. `default_hooks` are the hooks must required at runtime. They have default priority which should not be modified. If not set, runner will use the default values. To disable a default hook, users can set its config to `None`.\n\n```python\ndefault_hooks = dict(  # Used to build default hooks\n    checkpoint=dict(  # Config to set the checkpoint hook\n        type='CheckpointHook',\n        interval=5000,  # The save interval is 5000 iterations\n        save_optimizer=True,\n        by_epoch=False,  # Count by iterations\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # Config to register logger hook\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n```\n\n`custom_hooks` is a list of hook configs. Users can develop there own hooks and insert them in this field.\n\n```python\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)] # Config of visualization hook\n```\n\n### Runtime config\n\n```python\ndefault_scope = 'mmagic' # Used to set registries location\nenv_cfg = dict(  # Parameters to setup distributed training, the port can also be set\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\nlog_level = 'INFO'  # The level of logging\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # Used to build log processor\nload_from = None  # load models as a pre-trained model from a given path. This will not resume training.\nresume = False  # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved.\n```\n\n## An example of StyleGAN2\n\nTaking [Stylegan2 at 1024x1024 scale](https://github.com/open-mmlab/mmagic/blob/main/configs//styleganv2/stylegan2_c2_8xb4-fp16-global-800kiters_quicktest-ffhq-256x256.py) as an example,\nwe introduce each field in the config according to different function modules.\n\n### Model config\n\nIn addition to neural network components such as generator, discriminator etc, it also requires `data_preprocessor`, `loss_config`, and some of them contains `ema_config`.\n`data_preprocessor` is responsible for processing a batch of data output by dataloader.\n`loss_config` is responsible for weight of loss terms.\n`ema_config` is responsible for exponential moving average (EMA) operation for generator.\n\n```python\nmodel = dict(\n    type='StyleGAN2',  # The name of the model\n    data_preprocessor=dict(type='DataPreprocessor'),  # The config of data preprocessor, usually includs image normalization and padding\n    generator=dict(  # The config for generator\n        type='StyleGANv2Generator',  # The name of the generator\n        out_size=1024,  # The output resolution of the generator\n        style_channels=512),  # The number of style channels of the generator\n    discriminator=dict(  # The config for discriminator\n        type='StyleGAN2Discriminator',  # The name of the discriminator\n        in_size=1024),  # The input resolution of the discriminator\n    ema_config=dict(  # The config for EMA\n        type='ExponentialMovingAverage',  # Specific the type of Average model\n        interval=1,  # The interval of EMA operation\n        momentum=0.9977843871238888),  # The momentum of EMA operation\n    loss_config=dict(  # The config for loss terms\n        r1_loss_weight=80.0,  # The weight for r1 gradient penalty\n        r1_interval=16,  # The interval of r1 gradient penalty\n        norm_mode='HWC',  # The normalization mode for r1 gradient penalty\n        g_reg_interval=4,  # The interval for generator's regularization\n        g_reg_weight=8.0,  # The weight for generator's regularization\n        pl_batch_shrink=2))  # The factor of shrinking the batch size in path length regularization\n```\n\n### Dataset and evaluator config\n\n[Dataloaders](https://pytorch.org/docs/stable/data.html?highlight=data%20loader#torch.utils.data.DataLoader) are required for the training, validation, and testing of the [runner](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html).\nDataset and data pipeline need to be set to build the dataloader. Due to the complexity of this part, we use intermediate variables to simplify the writing of dataloader configs.\n\n```python\ndataset_type = 'BasicImageDataset'  # Dataset type, this will be used to define the dataset\ndata_root = './data/ffhq/'  # Root path of data\n\ntrain_pipeline = [  # Training data process pipeline\n    dict(type='LoadImageFromFile', key='img'),  # First pipeline to load images from file path\n    dict(type='Flip', keys=['img'], direction='horizontal'),  # Argumentation pipeline that flip the images\n    dict(type='PackInputs', keys=['img'])  # The last pipeline that formats the annotation data (if have) and decides which keys in the data should be packed into data_samples\n]\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),  # First pipeline to load images from file path\n    dict(type='PackInputs', keys=['img'])  # The last pipeline that formats the annotation data (if have) and decides which keys in the data should be packed into data_samples\n]\ntrain_dataloader = dict(  # The config of train dataloader\n    batch_size=4,  # Batch size of a single GPU\n    num_workers=8,  # Worker to pre-fetch data for each single GPU\n    persistent_workers=True,  # If ``True``, the dataloader will not shutdown the worker processes after an epoch end, which can accelerate training speed.\n    sampler=dict(  # The config of training data sampler\n        type='InfiniteSampler',  # InfiniteSampler for iteratiion-based training. Refers to https://github.com/open-mmlab/mmengine/blob/fe0eb0a5bbc8bf816d5649bfdd34908c258eb245/mmengine/dataset/sampler.py#L107\n        shuffle=True),  # Whether randomly shuffle the training data\n    dataset=dict(  # The config of the training dataset\n        type=dataset_type,\n        data_root=data_root,\n        pipeline=train_pipeline))\nval_dataloader = dict(  # The config of validation dataloader\n    batch_size=4,  # Batch size of a single GPU\n    num_workers=8,  # Worker to pre-fetch data for each single GPU\n    dataset=dict(  # The config of the validation dataset\n        type=dataset_type,\n        data_root=data_root,\n        pipeline=val_pipeline),\n    sampler=dict(  # The config of validatioin data sampler\n        type='DefaultSampler',  # DefaultSampler which supports both distributed and non-distributed training. Refer to https://github.com/open-mmlab/mmengine/blob/fe0eb0a5bbc8bf816d5649bfdd34908c258eb245/mmengine/dataset/sampler.py#L14\n        shuffle=False),  # Whether randomly shuffle the validation data\n    persistent_workers=True)\ntest_dataloader = val_dataloader  # The config of the testing dataloader\n```\n\n[Evaluators](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html) are used to compute the metrics of the trained model on the validation and testing datasets.\nThe config of evaluators consists of one or a list of metric configs:\n\n```python\nval_evaluator = dict(  # The config for validation evaluator\n    type='Evaluator',  # The type of evaluation\n    metrics=[  # The config for metrics\n        dict(\n            type='FrechetInceptionDistance',\n            prefix='FID-Full-50k',\n            fake_nums=50000,\n            inception_style='StyleGAN',\n            sample_model='ema'),\n        dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n        dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n    ])\ntest_evaluator = val_evaluator  # The config for testing evaluator\n```\n\n### Training and testing config\n\nMMEngine's runner uses Loop to control the training, validation, and testing processes.\nUsers can set the maximum training iteration and validation intervals with these fields.\n\n```python\ntrain_cfg = dict(  # The config for training\n    by_epoch=False,  # Set `by_epoch` as False to use iteration-based training\n    val_begin=1,  # Which iteration to start the validation\n    val_interval=10000,  # Validation intervals\n    max_iters=800002)  # Maximum training iterations\nval_cfg = dict(type='MultiValLoop')  # The validation loop type\ntest_cfg = dict(type='MultiTestLoop')  # The testing loop type\n```\n\n### Optimization config\n\n`optim_wrapper` is the field to configure optimization related settings.\nThe optimizer wrapper not only provides the functions of the optimizer, but also supports functions such as gradient clipping, mixed precision training, etc. Find more in [optimizer wrapper tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html).\n\n```python\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        optimizer=dict(type='Adam', lr=0.0016, betas=(0, 0.9919919678228657))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam',\n            lr=0.0018823529411764706,\n            betas=(0, 0.9905854573074332))))\n```\n\n`param_scheduler` is a field that configures methods of adjusting optimization hyperparameters such as learning rate and momentum.\nUsers can combine multiple schedulers to create a desired parameter adjustment strategy.\nFind more in [parameter scheduler tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/param_scheduler.html).\nSince StyleGAN2 do not use parameter scheduler, we use config in [CycleGAN](https://github.com/open-mmlab/mmagic/blob/main/configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py) as an example:\n\n```python\n# parameter scheduler in CycleGAN config\nparam_scheduler = dict(\n    type='LinearLrInterval',  # The type of scheduler\n    interval=400,  # The interval to update the learning rate\n    by_epoch=False,  # The scheduler is called by iteration\n    start_factor=0.0002,  # The number we multiply parameter value in the first iteration\n    end_factor=0,  # The number we multiply parameter value at the end of linear changing process.\n    begin=40000,  # The start iteration of the scheduler\n    end=80000)  # The end iteration of the scheduler\n```\n\n### Hook config\n\nUsers can attach hooks to training, validation, and testing loops to insert some operations during running. There are two different hook fields, one is `default_hooks` and the other is `custom_hooks`.\n\n`default_hooks` is a dict of hook configs. `default_hooks` are the hooks must required at runtime. They have default priority which should not be modified. If not set, runner will use the default values. To disable a default hook, users can set its config to `None`.\n\n```python\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100, log_metric_by_epoch=False),\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        less_keys=['FID-Full-50k/fid'],\n        greater_keys=['IS-50k/is'],\n        save_optimizer=True,\n        save_best='FID-Full-50k/fid'))\n```\n\n`custom_hooks` is a list of hook configs. Users can develop there own hooks and insert them in this field.\n\n```python\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n```\n\n### Runtime config\n\n```python\ndefault_scope = 'mmagic'  # The default registry scope to find modules. Refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html\n\n# config for environment\nenv_cfg = dict(\n    cudnn_benchmark=True,  # whether to enable cudnn benchmark.\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),  # set multi process parameters.\n    dist_cfg=dict(backend='nccl'),  # set distributed parameters.\n)\n\nlog_level = 'INFO'  # The level of logging\nlog_processor = dict(\n    type='LogProcessor',  # log processor to process runtime logs\n    by_epoch=False)  # print log by iteration\nload_from = None  # load model checkpoint as a pre-trained model for a given path\nresume = False  # Whether to resume from the checkpoint define in `load_from`. If `load_from` is `None`, it will resume the latest checkpoint in `work_dir`\n```\n\n## Other examples\n\n### An example of config system for inpainting\n\nTo help the users have a basic idea of a complete config and the modules in a inpainting system,\nwe make brief comments on the config of Global&Local as the following.\nFor more detailed usage and the corresponding alternative for each modules, please refer to the API documentation.\n\n```python\nmodel = dict(\n    type='GLInpaintor', # The name of inpaintor\n    data_preprocessor=dict(\n        type='DataPreprocessor', # The name of data preprocessor\n        mean=[127.5], # Mean value used in data normalization\n        std=[127.5], # Std value used in data normalization\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder', # The name of encoder-decoder\n        encoder=dict(type='GLEncoder', norm_cfg=dict(type='SyncBN')), # The config of encoder\n        decoder=dict(type='GLDecoder', norm_cfg=dict(type='SyncBN')), # The config of decoder\n        dilation_neck=dict(\n            type='GLDilationNeck', norm_cfg=dict(type='SyncBN'))), # The config of dilation neck\n    disc=dict(\n        type='GLDiscs', # The name of discriminator\n        global_disc_cfg=dict(\n            in_channels=3, # The input channel of discriminator\n            max_channels=512, # The maximum middle channel in discriminator\n            fc_in_channels=512 * 4 * 4, # The input channel of last fc layer\n            fc_out_channels=1024, # The output channel of last fc channel\n            num_convs=6, # The number of convs used in discriminator\n            norm_cfg=dict(type='SyncBN') # The config of norm layer\n        ),\n        local_disc_cfg=dict(\n            in_channels=3, # The input channel of discriminator\n            max_channels=512, # The maximum middle channel in discriminator\n            fc_in_channels=512 * 4 * 4, # The input channel of last fc layer\n            fc_out_channels=1024, # The output channel of last fc channel\n            num_convs=5, # The number of convs used in discriminator\n            norm_cfg=dict(type='SyncBN') # The config of norm layer\n        ),\n    ),\n    loss_gan=dict(\n        type='GANLoss', # The name of GAN loss\n        gan_type='vanilla', # The type of GAN loss\n        loss_weight=0.001 # The weight of GAN loss\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss', # The type of l1 loss\n        loss_weight=1.0 # The weight of l1 loss\n    ))\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',# The name of train loop type\n    max_iters=500002, # The number of total iterations\n    val_interval=50000, # The number of validation interval iterations\n)\nval_cfg = dict(type='ValLoop') # The name of validation loop type\ntest_cfg = dict(type='TestLoop') # The name of test loop type\n\nval_evaluator = [\n    dict(type='MAE', mask_key='mask', scaling=100), # The name of metrics to evaluate\n    dict(type='PSNR'), # The name of metrics to evaluate\n    dict(type='SSIM'), # The name of metrics to evaluate\n]\ntest_evaluator = val_evaluator\n\ninput_shape = (256, 256) # The shape of input image\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'), # The config of loading image\n    dict(\n        type='LoadMask', # The type of loading mask pipeline\n        mask_mode='bbox', # The type of mask\n        mask_config=dict(\n            max_bbox_shape=(128, 128), # The shape of bbox\n            max_bbox_delta=40, # The changing delta of bbox height and width\n            min_margin=20,  # The minimum margin from bbox to the image border\n            img_shape=input_shape)),  # The input image shape\n    dict(\n        type='Crop', # The type of crop pipeline\n        keys=['gt'],  # The keys of images to be cropped\n        crop_size=(384, 384),  # The size of cropped patch\n        random_crop=True,  # Whether to use random crop\n    ),\n    dict(\n        type='Resize',  # The type of resizing pipeline\n        keys=['gt'],  # They keys of images to be resized\n        scale=input_shape,  # The scale of resizing function\n        keep_ratio=False,  # Whether to keep ratio during resizing\n    ),\n    dict(\n        type='Normalize',  # The type of normalizing pipeline\n        keys=['gt_img'],  # The keys of images to be normed\n        mean=[127.5] * 3,  # Mean value used in normalization\n        std=[127.5] * 3,  # Std value used in normalization\n        to_rgb=False),  # Whether to transfer image channels to rgb\n    dict(type='GetMaskedImage'), # The config of getting masked image pipeline\n    dict(type='PackInputs'), # The config of collecting data from the current pipeline\n]\n\ntest_pipeline = train_pipeline  # Constructing testing/validation pipeline\n\ndataset_type = 'BasicImageDataset' # The type of dataset\ndata_root = 'data/places'  # Root path of data\n\ntrain_dataloader = dict(\n    batch_size=12, # Batch size of a single GPU\n    num_workers=4, # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False, # Whether maintain the workers Dataset instances alive\n    sampler=dict(type='InfiniteSampler', shuffle=False), # The type of data sampler\n    dataset=dict(  # Train dataset config\n        type=dataset_type, # Type of dataset\n        data_root=data_root, # Root path of data\n        data_prefix=dict(gt='data_large'), # Prefix of image path\n        ann_file='meta/places365_train_challenge.txt', # Path of annotation file\n        test_mode=False,\n        pipeline=train_pipeline,\n    ))\n\nval_dataloader = dict(\n    batch_size=1, # Batch size of a single GPU\n    num_workers=4, # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False, # Whether maintain the workers Dataset instances alive\n    drop_last=False, # Whether drop the last incomplete batch\n    sampler=dict(type='DefaultSampler', shuffle=False), # The type of data sampler\n    dataset=dict( # Validation dataset config\n        type=dataset_type, # Type of dataset\n        data_root=data_root, # Root path of data\n        data_prefix=dict(gt='val_large'), # Prefix of image path\n        ann_file='meta/places365_val.txt', # Path of annotation file\n        test_mode=True,\n        pipeline=test_pipeline,\n    ))\n\ntest_dataloader = val_dataloader\n\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel') # The name of model wrapper\n\noptim_wrapper = dict( # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)),\n    disc=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)))\n\ndefault_scope = 'mmagic' # Used to set registries location\nsave_dir = './work_dirs' # Directory to save the model checkpoints and logs for the current experiments\nexp_name = 'gl_places'  # The experiment name\n\ndefault_hooks = dict( # Used to build default hooks\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100), # Config to register logger hook\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict( # Config to set the checkpoint hook\n        type='CheckpointHook',\n        interval=50000,\n        by_epoch=False,\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict( # Parameters to setup distributed training, the port can also be set\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type='LocalVisBackend')] # The name of visualization backend\nvisualizer = dict( # Config used to build visualizer\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)] # Used to build custom hooks\n\nlog_level = 'INFO' # The level of logging\nlog_processor = dict(type='LogProcessor', by_epoch=False) # Used to build log processor\n\nload_from = None # load models as a pre-trained model from a given path. This will not resume training.\nresume = False # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved.\n\nfind_unused_parameters = False  # Whether to set find unused parameters in ddp\n```\n\n### An example of config system for matting\n\nTo help the users have a basic idea of a complete config, we make a brief comments on the config of the original DIM model we implemented as the following. For more detailed usage and the corresponding alternative for each modules, please refer to the API documentation.\n\n```python\n# model settings\nmodel = dict(\n    type='DIM',  # The name of model (we call mattor).\n    data_preprocessor=dict(  # The Config to build data preprocessor\n        type='DataPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        bgr_to_rgb=True,\n        proc_inputs='normalize',\n        proc_trimap='rescale_to_zero_one',\n        proc_gt='rescale_to_zero_one',\n    ),\n    backbone=dict(  # The config of the backbone.\n        type='SimpleEncoderDecoder',  # The type of the backbone.\n        encoder=dict(  # The config of the encoder.\n            type='VGG16'),  # The type of the encoder.\n        decoder=dict(  # The config of the decoder.\n            type='PlainDecoder')),  # The type of the decoder.\n    pretrained='./weights/vgg_state_dict.pth',  # The pretrained weight of the encoder to be loaded.\n    loss_alpha=dict(  # The config of the alpha loss.\n        type='CharbonnierLoss',  # The type of the loss for predicted alpha matte.\n        loss_weight=0.5),  # The weight of the alpha loss.\n    loss_comp=dict(  # The config of the composition loss.\n        type='CharbonnierCompLoss',  # The type of the composition loss.\n        loss_weight=0.5), # The weight of the composition loss.\n    train_cfg=dict(  # Config of training DIM model.\n        train_backbone=True,  # In DIM stage1, backbone is trained.\n        train_refiner=False),  # In DIM stage1, refiner is not trained.\n    test_cfg=dict(  # Config of testing DIM model.\n        refine=False,  # Whether use refiner output as output, in stage1, we don't use it.\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ),\n)\n\n# data settings\ndataset_type = 'AdobeComp1kDataset'  # Dataset type, this will be used to define the dataset.\ndata_root = 'data/adobe_composition-1k'  # Root path of data.\n\ntrain_pipeline = [  # Training data processing pipeline.\n    dict(\n        type='LoadImageFromFile',  # Load alpha matte from file.\n        key='alpha',  # Key of alpha matte in annotation file. The pipeline will read alpha matte from path `alpha_path`.\n        color_type='grayscale'),  # Load as grayscale image which has shape (height, width).\n    dict(\n        type='LoadImageFromFile',  # Load image from file.\n        key='fg'),  # Key of image to load. The pipeline will read fg from path `fg_path`.\n    dict(\n        type='LoadImageFromFile',  # Load image from file.\n        key='bg'),  # Key of image to load. The pipeline will read bg from path `bg_path`.\n    dict(\n        type='LoadImageFromFile',  # Load image from file.\n        key='merged'),  # Key of image to load. The pipeline will read merged from path `merged_path`.\n    dict(\n        type='CropAroundUnknown',  # Crop images around unknown area (semi-transparent area).\n        keys=['alpha', 'merged', 'fg', 'bg'],  # Images to crop.\n        crop_sizes=[320, 480, 640]),  # Candidate crop size.\n    dict(\n        type='Flip',  # Augmentation pipeline that flips the images.\n        keys=['alpha', 'merged', 'fg', 'bg']),  # Images to be flipped.\n    dict(\n        type='Resize',  # Augmentation pipeline that resizes the images.\n        keys=['alpha', 'merged', 'fg', 'bg'],  # Images to be resized.\n        scale=(320, 320),  # Target size.\n        keep_ratio=False),  # Whether to keep the ratio between height and width.\n    dict(\n        type='GenerateTrimap',  # Generate trimap from alpha matte.\n        kernel_size=(1, 30)),  # Kernel size range of the erode/dilate kernel.\n    dict(type='PackInputs'),  # The config of collecting data from the current pipeline\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',  # Load alpha matte.\n        key='alpha',  # Key of alpha matte in annotation file. The pipeline will read alpha matte from path `alpha_path`.\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',  # Load image from file\n        key='trimap',  # Key of image to load. The pipeline will read trimap from path `trimap_path`.\n        color_type='grayscale',  # Load as grayscale image which has shape (height, width).\n        save_original_img=True),  # Save a copy of trimap for calculating metrics. It will be saved with key `ori_trimap`\n    dict(\n        type='LoadImageFromFile',  # Load image from file\n        key='merged'),  # Key of image to load. The pipeline will read merged from path `merged_path`.\n    dict(type='PackInputs'),  # The config of collecting data from the current pipeline\n]\n\ntrain_dataloader = dict(\n    batch_size=1,  # Batch size of a single GPU\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # The type of data sampler\n    dataset=dict(  # Train dataset config\n        type=dataset_type,  # Type of dataset\n        data_root=data_root,  # Root path of data\n        ann_file='training_list.json',  # Path of annotation file\n        test_mode=False,\n        pipeline=train_pipeline,\n    ))\n\nval_dataloader = dict(\n    batch_size=1,  # Batch size of a single GPU\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    drop_last=False,  # Whether drop the last incomplete batch\n    sampler=dict(type='DefaultSampler', shuffle=False),  # The type of data sampler\n    dataset=dict(  # Validation dataset config\n        type=dataset_type,  # Type of dataset\n        data_root=data_root,  # Root path of data\n        ann_file='test_list.json',  # Path of annotation file\n        test_mode=True,\n        pipeline=test_pipeline,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='SAD'),  # The name of metrics to evaluate\n    dict(type='MattingMSE'),  # The name of metrics to evaluate\n    dict(type='GradientError'),  # The name of metrics to evaluate\n    dict(type='ConnectivityError'),  # The name of metrics to evaluate\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',  # The name of train loop type\n    max_iters=1_000_000,  # The number of total iterations\n    val_interval=40000,  # The number of validation interval iterations\n)\nval_cfg = dict(type='ValLoop')  # The name of validation loop type\ntest_cfg = dict(type='TestLoop')  # The name of test loop type\n\n# optimizer\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.00001),\n    )\n)  # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch.\n\ndefault_scope = 'mmagic'  # Used to set registries location\nsave_dir = './work_dirs'  # Directory to save the model checkpoints and logs for the current experiments.\n\ndefault_hooks = dict(  # Used to build default hooks\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # Config to register logger hook\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(  # Config to set the checkpoint hook\n        type='CheckpointHook',\n        interval=40000,  # The save interval is 40000 iterations.\n        by_epoch=False,  # Count by iterations.\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(  # Parameters to setup distributed training, the port can also be set\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'  # The level of logging\nlog_processor = dict(type='LogProcessor', by_epoch=False)  # Used to build log processor\n\nload_from = None  # load models as a pre-trained model from a given path. This will not resume training.\nresume = False  # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved.\n```\n\n### An example of config system for restoration\n\nTo help the users have a basic idea of a complete config, we make a brief comments on the config of the EDSR model we implemented as the following. For more detailed usage and the corresponding alternative for each modules, please refer to the API documentation.\n\n```python\nexp_name = 'edsr_x2c64b16_1x16_300k_div2k'  # The experiment name\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nload_from = None  # based on pre-trained x2 model\n\nscale = 2  # Scale factor for upsampling\n# model settings\nmodel = dict(\n    type='BaseEditModel',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSRNet',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')  # Config for pixel loss\n    train_cfg=dict(),  # Config of training model.\n    test_cfg=dict(),  # Config of testing model.\n    data_preprocessor=dict(  # The Config to build data preprocessor\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255.,\n                                                             255.]))\n\ntrain_pipeline = [  # Training data processing pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # Set value to destination keys\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # Paired random crop\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='horizontal'),  # Flip direction\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # Images to be flipped\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip direction\n    dict(type='RandomTransposeHW',  # Random transpose h and w for images\n        keys=['lq', 'gt'],  # Images to be transposed\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='PackInputs')  # The config of collecting data from the current pipeline\n]\ntest_pipeline = [  # Test pipeline\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='img',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # Load images from files\n        key='gt',  # Keys in results to find corresponding path\n        color_type='color',  # Color type of image\n        channel_order='rgb',  # Channel order of image\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='ToTensor', keys=['img', 'gt']),  # Convert images to tensor\n    dict(type='PackInputs')  # The config of collecting data from the current pipeline\n]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'  # The type of dataset\ndata_root = 'data'  # Root path of data\n\ntrain_dataloader = dict(\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # The type of data sampler\n    dataset=dict(  # Train dataset config\n        type=dataset_type,  # Type of dataset\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # Path of annotation file\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # Root path of data\n        data_prefix=dict(  # Prefix of image path\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # Filename template\n        pipeline=train_pipeline))\nval_dataloader = dict(\n    num_workers=4,  # The number of workers to pre-fetch data for each single GPU\n    persistent_workers=False,  # Whether maintain the workers Dataset instances alive\n    drop_last=False,  # Whether drop the last incomplete batch\n    sampler=dict(type='DefaultSampler', shuffle=False),  # The type of data sampler\n    dataset=dict(  # Validation dataset config\n        type=dataset_type,  # Type of dataset\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # Root path of data\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # Prefix of image path\n        pipeline=test_pipeline))\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),  # The name of metrics to evaluate\n    dict(type='PSNR', crop_border=scale),  # The name of metrics to evaluate\n    dict(type='SSIM', crop_border=scale),  # The name of metrics to evaluate\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # Config of train loop type\nval_cfg = dict(type='ValLoop')  # The name of validation loop type\ntest_cfg = dict(type='TestLoop')  # The name of test loop type\n\n# optimizer\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.00001),\n    )\n)  # Config used to build optimizer, support all the optimizers in PyTorch whose arguments are also the same as those in PyTorch.\n\nparam_scheduler = dict(  # Config of learning policy\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n\ndefault_hooks = dict(  # Used to build default hooks\n    checkpoint=dict(  # Config to set the checkpoint hook\n        type='CheckpointHook',\n        interval=5000,  # The save interval is 5000 iterations\n        save_optimizer=True,\n        by_epoch=False,  # Count by iterations\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # Config to register logger hook\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\ndefault_scope = 'mmagic'  # Used to set registries location\nsave_dir = './work_dirs'  # Directory to save the model checkpoints and logs for the current experiments.\n\nenv_cfg = dict(  # Parameters to setup distributed training, the port can also be set\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'  # The level of logging\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # Used to build log processor\n\nload_from = None  # load models as a pre-trained model from a given path. This will not resume training.\nresume = False  # Resume checkpoints from a given path, the training will be resumed from the epoch when the checkpoint's is saved.\n```\n"
  },
  {
    "path": "docs/en/user_guides/dataset_prepare.md",
    "content": "# Tutorial 2: Prepare datasets\n\nIn this section, we will detail how to prepare data and adopt the proper dataset in our repo for different methods.\n\nWe support multiple datasets of different tasks.\nThere are two ways to use datasets for training and testing models in MMagic:\n\n1. Using downloaded datasets directly\n2. Preprocessing downloaded datasets before using them.\n\nThe structure of this guide is as follows:\n\n- [Tutorial 2: Prepare datasets](#tutorial-2-prepare-datasets)\n  - [Download datasets](#download-datasets)\n  - [Prepare datasets](#prepare-datasets)\n  - [The overview of the datasets in MMagic](#the-overview-of-the-datasets-in-mmagic)\n\n## Download datasets\n\nYou are supposed to download datasets from their homepage first.\nMost datasets are available after downloaded, so you only need to make sure the folder structure is correct and further preparation is not necessary.\nFor example, you can simply prepare Vimeo90K-triplet datasets by downloading datasets from [homepage](http://toflow.csail.mit.edu/).\n\n## Prepare datasets\n\nSome datasets need to be preprocessed before training or testing. We support many scripts to prepare datasets in [tools/dataset_converters](https://github.com/open-mmlab/mmagic/tree/main/tools/dataset_converters). And you can follow the tutorials of every dataset to run scripts.\nFor example, we recommend cropping the DIV2K images to sub-images. We provide a script to prepare cropped DIV2K dataset. You can run the following command:\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K\n```\n\n## The overview of the datasets in MMagic\n\nWe support detailed tutorials and split them according to different tasks.\n\nPlease check our dataset zoo for data preparation of different tasks.\n\nIf you're interested in more details of datasets in MMagic, please check the [advanced guides](../howto/dataset.md).\n"
  },
  {
    "path": "docs/en/user_guides/deploy.md",
    "content": "# Tutorial 8: Deploy models in MMagic\n\nThe deployment of OpenMMLab codebases, including MMClassification, MMDetection, MMagic and so on are supported by [MMDeploy](https://github.com/open-mmlab/mmdeploy).\nThe latest deployment guide for MMagic can be found from [here](https://mmdeploy.readthedocs.io/en/latest/04-supported-codebases/mmagic.html).\n\nThis tutorial is organized as follows:\n\n- [Tutorial 8: Deploy models in MMagic](#tutorial-8-deploy-models-in-mmagic)\n  - [Installation](#installation)\n  - [Convert model](#convert-model)\n  - [Model specification](#model-specification)\n  - [Model inference](#model-inference)\n    - [Backend model inference](#backend-model-inference)\n    - [SDK model inference](#sdk-model-inference)\n  - [Supported models](#supported-models)\n\n## Installation\n\nPlease follow the [guide](../get_started/install.md) to install mmagic. And then install mmdeploy from source by following [this](https://mmdeploy.readthedocs.io/en/latest/get_started.html#installation) guide.\n\n```{note}\nIf you install mmdeploy prebuilt package, please also clone its repository by 'git clone https://github.com/open-mmlab/mmdeploy.git --depth=1' to get the deployment config files.\n```\n\n## Convert model\n\nSuppose MMagic and mmdeploy repositories are in the same directory, and the working directory is the root path of MMagic.\n\nTake [ESRGAN](../../../configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) model as an example.\nYou can download its checkpoint from [here](https://download.openmmlab.com/MMagic/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth), and then convert it to onnx model as follows:\n\n```python\nfrom mmdeploy.apis import torch2onnx\nfrom mmdeploy.backend.sdk.export_info import export2SDK\n\nimg = 'tests/data/image/face/000001.png'\nwork_dir = 'mmdeploy_models/mmagic/onnx'\nsave_file = 'end2end.onnx'\ndeploy_cfg = '../mmdeploy/configs/mmagic/super-resolution/super-resolution_onnxruntime_dynamic.py'\nmodel_cfg = 'configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py'\nmodel_checkpoint = 'esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth'\ndevice = 'cpu'\n\n# 1. convert model to onnx\ntorch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg,\n  model_checkpoint, device)\n\n# 2. extract pipeline info for inference by MMDeploy SDK\nexport2SDK(deploy_cfg, model_cfg, work_dir, pth=model_checkpoint, device=device)\n```\n\nIt is crucial to specify the correct deployment config during model conversion.MMDeploy has already provided builtin deployment config [files](https://github.com/open-mmlab/mmdeploy/tree/main/configs/mmagic) of all supported backends for mmagic, under which the config file path follows the pattern:\n\n```\n{task}/{task}_{backend}-{precision}_{static | dynamic}_{shape}.py\n```\n\n- **{task}:** task in mmagic.\n\n- **{backend}:** inference backend, such as onnxruntime, tensorrt, pplnn, ncnn, openvino, coreml etc.\n\n- **{precision}:** fp16, int8. When it's empty, it means fp32\n\n- **{static | dynamic}:** static shape or dynamic shape\n\n- **{shape}:** input shape or shape range of a model\n\nTherefore, in the above example, you can also convert `ESRGAN` to other backend models by changing the deployment config file, e.g., converting to tensorrt-fp16 model by `super-resolution_tensorrt-fp16_dynamic-32x32-512x512.py`.\n\n```{tip}\nWhen converting mmagic models to tensorrt models, --device should be set to \"cuda\"\n```\n\n## Model specification\n\nBefore moving on to model inference chapter, let's know more about the converted model structure which is very important for model inference.\n\nThe converted model locates in the working directory like `mmdeploy_models/mmagic/onnx` in the previous example. It includes:\n\n```\nmmdeploy_models/mmagic/onnx\n├── deploy.json\n├── detail.json\n├── end2end.onnx\n└── pipeline.json\n```\n\nin which,\n\n- **end2end.onnx**: backend model which can be inferred by ONNX Runtime\n- ***xxx*.json**: the necessary information for mmdeploy SDK\n\nThe whole package **mmdeploy_models/mmagic/onnx** is defined as **mmdeploy SDK model**, i.e., **mmdeploy SDK model** includes both backend model and inference meta information.\n\n## Model inference\n\n### Backend model inference\n\nTake the previous converted `end2end.onnx` model as an example, you can use the following code to inference the model.\n\n```python\nfrom mmdeploy.apis.utils import build_task_processor\nfrom mmdeploy.utils import get_input_shape, load_config\nimport torch\n\ndeploy_cfg = '../mmdeploy/configs/mmagic/super-resolution/super-resolution_onnxruntime_dynamic.py'\nmodel_cfg = 'configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py'\ndevice = 'cpu'\nbackend_model = ['mmdeploy_models/mmagic/onnx/end2end.onnx']\nimage = 'tests/data/image/lq/baboon_x4.png'\n\n# read deploy_cfg and model_cfg\ndeploy_cfg, model_cfg = load_config(deploy_cfg, model_cfg)\n\n# build task and backend model\ntask_processor = build_task_processor(model_cfg, deploy_cfg, device)\nmodel = task_processor.build_backend_model(backend_model)\n\n# process input image\ninput_shape = get_input_shape(deploy_cfg)\nmodel_inputs, _ = task_processor.create_input(image, input_shape)\n\n# do model inference\nwith torch.no_grad():\n    result = model.test_step(model_inputs)\n\n# visualize results\ntask_processor.visualize(\n    image=image,\n    model=model,\n    result=result[0],\n    window_name='visualize',\n    output_file='output_restorer.bmp')\n```\n\n### SDK model inference\n\nYou can also perform SDK model inference like following,\n\n```python\nfrom mmdeploy_python import Restorer\nimport cv2\n\nimg = cv2.imread('tests/data/image/lq/baboon_x4.png')\n\n# create a predictor\nrestorer = Restorer(model_path='mmdeploy_models/mmagic/onnx', device_name='cpu', device_id=0)\n# perform inference\nresult = restorer(img)\n\n# visualize inference result\ncv2.imwrite('output_restorer.bmp', result)\n```\n\nBesides python API, MMDeploy SDK also provides other FFI (Foreign Function Interface), such as C, C++, C#, Java and so on. You can learn their usage from [demos](https://github.com/open-mmlab/mmdeploy/tree/main/demo).\n\n## Supported models\n\nPlease refer to [here](https://mmdeploy.readthedocs.io/en/latest/04-supported-codebases/mmagic.html#supported-models) for the supported model list.\n"
  },
  {
    "path": "docs/en/user_guides/inference.md",
    "content": "# Tutorial 3: Inference with pre-trained models\n\nMMagic provides Hign-level APIs for you to easily play with state-of-the-art models on your own images or videos.\n\nIn the new API, only two lines of code are needed to implement inference:\n\n```python\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance\neditor = MMagicInferencer('pix2pix')\n# Infer a image. Input image path and output image path is needed.\nresults = editor.infer(img='../resources/input/translation/gt_mask_0.png', result_out_dir='../resources/output/translation/tutorial_translation_pix2pix_res.jpg')\n```\n\nMMagic supports various fundamental generative models, including:\n\nunconditional Generative Adversarial Networks (GANs), conditional GANs, diffusion models, etc.\n\nMMagic also supports various applications, including:\n\ntext-to-image, image-to-image translation, 3D-aware generation, image super-resolution, video super-resolution, video frame interpolation, image inpainting, image matting, image restoration, image colorization, image generation, etc.\n\nIn this section, we will specify how to play with our pre-trained models.\n\n- [Tutorial 3: Inference with Pre-trained Models](#tutorial-3-inference-with-pre-trained-models)\n  - [Prepare some images or videos for inference](#Prepare-some-images-or-videos-for-inference)\n  - [Generative Models](#Generative-Models)\n    - [Unconditional Generative Adversarial Networks (GANs)](<#Unconditional-Generative-Adversarial-Networks-(GANs)>)\n    - [Conditional Generative Adversarial Networks (GANs)](<#Conditional-Generative-Adversarial-Networks-(GANs)>)\n    - [Diffusion Models](#Diffusion-Models)\n  - [Applications](#Applications)\n    - [Text-to-Image](#Text-to-Image)\n    - [Image-to-image translation](#Image-to-image-translation)\n    - [3D-aware generation](#3D-aware-generation)\n    - [Image super-resolution](#Image-super-resolution)\n    - [Video super-resolution](#Video-super-resolution)\n    - [Video frame interpolation](Video-frame-interpolation)\n    - [Image inpainting](#Image-inpainting)\n    - [Image matting](#Image-matting)\n    - [Image restoration](#Image-restoration)\n    - [Image colorization](#Image-colorization)\n- [Previous Versions](#Previous-Versions)\n\n## Prepare some images or videos for inference\n\nPlease refer to our [tutorials](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_tutorial.ipynb) for details.\n\n## Generative Models\n\n### Unconditional Generative Adversarial Networks (GANs)\n\nMMagic provides high-level APIs for sampling images with unconditional GANs. Unconditional GAN models do not need input, and output a image. We take 'styleganv1' as an example.\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/unconditional/tutorial_unconditional_styleganv1_res.png'\neditor = MMagicInferencer('styleganv1')\nresults = editor.infer(result_out_dir=result_out_dir)\n```\n\nIndeed, we have already provided a more friendly demo script to users. You can use [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name styleganv1 \\\n        --result-out-dir demo_unconditional_styleganv1_res.jpg\n```\n\n### Conditional Generative Adversarial Networks (GANs)\n\nMMagic provides high-level APIs for sampling images with conditional GANs. Conditional GAN models take a label as input and output a image. We take 'biggan' as an example..\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/conditional/tutorial_conditinal_biggan_res.jpg'\neditor = MMagicInferencer('biggan', model_setting=1)\nresults = editor.infer(label=1, result_out_dir=result_out_dir)\n```\n\nIndeed, we have already provided a more friendly demo script to users. You can use [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name biggan \\\n        --model-setting 1 \\\n        --label 1 \\\n        --result-out-dir demo_conditional_biggan_res.jpg\n```\n\n### Diffusion Models\n\nMMagic provides high-level APIs for sampling images with diffusion models. f\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\neditor = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = './resources/output/text2image/tutorial_text2image_sd_res.png'\neditor.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name stable_diffusion \\\n        --text \"A panda is having dinner at KFC\" \\\n        --result-out-dir demo_text2image_stable_diffusion_res.png\n```\n\n## Applications\n\n### Text-to-Image\n\nText-to-image models take text as input, and output a image. We take 'controlnet-canny' as an example.\n\n```python\nimport cv2\nimport numpy as np\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/controlnet/controlnet-canny.py')\ncontrolnet = MODELS.build(cfg.model).cuda()\n\ncontrol_url = 'https://user-images.githubusercontent.com/28132635/230288866-99603172-04cb-47b3-8adb-d1aa532d1d2c.jpg'\ncontrol_img = mmcv.imread(control_url)\ncontrol = cv2.Canny(control_img, 100, 200)\ncontrol = control[:, :, None]\ncontrol = np.concatenate([control] * 3, axis=2)\ncontrol = Image.fromarray(control)\n\nprompt = 'Room with blue walls and a yellow ceiling.'\n\noutput_dict = controlnet.infer(prompt, control=control)\nsamples = output_dict['samples']\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 1 \\\n        --text \"Room with blue walls and a yellow ceiling.\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png' \\\n        --result-out-dir demo_text2image_controlnet_canny_res.png\n```\n\n### Image-to-image translation\n\nMMagic provides high-level APIs for translating images by using image translation models. Here is an example of building Pix2Pix and obtaining the translated images.\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\neditor = MMagicInferencer('pix2pix')\nresults = editor.infer(img=img_path, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name pix2pix \\\n        --img ${IMAGE_PATH} \\\n        --result-out-dir ${SAVE_PATH}\n```\n\n### 3D-aware generation\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/eg3d-output'\neditor = MMagicInferencer('eg3d')\nresults = editor.infer(result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n    --model-name eg3d \\\n    --result-out-dir ./resources/output/eg3d-output\n```\n\n### Image super-resolution\n\nImage super resolution models take a image as input, and output a high resolution image. We take 'esrgan' as an example.\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = './resources/input/restoration/0901x2.png'\nresult_out_dir = './resources/output/restoration/tutorial_restoration_esrgan_res.png'\neditor = MMagicInferencer('esrgan')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name esrgan \\\n        --img ${IMAGE_PATH} \\\n        --result-out-dir ${SAVE_PATH}\n```\n\n### Video super-resolution\n\n```python\nimport os\nfrom mmagic.apis import MMagicInferencer\nfrom mmengine import mkdir_or_exist\n\n# Create a MMagicInferencer instance and infer\nvideo = './resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4'\nresult_out_dir = './resources/output/video_super_resolution/tutorial_video_super_resolution_basicvsr_res.mp4'\nmkdir_or_exist(os.path.dirname(result_out_dir))\neditor = MMagicInferencer('basicvsr')\nresults = editor.infer(video=video, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name basicvsr \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_basicvsr_res.mp4\n```\n\n### Video frame interpolation\n\nVideo interpolation models take a video as input, and output a interpolated video. We take 'flavr' as an example.\n\n```python\nimport os\nfrom mmagic.apis import MMagicInferencer\nfrom mmengine import mkdir_or_exist\n\n# Create a MMagicInferencer instance and infer\nvideo = './resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4'\nresult_out_dir = './resources/output/video_interpolation/tutorial_video_interpolation_flavr_res.mp4'\nmkdir_or_exist(os.path.dirname(result_out_dir))\neditor = MMagicInferencer('flavr')\nresults = editor.infer(video=video, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name flavr \\\n        --video ${VIDEO_PATH} \\\n        --result-out-dir ${SAVE_PATH}\n```\n\n### Image inpainting\n\nInpaiting models take a masked image and mask pair as input, and output a inpainted image. We take 'global_local' as an example.\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\nimg = './resources/input/inpainting/celeba_test.png'\nmask = './resources/input/inpainting/bbox_mask.png'\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/inpainting/tutorial_inpainting_global_local_res.jpg'\neditor = MMagicInferencer('global_local', model_setting=1)\nresults = editor.infer(img=img, mask=mask, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name global_local  \\\n        --img ./resources/input/inpainting/celeba_test.png \\\n        --mask ./resources/input/inpainting/bbox_mask.png \\\n        --result-out-dir ./resources/output/inpainting/demo_inpainting_global_local_res.jpg\n```\n\n### Image matting\n\nInpaiting models take a image and trimap pair as input, and output a alpha image. We take 'gca' as an example.\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\nimg = './resources/input/matting/GT05.jpg'\ntrimap = './resources/input/matting/GT05_trimap.jpg'\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/matting/tutorial_matting_gca_res.png'\neditor = MMagicInferencer('gca')\nresults = editor.infer(img=img, trimap=trimap, result_out_dir=result_out_dir)\n```\n\nUse [demo/mmagic_inference_demo.py](../../../demo/mmagic_inference_demo.py) with the following commands:\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name gca  \\\n        --img ./resources/input/matting/GT05.jpg \\\n        --trimap ./resources/input/matting/GT05_trimap.jpg \\\n        --result-out-dir ./resources/output/matting/demo_matting_gca_res.png\n```\n\n### Image restoration\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = './resources/input/restoration/0901x2.png'\nresult_out_dir = './resources/output/restoration/tutorial_restoration_nafnet_res.png'\neditor = MMagicInferencer('nafnet')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name nafnet \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_nafnet_res.png\n```\n\n### Image colorization\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = 'https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg'\nresult_out_dir = './resources/output/colorization/tutorial_colorization_res.png'\neditor = MMagicInferencer('inst_colorization')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name inst_colorization \\\n        --img https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg \\\n        --result-out-dir demo_colorization_res.png\n```\n\n## Previous Versions\n\nIf you want to use deprecated demos, please use [MMagic v1.0.0rc7](https://github.com/open-mmlab/mmagic/tree/v1.0.0rc7) and reference the [old tutorial](https://github.com/open-mmlab/mmagic/blob/v1.0.0rc7/docs/en/user_guides/inference.md).\n"
  },
  {
    "path": "docs/en/user_guides/metrics.md",
    "content": "# Tutorial 5: Using metrics in MMagic\n\nMMagic supports **17 metrics** to assess the quality of models.\n\nPlease refer to [Train and Test in MMagic](../user_guides/train_test.md) for usages.\n\nHere, we will specify the details of different metrics one by one.\n\nThe structure of this guide are as follows:\n\n- [Tutorial 5: Using metrics in MMagic](#tutorial-5-using-metrics-in-mmagic)\n  - [MAE](#mae)\n  - [MSE](#mse)\n  - [PSNR](#psnr)\n  - [SNR](#snr)\n  - [SSIM](#ssim)\n  - [NIQE](#niqe)\n  - [SAD](#sad)\n  - [MattingMSE](#mattingmse)\n  - [GradientError](#gradienterror)\n  - [ConnectivityError](#connectivityerror)\n  - [FID and TransFID](#fid-and-transfid)\n  - [IS and TransIS](#is-and-transis)\n  - [Precision and Recall](#precision-and-recall)\n  - [PPL](#ppl)\n  - [SWD](#swd)\n  - [MS-SSIM](#ms-ssim)\n  - [Equivarience](#equivarience)\n\n## MAE\n\nMAE is Mean Absolute Error metric for image.\nTo evaluate with MAE, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='MAE'),\n]\n```\n\n## MSE\n\nMSE is Mean Squared Error metric for image.\nTo evaluate with MSE, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='MSE'),\n]\n```\n\n## PSNR\n\nPSNR is Peak Signal-to-Noise Ratio. Our implement refers to https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio.\nTo evaluate with PSNR, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='PSNR'),\n]\n```\n\n## SNR\n\nSNR is Signal-to-Noise Ratio. Our implementation refers to https://en.wikipedia.org/wiki/Signal-to-noise_ratio.\nTo evaluate with SNR, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='SNR'),\n]\n```\n\n## SSIM\n\nSSIM is structural similarity for image, proposed in [Image quality assessment: from error visibility to structural similarity](https://live.ece.utexas.edu/publications/2004/zwang_ssim_ieeeip2004.pdf). The results of our implementation are the same as that of the official released MATLAB code in https://ece.uwaterloo.ca/~z70wang/research/ssim/.\nTo evaluate with SSIM, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='SSIM'),\n]\n```\n\n## NIQE\n\nNIQE is Natural Image Quality Evaluator metric, proposed in [Making a \"Completely Blind\" Image Quality Analyzer](http://www.live.ece.utexas.edu/publications/2013/mittal2013.pdf). Our implementation could produce almost the same results as the official MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip.\n\nTo evaluate with NIQE, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='NIQE'),\n]\n```\n\n## SAD\n\nSAD is Sum of Absolute Differences metric for image matting. This metric compute per-pixel absolute difference and sum across all pixels.\nTo evaluate with SAD, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='SAD'),\n]\n```\n\n## MattingMSE\n\nMattingMSE is Mean Squared Error metric for image matting.\nTo evaluate with MattingMSE, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='MattingMSE'),\n]\n```\n\n## GradientError\n\nGradientError is Gradient error for evaluating alpha matte prediction.\nTo evaluate with GradientError, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='GradientError'),\n]\n```\n\n## ConnectivityError\n\nConnectivityError is Connectivity error for evaluating alpha matte prediction.\nTo evaluate with ConnectivityError, please add the following configuration in the config file:\n\n```python\nval_evaluator = [\n    dict(type='ConnectivityError'),\n]\n```\n\n## FID and TransFID\n\nFréchet Inception Distance is a measure of similarity between two datasets of images. It was shown to correlate well with the human judgment of visual quality and is most often used to evaluate the quality of samples of Generative Adversarial Networks. FID is calculated by computing the Fréchet distance between two Gaussians fitted to feature representations of the Inception network.\n\nIn `MMagic`, we provide two versions for FID calculation. One is the commonly used PyTorch version and the other one is used in StyleGAN paper. Meanwhile, we have compared the difference between these two implementations in the StyleGAN2-FFHQ1024 model (the details can be found [here](https://github.com/open-mmlab/mmagic/blob/main/configs/styleganv2/README.md)). Fortunately, there is a marginal difference in the final results. Thus, we recommend users adopt the more convenient PyTorch version.\n\n**About PyTorch version and Tero's version:** The commonly used PyTorch version adopts the modified InceptionV3 network to extract features for real and fake images. However, Tero's FID requires a [script module](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) for Tensorflow InceptionV3. Note that applying this script module needs `PyTorch >= 1.6.0`.\n\n**About extracting real inception data:** For the users' convenience, the real features will be automatically extracted at test time and saved locally, and the stored features will be automatically read at the next test. Specifically, we will calculate a hash value based on the parameters used to calculate the real features, and use the hash value to mark the feature file, and when testing, if the `inception_pkl` is not set, we will look for the feature in `MMAGIC_CACHE_DIR` (~/.cache/openmmlab/mmagic/). If cached inception pkl is not found, then extracting will be performed.\n\nTo use the FID metric, you should add the metric in a config file like this:\n\n```python\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n```\n\nIf you work on an new machine, then you can copy the `pkl` files in `MMAGIC_CACHE_DIR` and copy them to new machine and set `inception_pkl` field.\n\n```python\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=\n        'work_dirs/inception_pkl/inception_state-capture_mean_cov-full-33ad4546f8c9152e4b3bdb1b0c08dbaf.pkl',  # copied from old machine\n        sample_model='ema')\n]\n```\n\n`TransFID` has same usage as `FID`, but it's designed for translation models like `Pix2Pix` and `CycleGAN`, which is adapted for our evaluator. You can refer\nto [evaluation](../user_guides/train_test.md) for details.\n\n## IS and TransIS\n\nInception score is an objective metric for evaluating the quality of generated images, proposed in [Improved Techniques for Training GANs](https://arxiv.org/pdf/1606.03498.pdf). It uses an InceptionV3 model to predict the class of the generated images, and suppose that 1) If an image is of high quality, it will be categorized into a specific class. 2) If images are of high diversity, the range of images' classes will be wide. So the KL-divergence of the conditional probability and marginal probability can indicate the quality and diversity of generated images. You can see the complete implementation in `metrics.py`, which refers to https://github.com/sbarratt/inception-score-pytorch/blob/master/inception_score.py.\nIf you want to evaluate models with `IS` metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py\nmetrics = [\n    xxx,\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n```\n\nTo be noted that, the selection of Inception V3 and image resize method can significantly influence the final IS score. Therefore, we strongly recommend users may download the [Tero's script model of Inception V3](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt) (load this script model need torch >= 1.6) and use `Bicubic` interpolation with `Pillow` backend.\n\nCorresponding to config, you can set `resize_method` and `use_pillow_resize` for image resizing. You can also set `inception_style` as `StyleGAN` for recommended tero's inception model, or `PyTorch` for torchvision's implementation. For environment without internet, you can download the inception's weights, and set `inception_path` to your inception model.\n\nWe also perform a survey on the influence of data loading pipeline and the version of pretrained Inception V3 on the IS result. All IS are evaluated on the same group of images which are randomly selected from the ImageNet dataset.\n\n<details> <summary> Show the Comparison Results </summary>\n\n|                            Code Base                            | Inception V3 Version | Data Loader Backend | Resize Interpolation Method |          IS           |\n| :-------------------------------------------------------------: | :------------------: | :-----------------: | :-------------------------: | :-------------------: |\n|   [OpenAI (baseline)](https://github.com/openai/improved-gan)   |      Tensorflow      |       Pillow        |       Pillow Bicubic        | **312.255 +/- 4.970** |\n| [StyleGAN-Ada](https://github.com/NVlabs/stylegan2-ada-pytorch) | Tero's Script Model  |       Pillow        |       Pillow Bicubic        |   311.895 +/ 4.844    |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |        cv2 Bilinear         |   322.932 +/- 2.317   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |         cv2 Bicubic         |   324.604 +/- 5.157   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |       Pillow Bicubic        |   318.161 +/- 5.330   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |       Pillow Bilinear       |   313.126 +/- 5.449   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |        cv2 Bilinear         |    318.021+/-3.864    |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |       Pillow Bicubic        |   317.997 +/- 5.350   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |        cv2 Bilinear         |   318.879 +/- 2.433   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |         cv2 Bicubic         |   316.125 +/- 5.718   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |       Pillow Bicubic        | **312.045 +/- 5.440** |\n|                          mmagic (Ours)                          | Tero's Script Model  |       Pillow        |       Pillow Bilinear       |   308.645 +/- 5.374   |\n|                          mmagic (Ours)                          | Tero's Script Model  |       Pillow        |       Pillow Bicubic        |   311.733 +/- 5.375   |\n\n</details>\n\n`TransIS` has same usage as `IS`, but it's designed for translation models like `Pix2Pix` and `CycleGAN`, which is adapted for our evaluator. You can refer\nto [evaluation](../user_guides/train_test.md) for details.\n\n## Precision and Recall\n\nOur `Precision and Recall` implementation follows the version used in StyleGAN2. In this metric, a VGG network will be adopted to extract the features for images. Unfortunately, we have not found a PyTorch VGG implementation leading to similar results with Tero's version used in StyleGAN2. (About the differences, please see this [file](https://github.com/open-mmlab/mmagic/blob/main/configs/styleganv2/README.md).) Thus, in our implementation, we adopt [Teor's VGG](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/vgg16.pt) network by default. Importantly, applying this script module needs `PyTorch >= 1.6.0`. If with a lower PyTorch version, we will use the PyTorch official VGG network for feature extraction.\n\nTo evaluate with `P&R`, please add the following configuration in the config file:\n\n```python\nmetrics = [\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K')\n]\n```\n\n## PPL\n\nPerceptual path length measures the difference between consecutive images (their VGG16 embeddings) when interpolating between two random inputs. Drastic changes mean that multiple features have changed together and that they might be entangled. Thus, a smaller PPL score appears to indicate higher overall image quality by experiments. \\\nAs a basis for our metric, we use a perceptually-based pairwise image distance that is calculated as a weighted difference between two VGG16 embeddings, where the weights are fit so that the metric agrees with human perceptual similarity judgments.\nIf we subdivide a latent space interpolation path into linear segments, we can define the total perceptual length of this segmented path as the sum of perceptual differences over each segment, and a natural definition for the perceptual path length would be the limit of this sum under infinitely fine subdivision, but in practice we approximate it using a small subdivision `` $`\\epsilon=10^{-4}`$ ``.\nThe average perceptual path length in latent `space` Z, over all possible endpoints, is therefore\n\n`` $$`L_Z = E[\\frac{1}{\\epsilon^2}d(G(slerp(z_1,z_2;t))), G(slerp(z_1,z_2;t+\\epsilon)))]`$$ ``\n\nComputing the average perceptual path length in latent `space` W is carried out in a similar fashion:\n\n`` $$`L_Z = E[\\frac{1}{\\epsilon^2}d(G(slerp(z_1,z_2;t))), G(slerp(z_1,z_2;t+\\epsilon)))]`$$ ``\n\nWhere `` $`z_1, z_2 \\sim P(z)`$ ``, and `` $` t \\sim U(0,1)`$ `` if we set `sampling` to full, `` $` t \\in \\{0,1\\}`$ `` if we set `sampling` to end. `` $` G`$ `` is the generator(i.e. `` $` g \\circ f`$ `` for style-based networks), and `` $` d(.,.)`$ `` evaluates the perceptual distance between the resulting images.We compute the expectation by taking 100,000 samples (set `num_images` to 50,000 in our code).\n\nYou can find the complete implementation in `metrics.py`, which refers to https://github.com/rosinality/stylegan2-pytorch/blob/master/ppl.py.\nIf you want to evaluate models with `PPL` metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py\nmetrics = [\n    xxx,\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n```\n\n## SWD\n\nSliced Wasserstein distance is a discrepancy measure for probability distributions, and smaller distance indicates generated images look like the real ones. We obtain the Laplacian pyramids of every image and extract patches from the Laplacian pyramids as descriptors, then SWD can be calculated by taking the sliced Wasserstein distance of the real and fake descriptors.\nYou can see the complete implementation in `metrics.py`, which refers to https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/sliced_wasserstein.py.\nIf you want to evaluate models with `SWD` metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\nmetrics = [\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n```\n\n## MS-SSIM\n\nMulti-scale structural similarity is used to measure the similarity of two images. We use MS-SSIM here to measure the diversity of generated images, and a low MS-SSIM score indicates the high diversity of generated images. You can see the complete implementation in `metrics.py`, which refers to https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py.\nIf you want to evaluate models with `MS-SSIM` metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig')\n]\n```\n\n## Equivarience\n\nEquivarience of generative models refer to the exchangeability of model forward and geometric transformations. Currently this metric is only calculated for StyleGANv3,\nyou can see the complete implementation in `metrics.py`, which refers to https://github.com/NVlabs/stylegan3/blob/main/metrics/equivariance.py.\nIf you want to evaluate models with `Equivarience` metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/styleganv3/stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256.py\nmetrics = [\n    dict(\n        type='Equivariance',\n        fake_nums=50000,\n        sample_mode='ema',\n        prefix='EQ',\n        eq_cfg=dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True))\n]\n```\n"
  },
  {
    "path": "docs/en/user_guides/train_test.md",
    "content": "# Tutorial 4: Train and test in MMagic\n\nIn this section, we introduce how to test and train models in MMagic.\n\nIn this section, we provide the following guides:\n\n- [Tutorial 4: Train and test in MMagic](#tutorial-4-train-and-test-in-mmagic)\n  - [Prerequisite](#prerequisite)\n  - [Test a model in MMagic](#test-a-model-in-mmagic)\n    - [Test with a single GPUs](#test-with-a-single-gpus)\n    - [Test with multiple GPUs](#test-with-multiple-gpus)\n    - [Test with Slurm](#test-with-slurm)\n    - [Test with specific metrics](#test-with-specific-metrics)\n  - [Train a model in MMagic](#train-a-model-in-mmagic)\n    - [Train with a single GPU](#train-with-a-single-gpu)\n    - [Train with multiple nodes](#train-with-multiple-nodes)\n    - [Train with multiple GPUs](#train-with-multiple-gpus)\n    - [Train with Slurm](#train-with-slurm)\n    - [Optional arguments](#optional-arguments)\n  - [Train with specific evaluation metrics](#train-with-specific-evaluation-metrics)\n\n## Prerequisite\n\nUsers need to [prepare dataset](../user_guides/dataset_prepare.md) first to enable training and testing models in MMagic.\n\n## Test a model in MMagic\n\n### Test with a single GPUs\n\nYou can use the following commands to test a pre-trained model with single GPUs.\n\n```shell\npython tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE}\n```\n\nFor example,\n\n```shell\npython tools/test.py configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\n### Test with multiple GPUs\n\nMMagic supports testing with multiple GPUs,\nwhich can largely save your time in testing models.\nYou can use the following commands to test a pre-trained model with multiple GPUs.\n\n```shell\n./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM}\n```\n\nFor example,\n\n```shell\n./tools/dist_test.sh configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\n### Test with Slurm\n\nIf you run MMagic on a cluster managed with [slurm](https://slurm.schedmd.com/), you can use the script `slurm_test.sh`. (This script also supports single machine testing.)\n\n```shell\n[GPUS=${GPUS}] ./tools/slurm_test.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${CHECKPOINT_FILE}\n```\n\nHere is an example of using 8 GPUs to test an example model on the 'dev' partition with the job name 'test'.\n\n```shell\nGPUS=8 ./tools/slurm_test.sh dev test configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\nYou can check [slurm_test.sh](../../../tools/slurm_test.sh) for full arguments and environment variables.\n\n### Test with specific metrics\n\nMMagic provides various **evaluation metrics**, i.e., MS-SSIM, SWD, IS, FID, Precision&Recall, PPL, Equivarience, TransFID, TransIS, etc.\nWe have provided unified evaluation scripts in [tools/test.py](https://github.com/open-mmlab/mmagic/tree/main/tools/test.py) for all models.\nIf users want to evaluate their models with some metrics, you can add the `metrics` into your config file like this:\n\n```python\n# at the end of the configs/styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n```\n\nAs above, `metrics` consist of multiple metric dictionaries. Each metric will contain `type` to indicate the category of the metric. `fake_nums` denotes the number of images generated by the model. Some metrics will output a dictionary of results, you can also set `prefix`  to specify the prefix of the results.\nIf you set the prefix of FID as `FID-Full-50k`, then an example of output may be\n\n```bash\nFID-Full-50k/fid: 3.6561  FID-Full-50k/mean: 0.4263  FID-Full-50k/cov: 3.2298\n```\n\nThen users can test models with the command below:\n\n```shell\nbash tools/dist_test.sh ${CONFIG_FILE} ${CKPT_FILE}\n```\n\nIf you are in slurm environment, please switch to the [tools/slurm_test.sh](https://github.com/open-mmlab/mmagic/tree/main/tools/slurm_test.sh) by using the following commands:\n\n```shell\nsh slurm_test.sh ${PLATFORM} ${JOBNAME} ${CONFIG_FILE} ${CKPT_FILE}\n```\n\n## Train a model in MMagic\n\nMMagic supports multiple ways of training:\n\n1. [Train with a single GPU](#train-with-a-single-gpu)\n2. [Train with multiple GPUs](#train-with-multiple-gpus)\n3. [Train with multiple nodes](#train-with-multiple-nodes)\n4. [Train with Slurm](#train-with-slurm)\n\nSpecifically, all outputs (log files and checkpoints) will be saved to the working directory,\nwhich is specified by `work_dir` in the config file.\n\n### Train with a single GPU\n\n```shell\nCUDA_VISIBLE=0 python tools/train.py configs/example_config.py --work-dir work_dirs/example\n```\n\n### Train with multiple nodes\n\nTo launch distributed training on multiple machines, which can be accessed via IPs, run the following commands:\n\nOn the first machine:\n\n```shell\nNNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS\n```\n\nOn the second machine:\n\n```shell\nNNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS\n```\n\nTo speed up network communication, high speed network hardware, such as Infiniband, is recommended.\nPlease refer to [PyTorch docs](https://pytorch.org/docs/1.11/distributed.html#launch-utility) for more information.\n\n### Train with multiple GPUs\n\n```shell\n./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]\n```\n\n### Train with Slurm\n\nIf you run MMagic on a cluster managed with [slurm](https://slurm.schedmd.com/), you can use the script `slurm_train.sh`. (This script also supports single machine training.)\n\n```shell\n[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}\n```\n\nHere is an example of using 8 GPUs to train an inpainting model on the dev partition.\n\n```shell\nGPUS=8 ./tools/slurm_train.sh dev configs/inpainting/gl_places.py /nfs/xxxx/gl_places_256\n```\n\nYou can check [slurm_train.sh](https://github.com/open-mmlab/mmagic/blob/master/tools/slurm_train.sh) for full arguments and environment variables.\n\n### Optional arguments\n\n- `--amp`: This argument is used for fixed-precision training.\n- `--resume`: This argument is used for auto resume if the training is aborted.\n\n## Train with specific evaluation metrics\n\nBenefit from the `mmengine`'s `Runner`. We can evaluate model during training in a simple way as below.\n\n```python\n# define metrics\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN')\n]\n\n# define dataloader\nval_dataloader = dict(\n    batch_size=128,\n    num_workers=8,\n    dataset=dict(\n        type='BasicImageDataset',\n        data_root='data/celeba-cropped/',\n        pipeline=[\n            dict(type='LoadImageFromFile', key='img'),\n            dict(type='Resize', scale=(64, 64)),\n            dict(type='PackInputs')\n        ]),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\n# define val interval\ntrain_cfg = dict(by_epoch=False, val_begin=1, val_interval=10000)\n\n# define val loop and evaluator\nval_cfg = dict(type='MultiValLoop')\nval_evaluator = dict(type='Evaluator', metrics=metrics)\n```\n\nYou can set `val_begin` and `val_interval` to adjust when to begin validation and interval of validation.\n\nFor details of metrics, refer to [metrics' guide](./metrics.md).\n"
  },
  {
    "path": "docs/en/user_guides/useful_tools.md",
    "content": "# Tutorial 7: Useful tools\n\nWe provide lots of useful tools under `tools/` directory.\n\nThe structure of this guide is as follows:\n\n- [Tutorial 7: Useful tools](#tutorial-7-useful-tools)\n  - [Get the FLOPs and params](#get-the-flops-and-params)\n  - [Publish a model](#publish-a-model)\n  - [Print full config](#print-full-config)\n\n## Get the FLOPs and params\n\nWe provide a script adapted from [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) to compute the FLOPs and params of a given model.\n\n```shell\npython tools/analysis_tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]\n```\n\nFor example,\n\n```shell\npython tools/analysis_tools/get_flops.py configs/resotorer/srresnet.py --shape 40 40\n```\n\nYou will get the result like this.\n\n```\n==============================\nInput shape: (3, 40, 40)\nFlops: 4.07 GMac\nParams: 1.52 M\n==============================\n```\n\n**Note**: This tool is still experimental and we do not guarantee that the number is correct. You may well use the result for simple comparisons, but double check it before you adopt it in technical reports or papers.\n\n(1) FLOPs are related to the input shape while parameters are not. The default input shape is (1, 3, 250, 250).\n(2) Some operators are not counted in FLOPs like GN and custom operators.\nYou can add support for new operators by modifying [`mmcv/cnn/utils/flops_counter.py`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py).\n\n## Publish a model\n\nBefore you upload a model to AWS, you may want to\n\n1. convert model weights to CPU tensors\n2. delete the optimizer states and\n3. compute the hash of the checkpoint file and append time and the hash id to the\n   filename.\n\n```shell\npython tools/model_converters/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME}\n```\n\nE.g.,\n\n```shell\npython tools/model_converters/publish_model.py work_dirs/stylegan2/latest.pth stylegan2_c2_8xb4_ffhq-1024x1024.pth\n```\n\nThe final output filename will be `stylegan2_c2_8xb4_ffhq-1024x1024_{time}-{hash id}.pth`.\n\n## Print full config\n\nMMGeneration incorporates config mechanism to set parameters used for training and testing models. With our [config](../user_guides/config.md) mechanism, users can easily conduct extensive experiments without hard coding. If you wish to inspect the config file, you may run `python tools/misc/print_config.py /PATH/TO/CONFIG` to see the complete config.\n\nAn Example:\n\n```shell\npython tools/misc/print_config.py configs/styleganv2/stylegan2_c2-PL_8xb4-fp16-partial-GD-no-scaler-800kiters_ffhq-256x256.py\n```\n"
  },
  {
    "path": "docs/en/user_guides/visualization.md",
    "content": "# Tutorial 6: Visualization\n\nThe visualization of images is an important way to measure the quality of image processing, editing and synthesis.\nUsing `visualizer` in config file can save visual results when training or testing. You can follow [MMEngine Documents](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/visualization.md) to learn the usage of visualization. MMagic provides a rich set of visualization functions.\nIn this tutorial, we introduce the usage of the visualization functions provided by MMagic.\n\n- [Tutorial 6: Visualization](#tutorial-6-visualization)\n  - [Overview](#overview)\n    - [Visualization configuration of GANs](#visualization-configuration-of-gans)\n    - [Visualization configuration of image translation models](#visualization-configuration-of-image-translation-models)\n    - [Visualization configuration of diffusion models](#visualization-configuration-of-diffusion-models)\n    - [Visualization configuration of inpainting models](#visualization-configuration-of-inpainting-models)\n    - [Visualization configuration of matting models](#visualization-configuration-of-matting-models)\n    - [Visualization configuration of SISR/VSR/VFI models](#visualization-configuration-of-sisrvsrvfi-models)\n  - [Visualization Hook](#visualization-hook)\n  - [Visualizer](#visualizer)\n  - [VisBackend](#visbackend)\n    - [Use Different Storage Backends](#use-different-storage-backends)\n\n## Overview\n\nIt is recommended to learn the basic concept of visualization in design documentation.\n\nIn MMagic, the visualization of the training or testing process requires the configuration of three components: `VisualizationHook`, `Visualizer`, and `VisBackend`, The diagram below shows the relationship between Visualizer and VisBackend,\n\n<div align=\"center\">\n<img src=\"https://user-images.githubusercontent.com/17425982/163327736-f7cb3b16-ef07-46bc-982a-3cc7495e6c82.png\" width=\"800\" />\n</div>\n\n**VisualizationHook** fetches the visualization results of the model output in fixed intervals during training and passes them to Visualizer.\n**Visualizer** is responsible for converting the original visualization results into the desired type (png, gif, etc.) and then transferring them to **VisBackend** for storage or display.\n\n### Visualization configuration of GANs\n\nFor GAN models, such as StyleGAN and SAGAN, a usual configuration is shown below:\n\n```python\n# VisualizationHook\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,  # visualization interval\n        fixed_input=True,  # whether use fixed noise input to generate images\n        vis_kwargs_list=dict(type='GAN', name='fake_img')  # pre-defined visualization arguments for GAN models\n    )\n]\n# VisBackend\nvis_backends = [\n    dict(type='VisBackend'),  # vis_backend for saving images to file system\n    dict(type='WandbVisBackend',  # vis_backend for uploading images to Wandb\n        init_kwargs=dict(\n            project='MMagic',   # project name for Wandb\n            name='GAN-Visualization-Demo'  # name of the experiment for Wandb\n        ))\n]\n# Visualizer\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\nIf you apply Exponential Moving Average (EMA) to a generator and want to visualize the EMA model, you can modify config of `VisualizationHook` as below:\n\n```python\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig in `fake_img` at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',  # save images with prefix `fake_img`\n            sample_model='ema/orig',  # specified kwargs for `NoiseSampler`\n            target_keys=['ema.fake_img', 'orig.fake_img']  # specific key to visualization\n        ))\n]\n```\n\n### Visualization configuration of image translation models\n\nFor Translation models, such as CycleGAN and Pix2Pix, visualization configs can be formed as below:\n\n```python\n# VisualizationHook\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(\n                type='Translation',  # Visualize results on the training set\n                name='trans'),  #  save images with prefix `trans`\n            dict(\n                type='Translationval',  # Visualize results on the validation set\n                name='trans_val'),  #  save images with prefix `trans_val`\n        ])\n]\n# VisBackend\nvis_backends = [\n    dict(type='VisBackend'),  # vis_backend for saving images to file system\n    dict(type='WandbVisBackend',  # vis_backend for uploading images to Wandb\n        init_kwargs=dict(\n            project='MMagic',   # project name for Wandb\n            name='Translation-Visualization-Demo'  # name of the experiment for Wandb\n        ))\n]\n# Visualizer\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\n### Visualization configuration of diffusion models\n\nFor Diffusion models, such as Improved-DDPM, we can use the following configuration to visualize the denoising process through a gif:\n\n```python\n# VisualizationHook\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='DDPMDenoising'))  # pre-defined visualization argument for DDPM models\n]\n# VisBackend\nvis_backends = [\n    dict(type='VisBackend'),  # vis_backend for saving images to file system\n    dict(type='WandbVisBackend',  # vis_backend for uploading images to Wandb\n        init_kwargs=dict(\n            project='MMagic',   # project name for Wandb\n            name='Diffusion-Visualization-Demo'  # name of the experiment for Wandb\n        ))\n]\n# Visualizer\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\n### Visualization configuration of inpainting models\n\nFor inpainting models, such as AOT-GAN and Global&Local, a usual configuration is shown below:\n\n```python\n# VisBackend\nvis_backends = [dict(type='LocalVisBackend')]\n# Visualizer\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\n# VisualizationHook\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n### Visualization configuration of matting models\n\nFor matting models, such as DIM and GCA, a usual configuration is shown below:\n\n```python\n# VisBackend\nvis_backends = [dict(type='LocalVisBackend')]\n# Visualizer\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='trimap_path',\n    img_keys=['pred_alpha', 'trimap', 'gt_merged', 'gt_alpha'],\n    bgr2rgb=True)\n# VisualizationHook\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n### Visualization configuration of SISR/VSR/VFI models\n\nFor SISR/VSR/VFI models, such as EDSR, EDVR and CAIN, a usual configuration is shown below:\n\n```python\n# VisBackend\nvis_backends = [dict(type='LocalVisBackend')]\n# Visualizer\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=False)\n# VisualizationHook\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\nThe specific configuration of the `VisualizationHook`, `Visualizer` and `VisBackend` components are described below\n\n## Visualization Hook\n\nIn MMagic, we use `BasicVisualizationHook` and `VisualizationHook` as `VisualizationHook`.\n`VisualizationHook` supports three following cases.\n\n(1) Modify `vis_kwargs_list` to visualize the output of the model under specific inputs , which is suitable for visualization of the generated results of GAN and translation results of Image-to-Image-Translation models under specific data input, etc. Below are two typical examples:\n\n```python\n# input as dict\nvis_kwargs_list = dict(\n    type='Noise',  # use 'Noise' sampler to generate model input\n    name='fake_img',  # define prefix of saved images\n)\n\n# input as list of dict\nvis_kwargs_list = [\n    dict(type='Arguments',  # use `Arguments` sampler to generate model input\n         name='arg_output',  # define prefix of saved images\n         vis_mode='gif',  # specific visualization mode as GIF\n         forward_kwargs=dict(forward_mode='sampling', sample_kwargs=dict(show_pbar=True))  # specific kwargs for `Arguments` sampler\n    ),\n    dict(type='Data',  # use `Data` sampler to feed data in dataloader to model as input\n         n_samples=36,  # specific how many samples want to generate\n         fixed_input=False,  # specific do not use fixed input for each visualization process\n    )\n]\n```\n\n`vis_kwargs_list` takes dict or list of dict as input. Each of dict must contain a `type` field indicating the **type of sampler** used to generate the model input, and each of the dict must also contain the keyword fields necessary for the sampler (e.g. `ArgumentSampler` requires that the argument dictionary contain `forward_kwargs`).\n\n> To be noted that, this content is checked by the corresponding sampler and is not restricted by `BasicVisualizationHook`.\n\nIn addition, the other fields are generic fields (e.g. `n_samples`, `n_row`, `name`, `fixed_input`, etc.).\nIf not passed in, the default values from the BasicVisualizationHook initialization will be used.\n\nFor the convenience of users, MMagic has pre-defined visualization parameters for **GAN**, **Translation models**, **SinGAN** and **Diffusion models**, and users can directly use the predefined visualization methods by using the following configuration:\n\n```python\nvis_kwargs_list = dict(type='GAN')\nvis_kwargs_list = dict(type='SinGAN')\nvis_kwargs_list = dict(type='Translation')\nvis_kwargs_list = dict(type='TranslationVal')\nvis_kwargs_list = dict(type='TranslationTest')\nvis_kwargs_list = dict(type='DDPMDenoising')\n```\n\n## Visualizer\n\nIn MMagic, we implement `ConcatImageVisualizer` and `Visualizer`, which inherit from `mmengine.Visualizer`.\nThe base class of `Visualizer` is `ManagerMixin` and this makes `Visualizer` a globally unique object.\nAfter being instantiated, `Visualizer` can be called at anywhere of the code by `Visualizer.get_current_instance()`, as shown below:\n\n```python\n# configs\nvis_backends = [dict(type='VisBackend')]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# `get_instance()` is called for globally unique instantiation\nVISUALIZERS.build(cfg.visualizer)\n\n# Once instantiated by the above code, you can call the `get_current_instance` method at any location to get the visualizer\nvisualizer = Visualizer.get_current_instance()\n```\n\nThe core interface of `Visualizer` is `add_datasample`.\nThrough this interface,\nThis interface will call the corresponding drawing function according to the corresponding `vis_mode` to obtain the visualization result in `np.ndarray` type.\nThen `show` or `add_image` will be called to directly show the results or pass the visualization result to the predefined vis_backend.\n\n## VisBackend\n\nIn general, users do not need to manipulate `VisBackend` objects, only when the current visualization storage can not meet the needs, users will want to manipulate the storage backend directly.\nMMagic supports a variety of different visualization backends, including:\n\n- Basic VisBackend of MMEngine: including LocalVisBackend, TensorboardVisBackend and WandbVisBackend. You can follow [MMEngine Documents](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/visualization.md) to learn more about them\n- VisBackend: Backend for **File System**. Save the visualization results to the corresponding position.\n- TensorboardVisBackend: Backend for **Tensorboard**. Send the visualization results to Tensorboard.\n- WandbVisBackend: Backend for **Wandb**. Send the visualization results to Tensorboard.\n\nOne `Visualizer` object can have access to any number of VisBackends and users can access to the backend by their class name in their code.\n\n```python\n# configs\nvis_backends = [dict(type='Visualizer'), dict(type='WandbVisBackend')]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# code\nVISUALIZERS.build(cfg.visualizer)\nvisualizer = Visualizer.get_current_instance()\n\n# access to the backend by class name\ngen_vis_backend = visualizer.get_backend('VisBackend')\ngen_wandb_vis_backend = visualizer.get_backend('GenWandbVisBackend')\n```\n\nWhen there are multiply VisBackend with the same class name, user must specific name for each VisBackend.\n\n```python\n# configs\nvis_backends = [\n    dict(type='VisBackend', name='gen_vis_backend_1'),\n    dict(type='VisBackend', name='gen_vis_backend_2')\n]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# code\nVISUALIZERS.build(cfg.visualizer)\nvisualizer = Visualizer.get_current_instance()\n\nlocal_vis_backend_1 = visualizer.get_backend('gen_vis_backend_1')\nlocal_vis_backend_2 = visualizer.get_backend('gen_vis_backend_2')\n```\n\n### Visualize by Different Storage Backends\n\nIf you want to use a different backend (Wandb, Tensorboard, or a custom backend with a remote window), just change the `vis_backends` in the config, as follows:\n\n**Local**\n\n```python\nvis_backends = [dict(type='LocalVisBackend')]\n```\n\n**Tensorboard**\n\n```python\nvis_backends = [dict(type='TensorboardVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\nvis_backends = [dict(type='WandbVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer', vis_backends=vis_backends, name='visualizer')\n```\n"
  },
  {
    "path": "docs/zh_cn/.dev_scripts/update_dataset_zoo.py",
    "content": "import os\n\nfrom tqdm import tqdm\n\n\ndef update_dataset_zoo():\n\n    target_dir = 'dataset_zoo'\n    source_dir = '../../tools/dataset_converters'\n    os.makedirs(target_dir, exist_ok=True)\n\n    # generate overview\n    overviewmsg = \"\"\"\n# 概览\n\n\"\"\"\n\n    # generate index.rst\n    rstmsg = \"\"\"\n.. toctree::\n   :maxdepth: 1\n   :caption: Dataset Zoo\n\n   overview.md\n\"\"\"\n\n    subfolders = os.listdir(source_dir)\n    for subf in tqdm(subfolders, desc='update dataset zoo'):\n\n        target_subf = subf.replace('-', '_').lower()\n        target_readme = os.path.join(target_dir, target_subf + '.md')\n        source_readme = os.path.join(source_dir, subf, 'README_zh-CN.md')\n        if not os.path.exists(source_readme):\n            continue\n\n        overviewmsg += f'\\n- [{subf}]({target_subf}.md)'\n        rstmsg += f'\\n   {target_subf}.md'\n\n        # generate all tasks dataset_zoo\n        command = f'cat {source_readme} > {target_readme}'\n        os.popen(command)\n\n    with open(os.path.join(target_dir, 'overview.md'), 'w') as f:\n        f.write(overviewmsg)\n\n    with open(os.path.join(target_dir, 'index.rst'), 'w') as f:\n        f.write(rstmsg)\n\n\nif __name__ == '__main__':\n    update_dataset_zoo()\n"
  },
  {
    "path": "docs/zh_cn/.dev_scripts/update_model_zoo.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\n\nimport functools as func\nimport glob\nimport os\nimport os.path as osp\nimport re\nfrom os.path import basename, dirname\n\nimport numpy as np\nimport titlecase\nfrom tqdm import tqdm\n\ngithub_link = 'https://github.com/open-mmlab/mmagic/blob/main/'\n\n\ndef anchor(name):\n    return re.sub(r'-+', '-',\n                  re.sub(r'[^a-zA-Z0-9\\+]', '-',\n                         name.strip().lower())).strip('-')\n\n\ndef summarize(stats, name):\n    allpapers = func.reduce(lambda a, b: a.union(b),\n                            [p for p, _, _, _, _, _, _ in stats])\n    allconfigs = func.reduce(lambda a, b: a.union(b),\n                             [c for _, c, _, _, _, _, _ in stats])\n    allckpts = func.reduce(lambda a, b: a.union(b),\n                           [c for _, _, c, _, _, _, _ in stats])\n    alltasks = func.reduce(lambda a, b: a.union(b),\n                           [t for _, _, _, t, _, _, _ in stats])\n    task_desc = '\\n'.join([\n        f\"    - [{task}]({task.replace('-', '_').replace(' ', '_').lower()}.md)\"  # noqa\n        for task in list(alltasks)\n    ])\n\n    # Overview\n    papertypes, papercounts = np.unique([t for t, _ in allpapers],\n                                        return_counts=True)\n    countstr = '\\n'.join(\n        [f'   - {t}: {c}' for t, c in zip(papertypes, papercounts)])\n    countstr = '\\n'.join([f'   - ALGORITHM: {len(stats)}'])\n\n    summary = f\"\"\"# {name}\n\"\"\"\n\n    if name != 'Overview':\n        summary += '\\n## 概览'\n\n    summary += f\"\"\"\n* 预训练权重个数: {len(allckpts)}\n* 配置文件个数: {len(allconfigs)}\n* 论文个数: {len(allpapers)}\n{countstr}\n    \"\"\"\n\n    if name == 'Overview':\n        summary += f\"\"\"\n* 任务:\n{task_desc}\n\n\"\"\"\n\n    return summary\n\n\n# Count algorithms\ndef update_model_zoo():\n\n    target_dir = 'model_zoo'\n\n    os.makedirs(target_dir, exist_ok=True)\n\n    root_dir = dirname(dirname(dirname(dirname(osp.abspath(__file__)))))\n    files = sorted(glob.glob(osp.join(root_dir, 'configs/*/README_zh-CN.md')))\n    stats = []\n\n    for f in tqdm(files, desc='update model zoo'):\n        with open(f, 'r') as content_file:\n            content = content_file.read()\n\n        # title\n        title = content.split('\\n')[0].replace('#', '')\n        year = title.split('\\'')[-1].split(')')[0]\n\n        # count papers\n        papers = set(\n            (papertype,\n             titlecase.titlecase(paper.lower().strip()).replace('+', r'\\+'))\n            for (papertype, paper) in re.findall(\n                r'<!--\\s*\\[([A-Z]*?)\\]\\s*-->\\s*\\n.*?\\btitle\\s*=\\s*{(.*?)}',\n                content, re.DOTALL))\n\n        # paper links\n        revcontent = '\\n'.join(list(reversed(content.splitlines())))\n        paperlinks = {}\n        for _, p in papers:\n            paper_link = osp.join(github_link, 'configs', basename(dirname(f)),\n                                  'README_zh-CN.md')\n            # print(p, paper_link)\n            paperlinks[p] = ' '.join(\n                (f'[⇨]({paper_link}#{anchor(paperlink)})'\n                 for paperlink in re.findall(\n                     rf'\\btitle\\s*=\\s*{{\\s*{p}\\s*}}.*?\\n## (.*?)\\s*[,;]?\\s*\\n',\n                     revcontent, re.DOTALL | re.IGNORECASE)))\n            # print('   ', paperlinks[p])\n        paperlist = '\\n'.join(\n            sorted(f'    - [{t}] {x} ({paperlinks[x]})' for t, x in papers))\n\n        # count configs\n        configs = set(x.lower().strip()\n                      for x in re.findall(r'/configs/.*?\\.py', content))\n\n        # count ckpts\n        ckpts = list(\n            x.lower().strip()\n            for x in re.findall(r'\\[model\\]\\(https\\:\\/\\/.*\\.pth', content))\n        ckpts.extend(\n            x.lower().strip()\n            for x in re.findall(r'\\[ckpt\\]\\(https\\:\\/\\/.*\\.pth', content))\n        ckpts.extend(\n            x.lower().strip()\n            for x in re.findall(r'\\[模型\\]\\(https\\:\\/\\/.*\\.pth', content))\n        ckpts.extend(\n            x.lower().strip()\n            for x in re.findall(r'\\[权重\\]\\(https\\:\\/\\/.*\\.pth', content))\n        ckpts = set(ckpts)\n\n        # count tasks\n        task_desc = list(\n            set(x.lower().strip()\n                for x in re.findall(r'\\*\\*任务\\*\\*: .*', content)))\n        tasks = set()\n        if len(task_desc) > 0:\n            tasks = set(task_desc[0].split('**任务**: ')[1].split(', '))\n\n        statsmsg = f\"\"\"## {title}\"\"\"\n        if len(tasks) > 0:\n            statsmsg += f\"\\n* Tasks: {','.join(list(tasks))}\"\n        statsmsg += f\"\"\"\n\n* 预训练权重个数: {len(ckpts)}\n* 配置文件个数: {len(configs)}\n* 论文个数: {len(papers)}\n{paperlist}\n\n\"\"\"\n        # * We should have: {len(glob.glob(osp.join(dirname(f), '*.py')))}\n        content = content.replace('# ', '## ')\n        stats.append((papers, configs, ckpts, tasks, year, statsmsg, content))\n\n    # overview\n    overview = summarize(stats, '概览')\n    with open(osp.join(target_dir, 'overview.md'), 'w') as f:\n        f.write(overview)\n\n    alltasks = func.reduce(lambda a, b: a.union(b),\n                           [t for _, _, _, t, _, _, _ in stats])\n\n    # index.rst\n    indexmsg = \"\"\"\n.. toctree::\n   :maxdepth: 1\n   :caption: 模型库\n\n   overview.md\n\"\"\"\n\n    for task in alltasks:\n        task = task.replace(' ', '_').replace('-', '_').lower()\n        indexmsg += f'   {task}.md\\n'\n\n    with open(osp.join(target_dir, 'index.rst'), 'w') as f:\n        f.write(indexmsg)\n\n    #  task-specific\n    for task in alltasks:\n        filtered_model = [\n            (paper, config, ckpt, tasks, year, x, content)\n            for paper, config, ckpt, tasks, year, x, content in stats\n            if task in tasks\n        ]\n        filtered_model = sorted(filtered_model, key=lambda x: x[-3])[::-1]\n        overview = summarize(filtered_model, task)\n\n        msglist = '\\n'.join(x for _, _, _, _, _, _, x in filtered_model)\n        task = task.replace(' ', '_').replace('-', '_').lower()\n        with open(osp.join(target_dir, f'{task}.md'), 'w') as f:\n            f.write(overview + '\\n' + msglist)\n\n\nif __name__ == '__main__':\n    update_model_zoo()\n"
  },
  {
    "path": "docs/zh_cn/.gitignore",
    "content": "model_zoo\ndataset_zoo\n"
  },
  {
    "path": "docs/zh_cn/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSOURCEDIR     = .\nBUILDDIR      = _build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\trm -rf _build\n\trm -rf model_zoo\n\trm -rf dataset_zoo\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n"
  },
  {
    "path": "docs/zh_cn/_static/css/readthedocs.css",
    "content": ".header-logo {\n    background-image: url(\"../image/mmagic-logo.png\");\n    background-size: 142px 46px;\n    height: 46px;\n    width: 142px;\n}\n"
  },
  {
    "path": "docs/zh_cn/_templates/404.html",
    "content": "{% extends \"layout.html\" %}\n\n{% block body %}\n\n<h1>未找到页面</h1>\n<p>\n  未找到你要打开的页面。\n</p>\n<p>\n  如果你是从旧版本文档跳转至此，可能是对应的页面被移动了。请从左侧的目录中寻找新版本文档，或者跳转至<a href=\"{{ pathto(root_doc) }}\">首页</a>。\n</p>\n<p>\n  如果你找不到希望打开的文档，欢迎在 <a href=\"https://github.com/open-mmlab/mmagic/issues/new/choose\">Issue</a> 中告诉我们！\n</p>\n\n{% endblock %}\n"
  },
  {
    "path": "docs/zh_cn/advanced_guides/data_flow.md",
    "content": "# 数据流\n\n- [数据流](#数据流)\n  - [数据流概述](#数据流概述)\n  - [数据集与模型之间的数据流](#数据集与模型之间的数据流)\n    - [数据加载器的数据处理](#数据加载器的数据处理)\n    - [数据预处理器的数据处理](#数据预处理器的数据处理)\n  - [模型输出与可视化器之间的数据流](#模型输出与可视化器之间的数据流)\n\n## 数据流概述\n\n[Runner](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/runner.md) 相当于 MMEngine 中的“集成器”。它覆盖了框架的所有方面，并肩负着组织和调度几乎所有模块的责任，这意味着各模块之间的数据流也由 `Runner` 控制。在本章节中，我们将介绍 [Runner](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/runner.html) 管理的内部模块之间的数据流和数据格式约定。\n\n<div align=\"center\">\n<img src=\"https://github.com/open-mmlab/mmagic/assets/36404164/fc6ab53c-8804-416d-94cd-332c533a07ad\" height=\"150\" />\n</div>\n\n在上图中，在训练迭代中，数据加载器（dataloader）从存储中加载图像并传输到数据预处理器（data preprocessor），数据预处理器会将图像放到特定的设备上，并将数据堆叠到批处理中，之后模型接受批处理数据作为输入，最后将模型的输出计算损失函数（loss）。在评估时模型参数会被冻结，模型的输出需要经由数据预处理器（data preprocessor）解构再被传递给 [Evaluator](./evaluation.md#ioumetric)计算指标或者提供给[Visualizer](../user_guides/visualization.md)进行可视化。\n\n## 数据集与模型之间的数据流\n\n在本节中将介绍在MMagic中数据集中的数据流传递，关于[数据集定义](https://mmagic.readthedocs.io/zh_CN/latest/howto/dataset.html)和[数据处理管线](https://mmagic.readthedocs.io/zh_CN/latest/howto/transforms.html)相关的解读详见开发指南。数据集 （dataset） 和模型 （model）之间的数据流传递一般可以分为如下四个步骤 :\n\n1. 读取 `XXDataset` 收集数据集的原始信息，并且通过数据处理管线对数据进行数据转换处理;\n\n2. 使用 `PackInputs` 将转换完成的数据打包成为一个字典;\n\n3. 使用 `collate_fn` 将各个张量集成为一个批处理张量;\n\n4. 使用 `data_preprocessor` 把以上所有数据迁移到 GPUS 等目标设备，并在数据加载器中将之前打包的字典解压为一个元组，该元组包含输入图像与对应的元信息（`DataSample`）。\n\n### 数据处理管线的数据处理\n\n在MMagic中，经由不同类型的`XXDataset`, 分别读取数据(LQ)以及标注(GT)，并且在不同的数据预处理管道中进行数据转换，最后通过`PackInputs`将处理之后的数据打包为字典，此字典包含训练以及测试过程所需的所有数据。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> base_edit_model.py </th>\n    <th> base_conditional_gan.py </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n@MODELS.register_module()\nclass BaseEditModel(BaseModel):\n    \"\"\"Base model for image and video editing.\n    \"\"\"\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs) -> Union[torch.Tensor, List[DataSample], dict]:\n        if isinstance(inputs, dict):\n            inputs = inputs['img']\n        if mode == 'tensor':\n            return self.forward_tensor(inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n\n        elif mode == 'loss':\n            return self.forward_train(inputs, data_samples, **kwargs)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\n@MODELS.register_module()\nclass BaseConditionalGAN(BaseGAN):\n    \"\"\"Base class for Conditional GAM models.\n    \"\"\"\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            sample_kwargs = {}\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n            sample_kwargs = inputs.get('sample_kwargs', dict())\n        num_batches = noise.shape[0]\n\n        pass\n        ...\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n例如在`BaseEditModel`和`BaseConditionalGAN`模型中分别需要输入（input）包括 `img` 和 `noise` 的键值输入。同时，相应的字段也应该在配置文件中暴露, 以[cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py](../../../configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-80kiters_facades.py)为例，\n\n```python\ndomain_a = 'photo'\ndomain_b = 'mask'\npack_input = dict(\n    type='PackInputs',\n    keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n```\n\n### 数据加载器的数据处理\n\n以数据集中的获取字典列表作为输入，数据加载器（dataloader）中的 `collect_fn` 会提取每个字典的`inputs`并将其整合成一个批处理张量；此外，每个字典中的`data_sample`也会被整合为一个列表，从而输出一个与先前字典有相同键的字典；最终数据加载器会通过 `collect_fn` 输出这个字典。详细文档可见[数据集与数据加载器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/dataset.html)。\n\n### 数据预处理器的数据处理\n\n数据预处理是数据输入模型之前，处理数据过程的最后一步。 数据预处理过程会对图像进行归一处理，如把 BGR 模式转换为 RGB 模式，并将所有数据迁移至 GPU 等目标设备中 。上述各步骤完成后，最终会得到一个元组，该元组包含一个批处理图像的列表，和一个数据样本的列表。详细文档可见[数据预处理](./data_preprocessor.md)。\n\n## 模型输出与可视化器之间的数据流\n\nMMEngine约定了[抽象数据接口](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/advanced_tutorials/data_element.md)用于数据传递，其中 [数据样本](./structures.md)(DataSample) 作为一层更加高级封装可以容纳更多类别的标签数据。在MMagic中，用于可视化对比的`ConcatImageVisualizer`同时也通过 `add_datasample` 方法控制可视化具体内容，具体配置如下。\n\n```python\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=[dict(type='LocalVisBackend')],\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\n```\n"
  },
  {
    "path": "docs/zh_cn/advanced_guides/data_preprocessor.md",
    "content": "# 数据预处理器\n\n## 数据preprocessor在训练流程中的位置\n\n在模型训练过程中，图片数据先通过mmcv中的transform进行数据增强，并加载为dataloader，而后通过preprocessor将数据从cpu搬运到cuda上，并进行padding和归一化\n\nmmcv中的transform来自各下游算法库中transform的迁移，防止各下游算法库中transform的冗余，以`configs/_base_/datasets/unpaired_imgs_256x256.py`为例，其完整config中的`train_pipeline`如下所示\n\n```python\n...\ntrain_pipeline = [\n    dict(color_type='color', key='img_A', type='LoadImageFromFile'),\n    dict(color_type='color', key='img_B', type='LoadImageFromFile'),\n    dict(auto_remap=True, mapping=dict(img=['img_A', 'img_B',]),\n        share_random_params=True,\n        transforms=[dict(interpolation='bicubic', scale=(286, 286,), type='Resize'),\n                    dict(crop_size=(256, 256,), keys=['img',], random_crop=True, type='Crop'),],\n        type='TransformBroadcaster'),\n    dict(direction='horizontal', keys=['img_A', ], type='Flip'),\n    dict(direction='horizontal', keys=['img_B', ], type='Flip'),\n    dict(mapping=dict(img_mask='img_B', img_photo='img_A'),\n        remapping=dict(img_mask='img_mask', img_photo='img_photo'),\n        type='KeyMapper'),\n    dict(data_keys=['img_photo', 'img_mask',],\n        keys=['img_photo', 'img_mask',], type='PackInputs'),\n]\n...\n```\n\ndata_preprocessor会对transform后的数据进行数据搬移，拼接和归一化，而后输入到网络中，以`mmagic/models/editors/cyclegan/cyclegan.py`中的`train_step`函数为例，代码中的引用逻辑如下\n\n```python\n...\nmessage_hub = MessageHub.get_current_instance()\ncurr_iter = message_hub.get_info('iter')\ndata = self.data_preprocessor(data, True)\ndisc_optimizer_wrapper = optim_wrapper['discriminators']\n\ninputs_dict = data['inputs']\noutputs, log_vars = dict(), dict()\n...\n```\n\n在mmagic中的data_processor，其代码实现路径为`mmagic/models/data_preprocessors/data_preprocessor.py`，其数据处理流程如下图\n![image](https://github.com/jinxianwei/CloudImg/assets/81373517/f52a92ab-f86d-486d-86ac-a2f388a83ced)\n"
  },
  {
    "path": "docs/zh_cn/advanced_guides/evaluator.md",
    "content": "# 评估器\n\n## 评测指标与评测器\n\n在模型的验证和测试中，通常需要对模型的精度进行定量的评测。在mmagic中实现了评测指标(metric)和评测器(evaluator)来完成这一功能。\n\n- 评测指标(metric)用于根据测试数据和模型预测结果，特定模型精度指标的计算。在mmagic中内置了多种metric，详见[评价指标](https://mmagic.readthedocs.io/zh_CN/latest/user_guides/metrics.html)。同时metric和数据集解耦，每种metric可以用于多个数据集。\n- 评测器(evaluator)是评测指标的上层模块，通常需要包含一个或者多个指标。评测器的作用是在模型评测时完成必要的数据格式转换，并调用评测指标来计算模型精度。评测器通常由[执行器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/runner.html)或测试脚本构建，分别用于在线评测和离线评测。\n\nmmagic中的评测器继承自mmengine中的评测器，基本使用方法也与mmengine中的评测器类似，具体可以参见[模型精度评测](https://mmengine.readthedocs.io/zh_CN/latest/design/evaluation.html)。但不同于其他上层视觉任务，生成模型的评估指标往往具有多种输入。例如Inception Score（IS）指标的输入仅为虚假图片和任意数量的真实图片；Perceptual path length（PPL) 则需要从隐空间中进行采样。为了对不同的评测指标进行兼容，mmagic设计了两个重要的方法prepare_metrics和prepare_samplers来实现上述要求。\n\n## prepare_metrics\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    def prepare_metrics(self, module: BaseModel, dataloader: DataLoader):\n        \"\"\"Prepare for metrics before evaluation starts. Some metrics use\n        pretrained model to extract feature. Some metrics use pretrained model\n        to extract feature and input channel order may vary among those models.\n        Therefore, we first parse the output color order from data\n        preprocessor and set the color order for each metric. Then we pass the\n        dataloader to each metrics to prepare pre-calculated items. (e.g.\n        inception feature of the real images). If metric has no pre-calculated\n        items, :meth:`metric.prepare` will be ignored. Once the function has\n        been called, :attr:`self.is_ready` will be set as `True`. If\n        :attr:`self.is_ready` is `True`, this function will directly return to\n        avoid duplicate computation.\n\n        Args:\n            module (BaseModel): Model to evaluate.\n            dataloader (DataLoader): The dataloader for real images.\n        \"\"\"\n        if self.metrics is None:\n            self.is_ready = True\n            return\n\n        if self.is_ready:\n            return\n\n        # prepare metrics\n        for metric in self.metrics:\n            metric.prepare(module, dataloader)\n        self.is_ready = True\n```\n\nprepare_metrics方法需要在评测开始之前调用。它被用于在每个评测指标开始评测之前进行预处理，会依次调用evaluator的所有评测指标的prepare方法来准备该评测指标的需要预先计算好的元素(例如一些隐藏层的特征)。同时为了避免多次重复调用，在所有评测指标预处理完成之后，evaluator.is_ready 标志位会被设置为True。\n\n```python\nclass GenMetric(BaseMetric):\n\t...\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        \"\"\"Prepare for the pre-calculating items of the metric. Defaults to do\n        nothing.\n\n        Args:\n            module (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for the real images.\n        \"\"\"\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n```\n\n## prepare_samplers\n\n对于生成模型而言，不同的metric需要不同的输入。例如FID, KID, IS只需要生成的fake images，而PPL则需要隐空间的向量。因此mmagic将不同的评估指标按照输入的类型进行了分组，属于同一个组的一个或者多个评测指标共享一个数据的采样器，每个评测指标的sampler mode由该评测指标的SAMPLER_MODE属性决定。\n\n```python\nclass GenMetric(BaseMetric):\n\t...\n    SAMPLER_MODE = 'normal'\n\nclass GenerativeMetric(GenMetric):\n\t...\n    SAMPLER_MODE = 'Generative'\n```\n\n而evaluator的prepare_samplers 方法就是根据所有评测指标的sampler mode来准备好data sampler。\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    def prepare_samplers(self, module: BaseModel, dataloader: DataLoader\n                         ) -> List[Tuple[List[BaseMetric], Iterator]]:\n        \"\"\"Prepare for the sampler for metrics whose sampling mode are\n        different. For generative models, different metric need image\n        generated with different inputs. For example, FID, KID and IS need\n        images generated with random noise, and PPL need paired images on the\n        specific noise interpolation path. Therefore, we first group metrics\n        with respect to their sampler's mode (refers to\n        :attr:~`GenMetrics.SAMPLER_MODE`), and build a shared sampler for each\n        metric group. To be noted that, the length of the shared sampler\n        depends on the metric of the most images required in each group.\n\n        Args:\n            module (BaseModel): Model to evaluate. Some metrics (e.g. PPL)\n                require `module` in their sampler.\n            dataloader (DataLoader): The dataloader for real image.\n\n        Returns:\n            List[Tuple[List[BaseMetric], Iterator]]: A list of \"metrics-shared\n                sampler\" pair.\n        \"\"\"\n        if self.metrics is None:\n            return [[[None], []]]\n\n        # grouping metrics based on `SAMPLER_MODE` and `sample_mode`\n        metric_mode_dict = defaultdict(list)\n        for metric in self.metrics:  # 为每个metric指定sampler group\n            metric_md5 = self._cal_metric_hash(metric)\n            metric_mode_dict[metric_md5].append(metric)\n\n        metrics_sampler_list = []\n        for metrics in metric_mode_dict.values(): #为每个group生成sampler\n            first_metric = metrics[0]\n            metrics_sampler_list.append([\n                metrics,\n                first_metric.get_metric_sampler(module, dataloader, metrics)\n            ])\n\n        return metrics_sampler_list\n```\n\n该方法会首先检查自身是否有需要计算的评测指标：如果没有直接返回，如果有则会遍历所有评测指标，对所有采样指标根据sampler_mode和sample_model进行分组, 具体实现方式为根据sampler_mode和sample_model计算hash码，将具有相同hash码的评测指标放入同一个列表里。\n\n```python\nclass Evaluator(Evaluator):\n\t...\n    @staticmethod\n    def _cal_metric_hash(metric: GenMetric):\n        \"\"\"Calculate a unique hash value based on the `SAMPLER_MODE` and\n        `sample_model`.\"\"\"\n        sampler_mode = metric.SAMPLER_MODE\n        sample_model = metric.sample_model\n        metric_dict = {\n            'SAMPLER_MODE': sampler_mode,\n            'sample_model': sample_model\n        }\n        if hasattr(metric, 'need_cond_input'):\n            metric_dict['need_cond_input'] = metric.need_cond_input\n        md5 = hashlib.md5(repr(metric_dict).encode('utf-8')).hexdigest()\n        return md5\n```\n\n最后该方法会为每一个评测指标组生成一个sampler采样器，添加到列表返回。\n\n## 评测器评测流程\n\n整个评测器的评测流程在方法mmagic.engine.runner.MultiValLoop.run和mmagic.engine.runner.MultiTestLoop.run中实现。以mmagic.engine.runner.MultiTestLoop.run为例：\n\n```python\nclass MultiValLoop(BaseLoop):\n\t...\n    def run(self):\n\t...\n        # 1. prepare all metrics and get the total length\n        metrics_sampler_lists = []\n        meta_info_list = []\n        dataset_name_list = []\n        for evaluator, dataloader in zip(self.evaluators, self.dataloaders):\n            # 1.1 prepare for metrics\n            evaluator.prepare_metrics(module, dataloader)\n            # 1.2 prepare for metric-sampler pair\n            metrics_sampler_list = evaluator.prepare_samplers(\n                module, dataloader)\n            metrics_sampler_lists.append(metrics_sampler_list)\n            # 1.3 update total length\n            self._total_length += sum([\n                len(metrics_sampler[1])\n                for metrics_sampler in metrics_sampler_list\n            ])\n            # 1.4 save metainfo and dataset's name\n            meta_info_list.append(\n                getattr(dataloader.dataset, 'metainfo', None))\n            dataset_name_list.append(dataloader.dataset.__class__.__name__)\n```\n\nrunner首先会通过evaluator.prepare_metrics和evaluator.prepare_samplers两个方法来进行评测所需要的预处理工作和获取评测所需要的数据采样器；同时更新所有采样器的采样总长度。由于mmagic的评测指标和数据集进行了分离，因此一些在评测时所需要的meta_info也需要进行保存并传递给评测器。\n\n```python\nclass MultiValLoop(BaseLoop):\n\t...\n    def run(self):\n\t...\n        # 2. run evaluation\n        for idx in range(len(self.evaluators)):\n            # 2.1 set self.evaluator for run_iter\n            self.evaluator = self.evaluators[idx]\n            self.dataloader = self.dataloaders[idx]\n\n            # 2.2 update metainfo for evaluator and visualizer\n            meta_info = meta_info_list[idx]\n            dataset_name = dataset_name_list[idx]\n            if meta_info:\n                self.evaluator.dataset_meta = meta_info\n                self._runner.visualizer.dataset_meta = meta_info\n            else:\n                warnings.warn(\n                    f'Dataset {dataset_name} has no metainfo. `dataset_meta` '\n                    'in evaluator, metric and visualizer will be None.')\n\n            # 2.3 generate images\n            metrics_sampler_list = metrics_sampler_lists[idx]\n            for metrics, sampler in metrics_sampler_list:\n                for data in sampler:\n                    self.run_iter(idx_counter, data, metrics)\n                    idx_counter += 1\n\n            # 2.4 evaluate metrics and update multi_metric\n            metrics = self.evaluator.evaluate()\n            if multi_metric and metrics.keys() & multi_metric.keys():\n                raise ValueError('Please set different prefix for different'\n                                 ' datasets in `val_evaluator`')\n            else:\n                multi_metric.update(metrics)\n        # 3. finish evaluation and call hooks\n        self._runner.call_hook('after_val_epoch', metrics=multi_metric)\n        self._runner.call_hook('after_val')\n```\n\n在完成了评测前的准备之后，runner会遍历所有evaluator，依次进行评估，每个evaluator需要对应一个dataloader，完成一个数据集的评测工作。具体在对每个evaluator进行评测的过程中，首先需要将评测所需要的meta_info传递给评测器，随后遍历该evaluator的所有metrics_sampler，生成评测所需要的图像，最后再完成评测。\n"
  },
  {
    "path": "docs/zh_cn/advanced_guides/structures.md",
    "content": "# Data Structure\n\nMMaigc的数据结构接口`DataSample` 继承自 MMEngine 的 [` BaseDataElement`](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html).MMEngine 的抽象数据接口实现了基础的增/删/改/查功能，且支持不同设备间的数据迁移，也支持了类字典和张量的操作，充分满足了数据的日常使用需求，这也使得不同算法的数据接口可以得到统一。\n\n特别的，`BaseDataElement` 中存在两种类型的数据:\n\n- `metainfo` 类型，包含数据的元信息以确保数据的完整性，如 `img_shape`, `img_id` 等数据所在图片的一些基本信息，方便可视化等情况下对数据进行恢复和使用。\n- `data` 类型，如标注框、框的标签、和实例掩码等。\n\n得益于统一的数据封装，算法库内的 [`visualizer`](https://mmagic.readthedocs.io/zh_CN/latest/user_guides/visualization.html), [`evaluator`](https://mmagic.readthedocs.io/zh_CN/latest/advanced_guides/evaluator.html), [`model`](https://mmagic.readthedocs.io/zh_CN/latest/howto/models.html) 等各个模块间的数据流通都得到了极大的简化。\n\n`DataSample`中的数据分为以下几个属性：\n\n```python\n- ``gt_img``: 原始图像\n- ``pred_img``: 模型预测图像\n- ``ref_img``:参考图像\n- ``mask``: 图像修复中的遮挡区域\n- ``trimap``: 图像抠图中的三通道图\n- ``gt_alpha``: 图像抠图中原始Alpha图\n- ``pred_alpha``: 图像抠图中模型预测Alpha图\n- ``gt_fg``: 图像抠图中原始前景图\n- ``pred_fg``: 图像抠图中模型预测前景图\n- ``gt_bg``:  图像抠图中原始背景图\n- ``pred_bg``: 图像抠图中模型预测背景图\n- ``gt_merged``:  图像抠图中原始合并图\n```\n\n以下示例代码展示了 `DataSample` 的组成元素类型：\n\n```python\nimport torch\nimport numpy as np\nfrom mmagic.structures import DataSample\nimg_meta = dict(img_shape=(800, 1196, 3))\nimg = torch.rand((3, 800, 1196))\ndata_sample = DataSample(gt_img=img, metainfo=img_meta)\nassert 'img_shape' in data_sample.metainfo_keys()\ndata_sample\n# `DataSample` 的组成元素类型\n<DataSample(\n\n        META INFORMATION\n        img_shape: (800, 1196, 3)\n\n        DATA FIELDS\n        gt_img: tensor(3, 800, 1196)\n    ) at 0x1f6a5a99a00>\n```\n\n`DataSample`同样支持`stack`和`split`操作对数据进行批处理:\n\n1. Stack\n\n该函数用于将数据样本列表堆叠成一个。当数据样本堆叠时，所有张量字段都将堆叠在第一维度。如果数据样本中有非张量字段，例如列表或字典，则这些字段的值将保存在列表中。\n\n```\n    Args:\n        data_samples (Sequence['DataSample']): 待堆叠的数据样本序列\n\n    Returns:\n        DataSample: 堆叠的数据样本\n```\n\n2. Split\n\n该函数将在第一维度拆分数据样本序列。\n\n```\n\tArgs:\n         allow_nonseq_value (bool): 是否允许在拆分操作中使用非顺序数据。如果为 \"True\"，\t\t\t将为所有拆分数据样本复制非序列数据；否则，将引发错误。默认为 \"False\"。\n\n    Returns:\n         Sequence[DataSample]: 拆分后的数据样本列表。\n```\n\n以下示例代码展示了 `stack`和`split` 的使用方法：\n\n```py\nimport torch\nimport numpy as np\nfrom mmagic.structures import DataSample\nimg_meta1 = img_meta2 = dict(img_shape=(800, 1196, 3))\nimg1 = torch.rand((3, 800, 1196))\nimg2 = torch.rand((3, 800, 1196))\ndata_sample1 = DataSample(gt_img=img1, metainfo=img_meta1)\ndata_sample2 = DataSample(gt_img=img2, metainfo=img_meta1)\n```\n\n```py\n# 堆叠stack\ndata_sample = DataSample.stack([data_sample1, data_sample2])\nprint(data_sample.gt_img.shape)\n    torch.Size([2, 3, 800, 1196])\nprint(data_sample.metainfo)\n    {'img_shape': [(800, 1196, 3), (800, 1196, 3)]}\n\n# 拆分split\ndata_sample1_, data_sample2_ = data_sample.split()\nassert (data_sample1_.gt_img == img1).all()\nassert (data_sample2_.gt_img == img2).all()\n```\n"
  },
  {
    "path": "docs/zh_cn/changelog.md",
    "content": "# 变更日志\n\n**亮点**\n\n- 我们的代码仓库中发布了一个先进而强大的图像 inpainting 算法 PowerPaint。 [Click to View](https://github.com/open-mmlab/mmagic/tree/main/projects/powerpaint)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/12782558/eba2c6a4-3ff4-4075-a027-0e9799769bf9\"/>\n</div>\n\n**新功能和改进**\n\n- \\[CodeCamp2023-645\\] 新增 dreambooth 的new cfg, by @YanxingLiu in https://github.com/open-mmlab/mmagic/pull/2042\n- \\[Enhance\\] 新增 _base_ 目录下的 new config by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2053\n- \\[Enhance\\] 支持了 instance_crop 使用 from_pretrained by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2066\n- \\[Enhance\\] 支持了最新的 diffusers 使用 lora by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2067\n- \\[Enhance\\] 提升了 powerpaint by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2078\n- \\[Enhance\\] 提升了 powerpaint by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2080\n- \\[Enhance\\] 增加了 gradio_PowerPaint.py 的 outpainting  by @zhuang2002 in https://github.com/open-mmlab/mmagic/pull/2084\n- \\[MMSIG\\] 增加了 StyleGAN2 的新config by @xiaomile in https://github.com/open-mmlab/mmagic/pull/2057\n- \\[MMSIG\\] \\[Doc\\] 更新了 data_preprocessor.md by @jinxianwei in https://github.com/open-mmlab/mmagic/pull/2055\n- \\[Enhance\\] 提升了 PowerPaint by @zhuang2002 in https://github.com/open-mmlab/mmagic/pull/2093\n\n**Bug 修复**\n\n- \\[Fix\\] 更新了 README.md by @eze1376 in https://github.com/open-mmlab/mmagic/pull/2048\n- \\[Fix\\] 修复了 test tokenizer by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2050\n- \\[Fix\\] 修复了 readthedocs building by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2052\n- \\[Fix\\] 修复了 --local-rank for PyTorch >= 2.0.0 by @youqingxiaozhua in https://github.com/open-mmlab/mmagic/pull/2051\n- \\[Fix\\] 修复了 animatediff download from openxlab by @JianxinDong in https://github.com/open-mmlab/mmagic/pull/2061\n- \\[Fix\\] 修复了 best practice by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2063\n- \\[Fix\\] 修复了 try import expand mask from transformers by @zengyh1900 in https://github.com/open-mmlab/mmagic/pull/2064\n- \\[Fix\\] 更新了 diffusers to v0.23.0 by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2069\n- \\[Fix\\] 修复了 openxlab link to powerpaint by @liuwenran in https://github.com/open-mmlab/mmagic/pull/2082\n- \\[Fix\\] 更新了 swinir_x2s48w8d6e180_8xb4-lr2e-4-500k_div2k.py, use MultiValLoop. by @ashutoshsingh0223 in https://github.com/open-mmlab/mmagic/pull/2085\n- \\[Fix\\] 修复了 a test expression that has a logical short circuit. by @munahaf in https://github.com/open-mmlab/mmagic/pull/2046\n- \\[Fix\\] 修复了 Powerpaint  load safetensors by @sdbds in https://github.com/open-mmlab/mmagic/pull/2088\n\n**新贡献者**\n\n- @eze1376 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2048\n- @youqingxiaozhua 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2051\n- @JianxinDong 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2061\n- @zhuang2002 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2076\n- @ashutoshsingh0223 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2085\n- @jinxianwei 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2055\n- @munahaf 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2046\n- @sdbds 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2088\n\n**完整更新日志**: https://github.com/open-mmlab/mmagic/compare/v1.1.0...v1.2.0\n\n## v1.1.0 (22/09/2023)\n\n**亮点**\n\n在这次的发版中，我们新支持了下面五个新的算法.\n\n- 支持了 ViCo, 一种新的 SD personalization 算法. [点击查看](https://github.com/open-mmlab/mmagic/blob/main/configs/vico/README.md)\n\n<table align=\"center\">\n<thead>\n  <tr>\n    <td>\n<div align=\"center\">\n  <img src=\"https://github.com/open-mmlab/mmagic/assets/71176040/58a6953c-053a-40ea-8826-eee428c992b5\" width=\"800\"/>\n  <br/>\n</thead>\n</table>\n\n- 支持了 AnimateDiff, 一个很火的 text2animation 算法. [点击查看](https://github.com/open-mmlab/mmagic/blob/main/configs/animatediff/README.md)\n\n![512](https://github.com/ElliotQi/mmagic/assets/46469021/54d92aca-dfa9-4eeb-ba38-3f6c981e5399)\n\n- 支持了 SDXL. [点击查看](https://github.com/open-mmlab/mmagic/blob/main/configs/stable_diffusion_xl/README.md)\n\n<div align=center>\n<img src=\"https://github.com/okotaku/diffengine/assets/24734142/27d4ebad-5705-4500-826f-41f425a08c0d\"/>\n</div>\n\n- 支持了 DragGAN. [点击查看](https://github.com/open-mmlab/mmagic/blob/main/configs/draggan/README.md)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/55343765/7c397bd0-fa07-48fe-8a7c-a4022907404b\"/>\n</div>\n\n- 支持了 FastComposer. [点击查看](https://github.com/open-mmlab/mmagic/blob/main/configs/fastcomposer/README.md)\n\n<div align=center>\n<img src=\"https://user-images.githubusercontent.com/14927720/265914135-8a25789c-8d30-40cb-8ac5-e3bd3b617aac.png\">\n</div>\n\n**新功能和改进**\n\n- \\[功能\\] 支持使用diffusers pipeline进行推断，首先使用sd_xl。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2023\n- \\[增强\\] 为sd推理器添加负面提示。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2021\n- \\[增强\\] 更新setup.cfg中的flake8检查配置。由@LeoXing1996完成，在https://github.com/open-mmlab/mmagic/pull/2007\n- \\[增强\\] 将'config_name'作为'model_setting'的补充添加。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2027\n- \\[增强\\] 更快的测试。由@okotaku完成，在https://github.com/open-mmlab/mmagic/pull/2034\n- \\[增强\\] 添加OpenXLab徽章。由@ZhaoQiiii完成，在https://github.com/open-mmlab/mmagic/pull/2037\n\n**CodeCamp贡献**\n\n- \\[CodeCamp2023-643\\] 添加BigGAN的新配置。由@limafang完成，在https://github.com/open-mmlab/mmagic/pull/2003\n- \\[CodeCamp2023-648\\] MMagic的新配置GuidedDiffusion。由@ooooo-create完成，在https://github.com/open-mmlab/mmagic/pull/2005\n- \\[CodeCamp2023-649\\] MMagic的新配置Instance Colorization。由@ooooo-create完成，在https://github.com/open-mmlab/mmagic/pull/2010\n- \\[CodeCamp2023-652\\] MMagic的新配置StyleGAN3。由@hhy150完成，在https://github.com/open-mmlab/mmagic/pull/2018\n- \\[CodeCamp2023-653\\] 添加Real BasicVSR的新配置。由@RangeKing完成，在https://github.com/open-mmlab/mmagic/pull/2030\n\n**Bug 修复**\n\n- \\[修复\\] 修复主页上的最佳实践和返回目录，将新模型添加到模型库中。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2001\n- \\[修复\\] 检查CI错误并移除主流GPU测试。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2013\n- \\[修复\\] 检查Circle CI内存。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2016\n- \\[修复\\] 移除代码并修复剪辑损失的单元测试。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2017\n- \\[修复\\] 在diffusers pipeline推理器单元测试中模拟推理。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2026\n- \\[修复\\] 由于合并draggan而修复的错误。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2029\n- \\[修复\\] 更新QR码。由@crazysteeaam完成，在https://github.com/open-mmlab/mmagic/pull/2009\n- \\[修复\\] 用OpenXLab版本替换README中的下载链接。由@FerryHuang完成，在https://github.com/open-mmlab/mmagic/pull/2038\n- \\[修复\\] 增加文档字符串覆盖率。由@liuwenran完成，在https://github.com/open-mmlab/mmagic/pull/2039\n\n**新贡献者**\n\n- @limafang 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2003\n- @ooooo-create 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2005\n- @hhy150 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2018\n- @ZhaoQiiii 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2037\n- @ElliotQi 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1980\n- @Beaconsyh08 首次贡献于 https://github.com/open-mmlab/mmagic/pull/2012\n\n**完整更新日志**: https://github.com/open-mmlab/mmagic/compare/v1.0.2...v1.0.3\n\n## v1.0.2 (24/08/2023)\n\n**亮点**\n\n**1. 更详尽的文档**\n\n感谢社区的贡献者们帮助我们改进文档。我们已经改进了许多文档，包括中文和英文版本。更多详细信息请参考[文档](https://mmagic.readthedocs.io/zh_CN/latest/)。\n\n**2. 新的算法**\n\n- 支持了 Prompt-to-prompt, DDIM Inversion 和 Null-text Inversion. [点击查看.](https://github.com/open-mmlab/mmagic/blob/main/projects/prompt_to_prompt/README.md)\n\n从左到右: origin image, DDIM inversion, Null-text inversion\n\n<center class=\"half\">\n    <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/34d8a467-5378-41fb-83c6-b23c9dee8f0a\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/3d3814b4-7fb5-4232-a56f-fd7fef0ba28e\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/43008ed4-a5a3-4f81-ba9f-95d9e79e6a08\" width=\"200\"/>\n</center>\n\nPrompt-to-prompt 编辑\n\n<div align=\"center\">\n  <b>cat -> dog</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f5d3fc0c-aa7b-4525-9364-365b254d51ca\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>spider man -> iron man(attention replace)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/074adbc6-bd48-4c82-99aa-f322cf937f5a\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>Effel tower -> Effel tower at night (attention refine)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f815dab3-b20c-4936-90e3-a060d3717e22\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>blossom sakura tree -> blossom(-3) sakura tree (attention reweight)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/5ef770b9-4f28-4ae7-84b0-6c15ea7450e9\" width=\"500\"/>\n</div>\n\n- 支持了 Textual Inversion. [点击查看.](https://github.com/open-mmlab/mmagic/blob/main/configs/textual_inversion/README.md)\n\n<div align=center>\n<img src=\"https://github.com/open-mmlab/mmagic/assets/28132635/b2dac6f1-5151-4199-bcc2-71b5b1523a16\">\n</div>\n\n- 支持了 Attention Injection 以便使用 controlnet 生成更稳定的视频. [点击查看.](https://github.com/open-mmlab/mmagic/blob/main/configs/controlnet_animation/README.md)\n- 支持了 Stable Diffusion Inpainting. [点击查看.](https://github.com/open-mmlab/mmagic/blob/main/configs/stable_diffusion/README.md)\n\n**新功能和改进**\n\n- \\[增强\\] 支持在稳定扩散训练中的噪声偏移，由 @LeoXing1996 提交于 https://github.com/open-mmlab/mmagic/pull/1880 ↗\n- \\[社区\\] 支持 Glide Upsampler，由 @Taited 提交于 https://github.com/open-mmlab/mmagic/pull/1663 ↗\n- \\[增强\\] 支持 controlnet 推理器，由 @Z-Fran 提交于 https://github.com/open-mmlab/mmagic/pull/1891 ↗\n- \\[功能\\] 支持 Albumentations 增强变换和流水线，由 @Z-Fran 提交于 https://github.com/open-mmlab/mmagic/pull/1894 ↗\n- \\[功能\\] 为 unet 添加注意力注入，由 @liuwenran 提交于 https://github.com/open-mmlab/mmagic/pull/1895 ↗\n- \\[增强\\] 更新基准测试脚本，由 @Z-Fran 提交于 https://github.com/open-mmlab/mmagic/pull/1907 ↗\n- \\[增强\\] 更新 mmagic 文档，由 @crazysteeaam 提交于 https://github.com/open-mmlab/mmagic/pull/1920 ↗\n- \\[增强\\] 支持 Prompt-to-prompt、ddim inversion 和 null-text inversion，由 @FerryHuang 提交于 https://github.com/open-mmlab/mmagic/pull/1908 ↗\n- \\[CodeCamp2023-302\\] 支持 MMagic 可视化并编写用户指南，由 @aptsunny 提交于 https://github.com/open-mmlab/mmagic/pull/1939 ↗\n- \\[功能\\] 支持textual inversion，由 @LeoXing1996 提交于 https://github.com/open-mmlab/mmagic/pull/1822 ↗\n- \\[增强\\] 对一些模型采用 BaseModule，由 @LeoXing1996 提交于 https://github.com/open-mmlab/mmagic/pull/1543 ↗\n- \\[MMSIG\\] 支持 DeblurGANv2 推理，由 @xiaomile 提交于 https://github.com/open-mmlab/mmagic/pull/1955 ↗\n- \\[CodeCamp2023-647\\] 添加 EG3D 的新配置，由 @RangeKing 提交于 https://github.com/open-mmlab/mmagic/pull/1985 ↗\n\n**Bug 修复**\n\n- 修复了 StableDiffusion 和 DreamBooth 训练中的 dtype 错误。 by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1879\n- 修复了 gui VideoSlider 的 bug。 by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1885\n- 修复了 init_model 和 glide demo 的问题。 by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1888\n- 修复了当 dim=3 时的 InstColorization bug。 by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1901\n- 修复了 sd 和 controlnet 的 fp16 bug。 by @Z-Fran in https://github.com/open-mmlab/mmagic/pull/1914\n- 修复了 controlnet 中的 num_images_per_prompt。 by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1936\n- 修正了 sd-inpainting 的 metafile 以修复推理器的初始化。 by @LeoXing1996 in https://github.com/open-mmlab/mmagic/pull/1995\n\n**新贡献者**\n\n- @wyyang23 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1886\n- @yehuixie 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1912\n- @crazysteeaam 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1920\n- @BUPT-NingXinyu 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1921\n- @zhjunqin 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1918\n- @xuesheng1031 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1923\n- @wslgqq277g 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1934\n- @LYMDLUT 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1933\n- @RangeKing 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1930\n- @xin-li-67 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1932\n- @chg0901 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1931\n- @aptsunny 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1939\n- @YanxingLiu 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1943\n- @tackhwa 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1937\n- @Geo-Chou 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1940\n- @qsun1 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1956\n- @ththth888 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1961\n- @sijiua 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1967\n- @MING-ZCH 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1982\n- @AllYoung 首次贡献于 https://github.com/open-mmlab/mmagic/pull/1996\n\n## v1.0.1 (26/05/2023)\n\n**新功能和改进**\n\n- 支持 StableDiffusion tomesd 加速. [#1801](https://github.com/open-mmlab/mmagic/pull/1801)\n- 支持所有 inpainting/matting/image restoration 模型的 inferencer. [#1833](https://github.com/open-mmlab/mmagic/pull/1833), [#1873](https://github.com/open-mmlab/mmagic/pull/1873)\n- 支持 animated drawings. [#1837](https://github.com/open-mmlab/mmagic/pull/1837)\n- 支持 Style-Based Global Appearance Flow for Virtual Try-On at projects. [#1786](https://github.com/open-mmlab/mmagic/pull/1786)\n- 支持 tokenizer wrapper 和 EmbeddingLayerWithFixe. [#1846](https://github.com/open-mmlab/mmagic/pull/1846)\n\n**Bug 修复**\n\n- 修复安装依赖. [#1819](https://github.com/open-mmlab/mmagic/pull/1819)\n- 修复 inst-colorization PackInputs. [#1828](https://github.com/open-mmlab/mmagic/pull/1828), [#1827](https://github.com/open-mmlab/mmagic/pull/1827)\n- 修复 pip install 时 inferencer 无法使用的问题. [#1875](https://github.com/open-mmlab/mmagic/pull/1875)\n\n## v1.0.0 (25/04/2023)\n\n我们正式发布 MMagic v1.0.0 版本，源自 [MMEditing](https://github.com/open-mmlab/mmediting) 和 [MMGeneration](https://github.com/open-mmlab/mmgeneration)。\n\n![mmagic-log](https://user-images.githubusercontent.com/49083766/233557648-9034f5a0-c85d-4092-b700-3a28072251b6.png)\n\n自从 MMEditing 诞生以来，它一直是许多图像超分辨率、编辑和生成任务的首选算法库，帮助多个研究团队取得 10 余 项国际顶级赛事的胜利，支撑了 100 多个 GitHub 生态项目。经过 OpenMMLab 2.0 框架的迭代更新以及与 MMGeneration 的合并，MMEditing 已经成为了一个支持基于 GAN 和 CNN 的底层视觉算法的强大工具。\n\n而今天，MMEditing 将更加拥抱生成式 AI（Generative AI），正式更名为 **MMagic**（**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation），致力于打造更先进、更全面的 AIGC 开源算法库。\n\n在 MMagic 中，我们已经支持了 53+ 模型，分布于 Stable Diffusion 的微调、图文生成、图像及视频修复、超分辨率、编辑和生成等多种任务。配合 [MMEngine](https://github.com/open-mmlab/mmengine) 出色的训练与实验管理支持，MMagic 将为广大研究者与 AIGC 爱好者们提供更加快捷灵活的实验支持，助力你的 AIGC 探索之旅。使用 MMagic，体验更多生成的魔力！让我们一起开启超越编辑的新纪元！ More than Editing, Unlock the Magic!\n\n**主要更新**\n\n**1. 新算法**\n\n我们支持了4个新任务以及11个新算法。\n\n- Text2Image / Diffusion\n  - ControlNet\n  - DreamBooth\n  - Stable Diffusion\n  - Disco Diffusion\n  - GLIDE\n  - Guided Diffusion\n- 3D-aware Generation\n  - EG3D\n- Image Restoration\n  - NAFNet\n  - Restormer\n  - SwinIR\n- Image Colorization\n  - InstColorization\n\nhttps://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\n\n**2. Magic Diffusion Model**\n\n针对 Diffusion Model，我们提供了以下“魔法”\n\n- 支持基于 Stable Diffusion 与 Disco Diffusion 的图像生成.\n\n- 支持 Dreambooth 以及 DreamBooth LoRA 等 Finetune 方法.\n\n- 支持 ControlNet 进行可控性的文本到图像生成.\n  ![de87f16f-bf6d-4a61-8406-5ecdbb9167b6](https://user-images.githubusercontent.com/49083766/233558077-2005e603-c5a8-49af-930f-e7a465ca818b.png)\n\n- 支持 xFormers 加速和优化策略，提高训练与推理效率.\n\n- 支持基于 MultiFrame Render 的视频生成.\n  MMagic 支持通过 ControlNet 与多帧渲染法实现长视频的生成。\n  prompt keywords: a handsome man, silver hair, smiling, play basketball\n\n  https://user-images.githubusercontent.com/12782558/227149757-fd054d32-554f-45d5-9f09-319184866d85.mp4\n\n  prompt keywords: a girl, black hair, white pants, smiling, play basketball\n\n  https://user-images.githubusercontent.com/49083766/233559964-bd5127bd-52f6-44b6-a089-9d7adfbc2430.mp4\n\n  prompt keywords: a handsome man\n\n  https://user-images.githubusercontent.com/12782558/227152129-d70d5f76-a6fc-4d23-97d1-a94abd08f95a.mp4\n\n- 支持通过 Wrapper 调用 Diffusers 的基础模型以及采样策略.\n\n- SAM + MMagic = Generate Anything！\n  当下流行的 SAM（Segment Anything Model）也可以为 MMagic 提供更多加持！想制作自己的动画，可以移步至 [OpenMMLab PlayGround](https://github.com/open-mmlab/playground/blob/main/mmediting_sam/README.md)！\n\n  https://user-images.githubusercontent.com/49083766/233562228-f39fc675-326c-4ae8-986a-c942059effd0.mp4\n\n**3. 框架升级**\n\n为了提升你的“施法”效率，我们对“魔术回路”做了以下升级:\n\n- 通过 OpenMMLab 2.0 框架的 MMEngine 和 MMCV， MMagic 将编辑框架分解为不同的组件，并且可以通过组合不同的模块轻松地构建自定义的编辑器模型。我们可以像搭建“乐高”一样定义训练流程，提供丰富的组件和策略。在 MMagic 中，你可以使用不同的 APIs 完全控制训练流程.\n- 支持 33+ 算法 Pytorch 2.0 加速.\n- 重构 DataSample，支持 batch 维度的组合与拆分.\n- 重构 DataPreprocessor，并统一各种任务在训练与推理时的数据格式.\n- 重构 MultiValLoop 与 MultiTestLoop，同时支持生成类型指标（e.g. FID）与重建类型指标（e.g. SSIM） 的评测，同时支持一次性评测多个数据集\n- 支持本地可视化以及使用 tensorboard 或 wandb的可视化.\n\n**新功能和改进**\n\n- 支持 53+ 算法，232+ 配置，213+ 模型权重，26+ 损失函数，and 20+ 评价指标.\n- 支持 controlnet 动画生成以及 Gradio gui. [点击查看.](https://github.com/open-mmlab/mmagic/tree/main/configs/controlnet_animation)\n- 支持 Inferencer 和 Demo，使用High-level Inference APIs. [点击查看.](https://github.com/open-mmlab/mmagic/tree/main/demo)\n- 支持 Inpainting 推理的 Gradio gui. [点击查看.](https://github.com/open-mmlab/mmagic/blob/main/demo/gradio-demo.py)\n- 支持可视化图像/视频质量比较工具. [点击查看.](https://github.com/open-mmlab/mmagic/tree/main/tools/gui)\n- 开启 projects，助力社区更快向算法库中添加新算法. [点击查看.](https://github.com/open-mmlab/mmagic/tree/main/projects)\n- 完善数据集的预处理脚本和使用说明文档. [点击查看.](https://github.com/open-mmlab/mmagic/tree/main/tools/dataset_converters)\n\n## v1.0.0rc7 (07/04/2023)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc7 版本。 此版本支持了 MMEditing 和 MMGeneration 的 51+ 模型，226+ configs 和 212+ checkpoints。以下是此次版本发布的重点新功能\n\n- 支持了 DiffuserWrapper.\n- 支持了 ControlNet 的推理与训练.\n- 支持了 PyTorch 2.0.\n\n**新功能和改进**\n\n- 支持了 DiffuserWrapper. [#1692](https://github.com/open-mmlab/mmagic/pull/1692)\n- 支持了 ControlNet 的推理与训练. [#1744](https://github.com/open-mmlab/mmagic/pull/1744)\n- 支持了 PyTorch 2.0 (使用 'inductor' 后端成功编译 33+ 模型) [#1742](https://github.com/open-mmlab/mmagic/pull/1742).\n- 支持了图像超分和视频超分的 inferencer. [#1662](https://github.com/open-mmlab/mmagic/pull/1662), [#1720](https://github.com/open-mmlab/mmagic/pull/1720)\n- 重构 get_flops 脚本. [#1675](https://github.com/open-mmlab/mmagic/pull/1675)\n- 重构数据集的 dataset_converters 脚本和使用文档. [#1690](https://github.com/open-mmlab/mmagic/pull/1690)\n- 迁移 stylegan 算子到 MMCV 中. [#1383](https://github.com/open-mmlab/mmagic/pull/1383)\n\n**Bug 修复**\n\n- 修复 disco inferencer. [#1673](https://github.com/open-mmlab/mmagic/pull/1673)\n- 修复 nafnet optimizer 配置. [#1716](https://github.com/open-mmlab/mmagic/pull/1716)\n- 修复 tof typo. [#1711](https://github.com/open-mmlab/mmagic/pull/1711)\n\n**贡献者**\n\n@LeoXing1996, @Z-Fran, @plyfager, @zengyh1900, @liuwenran, @ryanxingql, @HAOCHENYE, @VongolaWu\n\n## v1.0.0rc6 (02/03/2023)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc6 版本。 此版本支持了 MMEditing 和 MMGeneration 的 50+ 模型，222+ configs 和 209+ checkpoints。以下是此次版本发布的重点新功能\n\n- 支持了 Inpainting 任务推理的 Gradio gui.\n- 支持了图像上色、图像翻译和 GAN 模型的 inferencer.\n\n**新功能和改进**\n\n- 重构了 FileIO. [#1572](https://github.com/open-mmlab/mmagic/pull/1572)\n- 重构了 registry. [#1621](https://github.com/open-mmlab/mmagic/pull/1621)\n- 重构了 Random degradations. [#1583](https://github.com/open-mmlab/mmagic/pull/1583)\n- 重构了 DataSample, DataPreprocessor, Metric 和 Loop. [#1656](https://github.com/open-mmlab/mmagic/pull/1656)\n- 使用 mmengine.basemodule 替换 nn.module. [#1491](https://github.com/open-mmlab/mmagic/pull/1491)\n- 重构了算法库主页. [#1609](https://github.com/open-mmlab/mmagic/pull/1609)\n- 支持了 Inpainting 任务推理的 Gradio gui. [#1601](https://github.com/open-mmlab/mmagic/pull/1601)\n- 支持了图像上色的 inferencer. [#1588](https://github.com/open-mmlab/mmagic/pull/1588)\n- 支持了图像翻译和所有 GAN 模型的 inferencer. [#1650](https://github.com/open-mmlab/mmagic/pull/1650)\n- 支持了 GAN 模型的 inferencer. [#1653](https://github.com/open-mmlab/mmagic/pull/1653), [#1659](https://github.com/open-mmlab/mmagic/pull/1659)\n- 新增 Print config 工具. [#1590](https://github.com/open-mmlab/mmagic/pull/1590)\n- 改进 type hints. [#1604](https://github.com/open-mmlab/mmagic/pull/1604)\n- 更新 metrics 和 datasets 的中文文档. [#1568](https://github.com/open-mmlab/mmagic/pull/1568), [#1638](https://github.com/open-mmlab/mmagic/pull/1638)\n- 更新 BigGAN 和 Disco-Diffusion 的中文文档. [#1620](https://github.com/open-mmlab/mmagic/pull/1620)\n- 更新 Guided-Diffusion 的 Evaluation 和 README. [#1547](https://github.com/open-mmlab/mmagic/pull/1547)\n\n**Bug 修复**\n\n- 修复 EMA `momentum`. [#1581](https://github.com/open-mmlab/mmagic/pull/1581)\n- 修复 RandomNoise 的输出类型. [#1585](https://github.com/open-mmlab/mmagic/pull/1585)\n- 修复 pytorch2onnx 工具. [#1629](https://github.com/open-mmlab/mmagic/pull/1629)\n- 修复 API 文档. [#1641](https://github.com/open-mmlab/mmagic/pull/1641), [#1642](https://github.com/open-mmlab/mmagic/pull/1642)\n- 修复 RealESRGAN 加载 EMA 参数. [#1647](https://github.com/open-mmlab/mmagic/pull/1647)\n- 修复 dataset_converters 脚本的 arg passing bug. [#1648](https://github.com/open-mmlab/mmagic/pull/1648)\n\n**贡献者**\n\n@plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @liuwenran, @austinmw, @dienachtderwelt, @liangzelong, @i-aki-y, @xiaomile, @Li-Qingyun, @vansin, @Luo-Yihang, @ydengbi, @ruoningYu, @triple-Mu\n\n## v1.0.0rc5 (04/01/2023)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc5 版本。 此版本支持了 MMEditing 和 MMGeneration 的 49+ 模型，180+ configs 和 177+ checkpoints。以下是此次版本发布的重点新功能\n\n- 支持了 Restormer 算法.\n- 支持了 GLIDE 算法.\n- 支持了 SwinIR 算法.\n- 支持了 Stable Diffusion 算法.\n\n**新功能和改进**\n\n- 新增 Disco notebook. (#1507)\n- 优化测试 requirements 和 CI. (#1514)\n- 自动生成文档 summary 和 API docstring. (#1517)\n- 开启 projects. (#1526)\n- 支持 mscoco dataset. (#1520)\n- 改进中文文档. (#1532)\n- 添加 Type hints. (#1481)\n- 更新模型权重下载链接. (#1554)\n- 更新部署指南. (#1551)\n\n**Bug 修复**\n\n- 修复文档链接检查. (#1522)\n- 修复 ssim bug. (#1515)\n- 修复 realesrgan 的 `extract_gt_data`. (#1542)\n- 修复算法索引. (#1559)\n- F修复 disco-diffusion 的 config 路径. (#1553)\n- Fix text2image inferencer. (#1523)\n\n**贡献者**\n\n@plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @liuwenran, @AlexZou14, @lvhan028, @xiaomile, @ldr426, @austin273, @whu-lee, @willaty, @curiosity654, @Zdafeng, @Taited\n\n## v1.0.0rc4 (05/12/2022)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc4 版本。 此版本支持了 MMEditing 和 MMGeneration 的 45+ 模型，176+ configs 和 175+ checkpoints。以下是此次版本发布的重点新功能\n\n- 支持了 High-level APIs.\n- 支持了 diffusion 算法.\n- 支持了 Text2Image 任务.\n- 支持了 3D-Aware Generation.\n\n**新功能和改进**\n\n- 支持和重构了 High-level APIs. (#1410)\n- 支持了 disco-diffusion 文生图算法. (#1234, #1504)\n- 支持了 EG3D 算法. (#1482, #1493, #1494, #1499)\n- 支持了 NAFNet 算法. (#1369)\n\n**Bug 修复**\n\n- 修复 srgan 的训练配置. (#1441)\n- 修复 cain 的 config. (#1404)\n- 修复 rdn 和 srcnn 的训练配置. (#1392)\n\n**贡献者**\n\n@plyfager, @LeoXing1996, @Z-Fran, @zengyh1900, @VongolaWu, @gaoyang07, @ChangjianZhao, @zxczrx123, @jackghosts, @liuwenran, @CCODING04, @RoseZhao929, @shaocongliu, @liangzelong.\n\n## v1.0.0rc3 (10/11/2022)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc3 版本。 此版本支持了 MMEditing 和 MMGeneration 的 43+ 模型，170+ configs 和 169+ checkpoints。以下是此次版本发布的重点新功能\n\n- 将 `mmdet` 和 `clip` 改为可选安装需求.\n\n**新功能和改进**\n\n- 支持 `mmdet` 的 `try_import`. (#1408)\n- 支持 `flip` 的 `try_import`. (#1420)\n- 更新 `.gitignore`. ($1416)\n- 设置 `inception_utils` 的 `real_feat` 为 cpu 变量. (#1415)\n- 更新 StyleGAN2 和 PEGAN 的 README 和 configs.  (#1418)\n- 改进 API 文档的渲染. (#1373)\n\n**Bug 修复**\n\n- 修复 ESRGAN 的 config 和预训练模型加载. (#1407)\n- 修复 LSGAN 的 config. (#1409)\n- 修复 CAIN 的 config. (#1404)\n\n**贡献者**\n\n@Z-Fran, @zengyh1900, @plyfager, @LeoXing1996, @ruoningYu.\n\n## v1.0.0rc2 (02/11/2022)\n\n**主要更新**\n\n我们很高兴发布 MMEditing 1.0.0rc2 版本。 此版本支持了 MMEditing 和 MMGeneration 的 43+ 模型，170+ configs 和 169+ checkpoints。以下是此次版本发布的重点新功能\n\n- 基于 patch 和 slider 的 图像和视频可视化质量比较工具.\n- 支持了图像上色算法.\n\n**新功能和改进**\n\n- 支持了质量比较工具. (#1303)\n- 支持了 instance aware colorization 上色算法. (#1370)\n- 支持使用不同采样模型的 multi-metrics. (#1171)\n- 改进代码实现\n  - 重构 evaluation metrics. (#1164)\n  - 在 PGGAN 的 `forward` 中保存 gt 图像. (#1332)\n  - 改进 `preprocess_div2k_dataset.py` 脚本的默认参数. (#1380)\n  - 支持在 visualizer 中裁剪像素值. (#1365)\n  - 支持了 SinGAN 数据集和 SinGAN demo. (#1363)\n  - 支持 GenDataPreprocessor 中返回 int 和 float 数据类型. (#1385)\n- 改进文档\n  - 更新菜单切换. (#1162)\n  - 修复 TTSR README. (#1325)\n\n**Bug 修复**\n\n- 修复 PPL bug. (#1172)\n- 修复 RDN `number of channels` 参数. (#1328)\n- 修复 demo 的 exceptions 类型. (#1372)\n- 修复 realesrgan ema. (#1341)\n- 改进 assertion 检查 `GenerateFacialHeatmap` 的数据类型为 `np.float32`. (#1310)\n- 修复 `unpaired_dataset.py` 的采样方式. (#1308)\n- 修复视频超分模型的 pytorch2onnx 脚本. (#1300)\n- 修复错误的 config 配置. (#1167,#1200,#1236,#1293,#1302,#1304,#1319,#1331,#1336,#1349,#1352,#1353,#1358,#1364,#1367,#1384,#1386,#1391,#1392,#1393)\n\n**贡献者**\n\n@LeoXing1996, @Z-Fran, @zengyh1900, @plyfager, @ryanxingql, @ruoningYu, @gaoyang07.\n\n## v1.0.0rc1(23/9/2022)\n\nMMEditing 1.0.0rc1 已经合并了 MMGeneration 1.x。\n\n- 支持 42+ 算法, 169+ 配置文件 and 168+ 预训练模型参数文件.\n- 支持 26+ loss functions, 20+ metrics.\n- 支持 tensorboard, wandb.\n- 支持 unconditional GANs, conditional GANs, image2image translation 以及 internal learning.\n\n## v1.0.0rc0(31/8/2022)\n\nMMEditing 1.0.0rc0 是 MMEditing 1.x 的第一个版本，是 OpenMMLab 2.0 项目的一部分。\n\n基于新的[训练引擎](https://github.com/open-mmlab/mmengine), MMEditing 1.x 统一了数据、模型、评测和可视化的接口。\n\n该版本存在有一些 BC-breaking 的修改。 请在[迁移指南](https://mmagic.readthedocs.io/zh_CN/latest/migration/overview.html)中查看更多细节。\n"
  },
  {
    "path": "docs/zh_cn/community/contributing.md",
    "content": "# 贡献代码\n\n欢迎加入 MMagic 社区，我们致力于打造新一代人工智能内容生成（AIGC）工具箱，我们欢迎任何类型的贡献，包括但不限于\n\n**修复错误**\n\n修复代码实现错误的步骤如下：\n\n1. 如果提交的代码改动较大，建议先提交 issue，并正确描述 issue 的现象、原因和复现方式，讨论后确认修复方案。\n2. 修复错误并补充相应的单元测试，提交拉取请求。\n\n**新增功能或组件**\n\n1. 如果新功能或模块涉及较大的代码改动，建议先提交 issue，确认功能的必要性。\n2. 实现新增功能并添单元测试，提交拉取请求。\n\n**文档补充**\n\n修复文档可以直接提交拉取请求\n\n添加文档或将文档翻译成其他语言步骤如下\n\n1. 提交 issue，确认添加文档的必要性。\n2. 添加文档，提交拉取请求。\n\n### 拉取请求工作流\n\n如果你对拉取请求不了解，没关系，接下来的内容将会从零开始，一步一步地指引你如何创建一个拉取请求。如果你想深入了解拉取请求的开发模式，可以参考 github [官方文档](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests)\n\n#### 1. 复刻仓库\n\n当你第一次提交拉取请求时，先复刻 OpenMMLab 原代码库，点击 GitHub 页面右上角的 **Fork** 按钮，复刻后的代码库将会出现在你的 GitHub 个人主页下。\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167305749-43c7f4e9-449b-4e98-ade5-0c9276d5c9ce.png\" width=\"1200\">\n\n将代码克隆到本地\n\n```shell\ngit clone git@github.com:{username}/mmagic.git\n```\n\n添加原代码库为上游代码库\n\n```bash\ngit remote add upstream git@github.com:open-mmlab/mmagic\n```\n\n检查 remote 是否添加成功，在终端输入 `git remote -v`\n\n```bash\norigin\tgit@github.com:{username}/mmagic.git (fetch)\norigin\tgit@github.com:{username}/mmagic.git (push)\nupstream\tgit@github.com:open-mmlab/mmagic (fetch)\nupstream\tgit@github.com:open-mmlab/mmagic (push)\n```\n\n```{note}\n这里对 origin 和 upstream 进行一个简单的介绍，当我们使用 git clone 来克隆代码时，会默认创建一个 origin 的 remote，它指向我们克隆的代码库地址，而 upstream 则是我们自己添加的，用来指向原始代码库地址。当然如果你不喜欢他叫 upstream，也可以自己修改，比如叫 open-mmlab。我们通常向 origin 提交代码（即 fork 下来的远程仓库），然后向 upstream 提交一个 pull request。如果提交的代码和最新的代码发生冲突，再从 upstream 拉取最新的代码，和本地分支解决冲突，再提交到 origin。\n```\n\n#### 2. 配置 pre-commit\n\n在本地开发环境中，我们使用 [pre-commit](https://pre-commit.com/#intro) 来检查代码风格，以确保代码风格的统一。在提交代码，需要先安装 pre-commit（需要在 mmagic 目录下执行）:\n\n```shell\npip install -U pre-commit\npre-commit install\n```\n\n检查 pre-commit 是否配置成功，并安装 `.pre-commit-config.yaml` 中的钩子：\n\n```shell\npre-commit run --all-files\n```\n\n<img src=\"https://user-images.githubusercontent.com/57566630/173660750-3df20a63-cb66-4d33-a986-1f643f1d8aaf.png\" width=\"1200\">\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202368856-0465a90d-8fce-4345-918e-67b8b9c82614.png\" width=\"1200\">\n\n```{note}\n如果你是中国用户，由于网络原因，可能会出现安装失败的情况，这时可以使用国内源\n\npre-commit install -c .pre-commit-config-zh-cn.yaml\n\npre-commit run --all-files -c .pre-commit-config-zh-cn.yaml\n```\n\n如果安装过程被中断，可以重复执行 `pre-commit run ...` 继续安装。\n\n如果提交的代码不符合代码风格规范，pre-commit 会发出警告，并自动修复部分错误。\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202369176-67642454-0025-4023-a095-263529107aa3.png\" width=\"1200\">\n\n如果我们想临时绕开 pre-commit 的检查提交一次代码，可以在 `git commit` 时加上 `--no-verify`（需要保证最后推送至远程仓库的代码能够通过 pre-commit 检查）。\n\n```shell\ngit commit -m \"xxx\" --no-verify\n```\n\n#### 3. 创建开发分支\n\n安装完 pre-commit 之后，我们需要基于 main 创建开发分支，建议的分支命名规则为 `username/pr_name`。\n\n```shell\ngit checkout -b yhc/refactor_contributing_doc\n```\n\n在后续的开发中，如果本地仓库的 main 分支落后于 upstream 的 main 分支，我们需要先拉取 upstream 的代码进行同步，再执行上面的命令\n\n```shell\ngit pull upstream main\n```\n\n#### 4. 提交代码并在本地通过单元测试\n\n- mmagic 引入了 mypy 来做静态类型检查，以增加代码的鲁棒性。因此我们在提交代码时，需要补充 Type Hints。具体规则可以参考[教程](https://zhuanlan.zhihu.com/p/519335398)。\n\n- 提交的代码同样需要通过单元测试\n\n  ```shell\n  # 通过全量单元测试\n  pytest tests\n\n  # 我们需要保证提交的代码能够通过修改模块的单元测试，以 runner 为例\n  pytest tests/test_runner/test_runner.py\n  ```\n\n  如果你由于缺少依赖无法运行修改模块的单元测试，可以参考[指引-单元测试](#单元测试)\n\n- 如果修改/添加了文档，参考[指引](#文档渲染)确认文档渲染正常。\n\n#### 5. 推送代码到远程\n\n代码通过单元测试和 pre-commit 检查后，将代码推送到远程仓库，如果是第一次推送，可以在 `git push` 后加上 `-u` 参数以关联远程分支\n\n```shell\ngit push -u origin {branch_name}\n```\n\n这样下次就可以直接使用 `git push` 命令推送代码了，而无需指定分支和远程仓库。\n\n#### 6. 提交拉取请求（PR）\n\n(1) 在 GitHub 的 Pull request 界面创建拉取请求\n<img src=\"https://user-images.githubusercontent.com/57566630/201533288-516f7ac4-0b14-4dc8-afbd-912475c368b5.png\" width=\"1200\">\n\n(2) 根据指引修改 PR 描述，以便于其他开发者更好地理解你的修改\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202242953-c91a18ff-e388-4ff9-8591-5fae0ead6c1e.png\" width=\"1200\">\n\n描述规范详见[拉取请求规范](#拉取请求规范)\n\n&#160;\n\n**注意事项**\n\n(a) PR 描述应该包含修改理由、修改内容以及修改后带来的影响，并关联相关 Issue（具体方式见[文档](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)）\n\n(b) 如果是第一次为 OpenMMLab 做贡献，需要签署 CLA\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167307569-a794b967-6e28-4eac-a942-00deb657815f.png\" width=\"1200\">\n\n(c) 检查提交的 PR 是否通过 CI（集成测试）\n\n<img src=\"https://user-images.githubusercontent.com/57566630/167307490-f9ebf9fa-63c0-4d83-8ba1-081ea169eb3a.png\" width=\"1200\">\n\nmmagic 会在不同的平台（Linux、Window、Mac），基于不同版本的 Python、PyTorch、CUDA 对提交的代码进行单元测试，以保证代码的正确性，如果有任何一个没有通过，我们可点击上图中的 `Details` 来查看具体的测试信息，以便于我们修改代码。\n\n(3) 如果 PR 通过了 CI，那么就可以等待其他开发者的 review，并根据 reviewer 的意见，修改代码，并重复 [4](#4-提交代码并本地通过单元测试)-[5](#5-推送代码到远程) 步骤，直到 reviewer 同意合入 PR。\n\n<img src=\"https://user-images.githubusercontent.com/57566630/202145400-cc2cd8c4-10b0-472f-ba37-07e6f50acc67.png\" width=\"1200\">\n\n所有 reviewer 同意合入 PR 后，我们会尽快将 PR 合并到主分支。\n\n#### 7. 解决冲突\n\n随着时间的推移，我们的代码库会不断更新，这时候，如果你的 PR 与主分支存在冲突，你需要解决冲突，解决冲突的方式有两种：\n\n```shell\ngit fetch --all --prune\ngit rebase upstream/main\n```\n\n或者\n\n```shell\ngit fetch --all --prune\ngit merge upstream/main\n```\n\n如果你非常善于处理冲突，那么可以使用 rebase 的方式来解决冲突，因为这能够保证你的 commit log 的整洁。如果你不太熟悉 `rebase` 的使用，那么可以使用 `merge` 的方式来解决冲突。\n\n### 指引\n\n#### 单元测试\n\n在提交修复代码错误或新增特性的拉取请求时，我们应该尽可能的让单元测试覆盖所有提交的代码，计算单元测试覆盖率的方法如下\n\n```shell\npython -m coverage run -m pytest /path/to/test_file\npython -m coverage html\n# check file in htmlcov/index.html\n```\n\n#### 文档渲染\n\n在提交修复代码错误或新增特性的拉取请求时，可能会需要修改/新增模块的 docstring。我们需要确认渲染后的文档样式是正确的。\n本地生成渲染后的文档的方法如下\n\n```shell\npip install -r requirements/docs.txt\ncd docs/zh_cn/\n# or docs/en\nmake html\n# check file in ./docs/zh_cn/_build/html/index.html\n```\n\n### 代码风格\n\n#### Python\n\n[PEP8](https://www.python.org/dev/peps/pep-0008/) 作为 OpenMMLab 算法库首选的代码规范，我们使用以下工具检查和格式化代码\n\n- [flake8](https://github.com/PyCQA/flake8): Python 官方发布的代码规范检查工具，是多个检查工具的封装\n- [isort](https://github.com/timothycrosley/isort): 自动调整模块导入顺序的工具\n- [yapf](https://github.com/google/yapf): Google 发布的代码规范检查工具\n- [codespell](https://github.com/codespell-project/codespell): 检查单词拼写是否有误\n- [mdformat](https://github.com/executablebooks/mdformat): 检查 markdown 文件的工具\n- [docformatter](https://github.com/myint/docformatter): 格式化 docstring 的工具\n\nyapf 和 isort 的配置可以在 [setup.cfg](../../../setup.cfg) 找到\n\n通过配置 [pre-commit hook](https://pre-commit.com/) ，我们可以在提交代码时自动检查和格式化 `flake8`、`yapf`、`isort`、`trailing whitespaces`、`markdown files`，修复 `end-of-files`、`double-quoted-strings`、`python-encoding-pragma`、`mixed-line-ending`，调整 `requirments.txt` 的包顺序。\npre-commit 钩子的配置可以在 [.pre-commit-config](../../../.pre-commit-config.yaml) 找到。\n\npre-commit 具体的安装使用方式见[拉取请求](#2-配置-pre-commit)。\n\n更具体的规范请参考 [OpenMMLab 代码规范](contributing.md#代码风格)。\n\n#### C++ and CUDA\n\nC++ 和 CUDA 的代码规范遵从 [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html)\n\n### 拉取请求规范\n\n1. 使用 [pre-commit hook](https://pre-commit.com)，尽量减少代码风格相关问题\n\n2. 一个`拉取请求`对应一个短期分支\n\n3. 粒度要细，一个`拉取请求`只做一件事情，避免超大的`拉取请求`\n\n   - Bad：实现 Faster R-CNN\n   - Acceptable：给 Faster R-CNN 添加一个 box head\n   - Good：给 box head 增加一个参数来支持自定义的 conv 层数\n\n4. 每次 Commit 时需要提供清晰且有意义 commit 信息\n\n5. 提供清晰且有意义的`拉取请求`描述\n\n   - 标题写明白任务名称，一般格式:\\[Prefix\\] Short description of the pull request (Suffix)\n   - prefix: 新增功能 \\[Feature\\], 修 bug \\[Fix\\], 文档相关 \\[Docs\\], 开发中 \\[WIP\\] (暂时不会被review)\n   - 描述里介绍`拉取请求`的主要修改内容，结果，以及对其他部分的影响, 参考`拉取请求`模板\n   - 关联相关的`议题` (issue) 和其他`拉取请求`\n\n6. 如果引入了其他三方库，或借鉴了三方库的代码，请确认他们的许可证和 mmagic 兼容，并在借鉴的代码上补充 `This code is inspired from http://`\n\n## 代码规范\n\n### 代码规范标准\n\n#### PEP 8 —— Python 官方代码规范\n\n[Python 官方的代码风格指南](https://www.python.org/dev/peps/pep-0008/)，包含了以下几个方面的内容：\n\n- 代码布局，介绍了 Python 中空行、断行以及导入相关的代码风格规范。比如一个常见的问题：当我的代码较长，无法在一行写下时，何处可以断行？\n\n- 表达式，介绍了 Python 中表达式空格相关的一些风格规范。\n\n- 尾随逗号相关的规范。当列表较长，无法一行写下而写成如下逐行列表时，推荐在末项后加逗号，从而便于追加选项、版本控制等。\n\n  ```python\n  # Correct:\n  FILES = ['setup.cfg', 'tox.ini']\n  # Correct:\n  FILES = [\n      'setup.cfg',\n      'tox.ini',\n  ]\n  # Wrong:\n  FILES = ['setup.cfg', 'tox.ini',]\n  # Wrong:\n  FILES = [\n      'setup.cfg',\n      'tox.ini'\n  ]\n  ```\n\n- 命名相关规范、注释相关规范、类型注解相关规范，我们将在后续章节中做详细介绍。\n\n  \"A style guide is about consistency. Consistency with this style guide is important. Consistency within a project is more important. Consistency within one module or function is the most important.\" PEP 8 -- Style Guide for Python Code\n\n:::{note}\nPEP 8 的代码规范并不是绝对的，项目内的一致性要优先于 PEP 8 的规范。OpenMMLab 各个项目都在 setup.cfg 设定了一些代码规范的设置，请遵照这些设置。一个例子是在 PEP 8 中有如下一个例子：\n\n```python\n# Correct:\nhypot2 = x*x + y*y\n# Wrong:\nhypot2 = x * x + y * y\n```\n\n这一规范是为了指示不同优先级，但 OpenMMLab 的设置中通常没有启用 yapf 的 `ARITHMETIC_PRECEDENCE_INDICATION` 选项，因而格式规范工具不会按照推荐样式格式化，以设置为准。\n:::\n\n#### Google 开源项目风格指南\n\n[Google 使用的编程风格指南](https://google.github.io/styleguide/pyguide.html)，包括了 Python 相关的章节。相较于 PEP 8，该指南提供了更为详尽的代码指南。该指南包括了语言规范和风格规范两个部分。\n\n其中，语言规范对 Python 中很多语言特性进行了优缺点的分析，并给出了使用指导意见，如异常、Lambda 表达式、列表推导式、metaclass 等。\n\n风格规范的内容与 PEP 8 较为接近，大部分约定建立在 PEP 8 的基础上，也有一些更为详细的约定，如函数长度、TODO 注释、文件与 socket 对象的访问等。\n\n推荐将该指南作为参考进行开发，但不必严格遵照，一来该指南存在一些 Python 2 兼容需求，例如指南中要求所有无基类的类应当显式地继承 Object, 而在仅使用 Python 3 的环境中，这一要求是不必要的，依本项目中的惯例即可。二来 OpenMMLab 的项目作为框架级的开源软件，不必对一些高级技巧过于避讳，尤其是 MMCV。但尝试使用这些技巧前应当认真考虑是否真的有必要，并寻求其他开发人员的广泛评估。\n\n另外需要注意的一处规范是关于包的导入，在该指南中，要求导入本地包时必须使用路径全称，且导入的每一个模块都应当单独成行，通常这是不必要的，而且也不符合目前项目的开发惯例，此处进行如下约定：\n\n```python\n# Correct\nfrom mmagic.cnn.bricks import (Conv2d, build_norm_layer, DropPath, MaxPool2d,\n                             Linear)\nfrom ..utils import ext_loader\n\n# Wrong\nfrom mmagic.cnn.bricks import Conv2d, build_norm_layer, DropPath, MaxPool2d, \\\n                            Linear  # 使用括号进行连接，而不是反斜杠\nfrom ...utils import is_str  # 最多向上回溯一层，过多的回溯容易导致结构混乱\n```\n\nOpenMMLab 项目使用 pre-commit 工具自动格式化代码，详情见[贡献代码](contributing.md#代码风格)。\n\n### 命名规范\n\n#### 命名规范的重要性\n\n优秀的命名是良好代码可读的基础。基础的命名规范对各类变量的命名做了要求，使读者可以方便地根据代码名了解变量是一个类 / 局部变量 / 全局变量等。而优秀的命名则需要代码作者对于变量的功能有清晰的认识，以及良好的表达能力，从而使读者根据名称就能了解其含义，甚至帮助了解该段代码的功能。\n\n#### 基础命名规范\n\n| 类型            | 公有             | 私有               |\n| --------------- | ---------------- | ------------------ |\n| 模块            | lower_with_under | \\_lower_with_under |\n| 包              | lower_with_under |                    |\n| 类              | CapWords         | \\_CapWords         |\n| 异常            | CapWordsError    |                    |\n| 函数（方法）    | lower_with_under | \\_lower_with_under |\n| 函数 / 方法参数 | lower_with_under |                    |\n| 全局 / 类内常量 | CAPS_WITH_UNDER  | \\_CAPS_WITH_UNDER  |\n| 全局 / 类内变量 | lower_with_under | \\_lower_with_under |\n| 变量            | lower_with_under | \\_lower_with_under |\n| 局部变量        | lower_with_under |                    |\n\n注意：\n\n- 尽量避免变量名与保留字冲突，特殊情况下如不可避免，可使用一个后置下划线，如 class\\_\n- 尽量不要使用过于简单的命名，除了约定俗成的循环变量 i，文件变量 f，错误变量 e 等。\n- 不会被用到的变量可以命名为 \\_，逻辑检查器会将其忽略。\n\n#### 命名技巧\n\n良好的变量命名需要保证三点：\n\n1. 含义准确，没有歧义\n2. 长短适中\n3. 前后统一\n\n```python\n# Wrong\nclass Masks(metaclass=ABCMeta):  # 命名无法表现基类；Instance or Semantic？\n    pass\n\n# Correct\nclass BaseInstanceMasks(metaclass=ABCMeta):\n    pass\n\n# Wrong，不同地方含义相同的变量尽量用统一的命名\ndef __init__(self, inplanes, planes):\n    pass\n\ndef __init__(self, in_channels, out_channels):\n    pass\n```\n\n常见的函数命名方法：\n\n- 动宾命名法：crop_img, init_weights\n- 动宾倒置命名法：imread, bbox_flip\n\n注意函数命名与参数的顺序，保证主语在前，符合语言习惯：\n\n- check_keys_exist(key, container)\n- check_keys_contain(container, key)\n\n注意避免非常规或统一约定的缩写，如 nb -> num_blocks，in_nc -> in_channels\n\n### docstring 规范\n\n#### 为什么要写 docstring\n\ndocstring 是对一个类、一个函数功能与 API 接口的详细描述，有两个功能，一是帮助其他开发者了解代码功能，方便 debug 和复用代码；二是在 Readthedocs 文档中自动生成相关的 API reference 文档，帮助不了解源代码的社区用户使用相关功能。\n\n#### 如何写 docstring\n\n与注释不同，一份规范的 docstring 有着严格的格式要求，以便于 Python 解释器以及 sphinx 进行文档解析，详细的 docstring 约定参见 [PEP 257](https://www.python.org/dev/peps/pep-0257/)。此处以例子的形式介绍各种文档的标准格式，参考格式为 [Google 风格](https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/#comments)。\n\n1. 模块文档\n\n   代码风格规范推荐为每一个模块（即 Python 文件）编写一个 docstring，但目前 OpenMMLab 项目大部分没有此类 docstring，因此不做硬性要求。\n\n   ```python\n   \"\"\"A one line summary of the module or program, terminated by a period.\n\n   Leave one blank line. The rest of this docstring should contain an\n   overall description of the module or program. Optionally, it may also\n   contain a brief description of exported classes and functions and/or usage\n   examples.\n\n   Typical usage example:\n\n   foo = ClassFoo()\n   bar = foo.FunctionBar()\n   \"\"\"\n   ```\n\n2. 类文档\n\n   类文档是我们最常需要编写的，此处，按照 OpenMMLab 的惯例，我们使用了与 Google 风格不同的写法。如下例所示，文档中没有使用 Attributes 描述类属性，而是使用 Args 描述 __init__ 函数的参数。\n\n   在 Args 中，遵照 `parameter (type): Description.` 的格式，描述每一个参数类型和功能。其中，多种类型可使用 `(float or str)` 的写法，可以为 None 的参数可以写为 `(int, optional)`。\n\n   ```python\n   class BaseRunner(metaclass=ABCMeta):\n       \"\"\"The base class of Runner, a training helper for PyTorch.\n\n       All subclasses should implement the following APIs:\n\n       - ``run()``\n       - ``train()``\n       - ``val()``\n       - ``save_checkpoint()``\n\n       Args:\n           model (:obj:`torch.nn.Module`): The model to be run.\n           batch_processor (callable, optional): A callable method that process\n               a data batch. The interface of this method should be\n               ``batch_processor(model, data, train_mode) -> dict``.\n               Defaults to None.\n           optimizer (dict or :obj:`torch.optim.Optimizer`, optional): It can be\n               either an optimizer (in most cases) or a dict of optimizers\n               (in models that requires more than one optimizer, e.g., GAN).\n               Defaults to None.\n           work_dir (str, optional): The working directory to save checkpoints\n               and logs. Defaults to None.\n           logger (:obj:`logging.Logger`): Logger used during training.\n                Defaults to None. (The default value is just for backward\n                compatibility)\n           meta (dict, optional): A dict records some import information such as\n               environment info and seed, which will be logged in logger hook.\n               Defaults to None.\n           max_epochs (int, optional): Total training epochs. Defaults to None.\n           max_iters (int, optional): Total training iterations. Defaults to None.\n       \"\"\"\n\n       def __init__(self,\n                    model,\n                    batch_processor=None,\n                    optimizer=None,\n                    work_dir=None,\n                    logger=None,\n                    meta=None,\n                    max_iters=None,\n                    max_epochs=None):\n           ...\n   ```\n\n   另外，在一些算法实现的主体类中，建议加入原论文的链接；如果参考了其他开源代码的实现，则应加入 modified from，而如果是直接复制了其他代码库的实现，则应加入 copied from ，并注意源码的 License。如有必要，也可以通过 .. math:: 来加入数学公式\n\n   ```python\n   # 参考实现\n   # This func is modified from `detectron2\n   # <https://github.com/facebookresearch/detectron2/blob/ffff8acc35ea88ad1cb1806ab0f00b4c1c5dbfd9/detectron2/structures/masks.py#L387>`_.\n\n   # 复制代码\n   # This code was copied from the `ubelt\n   # library<https://github.com/Erotemic/ubelt>`_.\n\n   # 引用论文 & 添加公式\n   class LabelSmoothLoss(nn.Module):\n       r\"\"\"Initializer for the label smoothed cross entropy loss.\n\n       Refers to `Rethinking the Inception Architecture for Computer Vision\n       <https://arxiv.org/abs/1512.00567>`_.\n\n       This decreases gap between output scores and encourages generalization.\n       Labels provided to forward can be one-hot like vectors (NxC) or class\n       indices (Nx1).\n       And this accepts linear combination of one-hot like labels from mixup or\n       cutmix except multi-label task.\n\n       Args:\n           label_smooth_val (float): The degree of label smoothing.\n           num_classes (int, optional): Number of classes. Defaults to None.\n           mode (str): Refers to notes, Options are \"original\", \"classy_vision\",\n               \"multi_label\". Defaults to \"classy_vision\".\n           reduction (str): The method used to reduce the loss.\n               Options are \"none\", \"mean\" and \"sum\". Defaults to 'mean'.\n           loss_weight (float):  Weight of the loss. Defaults to 1.0.\n\n       Note:\n           if the ``mode`` is \"original\", this will use the same label smooth\n           method as the original paper as:\n\n           .. math::\n               (1-\\epsilon)\\delta_{k, y} + \\frac{\\epsilon}{K}\n\n           where :math:`\\epsilon` is the ``label_smooth_val``, :math:`K` is\n           the ``num_classes`` and :math:`\\delta_{k,y}` is Dirac delta,\n           which equals 1 for k=y and 0 otherwise.\n\n           if the ``mode`` is \"classy_vision\", this will use the same label\n           smooth method as the `facebookresearch/ClassyVision\n           <https://github.com/facebookresearch/ClassyVision/blob/main/classy_vision/losses/label_smoothing_loss.py>`_ repo as:\n\n           .. math::\n               \\frac{\\delta_{k, y} + \\epsilon/K}{1+\\epsilon}\n\n           if the ``mode`` is \"multi_label\", this will accept labels from\n           multi-label task and smoothing them as:\n\n           .. math::\n               (1-2\\epsilon)\\delta_{k, y} + \\epsilon\n   ```\n\n```{note}\n注意 \\`\\`here\\`\\`、\\`here\\`、\"here\" 三种引号功能是不同。\n\n在 reStructured 语法中，\\`\\`here\\`\\` 表示一段代码；\\`here\\` 表示斜体；\"here\" 无特殊含义，一般可用来表示字符串。其中 \\`here\\` 的用法与 Markdown 中不同，需要多加留意。\n另外还有 :obj:\\`type\\` 这种更规范的表示类的写法，但鉴于长度，不做特别要求，一般仅用于表示非常用类型。\n```\n\n3. 方法（函数）文档\n\n   函数文档与类文档的结构基本一致，但需要加入返回值文档。对于较为复杂的函数和类，可以使用 Examples 字段加入示例；如果需要对参数加入一些较长的备注，可以加入 Note 字段进行说明。\n\n   对于使用较为复杂的类或函数，比起看大段大段的说明文字和参数文档，添加合适的示例更能帮助用户迅速了解其用法。需要注意的是，这些示例最好是能够直接在 Python 交互式环境中运行的，并给出一些相对应的结果。如果存在多个示例，可以使用注释简单说明每段示例，也能起到分隔作用。\n\n   ```python\n   def import_modules_from_strings(imports, allow_failed_imports=False):\n       \"\"\"Import modules from the given list of strings.\n\n       Args:\n           imports (list | str | None): The given module names to be imported.\n           allow_failed_imports (bool): If True, the failed imports will return\n               None. Otherwise, an ImportError is raise. Defaults to False.\n\n       Returns:\n           List[module] | module | None: The imported modules.\n           All these three lines in docstring will be compiled into the same\n           line in readthedocs.\n\n       Examples:\n           >>> osp, sys = import_modules_from_strings(\n           ...     ['os.path', 'sys'])\n           >>> import os.path as osp_\n           >>> import sys as sys_\n           >>> assert osp == osp_\n           >>> assert sys == sys_\n       \"\"\"\n       ...\n   ```\n\n   如果函数接口在某个版本发生了变化，需要在 docstring 中加入相关的说明，必要时添加 Note 或者 Warning 进行说明，例如：\n\n   ```python\n   class CheckpointHook(Hook):\n       \"\"\"Save checkpoints periodically.\n\n       Args:\n           out_dir (str, optional): The root directory to save checkpoints. If\n               not specified, ``runner.work_dir`` will be used by default. If\n               specified, the ``out_dir`` will be the concatenation of\n               ``out_dir`` and the last level directory of ``runner.work_dir``.\n               Defaults to None. `Changed in version 1.3.15.`\n           file_client_args (dict, optional): Arguments to instantiate a\n               FileClient. See :class:`mmagic.fileio.FileClient` for details.\n               Defaults to None. `New in version 1.3.15.`\n\n       Warning:\n           Before v1.3.15, the ``out_dir`` argument indicates the path where the\n           checkpoint is stored. However, in v1.3.15 and later, ``out_dir``\n           indicates the root directory and the final path to save checkpoint is\n           the concatenation of out_dir and the last level directory of\n           ``runner.work_dir``. Suppose the value of ``out_dir`` is\n           \"/path/of/A\" and the value of ``runner.work_dir`` is \"/path/of/B\",\n           then the final path will be \"/path/of/A/B\".\n   ```\n\n   如果参数或返回值里带有需要展开描述字段的 dict，则应该采用如下格式：\n\n   ```python\n   def func(x):\n       r\"\"\"\n       Args:\n           x (None): A dict with 2 keys, ``padded_targets``, and ``targets``.\n\n               - ``targets`` (list[Tensor]): A list of tensors.\n                 Each tensor has the shape of :math:`(T_i)`. Each\n                 element is the index of a character.\n               - ``padded_targets`` (Tensor): A tensor of shape :math:`(N)`.\n                 Each item is the length of a word.\n\n       Returns:\n           dict: A dict with 2 keys, ``padded_targets``, and ``targets``.\n\n           - ``targets`` (list[Tensor]): A list of tensors.\n             Each tensor has the shape of :math:`(T_i)`. Each\n             element is the index of a character.\n           - ``padded_targets`` (Tensor): A tensor of shape :math:`(N)`.\n             Each item is the length of a word.\n       \"\"\"\n       return x\n   ```\n\n```{important}\n为了生成 readthedocs 文档，文档的编写需要按照 ReStructrued 文档格式，否则会产生文档渲染错误，在提交 PR 前，最好生成并预览一下文档效果。\n语法规范参考：\n\n- [reStructuredText Primer - Sphinx documentation](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#)\n- [Example Google Style Python Docstrings ‒ napoleon 0.7 documentation](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html#example-google)\n```\n\n### 注释规范\n\n#### 为什么要写注释\n\n对于一个开源项目，团队合作以及社区之间的合作是必不可少的，因而尤其要重视合理的注释。不写注释的代码，很有可能过几个月自己也难以理解，造成额外的阅读和修改成本。\n\n#### 如何写注释\n\n最需要写注释的是代码中那些技巧性的部分。如果你在下次代码审查的时候必须解释一下，那么你应该现在就给它写注释。对于复杂的操作，应该在其操作开始前写上若干行注释。对于不是一目了然的代码，应在其行尾添加注释。\n—— Google 开源项目风格指南\n\n```python\n# We use a weighted dictionary search to find out where i is in\n# the array. We extrapolate position based on the largest num\n# in the array and the array size and then do binary search to\n# get the exact number.\nif i & (i-1) == 0:  # True if i is 0 or a power of 2.\n```\n\n为了提高可读性, 注释应该至少离开代码2个空格.\n另一方面, 绝不要描述代码. 假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么.\n—— Google 开源项目风格指南\n\n```python\n# Wrong:\n# Now go through the b array and make sure whenever i occurs\n# the next element is i+1\n\n# Wrong:\nif i & (i-1) == 0:  # True if i bitwise and i-1 is 0.\n```\n\n在注释中，可以使用 Markdown 语法，因为开发人员通常熟悉 Markdown 语法，这样可以便于交流理解，如可使用单反引号表示代码和变量（注意不要和 docstring 中的 ReStructured 语法混淆）\n\n```python\n# `_reversed_padding_repeated_twice` is the padding to be passed to\n# `F.pad` if needed (e.g., for non-zero padding types that are\n# implemented as two ops: padding + conv). `F.pad` accepts paddings in\n# reverse order than the dimension.\nself._reversed_padding_repeated_twice = _reverse_repeat_tuple(self.padding, 2)\n```\n\n#### 注释示例\n\n1. 出自 `mmcv/utils/registry.py`，对于较为复杂的逻辑结构，通过注释，明确了优先级关系。\n\n   ```python\n   # self.build_func will be set with the following priority:\n   # 1. build_func\n   # 2. parent.build_func\n   # 3. build_from_cfg\n   if build_func is None:\n       if parent is not None:\n           self.build_func = parent.build_func\n       else:\n           self.build_func = build_from_cfg\n   else:\n       self.build_func = build_func\n   ```\n\n2. 出自 `mmcv/runner/checkpoint.py`，对于 bug 修复中的一些特殊处理，可以附带相关的 issue 链接，帮助其他人了解 bug 背景。\n\n   ```python\n   def _save_ckpt(checkpoint, file):\n       # The 1.6 release of PyTorch switched torch.save to use a new\n       # zipfile-based file format. It will cause RuntimeError when a\n       # checkpoint was saved in high version (PyTorch version>=1.6.0) but\n       # loaded in low version (PyTorch version<1.6.0). More details at\n       # https://github.com/open-mmlab/mmpose/issues/904\n       if digit_version(TORCH_VERSION) >= digit_version('1.6.0'):\n           torch.save(checkpoint, file, _use_new_zipfile_serialization=False)\n       else:\n           torch.save(checkpoint, file)\n   ```\n\n### 类型注解\n\n#### 为什么要写类型注解\n\n类型注解是对函数中变量的类型做限定或提示，为代码的安全性提供保障、增强代码的可读性、避免出现类型相关的错误。\nPython 没有对类型做强制限制，类型注解只起到一个提示作用，通常你的 IDE 会解析这些类型注解，然后在你调用相关代码时对类型做提示。另外也有类型注解检查工具，这些工具会根据类型注解，对代码中可能出现的问题进行检查，减少 bug 的出现。\n需要注意的是，通常我们不需要注释模块中的所有函数：\n\n1. 公共的 API 需要注释\n2. 在代码的安全性，清晰性和灵活性上进行权衡是否注释\n3. 对于容易出现类型相关的错误的代码进行注释\n4. 难以理解的代码请进行注释\n5. 若代码中的类型已经稳定，可以进行注释. 对于一份成熟的代码，多数情况下，即使注释了所有的函数，也不会丧失太多的灵活性.\n\n#### 如何写类型注解\n\n1. 函数 / 方法类型注解，通常不对 self 和 cls 注释。\n\n   ```python\n   from typing import Optional, List, Tuple\n\n   # 全部位于一行\n   def my_method(self, first_var: int) -> int:\n       pass\n\n   # 另起一行\n   def my_method(\n           self, first_var: int,\n           second_var: float) -> Tuple[MyLongType1, MyLongType1, MyLongType1]:\n       pass\n\n   # 单独成行（具体的应用场合与行宽有关，建议结合 yapf 自动化格式使用）\n   def my_method(\n       self, first_var: int, second_var: float\n   ) -> Tuple[MyLongType1, MyLongType1, MyLongType1]:\n       pass\n\n   # 引用尚未被定义的类型\n   class MyClass:\n       def __init__(self,\n                    stack: List[\"MyClass\"]) -> None:\n           pass\n   ```\n\n   注：类型注解中的类型可以是 Python 内置类型，也可以是自定义类，还可以使用 Python 提供的 wrapper 类对类型注解进行装饰，一些常见的注解如下：\n\n   ```python\n   # 数值类型\n   from numbers import Number\n\n   # 可选类型，指参数可以为 None\n   from typing import Optional\n   def foo(var: Optional[int] = None):\n       pass\n\n   # 联合类型，指同时接受多种类型\n   from typing import Union\n   def foo(var: Union[float, str]):\n       pass\n\n   from typing import Sequence  # 序列类型\n   from typing import Iterable  # 可迭代类型\n   from typing import Any  # 任意类型\n   from typing import Callable  # 可调用类型\n\n   from typing import List, Dict  # 列表和字典的泛型类型\n   from typing import Tuple  # 元组的特殊格式\n   # 虽然在 Python 3.9 中，list, tuple 和 dict 本身已支持泛型，但为了支持之前的版本\n   # 我们在进行类型注解时还是需要使用 List, Tuple, Dict 类型\n   # 另外，在对参数类型进行注解时，尽量使用 Sequence & Iterable & Mapping\n   # List, Tuple, Dict 主要用于返回值类型注解\n   # 参见 https://docs.python.org/3/library/typing.html#typing.List\n   ```\n\n2. 变量类型注解，一般用于难以直接推断其类型时\n\n   ```python\n   # Recommend: 带类型注解的赋值\n   a: Foo = SomeUndecoratedFunction()\n   a: List[int]: [1, 2, 3]         # List 只支持单一类型泛型，可使用 Union\n   b: Tuple[int, int] = (1, 2)     # 长度固定为 2\n   c: Tuple[int, ...] = (1, 2, 3)  # 变长\n   d: Dict[str, int] = {'a': 1, 'b': 2}\n\n   # Not Recommend：行尾类型注释\n   # 虽然这种方式被写在了 Google 开源指南中，但这是一种为了支持 Python 2.7 版本\n   # 而补充的注释方式，鉴于我们只支持 Python 3, 为了风格统一，不推荐使用这种方式。\n   a = SomeUndecoratedFunction()  # type: Foo\n   a = [1, 2, 3]  # type: List[int]\n   b = (1, 2, 3)  # type: Tuple[int, ...]\n   c = (1, \"2\", 3.5)  # type: Tuple[int, Text, float]\n   ```\n\n3. 泛型\n\n   上文中我们知道，typing 中提供了 list 和 dict 的泛型类型，那么我们自己是否可以定义类似的泛型呢？\n\n   ```python\n   from typing import TypeVar, Generic\n\n   KT = TypeVar('KT')\n   VT = TypeVar('VT')\n\n   class Mapping(Generic[KT, VT]):\n       def __init__(self, data: Dict[KT, VT]):\n           self._data = data\n\n       def __getitem__(self, key: KT) -> VT:\n           return self._data[key]\n   ```\n\n   使用上述方法，我们定义了一个拥有泛型能力的映射类，实际用法如下：\n\n   ```python\n   mapping = Mapping[str, float]({'a': 0.5})\n   value: float = example['a']\n   ```\n\n   另外，我们也可以利用 TypeVar 在函数签名中指定联动的多个类型：\n\n   ```python\n   from typing import TypeVar, List\n\n   T = TypeVar('T')  # Can be anything\n   A = TypeVar('A', str, bytes)  # Must be str or bytes\n\n\n   def repeat(x: T, n: int) -> List[T]:\n       \"\"\"Return a list containing n references to x.\"\"\"\n       return [x]*n\n\n\n   def longest(x: A, y: A) -> A:\n       \"\"\"Return the longest of two strings.\"\"\"\n       return x if len(x) >= len(y) else y\n   ```\n\n更多关于类型注解的写法请参考 [typing](https://docs.python.org/3/library/typing.html)。\n\n#### 类型注解检查工具\n\n[mypy](https://mypy.readthedocs.io/en/stable/) 是一个 Python 静态类型检查工具。根据你的类型注解，mypy 会检查传参、赋值等操作是否符合类型注解，从而避免可能出现的 bug。\n\n例如如下的一个  Python 脚本文件 test.py:\n\n```python\ndef foo(var: int) -> float:\n    return float(var)\n\na: str = foo('2.0')\nb: int = foo('3.0')  # type: ignore\n```\n\n运行 mypy test.py 可以得到如下检查结果，分别指出了第 4 行在函数调用和返回值赋值两处类型错误。而第 5 行同样存在两个类型错误，由于使用了 type: ignore 而被忽略了，只有部分特殊情况可能需要此类忽略。\n\n```\ntest.py:4: error: Incompatible types in assignment (expression has type \"float\", variable has type \"int\")\ntest.py:4: error: Argument 1 to \"foo\" has incompatible type \"str\"; expected \"int\"\nFound 2 errors in 1 file (checked 1 source file)\n```\n"
  },
  {
    "path": "docs/zh_cn/community/projects.md",
    "content": "# 生态项目\n\n欢迎来到 MMagic 社区！\n\nMMagic 社区由来自学术界和工业界的广大研究人员、机器学习和应用工程师编写的教程、库和项目组成。\n\n该社区的目标是支持、加速和帮助您使用 MMagic 探索 AIGC，例如图像、视频、3D 内容生成、编辑和处理。\n\n这里有一些基于 MMagic 的项目。 它们是如何将 MMagic 用作库的示例，以使您的项目更易于维护。请在[MMagic Ecosystem](https://openmmlab.com/ecosystem)中找到更多项目。\n\n## 在 OpenMMLab 社区上展示您的项目\n\n您可以提交您的项目，以便它可以显示在[OpenMMLab](https://openmmlab.com/ecosystem)的主页上。\n\n## 添加示例项目到 MMagic\n\n这是一个关于如何将项目添加到 MMagic 的[示例项目](../../../projects/example_project)。\n\n您可以从 [example project](../../../projects/example_project) 复制并创建自己的项目。\n\n我们还提供了下面列出的一些文档供您参考：\n\n- [贡献指南](https://mmagic.readthedocs.io/zh_CN/latest/community/contributing.html)\n\n  新贡献者指南，了解如何将您的项目添加到 MMagic。\n\n- [新模型指南](https://mmagic.readthedocs.io/zh_CN/latest/howto/models.html)\n\n  添加新模型的文档。\n\n- [讨论](https://github.com/open-mmlab/mmagic/discussions)\n\n  欢迎开始讨论！\n\n## 库和工具箱的项目\n\n- [PowerVQE](https://github.com/ryanxingql/powervqe)：基于 PyTorch 和 MMagic 的压缩视频质量增强开放框架\n- [VR-Baseline](https://github.com/linjing7/VR-Baseline)：视频修复工具箱\n- [Derain-Toolbox](https://github.com/biubiubiiu/derain-toolbox)：单图像去雨工具箱和基准\n\n## 研究论文项目\n\n- [Towards Interpretable Video Super-Resolution via Alternating Optimization, ECCV 2022](https://arxiv.org/abs/2207.10765)[\\[github\\]](https://github.com/caojiezhang/DAVSR)\n\n- [SepLUT:Separable Image-adaptive Lookup Tables for Real-time Image Enhancement, ECCV 2022](https://arxiv.org/abs/2207.08351)[\\[github\\]](https://github.com/ImCharlesY/SepLUT)\n\n- [TTVSR: Learning Trajectory-Aware Transformer for Video Super-Resolution, CVPR 2022](https://arxiv.org/abs/2204.04216)[\\[github\\]](https://github.com/researchmm/TTVSR)\n\n- [Arbitrary-Scale Image Synthesis, CVPR 2022](https://arxiv.org/pdf/2204.02273.pdf)[\\[github\\]](https://github.com/vglsd/ScaleParty)\n\n- [Investigating Tradeoffs in Real-World Video Super-Resolution(RealBasicVSR), CVPR 2022](https://arxiv.org/abs/2111.12704)[\\[github\\]](https://github.com/ckkelvinchan/RealBasicVSR)\n\n- [BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment, CVPR 2022](https://arxiv.org/abs/2104.13371)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR_PlusPlus)\n\n- [Multi-Scale Memory-Based Video Deblurring, CVPR 2022](https://arxiv.org/abs/2204.02977)[\\[github\\]](https://github.com/jibo27/MemDeblur)\n\n- [AdaInt:Learning Adaptive Intervals for 3D Lookup Tables on Real-time Image Enhancement, CVPR 2022](https://arxiv.org/abs/2204.13983)[\\[github\\]](https://github.com/ImCharlesY/AdaInt)\n\n- [A New Dataset and Transformer for Stereoscopic Video Super-Resolution, CVPRW 2022](https://openaccess.thecvf.com/content/CVPR2022W/NTIRE/papers/Imani_A_New_Dataset_and_Transformer_for_Stereoscopic_Video_Super-Resolution_CVPRW_2022_paper.pdf)[\\[github\\]](https://github.com/H-deep/Trans-SVSR)\n\n- [Liquid warping GAN with attention: A unified framework for human image synthesis, TPAMI 2021](https://arxiv.org/pdf/2011.09055.pdf)[\\[github\\]](https://github.com/iPERDance/iPERCore)\n\n- [BasicVSR:The Search for Essential Components in Video Super-Resolution and Beyond, CVPR 2021](https://arxiv.org/abs/2012.02181)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR-IconVSR)\n\n- [GLEAN:Generative Latent Bank for Large-Factor Image Super-Resolution, CVPR 2021](https://arxiv.org/abs/2012.00739)[\\[github\\]](https://github.com/ckkelvinchan/GLEAN)\n\n- [DAN:Unfolding the Alternating Optimization for Blind Super Resolution, NeurIPS 2020](https://arxiv.org/abs/2010.02631v4)[\\[github\\]](https://github.com/AlexZou14/DAN-Basd-on-Openmmlab)\n"
  },
  {
    "path": "docs/zh_cn/conf.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common options. For a full\n# list see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\n# -- Path setup --------------------------------------------------------------\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#\nimport os\nimport subprocess\nimport sys\n\nimport pytorch_sphinx_theme\n\nsys.path.insert(0, os.path.abspath('../..'))\n\n# -- Project information -----------------------------------------------------\n\nproject = 'MMagic'\ncopyright = '2023, MMagic Authors'\nauthor = 'MMagic Authors'\n\n# -- General configuration ---------------------------------------------------\n\n# Add any Sphinx extension module names here, as strings. They can be\n# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom\n# ones.\nextensions = [\n    'sphinx.ext.intersphinx',\n    'sphinx.ext.napoleon',\n    'sphinx.ext.viewcode',\n    'sphinx.ext.autosectionlabel',\n    'sphinx_markdown_tables',\n    'sphinx_copybutton',\n    'sphinx_tabs.tabs',\n    'myst_parser',\n]\n\nextensions.append('notfound.extension')  # enable customizing not-found page\n\nextensions.append('autoapi.extension')\nautoapi_type = 'python'\nautoapi_dirs = ['../../mmagic']\nautoapi_add_toctree_entry = False\nautoapi_template_dir = '_templates'\n# autoapi_options = ['members', 'undoc-members', 'show-module-summary']\n\n# # Core library for html generation from docstrings\n# extensions.append('sphinx.ext.autodoc')\n# extensions.append('sphinx.ext.autodoc.typehints')\n# # Enable 'expensive' imports for sphinx_autodoc_typehints\n# set_type_checking_flag = True\n# # Sphinx-native method. Not as good as sphinx_autodoc_typehints\n# autodoc_typehints = \"description\"\n\n# extensions.append('sphinx.ext.autosummary') # Create neat summary tables\n# autosummary_generate = True  # Turn on sphinx.ext.autosummary\n# # Add __init__ doc (ie. params) to class summaries\n# autoclass_content = 'both'\n# autodoc_skip_member = []\n# # If no docstring, inherit from base class\n# autodoc_inherit_docstrings = True\n\nautodoc_mock_imports = [\n    'mmagic.version', 'mmcv._ext', 'mmcv.ops.ModulatedDeformConv2d',\n    'mmcv.ops.modulated_deform_conv2d', 'clip', 'resize_right', 'pandas'\n]\n\nsource_suffix = {\n    '.rst': 'restructuredtext',\n    '.md': 'markdown',\n}\n\n# Ignore >>> when copying code\ncopybutton_prompt_text = r'>>> |\\.\\.\\. '\ncopybutton_prompt_is_regexp = True\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['../en/_templates']\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\n# This pattern also affects html_static_path and html_extra_path.\nexclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']\n\n# -- Options for HTML output -------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\n#\n# html_theme = 'sphinx_rtd_theme'\nhtml_theme = 'pytorch_sphinx_theme'\nhtml_theme_path = [pytorch_sphinx_theme.get_html_theme_path()]\n\nhtml_theme_options = {\n    # 'logo_url': 'https://mmocr.readthedocs.io/en/latest/',\n    'menu': [\n        {\n            'name': 'GitHub',\n            'url': 'https://github.com/open-mmlab/mmagic',\n        },\n        {\n            'name':\n            '版本',\n            'children': [\n                {\n                    'name': 'MMagic 1.x',\n                    'url': 'https://mmagic.readthedocs.io/zh_CN/latest/',\n                    'description': 'Main 分支文档'\n                },\n                {\n                    'name': 'MMEditing 0.x',\n                    'url': 'https://mmagic.readthedocs.io/zh_CN/0.x/',\n                    'description': '0.x 分支文档'\n                },\n            ],\n            'active':\n            True,\n        },\n    ],\n    'menu_lang':\n    'cn'\n}\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\nhtml_static_path = ['_static']\nhtml_css_files = ['css/readthedocs.css']\n\nmyst_enable_extensions = ['colon_fence']\nmyst_heading_anchors = 3\n\nlanguage = 'zh_CN'\n\n# The master toctree document.\nroot_doc = 'index'\nnotfound_template = '404.html'\n\n\ndef builder_inited_handler(app):\n    subprocess.run(['python', './.dev_scripts/update_model_zoo.py'])\n    subprocess.run(['python', './.dev_scripts/update_dataset_zoo.py'])\n\n\ndef skip_member(app, what, name, obj, skip, options):\n    if what == 'package' or what == 'module':\n        skip = True\n    return skip\n\n\ndef setup(app):\n    app.connect('builder-inited', builder_inited_handler)\n    app.connect('autoapi-skip-member', skip_member)\n"
  },
  {
    "path": "docs/zh_cn/device/npu_zh.md",
    "content": "# NPU (华为昇腾)\n\n## 使用方法\n\n首先，请参考[MMCV](https://mmcv.readthedocs.io/zh_CN/latest/get_started/build.html#npu-mmcv-full) 安装带有 NPU 支持的 MMCV与 [mmengine](https://mmengine.readthedocs.io/en/latest/get_started/installation.html#build-from-source) 。\n\n使用如下命令，可以利用 8 个 NPU 训练模型（以 edsr 为例）：\n\n```shell\nbash tools/dist_train.sh configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py 8\n```\n\n或者，使用如下命令，在一个 NPU 上训练模型（以 edsr 为例）：\n\n```shell\npython tools/train.py configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py\n```\n\n## 经过验证的模型\n\n|                                           Model                                            | Dataset | PSNR  | SSIM | Download                                                                                       |\n| :----------------------------------------------------------------------------------------: | ------- | :---: | :--- | :--------------------------------------------------------------------------------------------- |\n| [edsr_x2c64b16_1x16_300k_div2k](https://github.com/open-mmlab/mmagic/blob/main/configs/edsr/edsr_x2c64b16_1xb16-300k_div2k.py) | DIV2K   | 35.83 | 0.94 | [log](https://download.openmmlab.com/mmediting/device/npu/edsr/edsr_x2c64b16_1xb16-300k_div2k.log) |\n\n**注意:**\n\n- 如果没有特别标记，NPU 上的结果与使用 FP32 的 GPU 上的结果相同。\n\n**以上所有模型权重及训练日志均由华为昇腾团队提供**\n"
  },
  {
    "path": "docs/zh_cn/faq.md",
    "content": "# 常见问题解答\n\n我们在此列出了许多用户面临的一些常见问题及其相应的解决方案。如果您发现任何常见问题，并有办法帮助他人解决这些问题，请随时丰富列表内容。如果这里的内容没有涵盖您的问题，请使用[提供的模板](https://github.com/open-mmlab/mmagic/issues/new/choose)创建一个问题，并确保填写了模板中的所有必要信息。\n\n## 常见问题\n\n**问题1：** “xxx: ‘yyy is not in the zzz registry’”.\n\n**回答1：** 只有导入模块文件时，才会触发注册表机制。所以你需要在某个地方导入该文件。\n\n**问题2：** 某个数据集的文件夹结构是什么？\n\n**回答2：** 您可以根据[数据集准备](https://github.com/sijiua/mmagic/blob/dev-1.x/docs/en/user_guides/dataset_prepare.md)教程来确保文件夹结构的正确性。\n\n**问题3：** 如何使用 LMDB 数据训练模型？\n\n**回答3：** 您可以使用工具/数据中的脚本制作 LMDB 文件。更多详情请参见[数据集准备](https://github.com/sijiua/mmagic/blob/dev-1.x/docs/en/user_guides/dataset_prepare.md)教程。\n\n**问题4：** 为什么使用了 MMCV==xxx，但在导入 mmagic 时却出现了不兼容？\n\n**回答4：** 这是因为 MMCV 和 MMagic 的版本不兼容。兼容的 MMagic 和 MMCV 版本如下所示。请选择正确的 MMCV 版本以避免安装问题。\n\n| MMagic版本 |    MMCV 版本     |\n| :--------: | :--------------: |\n|   master   | mmcv-full>=2.0.0 |\n\n注意：如果已安装 mmcv，则需要先运行 pip uninstall mmcv。如果同时安装了 mmcv 和 mmcv-full，则会出现模块未找到错误（ModuleNotFoundError）。\n**问题5：** 如何忽略基本配置中的某些字段？\n\n**回答5：** 有些时候您可以设置 _delete_=True 来忽略基本配置中的某些字段。您可以参考 [MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md#delete-key-in-dict) 的简单说明。\n您可以仔细阅读[本教程](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md)，以便更好地理解这一功能。\n\n**问题6：** 如何在配置中使用中间变量？\n\n**回答6：** 有些中间变量会在配置文件中使用，比如数据集中的 train_pipeline/test_pipeline。值得注意的是，当修改子配置中的中间变量时，用户需要再次将中间变量传递到相应的字段中。\n"
  },
  {
    "path": "docs/zh_cn/get_started/install.md",
    "content": "# 安装教程\n\n在本节中，你将了解到：\n\n- [安装教程](#安装教程)\n  - [安装](#安装)\n    - [前提条件](#前提条件)\n    - [最佳实践](#最佳实践)\n    - [自定义安装](#自定义安装)\n      - [CUDA版本](#cuda版本)\n      - [不使用MIM安装MMCV](#不使用mim安装mmcv)\n      - [在Docker中使用MMagic](#在docker中使用mmagic)\n      - [问题解决](#问题解决)\n    - [使用多个MMagic版本开发](#使用多个mmagic版本开发)\n\n## 安装\n\n我们建议用户按照我们的[最佳实践](#最佳实践)来安装MMagic。\n然而，整个过程是高度可定制的。更多信息请参阅[自定义安装](#自定义安装)部分。\n\n### 前提条件\n\n在本节中，我们将演示如何使用PyTorch准备环境。\n\nMMagic可以在Linux, Windows, 和macOS上运行。它要求：\n\n- Python >= 3.7\n- [PyTorch](https://pytorch.org/) >= 1.8\n- [MMCV](https://github.com/open-mmlab/mmcv) >= 2.0.0\n\n>\n\n如果您对PyTorch有经验并且已经安装了它，直接跳过这一部分，跳到[下一节](#最佳实践)。否则, 您可以按照以下步骤来准备环境。\n\n**Step 0.**\n从[官方网站](https://docs.conda.io/en/latest/miniconda.html)下载和安装Miniconda.\n\n**Step 1.**\n创建一个[conda虚拟环境](https://docs.conda.io/projects/conda/en/latest/user-guide/concepts/environments.html#)并激活它\n\n```shell\nconda create --name mmagic python=3.8 -y\nconda activate mmagic\n```\n\n**Step 2.**\n按照[官方说明](https://pytorch.org/get-started/locally/)安装PyTorch，例如\n\n- 在GPU平台上：\n\n  ```shell\n  conda install pytorch torchvision cudatoolkit=11.3 -c pytorch\n  ```\n\n- 在CPU平台上：\n\n  ```shell\n  conda install pytorch=1.10 torchvision cpuonly -c pytorch\n  ```\n\n### 最佳实践\n\n**Step 0.** 使用[MIM](https://github.com/open-mmlab/mim)安装[MMCV](https://github.com/open-mmlab/mmcv)。\n\n```shell\npip install -U openmim\nmim install 'mmcv>=2.0.0'\n```\n\n**Step 1.** 安装[MMEngine](https://github.com/open-mmlab/mmengine)。\n\n```shell\nmim install 'mmengine'\n```\n\n或者\n\n```shell\npip install mmengine\n```\n\n或者\n\n```shell\npip install git+https://github.com/open-mmlab/mmengine.git\n```\n\n**Step 2.** 安装MMagic。\n\n```shell\nmim install 'mmagic'\n```\n\n或者\n\n```shell\npip install mmagic\n```\n\n或者从源代码安装[MMagic](https://github.com/open-mmlab/mmagic)。\n\n```shell\ngit clone https://github.com/open-mmlab/mmagic.git\ncd mmagic\npip3 install -e . -v\n```\n\n**Step 5.**\n检查MMagic是否安装成功。\n\n```shell\ncd ~\npython -c \"import mmagic; print(mmagic.__version__)\"\n# 示例输出: 1.0.0\n```\n\n显示正确的版本号，则表示安装成功。\n\n```{note}\n你可能想知道附加在`pip install`后面的`-e .`是什么意思。\n下面是说明:\n\n- `-e`表示[可编辑模式](https://pip.pypa.io/en/latest/cli/pip_install/#cmdoption-e).\n  当`import mmagic`时，将导入克隆目录下的模块。\n  如果`pip install`没有附加`-e`, pip会将克隆的代码复制到类似`lib/python/site-package`的地方。\n  因此，除非再次执行`pip install`命令，否则在克隆目录下修改后的代码不会生效。\n  因此，`pip install`命令附带`-e`对于开发人员来说特别方便。如果修改了一些代码，下次导入新的代码时不需要重新安装。\n- `.`表示此目录中的代码。\n\n你也可以使用`pip install -e .[all]`命令，这将安装更多的依赖项，特别是对于预提交hooks和单元测试。\n```\n\n### 自定义安装\n\n#### CUDA版本\n\n安装PyTorch时,您需要指定CUDA的版本。如果您不清楚该选择哪一个，请遵循我们的建议:\n\n- 对于基于Ampere的NVIDIA GPUs，如GeForce 30系列和NVIDIA A100，必须使用CUDA 11。\n- 对于较老的NVIDIA GPUs，是向后兼容的，但CUDA 10.2提供了更好的兼容性，更轻量。\n\n请确保GPU驱动程序满足最低版本要求。\n更多信息请参见[此表](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions__table-cuda-toolkit-driver-versions)。\n\n**注意**\n如果遵循我们的最佳实践，安装CUDA runtime库就足够了，因为不会在本地编译CUDA代码。\n但是，如果您希望从源代码编译MMCV或开发其他CUDA算子，则需要从NVIDIA的[开发者网站](https://developer.nvidia.com/cuda-downloads)安装完整的CUDA工具包，其版本应与PyTorch的CUDA版本匹配。即，在 `conda install` 命令中指定的cudatoolkit版本。\n\n#### 不使用MIM安装MMCV\n\nMMCV包含c++和CUDA扩展，因此以一种复杂的方式依赖于PyTorch。MIM自动解决了这种依赖关系，并使安装更容易。然而，这并不是必须的。\n\n要使用pip而不是MIM安装MMCV，请遵循[MMCV安装指南](https://mmcv.readthedocs.io/en/latest/get_started/installation.html)。这需要根据PyTorch版本及其CUDA版本手动指定find-url。\n\n例如，以下命令install mmcv-full是针对PyTorch 1.10.x和CUDA 11.3构建的。\n\n```shell\npip install 'mmcv>=2.0.0' -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10/index.html\n```\n\n#### 在Docker中使用MMagic\n\n我们提供一个[Dockerfile](https://github.com/open-mmlab/mmagic/blob/main/docker/Dockerfile)来构建一个镜像。请确保您的[docker版本](https://docs.docker.com/engine/install/)>=19.03。\n\n```shell\n# 使用PyTorch 1.8, CUDA 11.1构建一个镜像\n# 如果您喜欢其他版本，只需修改Dockerfile\ndocker build -t mmagic docker/\n```\n\n使用如下命令运行\n\n```shell\ndocker run --gpus all --shm-size=8g -it -v {DATA_DIR}:/mmagic/data mmagic\n```\n\n#### 问题解决\n\n如果在安装过程中遇到问题，请先查看[FAQ](../faq.md)页面。如果找不到解决方案，可以在GitHub上[open an issue](https://github.com/open-mmlab/mmagic/issues/new/choose)。\n\n### 使用多个MMagic版本开发\n\n训练和测试脚本已经修改了`PYTHONPATH`，以确保脚本使用当前目录中的`MMagic`。\n\n要使用环境中安装的默认MMagic，而不是您正在使用的MMagic，可以删除这些脚本中的以下行\n\n```shell\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH\n```\n"
  },
  {
    "path": "docs/zh_cn/get_started/overview.md",
    "content": "# 概述\n\n欢迎来到 MMagic！ 在本节中，您将了解\n\n- [MMagic是什么？](#mmagic-是什么)\n- [为什么要使用 MMagic？](#为什么要使用-mmagic)\n- [新手入门](#新手入门)\n- [基础教程](#基础教程)\n- [进阶教程](#进阶教程)\n\n## MMagic 是什么？\n\nMMagic (**M**ultimodal **A**dvanced, **G**enerative, and **I**ntelligent **C**reation) 是一个供专业人工智能研究人员和机器学习工程师去处理、编辑和生成图像与视频的开源 AIGC 工具箱。\n\nMMagic 允许研究人员和工程师使用最先进的预训练模型，并且可以轻松训练和开发新的定制模型。\n\nMMagic 支持各种基础生成模型，包括：\n\n- 无条件生成对抗网络 (GANs)\n- 条件生成对抗网络 (GANs)\n- 内部学习\n- 扩散模型\n- 还有许多其他生成模型即将推出！\n\nMMagic 支持各种应用程序，包括：\n\n- 图文生成\n- 图像翻译\n- 3D 生成\n- 图像超分辨率\n- 视频超分辨率\n- 视频插帧\n- 图像补全\n- 图像抠图\n- 图像修复\n- 图像上色\n- 图像生成\n- 还有许多其他应用程序即将推出！\n\n<div align=center>\n    <video width=\"100%\" controls>\n        <source src=\"https://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\" type=\"video/mp4\">\n        <object data=\"https://user-images.githubusercontent.com/49083766/233564593-7d3d48ed-e843-4432-b610-35e3d257765c.mp4\" width=\"100%\">\n        </object>\n    </video>\n</div>\n</br>\n\n## 为什么要使用 MMagic？\n\n- **SOTA 算法**\n\n  MMagic 提供了处理、编辑、生成图像和视频的 SOTA 算法。\n\n- **强有力且流行的应用**\n\n  MMagic 支持了流行的图像修复、图文生成、3D生成、图像修补、抠图、超分辨率和生成等任务的应用。特别是 MMagic 支持了 Stable Diffusion 的微调和许多激动人心的 diffusion 应用，例如 ControlNet 动画生成。MMagic 也支持了 GANs 的插值，投影，编辑和其他流行的应用。请立即开始你的 AIGC 探索之旅！\n\n- **高效的框架**\n\n  通过 OpenMMLab 2.0 框架的 MMEngine 和 MMCV， MMagic 将编辑框架分解为不同的组件，并且可以通过组合不同的模块轻松地构建自定义的编辑器模型。我们可以像搭建“乐高”一样定义训练流程，提供丰富的组件和策略。在 MMagic 中，你可以使用不同的 APIs 完全控制训练流程。得益于 [MMSeparateDistributedDataParallel](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/wrappers/seperate_distributed.py), 动态模型结构的分布式训练可以轻松实现。\n\n## 新手入门\n\n安装说明见[安装](install.md)。\n\n## 基础教程\n\n对于初学者，我们建议从 [基础教程](../user_guides/config.md) 学习 MMagic 的基本用法。\n\n## 进阶教程\n\n对于熟悉 MMagic 的用户，可能想了解 MMagic 的进阶实用，以及如何扩展算法库，如何使用多个算法库框架等高级用法，请参考[进阶教程](../advanced_guides/evaluator.md)。\n\n## 开发指南\n\n想要使用 MMagic 进行深度开发的用户，可以参考[开发指南](../howto/models.md)。\n"
  },
  {
    "path": "docs/zh_cn/get_started/quick_run.md",
    "content": "# 快速运行\n\n成功安装MMagic后，现在您可以玩转MMagic了！如果您要从文本生成图像，只需要MMagic的几行代码！\n\n```python\nfrom mmagic.apis import MMagicInferencer\nsd_inferencer = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = 'output/sd_res.png'\nsd_inferencer.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\n或者您可以运行以下命令。\n\n```bash\npython demo/mmagic_inference_demo.py \\\n    --model-name stable_diffusion \\\n    --text \"A panda is having dinner at KFC\" \\\n    --result-out-dir ./output/sd_res.png\n```\n\n您将在文件夹`output/`中看到一个新图像`sd_res.png`，其中包含生成的样本。\n\n更重要的是，如果您想让这些照片更清晰，MMagic的超分辨率只需要几行代码！\n\n```python\nfrom mmagic.apis import MMagicInferencer\nconfig = 'configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py'\ncheckpoint = 'https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth'\nimg_path = 'tests/data/image/lq/baboon_x4.png'\neditor = MMagicInferencer('esrgan', model_config=config, model_ckpt=checkpoint)\noutput = editor.infer(img=img_path,result_out_dir='output.png')\n```\n\n现在，您可以在 `output.png` 中查看您想要的图片。\n"
  },
  {
    "path": "docs/zh_cn/howto/dataset.md",
    "content": "# 如何自定义数据集\n\n本文档将介绍 MMagic 中每一个数据集的设计方式，以及用户如何设计自定义数据集。\n\n- [如何自定义数据集](#如何自定义数据集)\n  - [支持的数据集格式](#支持的数据集格式)\n    - [BasicImageDataset](#basicimagedataset)\n    - [BasicFramesDataset](#basicframesdataset)\n    - [BasicConditonalDataset](#basicconditonaldataset)\n      - [1. 逐行读取的标注文件格式（例如 txt 文件）](#1-逐行读取的标注文件格式例如-txt-文件)\n      - [2. 基于字典的标注文件格式（例如 json）](#2-基于字典的标注文件格式例如-json)\n      - [3. 基于文件夹的标注格式（无需标注文件）](#3-基于文件夹的标注格式无需标注文件)\n    - [ImageNet 和 CIFAR10 数据集](#imagenet-和-cifar10-数据集)\n    - [AdobeComp1kDataset](#adobecomp1kdataset)\n    - [GrowScaleImgDataset](#growscaleimgdataset)\n    - [SinGANDataset](#singandataset)\n    - [PairedImageDataset](#pairedimagedataset)\n    - [UnpairedImageDataset](#unpairedimagedataset)\n  - [实现一个新的数据集](#实现一个新的数据集)\n    - [重复数据集](#重复数据集)\n\n## 支持的数据集格式\n\n在 MMagic 中，所有的数据集都是从 `BaseDataset` 类继承而来的。\n每个数据集都通过 `load_data_list` 方法来加载数据信息列表（例如数据所在的路径）。\n在 `__getitem__` 方法中，调用 `prepare_data` 来获取前处理后的数据。\n在 `prepare_data` 方法中，数据加载流程包括如下步骤：\n\n1. 通过传入的索引来获取数据信息，由 `get_data_info` 方法实现。\n2. 对数据应用数据转换，由 `pipeline` 方法实现。\n\n### BasicImageDataset\n\n**BasicImageDataset** `mmagic.datasets.BasicImageDataset` 是一个通用图片数据集，是为了底层视觉任务而设计的，比如图像超分辨率，图像修复和无条件图像生成。可以选择是否使用标注文件。\n\n如使用标注文件，标注的格式可以如下所示：\n\n```bash\n   Case 1 (CelebA-HQ):\n\n       000001.png\n       000002.png\n\n   Case 2 (DIV2K):\n\n       0001_s001.png (480,480,3)\n       0001_s002.png (480,480,3)\n       0001_s003.png (480,480,3)\n       0002_s001.png (480,480,3)\n       0002_s002.png (480,480,3)\n\n   Case 3 (Vimeo90k):\n\n       00001/0266 (256, 448, 3)\n       00001/0268 (256, 448, 3)\n```\n\n下面我们给出几个如何使用 `BasicImageDataset` 的示例。假定文件结构如下：\n\n```md\nmmagic (root)\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   │   ├── image.png\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   │   │   ├── image_x4.png\n│   │   ├── DIV2K_valid_HR\n│   │   ├── DIV2K_valid_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   ├── places\n│   │   ├── test_set\n│   │   ├── train_set\n|   |   ├── meta\n|   |   |    ├── Places365_train.txt\n|   |   |    ├── Places365_val.txt\n|   ├── celebahq\n│   │   ├── imgs_1024\n\n```\n\n按照以上的文件结构给出 3 个示例。\n\n示例 1: 加载 `DIV2K` 数据集来训练一个 `SISR` 模型。\n\n```python\n   dataset = BasicImageDataset(\n       ann_file='',\n       metainfo=dict(\n           dataset_type='div2k',\n           task_name='sisr'),\n       data_root='data/DIV2K',\n       data_prefix=dict(\n           gt='DIV2K_train_HR', img='DIV2K_train_LR_bicubic/X4'),\n       filename_tmpl=dict(img='{}_x4', gt='{}'),\n       pipeline=[])\n```\n\n示例 2: 加载 `places` 数据集来训练一个 `inpainting` 模型.\n\n```python\n   dataset = BasicImageDataset(\n       ann_file='meta/Places365_train.txt',\n       metainfo=dict(\n           dataset_type='places365',\n           task_name='inpainting'),\n       data_root='data/places',\n       data_prefix=dict(gt='train_set'),\n       pipeline=[])\n```\n\n示例 3: 加载 `CelebA-HQ` 数据集来训练一个 `PGGAN` 模型.\n\n```python\ndataset = BasicImageDataset(\n        pipeline=[],\n        data_root='./data/celebahq/imgs_1024')\n```\n\n### BasicFramesDataset\n\n**BasicFramesDataset** `mmagic.datasets.BasicFramesDataset` 也是一个通用图片数据集，为视频帧的底层视觉任务而设计的，比如视频的超分辨率和视频帧插值。\n可以选择是否使用标注文件。\n\n如使用标注文件, 标注的格式示例所示：\n\n```bash\nCase 1 (Vid4):\n\n   calendar 41\n   city 34\n   foliage 49\n   walk 47\n\nCase 2 (REDS):\n\n   000/00000000.png (720, 1280, 3)\n   000/00000001.png (720, 1280, 3)\n\nCase 3 (Vimeo90k):\n\n   00001/0266 (256, 448, 3)\n   00001/0268 (256, 448, 3)\n```\n\n假定文件结构如下：\n\n```bash\nmmagic (root)\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Vid4\n│   │   ├── BIx4\n│   │   │   ├── city\n│   │   │   │   ├── img1.png\n│   │   ├── GT\n│   │   │   ├── city\n│   │   │   │   ├── img1.png\n│   │   ├── meta_info_Vid4_GT.txt\n│   ├── vimeo-triplet\n│   │   ├── sequences\n|   |   |   ├── 00001\n│   │   │   │   ├── 0389\n│   │   │   │   │   ├── img1.png\n│   │   │   │   │   ├── img2.png\n│   │   │   │   │   ├── img3.png\n│   │   ├── tri_trainlist.txt\n```\n\n按照以上的文件结构给出两个示例。\n\n示例 1: 加载 `Vid4` 数据集来训练一个 `VSR` 模型.\n\n```python\ndataset = BasicFramesDataset(\n    ann_file='meta_info_Vid4_GT.txt',\n    metainfo=dict(dataset_type='vid4', task_name='vsr'),\n    data_root='data/Vid4',\n    data_prefix=dict(img='BIx4', gt='GT'),\n    pipeline=[],\n    depth=2,\n    num_input_frames=5)\n```\n\n示例 2: 加载 `Vimeo90k` 数据集来训练一个 `VFI` 模型.\n\n```python\ndataset = BasicFramesDataset(\n    ann_file='tri_trainlist.txt',\n    metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n    data_root='data/vimeo-triplet',\n    data_prefix=dict(img='sequences', gt='sequences'),\n    pipeline=[],\n    depth=2,\n    load_frames_list=dict(\n        img=['img1.png', 'img3.png'], gt=['img2.png']))\n```\n\n### BasicConditonalDataset\n\n**BasicConditonalDataset** `mmagic.datasets.BasicConditonalDataset` 是为条件生成对抗网络而设计的（例如 `SAGAN`、`BigGAN`）。该数据集支持为标注文件加载标签。 `BasicConditonalDataset` 支持如下 3 种标注格式。\n\n#### 1. 逐行读取的标注文件格式（例如 txt 文件）\n\n样本文件结构：\n\n```\n    data_prefix/\n    ├── folder_1\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    └── folder_2\n        ├── 123.png\n        ├── nsdf3.png\n        └── ...\n```\n\n样本标注文件格式（第一列是图像的路径，第二列是类别的索引）\n\n```\n    folder_1/xxx.png 0\n    folder_1/xxy.png 1\n    folder_2/123.png 5\n    folder_2/nsdf3.png 3\n    ...\n```\n\n`ImageNet` 数据集的配置示例：\n\n```python\ndataset=dict(\n    type='BasicConditionalDataset,\n    data_root='./data/imagenet/',\n    ann_file='meta/train.txt',\n    data_prefix='train',\n    pipeline=train_pipeline),\n```\n\n#### 2. 基于字典的标注文件格式（例如 json）\n\n样本文件结构：\n\n```\n    data_prefix/\n    ├── folder_1\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    └── folder_2\n        ├── 123.png\n        ├── nsdf3.png\n        └── ...\n```\n\n样本标注文件格式（键为图像的路径，值为标签）。\n\n```\n    {\n        \"folder_1/xxx.png\": [1, 2, 3, 4],\n        \"folder_1/xxy.png\": [2, 4, 1, 0],\n        \"folder_2/123.png\": [0, 9, 8, 1],\n        \"folder_2/nsdf3.png\", [1, 0, 0, 2],\n        ...\n    }\n```\n\n`EG3D (shapenet-car) ` 数据集的配置示例：\n\n```python\ndataset = dict(\n    type='BasicConditionalDataset',\n    data_root='./data/eg3d/shapenet-car',\n    ann_file='annotation.json',\n    pipeline=train_pipeline)\n```\n\n在这种类型的注释中，标签可以是任何类型，不仅限于索引。\n\n#### 3. 基于文件夹的标注格式（无需标注文件）\n\n样本文件结构：\n\n```\n    data_prefix/\n    ├── class_x\n    │   ├── xxx.png\n    │   ├── xxy.png\n    │   └── ...\n    │       └── xxz.png\n    └── class_y\n        ├── 123.png\n        ├── nsdf3.png\n        ├── ...\n        └── asd932_.png\n```\n\n如果在配置的 `ann_file` 中指定了标注文件，则将使用上面的前两种方式生成数据集，否则将尝试使用第三种方式。\n\n### ImageNet 和 CIFAR10 数据集\n\n**ImageNet 数据集** `mmagic.datasets.ImageNet` 和 **CIFAR10 数据集**`mmagic.datasets.CIFAR10` 是为 `ImageNet` 和 `CIFAR10` 这两个数据集而设计的。\n这两个数据集都是基于 `BasicConditionalDataset` 封装的。您可以使用它们来轻松加载这两个数据集的数据。\n\n`ImageNet` 的配置示例：\n\n```python\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='RandomCropLongEdge', keys=['img']),\n    dict(type='Resize', scale=(128, 128), keys=['img'], backend='pillow'),\n    dict(type='Flip', keys=['img'], flip_ratio=0.5, direction='horizontal'),\n    dict(type='PackInputs')\n]\n\ndataset=dict(\n    type='ImageNet',\n    data_root='./data/imagenet/',\n    ann_file='meta/train.txt',\n    data_prefix='train',\n    pipeline=pipeline),\n```\n\n`CIFAR10` 的配置示例:\n\n```python\npipeline = [dict(type='PackInputs')]\n\ndataset = dict(\n    type='CIFAR10',\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=pipeline)\n```\n\n### AdobeComp1kDataset\n\n**AdobeComp1kDataset** `mmagic.datasets.AdobeComp1kDataset` 是为 `Adobe composition-1k` 数据集而设计的。\n\n该数据集加载（alpha, fg, bg）数据，并对数据执行指定的变换。您可以在 `pipeline` 中指定在线合成图像或加载离线已合成的图像。\n\n在线合成 `comp-1k` 数据集示例:\n\n```md\n[\n   {\n       \"alpha\": 'alpha/000.png',\n       \"fg\": 'fg/000.png',\n       \"bg\": 'bg/000.png'\n   },\n   {\n       \"alpha\": 'alpha/001.png',\n       \"fg\": 'fg/001.png',\n       \"bg\": 'bg/001.png'\n   },\n]\n```\n\n离线合成 `comp-1k` 数据集示例:\n\n```md\n[\n  {\n      \"alpha\": 'alpha/000.png',\n      \"merged\": 'merged/000.png',\n      \"fg\": 'fg/000.png',\n      \"bg\": 'bg/000.png'\n  },\n  {\n      \"alpha\": 'alpha/001.png',\n      \"merged\": 'merged/001.png',\n      \"fg\": 'fg/001.png',\n      \"bg\": 'bg/001.png'\n  },\n]\n```\n\n### GrowScaleImgDataset\n\n`GrowScaleImgDataset` 是为了动态 GAN 模型（例如 `PGGAN` 和 `StyleGANv1`）而设计的。\n在这个数据集中，我们支持在训练过程中切换数据根目录，来加载不同分辨率的训练图像。\n这个过程是通过 `GrowScaleImgDataset.update_annotations` 方法实现的，并在训练过程中由 `PGGANFetchDataHook.before_train_iter` 调用。\n\n```python\ndef update_annotations(self, curr_scale):\n    # 确定是否需要更新数据根目录\n    if curr_scale == self._actual_curr_scale:\n        return False\n\n    # 按图像分辨率（尺度）提取新的数据根目录\n    for scale in self._img_scales:\n        if curr_scale <= scale:\n            self._curr_scale = scale\n            break\n        if scale == self._img_scales[-1]:\n            assert RuntimeError(\n                f'Cannot find a suitable scale for {curr_scale}')\n    self._actual_curr_scale = curr_scale\n    self.data_root = self.data_roots[str(self._curr_scale)]\n\n    # 使用新的数据根目录重新加载数据列表\n    self.load_data_list()\n\n    # print basic dataset information to check the validity\n    print_log('Update Dataset: ' + repr(self), 'current')\n    return True\n```\n\n### SinGANDataset\n\n`SinGANDataset` 是为 `SinGAN` 模型训练而设计的数据集。在 `SinGAN` 的训练中，我们不会去迭代数据集中的图像，而是返回一个一致的预处理图像字典。\n由于不需要根据给定的索引加载相应的图像数据，我们绕过了 `BaseDataset` 的默认数据加载逻辑。\n\n```python\ndef load_data_list(self, min_size, max_size, scale_factor_init):\n    # 加载单张图像\n    real = mmcv.imread(self.data_root)\n    self.reals, self.scale_factor, self.stop_scale = create_real_pyramid(\n        real, min_size, max_size, scale_factor_init)\n\n    self.data_dict = {}\n\n    # 生成多尺度图像\n    for i, real in enumerate(self.reals):\n        self.data_dict[f'real_scale{i}'] = real\n\n    self.data_dict['input_sample'] = np.zeros_like(\n        self.data_dict['real_scale0']).astype(np.float32)\n\ndef __getitem__(self, index):\n    # 直接返回转换过的数据字典\n    return self.pipeline(self.data_dict)\n```\n\n### PairedImageDataset\n\n`PairedImageDataset` 专为需要成对训练数据的图像转换模型（例如 `Pix2Pix`）设计。\n\n目录结构如下所示，其中每个图像文件都是图像对的拼接。\n\n```\n./data/dataset_name/\n├── test\n│   └── XXX.jpg\n└── train\n    └── XXX.jpg\n```\n\n在 `PairedImageDataset` 中，我们在 `load_data_list` 方法中扫描文件列表，然后将路径保存在 `pair_path` 字段中，以适配 `LoadPairedImageFromFile` 中的转换。\n\n```python\ndef load_data_list(self):\n    data_infos = []\n    pair_paths = sorted(self.scan_folder(self.data_root))\n    for pair_path in pair_paths:\n        # save path in the specific field\n        data_infos.append(dict(pair_path=pair_path))\n\n    return data_infos\n```\n\n### UnpairedImageDataset\n\n`UnpairedImageDataset` 是专为不需要成对数据的图像转换模型（例如 `CycleGAN`）设计的数据集。\n\n目录结构如下所示：\n\n```\n./data/dataset_name/\n├── testA\n│   └── XXX.jpg\n├── testB\n│   └── XXX.jpg\n├── trainA\n│   └── XXX.jpg\n└── trainB\n    └── XXX.jpg\n\n```\n\n在该数据集中，我们重载了 `__getitem__` 方法，实现了在训练过程中加载随机的图像对。\n\n```python\ndef __getitem__(self, idx):\n    if not self.test_mode:\n        return self.prepare_train_data(idx)\n\n    return self.prepare_test_data(idx)\n\ndef prepare_train_data(self, idx):\n    img_a_path = self.data_infos_a[idx % self.len_a]['path']\n    idx_b = np.random.randint(0, self.len_b)\n    img_b_path = self.data_infos_b[idx_b]['path']\n    results = dict()\n    results[f'img_{self.domain_a}_path'] = img_a_path\n    results[f'img_{self.domain_b}_path'] = img_b_path\n    return self.pipeline(results)\n\ndef prepare_test_data(self, idx):\n    img_a_path = self.data_infos_a[idx % self.len_a]['path']\n    img_b_path = self.data_infos_b[idx % self.len_b]['path']\n    results = dict()\n    results[f'img_{self.domain_a}_path'] = img_a_path\n    results[f'img_{self.domain_b}_path'] = img_b_path\n    return self.pipeline(results)\n```\n\n## 实现一个新的数据集\n\n如果您需要为一个新的底层 CV 任务（例如去噪、去雨、去雾和去反射）创建一个数据集，或者现有的数据集格式不符合您的需求，您可以将新的数据格式重新组织成现有的格式，或者在 `mmagic/datasets` 中创建一个新的数据集中来加载数据。\n\n从现有的数据集基类中继承（例如 `BasicImageDataset` 和 `BasicFramesDataset`）会比较容易创建一个新的数据集。\n\n您也可以创建一个继承自 [BaseDataset](https://github.com/open-mmlab/mmengine/blob/main/mmengine/dataset/base_dataset.py) 的新数据集，它是定义在 [MMEngine](https://github.com/open-mmlab/mmengine) 中的数据集基类。\n\n下面是创建一个用于视频帧插值的数据集的示例：\n\n```python\nfrom .basic_frames_dataset import BasicFramesDataset\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass NewVFIDataset(BasicFramesDataset):\n    \"\"\"Introduce the dataset\n\n    Examples of file structure.\n\n    Args:\n        pipeline (list[dict | callable]): A sequence of data transformations.\n        folder (str | :obj:`Path`): Path to the folder.\n        ann_file (str | :obj:`Path`): Path to the annotation file.\n        test_mode (bool): Store `True` when building test dataset.\n            Default: `False`.\n    \"\"\"\n\n    def __init__(self, ann_file, metainfo, data_root, data_prefix,\n                    pipeline, test_mode=False):\n        super().__init__(ann_file, metainfo, data_root, data_prefix,\n                            pipeline, test_mode)\n        self.data_infos = self.load_annotations()\n\n    def load_annotations(self):\n        \"\"\"Load annoations for the dataset.\n\n        Returns:\n            list[dict]: A list of dicts for paired paths and other information.\n        \"\"\"\n        data_infos = []\n        ...\n        return data_infos\n\n```\n\n欢迎[提交新的数据集类到 MMagic](https://github.com/open-mmlab/mmagic/compare)\n\n### 重复数据集\n\n我们使用 [RepeatDataset](https://github.com/open-mmlab/mmengine/blob/main/mmengine/dataset/dataset_wrapper.py) 作为包装器来重复数据集。\n例如，假设原始数据集是 `Dataset_A`，为了重复它，配置文件应该如下所示：\n\n```python\ndataset_A_train = dict(\n        type='RepeatDataset',\n        times=N,\n        dataset=dict(  # This is the original config of Dataset_A\n            type='Dataset_A',\n            ...\n            pipeline=train_pipeline\n        )\n    )\n```\n\n您可以参考 [MMEngine 中的教程](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/basedataset.md)。\n"
  },
  {
    "path": "docs/zh_cn/howto/losses.md",
    "content": "# 如何设计自己的损失函数\n\n`losses` 在 `MMagic` 中注册为 `LOSSES`。\n在 MMagic 中设计自己的损失函数，步骤和在 MMagic 中自定义任何其他模型类似。\n本节主要具体介绍了如何在 MMagic 中实现自定义的损失函数。\n本教程建议您在实现自定义的损失函数时，应该遵循本教程相同的设计，这样在我们的框架中使用您新定义的损失函数，就不需要额外的工作。\n\n本指南包括：\n\n- [设计你自己的损失函数](#如何设计自己的损失函数)\n  - [支持损失函数介绍](#支持的损失函数介绍)\n  - [设计一个新的损失函数](#设计一个新的损失函数)\n    - [MSELoss 的一个例子](#MSELoss-的一个例子)\n    - [DiscShiftLoss 的一个例子](#DiscShiftLoss-的一个例子)\n    - [GANWithCustomizedLoss 的一个例子](#GANWithCustomizedLoss-的一个例子)\n  - [可用损失函数](#可用损失函数)\n    - [常规损失函数](#常规损失函数)\n    - [损失函数组件](#损失函数组件)\n\n## 支持的损失函数介绍\n\n为了方便使用，您可以直接使用我们为具体算法设置的默认损失计算过程，如lsgan、biggan、styleganv2等。\n以`stylegan2`为例，我们使用R1梯度惩罚和生成器路径长度正则化作为可配置损失，用户可以调整相关参数，如 `r1_loss_weight` 和 `g_reg_weight`。\n\n```python\n# stylegan2_base.py\nloss_config =dict(\n     r1_loss_weight=10。 / 2. * d_reg_interval,\n     r1_interval=d_reg_interval,\n     norm_mode='HWC',\n     g_reg_interval=g_reg_interval,\n     g_reg_weight=2。 * g_reg_interval,\n     pl_batch_shrink=2)\n\nmodel=dict(\n     type='StyleGAN2',\n     xxx,\n     loss_config=loss_config)\n```\n\n## 设计一个新的损失函数\n\n### MSELoss 的一个例子\n\n一般来说，要实现一个损失模块，我们会编写一个函数实现，然后用类实现包装它。 以MSELoss为例：\n\n```python\n@masked_loss\ndef mse_loss(pred，target)：\n     return F.mse_loss（pred，target，reduction='none'）\n\n@LOSSES.register_module()\nClass MSELoss(nn.Module)：\n\n     def __init__(self, loss_weight=1.0, reduction='mean', sample_wise=False):\n         # 代码可以在``mmagic/models/losses/pixelwise_loss.py``中找到\n\n     def forward(self, pred, target, weight=None, **kwargs):\n         # 代码可以在``mmagic/models/losses/pixelwise_loss.py``中找到\n```\n\n根据这个损失函数的定义，我们现在可以简单地通过在配置文件中定义它来使用：\n\n```python\npixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean')\n```\n\n请注意，上面的`pixel_loss`必须在模型中定义。 详情请参考[自定义模型](./models.md)。 与自定义模型类似，为了使用您自己实现的损失函数，您需要在编写后在`mmagic/models/losses/__init__.py`中导入该损失函数。\n\n### DiscShiftLoss 的一个例子\n\n一般来说，要实现一个损失模块，我们会编写一个函数实现，然后用类实现包装它。\n但是，在 MMagic 中，我们提供了另一个统一的接口 data_info 供用户定义输入参数和数据项之间的映射。\n\n```python\n@weighted_loss\ndef disc_shift_loss(pred)：\n     return pred**2\n\n@MODULES.register_module()\nClass DiscShiftLoss(nn.Module)：\n\n     def __init__(self, loss_weight=1.0, data_info=None):\n         super(DiscShiftLoss，self).__init__()\n         # 代码可以在``mmagic/models/losses/disc_auxiliary_loss.py``中找到\n\n     def forward(self, *args, **kwargs):\n         # 代码可以在``mmagic/models/losses/disc_auxiliary_loss.py``中找到\n```\n\n这种损失模块设计的目标是允许在生成模型(`MODELS`)中自动使用它，而无需其他复杂代码来定义数据和关键字参数之间的映射。 因此，与 OpenMMLab 中的其他框架不同，我们的损失模块包含一个特殊的关键字 data_info，它是一个定义输入参数与生成模型数据之间映射的字典。 以`DiscShiftLoss`为例，用户在编写配置文件时，可能会用到这个loss，如下：\n\n```python\ndict(type='DiscShiftLoss',\n    loss_weight=0.001 * 0.5,\n    data_info=dict(pred='disc_pred_real'))\n```\n\n`data_info` 中的信息告诉模块使用 `disc_pred_real` 数据作为 `pred` 参数的输入张量。 一旦 `data_info` 不为 `None`，我们的损失模块将自动构建计算图。\n\n```python\n@MODULES.register_module()\nclass DiscShiftLoss(nn.Module):\n\n    def __init__(self, loss_weight=1.0, data_info=None):\n        super(DiscShiftLoss, self).__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n\n    def forward(self, *args, **kwargs):\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            kwargs.update(dict(weight=self.loss_weight))\n            return disc_shift_loss(**kwargs)\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            return disc_shift_loss(*args, weight=self.loss_weight, **kwargs)\n\n    @staticmethod\n    def loss_name():\n        return 'loss_disc_shift'\n\n```\n\n如这部分代码所示，一旦用户设置了“data_info”，损失模块将收到一个包含所有必要数据和模块的字典，该字典由训练过程中的“MODELS”提供。 如果此字典作为非关键字参数给出，则应将其作为第一个参数提供。 如果您使用关键字参数，请将其命名为 `outputs_dict`。\n\n### GANWithCustomizedLoss 的一个例子\n\n为了构建计算图，生成模型必须提供包含各种数据的字典。 仔细观察任何生成模型，你会发现我们将各种特征和模块收集到字典中。 我们在这里提供了一个自定义的`GANWithCustomizedLoss`来展示这个过程。\n\n```python\nclass GANWithCustomizedLoss(BaseModel):\n\n    def __init__(self, gan_loss, disc_auxiliary_loss, gen_auxiliary_loss,\n                 *args, **kwargs):\n        # ...\n        if gan_loss is not None:\n            self.gan_loss = MODULES.build(gan_loss)\n        else:\n            self.gan_loss = None\n\n        if disc_auxiliary_loss:\n            self.disc_auxiliary_losses = MODULES.build(disc_auxiliary_loss)\n            if not isinstance(self.disc_auxiliary_losses, nn.ModuleList):\n                self.disc_auxiliary_losses = nn.ModuleList(\n                    [self.disc_auxiliary_losses])\n        else:\n            self.disc_auxiliary_loss = None\n\n        if gen_auxiliary_loss:\n            self.gen_auxiliary_losses = MODULES.build(gen_auxiliary_loss)\n            if not isinstance(self.gen_auxiliary_losses, nn.ModuleList):\n                self.gen_auxiliary_losses = nn.ModuleList(\n                    [self.gen_auxiliary_losses])\n        else:\n            self.gen_auxiliary_losses = None\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        # ...\n\n        # get data dict to compute losses for disc\n        data_dict_ = dict(\n            iteration=curr_iter,\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs)\n\n        loss_disc, log_vars_disc = self._get_disc_loss(data_dict_)\n\n        # ...\n\n    def _get_disc_loss(self, outputs_dict):\n        # Construct losses dict. If you hope some items to be included in the\n        # computational graph, you have to add 'loss' in its name. Otherwise,\n        # items without 'loss' in their name will just be used to print\n        # information.\n        losses_dict = {}\n        # gan loss\n        losses_dict['loss_disc_fake'] = self.gan_loss(\n            outputs_dict['disc_pred_fake'], target_is_real=False, is_disc=True)\n        losses_dict['loss_disc_real'] = self.gan_loss(\n            outputs_dict['disc_pred_real'], target_is_real=True, is_disc=True)\n\n        # disc auxiliary loss\n        if self.with_disc_auxiliary_loss:\n            for loss_module in self.disc_auxiliary_losses:\n                loss_ = loss_module(outputs_dict)\n                if loss_ is None:\n                    continue\n\n                # the `loss_name()` function return name as 'loss_xxx'\n                if loss_module.loss_name() in losses_dict:\n                    losses_dict[loss_module.loss_name(\n                    )] = losses_dict[loss_module.loss_name()] + loss_\n                else:\n                    losses_dict[loss_module.loss_name()] = loss_\n        loss, log_var = self.parse_losses(losses_dict)\n\n        return loss, log_var\n\n```\n\n在这里，`_get_disc_loss` 将帮助自动组合各种损失函数。\n\n因此，只要用户设计相同规则的损失模块，就可以在生成模型的训练中插入任何一种损失，无需对模型代码进行其他修改。 您只需要在配置文件中定义 `data_info` 即可。\n\n## 可用损失函数\n\n我们在配置中列出了可用的损失示例，如下所示。\n\n### 常规损失函数\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th>Method</th>\n    <th>class</th>\n    <th>Example</th>\n  </tr>\n</thead>\n<tbody>\n  <tr>\n    <td>vanilla gan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n\n```python\n# dic gan\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='vanilla',\n    loss_weight=0.001,\n)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>lsgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n</td>\n\n</tr>\n  <tr>\n    <td>wgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='wgan',\n    loss_weight=0.0001,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>hinge loss</td>\n    <td>mmagic.models.GANLoss</td>\n    <td>\n\n```python\n# deepfillv2\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='hinge',\n    loss_weight=0.1,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>smgan loss</td>\n    <td>mmagic.models.GANLoss</td>\n<td>\n\n```python\n# aot-gan\nloss_gan=dict(\n    type='GANLoss',\n    gan_type='smgan',\n    loss_weight=0.01,\n)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>gradient penalty</td>\n    <td>mmagic.models.GradientPenaltyLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_gp=dict(type='GradientPenaltyLoss', loss_weight=10.)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>discriminator shift loss</td>\n    <td>mmagic.models.DiscShiftLoss</td>\n    <td>\n\n```python\n# deepfillv1\nloss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>clip loss</td>\n    <td>mmagic.models.CLIPLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>L1 composition loss</td>\n    <td>mmagic.models.L1CompositionLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>MSE composition loss</td>\n    <td>mmagic.models.MSECompositionLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>charbonnier composition loss</td>\n    <td>mmagic.models.CharbonnierCompLoss</td>\n    <td>\n\n```python\n# dim\nloss_comp=dict(type='CharbonnierCompLoss', loss_weight=0.5)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>face id Loss</td>\n    <td>mmagic.models.FaceIdLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>light cnn feature loss</td>\n    <td>mmagic.models.LightCNNFeatureLoss</td>\n    <td>\n\n```python\n# dic gan\nfeature_loss=dict(\n    type='LightCNNFeatureLoss',\n    pretrained=pretrained_light_cnn,\n    loss_weight=0.1,\n    criterion='l1')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>gradient loss</td>\n    <td>mmagic.models.GradientLoss</td>\n    <td></td>\n\n</tr>\n  <tr>\n    <td>l1 Loss</td>\n    <td>mmagic.models.L1Loss</td>\n    <td>\n\n```python\n# dic gan\npixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>mse loss</td>\n    <td>mmagic.models.MSELoss</td>\n    <td>\n\n```python\n# dic gan\nalign_loss=dict(type='MSELoss', loss_weight=0.1, reduction='mean')\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>charbonnier loss</td>\n    <td>mmagic.models.CharbonnierLoss</td>\n    <td>\n\n```python\n# dim\nloss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5)\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>masked total variation loss</td>\n    <td>mmagic.models.MaskedTVLoss</td>\n    <td>\n\n```python\n# partial conv\nloss_tv=dict(\n    type='MaskedTVLoss',\n    loss_weight=0.1\n)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>perceptual loss</td>\n    <td>mmagic.models.PerceptualLoss</td>\n    <td>\n\n```python\n# real_basicvsr\nperceptual_loss=dict(\n    type='PerceptualLoss',\n    layer_weights={\n        '2': 0.1,\n        '7': 0.1,\n        '16': 1.0,\n        '25': 1.0,\n        '34': 1.0,\n    },\n    vgg_type='vgg19',\n    perceptual_weight=1.0,\n    style_weight=0,\n    norm_img=False)\n\n```\n\n</td>\n\n</tr>\n  <tr>\n    <td>transferal perceptual loss</td>\n    <td>mmagic.models.TransferalPerceptualLoss</td>\n    <td>\n\n```python\n# ttsr\ntransferal_perceptual_loss=dict(\n    type='TransferalPerceptualLoss',\n    loss_weight=1e-2,\n    use_attention=False,\n    criterion='mse')\n\n```\n\n</td>\n  </tr>\n</tbody>\n</table>\n\n### 损失函数组件\n\n对于“GANWithCustomizedLoss”，我们提供了几个组件来构建自定义损失。\n\n| Method                               | class                                       |\n| ------------------------------------ | ------------------------------------------- |\n| clip loss component                  | mmagic.models.CLIPLossComps                 |\n| discriminator shift loss component   | mmagic.models. DiscShiftLossComps           |\n| gradient penalty loss component      | mmagic.models. GradientPenaltyLossComps     |\n| r1 gradient penalty component        | mmagic.models. R1GradientPenaltyComps       |\n| face Id loss component               | mmagic.models. FaceIdLossComps              |\n| gan loss component                   | mmagic.models. GANLossComps                 |\n| generator path regularizer component | mmagic.models.GeneratorPathRegularizerComps |\n"
  },
  {
    "path": "docs/zh_cn/howto/models.md",
    "content": "# 如何设计自己的模型\n\nMMagic建立在MMEngine和MMCV的基础上，使用户能够快速地设计新模型，轻松地地训练和评估它们。\n在本节中，您将学习如何设计自己的模型。\n\n本指南的结构如下:\n\n- [如何设计自己的模型](#如何设计自己的模型)\n  - [MMagic中的模型概述](#mmagic中的模型概述)\n  - [一个SRCNN的例子](#一个srcnn的例子)\n    - [Step 1: 定义SRCNN网络](#step-1-定义srcnn网络)\n    - [Step 2: 定义SRCNN的模型](#step-2-定义srcnn的模型)\n    - [Step 3: 开始训练SRCNN](#step-3-开始训练srcnn)\n  - [一个DCGAN的例子](#一个dcgan的例子)\n    - [Step 1: 定义DCGAN的网络](#step-1-定义dcgan的网络)\n    - [Step 2: 设计DCGAN的模型](#step-2-设计dcgan的模型)\n    - [Step 3: 开始训练DCGAN](#step-3-开始训练dcgan)\n  - [参考文献](#参考文献)\n\n## MMagic中的模型概述\n\n在MMagic中，一个算法可以分为两部分: **Model** 和 **Module**.\n\n- **Model** 是最顶层的包装，并且总是继承自MMEngine中提供的 `BaseModel` 。 **Model** 负责网络前向、损耗计算、反向、参数更新等. 在MMagic中, **Model** 应该注册为 `MODELS`.\n- **Module** 模块包括用于训练或推理的 **architectures** , 预定义的 **loss classes**, 以及对批量输入数据预处理的 **data preprocessors** 。 **Module** 总是作为**Model**的元素呈现。 在MMagic中, **Module** 应该注册为 **MODULES**。\n\n以DCGAN model 模型为例，[生成器](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_generator.py) 和 [判别器](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_discriminator.py) 是 **Module**, 分别用于生成图像和鉴别图像真伪。 [`DCGAN`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan.py) 是 **Model**, 它从dataloader中获取数据，交替训练生成器和鉴别器。\n\n您可以通过以下链接找到 **Model** 和 **Module** 的实现。\n\n- **Model**:\n  - [Editors](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/editors)\n- **Module**:\n  - [Layers](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/layers)\n  - [Losses](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/losses)\n  - [Data Preprocessor](https://github.com/open-mmlab/mmagic/tree/main/mmagic/models/data_preprocessors)\n\n## 一个SRCNN的例子\n\n这里，我们以经典图像超分辨率模型SRCNN\\[1\\]的实现为例。\n\n### Step 1: 定义SRCNN网络\n\nSRCNN 是第一个用于单幅图像超分辨率\\[1\\]的深度学习方法。为了实现SRCNN的网络架构，我们需要创建一个新文件 `mmagic/models/editors/srgan/sr_resnet.py` 并执行 `class MSRResNet`。\n\n在这一步中，我们通过继承`mmengine.models.BaseModule`来实现 `class MSRResNet`，并在`__init__`函数中定义网络架构。\n特别地，我们需要使用`@MODELS.register_module()`将`class MSRResNet`的实现添加到MMagic的注册中。\n\n```python\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmagic.registry import MODELS\n\nfrom mmagic.models.utils import (PixelShufflePack, ResidualBlockNoBN,\n                                 default_init_weights, make_layer)\n\n\n@MODELS.register_module()\nclass MSRResNet(BaseModule):\n    \"\"\"修改后的SRResNet。\n\n    由 \"使用生成对抗网络的照片-现实的单幅图像超级分辨率 \"中的SRResNet修改而来的压缩版本。\n\n    它使用无BN的残差块，类似于EDSR。\n    目前支持x2、x3和x4上采样比例因子。\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_blocks (int): Block number in the trunk network. Default: 16.\n        upscale_factor (int): Upsampling factor. Support x2, x3 and x4.\n            Default: 4.\n    \"\"\"\n    _supported_upscale_factors = [2, 3, 4]\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=16,\n                 upscale_factor=4):\n\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.mid_channels = mid_channels\n        self.num_blocks = num_blocks\n        self.upscale_factor = upscale_factor\n\n        self.conv_first = nn.Conv2d(\n            in_channels, mid_channels, 3, 1, 1, bias=True)\n        self.trunk_net = make_layer(\n            ResidualBlockNoBN, num_blocks, mid_channels=mid_channels)\n\n        # upsampling\n        if self.upscale_factor in [2, 3]:\n            self.upsample1 = PixelShufflePack(\n                mid_channels,\n                mid_channels,\n                self.upscale_factor,\n                upsample_kernel=3)\n        elif self.upscale_factor == 4:\n            self.upsample1 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n            self.upsample2 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n        else:\n            raise ValueError(\n                f'Unsupported scale factor {self.upscale_factor}. '\n                f'Currently supported ones are '\n                f'{self._supported_upscale_factors}.')\n\n        self.conv_hr = nn.Conv2d(\n            mid_channels, mid_channels, 3, 1, 1, bias=True)\n        self.conv_last = nn.Conv2d(\n            mid_channels, out_channels, 3, 1, 1, bias=True)\n\n        self.img_upsampler = nn.Upsample(\n            scale_factor=self.upscale_factor,\n            mode='bilinear',\n            align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        self.init_weights()\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n            strict (boo, optional): Whether strictly load the pretrained model.\n                Defaults to True.\n        \"\"\"\n\n        for m in [self.conv_first, self.conv_hr, self.conv_last]:\n            default_init_weights(m, 0.1)\n\n```\n\n然后，我们实现了`class MSRResNet`的`forward` 函数, 该函数将输入张量作为输入张量，然后返回`MSRResNet`的结果。\n\n```python\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        feat = self.lrelu(self.conv_first(x))\n        out = self.trunk_net(feat)\n\n        if self.upscale_factor in [2, 3]:\n            out = self.upsample1(out)\n        elif self.upscale_factor == 4:\n            out = self.upsample1(out)\n            out = self.upsample2(out)\n\n        out = self.conv_last(self.lrelu(self.conv_hr(out)))\n        upsampled_img = self.img_upsampler(x)\n        out += upsampled_img\n        return out\n```\n\n在`class MSRResNet`实现后，我们需要更新`mmagic/models/editors/__init__.py`中的模型列表，以便我们可以通过`mmagic.models.editors`导入和使用`class MSRResNet`。\n\n```python\nfrom .srgan.sr_resnet import MSRResNet\n```\n\n### Step 2: 定义SRCNN的模型\n\n网络架构实现后, 我们需要定义我们的模型`class BaseEditModel` 并实现`class BaseEditModel`的前向循环。\n\n为了实现`class BaseEditModel`,\n我们创建一个新文件`mmagic/models/base_models/base_edit_model.py`。\n具体来说，`class BaseEditModel`继承自`mmengine.model.BaseModel`.\n在`__init__`函数中，我们定义了`class BaseEditModel`的损失函数，训练, 测试配置和网络。\n\n```python\nfrom typing import List, Optional\n\nimport torch\nfrom mmengine.model import BaseModel\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass BaseEditModel(BaseModel):\n    \"\"\"用于图像和视频编辑的基本模型。\n\n    它必须包含一个生成器，将帧作为输入并输出插值帧。它也有一个用于训练的pixel-wise损失。\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n        super().__init__(\n            init_cfg=init_cfg, data_preprocessor=data_preprocessor)\n\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n        # generator\n        self.generator = MODELS.build(generator)\n\n        # loss\n        self.pixel_loss = MODELS.build(pixel_loss)\n```\n\n因为`mmengine.model.BaseModel`提供了算法模型的基本功能，例如权重初始化、批量输入预处理、解析损失和更新模型参数。\n因此，子类继承自BaseModel，即本例中的`class BaseEditModel`,\n只需要实现forward方法，该方法实现了计算损失和预测的逻辑。\n\n具体来说，`class BaseEditModel`实现的`forward`函数将`batch_inputs`和`data_samples`作为输入，并根据模式参数返回结果。\n\n```python\n    def forward(self,\n                batch_inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs):\n        \"\"\"返回训练、验证、测试和简单推理过程的损失或预测。\n\n        BaseModel的``forward``方法是一个抽象方法，它的子类必须实现这个方法。\n\n        接受由:attr:`data_preprocessor`处理的``batch_inputs`` 和 ``data_samples``, 并根据模式参数返回结果。.\n\n        在非分布式训练、验证和测试过程中，\n        ``forward``将被``BaseModel.train_step``,\n        ``BaseModel.val_step``和``BaseModel.val_step``直接调用。\n\n        在分布式数据并行训练过程中,``MMSeparateDistributedDataParallel.train_step``将首先调用``DistributedDataParallel.forward``以启用自动梯度同步，然后调用``forward``获得训练损失。\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict or tensor for custom use.\n        \"\"\"\n\n        if mode == 'tensor':\n            return self.forward_tensor(batch_inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            return self.forward_inference(batch_inputs, data_samples, **kwargs)\n\n        elif mode == 'loss':\n            return self.forward_train(batch_inputs, data_samples, **kwargs)\n```\n\n具体来说，在`forward_tensor`中, `class BaseEditModel`直接返回网络的前向张量。\n\n```python\n    def forward_tensor(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward tensor.\n            Returns result of simple forward.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        feats = self.generator(batch_inputs, **kwargs)\n\n        return feats\n```\n\n在`forward_inference`函数中，`class BaseEditModel`首先将前向张量转换为图像，然后返回该图像作为输出。\n\n```python\n    def forward_inference(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward inference.\n            Returns predictions of validation, testing, and simple inference.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[DataSample]: predictions.\n        \"\"\"\n\n        feats = self.forward_tensor(batch_inputs, data_samples, **kwargs)\n        feats = self.data_preprocessor.destructor(feats)\n        predictions = []\n        for idx in range(feats.shape[0]):\n            predictions.append(\n                DataSample(\n                    pred_img=feats[idx].to('cpu'),\n                    metainfo=data_samples[idx].metainfo))\n\n        return predictions\n```\n\n在`forward_train`中, `class BaseEditModel`计算损失函数，并返回一个包含损失的字典作为输出。\n\n```python\n    def forward_train(self, batch_inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training.\n            Returns dict of losses of training.\n\n        Args:\n            batch_inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        feats = self.forward_tensor(batch_inputs, data_samples, **kwargs)\n        gt_imgs = [data_sample.gt_img.data for data_sample in data_samples]\n        batch_gt_data = torch.stack(gt_imgs)\n\n        loss = self.pixel_loss(feats, batch_gt_data)\n\n        return dict(loss=loss)\n\n```\n\n在实现了`class BaseEditModel`之后，我们需要更新\n`mmagic/models/__init__.py`中的模型列表，这样我们就可以通过`mmagic.models`导入和使用`class BaseEditModel`。\n\n```python\nfrom .base_models.base_edit_model import BaseEditModel\n```\n\n### Step 3: 开始训练SRCNN\n\n在实现了网络结构和SRCNN的前向循环后、 现在我们可以创建一个新的文件`configs/srcnn/srcnn_x4k915_g1_1000k_div2k.py`\n来设置训练SRCNN所需的配置。\n\n在配置文件中，我们需要指定我们的模型`class BaseEditModel`的参数，包括生成器网络结构、损失函数、额外的训练和测试配置，以及输入张量的数据预处理器。请参考[MMagic中的损失函数介绍](./losses.md)了解MMagic中损失函数的更多细节。\n\n```python\n# model settings\nmodel = dict(\n    type='BaseEditModel',\n    generator=dict(\n        type='SRCNNNet',\n        channels=(3, 64, 32, 3),\n        kernel_sizes=(9, 1, 5),\n        upscale_factor=scale),\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n```\n\n我们还需要根据创建自己的数据加载器来指定训练数据加载器和测试数据加载器。\n最后，我们可以开始训练我们自己的模型:\n\n```python\npython tools/train.py configs/srcnn/srcnn_x4k915_g1_1000k_div2k.py\n```\n\n## 一个DCGAN的例子\n\n这里，我们以经典gan模型DCGAN\\[2\\]的实现为例。\n\n### Step 1: 定义DCGAN的网络\n\nDCGAN是一种经典的图像生成对抗网络\\[2\\]。为了实现DCGAN的网络架构，我们需要创建两个新文件`mmagic/models/editors/dcgan/dcgan_generator.py`和`mmagic/models/editors/dcgan/dcgan_discriminator.py`，并实现生成器(`class DCGANGenerator`) 和鉴别器(`class DCGANDiscriminator`)。\n\n在这一步中，我们实现了`class DCGANGenerator`, `class DCGANDiscriminator` 并在`__init__`函数中定义了网络架构。\n特别地，我们需要使用`@MODULES.register_module()`来将生成器和鉴别器添加到MMagic的注册中。\n\n以下面的代码为例:\n\n```python\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmcv.runner import load_checkpoint\nfrom mmcv.utils.parrots_wrapper import _BatchNorm\nfrom mmengine.logging import MMLogger\nfrom mmengine.model.utils import normal_init\n\nfrom mmagic.models.builder import MODULES\nfrom ..common import get_module_device\n\n\n@MODULES.register_module()\nclass DCGANGenerator(nn.Module):\n    def __init__(self,\n                 output_scale,\n                 out_channels=3,\n                 base_channels=1024,\n                 input_scale=4,\n                 noise_size=100,\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='ReLU'),\n                 out_act_cfg=dict(type='Tanh'),\n                 pretrained=None):\n        super().__init__()\n        self.output_scale = output_scale\n        self.base_channels = base_channels\n        self.input_scale = input_scale\n        self.noise_size = noise_size\n\n        # 上采样的次数\n        self.num_upsamples = int(np.log2(output_scale // input_scale))\n\n        # 输出4x4的特征图\n        self.noise2feat = ConvModule(\n            noise_size,\n            base_channels,\n            kernel_size=4,\n            stride=1,\n            padding=0,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=default_norm_cfg,\n            act_cfg=default_act_cfg)\n\n        # 建立上采样骨干（不包括输出层）\n        upsampling = []\n        curr_channel = base_channels\n        for _ in range(self.num_upsamples - 1):\n            upsampling.append(\n                ConvModule(\n                    curr_channel,\n                    curr_channel // 2,\n                    kernel_size=4,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=dict(type='ConvTranspose2d'),\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n\n            curr_channel //= 2\n\n        self.upsampling = nn.Sequential(*upsampling)\n\n        # 输出层\n        self.output_layer = ConvModule(\n            curr_channel,\n            out_channels,\n            kernel_size=4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=None,\n            act_cfg=out_act_cfg)\n```\n\n然后，我们实现了`DCGANGenerator`的`forward`函数，该函数接受 `noise`张量或`num_batches`，然后返回`DCGANGenerator`的结果。\n\n```python\n    def forward(self, noise, num_batches=0, return_noise=False):\n        noise_batch = noise_batch.to(get_module_device(self))\n        x = self.noise2feat(noise_batch)\n        x = self.upsampling(x)\n        x = self.output_layer(x)\n        return x\n```\n\n如果你想为你的网络实现特定的权重初始化方法，你需要自己添加`init_weights`函数。\n\n```python\n    def init_weights(self, pretrained=None):\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):\n                    normal_init(m, 0, 0.02)\n                elif isinstance(m, _BatchNorm):\n                    nn.init.normal_(m.weight.data)\n                    nn.init.constant_(m.bias.data, 0)\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n```\n\n在实现`DCGANGenerator`类之后，我们需要更新`mmagic/models/editors/__init__.py`中的模型列表，以便我们可以通过`mmagic.models.editors`导入和使用`DCGANGenerator`类。\n\n类`DCGANDiscriminator`的实现遵循类似的逻辑，你可以在[这里](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/editors/dcgan/dcgan_discriminator.py)找到实现。\n\n### Step 2: 设计DCGAN的模型\n\n在实现了网络**Module**之后，我们需要定义我们的**Model**类 `DCGAN`。\n\n你的**Model**应该继承自MMEngine提供的[`BaseModel`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/model/base_model/base_model.py#L16)，并实现三个函数，`train_step`, `val_step`和`test_step`。\n\n- `train_step`:  这个函数负责更新网络的参数，由MMEngine的Loop ([`IterBasedTrainLoop`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L183)或 [`EpochBasedTrainLoop`](https://github.com/open-mmlab/mmengine/blob/main/mmengine/runner/loops.py#L18))调用。 `train_step`将数据批处理和[`OptimWrapper`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md)作为输入并返回一个日志字典。\n- `val_step`: 该函数负责在训练过程中获取用于验证的输出，由 [`MultiValLoop`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/engine/runner/multi_loops.py#L19)调用。\n- `test_step`: 该函数负责在测试过程中获取输出，由[`MultiTestLoop`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/engine/runner/multi_loops.py#L274)调用。\n\n> 请注意，在`train_step`, `val_step`和`test_step`中，调用`DataPreprocessor`对输入数据进行预处理，然后再将它们提供给神经网络。要了解有关`DataPreprocessor`的更多信息，请参阅此[文件](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/data_preprocessors/gen_preprocessor.py) and 和本[教程](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/tutorials/model.md#%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E5%99%A8datapreprocessor)。\n\n为了简化使用，我们在MMagic中提供了[`BaseGAN`](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/base_models/base_gan.py)类，它为GAN模型实现了通用的`train_step`, `val_step`和`test_step`函数。使用`BaseGAN`作为基类，每个特定的GAN算法只需要实现`train_generator` and `train_discriminator`.\n\n在`train_step`中，我们支持数据预处理、梯度累积(由[`OptimWrapper`](https://github.com/open-mmlab/mmengine/blob/main/docs/en/tutorials/optim_wrapper.md)实现)和指数滑动平均(EMA)通过[(`ExponentialMovingAverage`)](https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/base_models/average_model.py#L19)实现。使用`BaseGAN.train_step`，每个特定的GAN算法只需要实现`train_generator`和`train_discriminator`。\n\n```python\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        # 训练判别器，使用MMEngine提供的上下文管理器\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            # train_discriminator should be implemented!\n            log_vars = self.train_discriminator(\n                **data, optimizer_wrapper=disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            # update generator, use context manager provided by MMEngine\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    # train_generator should be implemented!\n                    log_vars_gen = self.train_generator(\n                        **data, optimizer_wrapper=gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        # return the log dict\n        return log_vars\n```\n\n在`val_step`和`test_step`，我们渐进地调用数据预处理和`BaseGAN.forward`。\n\n```python\n    def val_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        # call `forward`\n        outputs = self(**data)\n        return outputs\n\n    def test_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        # call `orward`\n        outputs = self(**data)\n        return outputs\n```\n\n然后，我们在`DCGAN`类中实现`train_generator`和`train_discriminator`。\n\n```python\nfrom typing import Dict, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom .base_gan import BaseGAN\n\n\n@MODELS.register_module()\nclass DCGAN(BaseGAN):\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 0. * torch.ones_like(disc_pred_fake))\n        losses_dict['loss_disc_real'] = F.binary_cross_entropy_with_logits(\n            disc_pred_real, 1. * torch.ones_like(disc_pred_real))\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple:\n        losses_dict = dict()\n        losses_dict['loss_gen'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 1. * torch.ones_like(disc_pred_fake))\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(\n            self, inputs, data_sample,\n            optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        real_imgs = inputs['img']\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs, data_sample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        num_batches = inputs['img'].shape[0]\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n```\n\n在实现了`class DCGAN`之后，我们需要更新`mmagic/models/__init__.py`中的模型列表，以便我们可以通过`mmagic.models`导入和使用`class DCGAN`。\n\n### Step 3: 开始训练DCGAN\n\n在实现了网络**Module**和DCGAN的**Model**之后，现在我们可以创建一个新文件`configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py`\n来设置训练DCGAN所需的配置。\n\n在配置文件中，我们需要指定模型的参数，`class DCGAN`，包括生成器网络架构和输入张量的数据预处理器。\n\n```python\n# model settings\nmodel = dict(\n    type='DCGAN',\n    noise_size=100,\n    data_preprocessor=dict(type='GANDataPreprocessor'),\n    generator=dict(type='DCGANGenerator', output_scale=64, base_channels=1024),\n    discriminator=dict(\n        type='DCGANDiscriminator',\n        input_scale=64,\n        output_scale=4,\n        out_channels=1))\n```\n\n我们还需要根据[创建自己的数据加载器](dataset.md)指定训练数据加载器和测试数据加载器。\n最后，我们可以开始训练我们自己的模型:\n\n```python\npython tools/train.py configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\n```\n\n## 参考文献\n\n1. Dong, Chao and Loy, Chen Change and He, Kaiming and Tang, Xiaoou. Image Super-Resolution Using Deep Convolutional Networks\\[J\\]. IEEE transactions on pattern analysis and machine intelligence, 2015.\n\n2. Radford, Alec, Luke Metz, and Soumith Chintala. \"Unsupervised representation learning with deep convolutional generative adversarial networks.\" arXiv preprint arXiv:1511.06434 (2015).\n"
  },
  {
    "path": "docs/zh_cn/howto/transforms.md",
    "content": "# 如何设计自己的数据变换\n\n在本教程中，我们将介绍MMagic中变换流水线的设计。\n\nThe structure of this guide are as follows:\n\n- [如何设计自己的数据变换](#如何设计自己的数据变换)\n  - [MMagic中的数据流水线](#mmagic中的数据流水线)\n    - [数据变换的一个简单示例](#数据变换的一个简单示例)\n    - [BasicVSR的一个示例](#basicvsr的一个示例)\n    - [Pix2Pix的一个示例](#pix2pix的一个示例)\n  - [MMagic中支持的数据变换](#mmagic中支持的数据变换)\n    - [数据加载](#数据加载)\n    - [预处理](#预处理)\n    - [格式化](#格式化)\n  - [扩展和使用自定义流水线](#扩展和使用自定义流水线)\n    - [一个简单的MyTransform示例](#一个简单的mytransform示例)\n    - [一个翻转变换的示例](#一个翻转变换的示例)\n\n## MMagic中的数据流水线\n\n按照典型的惯例，我们使用 `Dataset` 和 `DataLoader` 来加载多个线程的数据。 `Dataset` 返回一个与模型的forward方法的参数相对应的数据项的字典。\n\n数据准备流水线和数据集是分开的。通常，一个数据集定义了如何处理标注，而一个数据管道定义了准备一个数据字典的所有步骤。\n\n一个流水线由一连串的操作组成。每个操作都需要一个字典作为输入，并为下一个变换输出一个字典。\n\n这些操作被分为数据加载、预处理和格式化。\n\n在MMagic中，所有数据变换都继承自 `BaseTransform`。\n变换的输入和输出类型都是字典。\n\n### 数据变换的一个简单示例\n\n```python\n>>> from mmagic.transforms import LoadPairedImageFromFile\n>>> transforms = LoadPairedImageFromFile(\n>>>     key='pair',\n>>>     domain_a='horse',\n>>>     domain_b='zebra',\n>>>     flag='color'),\n>>> data_dict = {'pair_path': './data/pix2pix/facades/train/1.png'}\n>>> data_dict = transforms(data_dict)\n>>> print(data_dict.keys())\ndict_keys(['pair_path', 'pair', 'pair_ori_shape', 'img_mask', 'img_photo', 'img_mask_path', 'img_photo_path', 'img_mask_ori_shape', 'img_photo_ori_shape'])\n```\n\n一般来说，变换流水线的最后一步必须是 `PackInputs`.\n`PackInputs` 将把处理过的数据打包成一个包含两个字段的字典：`inputs` 和 `data_samples`.\n`inputs` 是你想用作模型输入的变量，它可以是 `torch.Tensor` 的类型， `torch.Tensor` 的字典，或者你想要的任何类型。\n`data_samples` 是一个 `DataSample` 的列表. 每个 `DataSample` 都包含真实值和对应输入的必要信息。\n\n### BasicVSR的一个示例\n\n下面是一个BasicVSR的流水线示例。\n\n```python\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='SetValues', dictionary=dict(scale=scale)),\n    dict(type='PairedRandomCrop', gt_patch_size=256),\n    dict(\n        type='Flip',\n        keys=['img', 'gt'],\n        flip_ratio=0.5,\n        direction='horizontal'),\n    dict(\n        type='Flip', keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type='RandomTransposeHW', keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type='MirrorSequence', keys=['img', 'gt']),\n    dict(type='PackInputs')\n]\n\nval_pipeline = [\n    dict(type='GenerateSegmentIndices', interval_list=[1]),\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='PackInputs')\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img', channel_order='rgb'),\n    dict(type='LoadImageFromFile', key='gt', channel_order='rgb'),\n    dict(type='MirrorSequence', keys=['img']),\n    dict(type='PackInputs')\n]\n```\n\n对于每个操作，我们列出了添加/更新/删除的相关字典字段，标记为 '\\*' 的字典字段是可选的。\n\n### Pix2Pix的一个示例\n\n下面是一个在aerial2maps数据集上Pix2Pix训练的流水线示例。\n\n```python\nsource_domain = 'aerial'\ntarget_domain = 'map'\n\npipeline = [\n    dict(\n        type='LoadPairedImageFromFile',\n        io_backend='disk',\n        key='pair',\n        domain_a=domain_a,\n        domain_b=domain_b,\n        flag='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': [f'img_{domain_a}', f'img_{domain_b}']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(\n                type='mmagic.Resize', scale=(286, 286),\n                interpolation='bicubic'),\n            dict(type='mmagic.FixedCrop', crop_size=(256, 256))\n        ]),\n    dict(\n        type='Flip',\n        keys=[f'img_{domain_a}', f'img_{domain_b}'],\n        direction='horizontal'),\n    dict(\n        type='PackInputs',\n        keys=[f'img_{domain_a}', f'img_{domain_b}', 'pair'])\n```\n\n## MMagic中支持的数据变换\n\n### 数据加载\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>LoadImageFromFile</code>\n         </td>\n         <td>\n            - add: img, img_path, img_ori_shape, \\*ori_img\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>RandomLoadResizeBg</code>\n         </td>\n         <td>\n            - add: bg\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>LoadMask</code>\n         </td>\n         <td>\n            - add: mask\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>GetSpatialDiscountMask</code>\n         </td>\n         <td>\n            - add: discount_mask\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n### 预处理\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>Resize</code>\n         </td >\n         <td>\n            - add: scale_factor, keep_ratio, interpolation, backend\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>MATLABLikeResize</code>\n         </td >\n         <td>\n            - add: scale, output_shape\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomRotation</code>\n         </td >\n         <td>\n            - add: degrees\n            - update: specified by <code>keys</code>\n         <td>\n      </tr>\n      <tr>\n         <td>\n            <code>Flip</code>\n         </td >\n         <td>\n            - add: flip, flip_direction\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomAffine</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomJitter</code>\n         </td >\n         <td>\n            - update: fg (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>ColorJitter</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>BinarizeImage</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomMaskDilation</code>\n         </td >\n         <td>\n            - add: img_dilate_kernel_size\n         <td>\n      </tr>\n      <tr>\n         <td>\n            <code>RandomTransposeHW</code>\n         </td >\n         <td>\n            - add: transpose\n      </tr>\n      <tr>\n         <td>\n            <code>RandomDownSampling</code>\n         </td >\n         <td>\n            - update: scale, gt (img), lq (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomBlur</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomResize</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomNoise</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomJPEGCompression</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomVideoCompression</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>DegradationsWithShuffle</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFrameIndices</code>\n         </td >\n         <td>\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFrameIndiceswithPadding</code>\n         </td >\n         <td>\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>TemporalReverse</code>\n         </td >\n         <td>\n            - add: reverse\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateSegmentIndices</code>\n         </td >\n         <td>\n            - add: interval\n            - update: img_path (gt_path, lq_path)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>MirrorSequence</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CopyValues</code>\n         </td >\n         <td>\n            - add: specified by <code>dst_key</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>UnsharpMasking</code>\n         </td >\n         <td>\n            - add: img_unsharp\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>Crop</code>\n         </td >\n         <td>\n            - add: img_crop_bbox, crop_size\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RandomResizedCrop</code>\n         </td >\n         <td>\n            - add: img_crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>FixedCrop</code>\n         </td >\n         <td>\n            - add: crop_size, crop_pos\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>PairedRandomCrop</code>\n         </td >\n         <td>\n            - update: gt (img), lq (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundCenter</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: fg (img), alpha (img), trimap (img), bg (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundUnknown</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropAroundFg</code>\n         </td >\n         <td>\n            - add: crop_bbox\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>ModCrop</code>\n         </td >\n         <td>\n            - update: gt (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>CropLike</code>\n         </td >\n         <td>\n            - update: specified by <code>target_key</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GetMaskedImage</code>\n         </td >\n         <td>\n            - add: masked_img\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateFacialHeatmap</code>\n         </td >\n         <td>\n            - add: heatmap\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>GenerateCoordinateAndCell</code>\n         </td >\n         <td>\n            - add: coord, cell\n            - update: gt (img)\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>Normalize</code>\n         </td >\n         <td>\n            - add: img_norm_cfg\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n      <tr>\n         <td>\n            <code>RescaleToZeroOne</code>\n         </td >\n         <td>\n            - update: specified by <code>keys</code>\n         </td >\n      </tr>\n   </tbody>\n</table>\n\n### 格式化\n\n<table class=\"docutils\">\n   <thead>\n      <tr>\n         <th style=\"text-align:center\">Transform</th>\n         <th style=\"text-align:center\">Modification of Results' keys</th>\n      </tr>\n   </thead>\n   <tbody>\n      <tr>\n         <td>\n            <code>ToTensor</code>\n         </td>\n         <td>\n            update: specified by <code>keys</code>.\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>FormatTrimap</code>\n         </td>\n         <td>\n            - update: trimap\n         </td>\n      </tr>\n      <tr>\n         <td>\n            <code>PackInputs</code>\n         </td>\n         <td>\n            - add: inputs, data_sample\n            - remove: all other keys\n         </td>\n      </tr>\n   </tbody>\n</table>\n\n### Albumentations\n\nMMagic 支持添加 [Albumentations](https://github.com/albumentations-team/albumentations) 库中的 transformation，请浏览 https://albumentations.ai/docs/getting_started/transforms_and_targets 获取更多 transformation 的信息。\n\n使用 Albumentations 的示例如下：\n\n```python\nalbu_transforms = [\n   dict(\n         type='Resize',\n         height=100,\n         width=100,\n   ),\n   dict(\n         type='RandomFog',\n         p=0.5,\n   ),\n   dict(\n         type='RandomRain',\n         p=0.5\n   ),\n   dict(\n         type='RandomSnow',\n         p=0.5,\n   ),\n]\npipeline = [\n   dict(\n         type='LoadImageFromFile',\n         key='img',\n         color_type='color',\n         channel_order='rgb',\n         imdecode_backend='cv2'),\n   dict(\n         type='Albumentations',\n         keys=['img'],\n         transforms=albu_transforms),\n   dict(type='PackInputs')\n]\n```\n\n## 扩展和使用自定义流水线\n\n### 一个简单的MyTransform示例\n\n1. 在文件中写入一个新的流水线，例如在 `my_pipeline.py`中。它接受一个字典作为输入，并返回一个字典。\n\n```python\nimport random\nfrom mmcv.transforms import BaseTransform\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass MyTransform(BaseTransform):\n    \"\"\"Add your transform\n\n    Args:\n        p (float): Probability of shifts. Default 0.5.\n    \"\"\"\n\n    def __init__(self, p=0.5):\n        self.p = p\n\n    def transform(self, results):\n        if random.random() > self.p:\n            results['dummy'] = True\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(p={self.p})')\n\n        return repr_str\n```\n\n2. 在你的配置文件中导入并使用该流水线。\n\n确保导入相对于你的训练脚本所在的位置。\n\n```python\ntrain_pipeline = [\n    ...\n    dict(type='MyTransform', p=0.2),\n    ...\n]\n```\n\n### 一个翻转变换的示例\n\n这里我们以一个简单的翻转变换为例：\n\n```python\nimport random\nimport mmcv\nfrom mmcv.transforms import BaseTransform, TRANSFORMS\n\n@TRANSFORMS.register_module()\nclass MyFlip(BaseTransform):\n    def __init__(self, direction: str):\n        super().__init__()\n        self.direction = direction\n\n    def transform(self, results: dict) -> dict:\n        img = results['img']\n        results['img'] = mmcv.imflip(img, direction=self.direction)\n        return results\n```\n\n因此，我们可以实例化一个 `MyFlip` 对象，用它来处理数据字典。\n\n```python\nimport numpy as np\n\ntransform = MyFlip(direction='horizontal')\ndata_dict = {'img': np.random.rand(224, 224, 3)}\ndata_dict = transform(data_dict)\nprocessed_img = data_dict['img']\n```\n\n或者，我们可以在配置文件的数据流水线中使用 `MyFlip` 变换。\n\n```python\npipeline = [\n    ...\n    dict(type='MyFlip', direction='horizontal'),\n    ...\n]\n```\n\n请注意，如果你想在配置中使用 `MyFlip` ，你必须确保在程序运行过程中导入包含 `MyFlip` 的文件。\n"
  },
  {
    "path": "docs/zh_cn/index.rst",
    "content": "欢迎来到 MMagic 的中文文档！\n=====================================\n\n您可以在页面左下角切换中英文文档。\n\n.. note::\n   目前英文版有更多的内容，欢迎加入我们一起提升中文文档！\n   您可以通过 issue，discussion 或者我们的社区群来联系我们！\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: MMagic 社区\n\n   community/contributing.md\n   community/projects.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 新手入门\n\n   概述 <get_started/overview.md>\n   安装 <get_started/install.md>\n   快速运行 <get_started/quick_run.md>\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 基础教程\n\n   user_guides/config.md\n   user_guides/dataset_prepare.md\n   user_guides/inference.md\n   user_guides/train_test.md\n   user_guides/metrics.md\n   user_guides/visualization.md\n   user_guides/useful_tools.md\n   user_guides/deploy.md\n\n.. toctree::\n   :maxdepth: 2\n   :caption: 进阶教程\n\n   advanced_guides/evaluator.md\n   advanced_guides/structures.md\n   advanced_guides/data_preprocessor.md\n   advanced_guides/data_flow.md\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 开发指南\n\n   howto/models.md\n   howto/dataset.md\n   howto/transforms.md\n   howto/losses.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 常见问题\n\n   faq.md\n\n\n.. toctree::\n   :maxdepth: 2\n   :caption: 模型库\n\n   model_zoo/index.rst\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 数据集库\n\n   dataset_zoo/index.rst\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 变更日志\n\n   changelog.md\n\n\n.. toctree::\n   :maxdepth: 2\n   :caption: 接口文档（英文）\n\n   mmagic/apis.inferencers <autoapi/mmagic/apis/inferencers/index.rst>\n   mmagic/structures <autoapi/mmagic/structures/index.rst>\n   mmagic/datasets <autoapi/mmagic/datasets/index.rst>\n   mmagic/datasets.transforms <autoapi/mmagic/datasets/transforms/index.rst>\n   mmagic/evaluation <autoapi/mmagic/evaluation/index.rst>\n   mmagic/visualization <autoapi/mmagic/visualization/index.rst>\n   mmagic/engine.hooks <autoapi/mmagic/engine/hooks/index.rst>\n   mmagic/engine.logging <autoapi/mmagic/engine/logging/index.rst>\n   mmagic/engine.optimizers <autoapi/mmagic/engine/optimizers/index.rst>\n   mmagic/engine.runner <autoapi/mmagic/engine/runner/index.rst>\n   mmagic/engine.schedulers <autoapi/mmagic/engine/schedulers/index.rst>\n   mmagic/models.archs <autoapi/mmagic/models/archs/index.rst>\n   mmagic/models.base_models <autoapi/mmagic/models/base_models/index.rst>\n   mmagic/models.losses <autoapi/mmagic/models/losses/index.rst>\n   mmagic/models.data_preprocessors <autoapi/mmagic/models/data_preprocessors/index.rst>\n   mmagic/models.utils <autoapi/mmagic/models/losses/utils.rst>\n   mmagic/models.editors <autoapi/mmagic/models/editors/index.rst>\n   mmagic/utils <autoapi/mmagic/utils/index.rst>\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 迁移指南\n\n   migration/overview.md\n   migration/runtime.md\n   migration/models.md\n   migration/eval_test.md\n   migration/schedule.md\n   migration/data.md\n   migration/distributed_train.md\n   migration/optimizers.md\n   migration/visualization.md\n   migration/amp.md\n\n\n.. toctree::\n   :maxdepth: 1\n   :caption: 设备支持\n\n   device/npu_zh.md\n\n\n.. toctree::\n   :caption: 语言切换\n\n   switch_language.md\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search`\n"
  },
  {
    "path": "docs/zh_cn/make.bat",
    "content": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset SOURCEDIR=.\nset BUILDDIR=_build\n\nif \"%1\" == \"\" goto help\n\n%SPHINXBUILD% >NUL 2>NUL\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.http://sphinx-doc.org/\n\texit /b 1\n)\n\n\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\ngoto end\n\n:help\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\n\n:end\npopd\n"
  },
  {
    "path": "docs/zh_cn/migration/amp.md",
    "content": "# 混合精度训练的迁移\n\n在 0.x 版中，MMEditing 并不支持对整体前向过程的混合精度训练。相反，用户必须使用 `auto_fp16` 装饰器来适配特定子模块，然后再将子模块的参数转化成 fp16。这样就可以拥有对模型参数的更细粒度的控制，但是该方法使用起来很繁琐，而且用户需要自己处理一些操作，比如训练过程中损失函数的缩放\n\nMMagic 1.x 版使用了 MMEngine 提供的  `AmpOptimWrapper`，在 `AmpOptimWrapper.update_params` 中，梯度缩放和 `GradScaler` 更新将被自动执行，且在 `optim_context` 上下文管理其中，`auto_cast`被应用到整个前向过程中。\n\n具体来说，0.x 版和 1.x 版之间的差异如下所示：\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x 版 </th>\n    <th> 1.x 版 </th>\n  </tr>\n</thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n# 配置\nrunner = dict(fp16_loss_scaler=dict(init_scale=512))\n```\n\n```python\n# 代码\nimport torch.nn as nn\nfrom mmedit.models.builder import build_model\nfrom mmedit.core.runners.fp16_utils import auto_fp16\n\n\nclass DemoModule(nn.Module):\n    def __init__(self, cfg):\n        self.net = build_model(cfg)\n\n    @auto_fp16\n    def forward(self, x):\n        return self.net(x)\n\nclass DemoModel(nn.Module):\n\n    def __init__(self, cfg):\n        super().__init__(self)\n        self.demo_network = DemoModule(cfg)\n\n    def train_step(self,\n                   data_batch,\n                   optimizer,\n                   ddp_reducer=None,\n                   loss_scaler=None,\n                   use_apex_amp=False,\n                   running_status=None):\n        # 从 data_batch 中获取数据\n        inputs = data_batch['img']\n        output = self.demo_network(inputs)\n\n        optimizer.zero_grad()\n        loss, log_vars = self.get_loss(data_dict_)\n\n        if ddp_reducer is not None:\n            ddp_reducer.prepare_for_backward(_find_tensors(loss_disc))\n\n        if loss_scaler:\n            # 添加 fp16 支持\n            loss_scaler.scale(loss_disc).backward()\n        elif use_apex_amp:\n            from apex import amp\n            with amp.scale_loss(loss_disc, optimizer,\n                    loss_id=0) as scaled_loss_disc:\n                scaled_loss_disc.backward()\n        else:\n            loss_disc.backward()\n\n        if loss_scaler:\n            loss_scaler.unscale_(optimizer)\n            loss_scaler.step(optimizer)\n        else:\n            optimizer.step()\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\n# 配置\noptim_wrapper = dict(\n    constructor='OptimWrapperConstructor',\n    generator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-06),\n        type='AmpOptimWrapper',  # 使用 amp 封装器\n        loss_scale='dynamic'),\n    discriminator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-06),\n        type='AmpOptimWrapper',  # 使用 amp 封装器\n        loss_scale='dynamic'))\n```\n\n```python\n# 代码\nimport torch.nn as nn\nfrom mmagic.registry import MODULES\nfrom mmengine.model import BaseModel\n\n\nclass DemoModule(nn.Module):\n    def __init__(self, cfg):\n        self.net = MODULES.build(cfg)\n\n    def forward(self, x):\n        return self.net(x)\n\nclass DemoModel(BaseModel):\n    def __init__(self, cfg):\n        super().__init__(self)\n        self.demo_network = DemoModule(cfg)\n\n    def train_step(self, data, optim_wrapper):\n        # 从 data_batch 中获取数据\n        data = self.data_preprocessor(data, True)\n        inputs = data['inputs']\n\n        with optim_wrapper.optim_context(self.discriminator):\n            output = self.demo_network(inputs)\n        loss_dict = self.get_loss(output)\n        # 使用 `BaseModel` 提供的 parse_loss\n        loss, log_vars = self.parse_loss(loss_dict)\n        optimizer_wrapper.update_params(loss)\n\n        return log_vars\n```\n\n</td>\n\n</tr>\n</tbody>\n</table>\n\n若要避免用户操作配置文件，MMagic 在 `train.py` 里提供了 `--amp` 选项，其可以让用户在不修改配置文件的情况下启动混合精度训练，用户可以使用以下命令启动混合精度训练：\n\n```bash\nbash tools/dist_train.sh CONFIG GPUS --amp\n\n# 对 slurm 用户\nbash tools/slurm_train.sh PARTITION JOB_NAME CONFIG WORK_DIR --amp\n```\n"
  },
  {
    "path": "docs/zh_cn/migration/data.md",
    "content": "# Data Settings 的迁移\n\n本篇文档负责介绍 data settings 的迁移方式：\n\n- \\[Data Settings 的迁移\\](#Data Settings 的迁移)\n  - [Data Pipelines](#data-pipelines)\n  - [Dataloader](#dataloader)\n\n## Data Pipelines\n\n在 MMagic 1.x 中我们更新了 data pipeline 的设置，有以下几个重要的修改：\n\n- 去除了 `normalization` 和 `color space` 两种数据变换操作，并将它们移动到了 `data_preprocessor` 部分。\n- 原版本中格式化数据变换 pipeline 的 `Collect` 和 `ToTensor` 在新版本中被整合为 `PackInputs`。更多的细节可以在 [数据变换文档](../howto/transforms.md) 中查看。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 原版本 </th>\n    <th> 新版本 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntrain_pipeline = [  # Train pipeline\n    dict(type='LoadImageFromFile',  # 从文件读取图片\n        io_backend='disk',  # io backend\n        key='lq',  # 找到结果对应路径的 keys\n        flag='unchanged'),  # 读取图片的 flag\n    dict(type='LoadImageFromFile',  # 从文件读取图片\n        io_backend='disk',  # io backend\n        key='gt',  # 找到结果对应路径的 keys\n        flag='unchanged'),  # 读取图片的 flag\n    dict(type='RescaleToZeroOne', keys=['lq', 'gt']),  # 将图片从 [0, 255] 缩放到 [0, 1]\n    dict(type='Normalize',  # normalize 图片的 augmentation pipeline\n        keys=['lq', 'gt'],  # 需要 normalized 的图片\n        mean=[0, 0, 0],  # 平均值\n        std=[1, 1, 1],  # 标准差\n        to_rgb=True),  # 是否转换到 rgb 通道\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # PairedRandomCrop\n    dict(type='Flip',  # 翻转图片\n        keys=['lq', 'gt'],  # 需要翻转的图片\n        flip_ratio=0.5,  # 翻转概率\n        direction='horizontal'),  # Flip 方向\n    dict(type='Flip',  # Flip 图片\n        keys=['lq', 'gt'],  # 需要翻转的图片\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip 方向\n    dict(type='RandomTransposeHW',  # 随即对图片的高和宽转置\n        keys=['lq', 'gt'],  # 需要 transpose 的图片\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='Collect',  # Pipeline that decides which keys in the data should be passed to the model\n        keys=['lq', 'gt'],  # Keys to pass to the model\n        meta_keys=['lq_path', 'gt_path']), # Meta information keys. 训练时 meta information 不是必须的\n    dict(type='ToTensor',  # 图片转为 tensor\n        keys=['lq', 'gt'])  # 需要转换为 tensor 的图片\n]\ntest_pipeline = [  # Test pipeline\n    dict(\n        type='LoadImageFromFile',   # 从文件读取图片\n        io_backend='disk',  # io backend\n        key='lq', # 找到结果对应路径的 keys\n        flag='unchanged'),  # flag for reading images\n    dict(\n        type='LoadImageFromFile',   # 从文件读取图片\n        io_backend='disk',  # io backend\n        key='gt', # 找到结果对应路径的 keys\n        flag='unchanged'),  # flag for reading images\n    dict(type='RescaleToZeroOne', keys=['lq', 'gt']),  # 将图片从 [0, 255] 缩放到 [0, 1]\n    dict(\n        type='Normalize',  # 对输入图片执行 normalization 的数据增强 pipeline\n        keys=['lq', 'gt'],  # 需要 normalized 图片\n        mean=[0, 0, 0],  # Mean values\n        std=[1, 1, 1],  # Standard variance\n        to_rgb=True),  # 是否转为 rgb 格式\n    dict(type='Collect',  # Pipeline that decides which keys in the data should be passed to the model\n        keys=['lq', 'gt'],  # Keys to pass to the model\n        meta_keys=['lq_path', 'gt_path']),  # Meta information keys\n    dict(type='ToTensor',  # 图片转为 tensor\n        keys=['lq', 'gt'])  # 需要转换为 tensor 的图片\n]\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ntrain_pipeline = [  # train pipeline\n    dict(type='LoadImageFromFile',  # 从文件读取图片\n        key='img',   # 找到结果对应路径的 keys\n        color_type='color',  # 图片的 color type\n        channel_order='rgb',  # 图片的 channel 顺序\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',  # 从文件读取图片\n        key='gt',   # 找到结果对应路径的 keys\n        color_type='color',  # 图片的 color type\n        channel_order='rgb',  # 图片的 channel 顺序\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # 设置 destination keys\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # PairedRandomCrop\n    dict(type='Flip',  # 翻转图片\n        keys=['lq', 'gt'],  # 需要翻转的图片\n        flip_ratio=0.5,  # Flip ratio\n        direction='horizontal'),  # Flip 方向\n    dict(type='Flip',  # Flip images\n        keys=['lq', 'gt'],  # 需要翻转的图片\n        flip_ratio=0.5,  # Flip ratio\n        direction='vertical'),  # Flip 方向\n    dict(type='RandomTransposeHW',  # 随即对图片的高和宽进行转置\n        keys=['lq', 'gt'], # 需要转置的图片\n        transpose_ratio=0.5  # Transpose ratio\n        ),\n    dict(type='PackInputs')  # 在当前 pipeline 中收集数据的设置\n]\ntest_pipeline = [  # Test pipeline\n    dict(type='LoadImageFromFile',   # 从文件读取图片\n        key='img',   # 找到结果对应路径的 keys\n        color_type='color',  # 图片的 color type\n        channel_order='rgb',  # 图片的 channel order\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='LoadImageFromFile',   # 从文件读取图片\n        key='gt',  # 找到结果对应路径的 keys\n        color_type='color', # 图片的 color type\n        channel_order='rgb',  # 图片的 channel order\n        imdecode_backend='cv2'),  # decode backend\n    dict(type='PackInputs')  # 在当前 pipeline 中收集数据的设置\n]\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n## Dataloader\n\n在 MMagic 1.x 中我们更新了 dataloader 的设置方式，有以下几个重要的修改：\n\n- 原版本中的 `data` 字段分为了 `train_dataloader` ， `val_dataloader` 和 `test_dataloader` 三个独立的部分。这样我们就可以细粒度的对各部分进行配置。例如用户就可以针对训练和测试制定不同的 sampler 和 batch size 。\n- `samples_per_gpu` 更名为 `batch_size` 。\n- `workers_per_gpu` 更名为 `num_workers` 。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 原版本 </th>\n    <th> 新版本 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ndata = dict(\n    # train\n    samples_per_gpu=16,  # 每个 GPU 上的 batch_size\n    workers_per_gpu=4,  # 每个 GPU 上做 pre-fetch 的 worker 数\n    drop_last=True,  # 在 data_loader 中使用 drop_last\n    train=dict(  # Train dataset 配置\n        type='RepeatDataset',  # 对 iter-based 模型设置为 RepeatDataset\n        times=1000,  # RepeatDataset 的 repeated times 参数\n        dataset=dict(\n            type=train_dataset_type,  # 数据集类型\n            lq_folder='data/DIV2K/DIV2K_train_LR_bicubic/X2_sub',  # lq 的文件路径\n            gt_folder='data/DIV2K/DIV2K_train_HR_sub',  # ground truth 的文件路径\n            ann_file='data/DIV2K/meta_info_DIV2K800sub_GT.txt',  # 标注文件的路径\n            pipeline=train_pipeline,  # 参照 train_pipeline\n            scale=scale)),  # Upsampling 的 scale factor\n    # validation\n    val_samples_per_gpu=1,  # validation 时每个 GPU 上的 batch_size\n    val_workers_per_gpu=4,  # validation 是每个 GPU 上做 pre-fetch 的 worker 数\n    val=dict(\n        type=val_dataset_type,  # 数据集类型\n        lq_folder='data/val_set5/Set5_bicLRx2',  # lq 的文件路径\n        gt_folder='data/val_set5/Set5_mod12',  # ground truth 的文件路径\n        pipeline=test_pipeline,  # 参照 test_pipeline\n        scale=scale,  # Upsampling 的 scale factor\n        filename_tmpl='{}'),  # filename 模板\n    # test\n    test=dict(\n        type=val_dataset_type,  # 数据集类型\n        lq_folder='data/val_set5/Set5_bicLRx2', # lq 的文件路径\n        gt_folder='data/val_set5/Set5_mod12',  # ground truth 的文件路径\n        pipeline=test_pipeline,  # 参照 test_pipeline\n        scale=scale,  # Upsampling 的 scale factor\n        filename_tmpl='{}'),  # filename 模板\n)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ndataset_type = 'BasicImageDataset'  # 数据集类型\ndata_root = 'data'  # 数据集根目录\ntrain_dataloader = dict(\n    batch_size=16,\n    num_workers=4,  # 每个 GPU 上做 pre-fetch 的 worker 数\n    persistent_workers=False,  # 是否保持 workers instance 存活\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # data sampler 类型\n    dataset=dict(  # 训练数据集 config\n        type=dataset_type,  # 数据集类型\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # 标注文件路径\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # 数据根目录\n        data_prefix=dict(  # 图像文件前缀\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # Filename 模板\n        pipeline=train_pipeline))\nval_dataloader = dict(\n    batch_size=1,\n    num_workers=4,  # 每个 GPU 上做 pre-fetch 的 worker 数\n    persistent_workers=False,  # 是否保持 workers instance 存活\n    drop_last=False,  # 是否丢弃最后未完成的 batch\n    sampler=dict(type='DefaultSampler', shuffle=False),  # data sampler 类型\n    dataset=dict(  # Validation 数据集设置\n        type=dataset_type,  # 数据集类型\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # 数据根目录\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # 图像文件前缀\n        pipeline=test_pipeline))\ntest_dataloader = val_dataloader\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/zh_cn/migration/distributed_train.md",
    "content": "# 分布式训练的迁移\n\n我们已经将[MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x)合并至MMagic。以下是针对MMGeneration中分布式训练的迁移事项。\n\n在0.x版中，MMGeneration使用`DDPWrapper`和`DynamicRunner`来训练对应的静态和动态模型（例如PGGAN和StyleGANv2），但在1.x 版中，我们使用MMEngine提供的`MMSeparateDistributedDataParallel`来实现分布式训练。\n\n如下是配置前后对比：\n\n<table class=\"docutils\">\n    <thead>\n      <tr>\n        <th> 0.x版中的静态模型 </th>\n        <th> 1.x版中的静态模型 </th>\n      </tr>\n    </thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\n# 使用DDPWrapper\nuse_ddp_wrapper = True\nfind_unused_parameters = False\n\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=False)\n```\n\n</td>\n<td valign=\"top\">\n\n```python\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=False)\n```\n\n</td>\n</tr>\n</tbody>\n</table>\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x版中的动态模型 </th>\n    <th> 1.x版中的动态模型 </th>\n  </tr>\n</thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nuse_ddp_wrapper = False\nfind_unused_parameters = False\n\n# 使用DynamicRunner\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel_wrapper_cfg = dict(\n    type='MMSeparateDistributedDataParallel',\n    broadcast_buffers=False,\n    find_unused_parameters=True) # 针对动态模型，设置`find_unused_parameters`标志为True\n```\n\n</td>\n\n</tr>\n</tbody>\n</table>\n"
  },
  {
    "path": "docs/zh_cn/migration/eval_test.md",
    "content": "# 评估与测试设置的迁移\n\n我们更新了 MMagic 1.x 中的评估设置，重要修改如下：\n\n- 评估字段被分为 `val_evaluator` 和 `test_evaluator` ， `interval` 被移动到 `train_cfg.val_interval` 。\n- 评估指标从 `test_cfg` 移至 `val_evaluator` 和 `test_evaluator`\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 原评估配置 </th>\n    <th> 新评估配置 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntrain_cfg = None  # 训练配置字典变量设为 None\ntest_cfg = dict(  # 测试配置字典变量\n    metrics=['PSNR'],  # 测试期间使用的指标 PSNR （峰值信噪比）\n    crop_border=scale)  # 评估期间裁剪边框\n\nevaluation = dict(  # 构建评估钩子的配置字典变量\n    interval=5000,  # 评价间隔\n    save_image=True,  # 评估期间保存图像\n    gpu_collect=True)  # 使用 GPU 收集\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nval_evaluator = [\n    dict(type='PSNR', crop_border=scale),  # 要评估的指标名称\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # 训练循环类型配置\nval_cfg = dict(type='ValLoop')  # 验证循环类型的名称\ntest_cfg = dict(type='TestLoop')  # 测试循环类型的名称\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n我们已将[MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x)合并到 MMagic 中.\n这里是关于 MMGeneration 的评估和测试设置的迁移。\n\n评估字段分为 `val_evaluator` 和 `test_evaluator` ，并且评估字段不再支持 `interval` 和 `save_best` 参数。\n\n- `interval` 移至 `train_cfg.val_interval`，请参阅[调度设置](./schedule.md)。\n- `save_best` 移至 `default_hooks.checkpoint.save_best`。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x 版本 </th>\n    <th> 1.x 新版本 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nevaluation = dict(\n    type='GenerativeEvalHook',\n    interval=10000,\n    metrics=[\n        dict(\n            type='FID',\n            num_images=50000,\n            bgr2rgb=True,\n            inception_args=dict(type='StyleGAN')),\n        dict(type='IS', num_images=50000)\n    ],\n    best_metric=['fid', 'is'],\n    sample_kwargs=dict(sample_model='ema'))\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nval_evaluator = dict(\n    type='Evaluator',\n    metrics=[\n        dict(\n            type='FID',\n            prefix='FID-Full-50k',\n            fake_nums=50000,\n            inception_style='StyleGAN',\n            sample_model='orig'),\n        dict(\n            type='IS',\n            prefix='IS-50k',\n            fake_nums=50000)])\n# 设置最佳配置\ndefault_hooks = dict(\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        less_keys=['FID-Full-50k/fid'],\n        greater_keys=['IS-50k/is'],\n        save_optimizer=True,\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n        rule=['less', 'greater']))\ntest_evaluator = val_evaluator\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n为了正确评估和测试模型，我们需要在 `val_cfg` 和 `test_cfg` 中设置特定的循环。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x 版本中的静态模型 </th>\n    <th> 1.x 版本中的静态模型 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ntotal_iters = 1000000\n\nrunner = dict(\n    type='DynamicIterBasedRunner',\n    is_dynamic_ddp=False,\n    pass_training_status=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ntrain_cfg = dict(\n    by_epoch=False,  # 使用基于迭代的训练\n    max_iters=1000000,  # 最大训练迭代次数\n    val_begin=1,\n    val_interval=10000)  # 评价间隔\nval_cfg = dict(type='MultiValLoop')  # 验证中的特定循环\ntest_cfg = dict(type='MultiTestLoop')  # 测试中的特定循环\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/zh_cn/migration/models.md",
    "content": "# 模型的迁移\n\n我们在 MMagic 1.x. 版本更新了模型设定，其中重要的改动如下所示：\n\n- 删除 `pretrained` 字段.\n- 在模型设定中添加 `train_cfg` 和 `test_cfg` 字段.\n- 添加 `data_preprocessor` 字段. 这里主要是将归一化和颜色空间转换操作从 `dataset transform` 流程中移动到 `data_preprocessor` 中. 我们接下来会介绍`data_preprocessor`.\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BasicRestorer',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSR',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pretrained=None,\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'))  # Config for pixel loss model training and testing settings\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BaseEditModel',  # Name of the model\n    generator=dict(  # Config of the generator\n        type='EDSRNet',  # Type of the generator\n        in_channels=3,  # Channel number of inputs\n        out_channels=3,  # Channel number of outputs\n        mid_channels=64,  # Channel number of intermediate features\n        num_blocks=16,  # Block number in the trunk network\n        upscale_factor=scale, # Upsampling factor\n        res_scale=1,  # Used to scale the residual in residual block\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # Image mean in RGB orders\n        rgb_std=(1.0, 1.0, 1.0)),  # Image std in RGB orders\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')  # Config for pixel loss\n    train_cfg=dict(),  # Config of training model.\n    test_cfg=dict(),  # Config of testing model.\n    data_preprocessor=dict(  # The Config to build data preprocessor\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255.,\n                                                             255.]))\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n我们在 MMagic 1.x. 版本中对模型进行了重构，其中重要的改动如下所示：\n\n- MMagic 1.x 中的 `models` 被重构为六个部分：`archs`、`base_models`、`data_preprocessors`、`editors`、`diffusion_schedulers` 和 `losses`.\n\n- 在 `models` 中添加了 `data_preprocessor` 模块。这里主要是将归一化和颜色空间转换操作从 `dataset transform` 流程中移动到 `data_preprocessor` 中.此时，数据流经过数据预处理后，会先经过 `data_preprocessor` 模块的转换，然后再输入到模型中.\n\n模型的更多详细信息请参见[模型指南](../howto/models.md).\n"
  },
  {
    "path": "docs/zh_cn/migration/optimizers.md",
    "content": "# 优化器的迁移\n\n我们已经将[MMGeneration 1.x](https://github.com/open-mmlab/mmgeneration/tree/1.x)合并至MMagic。以下是针对MMGeneration中优化器的迁移事项。\n\n在0.x版中，MMGeneration使用PyTorch自带的优化器，其只提供了通用参数优化，而在1.x版中，我们则使用了MMEngine提供的`OptimizerWrapper`。\n\n对比PyTorch自带的`Optimizer`，`OptimizerWrapper`可以支持如下功能：\n\n- `OptimizerWrapper.update_params`在一个单一的函数中就实现了`zero_grad`，`backward`和`step`\n- 支持梯度自动累积\n- 提供一个名为`OptimizerWrapper.optim_context`的上下文管理器来封装前向进程，`optim_context`会根据当前更新迭代数目来自动调用`torch.no_sync`，在AMP(Auto Mixed Precision)训练中，`autocast`也会在`optim_context`中被调用。\n\n对GAN模型，生成器和鉴别器采用不同的优化器和训练策略。要使GAN模型的`train_step`函数签名和其它模型的保持一致，我们使用从`OptimizerWrapper`继承下来的`OptimWrapperDict`来封装生成器和鉴别器的优化器，为了便于该流程的自动化MMagic实现了`MultiOptimWrapperContructor`构造器。如你想训练GAN模型，那么应该在你的配置中指定该构造器。\n\n如下是0.x版和1.x版的配置对比\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x版 </th>\n    <th> 1.x版 </th>\n  </tr>\n</thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\noptimizer = dict(\n    generator=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6),\n    discriminator=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6))\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n```\n\n</td>\n\n</tr>\n</tbody>\n\n</table>\n\n> 注意，在1.x版中，MMGeneration使用`OptimWrapper`来实现梯度累加，这就会导致在0.x版和1.x版之间，`discriminator_steps`配置（用于在多次更新鉴别器之后更新一次生成器的训练技巧）与梯度累加均出现不一致问题。\n\n- 在0.x版中，我们在配置里使用`disc_steps`，`gen_steps`和`batch_accumulation_steps` 。`disc_steps`和`batch_accumulation_steps`会根据`train_step`的调用次数来进行统计（亦即dataloader中数据的读取次数）。因此鉴别器的一段连续性更新次数为`disc_steps // batch_accumulation_steps`。且对于生成器，`gen_steps`是生成器实际的一段连续性更新次数\n- 但在1.x版中，我们在配置里则使用了`discriminator_steps`，`generator_steps` 和`accumulative_counts`。`discriminator_steps`和`generator_steps`指的是自身在更新其它模型之前的一段连续性的更新次数\n  以BigGAN-128配置为例。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x版 </th>\n    <th> 1.x版 </th>\n  </tr>\n</thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BasiccGAN',\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True),\n    gan_loss=dict(type='GANLoss', gan_type='hinge'))\n\n# 连续性更新鉴别器`disc_steps // batch_accumulation_steps = 8 // 8 = 1`次\n# 连续性更新生成器`gen_steps = 1`次\n# 生成器与鉴别器在每次更新之前执行`batch_accumulation_steps = 8`次梯度累加\ntrain_cfg = dict(\n    disc_steps=8, gen_steps=1, batch_accumulation_steps=8, use_ema=True)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        init_type='ortho',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True),\n    # 连续性更新鉴别器`discriminator_steps = 1`次\n    # 连续性更新生成器`generator_steps = 1`次\n    generator_steps=1,\n    discriminator_steps=1)\n\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        # 生成器在每次更新之前执行`accumulative_counts = 8`次梯度累加\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        # 鉴别器在每次更新之前执行`accumulative_counts = 8`次梯度累加\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n```\n\n</td>\n\n</tr>\n</tbody>\n\n</table>\n"
  },
  {
    "path": "docs/zh_cn/migration/overview.md",
    "content": "# 概览\n\n本节将从以下几个方面介绍如何从 MMEditing 0.x 迁移至 MMagic 1.x：\n\n- [概览](#概览)\n  - [新依赖项](#新依赖项)\n  - [总体结构](#总体结构)\n  - [其他配置设置](#其他配置设置)\n\n## 新依赖项\n\nMMagic 1.x 依赖于一些新的包，您可以按照[安装教程](../get_started/install.md)准备一个新的干净环境并重新安装。\n\n## 总体结构\n\n我们在 MMagic 1.x 中对总体结构进行了重构，具体如下：\n\n- 旧版本 MMEdit 中的 `core` 被拆分为 `engine`、`evaluation`、`structures` 和 `visualization`\n- 旧版本 MMEdit 中 `datasets` 的 `pipelines` 被重构为 `transforms`\n- MMagic 1.x 中的 `models` 被重构为六个部分：`archs`、`base_models`、`data_preprocessors`、`editors`、`diffusion_schedulers` 和 `losses`。\n\n## 其他配置设置\n\n我们将配置文件重命名为新模板：`{model_settings}_{module_setting}_{training_setting}_{datasets_info}`。\n\n更多配置细节请参见[配置指南](../user_guides/config.md)。\n"
  },
  {
    "path": "docs/zh_cn/migration/runtime.md",
    "content": "# 运行设置的迁移\n\n我们更新了 MMagic 1.x 中的运行设置，重要修改如下：\n\n- `checkpoint_config` 被移动到 `default_hooks.checkpoint`，`log_config` 被移动到 `default_hooks.logger`。 我们将许多 hooks 设置从脚本代码移动到运行配置的 `default_hooks` 字段中。\n- `resume_from` 被移除，使用 `resume` 替代它。\n  - 如果 resume=True 并且 load_from 不是 None, 则从load_from中的检查点恢复训练。\n  - 如果 resume=True 且 load_from 为 None，则尝试从工作目录中的最新检查点恢复。\n  - 如果 resume=False 且 load_from 不为None，则仅加载检查点，不恢复训练。\n  - 如果 resume=False 且 load_from 为 None，则不加载也不恢复。\n- `dist_params` 字段现在是 `env_cfg` 的一个子字段。 并且在 `env_cfg` 还有一些新的配置。\n- `workflow` 相关功能已被删除。\n- 新字段 `visualizer`: 可视化工具是一个新设计。在 runner 中使用可视化器实例来处理结果和日志可视化并保存到不同的后端，例如 Local、TensorBoard 和 Wandb。\n- 新字段 `default_scope`: 所有注册器搜索 module 的起点。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 原始配置 </th>\n    <th> 新的配置 </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\ncheckpoint_config = dict(  # 设置检查点 hook 的配置, 参考 https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py 完成的\n    interval=5000,  # 保存间隔为 5000 次迭代\n    save_optimizer=True,  # 也保存优化器\n    by_epoch=False)  # 通过 iterations 计数\nlog_config = dict(  # 注册日志 hook 的配置\n    interval=100,  # 打印日志的间隔\n    hooks=[\n        dict(type='TextLoggerHook', by_epoch=False),  # logger 用来记录训练过程\n        dict(type='TensorboardLoggerHook'),  # 也支持 Tensorboard logger\n    ])\nvisual_config = None  # 可视化配置，我们不使用它。\n# runtime settings\ndist_params = dict(backend='nccl')  # 设置分布式训练的参数，还可以设置端口\nlog_level = 'INFO'  # 日志等级\nload_from = None # 从指定路径加载预训练模型，这不会恢复训练\nresume_from = None # 从给定路径恢复检查点，训练将从保存检查点的epoch开始恢复\nworkflow = [('train', 1)]  # Runner 的工作流程. [('train', 1)] 意味着只有一个工作流，并且名为“train”的工作流执行一次。 在训练当前的抠图模型时，请保持此项不变\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\ndefault_hooks = dict(  # 用来创建默认 hooks\n    checkpoint=dict(  # 设置 checkpoint hook 的配置\n        type='CheckpointHook',\n        interval=5000,  # 保存间隔为5000次迭代\n        save_optimizer=True,\n        by_epoch=False,  # 通过 iterations 计数\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # 注册 logger hook 的配置\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\ndefault_scope = 'mmedit' # 用来设置注册位置\nenv_cfg = dict(  # 设置分布式训练的参数，还可以设置端口\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\nlog_level = 'INFO'  # 日志等级\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # 用来创建日志处理器\nload_from = None  # 从指定路径加载预训练模型，这不会恢复训练\nresume = False  # 从给定路径恢复检查点，训练将从保存检查点的epoch开始恢复\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n"
  },
  {
    "path": "docs/zh_cn/migration/schedule.md",
    "content": "# 调度器的迁移\n\n我们更新了MMagic 1.x 中的调度器设置，重要修改如下:\n\n- 现在我们使用 `optim_wrapper` 字段来指定关于优化过程的所有配置。`optimizer` 字段现在是 `optim_wrapper` 的一个子字段。\n- `lr_config` 字段被移除，我们使用新的 `param_scheduler` 来代替它。\n- `total_iters` 字段已移至 `train_cfg`，作为 `max_iters`, `val_cfg` 和 `test_cfg`，用于配置训练、验证和测试中的循环。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> Original </th>\n    <th> New </th>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\noptimizers = dict(generator=dict(type='Adam', lr=1e-4, betas=(0.9, 0.999)))   # 用于构建优化器的配置，支持 PyTorch 中的所有优化器，其参数与 PyTorch 中的参数相同。\ntotal_iters = 300000 # 总训练迭代次数\nlr_config = dict( # 用于注册 LrUpdater hook 的学习率调度器配置\n    policy='Step', by_epoch=False, step=[200000], gamma=0.5)  # 调度器的策略\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=1e-4),\n    )\n)  # 用于构建优化器的配置，支持 PyTorch 中的所有优化器，其参数与 PyTorch 中的参数相同。\nparam_scheduler = dict(  # 学习策略的配置\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)  # 调度器的策略\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # 训练循环类型的配置\nval_cfg = dict(type='ValLoop')  # 验证循环类型的名称\ntest_cfg = dict(type='TestLoop')  # 测试循环类型的名称\n```\n\n</td>\n\n</tr>\n</thead>\n</table>\n\n> 有关调度器设置的更多详细信息可在 [MMEngine Documents](https://github.com/open-mmlab/mmengine/blob/main/docs/en/migration/param_scheduler.md) 中找到。\n"
  },
  {
    "path": "docs/zh_cn/migration/visualization.md",
    "content": "# 可视化的迁移\n\n在0.x版中，MMEditing使用`VisualizationHook`来对训练过程中生成的结果进行可视化，在1.x版中，我们将该功能整合到`BasicVisualizationHook` / `VisualizationHook`中，而且遵循MMEngine的设计，我们实现了`ConcatImageVisualizer` / `Visualizer`和一系列`VisBackend`来绘制和保存可视化结果。\n\n<table class=\"docutils\">\n<thead>\n  <tr>\n    <th> 0.x版 </th>\n    <th> 1.x版 </th>\n  </tr>\n</thead>\n<tbody>\n<tr>\n<td valign=\"top\">\n\n```python\nvisual_config = dict(\n    type='VisualizationHook',\n    output_dir='visual',\n    interval=1000,\n    res_name_list=['gt_img', 'masked_img', 'fake_res', 'fake_img'],\n)\n```\n\n</td>\n\n<td valign=\"top\">\n\n```python\nvis_backends = [dict(type='LocalVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n</td>\n\n</tr>\n</tbody>\n</table>\n\n要了解更多关于可视化的功能，请参阅[这个教程](../user_guides/visualization.md)。\n"
  },
  {
    "path": "docs/zh_cn/stat.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\nimport functools as func\nimport glob\nimport re\nfrom os.path import basename, splitext\n\nimport numpy as np\nimport titlecase\n\n\ndef anchor(name):\n    return re.sub(r'-+', '-',\n                  re.sub(r'[^a-zA-Z0-9\\+]', '-',\n                         name.strip().lower())).strip('-')\n\n\n# Count algorithms\n\nfiles = sorted(glob.glob('*_models.md'))\n# files = sorted(glob.glob('docs/*_models.md'))\n\nstats = []\n\nfor f in files:\n    with open(f, 'r') as content_file:\n        content = content_file.read()\n\n    # title\n    title = content.split('\\n')[0].replace('#', '')\n\n    # count papers\n    papers = set(\n        (papertype,\n         titlecase.titlecase(paper.lower().strip()).replace('+', r'\\+'))\n        for (papertype, paper) in re.findall(\n            r'<!--\\s*\\[([A-Z]*?)\\]\\s*-->\\s*\\n.*?\\btitle\\s*=\\s*{(.*?)}',\n            content, re.DOTALL))\n    # paper links\n    revcontent = '\\n'.join(list(reversed(content.splitlines())))\n    paperlinks = {}\n    for _, p in papers:\n        print(p)\n        paperlinks[p] = ' '.join(\n            (f'[⇨]({splitext(basename(f))[0]}.html#{anchor(paperlink)})'\n             for paperlink in re.findall(\n                 rf'\\btitle\\s*=\\s*{{\\s*{p}\\s*}}.*?\\n## (.*?)\\s*[,;]?\\s*\\n',\n                 revcontent, re.DOTALL | re.IGNORECASE)))\n        print('   ', paperlinks[p])\n    paperlist = '\\n'.join(\n        sorted(f'    - [{t}] {x} ({paperlinks[x]})' for t, x in papers))\n    # count configs\n    configs = set(x.lower().strip()\n                  for x in re.findall(r'https.*configs/.*\\.py', content))\n\n    # count ckpts\n    ckpts = set(x.lower().strip()\n                for x in re.findall(r'https://download.*\\.pth', content)\n                if 'mmedit' in x)\n\n    statsmsg = f\"\"\"\n## [{title}]({f})\n\n* 模型权重文件数量: {len(ckpts)}\n* 配置文件数量: {len(configs)}\n* 论文数量: {len(papers)}\n{paperlist}\n\n    \"\"\"\n\n    stats.append((papers, configs, ckpts, statsmsg))\n\nallpapers = func.reduce(lambda a, b: a.union(b), [p for p, _, _, _ in stats])\nallconfigs = func.reduce(lambda a, b: a.union(b), [c for _, c, _, _ in stats])\nallckpts = func.reduce(lambda a, b: a.union(b), [c for _, _, c, _ in stats])\n\n# Summarize\n\nmsglist = '\\n'.join(x for _, _, _, x in stats)\npapertypes, papercounts = np.unique([t for t, _ in allpapers],\n                                    return_counts=True)\ncountstr = '\\n'.join(\n    [f'   - {t}: {c}' for t, c in zip(papertypes, papercounts)])\n\nmodelzoo = f\"\"\"\n# 总览\n\n* 模型权重文件数量: {len(allckpts)}\n* 配置文件数量: {len(allconfigs)}\n* 论文数量: {len(allpapers)}\n{countstr}\n\n有关支持的数据集，请参阅 [数据集总览](datasets.md)。\n\n{msglist}\n\n\"\"\"\n\nwith open('modelzoo.md', 'w') as f:\n    f.write(modelzoo)\n\n# Count datasets\n\nfiles = sorted(glob.glob('*_datasets.md'))\n\ndatastats = []\n\nfor f in files:\n    with open(f, 'r') as content_file:\n        content = content_file.read()\n\n    # title\n    title = content.split('\\n')[0].replace('#', '')\n\n    # count papers\n    papers = set(\n        (papertype,\n         titlecase.titlecase(paper.lower().strip()).replace('+', r'\\+'))\n        for (papertype, paper) in re.findall(\n            r'<!--\\s*\\[([A-Z]*?)\\]\\s*-->\\s*\\n.*?\\btitle\\s*=\\s*{(.*?)}',\n            content, re.DOTALL))\n    # paper links\n    revcontent = '\\n'.join(list(reversed(content.splitlines())))\n    paperlinks = {}\n    for _, p in papers:\n        print(p)\n        paperlinks[p] = ', '.join(\n            (f'[{p} ⇨]({splitext(basename(f))[0]}.html#{anchor(p)})'\n             for p in re.findall(\n                 rf'\\btitle\\s*=\\s*{{\\s*{p}\\s*}}.*?\\n## (.*?)\\s*[,;]?\\s*\\n',\n                 revcontent, re.DOTALL | re.IGNORECASE)))\n        print('   ', paperlinks[p])\n    paperlist = '\\n'.join(\n        sorted(f'    - [{t}] {x} ({paperlinks[x]})' for t, x in papers))\n    # count configs\n    configs = set(x.lower().strip()\n                  for x in re.findall(r'https.*configs/.*\\.py', content))\n\n    # count ckpts\n    ckpts = set(x.lower().strip()\n                for x in re.findall(r'https://download.*\\.pth', content)\n                if 'mmedit' in x)\n\n    statsmsg = f\"\"\"\n## [{title}]({f})\n\n* 论文数量: {len(papers)}\n{paperlist}\n\n    \"\"\"\n\n    datastats.append((papers, configs, ckpts, statsmsg))\n\nalldatapapers = func.reduce(lambda a, b: a.union(b),\n                            [p for p, _, _, _ in datastats])\n\n# Summarize\n\nmsglist = '\\n'.join(x for _, _, _, x in stats)\ndatamsglist = '\\n'.join(x for _, _, _, x in datastats)\npapertypes, papercounts = np.unique([t for t, _ in alldatapapers],\n                                    return_counts=True)\ncountstr = '\\n'.join(\n    [f'   - {t}: {c}' for t, c in zip(papertypes, papercounts)])\n\nmodelzoo = f\"\"\"\n# 总览\n\n* 论文数量: {len(alldatapapers)}\n{countstr}\n\n有关支持的算法, 可参见 [模型总览](modelzoo.md).\n\n{datamsglist}\n\"\"\"\n\nwith open('datasets.md', 'w') as f:\n    f.write(modelzoo)\n"
  },
  {
    "path": "docs/zh_cn/switch_language.md",
    "content": "## <a href='https://mmagic.readthedocs.io/en/latest/'>English</a>\n\n## <a href='https://mmagic.readthedocs.io/zh_CN/latest/'>简体中文</a>\n"
  },
  {
    "path": "docs/zh_cn/user_guides/config.md",
    "content": "# 教程1 了解MMagic的配置文件\n\n我们在我们的配置系统中采用了模块化和继承设计，方便进行各种实验。\n如果您希望查看配置文件，您可以运行 `python tools/misc/print_config.py /PATH/TO/CONFIG` 来查看完整的配置。\n\n您可以根据以下教程了解我们配置系统的使用方法。\n\n- [教程1：了解MMagic中的配置](#教程1-了解MMagic的配置文件)\n  - [通过脚本参数修改配置](#通过脚本参数修改配置)\n  - [配置文件结构](#配置文件结构)\n  - [配置文件命名风格](#配置文件命名风格)\n  - [EDSR的示例](#EDSR的示例)\n    - [模型配置](#模型配置)\n    - [数据配置](#数据配置)\n      - [数据流程](#数据流程)\n      - [数据加载器](#数据加载器)\n    - [评估配置](#评估配置)\n    - [训练和测试配置](#训练和测试配置)\n    - [优化配置](#优化配置)\n    - [钩子配置](#钩子配置)\n    - [运行时配置](#运行时配置)\n  - [StyleGAN2的示例](#StyleGAN2的示例)\n    - [模型配置](#模型配置)\n    - [数据集和评估器配置](#数据集和评估器配置)\n    - [训练和测试配置](#训练和测试配置-1)\n    - [优化配置](#优化配置-1)\n    - [钩子配置](#钩子配置-1)\n    - [运行时配置](#运行时配置-1)\n  - [其他示例](#其他示例)\n    - [修复任务的配置示例](#修复任务的配置示例)\n    - [抠图任务的配置示例](#抠图任务的配置示例)\n    - [恢复任务的配置示例](#恢复任务的配置示例)\n\n## 通过脚本参数修改配置\n\n使用 `tools/train.py`或 `tools/test.py` 来运行时，您可以通过指定 `--cfg-options` 来临时修改配置。\n\n- 更新字典链中的配置键\n\n  可以按照原始配置中字典键的顺序指定配置选项。例如，`--cfg-options test_cfg.use_ema=False`\n  将默认的采样模型更改为原始生成器，`--cfg-options train_dataloader.batch_size=8` 将训练数据加载器的批大小更改为8。\n\n- 更新配置列表中的键\n\n  您的配置中有些配置字典是作为列表组成的。例如，训练流程 `train_dataloader.dataset.pipeline`\n  通常是一个列表，例如 `[dict(type='LoadImageFromFile'), ...]`。如果您想要在流程中将 `'LoadImageFromFile'`\n  更改为 `'LoadImageFromWebcam'`，可以指定 `--cfg-options train_dataloader.dataset.pipeline.0.type=LoadImageFromWebcam`\n  。训练流程 `train_pipeline` 通常也是一个列表，例如 `[dict(type='LoadImageFromFile'), ...]`\n  。如果您想要将 `'LoadImageFromFile'` 更改为 `'LoadMask'`，可以指定 `--cfg-options train_pipeline.0.type=LoadMask`。\n\n- 更新列表/元组的值\n\n  如果要更新的值是列表或元组，您可以设置 `--cfg-options key=\"[a,b]\"` 或 `--cfg-options key=a,b`\n  。它还允许嵌套的列表/元组值，例如 `--cfg-options key=\"[(a,b),(c,d)]\"`。请注意，为了支持列表/元组数据类型，引号 `\"`\n  是必需的，并且在指定的值内引号之间不允许有空格。\n\n## 配置文件结构\n\n在`config/_base_`\n目录下有三种基本组件类型：数据集（datasets）、模型（models）和默认运行时（default_runtime）。许多方法都可以通过使用其中的每种组件之一进行简单构建，例如AOT-GAN、EDVR、GLEAN、StyleGAN2、CycleGAN、SinGAN等。由`_base_`\n组件组成的配置被称为原始配置。\n\n对于同一文件夹下的所有配置文件，建议只有**一个**原始配置。所有其他配置文件都应该继承自原始配置。同时，最大的继承层级为3。\n\n为了便于理解，我们建议贡献者从现有方法中继承。例如，如果基于BasicVSR进行了某些修改，用户可以通过在配置文件中指定`_base_ = ../basicvsr/basicvsr_reds4.py`\n来首先继承基本的BasicVSR结构，然后修改配置文件中的必要字段。如果基于StyleGAN2进行了某些修改，用户可以通过在配置文件中指定`_base_ = ../styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py`\n来首先继承基本的StyleGAN2结构，然后修改配置文件中的必要字段。\n\n如果您正在构建一种完全不与任何现有方法共享结构的全新方法，您可以在`configs`目录下创建一个名为`xxx`的文件夹。\n\n详细的文档请参考[MMEngine](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md)。\n\n## 配置文件命名风格\n\n配置文件按照下面的风格命名。我们建议社区贡献者使用同样的风格。\n\n```\n{model}_[module setting]_{training schedule}_{dataset}\n```\n\n`{xxx}` 是必填字段，`[yyy]` 是可选字段。\n\n- `{model}`：模型类型，如 `stylegan`、`dcgan`、`basicvsr`、`dim`\n  等。原始论文中提到的设置也包含在此字段中（例如 `Stylegan2-config-f`、`edvrm` 的 `edvrm_8xb4-600k_reds`）。\n- `[module setting]`：某些模块的具体设置，包括 Encoder、Decoder、Generator、Discriminator、Normalization、loss、Activation\n  等。例如 `c64n7` 的 `basicvsr-pp_c64n7_8xb1-600k_reds4`，dcgan 的学习率 `Glr4e-4_Dlr1e-4`，stylegan3 的 `gamma32.8`，sagan\n  中的 `woReLUInplace`。在这个部分，来自不同子模块（例如 generator 和 discriminator）的信息用 `_` 连接起来。\n- `{training_scheduler}`：训练的特定设置，包括批量大小、训练计划等。例如，学习率（例如 `lr1e-3`），使用的 GPU\n  数量和批量大小（例如 `8xb32`），总迭代次数（例如 `160kiter`）或在 discriminator 中显示的图像数量（例如 `12Mimgs`）。\n- `{dataset}`：数据集名称和数据大小信息，例如 `deepfillv1_4xb4_celeba-256x256` 的 `celeba-256x256`，`basicvsr_2xb4_reds4`\n  的 `reds4`，`ffhq`，`lsun-car`，`celeba-hq`。\n\n## EDSR的示例\n\n为了帮助用户对完整的配置文件有一个基本的了解，我们对我们实现的[EDSR模型的配置文件](https://github.com/open-mmlab/mmagic/blob/main/configs/edsr/edsr_x2c64b16_g1_300k_div2k.py)\n进行简要说明，如下所示。关于每个模块的更详细用法和相应的替代方案，请参考API文档和[MMEngine中的教程](https://github.com/open-mmlab/mmengine/blob/main/docs/en/advanced_tutorials/config.md)。\n\n### 模型配置\n\n在MMagic的配置文件中，我们使用 `model` 字段来设置模型。\n\n```python\nmodel = dict(\n    type='BaseEditModel',  # 模型的名称\n    generator=dict(  # 生成器的配置\n        type='EDSRNet',  # 生成器的类型\n        in_channels=3,  # 输入的通道数\n        out_channels=3,  # 输出的通道数\n        mid_channels=64,  # 中间特征的通道数\n        num_blocks=16,  # 主干网络中的块数\n        upscale_factor=scale,  # 上采样因子\n        res_scale=1,  # 用于缩放残差块中的残差\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # RGB图像的均值\n        rgb_std=(1.0, 1.0, 1.0)),  # RGB图像的标准差\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),  # 配置像素损失\n    train_cfg=dict(),  # 训练模型的配置\n    test_cfg=dict(),  # 测试模型的配置\n    data_preprocessor=dict(  # 数据预处理器的配置\n        type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.])\n)\n```\n\n### 数据配置\n\n训练、验证和测试[运行器(runner)](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html)\n都需要使用[数据加载器(Dataloader)](https://pytorch.org/docs/stable/data.html?highlight=data%20loader#torch.utils.data.DataLoader)。\n为了构建数据加载器，需要设置数据集(Dataset)和数据处理流程(data pipeline)。\n由于这部分的复杂性，我们使用中间变量来简化数据加载器配置的编写。\n\n#### 数据流程\n\n```python\ntrain_pipeline = [  # 训练数据处理流程\n    dict(type='LoadImageFromFile',  # 从文件中加载图像\n         key='img',  # 在结果中查找对应路径的键名\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='LoadImageFromFile',  # 从文件中加载图像\n         key='gt',  # 在结果中查找对应路径的键名\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # 将值设置给目标键名\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # 随机裁剪成配对图像\n    dict(type='Flip',  # 翻转图像\n         keys=['lq', 'gt'],  # 需要翻转的图像键名\n         flip_ratio=0.5,  # 翻转比例\n         direction='horizontal'),  # 翻转方向\n    dict(type='Flip',  # 翻转图像\n         keys=['lq', 'gt'],  # 需要翻转的图像键名\n         flip_ratio=0.5,  # 翻转比例\n         direction='vertical'),  # 翻转方向\n    dict(type='RandomTransposeHW',  # 随机交换图像的宽高\n         keys=['lq', 'gt'],  # 需要交换的图像键名\n         transpose_ratio=0.5  # 交换比例\n         ),\n    dict(type='PackInputs')  # 从当前处理流程中收集数据的配置\n]\n\ntest_pipeline = [  # 测试数据处理流程\n    dict(type='LoadImageFromFile',  # 从文件中加载图像\n         key='img',  # 在结果中查找对应路径的键名\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='LoadImageFromFile',  # 从文件中加载图像\n         key='gt',  # 在结果中查找对应路径的键名\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='PackInputs')  # 从当前处理流程中收集数据的配置\n]\n```\n\n#### 数据加载器\n\n```python\ndataset_type = 'BasicImageDataset'  # 数据集的类型\ndata_root = 'data'  # 数据的根路径\n\ntrain_dataloader = dict(\n    num_workers=4,  # 每个 GPU 预取数据的工作进程数\n    persistent_workers=False,  # 是否保持工作进程中的数据集实例处于活动状态\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # 数据采样器的类型\n    dataset=dict(  # 训练数据集配置\n        type=dataset_type,  # 数据集的类型\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # 注释文件的路径\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # 数据的根路径\n        data_prefix=dict(  # 图像路径的前缀\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # 文件名模板\n        pipeline=train_pipeline)\n)\n\nval_dataloader = dict(\n    num_workers=4,  # 每个 GPU 预取数据的工作进程数\n    persistent_workers=False,  # 是否保持工作进程中的数据集实例处于活动状态\n    drop_last=False,  # 是否丢弃最后一个不完整的批次\n    sampler=dict(type='DefaultSampler', shuffle=False),  # 数据采样器的类型\n    dataset=dict(  # 验证数据集配置\n        type=dataset_type,  # 数据集的类型\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # 数据的根路径\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # 图像路径的前缀\n        pipeline=test_pipeline)\n)\n\ntest_dataloader = val_dataloader\n```\n\n### 评估配置\n\n[评估器](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html)用于计算在验证集和测试集上训练模型的指标。\n评估器的配置包括一个或多个指标配置：\n\n```python\nval_evaluator = [\n    dict(type='MAE'),  # 要评估的指标名称\n    dict(type='PSNR', crop_border=scale),  # 要评估的指标名称\n    dict(type='SSIM', crop_border=scale),  # 要评估的指标名称\n]\n\ntest_evaluator = val_evaluator  # 测试评估器的配置与验证评估器相同\n\n```\n\n### 训练和测试配置\n\nMMEngine的运行器使用Loop来控制训练、验证和测试过程。\n用户可以使用这些字段设置最大训练迭代次数和验证间隔。\n\n```python\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',  # 训练循环类型的名称\n    max_iters=300000,  # 总迭代次数\n    val_interval=5000,  # 验证间隔迭代次数\n)\nval_cfg = dict(type='ValLoop')  # 验证循环类型的名称\ntest_cfg = dict(type='TestLoop')  # 测试循环类型的名称\n```\n\n### 优化配置\n\n`optim_wrapper`是用于配置优化相关设置的字段。\n优化器包装器不仅提供优化器的功能，还支持梯度裁剪、混合精度训练等功能。在[optimizer wrapper教程](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html)\n中可以了解更多信息。\n\n```python\noptim_wrapper = dict(\n    type='OptimWrapper',\n    optimizer=dict(type='Adam', lr=0.00001),\n)  # 用于构建优化器的配置，支持所有与PyTorch中参数相同的优化器。\n```\n\n`param_scheduler`是一个配置优化超参数（如学习率和动量）调整方法的字段。\n用户可以结合多个调度器来创建所需的参数调整策略。\n在[parameter scheduler教程](https://mmengine.readthedocs.io/en/latest/tutorials/param_scheduler.html)中可以了解更多信息。\n\n```python\nparam_scheduler = dict(  # 学习策略的配置\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n```\n\n### 钩子配置\n\n用户可以将钩子（hooks）附加到训练、验证和测试循环中，在运行过程中插入一些操作。有两个不同的钩子字段，一个是`default_hooks`\n，另一个是`custom_hooks`。\n\n`default_hooks`是一个包含钩子配置的字典。`default_hooks`\n是运行时必需的钩子，它们具有默认的优先级，不应修改。如果未设置，默认值将被使用。要禁用默认钩子，用户可以将其配置设置为`None`。\n\n```python\ndefault_hooks = dict(  # 用于构建默认钩子的配置\n    checkpoint=dict(  # 配置检查点钩子\n        type='CheckpointHook',\n        interval=5000,  # 保存间隔为5000次迭代\n        save_optimizer=True,\n        by_epoch=False,  # 以迭代次数计数\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # 配置注册日志钩子\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n```\n\n`custom_hooks`是一个钩子配置的列表。用户可以开发自己的钩子并将其插入到该字段中。\n\n```python\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]  # 可视化钩子的配置\n```\n\n### 运行时配置\n\n```python\ndefault_scope = 'mmagic'  # 用于设置注册表位置\nenv_cfg = dict(  # 设置分布式训练的参数，端口也可以设置\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\nlog_level = 'INFO'  # 日志记录的级别\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # 用于构建日志处理器\nload_from = None  # 从给定路径加载模型作为预训练模型。这不会恢复训练。\nresume = False  # 从给定路径恢复检查点，训练将从检查点保存的时期继续。\n```\n\n## StyleGAN2的示例\n\n以[Stylegan2 在 1024x1024 分辨率上的配置文件](https://github.com/open-mmlab/mmagic/blob/main/configs//styleganv2/stylegan2_c2_8xb4-fp16-global-800kiters_quicktest-ffhq-256x256.py)\n为例，我们根据不同的功能模块介绍配置中的各个字段。\n\n### 模型配置\n\n除了包括生成器、鉴别器等神经网络组件之外，还需要`data_preprocessor`、`loss_config`等字段，其中一些还包含`ema_config`。\n\n`data_preprocessor`负责处理数据加载器输出的一个批次数据。\n\n`loss_config`负责设置损失项的权重。\n\n`ema_config`负责为生成器执行指数移动平均（EMA）操作。\n\n```python\nmodel = dict(\n    type='StyleGAN2',  # 模型的名称\n    data_preprocessor=dict(type='DataPreprocessor'),  # 数据预处理器的配置，通常包括图像归一化和填充\n    generator=dict(  # 生成器的配置\n        type='StyleGANv2Generator',  # 生成器的名称\n        out_size=1024,  # 生成器的输出分辨率\n        style_channels=512),  # 生成器的风格通道数\n    discriminator=dict(  # 鉴别器的配置\n        type='StyleGAN2Discriminator',  # 鉴别器的名称\n        in_size=1024),  # 鉴别器的输入分辨率\n    ema_config=dict(  # EMA的配置\n        type='ExponentialMovingAverage',  # 平均模型的具体类型\n        interval=1,  # EMA操作的间隔\n        momentum=0.9977843871238888),  # EMA操作的动量\n    loss_config=dict(  # 损失项的配置\n        r1_loss_weight=80.0,  # r1梯度惩罚的权重\n        r1_interval=16,  # r1梯度惩罚的间隔\n        norm_mode='HWC',  # r1梯度惩罚的归一化模式\n        g_reg_interval=4,  # 生成器的正则化间隔\n        g_reg_weight=8.0,  # 生成器的正则化权重\n        pl_batch_shrink=2))  # 路径长度正则化中缩减批次大小的因子\n```\n\n### 数据集和评估器配置\n\n训练、验证和测试[runner](https://mmengine.readthedocs.io/en/latest/tutorials/runner.html)\n需要使用数据加载器[Dataloaders](https://pytorch.org/docs/stable/data.html?highlight=data%20loader#torch.utils.data.DataLoader)。\n需要设置数据集和数据处理流程来构建数据加载器。由于这部分的复杂性，我们使用中间变量来简化数据加载器配置的编写。\n\n```python\ndataset_type = 'BasicImageDataset'  # 数据集类型，将用于定义数据集\ndata_root = './data/ffhq/'  # 数据的根目录\n\ntrain_pipeline = [  # 训练数据处理流程\n    dict(type='LoadImageFromFile', key='img'),  # 第一个处理流程，从文件路径加载图像\n    dict(type='Flip', keys=['img'], direction='horizontal'),  # 图像翻转的数据增强处理流程\n    dict(type='PackInputs', keys=['img'])  # 最后一个处理流程，格式化注释数据（如果有）并决定哪些键应该打包到data_samples中\n]\nval_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),  # 第一个处理流程，从文件路径加载图像\n    dict(type='PackInputs', keys=['img'])  # 最后一个处理流程，格式化注释数据（如果有）并决定哪些键应该打包到data_samples中\n]\ntrain_dataloader = dict(  # 训练数据加载器的配置\n    batch_size=4,  # 单个GPU的批次大小\n    num_workers=8,  # 每个单个GPU的数据预取工作线程数\n    persistent_workers=True,  # 如果为True，则数据加载器将在一个epoch结束后不会关闭工作进程，这可以加速训练速度。\n    sampler=dict(  # 训练数据采样器的配置\n        type='InfiniteSampler',\n        # 用于迭代训练的InfiniteSampler。参考 https://github.com/open-mmlab/mmengine/blob/fe0eb0a5bbc8bf816d5649bfdd34908c258eb245/mmengine/dataset/sampler.py#L107\n        shuffle=True),  # 是否随机打乱训练数据\n    dataset=dict(  # 训练数据集的配置\n        type=dataset_type,\n        data_root=data_root,\n        pipeline=train_pipeline))\nval_dataloader = dict(  # 验证数据加载器的配置\n    batch_size=4,  # 单个GPU的批次大小\n    num_workers=8,  # 每个单个GPU的数据预取工作线程数\n    dataset=dict(  # 验证数据集的配置\n        type=dataset_type,\n        data_root=data_root,\n        pipeline=val_pipeline),\n    sampler=dict(  # 验证数据采样器的配置\n        type='DefaultSampler',\n        # 支持分布式和非分布式训练的DefaultSampler。参考 https://github.com/open-mmlab/mmengine/blob/fe0eb0a5bbc8bf816d5649bfdd34908c258eb245/mmengine/dataset/sampler.py#L14\n        shuffle=False),  # 是否随机打乱验证数据\n    persistent_workers=True)\ntest_dataloader = val_dataloader  # 测试数据加载器的配置与验证数据加载器相同\n```\n\n[评估器](https://mmengine.readthedocs.io/en/latest/tutorials/evaluation.html)用于计算在验证和测试数据集上训练模型的指标。\n评估器的配置由一个或多个指标配置组成：\n\n```python\nval_evaluator = dict(  # 验证评估器的配置\n    type='Evaluator',  # 评估类型\n    metrics=[  # 指标的配置\n        dict(\n            type='FrechetInceptionDistance',\n            prefix='FID-Full-50k',\n            fake_nums=50000,\n            inception_style='StyleGAN',\n            sample_model='ema'),\n        dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n        dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n    ])\ntest_evaluator = val_evaluator  # 测试评估器的配置与验证评估器相同\n```\n\n### 训练和测试配置\n\nMMEngine的runner使用Loop来控制训练、验证和测试过程。\n用户可以使用以下字段设置最大训练迭代次数和验证间隔：\n\n```python\ntrain_cfg = dict(  # 训练配置\n    by_epoch=False,  # 设置`by_epoch`为False以使用基于迭代的训练\n    val_begin=1,  # 开始验证的迭代次数\n    val_interval=10000,  # 验证间隔\n    max_iters=800002)  # 最大训练迭代次数\nval_cfg = dict(type='MultiValLoop')  # 验证循环类型\ntest_cfg = dict(type='MultiTestLoop')  # 测试循环类型\n```\n\n### 优化配置\n\n`optim_wrapper`是配置优化相关设置的字段。\n优化器包装器不仅提供优化器的功能，还支持梯度裁剪、混合精度训练等功能。在[optimizer wrapper tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/optim_wrapper.html)\n中可以找到更多信息。\n\n```python\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        optimizer=dict(type='Adam', lr=0.0016, betas=(0, 0.9919919678228657))),\n    discriminator=dict(\n        optimizer=dict(\n            type='Adam',\n            lr=0.0018823529411764706,\n            betas=(0, 0.9905854573074332))))\n```\n\n`param_scheduler`是一个配置优化超参数（如学习率和动量）调整方法的字段。\n用户可以组合多个调度器来创建所需的参数调整策略。\n在[parameter scheduler tutorial](https://mmengine.readthedocs.io/en/latest/tutorials/param_scheduler.html)中可以找到更多信息。\n由于StyleGAN2不使用参数调度器，我们以[CycleGAN](https://github.com/open-mmlab/mmagic/blob/main/configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py)\n的配置作为示例：\n\n```python\n# CycleGAN配置中的参数调度器\nparam_scheduler = dict(\n    type='LinearLrInterval',  # 调度器的类型\n    interval=400,  # 更新学习率的间隔\n    by_epoch=False,  # 调度器按迭代调用\n    start_factor=0.0002,  # 在第一次迭代中乘以参数值的数值\n    end_factor=0,  # 在线性变化过程结束时乘以参数值的数值\n    begin=40000,  # 调度器的起始迭代次数\n    end=80000)  # 调度器的结束迭代次数\n```\n\n### 钩子配置\n\n用户可以在训练、验证和测试循环中附加钩子，以在运行过程中插入一些操作。这里有两个不同的钩子字段，一个是`default_hooks`\n，另一个是`custom_hooks`。\n\n`default_hooks`是一个钩子配置的字典。`default_hooks`\n是在运行时必须的钩子。它们具有默认的优先级，不应该被修改。如果没有设置，运行器将使用默认值。要禁用一个默认钩子，用户可以将其配置设置为`None`。\n\n```python\ndefault_hooks = dict(\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100, log_metric_by_epoch=False),\n    checkpoint=dict(\n        type='CheckpointHook',\n        interval=10000,\n        by_epoch=False,\n        less_keys=['FID-Full-50k/fid'],\n        greater_keys=['IS-50k/is'],\n        save_optimizer=True,\n        save_best='FID-Full-50k/fid'))\n```\n\n`custom_hooks` 是一个钩子配置的列表。用户可以开发自己的钩子并将它们插入到这个字段中。\n\n```python\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n```\n\n### 运行时配置\n\n```python\ndefault_scope = 'mmagic'  # 默认的注册表作用域，用于查找模块。参考 https://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html\n\n# 环境配置\nenv_cfg = dict(\n    cudnn_benchmark=True,  # 是否启用cudnn基准测试\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),  # 设置多进程参数\n    dist_cfg=dict(backend='nccl')  # 设置分布式参数\n)\n\nlog_level = 'INFO'  # 日志级别\nlog_processor = dict(\n    type='LogProcessor',  # 日志处理器，用于处理运行时日志\n    by_epoch=False)  # 按迭代打印日志\nload_from = None  # 从给定路径加载模型检查点作为预训练模型\nresume = False  # 是否从`load_from`定义的检查点恢复训练。如果`load_from`为`None`，将恢复`work_dir`中的最新检查点\n```\n\n## 其他示例\n\n### 修复任务的配置示例\n\n为了帮助用户对修复系统的完整配置和模块有一个基本的了解，我们对全局和局部修复的配置进行简要注释，如下所示。有关更详细的用法和每个模块的替代选项，请参考API文档。\n\n```python\nmodel = dict(\n    type='GLInpaintor',  # 修复模型的名称\n    data_preprocessor=dict(\n        type='DataPreprocessor',  # 数据预处理器的名称\n        mean=[127.5],  # 数据归一化时使用的均值\n        std=[127.5],  # 数据归一化时使用的标准差\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',  # 编码器-解码器的名称\n        encoder=dict(type='GLEncoder', norm_cfg=dict(type='SyncBN')),  # 编码器的配置\n        decoder=dict(type='GLDecoder', norm_cfg=dict(type='SyncBN')),  # 解码器的配置\n        dilation_neck=dict(\n            type='GLDilationNeck', norm_cfg=dict(type='SyncBN'))),  # 膨胀模块的配置\n    disc=dict(\n        type='GLDiscs',  # 判别器的名称\n        global_disc_cfg=dict(\n            in_channels=3,  # 判别器的输入通道数\n            max_channels=512,  # 判别器中间通道的最大数量\n            fc_in_channels=512 * 4 * 4,  # 最后一个全连接层的输入通道数\n            fc_out_channels=1024,  # 最后一个全连接层的输出通道数\n            num_convs=6,  # 判别器中使用的卷积层数量\n            norm_cfg=dict(type='SyncBN')  # 归一化层的配置\n        ),\n        local_disc_cfg=dict(\n            in_channels=3,  # 判别器的输入通道数\n            max_channels=512,  # 判别器中间通道的最大数量\n            fc_in_channels=512 * 4 * 4,  # 最后一个全连接层的输入通道数\n            fc_out_channels=1024,  # 最后一个全连接层的输出通道数\n            num_convs=5,  # 判别器中使用的卷积层数量\n            norm_cfg=dict(type='SyncBN')  # 归一化层的配置\n        ),\n    ),\n    loss_gan=dict(\n        type='GANLoss',  # GAN损失的名称\n        gan_type='vanilla',  # GAN损失的类型\n        loss_weight=0.001  # GAN损失的权重\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',  # L1损失的类型\n        loss_weight=1.0  # L1损失的权重\n    )\n)\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',  # 训练循环的类型\n    max_iters=500002,  # 总迭代次数\n    val_interval=50000  # 验证间隔的迭代次数\n)\nval_cfg = dict(type='ValLoop')  # 验证循环的类型\ntest_cfg = dict(type='TestLoop')  # 测试循环的类型\n\nval_evaluator = [\n    dict(type='MAE', mask_key='mask', scaling=100),  # 用于评估的指标名称\n    dict(type='PSNR'),  # 用于评估的指标名称\n    dict(type='SSIM'),  # 用于评估的指标名称\n]\ntest_evaluator = val_evaluator\n\ninput_shape = (256, 256)  # 输入图像的形状\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),  # 加载图像的配置\n    dict(\n        type='LoadMask',  # 加载掩膜的类型\n        mask_mode='bbox',  # 掩膜的类型\n        mask_config=dict(\n            max_bbox_shape=(128, 128),  # 边界框的形状\n            max_bbox_delta=40,  # 边界框高度和宽度的变化范围\n            min_margin=20,  # 边界框与图像边界的最小间距\n            img_shape=input_shape)),  # 输入图像的形状\n    dict(\n        type='Crop',  # 裁剪的类型\n        keys=['gt'],  # 需要裁剪的图像的键\n        crop_size=(384, 384),  # 裁剪后的大小\n        random_crop=True,  # 是否随机裁剪\n    ),\n    dict(\n        type='Resize',  # 调整大小的类型\n        keys=['gt'],  # 需要调整大小的图像的键\n        scale=input_shape,  # 调整大小的比例\n        keep_ratio=False,  # 是否保持比例\n    ),\n    dict(\n        type='Normalize',  # 归一化的类型\n        keys=['gt_img'],  # 需要归一化的图像的键\n        mean=[127.5] * 3,  # 归一化时使用的均值\n        std=[127.5] * 3,  # 归一化时使用的标准差\n        to_rgb=False),  # 是否将图像通道转换为RGB\n    dict(type='GetMaskedImage'),  # 获取掩膜图像的配置\n    dict(type='PackInputs'),  # 收集当前流水线中的数据的配置\n]\n\ntest_pipeline = train_pipeline  # 构建测试/验证流水线\n\ndataset_type = 'BasicImageDataset'  # 数据集的类型\ndata_root = 'data/places'  # 数据的根路径\n\ntrain_dataloader = dict(\n    batch_size=12,  # 单个GPU的批处理大小\n    num_workers=4,  # 每个单个GPU预取数据的工作线程数\n    persistent_workers=False,  # 是否保持工作线程的数据集实例\n    sampler=dict(type='InfiniteSampler', shuffle=False),  # 数据采样器的类型\n    dataset=dict(  # 训练数据集的配置\n        type=dataset_type,  # 数据集的类型\n        data_root=data_root,  # 数据的根路径\n        data_prefix=dict(gt='data_large'),  # 图像路径的前缀\n        ann_file='meta/places365_train_challenge.txt',  # 注释文件的路径\n        test_mode=False,\n        pipeline=train_pipeline,\n    ))\n\nval_dataloader = dict(\n    batch_size=1,  # 单个GPU的批处理大小\n    num_workers=4,  # 每个单个GPU预取数据的工作线程数\n    persistent_workers=False,  # 是否保持工作线程的数据集实例\n    drop_last=False,  # 是否丢弃最后一个不完整的批次\n    sampler=dict(type='DefaultSampler', shuffle=False),  # 数据采样器的类型\n    dataset=dict(  # 验证数据集的配置\n        type=dataset_type,  # 数据集的类型\n        data_root=data_root,  # 数据的根路径\n        data_prefix=dict(gt='val_large'),  # 图像路径的前缀\n        ann_file='meta/places365_val.txt',  # 注释文件的路径\n        test_mode=True,\n        pipeline=test_pipeline,\n    ))\n\ntest_dataloader = val_dataloader\n\nmodel_wrapper_cfg = dict(type='MMSeparateDistributedDataParallel')  # 模型包装器的名称\n\noptim_wrapper = dict(  # 用于构建优化器的配置，支持PyTorch中的所有优化器，其参数与PyTorch中的优化器的参数相同\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)),\n    disc=dict(type='OptimWrapper', optimizer=dict(type='Adam', lr=0.0004)))\n\ndefault_scope = 'mmagic'  # 用于设置注册表位置\nsave_dir = './work_dirs'  # 保存模型检查点和日志的目录\nexp_name = 'gl_places'  # 实验名称\n\ndefault_hooks = dict(  # 用于构建默认挂钩\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # 注册记录器挂钩的配置\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(  # 设置检查点挂钩的配置\n        type='CheckpointHook',\n        interval=50000,\n        by_epoch=False,\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(  # 用于设置分布式训练的参数，也可以设置端口\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type='LocalVisBackend')]  # 可视化后端的名称\nvisualizer = dict(  # 用于构建可视化器的配置\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]  # 用于构建自定义挂钩\n\nlog_level = 'INFO'  # 记录级别\nlog_processor = dict(type='LogProcessor', by_epoch=False)  # 用于构建日志处理器\n\nload_from = None  # 从给定路径加载预训练模型\nresume = False  # 从给定路径恢复检查点\n\nfind_unused_parameters = False  # 是否在DDP中设置未使用的参数\n```\n\n### 抠图任务的配置示例\n\n为了帮助用户对完整的配置有一个基本的了解，我们对我们实现的原始DIM（Deep Image\nMatting）模型的配置进行了简要的注释，如下所示。有关每个模块的更详细用法和相应的替代方案，请参阅API文档。\n\n```python\n# 模型设置\nmodel = dict(\n    type='DIM',  # 模型的名称（我们称之为mattor）。\n    data_preprocessor=dict(  # 数据预处理器的配置\n        type='DataPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        bgr_to_rgb=True,\n        proc_inputs='normalize',\n        proc_trimap='rescale_to_zero_one',\n        proc_gt='rescale_to_zero_one',\n    ),\n    backbone=dict(  # 骨干网络的配置。\n        type='SimpleEncoderDecoder',  # 骨干网络的类型。\n        encoder=dict(  # 编码器的配置。\n            type='VGG16'),  # 编码器的类型。\n        decoder=dict(  # 解码器的配置。\n            type='PlainDecoder')),  # 解码器的类型。\n    pretrained='./weights/vgg_state_dict.pth',  # 要加载的编码器的预训练权重。\n    loss_alpha=dict(  # alpha损失的配置。\n        type='CharbonnierLoss',  # 预测的alpha融合图像的损失类型。\n        loss_weight=0.5),  # alpha损失的权重。\n    loss_comp=dict(  # 合成损失的配置。\n        type='CharbonnierCompLoss',  # 合成损失的类型。\n        loss_weight=0.5),  # 合成损失的权重。\n    train_cfg=dict(  # DIM模型的训练配置。\n        train_backbone=True,  # 在DIM阶段1中，训练骨干网络。\n        train_refiner=False),  # 在DIM阶段1中，不训练refiner。\n    test_cfg=dict(  # DIM模型的测试配置。\n        refine=False,  # 是否使用refiner输出作为输出，在阶段1中我们不使用它。\n        resize_method='pad',\n        resize_mode='reflect',\n        size_divisor=32,\n    ),\n)\n\n# 数据设置\ndataset_type = 'AdobeComp1kDataset'  # 数据集类型，用于定义数据集。\ndata_root = 'data/adobe_composition-1k'  # 数据的根路径。\n\ntrain_pipeline = [  # 训练数据处理流程。\n    dict(\n        type='LoadImageFromFile',  # 从文件加载alpha融合图像。\n        key='alpha',  # 注释文件中alpha融合图像的键。该流程将从路径`alpha_path`读取alpha融合图像。\n        color_type='grayscale'),  # 加载为灰度图像，具有形状（高度，宽度）。\n    dict(\n        type='LoadImageFromFile',  # 从文件加载图像。\n        key='fg'),  # 要加载的图像的键。该流程将从路径`fg_path`读取前景图像。\n    dict(\n        type='LoadImageFromFile',  # 从文件加载图像。\n        key='bg'),  # 要加载的图像的键。该流程将从路径`bg_path`读取背景图像。\n    dict(\n        type='LoadImageFromFile',  # 从文件加载图像。\n        key='merged'),  # 要加载的图像的键。该流程将从路径`merged_path`读取合并图像。\n    dict(\n        type='CropAroundUnknown',  # 在未知区域（半透明区域）周围裁剪图像。\n        keys=['alpha', 'merged', 'fg', 'bg'],  # 要裁剪的图像。\n        crop_sizes=[320, 480, 640]),  # 候选裁剪大小。\n    dict(\n        type='Flip',  # 翻转图像的增强流程。\n        keys=['alpha', 'merged', 'fg', 'bg']),  # 要翻转的图像。\n    dict(\n        type='Resize',  # 调整图像大小的增强流程。\n        keys=['alpha', 'merged', 'fg', 'bg'],  # 要调整大小的图像。\n        scale=(320, 320),  # 目标大小。\n        keep_ratio=False),  # 是否保持高度和宽度之间的比例。\n    dict(\n        type='GenerateTrimap',  # 从alpha融合图像生成trimap。\n        kernel_size=(1, 30)),  # 腐蚀/膨胀内核的大小范围。\n    dict(type='PackInputs'),  # 从当前流程中收集数据的配置\n]\ntest_pipeline = [\n    dict(\n        type='LoadImageFromFile',  # 加载alpha融合图像。\n        key='alpha',  # 注释文件中alpha融合图像的键。该流程将从路径`alpha_path`读取alpha融合图像。\n        color_type='grayscale',\n        save_original_img=True),\n    dict(\n        type='LoadImageFromFile',  # 从文件加载图像。\n        key='trimap',  # 要加载的图像的键。该流程将从路径`trimap_path`读取trimap。\n        color_type='grayscale',  # 加载为灰度图像，具有形状（高度，宽度）。\n        save_original_img=True),  # 保存trimap的副本用于计算指标。它将以键`ori_trimap`保存。\n    dict(\n        type='LoadImageFromFile',  # 从文件加载图像。\n        key='merged'),  # 要加载的图像的键。该流程将从路径`merged_path`读取合并图像。\n    dict(type='PackInputs'),  # 从当前流程中收集数据的配置\n]\n\ntrain_dataloader = dict(\n    batch_size=1,  # 单个GPU的批处理大小\n    num_workers=4,  # 每个单个GPU预提取数据的工作线程数\n    persistent_workers=False,  # 是否保持工作线程Dataset实例处于活动状态\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # 数据采样器的类型\n    dataset=dict(  # 训练数据集的配置\n        type=dataset_type,  # 数据集的类型\n        data_root=data_root,  # 数据的根路径\n        ann_file='training_list.json',  # 注释文件的路径\n        test_mode=False,\n        pipeline=train_pipeline,\n    ))\n\nval_dataloader = dict(\n    batch_size=1,  # 单个GPU的批处理大小\n    num_workers=4,  # 每个单个GPU预提取数据的工作线程数\n    persistent_workers=False,  # 是否保持工作线程Dataset实例处于活动状态\n    drop_last=False,  # 是否丢弃最后一个不完整的批次\n    sampler=dict(type='DefaultSampler', shuffle=False),  # 数据采样器的类型\n    dataset=dict(  # 验证数据集的配置\n        type=dataset_type,  # 数据集的类型\n        data_root=data_root,  # 数据的根路径\n        ann_file='test_list.json',  # 注释文件的路径\n        test_mode=True,\n        pipeline=test_pipeline,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='SAD'),  # 要评估的指标名称\n    dict(type='MattingMSE'),  # 要评估的指标名称\n    dict(type='GradientError'),  # 要评估的指标名称\n    dict(type='ConnectivityError'),  # 要评估的指标名称\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop',  # 训练循环类型的名称\n    max_iters=1_000_000,  # 总迭代次数\n    val_interval=40000,  # 验证间隔迭代次数\n)\nval_cfg = dict(type='ValLoop')  # 验证循环类型的名称\ntest_cfg = dict(type='TestLoop')  # 测试循环类型的名称\n\n# 优化器\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.00001),\n    )\n)  # 用于构建优化器的配置，支持PyTorch中所有优化器，其参数也与PyTorch中的参数相同。\n\ndefault_scope = 'mmagic'  # 用于设置注册表位置\nsave_dir = './work_dirs'  # 保存当前实验的模型检查点和日志的目录。\n\ndefault_hooks = dict(  # 用于构建默认钩子\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # 注册日志记录器钩子的配置\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    checkpoint=dict(  # 配置检查点钩子\n        type='CheckpointHook',\n        interval=40000,  # 保存间隔为40000次迭代。\n        by_epoch=False,  # 按迭代计数。\n        out_dir=save_dir),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\nenv_cfg = dict(  # 设置分布式训练的参数，也可以设置端口\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'  # 日志级别\nlog_processor = dict(type='LogProcessor', by_epoch=False)  # 用于构建日志处理器的配置。\n\n# 导入模块并设置MMDetection的配置\nload_from = None  # 从给定路径加载模型作为预训练模型，这不会恢复训练。\nresume = False  # 从给定路径恢复检查点，训练将从检查点保存的时期恢复。\n```\n\n### 恢复任务的配置示例\n\n为了帮助用户对完整配置有一个基本的理解，我们对我们实现的EDSR模型的配置进行了简要的注释，如下所示。有关更详细的用法和每个模块的相应替代方案，请参阅API文档。\n\n```python\nexp_name = 'edsr_x2c64b16_1x16_300k_div2k'  # 实验名称\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nload_from = None  # 基于预训练的x2模型\n\nscale = 2  # 上采样的比例\n# 模型设置\nmodel = dict(\n    type='BaseEditModel',  # 模型名称\n    generator=dict(  # 生成器的配置\n        type='EDSRNet',  # 生成器的类型\n        in_channels=3,  # 输入的通道数\n        out_channels=3,  # 输出的通道数\n        mid_channels=64,  # 中间特征的通道数\n        num_blocks=16,  # 主干网络中的块数\n        upscale_factor=scale,  # 上采样因子\n        res_scale=1,  # 用于缩放残差块中的残差\n        rgb_mean=(0.4488, 0.4371, 0.4040),  # 图像的RGB均值\n        rgb_std=(1.0, 1.0, 1.0)),  # 图像的RGB标准差\n    pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean')  # 像素损失的配置\ntrain_cfg = dict(),  # 训练模型的配置\ntest_cfg = dict(),  # 测试模型的配置\ndata_preprocessor = dict(  # 数据预处理器的配置\n    type='DataPreprocessor', mean=[0., 0., 0.], std=[255., 255., 255.]))\n\ntrain_pipeline = [  # 训练数据处理的流程\n    dict(type='LoadImageFromFile',  # 从文件加载图像\n         key='img',  # 结果中寻找对应路径的关键字\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='LoadImageFromFile',  # 从文件加载图像\n         key='gt',  # 结果中寻找对应路径的关键字\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='SetValues', dictionary=dict(scale=scale)),  # 设置目标关键字的值\n    dict(type='PairedRandomCrop', gt_patch_size=96),  # 随机裁剪配对图像\n    dict(type='Flip',  # 翻转图像\n         keys=['lq', 'gt'],  # 需要翻转的图像\n         flip_ratio=0.5,  # 翻转的比例\n         direction='horizontal'),  # 翻转的方向\n    dict(type='Flip',  # 翻转图像\n         keys=['lq', 'gt'],  # 需要翻转的图像\n         flip_ratio=0.5,  # 翻转的比例\n         direction='vertical'),  # 翻转的方向\n    dict(type='RandomTransposeHW',  # 随机转置图像的高度和宽度\n         keys=['lq', 'gt'],  # 需要转置的图像\n         transpose_ratio=0.5  # 转置的比例\n         ),\n    dict(type='PackInputs')  # 收集当前流程中的数据的配置\n]\ntest_pipeline = [  # 测试流程\n    dict(type='LoadImageFromFile',  # 从文件加载图像\n         key='img',  # 结果中寻找对应路径的关键字\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='LoadImageFromFile',  # 从文件加载图像\n         key='gt',  # 结果中寻找对应路径的关键字\n         color_type='color',  # 图像的颜色类型\n         channel_order='rgb',  # 图像的通道顺序\n         imdecode_backend='cv2'),  # 解码后端\n    dict(type='ToTensor', keys=['img', 'gt']),  # 将图像转换为张量\n    dict(type='PackInputs')  # 收集当前流程中的数据的配置\n]\n\n# 数据集设置\ndataset_type = 'BasicImageDataset'  # 数据集的类型\ndata_root = 'data'  # 数据的根路径\n\ntrain_dataloader = dict(\n    num_workers=4,  # 每个GPU预提取数据的工作进程数\n    persistent_workers=False,  # 是否保持工作进程中的数据集实例处于活动状态\n    sampler=dict(type='InfiniteSampler', shuffle=True),  # 数据采样器的类型\n    dataset=dict(  # 训练数据集的配置\n        type=dataset_type,  # 数据集的类型\n        ann_file='meta_info_DIV2K800sub_GT.txt',  # 注释文件的路径\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',  # 数据的根路径\n        data_prefix=dict(  # 图像路径的前缀\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        filename_tmpl=dict(img='{}', gt='{}'),  # 文件名模板\n        pipeline=train_pipeline))\nval_dataloader = dict(\n    num_workers=4,  # 每个GPU预提取数据的工作进程数\n    persistent_workers=False,  # 是否保持工作进程中的数据集实例处于活动状态\n    drop_last=False,  # 是否丢弃最后一个不完整的批次\n    sampler=dict(type='DefaultSampler', shuffle=False),  # 数据采样器的类型\n    dataset=dict(  # 验证数据集的配置\n        type=dataset_type,  # 数据集的类型\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',  # 数据的根路径\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),  # 图像路径的前缀\n        pipeline=test_pipeline))\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type='MAE'),  # 用于评估的指标的名称\n    dict(type='PSNR', crop_border=scale),  # 用于评估的指标的名称\n    dict(type='SSIM', crop_border=scale),  # 用于评估的指标的名称\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(\n    type='IterBasedTrainLoop', max_iters=300000, val_interval=5000)  # 训练循环类型的配置\nval_cfg = dict(type='ValLoop')  # 验证循环类型的名称\ntest_cfg = dict(type='TestLoop')  # 测试循环类型的名称\n\n# 优化器\noptim_wrapper = dict(\n    dict(\n        type='OptimWrapper',\n        optimizer=dict(type='Adam', lr=0.00001),\n    )\n)  # 用于构建优化器的配置，支持PyTorch中所有优化器，参数与PyTorch中的相同。\n\nparam_scheduler = dict(  # 学习策略的配置\n    type='MultiStepLR', by_epoch=False, milestones=[200000], gamma=0.5)\n\ndefault_hooks = dict(  # 用于构建默认钩子\n    checkpoint=dict(  # 配置保存检查点的钩子\n        type='CheckpointHook',\n        interval=5000,  # 保存间隔为5000次迭代\n        save_optimizer=True,\n        by_epoch=False,  # 以迭代计数\n        out_dir=save_dir,\n    ),\n    timer=dict(type='IterTimerHook'),\n    logger=dict(type='LoggerHook', interval=100),  # 注册记录器钩子的配置\n    param_scheduler=dict(type='ParamSchedulerHook'),\n    sampler_seed=dict(type='DistSamplerSeedHook'),\n)\n\ndefault_scope = 'mmagic'  # 用于设置注册表位置\nsave_dir = './work_dirs'  # 保存当前实验的模型检查点和日志的目录。\n\nenv_cfg = dict(  # 设置分布式训练的参数，端口也可以设置\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'  # 记录的级别\nlog_processor = dict(type='LogProcessor', window_size=100, by_epoch=False)  # 用于构建日志处理器\n\nload_from = None  # 从给定路径加载模型作为预训练模型，这不会恢复训练。\nresume = False  # 从给定路径恢复检查点，训练将从检查点保存的时期恢复。\n```\n"
  },
  {
    "path": "docs/zh_cn/user_guides/dataset_prepare.md",
    "content": "# 教程 2：准备数据集\n\n在本节中，我们将详细介绍如何准备数据并在本仓库的不同任务中采用适当的数据集。\n\n我们支持不同任务的多个数据集。\n在MMagic中，有两种方法可以将数据集用于训练和测试模型：\n\n1. 直接使用下载的数据集\n2. 在使用下载的数据集之前对其进行预处理\n\n本文的结构如下：\n\n- \\[教程 2：准备数据集\\](#教程 2：准备数据集)\n  - [下载数据集](#下载数据集)\n  - [准备数据集](#准备数据集)\n  - [MMagic中的数据集概述](#MMagic中的数据集概述)\n\n## 下载数据集\n\n首先，建议您从官方的页面下载数据集。\n大多数数据集在下载后都是可用的，因此您只需确保文件夹结构正确，无需进一步准备。\n例如，您可以通过从[主页](http://toflow.csail.mit.edu/)下载，来简单地准备Vimeo90K-triplet数据集.\n\n## 准备数据集\n\n一些数据集需要在训练或测试之前进行预处理。我们在\n[tools/dataset_converters](https://github.com/open-mmlab/mmagic/tree/main/tools/dataset_converters)中支持许多用来准备数据集的脚本。\n您可以遵循每个数据集的教程来运行脚本。例如，我们建议将DIV2K图像裁剪为子图像。我们提供了一个脚本来准备裁剪的DIV2K数据集。可以运行以下命令：\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K\n```\n\n## MMagic中的数据集概述\n\n我们支持详细的教程，并根据不同的任务进行拆分。\n\n请查看我们的数据集概览，了解不同任务的数据准备。\n\n如果您对MMagic中数据集的更多细节感兴趣，请查看[进阶教程](../howto/dataset.md)。\n"
  },
  {
    "path": "docs/zh_cn/user_guides/deploy.md",
    "content": "# 教程 8：模型部署指南\n\n[MMDeploy](https://github.com/open-mmlab/mmdeploy) 是 OpenMMLab 的部署仓库，负责包括 MMClassification、MMDetection、MMagic 等在内的各算法库的部署工作。\n你可以从[这里](https://mmdeploy.readthedocs.io/zh_CN/latest/04-supported-codebases/mmagic.html)获取 MMDeploy 对 MMClassification 部署支持的最新文档。\n\n本文的结构如下：\n\n- [安装](#安装)\n- [模型转换](#模型转换)\n- [模型规范](#模型规范)\n- [模型推理](#模型推理)\n  - [后端模型推理](#后端模型推理)\n  - [SDK 模型推理](#sdk-模型推理)\n- [模型支持列表](#模型支持列表)\n\n## 安装\n\n请参考[此处](../get_started/install.md)安装 mmagic。然后，按照[说明](https://mmdeploy.readthedocs.io/zh_CN/latest/get_started.html#mmdeploy)安装 mmdeploy。\n\n```{note}\n如果安装的是 mmdeploy 预编译包，那么也请通过 'git clone https://github.com/open-mmlab/mmdeploy.git --depth=1' 下载 mmdeploy 源码。因为它包含了部署时要用到的配置文件\n```\n\n## 模型转换\n\n假设在安装步骤中，mmagic 和 mmdeploy 代码库在同级目录下，并且当前的工作目录为 mmagic 的根目录，那么以 [ESRGAN](../../../configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py) 模型为例，你可以从[此处](https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth)下载对应的 checkpoint，并使用以下代码将之转换为 onnx 模型：\n\n```python\nfrom mmdeploy.apis import torch2onnx\nfrom mmdeploy.backend.sdk.export_info import export2SDK\n\nimg = 'tests/data/image/face/000001.png'\nwork_dir = 'mmdeploy_models/mmagic/onnx'\nsave_file = 'end2end.onnx'\ndeploy_cfg = '../mmdeploy/configs/mmagic/super-resolution/super-resolution_onnxruntime_dynamic.py'\nmodel_cfg = 'configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py'\nmodel_checkpoint = 'esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth'\ndevice = 'cpu'\n\n# 1. convert model to onnx\ntorch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg,\n  model_checkpoint, device)\n\n# 2. extract pipeline info for inference by MMDeploy SDK\nexport2SDK(deploy_cfg, model_cfg, work_dir, pth=model_checkpoint, device=device)\n```\n\n转换的关键之一是使用正确的配置文件。项目中已内置了各后端部署[配置文件](https://github.com/open-mmlab/mmdeploy/tree/main/configs/mmagic)。\n文件的命名模式是：\n\n```\n{task}/{task}_{backend}-{precision}_{static | dynamic}_{shape}.py\n```\n\n其中：\n\n- **{task}:** mmagic 中的任务\n- **{backend}:** 推理后端名称。比如，onnxruntime、tensorrt、pplnn、ncnn、openvino、coreml 等等\n- **{precision}:** 推理精度。比如，fp16、int8。不填表示 fp32\n- **{static | dynamic}:** 动态、静态 shape\n- **{shape}:** 模型输入的 shape 或者 shape 范围\n\n在上例中，你也可以把 `ESRGAN` 转为其他后端模型。比如使用`super-resolution_tensorrt-fp16_dynamic-32x32-512x512.py`，把模型转为 tensorrt-fp16 模型。\n\n```{tip}\n当转 tensorrt 模型时, --device 需要被设置为 \"cuda\"\n```\n\n## 模型规范\n\n在使用转换后的模型进行推理之前，有必要了解转换结果的结构。 它存放在 `--work-dir` 指定的路路径下。\n\n上例中的`mmdeploy_models/mmagic/onnx`，结构如下：\n\n```\nmmdeploy_models/mmagic/onnx\n├── deploy.json\n├── detail.json\n├── end2end.onnx\n└── pipeline.json\n```\n\n重要的是：\n\n- **end2end.onnx**: 推理引擎文件。可用 ONNX Runtime 推理\n- ***xxx*.json**:  mmdeploy SDK 推理所需的 meta 信息\n\n整个文件夹被定义为**mmdeploy SDK model**。换言之，**mmdeploy SDK model**既包括推理引擎，也包括推理 meta 信息。\n\n## 模型推理\n\n### 后端模型推理\n\n以上述模型转换后的 `end2end.onnx` 为例，你可以使用如下代码进行推理：\n\n```python\nfrom mmdeploy.apis.utils import build_task_processor\nfrom mmdeploy.utils import get_input_shape, load_config\nimport torch\n\ndeploy_cfg = '../mmdeploy/configs/mmagic/super-resolution/super-resolution_onnxruntime_dynamic.py'\nmodel_cfg = 'configs/esrgan/esrgan_psnr-x4c64b23g32_1xb16-1000k_div2k.py'\ndevice = 'cpu'\nbackend_model = ['mmdeploy_models/mmagic/onnx/end2end.onnx']\nimage = 'tests/data/image/lq/baboon_x4.png'\n\n# read deploy_cfg and model_cfg\ndeploy_cfg, model_cfg = load_config(deploy_cfg, model_cfg)\n\n# build task and backend model\ntask_processor = build_task_processor(model_cfg, deploy_cfg, device)\nmodel = task_processor.build_backend_model(backend_model)\n\n# process input image\ninput_shape = get_input_shape(deploy_cfg)\nmodel_inputs, _ = task_processor.create_input(image, input_shape)\n\n# do model inference\nwith torch.no_grad():\n    result = model.test_step(model_inputs)\n\n# visualize results\ntask_processor.visualize(\n    image=image,\n    model=model,\n    result=result[0],\n    window_name='visualize',\n    output_file='output_restorer.bmp')\n```\n\n### SDK 模型推理\n\n你也可以参考如下代码，对 SDK model 进行推理：\n\n```python\nfrom mmdeploy_python import Restorer\nimport cv2\n\nimg = cv2.imread('tests/data/image/lq/baboon_x4.png')\n\n# create a predictor\nrestorer = Restorer(model_path='mmdeploy_models/mmagic/onnx', device_name='cpu', device_id=0)\n# perform inference\nresult = restorer(img)\n\n# visualize inference result\ncv2.imwrite('output_restorer.bmp', result)\n```\n\n除了python API，mmdeploy SDK 还提供了诸如 C、C++、C#、Java等多语言接口。\n你可以参考[样例](https://github.com/open-mmlab/mmdeploy/tree/main/demo)学习其他语言接口的使用方法。\n\n## 模型支持列表\n\n请参考[这里](https://mmdeploy.readthedocs.io/zh_CN/latest/04-supported-codebases/mmagic.html#id7)\n"
  },
  {
    "path": "docs/zh_cn/user_guides/index.rst",
    "content": ".. toctree::\n   :maxdepth: 3\n\n   config.md\n\n.. toctree::\n   :maxdepth: 3\n\n   datasets/dataset_prepare.md\n\n.. toctree::\n   :maxdepth: 3\n\n   inference.md\n   train_test.md\n   useful_tools.md\n   visualization.md\n"
  },
  {
    "path": "docs/zh_cn/user_guides/inference.md",
    "content": "# 教程3：使用预训练模型推理\n\nMMagic 提供了高级API，让您可以轻松地在自己的图像或视频上使用最先进的模型进行操作。\n在新的API中，仅需两行代码即可进行推理。\n\n```python\nfrom mmagic.apis import MMagicInferencer\n\n# 创建MMagicInferencer实例\neditor = MMagicInferencer('pix2pix')\n# 推理图片.需要输入图片路径与输出图片路径\nresults = editor.infer(img='../resources/input/translation/gt_mask_0.png', result_out_dir='../resources/output/translation/tutorial_translation_pix2pix_res.jpg')\n```\n\nMMagic支持各种基础生成模型，包括无条件生成对抗网络（GANs）、条件GANs、扩散模型等。\nMMagic 同样支持多种应用，包括：文生图、图生图的转换、3D感知生成、图像超分、视频超分、视频帧插值、图像修补、图像抠图、图像恢复、图像上色、图像生成等。\n在本节中，我们将详细说明如何使用我们预训练的模型进行操作。\n\n- 教程3: 使用预训练模型推理\n  - [准备一些图片或者视频用于推理](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Prepare-some-images-or-videos-for-inference)\n  - 生成模型\n    - [无条件生成对抗网络 (GANs)](<https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Unconditional-Generative-Adversarial-Networks-(GANs)>)\n    - [条件生成对抗网络(GANs)](<https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Conditional-Generative-Adversarial-Networks-(GANs)>)\n    - [扩散模型](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Diffusion-Models)\n  - 应用\n    - [文生图](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Text-to-Image)\n    - [图生图的转换](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-to-image-translation)\n    - [3D感知生成](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#3D-aware-generation)\n    - [图像超分](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-super-resolution)\n    - [视频超分](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Video-super-resolution)\n    - [视频帧插值](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/Video-frame-interpolation)\n    - [图像修补](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-inpainting)\n    - [图像抠图](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-matting)\n    - [图像恢复](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-restoration)\n    - [图像上色](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Image-colorization)\n- [以前的版本](https://github.com/open-mmlab/mmagic/blob/main/docs/zh_cn/user_guides/inference.md#Previous-Versions)\n\n## 准备一些图片或者视频用于推理\n\n请参考我们的[教程](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_tutorial.ipynb)获取详细信息。\n\n## 生成模型\n\n### 无条件生成对抗网络（GANs）\n\nMMagic提供了用于使用无条件GANs进行图像采样的高级API。无条件GAN模型不需要输入，并输出一张图像。我们以'styleganv1'为例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# 创建MMagicInferencer实例，并进行推理\nresult_out_dir = './resources/output/unconditional/tutorial_unconditional_styleganv1_res.png'\neditor = MMagicInferencer('styleganv1')\nresults = editor.infer(result_out_dir=result_out_dir)\n```\n\n确实，我们已经为用户提供了一个更友好的演示脚本。您可以使用以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)：\n\n```python\npython demo/mmagic_inference_demo.py \\\n        --model-name styleganv1 \\\n        --result-out-dir demo_unconditional_styleganv1_res.jpg\n```\n\n### 条件生成对抗网络(GANs)\n\nMMagic提供了使用条件GAN进行图像采样的高级API。条件GAN模型接受一个标签作为输入，并输出一张图像。我们以'biggan'为例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# 创建MMagicInferencer实例，并进行推理\nresult_out_dir = './resources/output/conditional/tutorial_conditinal_biggan_res.jpg'\neditor = MMagicInferencer('biggan', model_setting=1)\nresults = editor.infer(label=1, result_out_dir=result_out_dir)\n```\n\n我们已经为用户提供了一个更友好的演示脚本。您可以使用以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)：\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name biggan \\\n        --model-setting 1 \\\n        --label 1 \\\n        --result-out-dir demo_conditional_biggan_res.jpg\n```\n\n### 扩散模型\n\nMMagic提供了使用扩散模型进行图像采样的高级API。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# 创建MMagicInferencer实例，并进行推理\neditor = MMagicInferencer(model_name='stable_diffusion')\ntext_prompts = 'A panda is having dinner at KFC'\nresult_out_dir = './resources/output/text2image/tutorial_text2image_sd_res.png'\neditor.infer(text=text_prompts, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name stable_diffusion \\\n        --text \"A panda is having dinner at KFC\" \\\n        --result-out-dir demo_text2image_stable_diffusion_res.png\n```\n\n## 应用\n\n### 文生图\n\n文生图模型将文本作为输入，输出一张图片。我们以'controlnet-canny'为例。\n\n```python\nimport cv2\nimport numpy as np\nimport mmcv\nfrom mmengine import Config\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\ncfg = Config.fromfile('configs/controlnet/controlnet-canny.py')\ncontrolnet = MODELS.build(cfg.model).cuda()\n\ncontrol_url = 'https://user-images.githubusercontent.com/28132635/230288866-99603172-04cb-47b3-8adb-d1aa532d1d2c.jpg'\ncontrol_img = mmcv.imread(control_url)\ncontrol = cv2.Canny(control_img, 100, 200)\ncontrol = control[:, :, None]\ncontrol = np.concatenate([control] * 3, axis=2)\ncontrol = Image.fromarray(control)\n\nprompt = 'Room with blue walls and a yellow ceiling.'\n\noutput_dict = controlnet.infer(prompt, control=control)\nsamples = output_dict['samples']\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name controlnet \\\n        --model-setting 1 \\\n        --text \"Room with blue walls and a yellow ceiling.\" \\\n        --control 'https://user-images.githubusercontent.com/28132635/230297033-4f5c32df-365c-4cf4-8e4f-1b76a4cbb0b7.png' \\\n        --result-out-dir demo_text2image_controlnet_canny_res.png\n```\n\n### 图生图的转换\n\nMMagic提供了使用图像翻译模型进行图像翻译的高级API。下面是构建Pix2Pix并获取翻译图像的示例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\neditor = MMagicInferencer('pix2pix')\nresults = editor.infer(img=img_path, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name pix2pix \\\n        --img ${IMAGE_PATH} \\\n        --result-out-dir ${SAVE_PATH}\n```\n\n### 3D感知生成\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nresult_out_dir = './resources/output/eg3d-output'\neditor = MMagicInferencer('eg3d')\nresults = editor.infer(result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n    --model-name eg3d \\\n    --result-out-dir ./resources/output/eg3d-output\n```\n\n### 图像超分\n\n图像超分辨率模型接受一张图像作为输入，并输出一张高分辨率图像。我们以 'esrgan' 为例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = './resources/input/restoration/0901x2.png'\nresult_out_dir = './resources/output/restoration/tutorial_restoration_esrgan_res.png'\neditor = MMagicInferencer('esrgan')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name esrgan \\\n        --img ${IMAGE_PATH} \\\n        --result-out-dir ${SAVE_PATH}\n```\n\n### 视频超分\n\n```python\nimport os\nfrom mmagic.apis import MMagicInferencer\nfrom mmengine import mkdir_or_exist\n\n# Create a MMagicInferencer instance and infer\nvideo = './resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4'\nresult_out_dir = './resources/output/video_super_resolution/tutorial_video_super_resolution_basicvsr_res.mp4'\nmkdir_or_exist(os.path.dirname(result_out_dir))\neditor = MMagicInferencer('basicvsr')\nresults = editor.infer(video=video, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name basicvsr \\\n        --video ./resources/input/video_restoration/QUuC4vJs_000084_000094_400x320.mp4 \\\n        --result-out-dir ./resources/output/video_restoration/demo_video_restoration_basicvsr_res.mp4\n```\n\n### 视频帧插值\n\n视频插值模型接受一个视频作为输入，并输出一个插值后的视频。我们以 'flavr' 为例。\n\n```python\nimport os\nfrom mmagic.apis import MMagicInferencer\nfrom mmengine import mkdir_or_exist\n\n# Create a MMagicInferencer instance and infer\nvideo = './resources/input/video_interpolation/b-3LLDhc4EU_000000_000010.mp4'\nresult_out_dir = './resources/output/video_interpolation/tutorial_video_interpolation_flavr_res.mp4'\nmkdir_or_exist(os.path.dirname(result_out_dir))\neditor = MMagicInferencer('flavr')\nresults = editor.infer(video=video, result_out_dir=result_out_dir)\n```\n\n### 图像修补\n\n修复模型接受一对屏蔽图像和屏蔽蒙版作为输入，并输出一个修复后的图像。我们以 'global_local' 为例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\nimg = './resources/input/matting/GT05.jpg'\ntrimap = './resources/input/matting/GT05_trimap.jpg'\n\n# 创建MMagicInferencer实例，并进行推理\nresult_out_dir = './resources/output/matting/tutorial_matting_gca_res.png'\neditor = MMagicInferencer('gca')\nresults = editor.infer(img=img, trimap=trimap, result_out_dir=result_out_dir)\n```\n\n### 图像抠图\n\n**抠图**模型接受一对图像和修剪映射作为输入，并输出一个 alpha 图像。我们以 'gca' 为例。\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\nimg = './resources/input/matting/GT05.jpg'\ntrimap = './resources/input/matting/GT05_trimap.jpg'\n\n# 创建MMagicInferencer实例，并进行推理\nresult_out_dir = './resources/output/matting/tutorial_matting_gca_res.png'\neditor = MMagicInferencer('gca')\nresults = editor.infer(img=img, trimap=trimap, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name gca  \\\n        --img ./resources/input/matting/GT05.jpg \\\n        --trimap ./resources/input/matting/GT05_trimap.jpg \\\n        --result-out-dir ./resources/output/matting/demo_matting_gca_res.png\n```\n\n### 图像恢复\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = './resources/input/restoration/0901x2.png'\nresult_out_dir = './resources/output/restoration/tutorial_restoration_nafnet_res.png'\neditor = MMagicInferencer('nafnet')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name nafnet \\\n        --img ./resources/input/restoration/0901x2.png \\\n        --result-out-dir ./resources/output/restoration/demo_restoration_nafnet_res.png\n```\n\n### 图像上色\n\n```python\nimport mmcv\nimport matplotlib.pyplot as plt\nfrom mmagic.apis import MMagicInferencer\n\n# Create a MMagicInferencer instance and infer\nimg = 'https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg'\nresult_out_dir = './resources/output/colorization/tutorial_colorization_res.png'\neditor = MMagicInferencer('inst_colorization')\nresults = editor.infer(img=img, result_out_dir=result_out_dir)\n```\n\n通过以下命令使用[demo/mmagic_inference_demo.py](https://github.com/open-mmlab/mmagic/blob/main/demo/mmagic_inference_demo.py)\n\n```shell\npython demo/mmagic_inference_demo.py \\\n        --model-name inst_colorization \\\n        --img https://github-production-user-asset-6210df.s3.amazonaws.com/49083766/245713512-de973677-2be8-4915-911f-fab90bb17c40.jpg \\\n        --result-out-dir demo_colorization_res.png\n```\n\n## 以前的版本\n\n如果您想使用已弃用的演示，请使用[MMagic v1.0.0rc7](https://github.com/open-mmlab/mmagic/tree/v1.0.0rc7)并参考[旧教程](https://github.com/open-mmlab/mmagic/blob/v1.0.0rc7/docs/en/user_guides/inference.md)。\n"
  },
  {
    "path": "docs/zh_cn/user_guides/metrics.md",
    "content": "# 教程 5：使用评价指标\n\nMMagic支持**17个指标**以评估模型质量。\n\n有关用法，请参阅[MMagic中的训练与测试](../user_guides/train_test.md)。\n\n在这里，我们将逐个介绍不同指标的详细信息。\n\n本文的结构如下:\n\n01. [MAE](#mae)\n02. [MSE](#mse)\n03. [PSNR](#psnr)\n04. [SNR](#snr)\n05. [SSIM](#ssim)\n06. [NIQE](#niqe)\n07. [SAD](#sad)\n08. [MattingMSE](#mattingmse)\n09. [GradientError](#gradienterror)\n10. [ConnectivityError](#connectivityerror)\n11. [FID and TransFID](#fid-and-transfid)\n12. [IS and TransIS](#is-and-transis)\n13. [Precision and Recall](#precision-and-recall)\n14. [PPL](#ppl)\n15. [SWD](#swd)\n16. [MS-SSIM](#ms-ssim)\n17. [Equivarience](#equivarience)\n\n## MAE\n\nMAE是图像的平均绝对误差。\n要使用MAE进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='MAE'),\n]\n```\n\n## MSE\n\nMSE是图像的均方误差。\n要使用MSE进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='MSE'),\n]\n```\n\n## PSNR\n\nPSNR是峰值信噪比。我们的实现方法来自https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio。\n要使用PSNR进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='PSNR'),\n]\n```\n\n## SNR\n\nSNR是信噪比。我们的实现方法来自 https://en.wikipedia.org/wiki/Signal-to-noise_ratio。\n要使用SNR进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='SNR'),\n]\n```\n\n## SSIM\n\nSSIM是图像的结构相似度，在[图像质量评估:从错误可见性到结构相似度](https://live.ece.utexas.edu/publications/2004/zwang_ssim_ieeeip2004.pdf)中提出。我们实现的结果与https://ece.uwaterloo.ca/~z70wang/research/ssim/官方发布的MATLAB代码相同。\n要使用SSIM进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='SSIM'),\n]\n```\n\n## NIQE\n\nNIQE是自然图像质量评估指标，在[制作'完全盲'图像质量分析仪](http://www.live.ece.utexas.edu/publications/2013/mittal2013.pdf)中提出。我们的实现可以产生几乎与官方MATLAB代码相同的结果:http://live.ece.utexas.edu/research/quality/niqe_release.zip。\n要使用NIQE进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='NIQE'),\n]\n```\n\n## SAD\n\nSAD是图像抠图的绝对误差和。该指标计算每个像素的绝对差和所有像素的总和。\n要使用SAD进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='SAD'),\n]\n```\n\n## MattingMSE\n\nMattingMSE是图像抠图的均方误差。\n要使用MattingMSE进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='MattingMSE'),\n]\n```\n\n## GradientError\n\nGradientError是用于评估alpha matte预测的梯度误差。\n要使用GradientError进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='GradientError'),\n]\n```\n\n## ConnectivityError\n\nConnectivityError是用于评估alpha matte预测的连通性误差。\n要使用ConnectivityError进行评估，请在配置文件中添加以下配置:\n\n```python\nval_evaluator = [\n    dict(type='ConnectivityError'),\n]\n```\n\n## FID 和 TransFID\n\nFréchet初始距离是两个图像数据集之间相似度的度量。它被证明与人类对视觉质量的判断有很好的相关性，最常用于评估生成对抗网络样本的质量。FID是通过计算两个高斯函数之间的Fréchet距离来计算的，这些高斯函数适合于Inception网络的特征表示。\n\n在`MMagic`中，我们提供了两个版本的FID计算。一个是常用的PyTorch版本，另一个用于StyleGAN。同时，我们在StyleGAN2-FFHQ1024模型中比较了这两种实现之间的差异(详细信息可以在这里找到\\[https://github.com/open-mmlab/mmagic/blob/main/configs/styleganv2/README.md\\])。幸运的是，最终结果只是略有不同。因此，我们建议用户采用更方便的PyTorch版本。\n\n**关于PyTorch版本和Tero版本:** 常用的PyTorch版本采用修改后的InceptionV3网络提取真假图像特征。然而，Tero的FID需要Tensorflow InceptionV3的[脚本模块](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt)。注意，应用此脚本模块需要' PyTorch >= 1.6.0 '。\n\n**关于提取真实的初始数据:** 为了方便用户，在测试时自动提取真实的特征并保存在本地，存储的特征在下次测试时自动读取。具体来说，我们将根据用于计算实际特性的参数计算一个哈希值，并使用哈希值来标记特性文件，在测试时，如果' inception_pkl '没有设置，我们将在' MMAGIC_CACHE_DIR ' (~/.cache/openmmlab/mmagic/)中寻找该特性。如果未找到缓存的初始pkl，则将执行提取。\n\n要使用FID指标，请在配置文件中添加以下配置:\n\n```python\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n```\n\n如果您在一台新机器上工作，那么您可以复制'MMAGIC_CACHE_DIR'中的'pkl'文件，将它们复制到新机器并设置'inception_pkl'字段。\n\n```python\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        inception_pkl=\n        'work_dirs/inception_pkl/inception_state-capture_mean_cov-full-33ad4546f8c9152e4b3bdb1b0c08dbaf.pkl',  # copied from old machine\n        sample_model='ema')\n]\n```\n\n'TransFID'与'FID'的用法相同，但TransFID是为'Pix2Pix'和'CycleGAN'等翻译模型设计的，适用于我们的评估器。更多信息您可以参考[evaluation](../user_guides/train_test.md)。\n\n## IS 和 TransIS\n\nInception评分是评估生成图像质量的客观指标，在[改进的训练GANs技术](https://arxiv.org/pdf/1606.03498.pdf)中提出。它使用一个InceptionV3模型来预测生成的图像的类别，并假设: 1)如果图像质量高，它将被归类到特定的类别。2)如果图像具有较高的多样性，则图像的类别范围将很广。因此，条件概率和边际概率的kl -散度可以指示生成图像的质量和多样性。您可以在'metrics.py'中看到完整的实现，它指向https://github.com/sbarratt/inception-score-pytorch/blob/master/inception_score.py。\n如果您想使用'IS'指标评估模型，请在配置文件中添加以下配置:\n\n```python\n# at the end of the configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py\nmetrics = [\n    xxx,\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n```\n\n需要注意的是，Inception V3的选择和图像大小的调整方法会显著影响最终的IS评分。因此，我们强烈建议用户可以下载[Tero's script model of Inception V3](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt)(加载此脚本模型需要torch >= 1.6)，并使用'Bicubic'插值与'Pillow'后端。\n\n对应于config，您可以设置'resize_method'和'use_pillow_resize'用于图像大小的调整。您也可以将'inception_style'设置为'StyleGAN'用于推荐的tero的初始模型，或'PyTorch'用于torchvision的实现。对于没有互联网的环境，您可以下载初始的权重，并将'inception_path'设置为您的初始模型。\n\n我们还调查了数据加载管线和预训练的Inception V3版本对IS结果的影响。所有IS都在同一组图像上进行评估，这些图像是从ImageNet数据集中随机选择的。\n\n<details> <summary> 显示对比结果 </summary>\n\n|                            Code Base                            | Inception V3 Version | Data Loader Backend | Resize Interpolation Method |          IS           |\n| :-------------------------------------------------------------: | :------------------: | :-----------------: | :-------------------------: | :-------------------: |\n|   [OpenAI (baseline)](https://github.com/openai/improved-gan)   |      Tensorflow      |       Pillow        |       Pillow Bicubic        | **312.255 +/- 4.970** |\n| [StyleGAN-Ada](https://github.com/NVlabs/stylegan2-ada-pytorch) | Tero's Script Model  |       Pillow        |       Pillow Bicubic        |   311.895 +/ 4.844    |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |        cv2 Bilinear         |   322.932 +/- 2.317   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |         cv2 Bicubic         |   324.604 +/- 5.157   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |         cv2         |       Pillow Bicubic        |   318.161 +/- 5.330   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |       Pillow Bilinear       |   313.126 +/- 5.449   |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |        cv2 Bilinear         |    318.021+/-3.864    |\n|                          mmagic (Ours)                          |  Pytorch Pretrained  |       Pillow        |       Pillow Bicubic        |   317.997 +/- 5.350   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |        cv2 Bilinear         |   318.879 +/- 2.433   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |         cv2 Bicubic         |   316.125 +/- 5.718   |\n|                          mmagic (Ours)                          | Tero's Script Model  |         cv2         |       Pillow Bicubic        | **312.045 +/- 5.440** |\n|                          mmagic (Ours)                          | Tero's Script Model  |       Pillow        |       Pillow Bilinear       |   308.645 +/- 5.374   |\n|                          mmagic (Ours)                          | Tero's Script Model  |       Pillow        |       Pillow Bicubic        |   311.733 +/- 5.375   |\n\n</details>\n\n'TransIS'与'IS'的用法相同，但TransIS是为'Pix2Pix'和'CycleGAN'这样的翻译模型设计的，这是为我们的评估器改编的。更多信息可参考[evaluation](../user_guides/train_test.md)。\n\n## Precision and Recall\n\n我们的'Precision and Recall'实现遵循StyleGAN2中使用的版本。在该度量中，采用VGG网络对图像进行特征提取。不幸的是，我们还没有发现PyTorch VGG实现与StyleGAN2中使用的Tero版本产生类似的结果。(关于差异，请参阅这个[文件](https://github.com/open-mmlab/mmagicing/blob/main/configs/styleganv2/README.md)。)因此，在我们的实现中，我们默认采用[Teor's VGG](https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/vgg16.pt)网络。需要注意的是，应用这个脚本模块需要'PyTorch >= 1.6.0'。如果使用较低的PyTorch版本，我们将使用PyTorch官方VGG网络进行特征提取。\n要使用' P&R '进行评估，请在配置文件中添加以下配置:\n\n```python\nmetrics = [\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K')\n]\n```\n\n## PPL\n\n当在两个随机输入之间进行插值时，感知路径长度测量连续图像（其VGG16嵌入）之间的差异。剧烈的变化意味着多个特征一起发生了变化，它们可能会叠加在一起。通过实验表明，较小的PPL分数表明整体图像质量较高。\n作为该指标的基础，我们使用基于感知的成对图像距离，该距离被计算为两个VGG16嵌入之间的加权差，其中权重被拟合，从而评价指标与人类的感知相似性判断一致。\n如果我们将潜在空间插值路径细分为线性段，我们可以将该分段路径的总感知长度定义为每个段上感知差异的总和，并且感知路径长度的自然定义将是无限细分下的总和的极限，但在实践中，我们使用一个小的细分`` $`\\epsilon=10^｛-4｝`$ ``来近似它。\n因此，潜在`space`Z中所有可能端点的平均感知路径长度为\n\n`` $$`L_Z = E[\\frac{1}{\\epsilon^2}d(G(slerp(z_1,z_2;t))), G(slerp(z_1,z_2;t+\\epsilon)))]`$$ ``\n\n以类似的方式计算潜在 `space` W中的平均感知路径长度：:\n\n`` $$`L_Z = E[\\frac{1}{\\epsilon^2}d(G(slerp(z_1,z_2;t))), G(slerp(z_1,z_2;t+\\epsilon)))]`$$ ``\n\n当 `` $`z_1, z_2 \\sim P(z)`$ ``， 如果我们设置 `sampling` 为 ` full`，  则 `` $` t \\sim U(0,1)`$ ``， 如果设置 `sampling` 为 `end`，则`` $` t \\in \\{0,1\\}`$ ``。 `` $` G`$ `` 是生成器(i.e. `` $` g \\circ f`$ `` 用于style-based网络)， `` $` d(.,.)`$ `` 用于计算结果图像之间的感知距离。我们通过取100,000个样本来计算期望(在代码中将' num_images '设置为50,000)。\n\n您可以在'metrics.py'中找到完整的实现，参考https://github.com/rosinality/stylegan2-pytorch/blob/master/ppl.py。\n如果您想使用'PPL'指标评估模型，请在配置文件中添加以下配置:\n\n```python\n# at the end of the configs/styleganv2/stylegan2_c2_ffhq_1024_b4x8.py\nmetrics = [\n    xxx,\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n```\n\n## SWD\n\n切片Wasserstein距离是概率分布的差异度量，距离越小表示生成的图像越真实。我们获得每个图像的拉普拉斯金字塔，并从拉普拉斯金字塔中提取小块作为描述符，然后可以通过获取真实和伪描述符切片的Wasserstein距离来计算SWD。\n您可以在'metrics.py'中看到完整的实现，参考https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/sliced_wasserstein.py。\n如果您想使用'SWD'指标评估模型，请在配置文件中添加以下配置:\n\n```python\n# at the end of the configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\nmetrics = [\n    dict(\n        type='SWD',\n        prefix='swd',\n        fake_nums=16384,\n        sample_model='orig',\n        image_shape=(3, 64, 64))\n]\n```\n\n## MS-SSIM\n\n采用多尺度结构相似度来衡量两幅图像的相似度。我们在这里使用MS-SSIM来衡量生成图像的多样性，MS-SSIM得分低表示生成图像的多样性高。您可以在'metrics.py'中看到完整的实现，参考https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py。\n如果您想使用'MS-SSIM'指标评估模型，请在配置文件中添加以下配置:\n\n```python\n# at the end of the configs/dcgan/dcgan_1xb128-5epoches_lsun-bedroom-64x64.py\nmetrics = [\n    dict(\n        type='MS_SSIM', prefix='ms-ssim', fake_nums=10000,\n        sample_model='orig')\n]\n```\n\n## Equivarience\n\n生成模型的等价性是指模型正变换和几何变换的互换性。目前这个指标只针对StyleGANv3计算，您可以在'metrics.py'中看到完整的实现，参考https://github.com/NVlabs/stylegan3/blob/main/metrics/equivariance.py。\n如果您想使用'Equivarience'指标评估模型，请在配置文件中添加以下配置:\n\n```python\n# at the end of the configs/styleganv3/stylegan3-t_gamma2.0_8xb4-fp16-noaug_ffhq-256x256.py\nmetrics = [\n    dict(\n        type='Equivariance',\n        fake_nums=50000,\n        sample_mode='ema',\n        prefix='EQ',\n        eq_cfg=dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True))\n]\n```\n"
  },
  {
    "path": "docs/zh_cn/user_guides/train_test.md",
    "content": "# 教程 4：在MMagic环境下训练与测试\n\n在该部分中，您将学到如何在MMagic环境下完成训练与测试\n\n我们提供如下教程：\n\n- [预先准备](#预先准备)\n- [在MMagic中测试模型](#在MMagic中测试模型)\n  - [在单个GPU上测试](#在单个GPU上测试)\n  - [在多个GPU上测试](#在多个GPU上测试)\n  - [在Slurm上测试](#在Slurm上测试)\n  - [使用特定指标进行测试](#使用特定指标进行测试)\n- [在MMagic中训练模型](#在MMagic中训练模型)\n  - [在单个GPU上训练](#在单个GPU上训练)\n  - [在多个GPU上训练](#在多个GPU上训练)\n  - [在多个节点上训练](#在多个节点上训练)\n  - [在Slurm上训练](#在Slurm上训练)\n  - [使用特定的评估指标进行训练](#使用特定的评估指标进行训练)\n\n## 预先准备\n\n用户需要首先 [准备数据集](../user_guides/dataset_prepare.md) 从而能够在MMagic环境中训练和测试。\n\n## 在MMagic中测试模型\n\n### 在单个GPU上测试\n\n您可以通过如下命令使用单个GPU来测试预训练模型。\n\n```shell\npython tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE}\n```\n\n例如：\n\n```shell\npython tools/test.py configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\n### 在多个GPU上测试\n\nMMagic支持使用多个GPU测试，能够极大地节约模型测试时间。\n可以通过如下命令使用多个GPU来测试预训练模型。\n\n```shell\n./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM}\n```\n\n例如：\n\n```shell\n./tools/dist_test.sh configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\n### 在Slurm上测试\n\n如果您在由 [slurm](https://slurm.schedmd.com/) 管理的集群上运行MMagic，可以使用脚本`slurm_test.sh`。（此脚本还支持单机测试。）\n\n```shell\n[GPUS=${GPUS}] ./tools/slurm_test.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${CHECKPOINT_FILE}\n```\n\n下面是一个使用8个GPU在“dev”分区上测试一个示例模型的例子，作业名称为“test”。\n\n```shell\nGPUS=8 ./tools/slurm_test.sh dev test configs/example_config.py work_dirs/example_exp/example_model_20200202.pth\n```\n\n您可以检查 [slurm_test.sh](../../../tools/slurm_test.sh) 以获取完整的参数和环境变量。\n\n### 使用特定指标进行测试\n\nMMagic 提供各种评**估值指标**，例如：MS-SSIM、SWD、IS、FID、Precision&Recall、PPL、Equivarience、TransFID、TransIS等。\n我们在[tools/test.py](https://github.com/open-mmlab/mmagic/tree/main/tools/test.py)中为所有模型提供了统一的评估脚本。\n如果用户想用一些指标来评估他们的模型，你可以像这样将 `metrics` 添加到你的配置文件中:\n\n```python\n# 在文件 configs/styleganv2/stylegan2_c2_ffhq_256_b4x8_800k.py 的末尾\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type='PrecisionAndRecall', fake_nums=50000, prefix='PR-50K'),\n    dict(type='PerceptualPathLength', fake_nums=50000, prefix='ppl-w')\n]\n```\n\n如上所述, `metrics` 由多个指标字典组成。 每个指标包含 `type` 来表示其类别。 `fake_nums` 表示模型生成的图像数量。\n有些指标会输出一个结果字典，您也可以设置 `prefix` 来指定结果的前缀。\n如果将FID的前缀设置为 `FID-Full-50k`，则输出的示例可能是\n\n```bash\nFID-Full-50k/fid: 3.6561  FID-Full-50k/mean: 0.4263  FID-Full-50k/cov: 3.2298\n```\n\n然后用户可以使用下面的命令测试模型:\n\n```shell\nbash tools/dist_test.sh ${CONFIG_FILE} ${CKPT_FILE}\n```\n\n如果您在 slurm 环境中，请使用如下命令切换到 [tools/slurm_test.sh](https://github.com/open-mmlab/mmagic/tree/main/tools/slurm_test.sh)：\n\n```shell\nsh slurm_test.sh ${PLATFORM} ${JOBNAME} ${CONFIG_FILE} ${CKPT_FILE}\n```\n\n## 在MMagic中训练模型\n\nMMagic支持多种训练方式:\n\n1. [在单个GPU上训练](#在单个GPU上训练)\n2. [在单个GPU上训练](#在单个GPU上训练)\n3. [在多个节点上训练](#在多个节点上训练)\n4. [在Slurm上训练](#在Slurm上训练)\n\nSpecifically, all outputs (log files and checkpoints) will be saved to the working directory,\nwhich is specified by `work_dir` in the config file.\n\n### 在单个GPU上训练\n\n```shell\nCUDA_VISIBLE=0 python tools/train.py configs/example_config.py --work-dir work_dirs/example\n```\n\n### 在多个节点上训练\n\n要在多台机器上启动分布式训练，这些机器可以通过IP访问，运行以下命令:\n\n在第一台机器上:\n\n```shell\nNNODES=2 NODE_RANK=0 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS\n```\n\n在第二台机器上:\n\n```shell\nNNODES=2 NODE_RANK=1 PORT=$MASTER_PORT MASTER_ADDR=$MASTER_ADDR tools/dist_train.sh $CONFIG $GPUS\n```\n\n为了提高网络通信速度，建议使用高速网络硬件，如Infiniband。\n请参考 [PyTorch docs](https://pytorch.org/docs/1.11/distributed.html#launch-utility) 以获取更多信息。\n\n### 在多个GPU上训练\n\n```shell\n./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]\n```\n\n### 在Slurm上训练\n\n如果您在由 [slurm](https://slurm.schedmd.com/) 管理的集群上运行MMagic，可以使用脚本`slurm_train.sh`。（此脚本还支持单机测试。）\n\n```shell\n[GPUS=${GPUS}] ./tools/slurm_train.sh ${PARTITION} ${JOB_NAME} ${CONFIG_FILE} ${WORK_DIR}\n```\n\n下面是一个使用8个gpu在dev分区上训练inpainting模型的示例。\n\n```shell\nGPUS=8 ./tools/slurm_train.sh dev configs/inpainting/gl_places.py /nfs/xxxx/gl_places_256\n```\n\n你可以在 [slurm_train.sh](https://github.com/open-mmlab/mmagic/blob/master/tools/slurm_train.sh) 上查阅完整参数和环境变量。\n\n### 可选参数\n\n- `--amp`：此参数用于固定精度训练。\n- `--resume`：此参数用于在训练中止时自动恢复。\n\n## 使用特定的评估指标进行训练\n\n受益于 `mmengine`的 `Runner`，我们可以在训练过程中对模型进行简单的评估，如下所示。\n\n```python\n# 定义指标\nmetrics = [\n    dict(\n        type='FrechetInceptionDistance',\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN')\n]\n\n# 定义dataloader\nval_dataloader = dict(\n    batch_size=128,\n    num_workers=8,\n    dataset=dict(\n        type='BasicImageDataset',\n        data_root='data/celeba-cropped/',\n        pipeline=[\n            dict(type='LoadImageFromFile', key='img'),\n            dict(type='Resize', scale=(64, 64)),\n            dict(type='PackInputs')\n        ]),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\n# 定义 val interval\ntrain_cfg = dict(by_epoch=False, val_begin=1, val_interval=10000)\n\n# 定义 val loop 和 evaluator\nval_cfg = dict(type='MultiValLoop')\nval_evaluator = dict(type='Evaluator', metrics=metrics)\n```\n\n可以设置 `val_begin` 和 `val_interval` 来调整何时开始验证和验证间隔。\n\n有关指标的详细信息，请参考 [metrics' guide](./metrics.md).\n"
  },
  {
    "path": "docs/zh_cn/user_guides/useful_tools.md",
    "content": "# 教程 7：实用工具（待更新）\n\n我们在 `tools/` 目录下提供了很多有用的工具。\n\n### 获取 FLOP 和参数量（实验性）\n\n我们提供了一个改编自 [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) 的脚本来计算模型的 FLOP 和参数量。\n\n```shell\npython tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]\n```\n\n例如，\n\n```shell\npython tools/get_flops.py configs/resotorer/srresnet.py --shape 40 40\n```\n\n你会得到以下的结果。\n\n```\n==============================\nInput shape: (3, 40, 40)\nFlops: 4.07 GMac\nParams: 1.52 M\n==============================\n```\n\n**注**：此工具仍处于实验阶段，我们不保证数字正确。 您可以将结果用于简单的比较，但在技术报告或论文中采用它之前，请仔细检查它。\n\n(1) FLOPs 与输入形状有关，而参数量与输入形状无关。默认输入形状为 (1, 3, 250, 250)。\n(2) 一些运算符不计入 FLOP，如 GN 和自定义运算符。\n你可以通过修改 [`mmcv/cnn/utils/flops_counter.py`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) 来添加对新运算符的支持。\n\n### 发布模型\n\n在将模型上传到 AWS 之前，您可能需要\n(1) 将模型权重转换为 CPU tensors, (2) 删除优化器状态，和\n(3) 计算模型权重文件的哈希并将哈希 ID 附加到文件名。\n\n```shell\npython tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME}\n```\n\n例如，\n\n```shell\npython tools/publish_model.py work_dirs/example_exp/latest.pth example_model_20200202.pth\n```\n\n最终输出文件名将是 `example_model_20200202-{hash id}.pth`.\n\n### 转换为 ONNX（实验性）\n\n我们提供了一个脚本将模型转换为 [ONNX](https://github.com/onnx/onnx) 格式。 转换后的模型可以通过 [Netron](https://github.com/lutzroeder/netron) 等工具进行可视化。此外，我们还支持比较 Pytorch 和 ONNX 模型之间的输出结果。\n\n```bash\npython tools/pytorch2onnx.py\n    ${CFG_PATH} \\\n    ${CHECKPOINT_PATH} \\\n    ${MODEL_TYPE} \\\n    ${IMAGE_PATH} \\\n    --trimap-path ${TRIMAP_PATH} \\\n    --output-file ${OUTPUT_ONNX} \\\n    --show \\\n    --verify \\\n    --dynamic-export\n```\n\n参数说明：\n\n- `config` : 模型配置文件的路径。\n- `checkpoint` : 模型模型权重文件的路径。\n- `model_type` : 配置文件的模型类型，选项： `inpainting`, `mattor`, `restorer`, `synthesizer`。\n- `image_path` : 输入图像文件的路径。\n- `--trimap-path` : 输入三元图文件的路径，用于 mattor 模型。\n- `--output-file`: 输出 ONNX 模型的路径。默认为 `tmp.onnx`。\n- `--opset-version` : ONNX opset 版本。默认为 11。\n- `--show`: 确定是否打印导出模型的架构。默认为 `False`。\n- `--verify`: 确定是否验证导出模型的正确性。默认为 `False`。\n- `--dynamic-export`: 确定是否导出具有动态输入和输出形状的 ONNX 模型。默认为 `False`。\n\n**注**：此工具仍处于试验阶段。目前不支持某些自定义运算符。我们现在只支持 `mattor` 和 `restorer`。\n\n#### 支持导出到 ONNX 的模型列表\n\n下表列出了保证可导出到 ONNX 并可在 ONNX Runtime 中运行的模型。\n\n|   模型   |                                                                               配置                                                                               | 动态形状 | 批量推理 | 备注 |\n| :------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------: | :------: | :--: |\n|  ESRGAN  |       [esrgan_x4c64b23g32_g1_400k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py)       |    Y     |    Y     |      |\n|  ESRGAN  | [esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/esrgan/esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py) |    Y     |    Y     |      |\n|  SRCNN   |            [srcnn_x4k915_g1_1000k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/srcnn/srcnn_x4k915_g1_1000k_div2k.py)             |    Y     |    Y     |      |\n|   DIM    |          [dim_stage3_v16_pln_1x1_1000k_comp1k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/dim/dim_stage3_v16_pln_1x1_1000k_comp1k.py)           |    Y     |    Y     |      |\n|   GCA    |                     [gca_r34_4x10_200k_comp1k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/gca/gca_r34_4x10_200k_comp1k.py)                      |    N     |    Y     |      |\n| IndexNet |             [indexnet_mobv2_1x16_78k_comp1k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/indexnet/indexnet_mobv2_1x16_78k_comp1k.py)             |    Y     |    Y     |      |\n\n**注**：\n\n- *以上所有模型均使用 Pytorch==1.6.0 和 onnxruntime==1.5.1*\n- 如果您遇到上面列出的模型的任何问题，请创建一个 issue，我们会尽快处理。对于列表中未包含的型号，请尝试自行解决。\n- 由于此功能是实验性的并且可能会快速更改，请始终尝试使用最新的 `mmcv` 和 `mmagic`。\n\n### 将 ONNX 转换为 TensorRT（实验性）\n\n我们还提供了将 [ONNX](https://github.com/onnx/onnx) 模型转换为 [TensorRT](https://github.com/NVIDIA/TensorRT) 格式的脚本。 此外，我们支持比较 ONNX 和 TensorRT 模型之间的输出结果。\n\n```bash\npython tools/onnx2tensorrt.py\n    ${CFG_PATH} \\\n    ${MODEL_TYPE} \\\n    ${IMAGE_PATH} \\\n    ${INPUT_ONNX} \\\n    --trt-file ${OUT_TENSORRT} \\\n    --max-shape INT INT INT INT \\\n    --min-shape INT INT INT INT \\\n    --workspace-size INT \\\n    --fp16 \\\n    --show \\\n    --verify \\\n    --verbose\n```\n\n参数说明：\n\n- `config` : 模型配置文件的路径。\n- `model_type` :配置文件的模型类型，选项： `inpainting`, `mattor`, `restorer`, `synthesizer`。\n- `img_path` : 输入图像文件的路径。\n- `onnx_file` : 输入 ONNX 文件的路径。\n- `--trt-file` : 输出 TensorRT 模型的路径。默认为 `tmp.trt`。\n- `--max-shape` : 模型输入的最大形状。\n- `--min-shape` : 模型输入的最小形状。\n- `--workspace-size`: 以 GiB 为单位的最大工作空间大小。默认为 1 GiB。\n- `--fp16`: 确定是否以 fp16 模式导出 TensorRT。默认为 `False`。\n- `--show`: 确定是否显示 ONNX 和 TensorRT 的输出。默认为 `False`。\n- `--verify`: 确定是否验证导出模型的正确性。默认为 `False`。\n- `--verbose`: 确定在创建 TensorRT 引擎时是否详细记录日志消息。默认为 `False`。\n\n**注**：此工具仍处于试验阶段。 目前不支持某些自定义运算符。 我们现在只支持 `restorer`。 在生成 SRCNN 的 ONNX 文件时，将 SCRNN 模型中的 'bicubic' 替换为 'bilinear' \\[此处\\](https://github.com/open-mmlab/mmagic/blob/764e6065e315b7d0033762038fcbf0bb1c570d4d/mmagic.bones/modelsrnn py#L40）。 因为 TensorRT 目前不支持 bicubic 插值，最终性能将下降约 4%。\n\n#### 支持导出到 TensorRT 的模型列表\n\n下表列出了保证可导出到 TensorRT 引擎并可在 TensorRT 中运行的模型。\n\n|  模型  |                                                                     配置                                                                      | 动态形状 | 批量推理 |                 备注                  |\n| :----: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :------: | :------: | :-----------------------------------: |\n| ESRGAN | [esrgan_x4c64b23g32_g1_400k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py) |    Y     |    Y     |                                       |\n| ESRGAN | [esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/esrgan/esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py) |    Y     |    Y     |                                       |\n| SRCNN  |   [srcnn_x4k915_g1_1000k_div2k.py](https://github.com/open-mmlab/mmagic/blob/master/configs/restorers/srcnn/srcnn_x4k915_g1_1000k_div2k.py)   |    Y     |    Y     | 'bicubic' 上采样必须替换为 'bilinear' |\n\n**注**：\n\n- *以上所有模型均使用 Pytorch==1.8.1、onnxruntime==1.7.0 和 tensorrt==7.2.3.4 进行测试*\n- 如果您遇到上面列出的模型的任何问题，请创建一个问题，我们会尽快处理。 对于列表中未包含的型号，请尝试自行解决。\n- 由于此功能是实验性的并且可能会快速更改，因此请始终尝试使用最新的 `mmcv` 和 `mmagic`。\n\n### 评估 ONNX 和 TensorRT 模型（实验性）\n\n我们在 `tools/deploy_test.py` 中提供了评估 TensorRT 和 ONNX 模型的方法。\n\n#### 先决条件\n\n要评估 ONNX 和 TensorRT 模型，应先安装 onnx、onnxruntime 和 TensorRT。遵循 [mmcv 中的 ONNXRuntime](https://mmcv.readthedocs.io/en/latest/onnxruntime_op.html) 和 \\[mmcv 中的 TensorRT 插件\\](https://github.com/open-mmlab/mmcv/blob/master/docs/tensorrt_plugin.md%EF%BC%89%E4%BD%BF%E7%94%A8 ONNXRuntime 自定义操作和 TensorRT 插件安装 `mmcv-full`。\n\n#### 用法\n\n```bash\npython tools/deploy_test.py \\\n    ${CONFIG_FILE} \\\n    ${MODEL_PATH} \\\n    ${BACKEND} \\\n    --out ${OUTPUT_FILE} \\\n    --save-path ${SAVE_PATH} \\\n    ----cfg-options ${CFG_OPTIONS} \\\n```\n\n#### 参数说明：\n\n- `config`: 模型配置文件的路径。\n- `model`: TensorRT 或 ONNX 模型文件的路径。\n- `backend`: 用于测试的后端，选择 tensorrt 或 onnxruntime。\n- `--out`: pickle 格式的输出结果文件的路径。\n- `--save-path`: 存储图像的路径，如果没有给出，则不会保存图像。\n- `--cfg-options`: 覆盖使用的配置文件中的一些设置，`xxx=yyy` 格式的键值对将被合并到配置文件中。\n\n#### 结果和模型\n\n<table border=\"1\" class=\"docutils\">\n\t<tr>\n\t    <th align=\"center\">Model</th>\n\t    <th align=\"center\">Config</th>\n\t    <th align=\"center\">Dataset</th>\n\t    <th align=\"center\">Metric</th>\n\t    <th align=\"center\">PyTorch</th>\n\t    <th align=\"center\">ONNX Runtime</th>\n      <th align=\"center\">TensorRT FP32</th>\n      <th align=\"center\">TensorRT FP16</th>\n\t</tr>\n    <tr>\n\t    <td align=\"center\" rowspan=\"6\">ESRGAN</td>\n\t    <td align=\"center\" rowspan=\"6\">\n            <code>esrgan_x4c64b23g32_g1_400k_div2k.py</code>\n        </td>\n\t    <td align=\"center\" rowspan=\"2\">Set5</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">28.2700</td>\n        <td align=\"center\">28.2619</td>\n        <td align=\"center\">28.2619</td>\n        <td align=\"center\">28.2616</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.7778</td>\n        <td align=\"center\">0.7784</td>\n        <td align=\"center\">0.7784</td>\n        <td align=\"center\">0.7783</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">Set14</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">24.6328</td>\n        <td align=\"center\">24.6290</td>\n        <td align=\"center\">24.6290</td>\n        <td align=\"center\">24.6274</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.6491</td>\n        <td align=\"center\">0.6494</td>\n        <td align=\"center\">0.6494</td>\n        <td align=\"center\">0.6494</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">DIV2K</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">26.6531</td>\n        <td align=\"center\">26.6532</td>\n        <td align=\"center\">26.6532</td>\n        <td align=\"center\">26.6532</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.7340</td>\n        <td align=\"center\">0.7340</td>\n        <td align=\"center\">0.7340</td>\n        <td align=\"center\">0.7340</td>\n    </tr>\n    <tr>\n\t    <td align=\"center\" rowspan=\"6\">ESRGAN</td>\n\t    <td align=\"center\" rowspan=\"6\">\n            <code>esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py</code>\n        </td>\n\t    <td align=\"center\" rowspan=\"2\">Set5</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">30.6428</td>\n        <td align=\"center\">30.6307</td>\n        <td align=\"center\">30.6307</td>\n        <td align=\"center\">30.6305</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.8559</td>\n        <td align=\"center\">0.8565</td>\n        <td align=\"center\">0.8565</td>\n        <td align=\"center\">0.8566</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">Set14</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">27.0543</td>\n        <td align=\"center\">27.0422</td>\n        <td align=\"center\">27.0422</td>\n        <td align=\"center\">27.0411</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.7447</td>\n        <td align=\"center\">0.7450</td>\n        <td align=\"center\">0.7450</td>\n        <td align=\"center\">0.7449</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">DIV2K</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">29.3354</td>\n        <td align=\"center\">29.3354</td>\n        <td align=\"center\">29.3354</td>\n        <td align=\"center\">29.3339</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.8263</td>\n        <td align=\"center\">0.8263</td>\n        <td align=\"center\">0.8263</td>\n        <td align=\"center\">0.8263</td>\n    </tr>\n    <tr>\n\t    <td align=\"center\" rowspan=\"6\">SRCNN</td>\n\t    <td align=\"center\" rowspan=\"6\">\n            <code>srcnn_x4k915_g1_1000k_div2k.py</code>\n        </td>\n\t    <td align=\"center\" rowspan=\"2\">Set5</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">28.4316</td>\n        <td align=\"center\">28.4120</td>\n        <td align=\"center\">27.2144</td>\n        <td align=\"center\">27.2127</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.8099</td>\n        <td align=\"center\">0.8106</td>\n        <td align=\"center\">0.7782</td>\n        <td align=\"center\">0.7781</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">Set14</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">25.6486</td>\n        <td align=\"center\">25.6367</td>\n        <td align=\"center\">24.8613</td>\n        <td align=\"center\">24.8599</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.7014</td>\n        <td align=\"center\">0.7015</td>\n        <td align=\"center\">0.6674</td>\n        <td align=\"center\">0.6673</td>\n    </tr>\n    <tr>\n        <td align=\"center\" rowspan=\"2\">DIV2K</td>\n        <td align=\"center\">PSNR</td>\n        <td align=\"center\">27.7460</td>\n        <td align=\"center\">27.7460</td>\n        <td align=\"center\">26.9891</td>\n        <td align=\"center\">26.9862</td>\n    </tr>\n    <tr>\n        <td align=\"center\">SSIM</td>\n        <td align=\"center\">0.7854</td>\n        <td align=\"center\">0.78543</td>\n        <td align=\"center\">0.7605</td>\n        <td align=\"center\">0.7604</td>\n    </tr>\n</table>\n\n**注**：\n\n- 所有 ONNX 和 TensorRT 模型都使用数据集上的动态形状进行评估，图像根据原始配置文件进行预处理。\n- 此工具仍处于试验阶段，我们目前仅支持 `restorer`。\n"
  },
  {
    "path": "docs/zh_cn/user_guides/visualization.md",
    "content": "# 教程 6：可视化\n\n图像的可视化是衡量图像处理、编辑和合成质量的重要手段。\n在配置文件中使用 `visualizer` 可以在训练或测试时保存可视化结果。您可以跟随[MMEngine文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/advanced_tutorials/visualization.md)学习可视化的用法。MMagic提供了一套丰富的可视化功能。\n在本教程中，我们将介绍MMagic提供的可视化函数的用法。\n\n- [教程6:可视化](#教程6:可视化)\n  - [概述](#概述)\n    - [GAN的可视化配置](#gan的可视化配置)\n    - [图像翻译模型的可视化配置](#图像翻译模型的可视化配置)\n    - [扩散模型的可视化配置](#扩散模型的可视化配置)\n    - [图像补全模型的可视化配置](#图像补全模型的可视化配置)\n    - [图像抠图模型的可视化配置](#图像抠图模型的可视化配置)\n    - [SISR/VSR/VFI等模型的可视化配置](#sisrvsrvfi等模型的可视化配置)\n  - [可视化钩子](#可视化钩子)\n  - [可视化器](#可视化器)\n  - [可视化后端](#可视化后端)\n    - [在不同的存储后端可视化](#在不同的存储后端可视化)\n\n## 概述\n\n建议先学习 [设计文档](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/design/visualization.md) 里关于可视化的基本概念。\n\n在MMagic中，训练或测试过程的可视化需要配置三个组件:`VisualizationHook`、`Visualizer`和`VisBackend`, 如下图表展示了 `Visualizer` 和 `VisBackend` 的关系。\n\n<div align=\"center\">\n<img src=\"https://user-images.githubusercontent.com/17425982/163327736-f7cb3b16-ef07-46bc-982a-3cc7495e6c82.png\" width=\"800\" />\n</div>\n\n**VisualizationHook** 在训练期间以固定的间隔获取模型输出的可视化结果，并将其传递给**Visualizer**。\n**Visualizer** 负责将原始可视化结果转换为所需的类型(png, gif等)，然后将其传输到**VisBackend**进行存储或显示。\n\n### GAN的可视化配置\n\n对于像`StyleGAN`和`SAGAN`这样的GAN模型，通常的配置如下所示:\n\n```python\n# 可视化钩子\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,  # 配置可视化勾子的间隔数\n        fixed_input=True,  # 是否固定噪声输入生成图像\n        vis_kwargs_list=dict(type='GAN', name='fake_img')  # 对于GAN模型预先定义可视化参数\n    )\n]\n# 可视化后端\nvis_backends = [\n    dict(type='VisBackend'),  # 可视化后端用于存储。\n    dict(type='WandbVisBackend',  # 可以上传至Wandb的可视化后端\n        init_kwargs=dict(\n            project='MMagic',   # Wandb项目名\n            name='GAN-Visualization-Demo'  # Wandb实验命名\n        ))\n]\n# 可视化器\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\n如果您将指数移动平均(EMA)应用于生成器，并希望可视化EMA模型，您可以修改`VisualizationHook`的配置，如下所示:\n\n```python\ncustom_hooks = [\n   dict(\n       type='VisualizationHook',\n       interval=5000,\n       fixed_input=True,\n       # 同时在`fake_img`中可视化ema以及orig\n       vis_kwargs_list=dict(\n           type='Noise',\n           name='fake_img',  # 使用`fake_img`保存图片\n           sample_model='ema/orig',  # 对于`NoiseSampler`特别定义参数\n           target_keys=['ema.fake_img', 'orig.fake_img']  # 指定的可视化的键值\n       ))\n]\n```\n\n### 图像翻译模型的可视化配置\n\n对于`CycleGAN`、`Pix2Pix`等翻译模型，可以形成如下可视化配置:\n\n```python\n# 可视化钩子\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=[\n            dict(\n                type='Translation',  # 在训练集可视化结果\n                name='trans'),  #  保存`trans`字段的图像\n            dict(\n                type='Translationval',  # 在验证集可视化结果\n                name='trans_val'),  #  保存`trans_val`字段的图像\n        ])\n]\n# 可视化后端\nvis_backends = [\n    dict(type='VisBackend'),  # 可视化后端用于存储。\n    dict(type='WandbVisBackend',  # 可以上传至Wandb的可视化后端\n        init_kwargs=dict(\n            project='MMagic',   # Wandb项目名\n            name='Translation-Visualization-Demo'  # Wandb实验命名\n        ))\n]\n# 可视化器\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\n### 扩散模型的可视化配置\n\n对于扩散模型，例如`Improved-DDPM`，我们可以使用以下配置通过gif来可视化去噪过程:\n\n```python\n# 可视化钩子\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='DDPMDenoising'))  # 对于DDPM模型预先定义可视化参数\n]\n# 可视化后端\nvis_backends = [\n    dict(type='VisBackend'),  # 可视化后端用于存储。\n    dict(type='WandbVisBackend',  # 可以上传至Wandb的可视化后端\n        init_kwargs=dict(\n            project='MMagic',   # Wandb项目名\n            name='Diffusion-Visualization-Demo'  # Wandb实验命名\n        ))\n]\n# 可视化器\nvisualizer = dict(type='Visualizer', vis_backends=vis_backends)\n```\n\n### 图像补全模型的可视化配置\n\n对于图像补全模型，如`AOT-GAN`和`Global&Local`，通常的配置如下所示:\n\n```python\n# 可视化后端\nvis_backends = [dict(type='LocalVisBackend')]\n# 可视化器\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\n# 可视化钩子\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n### 图像抠图模型的可视化配置\n\n对于`DIM`和`GCA`等图像抠图模型，通常的配置如下所示:\n\n```python\n# 可视化后端\nvis_backends = [dict(type='LocalVisBackend')]\n# 可视化器\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='trimap_path',\n    img_keys=['pred_alpha', 'trimap', 'gt_merged', 'gt_alpha'],\n    bgr2rgb=True)\n# 可视化钩子\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n### SISR/VSR/VFI等模型的可视化配置\n\n对于SISR/VSR/VFI等模型，如`EDSR`, `EDVR`和`CAIN`，通常的配置如下所示:\n\n```python\n# 可视化后端\nvis_backends = [dict(type='LocalVisBackend')]\n# 可视化器\nvisualizer = dict(\n    type='ConcatImageVisualizer',\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=False)\n# 可视化钩子\ncustom_hooks = [dict(type='BasicVisualizationHook', interval=1)]\n```\n\n可视化钩子、可视化器和可视化后端组件的具体配置如下所述.\n\n## 可视化钩子\n\n在MMagic中，我们使用`BasicVisualizationHook`和`VisualizationHook`作为可视化钩子。\n可视化钩子支持以下三种情况。\n\n(1) 修改`vis_kwargs_list`，实现特定输入下模型输出的可视化，适用于特定数据输入下GAN生成结果和图像翻译模型的翻译结果的可视化等。下面是两个典型的例子:\n\n```python\n# input as dict\nvis_kwargs_list = dict(\n    type='Noise',  # 使用'Noise'采样生成模型输入\n    name='fake_img',  # 定义保存图像的命名\n)\n\n# input as list of dict\nvis_kwargs_list = [\n    dict(type='Arguments',  # 使用'Arguments'采样生成模型输入\n         name='arg_output',  # 定义保存图像的命名\n         vis_mode='gif',  # 通过gif来可视化\n         forward_kwargs=dict(forward_mode='sampling', sample_kwargs=dict(show_pbar=True))  # 为'Arguments'采样定义参数\n    ),\n    dict(type='Data',  # 在dataloader使用'Data'采样提供数据作为可视化输入\n         n_samples=36,  # 定义多少采样生成可视化结果\n         fixed_input=False,  # 定义对于可视化过程不固定输入\n    )\n]\n```\n\n`vis_kwargs_list`接受字典或字典的列表作为输入。每个字典必须包含一个`type`字段，指示用于生成模型输入的采样器类型，并且每个字典还必须包含采样器所需的关键字字段(例如:`ArgumentSampler`要求参数字典包含`forward_kwargs`)。\n\n> 需要注意的是，此内容由相应的采样器检查，不受`BasicVisualizationHook`的限制。\n\n此外，其他字段是通用字段(例如:`n_samples`、`n_row`,`name`,`fixed_input`等等)。\n如果没有传入，则使用`BasicVisualizationHook`初始化的默认值。\n\n为了方便用户使用，MMagic为**GAN**、**Translation models**、**SinGAN**和**Diffusion models**预置了可视化参数，用户可以通过以下配置直接使用预定义的可视化方法:\n\n```python\nvis_kwargs_list = dict(type='GAN')\nvis_kwargs_list = dict(type='SinGAN')\nvis_kwargs_list = dict(type='Translation')\nvis_kwargs_list = dict(type='TranslationVal')\nvis_kwargs_list = dict(type='TranslationTest')\nvis_kwargs_list = dict(type='DDPMDenoising')\n```\n\n## 可视化器\n\n在MMagic中，我们实现了`ConcatImageVisualizer`和`Visualizer`，它们继承自`mmengine.Visualizer`。\n`Visualizer`的基类是`ManagerMixin`，这使得`Visualizer`成为一个全局唯一的对象。\n在实例化之后，`Visualizer`可以在代码的任何地方通过`Visualizer.get_current_instance()`调用，如下所示:\n\n```python\n# configs\nvis_backends = [dict(type='VisBackend')]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# `get_instance()` 是为全局唯一实例化调用\nVISUALIZERS.build(cfg.visualizer)\n\n# 通过上述代码实例化后，您可以在任何位置调用`get_current_instance`方法来获取可视化器\nvisualizer = Visualizer.get_current_instance()\n```\n\n`Visualizer`的核心接口是`add_datasample`。\n通过这个界面，该接口将根据相应的`vis_mode`调用相应的绘图函数，以获得`np.ndarray`类型的可视化结果。\n然后调用`show`或`add_image`来直接显示结果或将可视化结果传递给预定义的`vis_backend`。\n\n## 可视化后端\n\n- MMEngine的基本VisBackend包括`LocalVisBackend`、`TensorboardVisBackend`和`WandbVisBackend`。您可以关注[MMEngine Documents](https://github.com/open-mmlab/mmengine/blob/main/docs/zh_cn/advanced_tutorials/visualization.md)了解更多有关它们的信息。\n- `VisBackend`: **File System**的后端。将可视化结果保存到相应位置。\n- `TensorboardVisBackend`: **Tensorboard**的后端。将可视化结果发送到Tensorboard。\n- `WandbVisBackend`: **Wandb**的后端。将可视化结果发送到Tensorboard。\n\n一个`Visualizer`对象可以访问任意数量的`visbackend`，用户可以在代码中通过类名访问后端。\n\n```python\n# 配置文件\nvis_backends = [dict(type='Visualizer'), dict(type='WandbVisBackend')]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# 代码内\nVISUALIZERS.build(cfg.visualizer)\nvisualizer = Visualizer.get_current_instance()\n\n# 通过类名访问后端\ngen_vis_backend = visualizer.get_backend('VisBackend')\ngen_wandb_vis_backend = visualizer.get_backend('GenWandbVisBackend')\n```\n\n当有多个`VisBackend`具有相同的类名时，用户必须为每个`VisBackend`指定名称。\n\n```python\n# 配置文件\nvis_backends = [\n    dict(type='VisBackend', name='gen_vis_backend_1'),\n    dict(type='VisBackend', name='gen_vis_backend_2')\n]\nvisualizer = dict(\n    type='Visualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n```python\n# 代码内\nVISUALIZERS.build(cfg.visualizer)\nvisualizer = Visualizer.get_current_instance()\n\nlocal_vis_backend_1 = visualizer.get_backend('gen_vis_backend_1')\nlocal_vis_backend_2 = visualizer.get_backend('gen_vis_backend_2')\n```\n\n### 在不同的存储后端可视化\n\n如果想用不同的存储后端( Wandb, Tensorboard, 或者远程窗口里常规的后端)，像以下这样改配置文件的 `vis_backends` 就行了：\n\n**Local**\n\n```python\nvis_backends = [dict(type='LocalVisBackend')]\n```\n\n**Tensorboard**\n\n```python\nvis_backends = [dict(type='TensorboardVisBackend')]\nvisualizer = dict(\n    type='ConcatImageVisualizer', vis_backends=vis_backends, name='visualizer')\n```\n\n**Wandb**\n\n```python\nvis_backends = [dict(type='WandbVisBackend', init_kwargs=dict(project={PROJECTS}, name={EXPNAME}))]\nvisualizer = dict(\n    type='ConcatImageVisualizer', vis_backends=vis_backends, name='visualizer')\n```\n"
  },
  {
    "path": "mmagic/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmcv\nimport mmengine\n\nfrom .version import __version__, version_info\n\ntry:\n    from mmcv.utils import digit_version\nexcept ImportError:\n\n    def digit_version(version_str):\n        digit_ver = []\n        for x in version_str.split('.'):\n            if x.isdigit():\n                digit_ver.append(int(x))\n            elif x.find('rc') != -1:\n                patch_version = x.split('rc')\n                digit_ver.append(int(patch_version[0]) - 1)\n                digit_ver.append(int(patch_version[1]))\n        return digit_ver\n\n\nMMCV_MIN = '2.0.0'\nMMCV_MAX = '2.2.0'\nmmcv_min_version = digit_version(MMCV_MIN)\nmmcv_max_version = digit_version(MMCV_MAX)\nmmcv_version = digit_version(mmcv.__version__)\n\nMMENGINE_MIN = '0.4.0'\nMMENGINE_MAX = '1.0.0'\nmmengine_min_version = digit_version(MMENGINE_MIN)\nmmengine_max_version = digit_version(MMENGINE_MAX)\nmmengine_version = digit_version(mmengine.__version__)\n\nassert (mmcv_min_version <= mmcv_version < mmcv_max_version), \\\n    f'mmcv=={mmcv.__version__} is used but incompatible. ' \\\n    f'Please install mmcv-full>={mmcv_min_version}, <{mmcv_max_version}.'\n\nassert (mmengine_min_version <= mmengine_version < mmengine_max_version), \\\n    f'mmengine=={mmengine.__version__} is used but incompatible. ' \\\n    f'Please install mmengine>={mmengine_min_version}, ' \\\n    f'<{mmengine_max_version}.'\n\n__all__ = ['__version__', 'version_info']\n"
  },
  {
    "path": "mmagic/apis/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .inferencers.inference_functions import init_model\nfrom .mmagic_inferencer import MMagicInferencer\n\n__all__ = ['MMagicInferencer', 'init_model']\n"
  },
  {
    "path": "mmagic/apis/inferencers/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Optional, Union\n\nimport torch\n\nfrom mmagic.utils import ConfigType\nfrom .colorization_inferencer import ColorizationInferencer\nfrom .conditional_inferencer import ConditionalInferencer\nfrom .controlnet_animation_inferencer import ControlnetAnimationInferencer\nfrom .diffusers_pipeline_inferencer import DiffusersPipelineInferencer\nfrom .eg3d_inferencer import EG3DInferencer\nfrom .image_super_resolution_inferencer import ImageSuperResolutionInferencer\nfrom .inpainting_inferencer import InpaintingInferencer\nfrom .matting_inferencer import MattingInferencer\nfrom .text2image_inferencer import Text2ImageInferencer\nfrom .translation_inferencer import TranslationInferencer\nfrom .unconditional_inferencer import UnconditionalInferencer\nfrom .video_interpolation_inferencer import VideoInterpolationInferencer\nfrom .video_restoration_inferencer import VideoRestorationInferencer\n\n__all__ = [\n    'ColorizationInferencer', 'ConditionalInferencer', 'EG3DInferencer',\n    'InpaintingInferencer', 'MattingInferencer',\n    'ImageSuperResolutionInferencer', 'Text2ImageInferencer',\n    'TranslationInferencer', 'UnconditionalInferencer',\n    'VideoInterpolationInferencer', 'VideoRestorationInferencer',\n    'ControlnetAnimationInferencer', 'DiffusersPipelineInferencer'\n]\n\n\nclass Inferencers:\n    \"\"\"Class to assign task to different inferencers.\n\n    Args:\n        task (str): Inferencer task.\n        config (str or ConfigType): Model config or the path to it.\n        ckpt (str, optional): Path to the checkpoint.\n        device (str, optional): Device to run inference. If None, the best\n            device will be automatically used.\n        seed (int): The random seed used in inference. Defaults to 2022.\n    \"\"\"\n\n    def __init__(self,\n                 task: Optional[str] = None,\n                 config: Optional[Union[ConfigType, str]] = None,\n                 ckpt: Optional[str] = None,\n                 device: torch.device = None,\n                 extra_parameters: Optional[Dict] = None,\n                 seed: int = 2022) -> None:\n        self.task = task\n        if self.task in ['conditional', 'Conditional GANs']:\n            self.inferencer = ConditionalInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['colorization', 'Colorization']:\n            self.inferencer = ColorizationInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['unconditional', 'Unconditional GANs', 'DragGAN']:\n            self.inferencer = UnconditionalInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['matting', 'Matting']:\n            self.inferencer = MattingInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['inpainting', 'Inpainting']:\n            self.inferencer = InpaintingInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['translation', 'Image2Image']:\n            self.inferencer = TranslationInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['Image super-resolution', 'Image Super-Resolution']:\n            self.inferencer = ImageSuperResolutionInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['video_restoration', 'Video Super-Resolution']:\n            self.inferencer = VideoRestorationInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['video_interpolation', 'Video Interpolation']:\n            self.inferencer = VideoInterpolationInferencer(\n                config, ckpt, device, extra_parameters)\n        elif self.task in [\n                'text2image', 'Text2Image', 'Text2Image, Image2Image'\n        ]:\n            self.inferencer = Text2ImageInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['3D_aware_generation', '3D-aware Generation']:\n            self.inferencer = EG3DInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['controlnet_animation']:\n            self.inferencer = ControlnetAnimationInferencer(config)\n        elif self.task in [\n                'Image Restoration', 'Denoising, Deblurring, Deraining',\n                'Image Super-Resolution, Image denoising, JPEG compression '\n                'artifact reduction', 'Deblurring'\n        ]:\n            self.inferencer = ImageSuperResolutionInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        elif self.task in ['Diffusers Pipeline']:\n            self.inferencer = DiffusersPipelineInferencer(\n                config, ckpt, device, extra_parameters, seed=seed)\n        else:\n            raise ValueError(f'Unknown inferencer task: {self.task}')\n\n    def __call__(self, **kwargs) -> Union[Dict, List[Dict]]:\n        \"\"\"Call the inferencer.\n\n        Args:\n            kwargs: Keyword arguments for the inferencer.\n\n        Returns:\n            Union[Dict, List[Dict]]: Results of inference pipeline.\n        \"\"\"\n        return self.inferencer(**kwargs)\n\n    def get_extra_parameters(self) -> List[str]:\n        \"\"\"Each inferencer may has its own parameters. Call this function to\n        get these parameters.\n\n        Returns:\n            List[str]: List of unique parameters.\n        \"\"\"\n        return self.inferencer.get_extra_parameters()\n"
  },
  {
    "path": "mmagic/apis/inferencers/base_mmagic_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Any, Dict, List, Optional, Sequence, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\nfrom mmengine.infer import BaseInferencer\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.structures import BaseDataElement\nfrom torchvision import utils\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import ConfigType, SampleList, register_all_modules\nfrom .inference_functions import set_random_seed\n\nInputType = Union[str, int, np.ndarray]\nInputsType = Union[InputType, Sequence[InputType]]\nPredType = Union[BaseDataElement, SampleList]\nImgType = Union[np.ndarray, Sequence[np.ndarray]]\nResType = Union[Dict, List[Dict], BaseDataElement, List[BaseDataElement]]\n\n\nclass BaseMMagicInferencer(BaseInferencer):\n    \"\"\"Base inferencer.\n\n    Args:\n        config (str or ConfigType): Model config or the path to it.\n        ckpt (str, optional): Path to the checkpoint.\n        device (str, optional): Device to run inference. If None, the best\n            device will be automatically used.\n        extra_parameters (Dict, optional): Extra parameters for\n            different models in inference stage.\n        seed (str, optional): Seed for inference.\n    \"\"\"\n\n    func_kwargs = dict(\n        preprocess=[],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=['get_datasample'])\n    func_order = dict(preprocess=0, forward=1, visualize=2, postprocess=3)\n\n    extra_parameters = dict()\n\n    def __init__(self,\n                 config: Union[ConfigType, str],\n                 ckpt: Optional[str],\n                 device: Optional[str] = None,\n                 extra_parameters: Optional[Dict] = None,\n                 seed: int = 2022,\n                 **kwargs) -> None:\n        # Load config to cfg\n        if device is None:\n            device = torch.device(\n                'cuda' if torch.cuda.is_available() else 'cpu')\n        self.device = device\n        register_all_modules()\n        super().__init__(config, ckpt, device)\n\n        self._init_extra_parameters(extra_parameters)\n        self.base_params = self._dispatch_kwargs(**kwargs)\n        self.seed = seed\n        set_random_seed(self.seed)\n\n    def _init_model(self, cfg: Union[ConfigType, str], ckpt: Optional[str],\n                    device: str) -> None:\n        \"\"\"Initialize the model with the given config and checkpoint on the\n        specific device.\"\"\"\n        model = MODELS.build(cfg.model)\n        if ckpt is not None and ckpt != '':\n            ckpt = load_checkpoint(model, ckpt, map_location='cpu')\n        if cfg.model.get(\n                'init_cfg') and cfg.model.init_cfg.type == 'convert_from_unet':\n            model.init_weights()\n        model.cfg = cfg\n        model.to(device)\n        model.eval()\n        return model\n\n    def _init_pipeline(self, cfg: ConfigType) -> Compose:\n        \"\"\"Initialize the test pipeline.\"\"\"\n        if 'test_dataloader' in cfg and \\\n            'dataset' in cfg.test_dataloader and \\\n                'pipeline' in cfg.test_dataloader.dataset:\n            pipeline_cfg = cfg.test_dataloader.dataset.pipeline\n            return Compose(pipeline_cfg)\n        return None\n\n    def _init_extra_parameters(self, extra_parameters: Dict) -> None:\n        \"\"\"Initialize extra_parameters of each kind of inferencer.\"\"\"\n        if extra_parameters is not None:\n            for key in self.extra_parameters.keys():\n                if key in extra_parameters.keys():\n                    self.extra_parameters[key] = extra_parameters[key]\n\n    def _update_extra_parameters(self, **kwargs) -> None:\n        \"\"\"update extra_parameters during run time.\"\"\"\n        if 'extra_parameters' in kwargs:\n            input_extra_parameters = kwargs['extra_parameters']\n            if input_extra_parameters is not None:\n                for key in self.extra_parameters.keys():\n                    if key in input_extra_parameters.keys():\n                        self.extra_parameters[key] = \\\n                            input_extra_parameters[key]\n\n    def _dispatch_kwargs(self, **kwargs) -> Tuple[Dict, Dict, Dict, Dict]:\n        \"\"\"Dispatch kwargs to preprocess(), forward(), visualize() and\n        postprocess() according to the actual demands.\"\"\"\n        results = [{}, {}, {}, {}]\n        dispatched_kwargs = set()\n\n        # Dispatch kwargs according to self.func_kwargs\n        for func_name, func_kwargs in self.func_kwargs.items():\n            for func_kwarg in func_kwargs:\n                if func_kwarg in kwargs:\n                    dispatched_kwargs.add(func_kwarg)\n                    results[self.func_order[func_name]][func_kwarg] = kwargs[\n                        func_kwarg]\n\n        return results\n\n    def __call__(self, **kwargs) -> Union[Dict, List[Dict]]:\n        \"\"\"Call the inferencer.\n\n        Args:\n            kwargs: Keyword arguments for the inferencer.\n\n        Returns:\n            Union[Dict, List[Dict]]: Results of inference pipeline.\n        \"\"\"\n        if ('extra_parameters' in kwargs.keys() and kwargs['extra_parameters']\n                and 'infer_with_grad' in kwargs['extra_parameters'].keys()\n                and kwargs['extra_parameters']['infer_with_grad']):\n            results = self.base_call(**kwargs)\n        else:\n            with torch.no_grad():\n                results = self.base_call(**kwargs)\n        return results\n\n    def base_call(self, **kwargs) -> Union[Dict, List[Dict]]:\n        \"\"\"Call the inferencer.\n\n        Args:\n            kwargs: Keyword arguments for the inferencer.\n\n        Returns:\n            Union[Dict, List[Dict]]: Results of inference pipeline.\n        \"\"\"\n\n        self._update_extra_parameters(**kwargs)\n\n        params = self._dispatch_kwargs(**kwargs)\n        preprocess_kwargs = self.base_params[0].copy()\n        preprocess_kwargs.update(params[0])\n        forward_kwargs = self.base_params[1].copy()\n        forward_kwargs.update(params[1])\n        visualize_kwargs = self.base_params[2].copy()\n        visualize_kwargs.update(params[2])\n        postprocess_kwargs = self.base_params[3].copy()\n        postprocess_kwargs.update(params[3])\n\n        data = self.preprocess(**preprocess_kwargs)\n        preds = self.forward(data, **forward_kwargs)\n        imgs = self.visualize(preds, **visualize_kwargs)\n        results = self.postprocess(preds, imgs, **postprocess_kwargs)\n        return results\n\n    def get_extra_parameters(self) -> List[str]:\n        \"\"\"Each inferencer may has its own parameters. Call this function to\n        get these parameters.\n\n        Returns:\n            List[str]: List of unique parameters.\n        \"\"\"\n        return list(self.extra_parameters.keys())\n\n    def postprocess(\n        self,\n        preds: PredType,\n        imgs: Optional[List[np.ndarray]] = None,\n        is_batch: bool = False,\n        get_datasample: bool = False,\n    ) -> Union[ResType, Tuple[ResType, np.ndarray]]:\n        \"\"\"Postprocess predictions.\n\n        Args:\n            preds (List[Dict]): Predictions of the model.\n            imgs (Optional[np.ndarray]): Visualized predictions.\n            is_batch (bool): Whether the inputs are in a batch.\n                Defaults to False.\n            get_datasample (bool): Whether to use Datasample to store\n                inference results. If False, dict will be used.\n\n        Returns:\n            result (Dict): Inference results as a dict.\n            imgs (torch.Tensor): Image result of inference as a tensor or\n                tensor list.\n        \"\"\"\n        results = preds\n        if not get_datasample:\n            results = []\n            for pred in preds:\n                result = self._pred2dict(pred)\n                results.append(result)\n        if not is_batch:\n            results = results[0]\n        return results, imgs\n\n    def _pred2dict(self, pred_tensor: torch.Tensor) -> Dict:\n        \"\"\"Extract elements necessary to represent a prediction into a\n        dictionary. It's better to contain only basic data elements such as\n        strings and numbers in order to guarantee it's json-serializable.\n\n        Args:\n            pred_tensor (torch.Tensor): The tensor to be converted.\n\n        Returns:\n            dict: The output dictionary.\n        \"\"\"\n        result = {}\n        result['infer_results'] = pred_tensor\n        return result\n\n    def visualize(self,\n                  inputs: list,\n                  preds: Any,\n                  show: bool = False,\n                  result_out_dir: str = '',\n                  **kwargs) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Customize your visualization by overriding this method. visualize\n        should return visualization results, which could be np.ndarray or any\n        other objects.\n\n        Args:\n            inputs (list): Inputs preprocessed by :meth:`_inputs_to_list`.\n            preds (Any): Predictions of the model.\n            show (bool): Whether to display the image in a popup window.\n                Defaults to False.\n            result_out_dir (str): Output directory of images. Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Visualization results.\n        \"\"\"\n        results = (preds[:, [2, 1, 0]] + 1.) / 2.\n\n        # save images\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            utils.save_image(results, result_out_dir)\n\n        return results\n"
  },
  {
    "path": "mmagic/apis/inferencers/colorization_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\nfrom mmengine.dataset.utils import default_collate as collate\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import tensor2img\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass ColorizationInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with colorization models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['img'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def preprocess(self, img: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            img(InputsType): Image to be translated by models.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        # build the data pipeline\n        test_pipeline = Compose(self.model.cfg.test_pipeline)\n        # prepare data\n        data = dict(img_path=img)\n        _data = test_pipeline(data)\n        data = dict()\n        data['inputs'] = _data['inputs'] / 255.0\n        data = collate([data])\n        data['data_samples'] = [_data['data_samples']]\n        if 'empty_box' not in data['data_samples'][0]:\n            data['data_samples'][0].set_data({'empty_box': True})\n        if not data['data_samples'][0].empty_box:\n            data['data_samples'][0].cropped_img.data = \\\n                data['data_samples'][0].cropped_img.data / 255.0\n        if 'cuda' in str(self.device):\n            data['inputs'] = data['inputs'].cuda()\n            data['data_samples'][0] = data['data_samples'][0].cuda()\n        data['data_samples'] = DataSample.stack(data['data_samples'])\n        return data\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        with torch.no_grad():\n            result = self.model(mode='tensor', **inputs)\n        return result\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        results = tensor2img(preds[0])\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            mmcv.imwrite(results, result_out_dir)\n\n        return results\n"
  },
  {
    "path": "mmagic/apis/inferencers/conditional_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom torchvision import utils\n\nfrom mmagic.structures import DataSample\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass ConditionalInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with conditional models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['label'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    extra_parameters = dict(num_batches=4, sample_model='orig')\n\n    def preprocess(self, label: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            label(InputsType): Input label for condition models.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        num_batches = self.extra_parameters['num_batches']\n        sample_model = self.extra_parameters['sample_model']\n\n        results = dict(\n            num_batches=num_batches, labels=label, sample_model=sample_model)\n\n        return results\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        return self.model(inputs)\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        res_list = []\n        res_list.extend([item.fake_img.data.cpu() for item in preds])\n        results = torch.stack(res_list, dim=0)\n        results = results[:, [2, 1, 0]] / 255.\n\n        # save images\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            utils.save_image(results, result_out_dir)\n\n        return results\n\n    def _pred2dict(self, data_sample: DataSample) -> Dict:\n        \"\"\"Extract elements necessary to represent a prediction into a\n        dictionary. It's better to contain only basic data elements such as\n        strings and numbers in order to guarantee it's json-serializable.\n\n        Args:\n            data_sample (DataSample): The data sample to be converted.\n\n        Returns:\n            dict: The output dictionary.\n        \"\"\"\n        result = {}\n        result['fake_img'] = data_sample.fake_img.data.cpu()\n        result['gt_label'] = data_sample.gt_label.label\n        return result\n"
  },
  {
    "path": "mmagic/apis/inferencers/controlnet_animation_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List, Optional, Union\n\nimport cv2\nimport mmcv\nimport numpy as np\nimport PIL.Image\nimport requests\nimport torch\nfrom controlnet_aux import HEDdetector\nfrom mmengine.config import Config\nfrom mmengine.runner import set_random_seed\n\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.utils import ConfigType\nfrom .base_mmagic_inferencer import BaseMMagicInferencer\n\nVIDEO_EXTENSIONS = ('.mp4', '.mov', '.avi')\nIMAGE_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.JPG', '.JPEG', '.PNG')\n\n\ndef load_image(image: Union[str, PIL.Image.Image]) -> PIL.Image.Image:\n    \"\"\"\n    Args:\n    Loads `image` to a PIL Image.\n        image (`str` or `PIL.Image.Image`):\n            The image to convert to the PIL Image format.\n    Returns:\n        `PIL.Image.Image`: A PIL Image.\n    \"\"\"\n    if isinstance(image, str):\n        if image.startswith('http://') or image.startswith('https://'):\n            image = PIL.Image.open(requests.get(image, stream=True).raw)\n        elif os.path.isfile(image):\n            image = PIL.Image.open(image)\n        else:\n            raise ValueError(\n                f'Incorrect path or url, URLs must start with `http://` '\n                f'or `https://`, and {image} is not a valid path')\n    elif isinstance(image, PIL.Image.Image):\n        image = image\n    else:\n        raise ValueError(\n            'Incorrect format used for image. Should be an url linking'\n            ' to an image, a local path, or a PIL image.')\n    image = PIL.ImageOps.exif_transpose(image)\n    image = image.convert('RGB')\n    return image\n\n\nclass ControlnetAnimationInferencer(BaseMMagicInferencer):\n    \"\"\"Base inferencer.\n\n    Args:\n        config (str or ConfigType): Model config or the path to it.\n        ckpt (str, optional): Path to the checkpoint.\n        device (str, optional): Device to run inference. If None, the best\n            device will be automatically used.\n        result_out_dir (str): Output directory of images. Defaults to ''.\n    \"\"\"\n\n    func_kwargs = dict(\n        preprocess=[],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=['get_datasample'])\n    func_order = dict(preprocess=0, forward=1, visualize=2, postprocess=3)\n\n    extra_parameters = dict()\n\n    def __init__(self,\n                 config: Union[ConfigType, str],\n                 device: Optional[str] = None,\n                 extra_parameters: Optional[Dict] = None,\n                 dtype=torch.float32,\n                 **kwargs) -> None:\n        cfg = Config.fromfile(config)\n        self.hed = HEDdetector.from_pretrained(cfg.control_detector)\n        self.inference_method = cfg.inference_method\n        if self.inference_method == 'attention_injection':\n            cfg.model.attention_injection = True\n        self.pipe = MODELS.build(cfg.model).cuda().eval()\n\n        control_scheduler_cfg = dict(\n            type=cfg.control_scheduler,\n            from_config=self.pipe.scheduler.config,\n        )\n        control_scheduler = DIFFUSION_SCHEDULERS.build(control_scheduler_cfg)\n        self.pipe.test_scheduler = control_scheduler\n\n    @torch.no_grad()\n    def __call__(self,\n                 prompt=None,\n                 video=None,\n                 negative_prompt=None,\n                 controlnet_conditioning_scale=0.7,\n                 image_width=512,\n                 image_height=512,\n                 save_path=None,\n                 strength=0.75,\n                 num_inference_steps=20,\n                 seed=1,\n                 output_fps=None,\n                 reference_img=None,\n                 **kwargs) -> Union[Dict, List[Dict]]:\n        \"\"\"Call the inferencer.\n\n        Args:\n            kwargs: Keyword arguments for the inferencer.\n\n        Returns:\n            Union[Dict, List[Dict]]: Results of inference pipeline.\n        \"\"\"\n        if save_path is None:\n            from datetime import datetime\n            datestring = datetime.now().strftime('%y%m%d-%H%M%S')\n            save_path = '/tmp/' + datestring + '.mp4'\n\n        set_random_seed(seed)\n\n        latent_width = image_width // 8\n        latent_height = image_height // 8\n\n        init_noise_shape = (1, 4, latent_height, latent_width)\n        init_noise_all_frame = torch.randn(\n            init_noise_shape, dtype=self.pipe.controlnet.dtype).cuda()\n\n        init_noise_shape_cat = (1, 4, latent_height, latent_width * 3)\n        init_noise_all_frame_cat = torch.randn(\n            init_noise_shape_cat, dtype=self.pipe.controlnet.dtype).cuda()\n\n        latent_mask = torch.zeros(\n            (1, 4, image_height // 8, image_width // 8 * 3))\n        latent_mask[:, :, :,\n                    image_width // 8 + 1:image_width // 8 * 2 - 1] = 1.0\n        latent_mask = latent_mask.type(self.pipe.controlnet.dtype).cuda()\n\n        # load the images\n        input_file_extension = os.path.splitext(video)[1]\n        from_video = True\n        all_images = []\n        if input_file_extension in VIDEO_EXTENSIONS:\n            video_reader = mmcv.VideoReader(video)\n            input_fps = int(video_reader.fps)\n            if output_fps is None:\n                output_fps = input_fps\n            if output_fps > input_fps:\n                output_fps = input_fps\n            sample_rate = int(input_fps / output_fps)\n\n            fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n            video_writer = cv2.VideoWriter(save_path, fourcc, output_fps,\n                                           (image_width, image_height))\n            for frame in video_reader:\n                all_images.append(np.flip(frame, axis=2))\n        else:\n            frame_files = os.listdir(video)\n            frame_files = [os.path.join(video, f) for f in frame_files]\n            frame_files.sort()\n            for frame in frame_files:\n                frame_extension = os.path.splitext(frame)[1]\n                if frame_extension in IMAGE_EXTENSIONS:\n                    all_images.append(frame)\n\n            if not os.path.exists(save_path):\n                os.makedirs(save_path)\n\n            from_video = False\n\n        if self.inference_method == 'multi-frame rendering':\n            # first result\n            if from_video:\n                image = PIL.Image.fromarray(all_images[0])\n            else:\n                image = load_image(all_images[0])\n            image = image.resize((image_width, image_height))\n            detect_resolution = min(image_width, image_height)\n            hed_image = self.hed(\n                image,\n                detect_resolution=detect_resolution,\n                image_resolution=detect_resolution)\n            hed_image = hed_image.resize((image_width, image_height))\n\n            result = self.pipe.infer(\n                control=hed_image,\n                latent_image=image,\n                prompt=prompt,\n                negative_prompt=negative_prompt,\n                strength=strength,\n                controlnet_conditioning_scale=controlnet_conditioning_scale,\n                num_inference_steps=num_inference_steps,\n                latents=init_noise_all_frame)['samples'][0]\n\n            first_result = result\n            first_hed = hed_image\n            last_result = result\n            last_hed = hed_image\n\n            for ind in range(len(all_images)):\n                if from_video:\n                    if ind % sample_rate > 0:\n                        continue\n                    image = PIL.Image.fromarray(all_images[ind])\n                else:\n                    image = load_image(all_images[ind])\n                print('processing frame ind ' + str(ind))\n\n                image = image.resize((image_width, image_height))\n                hed_image = self.hed(image, image_resolution=image_width)\n\n                concat_img = PIL.Image.new('RGB',\n                                           (image_width * 3, image_height))\n                concat_img.paste(last_result, (0, 0))\n                concat_img.paste(image, (image_width, 0))\n                concat_img.paste(first_result, (image_width * 2, 0))\n\n                concat_hed = PIL.Image.new('RGB',\n                                           (image_width * 3, image_height),\n                                           'black')\n                concat_hed.paste(last_hed, (0, 0))\n                concat_hed.paste(hed_image, (image_width, 0))\n                concat_hed.paste(first_hed, (image_width * 2, 0))\n\n                result = self.pipe.infer(\n                    control=concat_hed,\n                    latent_image=concat_img,\n                    prompt=prompt,\n                    negative_prompt=negative_prompt,\n                    strength=strength,\n                    controlnet_conditioning_scale=  # noqa\n                    controlnet_conditioning_scale,\n                    num_inference_steps=num_inference_steps,\n                    latents=init_noise_all_frame_cat,\n                    latent_mask=latent_mask,\n                )['samples'][0]\n                result = result.crop(\n                    (image_width, 0, image_width * 2, image_height))\n\n                last_result = result\n                last_hed = hed_image\n\n                if from_video:\n                    video_writer.write(np.flip(np.asarray(result), axis=2))\n                else:\n                    frame_name = frame_files[ind].split('/')[-1]\n                    save_name = os.path.join(save_path, frame_name)\n                    result.save(save_name)\n\n            if from_video:\n                video_writer.release()\n        else:\n            if reference_img is None:\n                if from_video:\n                    image = PIL.Image.fromarray(all_images[0])\n                else:\n                    image = load_image(all_images[0])\n                image = image.resize((image_width, image_height))\n                detect_resolution = min(image_width, image_height)\n                hed_image = self.hed(\n                    image,\n                    detect_resolution=detect_resolution,\n                    image_resolution=detect_resolution)\n                hed_image = hed_image.resize((image_width, image_height))\n\n                result = self.pipe.infer(\n                    control=hed_image,\n                    latent_image=image,\n                    prompt=prompt,\n                    negative_prompt=negative_prompt,\n                    strength=strength,\n                    controlnet_conditioning_scale=  # noqa\n                    controlnet_conditioning_scale,\n                    num_inference_steps=num_inference_steps,\n                    latents=init_noise_all_frame)['samples'][0]\n\n                reference_img = result\n            else:\n                reference_img = load_image(reference_img)\n                reference_img = reference_img.resize(\n                    (image_width, image_height))\n\n            for ind in range(len(all_images)):\n                if from_video:\n                    if ind % sample_rate > 0:\n                        continue\n                    image = PIL.Image.fromarray(all_images[ind])\n                else:\n                    image = load_image(all_images[ind])\n                print('processing frame ind ' + str(ind))\n\n                image = image.resize((image_width, image_height))\n                hed_image = self.hed(image, image_resolution=image_width)\n\n                result = self.pipe.infer(\n                    control=hed_image,\n                    latent_image=image,\n                    prompt=prompt,\n                    negative_prompt=negative_prompt,\n                    strength=strength,\n                    controlnet_conditioning_scale=  # noqa\n                    controlnet_conditioning_scale,\n                    num_inference_steps=num_inference_steps,\n                    latents=init_noise_all_frame,\n                    reference_img=reference_img,\n                )['samples'][0]\n\n                if from_video:\n                    video_writer.write(np.flip(np.asarray(result), axis=2))\n                else:\n                    frame_name = frame_files[ind].split('/')[-1]\n                    save_name = os.path.join(save_path, frame_name)\n                    result.save(save_name)\n\n            if from_video:\n                video_writer.release()\n\n        return save_path\n"
  },
  {
    "path": "mmagic/apis/inferencers/diffusers_pipeline_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport numpy as np\nfrom mmengine import mkdir_or_exist\nfrom PIL.Image import Image\nfrom torchvision.utils import save_image\n\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass DiffusersPipelineInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with text2image models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=[\n            'text', 'negative_prompt', 'num_inference_steps', 'height', 'width'\n        ],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def preprocess(self,\n                   text: InputsType = None,\n                   negative_prompt: InputsType = None,\n                   num_inference_steps: int = 20,\n                   height=None,\n                   width=None) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            text(InputsType): text input for text-to-image model.\n            negative_prompt(InputsType): negative prompt.\n\n        Returns:\n            result(Dict): Results of preprocess.\n        \"\"\"\n        result = self.extra_parameters\n        if text:\n            result['prompt'] = text\n        if negative_prompt:\n            result['negative_prompt'] = negative_prompt\n        if num_inference_steps:\n            result['num_inference_steps'] = num_inference_steps\n        if height:\n            result['height'] = height\n        if width:\n            result['width'] = width\n\n        return result\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        images = self.model(**inputs).images\n\n        return images\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            if type(preds) is list:\n                preds = preds[0]\n            if type(preds) is Image:\n                preds.save(result_out_dir)\n            else:\n                save_image(preds, result_out_dir, normalize=True)\n\n        return preds\n"
  },
  {
    "path": "mmagic/apis/inferencers/eg3d_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom collections import defaultdict\nfrom typing import Dict, List, Optional, Sequence, Union\n\nimport numpy as np\nimport torch\nfrom mmengine import print_log\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom PIL import Image\nfrom torch.nn import functional as F\nfrom torchvision.utils import make_grid\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import ForwardInputs, try_import\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\nfrom .inference_functions import calculate_grid_size\n\nimageio = try_import('imageio')\nimageio_ffmpeg = try_import('imageio_ffmpeg')\n\n\nclass EG3DInferencer(BaseMMagicInferencer):\n\n    func_kwargs = dict(\n        preprocess=['inputs'],\n        forward=['num_images', 'interpolation'],\n        visualize=[\n            'result_out_dir', 'vis_mode', 'save_img', 'save_video',\n            'img_suffix', 'video_suffix'\n        ],\n        postprocess=[])\n\n    extra_parameters = dict(num_batches=4, sample_model='ema', add_noise=False)\n\n    def preprocess(self, inputs: InputsType = None) -> ForwardInputs:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            inputs (List[Union[str, np.ndarray]]): The conditional inputs for\n                the inferencer. Defaults to None.\n\n        Returns:\n            ForwardInputs: The preprocessed inputs and data samples.\n        \"\"\"\n        if isinstance(inputs, Sequence):\n            assert all([type(inputs[0]) == type(lab) for lab in inputs\n                        ]), ('All label inputs must have the same type.')\n            if isinstance(inputs[0], list):\n                for lab in inputs:\n                    assert all([isinstance(l_, float) for l_ in lab])\n                inputs = np.array(inputs).astype(np.float32)\n            elif isinstance(inputs[0], np.ndarray):\n                assert all([lab.ndim == 1 for lab in inputs])\n                inputs = [input_.astype(np.float32) for input_ in inputs]\n            else:\n                raise ValueError(\n                    'EG3D only support ndarry or list as label input.')\n\n            data_sample_list = []\n            for lab in inputs:\n                data_sample = DataSample()\n                data_sample.set_gt_label(lab)\n                data_sample_list.append(data_sample.to(self.device))\n            self.extra_parameters['num_batches'] = len(inputs)\n        else:\n            data_sample_list = None\n\n        num_batches = self.extra_parameters['num_batches']\n        sample_model = self.extra_parameters['sample_model']\n        add_noise = self.extra_parameters['add_noise']\n        inputs = dict(\n            num_batches=num_batches,\n            sample_model=sample_model,\n            add_noise=add_noise)\n\n        if data_sample_list is None:\n            data_samples = None\n        else:\n            data_samples = DataSample.stack(data_sample_list)\n\n        return inputs, data_samples\n\n    def forward(self,\n                inputs: ForwardInputs,\n                interpolation: Optional[str] = 'both',\n                num_images: int = 100) -> Union[dict, List[dict]]:\n        \"\"\"Forward the inputs to the model.\n\n        Args:\n            inputs (ForwardInputs): Model inputs. If data sample (the second\n                element of `inputs`) is not passed, will generate a sequence\n                of images corresponding to passed `interpolation` mode.\n            interpolation (str): The interpolation mode. Supported choices\n                are 'both', 'conditioning', and 'camera'. Defaults to 'both'.\n            num_images (int): The number of frames of interpolation.\n                Defaults to 500.\n\n        Returns:\n            Union[dict, List[dict]]: Output dict corresponds to the input\n                condition or the list of output dict of each frame during the\n                interpolation process.\n        \"\"\"\n        inputs, data_sample = inputs  # unpack the tuple\n        # forward as the passed input\n        if data_sample is not None:\n            outputs = self.model(inputs, data_sample)\n            output_dict = defaultdict(list)\n            # return outputs\n            for output in outputs:\n                fake_img = output.fake_img.data\n                depth_img = output.depth\n                lr_img = output.lr_img.data\n                ray_origins = output.ray_origins\n                ray_directions = output.ray_directions\n                output_dict['fake_img'].append(fake_img)\n                output_dict['depth'].append(depth_img)\n                output_dict['lr_img'].append(lr_img)\n                output_dict['ray_origins'].append(ray_origins)\n                output_dict['ray_directions'].append(ray_directions)\n\n            for k in output_dict.keys():\n                output_dict[k] = torch.stack(output_dict[k], dim=0)\n\n            return output_dict\n\n        num_batches = inputs['num_batches']\n        output_list = self.model.interpolation(num_images, num_batches,\n                                               interpolation)\n        return output_list\n\n    def visualize(self,\n                  preds: Union[PredType, List[PredType]],\n                  vis_mode: str = 'both',\n                  save_img: bool = True,\n                  save_video: bool = True,\n                  img_suffix: str = '.png',\n                  video_suffix: str = '.mp4',\n                  result_out_dir: str = 'eg3d_output') -> None:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (Union[PredType, List[PredType]]): Prediction os model.\n            vis_mode (str, optional): Which output to visualize. Supported\n                choices are 'both', 'depth', and 'img'. Defaults to 'all'.\n            save_img (bool, optional): Whether save images. Defaults to True.\n            save_video (bool, optional): Whether save videos. Defaults to True.\n            img_suffix (str, optional): The suffix of saved images.\n                Defaults to '.png'.\n            video_suffix (str, optional): The suffix of saved videos.\n                Defaults to '.mp4'.\n            result_out_dir (str, optional): The save director of image and\n                videos. Defaults to 'eg3d_output'.\n        \"\"\"\n        if save_video:\n            assert imageio is not None, (\n                'Please install imageio by \\'pip install '\n                'imageio\\' to save video.')\n            assert imageio_ffmpeg is not None, (\n                'Please install imageio-ffmpeg by \\'pip install '\n                'imageio-ffmpeg\\' to save video.')\n\n        os.makedirs(result_out_dir, exist_ok=True)\n        assert vis_mode.upper() in ['BOTH', 'DEPTH', 'IMG']\n        if vis_mode.upper() == 'BOTH':\n            vis_mode = ['DEPTH', 'IMG']\n        if not isinstance(vis_mode, list):\n            vis_mode = [vis_mode]\n\n        if not isinstance(preds, list):\n            preds = [preds]\n            if save_video:\n                save_video = False\n                print_log('Only one frame of output is generated and cannot '\n                          'save video. Set \\'save_video\\' to \\'False\\' '\n                          'automatically.')\n            if not save_img:\n                save_img = True\n                print_log('Only one frame of output is generated can only save'\n                          'image. Set \\'save_img\\' to \\'True\\' automatically.')\n\n        # save video\n        batch_size = preds[0]['fake_img'].shape[0]\n\n        img_dict = {}\n        for target in vis_mode:\n            target = 'fake_img' if target.upper() == 'IMG' else target\n            if target.lower() == 'fake_img':\n                imgs = self.preprocess_img(preds)\n            else:\n                imgs = self.preprocess_depth(preds)\n            img_dict[target.lower()] = imgs\n\n            nrow = calculate_grid_size(batch_size)\n\n            if save_video:\n                video_path = osp.join(\n                    result_out_dir,\n                    f'{target.lower()}_seed{self.seed}{video_suffix}')\n                video_writer = imageio.get_writer(\n                    video_path,\n                    mode='I',\n                    fps=60,\n                    codec='libx264',\n                    bitrate='10M')\n\n            frame_list = torch.split(imgs, batch_size)\n            for idx, frame in enumerate(frame_list):\n                # frame: [bz, C, H, W]\n                frame_grid = make_grid(\n                    frame, nrow=nrow).permute(1, 2, 0)[..., (2, 1, 0)]\n                frame_grid = frame_grid.numpy().astype(np.uint8)\n                if save_video:\n                    video_writer.append_data(frame_grid)\n\n                if save_img:\n                    if len(frame_list) != 1:\n                        img_name = (f'{target.lower()}_frame{idx}_'\n                                    f'seed{self.seed}{img_suffix}')\n                    else:\n                        img_name = (f'{target.lower()}_seed{self.seed}'\n                                    f'{img_suffix}')\n                    img_path = osp.join(result_out_dir, img_name)\n                    Image.fromarray(frame_grid).save(img_path)\n\n            if save_video:\n                video_writer.close()\n                print_log(f'Save video to \\'{video_path}\\'.', 'current')\n\n        if len(vis_mode) > 1:\n            fake_img = img_dict['fake_img']\n            depth_img = img_dict['depth']\n            # [num_frame * bz, 3, H, W * 2]\n            imgs = torch.cat([fake_img, depth_img], dim=-1)\n            nrow = calculate_grid_size(batch_size, aspect_ratio=2)\n\n            if save_video:\n                video_path = osp.join(\n                    result_out_dir, f'combine_seed{self.seed}{video_suffix}')\n                video_writer = imageio.get_writer(\n                    video_path,\n                    mode='I',\n                    fps=60,\n                    codec='libx264',\n                    bitrate='10M')\n\n            frame_list = torch.split(imgs, batch_size)\n            for idx, frame in enumerate(frame_list):\n                frame_grid = make_grid(\n                    frame, nrow=nrow).permute(1, 2, 0)[..., (2, 1, 0)]\n                frame_grid = frame_grid.numpy().astype(np.uint8)\n\n                if save_video:\n                    video_writer.append_data(frame_grid)\n\n                if save_img:\n                    if len(frame_list) != 1:\n                        img_name = (f'combine_frame{idx}_'\n                                    f'seed{self.seed}{img_suffix}')\n                    else:\n                        img_name = (f'combine_seed{self.seed}' f'{img_suffix}')\n                    img_path = osp.join(result_out_dir, img_name)\n                    Image.fromarray(frame_grid).save(img_path)\n\n            if save_video:\n                video_writer.close()\n                print_log(f'Save video to \\'{video_path}\\'.', 'current')\n\n    def preprocess_img(self, preds: List[dict]) -> torch.Tensor:\n        \"\"\"Preprocess images in the predictions.\n\n        Args:\n            preds (List[dict]): List of prediction dict of each frame.\n\n        Returns:\n            torch.Tensor: Preprocessed image tensor shape like\n                [num_frame * bz, 3, H, W].\n        \"\"\"\n        imgs = [p['fake_img'].cpu() for p in preds]\n        imgs = torch.cat(imgs, dim=0)  # [num_frame * bz, 3, H, W]\n        imgs = ((imgs + 1) / 2 * 255.).clamp(0, 255)\n        return imgs\n\n    def preprocess_depth(self, preds: List[dict]) -> torch.Tensor:\n        \"\"\"Preprocess depth in the predictions.\n\n        Args:\n            preds (List[dict]): List of prediction dict of each frame.\n\n        Returns:\n            torch.Tensor: Preprocessed depth tensor shape like\n                [num_frame * bz, 3, H, W].\n        \"\"\"\n        depth = [p['depth'].cpu() for p in preds]\n\n        depth = torch.cat(depth, dim=0)\n        depth = -depth\n        depth = (depth - depth.min()) / (depth.max() - depth.min()) * 255.\n        depth = depth.clamp(0, 255).repeat(1, 3, 1, 1)\n\n        img_size = preds[0]['fake_img'].shape[-1]\n        if img_size != depth.shape[-1]:\n            interpolation_kwargs = dict(\n                size=img_size, mode='bilinear', align_corners=False)\n            if digit_version(TORCH_VERSION) >= digit_version('1.11.0'):\n                interpolation_kwargs['antialias'] = True\n            depth = F.interpolate(depth, **interpolation_kwargs)\n        return depth\n\n    def postprocess(self,\n                    preds: PredType,\n                    imgs: Optional[List[np.ndarray]] = None,\n                    is_batch: bool = False,\n                    get_datasample: bool = False) -> Dict[str, torch.tensor]:\n        \"\"\"Postprocess predictions.\n\n        Args:\n            preds (List[Dict]): Predictions of the model.\n            imgs (Optional[np.ndarray]): Visualized predictions.\n            is_batch (bool): Whether the inputs are in a batch.\n                Defaults to False.\n            get_datasample (bool): Whether to use Datasample to store\n                inference results. If False, dict will be used.\n\n        Returns:\n            Dict[str, torch.Tensor]: Inference results as a dict.\n        \"\"\"\n        if isinstance(preds[0], dict):\n            keys = preds[0].keys()\n            outputs = defaultdict(list)\n            for pred in preds:\n                for k in keys:\n                    outputs[k].append(pred[k])\n            for k in keys:\n                outputs[k] = torch.stack(outputs[k], dim=0)\n            return outputs\n        # directly return the dict\n        return preds\n"
  },
  {
    "path": "mmagic/apis/inferencers/image_super_resolution_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\n\nfrom mmagic.utils import tensor2img\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass ImageSuperResolutionInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with restoration models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['img', 'ref'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def preprocess(self, img: InputsType, ref: InputsType = None) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            img(InputsType): Image to be restored by models.\n            ref(InputsType): Reference image for restoration models.\n                Defaults to None.\n\n        Returns:\n            data(Dict): Results of preprocess.\n        \"\"\"\n        cfg = self.model.cfg\n\n        # select the data pipeline\n        if cfg.get('inference_pipeline', None):\n            test_pipeline = cfg.inference_pipeline\n        elif cfg.get('demo_pipeline', None):\n            test_pipeline = cfg.demo_pipeline\n        elif cfg.get('test_pipeline', None):\n            test_pipeline = cfg.test_pipeline\n        else:\n            test_pipeline = cfg.val_pipeline\n\n        keys_to_remove = ['gt', 'gt_path']\n        for key in keys_to_remove:\n            for pipeline in list(test_pipeline):\n                if 'key' in pipeline and key == pipeline['key']:\n                    test_pipeline.remove(pipeline)\n                if 'keys' in pipeline and key in pipeline['keys']:\n                    pipeline['keys'].remove(key)\n                    if len(pipeline['keys']) == 0:\n                        test_pipeline.remove(pipeline)\n                if 'meta_keys' in pipeline and key in pipeline['meta_keys']:\n                    pipeline['meta_keys'].remove(key)\n\n        # build the data pipeline\n        test_pipeline = Compose(test_pipeline)\n\n        # prepare data\n        if ref:  # Ref-SR\n            data = dict(img_path=img, ref_path=ref)\n        else:  # SISR\n            data = dict(img_path=img)\n        _data = test_pipeline(data)\n\n        data = dict()\n        data['inputs'] = [_data['inputs']]\n        data['data_samples'] = [_data['data_samples']]\n\n        return data\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        inputs = self.model.data_preprocessor(inputs)\n        with torch.no_grad():\n            result = self.model(mode='predict', **inputs)\n        return result\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        result = preds[0].output.pred_img / 255.\n        results = tensor2img(result)[..., ::-1]\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            mmcv.imwrite(results, result_out_dir)\n\n        return results\n"
  },
  {
    "path": "mmagic/apis/inferencers/inference_functions.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import Config\nfrom mmengine.config import ConfigDict\nfrom mmengine.fileio import get_file_backend\nfrom mmengine.registry import init_default_scope\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.runner import set_random_seed as set_random_seed_engine\n\nfrom mmagic.registry import MODELS\n\nVIDEO_EXTENSIONS = ('.mp4', '.mov', '.avi')\nFILE_CLIENT = get_file_backend(backend_args={'backend': 'local'})\n\n\ndef set_random_seed(seed, deterministic=False, use_rank_shift=True):\n    \"\"\"Set random seed.\n\n    In this function, we just modify the default behavior of the similar\n    function defined in MMCV.\n\n    Args:\n        seed (int): Seed to be used.\n        deterministic (bool): Whether to set the deterministic option for\n            CUDNN backend, i.e., set `torch.backends.cudnn.deterministic`\n            to True and `torch.backends.cudnn.benchmark` to False.\n            Default: False.\n        rank_shift (bool): Whether to add rank number to the random seed to\n            have different random seed in different threads. Default: True.\n    \"\"\"\n    set_random_seed_engine(seed, deterministic, use_rank_shift)\n\n\ndef delete_cfg(cfg, key='init_cfg'):\n    \"\"\"Delete key from config object.\n\n    Args:\n        cfg (str or :obj:`mmengine.Config`): Config object.\n        key (str): Which key to delete.\n    \"\"\"\n\n    if key in cfg:\n        cfg.pop(key)\n    for _key in cfg.keys():\n        if isinstance(cfg[_key], ConfigDict):\n            delete_cfg(cfg[_key], key)\n\n\ndef init_model(config, checkpoint=None, device='cuda:0'):\n    \"\"\"Initialize a model from config file.\n\n    Args:\n        config (str or :obj:`mmengine.Config`): Config file path or the config\n            object.\n        checkpoint (str, optional): Checkpoint path. If left as None, the model\n            will not load any weights.\n        device (str): Which device the model will deploy. Default: 'cuda:0'.\n\n    Returns:\n        nn.Module: The constructed model.\n    \"\"\"\n\n    if isinstance(config, str):\n        config = Config.fromfile(config)\n    elif not isinstance(config, Config):\n        raise TypeError('config must be a filename or Config object, '\n                        f'but got {type(config)}')\n    # config.test_cfg.metrics = None\n    delete_cfg(config.model, 'init_cfg')\n\n    init_default_scope(config.get('default_scope', 'mmagic'))\n\n    model = MODELS.build(config.model)\n\n    if checkpoint is not None:\n        checkpoint = load_checkpoint(model, checkpoint)\n\n    model.cfg = config  # save the config in the model for convenience\n    model.to(device)\n    model.eval()\n\n    return model\n\n\ndef pad_sequence(data, window_size):\n    \"\"\"Pad frame sequence data.\n\n    Args:\n        data (Tensor): The frame sequence data.\n        window_size (int): The window size used in sliding-window framework.\n\n    Returns:\n        data (Tensor): The padded result.\n    \"\"\"\n\n    padding = window_size // 2\n\n    data = torch.cat([\n        data[:, 1 + padding:1 + 2 * padding].flip(1), data,\n        data[:, -1 - 2 * padding:-1 - padding].flip(1)\n    ],\n                     dim=1)\n\n    return data\n\n\ndef read_image(filepath):\n    \"\"\"Read image from file.\n\n    Args:\n        filepath (str): File path.\n\n    Returns:\n        image (np.array): Image.\n    \"\"\"\n    img_bytes = FILE_CLIENT.get(filepath)\n    image = mmcv.imfrombytes(\n        img_bytes, flag='color', channel_order='rgb', backend='pillow')\n    return image\n\n\ndef read_frames(source, start_index, num_frames, from_video, end_index):\n    \"\"\"Read frames from file or video.\n\n    Args:\n        source (list | mmcv.VideoReader): Source of frames.\n        start_index (int): Start index of frames.\n        num_frames (int): frames number to be read.\n        from_video (bool): Weather read frames from video.\n        end_index (int): The end index of frames.\n\n    Returns:\n        images (np.array): Images.\n    \"\"\"\n    images = []\n    last_index = min(start_index + num_frames, end_index)\n    # read frames from video\n    if from_video:\n        for index in range(start_index, last_index):\n            if index >= source.frame_cnt:\n                break\n            images.append(np.flip(source.get_frame(index), axis=2))\n    else:\n        files = source[start_index:last_index]\n        images = [read_image(f) for f in files]\n    return images\n\n\ndef calculate_grid_size(num_batches: int = 1, aspect_ratio: int = 1) -> int:\n    \"\"\"Calculate the number of images per row (nrow) to make the grid closer to\n    square when formatting a batch of images to grid.\n\n    Args:\n        num_batches (int, optional): Number of images per batch. Defaults to 1.\n        aspect_ratio (int, optional): The aspect ratio (width / height) of\n            each image sample. Defaults to 1.\n\n    Returns:\n        int: Calculated number of images per row.\n    \"\"\"\n    curr_ncol, curr_nrow = 1, num_batches\n    curr_delta = curr_nrow * aspect_ratio - curr_ncol\n\n    nrow = curr_nrow\n    delta = curr_delta\n\n    while curr_delta > 0:\n\n        curr_ncol += 1\n        curr_nrow = math.ceil(num_batches / curr_ncol)\n\n        curr_delta = curr_nrow * aspect_ratio - curr_ncol\n        if curr_delta < delta and curr_delta >= 0:\n            nrow, delta = curr_nrow, curr_delta\n\n    return nrow\n"
  },
  {
    "path": "mmagic/apis/inferencers/inpainting_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\n\nfrom mmagic.utils import tensor2img\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass InpaintingInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with inpainting models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['img', 'mask'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def _init_pipeline(self, cfg) -> Compose:\n        \"\"\"Initialize the test pipeline.\"\"\"\n        return None\n\n    def preprocess(self, img: InputsType, mask: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            img(InputsType): Image to be inpainted by models.\n            mask(InputsType): Image mask for inpainting models.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        infer_pipeline_cfg = [\n            dict(type='LoadImageFromFile', key='gt', channel_order='bgr'),\n            dict(\n                type='LoadMask',\n                mask_mode='file',\n            ),\n            dict(type='GetMaskedImage'),\n            dict(type='PackInputs'),\n        ]\n\n        infer_pipeline = Compose(infer_pipeline_cfg)\n\n        # prepare data\n        _data = infer_pipeline(dict(gt_path=img, mask_path=mask))\n        data = dict()\n        data['inputs'] = [_data['inputs']]\n        data['data_samples'] = [_data['data_samples']]\n        return data\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        inputs = self.model.data_preprocessor(inputs)\n        with torch.no_grad():\n            result = self.model(mode='predict', **inputs)\n        return result\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Mask of input image.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        result = preds[0].output.pred_img / 255.\n\n        result = tensor2img(result)[..., ::-1]\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            mmcv.imwrite(result, result_out_dir)\n\n        return result\n"
  },
  {
    "path": "mmagic/apis/inferencers/matting_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\n\nfrom mmagic.structures import DataSample\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass MattingInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with matting models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['img', 'trimap'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def preprocess(self, img: InputsType, trimap: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            img(InputsType): Image to be processed by models.\n            mask(InputsType): Mask corresponding to the input image.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        # remove alpha from test_pipeline\n        keys_to_remove = ['alpha', 'ori_alpha']\n        for key in keys_to_remove:\n            for pipeline in list(self.cfg.test_pipeline):\n                if 'key' in pipeline and key == pipeline['key']:\n                    self.cfg.test_pipeline.remove(pipeline)\n                if 'keys' in pipeline and key in pipeline['keys']:\n                    pipeline['keys'].remove(key)\n                    if len(pipeline['keys']) == 0:\n                        self.cfg.test_pipeline.remove(pipeline)\n                if 'meta_keys' in pipeline and key in pipeline['meta_keys']:\n                    pipeline['meta_keys'].remove(key)\n\n        # build the data pipeline\n        test_pipeline = Compose(self.cfg.test_pipeline)\n        # prepare data\n        data = dict(merged_path=img, trimap_path=trimap)\n        _data = test_pipeline(data)\n        trimap = _data['data_samples'].trimap.data\n        preprocess_res = dict()\n        preprocess_res['inputs'] = [_data['inputs']]\n        preprocess_res['data_samples'] = [_data['data_samples']]\n        return preprocess_res\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        inputs = self.model.data_preprocessor(inputs)\n        with torch.no_grad():\n            return self.model(mode='predict', **inputs)\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        result = preds[0].output\n        result = result.pred_alpha.data.cpu()\n\n        # save images\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            mmcv.imwrite(result.numpy(), result_out_dir)\n\n        return result\n\n    def _pred2dict(self, data_sample: DataSample) -> Dict:\n        \"\"\"Extract elements necessary to represent a prediction into a\n        dictionary. It's better to contain only basic data elements such as\n        strings and numbers in order to guarantee it's json-serializable.\n\n        Args:\n            data_sample (DataSample): The data sample to be converted.\n\n        Returns:\n            dict: The output dictionary.\n        \"\"\"\n        result = {}\n        result['pred_alpha'] = data_sample.output.pred_alpha.data.cpu()\n        return result\n"
  },
  {
    "path": "mmagic/apis/inferencers/text2image_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport mmcv\nimport numpy as np\nfrom mmengine import mkdir_or_exist\nfrom PIL.Image import Image, fromarray\nfrom torchvision.utils import save_image\n\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass Text2ImageInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with text2image models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['text', 'control', 'negative_prompt'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    extra_parameters = dict(height=None, width=None, seed=1)\n\n    def preprocess(self,\n                   text: InputsType,\n                   control: str = None,\n                   negative_prompt: InputsType = None) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            text(InputsType): text input for text-to-image model.\n            control(str): control img dir for controlnet.\n            negative_prompt(InputsType): negative prompt.\n\n        Returns:\n            result(Dict): Results of preprocess.\n        \"\"\"\n        result = self.extra_parameters\n        if type(text) is dict:\n            result['text_prompts'] = text\n        else:\n            result['prompt'] = text\n\n        if control:\n            control_img = mmcv.imread(control)\n            control_img = fromarray(control_img)\n            result['control'] = control_img\n            result.pop('seed', None)\n\n        if negative_prompt:\n            result['negative_prompt'] = negative_prompt\n\n        return result\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        image = self.model.infer(**inputs)['samples']\n\n        return image\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            if type(preds) is list:\n                preds = preds[0]\n            if type(preds) is Image:\n                preds.save(result_out_dir)\n            else:\n                save_image(preds, result_out_dir, normalize=True)\n\n        return preds\n"
  },
  {
    "path": "mmagic/apis/inferencers/translation_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom mmengine.dataset import Compose\nfrom mmengine.dataset.utils import default_collate as collate\nfrom torchvision import utils\n\nfrom mmagic.models.base_models import BaseTranslationModel\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass TranslationInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with translation models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['img'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    def preprocess(self, img: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            img(InputsType): Image to be translated by models.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        assert isinstance(self.model, BaseTranslationModel)\n\n        # get source domain and target domain\n        self.target_domain = self.model._default_domain\n        source_domain = self.model.get_other_domains(self.target_domain)[0]\n\n        cfg = self.model.cfg\n        # build the data pipeline\n        test_pipeline = Compose(cfg.test_pipeline)\n\n        # prepare data\n        # dirty code to deal with test data pipeline\n        data = dict()\n        data['pair_path'] = img\n        data['img_A_path'] = img\n        data['img_B_path'] = img\n        data = collate([test_pipeline(data)])\n        data = self.model.data_preprocessor(data, False)\n\n        inputs_dict = data['inputs']\n        results = inputs_dict[f'img_{source_domain}']\n        return results\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        with torch.no_grad():\n            results = self.model(\n                inputs, test_mode=True, target_domain=self.target_domain)\n        output = results['target']\n        return output\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = None) -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        results = (preds[:, [2, 1, 0]] + 1.) / 2.\n\n        # save images\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            utils.save_image(results, result_out_dir)\n\n        return results\n"
  },
  {
    "path": "mmagic/apis/inferencers/unconditional_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Dict, List\n\nimport numpy as np\nimport torch\nfrom mmengine import mkdir_or_exist\nfrom torchvision import utils\n\nfrom mmagic.structures import DataSample\nfrom .base_mmagic_inferencer import BaseMMagicInferencer, InputsType, PredType\n\n\nclass UnconditionalInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with unconditional models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=[],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    extra_parameters = dict(\n        num_batches=4, sample_model='orig', sample_kwargs=None, noise=None)\n\n    def preprocess(self) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Returns:\n            results(Dict): Results of preprocess.\n        \"\"\"\n        num_batches = self.extra_parameters['num_batches']\n        sample_model = self.extra_parameters['sample_model']\n        noise = self.extra_parameters['noise']\n        sample_kwargs = self.extra_parameters['sample_kwargs']\n\n        results = dict(\n            num_batches=num_batches,\n            sample_model=sample_model,\n            sample_kwargs=sample_kwargs,\n            noise=noise)\n\n        return results\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\"\"\"\n        return self.model(inputs)\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = '') -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        res_list = []\n        res_list.extend([item.fake_img.data.cpu() for item in preds])\n        results = torch.stack(res_list, dim=0)\n        if results.shape[1] == 3:\n            results = results[:, [2, 1, 0]] / 255.\n        else:\n            results = results / 255.\n\n        # save images\n        if result_out_dir:\n            mkdir_or_exist(os.path.dirname(result_out_dir))\n            utils.save_image(results, result_out_dir)\n\n        return results\n\n    def _pred2dict(self, data_sample: DataSample) -> Dict:\n        \"\"\"Extract elements necessary to represent a prediction into a\n        dictionary. It's better to contain only basic data elements such as\n        strings and numbers in order to guarantee it's json-serializable.\n\n        Args:\n            data_sample (DataSample): The data sample to be converted.\n\n        Returns:\n            dict: The output dictionary.\n        \"\"\"\n        result = {}\n        result['fake_img'] = data_sample.fake_img.data.cpu()\n        result['noise'] = data_sample.noise.data.cpu()\n        if hasattr(data_sample, 'latent'):\n            result['latent'] = data_sample.latent\n        if hasattr(data_sample, 'feats'):\n            result['feats'] = data_sample.feats\n        return result\n"
  },
  {
    "path": "mmagic/apis/inferencers/video_interpolation_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport os\nimport os.path as osp\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport cv2\nimport mmcv\nimport mmengine\nimport numpy as np\nimport torch\nfrom mmengine.dataset import Compose\nfrom mmengine.dataset.utils import default_collate as collate\nfrom mmengine.logging import MMLogger\nfrom mmengine.utils import ProgressBar\n\nfrom .base_mmagic_inferencer import (BaseMMagicInferencer, InputsType,\n                                     PredType, ResType)\nfrom .inference_functions import VIDEO_EXTENSIONS, read_frames, read_image\n\n\nclass VideoInterpolationInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with video interpolation models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['video'],\n        forward=['result_out_dir'],\n        visualize=[],\n        postprocess=[])\n\n    extra_parameters = dict(\n        start_idx=0,\n        end_idx=None,\n        batch_size=4,\n        fps_multiplier=0,\n        fps=0,\n        filename_tmpl='{:08d}.png')\n\n    def preprocess(self, video: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            video(InputsType): Video to be interpolated by models.\n\n        Returns:\n            video(InputsType): Video to be interpolated by models.\n        \"\"\"\n        # build the data pipeline\n        if self.model.cfg.get('demo_pipeline', None):\n            test_pipeline = self.model.cfg.demo_pipeline\n        elif self.model.cfg.get('test_pipeline', None):\n            test_pipeline = self.model.cfg.test_pipeline\n        else:\n            test_pipeline = self.model.cfg.val_pipeline\n\n        # remove the data loading pipeline\n        tmp_pipeline = []\n        for pipeline in test_pipeline:\n            if pipeline['type'] not in [\n                    'GenerateSegmentIndices', 'LoadImageFromFile'\n            ]:\n                tmp_pipeline.append(pipeline)\n        test_pipeline = tmp_pipeline\n\n        # compose the pipeline\n        self.test_pipeline = Compose(test_pipeline)\n\n        return video\n\n    def forward(self,\n                inputs: InputsType,\n                result_out_dir: InputsType = '') -> PredType:\n        \"\"\"Forward the inputs to the model.\n\n        Args:\n            inputs (InputsType): Input video directory.\n            result_out_dir (str): Output directory of video.\n                Defaults to ''.\n\n        Returns:\n            PredType: Result of forwarding\n        \"\"\"\n        # check if the input is a video\n        input_file_extension = os.path.splitext(inputs)[1]\n        if input_file_extension in VIDEO_EXTENSIONS:\n            source = mmcv.VideoReader(inputs)\n            input_fps = source.fps\n            length = source.frame_cnt\n            from_video = True\n            h, w = source.height, source.width\n            if self.extra_parameters['fps_multiplier']:\n                assert self.extra_parameters['fps_multiplier'] > 0, \\\n                    '`fps_multiplier` cannot be negative'\n                output_fps = \\\n                    self.extra_parameters['fps_multiplier'] * input_fps\n            else:\n                fps = self.extra_parameters['fps']\n                output_fps = fps if fps > 0 else input_fps * 2\n        else:\n            files = os.listdir(inputs)\n            files = [osp.join(inputs, f) for f in files]\n            files.sort()\n            source = files\n            length = files.__len__()\n            from_video = False\n            example_frame = read_image(files[0])\n            h, w = example_frame.shape[:2]\n            fps = self.extra_parameters['fps']\n            output_fps = fps if fps > 0 else 60\n\n        # check if the output is a video\n        output_file_extension = os.path.splitext(result_out_dir)[1]\n        mmengine.utils.mkdir_or_exist(osp.dirname(result_out_dir))\n        if output_file_extension in VIDEO_EXTENSIONS:\n            fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n            target = cv2.VideoWriter(result_out_dir, fourcc, output_fps,\n                                     (w, h))\n            to_video = True\n        else:\n            to_video = False\n\n        self.extra_parameters['end_idx'] = min(\n            self.extra_parameters['end_idx'], length) \\\n            if self.extra_parameters['end_idx'] is not None else length\n\n        # calculate step args\n        step_size = \\\n            self.model.step_frames * self.extra_parameters['batch_size']\n        lenth_per_step = self.model.required_frames + \\\n            self.model.step_frames * (self.extra_parameters['batch_size'] - 1)\n        repeat_frame = self.model.required_frames - self.model.step_frames\n\n        prog_bar = ProgressBar(\n            math.ceil((self.extra_parameters['end_idx'] + step_size -\n                       lenth_per_step - self.extra_parameters['start_idx']) /\n                      step_size))\n        output_index = self.extra_parameters['start_idx']\n        for start_index in range(self.extra_parameters['start_idx'],\n                                 self.extra_parameters['end_idx'], step_size):\n            images = read_frames(\n                source,\n                start_index,\n                lenth_per_step,\n                from_video,\n                end_index=self.extra_parameters['end_idx'])\n\n            # data prepare\n            data = dict(img=images, inputs_path=None, key=inputs)\n            data = self.test_pipeline(data)['inputs'] / 255.0\n            data = collate([data])\n            # data.shape: [1, t, c, h, w]\n\n            # forward the model\n            data = self.model.split_frames(data)\n            input_tensors = data.clone().detach()\n            with torch.no_grad():\n                output = self.model(data.to(self.device), mode='tensor')\n                if len(output.shape) == 4:\n                    output = output.unsqueeze(1)\n                output_tensors = output.cpu()\n                if len(output_tensors.shape) == 4:\n                    output_tensors = output_tensors.unsqueeze(1)\n                result = self.model.merge_frames(input_tensors, output_tensors)\n            if not self.extra_parameters['start_idx'] == start_index:\n                result = result[repeat_frame:]\n            prog_bar.update()\n\n            # save frames\n            if to_video:\n                for frame in result:\n                    target.write(frame)\n            else:\n                filename_tmpl = self.extra_parameters['filename_tmpl']\n                for frame in result:\n                    save_path = osp.join(result_out_dir,\n                                         filename_tmpl.format(output_index))\n                    mmcv.imwrite(frame, save_path)\n                    output_index += 1\n\n            if start_index + lenth_per_step >= \\\n               self.extra_parameters['end_idx']:\n                break\n\n        if to_video:\n            target.release()\n\n        logger: MMLogger = MMLogger.get_current_instance()\n        logger.info(f'Output video is save at {result_out_dir}.')\n\n        return {}\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = '') -> List[np.ndarray]:\n        \"\"\"Visualize is not needed in this inferencer.\"\"\"\n        logger: MMLogger = MMLogger.get_current_instance()\n        logger.info('Visualization is implemented in forward process.')\n        return None\n\n    def postprocess(\n        self,\n        preds: PredType,\n        imgs: Optional[List[np.ndarray]] = None\n    ) -> Union[ResType, Tuple[ResType, np.ndarray]]:\n        \"\"\"Postprocess is not needed in this inferencer.\"\"\"\n        logger: MMLogger = MMLogger.get_current_instance()\n        logger.info('Postprocess is implemented in forward process.')\n        return None\n"
  },
  {
    "path": "mmagic/apis/inferencers/video_restoration_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport glob\nimport os\nimport os.path as osp\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport cv2\nimport mmcv\nimport mmengine\nimport numpy as np\nimport torch\nfrom mmengine.dataset import Compose\nfrom mmengine.logging import MMLogger\nfrom mmengine.utils import ProgressBar\n\nfrom mmagic.utils import tensor2img\nfrom .base_mmagic_inferencer import (BaseMMagicInferencer, InputsType,\n                                     PredType, ResType)\nfrom .inference_functions import VIDEO_EXTENSIONS, pad_sequence\n\n\nclass VideoRestorationInferencer(BaseMMagicInferencer):\n    \"\"\"inferencer that predicts with video restoration models.\"\"\"\n\n    func_kwargs = dict(\n        preprocess=['video'],\n        forward=[],\n        visualize=['result_out_dir'],\n        postprocess=[])\n\n    extra_parameters = dict(\n        start_idx=0,\n        filename_tmpl='{:08d}.png',\n        window_size=0,\n        max_seq_len=None)\n\n    def preprocess(self, video: InputsType) -> Dict:\n        \"\"\"Process the inputs into a model-feedable format.\n\n        Args:\n            video(InputsType): Video to be restored by models.\n\n        Returns:\n            results(InputsType): Results of preprocess.\n        \"\"\"\n        # build the data pipeline\n        if self.model.cfg.get('demo_pipeline', None):\n            test_pipeline = self.model.cfg.demo_pipeline\n        elif self.model.cfg.get('test_pipeline', None):\n            test_pipeline = self.model.cfg.test_pipeline\n        else:\n            test_pipeline = self.model.cfg.val_pipeline\n\n        # check if the input is a video\n        file_extension = osp.splitext(video)[1]\n        if file_extension in VIDEO_EXTENSIONS:\n            video_reader = mmcv.VideoReader(video)\n            # load the images\n            data = dict(img=[], img_path=None, key=video)\n            for frame in video_reader:\n                data['img'].append(np.flip(frame, axis=2))\n\n            # remove the data loading pipeline\n            tmp_pipeline = []\n            for pipeline in test_pipeline:\n                if pipeline['type'] not in [\n                        'GenerateSegmentIndices', 'LoadImageFromFile'\n                ]:\n                    tmp_pipeline.append(pipeline)\n            test_pipeline = tmp_pipeline\n        else:\n            # the first element in the pipeline must be\n            # 'GenerateSegmentIndices'\n            if test_pipeline[0]['type'] != 'GenerateSegmentIndices':\n                raise TypeError('The first element in the pipeline must be '\n                                f'\"GenerateSegmentIndices\", but got '\n                                f'\"{test_pipeline[0][\"type\"]}\".')\n\n            # specify start_idx and filename_tmpl\n            test_pipeline[0]['start_idx'] = self.extra_parameters['start_idx']\n            test_pipeline[0]['filename_tmpl'] = \\\n                self.extra_parameters['filename_tmpl']\n\n            # prepare data\n            sequence_length = len(glob.glob(osp.join(video, '*')))\n            lq_folder = osp.dirname(video)\n            key = osp.basename(video)\n            data = dict(\n                img_path=lq_folder,\n                gt_path='',\n                key=key,\n                sequence_length=sequence_length)\n\n        # compose the pipeline\n        test_pipeline = Compose(test_pipeline)\n        data = test_pipeline(data)\n        results = data['inputs'].unsqueeze(0) / 255.0  # in cpu\n\n        return results\n\n    def forward(self, inputs: InputsType) -> PredType:\n        \"\"\"Forward the inputs to the model.\n\n        Args:\n            inputs (InputsType): Images array of input video.\n\n        Returns:\n            PredType: Results of forwarding\n        \"\"\"\n        with torch.no_grad():\n            if self.extra_parameters[\n                    'window_size'] > 0:  # sliding window framework\n                data = pad_sequence(inputs,\n                                    self.extra_parameters['window_size'])\n                result = []\n                # yapf: disable\n                for i in range(0, data.size(1) - 2 * (self.extra_parameters['window_size'] // 2)):  # noqa\n                    # yapf: enable\n                    data_i = data[:, i:i +\n                                  self.extra_parameters['window_size']].to(\n                                      self.device)\n                    result.append(\n                        self.model(inputs=data_i, mode='tensor').cpu())\n                result = torch.stack(result, dim=1)\n            else:  # recurrent framework\n                if self.extra_parameters['max_seq_len'] is None:\n                    result = self.model(\n                        inputs=inputs.to(self.device), mode='tensor').cpu()\n                else:\n                    result = []\n                    for i in range(0, inputs.size(1),\n                                   self.extra_parameters['max_seq_len']):\n                        result.append(\n                            self.model(\n                                inputs=inputs[:, i:i + self.\n                                              extra_parameters['max_seq_len']].\n                                to(self.device),\n                                mode='tensor').cpu())\n                    result = torch.cat(result, dim=1)\n        return result\n\n    def visualize(self,\n                  preds: PredType,\n                  result_out_dir: str = '') -> List[np.ndarray]:\n        \"\"\"Visualize predictions.\n\n        Args:\n            preds (List[Union[str, np.ndarray]]): Forward results\n                by the inferencer.\n            data (List[Dict]): Not needed by this kind of inferencer.\n            result_out_dir (str): Output directory of image.\n                Defaults to ''.\n\n        Returns:\n            List[np.ndarray]: Result of visualize\n        \"\"\"\n        file_extension = os.path.splitext(result_out_dir)[1]\n        mmengine.utils.mkdir_or_exist(osp.dirname(result_out_dir))\n        prog_bar = ProgressBar(preds.size(1))\n        if file_extension in VIDEO_EXTENSIONS:  # save as video\n            h, w = preds.shape[-2:]\n            fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n            video_writer = cv2.VideoWriter(result_out_dir, fourcc, 25, (w, h))\n            for i in range(0, preds.size(1)):\n                img = tensor2img(preds[:, i, :, :, :])\n                video_writer.write(img.astype(np.uint8))\n                prog_bar.update()\n            cv2.destroyAllWindows()\n            video_writer.release()\n        else:\n            for i in range(self.extra_parameters['start_idx'],\n                           self.extra_parameters['start_idx'] + preds.size(1)):\n                output_i = \\\n                    preds[:, i - self.extra_parameters['start_idx'], :, :, :]\n                output_i = tensor2img(output_i)\n                filename_tmpl = self.extra_parameters['filename_tmpl']\n                save_path_i = f'{result_out_dir}/{filename_tmpl.format(i)}'\n                mmcv.imwrite(output_i, save_path_i)\n                prog_bar.update()\n\n        logger: MMLogger = MMLogger.get_current_instance()\n        logger.info(f'Output video is save at {result_out_dir}.')\n\n        return []\n\n    def postprocess(\n        self,\n        preds: PredType,\n        imgs: Optional[List[np.ndarray]] = None\n    ) -> Union[ResType, Tuple[ResType, np.ndarray]]:\n        \"\"\"Postprocess is not needed in this inferencer.\"\"\"\n        logger: MMLogger = MMLogger.get_current_instance()\n        logger.info('Postprocess is implemented in visualize process.')\n        return None\n"
  },
  {
    "path": "mmagic/apis/mmagic_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport warnings\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport yaml\nfrom mmengine.registry import init_default_scope\n\nfrom .inferencers import Inferencers\nfrom .inferencers.base_mmagic_inferencer import InputsType\n\n\nclass MMagicInferencer:\n    \"\"\"MMagicInferencer API for mmagic models inference.\n\n    Args:\n        model_name (str): Name of the editing model.\n        model_setting (str): Setting of a specific model.\n            Default to 'a'.\n        model_config (str): Path to the config file for the editing model.\n            Default to None.\n        model_ckpt (str): Path to the checkpoint file for the editing model.\n            Default to None.\n        config_dir (str): Path to the directory containing config files.\n            Default to 'configs/'.\n        device (torch.device): Device to use for inference. Default to 'cuda'.\n\n    Examples:\n        >>> # inference of a conditional model, biggan for example\n        >>> editor = MMagicInferencer(model_name='biggan')\n        >>> editor.infer(label=1, result_out_dir='./biggan_res.jpg')\n\n        >>> # inference of a translation model, pix2pix for example\n        >>> editor = MMagicInferencer(model_name='pix2pix')\n        >>> editor.infer(img='./test.jpg', result_out_dir='./pix2pix_res.jpg')\n\n        >>> # see demo/mmediting_inference_tutorial.ipynb for more examples\n    \"\"\"\n    # unsupported now\n    # singan, liif\n    # output should be checked\n    # dic, glean\n\n    inference_supported_models = [\n        # colorization models\n        'inst_colorization',\n\n        # conditional models\n        'biggan',\n        'sngan_proj',\n        'sagan',\n\n        # unconditional models\n        'dcgan',\n        'deblurganv2',\n        'wgan-gp',\n        'lsgan',\n        'ggan',\n        'pggan',\n        'styleganv1',\n        'styleganv2',\n        'styleganv3',\n\n        # matting models\n        'dim',\n        'indexnet',\n        'gca',\n\n        # inpainting models\n        'aot_gan',\n        'deepfillv1',\n        'deepfillv2',\n        'global_local',\n        'partial_conv',\n\n        # translation models\n        'pix2pix',\n        'cyclegan',\n\n        # image super-resolution models\n        'srcnn',\n        'srgan_resnet',\n        'edsr',\n        'esrgan',\n        'rdn',\n        'dic',\n        'ttsr',\n        'glean',\n        'real_esrgan',\n\n        # video_interpolation models\n        'flavr',\n        'cain',\n\n        # video_restoration models\n        'edvr',\n        'tdan',\n        'basicvsr',\n        'iconvsr',\n        'basicvsr_pp',\n        'real_basicvsr',\n\n        # image_restoration models\n        'nafnet',\n        'swinir',\n        'restormer',\n\n        # text2image models\n        'controlnet',\n        'disco_diffusion',\n        'stable_diffusion',\n\n        # 3D-aware generation\n        'eg3d',\n\n        # animation inferencer\n        'controlnet_animation',\n\n        # draggan\n        'draggan',\n\n        # diffusers pipeline inferencer\n        'diffusers_pipeline',\n    ]\n\n    inference_supported_models_cfg = {}\n    inference_supported_models_cfg_inited = False\n\n    def __init__(self,\n                 model_name: str = None,\n                 model_setting: int = None,\n                 config_name: int = None,\n                 model_config: str = None,\n                 model_ckpt: str = None,\n                 device: torch.device = None,\n                 extra_parameters: Dict = None,\n                 seed: int = 2022,\n                 **kwargs) -> None:\n        init_default_scope('mmagic')\n        MMagicInferencer.init_inference_supported_models_cfg()\n        inferencer_kwargs = {}\n        inferencer_kwargs.update(\n            self._get_inferencer_kwargs(model_name, model_setting, config_name,\n                                        model_config, model_ckpt,\n                                        extra_parameters))\n        self.inferencer = Inferencers(\n            device=device, seed=seed, **inferencer_kwargs)\n\n    def _get_inferencer_kwargs(self, model_name: Optional[str],\n                               model_setting: Optional[int],\n                               config_name: Optional[int],\n                               model_config: Optional[str],\n                               model_ckpt: Optional[str],\n                               extra_parameters: Optional[Dict]) -> Dict:\n        \"\"\"Get the kwargs for the inferencer.\"\"\"\n        kwargs = {}\n\n        if model_name is not None:\n            cfgs = self.get_model_config(model_name)\n            kwargs['task'] = cfgs['task']\n            setting_to_use = 0\n            if model_setting:\n                setting_to_use = model_setting\n            config_dir = cfgs['settings'][setting_to_use]['Config']\n            if config_name:\n                for setting in cfgs['settings']:\n                    if setting['Name'] == config_name:\n                        config_dir = setting['Config']\n                        break\n            config_dir = config_dir[config_dir.find('configs'):]\n            if osp.exists(\n                    osp.join(osp.dirname(__file__), '..', '..', config_dir)):\n                kwargs['config'] = osp.join(\n                    osp.dirname(__file__), '..', '..', config_dir)\n            else:\n                kwargs['config'] = osp.join(\n                    osp.dirname(__file__), '..', '.mim', config_dir)\n            if 'Weights' in cfgs['settings'][setting_to_use].keys():\n                kwargs['ckpt'] = cfgs['settings'][setting_to_use]['Weights']\n                if model_name == 'controlnet':\n                    kwargs['ckpt'] = None\n\n        if model_config is not None:\n            if kwargs.get('config', None) is not None:\n                warnings.warn(\n                    f'{model_name}\\'s default config '\n                    f'is overridden by {model_config}', UserWarning)\n            kwargs['config'] = model_config\n\n        if model_ckpt is not None:\n            if kwargs.get('ckpt', None) is not None:\n                warnings.warn(\n                    f'{model_name}\\'s default checkpoint '\n                    f'is overridden by {model_ckpt}', UserWarning)\n            kwargs['ckpt'] = model_ckpt\n\n        if extra_parameters is not None:\n            kwargs['extra_parameters'] = extra_parameters\n\n        return kwargs\n\n    def print_extra_parameters(self):\n        \"\"\"Print the unique parameters of each kind of inferencer.\"\"\"\n        extra_parameters = self.inferencer.get_extra_parameters()\n        print(extra_parameters)\n\n    def infer(self,\n              img: InputsType = None,\n              video: InputsType = None,\n              label: InputsType = None,\n              trimap: InputsType = None,\n              mask: InputsType = None,\n              result_out_dir: str = '',\n              **kwargs) -> Union[Dict, List[Dict]]:\n        \"\"\"Infer edit model on an image(video).\n\n        Args:\n            img (str): Img path.\n            video (str): Video path.\n            label (int): Label for conditional or unconditional models.\n            trimap (str): Trimap path for matting models.\n            mask (str): Mask path for inpainting models.\n            result_out_dir (str): Output directory of result image or video.\n                Defaults to ''.\n\n        Returns:\n            Dict or List[Dict]: Each dict contains the inference result of\n            each image or video.\n        \"\"\"\n        return self.inferencer(\n            img=img,\n            video=video,\n            label=label,\n            trimap=trimap,\n            mask=mask,\n            result_out_dir=result_out_dir,\n            **kwargs)\n\n    def get_model_config(self, model_name: str) -> Dict:\n        \"\"\"Get the model configuration including model config and checkpoint\n        url.\n\n        Args:\n            model_name (str): Name of the model.\n        Returns:\n            dict: Model configuration.\n        \"\"\"\n        if model_name not in self.inference_supported_models:\n            raise ValueError(f'Model {model_name} is not supported.')\n        else:\n            return self.inference_supported_models_cfg[model_name]\n\n    @staticmethod\n    def init_inference_supported_models_cfg() -> None:\n        if not MMagicInferencer.inference_supported_models_cfg_inited:\n            if osp.exists(\n                    osp.join(osp.dirname(__file__), '..', '..', 'configs')):\n                all_cfgs_dir = osp.join(\n                    osp.dirname(__file__), '..', '..', 'configs')\n            else:\n                all_cfgs_dir = osp.join(\n                    osp.dirname(__file__), '..', '.mim', 'configs')\n            for model_name in MMagicInferencer.inference_supported_models:\n                meta_file_dir = osp.join(all_cfgs_dir, model_name,\n                                         'metafile.yml')\n                with open(meta_file_dir, 'r') as stream:\n                    parsed_yaml = yaml.safe_load(stream)\n                task = parsed_yaml['Models'][0]['Results'][0]['Task']\n                MMagicInferencer.inference_supported_models_cfg[\n                    model_name] = {}\n                MMagicInferencer.inference_supported_models_cfg[model_name][\n                    'task'] = task  # noqa\n                MMagicInferencer.inference_supported_models_cfg[model_name][\n                    'settings'] = parsed_yaml['Models']  # noqa\n\n            MMagicInferencer.inference_supported_models_cfg_inited = True\n\n    @staticmethod\n    def get_inference_supported_models() -> List:\n        \"\"\"static function for getting inference supported modes.\"\"\"\n        return MMagicInferencer.inference_supported_models\n\n    @staticmethod\n    def get_inference_supported_tasks() -> List:\n        \"\"\"static function for getting inference supported tasks.\"\"\"\n        if not MMagicInferencer.inference_supported_models_cfg_inited:\n            MMagicInferencer.init_inference_supported_models_cfg()\n\n        supported_task = set()\n        for key in MMagicInferencer.inference_supported_models_cfg.keys():\n            if MMagicInferencer.inference_supported_models_cfg[key]['task'] \\\n               not in supported_task:\n                supported_task.add(MMagicInferencer.\n                                   inference_supported_models_cfg[key]['task'])\n        return list(supported_task)\n\n    @staticmethod\n    def get_task_supported_models(task: str) -> List:\n        \"\"\"static function for getting task supported models.\"\"\"\n        if not MMagicInferencer.inference_supported_models_cfg_inited:\n            MMagicInferencer.init_inference_supported_models_cfg()\n\n        supported_models = []\n        for key in MMagicInferencer.inference_supported_models_cfg.keys():\n            if MMagicInferencer.inference_supported_models_cfg[key][\n                    'task'] == task:\n                supported_models.append(key)\n        return supported_models\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/basicvsr_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicFramesDataset\nfrom mmagic.datasets.transforms import (GenerateSegmentIndices,\n                                        LoadImageFromFile, MirrorSequence,\n                                        PackInputs)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\n# configs for REDS4\nreds_data_root = 'data/REDS'\n\nreds_pipeline = [\n    dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\nreds_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=reds_data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_val.txt',\n        depth=1,\n        num_input_frames=100,\n        fixed_seq_len=100,\n        pipeline=reds_pipeline))\n\nreds_evaluator = [\n    dict(type=PSNR, prefix='REDS4-BIx4-RGB'),\n    dict(type=SSIM, prefix='REDS4-BIx4-RGB')\n]\n\n# configs for vimeo90k-bd and vimeo90k-bi\nvimeo_90k_data_root = 'data/vimeo90k'\nvimeo_90k_file_list = [\n    'im1.png', 'im2.png', 'im3.png', 'im4.png', 'im5.png', 'im6.png', 'im7.png'\n]\n\nvimeo_90k_pipeline = [\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=MirrorSequence, keys=['img']),\n    dict(type=PackInputs)\n]\n\nvimeo_90k_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vimeo90k_seq', task_name='vsr'),\n        data_root=vimeo_90k_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_test_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        fixed_seq_len=7,\n        load_frames_list=dict(img=vimeo_90k_file_list, gt=['im4.png']),\n        pipeline=vimeo_90k_pipeline))\n\nvimeo_90k_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vimeo90k_seq', task_name='vsr'),\n        data_root=vimeo_90k_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vimeo90K_test_GT.txt',\n        depth=2,\n        num_input_frames=7,\n        fixed_seq_len=7,\n        load_frames_list=dict(img=vimeo_90k_file_list, gt=['im4.png']),\n        pipeline=vimeo_90k_pipeline))\n\nvimeo_90k_bd_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Vimeo-90K-T-BDx4-Y'),\n    dict(type=SSIM, convert_to='Y', prefix='Vimeo-90K-T-BDx4-Y'),\n]\n\nvimeo_90k_bi_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Vimeo-90K-T-BIx4-Y'),\n    dict(type=SSIM, convert_to='Y', prefix='Vimeo-90K-T-BIx4-Y'),\n]\n\n# config for UDM10 (BDx4)\nudm10_data_root = 'data/UDM10'\n\nudm10_pipeline = [\n    dict(\n        type=GenerateSegmentIndices,\n        interval_list=[1],\n        filename_tmpl='{:04d}.png'),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\nudm10_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='udm10', task_name='vsr'),\n        data_root=udm10_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        pipeline=udm10_pipeline))\n\nudm10_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='UDM10-BDx4-Y'),\n    dict(type=SSIM, convert_to='Y', prefix='UDM10-BDx4-Y')\n]\n\n# config for vid4\nvid4_data_root = 'data/Vid4'\n\nvid4_pipeline = [\n    dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\nvid4_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=1,\n        pipeline=vid4_pipeline))\n\nvid4_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=1,\n        pipeline=vid4_pipeline))\n\nvid4_bd_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='VID4-BDx4-Y'),\n    dict(type=SSIM, convert_to='Y', prefix='VID4-BDx4-Y'),\n]\nvid4_bi_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='VID4-BIx4-Y'),\n    dict(type=SSIM, convert_to='Y', prefix='VID4-BIx4-Y'),\n]\n\n# config for test\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    reds_dataloader,\n    vimeo_90k_bd_dataloader,\n    vimeo_90k_bi_dataloader,\n    udm10_dataloader,\n    vid4_bd_dataloader,\n    vid4_bi_dataloader,\n]\ntest_evaluator = [\n    reds_evaluator,\n    vimeo_90k_bd_evaluator,\n    vimeo_90k_bi_evaluator,\n    udm10_evaluator,\n    vid4_bd_evaluator,\n    vid4_bi_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/celeba.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.evaluation import MAE, PSNR, SSIM\n\n# Base config for CelebA-HQ dataset\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data/CelebA-HQ'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt=''),\n        ann_file='train_celeba_img_list.txt',\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt=''),\n        ann_file='val_celeba_img_list.txt',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type=MAE, mask_key='mask', scaling=100),\n    # By default, compute with pixel value from 0-1\n    # scale=2 to align with 1.0\n    # scale=100 seems to align with readme\n    dict(type=PSNR),\n    dict(type=SSIM),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/cifar10_noaug.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset.sampler import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.cifar10_dataset import CIFAR10\nfrom mmagic.datasets.transforms.formatting import PackInputs\n\ncifar_pipeline = [dict(type=PackInputs)]\ncifar_dataset = dict(\n    type=CIFAR10,\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline)\n\ntrain_dataloader = dict(\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/cifar10_nopad.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets import CIFAR10\nfrom mmagic.datasets.transforms import Flip, PackInputs\n\ncifar_pipeline = [\n    dict(type=Flip, keys=['gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type=PackInputs)\n]\ncifar_dataset = dict(\n    type=CIFAR10,\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline)\n\n# test dataset do not use flip\ncifar_pipeline_test = [dict(type=PackInputs)]\ncifar_dataset_test = dict(\n    type=CIFAR10,\n    data_root='./data',\n    data_prefix='cifar10',\n    test_mode=False,\n    pipeline=cifar_pipeline_test)\n\ntrain_dataloader = dict(\n    num_workers=2,\n    dataset=cifar_dataset,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset_test,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=32,\n    num_workers=2,\n    dataset=cifar_dataset_test,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/comp1k.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.evaluation import SAD, ConnectivityError, GradientError, MattingMSE\n\n# Base config for Composition-1K dataset\n\n# dataset settings\ndataset_type = 'AdobeComp1kDataset'\ndata_root = 'data/adobe_composition-1k'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        ann_file='training_list.json',\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        ann_file='test_list.json',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\n# TODO: matting\nval_evaluator = [\n    dict(type=SAD),\n    dict(type=MattingMSE),\n    dict(type=GradientError),\n    dict(type=ConnectivityError),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/deblurring-defocus_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import MAE, PSNR, SSIM\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='imgL',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='imgR',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\ndpdd_data_root = 'data/DPDD'\n\ndpdd_indoor_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='DPDD-Indoor', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        ann_file='indoor_labels.txt',\n        pipeline=test_pipeline))\ndpdd_indoor_evaluator = [\n    dict(type=MAE, prefix='DPDD-Indoor'),\n    dict(type=PSNR, prefix='DPDD-Indoor'),\n    dict(type=SSIM, prefix='DPDD-Indoor'),\n]\n\ndpdd_outdoor_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='DPDD-Outdoor', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        ann_file='outdoor_labels.txt',\n        pipeline=test_pipeline))\ndpdd_outdoor_evaluator = [\n    dict(type=MAE, prefix='DPDD-Outdoor'),\n    dict(type=PSNR, prefix='DPDD-Outdoor'),\n    dict(type=SSIM, prefix='DPDD-Outdoor'),\n]\n\ndpdd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='DPDD-Combined', task_name='deblurring'),\n        data_root=dpdd_data_root,\n        data_prefix=dict(\n            img='inputC', imgL='inputL', imgR='inputR', gt='target'),\n        pipeline=test_pipeline))\ndpdd_evaluator = [\n    dict(type=MAE, prefix='DPDD-Combined'),\n    dict(type=PSNR, prefix='DPDD-Combined'),\n    dict(type=SSIM, prefix='DPDD-Combined'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    dpdd_indoor_dataloader,\n    dpdd_outdoor_dataloader,\n    dpdd_dataloader,\n]\ntest_evaluator = [\n    dpdd_indoor_evaluator,\n    dpdd_outdoor_evaluator,\n    dpdd_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/deblurring-motion_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\ngopro_data_root = 'data/gopro/test'\ngopro_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='GoPro', task_name='deblurring'),\n        data_root=gopro_data_root,\n        data_prefix=dict(img='blur', gt='sharp'),\n        pipeline=test_pipeline))\ngopro_evaluator = [\n    dict(type=PSNR, prefix='GoPro'),\n    dict(type=SSIM, prefix='GoPro'),\n]\n\nhide_data_root = 'data/HIDE'\nhide_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='HIDE', task_name='deblurring'),\n        data_root=hide_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nhide_evaluator = [\n    dict(type=PSNR, prefix='HIDE'),\n    dict(type=SSIM, prefix='HIDE'),\n]\n\nrealblurj_data_root = 'data/RealBlur_J'\nrealblurj_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='RealBlur_J', task_name='deblurring'),\n        data_root=realblurj_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrealblurj_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='RealBlurJ'),\n    dict(type=SSIM, convert_to='Y', prefix='RealBlurJ'),\n]\n\nrealblurr_data_root = 'data/RealBlur_R'\nrealblurr_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='RealBlur_R', task_name='deblurring'),\n        data_root=realblurr_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrealblurr_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='RealBlurR'),\n    dict(type=SSIM, convert_to='Y', prefix='RealBlurR'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    gopro_dataloader,\n    hide_dataloader,\n    realblurj_dataloader,\n    realblurr_dataloader,\n]\ntest_evaluator = [\n    gopro_evaluator,\n    hide_evaluator,\n    realblurj_evaluator,\n    realblurr_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/decompression_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import (LoadImageFromFile, PackInputs,\n                                        RandomJPEGCompression)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\nquality = 10\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=RandomJPEGCompression,\n        params=dict(quality=[quality, quality]),\n        bgr2rgb=True,\n        keys=['img']),\n    dict(type=PackInputs)\n]\n\nclassic5_data_root = 'data/Classic5'\nclassic5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='classic5', task_name='CAR'),\n        data_root=classic5_data_root,\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\nclassic5_evaluator = [\n    dict(type=PSNR, prefix='Classic5'),\n    dict(type=SSIM, prefix='Classic5'),\n]\n\nlive1_data_root = 'data/LIVE1'\nlive1_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='live1', task_name='CAR'),\n        data_root=live1_data_root,\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\nlive1_evaluator = [\n    dict(type=PSNR, prefix='LIVE1'),\n    dict(type=SSIM, prefix='LIVE1'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    classic5_dataloader,\n    live1_dataloader,\n]\ntest_evaluator = [\n    classic5_evaluator,\n    live1_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/denoising-gaussian_color_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import (LoadImageFromFile, PackInputs,\n                                        RandomNoise)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\nsigma = 15\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=RandomNoise,\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=0),\n        keys=['img']),\n    dict(type=PackInputs)\n]\n\ndata_root = 'data/denoising_gaussian_test'\ncbsd68_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='CBSD68', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='CBSD68', gt='CBSD68'),\n        pipeline=test_pipeline))\ncbsd68_evaluator = [\n    dict(type=PSNR, prefix='CBSD68'),\n    dict(type=SSIM, prefix='CBSD68'),\n]\n\nkodak24_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Kodak24', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Kodak24', gt='Kodak24'),\n        pipeline=test_pipeline))\nkodak24_evaluator = [\n    dict(type=PSNR, prefix='Kodak24'),\n    dict(type=SSIM, prefix='Kodak24'),\n]\n\nmcmaster_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='McMaster', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='McMaster', gt='McMaster'),\n        pipeline=test_pipeline))\nmcmaster_evaluator = [\n    dict(type=PSNR, prefix='McMaster'),\n    dict(type=SSIM, prefix='McMaster'),\n]\n\nurban100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Urban100', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Urban100', gt='Urban100'),\n        pipeline=test_pipeline))\nurban100_evaluator = [\n    dict(type=PSNR, prefix='Urban100'),\n    dict(type=SSIM, prefix='Urban100'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    cbsd68_dataloader,\n    kodak24_dataloader,\n    mcmaster_dataloader,\n    urban100_dataloader,\n]\ntest_evaluator = [\n    cbsd68_evaluator,\n    kodak24_evaluator,\n    mcmaster_evaluator,\n    urban100_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/denoising-gaussian_gray_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import (LoadImageFromFile, PackInputs,\n                                        RandomNoise)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\nsigma = 15\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        to_y_channel=True,\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        to_y_channel=True,\n        imdecode_backend='cv2'),\n    dict(\n        type=RandomNoise,\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[sigma, sigma],\n            gaussian_gray_noise_prob=1),\n        keys=['img']),\n    dict(type=PackInputs)\n]\n\ndata_root = 'data/denoising_gaussian_test'\nset12_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Set12', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Set12', gt='Set12'),\n        pipeline=test_pipeline))\nset12_evaluator = [\n    dict(type=PSNR, prefix='Set12'),\n    dict(type=SSIM, prefix='Set12'),\n]\n\nbsd68_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='BSD68', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='BSD68', gt='BSD68'),\n        pipeline=test_pipeline))\nbsd68_evaluator = [\n    dict(type=PSNR, prefix='BSD68'),\n    dict(type=SSIM, prefix='BSD68'),\n]\n\nurban100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Urban100', task_name='denoising'),\n        data_root=data_root,\n        data_prefix=dict(img='Urban100', gt='Urban100'),\n        pipeline=test_pipeline))\nurban100_evaluator = [\n    dict(type=PSNR, prefix='Urban100'),\n    dict(type=SSIM, prefix='Urban100'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    set12_dataloader,\n    bsd68_dataloader,\n    urban100_dataloader,\n]\ntest_evaluator = [\n    set12_evaluator,\n    bsd68_evaluator,\n    urban100_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/denoising-real_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\nsidd_data_root = 'data/SIDD/val/'\nsidd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='SIDD', task_name='denoising'),\n        data_root=sidd_data_root,\n        data_prefix=dict(img='noisy', gt='gt'),\n        filename_tmpl=dict(gt='{}_GT', img='{}_NOISY'),\n        pipeline=test_pipeline))\nsidd_evaluator = [\n    dict(type=PSNR, prefix='SIDD'),\n    dict(type=SSIM, prefix='SIDD'),\n]\n\ndnd_data_root = 'data/DND'\ndnd_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='DND', task_name='denoising'),\n        data_root=dnd_data_root,\n        data_prefix=dict(img='input', gt='groundtruth'),\n        pipeline=test_pipeline))\ndnd_evaluator = [\n    dict(type=PSNR, prefix='DND'),\n    dict(type=SSIM, prefix='DND'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    sidd_dataloader,\n    # dnd_dataloader,\n]\ntest_evaluator = [\n    sidd_evaluator,\n    # dnd_dataloader,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/deraining_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\nrain100h_data_root = 'data/Rain100H'\nrain100h_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Rain100H', task_name='deraining'),\n        data_root=rain100h_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrain100h_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Rain100H'),\n    dict(type=SSIM, convert_to='Y', prefix='Rain100H'),\n]\n\nrain100l_data_root = 'data/Rain100L'\nrain100l_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Rain100L', task_name='deraining'),\n        data_root=rain100l_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\nrain100l_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Rain100L'),\n    dict(type=SSIM, convert_to='Y', prefix='Rain100L'),\n]\n\ntest100_data_root = 'data/Test100'\ntest100_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Test100', task_name='deraining'),\n        data_root=test100_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest100_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Test100'),\n    dict(type=SSIM, convert_to='Y', prefix='Test100'),\n]\n\ntest1200_data_root = 'data/Test1200'\ntest1200_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Test1200', task_name='deraining'),\n        data_root=test1200_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest1200_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Test1200'),\n    dict(type=SSIM, convert_to='Y', prefix='Test1200'),\n]\n\ntest2800_data_root = 'data/Test2800'\ntest2800_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='Test2800', task_name='deraining'),\n        data_root=test2800_data_root,\n        data_prefix=dict(img='input', gt='target'),\n        pipeline=test_pipeline))\ntest2800_evaluator = [\n    dict(type=PSNR, convert_to='Y', prefix='Test2800'),\n    dict(type=SSIM, convert_to='Y', prefix='Test2800'),\n]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    rain100h_dataloader,\n    rain100l_dataloader,\n    test100_dataloader,\n    test1200_dataloader,\n    test2800_dataloader,\n]\ntest_evaluator = [\n    rain100h_evaluator,\n    rain100l_evaluator,\n    test100_evaluator,\n    test1200_evaluator,\n    test2800_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/ffhq_flip.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset.sampler import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.basic_image_dataset import BasicImageDataset\nfrom mmagic.datasets.transforms.aug_shape import Flip\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\n\ndataset_type = BasicImageDataset\n\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=Flip, keys=['gt'], direction='horizontal'),\n    dict(type=PackInputs, keys='gt')\n]\n\nval_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=PackInputs, keys=['gt'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/grow_scale_imgs_ffhq_styleganv1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets import BasicImageDataset, GrowScaleImgDataset\nfrom mmagic.datasets.transforms import Flip, LoadImageFromFile, PackInputs\n\ndataset_type = 'GrowScaleImgDataset'\n\npipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=Flip, keys='gt', direction='horizontal'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type=GrowScaleImgDataset,\n        data_roots={\n            '1024': './data/ffhq/images',\n            '256': './data/ffhq/ffhq_imgs/ffhq_256',\n        },\n        gpu_samples_base=4,\n        # note that this should be changed with total gpu number\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4,\n            '128': 4,\n            '256': 4,\n            '512': 4,\n            '1024': 4\n        },\n        len_per_stage=300000,\n        pipeline=pipeline),\n    sampler=dict(type=InfiniteSampler, shuffle=True))\n\ntest_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type=BasicImageDataset,\n        data_prefix=dict(gt=''),\n        pipeline=pipeline,\n        data_root='./data/ffhq/images'),\n    sampler=dict(type=DefaultSampler, shuffle=False))\n\nval_dataloader = test_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/imagenet_128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets.transforms import (CenterCropLongEdge, Flip,\n                                        LoadImageFromFile, PackInputs,\n                                        RandomCropLongEdge, Resize)\n\n# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=RandomCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(128, 128), keys='gt', backend='pillow'),\n    dict(type=Flip, keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=CenterCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(128, 128), keys='gt', backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/imagenet_256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets.transforms import (CenterCropLongEdge, Flip,\n                                        LoadImageFromFile, PackInputs,\n                                        RandomCropLongEdge, Resize)\n\n# dataset settings\ndataset_type = 'ImageNet'\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='img'),\n    dict(type=RandomCropLongEdge, keys=['img']),\n    dict(type=Resize, scale=(256, 256), keys=['img'], backend='pillow'),\n    dict(type=Flip, keys=['img'], flip_ratio=0.5, direction='horizontal'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img'),\n    dict(type=CenterCropLongEdge, keys=['img']),\n    dict(type=Resize, scale=(256, 256), backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/imagenet_512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset.sampler import DefaultSampler\n\nfrom mmagic.datasets.imagenet_dataset import ImageNet\nfrom mmagic.datasets.transforms.aug_shape import Flip, Resize\nfrom mmagic.datasets.transforms.crop import (CenterCropLongEdge,\n                                             RandomCropLongEdge)\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\n\n# dataset settings\ndataset_type = ImageNet\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=RandomCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(512, 512), keys='gt', backend='pillow'),\n    dict(type=Flip, keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=CenterCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(512, 512), keys='gt', backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/imagenet_64.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset.sampler import DefaultSampler\n\nfrom mmagic.datasets.imagenet_dataset import ImageNet\nfrom mmagic.datasets.transforms.aug_shape import Flip, Resize\nfrom mmagic.datasets.transforms.crop import (CenterCropLongEdge,\n                                             RandomCropLongEdge)\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\n\n# dataset settings\ndataset_type = ImageNet\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# We use `RandomCropLongEdge` in training and `CenterCropLongEdge` in testing.\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=RandomCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(64, 64), keys='gt', backend='pillow'),\n    dict(type=Flip, keys='gt', flip_ratio=0.5, direction='horizontal'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=CenterCropLongEdge, keys='gt'),\n    dict(type=Resize, scale=(64, 64), keys='gt', backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/imagenet_noaug_128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# dataset settings\nfrom mmengine.dataset.sampler import DefaultSampler\n\nfrom mmagic.datasets.imagenet_dataset import ImageNet\nfrom mmagic.datasets.transforms.aug_shape import Resize\nfrom mmagic.datasets.transforms.crop import CenterCropLongEdge\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\n\ndataset_type = ImageNet\n\n# different from mmcls, we adopt the setting used in BigGAN.\n# Remove `RandomFlip` augmentation and change `RandomCropLongEdge` to\n# `CenterCropLongEdge` to eliminate randomness.\n# dataset settings\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='img'),\n    dict(type=CenterCropLongEdge),\n    dict(type=Resize, scale=(128, 128), backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img'),\n    dict(type=CenterCropLongEdge),\n    dict(type=Resize, scale=(128, 128), backend='pillow'),\n    dict(type=PackInputs)\n]\n\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='data/imagenet',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=True),\n    persistent_workers=True)\n\nval_dataloader = dict(\n    batch_size=64,\n    num_workers=5,\n    dataset=dict(\n        type=dataset_type,\n        data_root='./data/imagenet/',\n        ann_file='meta/train.txt',\n        data_prefix='train',\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = val_dataloader\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/liif_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import (GenerateCoordinateAndCell,\n                                        LoadImageFromFile, PackInputs,\n                                        RandomDownSampling)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\nscale_test_list = [2, 3, 4, 6, 18, 30]\n\ntest_pipelines = [[\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=RandomDownSampling, scale_min=scale_test, scale_max=scale_test),\n    dict(type=GenerateCoordinateAndCell, scale=scale_test, reshape_gt=False),\n    dict(type=PackInputs)\n] for scale_test in scale_test_list]\n\n# test config for Set5\nset5_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type=DefaultSampler, shuffle=False),\n        dataset=dict(\n            type=BasicImageDataset,\n            metainfo=dict(dataset_type='set5', task_name='sisr'),\n            data_root='data/Set5',\n            data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\nset5_evaluators = [[\n    dict(type=PSNR, crop_border=scale, prefix=f'Set5x{scale}'),\n    dict(type=SSIM, crop_border=scale, prefix=f'Set5x{scale}'),\n] for scale in scale_test_list]\n\n# test config for Set14\nset14_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type=DefaultSampler, shuffle=False),\n        dataset=dict(\n            type=BasicImageDataset,\n            metainfo=dict(dataset_type='set14', task_name='sisr'),\n            data_root='data/Set14',\n            data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\nset14_evaluators = [[\n    dict(type=PSNR, crop_border=scale, prefix=f'Set14x{scale}'),\n    dict(type=SSIM, crop_border=scale, prefix=f'Set14x{scale}'),\n] for scale in scale_test_list]\n\n# test config for DIV2K\ndiv2k_dataloaders = [\n    dict(\n        num_workers=4,\n        persistent_workers=False,\n        drop_last=False,\n        sampler=dict(type=DefaultSampler, shuffle=False),\n        dataset=dict(\n            type=BasicImageDataset,\n            ann_file='meta_info_DIV2K100sub_GT.txt',\n            metainfo=dict(dataset_type='div2k', task_name='sisr'),\n            data_root='data/DIV2K',\n            data_prefix=dict(\n                img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n            pipeline=test_pipeline)) for test_pipeline in test_pipelines\n]\ndiv2k_evaluators = [[\n    dict(type=PSNR, crop_border=scale, prefix=f'DIV2Kx{scale}'),\n    dict(type=SSIM, crop_border=scale, prefix=f'DIV2Kx{scale}'),\n] for scale in scale_test_list]\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    *set5_dataloaders,\n    *set14_dataloaders,\n    *div2k_dataloaders,\n]\ntest_evaluator = [\n    *set5_evaluators,\n    *set14_evaluators,\n    *div2k_evaluators,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/lsun_stylegan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\n\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=PackInputs)\n]\n\nval_pipeline = [dict(type=LoadImageFromFile, key='gt'), dict(type=PackInputs)]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/paired_imgs_256x256_crop.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.transforms import (FixedCrop, Flip,\n                                        LoadPairedImageFromFile, PackInputs,\n                                        Resize)\n\ndataset_type = 'PairedImageDataset'\n# domain_a = None  # set by user\n# domain_b = None  # set by user\n\ntrain_pipeline = [\n    dict(\n        type=LoadPairedImageFromFile,\n        key='pair',\n        domain_a='A',\n        domain_b='B',\n        color_type='color'),\n    dict(\n        type=Resize,\n        keys=['img_A', 'img_B'],\n        scale=(286, 286),\n        interpolation='bicubic'),\n    dict(type=FixedCrop, keys=['img_A', 'img_B'], crop_size=(256, 256)),\n    dict(type=Flip, keys=['img_A', 'img_B'], direction='horizontal'),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type=PackInputs,\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\ntest_pipeline = [\n    dict(\n        type=LoadPairedImageFromFile,\n        key='pair',\n        domain_a='A',\n        domain_b='B',\n        color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(\n                type=Resize,\n                scale=(256, 256),\n                keys='img',\n                interpolation='bicubic')\n        ]),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type=PackInputs,\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/places.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.evaluation import MAE, PSNR, SSIM\n\n# Base config for places365 dataset\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data/Places'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt='data_large'),\n        ann_file='meta/places365_train_challenge.txt',\n        # Note that Places365-standard (1.8M images) and\n        # Place365-challenge (8M images) use different image lists.\n        test_mode=False,\n    ))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,\n        data_prefix=dict(gt='val_large'),\n        ann_file='meta/places365_val.txt',\n        test_mode=True,\n    ))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type=MAE, mask_key='mask', scaling=100),\n    # By default, compute with pixel value from 0-1\n    # scale=2 to align with 1.0\n    # scale=100 seems to align with readme\n    dict(type=PSNR),\n    dict(type=SSIM),\n]\n\ntest_evaluator = val_evaluator\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/sisr_x2_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM, Evaluator\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=2, prefix='Set5'),\n        dict(type=SSIM, crop_border=2, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx2', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=2, prefix='Set14'),\n        dict(type=SSIM, crop_border=2, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        # ann_file='meta_info_DIV2K800sub_GT.txt',\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X2_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=2, prefix='DIV2K'),\n        dict(type=SSIM, crop_border=2, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/sisr_x3_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM, Evaluator\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=3, prefix='Set5'),\n        dict(type=SSIM, crop_border=3, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx3', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=3, prefix='Set14'),\n        dict(type=SSIM, crop_border=3, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X3_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=3, prefix='DIV2K'),\n        dict(type=SSIM, crop_border=3, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/sisr_x4_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM, Evaluator\n\ntest_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=PackInputs)\n]\n\n# test config for Set5\nset5_data_root = 'data/Set5'\nset5_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=set5_data_root,\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=test_pipeline))\nset5_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=4, prefix='Set5'),\n        dict(type=SSIM, crop_border=4, prefix='Set5'),\n    ])\n\nset14_data_root = 'data/Set14'\nset14_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        metainfo=dict(dataset_type='set14', task_name='sisr'),\n        data_root=set14_data_root,\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=test_pipeline))\nset14_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=4, prefix='Set14'),\n        dict(type=SSIM, crop_border=4, prefix='Set14'),\n    ])\n\n# test config for DIV2K\ndiv2k_data_root = 'data/DIV2K'\ndiv2k_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicImageDataset,\n        ann_file='meta_info_DIV2K100sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=div2k_data_root,\n        data_prefix=dict(\n            img='DIV2K_train_LR_bicubic/X4_sub', gt='DIV2K_train_HR_sub'),\n        pipeline=test_pipeline))\ndiv2k_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=4, prefix='DIV2K'),\n        dict(type=SSIM, crop_border=4, prefix='DIV2K'),\n    ])\n\n# test config\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    set5_dataloader,\n    set14_dataloader,\n    div2k_dataloader,\n]\ntest_evaluator = [\n    set5_evaluator,\n    set14_evaluator,\n    div2k_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/tdan_test_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicFramesDataset\nfrom mmagic.datasets.transforms import (GenerateFrameIndiceswithPadding,\n                                        GenerateSegmentIndices,\n                                        LoadImageFromFile, PackInputs)\nfrom mmagic.engine.runner import MultiTestLoop\nfrom mmagic.evaluation import PSNR, SSIM, Evaluator\n\n# configs for SPMCS-30\nSPMC_data_root = 'data/SPMCS'\n\nSPMC_pipeline = [\n    dict(type=GenerateFrameIndiceswithPadding, padding='reflection'),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\nSPMC_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='spmcs', task_name='vsr'),\n        data_root=SPMC_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_SPMCS_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=SPMC_pipeline))\n\nSPMC_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='spmcs', task_name='vsr'),\n        data_root=SPMC_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_SPMCS_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=SPMC_pipeline))\n\nSPMC_bd_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=8, convert_to='Y', prefix='SPMCS-BDx4-Y'),\n        dict(type=SSIM, crop_border=8, convert_to='Y', prefix='SPMCS-BDx4-Y'),\n    ])\nSPMC_bi_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, crop_border=8, convert_to='Y', prefix='SPMCS-BIx4-Y'),\n        dict(type=SSIM, crop_border=8, convert_to='Y', prefix='SPMCS-BIx4-Y'),\n    ])\n\n# config for vid4\nvid4_data_root = 'data/Vid4'\n\nvid4_pipeline = [\n    # dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(type=GenerateFrameIndiceswithPadding, padding='reflection'),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\nvid4_bd_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BDx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=vid4_pipeline))\n\nvid4_bi_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='vid4', task_name='vsr'),\n        data_root=vid4_data_root,\n        data_prefix=dict(img='BIx4', gt='GT'),\n        ann_file='meta_info_Vid4_GT.txt',\n        depth=2,\n        num_input_frames=5,\n        pipeline=vid4_pipeline))\n\nvid4_bd_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, convert_to='Y', prefix='VID4-BDx4-Y'),\n        dict(type=SSIM, convert_to='Y', prefix='VID4-BDx4-Y'),\n    ])\nvid4_bi_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=PSNR, convert_to='Y', prefix='VID4-BIx4-Y'),\n        dict(type=SSIM, convert_to='Y', prefix='VID4-BIx4-Y'),\n    ])\n\n# config for test\ntest_cfg = dict(type=MultiTestLoop)\ntest_dataloader = [\n    SPMC_bd_dataloader,\n    SPMC_bi_dataloader,\n    vid4_bd_dataloader,\n    vid4_bi_dataloader,\n]\ntest_evaluator = [\n    SPMC_bd_evaluator,\n    SPMC_bi_evaluator,\n    vid4_bd_evaluator,\n    vid4_bi_evaluator,\n]\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/unconditional_imgs_128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs, Resize\n\n# dataset_type = 'BasicImageDataset'\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=Resize, keys='gt', scale=(128, 128)),\n    dict(type=PackInputs)\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/unconditional_imgs_64x64.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs, Resize\n\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=Resize, keys='gt', scale=(64, 64)),\n    dict(type=PackInputs)\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/unconditional_imgs_flip_512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset.sampler import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.basic_image_dataset import BasicImageDataset\nfrom mmagic.datasets.transforms.aug_shape import Flip, Resize\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\n\ndataset_type = BasicImageDataset\n\n# TODO:\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(type=Resize, keys='gt', scale=(512, 512)),\n    dict(type=Flip, keys=['gt'], direction='horizontal'),  # TODO:\n    dict(type=PackInputs)\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/unconditional_imgs_flip_lanczos_resize_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='Resize',\n        keys='gt',\n        scale=(256, 256),\n        interpolation='lanczos',\n        backend='pillow'),\n    dict(type='Flip', keys=['gt'], direction='horizontal'),\n    dict(type='PackInputs')\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=None,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_prefix=dict(gt=''),\n        data_root=None,  # set by user\n        pipeline=train_pipeline),\n    sampler=dict(type='DefaultSampler', shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/datasets/unpaired_imgs_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\n\nfrom mmagic.datasets.transforms import Crop, Flip, PackInputs, Resize\n\ndataset_type = 'UnpairedImageDataset'\ndomain_a = None  # set by user\ndomain_b = None  # set by user\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img_A', color_type='color'),\n    dict(type='LoadImageFromFile', key='img_B', color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=[\n            dict(type=Resize, scale=(286, 286), interpolation='bicubic'),\n            dict(\n                type=Crop,\n                keys=['img'],\n                crop_size=(256, 256),\n                random_crop=True),\n        ]),\n    dict(type=Flip, keys=['img_A'], direction='horizontal'),\n    dict(type=Flip, keys=['img_B'], direction='horizontal'),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type=PackInputs,\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='img_A', color_type='color'),\n    dict(type='LoadImageFromFile', key='img_B', color_type='color'),\n    dict(\n        type='TransformBroadcaster',\n        mapping={'img': ['img_A', 'img_B']},\n        auto_remap=True,\n        share_random_params=True,\n        transforms=dict(\n            type=Resize, scale=(256, 256), interpolation='bicubic'),\n    ),\n    # NOTE: users should implement their own keyMapper and Pack operation\n    # dict(\n    #     type='KeyMapper',\n    #     mapping={\n    #         f'img_{domain_a}': 'img_A',\n    #         f'img_{domain_b}': 'img_B'\n    #     },\n    #     remapping={\n    #         f'img_{domain_a}': f'img_{domain_a}',\n    #         f'img_{domain_b}': f'img_{domain_b}'\n    #     }),\n    # dict(\n    #     type=PackInputs,\n    #     keys=[f'img_{domain_a}', f'img_{domain_b}'],\n    #     data_keys=[f'img_{domain_a}', f'img_{domain_b}'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        test_mode=True,\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=4,\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        test_mode=True,\n        pipeline=test_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n"
  },
  {
    "path": "mmagic/configs/_base_/default_runtime.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, LoggerHook,\n                            ParamSchedulerHook)\nfrom mmengine.visualization import LocalVisBackend\n\nfrom mmagic.engine import BasicVisualizationHook, IterTimerHook, LogProcessor\nfrom mmagic.visualization import ConcatImageVisualizer\n\ndefault_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=5000,\n        out_dir=save_dir,\n        by_epoch=False,\n        max_keep_ckpts=10,\n        save_best='PSNR',\n        rule='greater',\n    ),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nlog_level = 'INFO'\nlog_processor = dict(type=LogProcessor, window_size=100, by_epoch=False)\n\nload_from = None\nresume = False\n\nvis_backends = [dict(type=LocalVisBackend)]\nvisualizer = dict(\n    type=ConcatImageVisualizer,\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type=BasicVisualizationHook, interval=1)]\n"
  },
  {
    "path": "mmagic/configs/_base_/gen_default_runtime.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.hooks import CheckpointHook, LoggerHook\nfrom mmengine.model import MMSeparateDistributedDataParallel\n\nfrom mmagic.engine import (IterTimerHook, LogProcessor,\n                           MultiOptimWrapperConstructor, MultiTestLoop,\n                           MultiValLoop)\nfrom mmagic.evaluation import Evaluator\nfrom mmagic.visualization import VisBackend, Visualizer\n\ndefault_scope = 'mmagic'\n\nrandomness = dict(seed=2022, diff_rank_seed=True)\n# env settings\ndist_params = dict(backend='nccl')\n# disable opencv multithreading to avoid system being overloaded\nopencv_num_threads = 0\n# set multi-process start method as `fork` to speed up the training\nmp_start_method = 'fork'\n\n# configure for default hooks\ndefault_hooks = dict(\n    # record time of every iteration.\n    timer=dict(type=IterTimerHook),\n    # print log every 100 iterations.\n    logger=dict(type=LoggerHook, interval=100, log_metric_by_epoch=False),\n    # save checkpoint per 10000 iterations\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=10000,\n        by_epoch=False,\n        max_keep_ckpts=20,\n        less_keys=['FID-Full-50k/fid', 'FID-50k/fid', 'swd/avg'],\n        greater_keys=['IS-50k/is', 'ms-ssim/avg'],\n        save_optimizer=True))\n\n# config for environment\nenv_cfg = dict(\n    # whether to enable cudnn benchmark.\n    cudnn_benchmark=True,\n    # set multi process parameters.\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    # set distributed parameters.\n    dist_cfg=dict(backend='nccl'))\n\n# set log level\nlog_level = 'INFO'\nlog_processor = dict(type=LogProcessor, by_epoch=False)\n\n# load from which checkpoint\nload_from = None\n\n# whether to resume training from the loaded checkpoint\nresume = None\n\n# config for model wrapper\nmodel_wrapper_cfg = dict(\n    type=MMSeparateDistributedDataParallel,\n    broadcast_buffers=False,\n    find_unused_parameters=False)\n\n# set visualizer\nvis_backends = [dict(type=VisBackend)]\nvisualizer = dict(type=Visualizer, vis_backends=vis_backends)\n\n# config for training\ntrain_cfg = dict(by_epoch=False, val_begin=1, val_interval=10000)\n\n# config for val\nval_cfg = dict(type=MultiValLoop)\nval_evaluator = dict(type=Evaluator)\n\n# config for test\ntest_cfg = dict(type=MultiTestLoop)\ntest_evaluator = dict(type=Evaluator)\n\n# config for optim_wrapper_constructor\noptim_wrapper = dict(constructor=MultiOptimWrapperConstructor)\n"
  },
  {
    "path": "mmagic/configs/_base_/inpaint_default_runtime.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook,\n                            LoggerHook, ParamSchedulerHook)\nfrom mmengine.runner import LogProcessor\nfrom mmengine.visualization import LocalVisBackend\n\nfrom mmagic.engine.hooks import BasicVisualizationHook\nfrom mmagic.visualization import ConcatImageVisualizer\n\ndefault_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    checkpoint=dict(\n        type=CheckpointHook, interval=50000, by_epoch=False, out_dir=save_dir),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type=LocalVisBackend)]\nvisualizer = dict(\n    type=ConcatImageVisualizer,\n    vis_backends=vis_backends,\n    fn_key='gt_path',\n    img_keys=['gt_img', 'input', 'pred_img'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type=BasicVisualizationHook, interval=1)]\n\nlog_level = 'INFO'\nlog_processor = dict(type=LogProcessor, by_epoch=False)\n\nload_from = None\nresume = False\n\n# TODO: support auto scaling lr\n"
  },
  {
    "path": "mmagic/configs/_base_/matting_default_runtime.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook,\n                            LoggerHook, ParamSchedulerHook)\nfrom mmengine.runner import LogProcessor\nfrom mmengine.visualization import LocalVisBackend\n\nfrom mmagic.engine.hooks import BasicVisualizationHook\nfrom mmagic.visualization import ConcatImageVisualizer\n\ndefault_scope = 'mmagic'\nsave_dir = './work_dirs'\n\ndefault_hooks = dict(\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    checkpoint=dict(\n        type=CheckpointHook, interval=10000, by_epoch=False, out_dir=save_dir),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n\nenv_cfg = dict(\n    cudnn_benchmark=False,\n    mp_cfg=dict(mp_start_method='fork', opencv_num_threads=4),\n    dist_cfg=dict(backend='nccl'),\n)\n\nvis_backends = [dict(type=LocalVisBackend)]\nvisualizer = dict(\n    type=ConcatImageVisualizer,\n    vis_backends=vis_backends,\n    fn_key='trimap_path',\n    img_keys=['pred_alpha', 'trimap', 'gt_merged', 'gt_alpha'],\n    bgr2rgb=True)\ncustom_hooks = [dict(type=BasicVisualizationHook, interval=2000)]\n\nlog_level = 'INFO'\nlog_processor = dict(type=LogProcessor, by_epoch=False)\n\nload_from = None\nresume = False\n\n# TODO: support auto scaling lr\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_cyclegan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.archs import PatchDiscriminator\nfrom mmagic.models.editors import CycleGAN\nfrom mmagic.models.editors.cyclegan import ResnetGenerator\n\n_domain_a = None  # set by user\n_domain_b = None  # set by user\nmodel = dict(\n    type=CycleGAN,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=ResnetGenerator,\n        in_channels=3,\n        out_channels=3,\n        base_channels=64,\n        norm_cfg=dict(type='IN'),\n        use_dropout=False,\n        num_blocks=9,\n        padding_mode='reflect',\n        init_cfg=dict(type='normal', gain=0.02)),\n    discriminator=dict(\n        type=PatchDiscriminator,\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='IN'),\n        init_cfg=dict(type='normal', gain=0.02)),\n    default_domain=None,  # set by user\n    reachable_domains=None,  # set by user\n    related_domains=None  # set by user\n)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_deepfillv1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import MMSeparateDistributedDataParallel\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.archs import MultiLayerDiscriminator\nfrom mmagic.models.editors import (ContextualAttentionNeck, DeepFillDecoder,\n                                   DeepFillEncoder, DeepFillEncoderDecoder,\n                                   DeepFillRefiner, DeepFillv1Discriminators,\n                                   DeepFillv1Inpaintor, GLDilationNeck,\n                                   GLEncoderDecoder)\nfrom mmagic.models.losses import (DiscShiftLoss, GANLoss, GradientPenaltyLoss,\n                                  L1Loss)\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type=MMSeparateDistributedDataParallel)\n\nmodel = dict(\n    type=DeepFillv1Inpaintor,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type=DeepFillEncoderDecoder,\n        stage1=dict(\n            type=GLEncoderDecoder,\n            encoder=dict(type=DeepFillEncoder, padding_mode='reflect'),\n            decoder=dict(\n                type=DeepFillDecoder, in_channels=128, padding_mode='reflect'),\n            dilation_neck=dict(\n                type=GLDilationNeck,\n                in_channels=128,\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect')),\n        stage2=dict(\n            type=DeepFillRefiner,\n            encoder_attention=dict(\n                type=DeepFillEncoder,\n                encoder_type='stage2_attention',\n                padding_mode='reflect'),\n            encoder_conv=dict(\n                type=DeepFillEncoder,\n                encoder_type='stage2_conv',\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type=GLDilationNeck,\n                in_channels=128,\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect'),\n            contextual_attention=dict(\n                type=ContextualAttentionNeck,\n                in_channels=128,\n                padding_mode='reflect'),\n            decoder=dict(\n                type=DeepFillDecoder, in_channels=256,\n                padding_mode='reflect'))),\n    disc=dict(\n        type=DeepFillv1Discriminators,\n        global_disc_cfg=dict(\n            type=MultiLayerDiscriminator,\n            in_channels=3,\n            max_channels=256,\n            fc_in_channels=256 * 16 * 16,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n        local_disc_cfg=dict(\n            type=MultiLayerDiscriminator,\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 8 * 8,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2))),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type=GANLoss,\n        gan_type='wgan',\n        loss_weight=0.0001,\n    ),\n    loss_l1_hole=dict(\n        type=L1Loss,\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type=L1Loss,\n        loss_weight=1.0,\n    ),\n    loss_gp=dict(type=GradientPenaltyLoss, loss_weight=10.),\n    loss_disc_shift=dict(type=DiscShiftLoss, loss_weight=0.001))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0001)),\n    disc=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0001)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_deepfillv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import MMSeparateDistributedDataParallel\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.archs import MultiLayerDiscriminator\nfrom mmagic.models.base_models import TwoStageInpaintor\nfrom mmagic.models.editors import (ContextualAttentionNeck, DeepFillDecoder,\n                                   DeepFillEncoder, DeepFillEncoderDecoder,\n                                   DeepFillRefiner, GLDilationNeck,\n                                   GLEncoderDecoder)\nfrom mmagic.models.losses import GANLoss, L1Loss\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type=MMSeparateDistributedDataParallel)\n\nmodel = dict(\n    type=TwoStageInpaintor,\n    disc_input_with_mask=True,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type=DeepFillEncoderDecoder,\n        stage1=dict(\n            type=GLEncoderDecoder,\n            encoder=dict(\n                type=DeepFillEncoder,\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            decoder=dict(\n                type=DeepFillDecoder,\n                conv_type='gated_conv',\n                in_channels=96,\n                channel_factor=0.75,\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type=GLDilationNeck,\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect')),\n        stage2=dict(\n            type=DeepFillRefiner,\n            encoder_attention=dict(\n                type=DeepFillEncoder,\n                encoder_type='stage2_attention',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            encoder_conv=dict(\n                type=DeepFillEncoder,\n                encoder_type='stage2_conv',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type=GLDilationNeck,\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect'),\n            contextual_attention=dict(\n                type=ContextualAttentionNeck,\n                in_channels=96,\n                conv_type='gated_conv',\n                padding_mode='reflect'),\n            decoder=dict(\n                type=DeepFillDecoder,\n                in_channels=192,\n                conv_type='gated_conv',\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'))),\n    disc=dict(\n        type=MultiLayerDiscriminator,\n        in_channels=4,\n        max_channels=256,\n        fc_in_channels=None,\n        num_convs=6,\n        norm_cfg=None,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        with_spectral_norm=True,\n    ),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type=GANLoss,\n        gan_type='hinge',\n        loss_weight=0.1,\n    ),\n    loss_l1_hole=dict(\n        type=L1Loss,\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type=L1Loss,\n        loss_weight=1.0,\n    ),\n)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0001)),\n    disc=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0001)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_edvr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\nfrom mmengine.hooks import CheckpointHook\nfrom mmengine.optim import OptimWrapper\nfrom mmengine.runner import IterBasedTrainLoop\n\nfrom mmagic.datasets import BasicFramesDataset\nfrom mmagic.datasets.transforms import (Flip, GenerateFrameIndices,\n                                        GenerateFrameIndiceswithPadding,\n                                        GenerateSegmentIndices,\n                                        LoadImageFromFile, PackInputs,\n                                        PairedRandomCrop, RandomTransposeHW,\n                                        SetValues, TemporalReverse)\nfrom mmagic.engine.runner import MultiTestLoop, MultiValLoop\nfrom mmagic.evaluation import PSNR, SSIM\n\n_base_ = '../default_runtime.py'\n\nscale = 4\n\ntrain_pipeline = [\n    dict(type=GenerateFrameIndices, interval_list=[1], frames_per_clip=99),\n    dict(type=TemporalReverse, keys='img_path', reverse_ratio=0),\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type=SetValues, dictionary=dict(scale=scale)),\n    dict(type=PairedRandomCrop, gt_patch_size=256),\n    dict(\n        type=Flip, keys=['img', 'gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type=Flip, keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type=RandomTransposeHW, keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type=PackInputs)\n]\n\nval_pipeline = [\n    dict(type=GenerateFrameIndiceswithPadding, padding='reflection_circle'),\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\ndemo_pipeline = [\n    dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        color_type='color',\n        channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\ndata_root = 'data/REDS'\nsave_dir = './work_dirs'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=8,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_train.txt',\n        depth=2,\n        num_input_frames=5,\n        num_output_frames=1,\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='reds_reds4', task_name='vsr'),\n        data_root=data_root,\n        data_prefix=dict(img='train_sharp_bicubic/X4', gt='train_sharp'),\n        ann_file='meta_info_reds4_val.txt',\n        depth=2,\n        num_input_frames=5,\n        num_output_frames=1,\n        pipeline=val_pipeline))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type=PSNR),\n    dict(type=SSIM),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(type=IterBasedTrainLoop, max_iters=600_000, val_interval=5000)\nval_cfg = dict(type=MultiValLoop)\ntest_cfg = dict(type=MultiTestLoop)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type=OptimWrapper,\n    optimizer=dict(type='Adam', lr=2e-4, betas=(0.9, 0.999)),\n)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=5000,\n        save_optimizer=True,\n        out_dir=save_dir,\n        by_epoch=False))\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_gl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import MMSeparateDistributedDataParallel\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import (GLDecoder, GLDilationNeck, GLEncoder,\n                                   GLEncoderDecoder)\nfrom mmagic.models.editors.global_local import GLDiscs, GLInpaintor\nfrom mmagic.models.losses import GANLoss, L1Loss\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type=MMSeparateDistributedDataParallel)\n\nmodel = dict(\n    type=GLInpaintor,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type=GLEncoderDecoder,\n        encoder=dict(type=GLEncoder, norm_cfg=dict(type='SyncBN')),\n        decoder=dict(type=GLDecoder, norm_cfg=dict(type='SyncBN')),\n        dilation_neck=dict(type=GLDilationNeck, norm_cfg=dict(type='SyncBN'))),\n    disc=dict(\n        type=GLDiscs,\n        global_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=6,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n        local_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=5,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n    ),\n    loss_gan=dict(\n        type=GANLoss,\n        gan_type='vanilla',\n        loss_weight=0.001,\n    ),\n    loss_l1_hole=dict(\n        type=L1Loss,\n        loss_weight=1.0,\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0004)),\n    disc=dict(type=OptimWrapper, optimizer=dict(type='Adam', lr=0.0004)))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_glean.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook,\n                            LoggerHook, ParamSchedulerHook)\nfrom mmengine.model import MMSeparateDistributedDataParallel\nfrom mmengine.optim import CosineAnnealingLR, OptimWrapper\nfrom mmengine.runner import IterBasedTrainLoop\n\nfrom mmagic.engine.runner import MultiTestLoop, MultiValLoop\nfrom mmagic.evaluation import MAE, PSNR, SSIM\n\n_base_ = '../default_runtime.py'\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(\n    type=MMSeparateDistributedDataParallel, find_unused_parameters=True)\n\nsave_dir = './work_dirs'\n\nval_evaluator = [\n    dict(type=MAE),\n    dict(type=PSNR),\n    dict(type=SSIM),\n]\ntest_evaluator = val_evaluator\n\ntrain_cfg = dict(type=IterBasedTrainLoop, max_iters=300_000, val_interval=5000)\nval_cfg = dict(type=MultiValLoop)\ntest_cfg = dict(type=MultiTestLoop)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='MultiOptimWrapperConstructor',\n    generator=dict(\n        type=OptimWrapper,\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n    discriminator=dict(\n        type=OptimWrapper,\n        optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type=CosineAnnealingLR, by_epoch=False, T_max=600_000, eta_min=1e-7)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=5000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n        save_best=['MAE', 'PSNR', 'SSIM'],\n        rule=['less', 'greater', 'greater']),\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_liif.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook,\n                            LoggerHook, ParamSchedulerHook)\nfrom mmengine.optim import MultiStepLR, OptimWrapper\nfrom mmengine.runner import IterBasedTrainLoop\n\nfrom mmagic.datasets.transforms import (Flip, GenerateCoordinateAndCell,\n                                        LoadImageFromFile, PackInputs,\n                                        RandomDownSampling, RandomTransposeHW)\nfrom mmagic.engine.runner import MultiValLoop\nfrom mmagic.evaluation import MAE, PSNR, SSIM, Evaluator\n\n_base_ = '../default_runtime.py'\nwork_dir = './work_dirs/liif'\nsave_dir = './work_dirs'\n\nscale_min, scale_max = 1, 4\nscale_test = 4\n\ntrain_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(\n        type=RandomDownSampling,\n        scale_min=scale_min,\n        scale_max=scale_max,\n        patch_size=48),\n    dict(\n        type=Flip, keys=['img', 'gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type=Flip, keys=['img', 'gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type=RandomTransposeHW, keys=['img', 'gt'], transpose_ratio=0.5),\n    dict(type=GenerateCoordinateAndCell, sample_quantity=2304),\n    dict(type=PackInputs)\n]\nval_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        color_type='color',\n        channel_order='rgb',\n        imdecode_backend='cv2'),\n    dict(type=RandomDownSampling, scale_min=scale_max, scale_max=scale_max),\n    dict(type=GenerateCoordinateAndCell, reshape_gt=False),\n    dict(type=PackInputs)\n]\n# test_pipeline = [\n#     dict(\n#         type=LoadImageFromFile,\n#         key='gt',\n#         color_type='color',\n#         channel_order='rgb',\n#         imdecode_backend='cv2'),\n#     dict(\n#         type=LoadImageFromFile,\n#         key='img',\n#         color_type='color',\n#         channel_order='rgb',\n#         imdecode_backend='cv2'),\n#     dict(type=GenerateCoordinateAndCell, scale=scale_test,\n#          reshape_gt=False),\n#     dict(type=PackInputs)\n# ]\n\n# dataset settings\ndataset_type = 'BasicImageDataset'\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=8,\n    batch_size=16,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        ann_file='meta_info_DIV2K800sub_GT.txt',\n        metainfo=dict(dataset_type='div2k', task_name='sisr'),\n        data_root=data_root + '/DIV2K',\n        data_prefix=dict(gt='DIV2K_train_HR_sub'),\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=dataset_type,\n        metainfo=dict(dataset_type='set5', task_name='sisr'),\n        data_root=data_root + '/Set5',\n        data_prefix=dict(img='LRbicx4', gt='GTmod12'),\n        pipeline=val_pipeline))\n\nval_evaluator = dict(\n    type=Evaluator,\n    metrics=[\n        dict(type=MAE),\n        dict(type=PSNR, crop_border=scale_max),\n        dict(type=SSIM, crop_border=scale_max),\n    ])\n\ntrain_cfg = dict(\n    type=IterBasedTrainLoop, max_iters=1_000_000, val_interval=3000)\nval_cfg = dict(type=MultiValLoop)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type=OptimWrapper,\n    optimizer=dict(type='Adam', lr=1e-4))\n\n# learning policy\nparam_scheduler = dict(\n    type=MultiStepLR,\n    by_epoch=False,\n    milestones=[200_000, 400_000, 600_000, 800_000],\n    gamma=0.5)\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=3000,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_pconv.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import MMSeparateDistributedDataParallel\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import (PConvDecoder, PConvEncoder,\n                                   PConvEncoderDecoder, PConvInpaintor)\nfrom mmagic.models.losses import L1Loss, MaskedTVLoss, PerceptualLoss\n\n# DistributedDataParallel\nmodel_wrapper_cfg = dict(type=MMSeparateDistributedDataParallel)\n\nmodel = dict(\n    type=PConvInpaintor,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type=PConvEncoderDecoder,\n        encoder=dict(\n            type=PConvEncoder,\n            norm_cfg=dict(type='SyncBN', requires_grad=False),\n            norm_eval=True),\n        decoder=dict(type=PConvDecoder, norm_cfg=dict(type='SyncBN'))),\n    disc=None,\n    loss_composed_percep=dict(\n        type=PerceptualLoss,\n        vgg_type='vgg16',\n        layer_weights={\n            '4': 1.,\n            '9': 1.,\n            '16': 1.,\n        },\n        perceptual_weight=0.05,\n        style_weight=120,\n        pretrained=('torchvision://vgg16')),\n    loss_out_percep=True,\n    loss_l1_hole=dict(\n        type=L1Loss,\n        loss_weight=6.,\n    ),\n    loss_l1_valid=dict(\n        type=L1Loss,\n        loss_weight=1.,\n    ),\n    loss_tv=dict(\n        type=MaskedTVLoss,\n        loss_weight=0.1,\n    ))\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type=OptimWrapper,\n    optimizer=dict(type='Adam', lr=0.00005))\n\n# learning policy\n# Fixed\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_pix2pix.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.archs import PatchDiscriminator\nfrom mmagic.models.editors import Pix2Pix\nfrom mmagic.models.editors.pix2pix import UnetGenerator\n\nsource_domain = None  # set by user\ntarget_domain = None  # set by user\n# model settings\nmodel = dict(\n    type=Pix2Pix,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=UnetGenerator,\n        in_channels=3,\n        out_channels=3,\n        num_down=8,\n        base_channels=64,\n        norm_cfg=dict(type='BN'),\n        use_dropout=True,\n        init_cfg=dict(type='normal', gain=0.02)),\n    discriminator=dict(\n        type=PatchDiscriminator,\n        in_channels=6,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='BN'),\n        init_cfg=dict(type='normal', gain=0.02)),\n    loss_config=dict(pixel_loss_weight=100.0),\n    default_domain=target_domain,\n    reachable_domains=[target_domain],\n    related_domains=[target_domain, source_domain])\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_styleganv1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors.stylegan1 import (StyleGAN1, StyleGAN1Discriminator,\n                                             StyleGAN1Generator)\n\nmodel = dict(\n    type=StyleGAN1,\n    data_preprocessor=dict(type=DataPreprocessor),\n    style_channels=512,\n    generator=dict(type=StyleGAN1Generator, out_size=None, style_channels=512),\n    discriminator=dict(type=StyleGAN1Discriminator, in_size=None))\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_styleganv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import ExponentialMovingAverage\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import StyleGAN2\nfrom mmagic.models.editors.stylegan2 import (StyleGAN2Discriminator,\n                                             StyleGAN2Generator)\n\n# define GAN model\n\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nloss_config = dict(\n    r1_loss_weight=10. / 2. * d_reg_interval,\n    r1_interval=d_reg_interval,\n    norm_mode='HWC',\n    g_reg_interval=g_reg_interval,\n    g_reg_weight=2. * g_reg_interval,\n    pl_batch_shrink=2)\n\nmodel = dict(\n    type=StyleGAN2,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=StyleGAN2Generator,\n        out_size=None,  # Need to be set.\n        style_channels=512,\n    ),\n    discriminator=dict(\n        type=StyleGAN2Discriminator,\n        in_size=None,  # Need to be set.\n    ),\n    ema_config=dict(type=ExponentialMovingAverage),\n    loss_config=loss_config)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_styleganv3.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# define GAN model\nfrom mmagic.models.base_models.average_model import ExponentialMovingAverage\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Discriminator\nfrom mmagic.models.editors.stylegan3 import StyleGAN3, StyleGAN3Generator\n\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nmodel = dict(\n    type=StyleGAN3,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=StyleGAN3Generator,  # StyleGANv3Generator\n        noise_size=512,\n        style_channels=512,\n        out_size=None,  # Need to be set.\n        img_channels=3,\n    ),\n    discriminator=dict(\n        type=StyleGAN2Discriminator,\n        in_size=None,  # Need to be set.\n    ),\n    ema_config=dict(type=ExponentialMovingAverage),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n"
  },
  {
    "path": "mmagic/configs/_base_/models/base_tof.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, IterTimerHook,\n                            LoggerHook, ParamSchedulerHook)\nfrom mmengine.optim import MultiStepLR, OptimWrapper\nfrom mmengine.runner import IterBasedTrainLoop\n\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine.runner import MultiTestLoop, MultiValLoop\nfrom mmagic.evaluation import MAE, PSNR, SSIM\n\n_base_ = '../default_runtime.py'\n\ntrain_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(\n        type=LoadImageFromFile,\n        key='gt',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type=PackInputs)\n]\n\ndemo_pipeline = [\n    dict(\n        type=LoadImageFromFile,\n        key='img',\n        channel_order='rgb',\n        imdecode_backend='pillow'),\n    dict(type=PackInputs)\n]\n\n# dataset settings\ntrain_dataset_type = 'BasicFramesDataset'\nval_dataset_type = 'BasicFramesDataset'\ndata_root = 'data/vimeo_triplet'\nsave_dir = './work_dirs'\n\ntrain_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=train_dataset_type,\n        ann_file='tri_trainlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\nval_dataloader = dict(\n    num_workers=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=val_dataset_type,\n        ann_file='tri_testlist.txt',\n        metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n        data_root=data_root,\n        data_prefix=dict(img='sequences', gt='sequences'),\n        pipeline=train_pipeline,\n        depth=2,\n        load_frames_list=dict(img=['im1.png', 'im3.png'], gt=['im2.png'])))\n\ntest_dataloader = val_dataloader\n\nval_evaluator = [\n    dict(type=MAE),\n    dict(type=PSNR),\n    dict(type=SSIM),\n]\ntest_evaluator = val_evaluator\n\n# 5000 iters == 1 epoch\nepoch_length = 5000\n\ntrain_cfg = dict(\n    type=IterBasedTrainLoop, max_iters=1_000_000, val_interval=epoch_length)\nval_cfg = dict(type=MultiValLoop)\ntest_cfg = dict(type=MultiTestLoop)\n\n# optimizer\noptim_wrapper = dict(\n    constructor='DefaultOptimWrapperConstructor',\n    type=OptimWrapper,\n    optimizer=dict(\n        type='Adam',\n        lr=5e-5,\n        betas=(0.9, 0.99),\n        weight_decay=1e-4,\n    ),\n)\n\n# learning policy\nparam_scheduler = dict(\n    type=MultiStepLR,\n    by_epoch=False,\n    gamma=0.5,\n    milestones=[200000, 400000, 600000, 800000])\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=epoch_length,\n        save_optimizer=True,\n        by_epoch=False,\n        out_dir=save_dir,\n    ),\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/biggan/base_biggan_128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nmodel = dict(\n    type='BigGAN',\n    num_classes=1000,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    generator=dict(\n        type='BigGANGenerator',\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type='BigGANDiscriminator',\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')),\n    generator_steps=1,\n    discriminator_steps=1)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/dcgan/base_dcgan_128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import DCGAN\nfrom mmagic.models.editors.dcgan import DCGANDiscriminator, DCGANGenerator\n\n# define GAN model\nmodel = dict(\n    type=DCGAN,\n    noise_size=100,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(type=DCGANGenerator, output_scale=128, base_channels=1024),\n    discriminator=dict(\n        type=DCGANDiscriminator,\n        input_scale=128,\n        output_scale=4,\n        out_channels=100))\n"
  },
  {
    "path": "mmagic/configs/_base_/models/dcgan/base_dcgan_64x64.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import DCGAN\nfrom mmagic.models.editors.dcgan import DCGANDiscriminator, DCGANGenerator\n\n# define GAN model\nmodel = dict(\n    type=DCGAN,\n    noise_size=100,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(type=DCGANGenerator, output_scale=64, base_channels=1024),\n    discriminator=dict(\n        type=DCGANDiscriminator,\n        input_scale=64,\n        output_scale=4,\n        out_channels=1))\n"
  },
  {
    "path": "mmagic/configs/_base_/models/sagan/base_sagan_128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import SAGAN\nfrom mmagic.models.editors.biggan import SelfAttentionBlock\nfrom mmagic.models.editors.sagan import ProjDiscriminator, SNGANGenerator\n\nmodel = dict(\n    type=SAGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=SNGANGenerator,\n        output_scale=128,\n        base_channels=64,\n        attention_cfg=dict(type=SelfAttentionBlock),\n        attention_after_nth_block=4,\n        with_spectral_norm=True),\n    discriminator=dict(\n        type=ProjDiscriminator,\n        input_scale=128,\n        base_channels=64,\n        attention_cfg=dict(type=SelfAttentionBlock),\n        attention_after_nth_block=1,\n        with_spectral_norm=True),\n    generator_steps=1,\n    discriminator_steps=1)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/sagan/base_sagan_32x32.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import SAGAN\nfrom mmagic.models.editors.biggan import SelfAttentionBlock\nfrom mmagic.models.editors.sagan import ProjDiscriminator, SNGANGenerator\n\nmodel = dict(\n    type=SAGAN,\n    data_preprocessor=dict(type=DataPreprocessor),\n    num_classes=10,\n    generator=dict(\n        type=SNGANGenerator,\n        num_classes=10,\n        output_scale=32,\n        base_channels=256,\n        attention_cfg=dict(type=SelfAttentionBlock),\n        attention_after_nth_block=2,\n        with_spectral_norm=True),\n    discriminator=dict(\n        type=ProjDiscriminator,\n        num_classes=10,\n        input_scale=32,\n        base_channels=128,\n        attention_cfg=dict(type=SelfAttentionBlock),\n        attention_after_nth_block=1,\n        with_spectral_norm=True),\n    generator_steps=1,\n    discriminator_steps=5)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/sngan_proj/base_sngan_proj_128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors.sagan import (SAGAN, ProjDiscriminator,\n                                         SNGANGenerator)\n\n# define GAN model\nmodel = dict(\n    type=SAGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(type=SNGANGenerator, output_scale=128, base_channels=64),\n    discriminator=dict(\n        type=ProjDiscriminator, input_scale=128, base_channels=64),\n    discriminator_steps=2)\n"
  },
  {
    "path": "mmagic/configs/_base_/models/sngan_proj/base_sngan_proj_32x32.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors.sagan import (SAGAN, ProjDiscriminator,\n                                         SNGANGenerator)\n\n# define GAN model\nmodel = dict(\n    type=SAGAN,\n    num_classes=10,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(type=SNGANGenerator, output_scale=32, base_channels=256),\n    discriminator=dict(\n        type=ProjDiscriminator, input_scale=32, base_channels=128),\n    discriminator_steps=5)\n"
  },
  {
    "path": "mmagic/configs/_base_/schedules/.gitkeep",
    "content": ""
  },
  {
    "path": "mmagic/configs/biggan/biggan-deep_cvt-hugging-face-rgb_imagenet1k-128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.biggan import (BigGAN, BigGANDeepDiscriminator,\n                                          BigGANGenerator)\n\nwith read_base():\n    from .._base_.datasets.imagenet_noaug_128 import *\n    from .._base_.gen_default_runtime import *\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type=BigGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    ema_config=ema_config,\n    generator=dict(\n        type=BigGANGenerator,\n        output_scale=128,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type=BigGANDeepDiscriminator,\n        input_scale=128,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.biggan import (BigGAN, BigGANDiscriminator,\n                                          BigGANGenerator)\n\nwith read_base():\n    from .._base_.datasets.imagenet_noaug_128 import *\n    from .._base_.gen_default_runtime import *\n\n# setting image size to 256x256\ntrain_dataloader.dataset.pipeline[2].scale = (256, 256)\ntest_dataloader.dataset.pipeline[2].scale = (256, 256)\nval_dataloader.dataset.pipeline[2].scale = (256, 256)\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type=BigGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    ema_config=ema_config,\n    generator=dict(\n        type=BigGANGenerator,\n        output_scale=256,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type=BigGANDiscriminator,\n        input_scale=256,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/biggan/biggan-deep_cvt-hugging-face_rgb_imagenet1k-512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.biggan import (BigGAN, BigGANDiscriminator,\n                                          BigGANGenerator)\n\nwith read_base():\n    from .._base_.datasets.imagenet_noaug_128 import *\n    from .._base_.gen_default_runtime import *\n\n# setting image size to 512x512\ntrain_dataloader.dataset.pipeline[2].scale = (512, 512)\ntest_dataloader.dataset.pipeline[2].scale = (512, 512)\nval_dataloader.dataset.pipeline[2].scale = (512, 512)\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type=BigGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    ema_config=ema_config,\n    generator=dict(\n        type=BigGANGenerator,\n        output_scale=512,\n        noise_size=128,\n        num_classes=1000,\n        base_channels=128,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        concat_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type=BigGANDiscriminator,\n        input_scale=512,\n        num_classes=1000,\n        base_channels=128,\n        sn_eps=1e-6,\n        sn_style='torch',\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/biggan/biggan_2xb25-500kiters_cifar10-32x32.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.biggan import (BigGAN, BigGANDiscriminator,\n                                          BigGANGenerator)\n\n# define model\n\nwith read_base():\n    from .._base_.datasets.cifar10_noaug import *\n    from .._base_.gen_default_runtime import *\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    start_iter=1000)\n\nmodel = dict(\n    type=BigGAN,\n    num_classes=10,\n    data_preprocessor=dict(type=DataPreprocessor, output_channel_order='BGR'),\n    generator=dict(\n        type=BigGANGenerator,\n        output_scale=32,\n        noise_size=128,\n        num_classes=10,\n        base_channels=64,\n        with_shared_embedding=False,\n        sn_eps=1e-8,\n        sn_style='torch',\n        split_noise=False,\n        auto_sync_bn=False,\n        init_cfg=dict(type='N02')),\n    discriminator=dict(\n        type=BigGANDiscriminator,\n        input_scale=32,\n        num_classes=10,\n        base_channels=64,\n        sn_eps=1e-8,\n        sn_style='torch',\n        with_spectral_norm=True,\n        init_cfg=dict(type='N02')),\n    generator_steps=1,\n    discriminator_steps=4,\n    ema_config=ema_config)\n\n# define dataset\ntrain_dataloader = dict(batch_size=25, num_workers=8)\nval_dataloader = dict(batch_size=25, num_workers=8)\ntest_dataloader = dict(batch_size=25, num_workers=8)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n]\n\noptim_wrapper = dict(\n    generator=dict(optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999))),\n    discriminator=dict(\n        optimizer=dict(type='Adam', lr=0.0002, betas=(0.0, 0.999))))\ntrain_cfg = dict(max_iters=500000)\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/biggan/biggan_ajbrock-sn_8xb32-1500kiters_imagenet1k-128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\n\nwith read_base():\n    from .._base_.datasets.imagenet_noaug_128 import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.biggan.base_biggan_128x128 import *\n\n# define model\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(ema_config=ema_config)\ntrain_cfg = dict(max_iters=1500000)\n\n# define dataset\ntrain_dataloader = dict(\n    batch_size=32, num_workers=8, dataset=dict(data_root='data/imagenet'))\n\n# define optimizer\noptim_wrapper = dict(\n    generator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0001, betas=(0.0, 0.999), eps=1e-6)),\n    discriminator=dict(\n        accumulative_counts=8,\n        optimizer=dict(type='Adam', lr=0.0004, betas=(0.0, 0.999), eps=1e-6)))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=10000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n]\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# save multi best checkpoints\ndefault_hooks = dict(\n    checkpoint=dict(\n        save_best=['FID-Full-50k/fid', 'IS-50k/is'], rule=['less', 'greater']))\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/biggan/biggan_cvt-BigGAN-PyTorch-rgb_imagenet1k-128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.biggan import (BigGAN, BigGANDiscriminator,\n                                          BigGANGenerator)\n\nwith read_base():\n    from .._base_.datasets.imagenet_noaug_128 import *\n    from .._base_.gen_default_runtime import *\n\nema_config = dict(\n    type='ExponentialMovingAverage',\n    interval=1,\n    momentum=0.0001,\n    update_buffers=True,\n    start_iter=20000)\n\nmodel = dict(\n    type=BigGAN,\n    num_classes=1000,\n    data_preprocessor=dict(type=DataPreprocessor),\n    ema_config=ema_config,\n    generator=dict(\n        type=BigGANGenerator,\n        output_scale=128,\n        noise_size=120,\n        num_classes=1000,\n        base_channels=96,\n        shared_dim=128,\n        with_shared_embedding=True,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        split_noise=True,\n        auto_sync_bn=False,\n        rgb2bgr=True,\n        init_cfg=dict(type='ortho')),\n    discriminator=dict(\n        type=BigGANDiscriminator,\n        input_scale=128,\n        num_classes=1000,\n        base_channels=96,\n        sn_eps=1e-6,\n        act_cfg=dict(type='ReLU', inplace=True),\n        with_spectral_norm=True,\n        init_cfg=dict(type='ortho')))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type='IS',\n        prefix='IS-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/dreambooth/dreambooth-finetune_text_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nfrom mmengine.dataset.sampler import InfiniteSampler\nfrom torch.optim import AdamW\n\nfrom mmagic.datasets.dreambooth_dataset import DreamBoothDataset\nfrom mmagic.datasets.transforms.aug_shape import Resize\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.editors.disco_diffusion.clip_wrapper import ClipWrapper\nfrom mmagic.models.editors.dreambooth import DreamBooth\n\n# config for model\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\n\nmodel = dict(\n    type=DreamBooth,\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='unet',\n    ),\n    text_encoder=dict(\n        type=ClipWrapper,\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    finetune_text_encoder=True,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type=DataPreprocessor),\n    val_prompts=val_prompts)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper.update(\n    modules='.*unet',\n    optimizer=dict(type=AdamW, lr=5e-6),\n    accumulative_counts=4  # batch size = 4 * 1 = 4\n)\n\npipeline = [\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=Resize, scale=(512, 512)),\n    dict(type=PackInputs)\n]\n\ndataset = dict(\n    type=DreamBoothDataset,\n    data_root='./data/dreambooth',\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks.update(dict(logger=dict(interval=10)))\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=50,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "mmagic/configs/dreambooth/dreambooth-prior_pre.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .dreambooth import *\n\n# config for model\nmodel.update(dict(prior_loss_weight=1, class_prior_prompt='a dog'))\n"
  },
  {
    "path": "mmagic/configs/dreambooth/dreambooth.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nfrom mmengine.dataset.sampler import InfiniteSampler\nfrom torch.optim import AdamW\n\nfrom mmagic.datasets.dreambooth_dataset import DreamBoothDataset\nfrom mmagic.datasets.transforms.aug_shape import Resize\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.editors.disco_diffusion.clip_wrapper import ClipWrapper\nfrom mmagic.models.editors.dreambooth import DreamBooth\n\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\n\nmodel = dict(\n    type=DreamBooth,\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='unet',\n    ),\n    text_encoder=dict(\n        type=ClipWrapper,\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type=DataPreprocessor),\n    val_prompts=val_prompts)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper.update(\n    modules='.*unet',\n    optimizer=dict(type=AdamW, lr=5e-6),\n    accumulative_counts=4  # batch size = 4 * 1 = 4\n)\n\npipeline = [\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=Resize, scale=(512, 512)),\n    dict(type=PackInputs)\n]\n\ndataset = dict(\n    type=DreamBoothDataset,\n    data_root='./data/dreambooth',\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks.update(dict(logger=dict(interval=10)))\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=50,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "mmagic/configs/dreambooth/dreambooth_lora-prior_pre.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .dreambooth_lora import *\n\nmodel.update(dict(prior_loss_weight=1, class_prior_prompt='a dog'))\n"
  },
  {
    "path": "mmagic/configs/dreambooth/dreambooth_lora.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nfrom mmengine.dataset.sampler import InfiniteSampler\nfrom torch.optim import AdamW\n\nfrom mmagic.datasets.dreambooth_dataset import DreamBoothDataset\nfrom mmagic.datasets.transforms.aug_shape import Resize\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.editors.disco_diffusion.clip_wrapper import ClipWrapper\nfrom mmagic.models.editors.dreambooth import DreamBooth\n\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\nval_prompts = [\n    'a sks dog in basket', 'a sks dog on the mountain',\n    'a sks dog beside a swimming pool', 'a sks dog on the desk',\n    'a sleeping sks dog', 'a screaming sks dog', 'a man in the garden'\n]\nlora_config = dict(target_modules=['to_q', 'to_k', 'to_v'])\n\nmodel = dict(\n    type=DreamBooth,\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet2DConditionModel',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='unet',\n    ),\n    text_encoder=dict(\n        type=ClipWrapper,\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type=DataPreprocessor),\n    prior_loss_weight=0,\n    val_prompts=val_prompts,\n    lora_config=lora_config)\n\ntrain_cfg = dict(max_iters=1000)\n\noptim_wrapper = dict(\n    # Only optimize LoRA mappings\n    modules='.*.lora_mapping',\n    # NOTE: lr should be larger than dreambooth finetuning\n    optimizer=dict(type=AdamW, lr=5e-4),\n    accumulative_counts=1)\n\npipeline = [\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=Resize, scale=(512, 512)),\n    dict(type=PackInputs)\n]\ndataset = dict(\n    type=DreamBoothDataset,\n    data_root='./data/dreambooth',\n    # TODO: rename to instance\n    concept_dir='imgs',\n    prompt='a photo of sks dog',\n    pipeline=pipeline)\ntrain_dataloader = dict(\n    dataset=dataset,\n    num_workers=16,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    persistent_workers=True,\n    batch_size=1)\nval_cfg = val_evaluator = val_dataloader = None\ntest_cfg = test_evaluator = test_dataloader = None\n\n# hooks\ndefault_hooks.update(dict(logger=dict(interval=10)))\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=50,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='Data', name='fake_img'),\n        n_samples=1)\n]\n"
  },
  {
    "path": "mmagic/configs/eg3d/eg3d_cvt-official-rgb_afhq-512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\n# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa\n# mmcv >= 2.0.1\n# mmengine >= 0.8.0\n\nfrom mmengine.config import read_base\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicConditionalDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.eg3d import EG3D, GaussianCamera, TriplaneGenerator\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nmodel = dict(\n    type=EG3D,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=TriplaneGenerator,\n        out_size=512,\n        triplane_channels=32,\n        triplane_size=256,\n        num_mlps=2,\n        sr_add_noise=False,\n        sr_in_size=128,\n        neural_rendering_resolution=128,\n        renderer_cfg=dict(\n            ray_start=2.25,\n            ray_end=3.3,\n            box_warp=1,\n            depth_resolution=48,\n            depth_resolution_importance=48,\n            white_back=False,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type=GaussianCamera,\n        horizontal_mean=3.14 / 2,\n        horizontal_std=0.35,\n        vertical_mean=3.14 / 2 - 0.05,\n        vertical_std=0.25,\n        radius=2.7,\n        fov=18.837,\n        look_at=[0, 0, 0.2]))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_afhq.pkl'\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img', color_type='color'),\n    dict(type=PackInputs)\n]\ntest_dataset = dict(\n    type=BasicConditionalDataset,\n    data_root='./data/eg3d/afhq',\n    ann_file='afhq.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 4` cost nearly **9.5GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "mmagic/configs/eg3d/eg3d_cvt-official-rgb_ffhq-512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\n# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa\n# mmcv >= 2.0.1\n# mmengine >= 0.8.0\n\nfrom mmengine.config import read_base\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicConditionalDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.eg3d import EG3D, GaussianCamera, TriplaneGenerator\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nmodel = dict(\n    type=EG3D,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=TriplaneGenerator,\n        out_size=512,\n        triplane_channels=32,\n        triplane_size=256,\n        num_mlps=2,\n        neural_rendering_resolution=128,\n        sr_add_noise=False,\n        sr_in_size=128,\n        # NOTE: double hidden channels and out channels for FFHQ-512\n        sr_hidden_channels=256,\n        sr_out_channels=128,\n        renderer_cfg=dict(\n            ray_start=2.25,\n            ray_end=3.3,\n            box_warp=1,\n            depth_resolution=48,\n            depth_resolution_importance=48,\n            white_back=False,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type=GaussianCamera,\n        horizontal_mean=3.14 / 2,\n        horizontal_std=0.35,\n        vertical_mean=3.14 / 2 - 0.05,\n        vertical_std=0.25,\n        radius=2.7,\n        fov=18.837,\n        look_at=[0, 0, 0.2]))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_ffhq_512.pkl'\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig')\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img', color_type='color'),\n    dict(type=PackInputs)\n]\ntest_dataset = dict(\n    type=BasicConditionalDataset,\n    data_root='./data/eg3d/ffhq_512',\n    ann_file='ffhq_512.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 4` cost nearly **9.5GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=4,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "mmagic/configs/eg3d/eg3d_cvt-official-rgb_shapenet-128x128.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\n# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa\n# mmcv >= 2.0.1\n# mmengine >= 0.8.0\n\nfrom mmengine.config import read_base\nfrom mmengine.dataset import DefaultSampler\n\nfrom mmagic.datasets import BasicConditionalDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile, PackInputs\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors.eg3d import EG3D, TriplaneGenerator, UniformCamera\n\nwith read_base():\n    from .._base_.gen_default_runtime import *\n\nmodel = dict(\n    type=EG3D,\n    data_preprocessor=dict(type=DataPreprocessor),\n    generator=dict(\n        type=TriplaneGenerator,\n        out_size=128,\n        zero_cond_input=True,\n        cond_scale=0,\n        sr_in_size=64,\n        renderer_cfg=dict(\n            # Official implementation set ray_start, ray_end and box_warp as\n            # 0.1, 2.6 and 1.6 respectively, and FID is 7.2441\n            # ray_start=0.1,\n            # ray_end=2.6,\n            # box_warp=1.6,\n            ray_start=0.4,\n            ray_end=2.0,\n            box_warp=1.7,\n            depth_resolution=64,\n            depth_resolution_importance=64,\n            white_back=True,\n        ),\n        rgb2bgr=True),\n    camera=dict(\n        type=UniformCamera,\n        horizontal_mean=3.141,\n        horizontal_std=3.141,\n        vertical_mean=3.141 / 2,\n        vertical_std=3.141 / 2,\n        focal=1.025390625,\n        up=[0, 0, 1],\n        radius=1.2),\n)\n\ntrain_cfg = train_dataloader = optim_wrapper = None\nval_cfg = val_dataloader = val_evaluator = None\n\ninception_pkl = './work_dirs/inception_pkl/eg3d_shapenet.pkl'\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        need_cond_input=True,\n        sample_model='orig'),\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Random-Camera',\n        fake_nums=50000,\n        inception_pkl=inception_pkl,\n        sample_model='orig'),\n]\n\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img', color_type='color'),\n    dict(type=PackInputs)\n]\ntest_dataset = dict(\n    type=BasicConditionalDataset,\n    data_root='./data/eg3d/shapenet-car',\n    ann_file='shapenet.json',\n    pipeline=test_pipeline)\ntest_dataloader = dict(\n    # NOTE: `batch_size = 16` cost nearly **12GB** of GPU memory,\n    # modification this param by yourself corresponding to your own GPU.\n    batch_size=16,\n    persistent_workers=False,\n    drop_last=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    num_workers=9,\n    dataset=test_dataset)\n\ntest_evaluator = dict(metrics=metrics)\n\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        # save_at_test=False,\n        vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .adm_ddim250_8xb32_imagenet_256x256 import *\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.editors.guided_diffusion.classifier import EncoderUNetModel\n\nmodel.update(\n    dict(\n        classifier=dict(\n            type=EncoderUNetModel,\n            image_size=256,\n            in_channels=3,\n            model_channels=128,\n            out_channels=1000,\n            num_res_blocks=2,\n            attention_resolutions=(8, 16, 32),\n            channel_mult=(1, 1, 2, 2, 4, 4),\n            use_fp16=False,\n            num_head_channels=64,\n            use_scale_shift_norm=True,\n            resblock_updown=True,\n            pool='attention')))\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet_512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .adm_ddim250_8xb32_imagenet_512x512 import *\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.editors.guided_diffusion.classifier import EncoderUNetModel\n\nmodel.update(\n    dict(\n        classifier=dict(\n            type=EncoderUNetModel,\n            image_size=512,\n            in_channels=3,\n            model_channels=128,\n            out_channels=1000,\n            num_res_blocks=2,\n            attention_resolutions=(16, 32, 64),\n            channel_mult=(0.5, 1, 1, 2, 2, 4, 4),\n            use_fp16=False,\n            num_head_channels=64,\n            use_scale_shift_norm=True,\n            resblock_updown=True,\n            pool='attention')))\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm-g_ddim25_8xb32_imagenet_64x64.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .adm_ddim250_8xb32_imagenet_64x64 import *\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.editors.guided_diffusion.classifier import EncoderUNetModel\n\nmodel.update(\n    dict(\n        classifier=dict(\n            type=EncoderUNetModel,\n            image_size=64,\n            in_channels=3,\n            model_channels=128,\n            out_channels=1000,\n            num_res_blocks=4,\n            attention_resolutions=(2, 4, 8),\n            channel_mult=(1, 2, 3, 4),\n            use_fp16=False,\n            num_head_channels=64,\n            use_scale_shift_norm=True,\n            resblock_updown=True,\n            pool='attention')))\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm_ddim250_8xb32_imagenet_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.imagenet_64 import *\n    from .._base_.gen_default_runtime import *\n\nfrom mmagic.engine.hooks.visualization_hook import VisualizationHook\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.diffusion_schedulers.ddim_scheduler import EditDDIMScheduler\nfrom mmagic.models.editors.ddpm.denoising_unet import (DenoisingUnet,\n                                                       MultiHeadAttentionBlock)\nfrom mmagic.models.editors.guided_diffusion.adm import AblatedDiffusionModel\n\nmodel = dict(\n    type=AblatedDiffusionModel,\n    data_preprocessor=dict(type=DataPreprocessor),\n    unet=dict(\n        type=DenoisingUnet,\n        image_size=256,\n        in_channels=3,\n        base_channels=256,\n        resblocks_per_downsample=2,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type=MultiHeadAttentionBlock,\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=False),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type=EditDDIMScheduler,\n        variance_type='learned_range',\n        beta_schedule='linear'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader.update(dict(batch_size=32, num_workers=8))\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n\n# VIS_HOOK\ncustom_hooks = [dict(type=VisualizationHook, interval=5000, fixed_input=True)]\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm_ddim250_8xb32_imagenet_512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.imagenet_512 import *\n    from .._base_.gen_default_runtime import *\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.diffusion_schedulers.ddim_scheduler import EditDDIMScheduler\nfrom mmagic.models.editors.ddpm.denoising_unet import (DenoisingUnet,\n                                                       MultiHeadAttentionBlock)\nfrom mmagic.models.editors.guided_diffusion import AblatedDiffusionModel\n\nmodel = dict(\n    type=AblatedDiffusionModel,\n    data_preprocessor=dict(type=DataPreprocessor),\n    unet=dict(\n        type=DenoisingUnet,\n        image_size=512,\n        in_channels=3,\n        base_channels=256,\n        resblocks_per_downsample=2,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type=MultiHeadAttentionBlock,\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=False),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type=EditDDIMScheduler,\n        variance_type='learned_range',\n        beta_schedule='linear'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader.update(dict(batch_size=32, num_workers=8))\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/guided_diffusion/adm_ddim250_8xb32_imagenet_64x64.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.imagenet_64 import *\n    from .._base_.gen_default_runtime import *\n\nfrom mmagic.evaluation.metrics import FrechetInceptionDistance\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.diffusion_schedulers.ddim_scheduler import EditDDIMScheduler\nfrom mmagic.models.editors.ddpm.denoising_unet import (DenoisingUnet,\n                                                       MultiHeadAttentionBlock)\nfrom mmagic.models.editors.guided_diffusion import AblatedDiffusionModel\n\nmodel = dict(\n    type=AblatedDiffusionModel,\n    data_preprocessor=dict(type=DataPreprocessor),\n    unet=dict(\n        type=DenoisingUnet,\n        image_size=64,\n        in_channels=3,\n        base_channels=192,\n        resblocks_per_downsample=3,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=1000,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type=MultiHeadAttentionBlock,\n            num_heads=4,\n            num_head_channels=64,\n            use_new_attention_order=True),\n        use_scale_shift_norm=True),\n    diffusion_scheduler=dict(\n        type=EditDDIMScheduler,\n        variance_type='learned_range',\n        beta_schedule='squaredcos_cap_v2'),\n    rgb2bgr=True,\n    use_fp16=False)\n\ntest_dataloader.update(dict(batch_size=32, num_workers=8))\ntrain_cfg = dict(max_iters=100000)\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='orig',\n        sample_kwargs=dict(\n            num_inference_steps=250, show_progress=True, classifier_scale=1.))\n]\n\nval_evaluator = dict(metrics=metrics)\ntest_evaluator = dict(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/inst_colorization/inst-colorizatioon_full_official_cocostuff-256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.nn.modules import HuberLoss\n\nfrom mmagic.datasets.transforms.aug_shape import Resize\nfrom mmagic.datasets.transforms.crop import InstanceCrop\nfrom mmagic.datasets.transforms.formatting import PackInputs\nfrom mmagic.datasets.transforms.loading import LoadImageFromFile\nfrom mmagic.models.data_preprocessors.data_preprocessor import DataPreprocessor\nfrom mmagic.models.editors.inst_colorization.colorization_net import \\\n    ColorizationNet\nfrom mmagic.models.editors.inst_colorization.fusion_net import FusionNet\nfrom mmagic.models.editors.inst_colorization.inst_colorization import \\\n    InstColorization\n\nwith read_base():\n    from .._base_.default_runtime import *\n\nexperiment_name = 'inst-colorization_full_official_cocostuff_256x256'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nstage = 'full'\n\nmodel = dict(\n    type=InstColorization,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[127.5],\n        std=[127.5],\n    ),\n    image_model=dict(\n        type=ColorizationNet, input_nc=4, output_nc=2, norm_type='batch'),\n    instance_model=dict(\n        type=ColorizationNet, input_nc=4, output_nc=2, norm_type='batch'),\n    fusion_model=dict(\n        type=FusionNet, input_nc=4, output_nc=2, norm_type='batch'),\n    color_data_opt=dict(\n        ab_thresh=0,\n        p=1.0,\n        sample_PS=[\n            1,\n            2,\n            3,\n            4,\n            5,\n            6,\n            7,\n            8,\n            9,\n        ],\n        ab_norm=110,\n        ab_max=110.,\n        ab_quant=10.,\n        l_norm=100.,\n        l_cent=50.,\n        mask_cent=0.5),\n    which_direction='AtoB',\n    loss=dict(type=HuberLoss, delta=.01))\n\n# yapf: disable\ntest_pipeline = [\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(\n        type=InstanceCrop,\n        config_file='mmdet::mask_rcnn/mask-rcnn_x101-32x8d_fpn_ms-poly-3x_coco.py',  # noqa\n        finesize=256,\n        box_num_upbound=5),\n    dict(\n        type=Resize,\n        keys=['img', 'cropped_img'],\n        scale=(256, 256),\n        keep_ratio=False),\n    dict(\n        type=PackInputs,\n        data_keys=['box_info', 'box_info_2x', 'box_info_4x', 'box_info_8x']),\n]\n"
  },
  {
    "path": "mmagic/configs/real_basicvsr/realbasicvsr_c64b20_1x30x8_8xb1_lr5e_5_150k_reds.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\n# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa\n# mmcv >= 2.0.1\n# mmengine >= 0.8.0\n\nfrom mmengine.config import read_base\nfrom mmengine.optim.optimizer import OptimWrapper\nfrom mmengine.runner.loops import IterBasedTrainLoop\nfrom torch.optim.adam import Adam\n\nfrom mmagic.engine import MultiOptimWrapperConstructor\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors import (RealBasicVSR, RealBasicVSRNet,\n                                   UNetDiscriminatorWithSpectralNorm)\nfrom mmagic.models.losses import GANLoss, L1Loss, PerceptualLoss\n\nwith read_base():\n    from .realbasicvsr_wogan_c64b20_2x30x8_8xb2_lr1e_4_300k_reds import *\n\nexperiment_name = 'realbasicvsr_c64b20-1x30x8_8xb1-lr5e-5-150k_reds'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\n# load_from = 'https://download.openmmlab.com/mmediting/restorers/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_lr1e-4_300k_reds_20211027-0e2ff207.pth'  # noqa\n\nscale = 4\n\n# model settings\nmodel.update(\n    dict(\n        type=RealBasicVSR,\n        generator=dict(\n            type=RealBasicVSRNet,\n            mid_channels=64,\n            num_propagation_blocks=20,\n            num_cleaning_blocks=20,\n            dynamic_refine_thres=255,  # change to 5 for test\n            spynet_pretrained=\n            'https://download.openmmlab.com/mmediting/restorers/'\n            'basicvsr/spynet_20210409-c6c1bd09.pth',\n            is_fix_cleaning=False,\n            is_sequential_cleaning=False),\n        discriminator=dict(\n            type=UNetDiscriminatorWithSpectralNorm,\n            in_channels=3,\n            mid_channels=64,\n            skip_connection=True),\n        pixel_loss=dict(type=L1Loss, loss_weight=1.0, reduction='mean'),\n        cleaning_loss=dict(type=L1Loss, loss_weight=1.0, reduction='mean'),\n        perceptual_loss=dict(\n            type=PerceptualLoss,\n            layer_weights={\n                '2': 0.1,\n                '7': 0.1,\n                '16': 1.0,\n                '25': 1.0,\n                '34': 1.0,\n            },\n            vgg_type='vgg19',\n            perceptual_weight=1.0,\n            style_weight=0,\n            norm_img=False),\n        gan_loss=dict(\n            type=GANLoss,\n            gan_type='vanilla',\n            loss_weight=5e-2,\n            real_label_val=1.0,\n            fake_label_val=0),\n        is_use_sharpened_gt_in_pixel=True,\n        is_use_sharpened_gt_in_percep=True,\n        is_use_sharpened_gt_in_gan=False,\n        is_use_ema=True,\n        data_preprocessor=dict(\n            type=DataPreprocessor,\n            mean=[0., 0., 0.],\n            std=[255., 255., 255.],\n        )))\n\n# optimizer\noptim_wrapper.update(\n    dict(\n        _delete_=True,\n        constructor=MultiOptimWrapperConstructor,\n        generator=dict(\n            type=OptimWrapper,\n            optimizer=dict(type=Adam, lr=5e-5, betas=(0.9, 0.99))),\n        discriminator=dict(\n            type=OptimWrapper,\n            optimizer=dict(type=Adam, lr=1e-4, betas=(0.9, 0.99))),\n    ))\n\ntrain_cfg.update(\n    dict(type=IterBasedTrainLoop, max_iters=150_000, val_interval=5000))\n"
  },
  {
    "path": "mmagic/configs/real_basicvsr/realbasicvsr_wogan_c64b20_2x30x8_8xb2_lr1e_4_300k_reds.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\n# Please refer to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html#a-pure-python-style-configuration-file-beta for more details. # noqa\n# mmcv >= 2.0.1\n# mmengine >= 0.8.0\n\nfrom mmengine.config import read_base\nfrom mmengine.dataset.sampler import DefaultSampler, InfiniteSampler\nfrom mmengine.hooks import (CheckpointHook, DistSamplerSeedHook, LoggerHook,\n                            ParamSchedulerHook)\nfrom mmengine.optim.optimizer.optimizer_wrapper import OptimWrapper\nfrom mmengine.runner.loops import IterBasedTrainLoop\nfrom torch.optim.adam import Adam\n\nfrom mmagic.datasets import BasicFramesDataset\nfrom mmagic.datasets.transforms import (Clip, CopyValues,\n                                        DegradationsWithShuffle, FixedCrop,\n                                        Flip, GenerateSegmentIndices,\n                                        LoadImageFromFile, MirrorSequence,\n                                        PackInputs, RandomBlur,\n                                        RandomJPEGCompression, RandomNoise,\n                                        RandomResize, RandomTransposeHW,\n                                        RandomVideoCompression, SetValues,\n                                        UnsharpMasking)\nfrom mmagic.engine import MultiOptimWrapperConstructor\nfrom mmagic.engine.hooks import (BasicVisualizationHook,\n                                 ExponentialMovingAverageHook, IterTimerHook)\nfrom mmagic.evaluation import Evaluator\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors import RealBasicVSR, RealBasicVSRNet\nfrom mmagic.models.losses import L1Loss\n\nwith read_base():\n    from .._base_.default_runtime import *\n\nexperiment_name = 'realbasicvsr_wogan-c64b20-2x30x8_8xb2-lr1e-4-300k_reds'\nwork_dir = f'./work_dirs/{experiment_name}'\nsave_dir = './work_dirs/'\n\nscale = 4\n\n# model settings\nmodel = dict(\n    type=RealBasicVSR,\n    generator=dict(\n        type=RealBasicVSRNet,\n        mid_channels=64,\n        num_propagation_blocks=20,\n        num_cleaning_blocks=20,\n        dynamic_refine_thres=255,  # change to 1.5 for test\n        spynet_pretrained='https://download.openmmlab.com/mmediting/restorers/'\n        'basicvsr/spynet_20210409-c6c1bd09.pth',\n        is_fix_cleaning=False,\n        is_sequential_cleaning=False),\n    pixel_loss=dict(type=L1Loss, loss_weight=1.0, reduction='mean'),\n    cleaning_loss=dict(type=L1Loss, loss_weight=1.0, reduction='mean'),\n    is_use_sharpened_gt_in_pixel=True,\n    is_use_ema=True,\n    data_preprocessor=dict(\n        type=DataPreprocessor,\n        mean=[0., 0., 0.],\n        std=[255., 255., 255.],\n    ))\n\ntrain_pipeline = [\n    dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=SetValues, dictionary=dict(scale=scale)),\n    dict(type=FixedCrop, keys=['gt'], crop_size=(256, 256)),\n    dict(type=Flip, keys=['gt'], flip_ratio=0.5, direction='horizontal'),\n    dict(type=Flip, keys=['gt'], flip_ratio=0.5, direction='vertical'),\n    dict(type=RandomTransposeHW, keys=['gt'], transpose_ratio=0.5),\n    dict(type=MirrorSequence, keys=['gt']),\n    dict(\n        type=UnsharpMasking,\n        keys=['gt'],\n        kernel_size=51,\n        sigma=0,\n        weight=0.5,\n        threshold=10),\n    dict(type=CopyValues, src_keys=['gt_unsharp'], dst_keys=['img']),\n    dict(\n        type=RandomBlur,\n        params=dict(\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 3],\n            sigma_y=[0.2, 3],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2],\n            sigma_x_step=0.02,\n            sigma_y_step=0.02,\n            rotate_angle_step=0.31416,\n            beta_gaussian_step=0.05,\n            beta_plateau_step=0.1,\n            omega_step=0.0628),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomResize,\n        params=dict(\n            resize_mode_prob=[0.2, 0.7, 0.1],  # up, down, keep\n            resize_scale=[0.15, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3.0, 1 / 3.0, 1 / 3.0],\n            resize_step=0.015,\n            is_size_even=True),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomNoise,\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 30],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 3],\n            poisson_gray_noise_prob=0.4,\n            gaussian_sigma_step=0.1,\n            poisson_scale_step=0.005),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomJPEGCompression,\n        params=dict(quality=[30, 95], quality_step=3),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomVideoCompression,\n        params=dict(\n            codec=['libx264', 'h264', 'mpeg4'],\n            codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n            bitrate=[1e4, 1e5]),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomBlur,\n        params=dict(\n            prob=0.8,\n            kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n            kernel_list=[\n                'iso', 'aniso', 'generalized_iso', 'generalized_aniso',\n                'plateau_iso', 'plateau_aniso', 'sinc'\n            ],\n            kernel_prob=[0.405, 0.225, 0.108, 0.027, 0.108, 0.027, 0.1],\n            sigma_x=[0.2, 1.5],\n            sigma_y=[0.2, 1.5],\n            rotate_angle=[-3.1416, 3.1416],\n            beta_gaussian=[0.5, 4],\n            beta_plateau=[1, 2],\n            sigma_x_step=0.02,\n            sigma_y_step=0.02,\n            rotate_angle_step=0.31416,\n            beta_gaussian_step=0.05,\n            beta_plateau_step=0.1,\n            omega_step=0.0628),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomResize,\n        params=dict(\n            resize_mode_prob=[0.3, 0.4, 0.3],  # up, down, keep\n            resize_scale=[0.3, 1.2],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            resize_step=0.03,\n            is_size_even=True),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomNoise,\n        params=dict(\n            noise_type=['gaussian', 'poisson'],\n            noise_prob=[0.5, 0.5],\n            gaussian_sigma=[1, 25],\n            gaussian_gray_noise_prob=0.4,\n            poisson_scale=[0.05, 2.5],\n            poisson_gray_noise_prob=0.4,\n            gaussian_sigma_step=0.1,\n            poisson_scale_step=0.005),\n        keys=['img'],\n    ),\n    dict(\n        type=RandomJPEGCompression,\n        params=dict(quality=[30, 95], quality_step=3),\n        keys=['img'],\n    ),\n    dict(\n        type=DegradationsWithShuffle,\n        degradations=[\n            dict(\n                type=RandomVideoCompression,\n                params=dict(\n                    codec=['libx264', 'h264', 'mpeg4'],\n                    codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n                    bitrate=[1e4, 1e5]),\n                keys=['img'],\n            ),\n            [\n                dict(\n                    type=RandomResize,\n                    params=dict(\n                        target_size=(64, 64),\n                        resize_opt=['bilinear', 'area', 'bicubic'],\n                        resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n                ),\n                dict(\n                    type=RandomBlur,\n                    params=dict(\n                        prob=0.8,\n                        kernel_size=[7, 9, 11, 13, 15, 17, 19, 21],\n                        kernel_list=['sinc'],\n                        kernel_prob=[1],\n                        omega=[3.1416 / 3, 3.1416],\n                        omega_step=0.0628),\n                ),\n            ]\n        ],\n        keys=['img'],\n    ),\n    dict(type=Clip, keys=['img']),\n    dict(type=PackInputs)\n]\n\nval_pipeline = [\n    dict(\n        type=GenerateSegmentIndices,\n        interval_list=[1],\n        filename_tmpl='{:04d}.png'),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\ntest_pipeline = [\n    dict(\n        type=GenerateSegmentIndices,\n        interval_list=[1],\n        filename_tmpl='{:08d}.png'),\n    dict(type=LoadImageFromFile, key='gt', channel_order='rgb'),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\ndemo_pipeline = [\n    dict(type=GenerateSegmentIndices, interval_list=[1]),\n    dict(type=LoadImageFromFile, key='img', channel_order='rgb'),\n    dict(type=PackInputs)\n]\n\ndata_root = 'data'\n\ntrain_dataloader = dict(\n    num_workers=10,\n    batch_size=2,\n    persistent_workers=False,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='reds', task_name='vsr'),\n        data_root=f'{data_root}/REDS',\n        data_prefix=dict(img='train_sharp_sub', gt='train_sharp_sub'),\n        depth=1,\n        num_input_frames=15,\n        pipeline=train_pipeline))\n\nval_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='udm10', task_name='vsr'),\n        data_root=f'{data_root}/UDM10',\n        data_prefix=dict(img='BIx4', gt='GT'),\n        pipeline=val_pipeline))\n\ntest_dataloader = dict(\n    num_workers=1,\n    batch_size=1,\n    persistent_workers=False,\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    dataset=dict(\n        type=BasicFramesDataset,\n        metainfo=dict(dataset_type='video_lq', task_name='vsr'),\n        data_root=f'{data_root}/VideoLQ',\n        data_prefix=dict(img='', gt=''),\n        pipeline=test_pipeline))\n\nval_evaluator = dict(\n    type=Evaluator, metrics=[\n        dict(type='PSNR'),\n        dict(type='SSIM'),\n    ])\n\ntest_evaluator = dict(\n    type=Evaluator,\n    metrics=[dict(type='NIQE', input_order='CHW', convert_to='Y')])\n\ntrain_cfg = dict(type=IterBasedTrainLoop, max_iters=300_000, val_interval=5000)\n\n# optimizer\noptim_wrapper = dict(\n    constructor=MultiOptimWrapperConstructor,\n    generator=dict(\n        type=OptimWrapper,\n        optimizer=dict(type=Adam, lr=1e-4, betas=(0.9, 0.99))))\n\n# NO learning policy\n\ndefault_hooks = dict(\n    checkpoint=dict(\n        type=CheckpointHook,\n        interval=5000,\n        save_optimizer=True,\n        out_dir=save_dir,\n        max_keep_ckpts=10,\n        save_best='PSNR',\n        rule='greater',\n        by_epoch=False),\n    timer=dict(type=IterTimerHook),\n    logger=dict(type=LoggerHook, interval=100),\n    param_scheduler=dict(type=ParamSchedulerHook),\n    sampler_seed=dict(type=DistSamplerSeedHook),\n)\n\ncustom_hooks = [\n    dict(type=BasicVisualizationHook, interval=5),\n    dict(\n        type=ExponentialMovingAverageHook,\n        module_keys=('generator_ema'),\n        interval=1,\n        interp_cfg=dict(momentum=0.001),\n    )\n]\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_800kiters_ffhq_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.optim import Adam\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *  # noqa: F403,F405\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg.update(max_iters=800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/ffhq/ffhq_imgs/ffhq_256'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_800kiters_lsun_cat_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.optim import Adam\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.datasets.lsun_stylegan import *  # noqa: F403,F405\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg.update(max_iters=800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-cat'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_800kiters_lsun_church_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.optim import Adam\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.datasets.lsun_stylegan import *  # noqa: F403,F405\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg.update(max_iters=800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-church'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_800kiters_lsun_horse_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.optim import Adam\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.datasets.lsun_stylegan import *  # noqa: F403,F405\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=256),\n    discriminator=dict(in_size=256),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg.update(max_iters=800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/lsun-horse'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_ffhq_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom torch.optim import Adam\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *  # noqa: F403,F405\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=1024),\n    discriminator=dict(in_size=1024),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\nextra_parameters = dict(num_batches=1, sample_model='orig')\n\ntrain_cfg.update(max_iters=800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_8xb4_lsun_car_384x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler\nfrom torch.optim import Adam\n\nfrom mmagic.datasets.transforms import (Flip, LoadImageFromFile, NumpyPad,\n                                        PackInputs)\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.evaluation import (FrechetInceptionDistance, PerceptualPathLength,\n                               PrecisionAndRecall)\nfrom mmagic.models import BaseGAN\n\nwith read_base():\n    from .._base_.gen_default_runtime import *  # noqa: F403,F405\n    from .._base_.models.base_styleganv2 import *  # noqa: F403,F405\n\n# reg params\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nema_half_life = 10.  # G_smoothing_kimg\n\nmodel.update(\n    generator=dict(out_size=512),\n    discriminator=dict(in_size=512),\n    ema_config=dict(\n        type=ExponentialMovingAverage,\n        interval=1,\n        momentum=1. - (0.5**(32. / (ema_half_life * 1000.)))),\n    loss_config=dict(\n        r1_loss_weight=10. / 2. * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC',\n        g_reg_interval=g_reg_interval,\n        g_reg_weight=2. * g_reg_interval,\n        pl_batch_shrink=2))\n\ntrain_cfg.update(max_iters=1800002)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n# DATA\nbatch_size = 4\ndata_root = './data/lsun/images/car'\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type=LoadImageFromFile, key='gt'),\n    dict(\n        type=NumpyPad,\n        keys='img',\n        padding=((64, 64), (0, 0), (0, 0)),\n    ),\n    dict(type=Flip, keys=['gt'], direction='horizontal'),\n    dict(type=PackInputs)\n]\n\nval_pipeline = train_pipeline\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type=InfiniteSampler, shuffle=True),\n    dataset=dict(\n        type=dataset_type, data_root=data_root, pipeline=train_pipeline))\n\nval_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\ntest_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    dataset=dict(\n        type=dataset_type,\n        data_root=data_root,  # set by user\n        pipeline=val_pipeline),\n    sampler=dict(type=DefaultSampler, shuffle=False),\n    persistent_workers=True)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-50k',\n        fake_nums=50000,\n        real_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(type=PrecisionAndRecall, fake_nums=50000, prefix='PR-50K'),\n    dict(type=PerceptualPathLength, fake_nums=50000, prefix='ppl-w')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks.update(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_PL_8xb4_fp16_partial_GD_no_scaler_800kiters_ffhq_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom mmengine.optim import AmpOptimWrapper\n\nwith read_base():\n    from mmagic.configs.styleganv2.stylegan2_c2_8xb4_800kiters_ffhq_256x256 import *\n\nmodel.update(\n    generator=dict(out_size=256, num_fp16_scales=4),\n    discriminator=dict(in_size=256, num_fp16_scales=4),\n    loss_config=dict(scale_r1_loss=True))\n\noptim_wrapper.update(\n    generator=dict(type=AmpOptimWrapper, loss_scale=512),\n    discriminator=dict(type=AmpOptimWrapper, loss_scale=512))\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_PL_R1_8xb4_apex_fp16_no_scaler_800kiters_ffhq_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from mmagic.configs.styleganv2.stylegan2_c2_8xb4_800kiters_ffhq_256x256 import *\n\nmodel.update(loss_config=dict(r1_use_apex_amp=False, g_reg_use_apex_amp=False))\n\ntrain_cfg.update(max_iters=800002)\n\n# remain to be refactored\napex_amp = dict(mode='gan', init_args=dict(opt_level='O1', num_losses=2))\nresume_from = None\n"
  },
  {
    "path": "mmagic/configs/styleganv2/stylegan2_c2_PL_R1_8xb4_fp16_globalG_partialD_no_scaler_800kiters_ffhq_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\nfrom mmengine.optim import AmpOptimWrapper\n\nwith read_base():\n    from mmagic.configs.styleganv2.stylegan2_c2_8xb4_800kiters_ffhq_256x256 import *\n\nmodel.update(\n    generator=dict(out_size=256, fp16_enabled=True),\n    discriminator=dict(in_size=256, fp16_enabled=False, num_fp16_scales=4),\n)\ntrain_cfg.update(max_iters=800000)\noptim_wrapper.update(\n    generator=dict(type=AmpOptimWrapper, loss_scale=512),\n    discriminator=dict(type=AmpOptimWrapper, loss_scale=512))\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_r_ada_gamma33_8xb4_fp16_metfaces_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom torch.optim import Adam\n\nfrom mmagic.engine.hooks.visualization_hook import VisualizationHook\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.base_models.average_model import ExponentialMovingAverage\nfrom mmagic.models.base_models.base_gan import BaseGAN\nfrom mmagic.models.editors.stylegan2.stylegan2_discriminator import (\n    ADAAug, ADAStyleGAN2Discriminator)\n# 模型的配置\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\nr1_gamma = 3.3  # set by user\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nload_from = 'https://download.openmmlab.com/mmediting/stylegan3/stylegan3_r_ffhq_1024_b4x8_cvt_official_rgb_20220329_234933-ac0500a1.pth'  # noqa\n\n# ada settings\naug_kwargs = {\n    'xflip': 1,\n    'rotate90': 1,\n    'xint': 1,\n    'scale': 1,\n    'rotate': 1,\n    'aniso': 1,\n    'xfrac': 1,\n    'brightness': 1,\n    'contrast': 1,\n    'lumaflip': 1,\n    'hue': 1,\n    'saturation': 1\n}\n\nema_half_life = 10.  # G_smoothing_kimg\nema_kimg = 10\nema_nimg = ema_kimg * 1000\nema_beta = 0.5**(32 / max(ema_nimg, 1e-8))\n\nema_config = dict(\n    type=ExponentialMovingAverage, interval=1, momentum=ema_beta, start_iter=0)\n\nmodel.update(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(\n        type=ADAStyleGAN2Discriminator,\n        in_size=1024,\n        input_bgr2rgb=True,\n        data_aug=dict(type=ADAAug, aug_pipeline=aug_kwargs, ada_kimg=100)),\n    loss_config=dict(\n        r1_loss_weight=r1_gamma / 2.0 * d_reg_interval,\n        r1_interval=d_reg_interval,\n        norm_mode='HWC'),\n    ema_config=ema_config)\n\n# 优化配置\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.0025 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\n# 数据集配置\nbatch_size = 4\ndata_root = 'data/metfaces/images/'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\n# 训练配置\ntrain_cfg.update(max_iters=160000)\n# VIS_HOOK hook配置\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img'))\n]\n\n# METRICS  评估配置\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,  # FID\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n# default_hooks = dict(checkpoint=dict(save_best='FID-Full-50k/fid'))   # 只是加进去\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_r_cvt_official_rgb_8xb4_ffhq_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan2.stylegan2_discriminator import \\\n    StyleGAN2Discriminator\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\n\nr1_gamma = 32.8\nd_reg_interval = 16\n\nmodel.update(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        synthesis_cfg=synthesis_cfg,\n        rgb2bgr=True),\n    discriminator=dict(type=StyleGAN2Discriminator, in_size=1024))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\n\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_r_cvt_official_rgb_8xb4_ffhqu_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.unconditional_imgs_flip_lanczos_resize_256x256 \\\n        import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 32768,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\nmodel.update(\n    generator=dict(\n        out_size=256,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1))\n\nbatch_size = 4\ndata_root = './data/ffhqu/images'\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_r_cvt_official_rgb_8xb4x8_afhqv2_512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.unconditional_imgs_flip_512x512 import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan2.stylegan2_discriminator import \\\n    StyleGAN2Discriminator\nfrom mmagic.models.editors.stylegan3.stylegan3_generator import \\\n    StyleGAN3Generator\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 65536,\n    'channel_max': 1024,\n    'magnitude_ema_beta': 0.999,\n    'conv_kernel': 1,\n    'use_radial_filters': True\n}\n\nmodel.update(\n    generator=dict(\n        type=StyleGAN3Generator,  # 'StyleGANv3Generator',Registry里面用于区分别名\n        noise_size=512,\n        style_channels=512,\n        out_size=512,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(type=StyleGAN2Discriminator, in_size=512))\n\nbatch_size = 4\ndata_root = 'data/afhqv2/'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_ada_gamma66_8xb4_fp16_metfaces_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom torch.optim import Adam\n\nfrom mmagic.engine.hooks.visualization_hook import VisualizationHook\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.base_models.average_model import ExponentialMovingAverage\nfrom mmagic.models.base_models.base_gan import BaseGAN\nfrom mmagic.models.editors.stylegan2.stylegan2_discriminator import (\n    ADAAug, ADAStyleGAN2Discriminator)\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 6.6  # set by user\nd_reg_interval = 16\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\nload_from = 'https://download.openmmlab.com/mmediting/stylegan3/stylegan3_t_ffhq_1024_b4x8_cvt_official_rgb_20220329_235113-db6c6580.pth'  # noqa\n# ada settings\naug_kwargs = {\n    'xflip': 1,\n    'rotate90': 1,\n    'xint': 1,\n    'scale': 1,\n    'rotate': 1,\n    'aniso': 1,\n    'xfrac': 1,\n    'brightness': 1,\n    'contrast': 1,\n    'lumaflip': 1,\n    'hue': 1,\n    'saturation': 1\n}\n\nema_half_life = 10.  # G_smoothing_kimg\n\nema_kimg = 10\nema_nimg = ema_kimg * 1000\nema_beta = 0.5**(32 / max(ema_nimg, 1e-8))\n\nema_config = dict(\n    type=ExponentialMovingAverage, interval=1, momentum=ema_beta, start_iter=0)\n\nmodel.update(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(\n        type=ADAStyleGAN2Discriminator,\n        in_size=1024,\n        input_bgr2rgb=True,\n        data_aug=dict(type=ADAAug, aug_pipeline=aug_kwargs, ada_kimg=100)),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.0025 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/metfaces/images/'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\ntrain_cfg.update(max_iters=160000)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img')\n    )  # vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_cvt_official_rgb_8xb4_afhqv2_512x512.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.unconditional_imgs_flip_512x512 import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nmodel.update(\n    generator=dict(\n        out_size=512,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=512))\n\nbatch_size = 4\ndata_root = 'data/afhqv2/'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_cvt_official_rgb_8xb4_ffhq_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\n\nmodel.update(\n    generator=dict(\n        out_size=1024,\n        img_channels=3,\n        synthesis_cfg=synthesis_cfg,\n        rgb2bgr=True),\n    discriminator=dict(in_size=1024))\n\nbatch_size = 4\ndata_root = './data/ffhq/images'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_cvt_official_rgb_8xb4_ffhqu_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.unconditional_imgs_flip_lanczos_resize_256x256 import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\n# synthesis network的配置（generator）\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 16384,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nmodel.update(\n    generator=dict(\n        out_size=256,\n        img_channels=3,\n        rgb2bgr=True,\n        synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1))\n\nbatch_size = 4\ndata_root = './data/ffhqu/images'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg = train_dataloader = optim_wrapper = None\n\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_gamma20_8xb4_fp16_noaug_ffhq_256x256.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.unconditional_imgs_flip_lanczos_resize_256x256 \\\n        import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom torch.optim import Adam\n\nfrom mmagic.engine.hooks.visualization_hook import VisualizationHook\nfrom mmagic.evaluation.metrics.equivariance import Equivariance\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.base_models.average_model import RampUpEMA\nfrom mmagic.models.base_models.base_gan import BaseGAN\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 16384,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 2.  # set by user\nd_reg_interval = 16\n\nema_config = dict(\n    type=RampUpEMA,\n    interval=1,\n    ema_kimg=10,\n    ema_rampup=0.05,\n    batch_size=32,\n    eps=1e-8,\n    start_iter=0)\n\nmodel.update(\n    generator=dict(out_size=256, img_channels=3, synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=256, channel_multiplier=1),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.0025 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/ffhq/images'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg.update(max_iters=800002)\n\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img')\n    )  # vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema'),\n    dict(\n        type=Equivariance,\n        fake_nums=50000,\n        sample_mode='ema',\n        prefix='EQ',\n        eq_cfg=dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True))\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/configs/styleganv3/stylegan3_t_gamma328_8xb4_fp16_noaug_ffhq_1024x1024.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.config import read_base\n\nwith read_base():\n    from .._base_.datasets.ffhq_flip import *\n    from .._base_.gen_default_runtime import *\n    from .._base_.models.base_styleganv3 import *\n\nfrom torch.optim import Adam\n\nfrom mmagic.engine.hooks.visualization_hook import VisualizationHook\nfrom mmagic.evaluation.metrics.fid import FrechetInceptionDistance\nfrom mmagic.models.base_models.average_model import RampUpEMA\nfrom mmagic.models.base_models.base_gan import BaseGAN\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import SynthesisNetwork\n\nbatch_size = 32\nmagnitude_ema_beta = 0.5**(batch_size / (20 * 1e3))\n\nsynthesis_cfg = {\n    'type': SynthesisNetwork,\n    'channel_base': 32768,\n    'channel_max': 512,\n    'magnitude_ema_beta': 0.999\n}\nr1_gamma = 32.8\nd_reg_interval = 16\n\nema_config = dict(\n    type=RampUpEMA,\n    interval=1,\n    ema_kimg=10,\n    ema_rampup=0.05,\n    batch_size=batch_size,\n    eps=1e-8,\n    start_iter=0)\n\nmodel.update(\n    generator=dict(out_size=1024, img_channels=3, synthesis_cfg=synthesis_cfg),\n    discriminator=dict(in_size=1024),\n    loss_config=dict(r1_loss_weight=r1_gamma / 2.0 * d_reg_interval),\n    ema_config=ema_config)\n\ng_reg_interval = 4\n\ng_reg_ratio = g_reg_interval / (g_reg_interval + 1)\nd_reg_ratio = d_reg_interval / (d_reg_interval + 1)\n\noptim_wrapper.update(\n    generator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.0025 * g_reg_ratio, betas=(0, 0.99**g_reg_ratio))),\n    discriminator=dict(\n        optimizer=dict(\n            type=Adam, lr=0.002 * d_reg_ratio, betas=(0, 0.99**d_reg_ratio))))\n\nbatch_size = 4\ndata_root = 'data/ffhq/images'\n\ntrain_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\nval_dataloader.update(batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntest_dataloader.update(\n    batch_size=batch_size, dataset=dict(data_root=data_root))\n\ntrain_cfg.update(max_iters=800002)\n\n# VIS_HOOK\ncustom_hooks = [\n    dict(\n        type=VisualizationHook,\n        interval=5000,\n        fixed_input=True,\n        vis_kwargs_list=dict(type=BaseGAN, name='fake_img')\n    )  # vis_kwargs_list=dict(type='GAN', name='fake_img'))\n]\n\n# METRICS\nmetrics = [\n    dict(\n        type=FrechetInceptionDistance,\n        prefix='FID-Full-50k',\n        fake_nums=50000,\n        inception_style='StyleGAN',\n        sample_model='ema')\n]\n# NOTE: config for save multi best checkpoints\n# default_hooks = dict(\n#     checkpoint=dict(\n#         save_best=['FID-Full-50k/fid', 'IS-50k/is'],\n#         rule=['less', 'greater']))\n\ndefault_hooks.update(checkpoint=dict(save_best='FID-Full-50k/fid'))\nval_evaluator.update(metrics=metrics)\ntest_evaluator.update(metrics=metrics)\n"
  },
  {
    "path": "mmagic/datasets/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .basic_conditional_dataset import BasicConditionalDataset\nfrom .basic_frames_dataset import BasicFramesDataset\nfrom .basic_image_dataset import BasicImageDataset\nfrom .cifar10_dataset import CIFAR10\nfrom .comp1k_dataset import AdobeComp1kDataset\nfrom .controlnet_dataset import ControlNetDataset\nfrom .dreambooth_dataset import DreamBoothDataset\nfrom .grow_scale_image_dataset import GrowScaleImgDataset\nfrom .imagenet_dataset import ImageNet\nfrom .mscoco_dataset import MSCoCoDataset\nfrom .paired_image_dataset import PairedImageDataset\nfrom .singan_dataset import SinGANDataset\nfrom .textual_inversion_dataset import TextualInversionDataset\nfrom .unpaired_image_dataset import UnpairedImageDataset\n\n__all__ = [\n    'AdobeComp1kDataset', 'BasicImageDataset', 'BasicFramesDataset',\n    'BasicConditionalDataset', 'UnpairedImageDataset', 'PairedImageDataset',\n    'ImageNet', 'CIFAR10', 'GrowScaleImgDataset', 'SinGANDataset',\n    'MSCoCoDataset', 'ControlNetDataset', 'DreamBoothDataset', 'ViCoDataset',\n    'ControlNetDataset', 'SDFinetuneDataset', 'TextualInversionDataset'\n]\n"
  },
  {
    "path": "mmagic/datasets/basic_conditional_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Sequence, Union\n\nimport mmengine\nimport numpy as np\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import get_file_backend\nfrom mmengine.logging import MMLogger\n\nfrom mmagic.registry import DATASETS\nfrom .data_utils import expanduser, find_folders, get_samples\n\n\n@DATASETS.register_module()\nclass BasicConditionalDataset(BaseDataset):\n    \"\"\"Custom dataset for conditional GAN. This class is based on the\n    combination of `BaseDataset` (https://github.com/open-\n    mmlab/mmclassification/blob/main/mmcls/datasets/base_dataset.py)  # noqa\n    and `CustomDataset` (https://github.com/open-\n    mmlab/mmclassification/blob/main/mmcls/datasets/custom.py).  # noqa.\n\n    The dataset supports two kinds of annotation format.\n\n    1. A annotation file read by line (e.g., txt) is provided, and each line indicates a sample:\n\n       The sample files: ::\n\n           data_prefix/\n           ├── folder_1\n           │   ├── xxx.png\n           │   ├── xxy.png\n           │   └── ...\n           └── folder_2\n               ├── 123.png\n               ├── nsdf3.png\n               └── ...\n\n       The annotation file (the first column is the image path and the second\n       column is the index of category): ::\n\n            folder_1/xxx.png 0\n            folder_1/xxy.png 1\n            folder_2/123.png 5\n            folder_2/nsdf3.png 3\n            ...\n\n       Please specify the name of categories by the argument ``classes``\n       or ``metainfo``.\n\n    2. A dict-based annotation file (e.g., json) is provided, key and value\n       indicate the path and label of the sample:\n\n       The sample files: ::\n\n           data_prefix/\n           ├── folder_1\n           │   ├── xxx.png\n           │   ├── xxy.png\n           │   └── ...\n           └── folder_2\n               ├── 123.png\n               ├── nsdf3.png\n               └── ...\n\n       The annotation file (the key is the image path and the value column\n       is the label): ::\n\n            {\n                \"folder_1/xxx.png\": [1, 2, 3, 4],\n                \"folder_1/xxy.png\": [2, 4, 1, 0],\n                \"folder_2/123.png\": [0, 9, 8, 1],\n                \"folder_2/nsdf3.png\", [1, 0, 0, 2],\n                ...\n            }\n\n       In this kind of annotation, labels can be any type and not restricted to an index.\n\n    3. The samples are arranged in the specific way: ::\n\n           data_prefix/\n           ├── class_x\n           │   ├── xxx.png\n           │   ├── xxy.png\n           │   └── ...\n           │       └── xxz.png\n           └── class_y\n               ├── 123.png\n               ├── nsdf3.png\n               ├── ...\n               └── asd932_.png\n\n    If the ``ann_file`` is specified, the dataset will be generated by the\n    first two ways, otherwise, try the third way.\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        metainfo (dict, optional): Meta information for dataset, such as class\n            information. Defaults to None.\n        data_root (str): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to ''.\n        data_prefix (str | dict): Prefix for the data. Defaults to ''.\n        extensions (Sequence[str]): A sequence of allowed extensions. Defaults\n            to ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif').\n        lazy_init (bool): Whether to load annotation during instantiation.\n            In some cases, such as visualization, only the meta information of\n            the dataset is needed, which is not necessary to load annotation\n            file. ``Basedataset`` can skip load annotations to save time by set\n            ``lazy_init=False``. Defaults to False.\n        **kwargs: Other keyword arguments in :class:`BaseDataset`.\n    \"\"\"\n\n    def __init__(self,\n                 ann_file: str = '',\n                 metainfo: Optional[dict] = None,\n                 data_root: str = '',\n                 data_prefix: Union[str, dict] = '',\n                 extensions: Sequence[str] = ('.jpg', '.jpeg', '.png', '.ppm',\n                                              '.bmp', '.pgm', '.tif'),\n                 lazy_init: bool = False,\n                 classes: Union[str, Sequence[str], None] = None,\n                 **kwargs):\n        assert (ann_file or data_prefix or data_root), \\\n            'One of `ann_file`, `data_root` and `data_prefix` must '\\\n            'be specified.'\n        if isinstance(data_prefix, str):\n            data_prefix = dict(gt_path=expanduser(data_prefix))\n\n        ann_file = expanduser(ann_file)\n        metainfo = self._compat_classes(metainfo, classes)\n        self.extensions = tuple(set([i.lower() for i in extensions]))\n\n        super().__init__(\n            # The base class requires string ann_file but this class doesn't\n            ann_file=ann_file,\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=data_prefix,\n            # Force to lazy_init for some modification before loading data.\n            lazy_init=True,\n            **kwargs)\n\n        # Full initialize the dataset.\n        if not lazy_init:\n            self.full_init()\n\n    def _find_samples(self, file_backend):\n        \"\"\"find samples from ``data_prefix``.\"\"\"\n        classes, folder_to_idx = find_folders(self.img_prefix, file_backend)\n        samples, empty_classes = get_samples(\n            self.img_prefix,\n            folder_to_idx,\n            is_valid_file=self.is_valid_file,\n            file_backend=file_backend,\n        )\n\n        if len(samples) == 0:\n            raise RuntimeError(\n                f'Found 0 files in subfolders of: {self.data_prefix}. '\n                f'Supported extensions are: {\",\".join(self.extensions)}')\n\n        if self.CLASSES is not None:\n            assert len(self.CLASSES) == len(classes), \\\n                f\"The number of subfolders ({len(classes)}) doesn't match \" \\\n                f'the number of specified classes ({len(self.CLASSES)}). ' \\\n                'Please check the data folder.'\n        else:\n            self._metainfo['classes'] = tuple(classes)\n\n        if empty_classes:\n            logger = MMLogger.get_current_instance()\n            logger.warning(\n                'Found no valid file in the folder '\n                f'{\", \".join(empty_classes)}. '\n                f\"Supported extensions are: {', '.join(self.extensions)}\")\n\n        self.folder_to_idx = folder_to_idx\n\n        return samples\n\n    def load_data_list(self):\n        \"\"\"Load image paths and gt_labels.\"\"\"\n        if self.img_prefix:\n            file_backend = get_file_backend(uri=self.img_prefix)\n\n        if not self.ann_file:\n            samples = self._find_samples(file_backend)\n        elif self.ann_file.endswith('json'):\n            samples = mmengine.fileio.io.load(self.ann_file)\n            samples = [[name, label] for name, label in samples.items()]\n        elif self.ann_file.endswith('txt'):\n            lines = mmengine.list_from_file(self.ann_file)\n            samples = [x.strip().rsplit(' ', 1) for x in lines]\n        else:\n            raise TypeError('Only support \\'json\\' and \\'txt\\' as annotation.')\n\n        def add_prefix(filename, prefix=''):\n            if not prefix:\n                return filename\n            else:\n                return file_backend.join_path(prefix, filename)\n\n        data_list = []\n        for filename, gt_label in samples:\n            img_path = add_prefix(filename, self.img_prefix)\n            # convert digit label to int\n            if isinstance(gt_label, str):\n                gt_label = int(gt_label) if gt_label.isdigit() else gt_label\n            info = {'gt_path': img_path, 'gt_label': gt_label}\n            data_list.append(info)\n        return data_list\n\n    def is_valid_file(self, filename: str) -> bool:\n        \"\"\"Check if a file is a valid sample.\"\"\"\n        return filename.lower().endswith(self.extensions)\n\n    @property\n    def img_prefix(self):\n        \"\"\"The prefix of images.\"\"\"\n        return self.data_prefix['gt_path']\n\n    @property\n    def CLASSES(self):\n        \"\"\"Return all categories names.\"\"\"\n        return self._metainfo.get('classes', None)\n\n    @property\n    def class_to_idx(self):\n        \"\"\"Map mapping class name to class index.\n\n        Returns:\n            dict: mapping from class name to class index.\n        \"\"\"\n\n        return {cat: i for i, cat in enumerate(self.CLASSES)}\n\n    def get_gt_labels(self):\n        \"\"\"Get all ground-truth labels (categories).\n\n        Returns:\n            np.ndarray: categories for all images.\n        \"\"\"\n\n        gt_labels = np.array(\n            [self.get_data_info(i)['gt_label'] for i in range(len(self))])\n        return gt_labels\n\n    def get_cat_ids(self, idx: int) -> List[int]:\n        \"\"\"Get category id by index.\n\n        Args:\n            idx (int): Index of data.\n\n        Returns:\n            cat_ids (List[int]): Image category of specified index.\n        \"\"\"\n\n        return [int(self.get_data_info(idx)['gt_label'])]\n\n    def _compat_classes(self, metainfo, classes):\n        \"\"\"Merge the old style ``classes`` arguments to ``metainfo``.\"\"\"\n        if isinstance(classes, str):\n            # take it as a file path\n            class_names = mmengine.list_from_file(expanduser(classes))\n        elif isinstance(classes, (tuple, list)):\n            class_names = classes\n        elif classes is not None:\n            raise ValueError(f'Unsupported type {type(classes)} of classes.')\n\n        if metainfo is None:\n            metainfo = {}\n\n        if classes is not None:\n            metainfo = {'classes': tuple(class_names), **metainfo}\n\n        return metainfo\n\n    def full_init(self):\n        \"\"\"Load annotation file and set ``BaseDataset._fully_initialized`` to\n        True.\"\"\"\n        super().full_init()\n\n        #  To support the standard OpenMMLab 2.0 annotation format. Generate\n        #  metainfo in internal format from standard metainfo format.\n        if 'categories' in self._metainfo and 'classes' not in self._metainfo:\n            categories = sorted(\n                self._metainfo['categories'], key=lambda x: x['id'])\n            self._metainfo['classes'] = tuple(\n                [cat['category_name'] for cat in categories])\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the dataset.\n\n        Returns:\n            str: Formatted string.\n        \"\"\"\n        head = 'Dataset ' + self.__class__.__name__\n        body = []\n        if self._fully_initialized:\n            body.append(f'Number of samples: \\t{self.__len__()}')\n        else:\n            body.append(\"Haven't been initialized\")\n\n        if self.CLASSES is not None:\n            body.append(f'Number of categories: \\t{len(self.CLASSES)}')\n        else:\n            body.append('The `CLASSES` meta info is not set.')\n\n        body.extend(self.extra_repr())\n\n        if len(self.pipeline.transforms) > 0:\n            body.append('With transforms:')\n            for t in self.pipeline.transforms:\n                body.append(f'    {t}')\n\n        lines = [head] + [' ' * 4 + line for line in body]\n        return '\\n'.join(lines)\n\n    def extra_repr(self) -> List[str]:\n        \"\"\"The extra repr information of the dataset.\"\"\"\n        body = []\n        body.append(f'Annotation file: \\t{self.ann_file}')\n        body.append(f'Prefix of images: \\t{self.img_prefix}')\n        return body\n"
  },
  {
    "path": "mmagic/datasets/basic_frames_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom typing import Callable, List, Optional, Union\n\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import get_file_backend, list_from_file\n\nfrom ..registry import DATASETS\n\n\n@DATASETS.register_module()\nclass BasicFramesDataset(BaseDataset):\n    \"\"\"BasicFramesDataset for open source projects in OpenMMLab/MMagic.\n\n    This dataset is designed for low-level vision tasks with frames,\n    such as video super-resolution and video frame interpolation.\n\n    The annotation file is optional.\n\n    If use annotation file, the annotation format can be shown as follows.\n\n    .. code-block:: none\n\n        Case 1 (Vid4):\n\n            calendar 41\n            city 34\n            foliage 49\n            walk 47\n\n        Case 2 (REDS):\n\n            000/00000000.png (720, 1280, 3)\n            000/00000001.png (720, 1280, 3)\n\n        Case 3 (Vimeo90k):\n\n            00001/0266 (256, 448, 3)\n            00001/0268 (256, 448, 3)\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        metainfo (dict, optional): Meta information for dataset, such as class\n            information. Defaults to None.\n        data_root (str, optional): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to None.\n        data_prefix (dict, optional): Prefix for training data. Defaults to\n            dict(img='', gt='').\n        pipeline (list, optional): Processing pipeline. Defaults to [].\n        test_mode (bool, optional): ``test_mode=True`` means in test phase.\n            Defaults to False.\n        filename_tmpl (str): Template for each filename. Note that the\n            template excludes the file extension. Default: '{}'.\n        search_key (str): The key used for searching the folder to get\n            data_list. Default: 'gt'.\n        backend_args (dict, optional): Arguments to instantiate the prefix of\n            uri corresponding backend. Defaults to None.\n        depth (int): The depth of path. Default: 1\n        num_input_frames (None | int): Number of input frames. Default: None.\n        num_output_frames (None | int): Number of output frames. Default: None.\n        fixed_seq_len (None | int): The fixed sequence length.\n            If None, BasicFramesDataset will obtain the length of each\n            sequence.\n            Default: None.\n        load_frames_list (dict): Load frames list for each key.\n            Default: dict().\n\n    Examples:\n\n        Assume the file structure as the following:\n\n        mmagic (root)\n        ├── mmagic\n        ├── tools\n        ├── configs\n        ├── data\n        │   ├── Vid4\n        │   │   ├── BIx4\n        │   │   │   ├── city\n        │   │   │   │   ├── img1.png\n        │   │   ├── GT\n        │   │   │   ├── city\n        │   │   │   │   ├── img1.png\n        │   │   ├── meta_info_Vid4_GT.txt\n        │   ├── places\n        │   │   ├── sequences\n        |   |   |   ├── 00001\n        │   │   │   │   ├── 0389\n        │   │   │   │   │   ├── img1.png\n        │   │   │   │   │   ├── img2.png\n        │   │   │   │   │   ├── img3.png\n        │   │   ├── tri_trainlist.txt\n\n        Case 1: Loading Vid4 dataset for training a VSR model.\n\n        .. code-block:: python\n\n            dataset = BasicFramesDataset(\n                ann_file='meta_info_Vid4_GT.txt',\n                metainfo=dict(dataset_type='vid4', task_name='vsr'),\n                data_root='data/Vid4',\n                data_prefix=dict(img='BIx4', gt='GT'),\n                pipeline=[],\n                depth=2,\n                num_input_frames=5)\n\n        Case 2: Loading Vimeo90k dataset for training a VFI model.\n\n        .. code-block:: python\n\n            dataset = BasicFramesDataset(\n                ann_file='tri_trainlist.txt',\n                metainfo=dict(dataset_type='vimeo90k', task_name='vfi'),\n                data_root='data/vimeo-triplet',\n                data_prefix=dict(img='sequences', gt='sequences'),\n                pipeline=[],\n                depth=2,\n                load_frames_list=dict(\n                    img=['img1.png', 'img3.png'], gt=['img2.png']))\n\n        See more details in unittest\n            tests/test_datasets/test_base_frames_dataset.py\n                TestFramesDatasets().test_version_1_method()\n    \"\"\"\n\n    METAINFO = dict(dataset_type='base_edit_dataset', task_name='editing')\n\n    def __init__(self,\n                 ann_file: str = '',\n                 metainfo: Optional[dict] = None,\n                 data_root: Optional[str] = None,\n                 data_prefix: dict = dict(img=''),\n                 pipeline: List[Union[dict, Callable]] = [],\n                 test_mode: bool = False,\n                 filename_tmpl: dict = dict(),\n                 search_key: Optional[str] = None,\n                 backend_args: Optional[dict] = None,\n                 depth: int = 1,\n                 num_input_frames: Optional[int] = None,\n                 num_output_frames: Optional[int] = None,\n                 fixed_seq_len: Optional[int] = None,\n                 load_frames_list: dict = dict(),\n                 **kwargs):\n\n        for key in data_prefix:\n            if key not in filename_tmpl:\n                filename_tmpl[key] = '{}'\n\n        if search_key is None:\n            keys = list(data_prefix.keys())\n            search_key = keys[0]\n        self.search_key = search_key\n        self.filename_tmpl = filename_tmpl\n        self.use_ann_file = (ann_file != '')\n        if backend_args is None:\n            self.backend_args = None\n        else:\n            self.backend_args = backend_args.copy()\n        self.depth = depth\n        self.seq_lens = dict(fixed_seq_len=fixed_seq_len)\n        self.num_input_frames = num_input_frames\n        self.num_output_frames = num_output_frames\n        self.load_frames_list = load_frames_list\n        self.file_backend = get_file_backend(\n            uri=data_root, backend_args=backend_args)\n\n        super().__init__(\n            ann_file=ann_file,\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=data_prefix,\n            pipeline=pipeline,\n            test_mode=test_mode,\n            **kwargs)\n\n    def load_data_list(self) -> List[dict]:\n        \"\"\"Load data list from folder or annotation file.\n\n        Returns:\n            list[dict]: A list of annotation.\n        \"\"\"\n\n        path_list = self._get_path_list()\n        self._set_seq_lens()\n\n        data_list = []\n        for path in path_list:\n            basename, _ = osp.splitext(path)\n            sequence_length = self.seq_lens['fixed_seq_len']\n            if sequence_length is None:\n                sequence_length = self.seq_lens[path.split(os.sep)[0]]\n            data = dict(\n                key=basename,\n                num_input_frames=self.num_input_frames,\n                num_output_frames=self.num_output_frames,\n                sequence_length=sequence_length)\n            for key in self.data_prefix:\n                if key in self.load_frames_list:\n                    folder = osp.join(self.data_prefix[key], path)\n                    data[f'{key}_path'] = self._get_frames_list(key, folder)\n                    # The list of frames has been loaded,\n                    # ``sequence_length`` is useless\n                    # Avoid loading frames by ``sequence_length`` in pipeline\n                    data['sequence_length'] = None\n                    # overwrite ``num_input_frames`` and ``num_output_frames``\n                    if key == 'img':\n                        data['num_input_frames'] = len(data[f'{key}_path'])\n                    elif key == 'gt':\n                        data['num_output_frames'] = len(data[f'{key}_path'])\n                else:\n                    data[f'{key}_path'] = self.data_prefix[key]\n            data_list.append(data)\n\n        return data_list\n\n    def _get_path_list(self):\n        \"\"\"Get list of paths from annotation file or folder of dataset.\n\n        Returns:\n            list[str]: A list of paths.\n        \"\"\"\n\n        if self.use_ann_file:\n            path_list = self._get_path_list_from_ann()\n        else:\n            path_list = self._get_path_list_from_folder(depth=self.depth)\n\n        return path_list\n\n    def _get_path_list_from_ann(self):\n        \"\"\"Get list of paths from annotation file.\n\n        Returns:\n            list[str]: A list of paths.\n        \"\"\"\n\n        ann_list = list_from_file(\n            self.ann_file, backend_args=self.backend_args)\n        path_list = []\n        for ann in ann_list:\n            if ann.isspace() or ann == '':\n                continue\n            path = ann.split(' ')[0]\n            # Compatible with Windows file systems\n            path = path.replace('/', os.sep)\n            splitted_path = path.split(os.sep)\n            if self.seq_lens['fixed_seq_len'] is None:\n                self.seq_lens[splitted_path[0]] = 0\n            ann_depth = len(splitted_path)\n            if self.depth > ann_depth:\n                # desire \"folder/file\", but the ann_file provides \"folder\".\n                sub_path_list = self._get_path_list_from_folder(\n                    sub_folder=path,\n                    need_ext=False,\n                    depth=self.depth - ann_depth)\n                path_list.extend(\n                    [path + os.sep + sub_path for sub_path in sub_path_list])\n            elif self.depth < ann_depth:\n                # desire \"folder\", while the ann_file provides \"folder/file\".\n                desire_path = f'{os.sep}'.join(splitted_path[:self.depth])\n                if desire_path not in path_list:\n                    path_list.append(desire_path)\n            else:\n                # desire \"folder/file\" and the ann_file provides \"folder/file\".\n                # or desire \"folder\" and the ann_file provides \"folder\".\n                path_list.append(path)\n\n        return path_list\n\n    def _get_path_list_from_folder(self,\n                                   sub_folder=None,\n                                   need_ext=True,\n                                   depth=1):\n        \"\"\"Get list of paths from folder.\n\n        Args:\n            sub_folder (None | str): The path of sub_folder. Default: None.\n            need_ext (bool): Whether need ext. Default: True.\n            depth (int): Residual depth of path, recursively called to\n                ``depth == 1``. Default: 1\n\n        Returns:\n            list[str]: A list of paths.\n        \"\"\"\n\n        folder = self.data_prefix[self.search_key]\n        tmpl = self.filename_tmpl[self.search_key].format('')\n        path_list = []\n        if sub_folder:\n            folder = osp.join(folder, sub_folder)\n        listdir = list(self.file_backend.list_dir_or_file(dir_path=folder))\n        listdir.sort()\n        for path in listdir:\n            basename, ext = osp.splitext(path)\n            if not (sub_folder or self.seq_lens['fixed_seq_len']):\n                self.seq_lens[basename] = 0\n            if depth > 1:\n                sub_path_list = self._get_path_list_from_folder(\n                    sub_folder=path)\n                path_list.extend(\n                    [path + os.sep + sub_path for sub_path in sub_path_list])\n            elif basename.endswith(tmpl):\n                if need_ext:\n                    path = path.replace(tmpl + ext, ext)\n                else:\n                    path = path.replace(tmpl + ext, '')\n                path_list.append(path)\n\n        return path_list\n\n    def _set_seq_lens(self):\n        \"\"\"Get sequence lengths.\"\"\"\n\n        if self.seq_lens['fixed_seq_len']:\n            return\n        folder = self.data_prefix[self.search_key]\n        for key in self.seq_lens.keys():\n            if key == 'fixed_seq_len':\n                continue\n            path = osp.join(folder, key)\n            num_frames = len(list(self.file_backend.list_dir_or_file(path)))\n            self.seq_lens[key] = num_frames\n\n    def _get_frames_list(self, key, folder):\n        \"\"\"Obtain list of frames.\n\n        Args:\n            key (str): The key of frames list, e.g. ``img``, ``gt``.\n            folder (str): Folder of frames.\n\n        Return:\n            list[str]: The paths list of frames.\n        \"\"\"\n\n        if 'all' in self.load_frames_list[key]:\n            # load all\n            files = list(self.file_backend.list_dir_or_file(dir_path=folder))\n        else:\n            files = self.load_frames_list[key]\n\n        files.sort()\n        tmpl = self.filename_tmpl[key]\n        files = [tmpl.format(file) for file in files]\n        paths = [osp.join(folder, file) for file in files]\n\n        return paths\n"
  },
  {
    "path": "mmagic/datasets/basic_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport re\nfrom typing import Callable, List, Optional, Tuple, Union\n\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import get_file_backend, list_from_file\n\nfrom mmagic.registry import DATASETS\n\nIMG_EXTENSIONS = ('.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG', '.ppm',\n                  '.PPM', '.bmp', '.BMP', '.tif', '.TIF', '.tiff', '.TIFF')\n\n\n@DATASETS.register_module()\nclass BasicImageDataset(BaseDataset):\n    \"\"\"BasicImageDataset for open source projects in OpenMMLab/MMagic.\n\n    This dataset is designed for low-level vision tasks with image,\n    such as super-resolution and inpainting.\n\n    The annotation file is optional.\n\n    If use annotation file, the annotation format can be shown as follows.\n\n    .. code-block:: none\n\n        Case 1 (CelebA-HQ):\n\n            000001.png\n            000002.png\n\n        Case 2 (DIV2K):\n\n            0001_s001.png (480,480,3)\n            0001_s002.png (480,480,3)\n            0001_s003.png (480,480,3)\n            0002_s001.png (480,480,3)\n            0002_s002.png (480,480,3)\n\n        Case 3 (Vimeo90k):\n\n            00001/0266 (256, 448, 3)\n            00001/0268 (256, 448, 3)\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        metainfo (dict, optional): Meta information for dataset, such as class\n            information. Defaults to None.\n        data_root (str, optional): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to None.\n        data_prefix (dict, optional): Prefix for training data. Defaults to\n            dict(img=None, ann=None).\n        pipeline (list, optional): Processing pipeline. Defaults to [].\n        test_mode (bool, optional): ``test_mode=True`` means in test phase.\n            Defaults to False.\n        filename_tmpl (dict): Template for each filename. Note that the\n            template excludes the file extension. Default: dict().\n        search_key (str): The key used for searching the folder to get\n            data_list. Default: 'gt'.\n        backend_args (dict, optional): Arguments to instantiate the prefix of\n            uri corresponding backend. Defaults to None.\n        suffix (str or tuple[str], optional):  File suffix\n            that we are interested in. Default: None.\n        recursive (bool): If set to True, recursively scan the\n            directory. Default: False.\n\n    Note:\n\n        Assume the file structure as the following:\n\n        .. code-block:: none\n\n            mmagic (root)\n            ├── mmagic\n            ├── tools\n            ├── configs\n            ├── data\n            │   ├── DIV2K\n            │   │   ├── DIV2K_train_HR\n            │   │   │   ├── image.png\n            │   │   ├── DIV2K_train_LR_bicubic\n            │   │   │   ├── X2\n            │   │   │   ├── X3\n            │   │   │   ├── X4\n            │   │   │   │   ├── image_x4.png\n            │   │   ├── DIV2K_valid_HR\n            │   │   ├── DIV2K_valid_LR_bicubic\n            │   │   │   ├── X2\n            │   │   │   ├── X3\n            │   │   │   ├── X4\n            │   ├── places\n            │   │   ├── test_set\n            │   │   ├── train_set\n            |   |   ├── meta\n            |   |   |    ├── Places365_train.txt\n            |   |   |    ├── Places365_val.txt\n\n    Examples:\n\n        Case 1: Loading DIV2K dataset for training a SISR model.\n\n        .. code-block:: python\n\n            dataset = BasicImageDataset(\n                ann_file='',\n                metainfo=dict(\n                    dataset_type='div2k',\n                    task_name='sisr'),\n                data_root='data/DIV2K',\n                data_prefix=dict(\n                    gt='DIV2K_train_HR', img='DIV2K_train_LR_bicubic/X4'),\n                filename_tmpl=dict(img='{}_x4', gt='{}'),\n                pipeline=[])\n\n        Case 2: Loading places dataset for training an inpainting model.\n\n        .. code-block:: python\n\n            dataset = BasicImageDataset(\n                ann_file='meta/Places365_train.txt',\n                metainfo=dict(\n                    dataset_type='places365',\n                    task_name='inpainting'),\n                data_root='data/places',\n                data_prefix=dict(gt='train_set'),\n                pipeline=[])\n    \"\"\"\n\n    METAINFO = dict(dataset_type='basic_image_dataset', task_name='editing')\n\n    def __init__(self,\n                 ann_file: str = '',\n                 metainfo: Optional[dict] = None,\n                 data_root: Optional[str] = None,\n                 data_prefix: dict = dict(img=''),\n                 pipeline: List[Union[dict, Callable]] = [],\n                 test_mode: bool = False,\n                 filename_tmpl: dict = dict(),\n                 search_key: Optional[str] = None,\n                 backend_args: Optional[dict] = None,\n                 img_suffix: Optional[Union[str, Tuple[str]]] = IMG_EXTENSIONS,\n                 recursive: bool = False,\n                 **kwards):\n\n        for key in data_prefix:\n            if key not in filename_tmpl:\n                filename_tmpl[key] = '{}'\n\n        if search_key is None:\n            keys = list(data_prefix.keys())\n            search_key = keys[0]\n        self.search_key = search_key\n        self.filename_tmpl = filename_tmpl\n        self.use_ann_file = (ann_file != '')\n        if backend_args is None:\n            self.backend_args = None\n        else:\n            self.backend_args = backend_args.copy()\n        self.img_suffix = img_suffix\n        self.recursive = recursive\n        self.file_backend = get_file_backend(\n            uri=data_root, backend_args=backend_args)\n\n        super().__init__(\n            ann_file=ann_file,\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=data_prefix,\n            pipeline=pipeline,\n            test_mode=test_mode,\n            **kwards)\n\n    def load_data_list(self) -> List[dict]:\n        \"\"\"Load data list from folder or annotation file.\n\n        Returns:\n            list[dict]: A list of annotation.\n        \"\"\"\n\n        path_list = self._get_path_list()\n\n        data_list = []\n        for file in path_list:\n            basename, ext = osp.splitext(file)\n            if basename.startswith(os.sep):\n                # Avoid absolute-path-like annotations\n                basename = basename[1:]\n            data = dict(key=basename)\n            for key in self.data_prefix:\n                path = osp.join(self.data_prefix[key],\n                                (f'{self.filename_tmpl[key].format(basename)}'\n                                 f'{ext}'))\n                data[f'{key}_path'] = path\n            data_list.append(data)\n\n        return data_list\n\n    def _get_path_list(self):\n        \"\"\"Get list of paths from annotation file or folder of dataset.\n\n        Returns:\n            list[dict]: A list of paths.\n        \"\"\"\n\n        path_list = []\n        if self.use_ann_file:\n            path_list = self._get_path_list_from_ann()\n        else:\n            path_list = self._get_path_list_from_folder()\n\n        return path_list\n\n    def _get_path_list_from_ann(self):\n        \"\"\"Get list of paths from annotation file.\n\n        Returns:\n            List: List of paths.\n        \"\"\"\n\n        ann_list = list_from_file(\n            self.ann_file, backend_args=self.backend_args)\n        path_list = []\n        for ann in ann_list:\n            if ann.isspace() or ann == '':\n                continue\n            path = ann.split(' ')[0]\n            # Compatible with Windows file systems\n            path = path.replace('/', os.sep)\n            path_list.append(path)\n\n        return path_list\n\n    def _get_path_list_from_folder(self):\n        \"\"\"Get list of paths from folder.\n\n        Returns:\n            List: List of paths.\n        \"\"\"\n\n        path_list = []\n        folder = self.data_prefix[self.search_key]\n        tmpl = self.filename_tmpl[self.search_key].format('')\n        virtual_path = self.filename_tmpl[self.search_key].format('.*')\n        for img_path in self.file_backend.list_dir_or_file(\n                dir_path=folder,\n                list_dir=False,\n                suffix=self.img_suffix,\n                recursive=self.recursive,\n        ):\n            basename, ext = osp.splitext(img_path)\n            if re.match(virtual_path, basename):\n                img_path = img_path.replace(tmpl + ext, ext)\n                path_list.append(img_path)\n\n        return path_list\n"
  },
  {
    "path": "mmagic/datasets/categories.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Pre-defined categories names of various datasets.\n\nIMAGENET_CATEGORIES = (\n    'tench, Tinca tinca',\n    'goldfish, Carassius auratus',\n    'great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias',  # noqa: E501\n    'tiger shark, Galeocerdo cuvieri',\n    'hammerhead, hammerhead shark',\n    'electric ray, crampfish, numbfish, torpedo',\n    'stingray',\n    'cock',\n    'hen',\n    'ostrich, Struthio camelus',\n    'brambling, Fringilla montifringilla',\n    'goldfinch, Carduelis carduelis',\n    'house finch, linnet, Carpodacus mexicanus',\n    'junco, snowbird',\n    'indigo bunting, indigo finch, indigo bird, Passerina cyanea',\n    'robin, American robin, Turdus migratorius',\n    'bulbul',\n    'jay',\n    'magpie',\n    'chickadee',\n    'water ouzel, dipper',\n    'kite',\n    'bald eagle, American eagle, Haliaeetus leucocephalus',\n    'vulture',\n    'great grey owl, great gray owl, Strix nebulosa',\n    'European fire salamander, Salamandra salamandra',\n    'common newt, Triturus vulgaris',\n    'eft',\n    'spotted salamander, Ambystoma maculatum',\n    'axolotl, mud puppy, Ambystoma mexicanum',\n    'bullfrog, Rana catesbeiana',\n    'tree frog, tree-frog',\n    'tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui',\n    'loggerhead, loggerhead turtle, Caretta caretta',\n    'leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea',  # noqa: E501\n    'mud turtle',\n    'terrapin',\n    'box turtle, box tortoise',\n    'banded gecko',\n    'common iguana, iguana, Iguana iguana',\n    'American chameleon, anole, Anolis carolinensis',\n    'whiptail, whiptail lizard',\n    'agama',\n    'frilled lizard, Chlamydosaurus kingi',\n    'alligator lizard',\n    'Gila monster, Heloderma suspectum',\n    'green lizard, Lacerta viridis',\n    'African chameleon, Chamaeleo chamaeleon',\n    'Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis',  # noqa: E501\n    'African crocodile, Nile crocodile, Crocodylus niloticus',\n    'American alligator, Alligator mississipiensis',\n    'triceratops',\n    'thunder snake, worm snake, Carphophis amoenus',\n    'ringneck snake, ring-necked snake, ring snake',\n    'hognose snake, puff adder, sand viper',\n    'green snake, grass snake',\n    'king snake, kingsnake',\n    'garter snake, grass snake',\n    'water snake',\n    'vine snake',\n    'night snake, Hypsiglena torquata',\n    'boa constrictor, Constrictor constrictor',\n    'rock python, rock snake, Python sebae',\n    'Indian cobra, Naja naja',\n    'green mamba',\n    'sea snake',\n    'horned viper, cerastes, sand viper, horned asp, Cerastes cornutus',\n    'diamondback, diamondback rattlesnake, Crotalus adamanteus',\n    'sidewinder, horned rattlesnake, Crotalus cerastes',\n    'trilobite',\n    'harvestman, daddy longlegs, Phalangium opilio',\n    'scorpion',\n    'black and gold garden spider, Argiope aurantia',\n    'barn spider, Araneus cavaticus',\n    'garden spider, Aranea diademata',\n    'black widow, Latrodectus mactans',\n    'tarantula',\n    'wolf spider, hunting spider',\n    'tick',\n    'centipede',\n    'black grouse',\n    'ptarmigan',\n    'ruffed grouse, partridge, Bonasa umbellus',\n    'prairie chicken, prairie grouse, prairie fowl',\n    'peacock',\n    'quail',\n    'partridge',\n    'African grey, African gray, Psittacus erithacus',\n    'macaw',\n    'sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita',\n    'lorikeet',\n    'coucal',\n    'bee eater',\n    'hornbill',\n    'hummingbird',\n    'jacamar',\n    'toucan',\n    'drake',\n    'red-breasted merganser, Mergus serrator',\n    'goose',\n    'black swan, Cygnus atratus',\n    'tusker',\n    'echidna, spiny anteater, anteater',\n    'platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus',  # noqa: E501\n    'wallaby, brush kangaroo',\n    'koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus',  # noqa: E501\n    'wombat',\n    'jellyfish',\n    'sea anemone, anemone',\n    'brain coral',\n    'flatworm, platyhelminth',\n    'nematode, nematode worm, roundworm',\n    'conch',\n    'snail',\n    'slug',\n    'sea slug, nudibranch',\n    'chiton, coat-of-mail shell, sea cradle, polyplacophore',\n    'chambered nautilus, pearly nautilus, nautilus',\n    'Dungeness crab, Cancer magister',\n    'rock crab, Cancer irroratus',\n    'fiddler crab',\n    'king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica',  # noqa: E501\n    'American lobster, Northern lobster, Maine lobster, Homarus americanus',  # noqa: E501\n    'spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish',  # noqa: E501\n    'crayfish, crawfish, crawdad, crawdaddy',\n    'hermit crab',\n    'isopod',\n    'white stork, Ciconia ciconia',\n    'black stork, Ciconia nigra',\n    'spoonbill',\n    'flamingo',\n    'little blue heron, Egretta caerulea',\n    'American egret, great white heron, Egretta albus',\n    'bittern',\n    'crane',\n    'limpkin, Aramus pictus',\n    'European gallinule, Porphyrio porphyrio',\n    'American coot, marsh hen, mud hen, water hen, Fulica americana',\n    'bustard',\n    'ruddy turnstone, Arenaria interpres',\n    'red-backed sandpiper, dunlin, Erolia alpina',\n    'redshank, Tringa totanus',\n    'dowitcher',\n    'oystercatcher, oyster catcher',\n    'pelican',\n    'king penguin, Aptenodytes patagonica',\n    'albatross, mollymawk',\n    'grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus',  # noqa: E501\n    'killer whale, killer, orca, grampus, sea wolf, Orcinus orca',\n    'dugong, Dugong dugon',\n    'sea lion',\n    'Chihuahua',\n    'Japanese spaniel',\n    'Maltese dog, Maltese terrier, Maltese',\n    'Pekinese, Pekingese, Peke',\n    'Shih-Tzu',\n    'Blenheim spaniel',\n    'papillon',\n    'toy terrier',\n    'Rhodesian ridgeback',\n    'Afghan hound, Afghan',\n    'basset, basset hound',\n    'beagle',\n    'bloodhound, sleuthhound',\n    'bluetick',\n    'black-and-tan coonhound',\n    'Walker hound, Walker foxhound',\n    'English foxhound',\n    'redbone',\n    'borzoi, Russian wolfhound',\n    'Irish wolfhound',\n    'Italian greyhound',\n    'whippet',\n    'Ibizan hound, Ibizan Podenco',\n    'Norwegian elkhound, elkhound',\n    'otterhound, otter hound',\n    'Saluki, gazelle hound',\n    'Scottish deerhound, deerhound',\n    'Weimaraner',\n    'Staffordshire bullterrier, Staffordshire bull terrier',\n    'American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier',  # noqa: E501\n    'Bedlington terrier',\n    'Border terrier',\n    'Kerry blue terrier',\n    'Irish terrier',\n    'Norfolk terrier',\n    'Norwich terrier',\n    'Yorkshire terrier',\n    'wire-haired fox terrier',\n    'Lakeland terrier',\n    'Sealyham terrier, Sealyham',\n    'Airedale, Airedale terrier',\n    'cairn, cairn terrier',\n    'Australian terrier',\n    'Dandie Dinmont, Dandie Dinmont terrier',\n    'Boston bull, Boston terrier',\n    'miniature schnauzer',\n    'giant schnauzer',\n    'standard schnauzer',\n    'Scotch terrier, Scottish terrier, Scottie',\n    'Tibetan terrier, chrysanthemum dog',\n    'silky terrier, Sydney silky',\n    'soft-coated wheaten terrier',\n    'West Highland white terrier',\n    'Lhasa, Lhasa apso',\n    'flat-coated retriever',\n    'curly-coated retriever',\n    'golden retriever',\n    'Labrador retriever',\n    'Chesapeake Bay retriever',\n    'German short-haired pointer',\n    'vizsla, Hungarian pointer',\n    'English setter',\n    'Irish setter, red setter',\n    'Gordon setter',\n    'Brittany spaniel',\n    'clumber, clumber spaniel',\n    'English springer, English springer spaniel',\n    'Welsh springer spaniel',\n    'cocker spaniel, English cocker spaniel, cocker',\n    'Sussex spaniel',\n    'Irish water spaniel',\n    'kuvasz',\n    'schipperke',\n    'groenendael',\n    'malinois',\n    'briard',\n    'kelpie',\n    'komondor',\n    'Old English sheepdog, bobtail',\n    'Shetland sheepdog, Shetland sheep dog, Shetland',\n    'collie',\n    'Border collie',\n    'Bouvier des Flandres, Bouviers des Flandres',\n    'Rottweiler',\n    'German shepherd, German shepherd dog, German police dog, alsatian',\n    'Doberman, Doberman pinscher',\n    'miniature pinscher',\n    'Greater Swiss Mountain dog',\n    'Bernese mountain dog',\n    'Appenzeller',\n    'EntleBucher',\n    'boxer',\n    'bull mastiff',\n    'Tibetan mastiff',\n    'French bulldog',\n    'Great Dane',\n    'Saint Bernard, St Bernard',\n    'Eskimo dog, husky',\n    'malamute, malemute, Alaskan malamute',\n    'Siberian husky',\n    'dalmatian, coach dog, carriage dog',\n    'affenpinscher, monkey pinscher, monkey dog',\n    'basenji',\n    'pug, pug-dog',\n    'Leonberg',\n    'Newfoundland, Newfoundland dog',\n    'Great Pyrenees',\n    'Samoyed, Samoyede',\n    'Pomeranian',\n    'chow, chow chow',\n    'keeshond',\n    'Brabancon griffon',\n    'Pembroke, Pembroke Welsh corgi',\n    'Cardigan, Cardigan Welsh corgi',\n    'toy poodle',\n    'miniature poodle',\n    'standard poodle',\n    'Mexican hairless',\n    'timber wolf, grey wolf, gray wolf, Canis lupus',\n    'white wolf, Arctic wolf, Canis lupus tundrarum',\n    'red wolf, maned wolf, Canis rufus, Canis niger',\n    'coyote, prairie wolf, brush wolf, Canis latrans',\n    'dingo, warrigal, warragal, Canis dingo',\n    'dhole, Cuon alpinus',\n    'African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus',\n    'hyena, hyaena',\n    'red fox, Vulpes vulpes',\n    'kit fox, Vulpes macrotis',\n    'Arctic fox, white fox, Alopex lagopus',\n    'grey fox, gray fox, Urocyon cinereoargenteus',\n    'tabby, tabby cat',\n    'tiger cat',\n    'Persian cat',\n    'Siamese cat, Siamese',\n    'Egyptian cat',\n    'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor',  # noqa: E501\n    'lynx, catamount',\n    'leopard, Panthera pardus',\n    'snow leopard, ounce, Panthera uncia',\n    'jaguar, panther, Panthera onca, Felis onca',\n    'lion, king of beasts, Panthera leo',\n    'tiger, Panthera tigris',\n    'cheetah, chetah, Acinonyx jubatus',\n    'brown bear, bruin, Ursus arctos',\n    'American black bear, black bear, Ursus americanus, Euarctos americanus',  # noqa: E501\n    'ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus',\n    'sloth bear, Melursus ursinus, Ursus ursinus',\n    'mongoose',\n    'meerkat, mierkat',\n    'tiger beetle',\n    'ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle',\n    'ground beetle, carabid beetle',\n    'long-horned beetle, longicorn, longicorn beetle',\n    'leaf beetle, chrysomelid',\n    'dung beetle',\n    'rhinoceros beetle',\n    'weevil',\n    'fly',\n    'bee',\n    'ant, emmet, pismire',\n    'grasshopper, hopper',\n    'cricket',\n    'walking stick, walkingstick, stick insect',\n    'cockroach, roach',\n    'mantis, mantid',\n    'cicada, cicala',\n    'leafhopper',\n    'lacewing, lacewing fly',\n    \"dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk\",  # noqa: E501\n    'damselfly',\n    'admiral',\n    'ringlet, ringlet butterfly',\n    'monarch, monarch butterfly, milkweed butterfly, Danaus plexippus',\n    'cabbage butterfly',\n    'sulphur butterfly, sulfur butterfly',\n    'lycaenid, lycaenid butterfly',\n    'starfish, sea star',\n    'sea urchin',\n    'sea cucumber, holothurian',\n    'wood rabbit, cottontail, cottontail rabbit',\n    'hare',\n    'Angora, Angora rabbit',\n    'hamster',\n    'porcupine, hedgehog',\n    'fox squirrel, eastern fox squirrel, Sciurus niger',\n    'marmot',\n    'beaver',\n    'guinea pig, Cavia cobaya',\n    'sorrel',\n    'zebra',\n    'hog, pig, grunter, squealer, Sus scrofa',\n    'wild boar, boar, Sus scrofa',\n    'warthog',\n    'hippopotamus, hippo, river horse, Hippopotamus amphibius',\n    'ox',\n    'water buffalo, water ox, Asiatic buffalo, Bubalus bubalis',\n    'bison',\n    'ram, tup',\n    'bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis',  # noqa: E501\n    'ibex, Capra ibex',\n    'hartebeest',\n    'impala, Aepyceros melampus',\n    'gazelle',\n    'Arabian camel, dromedary, Camelus dromedarius',\n    'llama',\n    'weasel',\n    'mink',\n    'polecat, fitch, foulmart, foumart, Mustela putorius',\n    'black-footed ferret, ferret, Mustela nigripes',\n    'otter',\n    'skunk, polecat, wood pussy',\n    'badger',\n    'armadillo',\n    'three-toed sloth, ai, Bradypus tridactylus',\n    'orangutan, orang, orangutang, Pongo pygmaeus',\n    'gorilla, Gorilla gorilla',\n    'chimpanzee, chimp, Pan troglodytes',\n    'gibbon, Hylobates lar',\n    'siamang, Hylobates syndactylus, Symphalangus syndactylus',\n    'guenon, guenon monkey',\n    'patas, hussar monkey, Erythrocebus patas',\n    'baboon',\n    'macaque',\n    'langur',\n    'colobus, colobus monkey',\n    'proboscis monkey, Nasalis larvatus',\n    'marmoset',\n    'capuchin, ringtail, Cebus capucinus',\n    'howler monkey, howler',\n    'titi, titi monkey',\n    'spider monkey, Ateles geoffroyi',\n    'squirrel monkey, Saimiri sciureus',\n    'Madagascar cat, ring-tailed lemur, Lemur catta',\n    'indri, indris, Indri indri, Indri brevicaudatus',\n    'Indian elephant, Elephas maximus',\n    'African elephant, Loxodonta africana',\n    'lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens',\n    'giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca',\n    'barracouta, snoek',\n    'eel',\n    'coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch',  # noqa: E501\n    'rock beauty, Holocanthus tricolor',\n    'anemone fish',\n    'sturgeon',\n    'gar, garfish, garpike, billfish, Lepisosteus osseus',\n    'lionfish',\n    'puffer, pufferfish, blowfish, globefish',\n    'abacus',\n    'abaya',\n    \"academic gown, academic robe, judge's robe\",\n    'accordion, piano accordion, squeeze box',\n    'acoustic guitar',\n    'aircraft carrier, carrier, flattop, attack aircraft carrier',\n    'airliner',\n    'airship, dirigible',\n    'altar',\n    'ambulance',\n    'amphibian, amphibious vehicle',\n    'analog clock',\n    'apiary, bee house',\n    'apron',\n    'ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin',  # noqa: E501\n    'assault rifle, assault gun',\n    'backpack, back pack, knapsack, packsack, rucksack, haversack',\n    'bakery, bakeshop, bakehouse',\n    'balance beam, beam',\n    'balloon',\n    'ballpoint, ballpoint pen, ballpen, Biro',\n    'Band Aid',\n    'banjo',\n    'bannister, banister, balustrade, balusters, handrail',\n    'barbell',\n    'barber chair',\n    'barbershop',\n    'barn',\n    'barometer',\n    'barrel, cask',\n    'barrow, garden cart, lawn cart, wheelbarrow',\n    'baseball',\n    'basketball',\n    'bassinet',\n    'bassoon',\n    'bathing cap, swimming cap',\n    'bath towel',\n    'bathtub, bathing tub, bath, tub',\n    'beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon',  # noqa: E501\n    'beacon, lighthouse, beacon light, pharos',\n    'beaker',\n    'bearskin, busby, shako',\n    'beer bottle',\n    'beer glass',\n    'bell cote, bell cot',\n    'bib',\n    'bicycle-built-for-two, tandem bicycle, tandem',\n    'bikini, two-piece',\n    'binder, ring-binder',\n    'binoculars, field glasses, opera glasses',\n    'birdhouse',\n    'boathouse',\n    'bobsled, bobsleigh, bob',\n    'bolo tie, bolo, bola tie, bola',\n    'bonnet, poke bonnet',\n    'bookcase',\n    'bookshop, bookstore, bookstall',\n    'bottlecap',\n    'bow',\n    'bow tie, bow-tie, bowtie',\n    'brass, memorial tablet, plaque',\n    'brassiere, bra, bandeau',\n    'breakwater, groin, groyne, mole, bulwark, seawall, jetty',\n    'breastplate, aegis, egis',\n    'broom',\n    'bucket, pail',\n    'buckle',\n    'bulletproof vest',\n    'bullet train, bullet',\n    'butcher shop, meat market',\n    'cab, hack, taxi, taxicab',\n    'caldron, cauldron',\n    'candle, taper, wax light',\n    'cannon',\n    'canoe',\n    'can opener, tin opener',\n    'cardigan',\n    'car mirror',\n    'carousel, carrousel, merry-go-round, roundabout, whirligig',\n    \"carpenter's kit, tool kit\",\n    'carton',\n    'car wheel',\n    'cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM',  # noqa: E501\n    'cassette',\n    'cassette player',\n    'castle',\n    'catamaran',\n    'CD player',\n    'cello, violoncello',\n    'cellular telephone, cellular phone, cellphone, cell, mobile phone',\n    'chain',\n    'chainlink fence',\n    'chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour',  # noqa: E501\n    'chain saw, chainsaw',\n    'chest',\n    'chiffonier, commode',\n    'chime, bell, gong',\n    'china cabinet, china closet',\n    'Christmas stocking',\n    'church, church building',\n    'cinema, movie theater, movie theatre, movie house, picture palace',\n    'cleaver, meat cleaver, chopper',\n    'cliff dwelling',\n    'cloak',\n    'clog, geta, patten, sabot',\n    'cocktail shaker',\n    'coffee mug',\n    'coffeepot',\n    'coil, spiral, volute, whorl, helix',\n    'combination lock',\n    'computer keyboard, keypad',\n    'confectionery, confectionary, candy store',\n    'container ship, containership, container vessel',\n    'convertible',\n    'corkscrew, bottle screw',\n    'cornet, horn, trumpet, trump',\n    'cowboy boot',\n    'cowboy hat, ten-gallon hat',\n    'cradle',\n    'crane',\n    'crash helmet',\n    'crate',\n    'crib, cot',\n    'Crock Pot',\n    'croquet ball',\n    'crutch',\n    'cuirass',\n    'dam, dike, dyke',\n    'desk',\n    'desktop computer',\n    'dial telephone, dial phone',\n    'diaper, nappy, napkin',\n    'digital clock',\n    'digital watch',\n    'dining table, board',\n    'dishrag, dishcloth',\n    'dishwasher, dish washer, dishwashing machine',\n    'disk brake, disc brake',\n    'dock, dockage, docking facility',\n    'dogsled, dog sled, dog sleigh',\n    'dome',\n    'doormat, welcome mat',\n    'drilling platform, offshore rig',\n    'drum, membranophone, tympan',\n    'drumstick',\n    'dumbbell',\n    'Dutch oven',\n    'electric fan, blower',\n    'electric guitar',\n    'electric locomotive',\n    'entertainment center',\n    'envelope',\n    'espresso maker',\n    'face powder',\n    'feather boa, boa',\n    'file, file cabinet, filing cabinet',\n    'fireboat',\n    'fire engine, fire truck',\n    'fire screen, fireguard',\n    'flagpole, flagstaff',\n    'flute, transverse flute',\n    'folding chair',\n    'football helmet',\n    'forklift',\n    'fountain',\n    'fountain pen',\n    'four-poster',\n    'freight car',\n    'French horn, horn',\n    'frying pan, frypan, skillet',\n    'fur coat',\n    'garbage truck, dustcart',\n    'gasmask, respirator, gas helmet',\n    'gas pump, gasoline pump, petrol pump, island dispenser',\n    'goblet',\n    'go-kart',\n    'golf ball',\n    'golfcart, golf cart',\n    'gondola',\n    'gong, tam-tam',\n    'gown',\n    'grand piano, grand',\n    'greenhouse, nursery, glasshouse',\n    'grille, radiator grille',\n    'grocery store, grocery, food market, market',\n    'guillotine',\n    'hair slide',\n    'hair spray',\n    'half track',\n    'hammer',\n    'hamper',\n    'hand blower, blow dryer, blow drier, hair dryer, hair drier',\n    'hand-held computer, hand-held microcomputer',\n    'handkerchief, hankie, hanky, hankey',\n    'hard disc, hard disk, fixed disk',\n    'harmonica, mouth organ, harp, mouth harp',\n    'harp',\n    'harvester, reaper',\n    'hatchet',\n    'holster',\n    'home theater, home theatre',\n    'honeycomb',\n    'hook, claw',\n    'hoopskirt, crinoline',\n    'horizontal bar, high bar',\n    'horse cart, horse-cart',\n    'hourglass',\n    'iPod',\n    'iron, smoothing iron',\n    \"jack-o'-lantern\",\n    'jean, blue jean, denim',\n    'jeep, landrover',\n    'jersey, T-shirt, tee shirt',\n    'jigsaw puzzle',\n    'jinrikisha, ricksha, rickshaw',\n    'joystick',\n    'kimono',\n    'knee pad',\n    'knot',\n    'lab coat, laboratory coat',\n    'ladle',\n    'lampshade, lamp shade',\n    'laptop, laptop computer',\n    'lawn mower, mower',\n    'lens cap, lens cover',\n    'letter opener, paper knife, paperknife',\n    'library',\n    'lifeboat',\n    'lighter, light, igniter, ignitor',\n    'limousine, limo',\n    'liner, ocean liner',\n    'lipstick, lip rouge',\n    'Loafer',\n    'lotion',\n    'loudspeaker, speaker, speaker unit, loudspeaker system, speaker system',  # noqa: E501\n    \"loupe, jeweler's loupe\",\n    'lumbermill, sawmill',\n    'magnetic compass',\n    'mailbag, postbag',\n    'mailbox, letter box',\n    'maillot',\n    'maillot, tank suit',\n    'manhole cover',\n    'maraca',\n    'marimba, xylophone',\n    'mask',\n    'matchstick',\n    'maypole',\n    'maze, labyrinth',\n    'measuring cup',\n    'medicine chest, medicine cabinet',\n    'megalith, megalithic structure',\n    'microphone, mike',\n    'microwave, microwave oven',\n    'military uniform',\n    'milk can',\n    'minibus',\n    'miniskirt, mini',\n    'minivan',\n    'missile',\n    'mitten',\n    'mixing bowl',\n    'mobile home, manufactured home',\n    'Model T',\n    'modem',\n    'monastery',\n    'monitor',\n    'moped',\n    'mortar',\n    'mortarboard',\n    'mosque',\n    'mosquito net',\n    'motor scooter, scooter',\n    'mountain bike, all-terrain bike, off-roader',\n    'mountain tent',\n    'mouse, computer mouse',\n    'mousetrap',\n    'moving van',\n    'muzzle',\n    'nail',\n    'neck brace',\n    'necklace',\n    'nipple',\n    'notebook, notebook computer',\n    'obelisk',\n    'oboe, hautboy, hautbois',\n    'ocarina, sweet potato',\n    'odometer, hodometer, mileometer, milometer',\n    'oil filter',\n    'organ, pipe organ',\n    'oscilloscope, scope, cathode-ray oscilloscope, CRO',\n    'overskirt',\n    'oxcart',\n    'oxygen mask',\n    'packet',\n    'paddle, boat paddle',\n    'paddlewheel, paddle wheel',\n    'padlock',\n    'paintbrush',\n    \"pajama, pyjama, pj's, jammies\",\n    'palace',\n    'panpipe, pandean pipe, syrinx',\n    'paper towel',\n    'parachute, chute',\n    'parallel bars, bars',\n    'park bench',\n    'parking meter',\n    'passenger car, coach, carriage',\n    'patio, terrace',\n    'pay-phone, pay-station',\n    'pedestal, plinth, footstall',\n    'pencil box, pencil case',\n    'pencil sharpener',\n    'perfume, essence',\n    'Petri dish',\n    'photocopier',\n    'pick, plectrum, plectron',\n    'pickelhaube',\n    'picket fence, paling',\n    'pickup, pickup truck',\n    'pier',\n    'piggy bank, penny bank',\n    'pill bottle',\n    'pillow',\n    'ping-pong ball',\n    'pinwheel',\n    'pirate, pirate ship',\n    'pitcher, ewer',\n    \"plane, carpenter's plane, woodworking plane\",\n    'planetarium',\n    'plastic bag',\n    'plate rack',\n    'plow, plough',\n    \"plunger, plumber's helper\",\n    'Polaroid camera, Polaroid Land camera',\n    'pole',\n    'police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria',  # noqa: E501\n    'poncho',\n    'pool table, billiard table, snooker table',\n    'pop bottle, soda bottle',\n    'pot, flowerpot',\n    \"potter's wheel\",\n    'power drill',\n    'prayer rug, prayer mat',\n    'printer',\n    'prison, prison house',\n    'projectile, missile',\n    'projector',\n    'puck, hockey puck',\n    'punching bag, punch bag, punching ball, punchball',\n    'purse',\n    'quill, quill pen',\n    'quilt, comforter, comfort, puff',\n    'racer, race car, racing car',\n    'racket, racquet',\n    'radiator',\n    'radio, wireless',\n    'radio telescope, radio reflector',\n    'rain barrel',\n    'recreational vehicle, RV, R.V.',\n    'reel',\n    'reflex camera',\n    'refrigerator, icebox',\n    'remote control, remote',\n    'restaurant, eating house, eating place, eatery',\n    'revolver, six-gun, six-shooter',\n    'rifle',\n    'rocking chair, rocker',\n    'rotisserie',\n    'rubber eraser, rubber, pencil eraser',\n    'rugby ball',\n    'rule, ruler',\n    'running shoe',\n    'safe',\n    'safety pin',\n    'saltshaker, salt shaker',\n    'sandal',\n    'sarong',\n    'sax, saxophone',\n    'scabbard',\n    'scale, weighing machine',\n    'school bus',\n    'schooner',\n    'scoreboard',\n    'screen, CRT screen',\n    'screw',\n    'screwdriver',\n    'seat belt, seatbelt',\n    'sewing machine',\n    'shield, buckler',\n    'shoe shop, shoe-shop, shoe store',\n    'shoji',\n    'shopping basket',\n    'shopping cart',\n    'shovel',\n    'shower cap',\n    'shower curtain',\n    'ski',\n    'ski mask',\n    'sleeping bag',\n    'slide rule, slipstick',\n    'sliding door',\n    'slot, one-armed bandit',\n    'snorkel',\n    'snowmobile',\n    'snowplow, snowplough',\n    'soap dispenser',\n    'soccer ball',\n    'sock',\n    'solar dish, solar collector, solar furnace',\n    'sombrero',\n    'soup bowl',\n    'space bar',\n    'space heater',\n    'space shuttle',\n    'spatula',\n    'speedboat',\n    \"spider web, spider's web\",\n    'spindle',\n    'sports car, sport car',\n    'spotlight, spot',\n    'stage',\n    'steam locomotive',\n    'steel arch bridge',\n    'steel drum',\n    'stethoscope',\n    'stole',\n    'stone wall',\n    'stopwatch, stop watch',\n    'stove',\n    'strainer',\n    'streetcar, tram, tramcar, trolley, trolley car',\n    'stretcher',\n    'studio couch, day bed',\n    'stupa, tope',\n    'submarine, pigboat, sub, U-boat',\n    'suit, suit of clothes',\n    'sundial',\n    'sunglass',\n    'sunglasses, dark glasses, shades',\n    'sunscreen, sunblock, sun blocker',\n    'suspension bridge',\n    'swab, swob, mop',\n    'sweatshirt',\n    'swimming trunks, bathing trunks',\n    'swing',\n    'switch, electric switch, electrical switch',\n    'syringe',\n    'table lamp',\n    'tank, army tank, armored combat vehicle, armoured combat vehicle',\n    'tape player',\n    'teapot',\n    'teddy, teddy bear',\n    'television, television system',\n    'tennis ball',\n    'thatch, thatched roof',\n    'theater curtain, theatre curtain',\n    'thimble',\n    'thresher, thrasher, threshing machine',\n    'throne',\n    'tile roof',\n    'toaster',\n    'tobacco shop, tobacconist shop, tobacconist',\n    'toilet seat',\n    'torch',\n    'totem pole',\n    'tow truck, tow car, wrecker',\n    'toyshop',\n    'tractor',\n    'trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi',  # noqa: E501\n    'tray',\n    'trench coat',\n    'tricycle, trike, velocipede',\n    'trimaran',\n    'tripod',\n    'triumphal arch',\n    'trolleybus, trolley coach, trackless trolley',\n    'trombone',\n    'tub, vat',\n    'turnstile',\n    'typewriter keyboard',\n    'umbrella',\n    'unicycle, monocycle',\n    'upright, upright piano',\n    'vacuum, vacuum cleaner',\n    'vase',\n    'vault',\n    'velvet',\n    'vending machine',\n    'vestment',\n    'viaduct',\n    'violin, fiddle',\n    'volleyball',\n    'waffle iron',\n    'wall clock',\n    'wallet, billfold, notecase, pocketbook',\n    'wardrobe, closet, press',\n    'warplane, military plane',\n    'washbasin, handbasin, washbowl, lavabo, wash-hand basin',\n    'washer, automatic washer, washing machine',\n    'water bottle',\n    'water jug',\n    'water tower',\n    'whiskey jug',\n    'whistle',\n    'wig',\n    'window screen',\n    'window shade',\n    'Windsor tie',\n    'wine bottle',\n    'wing',\n    'wok',\n    'wooden spoon',\n    'wool, woolen, woollen',\n    'worm fence, snake fence, snake-rail fence, Virginia fence',\n    'wreck',\n    'yawl',\n    'yurt',\n    'web site, website, internet site, site',\n    'comic book',\n    'crossword puzzle, crossword',\n    'street sign',\n    'traffic light, traffic signal, stoplight',\n    'book jacket, dust cover, dust jacket, dust wrapper',\n    'menu',\n    'plate',\n    'guacamole',\n    'consomme',\n    'hot pot, hotpot',\n    'trifle',\n    'ice cream, icecream',\n    'ice lolly, lolly, lollipop, popsicle',\n    'French loaf',\n    'bagel, beigel',\n    'pretzel',\n    'cheeseburger',\n    'hotdog, hot dog, red hot',\n    'mashed potato',\n    'head cabbage',\n    'broccoli',\n    'cauliflower',\n    'zucchini, courgette',\n    'spaghetti squash',\n    'acorn squash',\n    'butternut squash',\n    'cucumber, cuke',\n    'artichoke, globe artichoke',\n    'bell pepper',\n    'cardoon',\n    'mushroom',\n    'Granny Smith',\n    'strawberry',\n    'orange',\n    'lemon',\n    'fig',\n    'pineapple, ananas',\n    'banana',\n    'jackfruit, jak, jack',\n    'custard apple',\n    'pomegranate',\n    'hay',\n    'carbonara',\n    'chocolate sauce, chocolate syrup',\n    'dough',\n    'meat loaf, meatloaf',\n    'pizza, pizza pie',\n    'potpie',\n    'burrito',\n    'red wine',\n    'espresso',\n    'cup',\n    'eggnog',\n    'alp',\n    'bubble',\n    'cliff, drop, drop-off',\n    'coral reef',\n    'geyser',\n    'lakeside, lakeshore',\n    'promontory, headland, head, foreland',\n    'sandbar, sand bar',\n    'seashore, coast, seacoast, sea-coast',\n    'valley, vale',\n    'volcano',\n    'ballplayer, baseball player',\n    'groom, bridegroom',\n    'scuba diver',\n    'rapeseed',\n    'daisy',\n    \"yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum\",  # noqa: E501\n    'corn',\n    'acorn',\n    'hip, rose hip, rosehip',\n    'buckeye, horse chestnut, conker',\n    'coral fungus',\n    'agaric',\n    'gyromitra',\n    'stinkhorn, carrion fungus',\n    'earthstar',\n    'hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa',  # noqa: E501\n    'bolete',\n    'ear, spike, capitulum',\n    'toilet tissue, toilet paper, bathroom tissue')\n\nCIFAR10_CATEGORIES = ('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog',\n                      'frog', 'horse', 'ship', 'truck')\n"
  },
  {
    "path": "mmagic/datasets/cifar10_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pickle\nfrom typing import List, Optional\n\nimport mmengine.dist as dist\nimport numpy as np\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import DATASETS\nfrom .basic_conditional_dataset import BasicConditionalDataset\nfrom .categories import CIFAR10_CATEGORIES\nfrom .data_utils import check_md5, download_and_extract_archive\n\n\n@DATASETS.register_module()\nclass CIFAR10(BasicConditionalDataset):\n    \"\"\"`CIFAR10 <https://www.cs.toronto.edu/~kriz/cifar.html>`_ Dataset.\n\n    This implementation is modified from\n    https://github.com/pytorch/vision/blob/master/torchvision/datasets/cifar.py\n\n    Args:\n        data_prefix (str): Prefix for data.\n        test_mode (bool): ``test_mode=True`` means in test phase.\n            It determines to use the training set or test set.\n        metainfo (dict, optional): Meta information for dataset, such as\n            categories information. Defaults to None.\n        data_root (str): The root directory for ``data_prefix``.\n            Defaults to ''.\n        download (bool): Whether to download the dataset if not exists.\n            Defaults to True.\n        **kwargs: Other keyword arguments in :class:`BaseDataset`.\n    \"\"\"  # noqa: E501\n\n    base_folder = 'cifar-10-batches-py'\n    url = 'https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz'\n    filename = 'cifar-10-python.tar.gz'\n    tgz_md5 = 'c58f30108f718f92721af3b95e74349a'\n    train_list = [\n        ['data_batch_1', 'c99cafc152244af753f735de768cd75f'],\n        ['data_batch_2', 'd4bba439e000b95fd0a9bffe97cbabec'],\n        ['data_batch_3', '54ebc095f3ab1f0389bbae665268c751'],\n        ['data_batch_4', '634d18415352ddfa80567beed471001a'],\n        ['data_batch_5', '482c414d41f54cd18b22e5b47cb7c3cb'],\n    ]\n\n    test_list = [\n        ['test_batch', '40351d587109b95175f43aff81a1287e'],\n    ]\n    meta = {\n        'filename': 'batches.meta',\n        'key': 'label_names',\n        'md5': '5ff9c542aee3614f3951f8cda6e48888',\n    }\n    METAINFO = {'classes': CIFAR10_CATEGORIES}\n\n    def __init__(self,\n                 data_prefix: str,\n                 test_mode: bool,\n                 metainfo: Optional[dict] = None,\n                 data_root: str = '',\n                 download: bool = True,\n                 **kwargs):\n        self.download = download\n        super().__init__(\n            # The CIFAR dataset doesn't need specify annotation file\n            ann_file='',\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=dict(root=data_prefix),\n            test_mode=test_mode,\n            **kwargs)\n\n    def load_data_list(self):\n        \"\"\"Load images and ground truth labels.\"\"\"\n        root_prefix = self.data_prefix['root']\n        file_backend = get_file_backend(uri=root_prefix)\n\n        if dist.is_main_process() and not self._check_integrity():\n            if file_backend.name != 'LocalBackend':\n                raise RuntimeError(\n                    f'The dataset on {root_prefix} is not integrated, '\n                    f'please manually handle it.')\n\n            if self.download:\n                download_and_extract_archive(\n                    self.url,\n                    root_prefix,\n                    filename=self.filename,\n                    md5=self.tgz_md5)\n            else:\n                raise RuntimeError(\n                    f'Cannot find {self.__class__.__name__} dataset in '\n                    f\"{self.data_prefix['root']}, you can specify \"\n                    '`download=True` to download automatically.')\n\n        dist.barrier()\n        assert self._check_integrity(), \\\n            'Download failed or shared storage is unavailable. Please ' \\\n            f'download the dataset manually through {self.url}.'\n\n        if not self.test_mode:\n            downloaded_list = self.train_list\n        else:\n            downloaded_list = self.test_list\n\n        imgs = []\n        gt_labels = []\n\n        # load the picked numpy arrays\n        for file_name, _ in downloaded_list:\n            file_path = file_backend.join_path(root_prefix, self.base_folder,\n                                               file_name)\n            content = file_backend.get(file_path)\n            entry = pickle.loads(content, encoding='latin1')\n            imgs.append(entry['data'])\n            if 'labels' in entry:\n                gt_labels.extend(entry['labels'])\n            else:\n                gt_labels.extend(entry['fine_labels'])\n\n        imgs = np.vstack(imgs).reshape(-1, 3, 32, 32)\n        imgs = imgs.transpose((0, 2, 3, 1))  # convert to HWC\n\n        if self.CLASSES is None:\n            # The metainfo in the file has the lowest priority, therefore\n            # we only need to load it if classes is not specified.\n            self._load_meta()\n\n        data_list = []\n        for img, gt_label in zip(imgs, gt_labels):\n            info = {\n                'gt': img,\n                'gt_label': int(gt_label),\n                'gt_channel_order': 'RGB'\n            }\n            data_list.append(info)\n        return data_list\n\n    def _load_meta(self):\n        \"\"\"Load categories information from metafile.\"\"\"\n        root = self.data_prefix['root']\n        file_backend = get_file_backend(uri=root)\n\n        path = file_backend.join_path(root, self.base_folder,\n                                      self.meta['filename'])\n        md5 = self.meta.get('md5', None)\n        if not file_backend.exists(path) or (md5 is not None\n                                             and not check_md5(path, md5)):\n            raise RuntimeError(\n                'Dataset metadata file not found or corrupted.' +\n                ' You can use `download=True` to download it')\n        content = file_backend.get(path)\n        data = pickle.loads(content, encoding='latin1')\n        self._metainfo.setdefault('classes', data[self.meta['key']])\n\n    def _check_integrity(self):\n        \"\"\"Check the integrity of data files.\"\"\"\n        root = self.data_prefix['root']\n        file_backend = get_file_backend(uri=root)\n\n        for fentry in (self.train_list + self.test_list):\n            filename, md5 = fentry[0], fentry[1]\n            fpath = file_backend.join_path(root, self.base_folder, filename)\n            if not file_backend.exists(fpath):\n                return False\n            if md5 is not None and not check_md5(\n                    fpath, md5, file_backend=file_backend):\n                return False\n        return True\n\n    def extra_repr(self) -> List[str]:\n        \"\"\"The extra repr information of the dataset.\"\"\"\n        body = [f\"Prefix of data: \\t{self.data_prefix['root']}\"]\n        return body\n"
  },
  {
    "path": "mmagic/datasets/comp1k_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport os.path as osp\nfrom typing import List, Union\n\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import load\n\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass AdobeComp1kDataset(BaseDataset):\n    \"\"\"Adobe composition-1k dataset.\n\n    The dataset loads (alpha, fg, bg) data and apply specified transforms to\n    the data. You could specify whether composite merged image online or load\n    composited merged image in pipeline.\n\n    Example for online comp-1k dataset:\n\n    ::\n\n        [\n            {\n                \"alpha\": 'alpha/000.png',\n                \"fg\": 'fg/000.png',\n                \"bg\": 'bg/000.png'\n            },\n            {\n                \"alpha\": 'alpha/001.png',\n                \"fg\": 'fg/001.png',\n                \"bg\": 'bg/001.png'\n            },\n        ]\n\n    Example for offline comp-1k dataset:\n\n    ::\n\n        [\n            {\n                \"alpha\": 'alpha/000.png',\n                \"merged\": 'merged/000.png',\n                \"fg\": 'fg/000.png',\n                \"bg\": 'bg/000.png'\n            },\n            {\n                \"alpha\": 'alpha/001.png',\n                \"merged\": 'merged/001.png',\n                \"fg\": 'fg/001.png',\n                \"bg\": 'bg/001.png'\n            },\n        ]\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        data_root (str, optional): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to None.\n        pipeline (list, optional): Processing pipeline. Defaults to [].\n        test_mode (bool, optional): ``test_mode=True`` means in test phase.\n            Defaults to False.\n        **kwargs: Other arguments passed to\n            :class:`mmengine.dataset.BaseDataset`.\n\n    Examples:\n        See unit-tests\n        TODO: Move some codes in unittest here\n    \"\"\"\n\n    # TODO: Support parsing folder structures without annotation files.\n\n    METAINFO = dict(dataset_type='matting_dataset', task_name='matting')\n\n    def load_data_list(self) -> List[dict]:\n        \"\"\"Load annotations from an annotation file named as ``self.ann_file``\n\n        In order to be compatible to both new and old annotation format,\n        we copy implementations from mmengine and do some modifications.\n\n        Returns:\n            list[dict]: A list of annotation.\n        \"\"\"  # noqa: E501\n        # `self.ann_file` denotes the absolute annotation file path if\n        # `self.root=None` or relative path if `self.root=/path/to/data/`.\n        annotations = load(self.ann_file)\n        assert annotations, f'annotation file \"{self.ann_file}\" is empty.'\n        if isinstance(annotations, list):\n            # Old annotation format, we get data_list only\n            raw_data_list = annotations\n        elif isinstance(annotations, dict):\n            # New annotation format, follow original routine in base class\n            if 'data_list' not in annotations or 'metainfo' not in annotations:\n                raise ValueError('Annotation must have data_list and metainfo '\n                                 'keys')\n            metainfo = annotations['metainfo']\n            raw_data_list = annotations['data_list']\n\n            # Meta information load from annotation file will not influence the\n            # existed meta information load from `BaseDataset.METAINFO` and\n            # `metainfo` arguments defined in constructor.\n            for k, v in metainfo.items():\n                self._metainfo.setdefault(k, v)\n        else:\n            raise TypeError(\n                f'The annotations loaded from annotation file '\n                f'should be a list or dict, but got {type(annotations)}!')\n\n        # load and parse data_infos.\n        data_list = []\n        for raw_data_info in raw_data_list:\n            # parse raw data information to target format\n            data_info = self.parse_data_info(raw_data_info)\n            if isinstance(data_info, dict):\n                # For image tasks, `data_info` should information if single\n                # image, such as dict(img_path='xxx', width=360, ...)\n                data_list.append(data_info)\n            elif isinstance(data_info, list):\n                # For video tasks, `data_info` could contain image\n                # information of multiple frames, such as\n                # [dict(video_path='xxx', timestamps=...),\n                #  dict(video_path='xxx', timestamps=...)]\n                for item in data_info:\n                    if not isinstance(item, dict):\n                        raise TypeError('data_list must be list of dict, but '\n                                        f'got {type(item)}')\n                data_list.extend(data_info)\n            else:\n                raise TypeError('data_info should be a dict or list of dict, '\n                                f'but got {type(data_info)}')\n\n        return data_list\n\n    def parse_data_info(self, raw_data_info: dict) -> Union[dict, List[dict]]:\n        \"\"\"Join data_root to each path in data_info.\"\"\"\n\n        data_info = raw_data_info.copy()\n        for key in raw_data_info:\n            data_info[key] = osp.join(self.data_root, data_info[key])\n\n        return data_info\n"
  },
  {
    "path": "mmagic/datasets/controlnet_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport json\nimport os\nfrom typing import Callable, List, Union\n\nfrom mmengine.dataset import BaseDataset\n\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass ControlNetDataset(BaseDataset):\n    \"\"\"Demo dataset to test ControlNet. Modified from https://github.com/lllyas\n    viel/ControlNet/blob/16ea3b5379c1e78a4bc8e3fc9cae8d65c42511b1/tutorial_data\n    set.py  # noqa.\n\n    You can download the demo data from https://huggingface.co/lllyasviel/ControlNet/blob/main/training/fill50k.zip  # noqa\n    and then unzip the file to the ``data`` folder.\n\n    Args:\n        ann_file (str): Path to the annotation file. Defaults\n            to 'prompt.json' as ControlNet's default.\n        data_root (str): Path to the data root. Defaults to './data/fill50k'.\n        pipeline (list[dict | callable]): A sequence of data transforms.\n    \"\"\"\n\n    def __init__(self,\n                 ann_file: str = 'prompt.json',\n                 data_root: str = './data/fill50k',\n                 control_key='source',\n                 image_key='target',\n                 pipeline: List[Union[dict, Callable]] = []):\n        self.control_key = control_key\n        self.image_key = image_key\n        super().__init__(\n            ann_file=ann_file, data_root=data_root, pipeline=pipeline)\n\n    def load_data_list(self) -> List[dict]:\n        \"\"\"Load annotations from an annotation file named as ``self.ann_file``\n\n        Returns:\n            list[dict]: A list of annotation.\n        \"\"\"\n        data_list = []\n        with open(self.ann_file, 'rt') as file:\n            anno_list = file.readlines()\n\n        for anno in anno_list:\n            anno = json.loads(anno)\n            # source = anno['source']\n            # target = anno['target']\n            source = anno[self.control_key]\n            target = anno[self.image_key]\n            prompt = anno['prompt']\n\n            source = os.path.join(self.data_root, source)\n            target = os.path.join(self.data_root, target)\n\n            data_list.append({\n                'source_path': source,\n                'target_path': target,\n                'prompt': prompt\n            })\n\n        return data_list\n"
  },
  {
    "path": "mmagic/datasets/data_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport gzip\nimport hashlib\nimport os\nimport os.path\nimport os.path as osp\nimport shutil\nimport tarfile\nimport tempfile\nimport urllib.error\nimport urllib.request\nimport zipfile\nfrom os import PathLike\nfrom typing import Callable, Dict, List, Tuple\n\nfrom mmengine.fileio.backends import BaseStorageBackend\n\n\n# TODO: we can use FileClient.infer_client to replace this function\ndef infer_io_backend(data_root: str) -> str:\n    \"\"\"Infer the io backend from the given data_root.\n\n    Args:\n        data_root (str): The path of data root.\n\n    Returns:\n        str: The io backend.\n    \"\"\"\n    if (data_root.upper().startswith('HTTP')\n            or data_root.upper().startswith('HTTPS')):\n        backend = 'http'\n    elif data_root.upper().startswith('S3') or (\n            len(data_root.split(':')) > 2\n            and data_root.split(':')[1].upper() == 'S3'):\n        # two case:\n        # 1. s3://xxxxx (raw petrel path)\n        # 2. CONFIG:s3://xxx  (petrel path with specific config)\n        backend = 'petrel'\n    else:\n        # use default one\n        backend = 'local'\n    return backend\n\n\ndef calculate_md5(fpath: str,\n                  file_backend: BaseStorageBackend = None,\n                  chunk_size: int = 1024 * 1024) -> str:\n    \"\"\"Calculate MD5 of the file.\n\n    Args:\n        fpath (str): The path of the file.\n        file_backend (BaseStorageBackend, optional): The file backend to fetch\n            the file. Defaults to None.\n        chunk_size (int, optional): The chunk size to calculate MD5. Defaults\n            to 1024*1024.\n\n    Returns:\n        str: The string of MD5.\n    \"\"\"\n    md5 = hashlib.md5()\n    if file_backend is None or file_backend.name == 'LocalBackend':\n        with open(fpath, 'rb') as f:\n            for chunk in iter(lambda: f.read(chunk_size), b''):\n                md5.update(chunk)\n    else:\n        md5.update(file_backend.get(fpath))\n    return md5.hexdigest()\n\n\ndef check_md5(fpath, md5, **kwargs) -> bool:\n    \"\"\"Checn whether the MD5 of the file.\n\n    Args:\n        fpath (str): The path of the file.\n        md5 (str): Target MD5 value.\n\n    Returns:\n        bool: If true, the MD5 of passed file is same as target MD5.\n    \"\"\"\n    return md5 == calculate_md5(fpath, **kwargs)\n\n\ndef check_integrity(fpath, md5=None) -> bool:\n    \"\"\"Check whether the file is integrity by comparing the MD5 of the file\n    with target MD5.\n\n    Args:\n        fpath (str): The path of the file.\n        md5 (str, optional): The target MD5 value. Defaults to None.\n\n    Returns:\n        bool: If true, the passed file is integrity.\n    \"\"\"\n    if not os.path.isfile(fpath):\n        return False\n    if md5 is None:\n        return True\n    return check_md5(fpath, md5)\n\n\ndef download_url_to_file(url, dst, hash_prefix=None, progress=True):\n    \"\"\"Download object at the given URL to a local path.\n\n    Modified from\n    https://pytorch.org/docs/stable/hub.html#torch.hub.download_url_to_file\n\n    Args:\n        url (str): URL of the object to download\n        dst (str): Full path where object will be saved,\n            e.g. ``/tmp/temporary_file``\n        hash_prefix (string, optional): If not None, the SHA256 downloaded\n            file should start with ``hash_prefix``. Defaults to None.\n        progress (bool): whether or not to display a progress bar to stderr.\n            Defaults to True\n    \"\"\"\n    file_size = None\n    req = urllib.request.Request(url)\n    u = urllib.request.urlopen(req)\n    meta = u.info()\n    if hasattr(meta, 'getheaders'):\n        content_length = meta.getheaders('Content-Length')\n    else:\n        content_length = meta.get_all('Content-Length')\n    if content_length is not None and len(content_length) > 0:\n        file_size = int(content_length[0])\n\n    # We deliberately save it in a temp file and move it after download is\n    # complete. This prevents a local file being overridden by a broken\n    # download.\n    dst = os.path.expanduser(dst)\n    dst_dir = os.path.dirname(dst)\n    f = tempfile.NamedTemporaryFile(delete=False, dir=dst_dir)\n\n    import rich.progress\n    columns = [\n        rich.progress.DownloadColumn(),\n        rich.progress.BarColumn(bar_width=None),\n        rich.progress.TimeRemainingColumn(),\n    ]\n    try:\n        if hash_prefix is not None:\n            sha256 = hashlib.sha256()\n        with rich.progress.Progress(*columns) as pbar:\n            task = pbar.add_task('download', total=file_size, visible=progress)\n            while True:\n                buffer = u.read(8192)\n                if len(buffer) == 0:\n                    break\n                f.write(buffer)\n                if hash_prefix is not None:\n                    sha256.update(buffer)\n                pbar.update(task, advance=len(buffer))\n\n        f.close()\n        if hash_prefix is not None:\n            digest = sha256.hexdigest()\n            if digest[:len(hash_prefix)] != hash_prefix:\n                raise RuntimeError(\n                    'invalid hash value (expected \"{}\", got \"{}\")'.format(\n                        hash_prefix, digest))\n        shutil.move(f.name, dst)\n    finally:\n        f.close()\n        if os.path.exists(f.name):\n            os.remove(f.name)\n\n\ndef download_url(url, root, filename=None, md5=None):\n    \"\"\"Download a file from a url and place it in root.\n\n    Args:\n        url (str): URL to download file from.\n        root (str): Directory to place downloaded file in.\n        filename (str | None): Name to save the file under.\n            If filename is None, use the basename of the URL.\n        md5 (str | None): MD5 checksum of the download.\n            If md5 is None, download without md5 check.\n    \"\"\"\n    root = os.path.expanduser(root)\n    if not filename:\n        filename = os.path.basename(url)\n    fpath = os.path.join(root, filename)\n\n    os.makedirs(root, exist_ok=True)\n\n    if check_integrity(fpath, md5):\n        print(f'Using downloaded and verified file: {fpath}')\n    else:\n        try:\n            print(f'Downloading {url} to {fpath}')\n            download_url_to_file(url, fpath)\n        except (urllib.error.URLError, IOError) as e:\n            if url[:5] == 'https':\n                url = url.replace('https:', 'http:')\n                print('Failed download. Trying https -> http instead.'\n                      f' Downloading {url} to {fpath}')\n                download_url_to_file(url, fpath)\n            else:\n                raise e\n        # check integrity of downloaded file\n        if not check_integrity(fpath, md5):\n            raise RuntimeError('File not found or corrupted.')\n\n\ndef _is_tarxz(filename):\n    \"\"\"Judge whether the file is `.tar.xz`\"\"\"\n    return filename.endswith('.tar.xz')\n\n\ndef _is_tar(filename):\n    \"\"\"Judge whether the file is `.tar`\"\"\"\n    return filename.endswith('.tar')\n\n\ndef _is_targz(filename):\n    \"\"\"Judge whether the file is `.tar.gz`\"\"\"\n    return filename.endswith('.tar.gz')\n\n\ndef _is_tgz(filename):\n    \"\"\"Judge whether the file is `.tgz`\"\"\"\n    return filename.endswith('.tgz')\n\n\ndef _is_gzip(filename):\n    \"\"\"Judge whether the file is `.gzip`\"\"\"\n    return filename.endswith('.gz') and not filename.endswith('.tar.gz')\n\n\ndef _is_zip(filename):\n    \"\"\"Judge whether the file is `.zip`\"\"\"\n    return filename.endswith('.zip')\n\n\ndef extract_archive(from_path, to_path=None, remove_finished=False):\n    \"\"\"Extract the archive.\"\"\"\n    if to_path is None:\n        to_path = os.path.dirname(from_path)\n\n    if _is_tar(from_path):\n        with tarfile.open(from_path, 'r') as tar:\n            tar.extractall(path=to_path)\n    elif _is_targz(from_path) or _is_tgz(from_path):\n        with tarfile.open(from_path, 'r:gz') as tar:\n            tar.extractall(path=to_path)\n    elif _is_tarxz(from_path):\n        with tarfile.open(from_path, 'r:xz') as tar:\n            tar.extractall(path=to_path)\n    elif _is_gzip(from_path):\n        to_path = os.path.join(\n            to_path,\n            os.path.splitext(os.path.basename(from_path))[0])\n        with open(to_path, 'wb') as out_f, gzip.GzipFile(from_path) as zip_f:\n            out_f.write(zip_f.read())\n    elif _is_zip(from_path):\n        with zipfile.ZipFile(from_path, 'r') as z:\n            z.extractall(to_path)\n    else:\n        raise ValueError(f'Extraction of {from_path} not supported')\n\n    if remove_finished:\n        os.remove(from_path)\n\n\ndef download_and_extract_archive(url,\n                                 download_root,\n                                 extract_root=None,\n                                 filename=None,\n                                 md5=None,\n                                 remove_finished=False):\n    \"\"\"Download and extract the archive.\"\"\"\n    download_root = os.path.expanduser(download_root)\n    if extract_root is None:\n        extract_root = download_root\n    if not filename:\n        filename = os.path.basename(url)\n\n    download_url(url, download_root, filename, md5)\n\n    archive = os.path.join(download_root, filename)\n    print(f'Extracting {archive} to {extract_root}')\n    extract_archive(archive, extract_root, remove_finished)\n\n\ndef open_maybe_compressed_file(path: str):\n    \"\"\"Return a file object that possibly decompresses 'path' on the fly.\n\n    Decompression occurs when argument `path` is a string and ends with '.gz'\n    or '.xz'.\n    \"\"\"\n    if not isinstance(path, str):\n        return path\n    if path.endswith('.gz'):\n        import gzip\n        return gzip.open(path, 'rb')\n    if path.endswith('.xz'):\n        import lzma\n        return lzma.open(path, 'rb')\n    return open(path, 'rb')\n\n\ndef expanduser(path):\n    \"\"\"Expand ~ and ~user constructions.\n\n    If user or $HOME is unknown, do nothing.\n    \"\"\"\n    if isinstance(path, (str, PathLike)):\n        return osp.expanduser(path)\n    else:\n        return path\n\n\ndef find_folders(root: str, file_backend: BaseStorageBackend\n                 ) -> Tuple[List[str], Dict[str, int]]:\n    \"\"\"Find classes by folders under a root.\n\n    Args:\n        root (string): root directory of folders\n\n    Returns:\n        Tuple[List[str], Dict[str, int]]:\n\n        - folders: The name of sub folders under the root.\n        - folder_to_idx: The map from folder name to class idx.\n    \"\"\"\n    folders = list(\n        file_backend.list_dir_or_file(\n            root,\n            list_dir=True,\n            list_file=False,\n            recursive=False,\n        ))\n    folders.sort()\n    folder_to_idx = {folders[i]: i for i in range(len(folders))}\n    return folders, folder_to_idx\n\n\ndef get_samples(root: str, folder_to_idx: Dict[str, int],\n                is_valid_file: Callable, file_backend: BaseStorageBackend):\n    \"\"\"Make dataset by walking all images under a root.\n\n    Args:\n        root (string): root directory of folders\n        folder_to_idx (dict): the map from class name to class idx\n        is_valid_file (Callable): A function that takes path of a file\n            and check if the file is a valid sample file.\n\n    Returns:\n        Tuple[list, set]:\n\n        - samples: a list of tuple where each element is (image, class_idx)\n        - empty_folders: The folders don't have any valid files.\n    \"\"\"\n    samples = []\n    available_classes = set()\n\n    for folder_name in sorted(list(folder_to_idx.keys())):\n        _dir = file_backend.join_path(root, folder_name)\n        files = list(\n            file_backend.list_dir_or_file(\n                _dir,\n                list_dir=False,\n                list_file=True,\n                recursive=True,\n            ))\n        for file in sorted(list(files)):\n            if is_valid_file(file):\n                path = file_backend.join_path(folder_name, file)\n                item = (path, folder_to_idx[folder_name])\n                samples.append(item)\n                available_classes.add(folder_name)\n\n    empty_folders = set(folder_to_idx.keys()) - available_classes\n\n    return samples, empty_folders\n"
  },
  {
    "path": "mmagic/datasets/dreambooth_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom typing import Callable, List, Union\n\nfrom mmengine import FileClient\nfrom mmengine.dataset import BaseDataset\n\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass DreamBoothDataset(BaseDataset):\n    \"\"\"Dataset for DreamBooth.\n\n    Args:\n        data_root (str): Path to the data root.\n        concept_dir (str): Path to the concept images.\n        prompt (str): Prompt of the concept.\n        pipeline (list[dict | callable]): A sequence of data transforms.\n    \"\"\"\n\n    def __init__(self,\n                 data_root: str,\n                 concept_dir: str,\n                 prompt: str,\n                 pipeline: List[Union[dict, Callable]] = []):\n\n        data_prefix = dict(img_path=concept_dir)\n\n        self.prompt = prompt\n\n        super().__init__(\n            data_root=data_root, data_prefix=data_prefix, pipeline=pipeline)\n\n    def load_data_list(self) -> list:\n        \"\"\"Load data list from concept_dir and class_dir.\"\"\"\n        data_list = []\n\n        img_dir = self.data_prefix['img_path']\n        file_client = FileClient.infer_client(uri=img_dir)\n        img_dir = osp.abspath(img_dir)\n\n        for data_name in file_client.list_dir_or_file(img_dir, list_dir=False):\n            data_info = dict(\n                img_path=file_client.join_path(img_dir, data_name),\n                prompt=self.prompt)\n            data_list.append(data_info)\n\n        return data_list\n"
  },
  {
    "path": "mmagic/datasets/grow_scale_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Union\n\nfrom mmengine import print_log\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass GrowScaleImgDataset(BaseDataset):\n    \"\"\"Grow Scale Unconditional Image Dataset.\n\n    This dataset is similar with ``UnconditionalImageDataset``, but offer\n    more dynamic functionalities for the supporting complex algorithms, like\n    PGGAN.\n\n    Highlight functionalities:\n\n    #. Support growing scale dataset. The motivation is to decrease data\n       pre-processing load in CPU. In this dataset, you can provide\n       ``imgs_roots`` like:\n\n        .. code-block:: python\n\n            {'64': 'path_to_64x64_imgs',\n             '512': 'path_to_512x512_imgs'}\n\n       Then, in training scales lower than 64x64, this dataset will set\n       ``self.imgs_root`` as 'path_to_64x64_imgs';\n    #. Offer ``samples_per_gpu`` according to different scales. In this\n       dataset, ``self.samples_per_gpu`` will help runner to know the updated\n       batch size.\n\n    Basically, This dataset contains raw images for training unconditional\n    GANs. Given a root dir, we will recursively find all images in this root.\n    The transformation on data is defined by the pipeline.\n\n    Args:\n        imgs_root (str): Root path for unconditional images.\n        pipeline (list[dict | callable]): A sequence of data transforms.\n        len_per_stage (int, optional): The length of dataset for each scale.\n            This args change the length dataset by concatenating or extracting\n            subset. If given a value less than 0., the original length will be\n            kept. Defaults to 1e6.\n        gpu_samples_per_scale (dict | None, optional): Dict contains\n            ``samples_per_gpu`` for each scale. For example, ``{'32': 4}`` will\n            set the scale of 32 with ``samples_per_gpu=4``, despite other scale\n            with ``samples_per_gpu=self.gpu_samples_base``.\n        gpu_samples_base (int, optional): Set default ``samples_per_gpu`` for\n            each scale. Defaults to 32.\n        io_backend (str, optional): The storage backend type. Options are\n            \"disk\", \"ceph\", \"memcached\", \"lmdb\", \"http\" and \"petrel\".\n            Default: None.\n        test_mode (bool, optional): If True, the dataset will work in test\n            mode. Otherwise, in train mode. Default to False.\n    \"\"\"\n\n    _VALID_IMG_SUFFIX = ('.jpg', '.png', '.jpeg', '.JPEG')\n\n    def __init__(self,\n                 data_roots: dict,\n                 pipeline,\n                 len_per_stage=int(1e6),\n                 gpu_samples_per_scale=None,\n                 gpu_samples_base=32,\n                 io_backend: Optional[str] = None,\n                 file_lists: Optional[Union[str, dict]] = None,\n                 test_mode=False):\n\n        assert isinstance(data_roots, dict)\n        self.data_roots = data_roots\n        self._img_scales = sorted([int(x) for x in data_roots.keys()])\n        self._curr_scale = self._img_scales[0]\n        self._actual_curr_scale = self._curr_scale\n        self.data_root = self.data_roots[str(self._curr_scale)]\n\n        # len_per_stage = -1, keep the original length\n        self.len_per_stage = len_per_stage\n        self.curr_stage = 0\n        self.gpu_samples_per_scale = gpu_samples_per_scale\n        if self.gpu_samples_per_scale is not None:\n            assert isinstance(self.gpu_samples_per_scale, dict)\n        else:\n            self.gpu_samples_per_scale = dict()\n        self.gpu_samples_base = gpu_samples_base\n\n        if io_backend is None:\n            data_root_ = list(data_roots.values())[0]\n            self.file_backend = get_file_backend(uri=data_root_)\n        else:\n            self.file_backend = get_file_backend(\n                backend_args={'backend': io_backend})\n\n        # use current data root to initialize and do not support\n        # `serialize_data`\n        super().__init__(\n            data_root=self.data_root,\n            pipeline=pipeline,\n            test_mode=test_mode,\n            serialize_data=False)\n\n        # print basic dataset information to check the validity\n        print_log(repr(self), 'current')\n\n    def load_data_list(self):\n        \"\"\"Load annotations.\"\"\"\n        # recursively find all of the valid images from imgs_root\n        data_list = self.file_backend.list_dir_or_file(\n            self.data_root,\n            list_dir=False,\n            suffix=self._VALID_IMG_SUFFIX,\n            recursive=True)\n        self.data_list = [\n            self.file_backend.join_path(self.data_root, x) for x in data_list\n        ]\n\n        if self.len_per_stage > 0:\n            self.concat_imgs_list_to(self.len_per_stage)\n        self.samples_per_gpu = self.gpu_samples_per_scale.get(\n            str(self._actual_curr_scale), self.gpu_samples_base)\n        return self.data_list\n\n    def update_annotations(self, curr_scale):\n        \"\"\"Update annotations.\n\n        Args:\n            curr_scale (int): Current image scale.\n\n        Returns:\n            bool: Whether to update.\n        \"\"\"\n        if curr_scale == self._actual_curr_scale:\n            return False\n\n        for scale in self._img_scales:\n            if curr_scale <= scale:\n                self._curr_scale = scale\n                break\n            if scale == self._img_scales[-1]:\n                assert RuntimeError(\n                    f'Cannot find a suitable scale for {curr_scale}')\n        self._actual_curr_scale = curr_scale\n        self.data_root = self.data_roots[str(self._curr_scale)]\n        self.load_data_list()\n        # print basic dataset information to check the validity\n        print_log('Update Dataset: ' + repr(self), 'current')\n        return True\n\n    def concat_imgs_list_to(self, num):\n        \"\"\"Concat image list to specified length.\n\n        Args:\n            num (int): The length of the concatenated image list.\n        \"\"\"\n\n        if num <= len(self.data_list):\n            self.data_list = self.data_list[:num]\n            return\n\n        concat_factor = (num // len(self.data_list)) + 1\n        imgs = self.data_list * concat_factor\n        self.data_list = imgs[:num]\n\n    def prepare_train_data(self, idx):\n        \"\"\"Prepare training data.\n\n        Args:\n            idx (int): Index of current batch.\n\n        Returns:\n            dict: Prepared training data batch.\n        \"\"\"\n        results = dict(gt_path=self.data_list[idx])\n        return self.pipeline(results)\n\n    def prepare_test_data(self, idx):\n        \"\"\"Prepare testing data.\n\n        Args:\n            idx (int): Index of current batch.\n\n        Returns:\n            dict: Prepared training data batch.\n        \"\"\"\n        results = dict(gt_path=self.data_list[idx])\n        return self.pipeline(results)\n\n    def __getitem__(self, idx):\n        \"\"\"Get the idx-th image and data information of dataset after\n        ``self.pipeline``, and ``full_init`` will be called if the dataset has\n        not been fully initialized.\n\n        During training phase, if ``self.pipeline`` get ``None``,\n        ``self._rand_another`` will be called until a valid image is fetched or\n         the maximum limit of refetch is reached.\n\n        Args:\n            idx (int): The index of self.data_list.\n\n        Returns:\n            dict: The idx-th image and data information of dataset after\n            ``self.pipeline``.\n        \"\"\"\n        if not self.test_mode:\n            return self.prepare_train_data(idx)\n\n        return self.prepare_test_data(idx)\n\n    def __repr__(self):\n        \"\"\"Print ``self.transforms`` in sequence.\n\n        Returns:\n            str: Formatted string.\n        \"\"\"\n        dataset_name = self.__class__\n        imgs_root = self.data_root\n        num_imgs = len(self)\n        return (f'dataset_name: {dataset_name}, total {num_imgs} images in '\n                f'imgs_root: {imgs_root}')\n"
  },
  {
    "path": "mmagic/datasets/imagenet_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Union\n\nfrom mmagic.registry import DATASETS\nfrom .basic_conditional_dataset import BasicConditionalDataset\nfrom .categories import IMAGENET_CATEGORIES\n\n\n@DATASETS.register_module()\nclass ImageNet(BasicConditionalDataset):\n    \"\"\"`ImageNet <http://www.image-net.org>`_ Dataset.\n\n    The dataset supports two kinds of annotation format. More details can be\n    found in :class:`CustomDataset`.\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        metainfo (dict, optional): Meta information for dataset, such as class\n            information. Defaults to None.\n        data_root (str): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to ''.\n        data_prefix (str | dict): Prefix for training data. Defaults to ''.\n        **kwargs: Other keyword arguments in :class:`CustomDataset` and\n            :class:`BaseDataset`.\n    \"\"\"  # noqa: E501\n\n    IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif')\n    METAINFO = {'classes': IMAGENET_CATEGORIES}\n\n    def __init__(self,\n                 ann_file: str = '',\n                 metainfo: Optional[dict] = None,\n                 data_root: str = '',\n                 data_prefix: Union[str, dict] = '',\n                 **kwargs):\n        kwargs = {'extensions': self.IMG_EXTENSIONS, **kwargs}\n        super().__init__(\n            ann_file=ann_file,\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=data_prefix,\n            **kwargs)\n"
  },
  {
    "path": "mmagic/datasets/mscoco_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport random\nfrom typing import Optional, Sequence, Union\n\nimport mmengine\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import DATASETS\nfrom .basic_conditional_dataset import BasicConditionalDataset\n\n\n@DATASETS.register_module()\n@DATASETS.register_module('MSCOCO')\nclass MSCoCoDataset(BasicConditionalDataset):\n    \"\"\"MSCoCo 2014 dataset.\n\n    Args:\n        ann_file (str): Annotation file path. Defaults to ''.\n        metainfo (dict, optional): Meta information for dataset, such as class\n            information. Defaults to None.\n        data_root (str): The root directory for ``data_prefix`` and\n            ``ann_file``. Defaults to ''.\n        drop_caption_rate (float, optional): Rate of dropping caption,\n            used for training. Defaults to 0.0.\n        phase (str, optional): Subdataset used for certain phase, can be set\n            to `train`, `test` and `val`. Defaults to 'train'.\n        year (int, optional): Version of CoCo dataset, can be set to 2014\n            and 2017. Defaults to 2014.\n        data_prefix (str | dict): Prefix for the data. Defaults to ''.\n        extensions (Sequence[str]): A sequence of allowed extensions. Defaults\n            to ('.jpg', '.jpeg', '.png', '.ppm', '.bmp', '.pgm', '.tif').\n        lazy_init (bool): Whether to load annotation during instantiation.\n            In some cases, such as visualization, only the meta information of\n            the dataset is needed, which is not necessary to load annotation\n            file. ``Basedataset`` can skip load annotations to save time by set\n            ``lazy_init=False``. Defaults to False.\n        caption_style (str): If you want to add a style description for each\n            caption, you can set caption_style to your style prompt. For\n            example, 'realistic style'. Defaults to empty str.\n        **kwargs: Other keyword arguments in :class:`BaseDataset`.\n    \"\"\"\n    METAINFO = dict(dataset_type='text_image_dataset', task_name='editing')\n\n    def __init__(self,\n                 ann_file: str = '',\n                 metainfo: Optional[dict] = None,\n                 data_root: str = '',\n                 drop_caption_rate=0.0,\n                 phase='train',\n                 year=2014,\n                 data_prefix: Union[str, dict] = '',\n                 extensions: Sequence[str] = ('.jpg', '.jpeg', '.png', '.ppm',\n                                              '.bmp', '.pgm', '.tif'),\n                 lazy_init: bool = False,\n                 classes: Union[str, Sequence[str], None] = None,\n                 caption_style: str = '',\n                 **kwargs):\n        ann_file = os.path.join('annotations', 'captions_' + phase +\n                                f'{year}.json') if ann_file == '' else ann_file\n        self.year = year\n        assert self.year == 2014 or self.year == 2017, \\\n            'Caption is only supported in 2014 or 2017.'\n        self.image_prename = ''\n        if self.year == 2014:\n            self.image_prename = 'COCO_' + phase + f'{year}_'\n        self.phase = phase\n        self.drop_rate = drop_caption_rate\n        self.caption_style = caption_style\n\n        super().__init__(\n            ann_file=ann_file,\n            metainfo=metainfo,\n            data_root=data_root,\n            data_prefix=data_prefix,\n            extensions=extensions,\n            lazy_init=lazy_init,\n            classes=classes,\n            **kwargs)\n\n    def load_data_list(self):\n        \"\"\"Load image paths and gt_labels.\"\"\"\n        if self.img_prefix:\n            file_backend = get_file_backend(uri=self.img_prefix)\n        json_file = mmengine.fileio.io.load(self.ann_file)\n\n        def add_prefix(filename, prefix=''):\n            if not prefix:\n                return filename\n            else:\n                return file_backend.join_path(prefix, filename)\n\n        data_list = []\n        for item in json_file['annotations']:\n            image_name = self.image_prename + str(\n                item['image_id']).zfill(12) + '.jpg'\n            img_path = add_prefix(\n                os.path.join(self.phase + str(self.year), image_name),\n                self.img_prefix)\n            caption = item['caption'].lower()\n            if self.caption_style != '':\n                caption = caption + ' ' + self.caption_style\n            info = {\n                'img_path':\n                img_path,\n                'gt_prompt':\n                caption if (self.phase != 'train' or self.drop_rate < 1e-6\n                            or random.random() >= self.drop_rate) else ''\n            }\n            data_list.append(info)\n        return data_list\n"
  },
  {
    "path": "mmagic/datasets/paired_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom typing import Optional\n\nfrom mmengine.dataset import BaseDataset\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import DATASETS\n\nIMG_EXTENSIONS = ('.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG', '.ppm',\n                  '.PPM', '.bmp', '.BMP', '.tif', '.TIF', '.tiff', '.TIFF')\n\n\n@DATASETS.register_module()\nclass PairedImageDataset(BaseDataset):\n    \"\"\"General paired image folder dataset for image generation.\n\n    It assumes that the training directory is '/path/to/data/train'.\n    During test time, the directory is '/path/to/data/test'. '/path/to/data'\n    can be initialized by args 'dataroot'. Each sample contains a pair of\n    images concatenated in the w dimension (A|B).\n\n    Args:\n        dataroot (str | :obj:`Path`): Path to the folder root of paired images.\n        pipeline (List[dict | callable]): A sequence of data transformations.\n        test_mode (bool): Store `True` when building test dataset.\n            Default: `False`.\n        test_dir (str): Subfolder of dataroot which contain test images.\n            Default: 'test'.\n    \"\"\"\n\n    def __init__(self,\n                 data_root,\n                 pipeline,\n                 io_backend: Optional[str] = None,\n                 test_mode=False,\n                 test_dir='test'):\n        phase = test_dir if test_mode else 'train'\n        self.data_root = osp.join(str(data_root), phase)\n\n        if io_backend is None:\n            self.file_backend = get_file_backend(uri=data_root)\n        else:\n            self.file_backend = get_file_backend(\n                backend_args={'backend': io_backend})\n\n        super().__init__(\n            data_root=self.data_root, pipeline=pipeline, test_mode=test_mode)\n        # self.data_infos = self.load_annotations()\n\n    def load_data_list(self):\n        \"\"\"Load paired image paths.\n\n        Returns:\n            list[dict]: List that contains paired image paths.\n        \"\"\"\n        data_infos = []\n        pair_paths = sorted(self.scan_folder(self.data_root))\n        for pair_path in pair_paths:\n            data_infos.append(dict(pair_path=pair_path))\n\n        return data_infos\n\n    def scan_folder(self, path):\n        \"\"\"Obtain image path list (including sub-folders) from a given folder.\n\n        Args:\n            path (str | :obj:`Path`): Folder path.\n\n        Returns:\n            list[str]: Image list obtained from the given folder.\n        \"\"\"\n        imgs_list = self.file_backend.list_dir_or_file(\n            path, list_dir=False, suffix=IMG_EXTENSIONS, recursive=True)\n        images = [self.file_backend.join_path(path, img) for img in imgs_list]\n        assert images, f'{path} has no valid image file.'\n        return images\n"
  },
  {
    "path": "mmagic/datasets/singan_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport mmcv\nimport numpy as np\nfrom mmengine.dataset import BaseDataset\n\nfrom mmagic.registry import DATASETS\n\n\ndef create_real_pyramid(real, min_size, max_size, scale_factor_init):\n    \"\"\"Create image pyramid.\n\n    This function is modified from the official implementation:\n    https://github.com/tamarott/SinGAN/blob/master/SinGAN/functions.py#L221\n\n    In this implementation, we adopt the rescaling function from MMCV.\n    Args:\n        real (np.array): The real image array.\n        min_size (int): The minimum size for the image pyramid.\n        max_size (int): The maximum size for the image pyramid.\n        scale_factor_init (float): The initial scale factor.\n    \"\"\"\n\n    num_scales = int(\n        np.ceil(\n            np.log(np.power(min_size / min(real.shape[0], real.shape[1]), 1)) /\n            np.log(scale_factor_init))) + 1\n\n    scale2stop = int(\n        np.ceil(\n            np.log(\n                min([max_size, max([real.shape[0], real.shape[1]])]) /\n                max([real.shape[0], real.shape[1]])) /\n            np.log(scale_factor_init)))\n\n    stop_scale = num_scales - scale2stop\n\n    scale1 = min(max_size / max([real.shape[0], real.shape[1]]), 1)\n    real_max = mmcv.imrescale(real, scale1)\n    scale_factor = np.power(\n        min_size / (min(real_max.shape[0], real_max.shape[1])),\n        1 / (stop_scale))\n\n    scale2stop = int(\n        np.ceil(\n            np.log(\n                min([max_size, max([real.shape[0], real.shape[1]])]) /\n                max([real.shape[0], real.shape[1]])) /\n            np.log(scale_factor_init)))\n    stop_scale = num_scales - scale2stop\n\n    reals = []\n    for i in range(stop_scale + 1):\n        scale = np.power(scale_factor, stop_scale - i)\n        curr_real = mmcv.imrescale(real, scale)\n        reals.append(curr_real)\n\n    return reals, scale_factor, stop_scale\n\n\n@DATASETS.register_module()\nclass SinGANDataset(BaseDataset):\n    \"\"\"SinGAN Dataset.\n\n    In this dataset, we create an image pyramid and save it in the cache.\n\n    Args:\n        img_path (str): Path to the single image file.\n        min_size (int): Min size of the image pyramid. Here, the number will be\n            set to the ``min(H, W)``.\n        max_size (int): Max size of the image pyramid. Here, the number will be\n            set to the ``max(H, W)``.\n        scale_factor_init (float): Rescale factor. Note that the actual factor\n            we use may be a little bit different from this value.\n        num_samples (int, optional): The number of samples (length) in this\n            dataset. Defaults to -1.\n    \"\"\"\n\n    def __init__(self,\n                 data_root,\n                 min_size,\n                 max_size,\n                 scale_factor_init,\n                 pipeline,\n                 num_samples=-1):\n        self.min_size = min_size\n        self.max_size = max_size\n        self.scale_factor_init = scale_factor_init\n        self.num_samples = num_samples\n        super().__init__(data_root=data_root, pipeline=pipeline)\n\n    def full_init(self):\n        \"\"\"Skip the full init process for SinGANDataset.\"\"\"\n\n        self.load_data_list(self.min_size, self.max_size,\n                            self.scale_factor_init)\n\n    def load_data_list(self, min_size, max_size, scale_factor_init):\n        \"\"\"Load annotations for SinGAN Dataset.\n\n        Args:\n            min_size (int): The minimum size for the image pyramid.\n            max_size (int): The maximum size for the image pyramid.\n            scale_factor_init (float): The initial scale factor.\n        \"\"\"\n        real = mmcv.imread(self.data_root)\n        self.reals, self.scale_factor, self.stop_scale = create_real_pyramid(\n            real, min_size, max_size, scale_factor_init)\n\n        self.data_dict = {}\n\n        for i, real in enumerate(self.reals):\n            self.data_dict[f'real_scale{i}'] = real\n\n        self.data_dict['input_sample'] = np.zeros_like(\n            self.data_dict['real_scale0']).astype(np.float32)\n\n    def __getitem__(self, index):\n        \"\"\"Get `:attr:self.data_dict`. For SinGAN, we use single image with\n        different resolution to train the model.\n\n        Args:\n            idx (int): This will be ignored in :class:`SinGANDataset`.\n\n        Returns:\n            dict: Dict contains input image in different resolution.\n            ``self.pipeline``.\n        \"\"\"\n        return self.pipeline(deepcopy(self.data_dict))\n\n    def __len__(self):\n        \"\"\"Get the length of filtered dataset and automatically call\n        ``full_init`` if the  dataset has not been fully init.\n\n        Returns:\n            int: The length of filtered dataset.\n        \"\"\"\n        return int(1e6) if self.num_samples < 0 else self.num_samples\n"
  },
  {
    "path": "mmagic/datasets/textual_inversion_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom random import choice\nfrom typing import Callable, List, Union\n\nfrom mmengine import FileClient\nfrom mmengine.dataset import BaseDataset\n\nfrom mmagic.registry import DATASETS\n\n\n@DATASETS.register_module()\nclass TextualInversionDataset(BaseDataset):\n    \"\"\"Dataset for Textual Inversion and ViCo.\n\n    Args:\n        data_root (str): Path to the data root.\n        concept_dir (str): Path to the concept images.\n        placeholder (str): A string to denote the concept.\n        template (list[str]): A list of strings like 'A photo of {}'.\n        with_image_reference (bool): Is used for vico training.\n        pipeline (list[dict | callable]): A sequence of data transforms.\n    \"\"\"\n\n    def __init__(\n            self,\n            data_root: str,\n            concept_dir: str,\n            placeholder: str,\n            template: str,\n            # used for vico training\n            with_image_reference: bool = False,\n            pipeline: List[Union[dict, Callable]] = []):\n\n        data_prefix = dict(img_path=concept_dir)\n\n        self.placeholder = placeholder\n        if osp.exists(osp.join(data_root, concept_dir)):\n            self.num_images = len(os.listdir(osp.join(data_root, concept_dir)))\n        if osp.exists(template):\n            with open(template, 'r') as file:\n                self.template = file.readlines()\n        self.with_image_reference = with_image_reference\n\n        super().__init__(\n            data_root=data_root, data_prefix=data_prefix, pipeline=pipeline)\n\n    def load_data_list(self) -> list:\n        \"\"\"Load data list from concept_dir and class_dir.\"\"\"\n        data_list = []\n\n        img_dir = self.data_prefix['img_path']\n        file_client = FileClient.infer_client(uri=img_dir)\n        img_dir = osp.abspath(img_dir)\n\n        for data_name in file_client.list_dir_or_file(img_dir, list_dir=False):\n            data_info = dict(\n                img_path=file_client.join_path(img_dir, data_name))\n            data_list.append(data_info)\n        return data_list\n\n    def prepare_data(self, idx):\n        \"\"\"Get data processed by ``self.pipeline``.\n\n        Args:\n            idx (int): The index of ``data_info``.\n\n        Returns:\n            Any: Depends on ``self.pipeline``.\n        \"\"\"\n        data_info = self.get_data_info(idx)\n\n        if self.with_image_reference:\n            numbers = list(range(self.num_images))\n            if len(numbers) > 1:\n                numbers.remove(idx % self.num_images)\n            img_dir = self.data_prefix['img_path']\n            file_client = FileClient.infer_client(uri=img_dir)\n            img_dir = osp.abspath(img_dir)\n            data_names = list(\n                file_client.list_dir_or_file(img_dir, list_dir=False))\n            image_ref_path = file_client.join_path(img_dir,\n                                                   data_names[choice(numbers)])\n            data_info['img_ref_path'] = image_ref_path\n\n        # load random template\n        selected_template = choice(self.template)\n        prompt = selected_template.format(self.placeholder)\n        data_info['prompt'] = prompt\n        return self.pipeline(data_info)\n"
  },
  {
    "path": "mmagic/datasets/transforms/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .albu_function import AlbuCorruptFunction, PairedAlbuTransForms\nfrom .albumentations import Albumentations\nfrom .alpha import GenerateSeg, GenerateSoftSeg\nfrom .aug_frames import MirrorSequence, TemporalReverse\nfrom .aug_pixel import (BinarizeImage, Clip, ColorJitter, RandomAffine,\n                        RandomMaskDilation, UnsharpMasking)\nfrom .aug_shape import (Flip, NumpyPad, RandomRotation, RandomTransposeHW,\n                        Resize)\nfrom .crop import (CenterCropLongEdge, Crop, CropAroundCenter, CropAroundFg,\n                   CropAroundUnknown, CropLike, FixedCrop, InstanceCrop,\n                   ModCrop, PairedRandomCrop, RandomCropLongEdge,\n                   RandomResizedCrop)\nfrom .fgbg import (CompositeFg, MergeFgAndBg, PerturbBg, RandomJitter,\n                   RandomLoadResizeBg)\nfrom .formatting import PackInputs\nfrom .generate_assistant import (GenerateCoordinateAndCell,\n                                 GenerateFacialHeatmap)\nfrom .generate_frame_indices import (GenerateFrameIndices,\n                                     GenerateFrameIndiceswithPadding,\n                                     GenerateSegmentIndices)\nfrom .get_masked_image import GetMaskedImage\nfrom .loading import (GetSpatialDiscountMask, LoadImageFromFile, LoadMask,\n                      LoadPairedImageFromFile)\nfrom .matlab_like_resize import MATLABLikeResize\nfrom .normalization import Normalize, RescaleToZeroOne\nfrom .random_degradations import (DegradationsWithShuffle, RandomBlur,\n                                  RandomJPEGCompression, RandomNoise,\n                                  RandomResize, RandomVideoCompression)\nfrom .random_down_sampling import RandomDownSampling\nfrom .trimap import (FormatTrimap, GenerateTrimap,\n                     GenerateTrimapWithDistTransform, TransformTrimap)\nfrom .values import CopyValues, SetValues\n\n__all__ = [\n    'BinarizeImage', 'Clip', 'ColorJitter', 'CopyValues', 'Crop', 'CropLike',\n    'DegradationsWithShuffle', 'LoadImageFromFile', 'LoadMask', 'Flip',\n    'FixedCrop', 'GenerateCoordinateAndCell', 'GenerateFacialHeatmap',\n    'GenerateFrameIndices', 'GenerateFrameIndiceswithPadding',\n    'GenerateSegmentIndices', 'GetMaskedImage', 'GetSpatialDiscountMask',\n    'MATLABLikeResize', 'MirrorSequence', 'ModCrop', 'Normalize', 'PackInputs',\n    'PairedRandomCrop', 'RandomAffine', 'RandomBlur', 'RandomDownSampling',\n    'RandomJPEGCompression', 'RandomMaskDilation', 'RandomNoise',\n    'RandomResize', 'RandomResizedCrop', 'RandomRotation', 'RandomTransposeHW',\n    'RandomVideoCompression', 'RescaleToZeroOne', 'Resize', 'SetValues',\n    'TemporalReverse', 'ToTensor', 'UnsharpMasking', 'CropAroundCenter',\n    'CropAroundFg', 'GenerateSeg', 'CropAroundUnknown', 'GenerateSoftSeg',\n    'FormatTrimap', 'TransformTrimap', 'GenerateTrimap',\n    'GenerateTrimapWithDistTransform', 'CompositeFg', 'RandomLoadResizeBg',\n    'MergeFgAndBg', 'PerturbBg', 'RandomJitter', 'LoadPairedImageFromFile',\n    'CenterCropLongEdge', 'RandomCropLongEdge', 'NumpyPad', 'InstanceCrop',\n    'Albumentations', 'AlbuCorruptFunction', 'PairedAlbuTransForms'\n]\n"
  },
  {
    "path": "mmagic/datasets/transforms/albu_function.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List\n\nimport albumentations as albu\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass PairedAlbuTransForms(BaseTransform):\n    \"\"\"PairedAlbuTransForms augmentation.\n\n    Apply the same AlbuTransforms augmentation to paired images.\n    \"\"\"\n\n    def __init__(self,\n                 size: int,\n                 lq_key: str = 'img',\n                 gt_key: str = 'gt',\n                 scope: str = 'geometric',\n                 crop: str = 'random',\n                 p: float = 0.5):\n        self.size = size\n        self.lq_key = lq_key\n        self.gt_key = gt_key\n        self.scope = scope\n        self.crop = crop\n        self.p = p\n        augs = {\n            'weak':\n            albu.Compose([\n                albu.HorizontalFlip(),\n            ], p=self.p),\n            'geometric':\n            albu.OneOf([\n                albu.HorizontalFlip(always_apply=True),\n                albu.ShiftScaleRotate(always_apply=True),\n                albu.Transpose(always_apply=True),\n                albu.OpticalDistortion(always_apply=True),\n                albu.ElasticTransform(always_apply=True),\n            ],\n                       p=self.p)\n        }\n        aug_fn = augs[self.scope]\n        crop_fn = {\n            'random': albu.RandomCrop(self.size, self.size, always_apply=True),\n            'center': albu.CenterCrop(self.size, self.size, always_apply=True)\n        }[self.crop]\n        pad = albu.PadIfNeeded(self.size, self.size)\n\n        self.pipeline = albu.Compose([aug_fn, pad, crop_fn],\n                                     additional_targets={'target': 'image'})\n\n    def transform(self, results):\n        \"\"\"processing input results according to `self.pipeline`.\n\n        Args:\n            results (dict): contains the processed data\n            through the transform pipeline.\n\n        Returns:\n            results: the processed data.\n        \"\"\"\n        r = self.pipeline(\n            image=results[self.lq_key], target=results[self.gt_key])\n        results[self.lq_key] = r['image']\n        results[self.gt_key] = r['target']\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(size={self.size}, '\n                     f'lq_key={self.lq_key}, '\n                     f'gt_key={self.gt_key}, '\n                     f'scope={self.scope}, '\n                     f'crop={self.crop}, '\n                     f'p={self.p})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass AlbuTransForms(BaseTransform):\n    \"\"\"AlbuTransForms augmentation.\n\n    Apply the same AlbuTransForms augmentation to the input images.\n    \"\"\"\n\n    def __init__(self,\n                 size: int,\n                 keys: List,\n                 scope: str = 'geometric',\n                 crop: str = 'random',\n                 p: float = 0.5):\n        self.size = size\n        self.keys = keys\n        self.scope = scope\n        self.crop = crop\n        self.p = p\n        augs = {\n            'weak':\n            albu.Compose([\n                albu.HorizontalFlip(),\n            ]),\n            'geometric':\n            albu.OneOf([\n                albu.HorizontalFlip(always_apply=True),\n                albu.ShiftScaleRotate(always_apply=True),\n                albu.Transpose(always_apply=True),\n                albu.OpticalDistortion(always_apply=True),\n                albu.ElasticTransform(always_apply=True),\n            ],\n                       p=self.p)\n        }\n        aug_fn = augs[self.scope]\n        crop_fn = {\n            'random': albu.RandomCrop(self.size, self.size, always_apply=True),\n            'center': albu.CenterCrop(self.size, self.size, always_apply=True)\n        }[self.crop]\n        pad = albu.PadIfNeeded(self.size, self.size)\n\n        self.pipeline = albu.Compose([aug_fn, pad, crop_fn])\n\n    def transform(self, results):\n        \"\"\"processing input results according to `self.pipeline`.\n\n        Args:\n            results (dict): contains the processed data\n            through the transform pipeline.\n\n        Returns:\n            results: the processed data.\n        \"\"\"\n        for key in self.keys:\n            r = self.pipeline(image=results[key])\n            results[key] = r['image']\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(size={self.size}, '\n                     f'keys={self.keys}, '\n                     f'scope={self.scope}, '\n                     f'crop={self.crop}, '\n                     f'p={self.p})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass PairedAlbuNormalize(BaseTransform):\n    \"\"\"PairedAlbuNormalize augmentation.\n\n    Apply the same AlbuNormalize augmentation to the paired images.\n    \"\"\"\n\n    def __init__(self,\n                 lq_key: str,\n                 gt_key: str,\n                 mean=(0.5, 0.5, 0.5),\n                 std=(0.5, 0.5, 0.5),\n                 max_pixel_value: float = 255.0,\n                 always_apply: bool = False,\n                 p: float = 1.0):\n        self.lq_key = lq_key\n        self.gt_key = gt_key\n        self.mean = mean\n        self.std = std\n        self.max_pixel_value = max_pixel_value\n        self.always_apply = always_apply\n        self.p = p\n        normalize = albu.Normalize(\n            mean=self.mean,\n            std=self.std,\n            max_pixel_value=self.max_pixel_value,\n            always_apply=self.always_apply,\n            p=self.p)\n        self.normalize = albu.Compose([normalize],\n                                      additional_targets={'target': 'image'})\n\n    def transform(self, results):\n        \"\"\"processing input results according to `self.normalize`.\n\n        Args:\n            results (dict): contains the processed data\n            through the transform pipeline.\n\n        Returns:\n            results: the processed data.\n        \"\"\"\n        if self.gt_key not in results.keys():\n            r = self.normalize(image=results[self.lq_key])\n        else:\n            r = self.normalize(\n                image=results[self.lq_key], target=results[self.gt_key])\n            results[self.gt_key] = r['target']\n        results[self.lq_key] = r['image']\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(lq_key={self.lq_key}, '\n                     f'gt_key={self.gt_key}, '\n                     f'mean={self.mean}, '\n                     f'std={self.std}, '\n                     f'max_pixel_value={self.max_pixel_value}, '\n                     f'always_apply={self.always_apply}, '\n                     f'p={self.p}) ')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass AlbuNormalize(BaseTransform):\n    \"\"\"AlbuNormalize augmentation.\n\n    Apply the same AlbuNormalize augmentation to the input images.\n    \"\"\"\n\n    def __init__(self,\n                 keys: List,\n                 mean=(0.5, 0.5, 0.5),\n                 std=(0.5, 0.5, 0.5),\n                 max_pixel_value: float = 255.0,\n                 always_apply: bool = False,\n                 p: float = 1.0):\n        self.keys = keys\n        self.mean = mean\n        self.std = std\n        self.max_pixel_value = max_pixel_value\n        self.always_apply = always_apply\n        self.p = p\n        normalize = albu.Normalize(\n            mean=self.mean,\n            std=self.std,\n            max_pixel_value=self.max_pixel_value,\n            always_apply=self.always_apply,\n            p=self.p)\n        self.normalize = albu.Compose([normalize])\n\n    def transform(self, results):\n        \"\"\"processing input results according to `self.normalize`.\n\n        Args:\n            results (dict): contains the processed data\n            through the transform pipeline.\n\n        Returns:\n            results: the processed data.\n        \"\"\"\n        for key in self.keys:\n            r = self.normalize(image=results[key])\n            results[key] = r['image']\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, '\n                     f'mean={self.mean}, '\n                     f'std={self.std}, '\n                     f'max_pixel_value={self.max_pixel_value}, '\n                     f'always_apply={self.always_apply}, '\n                     f'p={self.p}) ')\n\n        return repr_str\n\n\ndef _resolve_aug_fn(name):\n    d = {\n        'cutout': albu.Cutout,\n        'rgb_shift': albu.RGBShift,\n        'hsv_shift': albu.HueSaturationValue,\n        'motion_blur': albu.MotionBlur,\n        'median_blur': albu.MedianBlur,\n        'snow': albu.RandomSnow,\n        'shadow': albu.RandomShadow,\n        'fog': albu.RandomFog,\n        'brightness_contrast': albu.RandomBrightnessContrast,\n        'gamma': albu.RandomGamma,\n        'sun_flare': albu.RandomSunFlare,\n        'sharpen': albu.Sharpen,\n        'jpeg': albu.ImageCompression,\n        'gray': albu.ToGray,\n        'pixelize': albu.Downscale,\n        # ToDo: partial gray\n    }\n    return d[name]\n\n\n@TRANSFORMS.register_module()\nclass AlbuCorruptFunction(BaseTransform):\n    \"\"\"AlbuCorruptFunction augmentation.\n\n    Apply the same AlbuCorruptFunction augmentation to the input images.\n    \"\"\"\n\n    def __init__(self, keys: List[str], config: List[dict], p: float = 1.0):\n        self.keys = keys\n        self.config = config\n        self.p = p\n        augs = []\n        for aug_params in self.config:\n            name = aug_params.pop('name')\n            cls = _resolve_aug_fn(name)\n            prob = aug_params.pop('prob') if 'prob' in aug_params else .5\n            augs.append(cls(p=prob, **aug_params))\n\n        self.augs = albu.OneOf(augs, p=self.p)\n\n    def transform(self, results):\n        \"\"\"processing input results according to `self.augs`.\n\n        Args:\n            results (dict): contains the processed data\n            through the transform pipeline.\n\n        Returns:\n            results: the processed data.\n        \"\"\"\n        for key in self.keys:\n            results[key] = self.augs(image=results[key])['image']\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, '\n                     f'config={self.config}, '\n                     f'p={self.p}) ')\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/albumentations.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport inspect\nfrom typing import List\n\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\ntry:\n    import albumentations\n    from albumentations import Compose\nexcept ImportError:\n    albumentations = None\n    Compose = None\n\n\n@TRANSFORMS.register_module()\nclass Albumentations(BaseTransform):\n    \"\"\"Albumentation augmentation.\n\n    Adds custom transformations from Albumentations library.\n    Please, visit `https://github.com/albumentations-team/albumentations`\n    and `https://albumentations.ai/docs/getting_started/transforms_and_targets`\n    to get more information.\n\n    An example of ``transforms`` is as followed:\n\n    .. code-block::\n\n        albu_transforms = [\n            dict(\n                type='Resize',\n                height=100,\n                width=100,\n            ),\n            dict(\n                type='RandomFog',\n                p=0.5,\n            ),\n            dict(\n                type='RandomRain',\n                p=0.5\n            ),\n            dict(\n                type='RandomSnow',\n                p=0.5,\n            ),\n        ]\n        pipeline = [\n            dict(\n                type='LoadImageFromFile',\n                key='img',\n                color_type='color',\n                channel_order='rgb',\n                imdecode_backend='cv2'),\n            dict(\n                type='Albumentations',\n                keys=['img'],\n                transforms=albu_transforms),\n            dict(type='PackInputs')\n        ]\n\n    Args:\n        keys (list[str]): A list specifying the keys whose values are modified.\n        transforms (list[dict]): A list of albu transformations.\n    \"\"\"\n\n    def __init__(self, keys: List[str], transforms: List[dict]) -> None:\n\n        if Compose is None:\n            raise RuntimeError('Please install albumentations')\n\n        self.keys = keys\n\n        # Args will be modified later, copying it will be safer\n        transforms = copy.deepcopy(transforms)\n        self.transforms = transforms\n        self.aug = Compose([self.albu_builder(t) for t in self.transforms])\n\n    def albu_builder(self, cfg: dict) -> albumentations:\n        \"\"\"Import a module from albumentations.\n\n        It inherits some of :func:`build_from_cfg` logic.\n\n        Args:\n            cfg (dict): Config dict. It should at least contain the key \"type\".\n\n        Returns:\n            obj: The constructed object.\n        \"\"\"\n\n        assert isinstance(cfg, dict) and 'type' in cfg\n        args = cfg.copy()\n        obj_type = args.pop('type')\n        if isinstance(obj_type, str):\n            if albumentations is None:\n                raise RuntimeError('Please install albumentations')\n            obj_cls = getattr(albumentations, obj_type)\n        elif inspect.isclass(obj_type):\n            obj_cls = obj_type\n        else:\n            raise TypeError(\n                f'type must be a str or valid type, but got {type(obj_type)}')\n\n        if 'transforms' in args:\n            args['transforms'] = [\n                self.albu_builder(transform)\n                for transform in args['transforms']\n            ]\n\n        return obj_cls(**args)\n\n    def _apply_albu(self, imgs):\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        outputs = []\n        for img in imgs:\n            outputs.append(self.aug(image=img)['image'])\n\n        if is_single_image:\n            outputs = outputs[0]\n\n        return outputs\n\n    def transform(self, results):\n        \"\"\"Transform function of Albumentations.\"\"\"\n\n        for k in self.keys:\n            results[k] = self._apply_albu(results[k])\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += f'(keys={self.keys}, transforms={self.transforms})'\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/alpha.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Augmentation on alpha matte.\"\"\"\n# Not used in current algorithms\n\nimport random\n\nimport cv2\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.utils import is_list_of, is_tuple_of\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.utils import random_choose_unknown\n\n\n@TRANSFORMS.register_module()\nclass GenerateSeg(BaseTransform):\n    \"\"\"Generate segmentation mask from alpha matte.\n\n    Args:\n        kernel_size (int, optional): Kernel size for both erosion and\n            dilation. The kernel will have the same height and width.\n            Defaults to 5.\n        erode_iter_range (tuple, optional): Iteration of erosion.\n            Defaults to (10, 20).\n        dilate_iter_range (tuple, optional): Iteration of dilation.\n            Defaults to (15, 30).\n        num_holes_range (tuple, optional): Range of number of holes to\n            randomly select from. Defaults to (0, 3).\n        hole_sizes (list, optional): List of (h, w) to be selected as the\n            size of the rectangle hole.\n            Defaults to [(15, 15), (25, 25), (35, 35), (45, 45)].\n        blur_ksizes (list, optional): List of (h, w) to be selected as the\n            kernel_size of the gaussian blur.\n            Defaults to [(21, 21), (31, 31), (41, 41)].\n    \"\"\"\n\n    def __init__(self,\n                 kernel_size=5,\n                 erode_iter_range=(10, 20),\n                 dilate_iter_range=(15, 30),\n                 num_holes_range=(0, 3),\n                 hole_sizes=[(15, 15), (25, 25), (35, 35), (45, 45)],\n                 blur_ksizes=[(21, 21), (31, 31), (41, 41)]):\n        self.kernel_size = kernel_size\n        self.erode_iter_range = erode_iter_range\n        self.dilate_iter_range = dilate_iter_range\n        self.num_holes_range = num_holes_range\n        self.hole_sizes = hole_sizes\n        self.blur_ksizes = blur_ksizes\n\n    @staticmethod\n    def _crop_hole(img, start_point, hole_size):\n        \"\"\"Create a all-zero rectangle hole in the image.\n\n        Args:\n            img (np.ndarray): Source image.\n            start_point (tuple[int]): The top-left point of the rectangle.\n            hole_size (tuple[int]): The height and width of the rectangle hole.\n\n        Return:\n            np.ndarray: The cropped image.\n        \"\"\"\n        top, left = start_point\n        bottom = top + hole_size[0]\n        right = left + hole_size[1]\n        height, weight = img.shape[:2]\n        if top < 0 or bottom > height or left < 0 or right > weight:\n            raise ValueError(f'crop area {(left, top, right, bottom)} exceeds '\n                             f'image size {(height, weight)}')\n        img[top:bottom, left:right] = 0\n        return img\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        alpha = results['alpha']\n        trimap = results['trimap']\n\n        # generate segmentation mask\n        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                           (self.kernel_size,\n                                            self.kernel_size))\n        seg = (alpha > 0.5).astype(np.float32)\n        seg = cv2.erode(\n            seg, kernel, iterations=np.random.randint(*self.erode_iter_range))\n        seg = cv2.dilate(\n            seg, kernel, iterations=np.random.randint(*self.dilate_iter_range))\n\n        # generate some holes in segmentation mask\n        num_holes = np.random.randint(*self.num_holes_range)\n        for _ in range(num_holes):\n            hole_size = random.choice(self.hole_sizes)\n            unknown = trimap == 128\n            start_point = random_choose_unknown(unknown, hole_size)\n            seg = self._crop_hole(seg, start_point, hole_size)\n            trimap = self._crop_hole(trimap, start_point, hole_size)\n\n        # perform gaussian blur to segmentation mask\n        seg = cv2.GaussianBlur(seg, random.choice(self.blur_ksizes), 0)\n\n        results['seg'] = seg.astype(np.uint8)\n        results['num_holes'] = num_holes\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(kernel_size={self.kernel_size}, '\n            f'erode_iter_range={self.erode_iter_range}, '\n            f'dilate_iter_range={self.dilate_iter_range}, '\n            f'num_holes_range={self.num_holes_range}, '\n            f'hole_sizes={self.hole_sizes}, blur_ksizes={self.blur_ksizes}')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass GenerateSoftSeg(BaseTransform):\n    \"\"\"Generate soft segmentation mask from input segmentation mask.\n\n    Required key is \"seg\", added key is \"soft_seg\".\n\n    Args:\n        fg_thr (float, optional): Threshold of the foreground in the normalized\n            input segmentation mask. Defaults to 0.2.\n        border_width (int, optional): Width of border to be padded to the\n            bottom of the mask. Defaults to 25.\n        erode_ksize (int, optional): Fixed kernel size of the erosion.\n            Defaults to 5.\n        dilate_ksize (int, optional): Fixed kernel size of the dilation.\n            Defaults to 5.\n        erode_iter_range (tuple, optional): Iteration of erosion.\n            Defaults to (10, 20).\n        dilate_iter_range (tuple, optional): Iteration of dilation.\n            Defaults to (3, 7).\n        blur_ksizes (list, optional): List of (h, w) to be selected as the\n            kernel_size of the gaussian blur.\n            Defaults to [(21, 21), (31, 31), (41, 41)].\n    \"\"\"\n\n    def __init__(self,\n                 fg_thr=0.2,\n                 border_width=25,\n                 erode_ksize=3,\n                 dilate_ksize=5,\n                 erode_iter_range=(10, 20),\n                 dilate_iter_range=(3, 7),\n                 blur_ksizes=[(21, 21), (31, 31), (41, 41)]):\n        if not isinstance(fg_thr, float):\n            raise TypeError(f'fg_thr must be a float, but got {type(fg_thr)}')\n        if not isinstance(border_width, int):\n            raise TypeError(\n                f'border_width must be an int, but got {type(border_width)}')\n        if not isinstance(erode_ksize, int):\n            raise TypeError(\n                f'erode_ksize must be an int, but got {type(erode_ksize)}')\n        if not isinstance(dilate_ksize, int):\n            raise TypeError(\n                f'dilate_ksize must be an int, but got {type(dilate_ksize)}')\n        if (not is_tuple_of(erode_iter_range, int)\n                or len(erode_iter_range) != 2):\n            raise TypeError('erode_iter_range must be a tuple of 2 int, '\n                            f'but got {erode_iter_range}')\n        if (not is_tuple_of(dilate_iter_range, int)\n                or len(dilate_iter_range) != 2):\n            raise TypeError('dilate_iter_range must be a tuple of 2 int, '\n                            f'but got {dilate_iter_range}')\n        if not is_list_of(blur_ksizes, tuple):\n            raise TypeError(\n                f'blur_ksizes must be a list of tuple, but got {blur_ksizes}')\n\n        self.fg_thr = fg_thr\n        self.border_width = border_width\n        self.erode_ksize = erode_ksize\n        self.dilate_ksize = dilate_ksize\n        self.erode_iter_range = erode_iter_range\n        self.dilate_iter_range = dilate_iter_range\n        self.blur_ksizes = blur_ksizes\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        seg = results['seg'].astype(np.float32) / 255\n        height, _ = seg.shape[:2]\n        seg[seg > self.fg_thr] = 1\n\n        # to align with the original repo, pad the bottom of the mask\n        seg = cv2.copyMakeBorder(seg, 0, self.border_width, 0, 0,\n                                 cv2.BORDER_REPLICATE)\n\n        # erode/dilate segmentation mask\n        erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                 (self.erode_ksize,\n                                                  self.erode_ksize))\n        dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                  (self.dilate_ksize,\n                                                   self.dilate_ksize))\n        seg = cv2.erode(\n            seg,\n            erode_kernel,\n            iterations=np.random.randint(*self.erode_iter_range))\n        seg = cv2.dilate(\n            seg,\n            dilate_kernel,\n            iterations=np.random.randint(*self.dilate_iter_range))\n\n        # perform gaussian blur to segmentation mask\n        seg = cv2.GaussianBlur(seg, random.choice(self.blur_ksizes), 0)\n\n        # remove the padded rows\n        seg = (seg * 255).astype(np.uint8)\n        seg = np.delete(seg, range(height, height + self.border_width), 0)\n\n        results['soft_seg'] = seg\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(fg_thr={self.fg_thr}, '\n                     f'border_width={self.border_width}, '\n                     f'erode_ksize={self.erode_ksize}, '\n                     f'dilate_ksize={self.dilate_ksize}, '\n                     f'erode_iter_range={self.erode_iter_range}, '\n                     f'dilate_iter_range={self.dilate_iter_range}, '\n                     f'blur_ksizes={self.blur_ksizes})')\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/aug_frames.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass MirrorSequence(BaseTransform):\n    \"\"\"Extend short sequences (e.g. Vimeo-90K) by mirroring the sequences.\n\n    Given a sequence with N frames (x1, ..., xN), extend the sequence to\n    (x1, ..., xN, xN, ..., x1).\n\n    Required Keys:\n\n    - [KEYS]\n\n    Modified Keys:\n\n    - [KEYS]\n\n    Args:\n        keys (list[str]): The frame lists to be extended.\n    \"\"\"\n\n    def __init__(self, keys):\n\n        self.keys = keys\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for key in self.keys:\n            if isinstance(results[key], list):\n                results[key] = results[key] + results[key][::-1]\n            else:\n                raise TypeError('The input must be of class list[nparray]. '\n                                f'Got {type(results[key])}.')\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass TemporalReverse(BaseTransform):\n    \"\"\"Reverse frame lists for temporal augmentation.\n\n    Required keys are the keys in attributes \"lq\" and \"gt\",\n    added or modified keys are \"lq\", \"gt\" and \"reverse\".\n\n    Args:\n        keys (list[str]): The frame lists to be reversed.\n        reverse_ratio (float): The probability to reverse the frame lists.\n            Default: 0.5.\n    \"\"\"\n\n    def __init__(self, keys, reverse_ratio=0.5):\n\n        self.keys = keys\n        self.reverse_ratio = reverse_ratio\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        reverse = np.random.random() < self.reverse_ratio\n\n        if reverse:\n            for key in self.keys:\n                results[key].reverse()\n\n        results['reverse'] = reverse\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += f'(keys={self.keys}, reverse_ratio={self.reverse_ratio})'\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/aug_pixel.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport numbers\nimport random\nfrom typing import Dict\n\nimport cv2\nimport numpy as np\nimport torch\nimport torchvision.transforms as transforms\nfrom mmcv.transforms import BaseTransform\nfrom PIL import Image\n\nfrom mmagic.registry import TRANSFORMS\n\n\nclass BinarizeImage(BaseTransform):\n    \"\"\"Binarize image.\n\n    Args:\n        keys (Sequence[str]): The images to be binarized.\n        binary_thr (float): Threshold for binarization.\n        a_min (int): Lower limits of pixel value.\n        a_max (int): Upper limits of pixel value.\n        dtype (np.dtype): Set the data type of the output. Default: np.uint8\n    \"\"\"\n\n    def __init__(self, keys, binary_thr, a_min=0, a_max=1, dtype=np.uint8):\n\n        self.keys = keys\n        self.binary_thr = binary_thr\n        self.a_min = a_min\n        self.a_max = a_max\n        self.dtype = dtype\n\n    def _binarize(self, img):\n        \"\"\"Binarize image.\n\n        Args:\n            img (np.ndarray): Input image.\n\n        Returns:\n            img (np.ndarray): Output image.\n        \"\"\"\n\n        # Binarize to 0/1\n        img = (img[..., :] > self.binary_thr).astype(np.uint8)\n\n        if self.a_min != 0 or self.a_max != 1 or self.dtype != np.uint8:\n            img = img * (self.a_max - self.a_min) + self.a_min\n            img = img.astype(self.dtype)\n\n        return img\n\n    def transform(self, results):\n        \"\"\"The transform function of BinarizeImage.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for k in self.keys:\n            results[k] = self._binarize(results[k])\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(keys={self.keys}, binary_thr={self.binary_thr}, '\n            f'a_min={self.a_min}, a_max={self.a_max}, dtype={self.dtype})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass Clip(BaseTransform):\n    \"\"\"Clip the pixels.\n\n    Modified keys are the attributes specified in \"keys\".\n\n    Args:\n        keys (list[str]): The keys whose values are clipped.\n        a_min (int): Lower limits of pixel value.\n        a_max (int): Upper limits of pixel value.\n    \"\"\"\n\n    def __init__(self, keys, a_min=0, a_max=255):\n\n        self.keys = keys\n        self.a_min = a_min\n        self.a_max = a_max\n\n    def _clip(self, input_):\n        \"\"\"Clip the pixels.\n\n        Args:\n            input_ (Union[List, np.ndarray]): Pixels to clip.\n\n        Returns:\n            Union[List, np.ndarray]: Clipped pixels.\n        \"\"\"\n        is_single_image = False\n        if isinstance(input_, np.ndarray):\n            is_single_image = True\n            input_ = [input_]\n\n        # clip\n        input_ = [np.clip(v, self.a_min, self.a_max) for v in input_]\n\n        if is_single_image:\n            input_ = input_[0]\n\n        return input_\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict with the values of the specified keys are rounded\n                and clipped.\n        \"\"\"\n\n        for key in self.keys:\n            results[key] = self._clip(results[key])\n\n        return results\n\n    def __repr__(self):\n\n        result = self.__class__.__name__\n        result += f'(a_min={self.a_min}, a_max={self.a_max})'\n\n        return result\n\n\n@TRANSFORMS.register_module()\nclass ColorJitter(BaseTransform):\n    \"\"\"An interface for torch color jitter so that it can be invoked in mmagic\n    pipeline.\n\n    Randomly change the brightness, contrast and saturation of an image.\n    Modified keys are the attributes specified in \"keys\".\n\n    Required Keys:\n\n    - [KEYS]\n\n    Modified Keys:\n\n    - [KEYS]\n\n    Args:\n        keys (list[str]): The images to be resized.\n        channel_order (str): Order of channel, candidates are 'bgr' and 'rgb'.\n            Default: 'rgb'.\n\n    Notes:\n\n        ``**kwards`` follows the args list of\n        ``torchvision.transforms.ColorJitter``.\n\n        brightness (float or tuple of float (min, max)): How much to jitter\n            brightness. brightness_factor is chosen uniformly from\n            [max(0, 1 - brightness), 1 + brightness] or the given [min, max].\n            Should be non negative numbers.\n        contrast (float or tuple of float (min, max)): How much to jitter\n            contrast. contrast_factor is chosen uniformly from\n            [max(0, 1 - contrast), 1 + contrast] or the given [min, max].\n            Should be non negative numbers.\n        saturation (float or tuple of float (min, max)): How much to jitter\n            saturation. saturation_factor is chosen uniformly from\n            [max(0, 1 - saturation), 1 + saturation] or the given [min, max].\n            Should be non negative numbers.\n        hue (float or tuple of float (min, max)): How much to jitter hue.\n            hue_factor is chosen uniformly from [-hue, hue] or the given\n            [min, max].\n            Should have 0<= hue <= 0.5 or -0.5 <= min <= max <= 0.5.\n    \"\"\"\n\n    def __init__(self, keys, channel_order='rgb', **kwargs):\n\n        assert keys, 'Keys should not be empty.'\n        assert 'to_rgb' not in kwargs, (\n            '`to_rgb` is not support in ColorJitter, '\n            \"which is replaced by `channel_order` ('rgb' or 'bgr')\")\n\n        self.keys = keys\n        self.channel_order = channel_order\n        self._transform = transforms.ColorJitter(**kwargs)\n\n    def _color_jitter(self, image, this_seed):\n        \"\"\"Color Jitter Function.\n\n        Args:\n            image (np.ndarray): Image.\n            this_seed (int): Seed of torch.\n\n        Returns:\n            image (np.ndarray): The output image.\n        \"\"\"\n\n        if self.channel_order.lower() == 'bgr':\n            image = image[..., ::-1]\n\n        image = Image.fromarray(image)\n        torch.manual_seed(this_seed)\n        image = self._transform(image)\n        image = np.asarray(image)\n\n        if self.channel_order.lower() == 'bgr':\n            image = image[..., ::-1]\n\n        return image\n\n    def transform(self, results: Dict) -> Dict:\n        \"\"\"The transform function of ColorJitter.\n\n        Args:\n            results (dict): The result dict.\n\n        Returns:\n            dict: The result dict.\n        \"\"\"\n\n        this_seed = random.randint(0, 2**32)\n\n        for k in self.keys:\n            if isinstance(results[k], list):\n                results[k] = [\n                    self._color_jitter(v, this_seed) for v in results[k]\n                ]\n            else:\n                results[k] = self._color_jitter(results[k], this_seed)\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, channel_order={self.channel_order}, '\n                     f'brightness={self._transform.brightness}, '\n                     f'contrast={self._transform.contrast}, '\n                     f'saturation={self._transform.saturation}, '\n                     f'hue={self._transform.hue})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomAffine(BaseTransform):\n    \"\"\"Apply random affine to input images.\n\n    This class is adopted from\n    https://github.com/pytorch/vision/blob/v0.5.0/torchvision/transforms/\n    transforms.py#L1015\n    It should be noted that in\n    https://github.com/Yaoyi-Li/GCA-Matting/blob/master/dataloader/\n    data_generator.py#L70\n    random flip is added. See explanation of `flip_ratio` below.\n    Required keys are the keys in attribute \"keys\", modified keys\n    are keys in attribute \"keys\".\n\n    Args:\n        keys (Sequence[str]): The images to be affined.\n        degrees (float | tuple[float]): Range of degrees to select from. If it\n            is a float instead of a tuple like (min, max), the range of degrees\n            will be (-degrees, +degrees). Set to 0 to deactivate rotations.\n        translate (tuple, optional): Tuple of maximum absolute fraction for\n            horizontal and vertical translations. For example translate=(a, b),\n            then horizontal shift is randomly sampled in the range\n            -img_width * a < dx < img_width * a and vertical shift is randomly\n            sampled in the range -img_height * b < dy < img_height * b.\n            Default: None.\n        scale (tuple, optional): Scaling factor interval, e.g (a, b), then\n            scale is randomly sampled from the range a <= scale <= b.\n            Default: None.\n        shear (float | tuple[float], optional): Range of shear degrees to\n            select from. If shear is a float, a shear parallel to the x axis\n            and a shear parallel to the y axis in the range (-shear, +shear)\n            will be applied. Else if shear is a tuple of 2 values, a x-axis\n            shear and a y-axis shear in (shear[0], shear[1]) will be applied.\n            Default: None.\n        flip_ratio (float, optional): Probability of the image being flipped.\n            The flips in horizontal direction and vertical direction are\n            independent. The image may be flipped in both directions.\n            Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 keys,\n                 degrees,\n                 translate=None,\n                 scale=None,\n                 shear=None,\n                 flip_ratio=None):\n\n        self.keys = keys\n        if isinstance(degrees, numbers.Number):\n            assert degrees >= 0, ('If degrees is a single number, '\n                                  'it must be positive.')\n            self.degrees = (-degrees, degrees)\n        else:\n            assert isinstance(degrees, tuple) and len(degrees) == 2, \\\n                'degrees should be a tuple and it must be of length 2.'\n            self.degrees = degrees\n\n        if translate is not None:\n            assert isinstance(translate, tuple) and len(translate) == 2, \\\n                'translate should be a tuple and it must be of length 2.'\n            for t in translate:\n                assert 0.0 <= t <= 1.0, ('translation values should be '\n                                         'between 0 and 1.')\n        self.translate = translate\n\n        if scale is not None:\n            assert isinstance(scale, tuple) and len(scale) == 2, \\\n                'scale should be a tuple and it must be of length 2.'\n            for s in scale:\n                assert s > 0, 'scale values should be positive.'\n        self.scale = scale\n\n        if shear is not None:\n            if isinstance(shear, numbers.Number):\n                assert shear >= 0, ('If shear is a single number, '\n                                    'it must be positive.')\n                self.shear = (-shear, shear)\n            else:\n                assert isinstance(shear, tuple) and len(shear) == 2, \\\n                    'shear should be a tuple and it must be of length 2.'\n                # X-Axis and Y-Axis shear with (min, max)\n                self.shear = shear\n        else:\n            self.shear = shear\n\n        if flip_ratio is not None:\n            assert isinstance(flip_ratio,\n                              float), 'flip_ratio should be a float.'\n            self.flip_ratio = flip_ratio\n        else:\n            self.flip_ratio = 0\n\n    @staticmethod\n    def _get_params(degrees, translate, scale_ranges, shears, flip_ratio,\n                    img_size):\n        \"\"\"Get parameters for affine transformation.\n\n        Returns:\n            paras (tuple): Params to be passed to the affine transformation.\n        \"\"\"\n\n        angle = np.random.uniform(degrees[0], degrees[1])\n        if translate is not None:\n            max_dx = translate[0] * img_size[0]\n            max_dy = translate[1] * img_size[1]\n            translations = (np.round(np.random.uniform(-max_dx, max_dx)),\n                            np.round(np.random.uniform(-max_dy, max_dy)))\n        else:\n            translations = (0, 0)\n\n        if scale_ranges is not None:\n            scale = (np.random.uniform(scale_ranges[0], scale_ranges[1]),\n                     np.random.uniform(scale_ranges[0], scale_ranges[1]))\n        else:\n            scale = (1.0, 1.0)\n\n        if shears is not None:\n            shear = np.random.uniform(shears[0], shears[1])\n        else:\n            shear = 0.0\n\n        # Because `flip` is used as a multiplier in line 479 and 480,\n        # so -1 stands for flip and 1 stands for no flip. Thus `flip`\n        # should be an 'inverse' flag as the result of the comparison.\n        # See https://github.com/open-mmlab/mmagic/pull/799 for more detail\n        flip = (np.random.rand(2) > flip_ratio).astype(np.int32) * 2 - 1\n\n        return angle, translations, scale, shear, flip\n\n    @staticmethod\n    def _get_inverse_affine_matrix(center, angle, translate, scale, shear,\n                                   flip):\n        \"\"\"Helper method to compute inverse matrix for affine transformation.\n\n        As it is explained in PIL.Image.rotate, we need compute INVERSE of\n        affine transformation matrix: M = T * C * RSS * C^-1 where\n        T is translation matrix:\n            [1, 0, tx | 0, 1, ty | 0, 0, 1];\n        C is translation matrix to keep center:\n            [1, 0, cx | 0, 1, cy | 0, 0, 1];\n        RSS is rotation with scale and shear matrix.\n\n        It is different from the original function in torchvision.\n        1. The order are changed to flip -> scale -> rotation -> shear.\n        2. x and y have different scale factors.\n        RSS(shear, a, scale, f) =\n            [ cos(a + shear)*scale_x*f -sin(a + shear)*scale_y     0]\n            [ sin(a)*scale_x*f          cos(a)*scale_y             0]\n            [     0                       0                        1]\n        Thus, the inverse is M^-1 = C * RSS^-1 * C^-1 * T^-1.\n        \"\"\"\n\n        angle = math.radians(angle)\n        shear = math.radians(shear)\n        scale_x = 1.0 / scale[0] * flip[0]\n        scale_y = 1.0 / scale[1] * flip[1]\n\n        # Inverted rotation matrix with scale and shear\n        d = math.cos(angle + shear) * math.cos(angle) + math.sin(\n            angle + shear) * math.sin(angle)\n        matrix = [\n            math.cos(angle) * scale_x,\n            math.sin(angle + shear) * scale_x, 0, -math.sin(angle) * scale_y,\n            math.cos(angle + shear) * scale_y, 0\n        ]\n        matrix = [m / d for m in matrix]\n\n        # Apply inverse of translation and of center translation:\n        # RSS^-1 * C^-1 * T^-1\n        matrix[2] += matrix[0] * (-center[0] - translate[0]) + matrix[1] * (\n            -center[1] - translate[1])\n        matrix[5] += matrix[3] * (-center[0] - translate[0]) + matrix[4] * (\n            -center[1] - translate[1])\n\n        # Apply center translation: C * RSS^-1 * C^-1 * T^-1\n        matrix[2] += center[0]\n        matrix[5] += center[1]\n\n        return matrix\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        h, w = results[self.keys[0]].shape[:2]\n        # if image is too small, set degree to 0 to reduce introduced dark area\n        if np.maximum(h, w) < 1024:\n            params = self._get_params((0, 0), self.translate, self.scale,\n                                      self.shear, self.flip_ratio, (h, w))\n        else:\n            params = self._get_params(self.degrees, self.translate, self.scale,\n                                      self.shear, self.flip_ratio, (h, w))\n\n        center = (w * 0.5 - 0.5, h * 0.5 - 0.5)\n        M = self._get_inverse_affine_matrix(center, *params)\n        M = np.array(M).reshape((2, 3))\n\n        for key in self.keys:\n            ori_ndim = results[key].ndim\n            results[key] = cv2.warpAffine(\n                results[key],\n                M, (w, h),\n                flags=cv2.INTER_NEAREST + cv2.WARP_INVERSE_MAP)\n\n            if ori_ndim == 3 and results[key].ndim == 2:\n                results[key] = results[key][..., None]\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, degrees={self.degrees}, '\n                     f'translate={self.translate}, scale={self.scale}, '\n                     f'shear={self.shear}, flip_ratio={self.flip_ratio})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomMaskDilation(BaseTransform):\n    \"\"\"Randomly dilate binary masks.\n\n    Args:\n        keys (Sequence[str]): The images to be resized.\n        binary_thr (float): Threshold for obtaining binary mask. Default: 0.\n        kernel_min (int): Min size of dilation kernel. Default: 9.\n        kernel_max (int): Max size of dilation kernel. Default: 49.\n    \"\"\"\n\n    def __init__(self, keys, binary_thr=0., kernel_min=9, kernel_max=49):\n\n        self.keys = keys\n        self.kernel_min = kernel_min\n        self.kernel_max = kernel_max\n        self.binary_thr = binary_thr\n\n    def _random_dilate(self, img):\n\n        kernel_size = np.random.randint(self.kernel_min, self.kernel_max + 1)\n        kernel = np.ones((kernel_size, kernel_size), dtype=np.uint8)\n        dilate_kernel_size = kernel_size\n        img_ = cv2.dilate(img, kernel, iterations=1)\n\n        img_ = (img_ > self.binary_thr).astype(np.float32)\n\n        return img_, dilate_kernel_size\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for k in self.keys:\n            results[k], d_kernel = self._random_dilate(results[k])\n            if len(results[k].shape) == 2:\n                results[k] = np.expand_dims(results[k], axis=2)\n            results[k + '_dilate_kernel_size'] = d_kernel\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, kernel_min={self.kernel_min}, '\n                     f'kernel_max={self.kernel_max})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass UnsharpMasking(BaseTransform):\n    \"\"\"Apply unsharp masking to an image or a sequence of images.\n\n    Args:\n        kernel_size (int): The kernel_size of the Gaussian kernel.\n        sigma (float): The standard deviation of the Gaussian.\n        weight (float): The weight of the \"details\" in the final output.\n        threshold (float): Pixel differences larger than this value are\n            regarded as \"details\".\n        keys (list[str]): The keys whose values are processed.\n\n    Added keys are \"xxx_unsharp\", where \"xxx\" are the attributes specified\n    in \"keys\".\n    \"\"\"\n\n    def __init__(self, kernel_size, sigma, weight, threshold, keys):\n\n        if kernel_size % 2 == 0:\n            raise ValueError('kernel_size must be an odd number, but '\n                             f'got {kernel_size}.')\n\n        self.kernel_size = kernel_size\n        self.sigma = sigma\n        self.weight = weight\n        self.threshold = threshold\n        self.keys = keys\n\n        kernel = cv2.getGaussianKernel(kernel_size, sigma)\n        self.kernel = np.matmul(kernel, kernel.transpose())\n\n    def _unsharp_masking(self, imgs):\n        \"\"\"Unsharp masking function.\"\"\"\n\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        outputs = []\n        for img in imgs:\n            img = img.astype(np.float32)\n            residue = img - cv2.filter2D(img, -1, self.kernel)\n            mask = np.float32(np.abs(residue) > self.threshold)\n            soft_mask = cv2.filter2D(mask, -1, self.kernel)\n            sharpened = np.clip(img + self.weight * residue, 0, 255)\n\n            outputs.append(soft_mask * sharpened + (1 - soft_mask) * img)\n\n        if is_single_image:\n            outputs = outputs[0]\n\n        return outputs\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        for key in self.keys:\n            results[f'{key}_unsharp'] = self._unsharp_masking(results[key])\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, kernel_size={self.kernel_size}, '\n                     f'sigma={self.sigma}, weight={self.weight}, '\n                     f'threshold={self.threshold})')\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/aug_shape.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\nfrom copy import deepcopy\nfrom typing import Dict, List, Union\n\nimport mmcv\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.utils import is_tuple_of\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass Flip(BaseTransform):\n    \"\"\"Flip the input data with a probability.\n\n    Reverse the order of elements in the given data with a specific direction.\n    The shape of the data is preserved, but the elements are reordered.\n    Required keys are the keys in attributes \"keys\", added or modified keys are\n    \"flip\", \"flip_direction\" and the keys in attributes \"keys\".\n    It also supports flipping a list of images with the same flip.\n\n    Required Keys:\n\n    - [KEYS]\n\n    Modified Keys:\n\n    - [KEYS]\n\n    Args:\n        keys (Union[str, List[str]]): The images to be flipped.\n        flip_ratio (float): The probability to flip the images. Default: 0.5.\n        direction (str): Flip images horizontally or vertically. Options are\n            \"horizontal\" | \"vertical\". Default: \"horizontal\".\n    \"\"\"\n    _directions = ['horizontal', 'vertical']\n\n    def __init__(self, keys, flip_ratio=0.5, direction='horizontal'):\n\n        if direction not in self._directions:\n            raise ValueError(f'Direction {direction} is not supported.'\n                             f'Currently support ones are {self._directions}')\n\n        self.keys = keys if isinstance(keys, list) else [keys]\n        self.flip_ratio = flip_ratio\n        self.direction = direction\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        flip = np.random.random() < self.flip_ratio\n\n        if flip:\n            for key in self.keys:\n                if isinstance(results[key], list):\n                    for v in results[key]:\n                        mmcv.imflip_(v, self.direction)\n                else:\n                    mmcv.imflip_(results[key], self.direction)\n\n        if 'flip_infos' not in results:\n            results['flip_infos'] = []\n\n        flip_info = dict(\n            keys=self.keys,\n            direction=self.direction,\n            ratio=self.flip_ratio,\n            flip=flip)\n        results['flip_infos'].append(flip_info)\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, flip_ratio={self.flip_ratio}, '\n                     f'direction={self.direction})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomRotation(BaseTransform):\n    \"\"\"Rotate the image by a randomly-chosen angle, measured in degree.\n\n    Args:\n        keys (list[str]): The images to be rotated.\n        degrees (tuple[float] | tuple[int] | float | int): If it is a tuple,\n            it represents a range (min, max). If it is a float or int,\n            the range is constructed as (-degrees, degrees).\n    \"\"\"\n\n    def __init__(self, keys, degrees):\n\n        if isinstance(degrees, (int, float)):\n            if degrees < 0.0:\n                raise ValueError('Degrees must be positive if it is a number.')\n            else:\n                degrees = (-degrees, degrees)\n        elif not is_tuple_of(degrees, (int, float)):\n            raise TypeError(f'Degrees must be float | int or tuple of float | '\n                            'int, but got '\n                            f'{type(degrees)}.')\n\n        self.keys = keys\n        self.degrees = degrees\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        angle = random.uniform(self.degrees[0], self.degrees[1])\n\n        for k in self.keys:\n            results[k] = mmcv.imrotate(results[k], angle)\n            if results[k].ndim == 2:\n                results[k] = np.expand_dims(results[k], axis=2)\n        results['degrees'] = self.degrees\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, degrees={self.degrees})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomTransposeHW(BaseTransform):\n    \"\"\"Randomly transpose images in H and W dimensions with a probability.\n\n    (TransposeHW = horizontal flip + anti-clockwise rotation by 90 degrees)\n    When used with horizontal/vertical flips, it serves as a way of rotation\n    augmentation.\n    It also supports randomly transposing a list of images.\n\n    Required keys are the keys in attributes \"keys\", added or modified keys are\n    \"transpose\" and the keys in attributes \"keys\".\n\n    Args:\n        keys (list[str]): The images to be transposed.\n        transpose_ratio (float): The probability to transpose the images.\n            Default: 0.5.\n    \"\"\"\n\n    def __init__(self, keys, transpose_ratio=0.5):\n\n        self.keys = keys if isinstance(keys, list) else [keys]\n        self.transpose_ratio = transpose_ratio\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        transpose = np.random.random() < self.transpose_ratio\n\n        if transpose:\n            for key in self.keys:\n                if isinstance(results[key], list):\n                    results[key] = [v.transpose(1, 0, 2) for v in results[key]]\n                else:\n                    results[key] = results[key].transpose(1, 0, 2)\n\n        results['transpose'] = transpose\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(keys={self.keys}, transpose_ratio={self.transpose_ratio})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass Resize(BaseTransform):\n    \"\"\"Resize data to a specific size for training or resize the images to fit\n    the network input regulation for testing.\n\n    When used for resizing images to fit network input regulation, the case is\n    that a network may have several downsample and then upsample operation,\n    then the input height and width should be divisible by the downsample\n    factor of the network.\n    For example, the network would downsample the input for 5 times with\n    stride 2, then the downsample factor is 2^5 = 32 and the height\n    and width should be divisible by 32.\n\n    Required keys are the keys in attribute \"keys\", added or modified keys are\n    \"keep_ratio\", \"scale_factor\", \"interpolation\" and the\n    keys in attribute \"keys\".\n\n    Required Keys:\n\n    - Required keys are the keys in attribute \"keys\"\n\n    Modified Keys:\n\n    - Modified the keys in attribute \"keys\" or save as new key ([OUT_KEY])\n\n    Added Keys:\n\n    - [OUT_KEY]_shape\n    - keep_ratio\n    - scale_factor\n    - interpolation\n\n    All keys in \"keys\" should have the same shape. \"test_trans\" is used to\n    record the test transformation to align the input's shape.\n\n    Args:\n        keys (str | list[str]): The image(s) to be resized.\n        scale (float | tuple[int]): If scale is tuple[int], target spatial\n            size (h, w). Otherwise, target spatial size is scaled by input\n            size.\n            Note that when it is used, `size_factor` and `max_size` are\n            useless. Default: None\n        keep_ratio (bool): If set to True, images will be resized without\n            changing the aspect ratio. Otherwise, it will resize images to a\n            given size. Default: False.\n            Note that it is used together with `scale`.\n        size_factor (int): Let the output shape be a multiple of size_factor.\n            Default:None.\n            Note that when it is used, `scale` should be set to None and\n            `keep_ratio` should be set to False.\n        max_size (int): The maximum size of the longest side of the output.\n            Default:None.\n            Note that it is used together with `size_factor`.\n        interpolation (str): Algorithm used for interpolation:\n            \"nearest\" | \"bilinear\" | \"bicubic\" | \"area\" | \"lanczos\".\n            Default: \"bilinear\".\n        backend (str | None): The image resize backend type. Options are `cv2`,\n            `pillow`, `None`. If backend is None, the global imread_backend\n            specified by ``mmcv.use_backend()`` will be used.\n            Default: None.\n        output_keys (list[str] | None): The resized images. Default: None\n            Note that if it is not `None`, its length should be equal to keys.\n    \"\"\"\n\n    def __init__(self,\n                 keys: Union[str, List[str]] = 'img',\n                 scale=None,\n                 keep_ratio=False,\n                 size_factor=None,\n                 max_size=None,\n                 interpolation='bilinear',\n                 backend=None,\n                 output_keys=None):\n\n        assert keys, 'Keys should not be empty.'\n        keys = [keys] if not isinstance(keys, list) else keys\n        if output_keys:\n            assert len(output_keys) == len(keys)\n        else:\n            output_keys = keys\n        if size_factor:\n            assert scale is None, ('When size_factor is used, scale should ',\n                                   f'be None. But received {scale}.')\n            assert keep_ratio is False, ('When size_factor is used, '\n                                         'keep_ratio should be False.')\n        if max_size:\n            assert size_factor is not None, (\n                'When max_size is used, '\n                f'size_factor should also be set. But received {size_factor}.')\n        if isinstance(scale, float):\n            if scale <= 0:\n                raise ValueError(f'Invalid scale {scale}, must be positive.')\n        elif is_tuple_of(scale, int):\n            max_long_edge = max(scale)\n            max_short_edge = min(scale)\n            if max_short_edge == -1:\n                # assign np.inf to long edge for rescaling short edge later.\n                scale = (np.inf, max_long_edge)\n        elif scale is not None:\n            raise TypeError(\n                f'Scale must be None, float or tuple of int, but got '\n                f'{type(scale)}.')\n\n        self.keys = keys\n        self.output_keys = output_keys\n        self.scale = scale\n        self.size_factor = size_factor\n        self.max_size = max_size\n        self.keep_ratio = keep_ratio\n        self.interpolation = interpolation\n        self.backend = backend\n\n    def _resize(self, img):\n        \"\"\"Resize function.\n\n        Args:\n            img (np.ndarray): Image.\n\n        Returns:\n            img (np.ndarray): Resized image.\n        \"\"\"\n        if isinstance(img, list):\n            for i, image in enumerate(img):\n                size, img[i] = self._resize(image)\n            return size, img\n        else:\n            if self.keep_ratio:\n                img, self.scale_factor = mmcv.imrescale(\n                    img,\n                    self.scale,\n                    return_scale=True,\n                    interpolation=self.interpolation,\n                    backend=self.backend)\n            else:\n                img, w_scale, h_scale = mmcv.imresize(\n                    img,\n                    self.scale,\n                    return_scale=True,\n                    interpolation=self.interpolation,\n                    backend=self.backend)\n                self.scale_factor = np.array((w_scale, h_scale),\n                                             dtype=np.float32)\n\n            if len(img.shape) == 2:\n                img = np.expand_dims(img, axis=2)\n            return img.shape, img\n\n    def transform(self, results: Dict) -> Dict:\n        \"\"\"Transform function to resize images.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        if self.size_factor:\n            h, w = results[self.keys[0]].shape[:2]\n            new_h = h - (h % self.size_factor)\n            new_w = w - (w % self.size_factor)\n            if self.max_size:\n                new_h = min(self.max_size - (self.max_size % self.size_factor),\n                            new_h)\n                new_w = min(self.max_size - (self.max_size % self.size_factor),\n                            new_w)\n            self.scale = (new_w, new_h)\n\n        for key, out_key in zip(self.keys, self.output_keys):\n            if key in results:\n                size, results[out_key] = self._resize(results[key])\n                results[f'{out_key}_shape'] = size\n                # copy metainfo\n                if f'ori_{key}_shape' in results:\n                    results[f'ori_{out_key}_shape'] = deepcopy(\n                        results[f'ori_{key}_shape'])\n                if f'{key}_channel_order' in results:\n                    results[f'{out_key}_channel_order'] = deepcopy(\n                        results[f'{key}_channel_order'])\n                if f'{key}_color_type' in results:\n                    results[f'{out_key}_color_type'] = deepcopy(\n                        results[f'{key}_color_type'])\n\n        results['scale_factor'] = self.scale_factor\n        results['keep_ratio'] = self.keep_ratio\n        results['interpolation'] = self.interpolation\n        results['backend'] = self.backend\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(keys={self.keys}, output_keys={self.output_keys}, '\n            f'scale={self.scale}, '\n            f'keep_ratio={self.keep_ratio}, size_factor={self.size_factor}, '\n            f'max_size={self.max_size}, interpolation={self.interpolation})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass NumpyPad(BaseTransform):\n    \"\"\"Numpy Padding.\n\n    In this augmentation, numpy padding is adopted to customize padding\n    augmentation. Please carefully read the numpy manual in:\n    https://numpy.org/doc/stable/reference/generated/numpy.pad.html\n\n    If you just hope a single dimension to be padded, you must set ``padding``\n    like this:\n\n    ::\n\n        padding = ((2, 2), (0, 0), (0, 0))\n\n    In this case, if you adopt an input with three dimension, only the first\n    dimension will be padded.\n\n    Args:\n        keys (Union[str, List[str]]): The images to be padded.\n        padding (int | tuple(int)): Please refer to the args ``pad_width`` in\n            ``numpy.pad``.\n    \"\"\"\n\n    def __init__(self, keys, padding, **kwargs):\n        if isinstance(keys, str):\n            keys = [keys]\n        self.keys = keys\n        self.padding = padding\n        self.kwargs = kwargs\n\n    def transform(self, results):\n        \"\"\"Call function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        for key in self.keys:\n            results[key] = np.pad(results[key], self.padding, **self.kwargs)\n\n        return results\n\n    def __repr__(self) -> str:\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(keys={self.keys}, padding={self.padding}, kwargs={self.kwargs})'\n        )\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/blur_kernels.py",
    "content": "# This code is referenced from BasicSR with modifications.\n# Reference: https://github.com/xinntao/BasicSR/blob/master/basicsr/data/degradations.py  # noqa\n# Original license: Copyright (c) 2020 xinntao, under the Apache 2.0 license.\n\nimport numpy as np\nfrom scipy import special\n\n\ndef get_rotated_sigma_matrix(sig_x, sig_y, theta):\n    \"\"\"Calculate the rotated sigma matrix (two dimensional matrix).\n\n    Args:\n        sig_x (float): Standard deviation along the horizontal direction.\n        sig_y (float): Standard deviation along the vertical direction.\n        theta (float): Rotation in radian.\n\n    Returns:\n        np.ndarray: Rotated sigma matrix.\n    \"\"\"\n\n    diag = np.array([[sig_x**2, 0], [0, sig_y**2]]).astype(np.float32)\n    rot = np.array([[np.cos(theta), -np.sin(theta)],\n                    [np.sin(theta), np.cos(theta)]]).astype(np.float32)\n\n    return np.matmul(rot, np.matmul(diag, rot.T))\n\n\ndef _mesh_grid(kernel_size):\n    \"\"\"Generate the mesh grid, centering at zero.\n\n    Args:\n        kernel_size (int): The size of the kernel.\n\n    Returns:\n        x_grid (np.ndarray): x-coordinates with shape\n            (kernel_size, kernel_size).\n        y_grid (np.ndarray): y-coordinates with shape\n            (kernel_size, kernel_size).\n        xy_grid (np.ndarray): stacked coordinates with shape\n            (kernel_size, kernel_size, 2).\n    \"\"\"\n\n    range_ = np.arange(-kernel_size // 2 + 1., kernel_size // 2 + 1.)\n    x_grid, y_grid = np.meshgrid(range_, range_)\n    xy_grid = np.hstack((x_grid.reshape((kernel_size * kernel_size, 1)),\n                         y_grid.reshape(kernel_size * kernel_size,\n                                        1))).reshape(kernel_size, kernel_size,\n                                                     2)\n\n    return xy_grid, x_grid, y_grid\n\n\ndef calculate_gaussian_pdf(sigma_matrix, grid):\n    \"\"\"Calculate PDF of the bivariate Gaussian distribution.\n\n    Args:\n        sigma_matrix (np.ndarray): The variance matrix with shape (2, 2).\n        grid (np.ndarray): Coordinates generated by :func:`_mesh_grid`,\n            with shape (K, K, 2), where K is the kernel size.\n\n    Returns:\n        kernel (np.ndarray): Un-normalized kernel.\n    \"\"\"\n\n    inverse_sigma = np.linalg.inv(sigma_matrix)\n    kernel = np.exp(-0.5 * np.sum(np.matmul(grid, inverse_sigma) * grid, 2))\n\n    return kernel\n\n\ndef bivariate_gaussian(kernel_size,\n                       sig_x,\n                       sig_y=None,\n                       theta=None,\n                       grid=None,\n                       is_isotropic=True):\n    \"\"\"Generate a bivariate isotropic or anisotropic Gaussian kernel.\n\n    In isotropic mode, only `sig_x` is used. `sig_y` and `theta` are\n    ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel\n        sig_x (float): Standard deviation along horizontal direction.\n        sig_y (float | None, optional): Standard deviation along the vertical\n            direction. If it is None, 'is_isotropic' must be set to True.\n            Default: None.\n        theta (float | None, optional): Rotation in radian. If it is None,\n            'is_isotropic' must be set to True. Default: None.\n        grid (ndarray, optional): Coordinates generated by :func:`_mesh_grid`,\n            with shape (K, K, 2), where K is the kernel size. Default: None\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n\n    Returns:\n        kernel (np.ndarray): normalized kernel (i.e. sum to 1).\n    \"\"\"\n\n    if grid is None:\n        grid, _, _ = _mesh_grid(kernel_size)\n\n    if is_isotropic:\n        sigma_matrix = np.array([[sig_x**2, 0], [0,\n                                                 sig_x**2]]).astype(np.float32)\n    else:\n        if sig_y is None:\n            raise ValueError('\"sig_y\" cannot be None if \"is_isotropic\" is '\n                             'False.')\n\n        sigma_matrix = get_rotated_sigma_matrix(sig_x, sig_y, theta)\n\n    kernel = calculate_gaussian_pdf(sigma_matrix, grid)\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef bivariate_generalized_gaussian(kernel_size,\n                                   sig_x,\n                                   sig_y=None,\n                                   theta=None,\n                                   beta=1,\n                                   grid=None,\n                                   is_isotropic=True):\n    \"\"\"Generate a bivariate generalized Gaussian kernel.\n\n    Described in `Parameter Estimation For Multivariate Generalized\n    Gaussian Distributions` by Pascal et. al (2013). In isotropic mode,\n    only `sig_x` is used. `sig_y` and `theta` is ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel\n        sig_x (float): Standard deviation along horizontal direction\n        sig_y (float | None, optional): Standard deviation along the vertical\n            direction. If it is None, 'is_isotropic' must be set to True.\n            Default: None.\n        theta (float | None, optional): Rotation in radian. If it is None,\n            'is_isotropic' must be set to True. Default: None.\n        beta (float, optional): Shape parameter, beta = 1 is the normal\n            distribution. Default: 1.\n        grid (ndarray, optional): Coordinates generated by :func:`_mesh_grid`,\n            with shape (K, K, 2), where K is the kernel size. Default: None\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n\n    Returns:\n        kernel (np.ndarray): normalized kernel.\n    \"\"\"\n\n    if grid is None:\n        grid, _, _ = _mesh_grid(kernel_size)\n\n    if is_isotropic:\n        sigma_matrix = np.array([[sig_x**2, 0], [0,\n                                                 sig_x**2]]).astype(np.float32)\n    else:\n        sigma_matrix = get_rotated_sigma_matrix(sig_x, sig_y, theta)\n\n    inverse_sigma = np.linalg.inv(sigma_matrix)\n    kernel = np.exp(\n        -0.5 *\n        np.power(np.sum(np.matmul(grid, inverse_sigma) * grid, 2), beta))\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef bivariate_plateau(kernel_size,\n                      sig_x,\n                      sig_y,\n                      theta,\n                      beta,\n                      grid=None,\n                      is_isotropic=True):\n    \"\"\"Generate a plateau-like anisotropic kernel.\n\n    This kernel has a form of 1 / (1+x^(beta)).\n    Ref: https://stats.stackexchange.com/questions/203629/is-there-a-plateau-shaped-distribution  # noqa\n    In the isotropic mode, only `sig_x` is used. `sig_y` and `theta` is ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel\n        sig_x (float): Standard deviation along horizontal direction\n        sig_y (float): Standard deviation along the vertical direction.\n        theta (float): Rotation in radian.\n        beta (float): Shape parameter, beta = 1 is the normal distribution.\n        grid (np.ndarray, optional): Coordinates generated by :func:`_mesh_grid`,\n            with shape (K, K, 2), where K is the kernel size. Default: None\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n    Returns:\n        kernel (np.ndarray): normalized kernel (i.e. sum to 1).\n    \"\"\"\n    if grid is None:\n        grid, _, _ = _mesh_grid(kernel_size)\n\n    if is_isotropic:\n        sigma_matrix = np.array([[sig_x**2, 0], [0,\n                                                 sig_x**2]]).astype(np.float32)\n    else:\n        sigma_matrix = get_rotated_sigma_matrix(sig_x, sig_y, theta)\n\n    inverse_sigma = np.linalg.inv(sigma_matrix)\n    kernel = np.reciprocal(\n        np.power(np.sum(np.matmul(grid, inverse_sigma) * grid, 2), beta) + 1)\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef random_bivariate_gaussian_kernel(kernel_size,\n                                     sigma_x_range,\n                                     sigma_y_range,\n                                     rotation_range,\n                                     noise_range=None,\n                                     is_isotropic=True):\n    \"\"\"Randomly generate bivariate isotropic or anisotropic Gaussian kernels.\n\n    In the isotropic mode, only `sigma_x_range` is used. `sigma_y_range` and\n    `rotation_range` is ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel.\n        sigma_x_range (tuple): The range of the standard deviation along the\n            horizontal direction. Default: [0.6, 5]\n        sigma_y_range (tuple): The range of the standard deviation along the\n            vertical direction. Default: [0.6, 5]\n        rotation_range (tuple): Range of rotation in radian.\n        noise_range (tuple, optional): Multiplicative kernel noise.\n            Default: None.\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n\n    Returns:\n        kernel (np.ndarray): The kernel whose parameters are sampled from the\n            specified range.\n    \"\"\"\n\n    assert kernel_size % 2 == 1, 'Kernel size must be an odd number.'\n    assert sigma_x_range[0] <= sigma_x_range[1], 'Wrong sigma_x_range.'\n\n    sigma_x = np.random.uniform(sigma_x_range[0], sigma_x_range[1])\n    if is_isotropic is False:\n        assert sigma_y_range[0] <= sigma_y_range[1], 'Wrong sigma_y_range.'\n        assert rotation_range[0] <= rotation_range[1], 'Wrong rotation_range.'\n        sigma_y = np.random.uniform(sigma_y_range[0], sigma_y_range[1])\n        rotation = np.random.uniform(rotation_range[0], rotation_range[1])\n    else:\n        sigma_y = sigma_x\n        rotation = 0\n\n    kernel = bivariate_gaussian(\n        kernel_size, sigma_x, sigma_y, rotation, is_isotropic=is_isotropic)\n\n    # add multiplicative noise\n    if noise_range is not None:\n        assert noise_range[0] <= noise_range[1], 'Wrong noise range.'\n        noise = np.random.uniform(\n            noise_range[0], noise_range[1], size=kernel.shape)\n        kernel = kernel * noise\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef random_bivariate_generalized_gaussian_kernel(kernel_size,\n                                                 sigma_x_range,\n                                                 sigma_y_range,\n                                                 rotation_range,\n                                                 beta_range,\n                                                 noise_range=None,\n                                                 is_isotropic=True):\n    \"\"\"Randomly generate bivariate generalized Gaussian kernels.\n\n    In the isotropic mode, only `sigma_x_range` is used. `sigma_y_range` and\n    `rotation_range` is ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel.\n        sigma_x_range (tuple): The range of the standard deviation along the\n            horizontal direction. Default: [0.6, 5]\n        sigma_y_range (tuple): The range of the standard deviation along the\n            vertical direction. Default: [0.6, 5]\n        rotation_range (tuple): Range of rotation in radian.\n        beta_range (float): The range of the shape parameter, beta = 1 is the\n            normal distribution.\n        noise_range (tuple, optional): Multiplicative kernel noise.\n            Default: None.\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n\n    Returns:\n        kernel (np.ndarray): Normalized kernel.\n    \"\"\"\n\n    assert kernel_size % 2 == 1, 'Kernel size must be an odd number.'\n    assert sigma_x_range[0] <= sigma_x_range[1], 'Wrong sigma_x_range.'\n\n    sigma_x = np.random.uniform(sigma_x_range[0], sigma_x_range[1])\n    if is_isotropic is False:\n        assert sigma_y_range[0] <= sigma_y_range[1], 'Wrong sigma_y_range.'\n        assert rotation_range[0] <= rotation_range[1], 'Wrong rotation_range.'\n        sigma_y = np.random.uniform(sigma_y_range[0], sigma_y_range[1])\n        rotation = np.random.uniform(rotation_range[0], rotation_range[1])\n    else:\n        sigma_y = sigma_x\n        rotation = 0\n\n    # assume beta_range[0] <= 1 <= beta_range[1]\n    if np.random.uniform() <= 0.5:\n        beta = np.random.uniform(beta_range[0], 1)\n    else:\n        beta = np.random.uniform(1, beta_range[1])\n\n    kernel = bivariate_generalized_gaussian(\n        kernel_size,\n        sigma_x,\n        sigma_y,\n        rotation,\n        beta,\n        is_isotropic=is_isotropic)\n\n    # add multiplicative noise\n    if noise_range is not None:\n        assert noise_range[0] <= noise_range[1], 'Wrong noise range.'\n        noise = np.random.uniform(\n            noise_range[0], noise_range[1], size=kernel.shape)\n        kernel = kernel * noise\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef random_bivariate_plateau_kernel(kernel_size,\n                                    sigma_x_range,\n                                    sigma_y_range,\n                                    rotation_range,\n                                    beta_range,\n                                    noise_range=None,\n                                    is_isotropic=True):\n    \"\"\"Randomly generate bivariate plateau kernels.\n\n    In the isotropic mode, only `sigma_x_range` is used. `sigma_y_range` and\n    `rotation_range` is ignored.\n\n    Args:\n        kernel_size (int): The size of the kernel.\n        sigma_x_range (tuple): The range of the standard deviation along the\n            horizontal direction. Default: [0.6, 5]\n        sigma_y_range (tuple): The range of the standard deviation along the\n            vertical direction. Default: [0.6, 5]\n        rotation_range (tuple): Range of rotation in radian.\n        beta_range (float): The range of the shape parameter, beta = 1 is the\n            normal distribution.\n        noise_range (tuple, optional): Multiplicative kernel noise.\n            Default: None.\n        is_isotropic (bool, optional): Whether to use an isotropic kernel.\n            Default: True.\n\n    Returns:\n        kernel (np.ndarray):  Plateau kernel.\n    \"\"\"\n\n    assert kernel_size % 2 == 1, 'Kernel size must be an odd number.'\n    assert sigma_x_range[0] <= sigma_x_range[1], 'Wrong sigma_x_range.'\n    sigma_x = np.random.uniform(sigma_x_range[0], sigma_x_range[1])\n\n    if is_isotropic is False:\n        assert sigma_y_range[0] <= sigma_y_range[1], 'Wrong sigma_y_range.'\n        assert rotation_range[0] <= rotation_range[1], 'Wrong rotation_range.'\n        sigma_y = np.random.uniform(sigma_y_range[0], sigma_y_range[1])\n        rotation = np.random.uniform(rotation_range[0], rotation_range[1])\n    else:\n        sigma_y = sigma_x\n        rotation = 0\n\n    # TODO: this may be not proper\n    if np.random.uniform() <= 0.5:\n        beta = np.random.uniform(beta_range[0], 1)\n    else:\n        beta = np.random.uniform(1, beta_range[1])\n\n    kernel = bivariate_plateau(\n        kernel_size,\n        sigma_x,\n        sigma_y,\n        rotation,\n        beta,\n        is_isotropic=is_isotropic)\n\n    # add multiplicative noise\n    if noise_range is not None:\n        assert noise_range[0] <= noise_range[1], 'Wrong noise range.'\n        noise = np.random.uniform(\n            noise_range[0], noise_range[1], size=kernel.shape)\n        kernel = kernel * noise\n    kernel = kernel / np.sum(kernel)\n\n    return kernel\n\n\ndef random_circular_lowpass_kernel(omega_range, kernel_size, pad_to=0):\n    \"\"\"Generate a 2D Sinc filter.\n\n    Reference: https://dsp.stackexchange.com/questions/58301/2-d-circularly-symmetric-low-pass-filter  # noqa\n\n    Args:\n        omega_range (tuple): The cutoff frequency in radian (pi is max).\n        kernel_size (int): The size of the kernel. It must be an odd number.\n        pad_to (int, optional): The size of the padded kernel. It must be odd\n            or zero. Default: 0.\n\n    Returns:\n        kernel (np.ndarray): The Sinc kernel with specified parameters.\n    \"\"\"\n    err = np.geterr()\n    np.seterr(divide='ignore', invalid='ignore')\n\n    assert kernel_size % 2 == 1, 'Kernel size must be an odd number.'\n    omega = np.random.uniform(omega_range[0], omega_range[-1])\n\n    kernel = np.fromfunction(\n        lambda x, y: omega * special.j1(omega * np.sqrt(\n            (x - (kernel_size - 1) / 2)**2 + (y - (kernel_size - 1) / 2)**2)) /\n        (2 * np.pi * np.sqrt((x - (kernel_size - 1) / 2)**2 +\n                             (y - (kernel_size - 1) / 2)**2)),\n        [kernel_size, kernel_size])\n    kernel[(kernel_size - 1) // 2,\n           (kernel_size - 1) // 2] = omega**2 / (4 * np.pi)\n    kernel = kernel / np.sum(kernel)\n\n    if pad_to > kernel_size:\n        pad_size = (pad_to - kernel_size) // 2\n        kernel = np.pad(kernel, ((pad_size, pad_size), (pad_size, pad_size)))\n\n    np.seterr(**err)\n\n    return kernel\n\n\ndef random_mixed_kernels(kernel_list,\n                         kernel_prob,\n                         kernel_size,\n                         sigma_x_range=[0.6, 5],\n                         sigma_y_range=[0.6, 5],\n                         rotation_range=[-np.pi, np.pi],\n                         beta_gaussian_range=[0.5, 8],\n                         beta_plateau_range=[1, 2],\n                         omega_range=[0, np.pi],\n                         noise_range=None):\n    \"\"\"Randomly generate a kernel.\n\n    Args:\n        kernel_list (list): A list of kernel types. Choices are\n            'iso', 'aniso', 'skew', 'generalized_iso', 'generalized_aniso',\n            'plateau_iso', 'plateau_aniso', 'sinc'.\n        kernel_prob (list): The probability of choosing of the corresponding\n            kernel.\n        kernel_size (int): The size of the kernel.\n        sigma_x_range (list, optional): The range of the standard deviation\n            along  the horizontal direction. Default: (0.6, 5).\n        sigma_y_range (list, optional): The range of the standard deviation\n            along the vertical direction. Default: (0.6, 5).\n        rotation_range (list, optional): Range of rotation in radian.\n            Default: (-np.pi, np.pi).\n        beta_gaussian_range (list, optional): The range of the shape parameter\n            for generalized Gaussian. Default: (0.5, 8).\n        beta_plateau_range (list, optional): The range of the shape parameter\n            for plateau kernel. Default: (1, 2).\n        omega_range (list, optional): The range of omega used in Sinc kernel.\n            Default: (0, np.pi).\n        noise_range (list, optional): Multiplicative kernel noise.\n            Default: None.\n\n    Returns:\n        kernel (np.ndarray): The kernel whose parameters are sampled from the\n            specified range.\n    \"\"\"\n\n    kernel_type = np.random.choice(kernel_list, p=kernel_prob)\n    if kernel_type == 'iso':\n        kernel = random_bivariate_gaussian_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            noise_range=noise_range,\n            is_isotropic=True)\n    elif kernel_type == 'aniso':\n        kernel = random_bivariate_gaussian_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            noise_range=noise_range,\n            is_isotropic=False)\n    elif kernel_type == 'generalized_iso':\n        kernel = random_bivariate_generalized_gaussian_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            beta_gaussian_range,\n            noise_range=noise_range,\n            is_isotropic=True)\n    elif kernel_type == 'generalized_aniso':\n        kernel = random_bivariate_generalized_gaussian_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            beta_gaussian_range,\n            noise_range=noise_range,\n            is_isotropic=False)\n    elif kernel_type == 'plateau_iso':\n        kernel = random_bivariate_plateau_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            beta_plateau_range,\n            noise_range=None,\n            is_isotropic=True)\n    elif kernel_type == 'plateau_aniso':\n        kernel = random_bivariate_plateau_kernel(\n            kernel_size,\n            sigma_x_range,\n            sigma_y_range,\n            rotation_range,\n            beta_plateau_range,\n            noise_range=None,\n            is_isotropic=False)\n    elif kernel_type == 'sinc':\n        kernel = random_circular_lowpass_kernel(omega_range, kernel_size)\n\n    return kernel\n"
  },
  {
    "path": "mmagic/datasets/transforms/crop.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport random\n\nimport cv2 as cv\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.hub import get_config\nfrom mmengine.registry import DefaultScope\nfrom mmengine.utils import is_list_of, is_tuple_of\nfrom torch.nn.modules.utils import _pair\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.utils import get_box_info, random_choose_unknown, try_import\n\nmmdet_apis = try_import('mmdet.apis')\n\n\n@TRANSFORMS.register_module()\nclass Crop(BaseTransform):\n    \"\"\"Crop data to specific size for training.\n\n    Args:\n        keys (Sequence[str]): The images to be cropped.\n        crop_size (Tuple[int]): Target spatial size (h, w).\n        random_crop (bool): If set to True, it will random crop\n            image. Otherwise, it will work as center crop. Default: True.\n        is_pad_zeros (bool, optional): Whether to pad the image with 0 if\n            crop_size is greater than image size. Default: False.\n    \"\"\"\n\n    def __init__(self, keys, crop_size, random_crop=True, is_pad_zeros=False):\n\n        if not is_tuple_of(crop_size, int):\n            raise TypeError(\n                'Elements of crop_size must be int and crop_size must be'\n                f' tuple, but got {type(crop_size[0])} in {type(crop_size)}')\n\n        self.keys = keys\n        self.crop_size = crop_size\n        self.random_crop = random_crop\n        self.is_pad_zeros = is_pad_zeros\n\n    def _crop(self, data):\n        \"\"\"Crop the data.\n\n        Args:\n            data (Union[List, np.ndarray]): Input data to crop.\n\n        Returns:\n            tuple: cropped data and corresponding crop box.\n        \"\"\"\n        if not isinstance(data, list):\n            data_list = [data]\n        else:\n            data_list = data\n\n        crop_bbox_list = []\n        data_list_ = []\n\n        for item in data_list:\n            data_h, data_w = item.shape[:2]\n            crop_h, crop_w = self.crop_size\n\n            if self.is_pad_zeros:\n\n                crop_y_offset, crop_x_offset = 0, 0\n\n                if crop_h > data_h:\n                    crop_y_offset = (crop_h - data_h) // 2\n                if crop_w > data_w:\n                    crop_x_offset = (crop_w - data_w) // 2\n\n                if crop_y_offset > 0 or crop_x_offset > 0:\n                    pad_width = [(2 * crop_y_offset, 2 * crop_y_offset),\n                                 (2 * crop_x_offset, 2 * crop_x_offset)]\n                    if item.ndim == 3:\n                        pad_width.append((0, 0))\n                    item = np.pad(\n                        item,\n                        tuple(pad_width),\n                        mode='constant',\n                        constant_values=0)\n\n                data_h, data_w = item.shape[:2]\n\n            crop_h = min(data_h, crop_h)\n            crop_w = min(data_w, crop_w)\n\n            if self.random_crop:\n                x_offset = np.random.randint(0, data_w - crop_w + 1)\n                y_offset = np.random.randint(0, data_h - crop_h + 1)\n            else:\n                x_offset = max(0, (data_w - crop_w)) // 2\n                y_offset = max(0, (data_h - crop_h)) // 2\n\n            crop_bbox = [x_offset, y_offset, crop_w, crop_h]\n            item_ = item[y_offset:y_offset + crop_h,\n                         x_offset:x_offset + crop_w, ...]\n            crop_bbox_list.append(crop_bbox)\n            data_list_.append(item_)\n\n        if not isinstance(data, list):\n            return data_list_[0], crop_bbox_list[0]\n        return data_list_, crop_bbox_list\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for k in self.keys:\n            data_, crop_bbox = self._crop(results[k])\n            results[k] = data_\n            results[k + '_crop_bbox'] = crop_bbox\n        results['crop_size'] = self.crop_size\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'keys={self.keys}, crop_size={self.crop_size}, '\n                     f'random_crop={self.random_crop}')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass CropLike(BaseTransform):\n    \"\"\"Crop/pad the image in the target_key according to the size of image in\n    the reference_key .\n\n    Args:\n        target_key (str): The key needs to be cropped.\n        reference_key (str | None): The reference key, need its size.\n            Default: None.\n    \"\"\"\n\n    def __init__(self, target_key, reference_key=None):\n\n        assert reference_key and target_key\n        self.target_key = target_key\n        self.reference_key = reference_key\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n                Require self.target_key and self.reference_key.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n                Modify self.target_key.\n        \"\"\"\n\n        size = results[self.reference_key].shape\n        old_image = results[self.target_key]\n        old_size = old_image.shape\n        h, w = old_size[:2]\n        new_size = size[:2] + old_size[2:]\n        h_cover, w_cover = min(h, size[0]), min(w, size[1])\n\n        format_image = np.zeros(new_size, dtype=old_image.dtype)\n        format_image[:h_cover, :w_cover] = old_image[:h_cover, :w_cover]\n        results[self.target_key] = format_image\n\n        return results\n\n    def __repr__(self):\n\n        return (self.__class__.__name__ + f' target_key={self.target_key}, ' +\n                f'reference_key={self.reference_key}')\n\n\n@TRANSFORMS.register_module()\nclass FixedCrop(BaseTransform):\n    \"\"\"Crop paired data (at a specific position) to specific size for training.\n\n    Args:\n        keys (Sequence[str]): The images to be cropped.\n        crop_size (Tuple[int]): Target spatial size (h, w).\n        crop_pos (Tuple[int]): Specific position (x, y). If set to None,\n            random initialize the position to crop paired data batch.\n            Default: None.\n    \"\"\"\n\n    def __init__(self, keys, crop_size, crop_pos=None):\n\n        if not is_tuple_of(crop_size, int):\n            raise TypeError(\n                'Elements of crop_size must be int and crop_size must be'\n                f' tuple, but got {type(crop_size[0])} in {type(crop_size)}')\n        if not is_tuple_of(crop_pos, int) and (crop_pos is not None):\n            raise TypeError(\n                'Elements of crop_pos must be int and crop_pos must be'\n                f' tuple or None, but got {type(crop_pos[0])} in '\n                f'{type(crop_pos)}')\n\n        self.keys = keys\n        self.crop_size = crop_size\n        self.crop_pos = crop_pos\n\n    def _crop(self, data, x_offset, y_offset, crop_w, crop_h):\n        \"\"\"Crop the data.\n\n        Args:\n            data (Union[List, np.ndarray]): Input data to crop.\n            x_offset (int): The offset of x axis.\n            y_offset (int): The offset of y axis.\n            crop_w (int): The width of crop bbox.\n            crop_h (int): The height of crop bbox.\n\n        Returns:\n            tuple: cropped data and corresponding crop box.\n        \"\"\"\n        crop_bbox = [x_offset, y_offset, crop_w, crop_h]\n        data_ = data[y_offset:y_offset + crop_h, x_offset:x_offset + crop_w,\n                     ...]\n\n        return data_, crop_bbox\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        if isinstance(results[self.keys[0]], list):\n            data_h, data_w = results[self.keys[0]][0].shape[:2]\n        else:\n            data_h, data_w = results[self.keys[0]].shape[:2]\n        crop_h, crop_w = self.crop_size\n        crop_h = min(data_h, crop_h)\n        crop_w = min(data_w, crop_w)\n\n        if self.crop_pos is None:\n            x_offset = np.random.randint(0, data_w - crop_w + 1)\n            y_offset = np.random.randint(0, data_h - crop_h + 1)\n        else:\n            x_offset, y_offset = self.crop_pos\n            crop_w = min(data_w - x_offset, crop_w)\n            crop_h = min(data_h - y_offset, crop_h)\n\n        for k in self.keys:\n            images = results[k]\n            is_list = isinstance(images, list)\n            if not is_list:\n                images = [images]\n            cropped_images = []\n            crop_bbox = None\n            for image in images:\n                # In fixed crop for paired images, sizes should be the same\n                if (image.shape[0] != data_h or image.shape[1] != data_w):\n                    raise ValueError(\n                        'The sizes of paired images should be the same. '\n                        f'Expected ({data_h}, {data_w}), '\n                        f'but got ({image.shape[0]}, '\n                        f'{image.shape[1]}).')\n                data_, crop_bbox = self._crop(image, x_offset, y_offset,\n                                              crop_w, crop_h)\n                cropped_images.append(data_)\n            results[k + '_crop_bbox'] = crop_bbox\n            if not is_list:\n                cropped_images = cropped_images[0]\n            results[k] = cropped_images\n        results['crop_size'] = self.crop_size\n        results['crop_pos'] = self.crop_pos\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'keys={self.keys}, crop_size={self.crop_size}, '\n                     f'crop_pos={self.crop_pos}')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass ModCrop(BaseTransform):\n    \"\"\"Mod crop images, used during testing.\n\n    Required keys are \"scale\" and \"KEY\",\n    added or modified keys are \"KEY\".\n\n    Args:\n        key (str): The key of image. Default: 'gt'\n    \"\"\"\n\n    def __init__(self, key='gt') -> None:\n        super().__init__()\n\n        self.key = key\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        img = results[self.key].copy()\n        scale = results['scale']\n        if img.ndim in [2, 3]:\n            h, w = img.shape[0], img.shape[1]\n            h_remainder, w_remainder = h % scale, w % scale\n            img = img[:h - h_remainder, :w - w_remainder, ...]\n        else:\n            raise ValueError(f'Wrong img ndim: {img.ndim}.')\n        results[self.key] = img\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += f'(key={self.key})'\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass PairedRandomCrop(BaseTransform):\n    \"\"\"Paired random crop.\n\n    It crops a pair of img and gt images with corresponding locations.\n    It also supports accepting img list and gt list.\n    Required keys are \"scale\", \"lq_key\", and \"gt_key\",\n    added or modified keys are \"lq_key\" and \"gt_key\".\n\n    Args:\n        gt_patch_size (int): cropped gt patch size.\n        lq_key (str): Key of LQ img. Default: 'img'.\n        gt_key (str): Key of GT img. Default: 'gt'.\n    \"\"\"\n\n    def __init__(self, gt_patch_size, lq_key='img', gt_key='gt'):\n\n        self.gt_patch_size = gt_patch_size\n        self.lq_key = lq_key\n        self.gt_key = gt_key\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        scale = results['scale']\n        lq_patch_size = self.gt_patch_size // scale\n\n        lq_is_list = isinstance(results[self.lq_key], list)\n        if not lq_is_list:\n            results[self.lq_key] = [results[self.lq_key]]\n        gt_is_list = isinstance(results[self.gt_key], list)\n        if not gt_is_list:\n            results[self.gt_key] = [results[self.gt_key]]\n\n        h_lq, w_lq, _ = results[self.lq_key][0].shape\n        h_gt, w_gt, _ = results[self.gt_key][0].shape\n\n        if h_gt != h_lq * scale or w_gt != w_lq * scale:\n            raise ValueError(\n                f'Scale mismatches. GT ({h_gt}, {w_gt}) is not {scale}x '\n                f'multiplication of LQ ({h_lq}, {w_lq}).')\n        if h_lq < lq_patch_size or w_lq < lq_patch_size:\n            raise ValueError(\n                f'LQ ({h_lq}, {w_lq}) is smaller than patch size '\n                f'({lq_patch_size}, {lq_patch_size}). Please check '\n                f'{results[f\"{self.lq_key}_path\"]} and '\n                f'{results[f\"{self.gt_key}_path\"]}.')\n\n        # randomly choose top and left coordinates for img patch\n        top = np.random.randint(h_lq - lq_patch_size + 1)\n        left = np.random.randint(w_lq - lq_patch_size + 1)\n        # crop img patch\n        results[self.lq_key] = [\n            v[top:top + lq_patch_size, left:left + lq_patch_size, ...]\n            for v in results[self.lq_key]\n        ]\n        # crop corresponding gt patch\n        top_gt, left_gt = int(top * scale), int(left * scale)\n        results[self.gt_key] = [\n            v[top_gt:top_gt + self.gt_patch_size,\n              left_gt:left_gt + self.gt_patch_size, ...]\n            for v in results[self.gt_key]\n        ]\n\n        if not lq_is_list:\n            results[self.lq_key] = results[self.lq_key][0]\n        if not gt_is_list:\n            results[self.gt_key] = results[self.gt_key][0]\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(gt_patch_size={self.gt_patch_size}, '\n                     f'lq_key={self.lq_key}, '\n                     f'gt_key={self.gt_key})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomResizedCrop(BaseTransform):\n    \"\"\"Crop data to random size and aspect ratio.\n\n    A crop of a random proportion of the original image\n    and a random aspect ratio of the original aspect ratio is made.\n    The cropped image is finally resized to a given size specified\n    by 'crop_size'. Modified keys are the attributes specified in \"keys\".\n\n    This code is partially adopted from\n    torchvision.transforms.RandomResizedCrop:\n    [https://pytorch.org/vision/stable/_modules/torchvision/transforms/\\\n        transforms.html#RandomResizedCrop].\n\n    Args:\n        keys (list[str]): The images to be resized and random-cropped.\n        crop_size (int | tuple[int]): Target spatial size (h, w).\n        scale (tuple[float], optional): Range of the proportion of the original\n            image to be cropped. Default: (0.08, 1.0).\n        ratio (tuple[float], optional): Range of aspect ratio of the crop.\n            Default: (3. / 4., 4. / 3.).\n        interpolation (str, optional): Algorithm used for interpolation.\n            It can be only either one of the following:\n            \"nearest\" | \"bilinear\" | \"bicubic\" | \"area\" | \"lanczos\".\n            Default: \"bilinear\".\n    \"\"\"\n\n    def __init__(self,\n                 keys,\n                 crop_size,\n                 scale=(0.08, 1.0),\n                 ratio=(3. / 4., 4. / 3.),\n                 interpolation='bilinear'):\n\n        assert keys, 'Keys should not be empty.'\n        if isinstance(crop_size, int):\n            crop_size = (crop_size, crop_size)\n        elif not is_tuple_of(crop_size, int):\n            raise TypeError('\"crop_size\" must be an integer '\n                            'or a tuple of integers, but got '\n                            f'{type(crop_size)}')\n        if not is_tuple_of(scale, float):\n            raise TypeError('\"scale\" must be a tuple of float, '\n                            f'but got {type(scale)}')\n        if not is_tuple_of(ratio, float):\n            raise TypeError('\"ratio\" must be a tuple of float, '\n                            f'but got {type(ratio)}')\n\n        self.keys = keys\n        self.crop_size = crop_size\n        self.scale = scale\n        self.ratio = ratio\n        self.interpolation = interpolation\n\n    def get_params(self, data):\n        \"\"\"Get parameters for a random sized crop.\n\n        Args:\n            data (np.ndarray): Image of type numpy array to be cropped.\n\n        Returns:\n            A tuple containing the coordinates of the top left corner\n            and the chosen crop size.\n        \"\"\"\n\n        data_h, data_w = data.shape[:2]\n        area = data_h * data_w\n\n        for _ in range(10):\n            target_area = random.uniform(*self.scale) * area\n            log_ratio = (math.log(self.ratio[0]), math.log(self.ratio[1]))\n            aspect_ratio = math.exp(random.uniform(*log_ratio))\n\n            crop_w = int(round(math.sqrt(target_area * aspect_ratio)))\n            crop_h = int(round(math.sqrt(target_area / aspect_ratio)))\n\n            if 0 < crop_w <= data_w and 0 < crop_h <= data_h:\n                top = random.randint(0, data_h - crop_h)\n                left = random.randint(0, data_w - crop_w)\n                return top, left, crop_h, crop_w\n\n        # Fall back to center crop\n        in_ratio = float(data_w) / float(data_h)\n        if (in_ratio < min(self.ratio)):\n            crop_w = data_w\n            crop_h = int(round(crop_w / min(self.ratio)))\n        elif (in_ratio > max(self.ratio)):\n            crop_h = data_h\n            crop_w = int(round(crop_h * max(self.ratio)))\n        else:  # whole image\n            crop_w = data_w\n            crop_h = data_h\n        top = (data_h - crop_h) // 2\n        left = (data_w - crop_w) // 2\n\n        return top, left, crop_h, crop_w\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for k in self.keys:\n            top, left, crop_h, crop_w = self.get_params(results[k])\n            crop_bbox = [top, left, crop_w, crop_h]\n            results[k] = results[k][top:top + crop_h, left:left + crop_w, ...]\n            results[k] = mmcv.imresize(\n                results[k],\n                self.crop_size,\n                return_scale=False,\n                interpolation=self.interpolation)\n            results[k + '_crop_bbox'] = crop_bbox\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, crop_size={self.crop_size}, '\n                     f'scale={self.scale}, ratio={self.ratio}, '\n                     f'interpolation={self.interpolation})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass CropAroundCenter(BaseTransform):\n    \"\"\"Randomly crop the images around unknown area in the center 1/4 images.\n\n    This cropping strategy is adopted in GCA matting. The `unknown area` is the\n    same as `semi-transparent area`.\n    https://arxiv.org/pdf/2001.04069.pdf\n\n    It retains the center 1/4 images and resizes the images to 'crop_size'.\n    Required keys are \"fg\", \"bg\", \"trimap\" and \"alpha\", added or modified keys\n    are \"crop_bbox\", \"fg\", \"bg\", \"trimap\" and \"alpha\".\n\n    Args:\n        crop_size (int | tuple): Desired output size. If int, square crop is\n            applied.\n    \"\"\"\n\n    def __init__(self, crop_size):\n        if is_tuple_of(crop_size, int):\n            assert len(crop_size) == 2, 'length of crop_size must be 2.'\n        elif not isinstance(crop_size, int):\n            raise TypeError('crop_size must be int or a tuple of int, but got '\n                            f'{type(crop_size)}')\n        self.crop_size = _pair(crop_size)\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        fg = results['fg']\n        alpha = results['alpha']\n        trimap = results['trimap']\n        bg = results['bg']\n        h, w = fg.shape[:2]\n        assert bg.shape == fg.shape, (f'shape of bg {bg.shape} should be the '\n                                      f'same as fg {fg.shape}.')\n\n        crop_h, crop_w = self.crop_size\n        # Make sure h >= crop_h, w >= crop_w. If not, rescale imgs\n        rescale_ratio = max(crop_h / h, crop_w / w)\n        if rescale_ratio > 1:\n            assert alpha.ndim == trimap.ndim\n            ext_dim = (alpha.ndim == 3)\n\n            new_h = max(int(h * rescale_ratio), crop_h)\n            new_w = max(int(w * rescale_ratio), crop_w)\n            fg = mmcv.imresize(fg, (new_w, new_h), interpolation='nearest')\n            alpha = mmcv.imresize(\n                alpha, (new_w, new_h), interpolation='nearest')\n            trimap = mmcv.imresize(\n                trimap, (new_w, new_h), interpolation='nearest')\n            bg = mmcv.imresize(bg, (new_w, new_h), interpolation='bicubic')\n            h, w = new_h, new_w\n\n            if ext_dim:\n                # mmcv.imresize will squeeze\n                alpha = alpha[..., None]\n                trimap = trimap[..., None]\n\n        # resize to 1/4 to ignore small unknown patches\n        small_trimap = mmcv.imresize(\n            trimap, (w // 4, h // 4), interpolation='nearest')\n        assert small_trimap.ndim == 2\n        # find unknown area in center 1/4 region\n        margin_h, margin_w = crop_h // 2, crop_w // 2\n        sample_area = small_trimap[margin_h // 4:(h - margin_h) // 4,\n                                   margin_w // 4:(w - margin_w) // 4]\n        unknown_xs, unknown_ys = np.where(sample_area == 128)\n        unknown_num = len(unknown_xs)\n        if unknown_num < 10:\n            # too few unknown area in the center, crop from the whole image\n            top = np.random.randint(0, h - crop_h + 1)\n            left = np.random.randint(0, w - crop_w + 1)\n        else:\n            idx = np.random.randint(unknown_num)\n            top = unknown_xs[idx] * 4\n            left = unknown_ys[idx] * 4\n        bottom = top + crop_h\n        right = left + crop_w\n\n        results['fg'] = fg[top:bottom, left:right]\n        results['alpha'] = alpha[top:bottom, left:right]\n        results['trimap'] = trimap[top:bottom, left:right]\n        results['bg'] = bg[top:bottom, left:right]\n        results['crop_bbox'] = (left, top, right, bottom)\n\n        return results\n\n    def __repr__(self):\n\n        return self.__class__.__name__ + f'(crop_size={self.crop_size})'\n\n\n@TRANSFORMS.register_module()\nclass CropAroundFg(BaseTransform):\n    \"\"\"Crop around the whole foreground in the segmentation mask.\n\n    Required keys are \"seg\" and the keys in argument `keys`.\n    Meanwhile, \"seg\" must be in argument `keys`. Added or modified keys are\n    \"crop_bbox\" and the keys in argument `keys`.\n\n    Args:\n        keys (Sequence[str]): The images to be cropped. It must contain\n            'seg'.\n        bd_ratio_range (tuple, optional): The range of the boundary (bd) ratio\n            to select from. The boundary ratio is the ratio of the boundary to\n            the minimal bbox that contains the whole foreground given by\n            segmentation. Default to (0.1, 0.4).\n        test_mode (bool): Whether use test mode. In test mode, the tight crop\n            area of foreground will be extended to the a square.\n            Default to False.\n    \"\"\"\n\n    def __init__(self, keys, bd_ratio_range=(0.1, 0.4), test_mode=False):\n\n        if 'seg' not in keys:\n            raise ValueError(f'\"seg\" must be in keys, but got {keys}')\n        if (not is_tuple_of(bd_ratio_range, float)\n                or len(bd_ratio_range) != 2):\n            raise TypeError('bd_ratio_range must be a tuple of 2 int, but got '\n                            f'{bd_ratio_range}')\n        self.keys = keys\n        self.bd_ratio_range = bd_ratio_range\n        self.test_mode = test_mode\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        seg = results['seg']\n        height, width = seg.shape[:2]\n\n        # get foreground bbox\n        fg_coor = np.array(np.where(seg))\n        top, left = np.amin(fg_coor, axis=1)\n        bottom, right = np.amax(fg_coor, axis=1)\n\n        # enlarge bbox\n        long_side = np.maximum(bottom - top, right - left)\n        if self.test_mode:\n            bottom = top + long_side\n            right = left + long_side\n        boundary_ratio = np.random.uniform(*self.bd_ratio_range)\n        boundary = int(np.round(boundary_ratio * long_side))\n        # NOTE: Different from the original repo, we keep track of the four\n        # corners of the bbox (left, top, right, bottom) while the original\n        # repo use (top, left, height, width) to represent bbox. This may\n        # introduce an difference of 1 pixel.\n        top = max(top - boundary, 0)\n        left = max(left - boundary, 0)\n        bottom = min(bottom + boundary, height)\n        right = min(right + boundary, width)\n\n        for key in self.keys:\n            results[key] = results[key][top:bottom, left:right]\n        results['crop_bbox'] = (left, top, right, bottom)\n\n        return results\n\n\n@TRANSFORMS.register_module()\nclass CropAroundUnknown(BaseTransform):\n    \"\"\"Crop around unknown area with a randomly selected scale.\n\n    Randomly select the w and h from a list of (w, h).\n    Required keys are the keys in argument `keys`, added or\n    modified keys are \"crop_bbox\" and the keys in argument `keys`.\n    This class assumes value of \"alpha\" ranges from 0 to 255.\n\n    Args:\n        keys (Sequence[str]): The images to be cropped. It must contain\n            'alpha'. If unknown_source is set to 'trimap', then it must also\n            contain 'trimap'.\n        crop_sizes (list[int | tuple[int]]): List of (w, h) to be selected.\n        unknown_source (str, optional): Unknown area to select from. It must be\n            'alpha' or 'trimap'. Default to 'alpha'.\n        interpolations (str | list[str], optional): Interpolation method of\n            mmcv.imresize. The interpolation operation will be applied when\n            image size is smaller than the crop_size. If given as a list of\n            str, it should have the same length as `keys`. Or if given as a\n            str all the keys will be resized with the same method.\n            Default to 'bilinear'.\n    \"\"\"\n\n    def __init__(self,\n                 keys,\n                 crop_sizes,\n                 unknown_source='alpha',\n                 interpolations='bilinear'):\n        if 'alpha' not in keys:\n            raise ValueError(f'\"alpha\" must be in keys, but got {keys}')\n        self.keys = keys\n\n        if not isinstance(crop_sizes, list):\n            raise TypeError(\n                f'Crop sizes must be list, but got {type(crop_sizes)}.')\n        self.crop_sizes = [_pair(crop_size) for crop_size in crop_sizes]\n        if not is_tuple_of(self.crop_sizes[0], int):\n            raise TypeError('Elements of crop_sizes must be int or tuple of '\n                            f'int, but got {type(self.crop_sizes[0][0])}.')\n\n        if unknown_source not in ['alpha', 'trimap']:\n            raise ValueError('unknown_source must be \"alpha\" or \"trimap\", '\n                             f'but got {unknown_source}')\n        if unknown_source not in keys:\n            # it could only be trimap, since alpha is checked before\n            raise ValueError(\n                'if unknown_source is \"trimap\", it must also be set in keys')\n        self.unknown_source = unknown_source\n\n        if isinstance(interpolations, str):\n            self.interpolations = [interpolations] * len(self.keys)\n        elif is_list_of(interpolations, str) and len(interpolations) == len(\n                self.keys):\n            self.interpolations = interpolations\n        else:\n            raise TypeError(\n                'interpolations must be a str or list of str with '\n                f'the same length as keys, but got {interpolations}')\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        h, w = results[self.keys[0]].shape[:2]\n\n        rand_ind = np.random.randint(len(self.crop_sizes))\n        crop_h, crop_w = self.crop_sizes[rand_ind]\n\n        # Make sure h >= crop_h, w >= crop_w. If not, rescale imgs\n        rescale_ratio = max(crop_h / h, crop_w / w)\n        if rescale_ratio > 1:\n\n            h = max(int(h * rescale_ratio), crop_h)\n            w = max(int(w * rescale_ratio), crop_w)\n            for key, interpolation in zip(self.keys, self.interpolations):\n                ext_dim = (results[key].ndim == 3) and (results[key].shape[-1]\n                                                        == 1)\n                results[key] = mmcv.imresize(\n                    results[key], (w, h), interpolation=interpolation)\n                if ext_dim:\n                    results[key] = results[key][..., None]\n\n        # Select the cropping top-left point which is an unknown pixel\n        if self.unknown_source == 'alpha':\n            unknown = (results['alpha'] > 0) & (results['alpha'] < 255)\n        else:\n            unknown = results['trimap'] == 128\n        top, left = random_choose_unknown(unknown.squeeze(), (crop_h, crop_w))\n\n        bottom = top + crop_h\n        right = left + crop_w\n\n        for key in self.keys:\n            results[key] = results[key][top:bottom, left:right]\n        results['crop_bbox'] = (left, top, right, bottom)\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, crop_sizes={self.crop_sizes}, '\n                     f\"unknown_source='{self.unknown_source}', \"\n                     f'interpolations={self.interpolations})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomCropLongEdge(BaseTransform):\n    \"\"\"Random crop the given image by the long edge.\n\n    Args:\n        keys (list[str]): The images to be cropped.\n    \"\"\"\n\n    def __init__(self, keys='img'):\n        assert keys, 'Keys should not be empty.'\n        if not isinstance(keys, list):\n            keys = [keys]\n        self.keys = keys\n\n    def transform(self, results):\n        \"\"\"Call function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for key in self.keys:\n            img = results[key]\n            img_height, img_width = img.shape[:2]\n            crop_size = min(img_height, img_width)\n            y1 = 0 if img_height == crop_size else \\\n                np.random.randint(0, img_height - crop_size)\n            x1 = 0 if img_width == crop_size else \\\n                np.random.randint(0, img_width - crop_size)\n            y2, x2 = y1 + crop_size - 1, x1 + crop_size - 1\n\n            img = mmcv.imcrop(img, bboxes=np.array([x1, y1, x2, y2]))\n            results[key] = img\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass CenterCropLongEdge(BaseTransform):\n    \"\"\"Center crop the given image by the long edge.\n\n    Args:\n        keys (list[str]): The images to be cropped.\n    \"\"\"\n\n    def __init__(self, keys='img'):\n        assert keys, 'Keys should not be empty.'\n        if not isinstance(keys, list):\n            keys = [keys]\n        self.keys = keys\n\n    def transform(self, results):\n        \"\"\"Call function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        for key in self.keys:\n            img = results[key]\n            img_height, img_width = img.shape[:2]\n            crop_size = min(img_height, img_width)\n            y1 = 0 if img_height == crop_size else \\\n                int(round(img_height - crop_size) / 2)\n            x1 = 0 if img_width == crop_size else \\\n                int(round(img_width - crop_size) / 2)\n            y2 = y1 + crop_size - 1\n            x2 = x1 + crop_size - 1\n\n            img = mmcv.imcrop(img, bboxes=np.array([x1, y1, x2, y2]))\n            results[key] = img\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass InstanceCrop(BaseTransform):\n    \"\"\"Use maskrcnn to detect instances on image.\n\n    Mask R-CNN is used to detect the instance on the image\n    pred_bbox is used to segment the instance on the image\n\n    Args:\n        config_file (str): config file name relative to detectron2's \"configs/\"\n        key (str): Unused\n        box_num_upbound (int):The upper limit on the number of instances\n            in the figure\n    \"\"\"\n\n    def __init__(self,\n                 config_file,\n                 from_pretrained=None,\n                 key='img',\n                 box_num_upbound=-1,\n                 finesize=256):\n\n        assert mmdet_apis is not None, (\n            \"Cannot import 'mmdet'. Please install 'mmdet' via \"\n            \"\\\"mim install 'mmdet >= 3.0.0'\\\".\")\n\n        cfg = get_config(config_file, pretrained=True)\n\n        # loading checkpoint from local path\n        if from_pretrained is not None:\n            cfg.model.backbone.init_cfg.checkpoint = from_pretrained\n\n        with DefaultScope.overwrite_default_scope('mmdet'):\n            self.predictor = mmdet_apis.init_detector(cfg, cfg.model_path)\n\n        self.key = key\n        self.box_num_upbound = box_num_upbound\n        self.final_size = finesize\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"The transform function of InstanceCrop.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for Conversion\n\n        Returns:\n            results (dict): A dict containing the processed data\n                and information.\n        \"\"\"\n        # get consistent box prediction based on L channel\n\n        full_img = results['img']\n        full_img_size = results['ori_img_shape'][:-1][::-1]\n        pred_bbox, pred_scores = self.predict_bbox(full_img)\n\n        if self.box_num_upbound > 0 and pred_bbox.shape[\n                0] > self.box_num_upbound:\n            index_mask = np.argsort(pred_scores, axis=0)\n            index_mask = index_mask[pred_scores.shape[0] -\n                                    self.box_num_upbound:pred_scores.shape[0]]\n            pred_bbox = pred_bbox[index_mask]\n\n        # get cropped images and box info\n        cropped_img_list = []\n        index_list = range(len(pred_bbox))\n        box_info, box_info_2x, box_info_4x, box_info_8x = np.zeros(\n            (4, len(index_list), 6))\n        for i in index_list:\n            startx, starty, endx, endy = pred_bbox[i]\n            cropped_img = full_img[starty:endy, startx:endx, :]\n            cropped_img_list.append(cropped_img)\n            box_info[i] = np.array(\n                get_box_info(pred_bbox[i], full_img_size, self.final_size))\n            box_info_2x[i] = np.array(\n                get_box_info(pred_bbox[i], full_img_size,\n                             self.final_size // 2))\n            box_info_4x[i] = np.array(\n                get_box_info(pred_bbox[i], full_img_size,\n                             self.final_size // 4))\n            box_info_8x[i] = np.array(\n                get_box_info(pred_bbox[i], full_img_size,\n                             self.final_size // 8))\n\n        # update results\n        if len(pred_bbox) > 0:\n            results['cropped_img'] = cropped_img_list\n            results['box_info'] = torch.from_numpy(box_info).type(torch.long)\n            results['box_info_2x'] = torch.from_numpy(box_info_2x).type(\n                torch.long)\n            results['box_info_4x'] = torch.from_numpy(box_info_4x).type(\n                torch.long)\n            results['box_info_8x'] = torch.from_numpy(box_info_8x).type(\n                torch.long)\n            results['empty_box'] = False\n        else:\n            results['empty_box'] = True\n        return results\n\n    def predict_bbox(self, image):\n        lab_image = cv.cvtColor(image, cv.COLOR_BGR2LAB)\n        l_channel, _, _ = cv.split(lab_image)\n        l_stack = np.stack([l_channel, l_channel, l_channel], axis=2)\n\n        with DefaultScope.overwrite_default_scope('mmdet'):\n            with torch.no_grad():\n                results = mmdet_apis.inference_detector(\n                    self.predictor, l_stack)\n\n        bboxes = results.pred_instances.bboxes.cpu().numpy().astype(np.int32)\n        scores = results.pred_instances.scores.cpu().numpy()\n        index_mask = [i for i, x in enumerate(scores) if x >= 0.7]\n        scores = np.array(scores[index_mask])\n        bboxes = np.array(bboxes[index_mask])\n        return bboxes, scores\n"
  },
  {
    "path": "mmagic/datasets/transforms/fgbg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Augmentation on foreground and background.\"\"\"\n\nimport numbers\nimport os.path as osp\n\nimport mmcv\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.utils import add_gaussian_noise, adjust_gamma\n\n\n@TRANSFORMS.register_module()\nclass CompositeFg(BaseTransform):\n    \"\"\"Composite foreground with a random foreground.\n\n    This class composites the current training sample with additional data\n    randomly (could be from the same dataset). With probability 0.5, the sample\n    will be composited with a random sample from the specified directory.\n    The composition is performed as:\n\n    .. math::\n        fg_{new} = \\\\alpha_1 * fg_1 + (1 - \\\\alpha_1) * fg_2\n\n        \\\\alpha_{new} = 1 - (1 - \\\\alpha_1) * (1 - \\\\alpha_2)\n\n    where :math:`(fg_1, \\\\alpha_1)` is from the current sample and\n    :math:`(fg_2, \\\\alpha_2)` is the randomly loaded sample. With the above\n    composition, :math:`\\\\alpha_{new}` is still in `[0, 1]`.\n\n    Required keys are \"alpha\" and \"fg\". Modified keys are \"alpha\" and \"fg\".\n\n    Args:\n        fg_dirs (str | list[str]): Path of directories to load foreground\n            images from.\n        alpha_dirs (str | list[str]): Path of directories to load alpha mattes\n            from.\n        interpolation (str): Interpolation method of `mmcv.imresize` to resize\n            the randomly loaded images. Default: 'nearest'.\n    \"\"\"\n\n    def __init__(self, fg_dirs, alpha_dirs, interpolation='nearest'):\n        # TODO try fetch the path from dataset\n        self.fg_dirs = fg_dirs if isinstance(fg_dirs, list) else [fg_dirs]\n        self.alpha_dirs = alpha_dirs if isinstance(alpha_dirs,\n                                                   list) else [alpha_dirs]\n        self.interpolation = interpolation\n\n        self.file_backend = get_file_backend(uri=fg_dirs[0])\n\n        self.fg_list, self.alpha_list = self._get_file_list(\n            self.fg_dirs, self.alpha_dirs)\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        fg = results['fg']\n        alpha = results['alpha'] / 255.0  # float64, H, W, 1\n        h, w = results['fg'].shape[:2]\n\n        # randomly select fg\n        if np.random.rand() < 0.5:\n            idx = np.random.randint(len(self.fg_list))\n            fg2_bytes = self.file_backend.get(self.fg_list[idx])\n            fg2 = mmcv.imfrombytes(fg2_bytes)\n            alpha2_bytes = self.file_backend.get(self.alpha_list[idx])\n            alpha2 = mmcv.imfrombytes(alpha2_bytes, flag='grayscale')\n            alpha2 = alpha2 / 255.0  # float64\n            fg2 = mmcv.imresize(fg2, (w, h), interpolation=self.interpolation)\n            alpha2 = mmcv.imresize(\n                alpha2, (w, h), interpolation=self.interpolation)\n            alpha2 = alpha2[..., None]\n\n            # the overlap of two 50% transparency will be 75%\n            alpha_tmp = 1 - (1 - alpha) * (1 - alpha2)\n            # if the result alpha is all-one, then we avoid composition\n            if np.any(alpha_tmp < 1):\n                # composite fg with fg2\n                fg = fg * alpha + fg2 * (1 - alpha)\n                alpha = alpha_tmp\n\n        results['fg'] = fg\n        results['alpha'] = alpha * 255\n        return results\n\n    def _get_file_list(self, fg_dirs, alpha_dirs):\n        all_fg_list = list()\n        all_alpha_list = list()\n        for fg_dir, alpha_dir in zip(fg_dirs, alpha_dirs):\n            fg_list = sorted(\n                self.file_backend.list_dir_or_file(fg_dir, list_dir=False))\n            alpha_list = sorted(\n                self.file_backend.list_dir_or_file(alpha_dir, list_dir=False))\n            # we assume the file names for fg and alpha are the same\n            assert len(fg_list) == len(alpha_list), (\n                f'{fg_dir} and {alpha_dir} should have the same number of '\n                f'images ({len(fg_list)} differs from ({len(alpha_list)})')\n            fg_list = [osp.join(fg_dir, fg) for fg in fg_list]\n            alpha_list = [osp.join(alpha_dir, alpha) for alpha in alpha_list]\n\n            all_fg_list.extend(fg_list)\n            all_alpha_list.extend(alpha_list)\n        return all_fg_list, all_alpha_list\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(fg_dirs={repr(self.fg_dirs)}, '\n                     f'alpha_dirs={repr(self.alpha_dirs)}, '\n                     f'interpolation={repr(self.interpolation)})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass MergeFgAndBg(BaseTransform):\n    \"\"\"Composite foreground image and background image with alpha.\n\n    Required keys are \"alpha\", \"fg\" and \"bg\", added key is \"merged\".\n    \"\"\"\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        alpha = results['alpha'].astype(np.float32) / 255.\n        fg = results['fg']\n        bg = results['bg']\n        merged = fg * alpha + (1. - alpha) * bg\n        results['merged'] = merged\n        return results\n\n    def __repr__(self) -> str:\n        repr_str = f'{self.__class__.__name__}()'\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass PerturbBg(BaseTransform):\n    \"\"\"Randomly add gaussian noise or gamma change to background image.\n\n    Required key is \"bg\", added key is \"noisy_bg\".\n\n    Args:\n        gamma_ratio (float, optional): The probability to use gamma correction\n            instead of gaussian noise. Defaults to 0.6.\n    \"\"\"\n\n    def __init__(self, gamma_ratio=0.6):\n        if gamma_ratio < 0 or gamma_ratio > 1:\n            raise ValueError('gamma_ratio must be a float between [0, 1], '\n                             f'but got {gamma_ratio}')\n        self.gamma_ratio = gamma_ratio\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        if np.random.rand() >= self.gamma_ratio:\n            # generate gaussian noise with random gaussian N([-7, 7), [2, 6))\n            mu = np.random.randint(-7, 7)\n            sigma = np.random.randint(2, 6)\n            results['noisy_bg'] = add_gaussian_noise(results['bg'], mu, sigma)\n        else:\n            # adjust gamma in a range of N(1, 0.12)\n            gamma = np.random.normal(1, 0.12)\n            results['noisy_bg'] = adjust_gamma(results['bg'], gamma)\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + f'(gamma_ratio={self.gamma_ratio})'\n\n\n@TRANSFORMS.register_module()\nclass RandomJitter(BaseTransform):\n    \"\"\"Randomly jitter the foreground in hsv space.\n\n    The jitter range of hue is adjustable while the jitter ranges of saturation\n    and value are adaptive to the images. Side effect: the \"fg\" image will be\n    converted to `np.float32`.\n    Required keys are \"fg\" and \"alpha\", modified key is \"fg\".\n\n    Args:\n        hue_range (float | tuple[float]): Range of hue jittering. If it is a\n            float instead of a tuple like (min, max), the range of hue\n            jittering will be (-hue_range, +hue_range). Default: 40.\n    \"\"\"\n\n    def __init__(self, hue_range=40):\n\n        if isinstance(hue_range, numbers.Number):\n            assert hue_range >= 0, ('If hue_range is a single number, '\n                                    'it must be positive.')\n            self.hue_range = (-hue_range, hue_range)\n        else:\n            assert isinstance(hue_range, tuple) and len(hue_range) == 2, \\\n                'hue_range should be a tuple and it must be of length 2.'\n            self.hue_range = hue_range\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        fg, alpha = results['fg'], results['alpha']\n        alpha = alpha[:, :, 0]\n\n        # convert to HSV space;\n        # convert to float32 image to keep precision during space conversion.\n        fg = mmcv.bgr2hsv(fg.astype(np.float32) / 255)\n        # Hue noise\n        hue_jitter = np.random.randint(self.hue_range[0], self.hue_range[1])\n        fg[:, :, 0] = np.remainder(fg[:, :, 0] + hue_jitter, 360)\n\n        # Saturation noise\n        sat_mean = fg[:, :, 1][alpha > 0].mean()\n        # jitter saturation within range (1.1 - sat_mean) * [-0.1, 0.1]\n        sat_jitter = (1.1 - sat_mean) * (np.random.rand() * 0.2 - 0.1)\n        sat = fg[:, :, 1]\n        sat = np.abs(sat + sat_jitter)\n        sat[sat > 1] = 2 - sat[sat > 1]\n        fg[:, :, 1] = sat\n\n        # Value noise\n        val_mean = fg[:, :, 2][alpha > 0].mean()\n        # jitter value within range (1.1 - val_mean) * [-0.1, 0.1]\n        val_jitter = (1.1 - val_mean) * (np.random.rand() * 0.2 - 0.1)\n        val = fg[:, :, 2]\n        val = np.abs(val + val_jitter)\n        val[val > 1] = 2 - val[val > 1]\n        fg[:, :, 2] = val\n        # convert back to BGR space\n        fg = mmcv.hsv2bgr(fg)\n        results['fg'] = fg * 255\n\n        return results\n\n    def __repr__(self):\n\n        return self.__class__.__name__ + f'hue_range={self.hue_range}'\n\n\n@TRANSFORMS.register_module()\nclass RandomLoadResizeBg(BaseTransform):\n    \"\"\"Randomly load a background image and resize it.\n\n    Required key is \"fg\", added key is \"bg\".\n\n    Args:\n        bg_dir (str): Path of directory to load background images from.\n        flag (str): Loading flag for images. Default: 'color'.\n        channel_order (str): Order of channel, candidates are 'bgr' and 'rgb'.\n            Default: 'bgr'.\n        kwargs (dict): Args for file client.\n    \"\"\"\n\n    def __init__(self, bg_dir, flag='color', channel_order='bgr'):\n        self.bg_dir = bg_dir\n\n        self.file_backend = get_file_backend(uri=bg_dir)\n        self.bg_list = list(\n            self.file_backend.list_dir_or_file(bg_dir, list_dir=False))\n\n        self.flag = flag\n        self.channel_order = channel_order\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        h, w = results['fg'].shape[:2]\n        idx = np.random.randint(len(self.bg_list))\n        filepath = f'{self.bg_dir}/{self.bg_list[idx]}'\n        img_bytes = self.file_backend.get(filepath)\n        img = mmcv.imfrombytes(\n            img_bytes, flag=self.flag, channel_order=self.channel_order)  # HWC\n        bg = mmcv.imresize(img, (w, h), interpolation='bicubic')\n        results['bg'] = bg\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + f\"(bg_dir='{self.bg_dir}')\"\n"
  },
  {
    "path": "mmagic/datasets/transforms/formatting.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Tuple\n\nfrom mmcv.transforms.base import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import all_to_tensor\n\n\n@TRANSFORMS.register_module()\nclass PackInputs(BaseTransform):\n    \"\"\"Pack data into DataSample for training, evaluation and testing.\n\n    MMagic follows the design of data structure from MMEngine.\n        Data from the loader will be packed into data field of DataSample.\n        More details of DataSample refer to the documentation of MMEngine:\n        https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html\n\n    Args:\n        keys Tuple[List[str], str, None]: The keys to saved in returned\n            inputs, which are used as the input of models, default to\n            ['img', 'noise', 'merged'].\n        data_keys Tuple[List[str], str, None]: The keys to saved in\n            `data_field` of the `data_samples`.\n        meta_keys Tuple[List[str], str, None]: The meta keys to saved\n            in `metainfo` of the `data_samples`. All the other data will\n            be packed into the data of the `data_samples`\n    \"\"\"\n\n    def __init__(\n        self,\n        keys: Tuple[List[str], str] = ['merged', 'img'],\n        meta_keys: Tuple[List[str], str] = [],\n        data_keys: Tuple[List[str], str] = [],\n    ) -> None:\n\n        assert keys is not None, \\\n            'keys in PackInputs can not be None.'\n        assert data_keys is not None, \\\n            'data_keys in PackInputs can not be None.'\n        assert meta_keys is not None, \\\n            'meta_keys in PackInputs can not be None.'\n\n        self.keys = keys if isinstance(keys, List) else [keys]\n        self.data_keys = data_keys if isinstance(data_keys,\n                                                 List) else [data_keys]\n        self.meta_keys = meta_keys if isinstance(meta_keys,\n                                                 List) else [meta_keys]\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Method to pack the input data.\n\n        Args:\n            results (dict): Result dict from the data pipeline.\n\n        Returns:\n            dict: A dict contains\n\n            - 'inputs' (obj:`dict`): The forward data of models.\n              According to different tasks, the `inputs` may contain images,\n              videos, labels, text, etc.\n\n            - 'data_samples' (obj:`DataSample`): The annotation info of the\n                sample.\n        \"\"\"\n\n        # prepare inputs\n        inputs = dict()\n        for k in self.keys:\n            value = results.get(k, None)\n            if value is not None:\n                inputs[k] = all_to_tensor(value)\n\n        # return the inputs as tensor, if it has only one item\n        if len(inputs.values()) == 1:\n            inputs = list(inputs.values())[0]\n\n        data_sample = DataSample()\n        # prepare metainfo and data in DataSample according to predefined keys\n        predefined_data = {\n            k: v\n            for (k, v) in results.items()\n            if k not in (self.data_keys + self.meta_keys)\n        }\n        data_sample.set_predefined_data(predefined_data)\n\n        # prepare metainfo in DataSample according to user-provided meta_keys\n        required_metainfo = {\n            k: v\n            for (k, v) in results.items() if k in self.meta_keys\n        }\n        data_sample.set_metainfo(required_metainfo)\n\n        # prepare metainfo in DataSample according to user-provided data_keys\n        required_data = {\n            k: v\n            for (k, v) in results.items() if k in self.data_keys\n        }\n        data_sample.set_tensor_data(required_data)\n\n        return {'inputs': inputs, 'data_samples': data_sample}\n\n    def __repr__(self) -> str:\n\n        repr_str = self.__class__.__name__\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/generate_assistant.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nfrom mmcv.transforms.base import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.utils import all_to_tensor, make_coord\n\ntry:\n    import face_alignment\n    has_face_alignment = True\nexcept ImportError:\n    has_face_alignment = False\n\n\n@TRANSFORMS.register_module()\nclass GenerateCoordinateAndCell(BaseTransform):\n    \"\"\"Generate coordinate and cell. Generate coordinate from the desired size\n    of SR image.\n\n    Train or val:\n\n    #. Generate coordinate from GT.\n\n    #. Reshape GT image to (HgWg, 3) and transpose to (3, HgWg).\n    where `Hg` and `Wg` represent the height and width of GT.\n\n    Test:\n\n    #. Generate coordinate from LQ and scale or target_size.\n\n    #. Then generate cell from coordinate.\n\n    Args:\n        sample_quantity (int | None): The quantity of samples in coordinates.\n            To ensure that the GT tensors in a batch have the same dimensions.\n            Default: None.\n        scale (float): Scale of upsampling.\n            Default: None.\n        target_size (tuple[int]): Size of target image.\n            Default: None.\n        reshape_gt (bool): Whether reshape gt to (-1, 3). Default: True\n            If sample_quantity is not None, reshape_gt = True.\n\n    The priority of getting 'size of target image' is:\n\n    #. results['gt'].shape[-2:]\n\n    #. results['lq'].shape[-2:] * scale\n\n    #. target_size\n    \"\"\"\n\n    def __init__(self,\n                 sample_quantity=None,\n                 scale=None,\n                 target_size=None,\n                 reshape_gt=True):\n\n        self.sample_quantity = sample_quantity\n        self.scale = scale\n        self.target_size = target_size\n        self.reshape_gt = reshape_gt or sample_quantity is not None\n\n    def transform(self, results):\n        \"\"\"Call function.\n\n        Args:\n            results (dict): A dict containing the necessary information\n            and data for augmentation.\n            Require either in results:\n            1. 'lq' (tensor), whose shape is similar as (3, H, W).\n            2. 'gt' (tensor), whose shape is similar as (3, H, W).\n            3. None, the premise is self.target_size and\n            len(self.target_size) >= 2.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n            Reshape 'gt' to (-1, 3) and transpose to (3, -1)\n            if 'gt' in results.\n            Add 'coord' and 'cell'.\n        \"\"\"\n\n        # generate hr_coord (and hr_rgb)\n        if 'gt' in results:\n            crop_hr = results['gt']\n            crop_hr = all_to_tensor(crop_hr)\n            self.target_size = crop_hr.shape\n            if self.reshape_gt:\n                hr_rgb = crop_hr.contiguous().view(3, -1).permute(1, 0)\n                results['gt'] = hr_rgb\n        elif self.scale is not None and 'img' in results:\n            _, h_lr, w_lr = results['img'].shape\n            self.target_size = (round(h_lr * self.scale),\n                                round(w_lr * self.scale))\n        else:\n            assert self.target_size is not None\n            assert len(self.target_size) >= 2\n        hr_coord = make_coord(self.target_size[-2:])\n\n        if self.sample_quantity is not None and 'gt' in results:\n            sample_lst = np.random.choice(\n                len(hr_coord), self.sample_quantity, replace=False)\n            hr_coord = hr_coord[sample_lst]\n            results['gt'] = results['gt'][sample_lst]\n\n        # Preparations for cell decoding\n        cell = torch.ones_like(hr_coord)\n        cell[:, 0] *= 2 / self.target_size[-2]\n        cell[:, 1] *= 2 / self.target_size[-1]\n\n        results['coord'] = hr_coord\n        results['cell'] = cell\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(sample_quantity={self.sample_quantity}, '\n                     f'scale={self.scale}, target_size={self.target_size}, '\n                     f'reshape_gt={self.reshape_gt})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass GenerateFacialHeatmap(BaseTransform):\n    \"\"\"Generate heatmap from keypoint.\n\n    Args:\n        image_key  (str): Key of facial image in dict.\n        ori_size (int | Tuple[int]): Original image size of keypoint.\n        target_size (int | Tuple[int]): Target size of heatmap.\n        sigma (float): Sigma parameter of heatmap. Default: 1.0\n        use_cache (bool): If True, load all heatmap at once. Default: True.\n    \"\"\"\n\n    def __init__(self,\n                 image_key,\n                 ori_size,\n                 target_size,\n                 sigma=1.0,\n                 use_cache=True):\n        if isinstance(ori_size, int):\n            ori_size = (ori_size, ori_size)\n        else:\n            ori_size = ori_size[:2]\n        if isinstance(target_size, int):\n            target_size = (target_size, target_size)\n        else:\n            target_size = target_size[:2]\n        self.size_ratio = (target_size[0] / ori_size[0],\n                           target_size[1] / ori_size[1])\n        self.image_key = image_key\n        self.sigma = sigma\n        self.target_size = target_size\n        self.ori_size = ori_size\n        self.use_cache = use_cache\n        if use_cache:\n            self.cache = dict()\n\n        assert has_face_alignment, 'please import face-alignment.'\n        device = 'cpu'\n        self.face_alignment_model = face_alignment.FaceAlignment(\n            face_alignment.LandmarksType._2D, device=device, flip_input=False)\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation. Require keypoint.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n                Add 'heatmap'.\n        \"\"\"\n\n        img = results[self.image_key]\n\n        if self.use_cache:\n            hash_key = f\"{self.image_key}_{results['key']}\"\n            if hash_key in self.cache:\n                heatmap = self.cache[hash_key]\n            else:\n                heatmap = self.generate_heatmap_from_img(img)\n                self.cache[hash_key] = heatmap\n        else:\n            heatmap = self.generate_heatmap_from_img(img)\n\n        results[f'{self.image_key}_heatmap'] = heatmap.astype(np.float32)\n\n        return results\n\n    def generate_heatmap_from_img(self, image):\n        \"\"\"Generate heatmap from img.\n\n        Args:\n            image (np.ndarray): Face image.\n\n        results:\n            heatmap (np.ndarray): Heatmap the face image.\n        \"\"\"\n\n        landmark = self._face_alignment_detector(image)\n\n        keypoint_list = [(keypoint[0] * self.size_ratio[0],\n                          keypoint[1] * self.size_ratio[1])\n                         for keypoint in landmark]\n        heatmap_list = [\n            self._generate_one_heatmap(keypoint) for keypoint in keypoint_list\n        ]\n\n        return np.stack(heatmap_list, axis=2)\n\n    def _face_alignment_detector(self, image):\n        \"\"\"Generate face landmark by face_alignment.\n\n        Args:\n            image (np.ndarray): Face image.\n\n        Returns:\n            landmark (Tuple[float]): Location of landmark.\n        \"\"\"\n\n        faces = self.face_alignment_model.get_landmarks(image)\n        index = 0\n        max_size = 0\n        for i, face in enumerate(faces):\n            size = face[8, 1] - face[19, 1]\n            if size > max_size:\n                max_size = size\n                index = i\n        landmark = faces[index]\n\n        return landmark\n\n    def _generate_one_heatmap(self, keypoint):\n        \"\"\"Generate One Heatmap.\n\n        Args:\n            keypoint (Tuple[float]): Location of a landmark.\n\n        results:\n            heatmap (np.ndarray): A heatmap of landmark.\n        \"\"\"\n\n        h, w = self.target_size\n\n        x_range = np.arange(start=0, stop=w, dtype=int)\n        y_range = np.arange(start=0, stop=h, dtype=int)\n        grid_x, grid_y = np.meshgrid(x_range, y_range)\n        dist2 = (grid_x - keypoint[0])**2 + (grid_y - keypoint[1])**2\n        exponent = dist2 / 2.0 / self.sigma / self.sigma\n        heatmap = np.exp(-exponent)\n\n        return heatmap\n\n    def __repr__(self):\n\n        return (f'{self.__class__.__name__}'\n                f'(image_key={self.image_key}, '\n                f'ori_size={self.ori_size}, '\n                f'target_size={self.target_size}, '\n                f'sigma={self.sigma}, '\n                f'use_cache={self.use_cache})')\n"
  },
  {
    "path": "mmagic/datasets/transforms/generate_frame_indices.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\n\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass GenerateFrameIndices(BaseTransform):\n    \"\"\"Generate frame index for REDS datasets. It also performs temporal\n    augmentation with random interval.\n\n    Required Keys:\n\n    - img_path\n    - gt_path\n    - key\n    - num_input_frames\n\n    Modified Keys:\n\n    - img_path\n    - gt_path\n\n    Added Keys:\n\n    - interval\n    - reverse\n\n    Args:\n        interval_list (list[int]): Interval list for temporal augmentation.\n            It will randomly pick an interval from interval_list and sample\n            frame index with the interval.\n        frames_per_clip(int): Number of frames per clips. Default: 99 for\n            REDS dataset.\n    \"\"\"\n\n    def __init__(self, interval_list, frames_per_clip=99):\n\n        self.interval_list = interval_list\n        self.frames_per_clip = frames_per_clip\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        clip_name, frame_name = results['key'].split(\n            os.sep)  # key example: 000/00000000\n        center_frame_idx = int(frame_name)\n        num_half_frames = results['num_input_frames'] // 2\n\n        sequence_length = results.get('sequence_length',\n                                      self.frames_per_clip + 1)\n        frames_per_clip = min(self.frames_per_clip, sequence_length - 1)\n\n        interval = np.random.choice(self.interval_list)\n        # ensure not exceeding the borders\n        start_frame_idx = center_frame_idx - num_half_frames * interval\n        end_frame_idx = center_frame_idx + num_half_frames * interval\n        while (start_frame_idx < 0) or (end_frame_idx > frames_per_clip):\n            center_frame_idx = np.random.randint(0, frames_per_clip + 1)\n            start_frame_idx = center_frame_idx - num_half_frames * interval\n            end_frame_idx = center_frame_idx + num_half_frames * interval\n        frame_name = f'{center_frame_idx:08d}'\n        neighbor_list = list(\n            range(center_frame_idx - num_half_frames * interval,\n                  center_frame_idx + num_half_frames * interval + 1, interval))\n\n        img_path_root = results['img_path']\n        gt_path_root = results['gt_path']\n        img_path = [\n            osp.join(img_path_root, clip_name, f'{v:08d}.png')\n            for v in neighbor_list\n        ]\n        gt_path = [osp.join(gt_path_root, clip_name, f'{frame_name}.png')]\n\n        results['img_path'] = img_path\n        results['gt_path'] = gt_path\n        results['interval'] = interval\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(interval_list={self.interval_list}, '\n                     f'frames_per_clip={self.frames_per_clip})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass GenerateFrameIndiceswithPadding(BaseTransform):\n    \"\"\"Generate frame index with padding for REDS dataset and Vid4 dataset\n    during testing.\n\n    Required Keys:\n\n    - img_path\n    - gt_path\n    - key\n    - num_input_frames\n    - sequence_length\n\n    Modified Keys:\n\n    - img_path\n    - gt_path\n\n    Args:\n         padding (str): padding mode, one of\n            'replicate' | 'reflection' | 'reflection_circle' | 'circle'.\n\n            Examples: current_idx = 0, num_input_frames = 5\n            The generated frame indices under different padding mode:\n\n                replicate: [0, 0, 0, 1, 2]\n                reflection: [2, 1, 0, 1, 2]\n                reflection_circle: [4, 3, 0, 1, 2]\n                circle: [3, 4, 0, 1, 2]\n\n        filename_tmpl (str): Template for file name. Default: '{:08d}'.\n    \"\"\"\n\n    def __init__(self, padding, filename_tmpl='{:08d}'):\n\n        if padding not in ('replicate', 'reflection', 'reflection_circle',\n                           'circle'):\n            raise ValueError(f'Wrong padding mode {padding}.'\n                             'Should be \"replicate\", \"reflection\", '\n                             '\"reflection_circle\",  \"circle\"')\n        self.padding = padding\n        self.filename_tmpl = filename_tmpl\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        clip_name, frame_name = results['key'].split(os.sep)\n        current_idx = int(frame_name)\n        sequence_length = results['sequence_length'] - 1  # start from 0\n        num_input_frames = results['num_input_frames']\n        num_pad = num_input_frames // 2\n\n        frame_list = []\n        for i in range(current_idx - num_pad, current_idx + num_pad + 1):\n            if i < 0:\n                if self.padding == 'replicate':\n                    pad_idx = 0\n                elif self.padding == 'reflection':\n                    pad_idx = -i\n                elif self.padding == 'reflection_circle':\n                    pad_idx = current_idx + num_pad - i\n                else:\n                    pad_idx = num_input_frames + i\n            elif i > sequence_length:\n                if self.padding == 'replicate':\n                    pad_idx = sequence_length\n                elif self.padding == 'reflection':\n                    pad_idx = sequence_length * 2 - i\n                elif self.padding == 'reflection_circle':\n                    pad_idx = (current_idx - num_pad) - (i - sequence_length)\n                else:\n                    pad_idx = i - num_input_frames\n            else:\n                pad_idx = i\n            frame_list.append(pad_idx)\n\n        img_path_root = results['img_path']\n        gt_path_root = results['gt_path']\n        img_paths = [\n            osp.join(img_path_root, clip_name,\n                     f'{self.filename_tmpl.format(idx)}.png')\n            for idx in frame_list\n        ]\n        gt_paths = [osp.join(gt_path_root, clip_name, f'{frame_name}.png')]\n\n        results['img_path'] = img_paths\n        results['gt_path'] = gt_paths\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__ + f\"(padding='{self.padding}')\"\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass GenerateSegmentIndices(BaseTransform):\n    \"\"\"Generate frame indices for a segment. It also performs temporal\n    augmentation with random interval.\n\n    Required Keys:\n\n    - img_path\n    - gt_path\n    - key\n    - num_input_frames\n    - sequence_length\n\n    Modified Keys:\n\n    - img_path\n    - gt_path\n\n    Added Keys:\n\n    - interval\n    - reverse\n\n    Args:\n        interval_list (list[int]): Interval list for temporal augmentation.\n            It will randomly pick an interval from interval_list and sample\n            frame index with the interval.\n        start_idx (int): The index corresponds to the first frame in the\n            sequence. Default: 0.\n        filename_tmpl (str): Template for file name. Default: '{:08d}.png'.\n    \"\"\"\n\n    def __init__(self, interval_list, start_idx=0, filename_tmpl='{:08d}.png'):\n\n        self.interval_list = interval_list\n        self.filename_tmpl = filename_tmpl\n        self.start_idx = start_idx\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        # key example: '000', 'calendar' (sequence name)\n        clip_name = results['key']\n        interval = np.random.choice(self.interval_list)\n\n        self.sequence_length = results['sequence_length']\n        num_input_frames = results.get('num_input_frames',\n                                       self.sequence_length)\n        if num_input_frames is None:\n            num_input_frames = self.sequence_length\n\n        # randomly select a frame as start\n        if self.sequence_length - num_input_frames * interval < 0:\n            raise ValueError('The input sequence is not long enough to '\n                             'support the current choice of [interval] or '\n                             '[num_input_frames].')\n        start_frame_idx = np.random.randint(\n            0, self.sequence_length - num_input_frames * interval + 1)\n        end_frame_idx = start_frame_idx + num_input_frames * interval\n        neighbor_list = list(range(start_frame_idx, end_frame_idx, interval))\n        neighbor_list = [v + self.start_idx for v in neighbor_list]\n\n        # add the corresponding file paths\n        img_path_root = results['img_path']\n        gt_path_root = results['gt_path']\n        img_path = [\n            osp.join(img_path_root, clip_name, self.filename_tmpl.format(v))\n            for v in neighbor_list\n        ]\n        gt_path = [\n            osp.join(gt_path_root, clip_name, self.filename_tmpl.format(v))\n            for v in neighbor_list\n        ]\n\n        results['img_path'] = img_path\n        results['gt_path'] = gt_path\n        results['interval'] = interval\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(interval_list={self.interval_list})')\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/get_masked_image.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nfrom mmcv.transforms.base import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass GetMaskedImage(BaseTransform):\n    \"\"\"Get masked image.\n\n    Args:\n        img_key (str): Key for clean image. Default: 'gt'.\n        mask_key (str): Key for mask image. The mask shape should be\n            (h, w, 1) while '1' indicate holes and '0' indicate valid\n            regions. Default: 'mask'.\n        img_key (str): Key for output image. Default: 'img'.\n        zero_value (float): Pixel value of masked area.\n    \"\"\"\n\n    def __init__(self,\n                 img_key='gt',\n                 mask_key='mask',\n                 out_key='img',\n                 zero_value=127.5):\n        self.img_key = img_key\n        self.mask_key = mask_key\n        self.out_key = out_key\n        self.zero_value = zero_value\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        clean_img = results[self.img_key]  # uint8\n        mask = results[self.mask_key]  # uint8\n\n        masked_img = clean_img * (1.0 - mask) + self.zero_value * mask\n        masked_img = masked_img.astype(np.float32)\n        results[self.out_key] = masked_img\n\n        # copy metainfo\n        if f'ori_{self.img_key}_shape' in results:\n            results[f'ori_{self.out_key}_shape'] = deepcopy(\n                results[f'ori_{self.img_key}_shape'])\n        if f'{self.img_key}_channel_order' in results:\n            results[f'{self.out_key}_channel_order'] = deepcopy(\n                results[f'{self.img_key}_channel_order'])\n        if f'{self.img_key}_color_type' in results:\n            results[f'{self.out_key}_color_type'] = deepcopy(\n                results[f'{self.img_key}_color_type'])\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + (\n            f'(img_key={repr(self.img_key)}, '\n            f'mask_key={repr(self.mask_key)}, '\n            f'out_key={repr(self.out_key)}, '\n            f'zero_value={repr(self.zero_value)})')\n"
  },
  {
    "path": "mmagic/datasets/transforms/loading.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom typing import List, Optional, Tuple\n\nimport mmcv\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.fileio import get_file_backend, list_from_file\n\nfrom mmagic.registry import TRANSFORMS\nfrom mmagic.utils import (bbox2mask, brush_stroke_mask, get_irregular_mask,\n                          random_bbox)\n\n\n@TRANSFORMS.register_module()\nclass LoadImageFromFile(BaseTransform):\n    \"\"\"Load a single image or image frames from corresponding paths. Required\n    Keys:\n    - [Key]_path\n\n    New Keys:\n    - [KEY]\n    - ori_[KEY]_shape\n    - ori_[KEY]\n\n    Args:\n        key (str): Keys in results to find corresponding path.\n        color_type (str): The flag argument for :func:``mmcv.imfrombytes``.\n            Defaults to 'color'.\n        channel_order (str): Order of channel, candidates are 'bgr' and 'rgb'.\n            Default: 'bgr'.\n        imdecode_backend (str): The image decoding backend type. The backend\n            argument for :func:``mmcv.imfrombytes``.\n            See :func:``mmcv.imfrombytes`` for details.\n            candidates are 'cv2', 'turbojpeg', 'pillow', and 'tifffile'.\n            Defaults to None.\n        use_cache (bool): If True, load all images at once. Default: False.\n        to_float32 (bool): Whether to convert the loaded image to a float32\n            numpy array. If set to False, the loaded image is an uint8 array.\n            Defaults to False.\n        to_y_channel (bool): Whether to convert the loaded image to y channel.\n            Only support 'rgb2ycbcr' and 'rgb2ycbcr'\n            Defaults to False.\n        backend_args (dict, optional): Arguments to instantiate the prefix of\n            uri corresponding backend. Defaults to None.\n    \"\"\"\n\n    def __init__(\n        self,\n        key: str,\n        color_type: str = 'color',\n        channel_order: str = 'bgr',\n        imdecode_backend: Optional[str] = None,\n        use_cache: bool = False,\n        to_float32: bool = False,\n        to_y_channel: bool = False,\n        save_original_img: bool = False,\n        backend_args: Optional[dict] = None,\n    ) -> None:\n\n        self.key = key\n        self.color_type = color_type\n        self.channel_order = channel_order\n        self.imdecode_backend = imdecode_backend\n        self.save_original_img = save_original_img\n\n        if backend_args is None:\n            # lasy init at loading\n            self.backend_args = None\n            self.file_backend = None\n        else:\n            self.backend_args = backend_args.copy()\n            self.file_backend = get_file_backend(backend_args=backend_args)\n\n        # cache\n        self.use_cache = use_cache\n        self.cache = dict()\n\n        # convert\n        self.to_float32 = to_float32\n        self.to_y_channel = to_y_channel\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Functions to load image or frames.\n\n        Args:\n            results (dict): Result dict from :obj:``mmcv.BaseDataset``.\n        Returns:\n            dict: The dict contains loaded image and meta information.\n        \"\"\"\n\n        filenames = results[f'{self.key}_path']\n\n        if not isinstance(filenames, (List, Tuple)):\n            filenames = [str(filenames)]\n            is_frames = False\n        else:\n            filenames = [str(v) for v in filenames]\n            is_frames = True\n\n        images = []\n        shapes = []\n        if self.save_original_img:\n            ori_imgs = []\n\n        for filename in filenames:\n            img = self._load_image(filename)\n            img = self._convert(img)\n            images.append(img)\n            shapes.append(img.shape)\n            if self.save_original_img:\n                ori_imgs.append(img.copy())\n\n        if not is_frames:\n            images = images[0]\n            shapes = shapes[0]\n            if self.save_original_img:\n                ori_imgs = ori_imgs[0]\n\n        results[self.key] = images\n        results[f'ori_{self.key}_shape'] = shapes\n        results[f'{self.key}_channel_order'] = self.channel_order\n        results[f'{self.key}_color_type'] = self.color_type\n        if self.save_original_img:\n            results[f'ori_{self.key}'] = ori_imgs\n\n        return results\n\n    def _load_image(self, filename):\n        \"\"\"Load an image from file.\n\n        Args:\n            filename (str): Path of image file.\n        Returns:\n            np.ndarray: Image.\n        \"\"\"\n        if self.file_backend is None:\n            self.file_backend = get_file_backend(\n                uri=filename, backend_args=self.backend_args)\n\n        if (self.backend_args is not None) and (self.backend_args.get(\n                'backend', None) == 'lmdb'):\n            filename, _ = osp.splitext(osp.basename(filename))\n\n        if filename in self.cache:\n            img_bytes = self.cache[filename]\n        else:\n            img_bytes = self.file_backend.get(filename)\n            if self.use_cache:\n                self.cache[filename] = img_bytes\n\n        img = mmcv.imfrombytes(\n            content=img_bytes,\n            flag=self.color_type,\n            channel_order=self.channel_order,\n            backend=self.imdecode_backend)\n\n        return img\n\n    def _convert(self, img: np.ndarray):\n        \"\"\"Convert an image to the require format.\n\n        Args:\n            img (np.ndarray): The original image.\n        Returns:\n            np.ndarray: The converted image.\n        \"\"\"\n\n        if self.to_y_channel:\n\n            if self.channel_order.lower() == 'rgb':\n                img = mmcv.rgb2ycbcr(img, y_only=True)\n            elif self.channel_order.lower() == 'bgr':\n                img = mmcv.bgr2ycbcr(img, y_only=True)\n            else:\n                raise ValueError('Currently support only \"bgr2ycbcr\" or '\n                                 '\"bgr2ycbcr\".')\n\n        if img.ndim == 2:\n            img = np.expand_dims(img, axis=2)\n\n        if self.to_float32:\n            img = img.astype(np.float32)\n\n        return img\n\n    def __repr__(self):\n\n        repr_str = (f'{self.__class__.__name__}('\n                    f'key={self.key}, '\n                    f'color_type={self.color_type}, '\n                    f'channel_order={self.channel_order}, '\n                    f'imdecode_backend={self.imdecode_backend}, '\n                    f'use_cache={self.use_cache}, '\n                    f'to_float32={self.to_float32}, '\n                    f'to_y_channel={self.to_y_channel}, '\n                    f'save_original_img={self.save_original_img}, '\n                    f'backend_args={self.backend_args})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass LoadMask(BaseTransform):\n    \"\"\"Load Mask for multiple types.\n\n    For different types of mask, users need to provide the corresponding\n    config dict.\n\n    Example config for bbox:\n\n    .. code-block:: python\n\n        config = dict(img_shape=(256, 256), max_bbox_shape=128)\n\n    Example config for irregular:\n\n    .. code-block:: python\n\n        config = dict(\n            img_shape=(256, 256),\n            num_vertices=(4, 12),\n            max_angle=4.,\n            length_range=(10, 100),\n            brush_width=(10, 40),\n            area_ratio_range=(0.15, 0.5))\n\n    Example config for ff:\n\n    .. code-block:: python\n\n        config = dict(\n            img_shape=(256, 256),\n            num_vertices=(4, 12),\n            mean_angle=1.2,\n            angle_range=0.4,\n            brush_width=(12, 40))\n\n    Example config for set:\n\n    .. code-block:: python\n\n        config = dict(\n            mask_list_file='xxx/xxx/ooxx.txt',\n            prefix='/xxx/xxx/ooxx/',\n            io_backend='local',\n            color_type='unchanged',\n            file_client_kwargs=dict()\n        )\n\n        The mask_list_file contains the list of mask file name like this:\n            test1.jpeg\n            test2.jpeg\n            ...\n            ...\n\n        The prefix gives the data path.\n\n    Args:\n        mask_mode (str): Mask mode in ['bbox', 'irregular', 'ff', 'set',\n            'file']. Default: 'bbox'.\n            * bbox: square bounding box masks.\n            * irregular: irregular holes.\n            * ff: free-form holes from DeepFillv2.\n            * set: randomly get a mask from a mask set.\n            * file: get mask from 'mask_path' in results.\n        mask_config (dict): Params for creating masks. Each type of mask needs\n            different configs. Default: None.\n    \"\"\"\n\n    def __init__(self, mask_mode='bbox', mask_config=None):\n        self.mask_mode = mask_mode\n        self.mask_config = dict() if mask_config is None else mask_config\n        assert isinstance(self.mask_config, dict)\n\n        # set init info if needed in some modes\n        self._init_info()\n\n    def _init_info(self):\n        if self.mask_mode == 'set':\n            # get mask list information\n            self.io_backend = self.mask_config['io_backend']\n            self.color_type = self.mask_config['color_type']\n            self.file_prefix = self.mask_config['prefix']\n            self.file_client_kwargs = self.mask_config['file_client_kwargs']\n            self.file_backend = None\n\n            mask_list_file = self.mask_config['mask_list_file']\n            self.mask_list = list_from_file(\n                mask_list_file, backend_args=self.file_client_kwargs)\n            self.mask_list = [\n                osp.join(self.file_prefix, i) for i in self.mask_list\n            ]\n            self.mask_set_size = len(self.mask_list)\n        elif self.mask_mode == 'file':\n            self.io_backend = 'local'\n            self.color_type = 'unchanged'\n            self.file_client_kwargs = dict()\n            self.file_backend = None\n\n    def _get_random_mask_from_set(self):\n        if self.file_backend is None:\n            self.file_backend = get_file_backend(\n                backend_args={'backend': self.io_backend})\n        # minus 1 to avoid out of range error\n        mask_idx = np.random.randint(0, self.mask_set_size)\n        mask_bytes = self.file_backend.get(self.mask_list[mask_idx])\n        mask = mmcv.imfrombytes(mask_bytes, flag=self.color_type)  # HWC, BGR\n        if mask.ndim == 2:\n            mask = np.expand_dims(mask, axis=2)\n        else:\n            mask = mask[:, :, 0:1]\n\n        mask[mask > 0] = 1.\n        return mask\n\n    def _get_mask_from_file(self, path):\n        if self.file_backend is None:\n            backend_args = self.file_client_kwargs.copy()\n            backend_args['backend'] = self.io_backend\n            self.file_backend = get_file_backend(backend_args=backend_args)\n        mask_bytes = self.file_backend.get(path)\n        mask = mmcv.imfrombytes(mask_bytes, flag=self.color_type)  # HWC, BGR\n        if mask.ndim == 2:\n            mask = np.expand_dims(mask, axis=2)\n        else:\n            mask = mask[:, :, 0:1]\n\n        mask[mask > 0] = 1.\n        return mask\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        if self.mask_mode == 'bbox':\n            mask_bbox = random_bbox(**self.mask_config)\n            mask = bbox2mask(self.mask_config['img_shape'], mask_bbox)\n            results['mask_bbox'] = mask_bbox\n        elif self.mask_mode == 'irregular':\n            mask = get_irregular_mask(**self.mask_config)\n        elif self.mask_mode == 'set':\n            mask = self._get_random_mask_from_set()\n        elif self.mask_mode == 'ff':\n            mask = brush_stroke_mask(**self.mask_config)\n        elif self.mask_mode == 'file':\n            mask = self._get_mask_from_file(results['mask_path'])\n        else:\n            raise NotImplementedError(\n                f'Mask mode {self.mask_mode} has not been implemented.')\n        results['mask'] = mask\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + f\"(mask_mode='{self.mask_mode}')\"\n\n\n@TRANSFORMS.register_module()\nclass GetSpatialDiscountMask(BaseTransform):\n    \"\"\"Get spatial discounting mask constant.\n\n    Spatial discounting mask is first introduced in:\n    Generative Image Inpainting with Contextual Attention.\n\n    Args:\n        gamma (float, optional): Gamma for computing spatial discounting.\n            Defaults to 0.99.\n        beta (float, optional): Beta for computing spatial discounting.\n            Defaults to 1.5.\n    \"\"\"\n\n    def __init__(self, gamma=0.99, beta=1.5):\n        self.gamma = gamma\n        self.beta = beta\n\n    def spatial_discount_mask(self, mask_width, mask_height):\n        \"\"\"Generate spatial discounting mask constant.\n\n        Args:\n            mask_width (int): The width of bbox hole.\n            mask_height (int): The height of bbox height.\n\n        Returns:\n            np.ndarray: Spatial discounting mask.\n        \"\"\"\n        w, h = np.meshgrid(np.arange(mask_width), np.arange(mask_height))\n        grid_stack = np.stack([h, w], axis=2)\n        mask_values = (self.gamma**(np.minimum(\n            grid_stack, [mask_height - 1, mask_width - 1] - grid_stack) *\n                                    self.beta)).max(\n                                        axis=2, keepdims=True)\n\n        return mask_values\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n\n        mask_bbox = results['mask_bbox']\n        mask = results['mask']\n        mask_height, mask_width = mask_bbox[-2:]\n        discount_hole = self.spatial_discount_mask(mask_width, mask_height)\n        discount_mask = np.zeros_like(mask)\n        discount_mask[mask_bbox[0]:mask_bbox[0] + mask_height,\n                      mask_bbox[1]:mask_bbox[1] + mask_width,\n                      ...] = discount_hole\n\n        results['discount_mask'] = discount_mask\n\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + (f'(gamma={self.gamma}, '\n                                          f'beta={self.beta})')\n\n\n@TRANSFORMS.register_module()\nclass LoadPairedImageFromFile(LoadImageFromFile):\n    \"\"\"Load a pair of images from file.\n\n    Each sample contains a pair of images, which are concatenated in the w\n    dimension (a|b). This is a special loading class for generation paired\n    dataset. It loads a pair of images as the common loader does and crops\n    it into two images with the same shape in different domains.\n\n    Required key is \"pair_path\". Added or modified keys are \"pair\",\n    \"pair_ori_shape\", \"ori_pair\", \"img_{domain_a}\", \"img_{domain_b}\",\n    \"img_{domain_a}_path\", \"img_{domain_b}_path\", \"img_{domain_a}_ori_shape\",\n    \"img_{domain_b}_ori_shape\", \"ori_img_{domain_a}\" and\n    \"ori_img_{domain_b}\".\n\n    Args:\n        key (str): Keys in results to find corresponding path.\n        domain_a (str, Optional): One of the paired image domain. Defaults\n            to 'A'.\n        domain_b (str, Optional): The other of the paired image domain.\n            Defaults to 'B'.\n        color_type (str): The flag argument for :func:``mmcv.imfrombytes``.\n            Defaults to 'color'.\n        channel_order (str): Order of channel, candidates are 'bgr' and 'rgb'.\n            Default: 'bgr'.\n        imdecode_backend (str): The image decoding backend type. The backend\n            argument for :func:``mmcv.imfrombytes``.\n            See :func:``mmcv.imfrombytes`` for details.\n            candidates are 'cv2', 'turbojpeg', 'pillow', and 'tifffile'.\n            Defaults to None.\n        use_cache (bool): If True, load all images at once. Default: False.\n        to_float32 (bool): Whether to convert the loaded image to a float32\n            numpy array. If set to False, the loaded image is an uint8 array.\n            Defaults to False.\n        to_y_channel (bool): Whether to convert the loaded image to y channel.\n            Only support 'rgb2ycbcr' and 'rgb2ycbcr'\n            Defaults to False.\n        backend_args (dict, optional): Arguments to instantiate the prefix of\n            uri corresponding backend. Defaults to None.\n        io_backend (str, optional): io backend where images are store. Defaults\n            to None.\n    \"\"\"\n\n    def __init__(self,\n                 key: str,\n                 domain_a: str = 'A',\n                 domain_b: str = 'B',\n                 color_type: str = 'color',\n                 channel_order: str = 'bgr',\n                 imdecode_backend: Optional[str] = None,\n                 use_cache: bool = False,\n                 to_float32: bool = False,\n                 to_y_channel: bool = False,\n                 save_original_img: bool = False,\n                 backend_args: Optional[dict] = None):\n        super().__init__(key, color_type, channel_order, imdecode_backend,\n                         use_cache, to_float32, to_y_channel,\n                         save_original_img, backend_args)\n        assert isinstance(domain_a, str)\n        assert isinstance(domain_b, str)\n        self.domain_a = domain_a\n        self.domain_b = domain_b\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Functions to load paired images.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        filename = results[f'{self.key}_path']\n\n        image = self._load_image(filename)\n        image = self._convert(image)\n        if self.save_original_img:\n            ori_image = image.copy()\n        shape = image.shape\n\n        # crop pair into a and b\n        w = shape[1]\n        if w % 2 != 0:\n            raise ValueError(\n                f'The width of image pair must be even number, but got {w}.')\n        new_w = w // 2\n        image_a = image[:, :new_w, :]\n        image_b = image[:, new_w:, :]\n\n        results[f'img_{self.domain_a}'] = image_a\n        results[f'img_{self.domain_b}'] = image_b\n        results[f'img_{self.domain_a}_path'] = filename\n        results[f'img_{self.domain_b}_path'] = filename\n        results[f'img_{self.domain_a}_ori_shape'] = image_a.shape\n        results[f'img_{self.domain_b}_ori_shape'] = image_b.shape\n        if self.save_original_img:\n            results[f'ori_img_{self.domain_a}'] = image_a.copy()\n            results[f'ori_img_{self.domain_b}'] = image_b.copy()\n\n        results[self.key] = image\n        results[f'ori_{self.key}_shape'] = shape\n        results[f'{self.key}_channel_order'] = self.channel_order\n        results[f'{self.key}_color_type'] = self.color_type\n        if self.save_original_img:\n            results[f'ori_{self.key}'] = ori_image\n\n        return results\n"
  },
  {
    "path": "mmagic/datasets/transforms/matlab_like_resize.py",
    "content": "# This code is referenced from matlab_imresize with modifications\n# Reference:\n# https://github.com/fatheral/matlab_imresize/blob/master/imresize.py\n# Original license: Copyright (c) 2020 fatheral, under the MIT License.\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\ndef get_size_from_scale(input_size, scale_factor):\n    \"\"\"Get the output size given input size and scale factor.\n\n    Args:\n        input_size (tuple): The size of the input image.\n        scale_factor (float): The resize factor.\n\n    Returns:\n        output_shape (list[int]): The size of the output image.\n    \"\"\"\n\n    output_shape = [\n        int(np.ceil(scale * shape))\n        for (scale, shape) in zip(scale_factor, input_size)\n    ]\n\n    return output_shape\n\n\ndef get_scale_from_size(input_size, output_size):\n    \"\"\"Get the scale factor given input size and output size.\n\n    Args:\n        input_size (tuple(int)): The size of the input image.\n        output_size (tuple(int)): The size of the output image.\n\n    Returns:\n        scale (list[float]): The scale factor of each dimension.\n    \"\"\"\n\n    scale = [\n        1.0 * output_shape / input_shape\n        for (input_shape, output_shape) in zip(input_size, output_size)\n    ]\n\n    return scale\n\n\ndef _cubic(x):\n    \"\"\"Cubic function.\n\n    Args:\n        x (np.ndarray): The distance from the center position.\n\n    Returns:\n        np.ndarray: The weight corresponding to a particular distance.\n    \"\"\"\n\n    x = np.array(x, dtype=np.float32)\n    x_abs = np.abs(x)\n    x_abs_sq = x_abs**2\n    x_abs_cu = x_abs_sq * x_abs\n\n    # if |x| <= 1: y = 1.5|x|^3 - 2.5|x|^2 + 1\n    # if 1 < |x| <= 2: -0.5|x|^3 + 2.5|x|^2 - 4|x| + 2\n    f = (1.5 * x_abs_cu - 2.5 * x_abs_sq + 1) * (x_abs <= 1) + (\n        -0.5 * x_abs_cu + 2.5 * x_abs_sq - 4 * x_abs + 2) * ((1 < x_abs) &\n                                                             (x_abs <= 2))\n\n    return f\n\n\ndef get_weights_indices(input_length, output_length, scale, kernel,\n                        kernel_width):\n    \"\"\"Get weights and indices for interpolation.\n\n    Args:\n        input_length (int): Length of the input sequence.\n        output_length (int): Length of the output sequence.\n        scale (float): Scale factor.\n        kernel (func): The kernel used for resizing.\n        kernel_width (int): The width of the kernel.\n\n    Returns:\n        tuple(list[np.ndarray], list[np.ndarray]): The weights and the indices\n            for interpolation.\n    \"\"\"\n    if scale < 1:  # modified kernel for antialiasing\n\n        def h(x):\n            return scale * kernel(scale * x)\n\n        kernel_width = 1.0 * kernel_width / scale\n    else:\n        h = kernel\n        kernel_width = kernel_width\n\n    # coordinates of output\n    x = np.arange(1, output_length + 1).astype(np.float32)\n\n    # coordinates of input\n    u = x / scale + 0.5 * (1 - 1 / scale)\n    left = np.floor(u - kernel_width / 2)  # leftmost pixel\n    p = int(np.ceil(kernel_width)) + 2  # maximum number of pixels\n\n    # indices of input pixels\n    ind = left[:, np.newaxis, ...] + np.arange(p)\n    indices = ind.astype(np.int32)\n\n    # weights of input pixels\n    weights = h(u[:, np.newaxis, ...] - indices - 1)\n\n    weights = weights / np.sum(weights, axis=1)[:, np.newaxis, ...]\n\n    # remove all-zero columns\n    aux = np.concatenate(\n        (np.arange(input_length), np.arange(input_length - 1, -1,\n                                            step=-1))).astype(np.int32)\n    indices = aux[np.mod(indices, aux.size)]\n    ind2store = np.nonzero(np.any(weights, axis=0))\n    weights = weights[:, ind2store]\n    indices = indices[:, ind2store]\n\n    return weights, indices\n\n\ndef resize_along_dim(img_in, weights, indices, dim):\n    \"\"\"Resize along a specific dimension.\n\n    Args:\n        img_in (np.ndarray): The input image.\n        weights (ndarray): The weights used for interpolation, computed from\n            [get_weights_indices].\n        indices (ndarray): The indices used for interpolation, computed from\n            [get_weights_indices].\n        dim (int): Which dimension to undergo interpolation.\n\n    Returns:\n        np.ndarray: Interpolated (along one dimension) image.\n    \"\"\"\n\n    img_in = img_in.astype(np.float32)\n    w_shape = weights.shape\n    output_shape = list(img_in.shape)\n    output_shape[dim] = w_shape[0]\n    img_out = np.zeros(output_shape)\n\n    if dim == 0:\n        for i in range(w_shape[0]):\n            w = weights[i, :][np.newaxis, ...]\n            ind = indices[i, :]\n            img_slice = img_in[ind, :]\n            img_out[i] = np.sum(np.squeeze(img_slice, axis=0) * w.T, axis=0)\n    elif dim == 1:\n        for i in range(w_shape[0]):\n            w = weights[i, :][:, :, np.newaxis]\n            ind = indices[i, :]\n            img_slice = img_in[:, ind]\n            img_out[:, i] = np.sum(np.squeeze(img_slice, axis=1) * w.T, axis=1)\n\n    if img_in.dtype == np.uint8:\n        img_out = np.clip(img_out, 0, 255)\n        return np.around(img_out).astype(np.uint8)\n    else:\n        return img_out\n\n\n@TRANSFORMS.register_module()\nclass MATLABLikeResize(BaseTransform):\n    \"\"\"Resize the input image using MATLAB-like downsampling.\n\n    Currently support bicubic interpolation only. Note that the output of\n    this function is slightly different from the official MATLAB function.\n\n    Required keys are the keys in attribute \"keys\". Added or modified keys\n    are \"scale\" and \"output_shape\", and the keys in attribute \"keys\".\n\n    Args:\n        keys (list[str]): A list of keys whose values are modified.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n        kernel (str, optional): The kernel for the resize operation.\n            Currently support 'bicubic' only. Default: 'bicubic'.\n        kernel_width (float): The kernel width. Currently support 4.0 only.\n            Default: 4.0.\n    \"\"\"\n\n    def __init__(self,\n                 keys,\n                 scale=None,\n                 output_shape=None,\n                 kernel='bicubic',\n                 kernel_width=4.0):\n\n        if kernel.lower() != 'bicubic':\n            raise ValueError('Currently support bicubic kernel only.')\n\n        if float(kernel_width) != 4.0:\n            raise ValueError('Current support only width=4 only.')\n\n        if scale is None and output_shape is None:\n            raise ValueError('\"scale\" and \"output_shape\" cannot be both None')\n\n        self.kernel_func = _cubic\n        self.keys = keys\n        self.scale = scale\n        self.output_shape = output_shape\n        self.kernel = kernel\n        self.kernel_width = kernel_width\n\n    def _resize(self, img):\n        \"\"\"resize an image to the require size.\n\n        Args:\n            img (np.ndarray): The original image.\n        Returns:\n            output (np.ndarray): The resized image.\n        \"\"\"\n        weights = {}\n        indices = {}\n\n        # compute scale and output_size\n        if self.scale is not None:\n            scale = float(self.scale)\n            scale = [scale, scale]\n            output_size = get_size_from_scale(img.shape, scale)\n        else:\n            scale = get_scale_from_size(img.shape, self.output_shape)\n            output_size = list(self.output_shape)\n\n        # apply cubic interpolation along two dimensions\n        order = np.argsort(np.array(scale))\n        for k in range(2):\n            key = (img.shape[k], output_size[k], scale[k], self.kernel_func,\n                   self.kernel_width)\n            weight, index = get_weights_indices(img.shape[k], output_size[k],\n                                                scale[k], self.kernel_func,\n                                                self.kernel_width)\n            weights[key] = weight\n            indices[key] = index\n\n        output = np.copy(img)\n        if output.ndim == 2:  # grayscale image\n            output = output[:, :, np.newaxis]\n\n        for k in range(2):\n            dim = order[k]\n            key = (img.shape[dim], output_size[dim], scale[dim],\n                   self.kernel_func, self.kernel_width)\n            output = resize_along_dim(output, weights[key], indices[key], dim)\n\n        return output\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        for key in self.keys:\n            is_single_image = False\n            if isinstance(results[key], np.ndarray):\n                is_single_image = True\n                results[key] = [results[key]]\n\n            results[key] = [self._resize(img) for img in results[key]]\n\n            if is_single_image:\n                results[key] = results[key][0]\n\n        results['scale'] = self.scale\n        results['output_shape'] = self.output_shape\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (\n            f'(keys={self.keys}, scale={self.scale}, '\n            f'output_shape={self.output_shape}, '\n            f'kernel={self.kernel}, kernel_width={self.kernel_width})')\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/normalization.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmcv\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass Normalize(BaseTransform):\n    \"\"\"Normalize images with the given mean and std value.\n\n    Required keys are the keys in attribute \"keys\", added or modified keys are\n    the keys in attribute \"keys\" and these keys with postfix '_norm_cfg'.\n    It also supports normalizing a list of images.\n\n    Args:\n        keys (Sequence[str]): The images to be normalized.\n        mean (np.ndarray): Mean values of different channels.\n        std (np.ndarray): Std values of different channels.\n        to_rgb (bool): Whether to convert channels from BGR to RGB.\n            Default: False.\n        save_original (bool): Whether to save original images. Default: False.\n    \"\"\"\n\n    def __init__(self, keys, mean, std, to_rgb=False, save_original=False):\n        self.keys = keys\n        self.mean = np.array(mean, dtype=np.float32)\n        self.std = np.array(std, dtype=np.float32)\n        self.to_rgb = to_rgb\n        self.save_original = save_original\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        for key in self.keys:\n            if isinstance(results[key], list):\n                if self.save_original:\n                    results[key + '_unnormalised'] = [\n                        v.copy() for v in results[key]\n                    ]\n                results[key] = [\n                    mmcv.imnormalize(v, self.mean, self.std, self.to_rgb)\n                    for v in results[key]\n                ]\n            else:\n                if self.save_original:\n                    results[key + '_unnormalised'] = results[key].copy()\n                results[key] = mmcv.imnormalize(results[key], self.mean,\n                                                self.std, self.to_rgb)\n\n        results['img_norm_cfg'] = dict(\n            mean=self.mean, std=self.std, to_rgb=self.to_rgb)\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(keys={self.keys}, mean={self.mean}, std={self.std}, '\n                     f'to_rgb={self.to_rgb})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RescaleToZeroOne(BaseTransform):\n    \"\"\"Transform the images into a range between 0 and 1.\n\n    Required keys are the keys in attribute \"keys\", added or modified keys are\n    the keys in attribute \"keys\".\n    It also supports rescaling a list of images.\n\n    Args:\n        keys (Sequence[str]): The images to be transformed.\n    \"\"\"\n\n    def __init__(self, keys):\n        self.keys = keys\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        for key in self.keys:\n            if isinstance(results[key], list):\n                results[key] = [\n                    v.astype(np.float32) / 255. for v in results[key]\n                ]\n            else:\n                results[key] = results[key].astype(np.float32) / 255.\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + f'(keys={self.keys})'\n"
  },
  {
    "path": "mmagic/datasets/transforms/random_degradations.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport io\nimport logging\nimport random\n\nimport cv2\nimport numpy as np\n\nfrom mmagic.datasets.transforms import blur_kernels\nfrom mmagic.registry import TRANSFORMS\n\ntry:\n    import av\n    has_av = True\nexcept ImportError:\n    has_av = False\n\n\n@TRANSFORMS.register_module()\nclass RandomBlur:\n    \"\"\"Apply random blur to the input.\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        params (dict): A dictionary specifying the degradation settings.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n    \"\"\"\n\n    def __init__(self, params, keys):\n        self.keys = keys\n        self.params = params\n\n    def get_kernel(self, num_kernels: int):\n        \"\"\"This is the function to create kernel.\n\n        Args:\n            num_kernels (int): the number of kernels\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        kernel_type = np.random.choice(\n            self.params['kernel_list'], p=self.params['kernel_prob'])\n        kernel_size = random.choice(self.params['kernel_size'])\n\n        sigma_x_range = self.params.get('sigma_x', [0, 0])\n        sigma_x = np.random.uniform(sigma_x_range[0], sigma_x_range[1])\n        sigma_x_step = self.params.get('sigma_x_step', 0)\n\n        sigma_y_range = self.params.get('sigma_y', [0, 0])\n        sigma_y = np.random.uniform(sigma_y_range[0], sigma_y_range[1])\n        sigma_y_step = self.params.get('sigma_y_step', 0)\n\n        rotate_angle_range = self.params.get('rotate_angle', [-np.pi, np.pi])\n        rotate_angle = np.random.uniform(rotate_angle_range[0],\n                                         rotate_angle_range[1])\n        rotate_angle_step = self.params.get('rotate_angle_step', 0)\n\n        beta_gau_range = self.params.get('beta_gaussian', [0.5, 4])\n        beta_gau = np.random.uniform(beta_gau_range[0], beta_gau_range[1])\n        beta_gau_step = self.params.get('beta_gaussian_step', 0)\n\n        beta_pla_range = self.params.get('beta_plateau', [1, 2])\n        beta_pla = np.random.uniform(beta_pla_range[0], beta_pla_range[1])\n        beta_pla_step = self.params.get('beta_plateau_step', 0)\n\n        omega_range = self.params.get('omega', None)\n        omega_step = self.params.get('omega_step', 0)\n        if omega_range is None:  # follow Real-ESRGAN settings if not specified\n            if kernel_size < 13:\n                omega_range = [np.pi / 3., np.pi]\n            else:\n                omega_range = [np.pi / 5., np.pi]\n        omega = np.random.uniform(omega_range[0], omega_range[1])\n\n        # determine blurring kernel\n        kernels = []\n        for _ in range(0, num_kernels):\n            kernel = blur_kernels.random_mixed_kernels(\n                [kernel_type],\n                [1],\n                kernel_size,\n                [sigma_x, sigma_x],\n                [sigma_y, sigma_y],\n                [rotate_angle, rotate_angle],\n                [beta_gau, beta_gau],\n                [beta_pla, beta_pla],\n                [omega, omega],\n                None,\n            )\n            kernels.append(kernel)\n\n            # update kernel parameters\n            sigma_x += np.random.uniform(-sigma_x_step, sigma_x_step)\n            sigma_y += np.random.uniform(-sigma_y_step, sigma_y_step)\n            rotate_angle += np.random.uniform(-rotate_angle_step,\n                                              rotate_angle_step)\n            beta_gau += np.random.uniform(-beta_gau_step, beta_gau_step)\n            beta_pla += np.random.uniform(-beta_pla_step, beta_pla_step)\n            omega += np.random.uniform(-omega_step, omega_step)\n\n            sigma_x = np.clip(sigma_x, sigma_x_range[0], sigma_x_range[1])\n            sigma_y = np.clip(sigma_y, sigma_y_range[0], sigma_y_range[1])\n            rotate_angle = np.clip(rotate_angle, rotate_angle_range[0],\n                                   rotate_angle_range[1])\n            beta_gau = np.clip(beta_gau, beta_gau_range[0], beta_gau_range[1])\n            beta_pla = np.clip(beta_pla, beta_pla_range[0], beta_pla_range[1])\n            omega = np.clip(omega, omega_range[0], omega_range[1])\n\n        return kernels\n\n    def _apply_random_blur(self, imgs):\n        \"\"\"This is the function to apply blur operation on images.\n\n        Args:\n            imgs (Tensor): images\n\n        Returns:\n            Tensor: Images applied blur\n        \"\"\"\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        # get kernel and blur the input\n        kernels = self.get_kernel(num_kernels=len(imgs))\n        imgs = [\n            cv2.filter2D(img, -1, kernel)\n            for img, kernel in zip(imgs, kernels)\n        ]\n\n        if is_single_image:\n            imgs = imgs[0]\n\n        return imgs\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        if np.random.uniform() > self.params.get('prob', 1):\n            return results\n\n        for key in self.keys:\n            results[key] = self._apply_random_blur(results[key])\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(params={self.params}, keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomJPEGCompression:\n    \"\"\"Apply random JPEG compression to the input.\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        params (dict): A dictionary specifying the degradation settings.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n        bgr2rgb (str): Whether change channel order. Default: False.\n    \"\"\"\n\n    def __init__(self, params, keys, color_type='color', bgr2rgb=False):\n        self.keys = keys\n        self.params = params\n        self.color_type = color_type\n        self.bgr2rgb = bgr2rgb\n\n    def _apply_random_compression(self, imgs):\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        # determine initial compression level and the step size\n        quality = self.params['quality']\n        quality_step = self.params.get('quality_step', 0)\n        jpeg_param = round(np.random.uniform(quality[0], quality[1]))\n\n        # apply jpeg compression\n        outputs = []\n        for img in imgs:\n            encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), jpeg_param]\n            if self.bgr2rgb and self.color_type == 'color':\n                img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n            _, img_encoded = cv2.imencode('.jpg', img, encode_param)\n\n            if self.color_type == 'color':\n                img_encoded = cv2.imdecode(img_encoded, 1)\n                if self.bgr2rgb:\n                    img_encoded = cv2.cvtColor(img_encoded, cv2.COLOR_BGR2RGB)\n                outputs.append(img_encoded)\n            else:\n                outputs.append(cv2.imdecode(img_encoded, 0))\n\n            # update compression level\n            jpeg_param += np.random.uniform(-quality_step, quality_step)\n            jpeg_param = round(np.clip(jpeg_param, quality[0], quality[1]))\n\n        if is_single_image:\n            outputs = outputs[0]\n\n        return outputs\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        if np.random.uniform() > self.params.get('prob', 1):\n            return results\n\n        for key in self.keys:\n            results[key] = self._apply_random_compression(results[key])\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(params={self.params}, keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomNoise:\n    \"\"\"Apply random noise to the input.\n\n    Currently support Gaussian noise and Poisson noise.\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        params (dict): A dictionary specifying the degradation settings.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n    \"\"\"\n\n    def __init__(self, params, keys):\n        self.keys = keys\n        self.params = params\n\n    def _apply_gaussian_noise(self, imgs):\n        \"\"\"This is the function used to apply gaussian noise on images.\n\n        Args:\n            imgs (Tensor): images\n\n        Returns:\n            Tensor: images applied gaussian noise\n        \"\"\"\n        sigma_range = self.params['gaussian_sigma']\n        sigma = np.random.uniform(sigma_range[0], sigma_range[1])\n\n        sigma_step = self.params.get('gaussian_sigma_step', 0)\n\n        gray_noise_prob = self.params['gaussian_gray_noise_prob']\n        is_gray_noise = np.random.uniform() < gray_noise_prob\n\n        outputs = []\n        for img in imgs:\n            noise = np.float32(np.random.randn(*(img.shape))) * sigma\n            if is_gray_noise:\n                noise = noise[:, :, :1]\n            outputs.append(img + noise)\n\n            # update noise level\n            sigma += np.random.uniform(-sigma_step, sigma_step)\n            sigma = np.clip(sigma, sigma_range[0], sigma_range[1])\n\n        return outputs\n\n    def _apply_poisson_noise(self, imgs):\n        scale_range = self.params['poisson_scale']\n        scale = np.random.uniform(scale_range[0], scale_range[1])\n\n        scale_step = self.params.get('poisson_scale_step', 0)\n\n        gray_noise_prob = self.params['poisson_gray_noise_prob']\n        is_gray_noise = np.random.uniform() < gray_noise_prob\n\n        outputs = []\n        for img in imgs:\n            noise = np.float32(img.copy())\n            if is_gray_noise:\n                noise = cv2.cvtColor(noise[..., [2, 1, 0]], cv2.COLOR_BGR2GRAY)\n                noise = noise[..., np.newaxis]\n            noise = np.clip((noise).round(), 0, 255)\n            unique_val = 2**np.ceil(np.log2(len(np.unique(noise))))\n            noise = np.random.poisson(noise * unique_val).astype(np.float32) \\\n                / unique_val - noise\n\n            outputs.append(img + noise * scale)\n\n            # update noise level\n            scale += np.random.uniform(-scale_step, scale_step)\n            scale = np.clip(scale, scale_range[0], scale_range[1])\n\n        return outputs\n\n    def _apply_random_noise(self, imgs):\n        \"\"\"This is the function used to apply random noise on images.\n\n        Args:\n            imgs (Tensor): training images\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        noise_type = np.random.choice(\n            self.params['noise_type'], p=self.params['noise_prob'])\n\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        if noise_type.lower() == 'gaussian':\n            imgs = self._apply_gaussian_noise(imgs)\n        elif noise_type.lower() == 'poisson':\n            imgs = self._apply_poisson_noise(imgs)\n        else:\n            raise NotImplementedError(f'\"noise_type\" [{noise_type}] is '\n                                      'not implemented.')\n\n        if is_single_image:\n            imgs = imgs[0]\n\n        return imgs\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        if np.random.uniform() > self.params.get('prob', 1):\n            return results\n\n        for key in self.keys:\n            results[key] = self._apply_random_noise(results[key])\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(params={self.params}, keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomResize:\n    \"\"\"Randomly resize the input.\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        params (dict): A dictionary specifying the degradation settings.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n    \"\"\"\n\n    def __init__(self, params, keys):\n        self.keys = keys\n        self.params = params\n\n        self.resize_dict = dict(\n            bilinear=cv2.INTER_LINEAR,\n            bicubic=cv2.INTER_CUBIC,\n            area=cv2.INTER_AREA,\n            lanczos=cv2.INTER_LANCZOS4)\n\n    def _random_resize(self, imgs):\n        \"\"\"This is the function used to randomly resize images for training\n        augmentation.\n\n        Args:\n            imgs (Tensor): training images.\n\n        Returns:\n            Tensor: images after randomly resized\n        \"\"\"\n        is_single_image = False\n        if isinstance(imgs, np.ndarray):\n            is_single_image = True\n            imgs = [imgs]\n\n        h, w = imgs[0].shape[:2]\n\n        resize_opt = self.params['resize_opt']\n        resize_prob = self.params['resize_prob']\n        resize_opt = np.random.choice(resize_opt, p=resize_prob).lower()\n        if resize_opt not in self.resize_dict:\n            raise NotImplementedError(f'resize_opt [{resize_opt}] is not '\n                                      'implemented')\n        resize_opt = self.resize_dict[resize_opt]\n\n        resize_step = self.params.get('resize_step', 0)\n\n        # determine the target size, if not provided\n        target_size = self.params.get('target_size', None)\n        if target_size is None:\n            resize_mode = np.random.choice(['up', 'down', 'keep'],\n                                           p=self.params['resize_mode_prob'])\n            resize_scale = self.params['resize_scale']\n            if resize_mode == 'up':\n                scale_factor = np.random.uniform(1, resize_scale[1])\n            elif resize_mode == 'down':\n                scale_factor = np.random.uniform(resize_scale[0], 1)\n            else:\n                scale_factor = 1\n\n            # determine output size\n            h_out, w_out = h * scale_factor, w * scale_factor\n            if self.params.get('is_size_even', False):\n                h_out, w_out = 2 * (h_out // 2), 2 * (w_out // 2)\n            target_size = (int(h_out), int(w_out))\n        else:\n            resize_step = 0\n\n        # resize the input\n        if resize_step == 0:  # same target_size for all input images\n            outputs = [\n                cv2.resize(img, target_size[::-1], interpolation=resize_opt)\n                for img in imgs\n            ]\n        else:  # different target_size for each input image\n            outputs = []\n            for img in imgs:\n                img = cv2.resize(\n                    img, target_size[::-1], interpolation=resize_opt)\n                outputs.append(img)\n\n                # update scale\n                scale_factor += np.random.uniform(-resize_step, resize_step)\n                scale_factor = np.clip(scale_factor, resize_scale[0],\n                                       resize_scale[1])\n\n                # determine output size\n                h_out, w_out = h * scale_factor, w * scale_factor\n                if self.params.get('is_size_even', False):\n                    h_out, w_out = 2 * (h_out // 2), 2 * (w_out // 2)\n                target_size = (int(h_out), int(w_out))\n\n        if is_single_image:\n            outputs = outputs[0]\n\n        return outputs\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        if np.random.uniform() > self.params.get('prob', 1):\n            return results\n\n        for key in self.keys:\n            results[key] = self._random_resize(results[key])\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(params={self.params}, keys={self.keys})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass RandomVideoCompression:\n    \"\"\"Apply random video compression to the input.\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        params (dict): A dictionary specifying the degradation settings.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n    \"\"\"\n\n    def __init__(self, params, keys):\n        assert has_av, 'Please install av to use video compression.'\n\n        self.keys = keys\n        self.params = params\n        logging.getLogger('libav').setLevel(50)\n\n    def _apply_random_compression(self, imgs):\n        \"\"\"This is the function to apply random compression on images.\n\n        Args:\n            imgs (Tensor): training images\n\n        Returns:\n            Tensor: images after randomly compressed\n        \"\"\"\n        codec = random.choices(self.params['codec'],\n                               self.params['codec_prob'])[0]\n        bitrate = self.params['bitrate']\n        bitrate = np.random.randint(bitrate[0], bitrate[1] + 1)\n\n        buf = io.BytesIO()\n        with av.open(buf, 'w', 'mp4') as container:\n            stream = container.add_stream(codec, rate=1)\n            stream.height = imgs[0].shape[0]\n            stream.width = imgs[0].shape[1]\n            stream.pix_fmt = 'yuv420p'\n            stream.bit_rate = bitrate\n\n            for img in imgs:\n                img = img.astype(np.uint8)\n                frame = av.VideoFrame.from_ndarray(img, format='rgb24')\n                frame.pict_type = 'NONE'\n                for packet in stream.encode(frame):\n                    container.mux(packet)\n\n            # Flush stream\n            for packet in stream.encode():\n                container.mux(packet)\n\n        outputs = []\n        with av.open(buf, 'r', 'mp4') as container:\n            if container.streams.video:\n                for frame in container.decode(**{'video': 0}):\n                    outputs.append(frame.to_rgb().to_ndarray().astype(\n                        np.float32))\n\n        return outputs\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        if np.random.uniform() > self.params.get('prob', 1):\n            return results\n\n        for key in self.keys:\n            results[key] = self._apply_random_compression(results[key])\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(params={self.params}, keys={self.keys})')\n        return repr_str\n\n\nallowed_degradations = {\n    'RandomBlur': RandomBlur,\n    'RandomResize': RandomResize,\n    'RandomNoise': RandomNoise,\n    'RandomJPEGCompression': RandomJPEGCompression,\n    'RandomVideoCompression': RandomVideoCompression,\n}\n\n\n@TRANSFORMS.register_module()\nclass DegradationsWithShuffle:\n    \"\"\"Apply random degradations to input, with degradations being shuffled.\n\n    Degradation groups are supported. The order of degradations within the same\n    group is preserved. For example, if we have degradations = [a, b, [c, d]]\n    and shuffle_idx = None, then the possible orders are\n\n    ::\n\n        [a, b, [c, d]]\n        [a, [c, d], b]\n        [b, a, [c, d]]\n        [b, [c, d], a]\n        [[c, d], a, b]\n        [[c, d], b, a]\n\n    Modified keys are the attributed specified in \"keys\".\n\n    Args:\n        degradations (list[dict]): The list of degradations.\n        keys (list[str]): A list specifying the keys whose values are\n            modified.\n        shuffle_idx (list | None, optional): The degradations corresponding to\n            these indices are shuffled. If None, all degradations are shuffled.\n            Default: None.\n    \"\"\"\n\n    def __init__(self, degradations, keys, shuffle_idx=None):\n\n        self.keys = keys\n\n        self.degradations = self._build_degradations(degradations)\n\n        if shuffle_idx is None:\n            self.shuffle_idx = list(range(0, len(degradations)))\n        else:\n            self.shuffle_idx = shuffle_idx\n\n    def _build_degradations(self, degradations):\n        for i, degradation in enumerate(degradations):\n            if isinstance(degradation, (list, tuple)):\n                degradations[i] = self._build_degradations(degradation)\n            else:\n                degradation_ = allowed_degradations[degradation['type']]\n                degradations[i] = degradation_(degradation['params'],\n                                               self.keys)\n\n        return degradations\n\n    def __call__(self, results):\n        \"\"\"Call this transform.\"\"\"\n        # shuffle degradations\n        if len(self.shuffle_idx) > 0:\n            shuffle_list = [self.degradations[i] for i in self.shuffle_idx]\n            np.random.shuffle(shuffle_list)\n            for i, idx in enumerate(self.shuffle_idx):\n                self.degradations[idx] = shuffle_list[i]\n\n        # apply degradations to input\n        for degradation in self.degradations:\n            if isinstance(degradation, (tuple, list)):\n                for subdegrdation in degradation:\n                    results = subdegrdation(results)\n            else:\n                results = degradation(results)\n\n        return results\n\n    def __repr__(self):\n        \"\"\"Print the basic information of the transform.\"\"\"\n        repr_str = self.__class__.__name__\n        repr_str += (f'(degradations={self.degradations}, '\n                     f'keys={self.keys}, '\n                     f'shuffle_idx={self.shuffle_idx})')\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/random_down_sampling.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport numpy as np\nimport torch\nfrom mmcv import imresize\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass RandomDownSampling(BaseTransform):\n    \"\"\"Generate LQ image from GT (and crop), which will randomly pick a scale.\n\n    Args:\n        scale_min (float): The minimum of upsampling scale, inclusive.\n            Default: 1.0.\n        scale_max (float): The maximum of upsampling scale, exclusive.\n            Default: 4.0.\n        patch_size (int): The cropped lr patch size.\n            Default: None, means no crop.\n        interpolation (str): Interpolation method, accepted values are\n            \"nearest\", \"bilinear\", \"bicubic\", \"area\", \"lanczos\" for 'cv2'\n            backend, \"nearest\", \"bilinear\", \"bicubic\", \"box\", \"lanczos\",\n            \"hamming\" for 'pillow' backend.\n            Default: \"bicubic\".\n        backend (str | None): The image resize backend type. Options are `cv2`,\n            `pillow`, `None`. If backend is None, the global imread_backend\n            specified by ``mmcv.use_backend()`` will be used.\n            Default: \"pillow\".\n\n        Scale will be picked in the range of [scale_min, scale_max).\n    \"\"\"\n\n    def __init__(self,\n                 scale_min=1.0,\n                 scale_max=4.0,\n                 patch_size=None,\n                 interpolation='bicubic',\n                 backend='pillow'):\n\n        assert scale_max >= scale_min\n        self.scale_min = scale_min\n        self.scale_max = scale_max\n        self.patch_size = patch_size\n        self.interpolation = interpolation\n        self.backend = backend\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation. 'gt' is required.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n                modified 'gt', supplement 'lq' and 'scale' to keys.\n        \"\"\"\n        img = results['gt']\n        scale = np.random.uniform(self.scale_min, self.scale_max)\n\n        if self.patch_size is None:\n            h_lr = math.floor(img.shape[-3] / scale + 1e-9)\n            w_lr = math.floor(img.shape[-2] / scale + 1e-9)\n            img = img[:round(h_lr * scale), :round(w_lr * scale), :]\n            img_down = resize_fn(img, (w_lr, h_lr), self.interpolation,\n                                 self.backend)\n            crop_lr, crop_hr = img_down, img\n        else:\n            w_lr = self.patch_size\n            w_hr = round(w_lr * scale)\n            x0 = np.random.randint(0, img.shape[-3] - w_hr)\n            y0 = np.random.randint(0, img.shape[-2] - w_hr)\n            crop_hr = img[x0:x0 + w_hr, y0:y0 + w_hr, :]\n            crop_lr = resize_fn(crop_hr, w_lr, self.interpolation,\n                                self.backend)\n        results['gt'] = crop_hr\n        results['img'] = crop_lr\n        results['scale'] = scale\n\n        # copy metainfo to lr image\n        if 'gt_channel_order' in results:\n            results['img_channel_order'] = results['gt_channel_order']\n        if 'gt_color_type' in results:\n            results['img_color_type'] = results['gt_color_type']\n\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f' scale_min={self.scale_min}, '\n                     f'scale_max={self.scale_max}, '\n                     f'patch_size={self.patch_size}, '\n                     f'interpolation={self.interpolation}, '\n                     f'backend={self.backend}')\n\n        return repr_str\n\n\ndef resize_fn(img, size, interpolation='bicubic', backend='pillow'):\n    \"\"\"Resize the given image to a given size.\n\n    Args:\n        img (np.ndarray | torch.Tensor): The input image.\n        size (int | tuple[int]): Target size w or (w, h).\n        interpolation (str): Interpolation method, accepted values are\n            \"nearest\", \"bilinear\", \"bicubic\", \"area\", \"lanczos\" for 'cv2'\n            backend, \"nearest\", \"bilinear\", \"bicubic\", \"box\", \"lanczos\",\n            \"hamming\" for 'pillow' backend.\n            Default: \"bicubic\".\n        backend (str | None): The image resize backend type. Options are `cv2`,\n            `pillow`, `None`. If backend is None, the global imread_backend\n            specified by ``mmcv.use_backend()`` will be used.\n            Default: \"pillow\".\n\n    Returns:\n        np.ndarray | Tensor: `resized_img`, whose type is same as `img`.\n    \"\"\"\n    if isinstance(size, int):\n        size = (size, size)\n    if isinstance(img, np.ndarray):\n        return imresize(\n            img, size, interpolation=interpolation, backend=backend)\n    elif isinstance(img, torch.Tensor):\n        image = imresize(\n            img.numpy(), size, interpolation=interpolation, backend=backend)\n        return torch.from_numpy(image)\n\n    else:\n        raise TypeError('img should got np.ndarray or torch.Tensor,'\n                        f'but got {type(img)}')\n"
  },
  {
    "path": "mmagic/datasets/transforms/trimap.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Augmentation on trimaps.\"\"\"\n\nimport cv2\nimport numpy as np\nfrom mmcv.transforms import BaseTransform\nfrom mmengine.utils import is_tuple_of\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass FormatTrimap(BaseTransform):\n    \"\"\"Convert trimap (tensor) to one-hot representation.\n\n    It transforms the trimap label from (0, 128, 255) to (0, 1, 2). If\n    ``to_onehot`` is set to True, the trimap will convert to one-hot tensor of\n    shape (3, H, W). Required key is \"trimap\", added or modified key are\n    \"trimap\" and \"format_trimap_to_onehot\".\n\n    Args:\n        to_onehot (bool): whether convert trimap to one-hot tensor. Default:\n            ``False``.\n    \"\"\"\n\n    def __init__(self, to_onehot=False):\n        self.to_onehot = to_onehot\n\n    def transform(self, results):\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        trimap = results['trimap'].squeeze()\n        assert trimap.ndim == 2\n\n        if self.to_onehot:\n            trimap_one_hot = np.zeros((*trimap.shape, 3), dtype=np.uint8)\n            trimap_one_hot[..., 0][trimap == 0] = 1\n            trimap_one_hot[..., 1][trimap == 128] = 1\n            trimap_one_hot[..., 2][trimap == 255] = 1\n            results['trimap'] = trimap_one_hot\n        else:\n            trimap[trimap == 128] = 1\n            trimap[trimap == 255] = 2\n            results['trimap'] = trimap\n\n        results['format_trimap_to_onehot'] = self.to_onehot\n        return results\n\n    def __repr__(self):\n        return self.__class__.__name__ + f'(to_onehot={self.to_onehot})'\n\n\n@TRANSFORMS.register_module()\nclass GenerateTrimap(BaseTransform):\n    \"\"\"Using random erode/dilate to generate trimap from alpha matte.\n\n    Required key is \"alpha\", added key is \"trimap\".\n\n    Args:\n        kernel_size (int | tuple[int]): The range of random kernel_size of\n            erode/dilate; int indicates a fixed kernel_size. If `random` is set\n            to False and kernel_size is a tuple of length 2, then it will be\n            interpreted as (erode kernel_size, dilate kernel_size). It should\n            be noted that the kernel of the erosion and dilation has the same\n            height and width.\n        iterations (int | tuple[int], optional): The range of random iterations\n            of erode/dilate; int indicates a fixed iterations. If `random` is\n            set to False and iterations is a tuple of length 2, then it will be\n            interpreted as (erode iterations, dilate iterations). Default to 1.\n        random (bool, optional): Whether use random kernel_size and iterations\n            when generating trimap. See `kernel_size` and `iterations` for more\n            information. Default to True.\n    \"\"\"\n\n    def __init__(self, kernel_size, iterations=1, random=True):\n        if isinstance(kernel_size, int):\n            kernel_size = kernel_size, kernel_size + 1\n        elif not is_tuple_of(kernel_size, int) or len(kernel_size) != 2:\n            raise ValueError('kernel_size must be an int or a tuple of 2 int, '\n                             f'but got {kernel_size}')\n\n        if isinstance(iterations, int):\n            iterations = iterations, iterations + 1\n        elif not is_tuple_of(iterations, int) or len(iterations) != 2:\n            raise ValueError('iterations must be an int or a tuple of 2 int, '\n                             f'but got {iterations}')\n\n        self.random = random\n        if self.random:\n            min_kernel, max_kernel = kernel_size\n            self.iterations = iterations\n            self.kernels = [\n                cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (size, size))\n                for size in range(min_kernel, max_kernel)\n            ]\n        else:\n            erode_ksize, dilate_ksize = kernel_size\n            self.iterations = iterations\n            self.kernels = [\n                cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                          (erode_ksize, erode_ksize)),\n                cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                          (dilate_ksize, dilate_ksize))\n            ]\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        alpha = results['alpha']\n\n        if self.random:\n            kernel_num = len(self.kernels)\n            erode_kernel_idx = np.random.randint(kernel_num)\n            dilate_kernel_idx = np.random.randint(kernel_num)\n            min_iter, max_iter = self.iterations\n            erode_iter = np.random.randint(min_iter, max_iter)\n            dilate_iter = np.random.randint(min_iter, max_iter)\n        else:\n            erode_kernel_idx, dilate_kernel_idx = 0, 1\n            erode_iter, dilate_iter = self.iterations\n\n        eroded = cv2.erode(\n            alpha, self.kernels[erode_kernel_idx], iterations=erode_iter)\n        dilated = cv2.dilate(\n            alpha, self.kernels[dilate_kernel_idx], iterations=dilate_iter)\n\n        trimap = np.zeros_like(alpha)\n        trimap.fill(128)\n        trimap[eroded >= 255] = 255\n        trimap[dilated <= 0] = 0\n        results['trimap'] = trimap\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += (f'(kernels={self.kernels}, iterations={self.iterations}, '\n                     f'random={self.random})')\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass GenerateTrimapWithDistTransform(BaseTransform):\n    \"\"\"Generate trimap with distance transform function.\n\n    Args:\n        dist_thr (int, optional): Distance threshold. Area with alpha value\n            between (0, 255) will be considered as initial unknown area. Then\n            area with distance to unknown area smaller than the distance\n            threshold will also be consider as unknown area. Defaults to 20.\n        random (bool, optional): If True, use random distance threshold from\n            [1, dist_thr). If False, use `dist_thr` as the distance threshold\n            directly. Defaults to True.\n    \"\"\"\n\n    def __init__(self, dist_thr=20, random=True):\n        if not (isinstance(dist_thr, int) and dist_thr >= 1):\n            raise ValueError('dist_thr must be an int that is greater than 1, '\n                             f'but got {dist_thr}')\n        self.dist_thr = dist_thr\n        self.random = random\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        alpha = results['alpha']\n\n        # image dilation implemented by Euclidean distance transform\n        known = (alpha == 0) | (alpha == 255)\n        dist_to_unknown = cv2.distanceTransform(\n            known.astype(np.uint8), cv2.DIST_L2, cv2.DIST_MASK_PRECISE)\n        dist_thr = np.random.randint(\n            1, self.dist_thr) if self.random else self.dist_thr\n        unknown = dist_to_unknown <= dist_thr\n\n        trimap = (alpha == 255).astype(np.uint8) * 255\n        trimap[unknown] = 128\n        results['trimap'] = trimap\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        repr_str += f'(dist_thr={self.dist_thr}, random={self.random})'\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass TransformTrimap(BaseTransform):\n    \"\"\"Transform trimap into two-channel and six-channel.\n\n    This class will generate a two-channel trimap composed of definite\n    foreground and background masks and encode it into a six-channel trimap\n    using Gaussian blurs of the generated two-channel trimap at three\n    different scales. The transformed trimap has 6 channels.\n\n    Required key is \"trimap\", added key is \"transformed_trimap\" and\n    \"two_channel_trimap\".\n\n    Adopted from the following repository:\n    https://github.com/MarcoForte/FBA_Matting/blob/master/networks/transforms.py.\n    \"\"\"\n\n    def transform(self, results: dict) -> dict:\n        \"\"\"Transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict containing the processed data and information.\n        \"\"\"\n        trimap = results['trimap']\n        assert len(trimap.shape) == 2\n        h, w = trimap.shape[:2]\n        # generate two-channel trimap\n        trimap2 = np.zeros((h, w, 2), dtype=np.uint8)\n        trimap2[trimap == 0, 0] = 255\n        trimap2[trimap == 255, 1] = 255\n        trimap_trans = np.zeros((h, w, 6), dtype=np.float32)\n        factor = np.array([[[0.02, 0.08, 0.16]]], dtype=np.float32)\n        for k in range(2):\n            if np.any(trimap2[:, :, k]):\n                dt_mask = -cv2.distanceTransform(255 - trimap2[:, :, k],\n                                                 cv2.DIST_L2, 0)**2\n                dt_mask = dt_mask[..., None]\n                L = 320\n                trimap_trans[..., 3 * k:3 * k +\n                             3] = np.exp(dt_mask / (2 * ((factor * L)**2)))\n\n        results['transformed_trimap'] = trimap_trans\n        results['two_channel_trimap'] = trimap2\n        return results\n\n    def __repr__(self):\n        repr_str = self.__class__.__name__\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/transforms/values.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict\n\nfrom mmcv.transforms import BaseTransform\n\nfrom mmagic.registry import TRANSFORMS\n\n\n@TRANSFORMS.register_module()\nclass CopyValues(BaseTransform):\n    \"\"\"Copy the value of source keys to destination keys.\n\n    # TODO Change to dict(dst=src)\n\n    It does the following: results[dst_key] = results[src_key] for\n    (src_key, dst_key) in zip(src_keys, dst_keys).\n\n    Added keys are the keys in the attribute \"dst_keys\".\n\n    Required Keys:\n\n    - [SRC_KEYS]\n\n    Added Keys:\n\n    - [DST_KEYS]\n\n    Args:\n        src_keys (list[str]): The source keys.\n        dst_keys (list[str]): The destination keys.\n    \"\"\"\n\n    def __init__(self, src_keys, dst_keys):\n\n        if not isinstance(src_keys, list) or not isinstance(dst_keys, list):\n            raise AssertionError('\"src_keys\" and \"dst_keys\" must be lists.')\n\n        if len(src_keys) != len(dst_keys):\n            raise ValueError('\"src_keys\" and \"dst_keys\" should have the same'\n                             'number of elements.')\n\n        self.src_keys = src_keys\n        self.dst_keys = dst_keys\n\n    def transform(self, results):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict with a key added/modified.\n        \"\"\"\n\n        for (src_key, dst_key) in zip(self.src_keys, self.dst_keys):\n            results[dst_key] = deepcopy(results[src_key])\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(src_keys={self.src_keys})')\n        repr_str += (f'(dst_keys={self.dst_keys})')\n\n        return repr_str\n\n\n@TRANSFORMS.register_module()\nclass SetValues(BaseTransform):\n    \"\"\"Set value to destination keys.\n\n    It does the following: results[key] = value\n\n    Added keys are the keys in the dictionary.\n\n    Required Keys:\n\n    - None\n\n    Added or Modified Keys:\n\n    - keys in the dictionary\n\n    Args:\n        dictionary (dict): The dictionary to update.\n    \"\"\"\n\n    def __init__(self, dictionary):\n\n        self.dictionary = dictionary\n\n    def transform(self, results: Dict):\n        \"\"\"transform function.\n\n        Args:\n            results (dict): A dict containing the necessary information and\n                data for augmentation.\n\n        Returns:\n            dict: A dict with a key added/modified.\n        \"\"\"\n\n        dictionary = deepcopy(self.dictionary)\n        results.update(dictionary)\n\n        return results\n\n    def __repr__(self):\n\n        repr_str = self.__class__.__name__\n        repr_str += (f'(dictionary={self.dictionary})')\n\n        return repr_str\n"
  },
  {
    "path": "mmagic/datasets/unpaired_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom typing import Optional\n\nimport numpy as np\nfrom mmengine.dataset import BaseDataset, force_full_init\nfrom mmengine.fileio import get_file_backend\n\nfrom mmagic.registry import DATASETS\n\nIMG_EXTENSIONS = ('.jpg', '.JPG', '.jpeg', '.JPEG', '.png', '.PNG', '.ppm',\n                  '.PPM', '.bmp', '.BMP', '.tif', '.TIF', '.tiff', '.TIFF')\n\n\n@DATASETS.register_module()\nclass UnpairedImageDataset(BaseDataset):\n    \"\"\"General unpaired image folder dataset for image generation.\n\n    It assumes that the training directory of images from domain A is\n    '/path/to/data/trainA', and that from domain B is '/path/to/data/trainB',\n    respectively. '/path/to/data' can be initialized by args 'dataroot'.\n    During test time, the directory is '/path/to/data/testA' and\n    '/path/to/data/testB', respectively.\n\n    Args:\n        dataroot (str | :obj:`Path`): Path to the folder root of unpaired\n            images.\n        pipeline (List[dict | callable]): A sequence of data transformations.\n        io_backend (str, optional): The storage backend type. Options are\n            \"disk\", \"ceph\", \"memcached\", \"lmdb\", \"http\" and \"petrel\".\n            Default: None.\n        test_mode (bool): Store `True` when building test dataset.\n            Default: `False`.\n        domain_a (str, optional): Domain of images in trainA / testA.\n            Defaults to 'A'.\n        domain_b (str, optional): Domain of images in trainB / testB.\n            Defaults to 'B'.\n    \"\"\"\n\n    def __init__(self,\n                 data_root,\n                 pipeline,\n                 io_backend: Optional[str] = None,\n                 test_mode=False,\n                 domain_a='A',\n                 domain_b='B'):\n        phase = 'test' if test_mode else 'train'\n        self.dataroot_a = osp.join(str(data_root), phase + 'A')\n        self.dataroot_b = osp.join(str(data_root), phase + 'B')\n\n        if io_backend is None:\n            self.file_backend = get_file_backend(uri=data_root)\n        else:\n            self.file_backend = get_file_backend(\n                backend_args={'backend': io_backend})\n\n        super().__init__(\n            data_root=data_root,\n            pipeline=pipeline,\n            test_mode=test_mode,\n            serialize_data=False)\n        self.len_a = len(self.data_infos_a)\n        self.len_b = len(self.data_infos_b)\n        self.test_mode = test_mode\n        assert isinstance(domain_a, str)\n        assert isinstance(domain_b, str)\n        self.domain_a = domain_a\n        self.domain_b = domain_b\n\n    def load_data_list(self):\n        \"\"\"Load the data list.\n\n        Returns:\n            list: The data info list of source and target domain.\n        \"\"\"\n        self.data_infos_a = self._load_domain_data_list(self.dataroot_a)\n        self.data_infos_b = self._load_domain_data_list(self.dataroot_b)\n        return [self.data_infos_a, self.data_infos_b]\n\n    def _load_domain_data_list(self, dataroot):\n        \"\"\"Load unpaired image paths of one domain.\n\n        Args:\n            dataroot (str): Path to the folder root for unpaired images of\n                one domain.\n\n        Returns:\n            list[dict]: List that contains unpaired image paths of one domain.\n        \"\"\"\n        data_infos = []\n        paths = sorted(self.scan_folder(dataroot))\n        for path in paths:\n            data_infos.append(dict(path=path))\n        return data_infos\n\n    @force_full_init\n    def get_data_info(self, idx) -> dict:\n        \"\"\"Get annotation by index and automatically call ``full_init`` if the\n        dataset has not been fully initialized.\n\n        Args:\n            idx (int): The index of data.\n\n        Returns:\n            dict: The idx-th annotation of the dataset.\n        \"\"\"\n        img_a_path = self.data_infos_a[idx % self.len_a]['path']\n        if not self.test_mode:\n            idx_b = np.random.randint(0, self.len_b)\n            img_b_path = self.data_infos_b[idx_b]['path']\n        else:\n            img_b_path = self.data_infos_b[idx % self.len_b]['path']\n        data_info = dict()\n        data_info[f'img_{self.domain_a}_path'] = img_a_path\n        data_info[f'img_{self.domain_b}_path'] = img_b_path\n        return data_info\n\n    def __len__(self):\n        \"\"\"The length of the dataset.\"\"\"\n        return max(self.len_a, self.len_b)\n\n    def scan_folder(self, path):\n        \"\"\"Obtain image path list (including sub-folders) from a given folder.\n\n        Args:\n            path (str | :obj:`Path`): Folder path.\n\n        Returns:\n            list[str]: Image list obtained from the given folder.\n        \"\"\"\n        imgs_list = self.file_backend.list_dir_or_file(\n            path, list_dir=False, suffix=IMG_EXTENSIONS, recursive=True)\n        images = [self.file_backend.join_path(path, img) for img in imgs_list]\n        assert images, f'{path} has no valid image file.'\n        return images\n"
  },
  {
    "path": "mmagic/engine/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .hooks import *  # noqa: F401, F403\nfrom .optimizers import *  # noqa: F401, F403\nfrom .runner import *  # noqa: F401, F403\nfrom .schedulers import *  # noqa: F401, F403\n"
  },
  {
    "path": "mmagic/engine/hooks/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .ema import ExponentialMovingAverageHook\nfrom .iter_time_hook import IterTimerHook\nfrom .pggan_fetch_data_hook import PGGANFetchDataHook\nfrom .pickle_data_hook import PickleDataHook\nfrom .reduce_lr_scheduler_hook import ReduceLRSchedulerHook\nfrom .visualization_hook import BasicVisualizationHook, VisualizationHook\n\n__all__ = [\n    'ReduceLRSchedulerHook', 'BasicVisualizationHook', 'VisualizationHook',\n    'ExponentialMovingAverageHook', 'IterTimerHook', 'PGGANFetchDataHook',\n    'PickleDataHook'\n]\n"
  },
  {
    "path": "mmagic/engine/hooks/ema.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport warnings\nfrom copy import deepcopy\nfrom functools import partial\nfrom typing import Optional, Sequence\n\nimport torch\nfrom mmengine.hooks import Hook\nfrom mmengine.model.wrappers import is_model_wrapper\nfrom mmengine.registry import HOOKS\nfrom mmengine.runner import Runner\nfrom mmengine.utils import is_tuple_of\n\nDATA_BATCH = Optional[Sequence[dict]]\n\n\n@HOOKS.register_module()\nclass ExponentialMovingAverageHook(Hook):\n    \"\"\"Exponential Moving Average Hook.\n\n    Exponential moving average is a trick that widely used in current GAN\n    literature, e.g., PGGAN, StyleGAN, and BigGAN. This general idea of it is\n    maintaining a model with the same architecture, but its parameters are\n    updated as a moving average of the trained weights in the original model.\n    In general, the model with moving averaged weights achieves better\n    performance.\n\n    Args:\n        module_keys (str | tuple[str]): The name of the ema model. Note that we\n            require these keys are followed by '_ema' so that we can easily\n            find the original model by discarding the last four characters.\n        interp_mode (str, optional): Mode of the interpolation method.\n            Defaults to 'lerp'.\n        interp_cfg (dict | None, optional): Set arguments of the interpolation\n            function. Defaults to None.\n        interval (int, optional): Evaluation interval (by iterations).\n            Default: -1.\n        start_iter (int, optional): Start iteration for ema. If the start\n            iteration is not reached, the weights of ema model will maintain\n            the same as the original one. Otherwise, its parameters are updated\n            as a moving average of the trained weights in the original model.\n            Default: 0.\n    \"\"\"\n\n    def __init__(self,\n                 module_keys,\n                 interp_mode='lerp',\n                 interp_cfg=None,\n                 interval=-1,\n                 start_iter=0):\n        super().__init__()\n        assert isinstance(module_keys, str) or is_tuple_of(module_keys, str)\n        self.module_keys = (module_keys, ) if isinstance(module_keys,\n                                                         str) else module_keys\n        # sanity check for the format of module keys\n        for k in self.module_keys:\n            assert k.endswith(\n                '_ema'), 'You should give keys that end with \"_ema\".'\n        self.interp_mode = interp_mode\n        self.interp_cfg = dict() if interp_cfg is None else deepcopy(\n            interp_cfg)\n        self.interval = interval\n        self.start_iter = start_iter\n\n        assert hasattr(\n            self, interp_mode\n        ), f'Currently, we do not support {self.interp_mode} for EMA.'\n        self.interp_func = partial(\n            getattr(self, interp_mode), **self.interp_cfg)\n\n    @staticmethod\n    def lerp(a, b, momentum=0.001, momentum_nontrainable=1., trainable=True):\n        \"\"\"Does a linear interpolation of two parameters/ buffers.\n\n        Args:\n            a (torch.Tensor): Interpolation start point, refer to orig state.\n            b (torch.Tensor): Interpolation end point, refer to ema state.\n            momentum (float, optional): The weight for the interpolation\n                formula. Defaults to 0.001.\n            momentum_nontrainable (float, optional): The weight for the\n                interpolation formula used for nontrainable parameters.\n                Defaults to 1..\n            trainable (bool, optional): Whether input parameters is trainable.\n                If set to False, momentum_nontrainable will be used.\n                Defaults to True.\n        Returns:\n            torch.Tensor: Interpolation result.\n        \"\"\"\n        assert 0.0 < momentum < 1.0, 'momentum must be in range (0.0, 1.0)'\\\n                                     f'but got {momentum}'\n        assert 0.0 < momentum_nontrainable <= 1.0, (\n            'momentum_nontrainable must be in range (0.0, 1.0] but got '\n            f'{momentum_nontrainable}')\n        if momentum > 0.5:\n            warnings.warn(\n                'The value of momentum in EMA is usually a small number,'\n                'which is different from the conventional notion of '\n                f'momentum but got {momentum}. Please make sure the '\n                f'value is correct.')\n        m = momentum if trainable else momentum_nontrainable\n        return b + (a - b) * m\n\n    def every_n_iters(self, runner: Runner, n: int):\n        \"\"\"This is the function to perform every n iterations.\n\n        Args:\n            runner (Runner): runner used to drive the whole pipeline\n            n (int): the number of iterations\n\n        Returns:\n            int: the latest iterations\n        \"\"\"\n        if runner.iter < self.start_iter:\n            return True\n        return (runner.iter + 1 - self.start_iter) % n == 0 if n > 0 else False\n\n    @torch.no_grad()\n    def after_train_iter(self,\n                         runner: Runner,\n                         batch_idx: int,\n                         data_batch: DATA_BATCH = None,\n                         outputs: Optional[dict] = None) -> None:\n        \"\"\"This is the function to perform after each training iteration.\n\n        Args:\n            runner (Runner): runner to drive the pipeline\n            batch_idx (int): the id of batch\n            data_batch (DATA_BATCH, optional): data batch. Defaults to None.\n            outputs (Optional[dict], optional): output. Defaults to None.\n        \"\"\"\n\n        if not self.every_n_iters(runner, self.interval):\n            return\n\n        model = runner.model.module if is_model_wrapper(\n            runner.model) else runner.model\n\n        for key in self.module_keys:\n            # get current ema states\n            ema_net = getattr(model, key)\n            states_ema = ema_net.state_dict(keep_vars=False)\n            # get currently original states\n            net = getattr(model, key[:-4])\n            states_orig = net.state_dict(keep_vars=True)\n\n            for k, v in states_orig.items():\n                if runner.iter < self.start_iter:\n                    states_ema[k].data.copy_(v.data)\n                else:\n                    states_ema[k] = self.interp_func(\n                        v, states_ema[k], trainable=v.requires_grad).detach()\n            ema_net.load_state_dict(states_ema, strict=True)\n\n    def before_run(self, runner: Runner):\n        \"\"\"This is the function perform before each run.\n\n        Args:\n            runner (Runner): runner used to drive the whole pipeline\n\n        Raises:\n            RuntimeError: error message\n        \"\"\"\n        model = runner.model.module if is_model_wrapper(\n            runner.model) else runner.model\n        # sanity check for ema model\n        for k in self.module_keys:\n            if not hasattr(model, k) and not hasattr(model, k[:-4]):\n                raise RuntimeError(\n                    f'Cannot find both {k[:-4]} and {k} network for EMA hook.')\n            if not hasattr(model, k) and hasattr(model, k[:-4]):\n                setattr(model, k, deepcopy(getattr(model, k[:-4])))\n                warnings.warn(\n                    f'We do not suggest construct and initialize EMA model {k}'\n                    ' in hook. You may explicitly define it by yourself.')\n"
  },
  {
    "path": "mmagic/engine/hooks/iter_time_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport time\nfrom typing import Optional, Sequence, Union\n\nfrom mmengine.hooks import IterTimerHook as BaseIterTimerHook\nfrom mmengine.structures import BaseDataElement\n\nfrom mmagic.registry import HOOKS\n\nDATA_BATCH = Optional[Sequence[dict]]\n\n\n@HOOKS.register_module()\nclass IterTimerHook(BaseIterTimerHook):\n    \"\"\"IterTimerHooks inherits from :class:`mmengine.hooks.IterTimerHook` and\n    overwrites :meth:`self._after_iter`.\n\n    This hooks should be used along with\n    :class:`mmagic.engine.runner.MultiValLoop` and\n    :class:`mmagic.engine.runner.MultiTestLoop`.\n    \"\"\"\n\n    def _after_iter(self,\n                    runner,\n                    batch_idx: int,\n                    data_batch: DATA_BATCH = None,\n                    outputs: Optional[Union[dict,\n                                            Sequence[BaseDataElement]]] = None,\n                    mode: str = 'train') -> None:\n        \"\"\"Calculating time for an iteration and updating \"time\"\n        ``HistoryBuffer`` of ``runner.message_hub``. If `mode` is 'train', we\n        take `runner.max_iters` as the total iterations and calculate the rest\n        time. If `mode` in `val` or `test`, we use\n        `runner.val_loop.total_length` or `runner.test_loop.total_length` as\n        total number of iterations. If you want to know how `total_length` is\n        calculated, please refers to\n        :meth:`mmagic.engine.runner.MultiValLoop.run` and\n        :meth:`mmagic.engine.runner.MultiTestLoop.run`.\n\n        Args:\n            runner (Runner): The runner of the training validation and\n                testing process.\n            batch_idx (int): The index of the current batch in the loop.\n            data_batch (Sequence[dict], optional): Data from dataloader.\n                Defaults to None.\n            outputs (dict or sequence, optional): Outputs from model. Defaults\n                to None.\n            mode (str): Current mode of runner. Defaults to 'train'.\n        \"\"\"\n        # Update iteration time in `runner.message_hub`.\n        message_hub = runner.message_hub\n        message_hub.update_scalar(f'{mode}/time', time.time() - self.t)\n        self.t = time.time()\n        window_size = runner.log_processor.window_size\n        # Calculate eta every `window_size` iterations. Since test and val\n        # loop will not update runner.iter, use `every_n_inner_iters`to check\n        # the interval.\n        if self.every_n_inner_iters(batch_idx, window_size):\n            iter_time = message_hub.get_scalar(f'{mode}/time').mean(\n                window_size)\n            if mode == 'train':\n                self.time_sec_tot += iter_time * window_size\n                # Calculate average iterative time.\n                time_sec_avg = self.time_sec_tot / (\n                    runner.iter - self.start_iter + 1)\n                # Calculate eta.\n                eta_sec = time_sec_avg * (runner.max_iters - runner.iter - 1)\n                runner.message_hub.update_info('eta', eta_sec)\n            else:\n                if mode == 'val':\n                    total_length = runner.val_loop.total_length\n                else:\n                    total_length = runner.test_loop.total_length\n\n                eta_sec = iter_time * (total_length - batch_idx - 1)\n                runner.message_hub.update_info('eta', eta_sec)\n"
  },
  {
    "path": "mmagic/engine/hooks/pggan_fetch_data_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Sequence\n\nimport torch\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler, pseudo_collate\nfrom mmengine.hooks import Hook\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.runner import IterBasedTrainLoop\nfrom mmengine.runner.loops import _InfiniteDataloaderIterator\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import HOOKS\n\nDATA_BATCH = Optional[Sequence[dict]]\n\n\n@HOOKS.register_module()\nclass PGGANFetchDataHook(Hook):\n    \"\"\"PGGAN Fetch Data Hook.\n\n    Args:\n        interval (int, optional):  The interval of calling this hook. If set\n            to -1, the visualization hook will not be called. Defaults to 1.\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n    def before_train_iter(self,\n                          runner,\n                          batch_idx: int,\n                          data_batch: DATA_BATCH = None) -> None:\n\n        _module = runner.model.module if is_model_wrapper(\n            runner.model) else runner.model\n        _next_scale_int = _module._next_scale_int\n        if isinstance(_next_scale_int, torch.Tensor):\n            _next_scale_int = _next_scale_int.item()\n\n        dataloader_orig = runner.train_loop.dataloader\n        new_dataloader = self.update_dataloader(dataloader_orig,\n                                                _next_scale_int)\n        if new_dataloader is not None:\n            runner.train_loop.dataloader = new_dataloader\n            if isinstance(runner.train_loop, IterBasedTrainLoop):\n                runner.train_loop.dataloader_iterator = \\\n                    _InfiniteDataloaderIterator(new_dataloader)\n\n    def update_dataloader(self, dataloader: DataLoader,\n                          curr_scale: int) -> Optional[DataLoader]:\n        \"\"\"Update the data loader.\n\n        Args:\n            dataloader (DataLoader): The dataloader to be updated.\n            curr_scale (int): The current scale of the generated image.\n\n        Returns:\n            Optional[DataLoader]: The updated dataloader. If the dataloader do\n                not need to update, return None.\n        \"\"\"\n        if hasattr(dataloader.dataset, 'update_annotations'):\n            update_flag = dataloader.dataset.update_annotations(curr_scale)\n        else:\n            update_flag = False\n\n        if update_flag:\n            dataset = dataloader.dataset\n            # build new sampler\n            sampler_orig = dataloader.sampler\n            if isinstance(sampler_orig, DefaultSampler):\n                shuffle = sampler_orig.shuffle\n                seed = sampler_orig.seed\n                round_up = sampler_orig.round_up\n                sampler = DefaultSampler(dataset, shuffle, seed, round_up)\n            elif isinstance(sampler_orig, InfiniteSampler):\n                shuffle = sampler_orig.shuffle\n                seed = sampler_orig.seed\n                sampler = InfiniteSampler(dataset, shuffle, seed)\n            else:\n                raise ValueError('MMagic only support \\'DefaultSampler\\' and '\n                                 '\\'InfiniteSampler\\' as sampler. But receive '\n                                 f'\\'{type(sampler_orig)}\\'.')\n\n            num_workers = dataloader.num_workers\n            worker_init_fn = dataloader.worker_init_fn\n\n            dataloader = DataLoader(\n                dataset,\n                batch_size=dataloader.dataset.samples_per_gpu,\n                sampler=sampler,\n                num_workers=num_workers,\n                collate_fn=pseudo_collate,\n                shuffle=False,\n                worker_init_fn=worker_init_fn)\n            return dataloader\n        return None\n"
  },
  {
    "path": "mmagic/engine/hooks/pickle_data_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport logging\nimport os\nimport pickle\nfrom typing import List, Optional, Sequence, Tuple\n\nimport numpy as np\nimport torch\nfrom mmengine import is_list_of, mkdir_or_exist, print_log\nfrom mmengine.dist import master_only\nfrom mmengine.hooks import Hook\nfrom mmengine.runner import Runner\nfrom torch import Tensor\n\nfrom mmagic.registry import HOOKS\n\nDATA_BATCH = Optional[Sequence[dict]]\n\n\n@HOOKS.register_module()\nclass PickleDataHook(Hook):\n    \"\"\"Pickle Useful Data Hook.\n\n    This hook will be used in SinGAN training for saving some important data\n    that will be used in testing or inference.\n\n    Args:\n        output_dir (str): The output path for saving pickled data.\n        data_name_list (list[str]): The list contains the name of results in\n            outputs dict.\n        interval (int): The interval of calling this hook. If set to -1,\n            the PickleDataHook will not be called during training. Default: -1.\n        before_run (bool, optional): Whether to save before running.\n            Defaults to False.\n        after_run (bool, optional): Whether to save after running.\n            Defaults to False.\n        filename_tmpl (str, optional): Format string used to save images. The\n            output file name will be formatted as this args.\n            Defaults to 'iter_{}.pkl'.\n    \"\"\"\n\n    def __init__(self,\n                 output_dir,\n                 data_name_list,\n                 interval=-1,\n                 before_run=False,\n                 after_run=False,\n                 filename_tmpl='iter_{}.pkl'):\n        assert is_list_of(data_name_list, str)\n        self.output_dir = output_dir\n        self.data_name_list = data_name_list\n        self.interval = interval\n        self.filename_tmpl = filename_tmpl\n        self._before_run = before_run\n        self._after_run = after_run\n\n    @master_only\n    def after_run(self, runner):\n        \"\"\"The behavior after each train iteration.\n\n        Args:\n            runner (object): The runner.\n        \"\"\"\n        if self._after_run:\n            self._pickle_data(runner)\n\n    @master_only\n    def before_run(self, runner):\n        \"\"\"The behavior after each train iteration.\n\n        Args:\n            runner (object): The runner.\n        \"\"\"\n        if self._before_run:\n            self._pickle_data(runner)\n\n    @master_only\n    def after_train_iter(self,\n                         runner,\n                         batch_idx: int,\n                         data_batch: DATA_BATCH = None,\n                         outputs: Optional[dict] = None):\n        \"\"\"The behavior after each train iteration.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the train loop.\n            data_batch (Sequence[dict], optional): Data from dataloader.\n                Defaults to None.\n            outputs (dict, optional): Outputs from model.\n                Defaults to None.\n        \"\"\"\n        if not self.every_n_train_iters(runner, self.interval):\n            return\n        self._pickle_data(runner)\n\n    def _pickle_data(self, runner: Runner):\n        \"\"\"Save target data to pickle file.\n\n        Args:\n            runner (Runner): The runner of the training process.\n        \"\"\"\n        filename = self.filename_tmpl.format(runner.iter + 1)\n        if not hasattr(self, '_out_dir'):\n            self._out_dir = os.path.join(runner.work_dir, self.output_dir)\n        mkdir_or_exist(self._out_dir)\n        file_path = os.path.join(self._out_dir, filename)\n        with open(file_path, 'wb') as f:\n            module = runner.model\n            if hasattr(module, 'module'):\n                module = module.module\n            not_find_keys = []\n            data_dict = {}\n            for k in self.data_name_list:\n                if hasattr(module, k):\n                    data_dict[k] = self._get_numpy_data(getattr(module, k))\n                else:\n                    not_find_keys.append(k)\n            pickle.dump(data_dict, f)\n            print_log(f'Pickle data in {filename}', 'current')\n\n            if len(not_find_keys) > 0:\n                print_log(\n                    f'Cannot find keys for pickling: {not_find_keys}',\n                    'current',\n                    level=logging.WARN)\n            f.flush()\n\n    def _get_numpy_data(\n        self, data: Tuple[List[Tensor], Tensor, int]\n    ) -> Tuple[List[np.ndarray], np.ndarray, int]:\n        \"\"\"Convert tensor or list of tensor to numpy or list of numpy.\n\n        Args:\n            data (Tuple[List[Tensor], Tensor, int]): Data to be converted.\n\n        Returns:\n            Tuple[List[np.ndarray], np.ndarray, int]: Converted data.\n        \"\"\"\n        if isinstance(data, list):\n            return [self._get_numpy_data(x) for x in data]\n\n        if isinstance(data, torch.Tensor):\n            return data.cpu().numpy()\n\n        return data\n"
  },
  {
    "path": "mmagic/engine/hooks/reduce_lr_scheduler_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Sequence\n\nfrom mmengine import MessageHub\nfrom mmengine.hooks import ParamSchedulerHook\nfrom mmengine.runner import Runner\n\nfrom mmagic.registry import HOOKS\n\nDATA_BATCH = Optional[Sequence[dict]]\n\n\n@HOOKS.register_module()\nclass ReduceLRSchedulerHook(ParamSchedulerHook):\n    \"\"\"A hook to update learning rate.\n\n    Args:\n        val_metric (str): The metric of validation. If val_metric is not None,\n            we check val_metric to reduce learning. Default: None.\n        by_epoch (bool): Whether to update by epoch. Default: True.\n        interval (int): The interval of iterations to update. Default: 1.\n    \"\"\"\n\n    def __init__(self,\n                 val_metric: str = None,\n                 by_epoch=True,\n                 interval=1) -> None:\n        super().__init__()\n\n        self.message_hub = MessageHub.get_instance('reduce_lr')\n\n        self.val_metric = val_metric\n        self.by_epoch = by_epoch\n        self.interval = interval\n        self.sum_value = 0\n        self.count = 0\n\n    def _calculate_average_value(self):\n        value = self.sum_value / self.count\n        self.sum_value = 0\n        self.count = 0\n        self.message_hub.update_scalar('value', value)\n\n    def after_train_epoch(self, runner: Runner):\n        \"\"\"Call step function for each scheduler after each train epoch.\n\n        Args:\n            runner (Runner): The runner of the training process.\n        \"\"\"\n        if not self.by_epoch:\n            return\n\n        # If val_metric is not None, we check val_metric to reduce learning\n        if self.val_metric is not None:\n            return\n\n        if self.every_n_epochs(runner, self.interval):\n            self._calculate_average_value()\n            super().after_train_epoch(runner=runner)\n\n    def after_train_iter(self,\n                         runner: Runner,\n                         batch_idx: int,\n                         data_batch: DATA_BATCH = None,\n                         outputs: Optional[dict] = None) -> None:\n        \"\"\"Call step function for each scheduler after each iteration.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the train loop.\n            data_batch (Sequence[dict], optional): Data from dataloader.\n                In order to keep this interface consistent with other hooks,\n                we keep ``data_batch`` here. Defaults to None.\n            outputs (dict, optional): Outputs from model.\n                In order to keep this interface consistent with other hooks, we\n                keep ``data_batch`` here. Defaults to None.\n        \"\"\"\n\n        # If val_metric is not None, we check val_metric to reduce learning\n        if self.val_metric is not None:\n            return\n\n        current = runner.message_hub.get_scalar('train/loss').current()\n        self.sum_value += current * len(data_batch)\n        self.count += len(data_batch)\n\n        if self.by_epoch:\n            return\n\n        if self.every_n_train_iters(runner, self.interval):\n            self._calculate_average_value()\n            super().after_train_iter(\n                runner=runner,\n                batch_idx=batch_idx,\n                data_batch=data_batch,\n                outputs=outputs)\n\n    def after_val_epoch(self,\n                        runner,\n                        metrics: Optional[Dict[str, float]] = None):\n        \"\"\"Call step function for each scheduler after each validation epoch.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            metrics (dict, optional): The metrics of validation. Default: None.\n        \"\"\"\n        # If val_metric is None, we check training loss to reduce learning\n        # rate.\n        if self.val_metric is None:\n            return\n\n        if self.val_metric not in metrics:\n            raise KeyError(f'{self.val_metric} is not found in metrics')\n\n        self.sum_value += metrics[self.val_metric]\n        self.count += 1\n\n        if not self.by_epoch or self.every_n_epochs(runner, self.interval):\n            # if self.by_epoch is False,\n            # call val after several iter\n            # and update LR in each ``after_val_epoch``\n            self._calculate_average_value()\n\n            def step(param_schedulers):\n                assert isinstance(param_schedulers, list)\n                for scheduler in param_schedulers:\n                    scheduler.step()\n\n            if isinstance(runner.param_schedulers, list):\n                step(runner.param_schedulers)\n            elif isinstance(runner.param_schedulers, dict):\n                for param_schedulers in runner.param_schedulers.values():\n                    step(param_schedulers)\n            else:\n                raise TypeError(\n                    'runner.param_schedulers should be list of ParamScheduler '\n                    'or a dict containing list of ParamScheduler, '\n                    f'but got {runner.param_schedulers}')\n"
  },
  {
    "path": "mmagic/engine/hooks/visualization_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport warnings\nfrom collections import defaultdict\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Sequence, Tuple, Union\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.dist import master_only\nfrom mmengine.hooks import Hook\nfrom mmengine.registry import HOOKS\nfrom mmengine.runner import Runner\nfrom mmengine.structures import BaseDataElement\nfrom mmengine.utils import is_list_of\nfrom mmengine.visualization import Visualizer\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import get_sampler\n\n\n@HOOKS.register_module()\nclass BasicVisualizationHook(Hook):\n    \"\"\"Basic hook that invoke visualizers during validation and test.\n\n    Args:\n        interval (int | dict): Visualization interval. Default: {}.\n        on_train (bool): Whether to call hook during train. Default to False.\n        on_val (bool): Whether to call hook during validation. Default to True.\n        on_test (bool): Whether to call hook during test. Default to True.\n    \"\"\"\n    priority = 'NORMAL'\n\n    def __init__(self,\n                 interval: dict = {},\n                 on_train=False,\n                 on_val=True,\n                 on_test=True):\n        self._interval = interval\n        self._sample_counter = 0\n        self._vis_dir = None\n        self._on_train = on_train\n        self._on_val = on_val\n        self._on_test = on_test\n\n    def _after_iter(\n        self,\n        runner,\n        batch_idx: int,\n        data_batch: Optional[Sequence[dict]],\n        outputs: Optional[Sequence[BaseDataElement]],\n        mode=None,\n    ) -> None:\n        \"\"\"Show or Write the predicted results.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the test loop.\n            data_batch (Sequence[dict], optional): Data\n                from dataloader. Defaults to None.\n            outputs (Sequence[BaseDataElement], optional): Outputs from model.\n                Defaults to None.\n        \"\"\"\n        if mode == 'train' and (not self._on_train):\n            return\n        elif mode == 'val' and (not self._on_val):\n            return\n        elif mode == 'test' and (not self._on_test):\n            return\n\n        if isinstance(self._interval, int):\n            interval = self._interval\n        else:\n            interval = self._interval.get(mode, 1)\n\n        if self.every_n_inner_iters(batch_idx, interval):\n            for data_sample in outputs:\n                runner.visualizer.add_datasample(data_sample, step=runner.iter)\n\n\n@HOOKS.register_module()\nclass VisualizationHook(Hook):\n    \"\"\"MMagic Visualization Hook. Used to visual output samples in training,\n    validation and testing. In this hook, we use a list called\n    `sample_kwargs_list` to control how to generate samples and how to\n    visualize them. Each element in `sample_kwargs_list`, called\n    `sample_kwargs`, may contains the following keywords:\n\n    - Required key words:\n        - 'type': Value must be string. Denotes what kind of sampler is used to\n            generate image. Refers to :meth:`~mmagic.utils.get_sampler`.\n    - Optional key words (If not passed, will use the default value):\n        - 'n_row': Value must be int. The number of images in one row.\n        - 'num_samples': Value must be int. The number of samples to visualize.\n        - 'vis_mode': Value must be string. How to visualize the generated\n            samples (e.g. image, gif).\n        - 'fixed_input': Value must be bool. Whether use the fixed input\n            during the loop.\n        - 'draw_gt': Value must be bool. Whether save the real images.\n        - 'target_keys': Value must be string or list of string. The keys of\n            the target image to visualize.\n        - 'name': Value must be string. If not passed, will use\n            `sample_kwargs['type']` as default.\n\n    For convenience, we also define a group of alias of samplers' type for\n    models supported in MMagic. Refers to\n    `:attr:self.SAMPLER_TYPE_MAPPING`.\n\n    Example:\n        >>> # for GAN models\n        >>> custom_hooks = [\n        >>>     dict(\n        >>>         type='VisualizationHook',\n        >>>         interval=1000,\n        >>>         fixed_input=True,\n        >>>         vis_kwargs_list=dict(type='GAN', name='fake_img'))]\n        >>> # for Translation models\n        >>> custom_hooks = [\n        >>>     dict(\n        >>>         type='VisualizationHook',\n        >>>         interval=10,\n        >>>         fixed_input=False,\n        >>>         vis_kwargs_list=[dict(type='Translation',\n        >>>                                  name='translation_train',\n        >>>                                  n_samples=6, draw_gt=True,\n        >>>                                  n_row=3),\n        >>>                             dict(type='TranslationVal',\n        >>>                                  name='translation_val',\n        >>>                                  n_samples=16, draw_gt=True,\n        >>>                                  n_row=4)])]\n\n    # NOTE: user-defined vis_kwargs > vis_kwargs_mapping > hook init args\n\n    Args:\n        interval (int): Visualization interval. Default: 1000.\n        sampler_kwargs_list (Tuple[List[dict], dict]): The list of sampling\n            behavior to generate images.\n        fixed_input (bool): The default action of whether use fixed input to\n            generate samples during the loop. Defaults to True.\n        n_samples (Optional[int]): The default value of number of samples to\n            visualize. Defaults to 64.\n        n_row (Optional[int]): The default value of number of images in each\n            row in the visualization results. Defaults to None.\n        message_hub_vis_kwargs (Optional[Tuple[str, dict, List[str],\n            List[Dict]]]): Key arguments visualize images in message hub.\n            Defaults to None.\n        save_at_test (bool): Whether save images during test. Defaults to True.\n        max_save_at_test (int): Maximum number of samples saved at test time.\n            If None is passed, all samples will be saved. Defaults to 100.\n        show (bool): Whether to display the drawn image. Default to False.\n        wait_time (float): The interval of show (s). Defaults to 0.\n    \"\"\"\n\n    priority = 'NORMAL'\n\n    VIS_KWARGS_MAPPING = dict(\n        GAN=dict(type='Noise'),\n        SinGAN=dict(type='Arguments', forward_kwargs=dict(mode='rand')),\n        Translation=dict(type='Data'),\n        TranslationVal=dict(type='ValData'),\n        TranslationTest=dict(type='TestData'),\n        DDPMDenoising=dict(\n            type='Arguments',\n            name='ddpm_sample',\n            n_samples=16,\n            n_row=4,\n            vis_mode='gif',\n            n_skip=100,\n            forward_kwargs=dict(\n                forward_mode='sampling',\n                sample_kwargs=dict(show_pbar=True, save_intermedia=True))))\n\n    def __init__(self,\n                 interval: int = 1000,\n                 vis_kwargs_list: Tuple[List[dict], dict] = None,\n                 fixed_input: bool = True,\n                 n_samples: Optional[int] = 64,\n                 n_row: Optional[int] = None,\n                 message_hub_vis_kwargs: Optional[Tuple[str, dict, List[str],\n                                                        List[Dict]]] = None,\n                 save_at_test: bool = True,\n                 max_save_at_test: int = 100,\n                 test_vis_keys: Optional[Union[str, List[str]]] = None,\n                 show: bool = False,\n                 wait_time: float = 0):\n\n        self._visualizer: Visualizer = Visualizer.get_current_instance()\n        self.interval = interval\n\n        self.vis_kwargs_list = deepcopy(vis_kwargs_list)\n        if isinstance(self.vis_kwargs_list, dict):\n            self.vis_kwargs_list = [self.vis_kwargs_list]\n\n        self.fixed_input = fixed_input\n        self.inputs_buffer = defaultdict(list)\n\n        self.n_samples = n_samples\n        self.n_row = n_row\n\n        self.show = show\n        if self.show:\n            # No need to think about vis backends.\n            self._visualizer._vis_backends = {}\n            warnings.warn('The show is True, it means that only '\n                          'the prediction results are visualized '\n                          'without storing data, so vis_backends '\n                          'needs to be excluded.')\n\n        self.wait_time = wait_time\n        self.save_at_test = save_at_test\n        self.test_vis_keys_list = test_vis_keys\n        self.max_save_at_test = max_save_at_test\n        self.message_vis_kwargs = message_hub_vis_kwargs\n\n    @master_only\n    def after_val_iter(self, runner: Runner, batch_idx: int, data_batch: dict,\n                       outputs) -> None:\n        \"\"\":class:`VisualizationHook` do not support visualize during\n        validation.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the test loop.\n            data_batch (Sequence[dict], optional): Data from dataloader.\n                Defaults to None.\n            outputs: outputs of the generation model\n        \"\"\"\n        return\n\n    @master_only\n    def after_test_iter(self, runner: Runner, batch_idx: int, data_batch: dict,\n                        outputs):\n        \"\"\"Visualize samples after test iteration.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the test loop.\n            data_batch (dict, optional): Data from dataloader.\n                Defaults to None.\n            outputs: outputs of the generation model Defaults to None.\n        \"\"\"\n        if not self.save_at_test:\n            return\n\n        for idx, sample in enumerate(outputs):\n            curr_idx = batch_idx * len(outputs) + idx\n            if (self.max_save_at_test is not None\n                    and curr_idx >= self.max_save_at_test):\n                continue\n            # NOTE: only support visualize image tensors (ndim == 3)\n            if self.test_vis_keys_list is None:\n                target_keys = [\n                    k for k, v in sample.items() if not k.startswith('_')\n                    and isinstance(v, torch.Tensor) and v.ndim == 3\n                ]\n                assert len(target_keys), (\n                    'Cannot found Tensor in outputs. Please specific '\n                    '\\'vis_test_keys_list\\'.')\n            elif isinstance(self.test_vis_keys_list, str):\n                target_keys = [self.test_vis_keys_list]\n            else:\n                assert is_list_of(self.test_vis_keys_list, str), (\n                    'test_vis_keys_list must be str or list of str or None.')\n                target_keys = self.test_vis_keys_list\n\n            for key in target_keys:\n                name = key.replace('.', '_')\n                self._visualizer.add_datasample(\n                    name=f'test_{name}',\n                    gen_samples=[sample],\n                    step=curr_idx,\n                    target_keys=key,\n                    n_row=1)\n\n    @master_only\n    def after_train_iter(self,\n                         runner: Runner,\n                         batch_idx: int,\n                         data_batch: dict = None,\n                         outputs: Optional[dict] = None) -> None:\n        \"\"\"Visualize samples after train iteration.\n\n        Args:\n            runner (Runner): The runner of the training process.\n            batch_idx (int): The index of the current batch in the train loop.\n            data_batch (dict): Data from dataloader.\n                Defaults to None.\n            outputs (dict, optional): Outputs from model. Defaults to None.\n        \"\"\"\n        if self.every_n_inner_iters(batch_idx, self.interval):\n            self.vis_sample(runner, batch_idx, data_batch, outputs)\n\n    @torch.no_grad()\n    def vis_sample(self,\n                   runner: Runner,\n                   batch_idx: int,\n                   data_batch: dict,\n                   outputs: Optional[dict] = None) -> None:\n        \"\"\"Visualize samples.\n\n        Args:\n            runner (Runner): The runner contains model to visualize.\n            batch_idx (int): The index of the current batch in loop.\n            data_batch (dict): Data from dataloader.\n                Defaults to None.\n            outputs (dict, optional): Outputs from model. Defaults to None.\n        \"\"\"\n        # this function will only called in training process\n        num_batches = runner.train_dataloader.batch_size\n\n        module = runner.model\n        module.eval()\n        if hasattr(module, 'module'):\n            module = module.module\n\n        forward_func = module.val_step\n\n        for vis_kwargs in self.vis_kwargs_list:\n            # pop the sample-unrelated values\n            vis_kwargs_ = deepcopy(vis_kwargs)\n            sampler_type = vis_kwargs_['type']\n\n            # replace with alias\n            for alias in self.VIS_KWARGS_MAPPING.keys():\n                if alias.upper() == sampler_type.upper():\n                    sampler_alias = deepcopy(self.VIS_KWARGS_MAPPING[alias])\n                    vis_kwargs_['type'] = sampler_alias.pop('type')\n                    for default_k, default_v in sampler_alias.items():\n                        vis_kwargs_.setdefault(default_k, default_v)\n                    break\n            # sampler_type = vis_kwargs_.pop('type')\n\n            name = vis_kwargs_.pop('name', None)\n            if not name:\n                name = sampler_type.lower()\n\n            n_samples = vis_kwargs_.pop('n_samples', self.n_samples)\n            n_row = vis_kwargs_.pop('n_row', self.n_row)\n\n            num_iters = math.ceil(n_samples / num_batches)\n            vis_kwargs_['max_times'] = num_iters\n            vis_kwargs_['num_batches'] = num_batches\n            fixed_input = vis_kwargs_.pop('fixed_input', self.fixed_input)\n            target_keys = vis_kwargs_.pop('target_keys', None)\n            vis_mode = vis_kwargs_.pop('vis_mode', None)\n\n            output_list = []\n            if fixed_input and self.inputs_buffer[sampler_type]:\n                sampler = self.inputs_buffer[sampler_type]\n            else:\n                sampler = get_sampler(vis_kwargs_, runner)\n            need_save = fixed_input and not self.inputs_buffer[sampler_type]\n\n            for inputs in sampler:\n                output = forward_func(inputs)\n                if len(output) != num_batches:\n                    # one sample contains multiple elements\n                    output_list.append(output)\n                    contain_mul_elements = True\n                else:\n                    output_list += [out for out in forward_func(inputs)]\n                    contain_mul_elements = False\n\n                # save inputs\n                if need_save:\n                    self.inputs_buffer[sampler_type].append(inputs)\n\n            output_list = output_list[:n_samples]\n            if contain_mul_elements:\n                output_to_vis = []\n                for output in output_list:\n                    output_to_vis += output\n            else:\n                output_to_vis = output_list\n            n_row = min(n_row, len(output_to_vis)) if n_row else None\n\n            self._visualizer.add_datasample(\n                name=name,\n                gen_samples=output_to_vis,\n                target_keys=target_keys,\n                vis_mode=vis_mode,\n                n_row=n_row,\n                show=self.show,\n                wait_time=self.wait_time,\n                step=batch_idx + 1,\n                **vis_kwargs_)\n\n        # save images in message_hub\n        self.vis_from_message_hub(batch_idx)\n\n        module.train()\n\n    def vis_from_message_hub(self, batch_idx: int):\n        \"\"\"Visualize samples from message hub.\n\n        Args:\n            batch_idx (int): The index of the current batch in the test loop.\n            color_order (str): The color order of generated images.\n            target_mean (Sequence[Union[float, int]]): The original mean\n                of the image tensor before preprocessing. Image will be\n                re-shifted to ``target_mean`` before visualizing.\n            target_std (Sequence[Union[float, int]]): The original std of the\n                image tensor before preprocessing. Image will be re-scaled to\n                ``target_std`` before visualizing.\n        \"\"\"\n        # TODO: add destruct in this function\n        if self.message_vis_kwargs is None:\n            return\n\n        message_hub = MessageHub.get_current_instance()\n        if 'vis_results' not in message_hub.runtime_info:\n            raise RuntimeError('Cannot find \\'vis_results\\' in '\n                               '\\'message_hub.runtime_info\\'. Cannot perform '\n                               'visualization from messageHub.')\n\n        vis_results = message_hub.get_info('vis_results')\n        if isinstance(self.message_vis_kwargs, str):\n            target_keys, vis_modes = [self.message_vis_kwargs], [None]\n        elif isinstance(self.message_vis_kwargs, dict):\n            target_keys = [self.message_vis_kwargs['key']]\n            vis_modes = [self.message_vis_kwargs['vis_mode']]\n        elif is_list_of(self.message_vis_kwargs, str):\n            target_keys = self.message_vis_kwargs\n            vis_modes = [None for _ in range(len(target_keys))]\n        else:\n            # list of dict\n            target_keys = [kwargs['key'] for kwargs in self.message_vis_kwargs]\n            vis_modes = [\n                kwargs.pop('vis_mode', None)\n                for kwargs in deepcopy(self.message_vis_kwargs)\n            ]\n\n        for key, vis_mode in zip(target_keys, vis_modes):\n            if key not in vis_results:\n                raise RuntimeError(\n                    f'Cannot find \\'{key}\\' in '\n                    'message_hub.runtime_info[\\'vis_results\\'].')\n\n            value = vis_results[key]\n            # pack to list of DataSample\n            if isinstance(value, torch.Tensor):\n                gen_samples = []\n                num_batches = value.shape[0]\n                for idx in range(num_batches):\n                    gen_sample = DataSample()\n                    setattr(gen_sample, key, value[idx])\n                    gen_samples.append(gen_sample)\n            elif is_list_of(value, BaseDataElement):\n                # already packed\n                gen_samples = value\n                num_batches = len(gen_samples)\n            else:\n                raise TypeError(\n                    'Only support to visualize Tensor or list of DataSample '\n                    f'in MessageHub. But \\'{key}\\' is \\'{type(value)}\\'.')\n\n            self._visualizer.add_datasample(\n                name=f'train_{key}',\n                gen_samples=gen_samples,\n                target_keys=key,\n                vis_mode=vis_mode,\n                n_row=min(self.n_row, num_batches) if self.n_row else None,\n                show=self.show,\n                step=batch_idx)\n"
  },
  {
    "path": "mmagic/engine/optimizers/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .multi_optimizer_constructor import MultiOptimWrapperConstructor\nfrom .pggan_optimizer_constructor import PGGANOptimWrapperConstructor\nfrom .singan_optimizer_constructor import SinGANOptimWrapperConstructor\n\n__all__ = [\n    'MultiOptimWrapperConstructor',\n    'PGGANOptimWrapperConstructor',\n    'SinGANOptimWrapperConstructor',\n]\n"
  },
  {
    "path": "mmagic/engine/optimizers/multi_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport re\nfrom typing import Tuple, Union\n\nimport torch.nn as nn\nfrom mmengine import print_log\nfrom mmengine.optim import (DefaultOptimWrapperConstructor, OptimWrapper,\n                            OptimWrapperDict)\n\nfrom mmagic.registry import (OPTIM_WRAPPER_CONSTRUCTORS, OPTIM_WRAPPERS,\n                             OPTIMIZERS)\n\n\n@OPTIM_WRAPPER_CONSTRUCTORS.register_module()\nclass MultiOptimWrapperConstructor:\n    \"\"\"OptimizerConstructor for GAN models. This class construct optimizer for\n    the submodules of the model separately, and return a\n    :class:`mmengine.optim.OptimWrapperDict` or\n    :class:`mmengine.optim.OptimWrapper`.\n\n    Example 1: Build multi optimizers (e.g., GANs):\n        >>> # build GAN model\n        >>> model = dict(\n        >>>     type='GANModel',\n        >>>     num_classes=10,\n        >>>     generator=dict(type='Generator'),\n        >>>     discriminator=dict(type='Discriminator'))\n        >>> gan_model = MODELS.build(model)\n        >>> # build constructor\n        >>> optim_wrapper = dict(\n        >>>     generator=dict(\n        >>>         type='OptimWrapper',\n        >>>         accumulative_counts=1,\n        >>>         optimizer=dict(type='Adam', lr=0.0002,\n        >>>                        betas=(0.5, 0.999))),\n        >>>     discriminator=dict(\n        >>>         type='OptimWrapper',\n        >>>         accumulative_counts=1,\n        >>>         optimizer=dict(type='Adam', lr=0.0002,\n        >>>                            betas=(0.5, 0.999))))\n        >>> optim_dict_builder = MultiOptimWrapperConstructor(optim_wrapper)\n        >>> # build optim wrapper dict\n        >>> optim_wrapper_dict = optim_dict_builder(gan_model)\n\n    Example 2: Build multi optimizers for specific submodules:\n        >>> # build model\n        >>> class GAN(nn.Module):\n        >>>     def __init__(self) -> None:\n        >>>         super().__init__()\n        >>>         self.generator = nn.Conv2d(3, 3, 1)\n        >>>         self.discriminator = nn.Conv2d(3, 3, 1)\n        >>> class TextEncoder(nn.Module):\n        >>>     def __init__(self):\n        >>>         super().__init__()\n        >>>         self.embedding = nn.Embedding(100, 100)\n        >>> class ToyModel(nn.Module):\n        >>>     def __init__(self) -> None:\n        >>>         super().__init__()\n        >>>         self.m1 = GAN()\n        >>>         self.m2 = nn.Conv2d(3, 3, 1)\n        >>>         self.m3 = nn.Linear(2, 2)\n        >>>         self.text_encoder = TextEncoder()\n        >>> model = ToyModel()\n        >>> # build constructor\n        >>> optim_wrapper = {\n        >>>     '.*embedding': {\n        >>>         'type': 'OptimWrapper',\n        >>>         'optimizer': {\n        >>>             'type': 'Adam',\n        >>>             'lr': 1e-4,\n        >>>             'betas': (0.9, 0.99)\n        >>>         }\n        >>>     },\n        >>>     'm1.generator': {\n        >>>         'type': 'OptimWrapper',\n        >>>         'optimizer': {\n        >>>             'type': 'Adam',\n        >>>             'lr': 1e-5,\n        >>>             'betas': (0.9, 0.99)\n        >>>         }\n        >>>     },\n        >>>     'm2': {\n        >>>         'type': 'OptimWrapper',\n        >>>         'optimizer': {\n        >>>             'type': 'Adam',\n        >>>             'lr': 1e-5,\n        >>>         }\n        >>>     }\n        >>> }\n        >>> optim_dict_builder = MultiOptimWrapperConstructor(optim_wrapper)\n        >>> # build optim wrapper dict\n        >>> optim_wrapper_dict = optim_dict_builder(model)\n\n    Example 3: Build a single optimizer for multi modules (e.g., DreamBooth):\n        >>> # build StableDiffusion model\n        >>> model = dict(\n        >>>     type='StableDiffusion',\n        >>>     unet=dict(type='unet'),\n        >>>     vae=dict(type='vae'),\n                text_encoder=dict(type='text_encoder'))\n        >>> diffusion_model = MODELS.build(model)\n        >>> # build constructor\n        >>> optim_wrapper = dict(\n        >>>     modules=['unet', 'text_encoder']\n        >>>     optimizer=dict(type='Adam', lr=0.0002),\n        >>>     accumulative_counts=1)\n        >>> optim_dict_builder = MultiOptimWrapperConstructor(optim_wrapper)\n        >>> # build optim wrapper dict\n        >>> optim_wrapper_dict = optim_dict_builder(diffusion_model)\n\n    Args:\n        optim_wrapper_cfg_dict (dict): Config of the optimizer wrapper.\n        paramwise_cfg (dict): Config of parameter-wise settings. Default: None.\n    \"\"\"\n\n    def __init__(self, optim_wrapper_cfg: dict, paramwise_cfg=None):\n\n        if not isinstance(optim_wrapper_cfg, dict):\n            raise TypeError('optimizer_cfg should be a dict',\n                            f'but got {type(optim_wrapper_cfg)}')\n        assert paramwise_cfg is None, (\n            'paramwise_cfg should be set in each optimizer separately')\n        self.optim_cfg = optim_wrapper_cfg\n\n        if 'modules' in optim_wrapper_cfg:\n            # single optimizer with multi param groups\n            cfg_ = optim_wrapper_cfg.copy()\n            self.modules = cfg_.pop('modules')\n            paramwise_cfg_ = cfg_.pop('paramwise_cfg', None)\n            self.constructors = DefaultOptimWrapperConstructor(\n                cfg_, paramwise_cfg_)\n        else:\n            self.constructors = {}\n            self.modules = {}\n            for key, cfg in self.optim_cfg.items():\n                cfg_ = cfg.copy()\n                if 'modules' in cfg_:\n                    self.modules[key] = cfg_.pop('modules')\n                paramwise_cfg_ = cfg_.pop('paramwise_cfg', None)\n                self.constructors[key] = DefaultOptimWrapperConstructor(\n                    cfg_, paramwise_cfg_)\n\n    def __call__(self,\n                 module: nn.Module) -> Union[OptimWrapperDict, OptimWrapper]:\n        \"\"\"Build optimizer and return a optimizer_wrapper_dict.\"\"\"\n\n        optimizers = {}\n        if hasattr(module, 'module'):\n            module = module.module\n        if isinstance(self.constructors, dict):\n            for key, constructor in self.constructors.items():\n                module_names = self.modules[key] if self.modules else key\n                if (isinstance(module_names, str)\n                        and module_names in module._modules):\n                    optimizers[key] = constructor(\n                        module._modules[module_names])\n                    optim_wrapper_cfg = constructor.optimizer_cfg\n                    print_log(\n                        f'Add to optimizer \\'{key}\\' '\n                        f'({optim_wrapper_cfg}): \\'{key}\\'.', 'current')\n                else:\n\n                    assert not constructor.paramwise_cfg, (\n                        'Do not support paramwise_cfg for multi module '\n                        'optimizer.')\n\n                    params, found_names = get_params_by_names(\n                        module, module_names)\n                    # build optimizer\n                    optimizer_cfg = constructor.optimizer_cfg.copy()\n                    optimizer_cfg['params'] = params\n                    optimizer = OPTIMIZERS.build(optimizer_cfg)\n\n                    # build optimizer wrapper\n                    optim_wrapper_cfg = constructor.optim_wrapper_cfg.copy()\n                    optim_wrapper_cfg.setdefault('type', 'OptimWrapper')\n                    optim_wrapper = OPTIM_WRAPPERS.build(\n                        optim_wrapper_cfg,\n                        default_args=dict(optimizer=optimizer))\n\n                    for name in found_names:\n                        print_log(\n                            f'Add to optimizer \\'{key}\\' '\n                            f'({constructor.optimizer_cfg}): \\'{name}\\'.',\n                            'current')\n\n                    optimizers[key] = optim_wrapper\n\n            return OptimWrapperDict(**optimizers)\n\n        else:\n            params, found_names = get_params_by_names(module, self.modules)\n\n            constructor = self.constructors\n            assert not constructor.paramwise_cfg, (\n                'Do not support paramwise_cfg for multi parameters')\n\n            optimizer_cfg = constructor.optimizer_cfg.copy()\n            optimizer_cfg['params'] = params\n            optimizer = OPTIMIZERS.build(optimizer_cfg)\n            for name in found_names:\n                print_log(\n                    f'Add to optimizer ({constructor.optimizer_cfg}): '\n                    f'\\'{name}\\'.', 'current')\n\n            # build optimizer wrapper\n            optim_wrapper_cfg = constructor.optim_wrapper_cfg.copy()\n            optim_wrapper_cfg.setdefault('type', 'OptimWrapper')\n            optim_wrapper = OPTIM_WRAPPERS.build(\n                optim_wrapper_cfg, default_args=dict(optimizer=optimizer))\n\n            return optim_wrapper\n\n\ndef get_params_by_names(module: nn.Module,\n                        names: Union[str, list]) -> Tuple[list, list]:\n    \"\"\"Support two kinds of name matching:\n        1. matching name from **first-level** submodule.\n        2. matching name by `re.fullmatch`.\n\n    Args:\n        module (nn.Module): The module to get parameters.\n        names (Union[str, list]): The name or a list of names of the\n            submodule parameters.\n\n    Returns:\n        Tuple[list]: A list of parameters and corresponding name for logging.\n    \"\"\"\n\n    if not isinstance(names, list):\n        names = [names]\n\n    params = []\n    found_names = []\n    for name in names:\n        if name in module._modules:\n            params.extend(module._modules[name].parameters())\n            found_names.append(name)\n        else:\n            for n, m in module.named_modules():\n                if re.fullmatch(name, n):\n                    params.extend(m.parameters())\n                    found_names.append(n)\n    return params, found_names\n"
  },
  {
    "path": "mmagic/engine/optimizers/pggan_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.optim import DefaultOptimWrapperConstructor, OptimWrapperDict\n\nfrom mmagic.registry import OPTIM_WRAPPER_CONSTRUCTORS\n\n\n@OPTIM_WRAPPER_CONSTRUCTORS.register_module()\nclass PGGANOptimWrapperConstructor:\n    \"\"\"OptimizerConstructor for PGGAN models. Set optimizers for each\n    stage of PGGAN. All submodule must be contained in a\n    :class:`torch.nn.ModuleList` named 'blocks'. And we access each submodule\n    by `MODEL.blocks[SCALE]`, where `MODEL` is generator or discriminator, and\n    the scale is the index of the resolution scale.\n\n    More detail about the resolution scale and naming rule please refers to\n    :class:`~mmagic.models.editors.pggan.PGGANGenerator` and\n    :class:`~mmagic.models.editors.pggan.PGGANDiscriminator`.\n\n    Example:\n        >>> # build PGGAN model\n        >>> model = dict(\n        >>>     type='ProgressiveGrowingGAN',\n        >>>     data_preprocessor=dict(type='GANDataPreprocessor'),\n        >>>     noise_size=512,\n        >>>     generator=dict(type='PGGANGenerator', out_scale=1024,\n        >>>                    noise_size=512),\n        >>>     discriminator=dict(type='PGGANDiscriminator', in_scale=1024),\n        >>>     nkimgs_per_scale={\n        >>>         '4': 600,\n        >>>         '8': 1200,\n        >>>         '16': 1200,\n        >>>         '32': 1200,\n        >>>         '64': 1200,\n        >>>         '128': 1200,\n        >>>         '256': 1200,\n        >>>         '512': 1200,\n        >>>         '1024': 12000,\n        >>>     },\n        >>>     transition_kimgs=600,\n        >>>     ema_config=dict(interval=1))\n        >>> pggan = MODELS.build(model)\n        >>> # build constructor\n        >>> optim_wrapper = dict(\n        >>>     generator=dict(optimizer=dict(type='Adam', lr=0.001,\n        >>>                                   betas=(0., 0.99))),\n        >>>     discriminator=dict(\n        >>>         optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        >>>     lr_schedule=dict(\n        >>>         generator={\n        >>>             '128': 0.0015,\n        >>>             '256': 0.002,\n        >>>             '512': 0.003,\n        >>>             '1024': 0.003\n        >>>         },\n        >>>         discriminator={\n        >>>             '128': 0.0015,\n        >>>             '256': 0.002,\n        >>>             '512': 0.003,\n        >>>             '1024': 0.003\n        >>>         }))\n        >>> optim_wrapper_dict_builder = PGGANOptimWrapperConstructor(\n        >>>     optim_wrapper)\n        >>> # build optim wrapper dict\n        >>> optim_wrapper_dict = optim_wrapper_dict_builder(pggan)\n\n    Args:\n        optim_wrapper_cfg (dict): Config of the optimizer wrapper.\n        paramwise_cfg (Optional[dict]): Parameter-wise options.\n    \"\"\"\n\n    def __init__(self,\n                 optim_wrapper_cfg: dict,\n                 paramwise_cfg: Optional[dict] = None):\n        if not isinstance(optim_wrapper_cfg, dict):\n            raise TypeError('optimizer_cfg should be a dict',\n                            f'but got {type(optim_wrapper_cfg)}')\n        assert paramwise_cfg is None, (\n            'paramwise_cfg should be set in each optimizer separately')\n        self.optim_cfg = deepcopy(optim_wrapper_cfg)\n\n        self.reset_optim = self.optim_cfg.pop('reset_optim_for_new_scale',\n                                              True)\n        print(self.reset_optim)\n        self.lr_schedule = self.optim_cfg.pop('lr_schedule', dict())\n        self.constructors = {}\n\n        for key, cfg in self.optim_cfg.items():\n            cfg_ = cfg.copy()\n            paramwise_cfg_ = cfg_.pop('paramwise_cfg', None)\n            self.constructors[key] = DefaultOptimWrapperConstructor(\n                cfg_, paramwise_cfg_)\n\n    def __call__(self, module: nn.Module) -> OptimWrapperDict:\n        \"\"\"Build optimizer and return a optimizerwrapperdict.\"\"\"\n        optimizers = {}\n        if is_model_wrapper(module):\n            module = module.module\n\n        # module.scales: [int, int]\n        scales = [s[0] for s in module.scales]\n\n        for key, base_cfg in self.optim_cfg.items():\n            submodule = module._modules[key]\n\n            cfg_ = base_cfg.copy()\n            base_lr = cfg_['optimizer']['lr']\n            paramwise_cfg_ = base_cfg.pop('paramwise_cfg', None)\n\n            default_constructor = self.constructors[key]\n            default_optimizer = default_constructor(submodule)\n            for idx, scale in enumerate(scales):\n                if self.reset_optim:\n                    scale_cfg = cfg_.copy()\n                    scale_lr = self.lr_schedule[key].get(str(scale), base_lr)\n                    scale_cfg['optimizer']['lr'] = scale_lr\n                    constructor = DefaultOptimWrapperConstructor(\n                        scale_cfg, paramwise_cfg_)\n                    optimizers[f'{key}_{scale}'] = constructor(submodule)\n                else:\n                    optimizers[f'{key}_{scale}'] = default_optimizer\n\n        optimizers = OptimWrapperDict(**optimizers)\n        return optimizers\n"
  },
  {
    "path": "mmagic/engine/optimizers/singan_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmengine.optim import DefaultOptimWrapperConstructor, OptimWrapperDict\n\nfrom mmagic.registry import OPTIM_WRAPPER_CONSTRUCTORS\n\n\n@OPTIM_WRAPPER_CONSTRUCTORS.register_module()\nclass SinGANOptimWrapperConstructor:\n    \"\"\"OptimizerConstructor for SinGAN models. Set optimizers for each\n    submodule of SinGAN. All submodule must be contained in a\n    :class:`torch.nn.ModuleList` named 'blocks'. And we access each submodule\n    by `MODEL.blocks[SCALE]`, where `MODEL` is generator or discriminator, and\n    the scale is the index of the resolution scale.\n\n    More detail about the resolution scale and naming rule please refers to\n    :class:`~mmagic.models.editors.singan.SinGANMultiScaleGenerator` and\n    :class:`~mmagic.models.editors.singan.SinGANMultiScaleDiscriminator`.\n\n    Example:\n        >>> # build SinGAN model\n        >>> model = dict(\n        >>>     type='SinGAN',\n        >>>     data_preprocessor=dict(\n        >>>         type='GANDataPreprocessor',\n        >>>         non_image_keys=['input_sample']),\n        >>>     generator=dict(\n        >>>         type='SinGANMultiScaleGenerator',\n        >>>         in_channels=3,\n        >>>         out_channels=3,\n        >>>         num_scales=2),\n        >>>     discriminator=dict(\n        >>>         type='SinGANMultiScaleDiscriminator',\n        >>>         in_channels=3,\n        >>>         num_scales=3))\n        >>> singan = MODELS.build(model)\n        >>> # build constructor\n        >>> optim_wrapper = dict(\n        >>>     generator=dict(optimizer=dict(type='Adam', lr=0.0005,\n        >>>                                   betas=(0.5, 0.999))),\n        >>>     discriminator=dict(\n        >>>         optimizer=dict(type='Adam', lr=0.0005,\n        >>>                        betas=(0.5, 0.999))))\n        >>> optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n        >>>     optim_wrapper)\n        >>> # build optim wrapper dict\n        >>> optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n\n    Args:\n        optim_wrapper_cfg (dict): Config of the optimizer wrapper.\n        paramwise_cfg (Optional[dict]): Parameter-wise options.\n    \"\"\"\n\n    def __init__(self,\n                 optim_wrapper_cfg: dict,\n                 paramwise_cfg: Optional[dict] = None):\n        if not isinstance(optim_wrapper_cfg, dict):\n            raise TypeError('optimizer_cfg should be a dict',\n                            f'but got {type(optim_wrapper_cfg)}')\n        assert paramwise_cfg is None, (\n            'paramwise_cfg should be set in each optimizer separately')\n        self.optim_cfg = optim_wrapper_cfg\n        self.constructors = {}\n        for key, cfg in self.optim_cfg.items():\n            cfg_ = cfg.copy()\n            paramwise_cfg_ = cfg_.pop('paramwise_cfg', None)\n            self.constructors[key] = DefaultOptimWrapperConstructor(\n                cfg_, paramwise_cfg_)\n\n    def __call__(self, module: nn.Module) -> OptimWrapperDict:\n        \"\"\"Build optimizer and return a optimizerwrapperdict.\"\"\"\n        optimizers = {}\n        if hasattr(module, 'module'):\n            module = module.module\n        num_scales = module.num_scales\n\n        for key, constructor in self.constructors.items():\n            for idx in range(num_scales + 1):\n                submodule = module._modules[key]\n                if hasattr(submodule, 'module'):\n                    submodule = submodule.module\n                optimizers[f'{key}_{idx}'] = constructor(submodule.blocks[idx])\n        optimizers = OptimWrapperDict(**optimizers)\n        return optimizers\n"
  },
  {
    "path": "mmagic/engine/runner/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .log_processor import LogProcessor\nfrom .multi_loops import MultiTestLoop, MultiValLoop\n\n__all__ = ['MultiTestLoop', 'MultiValLoop', 'LogProcessor']\n"
  },
  {
    "path": "mmagic/engine/runner/log_processor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.runner import LogProcessor as BaseLogProcessor\n\nfrom mmagic.registry import LOG_PROCESSORS\n\n\n@LOG_PROCESSORS.register_module()  # type: ignore\nclass LogProcessor(BaseLogProcessor):\n    \"\"\"LogProcessor inherits from :class:`mmengine.runner.LogProcessor` and\n    overwrites :meth:`self.get_log_after_iter`.\n\n    This log processor should be used along with\n    :class:`mmagic.engine.runner.MultiValLoop` and\n    :class:`mmagic.engine.runner.MultiTestLoop`.\n    \"\"\"\n\n    def _get_dataloader_size(self, runner, mode) -> int:\n        \"\"\"Get dataloader size of current loop. In `MultiValLoop` and\n        `MultiTestLoop`, we use `total_length` instead of `len(dataloader)` to\n        denote the total number of iterations.\n\n        Args:\n            runner (Runner): The runner of the training/validation/testing\n            mode (str): Current mode of runner.\n\n        Returns:\n            int: The dataloader size of current loop.\n        \"\"\"\n        if hasattr(self._get_cur_loop(runner, mode), 'total_length'):\n            return self._get_cur_loop(runner, mode).total_length\n        else:\n            return super()._get_dataloader_size(runner, mode)\n"
  },
  {
    "path": "mmagic/engine/runner/loop_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom logging import WARNING\nfrom typing import Any, Dict, List, Union\n\nfrom mmengine import is_list_of, print_log\nfrom mmengine.evaluator import Evaluator\n\nEVALUATOR_TYPE = Union[Evaluator, Dict, List]\n\n\ndef update_and_check_evaluator(evaluator: EVALUATOR_TYPE\n                               ) -> Union[Evaluator, dict]:\n    \"\"\"Check the whether the evaluator instance or dict config is Evaluator. If\n    input is a dict config, attempt to set evaluator type as Evaluator and\n    raised warning if it is not allowed. If input is a Evaluator instance,\n    check whether it is a Evaluator class, otherwise,\n\n    Args:\n        evaluator (Union[Evaluator, dict, list]): The evaluator instance or\n            config dict.\n    \"\"\"\n    # check Evaluator instance\n    warning_template = ('Evaluator type for current config is \\'{}\\'. '\n                        'If you want to use MultiValLoop, we strongly '\n                        'recommend you to use \\'Evaluator\\' provided by '\n                        '\\'MMagic\\'. Otherwise, there maybe some potential '\n                        'bugs.')\n    if isinstance(evaluator, Evaluator):\n        cls_name = evaluator.__class__.__name__\n        if cls_name != 'Evaluator':\n            print_log(warning_template.format(cls_name), 'current', WARNING)\n        return evaluator\n\n    # add type for **single evaluator with list of metrics**\n    if isinstance(evaluator, list):\n        evaluator = dict(type='Evaluator', metrics=evaluator)\n        return evaluator\n\n    # check and update dict config\n    assert isinstance(evaluator, dict), (\n        'Can only conduct check and update for list of metrics, a config dict '\n        f'or a Evaluator object. But receives {type(evaluator)}.')\n    evaluator.setdefault('type', 'Evaluator')\n    evaluator.setdefault('metrics', None)  # default as 'dummy evaluator'\n    _type = evaluator['type']\n    if _type != 'Evaluator':\n        print_log(warning_template.format(_type), 'current', WARNING)\n    return evaluator\n\n\ndef is_evaluator(evaluator: Any) -> bool:\n    \"\"\"Check whether the input is a valid evaluator config or Evaluator object.\n\n    Args:\n        evaluator (Any): The input to check.\n\n    Returns:\n        bool: Whether the input is a valid evaluator config or Evaluator\n            object.\n    \"\"\"\n    # Single evaluator with type\n    if isinstance(evaluator, dict) and 'metrics' in evaluator:\n        return True\n    # Single evaluator without type\n    elif (is_list_of(evaluator, dict)\n          and all(['metrics' not in cfg_ for cfg_ in evaluator])):\n        return True\n    elif isinstance(evaluator, Evaluator):\n        return True\n    else:\n        return False\n"
  },
  {
    "path": "mmagic/engine/runner/multi_loops.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport warnings\nfrom typing import Dict, List, Sequence, Union\n\nimport torch\nfrom mmengine.evaluator import BaseMetric, Evaluator\nfrom mmengine.runner.amp import autocast\nfrom mmengine.runner.base_loop import BaseLoop\nfrom torch.utils.data import DataLoader\n\nfrom mmagic.registry import LOOPS\nfrom .loop_utils import is_evaluator, update_and_check_evaluator\n\nDATALOADER_TYPE = Union[DataLoader, Dict, List]\nEVALUATOR_TYPE = Union[Evaluator, Dict, List]\n\n\n@LOOPS.register_module()\nclass MultiValLoop(BaseLoop):\n    \"\"\"Validation loop for MMagic models which support evaluate multiply\n    dataset at the same time. This class support evaluate:\n\n    1. Metrics (metric) on a single dataset (e.g. PSNR and SSIM on DIV2K\n       dataset)\n    2. Different metrics on different datasets (e.g. PSNR on DIV2K and SSIM\n       and PSNR on SET5)\n\n    Use cases:\n\n    Case 1: metrics on a single dataset\n\n    >>> # add the following lines in your config\n    >>> # 1. use `MultiValLoop` instead of `ValLoop` in MMEngine\n    >>> val_cfg = dict(type='MultiValLoop')\n    >>> # 2. specific MultiEvaluator instead of Evaluator in MMEngine\n    >>> val_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=[\n    >>>         dict(type='PSNR', crop_border=2, prefix='Set5'),\n    >>>         dict(type='SSIM', crop_border=2, prefix='Set5'),\n    >>>     ])\n    >>> # 3. define dataloader\n    >>> val_dataloader = dict(...)\n\n    Case 2: different metrics on different datasets\n\n    >>> # add the following lines in your config\n    >>> # 1. use `MultiValLoop` instead of `ValLoop` in MMEngine\n    >>> val_cfg = dict(type='MultiValLoop')\n    >>> # 2. specific a list MultiEvaluator\n    >>> # do not forget to add prefix for each metric group\n    >>> div2k_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=dict(type='SSIM', crop_border=2, prefix='DIV2K'))\n    >>> set5_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=[\n    >>>         dict(type='PSNR', crop_border=2, prefix='Set5'),\n    >>>         dict(type='SSIM', crop_border=2, prefix='Set5'),\n    >>>     ])\n    >>> # define evaluator config\n    >>> val_evaluator = [div2k_evaluator, set5_evaluator]\n    >>> # 3. specific a list dataloader for each metric groups\n    >>> div2k_dataloader = dict(...)\n    >>> set5_dataloader = dict(...)\n    >>> # define dataloader config\n    >>> val_dataloader = [div2k_dataloader, set5_dataloader]\n\n    Args:\n        runner (Runner): A reference of runner.\n        dataloader (Dataloader or dict or list): A dataloader object or a dict\n            to build a dataloader a list of dataloader object or a list of\n            config dicts.\n        evaluator (Evaluator or dict or list): A evaluator object or a dict to\n            build the evaluator or a list of evaluator object or a list of\n            config dicts.\n    \"\"\"\n\n    def __init__(self,\n                 runner,\n                 dataloader: DATALOADER_TYPE,\n                 evaluator: EVALUATOR_TYPE,\n                 fp16: bool = False):\n        self._runner = runner\n\n        self.dataloaders = self._build_dataloaders(dataloader)\n        self.evaluators = self._build_evaluators(evaluator)\n\n        self.fp16 = fp16\n\n        assert len(self.dataloaders) == len(self.evaluators), (\n            'Length of dataloaders and evaluators must be same, but receive '\n            f'\\'{len(self.dataloaders)}\\' and \\'{len(self.evaluators)}\\''\n            'respectively.')\n\n        self._total_length = None  # length for all dataloaders\n\n    @property\n    def total_length(self) -> int:\n        if self._total_length is not None:\n            return self._total_length\n\n        warnings.warn('\\'total_length\\' has not been initialized and return '\n                      '\\'0\\' for safety. This result is likely to be incorrect'\n                      ' and we recommend you to call \\'total_length\\' after '\n                      '\\'self.run\\' is called.')\n        return 0\n\n    def _build_dataloaders(self,\n                           dataloader: DATALOADER_TYPE) -> List[DataLoader]:\n        \"\"\"Build dataloaders.\n\n        Args:\n            dataloader (Dataloader or dict or list): A dataloader object or a\n                dict to build a dataloader a list of dataloader object or a\n                list of config dict.\n\n        Returns:\n            List[Dataloader]: List of dataloaders for compute metrics.\n        \"\"\"\n        runner = self._runner\n\n        if not isinstance(dataloader, list):\n            dataloader = [dataloader]\n\n        dataloaders = []\n        for loader in dataloader:\n            if isinstance(loader, dict):\n                dataloaders.append(\n                    runner.build_dataloader(loader, seed=runner.seed))\n            else:\n                dataloaders.append(loader)\n\n        return dataloaders\n\n    def _build_evaluators(self, evaluator: EVALUATOR_TYPE) -> List[Evaluator]:\n        \"\"\"Build evaluators.\n\n        Args:\n            evaluator (Evaluator or dict or list): A evaluator object or a\n                dict to build the evaluator or a list of evaluator object or a\n                list of config dicts.\n\n        Returns:\n            List[Evaluator]: List of evaluators for compute metrics.\n        \"\"\"\n        runner = self._runner\n\n        # Input type checking and packing\n        # 1. Single evaluator without type: [dict(), dict(), ...]\n        # 2. Single evaluator with type: dict(type=xx, metrics=xx)\n        # 3. Multi evaluator without type: [[dict, ...], [dict, ...]]\n        # 4. Multi evaluator with type: [dict(type=xx, metrics=xx), dict(...)]\n        if is_evaluator(evaluator):\n            evaluator = [update_and_check_evaluator(evaluator)]\n        else:\n            assert all([\n                is_evaluator(cfg) for cfg in evaluator\n            ]), ('Unsupported evaluator type, please check your input and '\n                 'the docstring.')\n            evaluator = [update_and_check_evaluator(cfg) for cfg in evaluator]\n\n        evaluators = [runner.build_evaluator(eval) for eval in evaluator]\n\n        return evaluators\n\n    def run(self):\n        \"\"\"Launch validation. The evaluation process consists of four steps.\n\n        1. Prepare pre-calculated items for all metrics by calling\n           :meth:`self.evaluator.prepare_metrics`.\n        2. Get a list of metrics-sampler pair. Each pair contains a list of\n           metrics with the same sampler mode and a shared sampler.\n        3. Generate images for the each metrics group. Loop for elements in\n           each sampler and feed to the model as input by calling\n           :meth:`self.run_iter`.\n        4. Evaluate all metrics by calling :meth:`self.evaluator.evaluate`.\n        \"\"\"\n\n        self._runner.call_hook('before_val')\n        self._runner.call_hook('before_val_epoch')\n        self._runner.model.eval()\n\n        # access to the true model\n        module = self._runner.model\n        if hasattr(self.runner.model, 'module'):\n            module = module.module\n\n        multi_metric = dict()\n        idx_counter = 0\n        self._total_length = 0\n\n        # 1. prepare all metrics and get the total length\n        metrics_sampler_lists = []\n        meta_info_list = []\n        dataset_name_list = []\n        for evaluator, dataloader in zip(self.evaluators, self.dataloaders):\n            # 1.1 prepare for metrics\n            evaluator.prepare_metrics(module, dataloader)\n            # 1.2 prepare for metric-sampler pair\n            metrics_sampler_list = evaluator.prepare_samplers(\n                module, dataloader)\n            metrics_sampler_lists.append(metrics_sampler_list)\n            # 1.3 update total length\n            self._total_length += sum([\n                len(metrics_sampler[1])\n                for metrics_sampler in metrics_sampler_list\n            ])\n            # 1.4 save metainfo and dataset's name\n            meta_info_list.append(\n                getattr(dataloader.dataset, 'metainfo', None))\n            dataset_name_list.append(dataloader.dataset.__class__.__name__)\n\n        # 2. run evaluation\n        for idx in range(len(self.evaluators)):\n            # 2.1 set self.evaluator for run_iter\n            self.evaluator = self.evaluators[idx]\n            self.dataloader = self.dataloaders[idx]\n\n            # 2.2 update metainfo for evaluator and visualizer\n            meta_info = meta_info_list[idx]\n            dataset_name = dataset_name_list[idx]\n            if meta_info:\n                self.evaluator.dataset_meta = meta_info\n                self._runner.visualizer.dataset_meta = meta_info\n            else:\n                warnings.warn(\n                    f'Dataset {dataset_name} has no metainfo. `dataset_meta` '\n                    'in evaluator, metric and visualizer will be None.')\n\n            # 2.3 generate images\n            metrics_sampler_list = metrics_sampler_lists[idx]\n            for metrics, sampler in metrics_sampler_list:\n                for data in sampler:\n                    self.run_iter(idx_counter, data, metrics)\n                    idx_counter += 1\n\n            # 2.4 evaluate metrics and update multi_metric\n            metrics = self.evaluator.evaluate()\n            if multi_metric and metrics.keys() & multi_metric.keys():\n                raise ValueError('Please set different prefix for different'\n                                 ' datasets in `val_evaluator`')\n            else:\n                multi_metric.update(metrics)\n\n        # 3. finish evaluation and call hooks\n        self._runner.call_hook('after_val_epoch', metrics=multi_metric)\n        self._runner.call_hook('after_val')\n\n    @torch.no_grad()\n    def run_iter(self, idx, data_batch: dict, metrics: Sequence[BaseMetric]):\n        \"\"\"Iterate one mini-batch and feed the output to corresponding\n        `metrics`.\n\n        Args:\n            idx (int): Current idx for the input data.\n            data_batch (dict): Batch of data from dataloader.\n            metrics (Sequence[BaseMetric]): Specific metrics to evaluate.\n        \"\"\"\n        self._runner.call_hook(\n            'before_val_iter', batch_idx=idx, data_batch=data_batch)\n        # outputs should be sequence of BaseDataElement\n        with autocast(enabled=self.fp16):\n            outputs = self._runner.model.val_step(data_batch)\n        self.evaluator.process(outputs, data_batch, metrics)\n        self._runner.call_hook(\n            'after_val_iter',\n            batch_idx=idx,\n            data_batch=data_batch,\n            outputs=outputs)\n\n\n@LOOPS.register_module()\nclass MultiTestLoop(BaseLoop):\n    \"\"\"Test loop for MMagic models which support evaluate multiply dataset at\n    the same time. This class support evaluate:\n\n    1. Metrics (metric) on a single dataset (e.g. PSNR and SSIM on DIV2K\n       dataset)\n    2. Different metrics on different datasets (e.g. PSNR on DIV2K and SSIM\n       and PSNR on SET5)\n\n    Use cases:\n\n    Case 1: metrics on a single dataset\n\n    >>> # add the following lines in your config\n    >>> # 1. use `MultiTestLoop` instead of `TestLoop` in MMEngine\n    >>> val_cfg = dict(type='MultiTestLoop')\n    >>> # 2. specific MultiEvaluator instead of Evaluator in MMEngine\n    >>> test_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=[\n    >>>         dict(type='PSNR', crop_border=2, prefix='Set5'),\n    >>>         dict(type='SSIM', crop_border=2, prefix='Set5'),\n    >>>     ])\n    >>> # 3. define dataloader\n    >>> test_dataloader = dict(...)\n\n    Case 2: different metrics on different datasets\n\n    >>> # add the following lines in your config\n    >>> # 1. use `MultiTestLoop` instead of `TestLoop` in MMEngine\n    >>> Test_cfg = dict(type='MultiTestLoop')\n    >>> # 2. specific a list MultiEvaluator\n    >>> # do not forget to add prefix for each metric group\n    >>> div2k_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=dict(type='SSIM', crop_border=2, prefix='DIV2K'))\n    >>> set5_evaluator = dict(\n    >>>     type='MultiEvaluator',\n    >>>     metrics=[\n    >>>         dict(type='PSNR', crop_border=2, prefix='Set5'),\n    >>>         dict(type='SSIM', crop_border=2, prefix='Set5'),\n    >>>     ])\n    >>> # define evaluator config\n    >>> test_evaluator = [div2k_evaluator, set5_evaluator]\n    >>> # 3. specific a list dataloader for each metric groups\n    >>> div2k_dataloader = dict(...)\n    >>> set5_dataloader = dict(...)\n    >>> # define dataloader config\n    >>> test_dataloader = [div2k_dataloader, set5_dataloader]\n\n    Args:\n        runner (Runner): A reference of runner.\n        dataloader (Dataloader or dict or list): A dataloader object or a dict\n            to build a dataloader a list of dataloader object or a list of\n            config dicts.\n        evaluator (Evaluator or dict or list): A evaluator object or a dict to\n            build the evaluator or a list of evaluator object or a list of\n            config dicts.\n    \"\"\"\n\n    def __init__(self, runner, dataloader, evaluator, fp16=False):\n        self._runner = runner\n\n        self.dataloaders = self._build_dataloaders(dataloader)\n        self.evaluators = self._build_evaluators(evaluator)\n\n        self.fp16 = fp16\n\n        assert len(self.dataloaders) == len(self.evaluators), (\n            'Length of dataloaders and evaluators must be same, but receive '\n            f'\\'{len(self.dataloaders)}\\' and \\'{len(self.evaluators)}\\''\n            'respectively.')\n\n        self._total_length = None\n\n    @property\n    def total_length(self) -> int:\n        if self._total_length is not None:\n            return self._total_length\n\n        warnings.warn('\\'total_length\\' has not been initialized and return '\n                      '\\'0\\' for safety. This result is likely to be incorrect'\n                      ' and we recommend you to call \\'total_length\\' after '\n                      '\\'self.run\\' is called.')\n        return 0\n\n    def _build_dataloaders(self,\n                           dataloader: DATALOADER_TYPE) -> List[DataLoader]:\n        \"\"\"Build dataloaders.\n\n        Args:\n            dataloader (Dataloader or dict or list): A dataloader object or a\n                dict to build a dataloader a list of dataloader object or a\n                list of config dict.\n\n        Returns:\n            List[Dataloader]: List of dataloaders for compute metrics.\n        \"\"\"\n        runner = self._runner\n\n        if not isinstance(dataloader, list):\n            dataloader = [dataloader]\n\n        dataloaders = []\n        for loader in dataloader:\n            if isinstance(loader, dict):\n                dataloaders.append(\n                    runner.build_dataloader(loader, seed=runner.seed))\n            else:\n                dataloaders.append(loader)\n\n        return dataloaders\n\n    def _build_evaluators(self, evaluator: EVALUATOR_TYPE) -> List[Evaluator]:\n        \"\"\"Build evaluators.\n\n        Args:\n            evaluator (Evaluator or dict or list): A evaluator object or a\n                dict to build the evaluator or a list of evaluator object or a\n                list of config dicts.\n\n        Returns:\n            List[Evaluator]: List of evaluators for compute metrics.\n        \"\"\"\n        runner = self._runner\n\n        # Input type checking and packing\n        # 1. Single evaluator without type: [dict(), dict(), ...]\n        # 2. Single evaluator with type: dict(type=xx, metrics=xx)\n        # 3. Multi evaluator without type: [[dict, ...], [dict, ...]]\n        # 4. Multi evaluator with type: [dict(type=xx, metrics=xx), dict(...)]\n        if is_evaluator(evaluator):\n            evaluator = [update_and_check_evaluator(evaluator)]\n        else:\n            assert all([\n                is_evaluator(cfg) for cfg in evaluator\n            ]), ('Unsupported evaluator type, please check your input and '\n                 'the docstring.')\n            evaluator = [update_and_check_evaluator(cfg) for cfg in evaluator]\n\n        evaluators = [runner.build_evaluator(eval) for eval in evaluator]\n\n        return evaluators\n\n    def run(self):\n        \"\"\"Launch validation. The evaluation process consists of four steps.\n\n        1. Prepare pre-calculated items for all metrics by calling\n           :meth:`self.evaluator.prepare_metrics`.\n        2. Get a list of metrics-sampler pair. Each pair contains a list of\n           metrics with the same sampler mode and a shared sampler.\n        3. Generate images for the each metrics group. Loop for elements in\n           each sampler and feed to the model as input by calling\n           :meth:`self.run_iter`.\n        4. Evaluate all metrics by calling :meth:`self.evaluator.evaluate`.\n        \"\"\"\n\n        self._runner.call_hook('before_test')\n        self._runner.call_hook('before_test_epoch')\n        self._runner.model.eval()\n\n        # access to the true model\n        module = self._runner.model\n        if hasattr(self._runner.model, 'module'):\n            module = module.module\n\n        multi_metric = dict()\n        idx_counter = 0\n        self._total_length = 0\n\n        # 1. prepare all metrics and get the total length\n        metrics_sampler_lists = []\n        meta_info_list = []\n        dataset_name_list = []\n        for evaluator, dataloader in zip(self.evaluators, self.dataloaders):\n            # 1.1 prepare for metrics\n            evaluator.prepare_metrics(module, dataloader)\n            # 1.2 prepare for metric-sampler pair\n            metrics_sampler_list = evaluator.prepare_samplers(\n                module, dataloader)\n            metrics_sampler_lists.append(metrics_sampler_list)\n            # 1.3 update total length\n            self._total_length += sum([\n                len(metrics_sampler[1])\n                for metrics_sampler in metrics_sampler_list\n            ])\n            # 1.4 save metainfo and dataset's name\n            meta_info_list.append(\n                getattr(dataloader.dataset, 'metainfo', None))\n            dataset_name_list.append(dataloader.dataset.__class__.__name__)\n\n        # 2. run evaluation\n        for idx in range(len(self.evaluators)):\n            # 2.1 set self.evaluator for run_iter\n            self.evaluator = self.evaluators[idx]\n            self.dataloader = self.dataloaders[idx]\n\n            # 2.2 update metainfo for evaluator and visualizer\n            meta_info = meta_info_list[idx]\n            dataset_name = dataset_name_list[idx]\n            if meta_info:\n                self.evaluator.dataset_meta = meta_info\n                self._runner.visualizer.dataset_meta = meta_info\n            else:\n                warnings.warn(\n                    f'Dataset {dataset_name} has no metainfo. `dataset_meta` '\n                    'in evaluator, metric and visualizer will be None.')\n\n            # 2.3 generate images\n            metrics_sampler_list = metrics_sampler_lists[idx]\n            for metrics, sampler in metrics_sampler_list:\n                for data in sampler:\n                    self.run_iter(idx_counter, data, metrics)\n                    idx_counter += 1\n\n            # 2.4 evaluate metrics and update multi_metric\n            metrics = self.evaluator.evaluate()\n            if multi_metric and metrics.keys() & multi_metric.keys():\n                raise ValueError('Please set different prefix for different'\n                                 ' datasets in `test_evaluator`')\n            else:\n                multi_metric.update(metrics)\n\n        # 3. finish evaluation and call hooks\n        self._runner.call_hook('after_test_epoch', metrics=multi_metric)\n        self._runner.call_hook('after_test')\n\n    @torch.no_grad()\n    def run_iter(self, idx, data_batch: dict, metrics: Sequence[BaseMetric]):\n        \"\"\"Iterate one mini-batch and feed the output to corresponding\n        `metrics`.\n\n        Args:\n            idx (int): Current idx for the input data.\n            data_batch (dict): Batch of data from dataloader.\n            metrics (Sequence[BaseMetric]): Specific metrics to evaluate.\n        \"\"\"\n        self._runner.call_hook(\n            'before_test_iter', batch_idx=idx, data_batch=data_batch)\n        # outputs should be sequence of BaseDataElement\n        with autocast(enabled=self.fp16):\n            outputs = self._runner.model.test_step(data_batch)\n        self.evaluator.process(outputs, data_batch, metrics)\n        self._runner.call_hook(\n            'after_test_iter',\n            batch_idx=idx,\n            data_batch=data_batch,\n            outputs=outputs)\n"
  },
  {
    "path": "mmagic/engine/schedulers/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .linear_lr_scheduler_with_interval import LinearLrInterval\nfrom .reduce_lr_scheduler import ReduceLR\n\n__all__ = [\n    'LinearLrInterval',\n    'ReduceLR',\n]\n"
  },
  {
    "path": "mmagic/engine/schedulers/linear_lr_scheduler_with_interval.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine import MessageHub\nfrom mmengine.optim import LinearLR\n\nfrom mmagic.registry import PARAM_SCHEDULERS\n\n\n@PARAM_SCHEDULERS.register_module()\nclass LinearLrInterval(LinearLR):\n    \"\"\"Linear learning rate scheduler for image generation.\n\n    In the beginning, the learning rate is 'start_factor' defined in mmengine.\n    We give a target learning rate 'end_factor' and a start point 'begin'.\n    If :attr:self.by_epoch is True, 'begin' is calculated by epoch, otherwise,\n    calculated by iteration.\" Before 'begin', we fix learning rate as\n    'start_factor'; After 'begin', we linearly update learning rate to\n    'end_factor'.\n\n    Args:\n        interval (int): The interval to update the learning rate. Default: 1.\n    \"\"\"\n\n    def __init__(self, *args, interval=1, **kwargs):\n        self.interval = interval\n        super().__init__(*args, **kwargs)\n\n    def _get_value(self):\n        \"\"\"Compute value using chainable form of the scheduler.\"\"\"\n        if self.last_step == 0:\n            return [\n                group[self.param_name] * self.start_factor\n                for group in self.optimizer.param_groups\n            ]\n\n        message_hub = MessageHub.get_current_instance()\n        if self.by_epoch:\n            progress = message_hub.get_info('epoch')\n        else:\n            progress = message_hub.get_info('iter')\n\n        max_progress = self.end\n\n        factor = (max(0, progress - self.begin) // self.interval) / (\n            (max_progress - self.begin) // self.interval)\n\n        return [\n            self.start_factor + (self.end_factor - self.start_factor) * factor\n            for group in self.optimizer.param_groups\n        ]\n"
  },
  {
    "path": "mmagic/engine/schedulers/reduce_lr_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine import MessageHub\nfrom mmengine.optim import _ParamScheduler\n\nfrom mmagic.registry import PARAM_SCHEDULERS\n\n\n@PARAM_SCHEDULERS.register_module()\nclass ReduceLR(_ParamScheduler):\n    \"\"\"Decays the learning rate of each parameter group by linearly changing\n    small multiplicative factor until the number of epoch reaches a pre-defined\n    milestone: ``end``.\n\n    Notice that such decay can happen simultaneously with other changes to the\n    learning rate from outside this scheduler.\n\n    Note:\n        The learning rate of each parameter group will be update at regular\n            intervals.\n\n    Args:\n        optimizer (Optimizer or OptimWrapper): Wrapped optimizer.\n        mode (str, optional): One of `min`, `max`. In `min` mode, lr will\n            be reduced when the quantity monitored has stopped\n            decreasing; in `max` mode it will be reduced when the\n            quantity monitored has stopped increasing. Default: 'min'.\n        factor (float, optional): Factor by which the learning rate will be\n            reduced. new_lr = lr * factor. Default: 0.1.\n        patience (int, optional): Number of epochs with no improvement after\n            which learning rate will be reduced. For example, if\n            `patience = 2`, then we will ignore the first 2 epochs\n            with no improvement, and will only decrease the LR after the\n            3rd epoch if the loss still hasn't improved then.\n            Default: 10.\n        threshold (float, optional): Threshold for measuring the new optimum,\n            to only focus on significant changes. Default: 1e-4.\n        threshold_mode (str, optional): One of `rel`, `abs`. In `rel` mode,\n            dynamic_threshold = best * ( 1 + threshold ) in 'max'\n            mode or best * ( 1 - threshold ) in `min` mode.\n            In `abs` mode, dynamic_threshold = best + threshold in\n            `max` mode or best - threshold in `min` mode. Default: 'rel'.\n        cooldown (int, optional): Number of epochs to wait before resuming\n            normal operation after lr has been reduced. Default: 0.\n        min_lr (float, optional): Minimum LR value to keep. If LR after decay\n            is lower than `min_lr`, it will be clipped to this value.\n            Default: 0.\n        eps (float, optional): Minimal decay applied to lr. If the difference\n            between new and old lr is smaller than eps, the update is\n            ignored. Default: 1e-8.\n        begin (int): Step at which to start updating the learning rate.\n            Defaults to 0.\n        end (int): Step at which to stop updating the learning rate.\n        last_step (int): The index of last step. Used for resume without\n            state dict. Defaults to -1.\n        by_epoch (bool): Whether the scheduled learning rate is updated by\n            epochs. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 optimizer,\n                 mode: str = 'min',\n                 factor: float = 0.1,\n                 patience: int = 10,\n                 threshold: float = 1e-4,\n                 threshold_mode: str = 'rel',\n                 cooldown: int = 0,\n                 min_lr: float = 0.,\n                 eps: float = 1e-8,\n                 **kwargs):\n\n        super().__init__(optimizer=optimizer, param_name='lr', **kwargs)\n\n        self.message_hub = MessageHub.get_instance('reduce_lr')\n\n        if mode not in ['min', 'max']:\n            raise ValueError(\n                'mode must be one of \"min\" or \"max\", instead got {mode}')\n        self.mode = mode\n\n        if factor >= 1.0 or factor < 0:\n            raise ValueError('Factor should be < 1.0 and >=0')\n        self.factor = factor\n\n        self.patience = patience\n        self.threshold = threshold\n\n        if threshold_mode not in ['rel', 'abs']:\n            raise ValueError('thresh_mode must be one of \"rel\" or \"abs\",'\n                             f'instead got {threshold_mode}')\n        self.threshold_mode = threshold_mode\n\n        self.cooldown = cooldown\n        self.cooldown_counter = 0\n        self.best = None\n        self.num_bad_epochs = None\n        self.mode_worse = None  # the worse value for the chosen mode\n        self.min_lr = min_lr\n        self.eps = eps\n        self.last_epoch = 0\n        self._init_is_better(self.mode)\n        self._reset()\n\n    def _get_value(self):\n        \"\"\"Compute value using chainable form of the scheduler.\"\"\"\n\n        if self.last_step == 0:\n            return [\n                group[self.param_name] for group in self.optimizer.param_groups\n            ]\n\n        current = self.message_hub.get_scalar('value').current()\n        if self.is_better(current, self.best):\n            self.best = current\n            self.num_bad_epochs = 0\n        else:\n            self.num_bad_epochs += 1\n\n        if self.in_cooldown:\n            self.cooldown_counter -= 1\n            self.num_bad_epochs = 0\n\n        if self.num_bad_epochs > self.patience:\n            self.cooldown_counter = self.cooldown\n            self.num_bad_epochs = 0\n            results = []\n            for group in self.optimizer.param_groups:\n                regular_lr = group[self.param_name]\n                if regular_lr - regular_lr * self.factor > self.eps:\n                    regular_lr = max(regular_lr * self.factor, self.min_lr)\n                results.append(regular_lr)\n            return results\n\n        else:\n            return [\n                group[self.param_name] for group in self.optimizer.param_groups\n            ]\n\n    def _init_is_better(self, mode):\n        if mode == 'min':\n            self.mode_worse = float('inf')\n        else:\n            self.mode_worse = float('-inf')\n\n    def _reset(self):\n        self.best = self.mode_worse\n        self.cooldown_counter = 0\n        self.num_bad_epochs = 0\n\n    def is_better(self, a, best):\n        if self.mode == 'min' and self.threshold_mode == 'rel':\n            rel_epsilon = 1. - self.threshold\n            return a < best * rel_epsilon\n        elif self.mode == 'min' and self.threshold_mode == 'abs':\n            return a < best - self.threshold\n        elif self.mode == 'max' and self.threshold_mode == 'rel':\n            rel_epsilon = 1. + self.threshold\n            return a > best * rel_epsilon\n        else:\n            return a > best + self.threshold\n\n    @property\n    def in_cooldown(self):\n        return self.cooldown_counter > 0\n"
  },
  {
    "path": "mmagic/evaluation/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .evaluator import Evaluator\nfrom .functional import gauss_gradient\nfrom .metrics import (MAE, MSE, NIQE, PSNR, SAD, SNR, SSIM, ConnectivityError,\n                      Equivariance, FrechetInceptionDistance, GradientError,\n                      InceptionScore, MattingMSE,\n                      MultiScaleStructureSimilarity, PerceptualPathLength,\n                      PrecisionAndRecall, SlicedWassersteinDistance, TransFID,\n                      TransIS, niqe, psnr, snr, ssim)\n\n__all__ = [\n    'Evaluator',\n    'gauss_gradient',\n    'ConnectivityError',\n    'GradientError',\n    'MAE',\n    'MattingMSE',\n    'MSE',\n    'NIQE',\n    'niqe',\n    'PSNR',\n    'psnr',\n    'SAD',\n    'SNR',\n    'snr',\n    'SSIM',\n    'ssim',\n    'Equivariance',\n    'FrechetInceptionDistance',\n    'InceptionScore',\n    'MultiScaleStructureSimilarity',\n    'PerceptualPathLength',\n    'MultiScaleStructureSimilarity',\n    'PrecisionAndRecall',\n    'SlicedWassersteinDistance',\n    'TransFID',\n    'TransIS',\n]\n"
  },
  {
    "path": "mmagic/evaluation/evaluator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport hashlib\nfrom collections import defaultdict\nfrom typing import Any, Iterator, List, Optional, Sequence, Tuple, Union\n\nfrom mmengine.evaluator import BaseMetric, Evaluator\nfrom mmengine.model import BaseModel\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import EVALUATORS\nfrom mmagic.structures import DataSample\nfrom .metrics.base_gen_metric import GenMetric\n\n\n@EVALUATORS.register_module()\nclass Evaluator(Evaluator):\n    \"\"\"Evaluator for generative models. Unlike high-level vision tasks, metrics\n    for generative models have various input types. For example, Inception\n    Score (IS, :class:`~mmagic.evaluation.InceptionScore`) only needs to\n    take fake images as input. However, Frechet Inception Distance (FID,\n    :class:`~mmagic.evaluation.FrechetInceptionDistance`) needs to take\n    both real images and fake images as input, and the numbers of real images\n    and fake images can be set arbitrarily. For Perceptual path length (PPL,\n    :class:`~mmagic.evaluation.PerceptualPathLength`), generator need\n    to sample images along a latent path.\n\n    In order to be compatible with different metrics, we designed two critical\n    functions, :meth:`prepare_metrics` and :meth:`prepare_samplers` to support\n    those requirements.\n\n    - :meth:`prepare_metrics` set the image images' color order\n      and pass the dataloader to all metrics. Therefore metrics need\n      pre-processing to prepare the corresponding feature.\n    - :meth:`prepare_samplers` pass the dataloader and model to the metrics,\n      and get the corresponding sampler of each kind of metrics. Metrics with\n      same sample mode can share the sampler.\n\n    The whole evaluation process can be found in\n    :meth:`mmagic.engine.runner.MultiValLoop.run` and\n    :meth:`mmagic.engine.runner.MultiTestLoop.run`.\n\n    Args:\n        metrics (dict or BaseMetric or Sequence): The config of metrics.\n    \"\"\"\n\n    def __init__(self, metrics: Union[dict, BaseMetric, Sequence]):\n        if metrics is not None:\n            super().__init__(metrics)\n        else:\n            self.metrics = None\n        self.is_ready = False\n\n    def prepare_metrics(self, module: BaseModel, dataloader: DataLoader):\n        \"\"\"Prepare for metrics before evaluation starts. Some metrics use\n        pretrained model to extract feature. Some metrics use pretrained model\n        to extract feature and input channel order may vary among those models.\n        Therefore, we first parse the output color order from data\n        preprocessor and set the color order for each metric. Then we pass the\n        dataloader to each metrics to prepare pre-calculated items. (e.g.\n        inception feature of the real images). If metric has no pre-calculated\n        items, :meth:`metric.prepare` will be ignored. Once the function has\n        been called, :attr:`self.is_ready` will be set as `True`. If\n        :attr:`self.is_ready` is `True`, this function will directly return to\n        avoid duplicate computation.\n\n        Args:\n            module (BaseModel): Model to evaluate.\n            dataloader (DataLoader): The dataloader for real images.\n        \"\"\"\n        if self.metrics is None:\n            self.is_ready = True\n            return\n\n        if self.is_ready:\n            return\n\n        # prepare metrics\n        for metric in self.metrics:\n            metric.prepare(module, dataloader)\n        self.is_ready = True\n\n    @staticmethod\n    def _cal_metric_hash(metric: GenMetric):\n        \"\"\"Calculate a unique hash value based on the `SAMPLER_MODE` and\n        `sample_model`.\"\"\"\n        sampler_mode = metric.SAMPLER_MODE\n        sample_model = metric.sample_model\n        metric_dict = {\n            'SAMPLER_MODE': sampler_mode,\n            'sample_model': sample_model\n        }\n        if hasattr(metric, 'need_cond_input'):\n            metric_dict['need_cond_input'] = metric.need_cond_input\n        md5 = hashlib.md5(repr(metric_dict).encode('utf-8')).hexdigest()\n        return md5\n\n    def prepare_samplers(self, module: BaseModel, dataloader: DataLoader\n                         ) -> List[Tuple[List[BaseMetric], Iterator]]:\n        \"\"\"Prepare for the sampler for metrics whose sampling mode are\n        different. For generative models, different metric need image\n        generated with different inputs. For example, FID, KID and IS need\n        images generated with random noise, and PPL need paired images on the\n        specific noise interpolation path. Therefore, we first group metrics\n        with respect to their sampler's mode (refers to\n        :attr:~`GenMetrics.SAMPLER_MODE`), and build a shared sampler for each\n        metric group. To be noted that, the length of the shared sampler\n        depends on the metric of the most images required in each group.\n\n        Args:\n            module (BaseModel): Model to evaluate. Some metrics (e.g. PPL)\n                require `module` in their sampler.\n            dataloader (DataLoader): The dataloader for real image.\n\n        Returns:\n            List[Tuple[List[BaseMetric], Iterator]]: A list of \"metrics-shared\n                sampler\" pair.\n        \"\"\"\n        if self.metrics is None:\n            return [[[None], []]]\n\n        # grouping metrics based on `SAMPLER_MODE` and `sample_mode`\n        metric_mode_dict = defaultdict(list)\n        for metric in self.metrics:\n            metric_md5 = self._cal_metric_hash(metric)\n            metric_mode_dict[metric_md5].append(metric)\n\n        metrics_sampler_list = []\n        for metrics in metric_mode_dict.values():\n            first_metric = metrics[0]\n            metrics_sampler_list.append([\n                metrics,\n                first_metric.get_metric_sampler(module, dataloader, metrics)\n            ])\n\n        return metrics_sampler_list\n\n    def process(self, data_samples: Sequence[DataSample],\n                data_batch: Optional[Any],\n                metrics: Sequence[BaseMetric]) -> None:\n        \"\"\"Pass `data_batch` from dataloader and `predictions` (generated\n        results) to corresponding `metrics`.\n\n        Args:\n            data_samples (Sequence[DataSample]): A batch of generated\n                results from model.\n            data_batch (Optional[Any]): A batch of data from the\n                metrics specific sampler or the dataloader.\n            metrics (Optional[Sequence[BaseMetric]]): Metrics to evaluate.\n        \"\"\"\n        if self.metrics is None:\n            return\n\n        _data_samples = []\n        for data_sample in data_samples:\n            if isinstance(data_sample, DataSample):\n                _data_samples.append(data_sample.to_dict())\n            else:\n                _data_samples.append(data_sample)\n\n        # feed to the specifics metrics\n        for metric in metrics:\n            metric.process(data_batch, _data_samples)\n\n    def evaluate(self) -> dict:\n        \"\"\"Invoke ``evaluate`` method of each metric and collect the metrics\n        dictionary. Different from `Evaluator.evaluate`, this function does not\n        take `size` as input, and elements in `self.metrics` will call their\n        own `evaluate` method to calculate the metric.\n\n        Returns:\n            dict: Evaluation results of all metrics. The keys are the names\n                of the metrics, and the values are corresponding results.\n        \"\"\"\n        if self.metrics is None:\n            return {'No Metric': 'Nan'}\n        metrics = {}\n        for metric in self.metrics:\n            _results = metric.evaluate()\n\n            # Check metric name conflicts\n            for name in _results.keys():\n                if name in metrics:\n                    raise ValueError(\n                        'There are multiple evaluation results with the same '\n                        f'metric name {name}. Please make sure all metrics '\n                        'have different prefixes.')\n\n            metrics.update(_results)\n        return metrics\n"
  },
  {
    "path": "mmagic/evaluation/functional/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .fid_inception import InceptionV3\nfrom .gaussian_funcs import gauss_gradient\nfrom .inception_utils import (disable_gpu_fuser_on_pt19, load_inception,\n                              prepare_inception_feat, prepare_vgg_feat)\n\n__all__ = [\n    'gauss_gradient', 'InceptionV3', 'disable_gpu_fuser_on_pt19',\n    'load_inception', 'prepare_vgg_feat', 'prepare_inception_feat'\n]\n"
  },
  {
    "path": "mmagic/evaluation/functional/fid_inception.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Inception networks used in calculating FID and Inception metrics.\n\nThis code is modified from:\nhttps://github.com/rosinality/stylegan2-pytorch/blob/master/inception.py\n\"\"\"\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.model_zoo import load_url\nfrom torchvision import models\n\n# Inception weights ported to PyTorch from\n# https://download.tensorflow.org/models/image/imagenet/inception-2015-12-05.tgz\nFID_WEIGHTS_URL = 'https://github.com/mseitzer/pytorch-fid/releases/download/fid_weights/pt_inception-2015-12-05-6726825d.pth'  # noqa: E501\n\n\nclass InceptionV3(nn.Module):\n    \"\"\"Pretrained InceptionV3 network returning feature maps.\"\"\"\n\n    # Index of default block of inception to return,\n    # corresponds to output of final average pooling\n    DEFAULT_BLOCK_INDEX = 3\n\n    # Maps feature dimensionality to their output blocks indices\n    BLOCK_INDEX_BY_DIM = {\n        64: 0,  # First max pooling features\n        192: 1,  # Second max pooling features\n        768: 2,  # Pre-aux classifier features\n        2048: 3  # Final average pooling features\n    }\n\n    def __init__(self,\n                 output_blocks=[DEFAULT_BLOCK_INDEX],\n                 resize_input=True,\n                 normalize_input=True,\n                 requires_grad=False,\n                 use_fid_inception=True,\n                 load_fid_inception=True):\n        \"\"\"Build pretrained InceptionV3.\n\n        Args:\n            output_blocks (list[int]): Indices of blocks to return features of.\n                Possible values are:\n                    - 0: corresponds to output of first max pooling\n                    - 1: corresponds to output of second max pooling\n                    - 2: corresponds to output which is fed to aux classifier\n                    - 3: corresponds to output of final average pooling\n            resize_input (bool): If true, bilinearly resizes input to width and\n                height 299 before feeding input to model. As the network\n                without fully connected layers is fully convolutional, it\n                should be able to handle inputs of arbitrary size, so resizing\n                might not be strictly needed.\n            normalize_input (bool): If true, scales the input from range (0, 1)\n                to the range the pretrained Inception network expects, namely\n                (-1, 1).\n            requires_grad (bool): If true, parameters of the model require\n                gradients. Possibly useful for finetuning the network.\n            use_fid_inception (bool): If true, uses the pretrained Inception\n                model used in Tensorflow's FID implementation. If false, uses\n                the pretrained Inception model available in torchvision. The\n                FID Inception model has different weights and a slightly\n                different structure from torchvision's Inception model. If you\n                want to compute FID scores, you are strongly advised to set\n                this parameter to true to get comparable results.\n        \"\"\"\n        super().__init__()\n\n        self.resize_input = resize_input\n        self.normalize_input = normalize_input\n        self.output_blocks = sorted(output_blocks)\n        self.last_needed_block = max(output_blocks)\n\n        assert self.last_needed_block <= 3, \\\n            'Last possible output block index is 3'\n\n        self.blocks = nn.ModuleList()\n\n        if use_fid_inception:\n            inception = fid_inception_v3(load_fid_inception)\n        else:\n            inception = models.inception_v3(pretrained=True)\n\n        # Block 0: input to maxpool1\n        block0 = [\n            inception.Conv2d_1a_3x3, inception.Conv2d_2a_3x3,\n            inception.Conv2d_2b_3x3,\n            nn.MaxPool2d(kernel_size=3, stride=2)\n        ]\n        self.blocks.append(nn.Sequential(*block0))\n\n        # Block 1: maxpool1 to maxpool2\n        if self.last_needed_block >= 1:\n            block1 = [\n                inception.Conv2d_3b_1x1, inception.Conv2d_4a_3x3,\n                nn.MaxPool2d(kernel_size=3, stride=2)\n            ]\n            self.blocks.append(nn.Sequential(*block1))\n\n        # Block 2: maxpool2 to aux classifier\n        if self.last_needed_block >= 2:\n            block2 = [\n                inception.Mixed_5b,\n                inception.Mixed_5c,\n                inception.Mixed_5d,\n                inception.Mixed_6a,\n                inception.Mixed_6b,\n                inception.Mixed_6c,\n                inception.Mixed_6d,\n                inception.Mixed_6e,\n            ]\n            self.blocks.append(nn.Sequential(*block2))\n\n        # Block 3: aux classifier to final avgpool\n        if self.last_needed_block >= 3:\n            block3 = [\n                inception.Mixed_7a, inception.Mixed_7b, inception.Mixed_7c,\n                nn.AdaptiveAvgPool2d(output_size=(1, 1))\n            ]\n            self.blocks.append(nn.Sequential(*block3))\n\n        for param in self.parameters():\n            param.requires_grad = requires_grad\n\n    def forward(self, inp):\n        \"\"\"Get Inception feature maps.\n\n        Args:\n            inp (torch.Tensor): Input tensor of shape Bx3xHxW.\n                Values are expected to be in range (0, 1)\n\n        Returns:\n            list(torch.Tensor): Corresponding to the selected output \\\n                block, sorted ascending by index.\n        \"\"\"\n        outp = []\n        x = inp\n\n        if self.resize_input:\n            x = F.interpolate(\n                x, size=(299, 299), mode='bilinear', align_corners=False)\n\n        if self.normalize_input:\n            x = 2 * x - 1  # Scale from range (0, 1) to range (-1, 1)\n\n        for idx, block in enumerate(self.blocks):\n            x = block(x)\n            if idx in self.output_blocks:\n                outp.append(x)\n\n            if idx == self.last_needed_block:\n                break\n\n        return outp\n\n\ndef fid_inception_v3(load_ckpt=True):\n    \"\"\"Build pretrained Inception model for FID computation.\n\n    The Inception model for FID computation uses a different set of weights\n    and has a slightly different structure than torchvision's Inception.\n\n    This method first constructs torchvision's Inception and then patches the\n    necessary parts that are different in the FID Inception model.\n    \"\"\"\n    inception = models.inception_v3(\n        num_classes=1008, aux_logits=False, pretrained=False)\n    inception.Mixed_5b = FIDInceptionA(192, pool_features=32)\n    inception.Mixed_5c = FIDInceptionA(256, pool_features=64)\n    inception.Mixed_5d = FIDInceptionA(288, pool_features=64)\n    inception.Mixed_6b = FIDInceptionC(768, channels_7x7=128)\n    inception.Mixed_6c = FIDInceptionC(768, channels_7x7=160)\n    inception.Mixed_6d = FIDInceptionC(768, channels_7x7=160)\n    inception.Mixed_6e = FIDInceptionC(768, channels_7x7=192)\n    inception.Mixed_7b = FIDInceptionE_1(1280)\n    inception.Mixed_7c = FIDInceptionE_2(2048)\n\n    if load_ckpt:\n        state_dict = load_url(FID_WEIGHTS_URL, progress=True)\n        inception.load_state_dict(state_dict)\n\n    return inception\n\n\nclass FIDInceptionA(models.inception.InceptionA):\n    \"\"\"InceptionA block patched for FID computation.\"\"\"\n\n    def __init__(self, in_channels, pool_features):\n        super().__init__(in_channels, pool_features)\n\n    def forward(self, x):\n        \"\"\"Get InceptionA feature maps.\n\n        Args:\n            x (torch.Tensor): Input tensor of shape BxCxHxW.\n\n        Returns:\n            torch.Tensor: Feature Maps of x outputted by this block.\n        \"\"\"\n        branch1x1 = self.branch1x1(x)\n\n        branch5x5 = self.branch5x5_1(x)\n        branch5x5 = self.branch5x5_2(branch5x5)\n\n        branch3x3dbl = self.branch3x3dbl_1(x)\n        branch3x3dbl = self.branch3x3dbl_2(branch3x3dbl)\n        branch3x3dbl = self.branch3x3dbl_3(branch3x3dbl)\n\n        # Patch: Tensorflow's average pool does not use the padded zero's in\n        # its average calculation\n        branch_pool = F.avg_pool2d(\n            x, kernel_size=3, stride=1, padding=1, count_include_pad=False)\n        branch_pool = self.branch_pool(branch_pool)\n\n        outputs = [branch1x1, branch5x5, branch3x3dbl, branch_pool]\n        return torch.cat(outputs, 1)\n\n\nclass FIDInceptionC(models.inception.InceptionC):\n    \"\"\"InceptionC block patched for FID computation.\"\"\"\n\n    def __init__(self, in_channels, channels_7x7):\n        super().__init__(in_channels, channels_7x7)\n\n    def forward(self, x):\n        \"\"\"Get InceptionC feature maps.\n\n        Args:\n            x (torch.Tensor): Input tensor of shape BxCxHxW.\n\n        Returns:\n            torch.Tensor: Feature Maps of x outputted by this block.\n        \"\"\"\n        branch1x1 = self.branch1x1(x)\n\n        branch7x7 = self.branch7x7_1(x)\n        branch7x7 = self.branch7x7_2(branch7x7)\n        branch7x7 = self.branch7x7_3(branch7x7)\n\n        branch7x7dbl = self.branch7x7dbl_1(x)\n        branch7x7dbl = self.branch7x7dbl_2(branch7x7dbl)\n        branch7x7dbl = self.branch7x7dbl_3(branch7x7dbl)\n        branch7x7dbl = self.branch7x7dbl_4(branch7x7dbl)\n        branch7x7dbl = self.branch7x7dbl_5(branch7x7dbl)\n\n        # Patch: Tensorflow's average pool does not use the padded zero's in\n        # its average calculation\n        branch_pool = F.avg_pool2d(\n            x, kernel_size=3, stride=1, padding=1, count_include_pad=False)\n        branch_pool = self.branch_pool(branch_pool)\n\n        outputs = [branch1x1, branch7x7, branch7x7dbl, branch_pool]\n        return torch.cat(outputs, 1)\n\n\nclass FIDInceptionE_1(models.inception.InceptionE):\n    \"\"\"First InceptionE block patched for FID computation.\"\"\"\n\n    def __init__(self, in_channels):\n        super().__init__(in_channels)\n\n    def forward(self, x):\n        \"\"\"Get first InceptionE feature maps.\n\n        Args:\n            x (torch.Tensor): Input tensor of shape BxCxHxW.\n\n        Returns:\n            torch.Tensor: Feature Maps of x outputted by this block.\n        \"\"\"\n        branch1x1 = self.branch1x1(x)\n\n        branch3x3 = self.branch3x3_1(x)\n        branch3x3 = [\n            self.branch3x3_2a(branch3x3),\n            self.branch3x3_2b(branch3x3),\n        ]\n        branch3x3 = torch.cat(branch3x3, 1)\n\n        branch3x3dbl = self.branch3x3dbl_1(x)\n        branch3x3dbl = self.branch3x3dbl_2(branch3x3dbl)\n        branch3x3dbl = [\n            self.branch3x3dbl_3a(branch3x3dbl),\n            self.branch3x3dbl_3b(branch3x3dbl),\n        ]\n        branch3x3dbl = torch.cat(branch3x3dbl, 1)\n\n        # Patch: Tensorflow's average pool does not use the padded zero's in\n        # its average calculation\n        branch_pool = F.avg_pool2d(\n            x, kernel_size=3, stride=1, padding=1, count_include_pad=False)\n        branch_pool = self.branch_pool(branch_pool)\n\n        outputs = [branch1x1, branch3x3, branch3x3dbl, branch_pool]\n        return torch.cat(outputs, 1)\n\n\nclass FIDInceptionE_2(models.inception.InceptionE):\n    \"\"\"Second InceptionE block patched for FID computation.\"\"\"\n\n    def __init__(self, in_channels):\n        super().__init__(in_channels)\n\n    def forward(self, x):\n        \"\"\"Get second InceptionE feature maps.\n\n        Args:\n            x (torch.Tensor): Input tensor of shape BxCxHxW.\n\n        Returns:\n            torch.Tensor: Feature Maps of x outputted by this block.\n        \"\"\"\n        branch1x1 = self.branch1x1(x)\n\n        branch3x3 = self.branch3x3_1(x)\n        branch3x3 = [\n            self.branch3x3_2a(branch3x3),\n            self.branch3x3_2b(branch3x3),\n        ]\n        branch3x3 = torch.cat(branch3x3, 1)\n\n        branch3x3dbl = self.branch3x3dbl_1(x)\n        branch3x3dbl = self.branch3x3dbl_2(branch3x3dbl)\n        branch3x3dbl = [\n            self.branch3x3dbl_3a(branch3x3dbl),\n            self.branch3x3dbl_3b(branch3x3dbl),\n        ]\n        branch3x3dbl = torch.cat(branch3x3dbl, 1)\n\n        # Patch: The FID Inception model uses max pooling instead of average\n        # pooling. This is likely an error in this specific Inception\n        # implementation, as other Inception models use average pooling here\n        # (which matches the description in the paper).\n        branch_pool = F.max_pool2d(x, kernel_size=3, stride=1, padding=1)\n        branch_pool = self.branch_pool(branch_pool)\n\n        outputs = [branch1x1, branch3x3, branch3x3dbl, branch_pool]\n        return torch.cat(outputs, 1)\n"
  },
  {
    "path": "mmagic/evaluation/functional/gaussian_funcs.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport cv2\nimport numpy as np\n\n\ndef gaussian(x, sigma):\n    \"\"\"Gaussian function.\n\n    Args:\n        x (array_like): The independent variable.\n        sigma (float): Standard deviation of the gaussian function.\n\n    Return:\n        np.ndarray or scalar: Gaussian value of `x`.\n    \"\"\"\n    return np.exp(-x**2 / (2 * sigma**2)) / (sigma * np.sqrt(2 * np.pi))\n\n\ndef dgaussian(x, sigma):\n    \"\"\"Gradient of gaussian.\n\n    Args:\n        x (array_like): The independent variable.\n        sigma (float): Standard deviation of the gaussian function.\n\n    Return:\n        np.ndarray or scalar: Gradient of gaussian of `x`.\n    \"\"\"\n    return -x * gaussian(x, sigma) / sigma**2\n\n\ndef gauss_filter(sigma, epsilon=1e-2):\n    \"\"\"Gradient of gaussian.\n\n    Args:\n        sigma (float): Standard deviation of the gaussian kernel.\n        epsilon (float): Small value used when calculating kernel size.\n            Default: 1e-2.\n\n    Return:\n        filter_x (np.ndarray): Gaussian filter along x axis.\n        filter_y (np.ndarray): Gaussian filter along y axis.\n    \"\"\"\n    half_size = np.ceil(\n        sigma * np.sqrt(-2 * np.log(np.sqrt(2 * np.pi) * sigma * epsilon)))\n    size = int(2 * half_size + 1)\n\n    # create filter in x axis\n    filter_x = np.zeros((size, size))\n    for i in range(size):\n        for j in range(size):\n            filter_x[i, j] = gaussian(i - half_size, sigma) * dgaussian(\n                j - half_size, sigma)\n\n    # normalize filter\n    norm = np.sqrt((filter_x**2).sum())\n    filter_x = filter_x / norm\n    filter_y = np.transpose(filter_x)\n\n    return filter_x, filter_y\n\n\ndef gauss_gradient(img, sigma):\n    \"\"\"Gaussian gradient.\n\n    From https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/\n    submissions/8060/versions/2/previews/gaussgradient/gaussgradient.m/\n    index.html\n\n    Args:\n        img (np.ndarray): Input image.\n        sigma (float): Standard deviation of the gaussian kernel.\n\n    Return:\n        np.ndarray: Gaussian gradient of input `img`.\n    \"\"\"\n    filter_x, filter_y = gauss_filter(sigma)\n    img_filtered_x = cv2.filter2D(\n        img, -1, filter_x, borderType=cv2.BORDER_REPLICATE)\n    img_filtered_y = cv2.filter2D(\n        img, -1, filter_y, borderType=cv2.BORDER_REPLICATE)\n    return np.sqrt(img_filtered_x**2 + img_filtered_y**2)\n"
  },
  {
    "path": "mmagic/evaluation/functional/inception_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport hashlib\nimport os\nimport os.path as osp\nimport pickle\nimport sys\nfrom contextlib import contextmanager\nfrom copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine import is_filepath, print_log\nfrom mmengine.dataset import BaseDataset, Compose, pseudo_collate\nfrom mmengine.dist import (all_gather, get_dist_info, get_world_size,\n                           is_main_process)\nfrom mmengine.evaluator import BaseMetric\nfrom torch.utils.data.dataloader import DataLoader\nfrom torch.utils.data.dataset import Dataset\nfrom torchvision.models.inception import inception_v3\n\nfrom mmagic.utils import MMAGIC_CACHE_DIR, download_from_url\nfrom . import InceptionV3\n\nALLOWED_INCEPTION = ['StyleGAN', 'PyTorch']\nTERO_INCEPTION_URL = 'https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt'  # noqa\n\n\n@contextmanager\ndef disable_gpu_fuser_on_pt19():\n    \"\"\"On PyTorch 1.9 a CUDA fuser bug prevents the Inception JIT model to run.\n\n    Refers to:\n      https://github.com/GaParmar/clean-fid/blob/5e1e84cdea9654b9ac7189306dfa4057ea2213d8/cleanfid/inception_torchscript.py#L9  # noqa\n      https://github.com/GaParmar/clean-fid/issues/5\n      https://github.com/pytorch/pytorch/issues/64062\n    \"\"\"\n    if torch.__version__.startswith('1.9.'):\n        old_val = torch._C._jit_can_fuse_on_gpu()\n        torch._C._jit_override_can_fuse_on_gpu(False)\n    yield\n    if torch.__version__.startswith('1.9.'):\n        torch._C._jit_override_can_fuse_on_gpu(old_val)\n\n\ndef load_inception(inception_args, metric):\n    \"\"\"Load Inception Model from given ``inception_args`` and ``metric``.\n\n    This function would try to load Inception under the guidance of 'type'\n    given in `inception_args`, if not given, we would try best to load Tero's\n    ones. In detail, we would first try to load the model from disk with\n    the given 'inception_path', and then try to download the checkpoint from\n    'inception_url'. If both method are failed, pytorch version of Inception\n    would be loaded.\n\n    Args:\n        inception_args (dict): Keyword args for inception net.\n        metric (string): Metric to use the Inception. This argument would\n            influence the pytorch's Inception loading.\n\n    Returns:\n        model (torch.nn.Module): Loaded Inception model.\n        style (string): The version of the loaded Inception.\n    \"\"\"\n\n    if not isinstance(inception_args, dict):\n        raise TypeError('Receive invalid \\'inception_args\\': '\n                        f'\\'{inception_args}\\'')\n\n    _inception_args = deepcopy(inception_args)\n    inception_type = _inception_args.pop('type', None)\n\n    if torch.__version__ < '1.6.0':\n        print_log(\n            'Current Pytorch Version not support script module, load '\n            'Inception Model from torch model zoo. If you want to use '\n            'Tero\\' script model, please update your Pytorch higher '\n            f'than \\'1.6\\' (now is {torch.__version__})', 'current')\n        return _load_inception_torch(_inception_args, metric), 'pytorch'\n\n    # load pytorch version is specific\n    if inception_type != 'StyleGAN':\n        return _load_inception_torch(_inception_args, metric), 'pytorch'\n\n    # try to load Tero's version\n    path = _inception_args.get('inception_path', TERO_INCEPTION_URL)\n    if path is None:\n        path = TERO_INCEPTION_URL\n\n    # try to parse `path` as web url and download\n    if 'http' not in path:\n        model = _load_inception_from_path(path)\n        if isinstance(model, torch.nn.Module):\n            return model, 'StyleGAN'\n\n    # try to parse `path` as path on disk\n    model = _load_inception_from_url(path)\n    if isinstance(model, torch.nn.Module):\n        return model, 'StyleGAN'\n\n    raise RuntimeError('Cannot Load Inception Model, please check the input '\n                       f'`inception_args`: {inception_args}')\n\n\ndef _load_inception_from_path(inception_path):\n    \"\"\"Load inception from passed path.\n\n    Args:\n        inception_path (str): The path of inception.\n\n    Returns:\n        nn.Module: The loaded inception.\n    \"\"\"\n    print_log(\n        'Try to load Tero\\'s Inception Model from '\n        f'\\'{inception_path}\\'.', 'current')\n    try:\n        model = torch.jit.load(inception_path)\n        print_log('Load Tero\\'s Inception Model successfully.', 'current')\n    except Exception as e:\n        model = None\n        print_log('Load Tero\\'s Inception Model failed. '\n                  f'\\'{e}\\' occurs.', 'current')\n    return model\n\n\ndef _load_inception_from_url(inception_url: str) -> nn.Module:\n    \"\"\"Load Inception network from the give `inception_url`\"\"\"\n    inception_url = inception_url if inception_url else TERO_INCEPTION_URL\n    print_log(f'Try to download Inception Model from {inception_url}...',\n              'current')\n    try:\n        path = download_from_url(inception_url, dest_dir=MMAGIC_CACHE_DIR)\n        print_log('Download Finished.', 'current')\n        return _load_inception_from_path(path)\n    except Exception as e:\n        print_log(f'Download Failed. {e} occurs.', 'current')\n        return None\n\n\ndef _load_inception_torch(inception_args, metric) -> nn.Module:\n    \"\"\"Load Inception network from PyTorch's model zoo.\"\"\"\n    assert metric in ['FID', 'IS']\n    if metric == 'FID':\n        inception_model = InceptionV3([3], **inception_args)\n    elif metric == 'IS':\n        inception_model = inception_v3(pretrained=True, transform_input=False)\n        print_log(\n            'Load Inception V3 Network from Pytorch Model Zoo '\n            'for IS calculation. The results can only used '\n            'for monitoring purposes. To get more accuracy IS, '\n            'please use Tero\\'s Inception V3 checkpoints '\n            'and use Bicubic Interpolation with Pillow backend '\n            'for image resizing. More details may refer to '\n            'https://github.com/open-mmlab/MMEditing/blob/master/docs/en/quick_run.md#is.',  # noqa\n            'current')\n    return inception_model\n\n\ndef get_inception_feat_cache_name_and_args(dataloader: DataLoader,\n                                           metric: BaseMetric, real_nums: int,\n                                           capture_mean_cov: bool,\n                                           capture_all: bool\n                                           ) -> Tuple[str, dict]:\n    \"\"\"Get the name and meta info of the inception feature cache file\n    corresponding to the input dataloader and metric.\n\n    The meta info includes\n    'data_root', 'data_prefix', 'meta_info' and 'pipeline' of the dataset, and\n    'inception_style' and 'inception_args' of the metric. Then we calculate the\n    hash value of the meta info dict with md5, and the name of the inception\n    feature cache will be 'inception_feat_{HASH}.pkl'.\n    Args:\n        dataloader (Dataloader): The dataloader of real images.\n        metric (BaseMetric): The metric which needs inception features.\n        real_nums (int): Number of images used to extract inception feature.\n        capture_mean_cov (bool): Whether save the mean and covariance of\n            inception feature. Defaults to False.\n        capture_all (bool): Whether save the raw inception feature. Defaults\n            to False.\n    Returns:\n        Tuple[str, dict]: Filename and meta info dict of the inception feature\n            cache.\n    \"\"\"\n\n    dataset: BaseDataset = dataloader.dataset\n    assert isinstance(dataset, Dataset), (\n        f'Only support normal dataset, but receive {type(dataset)}.')\n\n    # get dataset info\n    data_root = deepcopy(dataset.data_root)\n    data_prefix = deepcopy(dataset.data_prefix)\n    metainfo = dataset.metainfo\n    pipeline = repr(dataset.pipeline)\n\n    # get metric info\n    inception_style = metric.inception_style\n    inception_args = getattr(metric, 'inception_args', None)\n\n    real_key = 'gt_img' if metric.real_key is None else metric.real_key\n    args = dict(\n        data_root=data_root,\n        data_prefix=data_prefix,\n        metainfo=metainfo,\n        pipeline=pipeline,\n        inception_style=inception_style,\n        inception_args=inception_args,\n        # save `num_gpus` because this may influence the data loading order\n        num_gpus=get_world_size(),\n        capture_mean_cov=capture_mean_cov,\n        capture_all=capture_all,\n        real_keys=real_key,\n        real_nums=real_nums)\n\n    real_nums_str = 'full' if real_nums == -1 else str(real_nums)\n    md5 = hashlib.md5(repr(sorted(args.items())).encode('utf-8'))\n    if capture_all:\n        prefix = 'inception_state-capture_all'\n    elif capture_mean_cov:\n        prefix = 'inception_state-capture_mean_cov'\n    else:\n        prefix = 'inception_state-capture_all_mean_cov'\n    cache_tag = f'{prefix}-{real_nums_str}-{md5.hexdigest()}.pkl'\n    return cache_tag, args\n\n\ndef get_vgg_feat_cache_name_and_args(dataloader: DataLoader,\n                                     metric: BaseMetric) -> Tuple[str, dict]:\n    \"\"\"Get the name and meta info of the vgg feature cache file corresponding\n    to the input dataloader and metric.\n\n    The meta info includes 'data_root',\n    'data_prefix', 'meta_info' and 'pipeline' of the dataset, and\n    'use_tero_scirpt' of the metric. Then we calculate the hash value of the\n    meta info dict with md5, and the name of the vgg feature cache will be\n    'vgg_feat_{HASH}.pkl'.\n    Args:\n        dataloader (Dataloader): The dataloader of real images.\n        metric (BaseMetric): The metric which needs inception features.\n    Returns:\n        Tuple[str, dict]: Filename and meta info dict of the inception feature\n            cache.\n    \"\"\"\n\n    dataset: BaseDataset = dataloader.dataset\n    assert isinstance(dataset, Dataset), (\n        f'Only support normal dataset, but receive {type(dataset)}.')\n\n    # get dataset info\n    data_root = deepcopy(dataset.data_root)\n    data_prefix = deepcopy(dataset.data_prefix)\n    metainfo = dataset.metainfo\n    pipeline = dataset.pipeline\n    if isinstance(pipeline, Compose):\n        pipeline_str = repr(pipeline)\n    else:\n        pipeline_str = ''\n\n    # get metric info\n    use_tero_scirpt = metric.use_tero_scirpt\n\n    args = dict(\n        data_root=data_root,\n        data_prefix=data_prefix,\n        metainfo=metainfo,\n        pipeline=pipeline_str,\n        use_tero_scirpt=use_tero_scirpt)\n\n    md5 = hashlib.md5(repr(sorted(args.items())).encode('utf-8'))\n    cache_tag = f'vgg_state-{md5.hexdigest()}.pkl'\n    return cache_tag, args\n\n\ndef prepare_inception_feat(dataloader: DataLoader,\n                           metric: BaseMetric,\n                           data_preprocessor: Optional[nn.Module] = None,\n                           capture_mean_cov: bool = False,\n                           capture_all: bool = False) -> dict:\n    \"\"\"Prepare inception feature for the input metric.\n\n    - If `metric.inception_pkl` is an online path, try to download and load\n      it. If cannot download or load, corresponding error will be raised.\n    - If `metric.inception_pkl` is local path and file exists, try to load the\n      file. If cannot load, corresponding error will be raised.\n    - If `metric.inception_pkl` is local path and file not exists, we will\n      extract the inception feature manually and save to 'inception_pkl'.\n    - If `metric.inception_pkl` is not defined, we will extract the inception\n      feature and save it to default cache dir with default name.\n\n    Args:\n        dataloader (Dataloader): The dataloader of real images.\n        metric (BaseMetric): The metric which needs inception features.\n        data_preprocessor (Optional[nn.Module]): Data preprocessor of the\n            module. Used to preprocess the real images. If not passed, real\n            images will automatically normalized to [-1, 1]. Defaults to None.\n        capture_mean_cov (bool): Whether save the mean and covariance of\n            inception feature. Defaults to False.\n        capture_all (bool): Whether save the raw inception feature. If true,\n            it will take a lot of time to save the inception feature. Defaults\n            to False.\n\n    Returns:\n        dict: Dict contains inception feature.\n    \"\"\"\n    assert capture_mean_cov or capture_all, (\n        'At least one of \\'capture_mean_cov\\' and \\'capture_all\\' is True.')\n    if not hasattr(metric, 'inception_pkl'):\n        return\n    inception_pkl: Optional[str] = metric.inception_pkl\n\n    if isinstance(inception_pkl, str):\n        if is_filepath(inception_pkl) and osp.exists(inception_pkl):\n            with open(inception_pkl, 'rb') as file:\n                inception_state = pickle.load(file)\n            print_log(\n                f'\\'{metric.prefix}\\' successful load inception feature '\n                f'from \\'{inception_pkl}\\'', 'current')\n            return inception_state\n        elif inception_pkl.startswith('s3'):\n            try:\n                raise NotImplementedError(\n                    'Not support download from Ceph currently')\n            except Exception as exp:\n                raise exp('Not support download from Ceph currently')\n        elif inception_pkl.startswith('http'):\n            try:\n                raise NotImplementedError(\n                    'Not support download from url currently')\n            except Exception as exp:\n                # cannot download, raise error\n                raise exp('Not support download from url currently')\n\n    # cannot load or download from file, extract manually\n    assert hasattr(metric, 'real_nums'), (\n        f'Metric \\'{metric.name}\\' must have attribute \\'real_nums\\'.')\n    real_nums = metric.real_nums\n    if inception_pkl is None:\n        inception_pkl, args = get_inception_feat_cache_name_and_args(\n            dataloader, metric, real_nums, capture_mean_cov, capture_all)\n        inception_pkl = osp.join(MMAGIC_CACHE_DIR, inception_pkl)\n    else:\n        args = dict()\n    if osp.exists(inception_pkl):\n        with open(inception_pkl, 'rb') as file:\n            real_feat = pickle.load(file)\n        print_log(f'load preprocessed feat from {inception_pkl}', 'current')\n        return real_feat\n\n    assert hasattr(metric, 'inception'), (\n        'Metric must have a inception network to extract inception features.')\n\n    real_feat = []\n\n    print_log(\n        f'Inception pkl \\'{inception_pkl}\\' is not found, extract '\n        'manually.', 'current')\n\n    import rich.progress\n\n    dataset, batch_size = dataloader.dataset, dataloader.batch_size\n    if real_nums == -1:\n        num_items = len(dataset)\n    else:\n        num_items = min(len(dataset), real_nums)\n\n    rank, num_gpus = get_dist_info()\n    item_subset = [(i * num_gpus + rank) % num_items\n                   for i in range((num_items - 1) // num_gpus + 1)]\n    inception_dataloader = DataLoader(\n        dataset,\n        batch_size=batch_size,\n        sampler=item_subset,\n        collate_fn=pseudo_collate,\n        shuffle=False,\n        drop_last=False)\n    # init rich pbar for the main process\n    if is_main_process():\n        # check the launcher\n        slurm_env_name = ['SLURM_PROCID', 'SLURM_NTASKS', 'SLURM_NODELIST']\n        if all([n in os.environ for n in slurm_env_name]):\n            is_slurm = True\n            pbar = mmengine.ProgressBar(len(inception_dataloader))\n        else:\n            is_slurm = False\n            columns = [\n                rich.progress.TextColumn('[bold blue]{task.description}'),\n                rich.progress.BarColumn(bar_width=40),\n                rich.progress.TaskProgressColumn(),\n                rich.progress.TimeRemainingColumn(),\n            ]\n            pbar = rich.progress.Progress(*columns)\n            pbar.start()\n            task = pbar.add_task(\n                'Calculate Inception Feature.',\n                total=len(inception_dataloader),\n                visible=True)\n\n    for data in inception_dataloader:\n        # set training = False to avoid norm + convert to BGR\n        data_samples = data_preprocessor(data, False)['data_samples']\n\n        real_key = 'gt_img' if metric.real_key is None else metric.real_key\n        img = getattr(data_samples, real_key)\n\n        real_feat_ = metric.forward_inception(img).cpu()\n        real_feat.append(real_feat_)\n\n        if is_main_process():\n            if is_slurm:\n                pbar.update(1)\n            else:\n                pbar.update(task, advance=1)\n\n    # stop the pbar\n    if is_main_process():\n        if is_slurm:\n            sys.stdout.write('\\n')\n        else:\n            pbar.stop()\n\n    # collect results\n    real_feat = torch.cat(real_feat)\n    # use `all_gather` here, gather tensor is much quicker than gather object.\n    real_feat = all_gather(real_feat)\n\n    # only cat on the main process\n    if is_main_process():\n        inception_state = dict(**args)\n        if capture_mean_cov:\n            real_feat = torch.cat(real_feat, dim=0)[:num_items].numpy()\n            real_mean = np.mean(real_feat, 0)\n            real_cov = np.cov(real_feat, rowvar=False)\n            inception_state['real_mean'] = real_mean\n            inception_state['real_cov'] = real_cov\n        if capture_all:\n            inception_state['raw_feature'] = real_feat\n        dir_name = osp.dirname(inception_pkl)\n        os.makedirs(dir_name, exist_ok=True)\n        print_log(\n            f'Saving inception pkl to {inception_pkl}. Please be patient.',\n            'current')\n        with open(inception_pkl, 'wb') as file:\n            pickle.dump(inception_state, file)\n        print_log('Inception pkl Finished.', 'current')\n        return inception_state\n\n\ndef prepare_vgg_feat(dataloader: DataLoader,\n                     metric: BaseMetric,\n                     data_preprocessor: Optional[nn.Module] = None,\n                     auto_save=True) -> np.ndarray:\n    \"\"\"Prepare vgg feature for the input metric.\n\n    - If `metric.vgg_pkl` is an online path, try to download and load\n      it. If cannot download or load, corresponding error will be raised.\n    - If `metric.vgg_pkl` is local path and file exists, try to load the\n      file. If cannot load, corresponding error will be raised.\n    - If `metric.vgg_pkl` is local path and file not exists, we will\n      extract the vgg feature manually and save to 'vgg_pkl'.\n    - If `metric.vgg_pkl` is not defined, we will extract the vgg\n      feature and save it to default cache dir with default name.\n\n    Args:\n        dataloader (Dataloader): The dataloader of real images.\n        metric (BaseMetric): The metric which needs vgg features.\n        data_preprocessor (Optional[nn.Module]): Data preprocessor of the\n            module. Used to preprocess the real images. If not passed, real\n            images will automatically normalized to [-1, 1]. Defaults to None.\n        Returns:\n            np.ndarray: Loaded vgg feature.\n    \"\"\"\n    if not hasattr(metric, 'vgg16_pkl'):\n        return\n    vgg_pkl: Optional[str] = metric.vgg16_pkl\n\n    if isinstance(vgg_pkl, str):\n        if is_filepath(vgg_pkl) and osp.exists(vgg_pkl):\n            with open(vgg_pkl, 'rb') as file:\n                vgg_state = pickle.load(file)\n            print_log(\n                f'\\'{metric.prefix}\\' successful load VGG feature '\n                f'from \\'{vgg_pkl}\\'', 'current')\n            return vgg_state['vgg_feat']\n        elif vgg_pkl.startswith('s3'):\n            try:\n                raise NotImplementedError(\n                    'Not support download from Ceph currently')\n            except Exception as exp:\n                raise exp('Not support download from Ceph currently')\n        elif vgg_pkl.startswith('http'):\n            try:\n                raise NotImplementedError(\n                    'Not support download from url currently')\n            except Exception as exp:\n                # cannot download, raise error\n                raise exp('Not support download from url currently')\n\n    # cannot load or download from file, extract manually\n    if vgg_pkl is None:\n        vgg_pkl, args = get_vgg_feat_cache_name_and_args(dataloader, metric)\n        vgg_pkl = osp.join(MMAGIC_CACHE_DIR, vgg_pkl)\n    else:\n        args = dict()\n    if osp.exists(vgg_pkl):\n        with open(vgg_pkl, 'rb') as file:\n            real_feat = pickle.load(file)['vgg_feat']\n        print(f'load preprocessed feat from {vgg_pkl}')\n        return real_feat\n\n    assert hasattr(\n        metric,\n        'vgg16'), ('Metric must have a vgg16 network to extract vgg features.')\n\n    real_feat = []\n\n    print_log(f'Vgg pkl \\'{vgg_pkl}\\' is not found, extract '\n              'manually.', 'current')\n\n    import rich.progress\n\n    # init rich pbar for the main process\n    if is_main_process():\n        columns = [\n            rich.progress.TextColumn('[bold blue]{task.description}'),\n            rich.progress.BarColumn(bar_width=40),\n            rich.progress.TaskProgressColumn(),\n            rich.progress.TimeRemainingColumn(),\n        ]\n        pbar = rich.progress.Progress(*columns)\n        pbar.start()\n        task = pbar.add_task(\n            'Calculate VGG16 Feature.',\n            total=len(dataloader.dataset),\n            visible=True)\n\n    for data in dataloader:\n        # set training = False to avoid norm + convert to BGR\n        data_samples = data_preprocessor(data, False)['data_samples']\n\n        real_key = 'gt_img' if metric.real_key is None else metric.real_key\n        img = getattr(data_samples, real_key)\n\n        real_feat_ = metric.extract_features(img)\n        real_feat.append(real_feat_)\n\n        if is_main_process():\n            pbar.update(task, advance=len(real_feat_) * get_world_size())\n\n    # stop the pbar\n    if is_main_process():\n        pbar.stop()\n\n    # collect results\n    real_feat = torch.cat(real_feat)\n    # use `all_gather` here, gather tensor is much quicker than gather object.\n    real_feat = all_gather(real_feat)\n\n    # only cat on the main process\n    if is_main_process():\n        real_feat = torch.cat(real_feat, dim=0)[:len(dataloader.dataset)].cpu()\n        if auto_save:\n            vgg_state = dict(vgg_feat=real_feat, **args)\n            with open(vgg_pkl, 'wb') as file:\n                pickle.dump(vgg_state, file)\n        return real_feat\n"
  },
  {
    "path": "mmagic/evaluation/metrics/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nfrom .connectivity_error import ConnectivityError\nfrom .equivariance import Equivariance\nfrom .fid import FrechetInceptionDistance, TransFID\nfrom .gradient_error import GradientError\nfrom .inception_score import InceptionScore, TransIS\nfrom .mae import MAE\nfrom .matting_mse import MattingMSE\nfrom .ms_ssim import MultiScaleStructureSimilarity\nfrom .mse import MSE\nfrom .niqe import NIQE, niqe\nfrom .ppl import PerceptualPathLength\nfrom .precision_and_recall import PrecisionAndRecall\nfrom .psnr import PSNR, psnr\nfrom .sad import SAD\nfrom .snr import SNR, snr\nfrom .ssim import SSIM, ssim\nfrom .swd import SlicedWassersteinDistance\n\n__all__ = [\n    'MAE',\n    'MSE',\n    'PSNR',\n    'psnr',\n    'SNR',\n    'snr',\n    'SSIM',\n    'ssim',\n    'MultiScaleStructureSimilarity',\n    'FrechetInceptionDistance',\n    'TransFID',\n    'InceptionScore',\n    'TransIS',\n    'SAD',\n    'MattingMSE',\n    'ConnectivityError',\n    'GradientError',\n    'PerceptualPathLength',\n    'PrecisionAndRecall',\n    'SlicedWassersteinDistance',\n    'NIQE',\n    'niqe',\n    'Equivariance',\n]\n"
  },
  {
    "path": "mmagic/evaluation/metrics/base_gen_metric.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport warnings\nfrom typing import Any, Iterator, List, Optional\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine import is_list_of, print_log\nfrom mmengine.dataset import pseudo_collate\nfrom mmengine.dist import (all_gather, broadcast_object_list, collect_results,\n                           get_dist_info, get_world_size, is_main_process)\nfrom mmengine.evaluator import BaseMetric\nfrom mmengine.model import is_model_wrapper\nfrom torch import Tensor\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.structures import DataSample\n\n\nclass GenMetric(BaseMetric):\n    \"\"\"Metric for MMagic.\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        real_nums (int): Numbers of the real image need for the metric. If `-1`\n            is passed means all images from the dataset is need. Defaults to 0.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        real_key (Optional[str]): Key for get real images from the input dict.\n            Defaults to 'img'.\n        sample_model (str): Sampling model for the generative model. Support\n            'orig' and 'ema'. Defaults to 'ema'.\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n\n    SAMPLER_MODE = 'normal'\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = 0,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None) -> None:\n        super().__init__(collect_device, prefix)\n        self.sample_model = sample_model\n\n        self.fake_nums = fake_nums\n        self.real_nums = real_nums\n        self.real_key = real_key\n        self.fake_key = fake_key\n        self.real_results: List[Any] = []\n        self.fake_results: List[Any] = []\n\n    @property\n    def real_nums_per_device(self):\n        \"\"\"Number of real images need for current device.\"\"\"\n        return math.ceil(self.real_nums / get_world_size())\n\n    @property\n    def fake_nums_per_device(self):\n        \"\"\"Number of fake images need for current device.\"\"\"\n        return math.ceil(self.fake_nums / get_world_size())\n\n    def _collect_target_results(self, target: str) -> Optional[list]:\n        \"\"\"Collected results in distributed environments.\n\n        Args:\n            target (str): Target results to collect.\n\n        Returns:\n            Optional[list]: The collected results.\n        \"\"\"\n        assert target in [\n            'fake', 'real'\n        ], ('Only support to collect \\'fake\\' or \\'real\\' results.')\n        results = getattr(self, f'{target}_results')\n        size = getattr(self, f'{target}_nums')\n        size = len(results) * get_world_size() if size == -1 else size\n\n        if len(results) == 0:\n            warnings.warn(\n                f'{self.__class__.__name__} got empty `self.{target}_results`.'\n                ' Please ensure that the processed results are properly added '\n                f'into `self.{target}_results` in `process` method.')\n\n        if is_list_of(results, Tensor):\n            # apply all_gather for tensor results\n            results = torch.cat(results, dim=0)\n            results = torch.cat(all_gather(results), dim=0)[:size]\n            results = torch.split(results, 1)\n        else:\n            # apply collect_results (all_gather_object) for non-tensor results\n            results = collect_results(results, size, self.collect_device)\n\n        # on non-main process, results should be `None`\n        if is_main_process() and len(results) != size:\n            raise ValueError(f'Length of results is \\'{len(results)}\\', not '\n                             f'equals to target size \\'{size}\\'.')\n        return results\n\n    def evaluate(self) -> dict:\n        \"\"\"Evaluate the model performance of the whole dataset after processing\n        all batches. Different like :class:`~mmengine.evaluator.BaseMetric`,\n        this function evaluate the metric with paired results (`results_fake`\n        and `results_real`).\n\n        Returns:\n            dict: Evaluation metrics dict on the val dataset. The keys are the\n                names of the metrics, and the values are corresponding results.\n        \"\"\"\n\n        results_fake = self._collect_target_results(target='fake')\n        results_real = self._collect_target_results(target='real')\n\n        if is_main_process():\n            # pack to list, align with BaseMetrics\n            _metrics = self.compute_metrics(results_fake, results_real)\n            # Add prefix to metric names\n            if self.prefix:\n                _metrics = {\n                    '/'.join((self.prefix, k)): v\n                    for k, v in _metrics.items()\n                }\n            metrics = [_metrics]\n        else:\n            metrics = [None]  # type: ignore\n\n        broadcast_object_list(metrics)\n\n        # reset the results list\n        self.real_results.clear()\n        self.fake_results.clear()\n\n        return metrics[0]\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: List['GenMetric']) -> DataLoader:\n        \"\"\"Get sampler for normal metrics. Directly returns the dataloader.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images.\n            metrics (List['GenMetric']): Metrics with the same sample mode.\n\n        Returns:\n            DataLoader: Default sampler for normal metrics.\n        \"\"\"\n        batch_size = dataloader.batch_size\n        dataset_length = len(dataloader.dataset)\n        rank, num_gpus = get_dist_info()\n        assert self.real_nums <= dataset_length, (\n            f'\\'real_nums\\'({self.real_nums}) can not larger than length of '\n            f'dataset ({dataset_length}).')\n        nums = dataset_length if self.real_nums == -1 else self.real_nums\n        item_subset = [(i * num_gpus + rank) % nums\n                       for i in range((nums - 1) // num_gpus + 1)]\n\n        metric_dataloader = DataLoader(\n            dataloader.dataset,\n            batch_size=batch_size,\n            sampler=item_subset,\n            collate_fn=pseudo_collate,\n            shuffle=False,\n            drop_last=False)\n\n        return metric_dataloader\n\n    def compute_metrics(self, results_fake, results_real) -> dict:\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (list): The processed results of each batch.\n\n        Returns:\n            dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        \"\"\"Prepare for the pre-calculating items of the metric. Defaults to do\n        nothing.\n\n        Args:\n            module (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for the real images.\n        \"\"\"\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n\nclass GenerativeMetric(GenMetric):\n    \"\"\"Metric for generative metrics. Except for the preparation phase\n    (:meth:`prepare`), generative metrics do not need extra real images.\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        real_nums (int): Numbers of the real image need for the metric. If `-1`\n            is passed means all images from the dataset is need. Defaults to 0.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        real_key (Optional[str]): Key for get real images from the input dict.\n            Defaults to 'img'.\n        need_cond_input (bool): If true, the sampler will return the\n            conditional input randomly sampled from the original dataset.\n            This require the dataset implement `get_data_info` and field\n            `gt_label` must be contained in the return value of\n            `get_data_info`. Noted that, for unconditional models, set\n            `need_cond_input` as True may influence the result of evaluation\n            results since the conditional inputs are sampled from the dataset\n            distribution; otherwise will be sampled from the uniform\n            distribution. Defaults to False.\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'ema'.\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n        sample_kwargs(dict): Sampling arguments for model test.\n    \"\"\"\n    SAMPLER_MODE = 'Generative'\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = 0,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'img',\n                 need_cond_input: bool = False,\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 sample_kwargs: dict = dict()):\n        super().__init__(fake_nums, real_nums, fake_key, real_key,\n                         sample_model, collect_device, prefix)\n        self.need_cond_input = need_cond_input\n        self.sample_kwargs = sample_kwargs\n        if self.need_cond_input:\n            print_log('Set \\'need_cond_input\\' as True, this may influence '\n                      'the evaluation results of conditional models.')\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: GenMetric):\n        \"\"\"Get sampler for generative metrics. Returns a dummy iterator, whose\n        return value of each iteration is a dict containing batch size and\n        sample mode to generate images.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images. Used to get\n                batch size during generate fake images.\n            metrics (List['GenMetric']): Metrics with the same sampler mode.\n\n        Returns:\n            :class:`dummy_iterator`: Sampler for generative metrics.\n        \"\"\"\n\n        batch_size = dataloader.batch_size\n        dataset = dataloader.dataset\n\n        sample_model = metrics[0].sample_model\n        assert all([metric.sample_model == sample_model for metric in metrics\n                    ]), ('\\'sample_model\\' between metrics is inconsistency.')\n\n        class dummy_iterator:\n\n            def __init__(self, batch_size, max_length, sample_model, dataset,\n                         need_cond, sample_kwargs) -> None:\n                self.batch_size = batch_size\n                self.max_length = max_length\n                self.sample_model = sample_model\n                self.dataset = dataset\n                self.need_cond = need_cond\n                self.sample_kwargs = sample_kwargs\n\n            def __iter__(self) -> Iterator:\n                self.idx = 0\n                return self\n\n            def __len__(self) -> int:\n                return math.ceil(self.max_length / self.batch_size)\n\n            def get_cond(self) -> List[DataSample]:\n\n                data_sample_list = []\n                for _ in range(self.batch_size):\n                    data_sample = DataSample()\n                    cond = self.dataset.get_data_info(\n                        np.random.randint(len(self.dataset)))['gt_label']\n                    data_sample.set_gt_label(torch.Tensor(cond))\n                    data_sample_list.append(data_sample)\n                return data_sample_list\n\n            def __next__(self) -> dict:\n                if self.idx > self.max_length:\n                    raise StopIteration\n                self.idx += batch_size\n\n                output_dict = dict(\n                    inputs=dict(\n                        sample_model=self.sample_model,\n                        num_batches=self.batch_size,\n                        sample_kwargs=self.sample_kwargs))\n\n                if self.need_cond:\n                    output_dict['data_samples'] = self.get_cond()\n\n                return output_dict\n\n        return dummy_iterator(\n            batch_size=batch_size,\n            max_length=max([metric.fake_nums_per_device\n                            for metric in metrics]),\n            sample_model=sample_model,\n            dataset=dataset,\n            need_cond=self.need_cond_input,\n            sample_kwargs=self.sample_kwargs)\n\n    def evaluate(self) -> dict():\n        \"\"\"Evaluate generative metric. In this function we only collect\n        :attr:`fake_results` because generative metrics do not need real\n        images.\n\n        Returns:\n            dict: Evaluation metrics dict on the val dataset. The keys are the\n                names of the metrics, and the values are corresponding results.\n        \"\"\"\n        results_fake = self._collect_target_results(target='fake')\n\n        if is_main_process():\n            # pack to list, align with BaseMetrics\n            _metrics = self.compute_metrics(results_fake)\n            # Add prefix to metric names\n            if self.prefix:\n                _metrics = {\n                    '/'.join((self.prefix, k)): v\n                    for k, v in _metrics.items()\n                }\n            metrics = [_metrics]\n        else:\n            metrics = [None]  # type: ignore\n\n        broadcast_object_list(metrics)\n\n        # reset the results list\n        self.fake_results.clear()\n\n        return metrics[0]\n\n    def compute_metrics(self, results) -> dict:\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (list): The processed results of each batch.\n\n        Returns:\n            dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n"
  },
  {
    "path": "mmagic/evaluation/metrics/base_sample_wise_metric.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Evaluation metrics based on each sample.\"\"\"\n\nfrom typing import List, Optional, Sequence\n\nimport torch.nn as nn\nfrom mmengine.evaluator import BaseMetric\nfrom mmengine.model import is_model_wrapper\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom .metrics_utils import average, obtain_data\n\n\n@METRICS.register_module()\nclass BaseSampleWiseMetric(BaseMetric):\n    \"\"\"Base sample wise metric of edit.\n\n    Subclass must provide process function.\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        mask_key (str, optional): Key of mask, if mask_key is None, calculate\n            all regions. Default: None\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        device (str): Device used to place torch tensors to compute metrics.\n            Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n        scaling (float, optional): Scaling factor for final metric.\n            E.g. scaling=100 means the final metric will be amplified by 100\n            for output. Default: 1\n    \"\"\"\n\n    SAMPLER_MODE = 'normal'\n    sample_model = 'orig'  # TODO: low-level models only support origin model\n    metric = None  # the name of metric\n\n    def __init__(self,\n                 gt_key: str = 'gt_img',\n                 pred_key: str = 'pred_img',\n                 mask_key: Optional[str] = None,\n                 scaling=1,\n                 device='cpu',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None) -> None:\n        assert self.metric is not None, (\n            '\\'metric\\' must be defined for \\'BaseSampleWiseMetric\\'.')\n        super().__init__(collect_device, prefix)\n\n        self.gt_key = gt_key\n        self.pred_key = pred_key\n        self.mask_key = mask_key\n        self.scaling = scaling\n        self.device = device\n\n        self.channel_order = 'BGR'\n\n    def compute_metrics(self, results: List):\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (List): The processed results of each batch.\n\n        Returns:\n            Dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n        result = average(results, self.metric) * self.scaling\n\n        return {self.metric: result}\n\n    def process(self, data_batch: Sequence[dict],\n                data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data and predictions.\n\n        Args:\n            data_batch (Sequence[dict]): A batch of data\n                from the dataloader.\n            predictions (Sequence[dict]): A batch of outputs from\n                the model.\n        \"\"\"\n\n        for data in data_samples:\n            prediction = data['output']\n\n            gt = obtain_data(data, self.gt_key, self.device)\n            pred = obtain_data(prediction, self.pred_key, self.device)\n            if self.mask_key is not None:\n                mask = obtain_data(data, self.mask_key)\n                mask[mask != 0] = 1\n            else:\n                mask = 1 - pred * 0\n\n            if len(gt.shape) <= 3:\n                result = self.process_image(gt, pred, mask)\n            else:\n                result_sum = 0\n                for i in range(gt.shape[0]):\n                    result_sum += self.process_image(gt[i], pred[i], mask[i])\n                result = result_sum / gt.shape[0]\n\n            self.results.append({self.metric: result})\n\n    def process_image(self, gt, pred, mask):\n        raise NotImplementedError\n\n    def evaluate(self) -> dict:\n        assert hasattr(self, 'size'), (\n            'Cannot find \\'size\\', please make sure \\'self.prepare\\' is '\n            'called correctly.')\n        return super().evaluate(self.size)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader):\n        self.size = len(dataloader.dataset)\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics) -> DataLoader:\n        \"\"\"Get sampler for normal metrics. Directly returns the dataloader.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images.\n            metrics (List['GenMetric']): Metrics with the same sample mode.\n\n        Returns:\n            DataLoader: Default sampler for normal metrics.\n        \"\"\"\n        return dataloader\n"
  },
  {
    "path": "mmagic/evaluation/metrics/connectivity_error.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Evaluation metrics used in Image Matting.\"\"\"\n\nfrom typing import List, Sequence\n\nimport cv2\nimport numpy as np\nimport torch.nn as nn\nfrom mmengine.model import is_model_wrapper\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import _fetch_data_and_check, average\n\n\n@METRICS.register_module()\nclass ConnectivityError(BaseSampleWiseMetric):\n    \"\"\"Connectivity error for evaluating alpha matte prediction.\n\n    .. note::\n\n        Current implementation assume image / alpha / trimap array in numpy\n        format and with pixel value ranging from 0 to 255.\n\n    .. note::\n\n        pred_alpha should be masked by trimap before passing\n        into this metric\n\n    Args:\n        step (float): Step of threshold when computing intersection between\n            `alpha` and `pred_alpha`. Default to 0.1 .\n        norm_const (int): Divide the result to reduce its magnitude.\n            Default to 1000.\n\n    Default prefix: ''\n\n    Metrics:\n        - ConnectivityError (float): Connectivity Error\n    \"\"\"\n\n    metric = 'ConnectivityError'\n\n    def __init__(\n        self,\n        step=0.1,\n        norm_constant=1000,\n        **kwargs,\n    ) -> None:\n        self.step = step\n        self.norm_constant = norm_constant\n        super().__init__(**kwargs)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader):\n        self.size = len(dataloader.dataset)\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n    def process(self, data_batch: Sequence[dict],\n                data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.results``, which will be used to\n        compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (Sequence[dict]): A batch of data from the dataloader.\n            predictions (Sequence[dict]): A batch of outputs from\n                the model.\n        \"\"\"\n\n        for data_sample in data_samples:\n            pred_alpha, gt_alpha, trimap = _fetch_data_and_check(data_sample)\n\n            thresh_steps = np.arange(0, 1 + self.step, self.step)\n            round_down_map = -np.ones_like(gt_alpha)\n            for i in range(1, len(thresh_steps)):\n                gt_alpha_thresh = gt_alpha >= thresh_steps[i]\n                pred_alpha_thresh = pred_alpha >= thresh_steps[i]\n                intersection = gt_alpha_thresh & pred_alpha_thresh\n                intersection = intersection.astype(np.uint8)\n\n                # connected components\n                _, output, stats, _ = cv2.connectedComponentsWithStats(\n                    intersection, connectivity=4)\n                # start from 1 in dim 0 to exclude background\n                size = stats[1:, -1]\n\n                # largest connected component of the intersection\n                omega = np.zeros_like(gt_alpha)\n                if len(size) != 0:\n                    max_id = np.argmax(size)\n                    # plus one to include background\n                    omega[output == max_id + 1] = 1\n\n                mask = (round_down_map == -1) & (omega == 0)\n                round_down_map[mask] = thresh_steps[i - 1]\n            round_down_map[round_down_map == -1] = 1\n\n            gt_alpha_diff = gt_alpha - round_down_map\n            pred_alpha_diff = pred_alpha - round_down_map\n            # only calculate difference larger than or equal to 0.15\n            gt_alpha_phi = 1 - gt_alpha_diff * (gt_alpha_diff >= 0.15)\n            pred_alpha_phi = 1 - pred_alpha_diff * (pred_alpha_diff >= 0.15)\n\n            connectivity_error = np.sum(\n                np.abs(gt_alpha_phi - pred_alpha_phi) * (trimap == 128))\n\n            # divide by 1000 to reduce the magnitude of the result\n            connectivity_error /= self.norm_constant\n\n            self.results.append({'conn_err': connectivity_error})\n\n    def compute_metrics(self, results: List):\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (dict): The processed results of each batch.\n\n        Returns:\n            Dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n        conn_err = average(results, 'conn_err')\n\n        return {'ConnectivityError': conn_err}\n"
  },
  {
    "path": "mmagic/evaluation/metrics/equivariance.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom collections import defaultdict\nfrom copy import deepcopy\nfrom typing import Iterator, List, Optional, Sequence\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.dist import all_gather\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom .base_gen_metric import GenerativeMetric\n\n\n@METRICS.register_module('EQ')\n@METRICS.register_module()\nclass Equivariance(GenerativeMetric):\n\n    name = 'Equivariance'\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = 0,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 need_cond_input: bool = False,\n                 sample_mode: str = 'ema',\n                 sample_kwargs: dict = dict(),\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 eq_cfg=dict()):\n        super().__init__(fake_nums, real_nums, fake_key, real_key,\n                         need_cond_input, sample_mode, collect_device, prefix)\n        # set default sampler config\n        self._eq_cfg = deepcopy(eq_cfg)\n        self._eq_cfg.setdefault('compute_eqt_int', False)\n        self._eq_cfg.setdefault('compute_eqt_frac', False)\n        self._eq_cfg.setdefault('compute_eqr', False)\n        self._eq_cfg.setdefault('translate_max', 0.125)\n        self._eq_cfg.setdefault('rotate_max', 1)\n        self.SAMPLER_MODE = 'EqSampler'\n\n        self.sample_kwargs = sample_kwargs\n        # compute numbers of eq\n        self.n_sub_metric = 0\n        if self._eq_cfg['compute_eqt_int']:\n            self.n_sub_metric += 1\n        if self._eq_cfg['compute_eqt_frac']:\n            self.n_sub_metric += 1\n        if self._eq_cfg['compute_eqr']:\n            self.n_sub_metric += 1\n\n        self.fake_results = defaultdict(list)\n\n    @torch.no_grad()\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results``, which will be used\n        to compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        cfg_key_list = ['compute_eqt_int', 'compute_eqt_frac', 'compute_eqr']\n        sample_key_list = ['eqt_int', 'eqt_frac', 'eqr']\n        for pred in data_samples:\n            for cfg_key, sample_key in zip(cfg_key_list, sample_key_list):\n                if self._eq_cfg[cfg_key]:\n                    assert sample_key in pred\n                    # assert hasattr(pred, sample_key)\n                    eq_sample = pred[sample_key]\n                    diff = eq_sample['diff'].to(torch.float64).sum()\n                    mask = eq_sample['mask'].to(torch.float64).sum()\n                    self.fake_results[sample_key] += [diff, mask]\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: List[GenerativeMetric]):\n        \"\"\"Get sampler for generative metrics. Returns a dummy iterator, whose\n        return value of each iteration is a dict containing batch size and\n        sample mode to generate images.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images. Used to get\n                batch size during generate fake images.\n            metrics (List['GenerativeMetric']): Metrics with the same sampler\n                mode.\n\n        Returns:\n            :class:`dummy_iterator`: Sampler for generative metrics.\n        \"\"\"\n\n        batch_size = dataloader.batch_size\n\n        sample_model = metrics[0].sample_model\n        assert all([metric.sample_model == sample_model for metric in metrics\n                    ]), ('\\'sample_model\\' between metrics is inconsistency.')\n\n        return eq_iterator(\n            batch_size=batch_size,\n            max_length=max([metric.fake_nums_per_device\n                            for metric in metrics]),\n            sample_mode=sample_model,\n            eq_cfg=self._eq_cfg,\n            sample_kwargs=self.sample_kwargs)\n\n    def compute_metrics(self, results) -> dict:\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (list): The processed results of each batch.\n\n        Returns:\n            dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n        results = dict()\n        for key in ['eqt_int', 'eqt_frac', 'eqr']:\n            if key not in self.fake_results:\n                continue\n            sums = torch.stack(self.fake_results[key], dim=0)\n            mses = (sums[0::2] / sums[1::2]).mean()\n            psnrs = np.log10(2) * 20 - mses.log10() * 10\n            psnrs = psnrs.cpu().numpy()\n            results[key] = psnrs\n        return results\n\n    def _collect_target_results(self, target: str) -> Optional[list]:\n        \"\"\"Collect function for Eq metric. This function support collect\n        results typing as Dict[List[Tensor]]`.\n\n        Args:\n            target (str): Target results to collect.\n\n        Returns:\n            Optional[list]: The collected results.\n        \"\"\"\n        if target == 'real':\n            return\n        results = getattr(self, f'{target}_results')\n        results_collected = []\n        results_collected = dict()\n        for key, result in results.items():\n            result_collected = torch.stack(result)\n            result_collected = torch.cat(all_gather(result_collected), dim=0)\n            results_collected[key] = torch.split(result_collected,\n                                                 len(result_collected))\n\n        return results_collected\n\n\nclass eq_iterator:\n\n    def __init__(self, batch_size, max_length, sample_mode, eq_cfg,\n                 sample_kwargs) -> None:\n        self.batch_size = batch_size\n        self.max_length = max_length\n        self.sample_mode = sample_mode\n        self.eq_cfg = deepcopy(eq_cfg)\n        self.sample_kwargs = sample_kwargs\n\n    def __iter__(self) -> Iterator:\n        self.idx = 0\n        return self\n\n    def __len__(self) -> int:\n        return self.max_length // self.batch_size\n\n    def __next__(self) -> dict:\n        if self.idx >= self.max_length:\n            raise StopIteration\n        self.idx += self.batch_size\n        mode = dict(\n            sample_mode=self.sample_mode,\n            eq_cfg=self.eq_cfg,\n            sample_kwargs=self.sample_kwargs)\n        # StyleGAN3 forward will receive eq config from mode\n        return dict(inputs=dict(mode=mode, num_batches=self.batch_size))\n"
  },
  {
    "path": "mmagic/evaluation/metrics/fid.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Sequence, Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.dist import is_main_process\nfrom scipy import linalg\nfrom torch import Tensor\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom ..functional import (disable_gpu_fuser_on_pt19, load_inception,\n                          prepare_inception_feat)\nfrom .base_gen_metric import GenerativeMetric\n\n\n@METRICS.register_module('FID-Full')\n@METRICS.register_module('FID')\n@METRICS.register_module()\nclass FrechetInceptionDistance(GenerativeMetric):\n    \"\"\"FID metric. In this metric, we calculate the distance between real\n    distributions and fake distributions. The distributions are modeled by the\n    real samples and fake samples, respectively. `Inception_v3` is adopted as\n    the feature extractor, which is widely used in StyleGAN and BigGAN.\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        real_nums (int): Numbers of the real images need for the metric. If -1\n            is passed, means all real images in the dataset will be used.\n            Defaults to -1.\n        inception_style (str): The target inception style want to load. If the\n            given style cannot be loaded successful, will attempt to load a\n            valid one. Defaults to 'StyleGAN'.\n        inception_path (str, optional): Path the the pretrain Inception\n            network. Defaults to None.\n        inception_pkl (str, optional): Path to reference inception pickle file.\n            If `None`, the statistical value of real distribution will be\n            calculated at running time. Defaults to None.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        real_key (Optional[str]): Key for get real images from the input dict.\n            Defaults to 'img'.\n        need_cond_input (bool): If true, the sampler will return the\n            conditional input randomly sampled from the original dataset.\n            This require the dataset implement `get_data_info` and field\n            `gt_label` must be contained in the return value of\n            `get_data_info`. Noted that, for unconditional models, set\n            `need_cond_input` as True may influence the result of evaluation\n            results since the conditional inputs are sampled from the dataset\n            distribution; otherwise will be sampled from the uniform\n            distribution. Defaults to False.\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'orig'.\n        collect_device (str, optional): Device name used for collecting results\n            from different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n    name = 'FID'\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = -1,\n                 inception_style='StyleGAN',\n                 inception_path: Optional[str] = None,\n                 inception_pkl: Optional[str] = None,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 need_cond_input: bool = False,\n                 sample_model: str = 'orig',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 sample_kwargs: dict = dict()):\n        super().__init__(fake_nums, real_nums, fake_key, real_key,\n                         need_cond_input, sample_model, collect_device, prefix,\n                         sample_kwargs)\n        self.real_mean = None\n        self.real_cov = None\n        self.device = 'cpu'\n        self.inception, self.inception_style = self._load_inception(\n            inception_style, inception_path)\n        self.inception_pkl = inception_pkl\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        \"\"\"Preparing inception feature for the real images.\n\n        Args:\n            module (nn.Module): The model to evaluate.\n            dataloader (DataLoader): The dataloader for real images.\n        \"\"\"\n        self.device = module.data_preprocessor.device\n        self.inception.to(self.device)\n        self.inception.eval()\n        inception_feat_dict = prepare_inception_feat(\n            dataloader, self, module.data_preprocessor, capture_mean_cov=True)\n        if is_main_process():\n            self.real_mean = inception_feat_dict['real_mean']\n            self.real_cov = inception_feat_dict['real_cov']\n\n    def _load_inception(self, inception_style: str,\n                        inception_path: Optional[str]\n                        ) -> Tuple[nn.Module, str]:\n        \"\"\"Load inception and return the successful loaded style.\n\n        Args:\n            inception_style (str): Target style of Inception network want to\n                load.\n            inception_path (Optional[str]): The path to the inception.\n\n        Returns:\n            Tuple[nn.Module, str]: The actually loaded inception network and\n                corresponding style.\n        \"\"\"\n        if inception_style == 'StyleGAN':\n            args = dict(type='StyleGAN', inception_path=inception_path)\n        else:\n            args = dict(type='Pytorch', normalize_input=False)\n        inception, style = load_inception(args, 'FID')\n        inception.eval()\n        return inception, style\n\n    def forward_inception(self, image: Tensor) -> Tensor:\n        \"\"\"Feed image to inception network and get the output feature.\n\n        Args:\n            data_samples (Sequence[dict]): A batch of data sample dict used to\n                extract inception feature.\n\n        Returns:\n            Tensor: Image feature extracted from inception.\n        \"\"\"\n        # image must passed with 'bgr'\n        image = image[:, [2, 1, 0]].to(self.device)\n\n        if self.inception_style == 'StyleGAN':\n            image = image.to(torch.uint8)\n            with disable_gpu_fuser_on_pt19():\n                feat = self.inception(image, return_features=True)\n        else:\n            image = (image - 127.5) / 127.5  # to [-1, 1]\n            feat = self.inception(image)[0].view(image.shape[0], -1)\n        return feat\n\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results``, which will be used\n        to compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        if len(self.fake_results) >= self.fake_nums_per_device:\n            return\n\n        fake_imgs = []\n        for pred in data_samples:\n            fake_img_ = pred\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n\n        # check whether shape in fake_imgs are same\n        img_shape = fake_imgs[0].shape\n        if all([img.shape == img_shape for img in fake_imgs]):\n            # all images have the same shape, forward inception altogether\n            fake_imgs = torch.stack(fake_imgs, dim=0)\n            feat = self.forward_inception(fake_imgs)\n            feat_list = list(torch.split(feat, 1))\n        else:\n            # images have different shape, forward separately\n            feat_list = [\n                self.forward_inception(img[None, ...]) for img in fake_imgs\n            ]\n        self.fake_results += feat_list\n\n    @staticmethod\n    def _calc_fid(sample_mean: np.ndarray,\n                  sample_cov: np.ndarray,\n                  real_mean: np.ndarray,\n                  real_cov: np.ndarray,\n                  eps: float = 1e-6) -> Tuple[float]:\n        \"\"\"Refer to the implementation from:\n\n        https://github.com/rosinality/stylegan2-pytorch/blob/master/fid.py#L34\n        \"\"\"\n        cov_sqrt, _ = linalg.sqrtm(sample_cov @ real_cov, disp=False)\n\n        if not np.isfinite(cov_sqrt).all():\n            print('product of cov matrices is singular')\n            offset = np.eye(sample_cov.shape[0]) * eps\n            cov_sqrt = linalg.sqrtm(\n                (sample_cov + offset) @ (real_cov + offset))\n\n        if np.iscomplexobj(cov_sqrt):\n            if not np.allclose(np.diagonal(cov_sqrt).imag, 0, atol=1e-3):\n                m = np.max(np.abs(cov_sqrt.imag))\n\n                raise ValueError(f'Imaginary component {m}')\n\n            cov_sqrt = cov_sqrt.real\n\n        mean_diff = sample_mean - real_mean\n        mean_norm = mean_diff @ mean_diff\n\n        trace = np.trace(sample_cov) + np.trace(\n            real_cov) - 2 * np.trace(cov_sqrt)\n\n        fid = mean_norm + trace\n\n        return float(fid), float(mean_norm), float(trace)\n\n    def compute_metrics(self, fake_results: list) -> dict:\n        \"\"\"Compute the result of FID metric.\n\n        Args:\n            fake_results (list): List of image feature of fake images.\n\n        Returns:\n            dict: A dict of the computed FID metric and its mean and\n                covariance.\n        \"\"\"\n        fake_feats = torch.cat(fake_results, dim=0)\n        fake_feats_np = fake_feats.cpu().numpy()\n        fake_mean = np.mean(fake_feats_np, 0)\n        fake_cov = np.cov(fake_feats_np, rowvar=False)\n\n        fid, mean, cov = self._calc_fid(fake_mean, fake_cov, self.real_mean,\n                                        self.real_cov)\n\n        return {'fid': fid, 'mean': mean, 'cov': cov}\n\n\n@METRICS.register_module()\nclass TransFID(FrechetInceptionDistance):\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = -1,\n                 inception_style='StyleGAN',\n                 inception_path: Optional[str] = None,\n                 inception_pkl: Optional[str] = None,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'img',\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None):\n        # NOTE: set `need_cond` as False since we direct return the original\n        # dataloader as sampler\n        super().__init__(fake_nums, real_nums, inception_style, inception_path,\n                         inception_pkl, fake_key, real_key, False,\n                         sample_model, collect_device, prefix)\n\n        self.SAMPLER_MODE = 'normal'\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: List['GenerativeMetric']) -> DataLoader:\n        \"\"\"Get sampler for normal metrics. Directly returns the dataloader.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images.\n            metrics (List['GenMetric']): Metrics with the same sample mode.\n\n        Returns:\n            DataLoader: Default sampler for normal metrics.\n        \"\"\"\n        return dataloader\n"
  },
  {
    "path": "mmagic/evaluation/metrics/gradient_error.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Sequence\n\nimport cv2\nimport numpy as np\nimport torch.nn as nn\nfrom mmengine.model import is_model_wrapper\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom ..functional import gauss_gradient\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import _fetch_data_and_check, average\n\n\n@METRICS.register_module()\nclass GradientError(BaseSampleWiseMetric):\n    \"\"\"Gradient error for evaluating alpha matte prediction.\n\n    .. note::\n\n        Current implementation assume image / alpha / trimap array in numpy\n        format and with pixel value ranging from 0 to 255.\n\n    .. note::\n\n        pred_alpha should be masked by trimap before passing\n        into this metric\n\n    Args:\n        sigma (float): Standard deviation of the gaussian kernel.\n            Defaults to 1.4 .\n        norm_const (int): Divide the result to reduce its magnitude.\n            Defaults to 1000 .\n\n    Default prefix: ''\n\n    Metrics:\n        - GradientError (float): Gradient Error\n    \"\"\"\n\n    metric = 'GradientError'\n\n    def __init__(\n        self,\n        sigma=1.4,\n        norm_constant=1000,\n        **kwargs,\n    ) -> None:\n        self.sigma = sigma\n        self.norm_constant = norm_constant\n        super().__init__(**kwargs)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader):\n        self.size = len(dataloader.dataset)\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n    def process(self, data_batch: Sequence[dict],\n                data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.results``, which will be used to\n        compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (Sequence[dict]): A batch of data from the dataloader.\n            predictions (Sequence[dict]): A batch of outputs from\n                the model.\n        \"\"\"\n\n        for data_sample in data_samples:\n            pred_alpha, gt_alpha, trimap = _fetch_data_and_check(data_sample)\n\n            gt_alpha_normed = np.zeros_like(gt_alpha)\n            pred_alpha_normed = np.zeros_like(pred_alpha)\n\n            cv2.normalize(gt_alpha, gt_alpha_normed, 1.0, 0.0, cv2.NORM_MINMAX)\n            cv2.normalize(pred_alpha, pred_alpha_normed, 1.0, 0.0,\n                          cv2.NORM_MINMAX)\n\n            gt_alpha_grad = gauss_gradient(gt_alpha_normed, self.sigma)\n            pred_alpha_grad = gauss_gradient(pred_alpha_normed, self.sigma)\n            # this is the sum over n samples\n            grad_loss = ((gt_alpha_grad - pred_alpha_grad)**2 *\n                         (trimap == 128)).sum()\n\n            # divide by 1000 to reduce the magnitude of the result\n            grad_loss /= self.norm_constant\n\n            self.results.append({'grad_err': grad_loss})\n\n    def compute_metrics(self, results: List):\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (dict): The processed results of each batch.\n\n        Returns:\n            Dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n        grad_err = average(results, 'grad_err')\n\n        return {'GradientError': grad_err}\n"
  },
  {
    "path": "mmagic/evaluation/metrics/inception_score.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Sequence, Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom PIL import Image\nfrom scipy.stats import entropy\nfrom torch import Tensor\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\n# from .inception_utils import disable_gpu_fuser_on_pt19, load_inception\nfrom ..functional import disable_gpu_fuser_on_pt19, load_inception\nfrom .base_gen_metric import GenerativeMetric\n\n\n@METRICS.register_module('IS')\n@METRICS.register_module()\nclass InceptionScore(GenerativeMetric):\n    \"\"\"IS (Inception Score) metric. The images are split into groups, and the\n    inception score is calculated on each group of images, then the mean and\n    standard deviation of the score is reported. The calculation of the\n    inception score on a group of images involves first using the inception v3\n    model to calculate the conditional probability for each image (p(y|x)). The\n    marginal probability is then calculated as the average of the conditional\n    probabilities for the images in the group (p(y)). The KL divergence is then\n    calculated for each image as the conditional probability multiplied by the\n    log of the conditional probability minus the log of the marginal\n    probability. The KL divergence is then summed over all images and averaged\n    over all classes and the exponent of the result is calculated to give the\n    final score.\n\n    Ref: https://github.com/sbarratt/inception-score-pytorch/blob/master/inception_score.py  # noqa\n\n    Note that we highly recommend that users should download the Inception V3\n    script module from the following address. Then, the `inception_pkl` can\n    be set with user's local path. If not given, we will use the Inception V3\n    from pytorch model zoo. However, this may bring significant different in\n    the final results.\n\n    Tero's Inception V3: https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt  # noqa\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        resize (bool, optional): Whether resize image to 299x299. Defaults to\n            True.\n        splits (int, optional): The number of groups. Defaults to 10.\n        inception_style (str): The target inception style want to load. If the\n            given style cannot be loaded successful, will attempt to load a\n            valid one. Defaults to 'StyleGAN'.\n        inception_path (str, optional): Path the the pretrain Inception\n            network. Defaults to None.\n        resize_method (str): Resize method. If `resize` is False, this will be\n            ignored. Defaults to 'bicubic'.\n        use_pil_resize (bool): Whether use Bicubic interpolation with\n            Pillow's backend. If set as True, the evaluation process may be a\n            little bit slow, but achieve a more accurate IS result. Defaults\n            to False.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        need_cond_input (bool): If true, the sampler will return the\n            conditional input randomly sampled from the original dataset.\n            This require the dataset implement `get_data_info` and field\n            `gt_label` must be contained in the return value of\n            `get_data_info`. Noted that, for unconditional models, set\n            `need_cond_input` as True may influence the result of evaluation\n            results since the conditional inputs are sampled from the dataset\n            distribution; otherwise will be sampled from the uniform\n            distribution. Defaults to False.\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'orig'.\n        collect_device (str, optional): Device name used for collecting results\n            from different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n    name = 'IS'\n\n    pil_resize_method_mapping = {\n        'bicubic': Image.BICUBIC,\n        'bilinear': Image.BILINEAR,\n        'nearest': Image.NEAREST,\n        'box': Image.BOX\n    }\n\n    def __init__(self,\n                 fake_nums: int = 5e4,\n                 resize: bool = True,\n                 splits: int = 10,\n                 inception_style: str = 'StyleGAN',\n                 inception_path: Optional[str] = None,\n                 resize_method='bicubic',\n                 use_pillow_resize: bool = True,\n                 fake_key: Optional[str] = None,\n                 need_cond_input: bool = False,\n                 sample_model='orig',\n                 collect_device: str = 'cpu',\n                 prefix: str = None):\n        super().__init__(fake_nums, 0, fake_key, None, need_cond_input,\n                         sample_model, collect_device, prefix)\n\n        self.resize = resize\n        self.splits = splits\n        self.device = 'cpu'\n\n        if not use_pillow_resize:\n            print_log(\n                'We strongly recommend to use the bicubic resize with '\n                'Pillow backend. Otherwise, the results maybe '\n                'unreliable', 'current')\n        self.use_pillow_resize = use_pillow_resize\n\n        if self.use_pillow_resize:\n            allowed_resize_method = list(self.pil_resize_method_mapping.keys())\n            assert resize_method in self.pil_resize_method_mapping, (\n                f'\\'resize_method\\' (\\'{resize_method}\\') is not supported '\n                'for PIL resize. Please select resize method in '\n                f'{allowed_resize_method}.')\n            self.resize_method = self.pil_resize_method_mapping[resize_method]\n        else:\n            self.resize_method = resize_method\n\n        self.inception, self.inception_style = self._load_inception(\n            inception_style, inception_path)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        \"\"\"Prepare for the pre-calculating items of the metric. Defaults to do\n        nothing.\n\n        Args:\n            module (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for the real images.\n        \"\"\"\n        self.device = module.data_preprocessor.device\n        self.inception.to(self.device)\n\n    def _load_inception(self, inception_style: str,\n                        inception_path: Optional[str]\n                        ) -> Tuple[nn.Module, str]:\n        \"\"\"Load pretrain model of inception network.\n        Args:\n            inception_style (str): Target style of Inception network want to\n                load.\n            inception_path (Optional[str]): The path to the inception.\n\n        Returns:\n            Tuple[nn.Module, str]: The actually loaded inception network and\n                corresponding style.\n        \"\"\"\n        inception, style = load_inception(\n            dict(type=inception_style, inception_path=inception_path), 'IS')\n        inception.eval()\n        return inception, style\n\n    def _preprocess(self, image: Tensor) -> Tensor:\n        \"\"\"Preprocess image before pass to the Inception. Preprocess operations\n        contain channel conversion and resize.\n\n        Args:\n            image (Tensor): Image tensor before preprocess.\n\n        Returns:\n            Tensor: Image tensor after resize and channel conversion\n                (if need.)\n        \"\"\"\n        # image must passed in 'bgr'\n        image = image[:, [2, 1, 0]]\n        if not self.resize:\n            return image\n        if self.use_pillow_resize:\n            image = image.to(torch.uint8)\n            x_np = [x_.permute(1, 2, 0).detach().cpu().numpy() for x_ in image]\n\n            # use bicubic resize as default\n            x_pil = [\n                Image.fromarray(x_).resize((299, 299),\n                                           resample=self.resize_method)\n                for x_ in x_np\n            ]\n            x_ten = torch.cat(\n                [torch.FloatTensor(np.array(x_)[None, ...]) for x_ in x_pil])\n            return x_ten.permute(0, 3, 1, 2)\n        else:\n            return F.interpolate(\n                image, size=(299, 299), mode=self.resize_method)\n\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results``, which will be used\n        to compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        if len(self.fake_results) >= self.fake_nums_per_device:\n            return\n\n        fake_imgs = []\n        for pred in data_samples:\n            fake_img_ = pred\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n        fake_imgs = torch.stack(fake_imgs, dim=0)\n        fake_imgs = self._preprocess(fake_imgs).to(self.device)\n\n        if self.inception_style == 'StyleGAN':\n            fake_imgs = fake_imgs.to(torch.uint8)\n            with disable_gpu_fuser_on_pt19():\n                feat = self.inception(fake_imgs, no_output_bias=True)\n        else:\n            fake_imgs = (fake_imgs - 127.5) / 127.5\n            feat = F.softmax(self.inception(fake_imgs), dim=1)\n\n        # NOTE: feat is shape like (bz, 1000), convert to a list\n        self.fake_results += list(torch.split(feat, 1))\n\n    def compute_metrics(self, fake_results: list) -> dict:\n        \"\"\"Compute the results of Inception Score metric.\n\n        Args:\n            fake_results (list): List of image feature of fake images.\n\n        Returns:\n            dict: A dict of the computed IS metric and its standard error\n        \"\"\"\n        split_scores = []\n        preds = torch.cat(fake_results, dim=0).cpu().numpy()\n        # check for the size\n        assert preds.shape[0] >= self.fake_nums\n        preds = preds[:self.fake_nums]\n        for k in range(self.splits):\n            part = preds[k * (self.fake_nums // self.splits):(k + 1) *\n                         (self.fake_nums // self.splits), :]\n            py = np.mean(part, axis=0)\n            scores = []\n            for i in range(part.shape[0]):\n                pyx = part[i, :]\n                scores.append(entropy(pyx, py))\n            split_scores.append(np.exp(np.mean(scores)))\n\n        mean, std = np.mean(split_scores), np.std(split_scores)\n\n        return {'is': float(mean), 'is_std': float(std)}\n\n\n@METRICS.register_module()\nclass TransIS(InceptionScore):\n    \"\"\"IS (Inception Score) metric. The images are split into groups, and the\n    inception score is calculated on each group of images, then the mean and\n    standard deviation of the score is reported. The calculation of the\n    inception score on a group of images involves first using the inception v3\n    model to calculate the conditional probability for each image (p(y|x)). The\n    marginal probability is then calculated as the average of the conditional\n    probabilities for the images in the group (p(y)). The KL divergence is then\n    calculated for each image as the conditional probability multiplied by the\n    log of the conditional probability minus the log of the marginal\n    probability. The KL divergence is then summed over all images and averaged\n    over all classes and the exponent of the result is calculated to give the\n    final score.\n\n    Ref: https://github.com/sbarratt/inception-score-pytorch/blob/master/inception_score.py  # noqa\n\n    Note that we highly recommend that users should download the Inception V3\n    script module from the following address. Then, the `inception_pkl` can\n    be set with user's local path. If not given, we will use the Inception V3\n    from pytorch model zoo. However, this may bring significant different in\n    the final results.\n\n    Tero's Inception V3: https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/inception-2015-12-05.pt  # noqa\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        resize (bool, optional): Whether resize image to 299x299. Defaults to\n            True.\n        splits (int, optional): The number of groups. Defaults to 10.\n        inception_style (str): The target inception style want to load. If the\n            given style cannot be loaded successful, will attempt to load a\n            valid one. Defaults to 'StyleGAN'.\n        inception_path (str, optional): Path the the pretrain Inception\n            network. Defaults to None.\n        resize_method (str): Resize method. If `resize` is False, this will be\n            ignored. Defaults to 'bicubic'.\n        use_pil_resize (bool): Whether use Bicubic interpolation with\n            Pillow's backend. If set as True, the evaluation process may be a\n            little bit slow, but achieve a more accurate IS result. Defaults\n            to False.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'ema'.\n        collect_device (str, optional): Device name used for collecting results\n            from different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 fake_nums: int = 50000,\n                 resize: bool = True,\n                 splits: int = 10,\n                 inception_style: str = 'StyleGAN',\n                 inception_path: Optional[str] = None,\n                 resize_method='bicubic',\n                 use_pillow_resize: bool = True,\n                 fake_key: Optional[str] = None,\n                 sample_model='ema',\n                 collect_device: str = 'cpu',\n                 prefix: str = None):\n        # NOTE: set `need_cond` as False since we direct return the original\n        # dataloader as sampler\n        super().__init__(fake_nums, resize, splits, inception_style,\n                         inception_path, resize_method, use_pillow_resize,\n                         fake_key, False, sample_model, collect_device, prefix)\n        self.SAMPLER_MODE = 'normal'\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: List['GenerativeMetric']) -> DataLoader:\n        \"\"\"Get sampler for normal metrics. Directly returns the dataloader.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images.\n            metrics (List['GenMetric']): Metrics with the same sample mode.\n\n        Returns:\n            DataLoader: Default sampler for normal metrics.\n        \"\"\"\n        return dataloader\n"
  },
  {
    "path": "mmagic/evaluation/metrics/mae.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Evaluation metrics based on pixels.\"\"\"\n\nimport numpy as np\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\n\n\n@METRICS.register_module()\nclass MAE(BaseSampleWiseMetric):\n    \"\"\"Mean Absolute Error metric for image.\n\n    mean(abs(a-b))\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        mask_key (str, optional): Key of mask, if mask_key is None, calculate\n            all regions. Default: None\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n\n    Metrics:\n        - MAE (float): Mean of Absolute Error\n    \"\"\"\n\n    metric = 'MAE'\n\n    def process_image(self, gt, pred, mask):\n        \"\"\"Process an image.\n\n        Args:\n            gt (Tensor | np.ndarray): GT image.\n            pred (Tensor | np.ndarray): Pred image.\n            mask (Tensor | np.ndarray): Mask of evaluation.\n        Returns:\n            result (np.ndarray): MAE result.\n        \"\"\"\n\n        gt = gt / 255.\n        pred = pred / 255.\n\n        diff = gt - pred\n        diff = abs(diff)\n\n        if self.mask_key is not None:\n            diff *= mask  # broadcast for channel dimension\n            scale = np.prod(diff.shape) / np.prod(mask.shape)\n            result = diff.sum() / (mask.sum() * scale + 1e-12)\n        else:\n            result = diff.mean()\n\n        return result\n"
  },
  {
    "path": "mmagic/evaluation/metrics/matting_mse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Sequence\n\nimport torch.nn as nn\nfrom mmengine.model import is_model_wrapper\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import _fetch_data_and_check, average\n\n\n@METRICS.register_module()\nclass MattingMSE(BaseSampleWiseMetric):\n    \"\"\"Mean Squared Error metric for image matting.\n\n    This metric compute per-pixel squared error average across all\n    pixels.\n    i.e. mean((a-b)^2) / norm_const\n\n    .. note::\n\n        Current implementation assume image / alpha / trimap array in numpy\n        format and with pixel value ranging from 0 to 255.\n\n    .. note::\n\n        pred_alpha should be masked by trimap before passing\n        into this metric\n\n    Default prefix: ''\n\n    Args:\n        norm_const (int): Divide the result to reduce its magnitude.\n            Default to 1000.\n\n    Metrics:\n        - MattingMSE (float): Mean of Squared Error\n    \"\"\"\n\n    default_prefix = ''\n    metric = 'MattingMSE'\n\n    def __init__(\n        self,\n        norm_const=1000,\n        **kwargs,\n    ) -> None:\n        self.norm_const = norm_const\n        super().__init__(**kwargs)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader):\n        self.size = len(dataloader.dataset)\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n    def process(self, data_batch: Sequence[dict],\n                data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data and predictions.\n\n        Args:\n            data_batch (Sequence[dict]): A batch of data\n                from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from\n                the model.\n        \"\"\"\n        for data_sample in data_samples:\n            pred_alpha, gt_alpha, trimap = _fetch_data_and_check(data_sample)\n\n            weight_sum = (trimap == 128).sum()\n            if weight_sum != 0:\n                mse_result = ((pred_alpha - gt_alpha)**2).sum() / weight_sum\n            else:\n                mse_result = 0\n\n            self.results.append({'mse': mse_result})\n\n    def compute_metrics(self, results: List):\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (dict): The processed results of each batch.\n\n        Returns:\n            Dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n        mse = average(results, 'mse')\n\n        return {'MattingMSE': mse}\n"
  },
  {
    "path": "mmagic/evaluation/metrics/metrics_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmcv\nimport numpy as np\nimport torch\n\nfrom mmagic.utils import reorder_image\n\n\ndef _assert_ndim(input, name, ndim, shape_hint):\n    if input.ndim != ndim:\n        raise ValueError(\n            f'{name} should be of shape {shape_hint}, but got {input.shape}.')\n\n\ndef _assert_masked(pred_alpha, trimap):\n    if (pred_alpha[trimap == 0] != 0).any() or (pred_alpha[trimap == 255] !=\n                                                255).any():\n        raise ValueError(\n            'pred_alpha should be masked by trimap before evaluation')\n\n\ndef _fetch_data_and_check(data_samples):\n    \"\"\"Fetch and check data from one item of data_batch and predictions.\n\n    Args:\n        data_batch (dict): One item of data_batch.\n        predictions (dict): One item of predictions.\n\n    Returns:\n        pred_alpha (Tensor): Pred_alpha data of predictions.\n        ori_alpha (Tensor): Ori_alpha data of data_batch.\n        ori_trimap (Tensor): Ori_trimap data of data_batch.\n    \"\"\"\n    ori_trimap = data_samples['ori_trimap'][0, :, :].cpu().numpy()\n    ori_alpha = data_samples['ori_alpha'][0, :, :].cpu().numpy()\n    pred_alpha = data_samples['output']['pred_alpha']  # 2D tensor\n    pred_alpha = pred_alpha.cpu().numpy()\n\n    _assert_ndim(ori_trimap, 'trimap', 2, 'HxW')\n    _assert_ndim(ori_alpha, 'gt_alpha', 2, 'HxW')\n    _assert_ndim(pred_alpha, 'pred_alpha', 2, 'HxW')\n    _assert_masked(pred_alpha, ori_trimap)\n\n    # dtype uint8 -> float64\n    pred_alpha = pred_alpha / 255.0\n    ori_alpha = ori_alpha / 255.0\n    # test shows that using float32 vs float64 differs final results at 1e-4\n    # speed are comparable, so we choose float64 for accuracy\n\n    return pred_alpha, ori_alpha, ori_trimap\n\n\ndef average(results, key):\n    \"\"\"Average of key in results(list[dict]).\n\n    Args:\n        results (list[dict]): A list of dict containing the necessary data.\n        key (str): The key of target data.\n\n    Returns:\n        result: The average result.\n    \"\"\"\n\n    total = 0\n    n = 0\n    for batch_result in results:\n        batch_size = batch_result.get('batch_size', 1)\n        total += batch_result[key] * batch_size\n        n += batch_size\n\n    return total / n\n\n\ndef img_transform(img,\n                  crop_border=0,\n                  input_order='HWC',\n                  convert_to=None,\n                  channel_order='rgb'):\n    \"\"\"Image transform.\n\n    Ref: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\n\n    Args:\n        img (np.ndarray): Images with range [0, 255].\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n        channel_order (str): The channel order of image. Default: 'rgb'\n\n    Returns:\n        float: PSNR result.\n    \"\"\"\n\n    if input_order not in ['HWC', 'CHW']:\n        raise ValueError(\n            f'Wrong input_order {input_order}. Supported input_orders are '\n            '\"HWC\" and \"CHW\"')\n\n    img = reorder_image(img, input_order=input_order)\n    if isinstance(img, torch.Tensor):\n        img = img.numpy()\n    img = img.astype(np.float32)\n\n    if isinstance(convert_to, str) and convert_to.lower() == 'y':\n        if channel_order.upper() == 'RGB':\n            img = mmcv.rgb2ycbcr(img / 255., y_only=True) * 255.\n        elif channel_order.upper() == 'BGR':\n            img = mmcv.bgr2ycbcr(img / 255., y_only=True) * 255.\n        else:\n            raise ValueError(\n                'Only support `rgb2y` and `bgr2`, but the channel_order '\n                f'is {channel_order}')\n        img = np.expand_dims(img, axis=2)\n    elif convert_to is not None:\n        raise ValueError('Wrong color model. Supported values are '\n                         '\"Y\" and None.')\n\n    if crop_border != 0:\n        img = img[crop_border:-crop_border, crop_border:-crop_border, ...]\n\n    return img\n\n\ndef obtain_data(data_sample, key, device='cpu'):\n    \"\"\"Obtain data of key from data_sample and converse data to device.\n    Args:\n        data_sample (dict): A dict of data sample.\n        key (str): The key of data to obtain.\n        device (str): Which device the data will deploy. Default: 'cpu'.\n\n    Returns:\n        result (Tensor | np.ndarray): The data of key.\n    \"\"\"\n    candidates = ['data_samples', key, 'data']\n\n    for k in candidates:\n        if k in data_sample:\n            result = data_sample[k]\n            if isinstance(result, dict):\n                return obtain_data(result, key, device)\n            else:\n                if isinstance(result, torch.Tensor):\n                    result = result.to(device)\n                return result\n\n    raise KeyError('Mapping key was not found')\n"
  },
  {
    "path": "mmagic/evaluation/metrics/ms_ssim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport warnings\nfrom typing import List, Optional, Sequence\n\nimport numpy as np\nimport torch\nfrom mmengine.dist import all_gather, get_world_size, is_main_process\nfrom scipy import signal\n\nfrom mmagic.registry import METRICS\nfrom .base_gen_metric import GenerativeMetric\n\n\ndef _f_special_gauss(size, sigma):\n    r\"\"\"Return a circular symmetric gaussian kernel.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py  # noqa\n\n    Args:\n        size (int): Size of Gaussian kernel.\n        sigma (float): Standard deviation for Gaussian blur kernel.\n\n    Returns:\n        ndarray: Gaussian kernel.\n    \"\"\"\n    radius = size // 2\n    offset = 0.0\n    start, stop = -radius, radius + 1\n    if size % 2 == 0:\n        offset = 0.5\n        stop -= 1\n    x, y = np.mgrid[offset + start:stop, offset + start:stop]\n    assert len(x) == size\n    g = np.exp(-((x**2 + y**2) / (2.0 * sigma**2)))\n    return g / g.sum()\n\n\ndef _hox_downsample(img):\n    r\"\"\"Downsample images with factor equal to 0.5.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py  # noqa\n\n    Args:\n        img (ndarray): Images with order \"NHWC\".\n\n    Returns:\n        ndarray: Downsampled images with order \"NHWC\".\n    \"\"\"\n    return (img[:, 0::2, 0::2, :] + img[:, 1::2, 0::2, :] +\n            img[:, 0::2, 1::2, :] + img[:, 1::2, 1::2, :]) * 0.25\n\n\ndef _ssim_for_multi_scale(img1,\n                          img2,\n                          max_val=255,\n                          filter_size=11,\n                          filter_sigma=1.5,\n                          k1=0.01,\n                          k2=0.03):\n    \"\"\"Calculate SSIM (structural similarity) and contrast sensitivity.\n\n    Ref:\n    Image quality assessment: From error visibility to structural similarity.\n\n    The results are the same as that of the official released MATLAB code in\n    https://ece.uwaterloo.ca/~z70wang/research/ssim/.\n\n    For three-channel images, SSIM is calculated for each channel and then\n    averaged.\n\n    This function attempts to match the functionality of ssim_index_new.m by\n    Zhou Wang: http://www.cns.nyu.edu/~lcv/ssim/msssim.zip\n\n    Args:\n        img1 (ndarray): Images with range [0, 255] and order \"NHWC\".\n        img2 (ndarray): Images with range [0, 255] and order \"NHWC\".\n        max_val (int): the dynamic range of the images (i.e., the difference\n            between the maximum the and minimum allowed values).\n            Default to 255.\n        filter_size (int): Size of blur kernel to use (will be reduced for\n            small images). Default to 11.\n        filter_sigma (float): Standard deviation for Gaussian blur kernel (will\n            be reduced for small images). Default to 1.5.\n        k1 (float): Constant used to maintain stability in the SSIM calculation\n            (0.01 in the original paper). Default to 0.01.\n        k2 (float): Constant used to maintain stability in the SSIM calculation\n            (0.03 in the original paper). Default to 0.03.\n\n    Returns:\n        tuple: Pair containing the mean SSIM and contrast sensitivity between\n        `img1` and `img2`.\n    \"\"\"\n    if img1.shape != img2.shape:\n        raise RuntimeError(\n            'Input images must have the same shape (%s vs. %s).' %\n            (img1.shape, img2.shape))\n    if img1.ndim != 4:\n        raise RuntimeError('Input images must have four dimensions, not %d' %\n                           img1.ndim)\n\n    img1 = img1.astype(np.float32)\n    img2 = img2.astype(np.float32)\n    _, height, width, _ = img1.shape\n\n    # Filter size can't be larger than height or width of images.\n    size = min(filter_size, height, width)\n\n    # Scale down sigma if a smaller filter size is used.\n    sigma = size * filter_sigma / filter_size if filter_size else 0\n\n    if filter_size:\n        window = np.reshape(_f_special_gauss(size, sigma), (1, size, size, 1))\n        mu1 = signal.fftconvolve(img1, window, mode='valid')\n        mu2 = signal.fftconvolve(img2, window, mode='valid')\n        sigma11 = signal.fftconvolve(img1 * img1, window, mode='valid')\n        sigma22 = signal.fftconvolve(img2 * img2, window, mode='valid')\n        sigma12 = signal.fftconvolve(img1 * img2, window, mode='valid')\n    else:\n        # Empty blur kernel so no need to convolve.\n        mu1, mu2 = img1, img2\n        sigma11 = img1 * img1\n        sigma22 = img2 * img2\n        sigma12 = img1 * img2\n\n    mu11 = mu1 * mu1\n    mu22 = mu2 * mu2\n    mu12 = mu1 * mu2\n    sigma11 -= mu11\n    sigma22 -= mu22\n    sigma12 -= mu12\n\n    # Calculate intermediate values used by both ssim and cs_map.\n    c1 = (k1 * max_val)**2\n    c2 = (k2 * max_val)**2\n    v1 = 2.0 * sigma12 + c2\n    v2 = sigma11 + sigma22 + c2\n    ssim = np.mean((((2.0 * mu12 + c1) * v1) / ((mu11 + mu22 + c1) * v2)),\n                   axis=(1, 2, 3))  # Return for each image individually.\n    cs = np.mean(v1 / v2, axis=(1, 2, 3))\n    return ssim, cs\n\n\ndef ms_ssim(img1,\n            img2,\n            max_val=255,\n            filter_size=11,\n            filter_sigma=1.5,\n            k1=0.01,\n            k2=0.03,\n            weights=None,\n            reduce_mean=True) -> np.ndarray:\n    \"\"\"Calculate MS-SSIM (multi-scale structural similarity).\n\n    Ref:\n    This function implements Multi-Scale Structural Similarity (MS-SSIM) Image\n    Quality Assessment according to Zhou Wang's paper, \"Multi-scale structural\n    similarity for image quality assessment\" (2003).\n    Link: https://ece.uwaterloo.ca/~z70wang/publications/msssim.pdf\n\n    Author's MATLAB implementation:\n    http://www.cns.nyu.edu/~lcv/ssim/msssim.zip\n\n    PGGAN's implementation:\n    https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py\n\n    Args:\n        img1 (ndarray): Images with range [0, 255] and order \"NHWC\".\n        img2 (ndarray): Images with range [0, 255] and order \"NHWC\".\n        max_val (int): the dynamic range of the images (i.e., the difference\n            between the maximum the and minimum allowed values).\n            Default to 255.\n        filter_size (int): Size of blur kernel to use (will be reduced for\n            small images). Default to 11.\n        filter_sigma (float): Standard deviation for Gaussian blur kernel (will\n            be reduced for small images). Default to 1.5.\n        k1 (float): Constant used to maintain stability in the SSIM calculation\n            (0.01 in the original paper). Default to 0.01.\n        k2 (float): Constant used to maintain stability in the SSIM calculation\n            (0.03 in the original paper). Default to 0.03.\n        weights (list): List of weights for each level; if none, use five\n            levels and the weights from the original paper. Default to None.\n\n    Returns:\n        np.ndarray: MS-SSIM score between `img1` and `img2`.\n    \"\"\"\n    if img1.shape != img2.shape:\n        raise RuntimeError(\n            'Input images must have the same shape (%s vs. %s).' %\n            (img1.shape, img2.shape))\n    if img1.ndim != 4:\n        raise RuntimeError('Input images must have four dimensions, not %d' %\n                           img1.ndim)\n\n    # Note: default weights don't sum to 1.0 but do match the paper / matlab\n    # code.\n    weights = np.array(\n        weights if weights else [0.0448, 0.2856, 0.3001, 0.2363, 0.1333])\n    levels = weights.size\n    im1, im2 = [x.astype(np.float32) for x in [img1, img2]]\n    mssim = []\n    mcs = []\n    for _ in range(levels):\n        ssim, cs = _ssim_for_multi_scale(\n            im1,\n            im2,\n            max_val=max_val,\n            filter_size=filter_size,\n            filter_sigma=filter_sigma,\n            k1=k1,\n            k2=k2)\n        mssim.append(ssim)\n        mcs.append(cs)\n        im1, im2 = [_hox_downsample(x) for x in [im1, im2]]\n\n    # Clip to zero. Otherwise we get NaNs.\n    mssim = np.clip(np.asarray(mssim), 0.0, np.inf)\n    mcs = np.clip(np.asarray(mcs), 0.0, np.inf)\n\n    results = np.prod(mcs[:-1, :]**weights[:-1, np.newaxis], axis=0) * \\\n        (mssim[-1, :]**weights[-1])\n    if reduce_mean:\n        # Average over images only at the end.\n        results = np.mean(results)\n    return results\n\n\n@METRICS.register_module('MS_SSIM')\n@METRICS.register_module()\nclass MultiScaleStructureSimilarity(GenerativeMetric):\n    \"\"\"MS-SSIM (Multi-Scale Structure Similarity) metric.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py # noqa\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        real_key (Optional[str]): Key for get real images from the input dict.\n            Defaults to 'img'.\n        need_cond_input (bool): If true, the sampler will return the\n            conditional input randomly sampled from the original dataset.\n            This require the dataset implement `get_data_info` and field\n            `gt_label` must be contained in the return value of\n            `get_data_info`. Noted that, for unconditional models, set\n            `need_cond_input` as True may influence the result of evaluation\n            results since the conditional inputs are sampled from the dataset\n            distribution; otherwise will be sampled from the uniform\n            distribution. Defaults to False.\n\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'ema'.\n        collect_device (str, optional): Device name used for collecting results\n            from different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n    name = 'MS-SSIM'\n\n    def __init__(self,\n                 fake_nums: int,\n                 fake_key: Optional[str] = None,\n                 need_cond_input: bool = False,\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None) -> None:\n        super().__init__(fake_nums, 0, fake_key, None, need_cond_input,\n                         sample_model, collect_device, prefix)\n\n        assert fake_nums % 2 == 0\n        self.num_pairs = fake_nums // 2\n\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Feed data to the metric.\n\n        Args:\n            data_batch (dict): Real images from dataloader. Do not be used\n                in this metric.\n            data_samples (Sequence[dict]): Generated images.\n        \"\"\"\n        if len(self.fake_results) >= (self.fake_nums_per_device // 2):\n            return\n\n        fake_imgs = []\n        for pred in data_samples:\n            fake_img_ = pred\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n        minibatch = torch.stack(fake_imgs, dim=0)\n\n        assert minibatch.shape[0] % 2 == 0, 'batch size must be divided by 2.'\n\n        half1 = minibatch[0::2].cpu().data.numpy().transpose((0, 2, 3, 1))\n        half2 = minibatch[1::2].cpu().data.numpy().transpose((0, 2, 3, 1))\n\n        scores = ms_ssim(half1, half2, reduce_mean=False)\n        self.fake_results += [torch.Tensor([s]) for s in scores.tolist()]\n\n    def _collect_target_results(self, target: str) -> Optional[list]:\n        \"\"\"Collected results for MS-SSIM metric. Size of `self.fake_results` in\n        MS-SSIM does not relay on `self.fake_nums` but `self.num_pairs`.\n\n        Args:\n            target (str): Target results to collect.\n\n        Returns:\n            Optional[list]: The collected results.\n        \"\"\"\n        assert target in 'fake', 'Only support to collect \\'fake\\' results.'\n        results = getattr(self, f'{target}_results')\n        size = self.num_pairs\n        size = len(results) * get_world_size() if size == -1 else size\n\n        if len(results) == 0:\n            warnings.warn(\n                f'{self.__class__.__name__} got empty `self.{target}_results`.'\n                ' Please ensure that the processed results are properly added '\n                f'into `self.{target}_results` in `process` method.')\n\n        # apply all_gather for tensor results\n        results = torch.cat(results, dim=0)\n        results = torch.cat(all_gather(results), dim=0)[:size]\n        results = torch.split(results, 1)\n\n        # on non-main process, results should be `None`\n        if is_main_process() and len(results) != size:\n            raise ValueError(f'Length of results is \\'{len(results)}\\', not '\n                             f'equals to target size \\'{size}\\'.')\n        return results\n\n    def compute_metrics(self, results_fake: List):\n        \"\"\"Computed the result of MS-SSIM.\n\n        Returns:\n            dict: Calculated MS-SSIM result.\n        \"\"\"\n        results = torch.cat(results_fake, dim=0)\n        avg = results.sum() / self.num_pairs\n        return {'avg': round(avg.item(), 4)}\n"
  },
  {
    "path": "mmagic/evaluation/metrics/mse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Evaluation metrics based on pixels.\"\"\"\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\n\n\n@METRICS.register_module()\nclass MSE(BaseSampleWiseMetric):\n    \"\"\"Mean Squared Error metric for image.\n\n    mean((a-b)^2)\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        mask_key (str, optional): Key of mask, if mask_key is None, calculate\n            all regions. Default: None\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n\n    Metrics:\n        - MSE (float): Mean of Squared Error\n    \"\"\"\n\n    metric = 'MSE'\n\n    def process_image(self, gt, pred, mask):\n        \"\"\"Process an image.\n\n        Args:\n            gt (Torch | np.ndarray): GT image.\n            pred (Torch | np.ndarray): Pred image.\n            mask (Torch | np.ndarray): Mask of evaluation.\n        Returns:\n            result (np.ndarray): MSE result.\n        \"\"\"\n\n        gt = gt / 255.\n        pred = pred / 255.\n\n        diff = gt - pred\n        diff *= diff\n\n        if self.mask_key is not None:\n            diff *= mask\n            result = diff.sum() / mask.sum()\n        else:\n            result = diff.mean()\n\n        return result\n"
  },
  {
    "path": "mmagic/evaluation/metrics/niqe.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nimport os\nfrom typing import Optional\n\nimport cv2\nimport mmcv\nimport numpy as np\nfrom scipy.ndimage import convolve\nfrom scipy.special import gamma\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\nfrom mmagic.registry import METRICS\nfrom mmagic.utils import reorder_image, to_numpy\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\n\n\n@METRICS.register_module()\nclass NIQE(BaseSampleWiseMetric):\n    \"\"\"Calculate NIQE (Natural Image Quality Evaluator) metric.\n\n    Ref: Making a \"Completely Blind\" Image Quality Analyzer.\n    This implementation could produce almost the same results as the official\n    MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip\n\n    We use the official params estimated from the pristine dataset.\n    We use the recommended block size (96, 96) without overlaps.\n\n    Args:\n\n        key (str): Key of image. Default: 'pred_img'\n        is_predicted (bool): If the image is predicted, it will be picked from\n            predictions; otherwise, it will be picked from data_batch.\n            Default: True\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: 'gray'.\n\n    Metrics:\n        - NIQE (float): Natural Image Quality Evaluator\n    \"\"\"\n\n    metric = 'NIQE'\n\n    def __init__(self,\n                 key: str = 'pred_img',\n                 is_predicted: bool = True,\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 crop_border=0,\n                 input_order='HWC',\n                 convert_to='gray') -> None:\n        super().__init__(collect_device=collect_device, prefix=prefix)\n\n        convert_to = convert_to.lower()\n        assert convert_to in [\n            'y', 'gray'\n        ], ('Only support gray image, '\n            \"``convert_to`` should be selected from ['y', 'gray']\")\n\n        self.key = key\n        self.is_predicted = is_predicted\n        self.crop_border = crop_border\n        self.input_order = input_order\n        self.convert_to = convert_to\n\n    def process_image(self, gt, pred, mask) -> None:\n        \"\"\"Process an image.\n\n        Args:\n            gt (np.ndarray): GT image.\n            pred (np.ndarray): Pred image.\n            mask (np.ndarray): Mask of evaluation.\n        Returns:\n            result (np.ndarray): NIQE result.\n        \"\"\"\n\n        result = niqe(\n            img=pred,\n            crop_border=self.crop_border,\n            input_order=self.input_order,\n            convert_to=self.convert_to)\n        return result\n\n\ndef estimate_aggd_param(block):\n    \"\"\"Estimate AGGD (Asymmetric Generalized Gaussian Distribution) parameters.\n\n    Args:\n        block (np.ndarray): 2D Image block.\n\n    Returns:\n        tuple: alpha (float), beta_l (float) and beta_r (float) for the AGGD\n            distribution (Estimating the parames in Equation 7 in the paper).\n    \"\"\"\n    block = block.flatten()\n    gam = np.arange(0.2, 10.001, 0.001)  # len = 9801\n    gam_reciprocal = np.reciprocal(gam)\n    r_gam = np.square(gamma(gam_reciprocal * 2)) / (\n        gamma(gam_reciprocal) * gamma(gam_reciprocal * 3))\n\n    left_std = np.sqrt(np.mean(block[block < 0]**2))\n    right_std = np.sqrt(np.mean(block[block > 0]**2))\n    gammahat = left_std / right_std\n    rhat = (np.mean(np.abs(block)))**2 / np.mean(block**2)\n    rhatnorm = (rhat * (gammahat**3 + 1) *\n                (gammahat + 1)) / ((gammahat**2 + 1)**2)\n    array_position = np.argmin((r_gam - rhatnorm)**2)\n\n    alpha = gam[array_position]\n    beta_l = left_std * np.sqrt(gamma(1 / alpha) / gamma(3 / alpha))\n    beta_r = right_std * np.sqrt(gamma(1 / alpha) / gamma(3 / alpha))\n    return (alpha, beta_l, beta_r)\n\n\ndef compute_feature(block):\n    \"\"\"Compute features.\n\n    Args:\n        block (np.ndarray): 2D Image block.\n\n    Returns:\n        feat (List): Features with length of 18.\n    \"\"\"\n    feat = []\n    alpha, beta_l, beta_r = estimate_aggd_param(block)\n    feat.extend([alpha, (beta_l + beta_r) / 2])\n\n    # distortions disturb the fairly regular structure of natural images.\n    # This deviation can be captured by analyzing the sample distribution of\n    # the products of pairs of adjacent coefficients computed along\n    # horizontal, vertical and diagonal orientations.\n    shifts = [[0, 1], [1, 0], [1, 1], [1, -1]]\n    for shift in shifts:\n        shifted_block = np.roll(block, shift, axis=(0, 1))\n        alpha, beta_l, beta_r = estimate_aggd_param(block * shifted_block)\n        mean = (beta_r - beta_l) * (gamma(2 / alpha) / gamma(1 / alpha))\n        feat.extend([alpha, mean, beta_l, beta_r])\n    return feat\n\n\ndef niqe_core(img,\n              mu_pris_param,\n              cov_pris_param,\n              gaussian_window,\n              block_size_h=96,\n              block_size_w=96):\n    \"\"\"Calculate NIQE (Natural Image Quality Evaluator) metric.\n\n    Ref: Making a \"Completely Blind\" Image Quality Analyzer.\n    This implementation could produce almost the same results as the official\n    MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip\n\n    Note that we do not include block overlap height and width, since they are\n    always 0 in the official implementation.\n\n    For good performance, it is advisable by the official implementation to\n    divide the distorted image in to the same size patched as used for the\n    construction of multivariate Gaussian model.\n\n    Args:\n        img (np.ndarray): Input image whose quality needs to be computed. The\n            image must be a gray or Y (of YCbCr) image with shape (h, w).\n            Range [0, 255] with float type.\n        mu_pris_param (np.ndarray): Mean of a pre-defined multivariate Gaussian\n            model calculated on the pristine dataset.\n        cov_pris_param (np.ndarray): Covariance of a pre-defined multivariate\n            Gaussian model calculated on the pristine dataset.\n        gaussian_window (ndarray): A 7x7 Gaussian window used for smoothing the\n            image.\n        block_size_h (int): Height of the blocks in to which image is divided.\n            Default: 96 (the official recommended value). Default: 96.\n        block_size_w (int): Width of the blocks in to which image is divided.\n            Default: 96 (the official recommended value). Default: 96.\n\n    Returns:\n        np.ndarray: NIQE quality.\n    \"\"\"\n    # crop image\n    h, w = img.shape\n    num_block_h = math.floor(h / block_size_h)\n    num_block_w = math.floor(w / block_size_w)\n    img = img[0:num_block_h * block_size_h, 0:num_block_w * block_size_w]\n\n    distparam = []  # dist param is actually the multiscale features\n    for scale in (1, 2):  # perform on two scales (1, 2)\n        mu = convolve(img, gaussian_window, mode='nearest')\n\n        sigma = np.sqrt(\n            np.abs(\n                convolve(np.square(img), gaussian_window, mode='nearest') -\n                np.square(mu)))\n        # normalize, as in Eq. 1 in the paper\n        img_nomalized = (img - mu) / (sigma + 1)\n\n        feat = []\n        for idx_w in range(num_block_w):\n            for idx_h in range(num_block_h):\n                # process each block\n                block = img_nomalized[idx_h * block_size_h //\n                                      scale:(idx_h + 1) * block_size_h //\n                                      scale, idx_w * block_size_w //\n                                      scale:(idx_w + 1) * block_size_w //\n                                      scale]\n                feat.append(compute_feature(block))\n\n        distparam.append(np.array(feat))\n\n        # matlab-like bicubic downsample with anti-aliasing\n        if scale == 1:\n            resize = MATLABLikeResize(keys=None, scale=0.5)\n            img = resize._resize(img[:, :, np.newaxis] / 255.)[:, :, 0] * 255.\n\n    distparam = np.concatenate(distparam, axis=1)\n\n    # fit a MVG (multivariate Gaussian) model to distorted patch features\n    mu_distparam = np.nanmean(distparam, axis=0)\n    distparam_no_nan = distparam[~np.isnan(distparam).any(axis=1)]\n    cov_distparam = np.cov(distparam_no_nan, rowvar=False)\n\n    # compute niqe quality, Eq. 10 in the paper\n    invcov_param = np.linalg.pinv((cov_pris_param + cov_distparam) / 2)\n    quality = np.matmul(\n        np.matmul((mu_pris_param - mu_distparam), invcov_param),\n        np.transpose((mu_pris_param - mu_distparam)))\n\n    return np.squeeze(np.sqrt(quality))\n\n\ndef niqe(img, crop_border, input_order='HWC', convert_to='y'):\n    \"\"\"Calculate NIQE (Natural Image Quality Evaluator) metric.\n\n    Ref: Making a \"Completely Blind\" Image Quality Analyzer.\n    This implementation could produce almost the same results as the official\n    MATLAB codes: http://live.ece.utexas.edu/research/quality/niqe_release.zip\n\n    We use the official params estimated from the pristine dataset.\n    We use the recommended block size (96, 96) without overlaps.\n\n    Args:\n        img (np.ndarray): Input image whose quality needs to be computed.\n            The input image must be in range [0, 255] with float/int type.\n            The input_order of image can be 'HW' or 'HWC' or 'CHW'. (BGR order)\n            If the input order is 'HWC' or 'CHW', it will be converted to gray\n            or Y (of YCbCr) image according to the ``convert_to`` argument.\n        crop_border (int): Cropped pixels in each edge of an image. These\n            pixels are not involved in the metric calculation.\n        input_order (str): Whether the input order is 'HW', 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether converted to 'y' (of MATLAB YCbCr) or 'gray'.\n            Default: 'y'.\n\n    Returns:\n        niqe_result (float): NIQE result.\n    \"\"\"\n\n    # we use the official params estimated from the pristine dataset.\n    niqe_pris_params = np.load(\n        os.path.join(os.path.dirname(__file__), 'niqe_pris_params.npz'))\n    mu_pris_param = niqe_pris_params['mu_pris_param']\n    cov_pris_param = niqe_pris_params['cov_pris_param']\n    gaussian_window = niqe_pris_params['gaussian_window']\n\n    img = to_numpy(img, np.float32)\n\n    if input_order != 'HW':\n        img = reorder_image(img, input_order=input_order)\n        if convert_to == 'y':\n            img = mmcv.bgr2ycbcr(img / 255., y_only=True) * 255.\n        elif convert_to == 'gray':\n            img = mmcv.bgr2gray(img / 255., cv2.COLOR_BGR2GRAY) * 255.\n        img = np.squeeze(img)\n\n    if crop_border != 0:\n        img = img[crop_border:-crop_border, crop_border:-crop_border]\n\n    # round to follow official implementation\n    img = img.round()\n\n    niqe_result = niqe_core(img, mu_pris_param, cov_pris_param,\n                            gaussian_window)\n\n    return niqe_result\n"
  },
  {
    "path": "mmagic/evaluation/metrics/ppl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Sequence\n\nimport lpips\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.models.utils import get_module_device, normalize_vecs\nfrom mmagic.registry import METRICS\nfrom .base_gen_metric import GenerativeMetric\n\n\ndef slerp(a, b, percent):\n    \"\"\"Spherical linear interpolation between two unnormalized vectors.\n\n    Args:\n        a (Tensor): Tensor with shape [N, C].\n        b (Tensor): Tensor with shape [N, C].\n        percent (float|Tensor): A float or tensor with shape broadcastable to\n            the shape of input Tensors.\n\n    Returns:\n        Tensor: Spherical linear interpolation result with shape [N, C].\n    \"\"\"\n    a = normalize_vecs(a)\n    b = normalize_vecs(b)\n    d = (a * b).sum(-1, keepdim=True)\n    p = percent * torch.acos(d)\n    c = normalize_vecs(b - d * a)\n    d = a * torch.cos(p) + c * torch.sin(p)\n\n    return normalize_vecs(d)\n\n\n@METRICS.register_module('PPL')\n@METRICS.register_module()\nclass PerceptualPathLength(GenerativeMetric):\n    r\"\"\"Perceptual path length.\n\n        Measure the difference between consecutive images (their VGG16\n        embeddings) when interpolating between two random inputs. Drastic\n        changes mean that multiple features have changed together and that\n        they might be entangled.\n\n        Ref: https://github.com/rosinality/stylegan2-pytorch/blob/master/ppl.py # noqa\n\n        Args:\n            num_images (int): The number of evaluated generated samples.\n            image_shape (tuple, optional): Image shape in order \"CHW\". Defaults\n                to None.\n            crop (bool, optional): Whether crop images. Defaults to True.\n            epsilon (float, optional): Epsilon parameter for path sampling.\n                Defaults to 1e-4.\n            space (str, optional): Latent space. Defaults to 'W'.\n            sampling (str, optional): Sampling mode, whether sampling in full\n                path or endpoints. Defaults to 'end'.\n            latent_dim (int, optional): Latent dimension of input noise.\n                Defaults to 512.\n            need_cond_input (bool): If true, the sampler will return the\n                conditional input randomly sampled from the original dataset.\n                This require the dataset implement `get_data_info` and field\n                `gt_label` must be contained in the return value of\n                `get_data_info`. Noted that, for unconditional models, set\n                `need_cond_input` as True may influence the result of evaluation\n                results since the conditional inputs are sampled from the dataset\n                distribution; otherwise will be sampled from the uniform\n                distribution. Defaults to False.\n    \"\"\"\n    SAMPLER_MODE = 'path'\n\n    def __init__(self,\n                 fake_nums: int,\n                 real_nums: int = 0,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 need_cond_input: bool = False,\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 crop=True,\n                 epsilon=1e-4,\n                 space='W',\n                 sampling='end',\n                 latent_dim=512):\n        super().__init__(fake_nums, real_nums, fake_key, real_key,\n                         need_cond_input, sample_model, collect_device, prefix)\n        self.crop = crop\n\n        self.epsilon = epsilon\n        self.space = space\n        self.sampling = sampling\n        self.latent_dim = latent_dim\n\n    @torch.no_grad()\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results``, which will be used\n        to compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        fake_imgs = []\n        for pred in data_samples:\n            fake_img_ = pred\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n        fake_imgs = torch.stack(fake_imgs, dim=0)\n        fake_imgs = (fake_imgs - 127.5) / 127.5  # [0, 255] to [-1, 1]\n        feat = self._compute_distance(fake_imgs)\n        feat_list = list(torch.split(feat, 1))\n        self.fake_results += feat_list\n\n    @torch.no_grad()\n    def _compute_distance(self, images):\n        \"\"\"Feed data to the metric.\n\n        Args:\n            images (Tensor): Input tensor.\n        \"\"\"\n        # use minibatch's device type to initialize a lpips calculator\n        if not hasattr(self, 'percept'):\n            self.percept = lpips.LPIPS(net='vgg').to(images.device)\n        # crop and resize images\n        if self.crop:\n            c = images.shape[2] // 8\n            minibatch = images[:, :, c * 3:c * 7, c * 2:c * 6]\n\n        factor = minibatch.shape[2] // 256\n        if factor > 1:\n            minibatch = F.interpolate(\n                minibatch,\n                size=(256, 256),\n                mode='bilinear',\n                align_corners=False)\n        # calculator and store lpips score\n        distance = self.percept(minibatch[::2], minibatch[1::2]).view(\n            minibatch.shape[0] // 2) / (\n                self.epsilon**2)\n        return distance.to('cpu')\n\n    @torch.no_grad()\n    def compute_metrics(self, fake_results: list) -> dict:\n        \"\"\"Summarize the results.\n\n        Returns:\n            dict | list: Summarized results.\n        \"\"\"\n        distances = torch.cat(self.fake_results, dim=0).numpy()\n        lo = np.percentile(distances, 1, interpolation='lower')\n        hi = np.percentile(distances, 99, interpolation='higher')\n        filtered_dist = np.extract(\n            np.logical_and(lo <= distances, distances <= hi), distances)\n        ppl_score = float(filtered_dist.mean())\n        return {'ppl_score': ppl_score}\n\n    def get_metric_sampler(self, model: nn.Module, dataloader: DataLoader,\n                           metrics: list):\n        \"\"\"Get sampler for generative metrics. Returns a dummy iterator, whose\n        return value of each iteration is a dict containing batch size and\n        sample mode to generate images.\n\n        Args:\n            model (nn.Module): Model to evaluate.\n            dataloader (DataLoader): Dataloader for real images. Used to get\n                batch size during generate fake images.\n            metrics (list): Metrics with the same sampler mode.\n\n        Returns:\n            :class:`dummy_iterator`: Sampler for generative metrics.\n        \"\"\"\n\n        batch_size = dataloader.batch_size\n\n        sample_model = metrics[0].sample_model\n        assert all([metric.sample_model == sample_model for metric in metrics\n                    ]), ('\\'sample_model\\' between metrics is inconsistency.')\n\n        class PPLSampler:\n            \"\"\"StyleGAN series generator's sampling iterator for PPL metric.\n\n            Args:\n                generator (nn.Module): StyleGAN series' generator.\n                num_images (int): The number of evaluated generated samples.\n                batch_size (int): Batch size of generated images.\n                space (str, optional): Latent space. Defaults to 'W'.\n                sampling (str, optional): Sampling mode, whether sampling in\n                    full path or endpoints. Defaults to 'end'.\n                epsilon (float, optional): Epsilon parameter for path sampling.\n                    Defaults to 1e-4.\n                latent_dim (int, optional): Latent dimension of input noise.\n                    Defaults to 512.\n            \"\"\"\n\n            def __init__(self,\n                         generator,\n                         num_images,\n                         batch_size,\n                         space='W',\n                         sampling='end',\n                         epsilon=1e-4,\n                         latent_dim=512):\n                assert space in ['Z', 'W']\n                assert sampling in ['full', 'end']\n                n_batch = num_images // batch_size\n\n                resid = num_images - (n_batch * batch_size)\n                self.batch_sizes = [batch_size] * n_batch + ([resid] if\n                                                             resid > 0 else [])\n                self.device = get_module_device(generator)\n                self.generator = generator.module if hasattr(\n                    generator, 'module') else generator\n                self.latent_dim = latent_dim\n                self.space = space\n                self.sampling = sampling\n                self.epsilon = epsilon\n\n            def __iter__(self):\n                self.idx = 0\n                return self\n\n            def __len__(self):\n                return len(self.batch_sizes)\n\n            @torch.no_grad()\n            def __next__(self):\n                if self.idx >= len(self.batch_sizes):\n                    raise StopIteration\n                batch = self.batch_sizes[self.idx]\n                injected_noise = self.generator.make_injected_noise()\n                inputs = torch.randn([batch * 2, self.latent_dim],\n                                     device=self.device)\n                if self.sampling == 'full':\n                    lerp_t = torch.rand(batch, device=self.device)\n                else:\n                    lerp_t = torch.zeros(batch, device=self.device)\n\n                if self.space == 'W':\n                    assert hasattr(self.generator, 'style_mapping')\n                    latent = self.generator.style_mapping(inputs)\n                    latent_t0, latent_t1 = latent[::2], latent[1::2]\n                    latent_e0 = torch.lerp(latent_t0, latent_t1, lerp_t[:,\n                                                                        None])\n                    latent_e1 = torch.lerp(latent_t0, latent_t1,\n                                           lerp_t[:, None] + self.epsilon)\n                    latent_e = torch.stack([latent_e0, latent_e1],\n                                           1).view(*latent.shape)\n                else:\n                    latent_t0, latent_t1 = inputs[::2], inputs[1::2]\n                    latent_e0 = slerp(latent_t0, latent_t1, lerp_t[:, None])\n                    latent_e1 = slerp(latent_t0, latent_t1,\n                                      lerp_t[:, None] + self.epsilon)\n                    latent_e = torch.stack([latent_e0, latent_e1],\n                                           1).view(*inputs.shape)\n\n                self.idx += 1\n                return dict(\n                    inputs=dict(\n                        noise=latent_e,\n                        sample_kwargs=dict(\n                            injected_noise=injected_noise,\n                            input_is_latent=(self.space == 'W'))))\n\n        ppl_sampler = PPLSampler(\n            model.generator_ema\n            if self.sample_model == 'ema' else model.generator,\n            num_images=max([metric.fake_nums_per_device\n                            for metric in metrics]),\n            batch_size=batch_size,\n            space=self.space,\n            sampling=self.sampling,\n            epsilon=self.epsilon,\n            latent_dim=self.latent_dim)\n        return ppl_sampler\n"
  },
  {
    "path": "mmagic/evaluation/metrics/precision_and_recall.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom typing import Optional, Sequence, Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom torch.utils.data.dataloader import DataLoader\nfrom torchvision import models as torchvision_models\n\nfrom mmagic.models.utils import get_module_device\nfrom mmagic.registry import METRICS\nfrom ..functional import prepare_vgg_feat\nfrom .base_gen_metric import GenerativeMetric\n\n\ndef compute_pr_distances(row_features,\n                         col_features,\n                         num_gpus=1,\n                         rank=0,\n                         col_batch_size=10000):\n    r\"\"\"Compute distances between real images and fake images.\n\n    This function is used for calculate Precision and Recall metric.\n    Refer to:https://github.com/NVlabs/stylegan2-ada-pytorch/blob/main/metrics/precision_recall.py  # noqa\n    \"\"\"\n    assert 0 <= rank < num_gpus\n    num_cols = col_features.shape[0]\n    num_batches = ((num_cols - 1) // col_batch_size // num_gpus + 1) * num_gpus\n    col_batches = torch.nn.functional.pad(col_features,\n                                          [0, 0, 0, -num_cols % num_batches\n                                           ]).chunk(num_batches)\n    dist_batches = []\n    for col_batch in col_batches[rank::num_gpus]:\n        dist_batch = torch.cdist(\n            row_features.unsqueeze(0), col_batch.unsqueeze(0))[0]\n        for src in range(num_gpus):\n            dist_broadcast = dist_batch.clone()\n            if num_gpus > 1:\n                torch.distributed.broadcast(dist_broadcast, src=src)\n            dist_batches.append(dist_broadcast.cpu() if rank == 0 else None)\n    return torch.cat(dist_batches, dim=1)[:, :num_cols] if rank == 0 else None\n\n\n@METRICS.register_module('PR')\n@METRICS.register_module()\nclass PrecisionAndRecall(GenerativeMetric):\n    r\"\"\"Improved Precision and recall metric.\n\n        In this metric, we draw real and generated samples respectively, and\n        embed them into a high-dimensional feature space using a pre-trained\n        classifier network. We use these features to estimate the corresponding\n        manifold. We obtain the estimation by calculating pairwise Euclidean\n        distances between all feature vectors in the set and, for each feature\n        vector, construct a hypersphere with radius equal to the distance to its\n        kth nearest neighbor. Together, these hyperspheres define a volume in\n        the feature space that serves as an estimate of the true manifold.\n        Precision is quantified by querying for each generated image whether\n        the image is within the estimated manifold of real images.\n        Symmetrically, recall is calculated by querying for each real image\n        whether the image is within estimated manifold of generated image.\n\n        Ref: https://github.com/NVlabs/stylegan2-ada-pytorch/blob/main/metrics/precision_recall.py  # noqa\n\n        Note that we highly recommend that users should download the vgg16\n        script module from the following address. Then, the `vgg16_script` can\n        be set with user's local path. If not given, we will use the vgg16 from\n        pytorch model zoo. However, this may bring significant different in the\n        final results.\n\n        Tero's vgg16: https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada-pytorch/pretrained/metrics/vgg16.pt\n\n        Args:\n            num_images (int): The number of evaluated generated samples.\n            image_shape (tuple): Image shape in order \"CHW\". Defaults to None.\n            num_real_need (int | None, optional): The number of real images.\n                Defaults to None.\n            full_dataset (bool, optional): Whether to use full dataset for\n                evaluation. Defaults to False.\n            k (int, optional): Kth nearest parameter. Defaults to 3.\n            bgr2rgb (bool, optional): Whether to change the order of image\n                channel. Defaults to True.\n            vgg16_script (str, optional): Path for the Tero's vgg16 module.\n                Defaults to 'work_dirs/cache/vgg16.pt'.\n            row_batch_size (int, optional): The batch size of row data.\n                Defaults to 10000.\n            col_batch_size (int, optional): The batch size of col data.\n                Defaults to 10000.\n            auto_save (bool, optional): Whether save vgg feature automatically.\n            need_cond_input (bool): If true, the sampler will return the\n                conditional input randomly sampled from the original dataset.\n                This require the dataset implement `get_data_info` and field\n                `gt_label` must be contained in the return value of\n                `get_data_info`. Noted that, for unconditional models, set\n                `need_cond_input` as True may influence the result of evaluation\n                results since the conditional inputs are sampled from the dataset\n                distribution; otherwise will be sampled from the uniform\n                distribution. Defaults to False.\n        \"\"\"\n    name = 'PR'\n\n    def __init__(self,\n                 fake_nums,\n                 real_nums=-1,\n                 k=3,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 need_cond_input: bool = False,\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 vgg16_script='work_dirs/cache/vgg16.pt',\n                 vgg16_pkl=None,\n                 row_batch_size=10000,\n                 col_batch_size=10000,\n                 auto_save=True):\n        super().__init__(fake_nums, real_nums, fake_key, real_key,\n                         need_cond_input, sample_model, collect_device, prefix)\n        print_log('loading vgg16 for improved precision and recall...',\n                  'current')\n        self.vgg16_pkl = vgg16_pkl\n        self.vgg16, self.use_tero_scirpt = self._load_vgg(vgg16_script)\n        self.k = k\n\n        self.auto_save = auto_save\n        self.row_batch_size = row_batch_size\n        self.col_batch_size = col_batch_size\n\n    def _load_vgg(self, vgg16_script: Optional[str]) -> Tuple[nn.Module, bool]:\n        \"\"\"Load VGG network from the given path.\n\n        Args:\n            vgg16_script: The path of script model of VGG network. If None,\n                will load the pytorch version.\n\n        Returns:\n            Tuple[nn.Module, str]: The actually loaded VGG network and\n                corresponding style.\n        \"\"\"\n        if os.path.isfile(vgg16_script):\n            vgg16 = torch.jit.load('work_dirs/cache/vgg16.pt').eval()\n            use_tero_scirpt = True\n        else:\n            print_log(\n                'Cannot load Tero\\'s script module. Use official '\n                'vgg16 instead', 'current')\n            vgg16 = torchvision_models.vgg16(pretrained=True).eval()\n            use_tero_scirpt = False\n        return vgg16, use_tero_scirpt\n\n    @torch.no_grad()\n    def extract_features(self, images: torch.Tensor) -> torch.Tensor:\n        \"\"\"Extracting image features.\n\n        Args:\n            images (torch.Tensor): Images tensor.\n        Returns:\n            torch.Tensor: Vgg16 features of input images.\n        \"\"\"\n        # image must passed in 'bgr'\n        images = images[:, [2, 1, 0], ...]\n        if self.use_tero_scirpt:\n            images = images.to(torch.uint8)\n            feature = self.vgg16(images, return_features=True)\n        else:\n            images = (images - 127.5) / 127.5\n            batch = F.interpolate(images, size=(224, 224))\n            before_fc = self.vgg16.features(batch)\n            before_fc = before_fc.view(-1, 7 * 7 * 512)\n            feature = self.vgg16.classifier[:4](before_fc)\n\n        return feature\n\n    @torch.no_grad()\n    def compute_metrics(self, results_fake) -> dict:\n        \"\"\"compute_metrics.\n\n        Returns:\n            dict: Summarized results.\n        \"\"\"\n        gen_features = torch.cat(results_fake, dim=0).to(self.collect_device)\n        real_features = self.results_real\n\n        self._result_dict = {}\n\n        for name, manifold, probes in [\n            ('precision', real_features, gen_features),\n            ('recall', gen_features, real_features)\n        ]:\n            kth = []\n            for manifold_batch in manifold.split(self.row_batch_size):\n                distance = compute_pr_distances(\n                    row_features=manifold_batch,\n                    col_features=manifold,\n                    col_batch_size=self.col_batch_size)\n                kth.append(\n                    distance.to(torch.float32).kthvalue(self.k + 1).values.to(\n                        torch.float16))\n            kth = torch.cat(kth)\n            pred = []\n            for probes_batch in probes.split(self.row_batch_size):\n                distance = compute_pr_distances(\n                    row_features=probes_batch,\n                    col_features=manifold,\n                    col_batch_size=self.col_batch_size)\n                pred.append((distance <= kth).any(dim=1))\n            self._result_dict[name] = float(\n                torch.cat(pred).to(torch.float32).mean())\n\n        precision = self._result_dict['precision']\n        recall = self._result_dict['recall']\n        self._result_str = f'precision: {precision}, recall:{recall}'\n        return self._result_dict\n\n    @torch.no_grad()\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results``, which will be used\n        to compute the metrics when all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        fake_imgs = []\n        for pred in data_samples:\n            fake_img_ = pred\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n        fake_imgs = torch.stack(fake_imgs, dim=0)\n        feat = self.extract_features(fake_imgs)\n        feat_list = list(torch.split(feat, 1))\n        self.fake_results += feat_list\n\n    @torch.no_grad()\n    def prepare(self, module: nn.Module, dataloader: DataLoader) -> None:\n        # move to corresponding device\n        device = get_module_device(module)\n        self.vgg16.to(device)\n\n        vgg_feat = prepare_vgg_feat(dataloader, self, module.data_preprocessor,\n                                    self.auto_save)\n        if self.real_nums != -1:\n            assert self.real_nums <= vgg_feat.shape[0], (\n                f'Need \\'{self.real_nums}\\' of real nums, but only '\n                f'\\'{vgg_feat.shape[0]}\\' images be found in the '\n                'inception feature.')\n            vgg_feat = vgg_feat[np.random.choice(\n                vgg_feat.shape[0], size=self.real_nums, replace=True)]\n        self.results_real = vgg_feat\n"
  },
  {
    "path": "mmagic/evaluation/metrics/psnr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport numpy as np\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import img_transform\n\n\n@METRICS.register_module()\nclass PSNR(BaseSampleWiseMetric):\n    \"\"\"Peak Signal-to-Noise Ratio.\n\n    Ref: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'CHW'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n\n    Metrics:\n        - PSNR (float): Peak Signal-to-Noise Ratio\n    \"\"\"\n\n    metric = 'PSNR'\n\n    def __init__(self,\n                 gt_key: str = 'gt_img',\n                 pred_key: str = 'pred_img',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 crop_border=0,\n                 input_order='CHW',\n                 convert_to=None) -> None:\n        super().__init__(\n            gt_key=gt_key,\n            pred_key=pred_key,\n            mask_key=None,\n            collect_device=collect_device,\n            prefix=prefix)\n\n        self.crop_border = crop_border\n        self.input_order = input_order\n        self.convert_to = convert_to\n\n    def process_image(self, gt, pred, mask):\n        \"\"\"Process an image.\n\n        Args:\n            gt (Torch | np.ndarray): GT image.\n            pred (Torch | np.ndarray): Pred image.\n            mask (Torch | np.ndarray): Mask of evaluation.\n        Returns:\n            np.ndarray: PSNR result.\n        \"\"\"\n\n        return psnr(\n            img1=gt,\n            img2=pred,\n            crop_border=self.crop_border,\n            input_order=self.input_order,\n            convert_to=self.convert_to,\n            channel_order=self.channel_order)\n\n\ndef psnr(img1,\n         img2,\n         crop_border=0,\n         input_order='HWC',\n         convert_to=None,\n         channel_order='rgb'):\n    \"\"\"Calculate PSNR (Peak Signal-to-Noise Ratio).\n\n    Ref: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\n\n    Args:\n        img1 (ndarray): Images with range [0, 255].\n        img2 (ndarray): Images with range [0, 255].\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n        channel_order (str): The channel order of image. Default: 'rgb'.\n\n    Returns:\n        result (float): PSNR result.\n    \"\"\"\n\n    assert img1.shape == img2.shape, (\n        f'Image shapes are different: {img1.shape}, {img2.shape}.')\n\n    img1 = img_transform(\n        img1,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n    img2 = img_transform(\n        img2,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n\n    mse_value = ((img1 - img2)**2).mean()\n    if mse_value == 0:\n        result = float('inf')\n    else:\n        result = 20. * np.log10(255. / np.sqrt(mse_value))\n\n    return result\n"
  },
  {
    "path": "mmagic/evaluation/metrics/sad.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Sequence\n\nimport numpy as np\nimport torch.nn as nn\nfrom mmengine.model import is_model_wrapper\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import _fetch_data_and_check, average\n\n\n@METRICS.register_module()\nclass SAD(BaseSampleWiseMetric):\n    \"\"\"Sum of Absolute Differences metric for image matting.\n\n    This metric compute per-pixel absolute difference and sum across all\n    pixels.\n    i.e. sum(abs(a-b)) / norm_const\n\n    .. note::\n\n        Current implementation assume image / alpha / trimap array in numpy\n        format and with pixel value ranging from 0 to 255.\n\n    .. note::\n\n        pred_alpha should be masked by trimap before passing\n        into this metric\n\n    Default prefix: ''\n\n    Args:\n        norm_const (int): Divide the result to reduce its magnitude.\n            Default to 1000.\n\n    Metrics:\n        - SAD (float): Sum of Absolute Differences\n    \"\"\"\n\n    default_prefix = ''\n    metric = 'SAD'\n\n    def __init__(\n        self,\n        norm_const=1000,\n        **kwargs,\n    ) -> None:\n        self.norm_const = norm_const\n        super().__init__(**kwargs)\n\n    def prepare(self, module: nn.Module, dataloader: DataLoader):\n        self.size = len(dataloader.dataset)\n        if is_model_wrapper(module):\n            module = module.module\n        self.data_preprocessor = module.data_preprocessor\n\n    def process(self, data_batch: Sequence[dict],\n                data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data and predictions.\n\n        Args:\n            data_batch (Sequence[Tuple[Any, dict]]): A batch of data\n                from the dataloader.\n            predictions (Sequence[dict]): A batch of outputs from\n                the model.\n        \"\"\"\n        for data_sample in data_samples:\n            pred_alpha, gt_alpha, _ = _fetch_data_and_check(data_sample)\n\n            # divide by 1000 to reduce the magnitude of the result\n            sad_sum = np.abs(pred_alpha - gt_alpha).sum() / self.norm_const\n\n            result = {'sad': sad_sum}\n\n            self.results.append(result)\n\n    def compute_metrics(self, results: List):\n        \"\"\"Compute the metrics from processed results.\n\n        Args:\n            results (dict): The processed results of each batch.\n\n        Returns:\n            Dict: The computed metrics. The keys are the names of the metrics,\n            and the values are corresponding results.\n        \"\"\"\n\n        sad = average(results, 'sad')\n\n        return {'SAD': sad}\n"
  },
  {
    "path": "mmagic/evaluation/metrics/snr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport numpy as np\n\nfrom mmagic.registry import METRICS\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import img_transform\n\n\n@METRICS.register_module()\nclass SNR(BaseSampleWiseMetric):\n    \"\"\"Signal-to-Noise Ratio.\n\n    Ref: https://en.wikipedia.org/wiki/Signal-to-noise_ratio\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the SNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'CHW'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n\n    Metrics:\n        - SNR (float): Signal-to-Noise Ratio\n    \"\"\"\n\n    metric = 'SNR'\n\n    def __init__(self,\n                 gt_key: str = 'gt_img',\n                 pred_key: str = 'pred_img',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 crop_border=0,\n                 input_order='CHW',\n                 convert_to=None) -> None:\n        super().__init__(\n            gt_key=gt_key,\n            pred_key=pred_key,\n            mask_key=None,\n            collect_device=collect_device,\n            prefix=prefix)\n\n        self.crop_border = crop_border\n        self.input_order = input_order\n        self.convert_to = convert_to\n\n    def process_image(self, gt, pred, mask):\n        \"\"\"Process an image.\n\n        Args:\n            gt (Torch | np.ndarray): GT image.\n            pred (Torch | np.ndarray): Pred image.\n            mask (Torch | np.ndarray): Mask of evaluation.\n        Returns:\n            np.ndarray: SNR result.\n        \"\"\"\n\n        return snr(\n            gt=gt,\n            pred=pred,\n            crop_border=self.crop_border,\n            input_order=self.input_order,\n            convert_to=self.convert_to,\n            channel_order=self.channel_order)\n\n\ndef snr(gt,\n        pred,\n        crop_border=0,\n        input_order='HWC',\n        convert_to=None,\n        channel_order='rgb'):\n    \"\"\"Calculate PSNR (Peak Signal-to-Noise Ratio).\n\n    Ref: https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\n\n    Args:\n        gt (ndarray): Images with range [0, 255].\n        pred (ndarray): Images with range [0, 255].\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n        channel_order (str): The channel order of image. Default: 'rgb'.\n\n    Returns:\n        float: SNR result.\n    \"\"\"\n\n    assert gt.shape == pred.shape, (\n        f'Image shapes are different: {gt.shape}, {pred.shape}.')\n\n    gt = img_transform(\n        gt,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n    pred = img_transform(\n        pred,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n\n    signal = ((gt)**2).mean()\n    noise = ((gt - pred)**2).mean()\n\n    result = 10. * np.log10(signal / noise)\n\n    return result\n"
  },
  {
    "path": "mmagic/evaluation/metrics/ssim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport cv2\nimport numpy as np\n\nfrom mmagic.registry import METRICS\nfrom mmagic.utils import to_numpy\nfrom .base_sample_wise_metric import BaseSampleWiseMetric\nfrom .metrics_utils import img_transform\n\n\n@METRICS.register_module()\nclass SSIM(BaseSampleWiseMetric):\n    \"\"\"Calculate SSIM (structural similarity).\n\n    Ref:\n    Image quality assessment: From error visibility to structural similarity\n\n    The results are the same as that of the official released MATLAB code in\n    https://ece.uwaterloo.ca/~z70wang/research/ssim/.\n\n    For three-channel images, SSIM is calculated for each channel and then\n    averaged.\n\n    Args:\n\n        gt_key (str): Key of ground-truth. Default: 'gt_img'\n        pred_key (str): Key of prediction. Default: 'pred_img'\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Default: None\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the PSNR calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n\n    Metrics:\n        - SSIM (float): Structural similarity\n    \"\"\"\n\n    metric = 'SSIM'\n\n    def __init__(self,\n                 gt_key: str = 'gt_img',\n                 pred_key: str = 'pred_img',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None,\n                 crop_border=0,\n                 input_order='CHW',\n                 convert_to=None) -> None:\n        super().__init__(\n            gt_key=gt_key,\n            pred_key=pred_key,\n            mask_key=None,\n            collect_device=collect_device,\n            prefix=prefix)\n\n        self.crop_border = crop_border\n        self.input_order = input_order\n        self.convert_to = convert_to\n\n    def process_image(self, gt, pred, mask):\n        \"\"\"Process an image.\n\n        Args:\n            gt (Torch | np.ndarray): GT image.\n            pred (Torch | np.ndarray): Pred image.\n            mask (Torch | np.ndarray): Mask of evaluation.\n        Returns:\n            np.ndarray: SSIM result.\n        \"\"\"\n\n        return ssim(\n            img1=gt,\n            img2=pred,\n            crop_border=self.crop_border,\n            input_order=self.input_order,\n            convert_to=self.convert_to,\n            channel_order=self.channel_order)\n\n\ndef _ssim(img1, img2):\n    \"\"\"Calculate SSIM (structural similarity) for one channel images.\n\n    It is called by func:`ssim`.\n\n    Args:\n        img1, img2 (np.ndarray): Images with range [0, 255] with order 'HWC'.\n\n    Returns:\n        float: SSIM result.\n    \"\"\"\n\n    C1 = (0.01 * 255)**2\n    C2 = (0.03 * 255)**2\n\n    kernel = cv2.getGaussianKernel(11, 1.5)\n    window = np.outer(kernel, kernel.transpose())\n\n    mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5]\n    mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5]\n    mu1_sq = mu1**2\n    mu2_sq = mu2**2\n    mu1_mu2 = mu1 * mu2\n    sigma1_sq = cv2.filter2D(img1**2, -1, window)[5:-5, 5:-5] - mu1_sq\n    sigma2_sq = cv2.filter2D(img2**2, -1, window)[5:-5, 5:-5] - mu2_sq\n    sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2\n\n    ssim_map = ((2 * mu1_mu2 + C1) *\n                (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) *\n                                       (sigma1_sq + sigma2_sq + C2))\n\n    return ssim_map.mean()\n\n\ndef ssim(img1,\n         img2,\n         crop_border=0,\n         input_order='HWC',\n         convert_to=None,\n         channel_order='rgb'):\n    \"\"\"Calculate SSIM (structural similarity).\n\n    Ref:\n    Image quality assessment: From error visibility to structural similarity\n\n    The results are the same as that of the official released MATLAB code in\n    https://ece.uwaterloo.ca/~z70wang/research/ssim/.\n\n    For three-channel images, SSIM is calculated for each channel and then\n    averaged.\n\n    Args:\n        img1 (ndarray): Images with range [0, 255].\n        img2 (ndarray): Images with range [0, 255].\n        crop_border (int): Cropped pixels in each edges of an image. These\n            pixels are not involved in the SSIM calculation. Default: 0.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            Default: 'HWC'.\n        convert_to (str): Whether to convert the images to other color models.\n            If None, the images are not altered. When computing for 'Y',\n            the images are assumed to be in BGR order. Options are 'Y' and\n            None. Default: None.\n        channel_order (str): The channel order of image. Default: 'rgb'\n\n    Returns:\n        float: SSIM result.\n    \"\"\"\n\n    assert img1.shape == img2.shape, (\n        f'Image shapes are different: {img1.shape}, {img2.shape}.')\n\n    img1 = img_transform(\n        img1,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n    img2 = img_transform(\n        img2,\n        crop_border=crop_border,\n        input_order=input_order,\n        convert_to=convert_to,\n        channel_order=channel_order)\n\n    img1 = to_numpy(img1)\n    img2 = to_numpy(img2)\n\n    ssims = []\n    for i in range(img1.shape[2]):\n        ssims.append(_ssim(img1[..., i], img2[..., i]))\n\n    return np.array(ssims).mean()\n"
  },
  {
    "path": "mmagic/evaluation/metrics/swd.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Sequence\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.dist import all_gather, get_world_size\n\nfrom mmagic.registry import METRICS\nfrom .base_gen_metric import GenMetric\n\n\ndef sliced_wasserstein(distribution_a,\n                       distribution_b,\n                       dir_repeats=4,\n                       dirs_per_repeat=128):\n    r\"\"\"sliced Wasserstein distance of two sets of patches.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/ms_ssim.py  # noqa\n\n    Args:\n        distribution_a (Tensor): Descriptors of first distribution.\n        distribution_b (Tensor): Descriptors of second distribution.\n        dir_repeats (int): The number of projection times. Default to 4.\n        dirs_per_repeat (int): The number of directions per projection.\n            Default to 128.\n\n    Returns:\n        float: sliced Wasserstein distance.\n    \"\"\"\n    if torch.cuda.is_available():\n        distribution_b = distribution_b.cuda()\n    assert distribution_a.ndim == 2\n    assert distribution_a.shape == distribution_b.shape\n    assert dir_repeats > 0 and dirs_per_repeat > 0\n    distribution_a = distribution_a.to(distribution_b.device)\n    results = []\n    for _ in range(dir_repeats):\n        dirs = torch.randn(distribution_a.shape[1], dirs_per_repeat)\n        dirs /= torch.sqrt(torch.sum((dirs**2), dim=0, keepdim=True))\n        dirs = dirs.to(distribution_b.device)\n        proj_a = torch.matmul(distribution_a, dirs)\n        proj_b = torch.matmul(distribution_b, dirs)\n        # To save cuda memory, we perform sort in cpu\n        proj_a, _ = torch.sort(proj_a.cpu(), dim=0)\n        proj_b, _ = torch.sort(proj_b.cpu(), dim=0)\n        dists = torch.abs(proj_a - proj_b)\n        results.append(torch.mean(dists).item())\n    torch.cuda.empty_cache()\n    return sum(results) / dir_repeats\n\n\n# Gaussian blur kernel\ndef get_gaussian_kernel():\n    \"\"\"Get the gaussian blur kernel.\n\n    Returns:\n        Tensor: Blur kernel.\n    \"\"\"\n    kernel = np.array([[1, 4, 6, 4, 1], [4, 16, 24, 16, 4], [6, 24, 36, 24, 6],\n                       [4, 16, 24, 16, 4], [1, 4, 6, 4, 1]],\n                      np.float32) / 256.0\n    gaussian_k = torch.as_tensor(kernel.reshape(1, 1, 5, 5))\n    return gaussian_k\n\n\ndef get_pyramid_layer(image, gaussian_k, direction='down'):\n    \"\"\"Get the pyramid layer.\n\n    Args:\n        image (Tensor): Input image.\n        gaussian_k (Tensor): Gaussian kernel\n        direction (str, optional): The direction of pyramid. Defaults to\n            'down'.\n\n    Returns:\n        Tensor: The output of the pyramid.\n    \"\"\"\n    gaussian_k = gaussian_k.to(image.device)\n    if direction == 'up':\n        image = F.interpolate(image, scale_factor=2)\n    multiband = [\n        F.conv2d(\n            image[:, i:i + 1, :, :],\n            gaussian_k,\n            padding=2,\n            stride=1 if direction == 'up' else 2) for i in range(3)\n    ]\n    image = torch.cat(multiband, dim=1)\n    return image\n\n\ndef gaussian_pyramid(original, n_pyramids, gaussian_k):\n    \"\"\"Get a group of gaussian pyramid.\n\n    Args:\n        original (Tensor): The input image.\n        n_pyramids (int): The number of pyramids.\n        gaussian_k (Tensor): The gaussian kernel.\n\n    Returns:\n        List[Tensor]: The list of output of gaussian pyramid.\n    \"\"\"\n    x = original\n    # pyramid down\n    pyramids = [original]\n    for _ in range(n_pyramids):\n        x = get_pyramid_layer(x, gaussian_k)\n        pyramids.append(x)\n    return pyramids\n\n\ndef laplacian_pyramid(original, n_pyramids, gaussian_k):\n    \"\"\"Calculate Laplacian pyramid.\n\n    Ref: https://github.com/koshian2/swd-pytorch/blob/master/swd.py\n\n    Args:\n        original (Tensor): Batch of Images with range [0, 1] and order \"NCHW\"\n        n_pyramids (int): Levels of pyramids minus one.\n        gaussian_k (Tensor): Gaussian kernel with shape (1, 1, 5, 5).\n\n    Return:\n        list[Tensor]. Laplacian pyramids of original.\n    \"\"\"\n    # create gaussian pyramid\n    pyramids = gaussian_pyramid(original, n_pyramids, gaussian_k)\n\n    # pyramid up - diff\n    laplacian = []\n    for i in range(len(pyramids) - 1):\n        diff = pyramids[i] - get_pyramid_layer(pyramids[i + 1], gaussian_k,\n                                               'up')\n        laplacian.append(diff)\n    # Add last gaussian pyramid\n    laplacian.append(pyramids[len(pyramids) - 1])\n    return laplacian\n\n\ndef get_descriptors_for_minibatch(minibatch, nhood_size, nhoods_per_image):\n    r\"\"\"Get descriptors of one level of pyramids.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/sliced_wasserstein.py  # noqa\n\n    Args:\n        minibatch (Tensor): Pyramids of one level with order \"NCHW\".\n        nhood_size (int): Pixel neighborhood size.\n        nhoods_per_image (int): The number of descriptors per image.\n\n    Return:\n        Tensor: Descriptors of images from one level batch.\n    \"\"\"\n    S = minibatch.shape  # (minibatch, channel, height, width)\n    assert len(S) == 4 and S[1] == 3\n    N = nhoods_per_image * S[0]\n    H = nhood_size // 2\n    nhood, chan, x, y = np.ogrid[0:N, 0:3, -H:H + 1, -H:H + 1]\n    img = nhood // nhoods_per_image\n    x = x + np.random.randint(H, S[3] - H, size=(N, 1, 1, 1))\n    y = y + np.random.randint(H, S[2] - H, size=(N, 1, 1, 1))\n    idx = ((img * S[1] + chan) * S[2] + y) * S[3] + x\n    return minibatch.view(-1)[idx]\n\n\ndef finalize_descriptors(desc):\n    r\"\"\"Normalize and reshape descriptors.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/sliced_wasserstein.py  # noqa\n\n    Args:\n        desc (list or Tensor): List of descriptors of one level.\n\n    Return:\n        Tensor: Descriptors after normalized along channel and flattened.\n    \"\"\"\n    if isinstance(desc, list):\n        desc = torch.cat(desc, dim=0)\n    assert desc.ndim == 4  # (neighborhood, channel, height, width)\n    desc -= torch.mean(desc, dim=(0, 2, 3), keepdim=True)\n    desc /= torch.std(desc, dim=(0, 2, 3), keepdim=True)\n    desc = desc.reshape(desc.shape[0], -1)\n    return desc\n\n\n@METRICS.register_module('SWD')\n@METRICS.register_module()\nclass SlicedWassersteinDistance(GenMetric):\n    \"\"\"SWD (Sliced Wasserstein distance) metric. We calculate the SWD of two\n    sets of images in the following way. In every 'feed', we obtain the\n    Laplacian pyramids of every images and extract patches from the Laplacian\n    pyramids as descriptors. In 'summary', we normalize these descriptors along\n    channel, and reshape them so that we can use these descriptors to represent\n    the distribution of real/fake images. And we can calculate the sliced\n    Wasserstein distance of the real and fake descriptors as the SWD of the\n    real and fake images.\n\n    Ref: https://github.com/tkarras/progressive_growing_of_gans/blob/master/metrics/sliced_wasserstein.py # noqa\n\n    Args:\n        fake_nums (int): Numbers of the generated image need for the metric.\n        image_shape (tuple): Image shape in order \"CHW\".\n        fake_key (Optional[str]): Key for get fake images of the output dict.\n            Defaults to None.\n        real_key (Optional[str]): Key for get real images from the input dict.\n            Defaults to 'gt_img'.\n        sample_model (str): Sampling mode for the generative model. Support\n            'orig' and 'ema'. Defaults to 'ema'.\n        collect_device (str): Device name used for collecting results from\n            different ranks during distributed training. Must be 'cpu' or\n            'gpu'. Defaults to 'cpu'.\n        prefix (str, optional): The prefix that will be added in the metric\n            names to disambiguate homonymous metrics of different evaluators.\n            If prefix is not provided in the argument, self.default_prefix\n            will be used instead. Defaults to None.\n    \"\"\"\n\n    name = 'SWD'\n\n    def __init__(self,\n                 fake_nums: int,\n                 image_shape: tuple,\n                 fake_key: Optional[str] = None,\n                 real_key: Optional[str] = 'gt_img',\n                 sample_model: str = 'ema',\n                 collect_device: str = 'cpu',\n                 prefix: Optional[str] = None):\n        super().__init__(fake_nums, fake_nums, fake_key, real_key,\n                         sample_model, collect_device, prefix)\n\n        self.nhood_size = 7  # height and width of the extracted patches\n        self.nhoods_per_image = 128  # number of extracted patches per image\n        self.dir_repeats = 4  # times of sampling directions\n        self.dirs_per_repeat = 128  # number of directions per sampling\n        self.resolutions = []\n        res = image_shape[1]\n        self.image_shape = image_shape\n        while res >= 16 and len(self.resolutions) < 4:\n            self.resolutions.append(res)\n            res //= 2\n        self.n_pyramids = len(self.resolutions)\n\n        self.gaussian_k = get_gaussian_kernel()\n        self.real_results = [[] for res in self.resolutions]\n        self.fake_results = [[] for res in self.resolutions]\n\n        self._num_processed = 0\n\n    def process(self, data_batch: dict, data_samples: Sequence[dict]) -> None:\n        \"\"\"Process one batch of data samples and predictions. The processed\n        results should be stored in ``self.fake_results`` and\n        ``self.real_results``, which will be used to compute the metrics when\n        all batches have been processed.\n\n        Args:\n            data_batch (dict): A batch of data from the dataloader.\n            data_samples (Sequence[dict]): A batch of outputs from the model.\n        \"\"\"\n        if self.fake_nums != -1 and (self._num_processed >=\n                                     self.fake_nums_per_device):\n            return\n\n        real_imgs, fake_imgs = [], []\n        for data in data_samples:\n            # parse real images\n            real_imgs.append(data['gt_img'])\n            # parse fake images\n            fake_img_ = data\n            # get ema/orig results\n            if self.sample_model in fake_img_:\n                fake_img_ = fake_img_[self.sample_model]\n            # get specific fake_keys\n            if (self.fake_key is not None and self.fake_key in fake_img_):\n                fake_img_ = fake_img_[self.fake_key]\n            else:\n                # get img tensor\n                fake_img_ = fake_img_['fake_img']\n            fake_imgs.append(fake_img_)\n        real_imgs = torch.stack(real_imgs, dim=0)\n        fake_imgs = torch.stack(fake_imgs, dim=0)\n\n        # [0, 255] -> [-1, 1]\n        real_imgs = (real_imgs - 127.5) / 127.5\n        fake_imgs = (fake_imgs - 127.5) / 127.5\n\n        # real images\n        assert real_imgs.shape[1:] == self.image_shape\n        if real_imgs.shape[1] == 1:\n            real_imgs = real_imgs.repeat(1, 3, 1, 1)\n        real_pyramid = laplacian_pyramid(real_imgs, self.n_pyramids - 1,\n                                         self.gaussian_k)\n        # lod: layer_of_descriptors\n        if self.real_results == []:\n            self.real_results = [[] for res in self.resolutions]\n        for lod, level in enumerate(real_pyramid):\n            desc = get_descriptors_for_minibatch(level, self.nhood_size,\n                                                 self.nhoods_per_image)\n            self.real_results[lod].append(desc.cpu())\n\n        # fake images\n        assert fake_imgs.shape[1:] == self.image_shape\n        if fake_imgs.shape[1] == 1:\n            fake_imgs = fake_imgs.repeat(1, 3, 1, 1)\n        fake_pyramid = laplacian_pyramid(fake_imgs, self.n_pyramids - 1,\n                                         self.gaussian_k)\n        # lod: layer_of_descriptors\n        if self.fake_results == []:\n            self.fake_results = [[] for res in self.resolutions]\n        for lod, level in enumerate(fake_pyramid):\n            desc = get_descriptors_for_minibatch(level, self.nhood_size,\n                                                 self.nhoods_per_image)\n            self.fake_results[lod].append(desc.cpu())\n\n        self._num_processed += real_imgs.shape[0]\n\n    def _collect_target_results(self, target: str) -> Optional[list]:\n        \"\"\"Collect function for SWD metric. This function support collect\n        results typing as `List[List[Tensor]]`.\n\n        Args:\n            target (str): Target results to collect.\n\n        Returns:\n            Optional[list]: The collected results.\n        \"\"\"\n        assert target in [\n            'fake', 'real'\n        ], ('Only support to collect \\'fake\\' or \\'real\\' results.')\n        results = getattr(self, f'{target}_results')\n        results_collected = []\n        world_size = get_world_size()\n        for result in results:\n            # save the original tensor size\n            results_size_list = [res.shape[0] for res in result] * world_size\n            result_collected = torch.cat(result, dim=0)\n            result_collected = torch.cat(all_gather(result_collected), dim=0)\n            # split to tuple\n            result_collected = torch.split(result_collected, results_size_list)\n            # convert to list\n            result_collected = [res for res in result_collected]\n            results_collected.append(result_collected)\n\n        self._num_processed = 0\n        return results_collected\n\n    def compute_metrics(self, results_fake, results_real) -> dict:\n        \"\"\"Compute the result of SWD metric.\n\n        Args:\n            fake_results (list): List of image feature of fake images.\n            real_results (list): List of image feature of real images.\n\n        Returns:\n            dict: A dict of the computed SWD metric.\n        \"\"\"\n        fake_descs = [finalize_descriptors(d) for d in results_fake]\n        real_descs = [finalize_descriptors(d) for d in results_real]\n        distance = [\n            sliced_wasserstein(dreal, dfake, self.dir_repeats,\n                               self.dirs_per_repeat)\n            for dreal, dfake in zip(real_descs, fake_descs)\n        ]\n        del real_descs\n        del fake_descs\n\n        distance = [d * 1e3 for d in distance]  # multiply by 10^3\n        result = distance + [np.mean(distance)]\n\n        return {\n            f'{resolution}': round(d, 4)\n            for resolution, d in zip(self.resolutions + ['avg'], result)\n        }\n"
  },
  {
    "path": "mmagic/models/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .base_models import (BaseConditionalGAN, BaseEditModel, BaseGAN,\n                          BaseMattor, BaseTranslationModel, BasicInterpolator,\n                          ExponentialMovingAverage)\nfrom .data_preprocessors import DataPreprocessor, MattorPreprocessor\nfrom .editors import *  # noqa: F401, F403\nfrom .losses import *  # noqa: F401, F403\n\n__all__ = [\n    'BaseGAN', 'BaseTranslationModel', 'BaseEditModel', 'MattorPreprocessor',\n    'DataPreprocessor', 'BasicInterpolator', 'BaseMattor', 'BasicInterpolator',\n    'ExponentialMovingAverage', 'BaseConditionalGAN'\n]\n"
  },
  {
    "path": "mmagic/models/archs/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# To register Deconv\nimport warnings\nfrom typing import List\n\nfrom mmagic.utils import try_import\nfrom .all_gather_layer import AllGatherLayer\nfrom .aspp import ASPP\nfrom .attention_injection import AttentionInjection\nfrom .conv import *  # noqa: F401, F403\nfrom .downsample import pixel_unshuffle\nfrom .ensemble import SpatialTemporalEnsemble\nfrom .gated_conv_module import SimpleGatedConvModule\nfrom .img_normalize import ImgNormalize\nfrom .linear_module import LinearModule\nfrom .lora import (LoRAWrapper, set_lora, set_lora_disable, set_lora_enable,\n                   set_only_lora_trainable)\nfrom .multi_layer_disc import MultiLayerDiscriminator\nfrom .patch_disc import PatchDiscriminator\nfrom .resnet import ResNet\nfrom .separable_conv_module import DepthwiseSeparableConvModule\nfrom .simple_encoder_decoder import SimpleEncoderDecoder\nfrom .smpatch_disc import SoftMaskPatchDiscriminator\nfrom .sr_backbone import ResidualBlockNoBN\nfrom .tokenizer import TokenizerWrapper\nfrom .upsample import PixelShufflePack\nfrom .vgg import VGG16\nfrom .wrapper import DiffusersWrapper\n\n\ndef register_diffusers_models() -> List[str]:\n    \"\"\"Register models in ``diffusers.models`` to the ``MODELS`` registry.\n    Specifically, the registered models from diffusers only defines the network\n    forward without training. See more details about diffusers in:\n    https://huggingface.co/docs/diffusers/api/models.\n\n    Returns:\n        List[str]: A list of registered DIFFUSION_MODELS' name.\n    \"\"\"\n    import inspect\n\n    from mmagic.registry import MODELS\n\n    diffusers = try_import('diffusers')\n    if diffusers is None:\n        warnings.warn('Diffusion Models are not registered as expect. '\n                      'If you want to use diffusion models, '\n                      'please install diffusers>=0.12.0.')\n        return None\n\n    def gen_wrapped_cls(module, module_name):\n        return type(\n            module_name, (DiffusersWrapper, ),\n            dict(\n                _module_cls=module,\n                _module_name=module_name,\n                __module__=__name__))\n\n    DIFFUSERS_MODELS = []\n    for module_name in dir(diffusers.models):\n        module = getattr(diffusers.models, module_name)\n        if inspect.isclass(module):\n            wrapped_module = gen_wrapped_cls(module, module_name)\n            MODELS.register_module(name=module_name, module=wrapped_module)\n            DIFFUSERS_MODELS.append(module_name)\n\n    DIFFUSERS_PIPELINES = []\n    for pipeline_name in dir(diffusers.pipelines):\n        pipeline = getattr(diffusers.pipelines, pipeline_name)\n        if (inspect.isclass(pipeline)\n                and issubclass(pipeline, diffusers.DiffusionPipeline)):\n            wrapped_pipeline = gen_wrapped_cls(pipeline, pipeline_name)\n            MODELS.register_module(name=pipeline_name, module=wrapped_pipeline)\n            DIFFUSERS_PIPELINES.append(pipeline_name)\n\n    return DIFFUSERS_MODELS, DIFFUSERS_PIPELINES\n\n\nREGISTERED_DIFFUSERS_MODELS, REGISTERED_DIFFUSERS_PIPELINES = \\\n    register_diffusers_models()\n\n__all__ = [\n    'ASPP', 'DepthwiseSeparableConvModule', 'SimpleGatedConvModule',\n    'LinearModule', 'pixel_unshuffle', 'PixelShufflePack', 'ImgNormalize',\n    'SpatialTemporalEnsemble', 'SoftMaskPatchDiscriminator',\n    'SimpleEncoderDecoder', 'MultiLayerDiscriminator', 'PatchDiscriminator',\n    'VGG16', 'ResNet', 'AllGatherLayer', 'ResidualBlockNoBN', 'LoRAWrapper',\n    'set_lora', 'set_lora_disable', 'set_lora_enable',\n    'set_only_lora_trainable', 'TokenizerWrapper', 'AttentionInjection'\n]\n"
  },
  {
    "path": "mmagic/models/archs/all_gather_layer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.autograd as autograd\nimport torch.distributed as dist\n\n\nclass AllGatherLayer(autograd.Function):\n    \"\"\"All gather layer with backward propagation path.\n\n    Indeed, this module is to make ``dist.all_gather()`` in the backward graph.\n    Such kind of operation has been widely used in Moco and other contrastive\n    learning algorithms.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, x):\n        \"\"\"Forward function.\"\"\"\n        ctx.save_for_backward(x)\n        output = [torch.zeros_like(x) for _ in range(dist.get_world_size())]\n        dist.all_gather(output, x)\n        return tuple(output)\n\n    @staticmethod\n    def backward(ctx, *grad_outputs):\n        \"\"\"Backward function.\"\"\"\n        x, = ctx.saved_tensors\n        grad_out = torch.zeros_like(x)\n        grad_out = grad_outputs[dist.get_rank()]\n        return grad_out\n"
  },
  {
    "path": "mmagic/models/archs/aspp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Sequence\n\nimport torch\nfrom mmcv.cnn import ConvModule\nfrom torch import Tensor, nn\nfrom torch.nn import functional as F\n\nfrom .separable_conv_module import DepthwiseSeparableConvModule\n\n\nclass ASPPPooling(nn.Sequential):\n    \"\"\"ASPP Pooling module.\n\n    The code is adopted from\n    https://github.com/pytorch/vision/blob/master/torchvision/models/\n    segmentation/deeplabv3.py\n\n    Args:\n        in_channels (int): Input channels of the module.\n        out_channels (int): Output channels of the module.\n        conv_cfg (dict): Config dict for convolution layer. If \"None\",\n            nn.Conv2d will be applied.\n        norm_cfg (dict): Config dict for normalization layer.\n        act_cfg (dict): Config dict for activation layer.\n    \"\"\"\n\n    def __init__(self, in_channels: int, out_channels: int,\n                 conv_cfg: Optional[dict], norm_cfg: Optional[dict],\n                 act_cfg: Optional[dict]):\n        super().__init__(\n            nn.AdaptiveAvgPool2d(1),\n            ConvModule(\n                in_channels,\n                out_channels,\n                1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg))\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function for ASPP Pooling module.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        size = x.shape[-2:]\n        for mod in self:\n            x = mod(x)\n        return F.interpolate(\n            x, size=size, mode='bilinear', align_corners=False)\n\n\nclass ASPP(nn.Module):\n    \"\"\"ASPP module from DeepLabV3.\n\n    The code is adopted from\n    https://github.com/pytorch/vision/blob/master/torchvision/models/\n    segmentation/deeplabv3.py\n\n    For more information about the module:\n    `\"Rethinking Atrous Convolution for Semantic Image Segmentation\"\n    <https://arxiv.org/abs/1706.05587>`_.\n\n    Args:\n        in_channels (int): Input channels of the module.\n        out_channels (int): Output channels of the module. Default: 256.\n        mid_channels (int): Output channels of the intermediate ASPP conv\n            modules. Default: 256.\n        dilations (Sequence[int]): Dilation rate of three ASPP conv module.\n            Default: [12, 24, 36].\n        conv_cfg (dict): Config dict for convolution layer. If \"None\",\n            nn.Conv2d will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer.\n            Default: dict(type='BN').\n        act_cfg (dict): Config dict for activation layer.\n            Default: dict(type='ReLU').\n        separable_conv (bool): Whether replace normal conv with depthwise\n            separable conv which is faster. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 out_channels: int = 256,\n                 mid_channels: int = 256,\n                 dilations: Sequence[int] = (12, 24, 36),\n                 conv_cfg: Optional[dict] = None,\n                 norm_cfg: Optional[dict] = dict(type='BN'),\n                 act_cfg: Optional[dict] = dict(type='ReLU'),\n                 separable_conv: bool = False):\n        super().__init__()\n\n        if separable_conv:\n            conv_module = DepthwiseSeparableConvModule\n        else:\n            conv_module = ConvModule\n\n        modules = []\n        modules.append(\n            ConvModule(\n                in_channels,\n                mid_channels,\n                1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg))\n\n        for dilation in dilations:\n            modules.append(\n                conv_module(\n                    in_channels,\n                    mid_channels,\n                    3,\n                    padding=dilation,\n                    dilation=dilation,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg))\n\n        modules.append(\n            ASPPPooling(in_channels, mid_channels, conv_cfg, norm_cfg,\n                        act_cfg))\n\n        self.convs = nn.ModuleList(modules)\n\n        self.project = nn.Sequential(\n            ConvModule(\n                5 * mid_channels,\n                out_channels,\n                1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg), nn.Dropout(0.5))\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function for ASPP module.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        res = []\n        for conv in self.convs:\n            res.append(conv(x))\n        res = torch.cat(res, dim=1)\n        return self.project(res)\n"
  },
  {
    "path": "mmagic/models/archs/attention_injection.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom enum import Enum\n\nimport torch\nimport torch.nn as nn\nfrom diffusers.models.attention import BasicTransformerBlock\nfrom torch import Tensor\n\nAttentionStatus = Enum('ATTENTION_STATUS', 'READ WRITE DISABLE')\n\n\ndef torch_dfs(model: torch.nn.Module):\n    result = [model]\n    for child in model.children():\n        result += torch_dfs(child)\n    return result\n\n\nclass AttentionInjection(nn.Module):\n    \"\"\"Wrapper for stable diffusion unet.\n\n    Args:\n        module (nn.Module): The module to be wrapped.\n    \"\"\"\n\n    def __init__(self, module: nn.Module, injection_weight=5):\n        super().__init__()\n        self.attention_status = AttentionStatus.READ\n        self.style_cfgs = []\n        self.unet = module\n\n        attn_inject = self\n\n        def transformer_forward_replacement(\n            self,\n            hidden_states,\n            attention_mask=None,\n            encoder_hidden_states=None,\n            encoder_attention_mask=None,\n            timestep=None,\n            cross_attention_kwargs=None,\n            class_labels=None,\n        ):\n            if self.use_ada_layer_norm:\n                norm_hidden_states = self.norm1(hidden_states, timestep)\n            elif self.use_ada_layer_norm_zero:\n                norm_hidden_states, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.norm1(  # noqa\n                    hidden_states,\n                    timestep,\n                    class_labels,\n                    hidden_dtype=hidden_states.dtype)\n            else:\n                norm_hidden_states = self.norm1(hidden_states)\n\n            attn_output = None\n            self_attention_context = norm_hidden_states\n            if attn_inject.attention_status == AttentionStatus.WRITE:\n                self.bank.append(self_attention_context.detach().clone())\n            if attn_inject.attention_status == AttentionStatus.READ:\n                if len(self.bank) > 0:\n                    self.bank = self.bank * injection_weight\n                    attn_output = self.attn1(\n                        norm_hidden_states,\n                        encoder_hidden_states=torch.cat(\n                            [self_attention_context] + self.bank, dim=1))\n                    # attn_output = self.attn1(\n                    #     norm_hidden_states,\n                    #     encoder_hidden_states=self.bank[0])\n                self.bank = []\n            if attn_output is None:\n                attn_output = self.attn1(norm_hidden_states)\n\n            if self.use_ada_layer_norm_zero:\n                attn_output = gate_msa.unsqueeze(1) * attn_output\n            hidden_states = attn_output + hidden_states\n\n            cross_attention_kwargs = cross_attention_kwargs if \\\n                cross_attention_kwargs is not None else {}\n            if self.attn2 is not None:\n                norm_hidden_states = (\n                    self.norm2(hidden_states, timestep)\n                    if self.use_ada_layer_norm else self.norm2(hidden_states))\n\n                # 2. Cross-Attention\n                attn_output = self.attn2(\n                    norm_hidden_states,\n                    encoder_hidden_states=encoder_hidden_states,\n                    attention_mask=encoder_attention_mask,\n                    **cross_attention_kwargs,\n                )\n                hidden_states = attn_output + hidden_states\n\n            # 3. Feed-forward\n            norm_hidden_states = self.norm3(hidden_states)\n\n            if self.use_ada_layer_norm_zero:\n                norm_hidden_states = norm_hidden_states * \\\n                    (1 + scale_mlp[:, None]) + shift_mlp[:, None]\n\n            ff_output = self.ff(norm_hidden_states)\n\n            if self.use_ada_layer_norm_zero:\n                ff_output = gate_mlp.unsqueeze(1) * ff_output\n\n            hidden_states = ff_output + hidden_states\n\n            return hidden_states\n\n        all_modules = torch_dfs(self.unet)\n\n        attn_modules = [\n            module for module in all_modules\n            if isinstance(module, BasicTransformerBlock)\n        ]\n        for i, module in enumerate(attn_modules):\n            if getattr(module, '_original_inner_forward', None) is None:\n                module._original_inner_forward = module.forward\n            module.forward = transformer_forward_replacement.__get__(\n                module, BasicTransformerBlock)\n            module.bank = []\n\n    def forward(self,\n                x: Tensor,\n                t,\n                encoder_hidden_states=None,\n                down_block_additional_residuals=None,\n                mid_block_additional_residual=None,\n                ref_x=None) -> Tensor:\n        \"\"\"Forward and add LoRA mapping.\n\n        Args:\n            x (Tensor): The input tensor.\n\n        Returns:\n            Tensor: The output tensor.\n        \"\"\"\n        if ref_x is not None:\n            self.attention_status = AttentionStatus.WRITE\n            self.unet(\n                ref_x,\n                t,\n                encoder_hidden_states=encoder_hidden_states,\n                down_block_additional_residuals=  # noqa\n                down_block_additional_residuals,\n                mid_block_additional_residual=mid_block_additional_residual)\n        self.attention_status = AttentionStatus.READ\n        output = self.unet(\n            x,\n            t,\n            encoder_hidden_states=encoder_hidden_states,\n            down_block_additional_residuals=  # noqa\n            down_block_additional_residuals,\n            mid_block_additional_residual=mid_block_additional_residual)\n\n        return output\n"
  },
  {
    "path": "mmagic/models/archs/conv.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom torch import nn\n\nfrom mmagic.registry import MODELS\n\nMODELS.register_module('Deconv', module=nn.ConvTranspose2d)\n# TODO: octave conv\n"
  },
  {
    "path": "mmagic/models/archs/downsample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom torch import Tensor\n\n\ndef pixel_unshuffle(x: Tensor, scale: int) -> Tensor:\n    \"\"\"Down-sample by pixel unshuffle.\n\n    Args:\n        x (Tensor): Input tensor.\n        scale (int): Scale factor.\n\n    Returns:\n        Tensor: Output tensor.\n    \"\"\"\n\n    b, c, h, w = x.shape\n    if h % scale != 0 or w % scale != 0:\n        raise AssertionError(\n            f'Invalid scale ({scale}) of pixel unshuffle for tensor '\n            f'with shape: {x.shape}')\n    h = int(h / scale)\n    w = int(w / scale)\n    x = x.view(b, c, h, scale, w, scale)\n    x = x.permute(0, 1, 3, 5, 2, 4)\n    return x.reshape(b, -1, h, w)\n"
  },
  {
    "path": "mmagic/models/archs/ensemble.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\n\nclass SpatialTemporalEnsemble(nn.Module):\n    \"\"\"Apply spatial and temporal ensemble and compute outputs.\n\n    Args:\n        is_temporal_ensemble (bool, optional): Whether to apply ensemble\n            temporally. If True, the sequence will also be flipped temporally.\n            If the input is an image, this argument must be set to False.\n            Default: False.\n    \"\"\"\n\n    def __init__(self, is_temporal_ensemble: Optional[bool] = False):\n\n        super().__init__()\n\n        self.is_temporal_ensemble = is_temporal_ensemble\n\n    def _transform(self, imgs: torch.Tensor, mode: str) -> torch.Tensor:\n        \"\"\"Apply spatial transform (flip, rotate) to the images.\n\n        Args:\n            imgs (torch.Tensor): The images to be transformed/\n            mode (str): The mode of transform. Supported values are 'vertical',\n                'horizontal', and 'transpose', corresponding to vertical flip,\n                horizontal flip, and rotation, respectively.\n\n        Returns:\n            torch.Tensor: Output of the model with spatial ensemble applied.\n        \"\"\"\n\n        is_single_image = False\n        if imgs.ndim == 4:\n            if self.is_temporal_ensemble:\n                raise ValueError('\"is_temporal_ensemble\" must be False if '\n                                 'the input is an image.')\n            is_single_image = True\n            imgs = imgs.unsqueeze(1)\n\n        if mode == 'vertical':\n            imgs = imgs.flip(4).clone()\n        elif mode == 'horizontal':\n            imgs = imgs.flip(3).clone()\n        elif mode == 'transpose':\n            imgs = imgs.permute(0, 1, 2, 4, 3).clone()\n\n        if is_single_image:\n            imgs = imgs.squeeze(1)\n\n        return imgs\n\n    def spatial_ensemble(self, imgs: torch.Tensor,\n                         model: nn.Module) -> torch.Tensor:\n        \"\"\"Apply spatial ensemble.\n\n        Args:\n            imgs (torch.Tensor): The images to be processed by the model. Its\n                size should be either (n, t, c, h, w) or (n, c, h, w).\n            model (nn.Module): The model to process the images.\n\n        Returns:\n            torch.Tensor: Output of the model with spatial ensemble applied.\n        \"\"\"\n\n        img_list = [imgs.cpu()]\n        for mode in ['vertical', 'horizontal', 'transpose']:\n            img_list.extend([self._transform(t, mode) for t in img_list])\n\n        output_list = [model(t.to(imgs.device)).cpu() for t in img_list]\n        for i in range(len(output_list)):\n            if i > 3:\n                output_list[i] = self._transform(output_list[i], 'transpose')\n            if i % 4 > 1:\n                output_list[i] = self._transform(output_list[i], 'horizontal')\n            if (i % 4) % 2 == 1:\n                output_list[i] = self._transform(output_list[i], 'vertical')\n\n        outputs = torch.stack(output_list, dim=0)\n        outputs = outputs.mean(dim=0, keepdim=False)\n\n        return outputs.to(imgs.device)\n\n    def forward(self, imgs: torch.Tensor, model: nn.Module) -> torch.Tensor:\n        \"\"\"Apply spatial and temporal ensemble.\n\n        Args:\n            imgs (torch.Tensor): The images to be processed by the model. Its\n                size should be either (n, t, c, h, w) or (n, c, h, w).\n            model (nn.Module): The model to process the images.\n\n        Returns:\n            torch.Tensor: Output of the model with spatial ensemble applied.\n        \"\"\"\n        outputs = self.spatial_ensemble(imgs, model)\n        if self.is_temporal_ensemble:\n            outputs += self.spatial_ensemble(imgs.flip(1), model).flip(1)\n            outputs *= 0.5\n\n        return outputs\n"
  },
  {
    "path": "mmagic/models/archs/gated_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom typing import Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule, build_activation_layer\n\n\nclass SimpleGatedConvModule(nn.Module):\n    \"\"\"Simple Gated Convolutional Module.\n\n    This module is a simple gated convolutional module. The detailed formula\n    is:\n\n    .. math::\n        y = \\\\phi(conv1(x)) * \\\\sigma(conv2(x)),\n\n    where `phi` is the feature activation function and `sigma` is the gate\n    activation function. In default, the gate activation function is sigmoid.\n\n    Args:\n        in_channels (int): Same as nn.Conv2d.\n        out_channels (int): The number of channels of the output feature. Note\n            that `out_channels` in the conv module is doubled since this module\n            contains two convolutions for feature and gate separately.\n        kernel_size (int or tuple[int]): Same as nn.Conv2d.\n        feat_act_cfg (dict): Config dict for feature activation layer.\n            Default: dict(type='ELU').\n        gate_act_cfg (dict): Config dict for gate activation layer.\n            Default: dict(type='Sigmoid').\n        kwargs (keyword arguments): Same as `ConvModule`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 out_channels: int,\n                 kernel_size: Union[int, Tuple[int, int]],\n                 feat_act_cfg: Optional[dict] = dict(type='ELU'),\n                 gate_act_cfg: Optional[dict] = dict(type='Sigmoid'),\n                 **kwargs):\n        super().__init__()\n        # the activation function should specified outside conv module\n        kwargs_ = copy.deepcopy(kwargs)\n        kwargs_['act_cfg'] = None\n        self.with_feat_act = feat_act_cfg is not None\n        self.with_gate_act = gate_act_cfg is not None\n\n        self.conv = ConvModule(in_channels, out_channels * 2, kernel_size,\n                               **kwargs_)\n\n        if self.with_feat_act:\n            self.feat_act = build_activation_layer(feat_act_cfg)\n\n        if self.with_gate_act:\n            self.gate_act = build_activation_layer(gate_act_cfg)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        x = self.conv(x)\n        x, gate = torch.split(x, x.size(1) // 2, dim=1)\n        if self.with_feat_act:\n            x = self.feat_act(x)\n        if self.with_gate_act:\n            gate = self.gate_act(gate)\n        x = x * gate\n\n        return x\n"
  },
  {
    "path": "mmagic/models/archs/img_normalize.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Tuple\n\nimport torch\nimport torch.nn as nn\n\n\nclass ImgNormalize(nn.Conv2d):\n    \"\"\"Normalize images with the given mean and std value.\n\n    Based on Conv2d layer, can work in GPU.\n\n    Args:\n        pixel_range (float): Pixel range of feature.\n        img_mean (Tuple[float]): Image mean of each channel.\n        img_std (Tuple[float]): Image std of each channel.\n        sign (int): Sign of bias. Default -1.\n    \"\"\"\n\n    def __init__(self,\n                 pixel_range: float,\n                 img_mean: Tuple[float, float, float],\n                 img_std: Tuple[float, float, float],\n                 sign: int = -1):\n\n        assert len(img_mean) == len(img_std)\n        num_channels = len(img_mean)\n        super().__init__(num_channels, num_channels, kernel_size=1)\n\n        std = torch.Tensor(img_std)\n        self.weight.data = torch.eye(num_channels).view(\n            num_channels, num_channels, 1, 1)\n        self.weight.data.div_(std.view(num_channels, 1, 1, 1))\n        self.bias.data = sign * pixel_range * torch.Tensor(img_mean)\n        self.bias.data.div_(std)\n\n        self.weight.requires_grad = False\n        self.bias.requires_grad = False\n"
  },
  {
    "path": "mmagic/models/archs/linear_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Tuple\n\nimport torch.nn as nn\nfrom mmcv.cnn import build_activation_layer\nfrom mmengine.model.weight_init import kaiming_init\nfrom torch import Tensor\n\n\nclass LinearModule(nn.Module):\n    \"\"\"A linear block that contains linear/norm/activation layers.\n\n    For low level vision, we add spectral norm and padding layer.\n\n    Args:\n        in_features (int): Same as nn.Linear.\n        out_features (int): Same as nn.Linear.\n        bias (bool): Same as nn.Linear. Default: True.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n        inplace (bool): Whether to use inplace mode for activation.\n            Default: True.\n        with_spectral_norm (bool): Whether use spectral norm in linear module.\n            Default: False.\n        order (tuple[str]): The order of linear/activation layers. It is a\n            sequence of \"linear\", \"norm\" and \"act\". Examples are\n            (\"linear\", \"act\") and (\"act\", \"linear\").\n    \"\"\"\n\n    def __init__(self,\n                 in_features: int,\n                 out_features: int,\n                 bias: bool = True,\n                 act_cfg: Optional[dict] = dict(type='ReLU'),\n                 inplace: bool = True,\n                 with_spectral_norm: bool = False,\n                 order: Tuple[str, str] = ('linear', 'act')):\n        super().__init__()\n        assert act_cfg is None or isinstance(act_cfg, dict)\n        self.act_cfg = act_cfg\n        self.inplace = inplace\n        self.with_spectral_norm = with_spectral_norm\n        self.order = order\n        assert isinstance(self.order, tuple) and len(self.order) == 2\n        assert set(order) == set(['linear', 'act'])\n\n        self.with_activation = act_cfg is not None\n        self.with_bias = bias\n\n        # build linear layer\n        self.linear = nn.Linear(in_features, out_features, bias=bias)\n        # export the attributes of self.linear to a higher level for\n        # convenience\n        self.in_features = self.linear.in_features\n        self.out_features = self.linear.out_features\n\n        if self.with_spectral_norm:\n            self.linear = nn.utils.spectral_norm(self.linear)\n\n        # build activation layer\n        if self.with_activation:\n            act_cfg_ = act_cfg.copy()\n            act_cfg_.setdefault('inplace', inplace)\n            self.activate = build_activation_layer(act_cfg_)\n\n        # Use msra init by default\n        self.init_weights()\n\n    def init_weights(self) -> None:\n        \"\"\"Init weights for the model.\"\"\"\n        if self.with_activation and self.act_cfg['type'] == 'LeakyReLU':\n            nonlinearity = 'leaky_relu'\n            a = self.act_cfg.get('negative_slope', 0.01)\n        else:\n            nonlinearity = 'relu'\n            a = 0\n\n        kaiming_init(self.linear, a=a, nonlinearity=nonlinearity)\n\n    def forward(self, x: Tensor, activate: Optional[bool] = True) -> Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of :math:`(n, *, c)`.\n                Same as ``torch.nn.Linear``.\n            activate (bool, optional): Whether to use activation layer.\n                Defaults to True.\n\n        Returns:\n            torch.Tensor: Same as ``torch.nn.Linear``.\n        \"\"\"\n        for layer in self.order:\n            if layer == 'linear':\n                x = self.linear(x)\n            elif layer == 'act' and activate and self.with_activation:\n                x = self.activate(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/archs/lora.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport re\nfrom typing import Any, List, Optional, Union\n\nimport torch.nn as nn\nfrom mmengine import print_log\nfrom torch import Tensor\n\n\nclass LoRALinear(nn.Module):\n    \"\"\"Linear layer for LoRA.\n\n    Args:\n        in_feat (int): Number of input features.\n        out_feat (int): Number of output features.\n        rank (int): The rank of LoRA.\n    \"\"\"\n\n    def __init__(self, in_feat: int, out_feat: int, rank: int = 4):\n        super().__init__()\n        self.rank = rank\n        assert rank < min(in_feat, out_feat)\n\n        self.down = nn.Linear(in_feat, rank, bias=False)\n        self.up = nn.Linear(rank, out_feat, bias=False)\n\n        nn.init.normal_(self.down.weight, std=1 / rank)\n        nn.init.zeros_(self.up.weight)\n\n    def forward(self, x: Tensor) -> Tensor:\n        ori_type = x.dtype\n        dtype = self.down.weight.dtype\n\n        out = self.down(x.to(dtype))\n        out = self.up(out)\n        return out.to(ori_type)\n\n\nclass LoRAWrapper(nn.Module):\n    \"\"\"Wrapper for LoRA layer.\n\n    Args:\n        module (nn.Module): The module to be wrapped.\n        in_feat (int): Number of input features.\n        out_feat (int): Number of output features.\n        rank (int): The rank of LoRA.\n        scale (float): The scale of LoRA feature.\n        names (Union[str, List[str]], optional): The name of LoRA layers. If\n            you want to add multi LoRA for one module, names for each LoRA\n            mapping must be defined.\n    \"\"\"\n\n    def __init__(self,\n                 module: nn.Module,\n                 in_feat: int,\n                 out_feat: int,\n                 rank: int,\n                 scale: float = 1,\n                 names: Optional[Union[str, List[str]]] = None):\n        super().__init__()\n\n        # NOTE: LoRA for linear layer, LoCON will coming soon~\n        assert isinstance(\n            module,\n            nn.Linear), ('Only Support LoRA for linear layer currently. '\n                         'LoCON will coming soon~')\n        self.wrapped = module\n\n        if names is not None:\n            # set a list of LoRAs\n            if not isinstance(names, list):\n                names = [names]\n            if isinstance(rank, list):\n                assert len(rank) == len(names)\n            else:\n                rank = [rank] * len(names)\n            if isinstance(scale, list):\n                assert len(scale) == len(names)\n            else:\n                scale = [scale] * len(names)\n\n            self.names = names\n            self.lora_mapping = dict()\n            self.scale = dict()\n            self.enable = dict()\n            self.rank = dict()\n            for n, r, s in zip(names, rank, scale):\n                self.lora_mapping[n] = LoRALinear(in_feat, out_feat, r)\n                self.scale_dict[n] = s\n                self.enable[n] = True\n                self.rank[n] = r\n            self.lora_mapping = nn.ModuleDict(self.lora_mapping)\n\n        else:\n            # set single LoRA\n            self.names = None\n            self.lora_mapping = LoRALinear(in_feat, out_feat, rank)\n            self.scale = scale\n            self.enable = True\n            self.rank = rank\n\n        self.in_feat, self.out_feat = in_feat, out_feat\n\n    def add_lora(self,\n                 name: str,\n                 rank: int,\n                 scale: float = 1,\n                 state_dict: Optional[dict] = None):\n        \"\"\"Add LoRA mapping.\n\n        Args:\n            name (str): The name of added LoRA.\n            rank (int): The rank of added LoRA.\n            scale (float, optional): The scale of added LoRA. Defaults to 1.\n            state_dict (dict, optional): The state dict of added LoRA.\n                Defaults to None.\n        \"\"\"\n        mapping_to_add = LoRALinear(self.in_feat, self.out_feat, rank)\n        if state_dict is not None:\n            mapping_to_add.load_state_dict(mapping_to_add)\n        # move to device and type\n        mapping_to_add.to(self.lora_mapping.weight.dtype)\n\n        if isinstance(self.names, list):\n            self.names.append(name)\n            self.lora_mapping[name] = mapping_to_add\n            self.scale[name] = scale\n            self.enable[name] = True\n            self.rank[name] = rank\n        else:\n            self.names = ['orig', name]\n            self.lora_mapping = nn.ModuleDict({\n                'orig': self.lora_mapping,\n                name: mapping_to_add\n            })\n            self.scale = {'orig': self.scale, name: scale}\n            self.enable = {'orig': self.enable, name: True}\n            self.rank = {'orig': self.rank, name: rank}\n            print_log(\n                'The original LoRA mapping do not have name, '\n                'save as \\'orig\\'.', 'current')\n        print_log(f'Add LoRA \\'{name}\\' with rank {rank} and scale {scale}.',\n                  'current')\n\n    def _set_value(self,\n                   attr_name: str,\n                   value: Any,\n                   name: Optional[str] = None):\n        \"\"\"Set value of attribute.\n\n        Args:\n            attr_name (str): The name of attribute to be set value.\n            value (Any): The value to be set.\n            name (str, optional): The name of field in `attr_name`. If\n                passed, will set value to `attr_name[name]`. Defaults to None.\n        \"\"\"\n        attr = getattr(self, attr_name)\n\n        if isinstance(attr, dict):\n            if name is None:\n                attr = {k: value for k in self.names}\n                print_log(f'Set all value in \\'{attr_name}\\' as \\'{value}\\'.',\n                          'current')\n            else:\n                attr[name] = value\n                print_log(f'Set \\'{attr_name}[{name}]\\' as \\'{value}\\'.',\n                          'current')\n        else:\n            attr = value\n            print_log(f'Set \\'{attr_name}\\' as \\'{value}\\'.', 'current')\n\n        setattr(self, attr_name, attr)\n\n    def set_scale(self, scale: float, name: Optional[str] = None):\n        \"\"\"Set LoRA scale.\n\n        Args:\n            scale (float): The scale to be set.\n            name (str, optional): The name of LoRA to be set. Defaults to None.\n        \"\"\"\n        self._set_value('scale', scale, name)\n\n    def set_enable(self, name: Optional[str] = None):\n        \"\"\"Enable LoRA for the current layer.\n\n        Args:\n            name (str, optional): The name of LoRA to be set. Defaults to None.\n        \"\"\"\n        self._set_value('enable', True, name)\n\n    def set_disable(self, name: Optional[str] = None):\n        \"\"\"Disable LoRA for the current layer.\n\n        Args:\n            name (str, optional): The name of LoRA to be set. Defaults to None.\n        \"\"\"\n        self._set_value('enable', False, name)\n\n    def forward_lora_mapping(self, x: Tensor) -> Tensor:\n        \"\"\"Forward LoRA mapping.\n\n        Args:\n            x (Tensor): The input tensor.\n\n        Returns:\n            Tensor: The output tensor.\n        \"\"\"\n        mapping_out = 0\n        if isinstance(self.lora_mapping, dict):\n            for name in self.names:\n                scale = self.scale[name]\n                mapping_layer = self.lora_mapping[name]\n                enable = self.enable[name]\n\n                if enable:\n                    mapping_out = scale * mapping_layer(x)\n        else:\n            if self.enable:\n                mapping_out = self.scale * self.lora_mapping(x)\n        return mapping_out\n\n    def forward(self, x: Tensor, *args, **kwargs) -> Tensor:\n        \"\"\"Forward and add LoRA mapping.\n\n        Args:\n            x (Tensor): The input tensor.\n\n        Returns:\n            Tensor: The output tensor.\n        \"\"\"\n        mapping_out = self.forward_lora_mapping(x)\n        return mapping_out + self.wrapped(x)\n\n    @classmethod\n    def wrap_lora(cls, module, rank=4, scale=1, names=None, state_dict=None):\n        \"\"\"Wrap LoRA.\n\n        Use case:\n        >>> linear = nn.Linear(2, 4)\n        >>> lora_linear = LoRAWrapper.wrap_lora(linear, 4, 1)\n\n        Args:\n            module (nn.Module): The module to add LoRA.\n            rank (int): The rank for LoRA.\n            scale (float):\n\n        Returns:\n            LoRAWrapper:\n        \"\"\"\n        assert isinstance(module,\n                          nn.Linear), 'Only support LoRA for Linear Layer'\n        in_feat = module.weight.shape[1]\n        out_feat = module.weight.shape[0]\n        lora = LoRAWrapper(module, in_feat, out_feat, rank, scale, names)\n\n        return lora\n\n\ndef replace_module(parent_module: nn.Module, child_name: str,\n                   new_module: nn.Module):\n    \"\"\"Replace module in parent module.\"\"\"\n    setattr(parent_module, child_name, new_module)\n\n\ndef get_submodule(module: nn.Module, key: str):\n    \"\"\"Get submodule by key.\"\"\"\n    target_name = key.split('.')[-1]\n    parent = module.get_submodule('.'.join(key.split('.')[:-1]))\n    target = module.get_submodule(key)\n    return parent, target, target_name\n\n\ndef set_lora(module: nn.Module,\n             config: dict,\n             verbose: bool = True) -> nn.Module:\n    \"\"\"Set LoRA for module.\n\n    Use case:\n    >>> 1. set all lora with same parameters\n    >>> lora_config = dict(\n    >>>     rank=4,\n    >>>     scale=1,\n    >>>     target_modules=['to_q', 'to_k', 'to_v'])\n\n    >>> 2. set lora with different parameters\n    >>> lora_config = dict(\n    >>>     rank=4,\n    >>>     scale=1,\n    >>>     target_modules=[\n    >>>         # set `to_q` the default parameters\n    >>>         'to_q',\n    >>>         # set `to_k` the defined parameters\n    >>>         dict(target_module='to_k', rank=8, scale=1),\n    >>>         # set `to_v` the defined `rank` and default `scale`\n    >>>         dict(target_module='to_v', rank=16)\n    >>>     ])\n\n    Args:\n        module (nn.Module): The module to set LoRA.\n        config (dict): The config dict.\n        verbose (bool): Whether to print log. Defaults to True.\n    \"\"\"\n    default_rank = config.get('rank', 4)\n    default_scale = config.get('scale', 1)\n    target_modules = config['target_modules']\n    if not isinstance(target_modules, list):\n        target_modules = [target_modules]\n\n    keys = [k for k, _ in module.named_modules()]\n\n    for k in keys:\n        for target_module in target_modules:\n            if isinstance(target_module, str):\n                module_name = target_module\n                rank = default_rank\n                scale = default_scale\n                # pretrained_path = None\n\n            elif isinstance(target_module, dict):\n                module_name = target_module['target_module']\n                rank = target_module.get('rank', default_rank)\n                scale = target_module.get('scale', default_scale)\n                # pretrained_path = target_module.get('pretrained_path', None)\n\n            else:\n                raise TypeError('Only support dict or string type for '\n                                'target_modules')\n            # match keys\n            if re.fullmatch(module_name, k):\n                if verbose:\n                    print_log(\n                        f'Set LoRA for \\'{k}\\' with '\n                        f'regularization expression match \\'{module_name}\\'.',\n                        'current')\n            elif k.endswith(module_name):\n                if verbose:\n                    print_log(\n                        f'Set LoRA for \\'{k}\\' with '\n                        f'suffix match \\'{module_name}\\'.', 'current')\n            else:\n                continue\n\n            parent, target, target_name = get_submodule(module, k)\n            new_module = LoRAWrapper.wrap_lora(target, rank=rank, scale=scale)\n            replace_module(parent, target_name, new_module)\n    return module\n\n\ndef set_only_lora_trainable(module: nn.Module) -> nn.Module:\n    \"\"\"Set only LoRA modules trainable.\"\"\"\n    for n, m in module.named_children():\n        if isinstance(m, LoRAWrapper):\n            m.lora_mapping.requires_grad_(True)\n        elif isinstance(m, nn.Module):\n            m.requires_grad_(False)\n            set_only_lora_trainable(m)\n\n    return module\n\n\ndef set_lora_enable(module: nn.Module) -> nn.Module:\n    \"\"\"Enable LoRA modules.\"\"\"\n    for n, m in module.named_children():\n        if isinstance(m, LoRAWrapper):\n            m.set_enable()\n        elif isinstance(m, nn.Module):\n            set_lora_enable(m)\n    return module\n\n\ndef set_lora_disable(module: nn.Module) -> nn.Module:\n    \"\"\"Disable LoRA modules.\"\"\"\n    for n, m in module.named_children():\n        if isinstance(m, LoRAWrapper):\n            m.set_disable()\n        elif isinstance(m, nn.Module):\n            set_lora_disable(m)\n    return module\n"
  },
  {
    "path": "mmagic/models/archs/multi_layer_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine import MMLogger\nfrom mmengine.runner import load_checkpoint\nfrom torch import Tensor\n\nfrom mmagic.models.archs import LinearModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass MultiLayerDiscriminator(nn.Module):\n    \"\"\"Multilayer Discriminator.\n\n    This is a commonly used structure with stacked multiply convolution layers.\n\n    Args:\n        in_channels (int): Input channel of the first input convolution.\n        max_channels (int): The maximum channel number in this structure.\n        num_conv (int): Number of stacked intermediate convs (including input\n            conv but excluding output conv). Default to 5.\n        fc_in_channels (int | None): Input dimension of the fully connected\n            layer. If `fc_in_channels` is None, the fully connected layer will\n            be removed. Default to None.\n        fc_out_channels (int): Output dimension of the fully connected layer.\n            Default to 1024.\n        kernel_size (int): Kernel size of the conv modules. Default to 5.\n        conv_cfg (dict): Config dict to build conv layer.\n        norm_cfg (dict): Config dict to build norm layer.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n        out_act_cfg (dict): Config dict for output activation, \"relu\" by\n            default.\n        with_input_norm (bool): Whether add normalization after the input conv.\n            Default to True.\n        with_out_convs (bool): Whether add output convs to the discriminator.\n            The output convs contain two convs. The first out conv has the same\n            setting as the intermediate convs but a stride of 1 instead of 2.\n            The second out conv is a conv similar to the first out conv but\n            reduces the number of channels to 1 and has no activation layer.\n            Default to False.\n        with_spectral_norm (bool): Whether use spectral norm after the conv\n            layers. Default to False.\n        kwargs (keyword arguments).\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 max_channels: int,\n                 num_convs: int = 5,\n                 fc_in_channels: Optional[int] = None,\n                 fc_out_channels: int = 1024,\n                 kernel_size: int = 5,\n                 conv_cfg: Optional[dict] = None,\n                 norm_cfg: Optional[dict] = None,\n                 act_cfg: Optional[dict] = dict(type='ReLU'),\n                 out_act_cfg: Optional[dict] = dict(type='ReLU'),\n                 with_input_norm: bool = True,\n                 with_out_convs: bool = False,\n                 with_spectral_norm: bool = False,\n                 **kwargs):\n        super().__init__()\n        if fc_in_channels is not None:\n            assert fc_in_channels > 0\n\n        self.max_channels = max_channels\n        self.with_fc = fc_in_channels is not None\n        self.num_convs = num_convs\n        self.with_out_act = out_act_cfg is not None\n        self.with_out_convs = with_out_convs\n\n        cur_channels = in_channels\n        for i in range(num_convs):\n            out_ch = min(64 * 2**i, max_channels)\n            norm_cfg_ = norm_cfg\n            act_cfg_ = act_cfg\n            if i == 0 and not with_input_norm:\n                norm_cfg_ = None\n            elif (i == num_convs - 1 and not self.with_fc\n                  and not self.with_out_convs):\n                norm_cfg_ = None\n                act_cfg_ = out_act_cfg\n            self.add_module(\n                f'conv{i + 1}',\n                ConvModule(\n                    cur_channels,\n                    out_ch,\n                    kernel_size=kernel_size,\n                    stride=2,\n                    padding=kernel_size // 2,\n                    norm_cfg=norm_cfg_,\n                    act_cfg=act_cfg_,\n                    with_spectral_norm=with_spectral_norm,\n                    **kwargs))\n            cur_channels = out_ch\n\n        if self.with_out_convs:\n            cur_channels = min(64 * 2**(num_convs - 1), max_channels)\n            out_ch = min(64 * 2**num_convs, max_channels)\n            self.add_module(\n                f'conv{num_convs + 1}',\n                ConvModule(\n                    cur_channels,\n                    out_ch,\n                    kernel_size,\n                    stride=1,\n                    padding=kernel_size // 2,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    with_spectral_norm=with_spectral_norm,\n                    **kwargs))\n            self.add_module(\n                f'conv{num_convs + 2}',\n                ConvModule(\n                    out_ch,\n                    1,\n                    kernel_size,\n                    stride=1,\n                    padding=kernel_size // 2,\n                    act_cfg=None,\n                    with_spectral_norm=with_spectral_norm,\n                    **kwargs))\n\n        if self.with_fc:\n            self.fc = LinearModule(\n                fc_in_channels,\n                fc_out_channels,\n                bias=True,\n                act_cfg=out_act_cfg,\n                with_spectral_norm=with_spectral_norm)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w') or (n, c).\n        \"\"\"\n        input_size = x.size()\n        # out_convs has two additional ConvModules\n        num_convs = self.num_convs + 2 * self.with_out_convs\n        for i in range(num_convs):\n            x = getattr(self, f'conv{i + 1}')(x)\n\n        if self.with_fc:\n            x = x.view(input_size[0], -1)\n            x = self.fc(x)\n\n        return x\n\n    def init_weights(self, pretrained: Optional[str] = None) -> None:\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                # Here, we only initialize the module with fc layer since the\n                # conv and norm layers has been initialized in `ConvModule`.\n                if isinstance(m, nn.Linear):\n                    nn.init.normal_(m.weight.data, 0.0, 0.02)\n                    nn.init.constant_(m.bias.data, 0.0)\n        else:\n            raise TypeError('pretrained must be a str or None')\n"
  },
  {
    "path": "mmagic/models/archs/patch_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule, build_conv_layer\nfrom mmengine.model import BaseModule\nfrom torch import Tensor\n\nfrom mmagic.models.utils import generation_init_weights\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass PatchDiscriminator(BaseModule):\n    \"\"\"A PatchGAN discriminator.\n\n    Args:\n        in_channels (int): Number of channels in input images.\n        base_channels (int): Number of channels at the first conv layer.\n            Default: 64.\n        num_conv (int): Number of stacked intermediate convs (excluding input\n            and output conv). Default: 3.\n        norm_cfg (dict): Config dict to build norm layer. Default:\n            `dict(type='BN')`.\n        init_cfg (dict): Config dict for initialization.\n            `type`: The name of our initialization method. Default: 'normal'.\n            `gain`: Scaling factor for normal, xavier and orthogonal.\n            Default: 0.02.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 base_channels: int = 64,\n                 num_conv: int = 3,\n                 norm_cfg: dict = dict(type='BN'),\n                 init_cfg: Optional[dict] = dict(type='normal', gain=0.02)):\n        super().__init__(init_cfg=init_cfg)\n        assert isinstance(norm_cfg, dict), (\"'norm_cfg' should be dict, but\"\n                                            f'got {type(norm_cfg)}')\n        assert 'type' in norm_cfg, \"'norm_cfg' must have key 'type'\"\n        # We use norm layers in the patch discriminator.\n        # Only for IN, use bias since it does not have affine parameters.\n        use_bias = norm_cfg['type'] == 'IN'\n\n        kernel_size = 4\n        padding = 1\n\n        # input layer\n        sequence = [\n            ConvModule(\n                in_channels=in_channels,\n                out_channels=base_channels,\n                kernel_size=kernel_size,\n                stride=2,\n                padding=padding,\n                bias=True,\n                norm_cfg=None,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n        ]\n\n        # stacked intermediate layers,\n        # gradually increasing the number of filters\n        multiple_now = 1\n        multiple_prev = 1\n        for n in range(1, num_conv):\n            multiple_prev = multiple_now\n            multiple_now = min(2**n, 8)\n            sequence += [\n                ConvModule(\n                    in_channels=base_channels * multiple_prev,\n                    out_channels=base_channels * multiple_now,\n                    kernel_size=kernel_size,\n                    stride=2,\n                    padding=padding,\n                    bias=use_bias,\n                    norm_cfg=norm_cfg,\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n            ]\n        multiple_prev = multiple_now\n        multiple_now = min(2**num_conv, 8)\n        sequence += [\n            ConvModule(\n                in_channels=base_channels * multiple_prev,\n                out_channels=base_channels * multiple_now,\n                kernel_size=kernel_size,\n                stride=1,\n                padding=padding,\n                bias=use_bias,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n        ]\n\n        # output one-channel prediction map\n        sequence += [\n            build_conv_layer(\n                dict(type='Conv2d'),\n                base_channels * multiple_now,\n                1,\n                kernel_size=kernel_size,\n                stride=1,\n                padding=padding)\n        ]\n\n        self.model = nn.Sequential(*sequence)\n        self.init_type = 'normal' if init_cfg is None else init_cfg.get(\n            'type', 'normal')\n        self.init_gain = 0.02 if init_cfg is None else init_cfg.get(\n            'gain', 0.02)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.model(x)\n\n    def init_weights(self) -> None:\n        \"\"\"Initialize weights for the model.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Default: None.\n        \"\"\"\n        if self.init_cfg is None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        generation_init_weights(\n            self, init_type=self.init_type, init_gain=self.init_gain)\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/archs/resnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Sequence\n\nimport torch.nn as nn\nimport torch.utils.checkpoint as cp\nfrom mmcv.cnn import build_activation_layer, build_conv_layer, build_norm_layer\nfrom mmengine import MMLogger\nfrom mmengine.model.weight_init import constant_init, kaiming_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\nfrom torch import Tensor\n\n\nclass BasicBlock(nn.Module):\n    \"\"\"Basic block for ResNet.\n\n    Args:\n        inplanes (int): Number of input channels.\n        planes (int): Number of output channels.\n        stride (int): Stride of the first block of one stage. Default: 1.\n        dilation (int): Dilation of one stage. Default: 1.\n        downsample (nn.Module): Downsample module. Default: None.\n        act_cfg (dict): Dictionary to construct and config activation layer.\n            Default: dict(type='ReLU').\n        conv_cfg (dict): Dictionary to construct and config convolution layer.\n            Default: None.\n        norm_cfg (dict): Dictionary to construct and config norm layer.\n            Default: dict(type='BN').\n        with_cp (bool): Use checkpoint or not. Using checkpoint will save some\n            memory while slowing down the training speed. Default: False.\n    \"\"\"\n\n    expansion = 1\n\n    def __init__(self,\n                 inplanes: int,\n                 planes: int,\n                 stride: int = 1,\n                 dilation: int = 1,\n                 downsample: Optional[nn.Module] = None,\n                 act_cfg: dict = dict(type='ReLU'),\n                 conv_cfg: Optional[dict] = None,\n                 norm_cfg: dict = dict(type='BN'),\n                 with_cp: bool = False):\n        super(BasicBlock, self).__init__()\n\n        self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1)\n        self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2)\n\n        self.conv1 = build_conv_layer(\n            conv_cfg,\n            inplanes,\n            planes,\n            3,\n            stride=stride,\n            padding=dilation,\n            dilation=dilation,\n            bias=False)\n        self.add_module(self.norm1_name, norm1)\n        self.conv2 = build_conv_layer(\n            conv_cfg, planes, planes, 3, padding=1, bias=False)\n        self.add_module(self.norm2_name, norm2)\n\n        self.activate = build_activation_layer(act_cfg)\n        self.downsample = downsample\n        self.stride = stride\n        self.dilation = dilation\n        self.with_cp = with_cp\n\n    @property\n    def norm1(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the first convolution layer\"\"\"\n        return getattr(self, self.norm1_name)\n\n    @property\n    def norm2(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the second convolution layer\"\"\"\n        return getattr(self, self.norm2_name)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\"\"\"\n\n        def _inner_forward(x: Tensor) -> Tensor:\n            identity = x\n\n            out = self.conv1(x)\n            out = self.norm1(out)\n            out = self.activate(out)\n\n            out = self.conv2(out)\n            out = self.norm2(out)\n\n            if self.downsample is not None:\n                identity = self.downsample(x)\n\n            out += identity\n\n            return out\n\n        if self.with_cp and x.requires_grad:\n            out = cp.checkpoint(_inner_forward, x)\n        else:\n            out = _inner_forward(x)\n\n        out = self.activate(out)\n\n        return out\n\n\nclass Bottleneck(nn.Module):\n    \"\"\"Bottleneck block for ResNet.\n\n    Args:\n        inplanes (int): Number of input channels.\n        planes (int): Number of output channels.\n        stride (int): Stride of the first block of one stage. Default: 1.\n        dilation (int): Dilation of one stage. Default: 1.\n        downsample (nn.Module): Downsample module. Default: None.\n        act_cfg (dict): Dictionary to construct and config activation layer.\n            Default: dict(type='ReLU').\n        conv_cfg (dict): Dictionary to construct and config convolution layer.\n            Default: None.\n        norm_cfg (dict): Dictionary to construct and config norm layer.\n            Default: dict(type='BN').\n        with_cp (bool): Use checkpoint or not. Using checkpoint will save some\n            memory while slowing down the training speed. Default: False.\n    \"\"\"\n\n    expansion = 4\n\n    def __init__(self,\n                 inplanes: int,\n                 planes: int,\n                 stride: int = 1,\n                 dilation: int = 1,\n                 downsample: Optional[nn.Module] = None,\n                 act_cfg: dict = dict(type='ReLU'),\n                 conv_cfg: Optional[dict] = None,\n                 norm_cfg: dict = dict(type='BN'),\n                 with_cp: bool = False):\n        super(Bottleneck, self).__init__()\n\n        self.inplanes = inplanes\n        self.planes = planes\n        self.stride = stride\n        self.dilation = dilation\n        self.act_cfg = act_cfg\n        self.conv_cfg = conv_cfg\n        self.norm_cfg = norm_cfg\n        self.conv1_stride = 1\n        self.conv2_stride = stride\n        self.with_cp = with_cp\n\n        self.norm1_name, norm1 = build_norm_layer(norm_cfg, planes, postfix=1)\n        self.norm2_name, norm2 = build_norm_layer(norm_cfg, planes, postfix=2)\n        self.norm3_name, norm3 = build_norm_layer(\n            norm_cfg, planes * self.expansion, postfix=3)\n\n        self.conv1 = build_conv_layer(\n            conv_cfg,\n            inplanes,\n            planes,\n            kernel_size=1,\n            stride=self.conv1_stride,\n            bias=False)\n        self.add_module(self.norm1_name, norm1)\n\n        self.conv2 = build_conv_layer(\n            conv_cfg,\n            planes,\n            planes,\n            kernel_size=3,\n            stride=self.conv2_stride,\n            padding=dilation,\n            dilation=dilation,\n            bias=False)\n\n        self.add_module(self.norm2_name, norm2)\n        self.conv3 = build_conv_layer(\n            conv_cfg,\n            planes,\n            planes * self.expansion,\n            kernel_size=1,\n            bias=False)\n        self.add_module(self.norm3_name, norm3)\n\n        self.activate = build_activation_layer(act_cfg)\n        self.downsample = downsample\n\n    @property\n    def norm1(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the first convolution layer\"\"\"\n        return getattr(self, self.norm1_name)\n\n    @property\n    def norm2(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the second convolution layer\"\"\"\n        return getattr(self, self.norm2_name)\n\n    @property\n    def norm3(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the second convolution layer\"\"\"\n        return getattr(self, self.norm3_name)\n\n    def forward(self, x: Tensor) -> Tensor:\n        identity = x\n\n        out = self.conv1(x)\n        out = self.norm1(out)\n        out = self.activate(out)\n\n        out = self.conv2(out)\n        out = self.norm2(out)\n        out = self.activate(out)\n\n        out = self.conv3(out)\n        out = self.norm3(out)\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.activate(out)\n\n        return out\n\n\nclass ResNet(nn.Module):\n    \"\"\"General ResNet.\n\n    This class is adopted from\n    https://github.com/open-mmlab/mmsegmentation/blob/master/mmseg/models/backbones/resnet.py.\n\n    Args:\n        depth (int): Depth of resnet, from {18, 34, 50, 101, 152}.\n        in_channels (int): Number of input image channels. Default\" 3.\n        stem_channels (int): Number of stem channels. Default: 64.\n        base_channels (int): Number of base channels of res layer. Default: 64.\n        num_stages (int): Resnet stages, normally 4.\n        strides (Sequence[int]): Strides of the first block of each stage.\n            Default: (1, 2, 2, 2).\n        dilations (Sequence[int]): Dilation of each stage.\n            Default: (1, 1, 2, 4).\n        deep_stem (bool): Replace 7x7 conv in input stem with 3 3x3 conv.\n            Default: False.\n        avg_down (bool): Use AvgPool instead of stride conv when\n            downsampling in the bottleneck. Default: False.\n        frozen_stages (int): Stages to be frozen (stop grad and set eval mode).\n            -1 means not freezing any parameters. Default: -1.\n        act_cfg (dict): Dictionary to construct and config activation layer.\n            Default: dict(type='ReLU').\n        conv_cfg (dict): Dictionary to construct and config convolution layer.\n            Default: None.\n        norm_cfg (dict): Dictionary to construct and config norm layer.\n            Default: dict(type='BN').\n        with_cp (bool): Use checkpoint or not. Using checkpoint will save some\n            memory while slowing down the training speed. Default: False.\n        multi_grid (Sequence[int]|None): Multi grid dilation rates of last\n            stage. Default: None.\n        contract_dilation (bool): Whether contract first dilation of each layer\n            Default: False.\n        zero_init_residual (bool): Whether to use zero init for last norm layer\n            in resblocks to let them behave as identity. Default: True.\n    \"\"\"\n\n    arch_settings = {\n        18: (BasicBlock, (2, 2, 2, 2)),\n        34: (BasicBlock, (3, 4, 6, 3)),\n        50: (Bottleneck, (3, 4, 6, 3)),\n        101: (Bottleneck, (3, 4, 23, 3)),\n        152: (Bottleneck, (3, 8, 36, 3))\n    }\n\n    def __init__(self,\n                 depth: int,\n                 in_channels: int = 3,\n                 stem_channels: int = 64,\n                 base_channels: int = 64,\n                 num_stages: int = 4,\n                 strides: Sequence[int] = (1, 2, 2, 2),\n                 dilations: Sequence[int] = (1, 1, 2, 4),\n                 deep_stem: bool = False,\n                 avg_down: bool = False,\n                 frozen_stages: int = -1,\n                 act_cfg: dict = dict(type='ReLU'),\n                 conv_cfg: Optional[dict] = None,\n                 norm_cfg: dict = dict(type='BN'),\n                 with_cp: bool = False,\n                 multi_grid: Optional[Sequence[int]] = None,\n                 contract_dilation: bool = False,\n                 zero_init_residual: bool = True):\n        super(ResNet, self).__init__()\n        from functools import partial\n\n        if depth not in self.arch_settings:\n            raise KeyError(f'invalid depth {depth} for resnet')\n        self.block, stage_blocks = self.arch_settings[depth]\n        self.depth = depth\n        self.inplanes = stem_channels\n        self.stem_channels = stem_channels\n        self.base_channels = base_channels\n        self.num_stages = num_stages\n        assert num_stages >= 1 and num_stages <= 4\n\n        self.strides = strides\n        self.dilations = dilations\n        assert len(strides) == len(dilations) == num_stages\n\n        self.deep_stem = deep_stem\n        self.avg_down = avg_down\n        self.frozen_stages = frozen_stages\n\n        self.conv_cfg = conv_cfg\n        self.act_cfg = act_cfg\n        self.norm_cfg = norm_cfg\n\n        self.with_cp = with_cp\n        self.multi_grid = multi_grid\n        self.contract_dilation = contract_dilation\n        self.zero_init_residual = zero_init_residual\n\n        self._make_stem_layer(in_channels, stem_channels)\n\n        self.layer1 = self._make_layer(\n            self.block, 64, stage_blocks[0], stride=strides[0])\n        self.layer2 = self._make_layer(\n            self.block, 128, stage_blocks[1], stride=strides[1])\n        self.layer3 = self._make_layer(\n            self.block, 256, stage_blocks[2], stride=strides[2])\n        self.layer4 = self._make_layer(\n            self.block, 512, stage_blocks[3], stride=strides[3])\n\n        self.layer1.apply(partial(self._nostride_dilate, dilate=dilations[0]))\n        self.layer2.apply(partial(self._nostride_dilate, dilate=dilations[1]))\n        self.layer3.apply(partial(self._nostride_dilate, dilate=dilations[2]))\n        self.layer4.apply(partial(self._nostride_dilate, dilate=dilations[3]))\n\n        self._freeze_stages()\n\n    def _make_stem_layer(self, in_channels: int, stem_channels: int) -> None:\n        \"\"\"Make stem layer for ResNet.\"\"\"\n        if self.deep_stem:\n            self.stem = nn.Sequential(\n                build_conv_layer(\n                    self.conv_cfg,\n                    in_channels,\n                    stem_channels // 2,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    bias=False),\n                build_norm_layer(self.norm_cfg, stem_channels // 2)[1],\n                build_activation_layer(self.act_cfg),\n                build_conv_layer(\n                    self.conv_cfg,\n                    stem_channels // 2,\n                    stem_channels // 2,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1,\n                    bias=False),\n                build_norm_layer(self.norm_cfg, stem_channels // 2)[1],\n                build_activation_layer(self.act_cfg),\n                build_conv_layer(\n                    self.conv_cfg,\n                    stem_channels // 2,\n                    stem_channels,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1,\n                    bias=False),\n                build_norm_layer(self.norm_cfg, stem_channels)[1],\n                build_activation_layer(self.act_cfg))\n        else:\n            self.conv1 = build_conv_layer(\n                self.conv_cfg,\n                in_channels,\n                stem_channels,\n                kernel_size=7,\n                stride=2,\n                padding=3,\n                bias=False)\n            self.norm1_name, norm1 = build_norm_layer(\n                self.norm_cfg, stem_channels, postfix=1)\n            self.add_module(self.norm1_name, norm1)\n            self.activate = build_activation_layer(self.act_cfg)\n        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n\n    @property\n    def norm1(self) -> nn.Module:\n        \"\"\"nn.Module: normalization layer after the second convolution layer\"\"\"\n        return getattr(self, self.norm1_name)\n\n    def _make_layer(self,\n                    block: BasicBlock,\n                    planes: int,\n                    blocks: int,\n                    stride: int = 1,\n                    dilation: int = 1) -> nn.Module:\n        downsample = None\n        if stride != 1 or self.inplanes != planes * block.expansion:\n            downsample = nn.Sequential(\n                build_conv_layer(\n                    self.conv_cfg,\n                    self.inplanes,\n                    planes * block.expansion,\n                    stride=stride,\n                    kernel_size=1,\n                    dilation=dilation,\n                    bias=False),\n                build_norm_layer(self.norm_cfg, planes * block.expansion)[1])\n\n        layers = []\n        layers.append(\n            block(\n                self.inplanes,\n                planes,\n                stride,\n                downsample=downsample,\n                norm_cfg=self.norm_cfg,\n                act_cfg=self.act_cfg,\n                conv_cfg=self.conv_cfg))\n        self.inplanes = planes * block.expansion\n        for _ in range(1, blocks):\n            layers.append(\n                block(\n                    self.inplanes,\n                    planes,\n                    norm_cfg=self.norm_cfg,\n                    act_cfg=self.act_cfg,\n                    conv_cfg=self.conv_cfg))\n\n        return nn.Sequential(*layers)\n\n    def _nostride_dilate(self, m: nn.Module, dilate: int) -> None:\n        classname = m.__class__.__name__\n        if classname.find('Conv') != -1 and dilate > 1:\n            # the convolution with stride\n\n            if m.stride == (2, 2):\n                m.stride = (1, 1)\n                if m.kernel_size == (3, 3):\n                    m.dilation = (dilate // 2, dilate // 2)\n                    m.padding = (dilate // 2, dilate // 2)\n            # other convolutions\n            else:\n                if m.kernel_size == (3, 3):\n                    m.dilation = (dilate, dilate)\n                    m.padding = (dilate, dilate)\n\n    def init_weights(self, pretrained: Optional[str] = None) -> None:\n        \"\"\"Init weights for the model.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    kaiming_init(m)\n                elif isinstance(m, (_BatchNorm, nn.GroupNorm)):\n                    constant_init(m, 1)\n            if self.zero_init_residual:\n\n                for m in self.modules():\n                    if isinstance(m, Bottleneck):\n                        constant_init(m.norm3, 0)\n                    elif isinstance(m, BasicBlock):\n                        constant_init(m.norm2, 0)\n        else:\n            raise TypeError('pretrained must be a str or None')\n\n    def _freeze_stages(self) -> None:\n        \"\"\"Freeze stages param and norm stats.\"\"\"\n        if self.frozen_stages >= 0:\n            if self.deep_stem:\n                self.stem.eval()\n                for param in self.stem.parameters():\n                    param.requires_grad = False\n            else:\n                self.norm1.eval()\n                for m in [self.conv1, self.norm1]:\n                    for param in m.parameters():\n                        param.requires_grad = False\n\n        for i in range(1, self.frozen_stages + 1):\n            m = getattr(self, f'layer{i}')\n            m.eval()\n            for param in m.parameters():\n                param.requires_grad = False\n\n    def forward(self, x: Tensor) -> List[Tensor]:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        conv_out = [x]\n        if self.deep_stem:\n            x = self.stem(x)\n        else:\n            x = self.conv1(x)\n            x = self.norm1(x)\n            x = self.activate(x)\n        conv_out.append(x)\n        x = self.maxpool(x)\n        x = self.layer1(x)\n        conv_out.append(x)\n        x = self.layer2(x)\n        conv_out.append(x)\n        x = self.layer3(x)\n        conv_out.append(x)\n        x = self.layer4(x)\n        conv_out.append(x)\n        return conv_out\n"
  },
  {
    "path": "mmagic/models/archs/separable_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Tuple, Union\n\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom torch import Tensor\n\n\nclass DepthwiseSeparableConvModule(nn.Module):\n    \"\"\"Depthwise separable convolution module.\n\n    See https://arxiv.org/pdf/1704.04861.pdf for details.\n\n    This module can replace a ConvModule with the conv block replaced by two\n    conv block: depthwise conv block and pointwise conv block. The depthwise\n    conv block contains depthwise-conv/norm/activation layers. The pointwise\n    conv block contains pointwise-conv/norm/activation layers. It should be\n    noted that there will be norm/activation layer in the depthwise conv block\n    if ``norm_cfg`` and ``act_cfg`` are specified.\n\n    Args:\n        in_channels (int): Same as nn.Conv2d.\n        out_channels (int): Same as nn.Conv2d.\n        kernel_size (int or tuple[int]): Same as nn.Conv2d.\n        stride (int or tuple[int]): Same as nn.Conv2d. Default: 1.\n        padding (int or tuple[int]): Same as nn.Conv2d. Default: 0.\n        dilation (int or tuple[int]): Same as nn.Conv2d. Default: 1.\n        norm_cfg (dict): Default norm config for both depthwise ConvModule and\n            pointwise ConvModule. Default: None.\n        act_cfg (dict): Default activation config for both depthwise ConvModule\n            and pointwise ConvModule. Default: dict(type='ReLU').\n        dw_norm_cfg (dict): Norm config of depthwise ConvModule. If it is\n            'default', it will be the same as ``norm_cfg``. Default: 'default'.\n        dw_act_cfg (dict): Activation config of depthwise ConvModule. If it is\n            'default', it will be the same as ``act_cfg``. Default: 'default'.\n        pw_norm_cfg (dict): Norm config of pointwise ConvModule. If it is\n            'default', it will be the same as `norm_cfg`. Default: 'default'.\n        pw_act_cfg (dict): Activation config of pointwise ConvModule. If it is\n            'default', it will be the same as ``act_cfg``. Default: 'default'.\n        kwargs (optional): Other shared arguments for depthwise and pointwise\n            ConvModule. See ConvModule for ref.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 out_channels: int,\n                 kernel_size: Union[int, Tuple[int, int]],\n                 stride: Union[int, Tuple[int, int]] = 1,\n                 padding: Union[int, Tuple[int, int]] = 0,\n                 dilation: Union[int, Tuple[int, int]] = 1,\n                 norm_cfg: Optional[dict] = None,\n                 act_cfg: Optional[dict] = dict(type='ReLU'),\n                 dw_norm_cfg: Union[dict, str] = 'default',\n                 dw_act_cfg: Union[dict, str] = 'default',\n                 pw_norm_cfg: Union[dict, str] = 'default',\n                 pw_act_cfg: Union[dict, str] = 'default',\n                 **kwargs):\n        super().__init__()\n        assert 'groups' not in kwargs, 'groups should not be specified'\n\n        # if norm/activation config of depthwise/pointwise ConvModule is not\n        # specified, use default config.\n        dw_norm_cfg = dw_norm_cfg if dw_norm_cfg != 'default' else norm_cfg\n        dw_act_cfg = dw_act_cfg if dw_act_cfg != 'default' else act_cfg\n        pw_norm_cfg = pw_norm_cfg if pw_norm_cfg != 'default' else norm_cfg\n        pw_act_cfg = pw_act_cfg if pw_act_cfg != 'default' else act_cfg\n\n        # depthwise convolution\n        self.depthwise_conv = ConvModule(\n            in_channels,\n            in_channels,\n            kernel_size,\n            stride=stride,\n            padding=padding,\n            dilation=dilation,\n            groups=in_channels,\n            norm_cfg=dw_norm_cfg,\n            act_cfg=dw_act_cfg,\n            **kwargs)\n\n        self.pointwise_conv = ConvModule(\n            in_channels,\n            out_channels,\n            1,\n            norm_cfg=pw_norm_cfg,\n            act_cfg=pw_act_cfg,\n            **kwargs)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        x = self.depthwise_conv(x)\n        x = self.pointwise_conv(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/archs/simple_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nfrom mmengine.model import BaseModule\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SimpleEncoderDecoder(BaseModule):\n    \"\"\"Simple encoder-decoder model from matting.\n\n    Args:\n        encoder (dict): Config of the encoder.\n        decoder (dict): Config of the decoder.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 encoder: dict,\n                 decoder: dict,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg)\n\n        self.encoder = MODELS.build(encoder)\n        if hasattr(self.encoder, 'out_channels'):\n            decoder['in_channels'] = self.encoder.out_channels\n        self.decoder = MODELS.build(decoder)\n\n    def forward(self, *args, **kwargs) -> Tensor:\n        \"\"\"Forward function.\n\n        Returns:\n            Tensor: The output tensor of the decoder.\n        \"\"\"\n        out = self.encoder(*args, **kwargs)\n        out = self.decoder(out)\n        return out\n"
  },
  {
    "path": "mmagic/models/archs/smpatch_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\nfrom torch import Tensor\n\nfrom mmagic.models.utils import generation_init_weights\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SoftMaskPatchDiscriminator(BaseModule):\n    \"\"\"A Soft Mask-Guided PatchGAN discriminator.\n\n    Args:\n        in_channels (int): Number of channels in input images.\n        base_channels (int, optional): Number of channels at the\n            first conv layer. Default: 64.\n        num_conv (int, optional): Number of stacked intermediate convs\n            (excluding input and output conv). Default: 3.\n        norm_cfg (dict, optional): Config dict to build norm layer.\n            Default: None.\n        init_cfg (dict, optional): Config dict for initialization.\n            `type`: The name of our initialization method. Default: 'normal'.\n            `gain`: Scaling factor for normal, xavier and orthogonal.\n            Default: 0.02.\n        with_spectral_norm (bool, optional): Whether use spectral norm\n            after the conv layers. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 base_channels: Optional[int] = 64,\n                 num_conv: Optional[int] = 3,\n                 norm_cfg: Optional[dict] = None,\n                 init_cfg: Optional[dict] = dict(type='normal', gain=0.02),\n                 with_spectral_norm: Optional[bool] = False):\n        super().__init__()\n\n        kernel_size = 4\n        padding = 1\n\n        # input layer\n        sequence = [\n            ConvModule(\n                in_channels=in_channels,\n                out_channels=base_channels,\n                kernel_size=kernel_size,\n                stride=2,\n                padding=padding,\n                bias=False,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                with_spectral_norm=with_spectral_norm)\n        ]\n\n        # stacked intermediate layers,\n        # gradually increasing the number of filters\n        multiplier_in = 1\n        multiplier_out = 1\n        for n in range(1, num_conv):\n            multiplier_in = multiplier_out\n            multiplier_out = min(2**n, 8)\n            sequence += [\n                ConvModule(\n                    in_channels=base_channels * multiplier_in,\n                    out_channels=base_channels * multiplier_out,\n                    kernel_size=kernel_size,\n                    stride=2,\n                    padding=padding,\n                    bias=False,\n                    norm_cfg=norm_cfg,\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                    with_spectral_norm=with_spectral_norm)\n            ]\n        multiplier_in = multiplier_out\n        multiplier_out = min(2**num_conv, 8)\n        sequence += [\n            ConvModule(\n                in_channels=base_channels * multiplier_in,\n                out_channels=base_channels * multiplier_out,\n                kernel_size=kernel_size,\n                stride=1,\n                padding=padding,\n                bias=False,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                with_spectral_norm=with_spectral_norm)\n        ]\n\n        # output one-channel prediction map\n        sequence += [\n            nn.Conv2d(\n                base_channels * multiplier_out,\n                1,\n                kernel_size=kernel_size,\n                stride=1,\n                padding=padding)\n        ]\n\n        self.model = nn.Sequential(*sequence)\n        self.init_type = 'normal' if init_cfg is None else init_cfg.get(\n            'type', 'normal')\n        self.init_gain = 0.02 if init_cfg is None else init_cfg.get(\n            'gain', 0.02)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.model(x)\n\n    def init_weights(self) -> None:\n        \"\"\"Initialize weights for the model.\"\"\"\n\n        generation_init_weights(\n            self, init_type=self.init_type, init_gain=self.init_gain)\n\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/archs/sr_backbone.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom torch import Tensor\n\nfrom ..utils import default_init_weights\n\n# def default_init_weights(module, scale=1):\n#     \"\"\"Initialize network weights.\n\n#     Args:\n#         modules (nn.Module): Modules to be initialized.\n#         scale (float): Scale initialized weights, especially for residual\n#             blocks. Default: 1.\n#     \"\"\"\n#     for m in module.modules():\n#         if isinstance(m, nn.Conv2d):\n#             kaiming_init(m, a=0, mode='fan_in', bias=0)\n#             m.weight.data *= scale\n#         elif isinstance(m, nn.Linear):\n#             kaiming_init(m, a=0, mode='fan_in', bias=0)\n#             m.weight.data *= scale\n#         elif isinstance(m, _BatchNorm):\n#             constant_init(m.weight, val=1, bias=0)\n\n# def make_layer(block, num_blocks, **kwarg):\n#     \"\"\"Make layers by stacking the same blocks.\n\n#     Args:\n#         block (nn.module): nn.module class for basic block.\n#         num_blocks (int): number of blocks.\n\n#     Returns:\n#         nn.Sequential: Stacked blocks in nn.Sequential.\n#     \"\"\"\n#     layers = []\n#     for _ in range(num_blocks):\n#         layers.append(block(**kwarg))\n#     return nn.Sequential(*layers)\n\n\nclass ResidualBlockNoBN(nn.Module):\n    \"\"\"Residual block without BN.\n\n    It has a style of:\n\n    ::\n\n        ---Conv-ReLU-Conv-+-\n         |________________|\n\n    Args:\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        res_scale (float): Used to scale the residual before addition.\n            Default: 1.0.\n    \"\"\"\n\n    def __init__(self, mid_channels: int = 64, res_scale: float = 1.0):\n        super().__init__()\n        self.res_scale = res_scale\n        self.conv1 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=True)\n        self.conv2 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=True)\n\n        self.relu = nn.ReLU(inplace=True)\n\n        # if res_scale < 1.0, use the default initialization, as in EDSR.\n        # if res_scale = 1.0, use scaled kaiming_init, as in MSRResNet.\n        if res_scale == 1.0:\n            self.init_weights()\n\n    def init_weights(self) -> None:\n        \"\"\"Initialize weights for ResidualBlockNoBN.\n\n        Initialization methods like `kaiming_init` are for VGG-style modules.\n        For modules with residual paths, using smaller std is better for\n        stability and performance. We empirically use 0.1. See more details in\n        \"ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks\"\n        \"\"\"\n\n        for m in [self.conv1, self.conv2]:\n            default_init_weights(m, 0.1)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        identity = x\n        out = self.conv2(self.relu(self.conv1(x)))\n        return identity + out * self.res_scale\n"
  },
  {
    "path": "mmagic/models/archs/tokenizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"This a wrapper for tokenizer.\"\"\"\nimport copy\nimport os\nimport random\nfrom logging import WARNING\nfrom typing import Any, List, Optional, Union\n\nfrom mmengine import print_log\n\nfrom mmagic.utils import try_import\n\n\nclass TokenizerWrapper:\n    \"\"\"Tokenizer wrapper for CLIPTokenizer. Only support CLIPTokenizer\n    currently. This wrapper is modified from https://github.com/huggingface/dif\n    fusers/blob/e51f19aee82c8dd874b715a09dbc521d88835d68/src/diffusers/loaders.\n    py#L358  # noqa.\n\n    Args:\n        from_pretrained (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Defaults to None.\n        from_config (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Defaults to None.\n\n        *args, **kwargs: If `from_pretrained` is passed, *args and **kwargs\n            will be passed to `from_pretrained` function. Otherwise, *args\n            and **kwargs will be used to initialize the model by\n            `self._module_cls(*args, **kwargs)`.\n    \"\"\"\n\n    def __init__(self,\n                 from_pretrained: Optional[Union[str, os.PathLike]] = None,\n                 from_config: Optional[Union[str, os.PathLike]] = None,\n                 *args,\n                 **kwargs):\n        transformers = try_import('transformers')\n        module_cls = transformers.CLIPTokenizer\n\n        assert not (from_pretrained and from_config), (\n            '\\'from_pretrained\\' and \\'from_config\\' should not be passed '\n            'at the same time.')\n\n        if from_config:\n            print_log(\n                'Tokenizers from Huggingface transformers do not support '\n                '\\'from_config\\'. Will call \\'from_pretrained\\' instead '\n                'with the same argument.', 'current', WARNING)\n            from_pretrained = from_config\n\n        if from_pretrained:\n            self.wrapped = module_cls.from_pretrained(from_pretrained, *args,\n                                                      **kwargs)\n        else:\n            self.wrapper = module_cls(*args, **kwargs)\n\n        self._from_pretrained = from_pretrained\n        self.token_map = {}\n\n    def __getattr__(self, name: str) -> Any:\n        if name == 'wrapped':\n            return super().__getattr__('wrapped')\n\n        try:\n            return getattr(self.wrapped, name)\n        except AttributeError:\n            try:\n                return super().__getattr__(name)\n            except AttributeError:\n                raise AttributeError(\n                    '\\'name\\' cannot be found in both '\n                    f'\\'{self.__class__.__name__}\\' and '\n                    f'\\'{self.__class__.__name__}.tokenizer\\'.')\n\n    def try_adding_tokens(self, tokens: Union[str, List[str]], *args,\n                          **kwargs):\n        \"\"\"Attempt to add tokens to the tokenizer.\n\n        Args:\n            tokens (Union[str, List[str]]): The tokens to be added.\n        \"\"\"\n        num_added_tokens = self.wrapped.add_tokens(tokens, *args, **kwargs)\n        assert num_added_tokens != 0, (\n            f'The tokenizer already contains the token {tokens}. Please pass '\n            'a different `placeholder_token` that is not already in the '\n            'tokenizer.')\n\n    def get_token_info(self, token: str) -> dict:\n        \"\"\"Get the information of a token, including its start and end index in\n        the current tokenizer.\n\n        Args:\n            token (str): The token to be queried.\n\n        Returns:\n            dict: The information of the token, including its start and end\n                index in current tokenizer.\n        \"\"\"\n        token_ids = self.__call__(token).input_ids\n        start, end = token_ids[1], token_ids[-2] + 1\n        return {'name': token, 'start': start, 'end': end}\n\n    def add_placeholder_token(self,\n                              placeholder_token: str,\n                              *args,\n                              num_vec_per_token: int = 1,\n                              **kwargs):\n        \"\"\"Add placeholder tokens to the tokenizer.\n\n        Args:\n            placeholder_token (str): The placeholder token to be added.\n            num_vec_per_token (int, optional): The number of vectors of\n                the added placeholder token.\n            *args, **kwargs: The arguments for `self.wrapped.add_tokens`.\n        \"\"\"\n        output = []\n        if num_vec_per_token == 1:\n            self.try_adding_tokens(placeholder_token, *args, **kwargs)\n            output.append(placeholder_token)\n        else:\n            output = []\n            for i in range(num_vec_per_token):\n                ith_token = placeholder_token + f'_{i}'\n                self.try_adding_tokens(ith_token, *args, **kwargs)\n                output.append(ith_token)\n\n        for token in self.token_map:\n            if token in placeholder_token:\n                raise ValueError(\n                    f'The tokenizer already has placeholder token {token} '\n                    f'that can get confused with {placeholder_token} '\n                    'keep placeholder tokens independent')\n        self.token_map[placeholder_token] = output\n\n    def replace_placeholder_tokens_in_text(self,\n                                           text: Union[str, List[str]],\n                                           vector_shuffle: bool = False,\n                                           prop_tokens_to_load: float = 1.0\n                                           ) -> Union[str, List[str]]:\n        \"\"\"Replace the keywords in text with placeholder tokens. This function\n        will be called in `self.__call__` and `self.encode`.\n\n        Args:\n            text (Union[str, List[str]]): The text to be processed.\n            vector_shuffle (bool, optional): Whether to shuffle the vectors.\n                Defaults to False.\n            prop_tokens_to_load (float, optional): The proportion of tokens to\n                be loaded. If 1.0, all tokens will be loaded. Defaults to 1.0.\n\n        Returns:\n            Union[str, List[str]]: The processed text.\n        \"\"\"\n        if isinstance(text, list):\n            output = []\n            for i in range(len(text)):\n                output.append(\n                    self.replace_placeholder_tokens_in_text(\n                        text[i], vector_shuffle=vector_shuffle))\n            return output\n\n        for placeholder_token in self.token_map:\n            if placeholder_token in text:\n                tokens = self.token_map[placeholder_token]\n                tokens = tokens[:1 + int(len(tokens) * prop_tokens_to_load)]\n                if vector_shuffle:\n                    tokens = copy.copy(tokens)\n                    random.shuffle(tokens)\n                text = text.replace(placeholder_token, ' '.join(tokens))\n        return text\n\n    def replace_text_with_placeholder_tokens(self, text: Union[str, List[str]]\n                                             ) -> Union[str, List[str]]:\n        \"\"\"Replace the placeholder tokens in text with the original keywords.\n        This function will be called in `self.decode`.\n\n        Args:\n            text (Union[str, List[str]]): The text to be processed.\n\n        Returns:\n            Union[str, List[str]]: The processed text.\n        \"\"\"\n        if isinstance(text, list):\n            output = []\n            for i in range(len(text)):\n                output.append(\n                    self.replace_text_with_placeholder_tokens(text[i]))\n            return output\n\n        for placeholder_token, tokens in self.token_map.items():\n            merged_tokens = ' '.join(tokens)\n            if merged_tokens in text:\n                text = text.replace(merged_tokens, placeholder_token)\n        return text\n\n    def __call__(self,\n                 text: Union[str, List[str]],\n                 *args,\n                 vector_shuffle: bool = False,\n                 prop_tokens_to_load: float = 1.0,\n                 **kwargs):\n        \"\"\"The call function of the wrapper.\n\n        Args:\n            text (Union[str, List[str]]): The text to be tokenized.\n            vector_shuffle (bool, optional): Whether to shuffle the vectors.\n                Defaults to False.\n            prop_tokens_to_load (float, optional): The proportion of tokens to\n                be loaded. If 1.0, all tokens will be loaded. Defaults to 1.0\n            *args, **kwargs: The arguments for `self.wrapped.__call__`.\n        \"\"\"\n        replaced_text = self.replace_placeholder_tokens_in_text(\n            text,\n            vector_shuffle=vector_shuffle,\n            prop_tokens_to_load=prop_tokens_to_load)\n\n        return self.wrapped.__call__(replaced_text, *args, **kwargs)\n\n    def encode(self, text: Union[str, List[str]], *args, **kwargs):\n        \"\"\"Encode the passed text to token index.\n\n        Args:\n            text (Union[str, List[str]]): The text to be encode.\n            *args, **kwargs: The arguments for `self.wrapped.__call__`.\n        \"\"\"\n        replaced_text = self.replace_placeholder_tokens_in_text(text)\n        return self.wrapped(replaced_text, *args, **kwargs)\n\n    def decode(self,\n               token_ids,\n               return_raw: bool = False,\n               *args,\n               **kwargs) -> Union[str, List[str]]:\n        \"\"\"Decode the token index to text.\n\n        Args:\n            token_ids: The token index to be decoded.\n            return_raw: Whether keep the placeholder token in the text.\n                Defaults to False.\n            *args, **kwargs: The arguments for `self.wrapped.decode`.\n\n        Returns:\n            Union[str, List[str]]: The decoded text.\n        \"\"\"\n        text = self.wrapped.decode(token_ids, *args, **kwargs)\n        if return_raw:\n            return text\n        replaced_text = self.replace_text_with_placeholder_tokens(text)\n        return replaced_text\n\n    def __repr__(self):\n        \"\"\"The representation of the wrapper.\"\"\"\n        s = super().__repr__()\n        prefix = f'Wrapped Module Class: {self._module_cls}\\n'\n        prefix += f'Wrapped Module Name: {self._module_name}\\n'\n        if self._from_pretrained:\n            prefix += f'From Pretrained: {self._from_pretrained}\\n'\n        s = prefix + s\n        return s\n"
  },
  {
    "path": "mmagic/models/archs/upsample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch import Tensor\n\nfrom .sr_backbone import default_init_weights\n\n\nclass PixelShufflePack(nn.Module):\n    \"\"\"Pixel Shuffle upsample layer.\n\n    Args:\n        in_channels (int): Number of input channels.\n        out_channels (int): Number of output channels.\n        scale_factor (int): Upsample ratio.\n        upsample_kernel (int): Kernel size of Conv layer to expand channels.\n\n    Returns:\n        Upsampled feature map.\n    \"\"\"\n\n    def __init__(self, in_channels: int, out_channels: int, scale_factor: int,\n                 upsample_kernel: int):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.scale_factor = scale_factor\n        self.upsample_kernel = upsample_kernel\n        self.upsample_conv = nn.Conv2d(\n            self.in_channels,\n            self.out_channels * scale_factor * scale_factor,\n            self.upsample_kernel,\n            padding=(self.upsample_kernel - 1) // 2)\n        self.init_weights()\n\n    def init_weights(self) -> None:\n        \"\"\"Initialize weights for PixelShufflePack.\"\"\"\n        default_init_weights(self, 1)\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function for PixelShufflePack.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.upsample_conv(x)\n        x = F.pixel_shuffle(x, self.scale_factor)\n        return x\n"
  },
  {
    "path": "mmagic/models/archs/vgg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Optional\n\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init, xavier_init\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom ..archs.aspp import ASPP\n\n\n@MODELS.register_module()\nclass VGG16(BaseModule):\n    \"\"\"Customized VGG16 Encoder.\n\n    A 1x1 conv is added after the original VGG16 conv layers. The indices of\n    max pooling layers are returned for unpooling layers in decoders.\n\n    Args:\n        in_channels (int): Number of input channels.\n        batch_norm (bool, optional): Whether use ``nn.BatchNorm2d``.\n            Default to False.\n        aspp (bool, optional): Whether use ASPP module after the last conv\n            layer. Default to False.\n        dilations (list[int], optional): Atrous rates of ASPP module.\n            Default to None.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 batch_norm: Optional[bool] = False,\n                 aspp: Optional[bool] = False,\n                 dilations: Optional[List[int]] = None,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n        self.batch_norm = batch_norm\n        self.aspp = aspp\n        self.dilations = dilations\n\n        self.layer1 = self._make_layer(in_channels, 64, 2)\n        self.layer2 = self._make_layer(64, 128, 2)\n        self.layer3 = self._make_layer(128, 256, 3)\n        self.layer4 = self._make_layer(256, 512, 3)\n        self.layer5 = self._make_layer(512, 512, 3)\n\n        self.conv6 = nn.Conv2d(512, 512, kernel_size=1)\n        if self.batch_norm:\n            self.bn = nn.BatchNorm2d(512)\n        self.relu = nn.ReLU(inplace=True)\n\n        if self.aspp:\n            self.aspp = ASPP(512, dilations=self.dilations)\n            self.out_channels = 256\n        else:\n            self.out_channels = 512\n\n    def _make_layer(self, inplanes: int, planes: int,\n                    convs_layers: int) -> nn.Module:\n        layers = []\n        for _ in range(convs_layers):\n            conv2d = nn.Conv2d(inplanes, planes, kernel_size=3, padding=1)\n            if self.batch_norm:\n                bn = nn.BatchNorm2d(planes)\n                layers += [conv2d, bn, nn.ReLU(inplace=True)]\n            else:\n                layers += [conv2d, nn.ReLU(inplace=True)]\n            inplanes = planes\n        layers += [nn.MaxPool2d(kernel_size=2, stride=2, return_indices=True)]\n        return nn.Sequential(*layers)\n\n    def init_weights(self) -> None:\n        \"\"\"Init weights for the model.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            # Default initialization\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    xavier_init(m)\n                elif isinstance(m, nn.BatchNorm2d):\n                    constant_init(m, 1)\n\n    def forward(self, x: Tensor) -> Dict[str, Tensor]:\n        \"\"\"Forward function for ASPP module.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            dict: Dict containing output tensor and maxpooling indices.\n        \"\"\"\n        out, max_idx_1 = self.layer1(x)\n        out, max_idx_2 = self.layer2(out)\n        out, max_idx_3 = self.layer3(out)\n        out, max_idx_4 = self.layer4(out)\n        out, max_idx_5 = self.layer5(out)\n\n        out = self.conv6(out)\n        if self.batch_norm:\n            out = self.bn(out)\n        out = self.relu(out)\n        if self.aspp:\n            out = self.aspp(out)\n\n        return {\n            'out': out,\n            'max_idx_1': max_idx_1,\n            'max_idx_2': max_idx_2,\n            'max_idx_3': max_idx_3,\n            'max_idx_4': max_idx_4,\n            'max_idx_5': max_idx_5\n        }\n"
  },
  {
    "path": "mmagic/models/archs/wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom logging import WARNING\nfrom typing import Any, List, Optional, Union\n\nimport torch\nfrom mmengine import print_log\nfrom mmengine.model import BaseModule\nfrom torch import dtype as TORCH_DTYPE\n\ndtype_mapping = {\n    'float32': torch.float32,\n    'float16': torch.float16,\n    'fp32': torch.float32,\n    'fp16': torch.float16,\n    'half': torch.float16,\n}\n\n\nclass DiffusersWrapper(BaseModule):\n    \"\"\"Wrapper for models from HuggingFace Diffusers. This wrapper will be set\n    a attribute called `_module_cls` by wrapping function and will be used to\n    initialize the model structure.\n\n    Example:\n    >>> 1. Load pretrained model from HuggingFace Space.\n    >>> config = dict(\n    >>>     type='ControlNetModel',  # has been registered in `MODELS`\n    >>>     from_pretrained='lllyasviel/sd-controlnet-canny',\n    >>>     torch_dtype=torch.float16)\n    >>> controlnet = MODELS.build(config)\n\n    >>> 2. Initialize model with pre-defined configs.\n    >>> config = dict(\n    >>>     type='ControlNetModel',  # has been registered in `MODELS`\n    >>>     from_config='lllyasviel/sd-controlnet-canny',\n    >>>     cache_dir='~/.cache/OpenMMLab')\n    >>> controlnet = MODELS.build(config)\n\n    >>> 3. Initialize model with own defined arguments\n    >>> config = dict(\n    >>>     type='ControlNetModel',  # has been registered in `MODELS`\n    >>>     in_channels=3,\n    >>>     down_block_types=['DownBlock2D'],\n    >>>     block_out_channels=(32, ),\n    >>>     conditioning_embedding_out_channels=(16, ))\n    >>> controlnet = MODELS.build(config)\n\n    Args:\n        from_pretrained (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Please refers to\n            `diffusers.model.modeling_utils.ModelMixin.from_pretrained`\n            for more detail. Defaults to None.\n        from_config (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Please refers to\n            `diffusers.configuration_utils.ConfigMixin.load_config`\n            for more detail. Defaults to None.\n        init_cfg (dict or List[dict], optional): Initialization config dict.\n            Noted that, in `DiffuserWrapper`, if you want to load pretrained\n            weight from HuggingFace space, please use `from_pretrained`\n            argument instead of using `init_cfg`. Defaults to None.\n\n        *args, **kwargs: If `from_pretrained` is passed, *args and **kwargs\n            will be passed to `from_pretrained` function. If `from_config`\n            is passed, *args and **kwargs will be passed to `load_config`\n            function.  Otherwise, *args and **kwargs will be used to\n            initialize the model by `self._module_cls(*args, **kwargs)`.\n    \"\"\"\n\n    def __init__(self,\n                 from_pretrained: Optional[Union[str, os.PathLike]] = None,\n                 from_config: Optional[Union[str, os.PathLike]] = None,\n                 dtype: Optional[Union[str, TORCH_DTYPE]] = None,\n                 init_cfg: Union[dict, List[dict], None] = None,\n                 *args,\n                 **kwargs):\n        super().__init__(init_cfg)\n\n        module_cls = self._module_cls\n        assert not (from_pretrained and from_config), (\n            '\\'from_pretrained\\' and \\'from_config\\' should not be passed '\n            'at the same time.')\n\n        self._from_pretrained = from_pretrained\n        self._from_config = from_config\n\n        if from_pretrained is not None:\n            self.model = module_cls.from_pretrained(from_pretrained, *args,\n                                                    **kwargs)\n            # weight has been initialized from pretrained, therefore we\n            # `self._is_init` as True manually\n            self._is_init = True\n        elif from_config is not None:\n            _config = module_cls.load_config(from_config, *args, **kwargs)\n            self.model = module_cls(**_config)\n        else:\n            self.model = module_cls(*args, **kwargs)\n\n        if dtype is not None:\n            if isinstance(dtype, str):\n                assert dtype in dtype_mapping, (\n                    'Only support following dtype string: '\n                    f'{list(dtype_mapping.keys())}, but receive {dtype}.')\n                dtype = dtype_mapping[dtype]\n            self.model.to(dtype)\n            print_log(f'Set model dtype to \\'{dtype}\\'.', 'current')\n\n        self.config = self.model.config\n\n    def init_weights(self):\n        \"\"\"Initialize the weights.\n\n        If type is 'Pretrained' but the model has be loaded from `repo_id`, a\n        warning will be raised.\n        \"\"\"\n        if self.init_cfg and self.init_cfg['type'] == 'Pretrained':\n            if self._from_pretrained is not None:\n                print_log(\n                    'Has been loaded from pretrained model from '\n                    f'\\'{self._from_pretrained}\\'. Your behavior is '\n                    'very dangerous.', 'current', WARNING)\n        super().init_weights()\n\n    def __getattr__(self, name: str) -> Any:\n        \"\"\"This function provide a way to access the attributes of the wrapped\n        model.\n\n        Args:\n            name (str): The name of the attribute.\n\n        Returns:\n            Any: The got attribute.\n        \"\"\"\n        # Q: why we need end of recursion for 'model'?\n        # A: In `nn.Module.__setattr__`, if value is instance of `nn.Module`,\n        #   it will be removed from `__dict__` and added to\n        #   `__dict__._modules`. Therefore, `model` cannot be found in\n        #   `self.__dict__`. When we call `self.model`, python cannot found\n        #   'model' in `self.__dict__` and then `self.__getattr__('model')`\n        #   will be called. If we call `self.model` in `self.__getattr__`\n        #   which does not have any exit about 'model',`RecursionError`\n        #   will be raised.\n        if name == 'model':\n            return super().__getattr__('model')\n\n        try:\n            return getattr(self.model, name)\n        except AttributeError:\n            try:\n                return super().__getattr__(name)\n            except AttributeError:\n                raise AttributeError('\\'name\\' cannot be found in both '\n                                     f'\\'{self.__class__.__name__}\\' and '\n                                     f'\\'{self.__class__.__name__}.model\\'.')\n\n    def __repr__(self):\n        \"\"\"The representation of the wrapper.\"\"\"\n        s = super().__repr__()\n        prefix = f'Wrapped Module Class: {self._module_cls}\\n'\n        prefix += f'Wrapped Module Name: {self._module_name}\\n'\n        if self._from_pretrained:\n            prefix += f'From Pretrained: {self._from_pretrained}\\n'\n        if self._from_config:\n            prefix += f'From Config: {self._from_config}\\n'\n        s = prefix + s\n        return s\n\n    def forward(self, *args, **kwargs) -> Any:\n        \"\"\"Forward function of wrapped module.\n\n        Args:\n            *args, **kwargs: The arguments of the wrapped module.\n\n        Returns:\n            Any: The output of wrapped module's forward function.\n        \"\"\"\n        return self.model(*args, **kwargs)\n\n    def to(\n        self,\n        torch_device: Optional[Union[str, torch.device]] = None,\n        torch_dtype: Optional[torch.dtype] = None,\n    ):\n        \"\"\"Put wrapped module to device or convert it to torch_dtype. There are\n        two to() function. One is nn.module.to() and the other is\n        diffusers.pipeline.to(), if both args are passed,\n        diffusers.pipeline.to() is called.\n\n        Args:\n            torch_device: The device to put to.\n            torch_dtype: The type to convert to.\n\n        Returns:\n            self: the wrapped module itself.\n        \"\"\"\n        if torch_dtype is None:\n            self.model.to(torch_device)\n        else:\n            self.model.to(torch_device, torch_dtype)\n        return self\n"
  },
  {
    "path": "mmagic/models/base_models/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .average_model import ExponentialMovingAverage, RampUpEMA\nfrom .base_conditional_gan import BaseConditionalGAN\nfrom .base_edit_model import BaseEditModel\nfrom .base_gan import BaseGAN\nfrom .base_mattor import BaseMattor\nfrom .base_translation_model import BaseTranslationModel\nfrom .basic_interpolator import BasicInterpolator\nfrom .one_stage import OneStageInpaintor\nfrom .two_stage import TwoStageInpaintor\n\n__all__ = [\n    'BaseEditModel',\n    'BaseGAN',\n    'BaseConditionalGAN',\n    'BaseMattor',\n    'BasicInterpolator',\n    'BaseTranslationModel',\n    'OneStageInpaintor',\n    'TwoStageInpaintor',\n    'ExponentialMovingAverage',\n    'RampUpEMA',\n]\n"
  },
  {
    "path": "mmagic/models/base_models/average_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport itertools\nimport warnings\nfrom typing import List, Optional\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseAveragedModel\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\n\n# NOTICE: Since mmengine do not support loading ``state_dict`` without wrap\n# ema module with ``BaseAveragedModel`` currently, we rewrite\n# ``ExponentialMovingAverage`` and add ``_load_from_state_dict`` temporarily\n\n\n@MODELS.register_module()\nclass ExponentialMovingAverage(BaseAveragedModel):\n    r\"\"\"Implements the exponential moving average (EMA) of the model.\n\n    All parameters are updated by the formula as below:\n\n        .. math::\n\n            Xema_{t+1} = (1 - momentum) * Xema_{t} +  momentum * X_t\n\n    Args:\n        model (nn.Module): The model to be averaged.\n        momentum (float): The momentum used for updating ema parameter.\n            Defaults to 0.0002.\n            Ema's parameter are updated with the formula\n            :math:`averaged\\_param = (1-momentum) * averaged\\_param +\n            momentum * source\\_param`.\n        interval (int): Interval between two updates. Defaults to 1.\n        device (torch.device, optional): If provided, the averaged model will\n            be stored on the :attr:`device`. Defaults to None.\n        update_buffers (bool): if True, it will compute running averages for\n            both the parameters and the buffers of the model. Defaults to\n            False.\n    \"\"\"  # noqa: W605\n\n    def __init__(self,\n                 model: nn.Module,\n                 momentum: float = 0.0002,\n                 interval: int = 1,\n                 device: Optional[torch.device] = None,\n                 update_buffers: bool = False) -> None:\n        super().__init__(model, interval, device, update_buffers)\n        assert 0.0 < momentum < 1.0, 'momentum must be in range (0.0, 1.0)'\\\n                                     f'but got {momentum}'\n        if momentum > 0.5:\n            warnings.warn(\n                'The value of momentum in EMA is usually a small number,'\n                'which is different from the conventional notion of '\n                f'momentum but got {momentum}. Please make sure the '\n                f'value is correct.')\n        self.momentum = momentum\n\n    def avg_func(self, averaged_param: Tensor, source_param: Tensor,\n                 steps: int) -> None:\n        \"\"\"Compute the moving average of the parameters using exponential\n        moving average.\n\n        Args:\n            averaged_param (Tensor): The averaged parameters.\n            source_param (Tensor): The source parameters.\n            steps (int): The number of times the parameters have been\n                updated.\n        \"\"\"\n        averaged_param.mul_(1 - self.momentum).add_(\n            source_param, alpha=self.momentum)\n\n    def _load_from_state_dict(self, state_dict: dict, prefix: str,\n                              local_metadata: dict, strict: bool,\n                              missing_keys: list, unexpected_keys: list,\n                              error_msgs: List[str]) -> None:\n        \"\"\"Overrides ``nn.Module._load_from_state_dict`` to support loading\n        ``state_dict`` without wrap ema module with ``BaseAveragedModel``.\n\n        In OpenMMLab 1.0, model will not wrap ema submodule with\n        ``BaseAveragedModel``, and the ema weight key in `state_dict` will\n        miss `module` prefix. Therefore, ``BaseAveragedModel`` need to\n        automatically add the ``module`` prefix if the corresponding key in\n        ``state_dict`` misses it.\n\n        Args:\n            state_dict (dict): A dict containing parameters and\n                persistent buffers.\n            prefix (str): The prefix for parameters and buffers used in this\n                module\n            local_metadata (dict): a dict containing the metadata for this\n                module.\n            strict (bool): Whether to strictly enforce that the keys in\n                :attr:`state_dict` with :attr:`prefix` match the names of\n                parameters and buffers in this module\n            missing_keys (List[str]): if ``strict=True``, add missing keys to\n                this list\n            unexpected_keys (List[str]): if ``strict=True``, add unexpected\n                keys to this list\n            error_msgs (List[str]): error messages should be added to this\n                list, and will be reported together in\n                :meth:`~torch.nn.Module.load_state_dict`.\n        \"\"\"\n\n        for key, value in list(state_dict.items()):\n            # To support load the pretrained model, which does not wrap ema\n            # module with `BaseAveragedModel`, `BaseAveragedModel` will\n            # automatically add `module` prefix to the `state_dict` which\n            # key starts with the custom prefix. For example, the old\n            # checkpoint with `state_dict` with keys:\n            # ['layer.weight', 'layer.bias', 'ema.steps', 'ema.weight', 'ema.bias'] # noqa: E501\n            # will be replaced with:\n            # ['layer.weight', 'layer.bias', 'ema.steps', 'ema.module.weight', 'ema.module.bias'] # noqa: E501\n\n            # The key added with `module` prefix needs to satisfy\n            # three conditions.\n            # 1. key starts with current prefix, such as `model.ema`.\n            # 2. The content after the prefix does not start with the `module`\n            # 3. Key does not end with steps.\n            if key.startswith(prefix) and not key[len(prefix):].startswith(\n                    'module') and not key.endswith('steps'):\n                new_key = key[:len(prefix)] + 'module.' + key[len(prefix):]\n                state_dict[new_key] = value\n                state_dict.pop(key)\n        state_dict.setdefault(prefix + 'steps', torch.tensor(0))\n        super()._load_from_state_dict(state_dict, prefix, local_metadata,\n                                      strict, missing_keys, unexpected_keys,\n                                      error_msgs)\n\n    def sync_buffers(self, model: nn.Module) -> None:\n        \"\"\"Copy buffer from model to averaged model.\n\n        Args:\n            model (nn.Module): The model whose parameters will be averaged.\n        \"\"\"\n        # if not update buffer, copy buffer from orig model\n        if self.update_buffers:\n            warnings.warn(\n                '`update_buffers` is set to True in this ema model, and '\n                'buffers will be updated in `update_parameters`.')\n\n        avg_buffer = itertools.chain(self.module.buffers())\n        orig_buffer = itertools.chain(model.buffers())\n        for b_avg, b_orig in zip(avg_buffer, orig_buffer):\n            b_avg.data.copy_(b_orig.data)\n\n    def sync_parameters(self, model: nn.Module) -> None:\n        \"\"\"Copy buffer and parameters from model to averaged model.\n\n        Args:\n            model (nn.Module): The model whose parameters will be averaged.\n        \"\"\"\n        # before ema, copy weights from orig\n        avg_param = (\n            itertools.chain(self.module.parameters(), self.module.buffers()))\n        src_param = (itertools.chain(model.parameters(), model.buffers()))\n        for p_avg, p_src in zip(avg_param, src_param):\n            p_avg.data.copy_(p_src.data)\n\n\n@MODELS.register_module()\nclass RampUpEMA(BaseAveragedModel):\n    r\"\"\"Implements the exponential moving average with ramping up momentum.\n\n    Ref: https://github.com/NVlabs/stylegan3/blob/master/training/training_loop.py # noqa\n\n    Args:\n        model (nn.Module): The model to be averaged.\n        interval (int): Interval between two updates. Defaults to 1.\n        ema_kimg (int, optional): EMA kimgs. Defaults to 10.\n        ema_rampup (float, optional): Ramp up rate. Defaults to 0.05.\n        batch_size (int, optional): Global batch size. Defaults to 32.\n        eps (float, optional): Ramp up epsilon. Defaults to 1e-8.\n        start_iter (int, optional): EMA start iter. Defaults to 0.\n        device (torch.device, optional): If provided, the averaged model will\n            be stored on the :attr:`device`. Defaults to None.\n        update_buffers (bool): if True, it will compute running averages for\n            both the parameters and the buffers of the model. Defaults to\n            False.\n    \"\"\"  # noqa: W605\n\n    def __init__(self,\n                 model: nn.Module,\n                 interval: int = 1,\n                 ema_kimg: int = 10,\n                 ema_rampup: float = 0.05,\n                 batch_size: int = 32,\n                 eps: float = 1e-8,\n                 start_iter: int = 0,\n                 device: Optional[torch.device] = None,\n                 update_buffers: bool = False) -> None:\n        \"\"\"_summary_\"\"\"\n        super().__init__(model, interval, device, update_buffers)\n        self.interval = interval\n        self.ema_kimg = ema_kimg\n        self.ema_rampup = ema_rampup\n        self.batch_size = batch_size\n        self.eps = eps\n\n    @staticmethod\n    def rampup(steps, ema_kimg=10, ema_rampup=0.05, batch_size=4, eps=1e-8):\n        \"\"\"Ramp up ema momentum.\n\n        Ref: https://github.com/NVlabs/stylegan3/blob/a5a69f58294509598714d1e88c9646c3d7c6ec94/training/training_loop.py#L300-L308 # noqa\n\n        Args:\n            steps:\n            ema_kimg (int, optional): Half-life of the exponential moving\n                average of generator weights. Defaults to 10.\n            ema_rampup (float, optional): EMA ramp-up coefficient.If set to\n                None, then rampup will be disabled. Defaults to 0.05.\n            batch_size (int, optional): Total batch size for one training\n                iteration. Defaults to 4.\n            eps (float, optional): Epsiolon to avoid ``batch_size`` divided by\n                zero. Defaults to 1e-8.\n\n        Returns:\n            dict: Updated momentum.\n        \"\"\"\n        cur_nimg = (steps + 1) * batch_size\n        ema_nimg = ema_kimg * 1000\n        if ema_rampup is not None:\n            ema_nimg = min(ema_nimg, cur_nimg * ema_rampup)\n        ema_beta = 0.5**(batch_size / max(ema_nimg, eps))\n        return ema_beta\n\n    def avg_func(self, averaged_param: Tensor, source_param: Tensor,\n                 steps: int) -> None:\n        \"\"\"Compute the moving average of the parameters using exponential\n        moving average.\n\n        Args:\n            averaged_param (Tensor): The averaged parameters.\n            source_param (Tensor): The source parameters.\n            steps (int): The number of times the parameters have been\n                updated.\n        \"\"\"\n        momentum = 1. - self.rampup(self.steps, self.ema_kimg, self.ema_rampup,\n                                    self.batch_size, self.eps)\n        if not (0.0 < momentum < 1.0):\n            warnings.warn('RampUp momentum must be in range (0.0, 1.0)'\n                          f'but got {momentum}')\n        averaged_param.mul_(1 - momentum).add_(source_param, alpha=momentum)\n\n    def _load_from_state_dict(self, state_dict: dict, prefix: str,\n                              local_metadata: dict, strict: bool,\n                              missing_keys: list, unexpected_keys: list,\n                              error_msgs: List[str]) -> None:\n        \"\"\"Overrides ``nn.Module._load_from_state_dict`` to support loading\n        ``state_dict`` without wrap ema module with ``BaseAveragedModel``.\n\n        In OpenMMLab 1.0, model will not wrap ema submodule with\n        ``BaseAveragedModel``, and the ema weight key in `state_dict` will\n        miss `module` prefix. Therefore, ``BaseAveragedModel`` need to\n        automatically add the ``module`` prefix if the corresponding key in\n        ``state_dict`` misses it.\n\n        Args:\n            state_dict (dict): A dict containing parameters and\n                persistent buffers.\n            prefix (str): The prefix for parameters and buffers used in this\n                module\n            local_metadata (dict): a dict containing the metadata for this\n                module.\n            strict (bool): Whether to strictly enforce that the keys in\n                :attr:`state_dict` with :attr:`prefix` match the names of\n                parameters and buffers in this module\n            missing_keys (List[str]): if ``strict=True``, add missing keys to\n                this list\n            unexpected_keys (List[str]): if ``strict=True``, add unexpected\n                keys to this list\n            error_msgs (List[str]): error messages should be added to this\n                list, and will be reported together in\n                :meth:`~torch.nn.Module.load_state_dict`.\n        \"\"\"\n\n        for key, value in list(state_dict.items()):\n            # To support load the pretrained model, which does not wrap ema\n            # module with `BaseAveragedModel`, `BaseAveragedModel` will\n            # automatically add `module` prefix to the `state_dict` which\n            # key starts with the custom prefix. For example, the old\n            # checkpoint with `state_dict` with keys:\n            # ['layer.weight', 'layer.bias', 'ema.steps', 'ema.weight', 'ema.bias'] # noqa: E501\n            # will be replaced with:\n            # ['layer.weight', 'layer.bias', 'ema.steps', 'ema.module.weight', 'ema.module.bias'] # noqa: E501\n\n            # The key added with `module` prefix needs to satisfy\n            # three conditions.\n            # 1. key starts with current prefix, such as `model.ema`.\n            # 2. The content after the prefix does not start with the `module`\n            # 3. Key does not end with steps.\n            if key.startswith(prefix) and not key[len(prefix):].startswith(\n                    'module') and not key.endswith('steps'):\n                new_key = key[:len(prefix)] + 'module.' + key[len(prefix):]\n                state_dict[new_key] = value\n                state_dict.pop(key)\n        state_dict.setdefault(prefix + 'steps', torch.tensor(0))\n        super()._load_from_state_dict(state_dict, prefix, local_metadata,\n                                      strict, missing_keys, unexpected_keys,\n                                      error_msgs)\n\n    def sync_buffers(self, model: nn.Module) -> None:\n        \"\"\"Copy buffer from model to averaged model.\n\n        Args:\n            model (nn.Module): The model whose parameters will be averaged.\n        \"\"\"\n        # if not update buffer, copy buffer from orig model\n        if self.update_buffers:\n            warnings.warn(\n                '`update_buffers` is set to True in this ema model, and '\n                'buffers will be updated in `update_parameters`.')\n\n        avg_buffer = itertools.chain(self.module.buffers())\n        orig_buffer = itertools.chain(model.buffers())\n        for b_avg, b_orig in zip(avg_buffer, orig_buffer):\n            b_avg.data.copy_(b_orig.data)\n\n    def sync_parameters(self, model: nn.Module) -> None:\n        \"\"\"Copy buffer and parameters from model to averaged model.\n\n        Args:\n            model (nn.Module): The model whose parameters will be averaged.\n        \"\"\"\n        # before ema, copy weights from orig\n        avg_param = (\n            itertools.chain(self.module.parameters(), self.module.buffers()))\n        src_param = (itertools.chain(model.parameters(), model.buffers()))\n        for p_avg, p_src in zip(avg_param, src_param):\n            p_avg.data.copy_(p_src.data)\n"
  },
  {
    "path": "mmagic/models/base_models/base_conditional_gan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, LabelVar\nfrom ..utils import get_valid_num_batches, label_sample_fn\nfrom .base_gan import BaseGAN\n\nModelType = Union[Dict, nn.Module]\n\n\nclass BaseConditionalGAN(BaseGAN):\n    \"\"\"Base class for Conditional GAM models.\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): The number of times the generator is completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): The number of times the discriminator is\n            completely updated before the generator is updated. Defaults to 1.\n        noise_size (Optional[int]): Size of the input noise vector.\n            Default to None.\n        num_classes (Optional[int]): The number classes you would like to\n            generate. Defaults to None.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 noise_size: Optional[int] = None,\n                 num_classes: Optional[int] = None,\n                 ema_config: Optional[Dict] = None,\n                 loss_config: Optional[Dict] = None):\n\n        self.num_classes = self._get_valid_num_classes(num_classes, generator,\n                                                       discriminator)\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, noise_size,\n                         ema_config, loss_config)\n\n    def label_fn(self, label: LabelVar = None, num_batches: int = 1) -> Tensor:\n        \"\"\"Sampling function for label. There are three scenarios in this\n        function:\n\n        - If `label` is a callable function, sample `num_batches` of labels\n          with passed `label`.\n        - If `label` is `None`, sample `num_batches` of labels in range of\n          `[0, self.num_classes-1]` uniformly.\n        - If `label` is a `torch.Tensor`, check the range of the tensor is in\n          `[0, self.num_classes-1]`. If all values are in valid range,\n          directly return `label`.\n\n        Args:\n            label (Union[Tensor, Callable, List[int], None]): You can directly\n                give a batch of label through a ``torch.Tensor`` or offer a\n                callable function to sample a batch of label data. Otherwise,\n                the ``None`` indicates to use the default label sampler.\n                Defaults to `None`.\n            num_batches (int, optional): The number of batches label want to\n                sample. If `label` is a Tensor, this will be ignored. Defaults\n                to 1.\n\n        Returns:\n            Tensor: Sampled label tensor.\n        \"\"\"\n        return label_sample_fn(\n            label=label,\n            num_batches=num_batches,\n            num_classes=self.num_classes,\n            device=self.device)\n\n    def data_sample_to_label(self, data_sample: DataSample\n                             ) -> Optional[torch.Tensor]:\n        \"\"\"Get labels from input `data_sample` and pack to `torch.Tensor`. If\n        no label is found in the passed `data_sample`, `None` would be\n        returned.\n\n        Args:\n            data_sample (DataSample): Input data samples.\n\n        Returns:\n            Optional[torch.Tensor]: Packed label tensor.\n        \"\"\"\n        # assume all data_sample have the same data fields\n        if not data_sample or 'gt_label' not in data_sample.keys():\n            return None\n        gt_labels = data_sample.gt_label.label\n        return gt_labels\n\n    @staticmethod\n    def _get_valid_num_classes(num_classes: Optional[int],\n                               generator: ModelType,\n                               discriminator: Optional[ModelType]) -> int:\n        \"\"\"Try to get the value of `num_classes` from input, `generator` and\n        `discriminator` and check the consistency of these values. If no\n        conflict is found, return the `num_classes`.\n\n        Args:\n            num_classes (Optional[int]): `num_classes` passed to\n                `BaseConditionalGAN_refactor`'s initialize function.\n            generator (ModelType): The config or the model of generator.\n            discriminator (Optional[ModelType]): The config or model of\n                discriminator.\n\n        Returns:\n            int: The number of classes to be generated.\n        \"\"\"\n        if isinstance(generator, dict):\n            num_classes_gen = generator.get('num_classes', None)\n        else:\n            num_classes_gen = getattr(generator, 'num_classes', None)\n\n        num_classes_disc = None\n        if discriminator is not None:\n            if isinstance(discriminator, dict):\n                num_classes_disc = discriminator.get('num_classes', None)\n            else:\n                num_classes_disc = getattr(discriminator, 'num_classes', None)\n\n        # check consistency between gen and disc\n        if num_classes_gen is not None and num_classes_disc is not None:\n            assert num_classes_disc == num_classes_gen, (\n                '\\'num_classes\\' is inconsistent between generator and '\n                f'discriminator. Receive \\'{num_classes_gen}\\' and '\n                f'\\'{num_classes_disc}\\'.')\n        model_num_classes = num_classes_gen or num_classes_disc\n\n        if num_classes is not None and model_num_classes is not None:\n            assert num_classes == model_num_classes, (\n                'Input \\'num_classes\\' is inconsistent with '\n                f'model\\'s ones. Receive \\'{num_classes}\\' and '\n                f'\\'{model_num_classes}\\'.')\n\n        num_classes = num_classes or model_num_classes\n        return num_classes\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        \"\"\"Sample images with the given inputs. If forward mode is 'ema' or\n        'orig', the image generated by corresponding generator will be\n        returned. If forward mode is 'ema/orig', images generated by original\n        generator and EMA generator will both be returned in a dict.\n\n        Args:\n            inputs (ForwardInputs): Dict containing the necessary\n                information (e.g. noise, num_batches, mode) to generate image.\n            data_samples (Optional[list]): Data samples collated by\n                :attr:`data_preprocessor`. Defaults to None.\n            mode (Optional[str]): `mode` is not used in\n                :class:`BaseConditionalGAN`. Defaults to None.\n\n        Returns:\n            List[DataSample]: Generated images or image dict.\n        \"\"\"\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            sample_kwargs = {}\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n            sample_kwargs = inputs.get('sample_kwargs', dict())\n        num_batches = noise.shape[0]\n\n        labels = self.data_sample_to_label(data_samples)\n        if labels is None:\n            labels = self.label_fn(num_batches=num_batches)\n\n        sample_model = self._get_valid_model(inputs)\n        batch_sample_list = []\n        if sample_model in ['ema', 'orig']:\n            if sample_model == 'ema':\n                generator = self.generator_ema\n            else:\n                generator = self.generator\n            outputs = generator(noise, label=labels, return_noise=False)\n            outputs = self.data_preprocessor.destruct(outputs, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.fake_img = outputs\n            gen_sample.noise = noise\n            gen_sample.set_gt_label(labels)\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = sample_model\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        else:  # sample model in 'ema/orig'\n            outputs_orig = self.generator(\n                noise, label=labels, return_noise=False, **sample_kwargs)\n            outputs_ema = self.generator_ema(\n                noise, label=labels, return_noise=False, **sample_kwargs)\n            outputs_orig = self.data_preprocessor.destruct(\n                outputs_orig, data_samples)\n            outputs_ema = self.data_preprocessor.destruct(\n                outputs_ema, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.ema = DataSample(fake_img=outputs_ema)\n            gen_sample.orig = DataSample(fake_img=outputs_orig)\n            gen_sample.noise = noise\n            gen_sample.set_gt_label(labels)\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = 'ema/orig'\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        return batch_sample_list\n\n    def train_generator(self, inputs: dict, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Training function for discriminator. All GANs should implement this\n        function by themselves.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = inputs['img'].shape[0]\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        fake_imgs = self.generator(\n            noise=noise, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            fake_imgs=fake_imgs,\n            disc_pred_fake_g=disc_pred_fake,\n            # iteration=curr_iter,\n            batch_size=num_batches,\n            fake_label=fake_labels,\n            loss_scaler=getattr(optimizer_wrapper, 'loss_scaler', None))\n        parsed_loss, log_vars = self._get_gen_loss(data_dict_)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def train_discriminator(self, inputs: dict, data_samples: List[DataSample],\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Training function for discriminator. All GANs should implement this\n        function by themselves.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = inputs['img']\n        real_labels = self.data_sample_to_label(data_samples)\n        assert real_labels is not None, (\n            'Cannot found \\'gt_label\\' in \\'data_sample\\'.')\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise=noise_batch, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n        disc_pred_real = self.discriminator(real_imgs, label=real_labels)\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs,\n            # iteration=curr_iter,\n            batch_size=num_batches,\n            gt_label=real_labels,\n            fake_label=fake_labels,\n            loss_scaler=setattr(optimizer_wrapper, 'loss_scaler', None))\n        loss, log_vars = self._get_disc_loss(data_dict_)\n\n        optimizer_wrapper.update_params(loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/base_models/base_edit_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nfrom mmengine.model import BaseModel\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass BaseEditModel(BaseModel):\n    \"\"\"Base model for image and video editing.\n\n    It must contain a generator that takes frames as inputs and outputs an\n    interpolated frame. It also has a pixel-wise loss for training.\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: dict,\n                 pixel_loss: dict,\n                 train_cfg: Optional[dict] = None,\n                 test_cfg: Optional[dict] = None,\n                 init_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[dict] = None):\n        super().__init__(\n            init_cfg=init_cfg, data_preprocessor=data_preprocessor)\n\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n        # generator\n        self.generator = MODELS.build(generator)\n\n        # loss\n        self.pixel_loss = MODELS.build(pixel_loss)\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs) -> Union[torch.Tensor, List[DataSample], dict]:\n        \"\"\"Returns losses or predictions of training, validation, testing, and\n        simple inference process.\n\n        ``forward`` method of BaseModel is an abstract method, its subclasses\n        must implement this method.\n\n        Accepts ``inputs`` and ``data_samples`` processed by\n        :attr:`data_preprocessor`, and returns results according to mode\n        arguments.\n\n        During non-distributed training, validation, and testing process,\n        ``forward`` will be called by ``BaseModel.train_step``,\n        ``BaseModel.val_step`` and ``BaseModel.val_step`` directly.\n\n        During distributed data parallel training process,\n        ``MMSeparateDistributedDataParallel.train_step`` will first call\n        ``DistributedDataParallel.forward`` to enable automatic\n        gradient synchronization, and then call ``forward`` to get training\n        loss.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``. Default: 'tensor'.\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict`` or tensor for custom use.\n        \"\"\"\n        if isinstance(inputs, dict):\n            inputs = inputs['img']\n        if mode == 'tensor':\n            return self.forward_tensor(inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n\n        elif mode == 'loss':\n            return self.forward_train(inputs, data_samples, **kwargs)\n\n    def convert_to_datasample(self, predictions: DataSample,\n                              data_samples: DataSample,\n                              inputs: Optional[torch.Tensor]\n                              ) -> List[DataSample]:\n        \"\"\"Add predictions and destructed inputs (if passed) to data samples.\n\n        Args:\n            predictions (DataSample): The predictions of the model.\n            data_samples (DataSample): The data samples loaded from\n                dataloader.\n            inputs (Optional[torch.Tensor]): The input of model. Defaults to\n                None.\n\n        Returns:\n            List[DataSample]: Modified data samples.\n        \"\"\"\n\n        if inputs is not None:\n            destructed_input = self.data_preprocessor.destruct(\n                inputs, data_samples, 'img')\n            data_samples.set_tensor_data({'input': destructed_input})\n        # split to list of data samples\n        data_samples = data_samples.split()\n        predictions = predictions.split()\n\n        for data_sample, pred in zip(data_samples, predictions):\n            data_sample.output = pred\n\n        return data_samples\n\n    def forward_tensor(self,\n                       inputs: torch.Tensor,\n                       data_samples: Optional[List[DataSample]] = None,\n                       **kwargs) -> torch.Tensor:\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        feats = self.generator(inputs, **kwargs)\n\n        return feats\n\n    def forward_inference(self,\n                          inputs: torch.Tensor,\n                          data_samples: Optional[List[DataSample]] = None,\n                          **kwargs) -> DataSample:\n        \"\"\"Forward inference. Returns predictions of validation, testing, and\n        simple inference.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            DataSample: predictions.\n        \"\"\"\n\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        feats = self.data_preprocessor.destruct(feats, data_samples)\n\n        # create a stacked data sample here\n        predictions = DataSample(pred_img=feats.cpu())\n\n        return predictions\n\n    def forward_train(self,\n                      inputs: torch.Tensor,\n                      data_samples: Optional[List[DataSample]] = None,\n                      **kwargs) -> Dict[str, torch.Tensor]:\n        \"\"\"Forward training. Returns dict of losses of training.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        batch_gt_data = data_samples.gt_img\n\n        loss = self.pixel_loss(feats, batch_gt_data)\n\n        return dict(loss=loss)\n"
  },
  {
    "path": "mmagic/models/base_models/base_gan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom abc import ABCMeta\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import Config, MessageHub\nfrom mmengine.model import BaseModel, is_model_wrapper\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, NoiseVar, SampleList\nfrom ..utils import (get_valid_noise_size, get_valid_num_batches,\n                     noise_sample_fn, set_requires_grad)\n\nModelType = Union[Dict, nn.Module]\n\n\nclass BaseGAN(BaseModel, metaclass=ABCMeta):\n    \"\"\"Base class for GAN models.\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): The number of times the generator is completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): The number of times the discriminator is\n            completely updated before the generator is updated. Defaults to 1.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 noise_size: Optional[int] = None,\n                 ema_config: Optional[Dict] = None,\n                 loss_config: Optional[Dict] = None):\n        super().__init__(data_preprocessor=data_preprocessor)\n\n        # get valid noise_size\n        noise_size = get_valid_noise_size(noise_size, generator)\n\n        # build generator\n        if isinstance(generator, dict):\n            self._gen_cfg = deepcopy(generator)\n            # build generator with default `noise_size` and `num_classes`\n            gen_args = dict()\n            if noise_size:\n                gen_args['noise_size'] = noise_size\n            if hasattr(self, 'num_classes') and self.num_classes is not None:\n                gen_args['num_classes'] = self.num_classes\n            generator = MODELS.build(generator, default_args=gen_args)\n        self.generator = generator\n        # get noise_size from generator because generator may have default\n        # `noise_size` value\n        self.noise_size = getattr(self.generator, 'noise_size', noise_size)\n\n        # build discriminator\n        if discriminator:\n            if isinstance(discriminator, dict):\n                self._disc_cfg = deepcopy(discriminator)\n                # build discriminator with default `num_classes`\n                disc_args = dict()\n                if hasattr(self, 'num_classes'):\n                    disc_args['num_classes'] = self.num_classes\n                discriminator = MODELS.build(\n                    discriminator, default_args=disc_args)\n        self.discriminator = discriminator\n\n        self._gen_steps = generator_steps\n        self._disc_steps = discriminator_steps\n\n        if ema_config is None:\n            self._ema_config = None\n            self._with_ema_gen = False\n        else:\n            self._ema_config = deepcopy(ema_config)\n            self._init_ema_model(self._ema_config)\n            self._with_ema_gen = True\n\n        self._init_loss(loss_config)\n\n    @staticmethod\n    def gather_log_vars(log_vars_list: List[Dict[str, Tensor]]\n                        ) -> Dict[str, Tensor]:\n        \"\"\"Gather a list of log_vars.\n        Args:\n            log_vars_list: List[Dict[str, Tensor]]\n\n        Returns:\n            Dict[str, Tensor]\n        \"\"\"\n        if len(log_vars_list) == 1:\n            return log_vars_list[0]\n\n        log_keys = log_vars_list[0].keys()\n\n        log_vars = dict()\n        for k in log_keys:\n            assert all([k in log_vars for log_vars in log_vars_list\n                        ]), (f'\\'{k}\\' not in some of the \\'log_vars\\'.')\n            log_vars[k] = torch.mean(\n                torch.stack([log_vars[k] for log_vars in log_vars_list],\n                            dim=0))\n\n        return log_vars\n\n    def _init_loss(self, loss_config: Optional[Dict] = None) -> None:\n        \"\"\"Initialize customized loss modules.\n\n        If loss_config is a dict, we allow kinds of value for each field.\n\n        1. `loss_config` is None: Users will implement all loss calculations\n            in their own function. Weights for each loss terms are hard coded.\n        2. `loss_config` is dict of scalar or string: Users will implement all\n            loss calculations and use passed `loss_config` to control the\n            weight or behavior of the loss calculation. Users will unpack and\n            use each field in this dict by themselves.\n\n            loss_config = dict(gp_norm_mode='HWC', gp_loss_weight=10)\n\n        3. `loss_config` is dict of dict: Each field in `loss_config` will\n            used to build a corresponding loss module. And use loss calculation\n            function predefined by :class:`BaseGAN` to calculate the loss.\n\n            loss_config = dict()\n\n        Example:\n            loss_config = dict(\n                # `BaseGAN` pre-defined fields\n                gan_loss=dict(type='GANLoss', gan_type='wgan-logistic-ns'),\n                disc_auxiliary_loss=dict(\n                    type='R1GradientPenalty',\n                    loss_weight=10. / 2.,\n                    interval=2,\n                    norm_mode='HWC',\n                    data_info=dict(\n                        real_data='real_imgs',\n                        discriminator='disc')),\n                gen_auxiliary_loss=dict(\n                    type='GeneratorPathRegularizer',\n                    loss_weight=2,\n                    pl_batch_shrink=2,\n                    interval=g_reg_interval,\n                    data_info=dict(\n                        generator='gen',\n                        num_batches='batch_size')),\n                # user-defined field for loss weights or loss calculation\n                my_loss_2=dict(weight=2, norm_mode='L1'),\n                my_loss_3=2,\n                my_loss_4_norm_type='L2')\n\n\n        Args:\n            loss_config (Optional[Dict], optional): Loss config used to build\n                loss modules or define the loss weights. Defaults to None.\n        \"\"\"\n        if loss_config is None:\n            self.gan_loss = None\n            self.gen_auxiliary_losses = None\n            self.disc_auxiliary_losses = None\n            self.loss_config = dict()\n            return\n\n        self.loss_config = deepcopy(loss_config)\n\n        # build pre-defined losses\n        gan_loss = loss_config.get('gan_loss', None)\n        if gan_loss is not None:\n            self.gan_loss = MODELS.build(gan_loss)\n        else:\n            self.gan_loss = None\n\n        disc_auxiliary_loss = loss_config.get('disc_auxiliary_loss', None)\n        if disc_auxiliary_loss:\n            if not isinstance(disc_auxiliary_loss, list):\n                disc_auxiliary_loss = [disc_auxiliary_loss]\n            self.disc_auxiliary_losses = nn.ModuleList(\n                [MODELS.build(loss) for loss in disc_auxiliary_loss])\n        else:\n            self.disc_auxiliary_losses = None\n\n        gen_auxiliary_loss = loss_config.get('gen_auxiliary_loss', None)\n        if gen_auxiliary_loss:\n            if not isinstance(gen_auxiliary_loss, list):\n                gen_auxiliary_loss = [gen_auxiliary_loss]\n            self.gen_auxiliary_losses = nn.ModuleList(\n                [MODELS.build(loss) for loss in gen_auxiliary_loss])\n        else:\n            self.gen_auxiliary_losses = None\n\n    def noise_fn(self, noise: NoiseVar = None, num_batches: int = 1):\n        \"\"\"Sampling function for noise. There are three scenarios in this\n        function:\n\n        - If `noise` is a callable function, sample `num_batches` of noise\n          with passed `noise`.\n        - If `noise` is `None`, sample `num_batches` of noise from gaussian\n          distribution.\n        - If `noise` is a `torch.Tensor`, directly return `noise`.\n\n        Args:\n            noise (Union[Tensor, Callable, List[int], None]): You can directly\n                give a batch of label through a ``torch.Tensor`` or offer a\n                callable function to sample a batch of label data. Otherwise,\n                the ``None`` indicates to use the default noise sampler.\n                Defaults to `None`.\n            num_batches (int, optional): The number of batches label want to\n                sample. If `label` is a Tensor, this will be ignored. Defaults\n                to 1.\n\n        Returns:\n            Tensor: Sampled noise tensor.\n        \"\"\"\n        return noise_sample_fn(\n            noise=noise,\n            num_batches=num_batches,\n            noise_size=self.noise_size,\n            device=self.device)\n\n    @property\n    def generator_steps(self) -> int:\n        \"\"\"int: The number of times the generator is completely updated before\n        the discriminator is updated.\"\"\"\n        return self._gen_steps\n\n    @property\n    def discriminator_steps(self) -> int:\n        \"\"\"int: The number of times the discriminator is completely updated\n        before the generator is updated.\"\"\"\n        return self._disc_steps\n\n    @property\n    def device(self) -> torch.device:\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    @property\n    def with_ema_gen(self) -> bool:\n        \"\"\"Whether the GAN adopts exponential moving average.\n\n        Returns:\n            bool: If `True`, means this GAN model is adopted to exponential\n                moving average and vice versa.\n        \"\"\"\n        return self._with_ema_gen\n\n    def _init_ema_model(self, ema_config: dict):\n        \"\"\"Initialize a EMA model corresponding to the given `ema_config`. If\n        `ema_config` is an empty dict or `None`, EMA model will not be\n        initialized.\n\n        Args:\n            ema_config (dict): Config to initialize the EMA model.\n        \"\"\"\n        ema_config.setdefault('type', 'ExponentialMovingAverage')\n        self.ema_start = ema_config.pop('start_iter', 0)\n        src_model = self.generator.module if is_model_wrapper(\n            self.generator) else self.generator\n        self.generator_ema = MODELS.build(\n            ema_config, default_args=dict(model=src_model))\n\n    def _get_valid_model(self, batch_inputs: ForwardInputs) -> str:\n        \"\"\"Try to get the valid forward model from inputs.\n\n        - If forward model is defined in `batch_inputs`, it will be used as\n          forward model.\n        - If forward model is not defined in `batch_inputs`, 'ema' will\n          returned if :property:`with_ema_gen` is true. Otherwise, 'orig' will\n          be returned.\n\n        Args:\n            batch_inputs (ForwardInputs): Inputs passed to :meth:`forward`.\n\n        Returns:\n            str: Forward model to generate image. ('orig', 'ema' or\n                'ema/orig').\n        \"\"\"\n        if isinstance(batch_inputs, dict):\n            sample_model = batch_inputs.get('sample_model', None)\n        else:  # batch_inputs is a Tensor\n            sample_model = None\n\n        # set default value\n        if sample_model is None:\n            if self.with_ema_gen:\n                sample_model = 'ema'\n            else:\n                sample_model = 'orig'\n\n        # security checking for mode\n        assert sample_model in [\n            'ema', 'ema/orig', 'orig'\n        ], ('Only support \\'ema\\', \\'ema/orig\\', \\'orig\\' '\n            f'in {self.__class__.__name__}\\'s image sampling.')\n        if sample_model in ['ema', 'ema/orig']:\n            assert self.with_ema_gen, (\n                f'\\'{self.__class__.__name__}\\' do not have EMA model.')\n        return sample_model\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> SampleList:\n        \"\"\"Sample images with the given inputs. If forward mode is 'ema' or\n        'orig', the image generated by corresponding generator will be\n        returned. If forward mode is 'ema/orig', images generated by original\n        generator and EMA generator will both be returned in a dict.\n\n        Args:\n            batch_inputs (ForwardInputs): Dict containing the necessary\n                information (e.g. noise, num_batches, mode) to generate image.\n            data_samples (Optional[list]): Data samples collated by\n                :attr:`data_preprocessor`. Defaults to None.\n            mode (Optional[str]): `mode` is not used in :class:`BaseGAN`.\n                Defaults to None.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            sample_kwargs = {}\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n            sample_kwargs = inputs.get('sample_kwargs', dict())\n        num_batches = noise.shape[0]\n\n        sample_model = self._get_valid_model(inputs)\n        batch_sample_list = []\n        if sample_model in ['ema', 'orig']:\n            if sample_model == 'ema':\n                generator = self.generator_ema\n            else:\n                generator = self.generator\n            if sample_kwargs:\n                if 'return_noise' in sample_kwargs.keys():\n                    outputs = generator(noise, **sample_kwargs)\n                else:\n                    outputs = generator(\n                        noise, return_noise=False,\n                        **sample_kwargs)  # yapf: disable\n            else:\n                sample_kwargs = {}\n                outputs = generator(\n                    noise, return_noise=False,\n                    **sample_kwargs)  # no need to be False all time\n            if isinstance(outputs, dict):\n                if 'latent' in outputs.keys():\n                    latent = outputs['latent']\n                if 'feats' in outputs.keys():\n                    feats = outputs['feats']\n                outputs = outputs['fake_img']\n\n            outputs = self.data_preprocessor.destruct(outputs, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.fake_img = outputs\n            gen_sample.noise = noise\n            if 'latent' in locals():\n                gen_sample.latent = latent\n            if 'feats' in locals():\n                gen_sample.feats = feats\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = sample_model\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True, )\n\n        else:  # sample model is 'ema/orig\n            outputs_orig = self.generator(\n                noise, return_noise=False, **sample_kwargs)\n            outputs_ema = self.generator_ema(\n                noise, return_noise=False, **sample_kwargs)\n            outputs_orig = self.data_preprocessor.destruct(\n                outputs_orig, data_samples)\n            outputs_ema = self.data_preprocessor.destruct(\n                outputs_ema, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.ema = DataSample(fake_img=outputs_ema)\n            gen_sample.orig = DataSample(fake_img=outputs_orig)\n            gen_sample.noise = noise\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = 'ema/orig'\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        return batch_sample_list\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data.\n\n        Calls ``self.data_preprocessor(data)`` and\n        ``self(inputs, data_sample, mode=None)`` in order. Return the\n        generated results which will be passed to evaluator.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            List[DataSample]: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        \"\"\"Train GAN model. In the training of GAN models, generator and\n        discriminator are updated alternatively. In MMagic's design,\n        `self.train_step` is called with data input. Therefore we always update\n        discriminator, whose updating is relay on real data, and then determine\n        if the generator needs to be updated based on the current number of\n        iterations. More details about whether to update generator can be found\n        in :meth:`should_gen_update`.\n\n        Args:\n            data (dict): Data sampled from dataloader.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            log_vars = self.train_discriminator(\n                **data, optimizer_wrapper=disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    log_vars_gen = self.train_generator(\n                        **data, optimizer_wrapper=gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = self.gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n                # if not update buffer, copy buffer from orig model\n                if not self.generator_ema.update_buffers:\n                    self.generator_ema.sync_buffers(\n                        self.generator.module if is_model_wrapper(\n                            self.generator) else self.generator)\n            elif self.with_ema_gen:\n                # before ema, copy weights from orig\n                self.generator_ema.sync_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        return log_vars\n\n    def _get_gen_loss(self, out_dict):\n        losses_dict = {}\n        # gan loss\n        losses_dict['loss_disc_fake_g'] = self.gan_loss(\n            out_dict['disc_pred_fake_g'], target_is_real=True, is_disc=False)\n\n        # gen auxiliary loss\n        if self.gen_auxiliary_losses is not None:\n            for loss_module in self.gen_auxiliary_losses:\n                loss_ = loss_module(out_dict)\n                if loss_ is None:\n                    continue\n\n                # the `loss_name()` function return name as 'loss_xxx'\n                if loss_module.loss_name() in losses_dict:\n                    losses_dict[loss_module.loss_name(\n                    )] = losses_dict[loss_module.loss_name()] + loss_\n                else:\n                    losses_dict[loss_module.loss_name()] = loss_\n        loss, log_var = self.parse_losses(losses_dict)\n\n        return loss, log_var\n\n    def _get_disc_loss(self, out_dict):\n        # Construct losses dict. If you hope some items to be included in the\n        # computational graph, you have to add 'loss' in its name. Otherwise,\n        # items without 'loss' in their name will just be used to print\n        # information.\n        losses_dict = {}\n        # gan loss\n        losses_dict['loss_disc_fake'] = self.gan_loss(\n            out_dict['disc_pred_fake'], target_is_real=False, is_disc=True)\n        losses_dict['loss_disc_real'] = self.gan_loss(\n            out_dict['disc_pred_real'], target_is_real=True, is_disc=True)\n\n        # disc auxiliary loss\n        if self.disc_auxiliary_losses is not None:\n            for loss_module in self.disc_auxiliary_losses:\n                loss_ = loss_module(out_dict)\n                if loss_ is None:\n                    continue\n\n                # the `loss_name()` function return name as 'loss_xxx'\n                if loss_module.loss_name() in losses_dict:\n                    losses_dict[loss_module.loss_name(\n                    )] = losses_dict[loss_module.loss_name()] + loss_\n                else:\n                    losses_dict[loss_module.loss_name()] = loss_\n        loss, log_var = self.parse_losses(losses_dict)\n\n        return loss, log_var\n\n    def train_generator(self, inputs: dict, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Training function for discriminator. All GANs should implement this\n        function by themselves.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = inputs['img'].shape[0]\n        noise = self.noise_fn(num_batches=num_batches)\n\n        fake_imgs = self.generator(noise=noise)\n        disc_pred_fake_g = self.discriminator(fake_imgs)\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            fake_imgs=fake_imgs,\n            disc_pred_fake_g=disc_pred_fake_g,\n            # iteration=curr_iter,\n            batch_size=num_batches,\n            loss_scaler=getattr(optimizer_wrapper, 'loss_scaler', None))\n        loss, log_vars = self._get_gen_loss(data_dict_)\n\n        optimizer_wrapper.update_params(loss)\n        return log_vars\n\n    def train_discriminator(self, inputs: dict, data_samples: List[DataSample],\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Training function for discriminator. All GANs should implement this\n        function by themselves.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs, num_batches = inputs['img'], inputs['img'].shape[0]\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise)\n\n        # disc pred for fake imgs and real_imgs\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n        # get data dict to compute losses for disc\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs,\n            # iteration=curr_iter,\n            batch_size=num_batches,\n            loss_scaler=getattr(optimizer_wrapper, 'loss_scaler', None))\n        loss, log_vars = self._get_disc_loss(data_dict_)\n\n        optimizer_wrapper.update_params(loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/base_models/base_mattor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom abc import ABCMeta\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.config import Config, ConfigDict\nfrom mmengine.model import BaseModel\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\nDataSamples = Optional[Union[list, torch.Tensor]]\nForwardResults = Union[Dict[str, torch.Tensor], List[DataSample],\n                       Tuple[torch.Tensor], torch.Tensor]\n\n\ndef _pad(batch_image: torch.Tensor,\n         ds_factor: int,\n         mode: str = 'reflect') -> Tuple[torch.Tensor, Tuple[int, int]]:\n    \"\"\"Pad image to a multiple of give down-sampling factor.\"\"\"\n\n    h, w = batch_image.shape[-2:]  # NCHW\n\n    new_h = ds_factor * ((h - 1) // ds_factor + 1)\n    new_w = ds_factor * ((w - 1) // ds_factor + 1)\n\n    pad_h = new_h - h\n    pad_w = new_w - w\n    pad = (pad_h, pad_w)\n    if new_h != h or new_w != w:\n        pad_width = (0, pad_w, 0, pad_h)  # torch.pad in reverse order\n        batch_image = F.pad(batch_image, pad_width, mode)\n\n    return batch_image, pad\n\n\ndef _interpolate(batch_image: torch.Tensor,\n                 ds_factor: int,\n                 mode: str = 'bicubic'\n                 ) -> Tuple[torch.Tensor, Tuple[int, int]]:\n    \"\"\"Resize image to multiple of give down-sampling factor.\"\"\"\n\n    h, w = batch_image.shape[-2:]  # NCHW\n\n    new_h = h - (h % ds_factor)\n    new_w = w - (w % ds_factor)\n\n    size = (new_h, new_w)\n    if new_h != h or new_w != w:\n        batch_image = F.interpolate(batch_image, size=size, mode=mode)\n\n    return batch_image, size\n\n\nclass BaseMattor(BaseModel, metaclass=ABCMeta):\n    \"\"\"Base class for trimap-based matting models.\n\n    A matting model must contain a backbone which produces `pred_alpha`,\n    a dense prediction with the same height and width of input image.\n    In some cases (such as DIM), the model has a refiner which refines\n    the prediction of the backbone.\n\n    Subclasses should overwrite the following functions:\n\n    - :meth:`_forward_train`, to return a loss\n    - :meth:`_forward_test`, to return a prediction\n    - :meth:`_forward`, to return raw tensors\n\n    For test, this base class provides functions to resize inputs and\n    post-process pred_alphas to get predictions\n\n    Args:\n        backbone (dict): Config of backbone.\n        data_preprocessor (dict): Config of data_preprocessor.\n            See :class:`MattorPreprocessor` for details.\n        init_cfg (dict, optional): Initialization config dict.\n        train_cfg (dict): Config of training.\n            Customized by subclassesCustomized bu In ``train_cfg``,\n            ``train_backbone`` should be specified. If the model has a refiner,\n            ``train_refiner`` should be specified.\n        test_cfg (dict): Config of testing.\n            In ``test_cfg``, If the model has a\n            refiner, ``train_refiner`` should be specified.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor: Union[dict, Config],\n                 backbone: dict,\n                 init_cfg: Optional[dict] = None,\n                 train_cfg: Optional[dict] = None,\n                 test_cfg: Optional[dict] = None):\n        # Build data_preprocessor in BaseModel\n        # Initialize weights in BaseModule\n        super().__init__(\n            data_preprocessor=data_preprocessor, init_cfg=init_cfg)\n\n        self.train_cfg = ConfigDict(\n            train_cfg) if train_cfg is not None else ConfigDict()\n        self.test_cfg = ConfigDict(\n            test_cfg) if test_cfg is not None else ConfigDict()\n\n        self.backbone = MODELS.build(backbone)\n\n    def resize_inputs(self, batch_inputs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Pad or interpolate images and trimaps to multiple of given\n        factor.\"\"\"\n\n        resize_method = self.test_cfg['resize_method']\n        resize_mode = self.test_cfg['resize_mode']\n        size_divisor = self.test_cfg['size_divisor']\n\n        batch_images = batch_inputs[:, :3, :, :]\n        batch_trimaps = batch_inputs[:, 3:, :, :]\n\n        if resize_method == 'pad':\n            batch_images, _ = _pad(batch_images, size_divisor, resize_mode)\n            batch_trimaps, _ = _pad(batch_trimaps, size_divisor, resize_mode)\n        elif resize_method == 'interp':\n            batch_images, _ = _interpolate(batch_images, size_divisor,\n                                           resize_mode)\n            batch_trimaps, _ = _interpolate(batch_trimaps, size_divisor,\n                                            'nearest')\n        else:\n            raise NotImplementedError\n\n        return torch.cat((batch_images, batch_trimaps), dim=1)\n\n    def restore_size(self, pred_alpha: torch.Tensor,\n                     data_sample: DataSample) -> torch.Tensor:\n        \"\"\"Restore the predicted alpha to the original shape.\n\n        The shape of the predicted alpha may not be the same as the shape of\n        original input image. This function restores the shape of the predicted\n        alpha.\n\n        Args:\n            pred_alpha (torch.Tensor): A single predicted alpha of\n                shape (1, H, W).\n            data_sample (DataSample): Data sample containing\n                original shape as meta data.\n\n        Returns:\n            torch.Tensor: The reshaped predicted alpha.\n        \"\"\"\n        resize_method = self.test_cfg['resize_method']\n        resize_mode = self.test_cfg['resize_mode']\n\n        ori_h, ori_w = data_sample.ori_merged_shape[:2]\n        if resize_method == 'pad':\n            pred_alpha = pred_alpha[:, :ori_h, :ori_w]\n        elif resize_method == 'interp':\n            pred_alpha = F.interpolate(\n                pred_alpha.unsqueeze(0), size=(ori_h, ori_w), mode=resize_mode)\n            pred_alpha = pred_alpha[0]  # 1,H,W\n\n        return pred_alpha\n\n    def postprocess(\n        self,\n        batch_pred_alpha: torch.Tensor,  # N, 1, H, W, float32\n        data_samples: DataSample,\n    ) -> List[DataSample]:\n        \"\"\"Post-process alpha predictions.\n\n        This function contains the following steps:\n            1. Restore padding or interpolation\n            2. Mask alpha prediction with trimap\n            3. Clamp alpha prediction to 0-1\n            4. Convert alpha prediction to uint8\n            5. Pack alpha prediction into DataSample\n\n        Currently only batch_size 1 is actually supported.\n\n        Args:\n            batch_pred_alpha (torch.Tensor): A batch of predicted alpha\n                of shape (N, 1, H, W).\n            data_samples (List[DataSample]): List of data samples.\n\n        Returns:\n            List[DataSample]: A list of predictions.\n                Each data sample contains a pred_alpha,\n                which is a torch.Tensor with dtype=uint8, device=cuda:0\n        \"\"\"\n\n        assert batch_pred_alpha.ndim == 4  # N, 1, H, W, float32\n        assert len(batch_pred_alpha) == 1\n\n        # NOTE: for mattors, we split datasamples here, not in\n        # `convert_to_datasample`\n        data_samples = data_samples.split()\n        predictions = []\n\n        for pa, ds in zip(batch_pred_alpha, data_samples):\n            pa = self.restore_size(pa, ds)  # 1, H, W\n            pa = pa[0]  # H, W\n\n            pa.clamp_(min=0, max=1)\n            ori_trimap = ds.ori_trimap[0, :, :]  # H, W\n            pa[ori_trimap == 255] = 1\n            pa[ori_trimap == 0] = 0\n\n            pa *= 255\n            pa.round_()\n            pa = pa.to(dtype=torch.uint8)\n            # pa = pa.cpu().numpy()\n            pa_sample = DataSample(pred_alpha=pa)\n            predictions.append(pa_sample)\n\n        return predictions\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: DataSamples = None,\n                mode: str = 'tensor') -> List[DataSample]:\n        \"\"\"General forward function.\n\n        Args:\n            inputs (torch.Tensor): A batch of inputs.\n                with image and trimap concatenated alone channel dimension.\n            data_samples (List[DataSample], optional):\n                A list of data samples, containing:\n                - Ground-truth alpha / foreground / background to compute loss\n                - other meta information\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``. Default: 'tensor'.\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            List[DataElement]:\n                Sequence of predictions packed into DataElement\n        \"\"\"\n        if mode == 'tensor':\n            raw = self._forward(inputs)\n            return raw\n        elif mode == 'predict':\n            # Pre-process runs in runner\n            inputs = self.resize_inputs(inputs)\n            batch_pred_alpha = self._forward_test(inputs)\n            predictions = self.postprocess(batch_pred_alpha, data_samples)\n            predictions = self.convert_to_datasample(predictions, data_samples)\n            return predictions\n        elif mode == 'loss':\n            loss = self._forward_train(inputs, data_samples)\n            return loss\n        else:\n            raise ValueError('Invalid forward mode.')\n\n    def convert_to_datasample(self, predictions: List[DataSample],\n                              data_samples: DataSample) -> List[DataSample]:\n        \"\"\"Add predictions to data samples.\n\n        Args:\n            predictions (List[DataSample]): The predictions of the model.\n            data_samples (DataSample): The data samples loaded from\n                dataloader.\n\n        Returns:\n            List[DataSample]: Modified data samples.\n        \"\"\"\n        data_samples = data_samples.split()\n        for data_sample, pred in zip(data_samples, predictions):\n            data_sample.output = pred\n        return data_samples\n"
  },
  {
    "path": "mmagic/models/base_models/base_translation_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom abc import ABCMeta\nfrom collections import defaultdict\nfrom copy import deepcopy\nfrom typing import List, Optional\n\nimport torch.nn as nn\nfrom mmengine.model import BaseModel, is_model_wrapper\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass BaseTranslationModel(BaseModel, metaclass=ABCMeta):\n    \"\"\"Base Translation Model.\n\n    Translation models can transfer images from one domain to\n    another. Domain information like `default_domain`,\n    `reachable_domains` are needed to initialize the class.\n    And we also provide query functions like `is_domain_reachable`,\n    `get_other_domains`.\n\n    You can get a specific generator based on the domain,\n    and by specifying `target_domain` in the forward function,\n    you can decide the domain of generated images.\n    Considering the difference among different image translation models,\n    we only provide the external interfaces mentioned above.\n    When you implement image translation with a specific method,\n    you can inherit both `BaseTranslationModel`\n    and the method (e.g BaseGAN) and implement abstract methods.\n\n    Args:\n        default_domain (str): Default output domain.\n        reachable_domains (list[str]): Domains that can be generated by\n            the model.\n        related_domains (list[str]): Domains involved in training and\n            testing. `reachable_domains` must be contained in\n            `related_domains`. However, related_domains may contain\n            source domains that are used to retrieve source images from\n            data_batch but not in reachable_domains.\n        discriminator_steps (int): The number of times the discriminator is\n            completely updated before the generator is updated. Defaults to 1.\n        disc_init_steps (int): The number of initial steps used only to train\n            discriminators.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 discriminator,\n                 default_domain: str,\n                 reachable_domains: List[str],\n                 related_domains: List[str],\n                 data_preprocessor,\n                 discriminator_steps: int = 1,\n                 disc_init_steps: int = 0,\n                 real_img_key: str = 'real_img',\n                 loss_config: Optional[dict] = None):\n        super().__init__(data_preprocessor)\n        self._default_domain = default_domain\n        self._reachable_domains = reachable_domains\n        self._related_domains = related_domains\n        assert self._default_domain in self._reachable_domains\n        assert set(self._reachable_domains) <= set(self._related_domains)\n\n        self.discriminator_steps = discriminator_steps\n        self.disc_init_steps = disc_init_steps\n        self.real_img_key = real_img_key\n\n        self._gen_cfg = deepcopy(generator)\n        # build domain generators\n        self.generators = nn.ModuleDict()\n        for domain in self._reachable_domains:\n            self.generators[domain] = MODELS.build(generator)\n\n        self._disc_cfg = deepcopy(discriminator)\n        # build domain discriminators\n        if discriminator is not None:\n            self.discriminators = nn.ModuleDict()\n            for domain in self._reachable_domains:\n                self.discriminators[domain] = MODELS.build(discriminator)\n        # support no discriminator in testing\n        else:\n            self.discriminators = None\n\n        self.loss_config = dict() if loss_config is None else loss_config\n\n    def init_weights(self):\n        \"\"\"Initialize weights for the module dict.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Default: None.\n        \"\"\"\n        self._params_init_info = defaultdict(dict)\n\n        for _, param in self.named_parameters():\n            self._params_init_info[param][\n                'init_info'] = f'The value is the same before and ' \\\n                                f'after calling `init_weights` ' \\\n                                f'of {self.__class__.__name__} '\n            mean = param.data.mean().cpu()\n            self._params_init_info[param]['tmp_mean_value'] = mean\n\n        for domain in self._reachable_domains:\n            if is_model_wrapper(self.generators):\n                gen = self.generators.module[domain]\n            else:\n                gen = self.generators[domain]\n            gen._params_init_info = self._params_init_info\n            gen.init_weights()\n\n            if self.discriminators is not None:\n                if is_model_wrapper(self.discriminators):\n                    disc = self.discriminators.module[domain]\n                else:\n                    disc = self.discriminators[domain]\n                disc._params_init_info = self._params_init_info\n                disc.init_weights()\n\n        super()._dump_init_info()\n        for m in self.modules():\n            if hasattr(m, '_params_init_info'):\n                del m._params_init_info\n\n    def get_module(self, module):\n        \"\"\"Get `nn.ModuleDict` to fit the `MMDistributedDataParallel`\n        interface.\n\n        Args:\n            module (MMDistributedDataParallel | nn.ModuleDict): The input\n                module that needs processing.\n\n        Returns:\n            nn.ModuleDict: The ModuleDict of multiple networks.\n        \"\"\"\n        if is_model_wrapper(module):\n            return module.module\n\n        return module\n\n    def forward(self, img, test_mode=False, **kwargs):\n        \"\"\"Forward function.\n\n        Args:\n            img (tensor): Input image tensor.\n            test_mode (bool): Whether in test mode or not. Default: False.\n            kwargs (dict): Other arguments.\n        \"\"\"\n        if not test_mode:\n            return self.forward_train(img, **kwargs)\n\n        return self.forward_test(img, **kwargs)\n\n    def forward_train(self, img, target_domain, **kwargs):\n        \"\"\"Forward function for training.\n\n        Args:\n            img (tensor): Input image tensor.\n            target_domain (str): Target domain of output image.\n            kwargs (dict): Other arguments.\n\n        Returns:\n            dict: Forward results.\n        \"\"\"\n        target = self.translation(img, target_domain=target_domain, **kwargs)\n        results = dict(source=img, target=target)\n        return results\n\n    def forward_test(self, img, target_domain, **kwargs):\n        \"\"\"Forward function for testing.\n\n        Args:\n            img (tensor): Input image tensor.\n            target_domain (str): Target domain of output image.\n            kwargs (dict): Other arguments.\n\n        Returns:\n            dict: Forward results.\n        \"\"\"\n        target = self.translation(img, target_domain=target_domain, **kwargs)\n        results = dict(source=img.cpu(), target=target.cpu())\n        return results\n\n    def is_domain_reachable(self, domain):\n        \"\"\"Whether image of this domain can be generated.\"\"\"\n        return domain in self._reachable_domains\n\n    def get_other_domains(self, domain):\n        \"\"\"get other domains.\"\"\"\n        return list(set(self._related_domains) - set([domain]))\n\n    def _get_target_generator(self, domain):\n        \"\"\"get target generator.\"\"\"\n        assert self.is_domain_reachable(\n            domain\n        ), f'{domain} domain is not reachable, available domain list is\\\n            {self._reachable_domains}'\n\n        return self.get_module(self.generators)[domain]\n\n    def _get_target_discriminator(self, domain):\n        \"\"\"get target discriminator.\"\"\"\n        assert self.is_domain_reachable(\n            domain\n        ), f'{domain} domain is not reachable, available domain list is\\\n            {self._reachable_domains}'\n\n        return self.get_module(self.discriminators)[domain]\n\n    def translation(self, image, target_domain=None, **kwargs):\n        \"\"\"Translation Image to target style.\n\n        Args:\n            image (tensor): Image tensor with a shape of (N, C, H, W).\n            target_domain (str, optional): Target domain of output image.\n                Default to None.\n\n        Returns:\n            dict: Image tensor of target style.\n        \"\"\"\n        if target_domain is None:\n            target_domain = self._default_domain\n        _model = self._get_target_generator(target_domain)\n        outputs = _model(image, **kwargs)\n        return outputs\n"
  },
  {
    "path": "mmagic/models/base_models/basic_interpolator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import tensor2img\nfrom .base_edit_model import BaseEditModel\n\n# TODO tensor2img will be move\n\n\n@MODELS.register_module()\nclass BasicInterpolator(BaseEditModel):\n    \"\"\"Basic model for video interpolation.\n\n    It must contain a generator that takes frames as inputs and outputs an\n    interpolated frame. It also has a pixel-wise loss for training.\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        required_frames (int): Required frames in each process. Default: 2\n        step_frames (int): Step size of video frame interpolation. Default: 1\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`.\n    \"\"\"\n\n    def __init__(self,\n                 generator: dict,\n                 pixel_loss: dict,\n                 train_cfg: Optional[dict] = None,\n                 test_cfg: Optional[dict] = None,\n                 required_frames: int = 2,\n                 step_frames: int = 1,\n                 init_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[dict] = None):\n\n        super().__init__(\n            generator=generator,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        # Required frames in each process\n        self.required_frames = required_frames\n        # Step size of video frame interpolation\n        self.step_frames = step_frames\n\n    def split_frames(self, input_tensors: torch.Tensor) -> torch.Tensor:\n        \"\"\"split input tensors for inference.\n\n        Args:\n            input_tensors (Tensor): Tensor of input frames with shape\n                [1, t, c, h, w]\n\n        Returns:\n            Tensor: Split tensor with shape [t-1, 2, c, h, w]\n        \"\"\"\n\n        num_frames = input_tensors.shape[1]\n\n        result = [\n            input_tensors[:, i:i + self.required_frames]\n            for i in range(0, num_frames - self.required_frames +\n                           1, self.step_frames)\n        ]\n        result = torch.cat(result, dim=0)\n\n        return result\n\n    @staticmethod\n    def merge_frames(input_tensors: torch.Tensor,\n                     output_tensors: torch.Tensor) -> list:\n        \"\"\"merge input frames and output frames.\n\n        Interpolate a frame between the given two frames.\n\n        Merged from\n            [[in1, in2], [in2, in3], [in3, in4], ...]\n            [[out1], [out2], [out3], ...]\n        to\n            [in1, out1, in2, out2, in3, out3, in4, ...]\n\n        Args:\n            input_tensors (Tensor): The input frames with shape [n, 2, c, h, w]\n            output_tensors (Tensor): The output frames with shape\n                [n, 1, c, h, w].\n\n        Returns:\n            list[np.array]: The final frames.\n        \"\"\"\n\n        num_frames = input_tensors.shape[0]\n        result = []\n        for i in range(num_frames):\n            result.append(tensor2img(input_tensors[i, 0]))\n            result.append(tensor2img(output_tensors[i, 0]))\n        result.append(tensor2img(input_tensors[-1, 1]))\n\n        return result\n"
  },
  {
    "path": "mmagic/models/base_models/one_stage.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Tuple, Union\n\nimport torch\nfrom mmengine.config import Config\nfrom mmengine.model import BaseModel\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import SampleList\nfrom ..utils import set_requires_grad\n\nFORWARD_RETURN_TYPE = Union[dict, torch.Tensor,\n                            Tuple[torch.Tensor, torch.Tensor], SampleList]\n\n\n@MODELS.register_module()\nclass OneStageInpaintor(BaseModel):\n    \"\"\"Standard one-stage inpaintor with commonly used losses.\n\n    An inpaintor must contain an encoder-decoder style generator to\n    inpaint masked regions. A discriminator will be adopted when\n    adversarial training is needed.\n\n    In this class, we provide a common interface for inpaintors.\n    For other inpaintors, only some funcs may be modified to fit the\n    input style or training schedule.\n\n    Args:\n        data_preprocessor (dict): Config of data_preprocessor.\n        encdec (dict): Config for encoder-decoder style generator.\n        disc (dict): Config for discriminator.\n        loss_gan (dict): Config for adversarial loss.\n        loss_gp (dict): Config for gradient penalty loss.\n        loss_disc_shift (dict): Config for discriminator shift loss.\n        loss_composed_percep (dict): Config for perceptual and style loss with\n            composed image as input.\n        loss_out_percep (dict): Config for perceptual and style loss with\n            direct output as input.\n        loss_l1_hole (dict): Config for l1 loss in the hole.\n        loss_l1_valid (dict): Config for l1 loss in the valid region.\n        loss_tv (dict): Config for total variation loss.\n        train_cfg (dict): Configs for training scheduler. `disc_step` must be\n            contained for indicates the discriminator updating steps in each\n            training step.\n        test_cfg (dict): Configs for testing scheduler.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor: Union[dict, Config],\n                 encdec: dict,\n                 disc: Optional[dict] = None,\n                 loss_gan: Optional[dict] = None,\n                 loss_gp: Optional[dict] = None,\n                 loss_disc_shift: Optional[dict] = None,\n                 loss_composed_percep: Optional[dict] = None,\n                 loss_out_percep: bool = False,\n                 loss_l1_hole: Optional[dict] = None,\n                 loss_l1_valid: Optional[dict] = None,\n                 loss_tv: Optional[dict] = None,\n                 train_cfg: Optional[dict] = None,\n                 test_cfg: Optional[dict] = None,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(\n            data_preprocessor=data_preprocessor, init_cfg=init_cfg)\n        self.with_l1_hole_loss = loss_l1_hole is not None\n        self.with_l1_valid_loss = loss_l1_valid is not None\n        self.with_tv_loss = loss_tv is not None\n        self.with_composed_percep_loss = loss_composed_percep is not None\n        self.with_out_percep_loss = loss_out_percep\n        self.with_gan = disc is not None and loss_gan is not None\n        self.with_gp_loss = loss_gp is not None\n        self.with_disc_shift_loss = loss_disc_shift is not None\n        self.is_train = train_cfg is not None\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n        self.generator = MODELS.build(encdec)\n\n        # build loss modules\n        if self.with_gan:\n            self.disc = MODELS.build(disc)\n            self.loss_gan = MODELS.build(loss_gan)\n\n        if self.with_l1_hole_loss:\n            self.loss_l1_hole = MODELS.build(loss_l1_hole)\n\n        if self.with_l1_valid_loss:\n            self.loss_l1_valid = MODELS.build(loss_l1_valid)\n\n        if self.with_composed_percep_loss:\n            self.loss_percep = MODELS.build(loss_composed_percep)\n\n        if self.with_gp_loss:\n            self.loss_gp = MODELS.build(loss_gp)\n\n        if self.with_disc_shift_loss:\n            self.loss_disc_shift = MODELS.build(loss_disc_shift)\n\n        if self.with_tv_loss:\n            self.loss_tv = MODELS.build(loss_tv)\n\n        self.disc_step_count = 0\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[SampleList],\n                mode: str = 'tensor') -> FORWARD_RETURN_TYPE:\n        \"\"\"Forward function.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``. Default: 'tensor'.\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict`` or tensor for custom use.\n        \"\"\"\n        if mode == 'tensor':\n            raw = self.forward_tensor(inputs, data_samples)\n            return raw\n        elif mode == 'predict':\n            # Pre-process runs in BaseModel.val_step / test_step\n            predictions = self.forward_test(inputs, data_samples)\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n        elif mode == 'loss':\n            raise NotImplementedError('This mode should not be used in '\n                                      'current training schedule. Please use '\n                                      '`train_step` for training.')\n        else:\n            raise ValueError('Invalid forward mode.')\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> dict:\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n\n            1. get fake res/image\n            2. optimize discriminator (if have)\n            3. optimize generator\n\n        If `self.train_cfg.disc_step > 1`, the train step will contain multiple\n        iterations for optimizing discriminator with different input data and\n        only one iteration for optimizing generator after `disc_step`\n        iterations for discriminator.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        masked_img = batch_inputs  # float\n        # gt_img: float [-1, 1], mask: uint8 [0/1]\n        gt_img, mask = data_samples.gt_img, data_samples.mask\n        mask = mask.float()\n\n        # get common output from encdec\n        input_x = torch.cat([masked_img, mask], dim=1)\n        fake_res = self.generator(input_x)\n        fake_img = gt_img * (1. - mask) + fake_res * mask\n\n        # discriminator training step\n        if self.train_cfg.disc_step > 0:\n            set_requires_grad(self.disc, True)\n            disc_losses = self.forward_train_d(\n                fake_img.detach(), False, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].zero_grad()\n            loss_disc.backward()\n\n            disc_losses = self.forward_train_d(gt_img, True, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            loss_disc.backward()\n\n            if self.with_gp_loss:\n                loss_d_gp = self.loss_gp(\n                    self.disc, gt_img, fake_img, mask=mask)\n                loss_disc, log_vars_d = self.parse_losses(\n                    dict(loss_gp=loss_d_gp))\n                log_vars.update(log_vars_d)\n                loss_disc.backward()\n\n            optim_wrapper['disc'].step()\n\n            self.disc_step_count = (self.disc_step_count +\n                                    1) % self.train_cfg.disc_step\n            if self.disc_step_count != 0:\n                # results contain the data for visualization\n                results = dict(\n                    gt_img=gt_img.cpu(),\n                    masked_img=masked_img.cpu(),\n                    fake_res=fake_res.cpu(),\n                    fake_img=fake_img.cpu())\n\n                # outputs = dict(\n                #     log_vars=log_vars,\n                #     num_samples=len(data_batch['gt_img'].data),\n                #     results=results)\n\n                return log_vars\n\n        # generator (encdec) training step, results contain the data\n        # for visualization\n        if self.with_gan:\n            set_requires_grad(self.disc, False)\n        results, g_losses = self.generator_loss(fake_res, fake_img, gt_img,\n                                                mask, masked_img)\n        loss_g, log_vars_g = self.parse_losses(g_losses)\n        log_vars.update(log_vars_g)\n        optim_wrapper['generator'].zero_grad()\n        loss_g.backward()\n        optim_wrapper['generator'].step()\n\n        # outputs = dict(\n        #     log_vars=log_vars,\n        #     num_samples=len(data_batch['gt_img'].data),\n        #     results=results)\n\n        return log_vars\n\n    def forward_train(self, *args, **kwargs) -> None:\n        \"\"\"Forward function for training.\n\n        In this version, we do not use this interface.\n        \"\"\"\n        raise NotImplementedError('This interface should not be used in '\n                                  'current training schedule. Please use '\n                                  '`train_step` for training.')\n\n    def forward_train_d(self, data_batch: torch.Tensor, is_real: bool,\n                        is_disc: bool) -> dict:\n        \"\"\"Forward function in discriminator training step.\n\n        In this function, we compute the prediction for each data batch (real\n        or fake). Meanwhile, the standard gan loss will be computed with\n        several proposed losses for stable training.\n\n        Args:\n            data_batch (torch.Tensor): Batch of real data or fake data.\n            is_real (bool): If True, the gan loss will regard this batch as\n                real data. Otherwise, the gan loss will regard this batch as\n                fake data.\n            is_disc (bool): If True, this function is called in discriminator\n                training step. Otherwise, this function is called in generator\n                training step. This will help us to compute different types of\n                adversarial loss, like LSGAN.\n\n        Returns:\n            dict: Contains the loss items computed in this function.\n        \"\"\"\n        pred = self.disc(data_batch)\n        loss_ = self.loss_gan(pred, is_real, is_disc)\n\n        loss = dict(real_loss=loss_) if is_real else dict(fake_loss=loss_)\n\n        if self.with_disc_shift_loss:\n            loss_d_shift = self.loss_disc_shift(loss_)\n            # 0.5 for average the fake and real data\n            loss.update(loss_disc_shift=loss_d_shift * 0.5)\n\n        return loss\n\n    def generator_loss(self, fake_res: torch.Tensor, fake_img: torch.Tensor,\n                       gt: torch.Tensor, mask: torch.Tensor,\n                       masked_img: torch.Tensor) -> Tuple[dict, dict]:\n        \"\"\"Forward function in generator training step.\n\n        In this function, we mainly compute the loss items for generator with\n        the given (fake_res, fake_img). In general, the `fake_res` is the\n        direct output of the generator and the `fake_img` is the composition of\n        direct output and ground-truth image.\n\n        Args:\n            fake_res (torch.Tensor): Direct output of the generator.\n            fake_img (torch.Tensor): Composition of `fake_res` and\n                ground-truth image.\n            gt (torch.Tensor): Ground-truth image.\n            mask (torch.Tensor): Mask image.\n            masked_img (torch.Tensor): Composition of mask image and\n                ground-truth image.\n\n        Returns:\n            tuple(dict): Dict contains the results computed within this \\\n                function for visualization and dict contains the loss items \\\n                computed in this function.\n        \"\"\"\n        loss = dict()\n\n        if self.with_gan:\n            g_fake_pred = self.disc(fake_img)\n            loss_g_fake = self.loss_gan(g_fake_pred, True, is_disc=False)\n            loss['loss_g_fake'] = loss_g_fake\n\n        if self.with_l1_hole_loss:\n            loss_l1_hole = self.loss_l1_hole(fake_res, gt, weight=mask)\n            loss['loss_l1_hole'] = loss_l1_hole\n\n        if self.with_l1_valid_loss:\n            loss_loss_l1_valid = self.loss_l1_valid(\n                fake_res, gt, weight=1. - mask)\n            loss['loss_l1_valid'] = loss_loss_l1_valid\n\n        if self.with_composed_percep_loss:\n            loss_pecep, loss_style = self.loss_percep(fake_img, gt)\n            if loss_pecep is not None:\n                loss['loss_composed_percep'] = loss_pecep\n            if loss_style is not None:\n                loss['loss_composed_style'] = loss_style\n\n        if self.with_out_percep_loss:\n            loss_out_percep, loss_out_style = self.loss_percep(fake_res, gt)\n            if loss_out_percep is not None:\n                loss['loss_out_percep'] = loss_out_percep\n            if loss_out_style is not None:\n                loss['loss_out_style'] = loss_out_style\n\n        if self.with_tv_loss:\n            loss_tv = self.loss_tv(fake_img, mask=mask)\n            loss['loss_tv'] = loss_tv\n\n        res = dict(\n            gt_img=gt.cpu(),\n            masked_img=masked_img.cpu(),\n            fake_res=fake_res.cpu(),\n            fake_img=fake_img.cpu())\n\n        return res, loss\n\n    def forward_tensor(self, inputs: torch.Tensor, data_samples: SampleList\n                       ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Forward function in tensor mode.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_samples (List[dict]): List of data sample dict.\n\n        Returns:\n            tuple: Direct output of the generator and composition of `fake_res`\n                and ground-truth image.\n        \"\"\"\n        # Pre-process runs in BaseModel.val_step / test_step\n        masked_imgs = inputs  # N,3,H,W\n\n        masks = data_samples.mask  # N,1,H,W\n        input_xs = torch.cat([masked_imgs, masks], dim=1)  # N,4,H,W\n        fake_reses = self.generator(input_xs)\n        fake_imgs = fake_reses * masks + masked_imgs * (1. - masks)\n        return fake_reses, fake_imgs\n\n    def forward_test(self, inputs: torch.Tensor,\n                     data_samples: SampleList) -> DataSample:\n        \"\"\"Forward function for testing.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_samples (List[dict]): List of data sample dict.\n\n        Returns:\n            predictions (List[DataSample]): List of prediction saved in\n                DataSample.\n        \"\"\"\n        fake_reses, fake_imgs = self.forward_tensor(inputs, data_samples)\n\n        predictions = []\n        fake_reses = self.data_preprocessor.destruct(fake_reses, data_samples)\n        fake_imgs = self.data_preprocessor.destruct(fake_imgs, data_samples)\n\n        # create a stacked data sample here\n        predictions = DataSample(\n            fake_res=fake_reses, fake_img=fake_imgs, pred_img=fake_imgs)\n\n        return predictions\n\n    def convert_to_datasample(self, predictions: DataSample,\n                              data_samples: DataSample,\n                              inputs: Optional[torch.Tensor]\n                              ) -> List[DataSample]:\n        \"\"\"Add predictions and destructed inputs (if passed) to data samples.\n\n        Args:\n            predictions (DataSample): The predictions of the model.\n            data_samples (DataSample): The data samples loaded from\n                dataloader.\n            inputs (Optional[torch.Tensor]): The input of model. Defaults to\n                None.\n\n        Returns:\n            List[DataSample]: Modified data samples.\n        \"\"\"\n        if inputs is not None:\n            destructed_input = self.data_preprocessor.destruct(\n                inputs, data_samples, 'img')\n            data_samples.set_tensor_data({'input': destructed_input})\n        data_samples = data_samples.split()\n        predictions = predictions.split()\n\n        for data_sample, pred in zip(data_samples, predictions):\n            data_sample.output = pred\n\n        return data_samples\n\n    def forward_dummy(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward dummy function for getting flops.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Results tensor with shape of (n, 3, h, w).\n        \"\"\"\n        res = self.generator(x)\n\n        return res\n"
  },
  {
    "path": "mmagic/models/base_models/two_stage.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Sequence, Tuple, Union\n\nimport torch\nfrom mmengine.config import Config\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import SampleList\nfrom ..utils import set_requires_grad\nfrom .one_stage import OneStageInpaintor\n\n\n@MODELS.register_module()\nclass TwoStageInpaintor(OneStageInpaintor):\n    \"\"\"Standard two-stage inpaintor with commonly used losses. A two-stage\n    inpaintor contains two encoder-decoder style generators to inpaint masked\n    regions. Currently, we support these loss types in each of two stage\n    inpaintors:\n\n    ['loss_gan', 'loss_l1_hole', 'loss_l1_valid', 'loss_composed_percep',\\\n     'loss_out_percep', 'loss_tv']\n    The `stage1_loss_type` and `stage2_loss_type` should be chosen from these\n    loss types.\n\n    Args:\n        data_preprocessor (dict): Config of data_preprocessor.\n        encdec (dict): Config for encoder-decoder style generator.\n        disc (dict): Config for discriminator.\n        loss_gan (dict): Config for adversarial loss.\n        loss_gp (dict): Config for gradient penalty loss.\n        loss_disc_shift (dict): Config for discriminator shift loss.\n        loss_composed_percep (dict): Config for perceptual and style loss with\n            composed image as input.\n        loss_out_percep (dict): Config for perceptual and style loss with\n            direct output as input.\n        loss_l1_hole (dict): Config for l1 loss in the hole.\n        loss_l1_valid (dict): Config for l1 loss in the valid region.\n        loss_tv (dict): Config for total variation loss.\n        train_cfg (dict): Configs for training scheduler. `disc_step` must be\n            contained for indicates the discriminator updating steps in each\n            training step.\n        test_cfg (dict): Configs for testing scheduler.\n        init_cfg (dict, optional): Initialization config dict.\n        stage1_loss_type (tuple[str]): Contains the loss names used in the\n            first stage model. Default: ('loss_l1_hole').\n        stage2_loss_type (tuple[str]): Contains the loss names used in the\n            second stage model. Default: ('loss_l1_hole', 'loss_gan').\n        input_with_ones (bool): Whether to concatenate an extra ones tensor in\n            input. Default: True.\n        disc_input_with_mask (bool): Whether to add mask as input in\n            discriminator. Default: False.\n    \"\"\"\n\n    def __init__(\n            self,\n            data_preprocessor: Union[dict, Config],\n            encdec: dict,\n            disc: Optional[dict] = None,\n            loss_gan: Optional[dict] = None,\n            loss_gp: Optional[dict] = None,\n            loss_disc_shift: Optional[dict] = None,\n            loss_composed_percep: Optional[dict] = None,\n            loss_out_percep: bool = False,\n            loss_l1_hole: Optional[dict] = None,\n            loss_l1_valid: Optional[dict] = None,\n            loss_tv: Optional[dict] = None,\n            train_cfg: Optional[dict] = None,\n            test_cfg: Optional[dict] = None,\n            init_cfg: Optional[dict] = None,\n            stage1_loss_type: Optional[Sequence[str]] = ('loss_l1_hole', ),\n            stage2_loss_type: Optional[Sequence[str]] = ('loss_l1_hole',\n                                                         'loss_gan'),\n            input_with_ones: bool = True,\n            disc_input_with_mask: bool = False):\n        super().__init__(\n            data_preprocessor=data_preprocessor,\n            encdec=encdec,\n            disc=disc,\n            loss_gan=loss_gan,\n            loss_gp=loss_gp,\n            loss_disc_shift=loss_disc_shift,\n            loss_composed_percep=loss_composed_percep,\n            loss_out_percep=loss_out_percep,\n            loss_l1_hole=loss_l1_hole,\n            loss_l1_valid=loss_l1_valid,\n            loss_tv=loss_tv,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg)\n\n        self.stage1_loss_type = stage1_loss_type\n        self.stage2_loss_type = stage2_loss_type\n        self.input_with_ones = input_with_ones\n        self.disc_input_with_mask = disc_input_with_mask\n\n        if self.train_cfg is not None:\n            self.cur_iter = self.train_cfg.start_iter\n\n    def forward_tensor(self, inputs: torch.Tensor, data_samples: SampleList\n                       ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Forward function in tensor mode.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_samples (List[dict]): List of data sample dict.\n        Returns:\n            dict: Dict contains output results.\n        \"\"\"\n        # Pre-process runs in BaseModel.val_step / test_step\n        masked_imgs = inputs  # N,3,H,W\n\n        masks = data_samples.mask\n        if self.input_with_ones:\n            tmp_ones = torch.ones_like(masks)\n            input_xs = torch.cat([masked_imgs, tmp_ones, masks], dim=1)\n        else:\n            input_xs = torch.cat([masked_imgs, masks], dim=1)  # N,4,H,W\n        stage1_fake_res, stage2_fake_res = self.generator(input_xs)\n        fake_imgs = stage2_fake_res * masks + masked_imgs * (1. - masks)\n        return stage2_fake_res, fake_imgs\n\n    def two_stage_loss(self, stage1_data: dict, stage2_data: dict,\n                       gt: torch.Tensor, mask: torch.Tensor,\n                       masked_img: torch.Tensor) -> Tuple[dict, dict]:\n        \"\"\"Calculate two-stage loss.\n\n        Args:\n            stage1_data (dict): Contain stage1 results.\n            stage2_data (dict): Contain stage2 results..\n            gt (torch.Tensor): Ground-truth image.\n            mask (torch.Tensor): Mask image.\n            masked_img (torch.Tensor): Composition of mask image and\n                ground-truth image.\n        Returns:\n            tuple(dict): Dict contains the results computed within this \\\n                function for visualization and dict contains the loss items \\\n                computed in this function.\n        \"\"\"\n\n        loss = dict()\n        results = dict(\n            gt_img=gt.cpu(), mask=mask.cpu(), masked_img=masked_img.cpu())\n        # calculate losses for stage1\n        if self.stage1_loss_type is not None:\n            fake_res = stage1_data['fake_res']\n            fake_img = stage1_data['fake_img']\n            for type_key in self.stage1_loss_type:\n                tmp_loss = self.calculate_loss_with_type(\n                    type_key, fake_res, fake_img, gt, mask, prefix='stage1_')\n                loss.update(tmp_loss)\n\n        results.update(\n            dict(\n                stage1_fake_res=stage1_data['fake_res'].cpu(),\n                stage1_fake_img=stage1_data['fake_img'].cpu()))\n\n        if self.stage2_loss_type is not None:\n            fake_res = stage2_data['fake_res']\n            fake_img = stage2_data['fake_img']\n            for type_key in self.stage2_loss_type:\n                tmp_loss = self.calculate_loss_with_type(\n                    type_key, fake_res, fake_img, gt, mask, prefix='stage2_')\n                loss.update(tmp_loss)\n        results.update(\n            dict(\n                stage2_fake_res=stage2_data['fake_res'].cpu(),\n                stage2_fake_img=stage2_data['fake_img'].cpu()))\n\n        return results, loss\n\n    def calculate_loss_with_type(self,\n                                 loss_type: str,\n                                 fake_res: torch.Tensor,\n                                 fake_img: torch.Tensor,\n                                 gt: torch.Tensor,\n                                 mask: torch.Tensor,\n                                 prefix: Optional[str] = 'stage1_') -> dict:\n        \"\"\"Calculate multiple types of losses.\n\n        Args:\n            loss_type (str): Type of the loss.\n            fake_res (torch.Tensor): Direct results from model.\n            fake_img (torch.Tensor): Composited results from model.\n            gt (torch.Tensor): Ground-truth tensor.\n            mask (torch.Tensor): Mask tensor.\n            prefix (str, optional): Prefix for loss name.\n                Defaults to 'stage1\\_'. # noqa\n        Returns:\n            dict: Contain loss value with its name.\n        \"\"\"\n        loss_dict = dict()\n        if loss_type == 'loss_gan':\n            if self.disc_input_with_mask:\n                disc_input_x = torch.cat([fake_img, mask], dim=1)\n            else:\n                disc_input_x = fake_img\n            g_fake_pred = self.disc(disc_input_x)\n            loss_g_fake = self.loss_gan(g_fake_pred, True, is_disc=False)\n            loss_dict[prefix + 'loss_g_fake'] = loss_g_fake\n        elif 'percep' in loss_type:\n            loss_pecep, loss_style = self.loss_percep(fake_img, gt)\n            if loss_pecep is not None:\n                loss_dict[prefix + loss_type] = loss_pecep\n            if loss_style is not None:\n                loss_dict[prefix + loss_type[:-6] + 'style'] = loss_style\n        elif 'tv' in loss_type:\n            loss_tv = self.loss_tv(fake_img, mask=mask)\n            loss_dict[prefix + loss_type] = loss_tv\n        elif 'l1' in loss_type:\n            weight = 1. - mask if 'valid' in loss_type else mask\n            loss_l1 = getattr(self, loss_type)(fake_res, gt, weight=weight)\n            loss_dict[prefix + loss_type] = loss_l1\n        else:\n            raise NotImplementedError(\n                f'Please check your loss type {loss_type}'\n                f' and the config dict in init function. '\n                f'We cannot find the related loss function.')\n\n        return loss_dict\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> dict:\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n        1. get fake res/image\n        2. optimize discriminator (if have)\n        3. optimize generator\n\n        If `self.train_cfg.disc_step > 1`, the train step will contain multiple\n        iterations for optimizing discriminator with different input data and\n        only one iteration for optimizing generator after `disc_step`\n        iterations for discriminator.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of \\\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        masked_img = batch_inputs  # float\n        gt_img = data_samples.gt_img\n        mask = data_samples.mask\n        mask = mask.float()\n\n        # get common output from encdec\n        if self.input_with_ones:\n            tmp_ones = torch.ones_like(mask)\n            input_x = torch.cat([masked_img, tmp_ones, mask], dim=1)\n        else:\n            input_x = torch.cat([masked_img, mask], dim=1)\n        stage1_fake_res, stage2_fake_res = self.generator(input_x)\n        stage1_fake_img = masked_img * (1. - mask) + stage1_fake_res * mask\n        stage2_fake_img = masked_img * (1. - mask) + stage2_fake_res * mask\n\n        # discriminator training step\n        # In this version, we only use the results from the second stage to\n        # train discriminators, which is a commonly used setting. This can be\n        # easily modified to your custom training schedule.\n        if self.train_cfg.disc_step > 0:\n            set_requires_grad(self.disc, True)\n            if self.disc_input_with_mask:\n                disc_input_x = torch.cat([stage2_fake_img.detach(), mask],\n                                         dim=1)\n            else:\n                disc_input_x = stage2_fake_img.detach()\n            disc_losses = self.forward_train_d(\n                disc_input_x, False, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].zero_grad()\n            optim_wrapper['disc'].backward(loss_disc)\n\n            if self.disc_input_with_mask:\n                disc_input_x = torch.cat([gt_img, mask], dim=1)\n            else:\n                disc_input_x = gt_img\n            disc_losses = self.forward_train_d(\n                disc_input_x, True, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].backward(loss_disc)\n\n            if self.with_gp_loss:\n                # gradient penalty loss should not be used with mask as input\n                assert not self.disc_input_with_mask\n                loss_d_gp = self.loss_gp(\n                    self.disc, gt_img, stage2_fake_img, mask=mask)\n                loss_disc, log_vars_d = self.parse_losses(\n                    dict(loss_gp=loss_d_gp))\n                log_vars.update(log_vars_d)\n                optim_wrapper['disc'].backward(loss_disc)\n\n            optim_wrapper['disc'].step()\n\n            self.disc_step_count = (self.disc_step_count +\n                                    1) % self.train_cfg.disc_step\n            if self.disc_step_count != 0:\n                # results contain the data for visualization\n                results = dict(\n                    gt_img=gt_img.cpu(),\n                    masked_img=masked_img.cpu(),\n                    fake_res=stage2_fake_res.cpu(),\n                    fake_img=stage2_fake_img.cpu())\n\n                return log_vars\n\n        # prepare stage1 results and stage2 results dict for calculating losses\n        stage1_results = dict(\n            fake_res=stage1_fake_res, fake_img=stage1_fake_img)\n        stage2_results = dict(\n            fake_res=stage2_fake_res, fake_img=stage2_fake_img)\n\n        # generator (encdec) and refiner training step, results contain the\n        # data for visualization\n        if self.with_gan:\n            set_requires_grad(self.disc, False)\n        results, two_stage_losses = self.two_stage_loss(\n            stage1_results, stage2_results, gt_img, mask, masked_img)\n        loss_two_stage, log_vars_two_stage = self.parse_losses(\n            two_stage_losses)\n        log_vars.update(log_vars_two_stage)\n        optim_wrapper['generator'].zero_grad()\n        optim_wrapper['generator'].backward(loss_two_stage)\n        optim_wrapper['generator'].step()\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/data_preprocessors/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .data_preprocessor import DataPreprocessor\nfrom .mattor_preprocessor import MattorPreprocessor\n\n__all__ = ['DataPreprocessor', 'MattorPreprocessor']\n"
  },
  {
    "path": "mmagic/models/data_preprocessors/data_preprocessor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom logging import WARNING\nfrom typing import List, Optional, Sequence, Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom mmengine.model import ImgDataPreprocessor\nfrom mmengine.utils import is_seq_of\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\n\nCastData = Union[tuple, dict, DataSample, Tensor, list]\n\n\n@MODELS.register_module()\nclass DataPreprocessor(ImgDataPreprocessor):\n    \"\"\"Image pre-processor for generative models. This class provide\n    normalization and bgr to rgb conversion for image tensor inputs. The input\n    of this classes should be dict which keys are `inputs` and `data_samples`.\n\n    Besides to process tensor `inputs`, this class support dict as `inputs`.\n    - If the value is `Tensor` and the corresponding key is not contained in\n    :attr:`_NON_IMAGE_KEYS`, it will be processed as image tensor.\n    - If the value is `Tensor` and the corresponding key belongs to\n    :attr:`_NON_IMAGE_KEYS`, it will not remains unchanged.\n    - If value is string or integer, it will not remains unchanged.\n\n    Args:\n        mean (Sequence[float or int], float or int, optional): The pixel mean\n            of image channels. Noted that normalization operation is performed\n            *after channel order conversion*. If it is not specified, images\n            will not be normalized. Defaults None.\n        std (Sequence[float or int], float or int, optional): The pixel\n            standard deviation of image channels. Noted that normalization\n            operation is performed *after channel order conversion*. If it is\n            not specified, images will not be normalized. Defaults None.\n        pad_size_divisor (int): The size of padded image should be\n            divisible by ``pad_size_divisor``. Defaults to 1.\n        pad_value (float or int): The padded pixel value. Defaults to 0.\n        pad_mode (str): Padding mode for ``torch.nn.functional.pad``.\n            Defaults to 'constant'.\n        non_image_keys (List[str] or str): Keys for fields that not need to be\n            processed (padding, channel conversion and normalization) as\n            images. If not passed, the keys in :attr:`_NON_IMAGE_KEYS` will be\n            used. This argument will only work when `inputs` is dict or list\n            of dict. Defaults to None.\n        non_concatenate_keys (List[str] or str): Keys for fields that not need\n            to be concatenated. If not passed, the keys in\n            :attr:`_NON_CONCATENATE_KEYS` will be used. This argument will only\n            work when `inputs` is dict or list of dict. Defaults to None.\n        output_channel_order (str, optional): The desired image channel order\n            of output the data preprocessor. This is also the desired input\n            channel order of model (and this most likely to be the output\n            order of model). If not passed, no channel order conversion will\n            be performed. Defaults to None.\n        data_keys (List[str] or str): Keys to preprocess in data samples.\n            Defaults to 'gt_img'.\n        input_view (tuple, optional): The view of input tensor. This\n            argument maybe deleted in the future. Defaults to None.\n        output_view (tuple, optional): The view of output tensor. This\n            argument maybe deleted in the future. Defaults to None.\n        stack_data_sample (bool): Whether stack a list of data samples to one\n            data sample. Only support with input data samples are\n            `DataSamples`. Defaults to True.\n    \"\"\"\n    _NON_IMAGE_KEYS = ['noise']\n    _NON_CONCATENATE_KEYS = ['num_batches', 'mode', 'sample_kwargs', 'eq_cfg']\n\n    def __init__(self,\n                 mean: Union[Sequence[Union[float, int]], float, int] = 127.5,\n                 std: Union[Sequence[Union[float, int]], float, int] = 127.5,\n                 pad_size_divisor: int = 1,\n                 pad_value: Union[float, int] = 0,\n                 pad_mode: str = 'constant',\n                 non_image_keys: Optional[Tuple[str, List[str]]] = None,\n                 non_concentate_keys: Optional[Tuple[str, List[str]]] = None,\n                 output_channel_order: Optional[str] = None,\n                 data_keys: Union[List[str], str] = 'gt_img',\n                 input_view: Optional[tuple] = None,\n                 output_view: Optional[tuple] = None,\n                 stack_data_sample=True):\n\n        if not isinstance(mean, (list, tuple)) and mean is not None:\n            mean = [mean]\n        if not isinstance(std, (list, tuple)) and std is not None:\n            std = [std]\n\n        super().__init__(mean, std, pad_size_divisor, pad_value)\n        # get channel order\n        assert (output_channel_order is None\n                or output_channel_order in ['RGB', 'BGR']), (\n                    'Only support \\'RGB\\', \\'BGR\\' or None for '\n                    '\\'output_channel_order\\', but receive '\n                    f'\\'{output_channel_order}\\'.')\n        self.output_channel_order = output_channel_order\n\n        # add user defined keys\n        if non_image_keys is not None:\n            if not isinstance(non_image_keys, list):\n                non_image_keys = [non_image_keys]\n            self._NON_IMAGE_KEYS += non_image_keys\n        if non_concentate_keys is not None:\n            if not isinstance(non_concentate_keys, list):\n                non_concentate_keys = [non_concentate_keys]\n            self._NON_CONCATENATE_KEYS += non_concentate_keys\n\n        self.pad_mode = pad_mode\n        self.pad_size_dict = dict()\n        if data_keys is not None and not isinstance(data_keys, list):\n            self.data_keys = [data_keys]\n        else:\n            self.data_keys = data_keys\n\n        # TODO: can be removed since only be used in LIIF\n        self.input_view = input_view\n        self.output_view = output_view\n\n        self._done_padding = False  # flag for padding checking\n        self._conversion_warning_raised = False  # flag for conversion warning\n\n        self.stack_data_sample = stack_data_sample\n\n    def cast_data(self, data: CastData) -> CastData:\n        \"\"\"Copying data to the target device.\n\n        Args:\n            data (dict): Data returned by ``DataLoader``.\n\n        Returns:\n            CollatedResult: Inputs and data sample at target device.\n        \"\"\"\n        if isinstance(data, (str, int, float)):\n            return data\n        return super().cast_data(data)\n\n    @staticmethod\n    def _parse_channel_index(inputs) -> int:\n        \"\"\"Parse channel index of inputs.\"\"\"\n        channel_index_mapping = {2: 1, 3: 0, 4: 1, 5: 2}\n        if isinstance(inputs, dict):\n            ndim = inputs['fake_img'].ndim\n            assert ndim in channel_index_mapping, (\n                'Only support (H*W, C), (C, H, W), (N, C, H, W) or '\n                '(N, t, C, H, W) inputs. But received '\n                f'\\'({inputs.shape})\\'.')\n            channel_index = channel_index_mapping[ndim]\n        else:\n            assert inputs.ndim in channel_index_mapping, (\n                'Only support (H*W, C), (C, H, W), (N, C, H, W) or '\n                '(N, t, C, H, W) inputs. But received '\n                f'\\'({inputs.shape})\\'.')\n            channel_index = channel_index_mapping[inputs.ndim]\n\n        return channel_index\n\n    def _parse_channel_order(self,\n                             key: str,\n                             inputs: Tensor,\n                             data_sample: Optional[DataSample] = None) -> str:\n        channel_index = self._parse_channel_index(inputs)\n        if isinstance(inputs, dict):\n            num_color_channels = inputs['fake_img'].shape[channel_index]\n        else:\n            num_color_channels = inputs.shape[channel_index]\n\n        # data sample is None, attempt to infer from input tensor\n        if data_sample is None:\n            if num_color_channels == 1:\n                return 'single'\n            else:\n                # default as BGR\n                return 'BGR'\n\n        # data sample is not None, infer from metainfo\n        channel_order_key = 'gt_channel_order' if key == 'gt_img' \\\n            else f'{key}_channel_order'\n        color_type_key = 'gt_color_type' if key == 'gt_img' \\\n            else f'{key}_color_type'\n\n        # TODO: raise warning here, we can build a dict which fields are keys\n        # have been parsed.\n        color_flag = data_sample.metainfo.get(color_type_key, None)\n        channel_order = data_sample.metainfo.get(channel_order_key, None)\n\n        # handle stacked data sample, refers to `DataSample.stack`\n        if isinstance(color_flag, list):\n            assert all([c == color_flag[0] for c in color_flag])\n            color_flag = color_flag[0]\n        if isinstance(channel_order, list):\n            assert all([c == channel_order[0] for c in channel_order])\n            channel_order = channel_order[0]\n\n        # NOTE: to handle inputs such as Y, users may modify the following code\n        if color_flag == 'grayscale':\n            assert num_color_channels == 1\n            return 'single'\n        elif color_flag == 'unchanged':\n            # if inputs is not None:\n            return 'single' if num_color_channels == 1 else 'BGR'\n        else:\n            # inference from channel_order\n            if channel_order:\n                return channel_order\n            else:\n                # no channel order, infer from num channels\n                return 'single' if num_color_channels == 1 else 'BGR'\n\n    def _parse_batch_channel_order(self, key: str, inputs: Sequence,\n                                   data_samples: Optional[Sequence[DataSample]]\n                                   ) -> str:\n        \"\"\"Parse channel order of inputs in batch.\"\"\"\n\n        assert len(inputs) == len(data_samples)\n        batch_inputs_orders = [\n            self._parse_channel_order(key, inp, data_sample)\n            for inp, data_sample in zip(inputs, data_samples)\n        ]\n        inputs_order = batch_inputs_orders[0]\n\n        # security checking for channel order\n        assert all([\n            inputs_order == order for order in batch_inputs_orders\n        ]), (f'Channel order ({batch_inputs_orders}) of input targets '\n             f'(\\'{key}\\') are inconsistent.')\n\n        return inputs_order\n\n    def _update_metainfo(self,\n                         padding_info: Tensor,\n                         channel_order_info: Optional[dict] = None,\n                         data_samples: Optional[SampleList] = None\n                         ) -> SampleList:\n        \"\"\"Update `padding_info` and `channel_order` to metainfo of.\n\n        *a batch of `data_samples`*. For channel order, we consider same field\n        among data samples share the same channel order. Therefore\n        `channel_order` is passed as a dict, which key and value are field\n        name and corresponding channel order. For padding info, we consider\n        padding info is same among all field of a sample, but can vary between\n        samples. Therefore, we pass `padding_info` as Tensor shape like\n        (B, 1, 1).\n\n        Args:\n            padding_info (Tensor): The padding info of each sample. Shape\n                like (B, 1, 1).\n            channel_order (dict, Optional): The channel order of target field.\n                Key and value are field name and corresponding channel order\n                respectively.\n            data_samples (List[DataSample], optional): The data samples to\n                be updated. If not passed, will initialize a list of empty data\n                samples. Defaults to None.\n\n        Returns:\n            List[DataSample]: The updated data samples.\n        \"\"\"\n        n_samples = padding_info.shape[0]\n        if data_samples is None:\n            data_samples = [DataSample() for _ in range(n_samples)]\n        else:\n            assert len(data_samples) == n_samples, (\n                f'The length of \\'data_samples\\'({len(data_samples)}) and '\n                f'\\'padding_info\\'({n_samples}) are inconsistent. Please '\n                'check your inputs.')\n\n        # update padding info\n        for pad_size, data_sample in zip(padding_info, data_samples):\n            data_sample.set_metainfo({'padding_size': pad_size})\n\n        # update channel order\n        if channel_order_info is not None:\n            for data_sample in data_samples:\n                for key, channel_order in channel_order_info.items():\n                    data_sample.set_metainfo(\n                        {f'{key}_output_channel_order': channel_order})\n\n        self._done_padding = padding_info.sum() != 0\n        return data_samples\n\n    def _do_conversion(self,\n                       inputs: Tensor,\n                       inputs_order: str = 'BGR',\n                       target_order: Optional[str] = None\n                       ) -> Tuple[Tensor, str]:\n        \"\"\"Conduct channel order conversion for *a batch of inputs*, and return\n        the converted inputs and order after conversion.\n\n        inputs_order:\n            * RGB / RGB: Convert to target order.\n            * SINGLE: Do not change\n        \"\"\"\n        if (target_order is None\n                or inputs_order.upper() == target_order.upper()):\n            # order is not changed, return the input one\n            return inputs, inputs_order\n\n        def conversion(inputs, channel_index):\n            if inputs.shape[channel_index] == 4:\n                new_index = [2, 1, 0, 3]\n            else:\n                new_index = [2, 1, 0]\n\n            # do conversion\n            inputs = torch.index_select(\n                inputs, channel_index,\n                torch.LongTensor(new_index).to(inputs.device))\n            return inputs\n\n        channel_index = self._parse_channel_index(inputs)\n\n        if inputs_order.upper() in ['RGB', 'BGR']:\n            inputs = conversion(inputs, channel_index)\n            return inputs, target_order\n        elif inputs_order.upper() == 'SINGLE':\n            if not self._conversion_warning_raised:\n                print_log(\n                    'Cannot convert inputs with \\'single\\' channel order '\n                    f'to \\'output_channel_order\\' ({self.output_channel_order}'\n                    '). Return without conversion.', 'current', WARNING)\n                self._conversion_warning_raised = True\n            return inputs, inputs_order\n        else:\n            raise ValueError(f'Unsupported inputs order \\'{inputs_order}\\'.')\n\n    def _do_norm(self,\n                 inputs: Tensor,\n                 do_norm: Optional[bool] = None) -> Tensor:\n\n        do_norm = self._enable_normalize if do_norm is None else do_norm\n\n        if do_norm:\n            if self.input_view is None:\n                if inputs.ndim == 2:  # special case for (H*W, C) tensor\n                    target_shape = [1, -1]\n                else:\n                    target_shape = [1 for _ in range(inputs.ndim - 3)\n                                    ] + [-1, 1, 1]\n            else:\n                target_shape = self.input_view\n            mean = self.mean.view(target_shape)\n            std = self.std.view(target_shape)\n\n            # shape checking to avoid broadcast a single channel tensor to 3\n            channel_idx = self._parse_channel_index(inputs)\n            n_channel_inputs = inputs.shape[channel_idx]\n            n_channel_mean = mean.shape[channel_idx]\n            n_channel_std = std.shape[channel_idx]\n            assert n_channel_mean == 1 or n_channel_mean == n_channel_inputs\n            assert n_channel_std == 1 or n_channel_std == n_channel_inputs\n\n            inputs = (inputs - mean) / std\n        return inputs\n\n    def _preprocess_image_tensor(self,\n                                 inputs: Tensor,\n                                 data_samples: Optional[SampleList] = None,\n                                 key: str = 'img'\n                                 ) -> Tuple[Tensor, SampleList]:\n        \"\"\"Preprocess a batch of image tensor and update metainfo to\n        corresponding data samples.\n\n        Args:\n            inputs (Tensor): Image tensor with shape (C, H, W), (N, C, H, W) or\n                (N, t, C, H, W) to preprocess.\n            data_samples (List[DataSample], optional): The data samples\n                of corresponding inputs. If not passed, a list of empty data\n                samples will be initialized to save metainfo. Defaults to None.\n            key (str): The key of image tensor in data samples.\n                Defaults to 'img'.\n\n        Returns:\n            Tuple[Tensor, List[DataSample]]: The preprocessed image tensor\n                and updated data samples.\n        \"\"\"\n        if not data_samples:  # none or empty list\n            data_samples = [DataSample() for _ in range(inputs.shape[0])]\n\n        assert inputs.dim() in [\n            3, 4, 5\n        ], ('The input of `_preprocess_image_tensor` should be a (C, H, W), '\n            '(N, C, H, W) or (N, t, C, H, W)tensor, but got a tensor with '\n            f'shape: {inputs.shape}')\n        channel_order = self._parse_batch_channel_order(\n            key, inputs, data_samples)\n        inputs, output_channel_order = self._do_conversion(\n            inputs, channel_order, self.output_channel_order)\n        inputs = self._do_norm(inputs)\n        h, w = inputs.shape[-2:]\n        target_h = math.ceil(h / self.pad_size_divisor) * self.pad_size_divisor\n        target_w = math.ceil(w / self.pad_size_divisor) * self.pad_size_divisor\n        pad_h = target_h - h\n        pad_w = target_w - w\n        batch_inputs = F.pad(inputs, (0, pad_w, 0, pad_h), self.pad_mode,\n                             self.pad_value)\n\n        padding_size = torch.FloatTensor((0, pad_h, pad_w))[None, ...]\n        padding_size = padding_size.repeat(inputs.shape[0], 1)\n        data_samples = self._update_metainfo(padding_size,\n                                             {key: output_channel_order},\n                                             data_samples)\n        return batch_inputs, data_samples\n\n    def _preprocess_image_list(self,\n                               tensor_list: List[Tensor],\n                               data_samples: Optional[SampleList],\n                               key: str = 'img') -> Tuple[Tensor, SampleList]:\n        \"\"\"Preprocess a list of image tensor and update metainfo to\n        corresponding data samples.\n\n        Args:\n            tensor_list (List[Tensor]): Image tensor list to be preprocess.\n            data_samples (List[DataSample], optional): The data samples\n                of corresponding inputs. If not passed, a list of empty data\n                samples will be initialized to save metainfo. Defaults to None.\n            key (str): The key of tensor list in data samples.\n                Defaults to 'img'.\n\n        Returns:\n            Tuple[Tensor, List[DataSample]]: The preprocessed image tensor\n                and updated data samples.\n        \"\"\"\n        if not data_samples:  # none or empty list\n            data_samples = [DataSample() for _ in range(len(tensor_list))]\n\n        channel_order = self._parse_batch_channel_order(\n            key, tensor_list, data_samples)\n        dim = tensor_list[0].dim()\n        assert all([\n            tensor.ndim == dim for tensor in tensor_list\n        ]), ('Expected the dimensions of all tensors must be the same, '\n             f'but got {[tensor.ndim for tensor in tensor_list]}')\n\n        num_img = len(tensor_list)\n        all_sizes: torch.Tensor = torch.Tensor(\n            [tensor.shape for tensor in tensor_list])\n        max_sizes = torch.ceil(\n            torch.max(all_sizes, dim=0)[0] /\n            self.pad_size_divisor) * self.pad_size_divisor\n        padding_sizes = max_sizes - all_sizes\n        # The dim of channel and frame index should not be padded.\n        padding_sizes[:, :-2] = 0\n        if padding_sizes.sum() == 0:\n            stacked_tensor = torch.stack(tensor_list)\n            stacked_tensor, output_channel_order = self._do_conversion(\n                stacked_tensor, channel_order, self.output_channel_order)\n            stacked_tensor = self._do_norm(stacked_tensor)\n            data_samples = self._update_metainfo(padding_sizes,\n                                                 {key: output_channel_order},\n                                                 data_samples)\n            return stacked_tensor, data_samples\n\n        # `pad` is the second arguments of `F.pad`. If pad is (1, 2, 3, 4),\n        # it means that padding the last dim with 1(left) 2(right), padding the\n        # penultimate dim to 3(top) 4(bottom). The order of `pad` is opposite\n        # of the `padded_sizes`. Therefore, the `padded_sizes` needs to be\n        # reversed, and only odd index of pad should be assigned to keep\n        # padding \"right\" and \"bottom\".\n        pad = torch.zeros(num_img, 2 * dim, dtype=torch.int)\n        pad[:, 1::2] = padding_sizes[:, range(dim - 1, -1, -1)]\n        batch_tensor = []\n        for idx, tensor in enumerate(tensor_list):\n            paded_tensor = F.pad(tensor, tuple(pad[idx].tolist()),\n                                 self.pad_mode, self.pad_value)\n            batch_tensor.append(paded_tensor)\n        stacked_tensor = torch.stack(batch_tensor)\n        stacked_tensor, output_channel_order = self._do_conversion(\n            stacked_tensor, channel_order, self.output_channel_order)\n        stacked_tensor = self._do_norm(stacked_tensor)\n        data_samples = self._update_metainfo(padding_sizes,\n                                             {key: output_channel_order},\n                                             data_samples)\n        # return stacked_tensor, padding_sizes\n        return stacked_tensor, data_samples\n\n    def _preprocess_dict_inputs(self,\n                                batch_inputs: dict,\n                                data_samples: Optional[SampleList] = None\n                                ) -> Tuple[dict, SampleList]:\n        \"\"\"Preprocess dict type inputs.\n\n        Args:\n            batch_inputs (dict): Input dict.\n            data_samples (List[DataSample], optional): The data samples\n                of corresponding inputs. If not passed, a list of empty data\n                samples will be initialized to save metainfo. Defaults to None.\n\n        Returns:\n            Tuple[dict, List[DataSample]]: The preprocessed dict and\n                updated data samples.\n        \"\"\"\n        pad_size_dict = dict()\n        for k, inputs in batch_inputs.items():\n            # handle concentrate for values in list\n            if isinstance(inputs, list):\n                if k in self._NON_CONCATENATE_KEYS:\n                    # use the first value\n                    assert all([\n                        inputs[0] == inp for inp in inputs\n                    ]), (f'NON_CONCENTATE_KEY \\'{k}\\' should be consistency '\n                         'among the data list.')\n                    batch_inputs[k] = inputs[0]\n                else:\n                    assert all([\n                        isinstance(inp, torch.Tensor) for inp in inputs\n                    ]), ('Only support stack list of Tensor in inputs dict. '\n                         f'But \\'{k}\\' is list of \\'{type(inputs[0])}\\'.')\n\n                    if k not in self._NON_IMAGE_KEYS:\n                        # preprocess as image\n                        inputs, data_samples = self._preprocess_image_list(\n                            inputs, data_samples, k)\n                        pad_size_dict[k] = [\n                            data.metainfo.get('padding_size')\n                            for data in data_samples\n                        ]\n                    else:\n                        # only stack\n                        inputs = torch.stack(inputs)\n\n                    batch_inputs[k] = inputs\n\n            elif isinstance(inputs, Tensor) and k not in self._NON_IMAGE_KEYS:\n                batch_inputs[k], data_samples = \\\n                    self._preprocess_image_tensor(inputs, data_samples, k)\n                pad_size_dict[k] = [\n                    data.metainfo.get('padding_size') for data in data_samples\n                ]\n\n        # NOTE: we only support all key shares the same padding size\n        if pad_size_dict:\n            padding_sizes = list(pad_size_dict.values())[0]\n            padding_key = list(pad_size_dict.keys())[0]\n            for idx, tar_size in enumerate(padding_sizes):\n                for k, sizes in pad_size_dict.items():\n                    if (tar_size != sizes[idx]).any():\n                        raise ValueError(\n                            f'All fields of a data sample should share the '\n                            'same padding size, but got different size for '\n                            f'\\'{k}\\'(\\'{sizes[idx]}\\') and \\'{padding_key}\\''\n                            f'(\\'{tar_size}\\') at index {idx}.Please check '\n                            'your data carefully.')\n\n        return batch_inputs, data_samples\n\n    def _preprocess_data_sample(self, data_samples: SampleList,\n                                training: bool) -> DataSample:\n        \"\"\"Preprocess data samples. When `training` is True, fields belong to\n        :attr:`self.data_keys` will be converted to\n        :attr:`self.output_channel_order` and then normalized by `self.mean`\n        and `self.std`. When `training` is False, fields belongs to\n        :attr:`self.data_keys` will be attempted to convert to 'BGR' without\n        normalization. The corresponding metainfo related to normalization,\n        channel order conversion will be updated to data sample as well.\n\n        Args:\n            data_samples (List[DataSample]): A list of data samples to\n                preprocess.\n            training (bool): Whether in training mode.\n\n        Returns:\n            list: The list of processed data samples.\n        \"\"\"\n        if not training:\n            # set default order to BGR in test stage\n            target_order, do_norm = 'BGR', False\n        else:\n            # norm in training, conversion as default (None)\n            target_order, do_norm = self.output_channel_order, True\n\n        for data_sample in data_samples:\n            if not self.data_keys:\n                break\n            for key in self.data_keys:\n                if not hasattr(data_sample, key):\n                    # do not raise error here\n                    print_log(f'Cannot find key \\'{key}\\' in data sample.',\n                              'current', WARNING)\n                    break\n\n                data = data_sample.get(key)\n                data_channel_order = self._parse_channel_order(\n                    key, data, data_sample)\n                data, channel_order = self._do_conversion(\n                    data, data_channel_order, target_order)\n                data = self._do_norm(data, do_norm)\n                data_sample.set_data({f'{key}': data})\n                data_process_meta = {\n                    f'{key}_enable_norm': self._enable_normalize,\n                    f'{key}_output_channel_order': channel_order,\n                    f'{key}_mean': self.mean,\n                    f'{key}_std': self.std\n                }\n                data_sample.set_metainfo(data_process_meta)\n\n        if self.stack_data_sample:\n            assert is_seq_of(data_samples, DataSample), (\n                'Only support \\'stack_data_sample\\' for DataSample '\n                'object. Please refer to \\'DataSample.stack\\'.')\n            return DataSample.stack(data_samples)\n        return data_samples\n\n    def forward(self, data: dict, training: bool = False) -> dict:\n        \"\"\"Performs normalization、padding and channel order conversion.\n\n        Args:\n            data (dict): Input data to process.\n            training (bool): Whether to in training mode. Default: False.\n\n        Returns:\n            dict: Data in the same format as the model input.\n        \"\"\"\n        data = self.cast_data(data)\n        _batch_inputs = data['inputs']\n        _batch_data_samples = data.get('data_samples', None)\n\n        # process input\n        if isinstance(_batch_inputs, torch.Tensor):\n            _batch_inputs, _batch_data_samples = \\\n                self._preprocess_image_tensor(\n                    _batch_inputs, _batch_data_samples)\n        elif is_seq_of(_batch_inputs, torch.Tensor):\n            _batch_inputs, _batch_data_samples = \\\n                self._preprocess_image_list(\n                    _batch_inputs, _batch_data_samples)\n        elif isinstance(_batch_inputs, dict):\n            _batch_inputs, _batch_data_samples = \\\n                self._preprocess_dict_inputs(\n                    _batch_inputs, _batch_data_samples)\n        elif is_seq_of(_batch_inputs, dict):\n            # convert list of dict to dict of list\n            keys = _batch_inputs[0].keys()\n            dict_input = {k: [inp[k] for inp in _batch_inputs] for k in keys}\n            _batch_inputs, _batch_data_samples = \\\n                self._preprocess_dict_inputs(\n                    dict_input, _batch_data_samples)\n        else:\n            raise ValueError('Only support following inputs types: '\n                             '\\'torch.Tensor\\', \\'List[torch.Tensor]\\', '\n                             '\\'dict\\', \\'List[dict]\\'. But receive '\n                             f'\\'{type(_batch_inputs)}\\'.')\n        data['inputs'] = _batch_inputs\n\n        # process data samples\n        if _batch_data_samples:\n            _batch_data_samples = self._preprocess_data_sample(\n                _batch_data_samples, training)\n\n        data['data_samples'] = _batch_data_samples\n\n        return data\n\n    def destruct(self,\n                 outputs: Tensor,\n                 data_samples: Union[SampleList, DataSample, None] = None,\n                 key: str = 'img') -> Union[list, Tensor]:\n        \"\"\"Destruct padding, normalization and convert channel order to BGR if\n        could. If `data_samples` is a list, outputs will be destructed as a\n        batch of tensor. If `data_samples` is a `DataSample`, `outputs` will be\n        destructed as a single tensor.\n\n        Before feed model outputs to visualizer and evaluator, users should\n        call this function for model outputs and inputs.\n\n        Use cases:\n\n        >>> # destruct model outputs.\n        >>> # model outputs share the same preprocess information with inputs\n        >>> # ('img') therefore use 'img' as key\n        >>> feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        >>> feats = self.data_preprocessor.destruct(feats, data_samples, 'img')\n\n        >>> # destruct model inputs for visualization\n        >>> for idx, data_sample in enumerate(data_samples):\n        >>>     destructed_input = self.data_preprocessor.destruct(\n        >>>         inputs[idx], data_sample, key='img')\n        >>>     data_sample.set_data({'input': destructed_input})\n\n        Args:\n            outputs (Tensor): Tensor to destruct.\n            data_samples (Union[SampleList, DataSample], optional): Data\n                samples (or data sample) corresponding to `outputs`.\n                Defaults to None\n            key (str): The key of field in data sample. Defaults to 'img'.\n\n        Returns:\n            Union[list, Tensor]: Destructed outputs.\n        \"\"\"\n        # NOTE: only support passing tensor sample, if the output of model is\n        # a dict, users should call this manually.\n        # Since we do not know whether the outputs is image tensor.\n        _batch_outputs = self._destruct_norm_and_conversion(\n            outputs, data_samples, key)\n        _batch_outputs = self._destruct_padding(_batch_outputs, data_samples)\n        _batch_outputs = _batch_outputs.clamp_(0, 255)\n        return _batch_outputs\n\n    def _destruct_norm_and_conversion(self, batch_tensor: Tensor,\n                                      data_samples: Union[SampleList,\n                                                          DataSample, None],\n                                      key: str) -> Tensor:\n        \"\"\"De-norm and de-convert channel order. Noted that, we de-norm first,\n        and then de-conversion, since mean and std used in normalization is\n        based on channel order after conversion.\n\n        Args:\n            batch_tensor (Tensor): Tensor to destruct.\n            data_samples (Union[SampleList, DataSample], optional): Data\n                samples (or data sample) corresponding to `outputs`.\n            key (str): The key of field in data sample.\n\n        Returns:\n            Tensor: Destructed tensor.\n        \"\"\"\n\n        output_key = f'{key}_output'\n        # get channel order from data sample\n        if isinstance(data_samples, list):\n            inputs_order = self._parse_batch_channel_order(\n                output_key, batch_tensor, data_samples)\n        else:\n            inputs_order = self._parse_channel_order(output_key, batch_tensor,\n                                                     data_samples)\n        if self._enable_normalize:\n            if self.output_view is None:\n                if batch_tensor.ndim == 2:  # special case for (H*W, C) tensor\n                    target_shape = [1, -1]\n                else:\n                    target_shape = [1 for _ in range(batch_tensor.ndim - 3)\n                                    ] + [-1, 1, 1]\n            else:\n                target_shape = self.output_view\n            mean = self.mean.view(target_shape)\n            std = self.std.view(target_shape)\n            batch_tensor = batch_tensor * std + mean\n\n        # convert output to 'BGR' if able\n        batch_tensor, _ = self._do_conversion(\n            batch_tensor, inputs_order=inputs_order, target_order='BGR')\n\n        return batch_tensor\n\n    def _destruct_padding(self,\n                          batch_tensor: Tensor,\n                          data_samples: Union[SampleList, DataSample, None],\n                          same_padding: bool = True) -> Union[list, Tensor]:\n        \"\"\"Destruct padding of the input tensor.\n\n        Args:\n            batch_tensor (Tensor): Tensor to destruct.\n            data_samples (Union[SampleList, DataSample], optional): Data\n                samples (or data sample) corresponding to `outputs`. If\n            same_padding (bool): Whether all samples will un-padded with the\n                padding info of the first sample, and return a stacked\n                un-padded tensor. Otherwise each sample will be unpadded with\n                padding info saved in corresponding data samples, and return a\n                list of un-padded tensor, since each un-padded tensor may have\n                the different shape. Defaults to True.\n\n        Returns:\n            Union[list, Tensor]: Destructed outputs.\n        \"\"\"\n        # NOTE: If same padding, batch_tensor will un-padded with the padding\n        # info # of the first sample and return a Unpadded tensor. Otherwise,\n        # input tensor # will un-padded with the corresponding padding info\n        # saved in data samples and return a list of tensor.\n        if data_samples is None:\n            return batch_tensor\n\n        if isinstance(data_samples, list):\n            is_batch_data = True\n            if 'padding_size' in data_samples[0].metainfo_keys():\n                pad_infos = [\n                    sample.metainfo['padding_size'] for sample in data_samples\n                ]\n            else:\n                pad_infos = None\n        else:\n            if 'padding_size' in data_samples.metainfo_keys():\n                pad_infos = data_samples.metainfo['padding_size']\n            else:\n                pad_infos = None\n            # NOTE: here we assume padding size in metainfo are saved as tensor\n            if not isinstance(pad_infos, list):\n                pad_infos = [pad_infos]\n                is_batch_data = False\n            else:\n                is_batch_data = True\n            if all([pad_info is None for pad_info in pad_infos]):\n                pad_infos = None\n\n        if not is_batch_data:\n            batch_tensor = batch_tensor[None, ...]\n\n        if pad_infos is None:\n            if self._done_padding:\n                print_log(\n                    'Cannot find padding information (\\'padding_size\\') in '\n                    'meta info of \\'data_samples\\'. Please check whether '\n                    'you have called \\'self.forward\\' properly.', 'current',\n                    WARNING)\n            return batch_tensor if is_batch_data else batch_tensor[0]\n\n        if same_padding:\n            # un-pad with the padding info of the first sample\n            padded_h, padded_w = pad_infos[0][-2:]\n            padded_h, padded_w = int(padded_h), int(padded_w)\n            h, w = batch_tensor.shape[-2:]\n            batch_tensor = batch_tensor[..., :h - padded_h, :w - padded_w]\n            return batch_tensor if is_batch_data else batch_tensor[0]\n        else:\n            # un-pad with the corresponding padding info\n            unpadded_tensors = []\n            for idx, pad_info in enumerate(pad_infos):\n                padded_h, padded_w = pad_info[-2:]\n                padded_h = int(padded_h)\n                padded_w = int(padded_w)\n                h, w = batch_tensor[idx].shape[-2:]\n                unpadded_tensor = batch_tensor[idx][..., :h - padded_h, :w -\n                                                    padded_w]\n                unpadded_tensors.append(unpadded_tensor)\n            return unpadded_tensors if is_batch_data else unpadded_tensors[0]\n"
  },
  {
    "path": "mmagic/models/data_preprocessors/mattor_preprocessor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nfrom logging import WARNING\nfrom typing import Dict, List, Optional, Sequence, Tuple, Union\n\nimport torch\nfrom mmengine import print_log\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom .data_preprocessor import DataPreprocessor\n\nDataSamples = Optional[Union[list, torch.Tensor]]\nForwardResults = Union[Dict[str, torch.Tensor], List[DataSample],\n                       Tuple[torch.Tensor], torch.Tensor]\nMEAN_STD_TYPE = Union[Sequence[Union[float, int]], float, int]\n\n\n@MODELS.register_module()\nclass MattorPreprocessor(DataPreprocessor):\n    \"\"\"DataPreprocessor for matting models.\n\n    See base class ``DataPreprocessor`` for detailed information.\n\n    Workflow as follow :\n\n    - Collate and move data to the target device.\n    - Convert inputs from bgr to rgb if the shape of input is (3, H, W).\n    - Normalize image with defined std and mean.\n    - Stack inputs to batch_inputs.\n\n    Args:\n        mean (Sequence[float or int], float or int, optional): The pixel mean\n            of image channels. Noted that normalization operation is performed\n            *after channel order conversion*. If it is not specified, images\n            will not be normalized. Defaults None.\n        std (Sequence[float or int], float or int, optional): The pixel\n            standard deviation of image channels. Noted that normalization\n            operation is performed *after channel order conversion*. If it is\n            not specified, images will not be normalized. Defaults None.\n        proc_trimap (str): Methods to process gt tensors.\n            Default: 'rescale_to_zero_one'.\n            Available options are ``rescale_to_zero_one`` and ``as-is``.\n        stack_data_sample (bool): Whether stack a list of data samples to one\n            data sample. Only support with input data samples are\n            `DataSamples`. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 mean: MEAN_STD_TYPE = [123.675, 116.28, 103.53],\n                 std: MEAN_STD_TYPE = [58.395, 57.12, 57.375],\n                 output_channel_order: str = 'RGB',\n                 proc_trimap: str = 'rescale_to_zero_one',\n                 stack_data_sample=True):\n        # specific data_keys for matting task\n        data_keys = ['gt_fg', 'gt_bg', 'gt_merged', 'gt_alpha']\n        super().__init__(\n            mean,\n            std,\n            output_channel_order=output_channel_order,\n            data_keys=data_keys,\n            stack_data_sample=stack_data_sample)\n\n        self.proc_trimap = proc_trimap\n        # self.proc_gt = proc_gt\n\n    def _proc_batch_trimap(self, batch_trimaps: torch.Tensor):\n\n        if self.proc_trimap == 'rescale_to_zero_one':\n            batch_trimaps = batch_trimaps / 255.0  # uint8->float32\n        elif self.proc_trimap == 'as_is':\n            batch_trimaps = batch_trimaps.to(torch.float32)\n        else:\n            raise ValueError(\n                f'proc_trimap = {self.proc_trimap} is not supported.')\n\n        return batch_trimaps\n\n    def _preprocess_data_sample(self, data_samples: SampleList,\n                                training: bool) -> list:\n        \"\"\"Preprocess data samples. When `training` is True, fields belong to\n        :attr:`self.data_keys` will be converted to\n        :attr:`self.output_channel_order` and *divided by 255*. When `training`\n        is False, fields belongs to :attr:`self.data_keys` will be attempted\n        to convert to 'BGR' without normalization. The corresponding metainfo\n        related to normalization, channel order conversion will be updated to\n        data sample as well.\n\n        Args:\n            data_samples (List[DataSample]): A list of data samples to\n                preprocess.\n            training (bool): Whether in training mode.\n\n        Returns:\n            list: The list of processed data samples.\n        \"\"\"\n        if not training:\n            # set default order to BGR in test stage\n            target_order = 'BGR'\n        else:\n            # conversion as default (None)\n            target_order = self.output_channel_order\n\n        for data_sample in data_samples:\n            for key in self.data_keys:\n                if not hasattr(data_sample, key):\n                    # do not raise error here\n                    if key != 'gt_fg' and not training:\n                        # gt_fg is not required in test stage, therefore do\n                        # not print log\n                        print_log(f'Cannot find key \\'{key}\\' in data sample.',\n                                  'current', WARNING)\n                    break\n\n                data = data_sample.get(key)\n                data_channel_order = self._parse_channel_order(\n                    key, data, data_sample)\n                data, channel_order = self._do_conversion(\n                    data, data_channel_order, target_order)\n                if training:\n                    data = data / 255.  # NOTE: divided by 255\n                data_sample.set_data({f'{key}': data})\n                data_process_meta = {\n                    f'{key}_enable_norm': self._enable_normalize,\n                    f'{key}_output_channel_order': channel_order,\n                    f'{key}_mean': self.mean,\n                    f'{key}_std': self.std\n                }\n                data_sample.set_metainfo(data_process_meta)\n\n        if self.stack_data_sample:\n            return DataSample.stack(data_samples)\n\n        return data_samples\n\n    def forward(self,\n                data: Sequence[dict],\n                training: bool = False) -> Tuple[torch.Tensor, list]:\n        \"\"\"Pre-process input images, trimaps, ground-truth as configured.\n\n        Args:\n            data (Sequence[dict]): data sampled from dataloader.\n            training (bool): Whether to enable training time augmentation.\n                Default: False.\n\n        Returns:\n            Tuple[torch.Tensor, list]:\n                Batched inputs and list of data samples.\n        \"\"\"\n        if not training:\n            # Image may of different size when testing\n            assert len(data['data_samples']) == 1, (\n                'only batch_size=1 is supported for testing.')\n        data = super().forward(data, training=training)\n\n        batch_images = data['inputs']\n        batch_trimaps = data['data_samples'].trimap\n        batch_trimaps = self._proc_batch_trimap(batch_trimaps)\n\n        # Stack image and trimap along channel dimension\n        # All existing models do concat at the start of forwarding\n        # and data_sample is a very complex data structure\n        # so this is a simple work-around to make codes simpler\n        # print(f\"batch_trimap.dtype = {batch_trimap.dtype}\")\n\n        assert batch_images.ndim == batch_trimaps.ndim == 4\n        assert batch_images.shape[-2:] == batch_trimaps.shape[-2:], (\n            'Expect merged.shape[-2:] == trimap.shape[-2:], '\n            f'but got {batch_images.shape[-2:]} vs {batch_trimaps.shape[-2:]}')\n\n        # N, (4/6), H, W\n        batch_inputs = torch.cat((batch_images, batch_trimaps), dim=1)\n\n        data['inputs'] = batch_inputs\n        return data\n"
  },
  {
    "path": "mmagic/models/diffusion_schedulers/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport warnings\nfrom typing import Any, List\n\nfrom mmagic.utils import try_import\nfrom .ddim_scheduler import EditDDIMScheduler\nfrom .ddpm_scheduler import EditDDPMScheduler\n\n\nclass SchedulerWrapper:\n    \"\"\"Wrapper for schedulers from HuggingFace Diffusers. This wrapper will be\n    set a attribute called `_scheduler_cls` by wrapping function and will be\n    used to initialize the model structure.\n\n    Example:\n    >>> 1. Load pretrained model from HuggingFace Space.\n    >>> config = dict(\n    >>>     type='DDPMScheduler',\n    >>>     from_pretrained='lllyasviel/sd-controlnet-canny',\n    >>>     subfolder='scheduler')\n    >>> ddpm_scheduler = DIFFUSION_SCHEDULERS.build(config)\n\n    >>> 2. Initialize model with own defined arguments\n    >>> config = dict(\n    >>>     type='EulerDiscreteScheduler',\n    >>>     num_train_timesteps=2000,\n    >>>     beta_schedule='scaled_linear')\n    >>> euler_scheduler = DIFFUSION_SCHEDULERS.build(config)\n\n    Args:\n        from_pretrained (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Please refers to\n            `diffusers.model.modeling_utils.ModelMixin.from_pretrained`\n            for more detail. Defaults to None.\n\n        *args, **kwargs: If `from_pretrained` is passed, *args and **kwargs\n            will be passed to `from_pretrained` function. Otherwise, *args\n            and **kwargs will be used to initialize the model by\n            `self._module_cls(*args, **kwargs)`.\n    \"\"\"\n\n    def __init__(self,\n                 from_pretrained=None,\n                 from_config=None,\n                 *args,\n                 **kwargs):\n\n        scheduler_cls = self._scheduler_cls\n\n        self._from_pretrained = from_pretrained\n        self._from_config = from_config\n        if self._from_pretrained:\n            self.scheduler = scheduler_cls.from_pretrained(\n                from_pretrained, *args, **kwargs)\n        elif self._from_config:\n            self.scheduler = scheduler_cls.from_config(from_config, *args,\n                                                       **kwargs)\n        else:\n            self.scheduler = scheduler_cls(*args, **kwargs)\n\n    def __getattr__(self, name: str) -> Any:\n        \"\"\"This function provide a way to access the attributes of the wrapped\n        scheduler.\n\n        Args:\n            name (str): The name of the attribute.\n\n        Returns:\n            Any: The got attribute.\n        \"\"\"\n\n        try:\n            return getattr(self.scheduler, name)\n        except AttributeError:\n            raise AttributeError(f'{name} cannot be found in both '\n                                 f'\\'{self.__class__.__name__}\\' and '\n                                 f'\\'{self.__class__.__name__}.scheduler\\'.')\n\n    def __repr__(self):\n        \"\"\"The representation of the wrapper.\"\"\"\n        s = super().__repr__()\n        prefix = f'Wrapped Scheduler Class: {self._scheduler_cls}\\n'\n        prefix += f'Wrapped Scheduler Name: {self._scheduler_name}\\n'\n        if self._from_pretrained:\n            prefix += f'From Pretrained: {self._from_pretrained}\\n'\n        if self._from_config:\n            prefix += f'From Config: {self._from_config}\\n'\n        s = prefix + s\n        return s\n\n\ndef register_diffusers_schedulers() -> List[str]:\n    \"\"\"Register schedulers in ``diffusers.schedulers`` to the\n    ``DIFFUSION_SCHEDULERS`` registry. Specifically, the registered schedulers\n    from diffusers define the methodology for iteratively adding noise to an\n    image or for updating a sample based on model outputs. See more details\n    about schedulers in diffusers here:\n    https://huggingface.co/docs/diffusers/api/schedulers/overview.\n\n    Returns:\n        List[str]: A list of registered DIFFUSION_SCHEDULERS' name.\n    \"\"\"\n\n    import inspect\n\n    from mmagic.registry import DIFFUSION_SCHEDULERS\n\n    diffusers = try_import('diffusers')\n    if diffusers is None:\n        warnings.warn('Diffusion Schedulers are not registered as expect. '\n                      'If you want to use diffusion models, '\n                      'please install diffusers>=0.12.0.')\n        return None\n\n    def gen_wrapped_cls(scheduler, scheduler_name):\n        return type(\n            scheduler_name, (SchedulerWrapper, ),\n            dict(\n                _scheduler_cls=scheduler,\n                _scheduler_name=scheduler_name,\n                __module__=__name__))\n\n    DIFFUSERS_SCHEDULERS = []\n    for module_name in dir(diffusers.schedulers):\n        if module_name.startswith('Flax'):\n            continue\n        elif module_name.endswith('Scheduler'):\n            _scheduler = getattr(diffusers.schedulers, module_name)\n            if inspect.isclass(_scheduler):\n                wrapped_scheduler = gen_wrapped_cls(_scheduler, module_name)\n                DIFFUSION_SCHEDULERS.register_module(\n                    name=module_name, module=wrapped_scheduler)\n                DIFFUSERS_SCHEDULERS.append(module_name)\n    return DIFFUSERS_SCHEDULERS\n\n\nREGISTERED_DIFFUSERS_SCHEDULERS = register_diffusers_schedulers()\n\n__all__ = ['EditDDIMScheduler', 'EditDDPMScheduler']\n"
  },
  {
    "path": "mmagic/models/diffusion_schedulers/ddim_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Union\n\nimport numpy as np\nimport torch\n\nfrom mmagic.models.utils.diffusion_utils import betas_for_alpha_bar\nfrom mmagic.registry import DIFFUSION_SCHEDULERS\n\n\n@DIFFUSION_SCHEDULERS.register_module()\nclass EditDDIMScheduler:\n    \"\"\"```EditDDIMScheduler``` support the diffusion and reverse process\n    formulated in https://arxiv.org/abs/2010.02502.\n\n    The code is heavily influenced by https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py. # noqa\n    The difference is that we ensemble gradient-guided sampling in step function.\n\n    Args:\n        num_train_timesteps (int, optional): _description_. Defaults to 1000.\n        beta_start (float, optional): _description_. Defaults to 0.0001.\n        beta_end (float, optional): _description_. Defaults to 0.02.\n        beta_schedule (str, optional): _description_. Defaults to \"linear\".\n        variance_type (str, optional): _description_. Defaults to 'learned_range'.\n        timestep_values (_type_, optional): _description_. Defaults to None.\n        clip_sample (bool, optional): _description_. Defaults to True.\n        set_alpha_to_one (bool, optional): _description_. Defaults to True.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_train_timesteps=1000,\n        beta_start=0.0001,\n        beta_end=0.02,\n        beta_schedule='linear',\n        variance_type='learned_range',\n        timestep_values=None,\n        clip_sample=True,\n        set_alpha_to_one=True,\n    ):\n        self.num_train_timesteps = num_train_timesteps\n        self.beta_start = beta_start\n        self.beta_end = beta_end\n        self.beta_schedule = beta_schedule\n        self.variance_type = variance_type\n        self.timestep_values = timestep_values\n        self.clip_sample = clip_sample\n        self.set_alpha_to_one = set_alpha_to_one\n\n        if beta_schedule == 'linear':\n            self.betas = np.linspace(\n                beta_start, beta_end, num_train_timesteps, dtype=np.float32)\n        elif beta_schedule == 'scaled_linear':\n            # this schedule is very specific to the latent diffusion model.\n            self.betas = np.linspace(\n                beta_start**0.5,\n                beta_end**0.5,\n                num_train_timesteps,\n                dtype=np.float32)**2\n        elif beta_schedule == 'squaredcos_cap_v2':\n            # Glide cosine schedule\n            self.betas = betas_for_alpha_bar(num_train_timesteps)\n        else:\n            raise NotImplementedError(\n                f'{beta_schedule} does is not implemented for {self.__class__}'\n            )\n\n        self.alphas = 1.0 - self.betas\n        self.alphas_cumprod = np.cumprod(self.alphas, axis=0)\n\n        # At every step in ddim, we are looking into the\n        # previous alphas_cumprod. For the final step,\n        # there is no previous alphas_cumprod because we are already\n        # at 0 `set_alpha_to_one` decides whether we set this parameter\n        # simply to one or whether we use the final alpha of the\n        # \"non-previous\" one.\n        self.final_alpha_cumprod = np.array(\n            1.0) if set_alpha_to_one else self.alphas_cumprod[0]\n\n        # standard deviation of the initial noise distribution\n        self.init_noise_sigma = 1.0\n\n        # setable values\n        self.num_inference_steps = None\n        self.timesteps = np.arange(0, num_train_timesteps)[::-1].copy()\n\n    def set_timesteps(self, num_inference_steps, offset=0):\n        \"\"\"set time steps.\"\"\"\n\n        self.num_inference_steps = num_inference_steps\n        self.timesteps = np.arange(\n            0, self.num_train_timesteps,\n            self.num_train_timesteps // self.num_inference_steps)[::-1].copy()\n        self.timesteps += offset\n\n    def scale_model_input(self,\n                          sample: torch.FloatTensor,\n                          timestep: Optional[int] = None) -> torch.FloatTensor:\n        \"\"\"Ensures interchangeability with schedulers that need to scale the\n        denoising model input depending on the current timestep.\n\n        Args:\n            sample (`torch.FloatTensor`): input sample\n            timestep (`int`, optional): current timestep\n\n        Returns:\n            `torch.FloatTensor`: scaled input sample\n        \"\"\"\n\n        return sample\n\n    def _get_variance(self, timestep, prev_timestep):\n        \"\"\"get variance.\"\"\"\n\n        alpha_prod_t = self.alphas_cumprod[timestep]\n        alpha_prod_t_prev = self.alphas_cumprod[\n            prev_timestep] if prev_timestep >= 0 else self.final_alpha_cumprod\n        beta_prod_t = 1 - alpha_prod_t\n        beta_prod_t_prev = 1 - alpha_prod_t_prev\n        variance = (beta_prod_t_prev /\n                    beta_prod_t) * (1 - alpha_prod_t / alpha_prod_t_prev)\n        return variance\n\n    def step(\n        self,\n        model_output: Union[torch.FloatTensor, np.ndarray],\n        timestep: int,\n        sample: Union[torch.FloatTensor, np.ndarray],\n        cond_fn=None,\n        cond_kwargs={},\n        eta: float = 0.0,\n        use_clipped_model_output: bool = False,\n        generator=None,\n    ):\n        \"\"\"step forward.\"\"\"\n\n        output = {}\n        if self.num_inference_steps is None:\n            raise ValueError(\"Number of inference steps is 'None', '\\\n                    'you need to run 'set_timesteps' '\\\n                        'after creating the scheduler\")\n\n        pred = None\n        if isinstance(model_output, dict):\n            pred = model_output['pred']\n            model_output = model_output['eps']\n        elif model_output.shape[1] == sample.shape[\n                1] * 2 and self.variance_type in ['learned', 'learned_range']:\n            model_output, _ = torch.split(model_output, sample.shape[1], dim=1)\n        else:\n            if not model_output.shape == sample.shape:\n                raise TypeError\n\n        # See formulas (12) and (16) of DDIM paper https://arxiv.org/pdf/2010.02502.pdf # noqa\n        # Ideally, read DDIM paper in-detail understanding\n\n        # Notation (<variable name> -> <name in paper>\n        # - pred_noise_t -> e_theta(x_t, t)\n        # - pred_original_sample -> f_theta(x_t, t) or x_0\n        # - std_dev_t -> sigma_t\n        # - eta -> η\n        # - pred_sample_direction -> \"direction pointingc to x_t\"\n        # - pred_prev_sample -> \"x_t-1\"\n\n        # 1. get previous step value (=t-1)\n        prev_timestep = (\n            timestep - self.num_train_timesteps // self.num_inference_steps)\n\n        # 2. compute alphas, betas\n        alpha_prod_t = self.alphas_cumprod[timestep]\n        alpha_prod_t_prev = self.alphas_cumprod[\n            prev_timestep] if prev_timestep >= 0 else self.final_alpha_cumprod\n        beta_prod_t = 1 - alpha_prod_t\n\n        # 3. compute predicted original sample from predicted noise also called\n        # \"predicted x_0\" of formula (12) from https://arxiv.org/pdf/2010.02502.pdf # noqa\n        pred_original_sample = (sample - (\n            (beta_prod_t)**(0.5)) * model_output) / alpha_prod_t**(0.5)\n        if pred is not None:\n            pred_original_sample = pred\n\n        gradient = 0.\n        if cond_fn is not None:\n            if cond_fn.__name__ == 'classifier_grad':\n                y = cond_kwargs['y']\n                classifier = cond_kwargs['classifier']\n                classifier_scale = cond_kwargs['classifier_scale']\n                gradient = cond_fn(\n                    classifier,\n                    sample,\n                    timestep,\n                    y=y,\n                    classifier_scale=classifier_scale)\n            else:\n                gradient = cond_fn(\n                    cond_kwargs.pop('unet'), self, sample, timestep,\n                    beta_prod_t, cond_kwargs.pop('model_stats'), **cond_kwargs)\n            model_output = model_output - (beta_prod_t**0.5) * gradient\n            pred_original_sample = (\n                sample -\n                (beta_prod_t**(0.5)) * model_output) / alpha_prod_t**(0.5)\n        # 4. Clip \"predicted x_0\"\n        if self.clip_sample:\n            pred_original_sample = torch.clamp(pred_original_sample, -1, 1)\n\n        # 5. compute variance: \"sigma_t(η)\" -> see formula (16)\n        # σ_t = sqrt((1 − α_t−1)/(1 − α_t)) * sqrt(1 − α_t/α_t−1)\n        variance = self._get_variance(timestep, prev_timestep)\n        std_dev_t = eta * variance**(0.5)\n        output.update(dict(sigma=std_dev_t))\n\n        if use_clipped_model_output:\n            # the model_output is always\n            # re-derived from the clipped x_0 in Glide\n            model_output = (sample - (alpha_prod_t**(0.5)) *\n                            pred_original_sample) / beta_prod_t**(0.5)\n\n        # 6. compute \"direction pointing to x_t\" of formula (12) from https://arxiv.org/pdf/2010.02502.pdf # noqa\n        pred_sample_direction = (1 - alpha_prod_t_prev -\n                                 std_dev_t**2)**(0.5) * model_output\n\n        # 7. compute x_t without \"random noise\" of\n        # formula (12) from https://arxiv.org/pdf/2010.02502.pdf\n        prev_mean = alpha_prod_t_prev**(\n            0.5) * pred_original_sample + pred_sample_direction\n        output.update(dict(mean=prev_mean, prev_sample=prev_mean))\n\n        if eta > 0:\n            device = model_output.device if torch.is_tensor(\n                model_output) else 'cpu'\n            noise = torch.randn(\n                model_output.shape, generator=generator).to(device)\n            variance = std_dev_t * noise\n\n            if not torch.is_tensor(model_output):\n                variance = variance.numpy()\n\n            prev_sample = prev_mean + variance\n            output.update({'prev_sample': prev_sample})\n\n        # NOTE: this x0 is twice computed\n        output.update({\n            'original_sample': pred_original_sample,\n            'beta_prod_t': beta_prod_t\n        })\n        return output\n\n    def add_noise(self, original_samples, noise, timesteps):\n        \"\"\"add noise.\"\"\"\n\n        sqrt_alpha_prod = self.alphas_cumprod[timesteps]**0.5\n        sqrt_one_minus_alpha_prod = (1 - self.alphas_cumprod[timesteps])**0.5\n        noisy_samples = (\n            sqrt_alpha_prod * original_samples +\n            sqrt_one_minus_alpha_prod * noise)\n        return noisy_samples\n\n    def __len__(self):\n        return self.num_train_timesteps\n"
  },
  {
    "path": "mmagic/models/diffusion_schedulers/ddpm_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Union\n\nimport numpy as np\nimport torch\n\nfrom mmagic.models.utils.diffusion_utils import betas_for_alpha_bar\nfrom mmagic.registry import DIFFUSION_SCHEDULERS\n\n\n@DIFFUSION_SCHEDULERS.register_module()\nclass EditDDPMScheduler:\n\n    def __init__(self,\n                 num_train_timesteps: int = 1000,\n                 beta_start: float = 0.0001,\n                 beta_end: float = 0.02,\n                 beta_schedule: str = 'linear',\n                 trained_betas: Optional[Union[np.array, list]] = None,\n                 variance_type='fixed_small',\n                 clip_sample=True):\n        \"\"\"```EditDDPMScheduler``` support the diffusion and reverse process\n        formulated in https://arxiv.org/abs/2006.11239.\n\n        The code is heavily influenced by https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddpm.py. # noqa\n\n        Args:\n            num_train_timesteps (int, optional): The timesteps for training\n                process. Defaults to 1000.\n            beta_start (float, optional): The beta value at start. The beta\n                values will be interpolated from beta_start to beta_end.\n                Defaults to 0.0001.\n            beta_end (float, optional): The beta value at the end. The beta\n                values will be interpolated from beta_start to beta_end.\n                Defaults to 0.02.\n            beta_schedule (str, optional): The interpolation schedule for beta\n                values. Supported choices are 'linear', 'scaled_linear', and\n                'squaredcos_cap_v2'. Defaults to 'linear'.\n            trained_betas (list, np.array, optional): betas directly to the\n                constructor to bypass `beta_start`, `beta_end` etc. Defaults to None.\n            variance_type (str, optional): How denoising unet output variance\n                value. Supported choices are 'fixed_small', 'fixed_small_log',\n                'fixed_large', 'fixed_large_log', 'learned', and 'leanred_range'.\n                Defaults to 'fixed_small'.\n            clip_sample (bool, optional): Whether clip the value of predicted\n                original image (x0) to [-1, 1]. Defaults to True.\n        \"\"\"\n        self.num_train_timesteps = num_train_timesteps\n        if trained_betas is not None:\n            self.betas = np.asarray(trained_betas)\n        elif beta_schedule == 'linear':\n            self.betas = np.linspace(\n                beta_start, beta_end, num_train_timesteps, dtype=np.float64)\n        elif beta_schedule == 'scaled_linear':\n            # this schedule is very specific to the latent diffusion model.\n            self.betas = np.linspace(\n                beta_start**0.5,\n                beta_end**0.5,\n                num_train_timesteps,\n                dtype=np.float32)**2\n        elif beta_schedule == 'squaredcos_cap_v2':\n            # Glide cosine schedule\n            self.betas = betas_for_alpha_bar(num_train_timesteps)\n        else:\n            raise NotImplementedError(\n                f'{beta_schedule} does is not implemented for {self.__class__}'\n            )\n\n        self.alphas = 1.0 - self.betas\n        self.alphas_cumprod = np.cumprod(self.alphas, axis=0)\n        self.one = np.array(1.0)\n\n        # setable values\n        self.num_inference_steps = None\n        self.timesteps = np.arange(0, num_train_timesteps)[::-1].copy()\n\n        self.variance_type = variance_type\n        self.clip_sample = clip_sample\n\n    def set_timesteps(self, num_inference_steps):\n        \"\"\"set timesteps.\"\"\"\n\n        num_inference_steps = min(self.num_train_timesteps,\n                                  num_inference_steps)\n        self.num_inference_steps = num_inference_steps\n        self.timesteps = np.arange(\n            0, self.num_train_timesteps,\n            self.num_train_timesteps // self.num_inference_steps)[::-1].copy()\n\n    def _get_variance(self, t, predicted_variance=None, variance_type=None):\n        \"\"\"get variance.\"\"\"\n\n        alpha_prod_t = self.alphas_cumprod[t]\n        alpha_prod_t_prev = self.alphas_cumprod[t - 1] if t > 0 else self.one\n\n        # For t > 0, compute predicted variance βt (see formula (6) and (7) from https://arxiv.org/pdf/2006.11239.pdf) # noqa\n        # and sample from it to get previous sample\n        # x_{t-1} ~ N(pred_prev_sample, variance) == add variance to pred_sample # noqa\n        variance = (1 - alpha_prod_t_prev) / (1 - alpha_prod_t) * self.betas[t]\n\n        if t == 0:\n            log_variance = (1 - alpha_prod_t_prev) / (\n                1 - alpha_prod_t) * self.betas[1]\n        else:\n            log_variance = np.log(variance)\n\n        if variance_type is None:\n            variance_type = self.variance_type\n\n        # hacks - were probs added for training stability\n        if variance_type == 'fixed_small':\n            variance = np.clip(variance, a_min=1e-20, a_max=10000)\n        # for rl-diffusion_scheduler https://arxiv.org/abs/2205.09991\n        elif variance_type == 'fixed_small_log':\n            variance = np.log(np.clip(variance, a_min=1e-20, a_max=10000))\n        elif variance_type == 'fixed_large':\n            variance = self.betas[t]\n        elif variance_type == 'fixed_large_log':\n            # Glide max_log\n            variance = np.log(self.betas[t])\n        elif variance_type == 'learned':\n            return predicted_variance\n        elif variance_type == 'learned_range':\n            min_log = log_variance\n            max_log = np.log(self.betas[t])\n            frac = (predicted_variance + 1) / 2\n            log_variance = frac * max_log + (1 - frac) * min_log\n            variance = torch.exp(log_variance)\n\n        return variance\n\n    def step(self,\n             model_output: torch.FloatTensor,\n             timestep: int,\n             sample: torch.FloatTensor,\n             predict_epsilon=True,\n             cond_fn=None,\n             cond_kwargs={},\n             generator=None):\n\n        t = timestep\n        \"\"\"step forward\"\"\"\n\n        if model_output.shape[1] == sample.shape[\n                1] * 2 and self.variance_type in ['learned', 'learned_range']:\n            model_output, predicted_variance = torch.split(\n                model_output, sample.shape[1], dim=1)\n        else:\n            predicted_variance = None\n\n        # 1. compute alphas, betas\n        alpha_prod_t = self.alphas_cumprod[t]\n        alpha_prod_t_prev = self.alphas_cumprod[t - 1] if t > 0 else self.one\n        beta_prod_t = 1 - alpha_prod_t\n        beta_prod_t_prev = 1 - alpha_prod_t_prev\n\n        # 2. compute predicted original sample from predicted noise also called\n        # \"predicted x_0\" of formula (15) from https://arxiv.org/pdf/2006.11239.pdf # noqa\n        if predict_epsilon:\n            pred_original_sample = (\n                (sample - beta_prod_t**(0.5) * model_output) /\n                alpha_prod_t**(0.5))\n        else:\n            pred_original_sample = model_output\n\n        # 3. Clip \"predicted x_0\"\n        if self.clip_sample:\n            pred_original_sample = torch.clamp(pred_original_sample, -1, 1)\n\n        # 4. Compute coefficients for pred_original_sample x_0 and current sample x_t # noqa\n        # See formula (7) from https://arxiv.org/pdf/2006.11239.pdf\n        pred_original_sample_coeff = (alpha_prod_t_prev**(0.5) *\n                                      self.betas[t]) / beta_prod_t\n        current_sample_coeff = self.alphas[t]**(\n            0.5) * beta_prod_t_prev / beta_prod_t\n\n        # 5. Compute predicted previous sample µ_t\n        # See formula (7) from https://arxiv.org/pdf/2006.11239.pdf\n        pred_prev_mean = (\n            pred_original_sample_coeff * pred_original_sample +\n            current_sample_coeff * sample)\n\n        # 6. Add noise\n        noise = torch.randn_like(model_output)\n        sigma = 0\n        if t > 0:\n            sigma = self._get_variance(\n                t, predicted_variance=predicted_variance)**0.5\n\n        pred_prev_sample = pred_prev_mean + sigma * noise\n\n        gradient = 0.\n        if cond_fn is not None:\n            y = cond_kwargs['y']\n            classifier = cond_kwargs['classifier']\n            classifier_scale = cond_kwargs['classifier_scale']\n            gradient = cond_fn(\n                classifier,\n                sample,\n                timestep,\n                y=y,\n                classifier_scale=classifier_scale)\n\n            guided_mean = pred_prev_mean + sigma * gradient\n            pred_prev_sample = guided_mean + sigma * noise\n\n        return {\n            'prev_sample': pred_prev_sample,\n            'mean': pred_prev_mean,\n            'sigma': sigma,\n            'noise': noise\n        }\n\n    def add_noise(self, original_samples, noise, timesteps):\n        \"\"\"add noise.\"\"\"\n\n        sqrt_alpha_prod = self.alphas_cumprod[timesteps]**0.5\n        sqrt_one_minus_alpha_prod = (1 - self.alphas_cumprod[timesteps])**0.5\n        noisy_samples = (\n            sqrt_alpha_prod * original_samples +\n            sqrt_one_minus_alpha_prod * noise)\n        return noisy_samples\n\n    def training_loss(self, model, x_0, t):\n        raise NotImplementedError(\n            'This function is supposed to return '\n            'a dict containing loss items giving sampled x0 and timestep.')\n\n    def sample_timestep(self):\n        raise NotImplementedError\n\n    def __len__(self):\n        return self.num_train_timesteps\n"
  },
  {
    "path": "mmagic/models/editors/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .animatediff import AnimateDiff, UNet3DConditionMotionModel\nfrom .aotgan import AOTBlockNeck, AOTEncoderDecoder, AOTInpaintor\nfrom .arcface import IDLossModel\nfrom .basicvsr import BasicVSR, BasicVSRNet\nfrom .basicvsr_plusplus_net import BasicVSRPlusPlusNet\nfrom .biggan import BigGAN\nfrom .cain import CAIN, CAINNet\nfrom .controlnet import ControlStableDiffusion\nfrom .cyclegan import CycleGAN\nfrom .dcgan import DCGAN\nfrom .ddpm import DenoisingUnet\nfrom .deblurganv2 import (DeblurGanV2, DeblurGanV2Discriminator,\n                          DeblurGanV2Generator)\nfrom .deepfillv1 import (ContextualAttentionModule, ContextualAttentionNeck,\n                         DeepFillDecoder, DeepFillEncoder, DeepFillRefiner,\n                         DeepFillv1Discriminators, DeepFillv1Inpaintor)\nfrom .deepfillv2 import DeepFillEncoderDecoder\nfrom .dic import (DIC, DICNet, FeedbackBlock, FeedbackBlockCustom,\n                  FeedbackBlockHeatmapAttention, LightCNN, MaxFeature)\nfrom .dim import DIM\nfrom .disco_diffusion import ClipWrapper, DiscoDiffusion\nfrom .dreambooth import DreamBooth\nfrom .edsr import EDSRNet\nfrom .edvr import EDVR, EDVRNet\nfrom .eg3d import EG3D\nfrom .esrgan import ESRGAN, RRDBNet\nfrom .fastcomposer import FastComposer\nfrom .fba import FBADecoder, FBAResnetDilated\nfrom .flavr import FLAVR, FLAVRNet\nfrom .gca import GCA\nfrom .ggan import GGAN\nfrom .glean import GLEANStyleGANv2\nfrom .global_local import (GLDecoder, GLDilationNeck, GLEncoder,\n                           GLEncoderDecoder)\nfrom .guided_diffusion import AblatedDiffusionModel\nfrom .iconvsr import IconVSRNet\nfrom .indexnet import (DepthwiseIndexBlock, HolisticIndexBlock,\n                       IndexedUpsample, IndexNet, IndexNetDecoder,\n                       IndexNetEncoder)\nfrom .inst_colorization import InstColorization\nfrom .liif import LIIF, MLPRefiner\nfrom .lsgan import LSGAN\nfrom .mspie import MSPIEStyleGAN2, PESinGAN\nfrom .nafnet import NAFBaseline, NAFBaselineLocal, NAFNet, NAFNetLocal\nfrom .pconv import (MaskConvModule, PartialConv2d, PConvDecoder, PConvEncoder,\n                    PConvEncoderDecoder, PConvInpaintor)\nfrom .pggan import ProgressiveGrowingGAN\nfrom .pix2pix import Pix2Pix\nfrom .plain import PlainDecoder, PlainRefiner\nfrom .rdn import RDNNet\nfrom .real_basicvsr import RealBasicVSR, RealBasicVSRNet\nfrom .real_esrgan import RealESRGAN, UNetDiscriminatorWithSpectralNorm\nfrom .restormer import Restormer\nfrom .sagan import SAGAN\nfrom .singan import SinGAN\nfrom .srcnn import SRCNNNet\nfrom .srgan import SRGAN, ModifiedVGG, MSRResNet\nfrom .stable_diffusion import StableDiffusion, StableDiffusionInpaint\nfrom .stable_diffusion_xl import StableDiffusionXL\nfrom .stylegan1 import StyleGAN1\nfrom .stylegan2 import StyleGAN2\nfrom .stylegan3 import StyleGAN3, StyleGAN3Generator\nfrom .swinir import SwinIRNet\nfrom .tdan import TDAN, TDANNet\nfrom .textual_inversion import TextualInversion\nfrom .tof import TOFlowVFINet, TOFlowVSRNet, ToFResBlock\nfrom .ttsr import LTE, TTSR, SearchTransformer, TTSRDiscriminator, TTSRNet\nfrom .vico import ViCo\nfrom .wgan_gp import WGANGP\n\n__all__ = [\n    'AOTEncoderDecoder', 'AOTBlockNeck', 'AOTInpaintor',\n    'ContextualAttentionNeck', 'ContextualAttentionModule', 'CAIN', 'CAINNet',\n    'DIM', 'DIC', 'DICNet', 'LightCNN', 'FeedbackBlock',\n    'FeedbackBlockHeatmapAttention', 'FeedbackBlockCustom', 'MaxFeature',\n    'FLAVR', 'FLAVRNet', 'ToFResBlock', 'TOFlowVFINet', 'TOFlowVSRNet',\n    'DeepFillEncoder', 'DeepFillEncoderDecoder', 'DeepFillDecoder',\n    'DeepFillRefiner', 'DeepFillv1Inpaintor', 'DeepFillv1Discriminators',\n    'EDSRNet', 'ESRGAN', 'DepthwiseIndexBlock', 'HolisticIndexBlock',\n    'IndexNet', 'IndexNetEncoder', 'IndexedUpsample', 'IndexNetDecoder', 'GCA',\n    'GLEncoderDecoder', 'GLEncoder', 'GLDecoder', 'GLDilationNeck',\n    'PartialConv2d', 'PConvEncoderDecoder', 'PConvEncoder', 'PConvDecoder',\n    'PConvInpaintor', 'MaskConvModule', 'RRDBNet', 'SRCNNNet', 'RRDBNet',\n    'RealESRGAN', 'UNetDiscriminatorWithSpectralNorm', 'EDVR', 'EDVRNet',\n    'TDAN', 'TDANNet', 'BasicVSR', 'BasicVSRNet', 'BasicVSRPlusPlusNet',\n    'IconVSRNet', 'RealBasicVSR', 'RealBasicVSRNet', 'SRGAN', 'MaxFeature',\n    'ModifiedVGG', 'MSRResNet', 'RDNNet', 'LTE', 'TTSR', 'TTSRNet',\n    'TTSRDiscriminator', 'TTSRNet', 'SearchTransformer', 'GLEANStyleGANv2',\n    'LIIF', 'MLPRefiner', 'PlainRefiner', 'PlainDecoder', 'FBAResnetDilated',\n    'FBADecoder', 'WGANGP', 'CycleGAN', 'SAGAN', 'LSGAN', 'GGAN', 'Pix2Pix',\n    'StyleGAN1', 'StyleGAN2', 'StyleGAN3', 'BigGAN', 'DCGAN',\n    'ProgressiveGrowingGAN', 'SinGAN', 'AblatedDiffusionModel',\n    'DiscoDiffusion', 'IDLossModel', 'PESinGAN', 'MSPIEStyleGAN2',\n    'StyleGAN3Generator', 'InstColorization', 'NAFBaseline',\n    'NAFBaselineLocal', 'NAFNet', 'NAFNetLocal', 'DenoisingUnet',\n    'ClipWrapper', 'EG3D', 'Restormer', 'SwinIRNet', 'StableDiffusion',\n    'ControlStableDiffusion', 'DreamBooth', 'TextualInversion', 'DeblurGanV2',\n    'DeblurGanV2Generator', 'DeblurGanV2Discriminator',\n    'StableDiffusionInpaint', 'ViCo', 'FastComposer', 'AnimateDiff',\n    'UNet3DConditionMotionModel', 'StableDiffusionXL'\n]\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .animatediff import AnimateDiff\nfrom .animatediff_utils import save_videos_grid\nfrom .unet_3d import UNet3DConditionMotionModel\n\n__all__ = ['AnimateDiff', 'save_videos_grid', 'UNet3DConditionMotionModel']\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/animatediff.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport inspect\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom einops import rearrange\nfrom mmengine import print_log\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModel\nfrom safetensors import safe_open\nfrom tqdm import tqdm\n\nfrom mmagic.models.archs import TokenizerWrapper, set_lora\nfrom mmagic.models.utils import build_module, set_tomesd, set_xformers\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom .animatediff_utils import (convert_ldm_clip_checkpoint,\n                                convert_ldm_unet_checkpoint,\n                                convert_ldm_vae_checkpoint)\n\nlogger = MMLogger.get_current_instance()\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module('animatediff')\n@MODELS.register_module()\nclass AnimateDiff(BaseModel):\n    \"\"\"Implementation of `AnimateDiff.\n\n    <https://arxiv.org/abs/2307.04725>`_ (AnimateDiff).\n\n    Args:\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        lora_config (dict, optional): The config for LoRA finetuning. Defaults\n            to None.\n        val_prompts (Union[str, List[str]], optional): The prompts for\n            validation. Defaults to None.\n        class_prior_prompt (str, optional): The prompt for class prior loss.\n        num_class_images (int, optional): The number of images for class prior.\n            Defaults to 3.\n        prior_loss_weight (float, optional): The weight for class prior loss.\n            Defaults to 0.\n        fine_tune_text_encoder (bool, optional): Whether to fine-tune text\n            encoder. Defaults to False.\n        dtype (str, optional): The dtype for the model. Defaults to 'fp16'.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise  # noqa\n            Defaults to 0.\n        tomesd_cfg (dict, optional): The config for TOMESD. Please refers to\n            https://github.com/dbolya/tomesd and\n            https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/utils/tome_utils.py for detail.  # noqa\n            Defaults to None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Defaults to\n                dict(type='DataPreprocessor').\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Defaults to None/\n    \"\"\"\n\n    def __init__(\n        self,\n        vae: ModelType,\n        text_encoder: ModelType,\n        tokenizer: str,\n        unet: ModelType,\n        scheduler: ModelType,\n        test_scheduler: Optional[ModelType] = None,\n        dtype: str = 'fp32',\n        enable_xformers: bool = True,\n        noise_offset_weight: float = 0,\n        tomesd_cfg: Optional[dict] = None,\n        data_preprocessor=dict(type='DataPreprocessor'),\n        motion_module_cfg: Optional[dict] = None,\n        dream_booth_lora_cfg: Optional[dict] = None,\n    ):\n        super().__init__(data_preprocessor)\n\n        default_args = dict()\n        if dtype is not None:\n            default_args['dtype'] = dtype\n\n        self.dtype = torch.float32\n        if dtype in ['float16', 'fp16', 'half']:\n            self.dtype = torch.float16\n        elif dtype == 'bf16':\n            self.dtype = torch.bfloat16\n        else:\n            assert dtype in [\n                'fp32', None\n            ], ('dtype must be one of \\'fp32\\', \\'fp16\\', \\'bf16\\' or None.')\n        self.vae = build_module(vae, MODELS, default_args=default_args)\n        self.unet = build_module(unet, MODELS)  # NOTE: initialize unet as fp32\n        self._unet_ori_dtype = next(self.unet.parameters()).dtype\n        print_log(f'Set UNet dtype to \\'{self._unet_ori_dtype}\\'.', 'current')\n\n        self.init_motion_module(motion_module_cfg)\n\n        self.scheduler = build_module(scheduler, DIFFUSION_SCHEDULERS)\n        if test_scheduler is None:\n            self.test_scheduler = deepcopy(self.scheduler)\n        else:\n            self.test_scheduler = build_module(test_scheduler,\n                                               DIFFUSION_SCHEDULERS)\n        self.text_encoder = build_module(text_encoder, MODELS)\n        if not isinstance(tokenizer, str):\n            self.tokenizer = tokenizer\n        else:\n            # NOTE: here we assume tokenizer is an string\n            self.tokenizer = TokenizerWrapper(tokenizer, subfolder='tokenizer')\n\n        self.unet_sample_size = self.unet.sample_size\n        self.vae_scale_factor = 2**(len(self.vae.block_out_channels) - 1)\n\n        self.enable_noise_offset = noise_offset_weight > 0\n        self.noise_offset_weight = noise_offset_weight\n\n        self.enable_xformers = enable_xformers\n        self.unet.set_use_memory_efficient_attention_xformers(True)\n\n        self.tomesd_cfg = tomesd_cfg\n        self.set_tomesd()\n\n        self.init_dreambooth_lora(dream_booth_lora_cfg)\n\n        self.prepare_model()\n\n    def set_xformers(self, module: Optional[nn.Module] = None) -> nn.Module:\n        \"\"\"Set xformers for the model.\n\n        Returns:\n            nn.Module: The model with xformers.\n        \"\"\"\n        if self.enable_xformers:\n            if module is None:\n                set_xformers(self)\n            else:\n                set_xformers(module)\n\n    def set_tomesd(self) -> nn.Module:\n        \"\"\"Set ToMe for the stable diffusion model.\n\n        Returns:\n            nn.Module: The model with ToMe.\n        \"\"\"\n        if self.tomesd_cfg is not None:\n            set_tomesd(self, **self.tomesd_cfg)\n\n    @property\n    def device(self):\n        \"\"\"Set device for the model.\"\"\"\n        return next(self.parameters()).device\n\n    def init_motion_module(self, motion_module_cfg):\n        if motion_module_cfg is not None:\n            if 'path' in motion_module_cfg.keys():\n                motion_module_state_dict = torch.load(\n                    motion_module_cfg['path'], map_location='cpu')\n                # if \"global_step\" in motion_module_state_dict:\n                # func_args.update({\"global_step\":\n                # motion_module_state_dict[\"global_step\"]})\n                missing, unexpected = self.unet.load_state_dict(\n                    motion_module_state_dict, strict=False)\n                assert len(unexpected) == 0\n\n    def init_dreambooth_lora(self, dream_booth_lora_cfg):\n        # TODO: finish\n        if dream_booth_lora_cfg is not None:\n            if 'path' in dream_booth_lora_cfg.keys():\n                state_dict = {}\n                with safe_open(\n                        dream_booth_lora_cfg['path'], framework='pt',\n                        device='cpu') as f:\n                    for key in f.keys():\n                        state_dict[key] = f.get_tensor(key)\n                # vae\n                converted_vae_checkpoint = convert_ldm_vae_checkpoint(\n                    state_dict, self.vae.config)\n                self.vae.load_state_dict(converted_vae_checkpoint)\n                # unet\n                converted_unet_checkpoint = convert_ldm_unet_checkpoint(\n                    state_dict, self.unet.config)\n                self.unet.load_state_dict(\n                    converted_unet_checkpoint, strict=False)\n                # text_model\n                self.text_encoder = convert_ldm_clip_checkpoint(state_dict)\n                # self.convert_lora(state_dict)\n\n    def _encode_prompt(self, prompt, device, num_videos_per_prompt,\n                       do_classifier_free_guidance, negative_prompt):\n        \"\"\"Encodes the prompt into text encoder hidden states.\"\"\"\n        batch_size = len(prompt) if isinstance(prompt, list) else 1\n\n        text_inputs = self.tokenizer(\n            prompt,\n            padding='max_length',\n            max_length=self.tokenizer.model_max_length,\n            truncation=True,\n            return_tensors='pt',\n        )\n        text_input_ids = text_inputs.input_ids\n        untruncated_ids = self.tokenizer(\n            prompt, padding='longest', return_tensors='pt').input_ids\n\n        if untruncated_ids.shape[-1] >= text_input_ids.shape[\n                -1] and not torch.equal(text_input_ids, untruncated_ids):\n            removed_text = self.tokenizer.batch_decode(\n                untruncated_ids[:, self.tokenizer.model_max_length - 1:-1])\n            logger.warning(\n                'The following part of your input was truncated '\n                f'because CLIP can only handle sequences up to'\n                f' {self.tokenizer.model_max_length} tokens: {removed_text}')\n\n        text_encoder = self.text_encoder.module if hasattr(\n            self.text_encoder, 'module') else self.text_encoder\n        if hasattr(text_encoder.config, 'use_attention_mask'\n                   ) and text_encoder.config.use_attention_mask:\n            attention_mask = text_inputs.attention_mask.to(device)\n        else:\n            attention_mask = None\n\n        text_embeddings = self.text_encoder(\n            text_input_ids.to(device),\n            attention_mask=attention_mask,\n        )\n        text_embeddings = text_embeddings[0]\n\n        # duplicate text embeddings for each generation\n        # per prompt, using mps friendly method\n        bs_embed, seq_len, _ = text_embeddings.shape\n        text_embeddings = text_embeddings.repeat(1, num_videos_per_prompt, 1)\n        text_embeddings = text_embeddings.view(\n            bs_embed * num_videos_per_prompt, seq_len, -1)\n\n        # get unconditional embeddings for classifier free guidance\n        if do_classifier_free_guidance:\n            uncond_tokens: List[str]\n            if negative_prompt is None:\n                uncond_tokens = [''] * batch_size\n            elif type(prompt) is not type(negative_prompt):\n                raise TypeError(\n                    f'`negative_prompt` should be the same type '\n                    f'to `prompt`, but got {type(negative_prompt)} !='\n                    f' {type(prompt)}.')\n            elif isinstance(negative_prompt, str):\n                uncond_tokens = [negative_prompt]\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f'`negative_prompt`: {negative_prompt} has '\n                    f'batch size {len(negative_prompt)}, but `prompt`:'\n                    f' {prompt} has batch size {batch_size}. Please '\n                    f'make sure that passed `negative_prompt` matches'\n                    ' the batch size of `prompt`.')\n            else:\n                uncond_tokens = negative_prompt\n\n            max_length = text_input_ids.shape[-1]\n            uncond_input = self.tokenizer(\n                uncond_tokens,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n\n            if hasattr(text_encoder.config, 'use_attention_mask'\n                       ) and text_encoder.config.use_attention_mask:\n                attention_mask = uncond_input.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            uncond_embeddings = self.text_encoder(\n                uncond_input.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            uncond_embeddings = uncond_embeddings[0]\n\n            # duplicate unconditional embeddings for each generation\n            # per prompt, using mps friendly method\n            seq_len = uncond_embeddings.shape[1]\n            uncond_embeddings = uncond_embeddings.repeat(\n                1, num_videos_per_prompt, 1)\n            uncond_embeddings = uncond_embeddings.view(\n                batch_size * num_videos_per_prompt, seq_len, -1)\n\n            # For classifier free guidance, we need to do two forward passes.\n            # Here we concatenate the unconditional and text embeddings\n            # into a single batch to avoid doing two forward passes\n            text_embeddings = torch.cat([uncond_embeddings, text_embeddings])\n\n        return text_embeddings\n\n    def decode_latents(self, latents):\n        \"\"\"latents decoder.\"\"\"\n        video_length = latents.shape[2]\n        latents = 1 / 0.18215 * latents\n        latents = rearrange(latents, 'b c f h w -> (b f) c h w')\n        # video = self.vae.decode(latents).sample\n        video = []\n        for frame_idx in tqdm(range(latents.shape[0])):\n            video.append(\n                self.vae.decode(latents[frame_idx:frame_idx + 1]).sample)\n        video = torch.cat(video)\n        video = rearrange(video, '(b f) c h w -> b c f h w', f=video_length)\n        video = (video / 2 + 0.5).clamp(0, 1)\n        # we always cast to float32 as this does not cause significant\n        # overhead and is compatible with bfloa16\n        video = video.cpu().float().numpy()\n        return video\n\n    def prepare_extra_step_kwargs(self, generator, eta):\n        \"\"\"Prepare extra kwargs for the scheduler step, since not all\n        schedulers have the same signature eta (η) is only used with the\n        DDIMScheduler, it will be ignored for other schedulers.\"\"\"\n        # prepare extra kwargs for the scheduler step, since not all\n        # schedulers have the same signature\n        # eta (η) is only used with the DDIMScheduler, it will\n        # be ignored for other schedulers.\n        # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502\n        # and should be between [0, 1]\n\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def check_inputs(self, prompt, height, width):\n        \"\"\"Check inputs.\n\n        Raise error if not correct\n        \"\"\"\n        if not isinstance(prompt, str) and not isinstance(prompt, list):\n            raise ValueError(f'`prompt` has to be of type `str`'\n                             f' or `list` but is {type(prompt)}')\n\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError(f'`height` and `width` have to be divisible'\n                             f' by 8 but are {height} and {width}.')\n\n        # if (callback_steps is None) or (\n        #     callback_steps is not None and (not isinstance(callback_steps,\n        #       int) or callback_steps <= 0)\n        # ):\n        #     raise ValueError(\n        #         f\"`callback_steps` has to be a positive integer but\n        #         is {callback_steps} of type\"\n        #         f\" {type(callback_steps)}.\"\n        #     )\n\n    def convert_lora(self,\n                     state_dict,\n                     LORA_PREFIX_UNET='lora_unet',\n                     LORA_PREFIX_TEXT_ENCODER='lora_te',\n                     alpha=0.6):\n        \"\"\" Convert lora for unet and text_encoder\n            TODO: use this function to convert lora\n\n        Args:\n            state_dict (_type_): _description_\n            LORA_PREFIX_UNET (str, optional):\n            _description_. Defaults to 'lora_unet'.\n            LORA_PREFIX_TEXT_ENCODER (str, optional):\n            _description_. Defaults to 'lora_te'.\n            alpha (float, optional): _description_. Defaults to 0.6.\n\n        Returns:\n            TODO: check each output type\n            _type_: unet && text_encoder\n        \"\"\"\n        # load base model\n        # pipeline = StableDiffusionPipeline.from_pretrained(base_model_path,\n        # torch_dtype=torch.float32)\n\n        # load LoRA weight from .safetensors\n        # state_dict = load_file(checkpoint_path)\n\n        visited = []\n\n        # directly update weight in diffusers model\n        for key in state_dict:\n            # it is suggested to print out the key, it usually\n            # will be something like below\n            # \"lora_te_text_model_encoder_layers_0_self_attn_k_proj.lora_down.weight\"\n\n            # as we have set the alpha beforehand, so just skip\n            if '.alpha' in key or key in visited:\n                continue\n\n            if 'text' in key:\n                layer_infos = key.split('.')[0].split(\n                    LORA_PREFIX_TEXT_ENCODER + '_')[-1].split('_')\n                curr_layer = self.text_encoder\n            else:\n                layer_infos = key.split('.')[0].split(LORA_PREFIX_UNET +\n                                                      '_')[-1].split('_')\n                curr_layer = self.unet\n            # find the target layer\n            temp_name = layer_infos.pop(0)\n            while len(layer_infos) > -1:\n                try:\n                    curr_layer = curr_layer.__getattr__(temp_name)\n                    if len(layer_infos) > 0:\n                        temp_name = layer_infos.pop(0)\n                    elif len(layer_infos) == 0:\n                        break\n                except Exception:\n                    if len(temp_name) > 0:\n                        temp_name += '_' + layer_infos.pop(0)\n                    else:\n                        temp_name = layer_infos.pop(0)\n\n            pair_keys = []\n            if 'lora_down' in key:\n                pair_keys.append(key.replace('lora_down', 'lora_up'))\n                pair_keys.append(key)\n            else:\n                pair_keys.append(key)\n                pair_keys.append(key.replace('lora_up', 'lora_down'))\n\n            # update weight\n            if len(state_dict[pair_keys[0]].shape) == 4:\n                weight_up = state_dict[pair_keys[0]].squeeze(3).squeeze(2).to(\n                    torch.float32)\n                weight_down = state_dict[pair_keys[1]].squeeze(3).squeeze(\n                    2).to(torch.float32)\n                curr_layer.weight.data += alpha * torch.mm(\n                    weight_up, weight_down).unsqueeze(2).unsqueeze(3).to(\n                        curr_layer.weight.data.device)\n            else:\n                weight_up = state_dict[pair_keys[0]].to(torch.float32)\n                weight_down = state_dict[pair_keys[1]].to(torch.float32)\n                curr_layer.weight.data += alpha * torch.mm(\n                    weight_up, weight_down).to(curr_layer.weight.data.device)\n\n            # update visited list\n            for item in pair_keys:\n                visited.append(item)\n\n        return self.unet, self.text_encoder\n\n    def prepare_latents(self,\n                        batch_size,\n                        num_channels_latents,\n                        video_length,\n                        height,\n                        width,\n                        dtype,\n                        device,\n                        generator,\n                        latents=None):\n        \"\"\"Prepare latent variables.\"\"\"\n        shape = (batch_size, num_channels_latents, video_length,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        if isinstance(generator, list) and len(generator) != batch_size:\n            raise ValueError(\n                f'You have passed a list of generators of length '\n                f'{len(generator)}, but requested an effective batch'\n                f' size of {batch_size}. Make sure the batch size matches the'\n                f' length of the generators.')\n        if latents is None:\n            rand_device = 'cpu' if device.type == 'mps' else device\n\n            if isinstance(generator, list):\n                shape = shape\n                # shape = (1,) + shape[1:]\n                latents = [\n                    torch.randn(\n                        shape,\n                        generator=generator[i],\n                        device=rand_device,\n                        dtype=dtype) for i in range(batch_size)\n                ]\n                latents = torch.cat(latents, dim=0).to(device)\n            else:\n                latents = torch.randn(\n                    shape,\n                    generator=generator,\n                    device=rand_device,\n                    dtype=dtype).to(device)\n        else:\n            if latents.shape != shape:\n                raise ValueError(f'Unexpected latents shape, got '\n                                 f'{latents.shape}, expected {shape}')\n            latents = latents.to(device)\n\n        # scale the initial noise by the standard deviation\n        # required by the scheduler\n        latents = latents * self.scheduler.init_noise_sigma\n        return latents\n\n    def prepare_model(self):\n        \"\"\"Prepare model for training.\n\n        Move model to target dtype and disable gradient for some models.\n        \"\"\"\n        self.vae.requires_grad_(False)\n        print_log('Set VAE untrainable.', 'current')\n        self.vae.to(self.dtype)\n        print_log(f'Move VAE to {self.dtype}.', 'current')\n        # if not self.finetune_text_encoder or self.lora_config:\n        if 1:\n            self.text_encoder.requires_grad_(False)\n            print_log('Set Text Encoder untrainable.', 'current')\n            self.text_encoder.to(self.dtype)\n            print_log(f'Move Text Encoder to {self.dtype}.', 'current')\n        # if self.lora_config:\n        if 1:\n            self.unet.requires_grad_(False)\n            print_log('Set Unet untrainable.', 'current')\n\n    def set_lora(self):\n        \"\"\"Set LORA for model.\"\"\"\n        if self.lora_config:\n            set_lora(self.unet, self.lora_config)\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        data_samples = data['data_samples']\n        if self.val_prompts is None:\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples.split() * len(prompt)\n            data_samples = DataSample.stack(data_samples.split() * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        if self.val_prompts is None:\n            data = self.data_preprocessor(data)\n            data_samples = data['data_samples']\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples = DataSample.stack(data['data_samples'] * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              video_length: Optional[int] = 16,\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_videos_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[Union[torch.Generator,\n                                        List[torch.Generator]]] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              return_type: Optional[str] = 'tensor',\n              show_progress: bool = True,\n              seed: Optional[int] = 1007):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (str or List[str]): The prompt or prompts to guide\n                the video generation.\n            video_length (int, Option): The number of frames of the\n                generated video. Defaults to 16.\n            height (int, Optional): The height in pixels of the generated\n                image. If not passed, the height will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            width (int, Optional): The width in pixels of the generated image.\n                If not passed, the width will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            num_inference_steps (int): The number of denoising steps.\n                More denoising steps usually lead to a higher quality video at\n                the expense of slower inference. Defaults to 50.\n            guidance_scale (float): Guidance scale as defined in Classifier-\n                Free Diffusion Guidance (https://arxiv.org/abs/2207.12598).\n                Defaults to 7.5\n            negative_prompt (str or List[str], optional): The prompt or\n                prompts not to guide the video generation. Ignored when not\n                using guidance (i.e., ignored if `guidance_scale` is less\n                than 1). Defaults to None.\n            num_videos_per_prompt (int): The number of videos to generate\n                per prompt. Defaults to 1.\n            eta (float): Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                DDIMScheduler, will be ignored for others. Defaults to 0.0.\n            generator (torch.Generator, optional): A torch generator to make\n                generation deterministic. Defaults to None.\n            latents (torch.FloatTensor, optional): Pre-generated noisy latents,\n                sampled from a Gaussian distribution, to be used as inputs for\n                video generation. Can be used to tweak the same generation with\n                different prompts. If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n                Defaults to None.\n            return_type (str): The return type of the inference results.\n                Supported types are 'video', 'numpy', 'tensor'. If 'video'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n        #TODO\n        Returns:\n            dict: A dict containing the generated video\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n        if seed != -1:\n            torch.manual_seed(seed)\n        print_log(f'current seed: {torch.initial_seed()}')\n        print_log(f'sampling {prompt} ...')\n\n        # 1. Check inputs. Raise error if not correct\n\n        self.check_inputs(prompt, height,\n                          width)  # NOTE: aligned with origin repo\n\n        # 2. Define call parameters\n        batch_size = 1\n        if latents is not None:\n            batch_size = latents.shape[0]\n        if isinstance(prompt, list):\n            batch_size = len(prompt)\n        device = self.device\n\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n        video_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n\n        # 3. Encode input prompt\n\n        prompt = prompt if isinstance(prompt, list) else [prompt] * batch_size\n        if negative_prompt is not None:\n            negative_prompt = negative_prompt if isinstance(\n                negative_prompt, list) else [negative_prompt] * batch_size\n        text_embeddings = self._encode_prompt(\n            prompt, device, num_videos_per_prompt, do_classifier_free_guidance,\n            negative_prompt)  # NOTE aligned with origin repo\n\n        # 4. Prepare timesteps\n        # self.scheduler.set_timesteps(num_inference_steps, device=device)\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare latent variables\n        num_channels_latents = self.unet.config.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_videos_per_prompt,\n            num_channels_latents,\n            video_length,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            latents,\n        )  # NOTE aligned with origin repo\n        latents_dtype = latents.dtype\n\n        # 6. Prepare extra step kwargs.\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            # predict the noise residual\n            noise_pred = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=text_embeddings,\n            )['sample'].to(dtype=latents_dtype)\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.test_scheduler.step(\n                    noise_pred, t, latents,\n                    **extra_step_kwargs)['prev_sample']  # FIXME: not aligned\n                # FIXME: revise config thresholding=False\n                # scheduler pred_original_sample not aligned\n                # fixed clip_sample=False\n        # 8. Post-processing\n        video = self.decode_latents(latents.to(video_dtype))\n\n        if return_type == 'tensor':\n            video = torch.from_numpy(video)\n\n        return {'samples': video}\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[list] = None,\n                mode: str = 'tensor') -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/animatediff_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport re\nfrom typing import Optional\n\nimport imageio\nimport numpy as np\nimport torch\nimport torchvision\nfrom diffusers.pipelines.paint_by_example import PaintByExampleImageEncoder\nfrom diffusers.pipelines.stable_diffusion import StableUnCLIPImageNormalizer\nfrom diffusers.schedulers import DDPMScheduler\nfrom einops import rearrange\nfrom transformers import (CLIPImageProcessor, CLIPTextModel, CLIPVisionConfig,\n                          CLIPVisionModelWithProjection)\n\n\ndef shave_segments(path, n_shave_prefix_segments=1):\n    \"\"\"Removes segments.\n\n    Positive values shave the first segments, negative shave the last segments.\n    \"\"\"\n    if n_shave_prefix_segments >= 0:\n        return '.'.join(path.split('.')[n_shave_prefix_segments:])\n    else:\n        return '.'.join(path.split('.')[:n_shave_prefix_segments])\n\n\ndef renew_resnet_paths(old_list, n_shave_prefix_segments=0):\n    \"\"\"Updates paths inside resnets to the new naming scheme (local\n    renaming)\"\"\"\n    mapping = []\n    for old_item in old_list:\n        new_item = old_item.replace('in_layers.0', 'norm1')\n        new_item = new_item.replace('in_layers.2', 'conv1')\n\n        new_item = new_item.replace('out_layers.0', 'norm2')\n        new_item = new_item.replace('out_layers.3', 'conv2')\n\n        new_item = new_item.replace('emb_layers.1', 'time_emb_proj')\n        new_item = new_item.replace('skip_connection', 'conv_shortcut')\n\n        new_item = shave_segments(\n            new_item, n_shave_prefix_segments=n_shave_prefix_segments)\n\n        mapping.append({'old': old_item, 'new': new_item})\n\n    return mapping\n\n\ndef renew_vae_resnet_paths(old_list, n_shave_prefix_segments=0):\n    \"\"\"Updates paths inside resnets to the new naming scheme (local\n    renaming)\"\"\"\n    mapping = []\n    for old_item in old_list:\n        new_item = old_item\n\n        new_item = new_item.replace('nin_shortcut', 'conv_shortcut')\n        new_item = shave_segments(\n            new_item, n_shave_prefix_segments=n_shave_prefix_segments)\n\n        mapping.append({'old': old_item, 'new': new_item})\n\n    return mapping\n\n\ndef renew_attention_paths(old_list, n_shave_prefix_segments=0):\n    \"\"\"Updates paths inside attentions to the new naming scheme (local\n    renaming)\"\"\"\n    mapping = []\n    for old_item in old_list:\n        new_item = old_item\n\n        mapping.append({'old': old_item, 'new': new_item})\n\n    return mapping\n\n\ndef renew_vae_attention_paths(old_list, n_shave_prefix_segments=0):\n    \"\"\"Updates paths inside attentions to the new naming scheme (local\n    renaming)\"\"\"\n    mapping = []\n    for old_item in old_list:\n        new_item = old_item\n\n        new_item = new_item.replace('norm.weight', 'group_norm.weight')\n        new_item = new_item.replace('norm.bias', 'group_norm.bias')\n\n        new_item = new_item.replace('q.weight', 'query.weight')\n        new_item = new_item.replace('q.bias', 'query.bias')\n\n        new_item = new_item.replace('k.weight', 'key.weight')\n        new_item = new_item.replace('k.bias', 'key.bias')\n\n        new_item = new_item.replace('v.weight', 'value.weight')\n        new_item = new_item.replace('v.bias', 'value.bias')\n\n        new_item = new_item.replace('proj_out.weight', 'proj_attn.weight')\n        new_item = new_item.replace('proj_out.bias', 'proj_attn.bias')\n\n        new_item = shave_segments(\n            new_item, n_shave_prefix_segments=n_shave_prefix_segments)\n\n        mapping.append({'old': old_item, 'new': new_item})\n\n    return mapping\n\n\ndef assign_to_checkpoint(paths,\n                         checkpoint,\n                         old_checkpoint,\n                         attention_paths_to_split=None,\n                         additional_replacements=None,\n                         config=None):\n    \"\"\"This does the final conversion step: take locally converted weights and\n    apply a global renaming to them. It splits attention layers, and takes into\n    account additional replacements that may arise.\n\n    Assigns the weights to the new checkpoint.\n    \"\"\"\n    assert isinstance(\n        paths, list\n    ), \"Paths should be a list of dicts containing 'old' and 'new' keys.\"\n\n    # Splits the attention layers into three variables.\n    if attention_paths_to_split is not None:\n        for path, path_map in attention_paths_to_split.items():\n            old_tensor = old_checkpoint[path]\n            channels = old_tensor.shape[0] // 3\n\n            target_shape = (-1,\n                            channels) if len(old_tensor.shape) == 3 else (-1)\n\n            num_heads = old_tensor.shape[0] // config['num_head_channels'] // 3\n\n            old_tensor = old_tensor.reshape((num_heads, 3 * channels //\n                                             num_heads) + old_tensor.shape[1:])\n            query, key, value = old_tensor.split(channels // num_heads, dim=1)\n\n            checkpoint[path_map['query']] = query.reshape(target_shape)\n            checkpoint[path_map['key']] = key.reshape(target_shape)\n            checkpoint[path_map['value']] = value.reshape(target_shape)\n\n    for path in paths:\n        new_path = path['new']\n\n        # These have already been assigned\n        if attention_paths_to_split is not None and (\n                new_path in attention_paths_to_split):\n            continue\n        # Global renaming happens here\n        new_path = new_path.replace('middle_block.0', 'mid_block.resnets.0')\n        new_path = new_path.replace('middle_block.1', 'mid_block.attentions.0')\n        new_path = new_path.replace('middle_block.2', 'mid_block.resnets.1')\n\n        if additional_replacements is not None:\n            for replacement in additional_replacements:\n                new_path = new_path.replace(replacement['old'],\n                                            replacement['new'])\n\n        # proj_attn.weight has to be converted from conv 1D to linear\n        if 'proj_attn.weight' in new_path:\n            checkpoint[new_path] = old_checkpoint[path['old']][:, :, 0]\n        else:\n            checkpoint[new_path] = old_checkpoint[path['old']]\n\n\ndef conv_attn_to_linear(checkpoint):\n    keys = list(checkpoint.keys())\n    attn_keys = ['query.weight', 'key.weight', 'value.weight']\n    for key in keys:\n        if '.'.join(key.split('.')[-2:]) in attn_keys:\n            if checkpoint[key].ndim > 2:\n                checkpoint[key] = checkpoint[key][:, :, 0, 0]\n        elif 'proj_attn.weight' in key:\n            if checkpoint[key].ndim > 2:\n                checkpoint[key] = checkpoint[key][:, :, 0]\n\n\ndef create_unet_diffusers_config(original_config,\n                                 image_size: int,\n                                 controlnet=False):\n    \"\"\"Creates a config for the diffusers based on the config of the LDM\n    model.\"\"\"\n    if controlnet:\n        unet_params = original_config.model.params.control_stage_config.params\n    else:\n        unet_params = original_config.model.params.unet_config.params\n\n    vae_params = \\\n        original_config.model.params.first_stage_config.params.ddconfig\n\n    block_out_channels = [\n        unet_params.model_channels * mult for mult in unet_params.channel_mult\n    ]\n\n    down_block_types = []\n    resolution = 1\n    for i in range(len(block_out_channels)):\n        block_type = 'CrossAttnDownBlock2D' \\\n            if resolution in unet_params.attention_resolutions \\\n            else 'DownBlock2D'\n        down_block_types.append(block_type)\n        if i != len(block_out_channels) - 1:\n            resolution *= 2\n\n    up_block_types = []\n    for i in range(len(block_out_channels)):\n        block_type = 'CrossAttnUpBlock2D' \\\n            if resolution in unet_params.attention_resolutions \\\n            else 'UpBlock2D'\n        up_block_types.append(block_type)\n        resolution //= 2\n\n    vae_scale_factor = 2**(len(vae_params.ch_mult) - 1)\n\n    head_dim = unet_params.num_heads if 'num_heads' in unet_params else None\n    use_linear_projection = (\n        unet_params.use_linear_in_transformer\n        if 'use_linear_in_transformer' in unet_params else False)\n    if use_linear_projection:\n        # stable diffusion 2-base-512 and 2-768\n        if head_dim is None:\n            head_dim = [5, 10, 20, 20]\n\n    class_embed_type = None\n    projection_class_embeddings_input_dim = None\n\n    if 'num_classes' in unet_params:\n        if unet_params.num_classes == 'sequential':\n            class_embed_type = 'projection'\n            assert 'adm_in_channels' in unet_params\n            projection_class_embeddings_input_dim = unet_params.adm_in_channels\n        else:\n            raise NotImplementedError(\n                f'Unknown conditional unet num_classes config: '\n                f'{unet_params.num_classes}')\n\n    config = {\n        'sample_size':\n        image_size // vae_scale_factor,\n        'in_channels':\n        unet_params.in_channels,\n        'down_block_types':\n        tuple(down_block_types),\n        'block_out_channels':\n        tuple(block_out_channels),\n        'layers_per_block':\n        unet_params.num_res_blocks,\n        'cross_attention_dim':\n        unet_params.context_dim,\n        'attention_head_dim':\n        head_dim,\n        'use_linear_projection':\n        use_linear_projection,\n        'class_embed_type':\n        class_embed_type,\n        'projection_class_embeddings_input_dim':\n        projection_class_embeddings_input_dim,\n    }\n\n    if not controlnet:\n        config['out_channels'] = unet_params.out_channels\n        config['up_block_types'] = tuple(up_block_types)\n\n    return config\n\n\ndef create_vae_diffusers_config(original_config, image_size: int):\n    \"\"\"Creates a config for the diffusers based on the config of the LDM\n    model.\"\"\"\n    vae_params = \\\n        original_config.model.params.first_stage_config.params.ddconfig\n    _ = original_config.model.params.first_stage_config.params.embed_dim\n\n    block_out_channels = [vae_params.ch * mult for mult in vae_params.ch_mult]\n    down_block_types = ['DownEncoderBlock2D'] * len(block_out_channels)\n    up_block_types = ['UpDecoderBlock2D'] * len(block_out_channels)\n\n    config = {\n        'sample_size': image_size,\n        'in_channels': vae_params.in_channels,\n        'out_channels': vae_params.out_ch,\n        'down_block_types': tuple(down_block_types),\n        'up_block_types': tuple(up_block_types),\n        'block_out_channels': tuple(block_out_channels),\n        'latent_channels': vae_params.z_channels,\n        'layers_per_block': vae_params.num_res_blocks,\n    }\n    return config\n\n\ndef convert_ldm_unet_checkpoint(checkpoint,\n                                config,\n                                path=None,\n                                extract_ema=False,\n                                controlnet=False):\n    \"\"\"Takes a state dict and a config, and returns a converted checkpoint.\"\"\"\n\n    # extract state_dict for UNet\n    unet_state_dict = {}\n    keys = list(checkpoint.keys())\n\n    if controlnet:\n        unet_key = 'control_model.'\n    else:\n        unet_key = 'model.diffusion_model.'\n\n    # at least a 100 parameters have to start with `model_ema`\n    # in order for the checkpoint to be EMA\n    if sum(k.startswith('model_ema') for k in keys) > 100 and extract_ema:\n        print(f'Checkpoint {path} has both EMA and non-EMA weights.')\n        print('In this conversion only the EMA weights are extracted. '\n              'If you want to instead extract the non-EMA'\n              ' weights (useful to continue fine-tuning), please make sure to '\n              'remove the `--extract_ema` flag.')\n        for key in keys:\n            if key.startswith('model.diffusion_model'):\n                flat_ema_key = 'model_ema.' + ''.join(key.split('.')[1:])\n                unet_state_dict[key.replace(unet_key,\n                                            '')] = checkpoint.pop(flat_ema_key)\n    else:\n        if sum(k.startswith('model_ema') for k in keys) > 100:\n            print('In this conversion only the non-EMA weights '\n                  'are extracted. If you want to instead extract the EMA'\n                  ' weights (usually better for inference), please'\n                  ' make sure to add the `--extract_ema` flag.')\n\n        for key in keys:\n            if key.startswith(unet_key):\n                unet_state_dict[key.replace(unet_key,\n                                            '')] = checkpoint.pop(key)\n\n    new_checkpoint = {}\n\n    new_checkpoint['time_embedding.linear_1.weight'] = unet_state_dict[\n        'time_embed.0.weight']\n    new_checkpoint['time_embedding.linear_1.bias'] = unet_state_dict[\n        'time_embed.0.bias']\n    new_checkpoint['time_embedding.linear_2.weight'] = unet_state_dict[\n        'time_embed.2.weight']\n    new_checkpoint['time_embedding.linear_2.bias'] = unet_state_dict[\n        'time_embed.2.bias']\n\n    if config['class_embed_type'] is None:\n        # No parameters to port\n        ...\n    elif config['class_embed_type'] == 'timestep' or config[\n            'class_embed_type'] == 'projection':\n        new_checkpoint['class_embedding.linear_1.weight'] = unet_state_dict[\n            'label_emb.0.0.weight']\n        new_checkpoint['class_embedding.linear_1.bias'] = unet_state_dict[\n            'label_emb.0.0.bias']\n        new_checkpoint['class_embedding.linear_2.weight'] = unet_state_dict[\n            'label_emb.0.2.weight']\n        new_checkpoint['class_embedding.linear_2.bias'] = unet_state_dict[\n            'label_emb.0.2.bias']\n    else:\n        raise NotImplementedError(\n            f\"Not implemented `class_embed_type`: {config['class_embed_type']}\"\n        )\n\n    new_checkpoint['conv_in.weight'] = unet_state_dict[\n        'input_blocks.0.0.weight']\n    new_checkpoint['conv_in.bias'] = unet_state_dict['input_blocks.0.0.bias']\n\n    if not controlnet:\n        new_checkpoint['conv_norm_out.weight'] = unet_state_dict[\n            'out.0.weight']\n        new_checkpoint['conv_norm_out.bias'] = unet_state_dict['out.0.bias']\n        new_checkpoint['conv_out.weight'] = unet_state_dict['out.2.weight']\n        new_checkpoint['conv_out.bias'] = unet_state_dict['out.2.bias']\n\n    # Retrieves the keys for the input blocks only\n    num_input_blocks = len({\n        '.'.join(layer.split('.')[:2])\n        for layer in unet_state_dict if 'input_blocks' in layer\n    })\n    input_blocks = {\n        layer_id:\n        [key for key in unet_state_dict if f'input_blocks.{layer_id}' in key]\n        for layer_id in range(num_input_blocks)\n    }\n\n    # Retrieves the keys for the middle blocks only\n    num_middle_blocks = len({\n        '.'.join(layer.split('.')[:2])\n        for layer in unet_state_dict if 'middle_block' in layer\n    })\n    middle_blocks = {\n        layer_id:\n        [key for key in unet_state_dict if f'middle_block.{layer_id}' in key]\n        for layer_id in range(num_middle_blocks)\n    }\n\n    # Retrieves the keys for the output blocks only\n    num_output_blocks = len({\n        '.'.join(layer.split('.')[:2])\n        for layer in unet_state_dict if 'output_blocks' in layer\n    })\n    output_blocks = {\n        layer_id:\n        [key for key in unet_state_dict if f'output_blocks.{layer_id}' in key]\n        for layer_id in range(num_output_blocks)\n    }\n\n    for i in range(1, num_input_blocks):\n        block_id = (i - 1) // (config['layers_per_block'] + 1)\n        layer_in_block_id = (i - 1) % (config['layers_per_block'] + 1)\n\n        resnets = [\n            key for key in input_blocks[i] if f'input_blocks.{i}.0' in key\n            and f'input_blocks.{i}.0.op' not in key\n        ]\n        attentions = [\n            key for key in input_blocks[i] if f'input_blocks.{i}.1' in key\n        ]\n\n        if f'input_blocks.{i}.0.op.weight' in unet_state_dict:\n            new_checkpoint[\n                f'down_blocks.{block_id}.downsamplers.0.conv.weight'] = \\\n                unet_state_dict.pop(f'input_blocks.{i}.0.op.weight')\n            new_checkpoint[\n                f'down_blocks.{block_id}.downsamplers.0.conv.bias'] = \\\n                unet_state_dict.pop(f'input_blocks.{i}.0.op.bias')\n\n        paths = renew_resnet_paths(resnets)\n        meta_path = {\n            'old': f'input_blocks.{i}.0',\n            'new': f'down_blocks.{block_id}.resnets.{layer_in_block_id}'\n        }\n        assign_to_checkpoint(\n            paths,\n            new_checkpoint,\n            unet_state_dict,\n            additional_replacements=[meta_path],\n            config=config)\n\n        if len(attentions):\n            paths = renew_attention_paths(attentions)\n            meta_path = {\n                'old': f'input_blocks.{i}.1',\n                'new': f'down_blocks.{block_id}.attentions.{layer_in_block_id}'\n            }\n            assign_to_checkpoint(\n                paths,\n                new_checkpoint,\n                unet_state_dict,\n                additional_replacements=[meta_path],\n                config=config)\n\n    resnet_0 = middle_blocks[0]\n    attentions = middle_blocks[1]\n    resnet_1 = middle_blocks[2]\n\n    resnet_0_paths = renew_resnet_paths(resnet_0)\n    assign_to_checkpoint(\n        resnet_0_paths, new_checkpoint, unet_state_dict, config=config)\n\n    resnet_1_paths = renew_resnet_paths(resnet_1)\n    assign_to_checkpoint(\n        resnet_1_paths, new_checkpoint, unet_state_dict, config=config)\n\n    attentions_paths = renew_attention_paths(attentions)\n    meta_path = {'old': 'middle_block.1', 'new': 'mid_block.attentions.0'}\n    assign_to_checkpoint(\n        attentions_paths,\n        new_checkpoint,\n        unet_state_dict,\n        additional_replacements=[meta_path],\n        config=config)\n\n    for i in range(num_output_blocks):\n        block_id = i // (config['layers_per_block'] + 1)\n        layer_in_block_id = i % (config['layers_per_block'] + 1)\n        output_block_layers = [\n            shave_segments(name, 2) for name in output_blocks[i]\n        ]\n        output_block_list = {}\n\n        for layer in output_block_layers:\n            layer_id, layer_name = layer.split('.')[0], shave_segments(\n                layer, 1)\n            if layer_id in output_block_list:\n                output_block_list[layer_id].append(layer_name)\n            else:\n                output_block_list[layer_id] = [layer_name]\n\n        if len(output_block_list) > 1:\n            resnets = [\n                key for key in output_blocks[i]\n                if f'output_blocks.{i}.0' in key\n            ]\n            attentions = [\n                key for key in output_blocks[i]\n                if f'output_blocks.{i}.1' in key\n            ]\n\n            resnet_0_paths = renew_resnet_paths(resnets)\n            paths = renew_resnet_paths(resnets)\n\n            meta_path = {\n                'old': f'output_blocks.{i}.0',\n                'new': f'up_blocks.{block_id}.resnets.{layer_in_block_id}'\n            }\n            assign_to_checkpoint(\n                paths,\n                new_checkpoint,\n                unet_state_dict,\n                additional_replacements=[meta_path],\n                config=config)\n\n            output_block_list = {\n                k: sorted(v)\n                for k, v in output_block_list.items()\n            }\n            if ['conv.bias', 'conv.weight'] in output_block_list.values():\n                index = list(output_block_list.values()).index(\n                    ['conv.bias', 'conv.weight'])\n                new_checkpoint[\n                    f'up_blocks.{block_id}.upsamplers.0.conv.weight'] = \\\n                    unet_state_dict[\n                        f'output_blocks.{i}.{index}.conv.weight']\n                new_checkpoint[\n                    f'up_blocks.{block_id}.upsamplers.0.conv.bias'] = \\\n                    unet_state_dict[\n                        f'output_blocks.{i}.{index}.conv.bias']\n\n                # Clear attentions as they have been attributed above.\n                if len(attentions) == 2:\n                    attentions = []\n\n            if len(attentions):\n                paths = renew_attention_paths(attentions)\n                meta_path = {\n                    'old': f'output_blocks.{i}.1',\n                    'new':\n                    f'up_blocks.{block_id}.attentions.{layer_in_block_id}',\n                }\n                assign_to_checkpoint(\n                    paths,\n                    new_checkpoint,\n                    unet_state_dict,\n                    additional_replacements=[meta_path],\n                    config=config)\n        else:\n            resnet_0_paths = renew_resnet_paths(\n                output_block_layers, n_shave_prefix_segments=1)\n            for path in resnet_0_paths:\n                old_path = '.'.join(['output_blocks', str(i), path['old']])\n                new_path = '.'.join([\n                    'up_blocks',\n                    str(block_id), 'resnets',\n                    str(layer_in_block_id), path['new']\n                ])\n\n                new_checkpoint[new_path] = unet_state_dict[old_path]\n\n    if controlnet:\n        # conditioning embedding\n\n        orig_index = 0\n\n        new_checkpoint[\n            'controlnet_cond_embedding.conv_in.weight'] = unet_state_dict.pop(\n                f'input_hint_block.{orig_index}.weight')\n        new_checkpoint[\n            'controlnet_cond_embedding.conv_in.bias'] = unet_state_dict.pop(\n                f'input_hint_block.{orig_index}.bias')\n\n        orig_index += 2\n\n        diffusers_index = 0\n\n        while diffusers_index < 6:\n            new_checkpoint[f'controlnet_cond_embedding.blocks'\n                           f'.{diffusers_index}.weight'] = (\n                               unet_state_dict.pop(\n                                   f'input_hint_block.{orig_index}.weight'))\n            new_checkpoint[\n                f'controlnet_cond_embedding.blocks.{diffusers_index}.bias'] = (\n                    unet_state_dict.pop(f'input_hint_block.{orig_index}.bias'))\n            diffusers_index += 1\n            orig_index += 2\n\n        new_checkpoint[\n            'controlnet_cond_embedding.conv_out.weight'] = unet_state_dict.pop(\n                f'input_hint_block.{orig_index}.weight')\n        new_checkpoint[\n            'controlnet_cond_embedding.conv_out.bias'] = unet_state_dict.pop(\n                f'input_hint_block.{orig_index}.bias')\n\n        # down blocks\n        for i in range(num_input_blocks):\n            new_checkpoint[\n                f'controlnet_down_blocks.{i}.weight'] = unet_state_dict.pop(\n                    f'zero_convs.{i}.0.weight')\n            new_checkpoint[\n                f'controlnet_down_blocks.{i}.bias'] = unet_state_dict.pop(\n                    f'zero_convs.{i}.0.bias')\n\n        # mid block\n        new_checkpoint['controlnet_mid_block.weight'] = unet_state_dict.pop(\n            'middle_block_out.0.weight')\n        new_checkpoint['controlnet_mid_block.bias'] = unet_state_dict.pop(\n            'middle_block_out.0.bias')\n\n    return new_checkpoint\n\n\ndef convert_ldm_vae_checkpoint(checkpoint, config):\n    # extract state dict for VAE\n    vae_state_dict = {}\n    vae_key = 'first_stage_model.'\n    keys = list(checkpoint.keys())\n    for key in keys:\n        if key.startswith(vae_key):\n            vae_state_dict[key.replace(vae_key, '')] = checkpoint.get(key)\n\n    new_checkpoint = {}\n\n    new_checkpoint['encoder.conv_in.weight'] = vae_state_dict[\n        'encoder.conv_in.weight']\n    new_checkpoint['encoder.conv_in.bias'] = vae_state_dict[\n        'encoder.conv_in.bias']\n    new_checkpoint['encoder.conv_out.weight'] = vae_state_dict[\n        'encoder.conv_out.weight']\n    new_checkpoint['encoder.conv_out.bias'] = vae_state_dict[\n        'encoder.conv_out.bias']\n    new_checkpoint['encoder.conv_norm_out.weight'] = vae_state_dict[\n        'encoder.norm_out.weight']\n    new_checkpoint['encoder.conv_norm_out.bias'] = vae_state_dict[\n        'encoder.norm_out.bias']\n\n    new_checkpoint['decoder.conv_in.weight'] = vae_state_dict[\n        'decoder.conv_in.weight']\n    new_checkpoint['decoder.conv_in.bias'] = vae_state_dict[\n        'decoder.conv_in.bias']\n    new_checkpoint['decoder.conv_out.weight'] = vae_state_dict[\n        'decoder.conv_out.weight']\n    new_checkpoint['decoder.conv_out.bias'] = vae_state_dict[\n        'decoder.conv_out.bias']\n    new_checkpoint['decoder.conv_norm_out.weight'] = vae_state_dict[\n        'decoder.norm_out.weight']\n    new_checkpoint['decoder.conv_norm_out.bias'] = vae_state_dict[\n        'decoder.norm_out.bias']\n\n    new_checkpoint['quant_conv.weight'] = vae_state_dict['quant_conv.weight']\n    new_checkpoint['quant_conv.bias'] = vae_state_dict['quant_conv.bias']\n    new_checkpoint['post_quant_conv.weight'] = vae_state_dict[\n        'post_quant_conv.weight']\n    new_checkpoint['post_quant_conv.bias'] = vae_state_dict[\n        'post_quant_conv.bias']\n\n    # Retrieves the keys for the encoder down blocks only\n    num_down_blocks = len({\n        '.'.join(layer.split('.')[:3])\n        for layer in vae_state_dict if 'encoder.down' in layer\n    })\n    down_blocks = {\n        layer_id: [key for key in vae_state_dict if f'down.{layer_id}' in key]\n        for layer_id in range(num_down_blocks)\n    }\n\n    # Retrieves the keys for the decoder up blocks only\n    num_up_blocks = len({\n        '.'.join(layer.split('.')[:3])\n        for layer in vae_state_dict if 'decoder.up' in layer\n    })\n    up_blocks = {\n        layer_id: [key for key in vae_state_dict if f'up.{layer_id}' in key]\n        for layer_id in range(num_up_blocks)\n    }\n\n    for i in range(num_down_blocks):\n        resnets = [\n            key for key in down_blocks[i]\n            if f'down.{i}' in key and f'down.{i}.downsample' not in key\n        ]\n\n        if f'encoder.down.{i}.downsample.conv.weight' in vae_state_dict:\n            new_checkpoint[\n                f'encoder.down_blocks.{i}.downsamplers.0.conv.weight'] = \\\n                vae_state_dict.pop(f'encoder.down.{i}.downsample.conv.weight')\n            new_checkpoint[\n                f'encoder.down_blocks.{i}.downsamplers.0.conv.bias'] = \\\n                vae_state_dict.pop(f'encoder.down.{i}.downsample.conv.bias')\n\n        paths = renew_vae_resnet_paths(resnets)\n        meta_path = {\n            'old': f'down.{i}.block',\n            'new': f'down_blocks.{i}.resnets'\n        }\n        assign_to_checkpoint(\n            paths,\n            new_checkpoint,\n            vae_state_dict,\n            additional_replacements=[meta_path],\n            config=config)\n\n    mid_resnets = [key for key in vae_state_dict if 'encoder.mid.block' in key]\n    num_mid_res_blocks = 2\n    for i in range(1, num_mid_res_blocks + 1):\n        resnets = [\n            key for key in mid_resnets if f'encoder.mid.block_{i}' in key\n        ]\n\n        paths = renew_vae_resnet_paths(resnets)\n        meta_path = {\n            'old': f'mid.block_{i}',\n            'new': f'mid_block.resnets.{i - 1}'\n        }\n        assign_to_checkpoint(\n            paths,\n            new_checkpoint,\n            vae_state_dict,\n            additional_replacements=[meta_path],\n            config=config)\n\n    mid_attentions = [\n        key for key in vae_state_dict if 'encoder.mid.attn' in key\n    ]\n    paths = renew_vae_attention_paths(mid_attentions)\n    meta_path = {'old': 'mid.attn_1', 'new': 'mid_block.attentions.0'}\n    assign_to_checkpoint(\n        paths,\n        new_checkpoint,\n        vae_state_dict,\n        additional_replacements=[meta_path],\n        config=config)\n    conv_attn_to_linear(new_checkpoint)\n\n    for i in range(num_up_blocks):\n        block_id = num_up_blocks - 1 - i\n        resnets = [\n            key for key in up_blocks[block_id]\n            if f'up.{block_id}' in key and f'up.{block_id}.upsample' not in key\n        ]\n\n        if f'decoder.up.{block_id}.upsample.conv.weight' in vae_state_dict:\n            new_checkpoint[\n                f'decoder.up_blocks.{i}.upsamplers.0.conv.weight'] = \\\n                vae_state_dict[f'decoder.up.{block_id}.upsample.conv.weight']\n            new_checkpoint[\n                f'decoder.up_blocks.{i}.upsamplers.0.conv.bias'] = \\\n                vae_state_dict[f'decoder.up.{block_id}.upsample.conv.bias']\n\n        paths = renew_vae_resnet_paths(resnets)\n        meta_path = {\n            'old': f'up.{block_id}.block',\n            'new': f'up_blocks.{i}.resnets'\n        }\n        assign_to_checkpoint(\n            paths,\n            new_checkpoint,\n            vae_state_dict,\n            additional_replacements=[meta_path],\n            config=config)\n\n    mid_resnets = [key for key in vae_state_dict if 'decoder.mid.block' in key]\n    num_mid_res_blocks = 2\n    for i in range(1, num_mid_res_blocks + 1):\n        resnets = [\n            key for key in mid_resnets if f'decoder.mid.block_{i}' in key\n        ]\n\n        paths = renew_vae_resnet_paths(resnets)\n        meta_path = {\n            'old': f'mid.block_{i}',\n            'new': f'mid_block.resnets.{i - 1}'\n        }\n        assign_to_checkpoint(\n            paths,\n            new_checkpoint,\n            vae_state_dict,\n            additional_replacements=[meta_path],\n            config=config)\n\n    mid_attentions = [\n        key for key in vae_state_dict if 'decoder.mid.attn' in key\n    ]\n    paths = renew_vae_attention_paths(mid_attentions)\n    meta_path = {'old': 'mid.attn_1', 'new': 'mid_block.attentions.0'}\n    assign_to_checkpoint(\n        paths,\n        new_checkpoint,\n        vae_state_dict,\n        additional_replacements=[meta_path],\n        config=config)\n    conv_attn_to_linear(new_checkpoint)\n\n    new_checkpoint = {\n        'model.' + key: value\n        for key, value in new_checkpoint.items()\n    }\n    new_checkpoint = {\n        key.replace('query', 'to_q'): value\n        for key, value in new_checkpoint.items()\n    }\n    new_checkpoint = {\n        key.replace('key', 'to_k'): value\n        for key, value in new_checkpoint.items()\n    }\n    new_checkpoint = {\n        key.replace('value', 'to_v'): value\n        for key, value in new_checkpoint.items()\n    }\n    new_checkpoint = {\n        key.replace('proj_attn', 'to_out.0'): value\n        for key, value in new_checkpoint.items()\n    }\n    return new_checkpoint\n\n\ndef convert_ldm_clip_checkpoint(checkpoint):\n    text_model = CLIPTextModel.from_pretrained('openai/clip-vit-large-patch14')\n    keys = list(checkpoint.keys())\n\n    text_model_dict = {}\n\n    for key in keys:\n        if key.startswith('cond_stage_model.transformer'):\n            text_model_dict[\n                key[len('cond_stage_model.transformer.'):]] = checkpoint[key]\n    # Certain text transformers no longer\n    # expect position_ids after transformers==4.31\n    position_id_key = 'text_model.embeddings.position_ids'\n    if position_id_key in text_model_dict and \\\n            position_id_key not in text_model.state_dict():\n        del text_model_dict[position_id_key]\n\n    text_model.load_state_dict(text_model_dict)\n\n    return text_model\n\n\ntextenc_conversion_lst = [\n    ('cond_stage_model.model.positional_embedding',\n     'text_model.embeddings.position_embedding.weight'),\n    ('cond_stage_model.model.token_embedding.weight',\n     'text_model.embeddings.token_embedding.weight'),\n    ('cond_stage_model.model.ln_final.weight',\n     'text_model.final_layer_norm.weight'),\n    ('cond_stage_model.model.ln_final.bias',\n     'text_model.final_layer_norm.bias'),\n]\ntextenc_conversion_map = {x[0]: x[1] for x in textenc_conversion_lst}\n\ntextenc_transformer_conversion_lst = [\n    # (stable-diffusion, HF Diffusers)\n    ('resblocks.', 'text_model.encoder.layers.'),\n    ('ln_1', 'layer_norm1'),\n    ('ln_2', 'layer_norm2'),\n    ('.c_fc.', '.fc1.'),\n    ('.c_proj.', '.fc2.'),\n    ('.attn', '.self_attn'),\n    ('ln_final.', 'transformer.text_model.final_layer_norm.'),\n    ('token_embedding.weight',\n     'transformer.text_model.embeddings.token_embedding.weight'),\n    ('positional_embedding',\n     'transformer.text_model.embeddings.position_embedding.weight'),\n]\nprotected = {re.escape(x[0]): x[1] for x in textenc_transformer_conversion_lst}\ntextenc_pattern = re.compile('|'.join(protected.keys()))\n\n\ndef convert_paint_by_example_checkpoint(checkpoint):\n    config = CLIPVisionConfig.from_pretrained('openai/clip-vit-large-patch14')\n    model = PaintByExampleImageEncoder(config)\n\n    keys = list(checkpoint.keys())\n\n    text_model_dict = {}\n\n    for key in keys:\n        if key.startswith('cond_stage_model.transformer'):\n            text_model_dict[\n                key[len('cond_stage_model.transformer.'):]] = checkpoint[key]\n\n    # load clip vision\n    model.model.load_state_dict(text_model_dict)\n\n    # load mapper\n    keys_mapper = {\n        k[len('cond_stage_model.mapper.res'):]: v\n        for k, v in checkpoint.items()\n        if k.startswith('cond_stage_model.mapper')\n    }\n\n    MAPPING = {\n        'attn.c_qkv': ['attn1.to_q', 'attn1.to_k', 'attn1.to_v'],\n        'attn.c_proj': ['attn1.to_out.0'],\n        'ln_1': ['norm1'],\n        'ln_2': ['norm3'],\n        'mlp.c_fc': ['ff.net.0.proj'],\n        'mlp.c_proj': ['ff.net.2'],\n    }\n\n    mapped_weights = {}\n    for key, value in keys_mapper.items():\n        prefix = key[:len('blocks.i')]\n        suffix = key.split(prefix)[-1].split('.')[-1]\n        name = key.split(prefix)[-1].split(suffix)[0][1:-1]\n        mapped_names = MAPPING[name]\n\n        num_splits = len(mapped_names)\n        for i, mapped_name in enumerate(mapped_names):\n            new_name = '.'.join([prefix, mapped_name, suffix])\n            shape = value.shape[0] // num_splits\n            mapped_weights[new_name] = value[i * shape:(i + 1) * shape]\n\n    model.mapper.load_state_dict(mapped_weights)\n\n    # load final layer norm\n    model.final_layer_norm.load_state_dict({\n        'bias':\n        checkpoint['cond_stage_model.final_ln.bias'],\n        'weight':\n        checkpoint['cond_stage_model.final_ln.weight'],\n    })\n\n    # load final proj\n    model.proj_out.load_state_dict({\n        'bias': checkpoint['proj_out.bias'],\n        'weight': checkpoint['proj_out.weight'],\n    })\n\n    # load uncond vector\n    model.uncond_vector.data = torch.nn.Parameter(\n        checkpoint['learnable_vector'])\n    return model\n\n\ndef convert_open_clip_checkpoint(checkpoint):\n    text_model = CLIPTextModel.from_pretrained(\n        'stabilityai/stable-diffusion-2', subfolder='text_encoder')\n\n    keys = list(checkpoint.keys())\n\n    text_model_dict = {}\n\n    if 'cond_stage_model.model.text_projection' in checkpoint:\n        d_model = int(\n            checkpoint['cond_stage_model.model.text_projection'].shape[0])\n    else:\n        d_model = 1024\n\n    text_model_dict[\n        'text_model.embeddings.position_ids'] = \\\n        text_model.text_model.embeddings.get_buffer('position_ids')\n\n    for key in keys:\n        # Diffusers drops the final layer and\n        # only uses the penultimate layer\n        if 'resblocks.23' in key:\n            continue\n        if key in textenc_conversion_map:\n            text_model_dict[textenc_conversion_map[key]] = checkpoint[key]\n        if key.startswith('cond_stage_model.model.transformer.'):\n            new_key = key[len('cond_stage_model.model.transformer.'):]\n            if new_key.endswith('.in_proj_weight'):\n                new_key = new_key[:-len('.in_proj_weight')]\n                new_key = textenc_pattern.sub(\n                    lambda m: protected[re.escape(m.group(0))], new_key)\n                text_model_dict[\n                    new_key + '.q_proj.weight'] = checkpoint[key][:d_model, :]\n                text_model_dict[new_key + '.k_proj.weight'] = checkpoint[key][\n                    d_model:d_model * 2, :]\n                text_model_dict[new_key +\n                                '.v_proj.weight'] = checkpoint[key][d_model *\n                                                                    2:, :]\n            elif new_key.endswith('.in_proj_bias'):\n                new_key = new_key[:-len('.in_proj_bias')]\n                new_key = textenc_pattern.sub(\n                    lambda m: protected[re.escape(m.group(0))], new_key)\n                text_model_dict[new_key +\n                                '.q_proj.bias'] = checkpoint[key][:d_model]\n                text_model_dict[\n                    new_key +\n                    '.k_proj.bias'] = checkpoint[key][d_model:d_model * 2]\n                text_model_dict[new_key +\n                                '.v_proj.bias'] = checkpoint[key][d_model * 2:]\n            else:\n                new_key = textenc_pattern.sub(\n                    lambda m: protected[re.escape(m.group(0))], new_key)\n\n                text_model_dict[new_key] = checkpoint[key]\n\n    text_model.load_state_dict(text_model_dict)\n\n    return text_model\n\n\ndef stable_unclip_image_encoder(original_config):\n    \"\"\"Returns the image processor and clip image encoder for the img2img\n    unclip pipeline.\n\n    We currently know of two types of stable unclip models which separately use\n    the clip and the openclip image encoders.\n    \"\"\"\n\n    image_embedder_config = original_config.model.params.embedder_config\n\n    sd_clip_image_embedder_class = image_embedder_config.target\n    sd_clip_image_embedder_class = sd_clip_image_embedder_class.split('.')[-1]\n\n    if sd_clip_image_embedder_class == 'ClipImageEmbedder':\n        clip_model_name = image_embedder_config.params.model\n\n        if clip_model_name == 'ViT-L/14':\n            feature_extractor = CLIPImageProcessor()\n            image_encoder = CLIPVisionModelWithProjection.from_pretrained(\n                'openai/clip-vit-large-patch14')\n        else:\n            raise NotImplementedError(\n                f'Unknown CLIP checkpoint name in stable '\n                f'diffusion checkpoint {clip_model_name}')\n\n    elif sd_clip_image_embedder_class == 'FrozenOpenCLIPImageEmbedder':\n        feature_extractor = CLIPImageProcessor()\n        image_encoder = CLIPVisionModelWithProjection.from_pretrained(\n            'laion/CLIP-ViT-H-14-laion2B-s32B-b79K')\n    else:\n        raise NotImplementedError(\n            f'Unknown CLIP image embedder class in '\n            f'stable diffusion checkpoint {sd_clip_image_embedder_class}')\n\n    return feature_extractor, image_encoder\n\n\ndef stable_unclip_image_noising_components(\n        original_config,\n        clip_stats_path: Optional[str] = None,\n        device: Optional[str] = None):\n    \"\"\"Returns the noising components for the img2img and txt2img unclip\n    pipelines.\n\n    Converts the stability noise augmentor into\n    1. a `StableUnCLIPImageNormalizer` for holding the CLIP stats\n    2. a `DDPMScheduler` for holding the noise schedule\n\n    If the noise augmentor config specifies a clip stats path,\n    the `clip_stats_path` must be provided.\n    \"\"\"\n    noise_aug_config = original_config.model.params.noise_aug_config\n    noise_aug_class = noise_aug_config.target\n    noise_aug_class = noise_aug_class.split('.')[-1]\n\n    if noise_aug_class == 'CLIPEmbeddingNoiseAugmentation':\n        noise_aug_config = noise_aug_config.params\n        embedding_dim = noise_aug_config.timestep_dim\n        max_noise_level = noise_aug_config.noise_schedule_config.timesteps\n        beta_schedule = noise_aug_config.noise_schedule_config.beta_schedule\n\n        image_normalizer = StableUnCLIPImageNormalizer(\n            embedding_dim=embedding_dim)\n        image_noising_scheduler = DDPMScheduler(\n            num_train_timesteps=max_noise_level, beta_schedule=beta_schedule)\n\n        if 'clip_stats_path' in noise_aug_config:\n            if clip_stats_path is None:\n                raise ValueError(\n                    'This stable unclip config requires a `clip_stats_path`')\n\n            clip_mean, clip_std = torch.load(\n                clip_stats_path, map_location=device)\n            clip_mean = clip_mean[None, :]\n            clip_std = clip_std[None, :]\n\n            clip_stats_state_dict = {\n                'mean': clip_mean,\n                'std': clip_std,\n            }\n\n            image_normalizer.load_state_dict(clip_stats_state_dict)\n    else:\n        raise NotImplementedError(\n            f'Unknown noise augmentor class: {noise_aug_class}')\n\n    return image_normalizer, image_noising_scheduler\n\n\ndef save_videos_grid(videos: torch.Tensor,\n                     path: str,\n                     rescale=False,\n                     n_rows=6,\n                     fps=8):\n    videos = rearrange(videos, 'b c t h w -> t b c h w')\n    outputs = []\n    for x in videos:\n        x = torchvision.utils.make_grid(x, nrow=n_rows)\n        x = x.transpose(0, 1).transpose(1, 2).squeeze(-1)\n        if rescale:\n            x = (x + 1.0) / 2.0  # -1,1 -> 0,1\n        x = (x * 255).numpy().astype(np.uint8)\n        outputs.append(x)\n\n    os.makedirs(os.path.dirname(path), exist_ok=True)\n    # imageio v3 doesn't support fps\n    if imageio.__version__ < '2.28.0':\n        imageio.mimsave(path, outputs, fps=fps)\n    else:\n        imageio.mimsave(path, outputs, duration=1000 * 1 / fps, loop=10)\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/attention_3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Adapted from https://github.com/huggingface/diffusers/blob/main/\n# src/diffusers/models/attention.py\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\nfrom diffusers.configuration_utils import ConfigMixin, register_to_config\nfrom diffusers.models.attention import AdaLayerNorm, FeedForward\n# from diffusers.models.cross_attention import CrossAttention\n# from diffusers.models.attention_processor import Attention as CrossAttention\nfrom diffusers.models.modeling_utils import ModelMixin\nfrom diffusers.utils import BaseOutput\nfrom diffusers.utils.import_utils import is_xformers_available\nfrom einops import rearrange, repeat\nfrom torch import nn\n\n\n@dataclass\nclass Transformer3DModelOutput(BaseOutput):\n    \"\"\"Output of Transformer3DModel.\"\"\"\n    sample: torch.FloatTensor\n\n\nif is_xformers_available():\n    \"\"\"Check xformer.\n\n    If available use xformers to save memory\n    \"\"\"\n    import xformers\n    import xformers.ops\nelse:\n    xformers = None\n\n\nclass Transformer3DModel(ModelMixin, ConfigMixin):\n    \"\"\"Transformer model for image-like data. Takes either discrete (classes of\n    vector embeddings) or continuous (actual embeddings) inputs.\n\n    When input is continuous: First, project the input\n     (aka embedding) and reshape to b, t, d. Then apply standard\n    transformer action. Finally, reshape to image.\n\n    When input is discrete: First, input (classes of latent pixels)\n     is converted to embeddings and has positional\n    embeddings applied, see `ImagePositionalEmbeddings`.\n    Then apply standard transformer action. Finally, predict\n    classes of unnoised image.\n\n    Note that it is assumed one of the input classes is\n    the masked latent pixel. The predicted classes of the unnoised\n    image do not contain a prediction for the masked pixel as\n    the unnoised image cannot be masked.\n\n    Args:\n        num_attention_heads (`int`, *optional*, defaults to 16):\n            The number of heads to use for multi-head attention.\n        attention_head_dim (`int`, *optional*, defaults to 88):\n            The number of channels in each head.\n        in_channels (`int`, *optional*):\n            Pass if the input is continuous.\n            The number of channels in the input and output.\n        num_layers (`int`, *optional*, defaults to 1):\n            The number of layers of Transformer blocks to use.\n        dropout (`float`, *optional*, defaults to 0.1):\n            The dropout probability to use.\n        norm_num_groups (int):\n            Norm group num, defaults to 32.\n        cross_attention_dim (`int`, *optional*):\n            The number of context dimensions to use.\n        attention_bias (`bool`, *optional*):\n            Configure if the TransformerBlocks' attention should contain\n            a bias parameter.\n        sample_size (`int`, *optional*):\n            Pass if the input is discrete. The width of the latent images.\n            Note that this is fixed at training time as it is used for\n            learning a number of position embeddings. See\n            `ImagePositionalEmbeddings`.\n        num_vector_embeds (`int`, *optional*):\n            Pass if the input is discrete. The number of classes of\n            the vector embeddings of the latent pixels.\n            Includes the class for the masked latent pixel.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n            Activation function to be used in feed-forward.\n        use_linear_projection (bool):\n            Whether to use linear projection, defaults to False.\n        only_cross_attention (bool):\n            whether only use cross attention, defaults to False.\n            unet_use_temporal_attention (bool):\n            whether use temporal attention, defaults to False.\n        upcast_attention (bool):\n            whether use upcast attention, defaults to False.\n        unet_use_cross_frame_attention (bool):\n            whether use cross frame attention, defaults to False.\n        unet_use_temporal_attention (bool):\n            whether use temporal attention, defaults to False.\n    \"\"\"\n\n    @register_to_config\n    def __init__(\n        self,\n        num_attention_heads: int = 16,\n        attention_head_dim: int = 88,\n        in_channels: Optional[int] = None,\n        num_layers: int = 1,\n        dropout: float = 0.0,\n        norm_num_groups: int = 32,\n        cross_attention_dim: Optional[int] = None,\n        attention_bias: bool = False,\n        activation_fn: str = 'geglu',\n        num_embeds_ada_norm: Optional[int] = None,\n        use_linear_projection: bool = False,\n        only_cross_attention: bool = False,\n        upcast_attention: bool = False,\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n    ):\n        super().__init__()\n        self.use_linear_projection = use_linear_projection\n        self.num_attention_heads = num_attention_heads\n        self.attention_head_dim = attention_head_dim\n        inner_dim = num_attention_heads * attention_head_dim\n\n        # Define input layers\n        self.in_channels = in_channels\n\n        self.norm = torch.nn.GroupNorm(\n            num_groups=norm_num_groups,\n            num_channels=in_channels,\n            eps=1e-6,\n            affine=True)\n        if use_linear_projection:\n            self.proj_in = nn.Linear(in_channels, inner_dim)\n        else:\n            self.proj_in = nn.Conv2d(\n                in_channels, inner_dim, kernel_size=1, stride=1, padding=0)\n\n        # Define transformers blocks\n        self.transformer_blocks = nn.ModuleList([\n            BasicTransformerBlock(\n                inner_dim,\n                num_attention_heads,\n                attention_head_dim,\n                dropout=dropout,\n                cross_attention_dim=cross_attention_dim,\n                activation_fn=activation_fn,\n                num_embeds_ada_norm=num_embeds_ada_norm,\n                attention_bias=attention_bias,\n                only_cross_attention=only_cross_attention,\n                upcast_attention=upcast_attention,\n                unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n                unet_use_temporal_attention=unet_use_temporal_attention,\n            ) for d in range(num_layers)\n        ])\n\n        # 4. Define output layers\n        if use_linear_projection:\n            self.proj_out = nn.Linear(in_channels, inner_dim)\n        else:\n            self.proj_out = nn.Conv2d(\n                inner_dim, in_channels, kernel_size=1, stride=1, padding=0)\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                timestep=None,\n                return_dict: bool = True):\n        \"\"\"forward function.\n\n        Args:\n            hidden_states ( When discrete, `torch.LongTensor`\n                of shape `(batch size, num latent pixels)`.\n                When continuous, `torch.FloatTensor` of shape `\n                (batch size, channel, height, width)`): Input\n                hidden_states\n            encoder_hidden_states ( `torch.LongTensor` of shape\n                `(batch size, context dim)`, *optional*):\n                Conditional embeddings for cross attention layer.\n                If not given, cross-attention defaults to\n                self-attention.\n            timestep ( `torch.long`, *optional*):\n                Optional timestep to be applied as an embedding\n                in AdaLayerNorm's. Used to indicate denoising step.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a\n                [`Transformer3DModelOutput`]\n                instead of a plain tuple.\n\n        Returns:\n            Dict if `return_dict` is True, otherwise a `tuple`.\n            When returning a tuple, the first element is the sample\n            tensor.\n        \"\"\"\n        # Input\n        assert hidden_states.dim(\n        ) == 5, f'{\"Expected hidden_states to have ndim=5, \"}'\n        f'but got ndim={hidden_states.dim()}.'\n        video_length = hidden_states.shape[2]\n        hidden_states = rearrange(hidden_states, 'b c f h w -> (b f) c h w')\n        if encoder_hidden_states is not None:\n            encoder_hidden_states = repeat(\n                encoder_hidden_states, 'b n c -> (b f) n c', f=video_length)\n\n        batch, channel, height, weight = hidden_states.shape\n        residual = hidden_states\n\n        hidden_states = self.norm(hidden_states)\n        if not self.use_linear_projection:\n            hidden_states = self.proj_in(hidden_states)\n            inner_dim = hidden_states.shape[1]\n            hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                batch, height * weight, inner_dim)\n        else:\n            inner_dim = hidden_states.shape[1]\n            hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                batch, height * weight, inner_dim)\n            hidden_states = self.proj_in(hidden_states)\n\n        # Blocks\n        for block in self.transformer_blocks:\n            hidden_states = block(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states,\n                timestep=timestep,\n                video_length=video_length)\n\n        # Output\n        if not self.use_linear_projection:\n            hidden_states = (\n                hidden_states.reshape(batch, height, weight,\n                                      inner_dim).permute(0, 3, 1,\n                                                         2).contiguous())\n            hidden_states = self.proj_out(hidden_states)\n        else:\n            hidden_states = self.proj_out(hidden_states)\n            hidden_states = (\n                hidden_states.reshape(batch, height, weight,\n                                      inner_dim).permute(0, 3, 1,\n                                                         2).contiguous())\n\n        output = hidden_states + residual\n\n        output = rearrange(output, '(b f) c h w -> b c f h w', f=video_length)\n        if not return_dict:\n            return (output, )\n\n        return Transformer3DModelOutput(sample=output)\n\n\nclass BasicTransformerBlock(nn.Module):\n    \"\"\"A basic Transformer block.\n\n    Args:\n        dim (int): The number of channels in the input and output.\n        num_attention_heads (int): The number of heads to use for\n         multi-head attention.\n        attention_head_dim (int): The number of channels in each head.\n        dropout (float, *optional*, defaults to 0.0):\n            The dropout probability to use.\n        cross_attention_dim (int, *optional*):\n            The size of the context vector for cross attention.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n            Activation function to be used in feed-forward.\n        attention_bias (bool, *optional*, defaults to `False`):\n            Configure if the attentions should contain a bias parameter.\n        only_cross_attention (bool, defaults to False):\n            whether to use cross attention only.\n        upcast_attention (bool):\n            whether use upcast attention, defaults to False.\n        unet_use_cross_frame_attention (bool):\n            whether use cross frame attention, defaults to False.\n        unet_use_temporal_attention (bool):\n            whether use temporal attention, defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_attention_heads: int,\n        attention_head_dim: int,\n        dropout=0.0,\n        cross_attention_dim: Optional[int] = None,\n        activation_fn: str = 'geglu',\n        num_embeds_ada_norm: Optional[int] = None,\n        attention_bias: bool = False,\n        only_cross_attention: bool = False,\n        upcast_attention: bool = False,\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n    ):\n        super().__init__()\n        self.only_cross_attention = only_cross_attention\n        self.use_ada_layer_norm = num_embeds_ada_norm is not None\n        self.unet_use_cross_frame_attention = unet_use_cross_frame_attention\n        self.unet_use_temporal_attention = unet_use_temporal_attention\n\n        # SC-Attn\n        assert unet_use_cross_frame_attention is not None\n        if unet_use_cross_frame_attention:\n            # TODO: cross_frame_attention\n            pass\n            # self.attn1 = SparseCausalAttention2D(\n            #     query_dim=dim,\n            #     heads=num_attention_heads,\n            #     dim_head=attention_head_dim,\n            #     dropout=dropout,\n            #     bias=attention_bias,\n            #     cross_attention_dim=cross_attention_dim\n            #     if only_cross_attention else None,\n            #     upcast_attention=upcast_attention,\n            # )\n        else:\n            # TODO: Check whether replace this with models.editors\n            # .ddpm.attention.CrossAttention\n            self.attn1 = CrossAttention(\n                query_dim=dim,\n                heads=num_attention_heads,\n                dim_head=attention_head_dim,\n                dropout=dropout,\n                bias=attention_bias,\n                upcast_attention=upcast_attention,\n            )\n        self.norm1 = AdaLayerNorm(\n            dim, num_embeds_ada_norm\n        ) if self.use_ada_layer_norm else nn.LayerNorm(dim)\n\n        # Cross-Attn\n        if cross_attention_dim is not None:\n            self.attn2 = CrossAttention(\n                query_dim=dim,\n                cross_attention_dim=cross_attention_dim,\n                heads=num_attention_heads,\n                dim_head=attention_head_dim,\n                dropout=dropout,\n                bias=attention_bias,\n                upcast_attention=upcast_attention,\n            )\n        else:\n            self.attn2 = None\n\n        if cross_attention_dim is not None:\n            self.norm2 = AdaLayerNorm(\n                dim, num_embeds_ada_norm\n            ) if self.use_ada_layer_norm else nn.LayerNorm(dim)\n        else:\n            self.norm2 = None\n\n        # Feed-forward\n        self.ff = FeedForward(\n            dim, dropout=dropout, activation_fn=activation_fn)\n        self.norm3 = nn.LayerNorm(dim)\n\n        # Temp-Attn\n        assert unet_use_temporal_attention is not None\n        if unet_use_temporal_attention:\n            self.attn_temp = CrossAttention(\n                query_dim=dim,\n                heads=num_attention_heads,\n                dim_head=attention_head_dim,\n                dropout=dropout,\n                bias=attention_bias,\n                upcast_attention=upcast_attention,\n            )\n            nn.init.zeros_(self.attn_temp.to_out[0].weight.data)\n            self.norm_temp = AdaLayerNorm(\n                dim, num_embeds_ada_norm\n            ) if self.use_ada_layer_norm else nn.LayerNorm(dim)\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                timestep=None,\n                attention_mask=None,\n                video_length=None):\n        \"\"\"forward with hidden states, context and timestep.\"\"\"\n        # SparseCausal-Attention\n        norm_hidden_states = (\n            self.norm1(hidden_states, timestep)\n            if self.use_ada_layer_norm else self.norm1(hidden_states))\n\n        if self.unet_use_cross_frame_attention:\n            hidden_states = self.attn1(\n                norm_hidden_states,\n                attention_mask=attention_mask,\n                video_length=video_length) + hidden_states\n        else:\n            hidden_states = self.attn1(\n                norm_hidden_states,\n                attention_mask=attention_mask) + hidden_states\n\n        if self.attn2 is not None:\n            # Cross-Attention\n            norm_hidden_states = (\n                self.norm2(hidden_states, timestep)\n                if self.use_ada_layer_norm else self.norm2(hidden_states))\n            hidden_states = (\n                self.attn2(\n                    norm_hidden_states,\n                    encoder_hidden_states=encoder_hidden_states,\n                    attention_mask=attention_mask) + hidden_states)\n\n        # Feed-forward\n        hidden_states = self.ff(self.norm3(hidden_states)) + hidden_states\n\n        # Temporal-Attention\n        if self.unet_use_temporal_attention:\n            d = hidden_states.shape[1]\n            hidden_states = rearrange(\n                hidden_states, '(b f) d c -> (b d) f c', f=video_length)\n            norm_hidden_states = (\n                self.norm_temp(hidden_states, timestep)\n                if self.use_ada_layer_norm else self.norm_temp(hidden_states))\n            hidden_states = self.attn_temp(norm_hidden_states) + hidden_states\n            hidden_states = rearrange(\n                hidden_states, '(b d) f c -> (b f) d c', d=d)\n\n        return hidden_states\n\n\nclass CrossAttention(nn.Module):\n    r\"\"\"\n    A cross attention layer.\n\n    Parameters:\n        query_dim (`int`): The number of channels in the query.\n        cross_attention_dim (`int`, *optional*):\n            The number of channels in the encoder_hidden_states.\n            If not given, defaults to `query_dim`.\n        heads (`int`,  *optional*, defaults to 8):\n        The number of heads to use for multi-head attention.\n        dim_head (`int`,  *optional*, defaults to 64):\n        The number of channels in each head.\n        dropout (`float`, *optional*, defaults to 0.0):\n        The dropout probability to use.\n        bias (`bool`, *optional*, defaults to False):\n            Set to `True` for the query, key, and value linear\n            layers to contain a bias parameter.\n    \"\"\"\n\n    def __init__(\n        self,\n        query_dim: int,\n        cross_attention_dim: Optional[int] = None,\n        heads: int = 8,\n        dim_head: int = 64,\n        dropout: float = 0.0,\n        bias=False,\n        upcast_attention: bool = False,\n        upcast_softmax: bool = False,\n        added_kv_proj_dim: Optional[int] = None,\n        norm_num_groups: Optional[int] = None,\n    ):\n        super().__init__()\n        inner_dim = dim_head * heads\n        cross_attention_dim = cross_attention_dim \\\n            if cross_attention_dim is not None else query_dim\n        self.upcast_attention = upcast_attention\n        self.upcast_softmax = upcast_softmax\n\n        self.scale = dim_head**-0.5\n\n        self.heads = heads\n        # for slice_size > 0 the attention score computation\n        # is split across the batch axis to save memory\n        # You can set slice_size with `set_attention_slice`\n        self.sliceable_head_dim = heads\n        self._slice_size = None\n        if xformers is not None:\n            self._use_memory_efficient_attention_xformers = True\n        else:\n            self._use_memory_efficient_attention_xformers = False\n        self.added_kv_proj_dim = added_kv_proj_dim\n\n        if norm_num_groups is not None:\n            self.group_norm = nn.GroupNorm(\n                num_channels=inner_dim,\n                num_groups=norm_num_groups,\n                eps=1e-5,\n                affine=True)\n        else:\n            self.group_norm = None\n\n        self.to_q = nn.Linear(query_dim, inner_dim, bias=bias)\n        self.to_k = nn.Linear(cross_attention_dim, inner_dim, bias=bias)\n        self.to_v = nn.Linear(cross_attention_dim, inner_dim, bias=bias)\n\n        if self.added_kv_proj_dim is not None:\n            self.add_k_proj = nn.Linear(added_kv_proj_dim, cross_attention_dim)\n            self.add_v_proj = nn.Linear(added_kv_proj_dim, cross_attention_dim)\n\n        self.to_out = nn.ModuleList([])\n        self.to_out.append(nn.Linear(inner_dim, query_dim))\n        self.to_out.append(nn.Dropout(dropout))\n\n    def reshape_heads_to_batch_dim(self, tensor):\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size, seq_len, head_size,\n                                dim // head_size)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size * head_size,\n                                                    seq_len, dim // head_size)\n        return tensor\n\n    def reshape_batch_dim_to_heads(self, tensor):\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size // head_size, head_size, seq_len,\n                                dim)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size // head_size,\n                                                    seq_len, dim * head_size)\n        return tensor\n\n    def set_attention_slice(self, slice_size):\n        if slice_size is not None and slice_size > self.sliceable_head_dim:\n            raise ValueError(f'slice_size {slice_size} has to be smaller \\\n                or equal to {self.sliceable_head_dim}.')\n\n        self._slice_size = slice_size\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                attention_mask=None):\n        batch_size, sequence_length, _ = hidden_states.shape\n\n        encoder_hidden_states = encoder_hidden_states\n\n        if self.group_norm is not None:\n            hidden_states = self.group_norm(hidden_states.transpose(\n                1, 2)).transpose(1, 2)\n\n        query = self.to_q(hidden_states)\n        dim = query.shape[-1]\n        query = self.reshape_heads_to_batch_dim(query)\n\n        if self.added_kv_proj_dim is not None:\n            key = self.to_k(hidden_states)\n            value = self.to_v(hidden_states)\n            encoder_hidden_states_key_proj = \\\n                self.add_k_proj(encoder_hidden_states)\n            encoder_hidden_states_value_proj = \\\n                self.add_v_proj(encoder_hidden_states)\n\n            key = self.reshape_heads_to_batch_dim(key)\n            value = self.reshape_heads_to_batch_dim(value)\n            encoder_hidden_states_key_proj = \\\n                self.reshape_heads_to_batch_dim(\n                    encoder_hidden_states_key_proj\n                    )\n            encoder_hidden_states_value_proj = \\\n                self.reshape_heads_to_batch_dim(\n                    encoder_hidden_states_value_proj\n                    )\n\n            key = torch.concat([encoder_hidden_states_key_proj, key], dim=1)\n            value = torch.concat([encoder_hidden_states_value_proj, value],\n                                 dim=1)\n        else:\n            encoder_hidden_states = encoder_hidden_states \\\n                if encoder_hidden_states is not None else hidden_states\n            key = self.to_k(encoder_hidden_states)\n            value = self.to_v(encoder_hidden_states)\n\n            key = self.reshape_heads_to_batch_dim(key)\n            value = self.reshape_heads_to_batch_dim(value)\n\n        if attention_mask is not None:\n            if attention_mask.shape[-1] != query.shape[1]:\n                target_length = query.shape[1]\n                attention_mask = F.pad(\n                    attention_mask, (0, target_length), value=0.0)\n                attention_mask = attention_mask.repeat_interleave(\n                    self.heads, dim=0)\n\n        # attention, what we cannot get enough of\n        if self._use_memory_efficient_attention_xformers and\\\n                'cuda' in query.device.type:\n            # hidden_states = xformers.ops.memory_efficient_attention(\n            # query, key, value, attn_bias=attention_mask,\n            # op=self.attention_op, scale=self.scale\n            # )\n            hidden_states = self._memory_efficient_attention_xformers(\n                query, key, value, attention_mask)\n            # Some versions of xformers return output in fp32, cast it\n            # back to the dtype of the input\n            hidden_states = hidden_states.to(query.dtype)\n        else:\n            if self._slice_size is None or query.shape[\n                    0] // self._slice_size == 1:\n                hidden_states = self._attention(query, key, value,\n                                                attention_mask)\n            else:\n                hidden_states = self._sliced_attention(query, key, value,\n                                                       sequence_length, dim,\n                                                       attention_mask)\n\n        # linear proj\n        hidden_states = self.to_out[0](hidden_states)\n\n        # dropout\n        hidden_states = self.to_out[1](hidden_states)\n        return hidden_states\n\n    def _attention(self, query, key, value, attention_mask=None):\n        if self.upcast_attention:\n            query = query.float()\n            key = key.float()\n\n        attention_scores = torch.baddbmm(\n            torch.empty(\n                query.shape[0],\n                query.shape[1],\n                key.shape[1],\n                dtype=query.dtype,\n                device=query.device),\n            query,\n            key.transpose(-1, -2),\n            beta=0,\n            alpha=self.scale,\n        )\n\n        if attention_mask is not None:\n            attention_scores = attention_scores + attention_mask\n\n        if self.upcast_softmax:\n            attention_scores = attention_scores.float()\n\n        attention_probs = attention_scores.softmax(dim=-1)\n\n        # cast back to the original dtype\n        attention_probs = attention_probs.to(value.dtype)\n\n        # compute attention output\n        hidden_states = torch.bmm(attention_probs, value)\n\n        # reshape hidden_states\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n\n    def _sliced_attention(self, query, key, value, sequence_length, dim,\n                          attention_mask):\n        batch_size_attention = query.shape[0]\n        hidden_states = torch.zeros(\n            (batch_size_attention, sequence_length, dim // self.heads),\n            device=query.device,\n            dtype=query.dtype)\n        slice_size = self._slice_size \\\n            if self._slice_size is not None else hidden_states.shape[0]\n        for i in range(hidden_states.shape[0] // slice_size):\n            start_idx = i * slice_size\n            end_idx = (i + 1) * slice_size\n\n            query_slice = query[start_idx:end_idx]\n            key_slice = key[start_idx:end_idx]\n\n            if self.upcast_attention:\n                query_slice = query_slice.float()\n                key_slice = key_slice.float()\n\n            attn_slice = torch.baddbmm(\n                torch.empty(\n                    slice_size,\n                    query.shape[1],\n                    key.shape[1],\n                    dtype=query_slice.dtype,\n                    device=query.device),\n                query_slice,\n                key_slice.transpose(-1, -2),\n                beta=0,\n                alpha=self.scale,\n            )\n\n            if attention_mask is not None:\n                attn_slice = attn_slice + attention_mask[start_idx:end_idx]\n\n            if self.upcast_softmax:\n                attn_slice = attn_slice.float()\n\n            attn_slice = attn_slice.softmax(dim=-1)\n\n            # cast back to the original dtype\n            attn_slice = attn_slice.to(value.dtype)\n            attn_slice = torch.bmm(attn_slice, value[start_idx:end_idx])\n\n            hidden_states[start_idx:end_idx] = attn_slice\n\n        # reshape hidden_states\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n\n    def _memory_efficient_attention_xformers(self, query, key, value,\n                                             attention_mask):\n        # TODO attention_mask\n        query = query.contiguous()\n        key = key.contiguous()\n        value = value.contiguous()\n        hidden_states = xformers.ops.memory_efficient_attention(\n            query, key, value, attn_bias=attention_mask)\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/motion_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Adapted from https://github.com/huggingface/diffusers\n\nimport math\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\nfrom diffusers.utils import BaseOutput\nfrom diffusers.utils.import_utils import is_xformers_available\nfrom einops import rearrange, repeat\nfrom torch import nn\n\nfrom mmagic.models.editors.ddpm.attention import GEGLU, ApproximateGELU\nfrom .attention_3d import CrossAttention\n\n\ndef zero_module(module):\n    \"\"\"Zero out the parameters of a module and return it.\"\"\"\n    for p in module.parameters():\n        p.detach().zero_()\n    return module\n\n\n@dataclass\nclass TemporalTransformer3DModelOutput(BaseOutput):\n    \"\"\"Output of TemporalTransformer3DModel.\"\"\"\n    sample: torch.FloatTensor\n\n\nif is_xformers_available():\n    import xformers\n    import xformers.ops\nelse:\n    xformers = None\n\n\ndef get_motion_module(in_channels, motion_module_type: str,\n                      motion_module_kwargs: dict):\n    \"\"\"Get motion module.\"\"\"\n    if motion_module_type == 'Vanilla':\n        return VanillaTemporalModule(\n            in_channels=in_channels,\n            **motion_module_kwargs,\n        )\n    else:\n        raise ValueError\n\n\nclass VanillaTemporalModule(nn.Module):\n    \"\"\"Module which uses transformer to handle 3d motion.\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        num_attention_heads=8,\n        num_transformer_block=2,\n        attention_block_types=('Temporal_Self', 'Temporal_Self'),\n        cross_frame_attention_mode=None,\n        temporal_position_encoding=False,\n        temporal_position_encoding_max_len=24,\n        temporal_attention_dim_div=1,\n        zero_initialize=True,\n    ):\n        super().__init__()\n        temp_pos_max_len = temporal_position_encoding_max_len\n        self.temporal_transformer = TemporalTransformer3DModel(\n            in_channels=in_channels,\n            num_attention_heads=num_attention_heads,\n            attention_head_dim=in_channels // num_attention_heads //\n            temporal_attention_dim_div,\n            num_layers=num_transformer_block,\n            attention_block_types=attention_block_types,\n            cross_frame_attention_mode=cross_frame_attention_mode,\n            temporal_position_encoding=temporal_position_encoding,\n            temporal_position_encoding_max_len=temp_pos_max_len,\n        )\n\n        if zero_initialize:\n            self.temporal_transformer.proj_out = zero_module(\n                self.temporal_transformer.proj_out)\n\n    def forward(self,\n                input_tensor,\n                temb,\n                encoder_hidden_states,\n                attention_mask=None,\n                anchor_frame_idx=None):\n        \"\"\"forward with sample.\"\"\"\n        hidden_states = input_tensor\n        hidden_states = self.temporal_transformer(hidden_states,\n                                                  encoder_hidden_states,\n                                                  attention_mask)\n\n        output = hidden_states\n        return output\n\n\nclass TemporalTransformer3DModel(nn.Module):\n    \"\"\"Module which uses implement 3D Transformer.\"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        num_attention_heads,\n        attention_head_dim,\n        num_layers,\n        attention_block_types=(\n            'Temporal_Self',\n            'Temporal_Self',\n        ),\n        dropout=0.0,\n        norm_num_groups=32,\n        cross_attention_dim=768,\n        activation_fn='geglu',\n        attention_bias=False,\n        upcast_attention=False,\n        cross_frame_attention_mode=None,\n        temporal_position_encoding=False,\n        temporal_position_encoding_max_len=24,\n    ):\n        super().__init__()\n\n        inner_dim = num_attention_heads * attention_head_dim\n\n        self.norm = torch.nn.GroupNorm(\n            num_groups=norm_num_groups,\n            num_channels=in_channels,\n            eps=1e-6,\n            affine=True)\n        self.proj_in = nn.Linear(in_channels, inner_dim)\n        temp_pos_max_len = temporal_position_encoding_max_len\n        self.transformer_blocks = nn.ModuleList([\n            TemporalTransformerBlock(\n                dim=inner_dim,\n                num_attention_heads=num_attention_heads,\n                attention_head_dim=attention_head_dim,\n                attention_block_types=attention_block_types,\n                dropout=dropout,\n                norm_num_groups=norm_num_groups,\n                cross_attention_dim=cross_attention_dim,\n                activation_fn=activation_fn,\n                attention_bias=attention_bias,\n                upcast_attention=upcast_attention,\n                cross_frame_attention_mode=cross_frame_attention_mode,\n                temporal_position_encoding=temporal_position_encoding,\n                temporal_position_encoding_max_len=temp_pos_max_len,\n            ) for d in range(num_layers)\n        ])\n        self.proj_out = nn.Linear(inner_dim, in_channels)\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                attention_mask=None):\n        \"\"\"forward with hidden states, encoder_hidden_states and\n        attention_mask.\"\"\"\n\n        assert hidden_states.dim(\n        ) == 5, f'{\"Expected hidden_states to have ndim=5, \"}'\n        f'but got ndim={hidden_states.dim()}.'\n        video_length = hidden_states.shape[2]\n        hidden_states = rearrange(hidden_states, 'b c f h w -> (b f) c h w')\n\n        batch, channel, height, weight = hidden_states.shape\n        residual = hidden_states\n\n        hidden_states = self.norm(hidden_states)\n        inner_dim = hidden_states.shape[1]\n        hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n            batch, height * weight, inner_dim)\n        hidden_states = self.proj_in(hidden_states)\n\n        # Transformer Blocks\n        for block in self.transformer_blocks:\n            hidden_states = block(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states,\n                video_length=video_length)\n\n        # output\n        hidden_states = self.proj_out(hidden_states)\n        hidden_states = hidden_states.reshape(batch, height,\n                                              weight, inner_dim).permute(\n                                                  0, 3, 1, 2).contiguous()\n\n        output = hidden_states + residual\n        output = rearrange(output, '(b f) c h w -> b c f h w', f=video_length)\n\n        return output\n\n\nclass TemporalTransformerBlock(nn.Module):\n    \"\"\"Module which is a component of Temporal 3D Transformer.\"\"\"\n\n    def __init__(\n        self,\n        dim,\n        num_attention_heads,\n        attention_head_dim,\n        attention_block_types=(\n            'Temporal_Self',\n            'Temporal_Self',\n        ),\n        dropout=0.0,\n        norm_num_groups=32,\n        cross_attention_dim=768,\n        activation_fn='geglu',\n        attention_bias=False,\n        upcast_attention=False,\n        cross_frame_attention_mode=None,\n        temporal_position_encoding=False,\n        temporal_position_encoding_max_len=24,\n    ):\n        super().__init__()\n\n        attention_blocks = []\n        norms = []\n        temp_pos_max_len = temporal_position_encoding_max_len\n        for block_name in attention_block_types:\n            attention_blocks.append(\n                VersatileAttention(\n                    attention_mode=block_name.split('_')[0],\n                    cross_attention_dim=cross_attention_dim\n                    if block_name.endswith('_Cross') else None,\n                    query_dim=dim,\n                    heads=num_attention_heads,\n                    dim_head=attention_head_dim,\n                    dropout=dropout,\n                    bias=attention_bias,\n                    upcast_attention=upcast_attention,\n                    cross_frame_attention_mode=cross_frame_attention_mode,\n                    temporal_position_encoding=temporal_position_encoding,\n                    temporal_position_encoding_max_len=temp_pos_max_len,\n                ))\n            norms.append(nn.LayerNorm(dim))\n\n        self.attention_blocks = nn.ModuleList(attention_blocks)\n        self.norms = nn.ModuleList(norms)\n\n        self.ff = FeedForward(\n            dim, dropout=dropout, activation_fn=activation_fn)\n        self.ff_norm = nn.LayerNorm(dim)\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                attention_mask=None,\n                video_length=None):\n        \"\"\"forward with hidden states, encoder_hidden_states and\n        attention_mask.\"\"\"\n        for attention_block, norm in zip(self.attention_blocks, self.norms):\n            norm_hidden_states = norm(hidden_states)\n            hidden_states = attention_block(\n                norm_hidden_states,\n                encoder_hidden_states=encoder_hidden_states\n                if attention_block.is_cross_attention else None,\n                video_length=video_length,\n            ) + hidden_states\n\n        hidden_states = self.ff(self.ff_norm(hidden_states)) + hidden_states\n\n        output = hidden_states\n        return output\n\n\nclass PositionalEncoding(nn.Module):\n    \"\"\"a implementation of PositionEncoding.\"\"\"\n\n    def __init__(self, d_model, dropout=0., max_len=24):\n        super().__init__()\n        self.dropout = nn.Dropout(p=dropout)\n        position = torch.arange(max_len).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))\n        pe = torch.zeros(1, max_len, d_model)\n        pe[0, :, 0::2] = torch.sin(position * div_term)\n        pe[0, :, 1::2] = torch.cos(position * div_term)\n        self.register_buffer('pe', pe)\n\n    def forward(self, x):\n        \"\"\"forward function.\"\"\"\n        x = x + self.pe[:, :x.size(1)]\n        return self.dropout(x)\n\n\nclass VersatileAttention(CrossAttention):\n    \"\"\"a implementation of VersatileAttention.\"\"\"\n\n    def __init__(self,\n                 attention_mode=None,\n                 cross_frame_attention_mode=None,\n                 temporal_position_encoding=False,\n                 temporal_position_encoding_max_len=24,\n                 *args,\n                 **kwargs):\n        super().__init__(*args, **kwargs)\n        assert attention_mode == 'Temporal'\n\n        self.attention_mode = attention_mode\n        self.is_cross_attention = kwargs['cross_attention_dim'] is not None\n\n        self.pos_encoder = PositionalEncoding(\n            kwargs['query_dim'],\n            dropout=0.,\n            max_len=temporal_position_encoding_max_len) if (\n                temporal_position_encoding\n                and attention_mode == 'Temporal') else None\n\n        self._use_memory_efficient_attention_xformers = False\n\n    def extra_repr(self):\n        \"\"\"return module information.\"\"\"\n        return f'(Module Info) Attention_Mode: {self.attention_mode},\\\n            Is_Cross_Attention: {self.is_cross_attention}'\n\n    def reshape_heads_to_batch_dim(self, tensor):\n        \"\"\"reshape heads num to batch dim.\"\"\"\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size, seq_len, head_size,\n                                dim // head_size)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size * head_size,\n                                                    seq_len, dim // head_size)\n        return tensor\n\n    def reshape_batch_dim_to_heads(self, tensor):\n        \"\"\"reshape batch dim to heads num.\"\"\"\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size // head_size, head_size, seq_len,\n                                dim)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size // head_size,\n                                                    seq_len, dim * head_size)\n        return tensor\n\n    def _memory_efficient_attention_xformers(self, query, key, value,\n                                             attention_mask):\n        \"\"\"use xformers to save memory.\"\"\"\n        # TODO attention_mask\n        query = query.contiguous()\n        key = key.contiguous()\n        value = value.contiguous()\n        hidden_states = xformers.ops.memory_efficient_attention(\n            query, key, value, attn_bias=attention_mask)\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                attention_mask=None,\n                video_length=None):\n        \"\"\"forward with hidden states, encoder_hidden_states and\n        attention_mask.\"\"\"\n        batch_size, sequence_length, _ = hidden_states.shape\n\n        if self.attention_mode == 'Temporal':\n            d = hidden_states.shape[1]\n            hidden_states = rearrange(\n                hidden_states, '(b f) d c -> (b d) f c', f=video_length)\n\n            if self.pos_encoder is not None:\n                hidden_states = self.pos_encoder(hidden_states)\n\n            encoder_hidden_states = repeat(\n                encoder_hidden_states, 'b n c -> (b d) n c', d=d\n            ) if encoder_hidden_states is not None else encoder_hidden_states\n        else:\n            raise NotImplementedError\n\n        encoder_hidden_states = encoder_hidden_states\n\n        if self.group_norm is not None:\n            hidden_states = self.group_norm(hidden_states.transpose(\n                1, 2)).transpose(1, 2)\n\n        query = self.to_q(hidden_states)\n        dim = query.shape[-1]\n        query = self.reshape_heads_to_batch_dim(query)\n\n        if self.added_kv_proj_dim is not None:\n            raise NotImplementedError\n\n        encoder_hidden_states = encoder_hidden_states \\\n            if encoder_hidden_states is not None else hidden_states\n        key = self.to_k(encoder_hidden_states)\n        value = self.to_v(encoder_hidden_states)\n\n        key = self.reshape_heads_to_batch_dim(key)\n        value = self.reshape_heads_to_batch_dim(value)\n\n        if attention_mask is not None:\n            if attention_mask.shape[-1] != query.shape[1]:\n                target_length = query.shape[1]\n                attention_mask = F.pad(\n                    attention_mask, (0, target_length), value=0.0)\n                attention_mask = attention_mask.repeat_interleave(\n                    self.heads, dim=0)\n\n        # attention, what we cannot get enough of\n        if self._use_memory_efficient_attention_xformers:\n            hidden_states = self._memory_efficient_attention_xformers(\n                query, key, value, attention_mask)\n            # Some versions of xformers return output in fp32,\n            # cast it back to the dtype of the input\n            hidden_states = hidden_states.to(query.dtype)\n        else:\n            if self._slice_size is None or query.shape[\n                    0] // self._slice_size == 1:\n                hidden_states = self._attention(query, key, value,\n                                                attention_mask)\n            else:\n                hidden_states = self._sliced_attention(query, key, value,\n                                                       sequence_length, dim,\n                                                       attention_mask)\n\n        # linear proj\n        hidden_states = self.to_out[0](hidden_states)\n\n        # dropout\n        hidden_states = self.to_out[1](hidden_states)\n\n        if self.attention_mode == 'Temporal':\n            hidden_states = rearrange(\n                hidden_states, '(b d) f c -> (b f) d c', d=d)\n\n        return hidden_states\n\n\nclass FeedForward(nn.Module):\n    r\"\"\"\n    A feed-forward layer.\n\n    Parameters:\n        dim (`int`): The number of channels in the input.\n        dim_out (`int`, *optional*):\n        The number of channels in the output. If not given, defaults to `dim`.\n        mult (`int`, *optional*, defaults to 4):\n        The multiplier to use for the hidden dimension.\n        dropout (`float`, *optional*, defaults to 0.0):\n        The dropout probability to use.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n        Activation function to be used in feed-forward.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        dim_out: Optional[int] = None,\n        mult: int = 4,\n        dropout: float = 0.0,\n        activation_fn: str = 'geglu',\n    ):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = dim_out if dim_out is not None else dim\n\n        if activation_fn == 'gelu':\n            act_fn = GELU(dim, inner_dim)\n        elif activation_fn == 'geglu':\n            act_fn = GEGLU(dim, inner_dim)\n        elif activation_fn == 'geglu-approximate':\n            act_fn = ApproximateGELU(dim, inner_dim)\n\n        self.net = nn.ModuleList([])\n        # project in\n        self.net.append(act_fn)\n        # project dropout\n        self.net.append(nn.Dropout(dropout))\n        # project out\n        self.net.append(nn.Linear(inner_dim, dim_out))\n\n    def forward(self, hidden_states):\n        for module in self.net:\n            hidden_states = module(hidden_states)\n        return hidden_states\n\n\nclass GELU(nn.Module):\n    r\"\"\"\n    GELU activation function\n    \"\"\"\n\n    def __init__(self, dim_in: int, dim_out: int):\n        super().__init__()\n        self.proj = nn.Linear(dim_in, dim_out)\n\n    def gelu(self, gate):\n        if gate.device.type != 'mps':\n            return F.gelu(gate)\n        # mps: gelu is not implemented for float16\n        return F.gelu(gate.to(dtype=torch.float32)).to(dtype=gate.dtype)\n\n    def forward(self, hidden_states):\n        hidden_states = self.proj(hidden_states)\n        hidden_states = self.gelu(hidden_states)\n        return hidden_states\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/resnet_3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Adapted from https://github.com/huggingface/diffusers/blob/main/\n# src/diffusers/models/resnet.py\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\n\n\nclass InflatedConv3d(nn.Conv2d):\n    \"\"\"An implementation of InflatedConv3d.\"\"\"\n\n    def forward(self, x):\n        \"\"\"forward function.\"\"\"\n        video_length = x.shape[2]\n\n        x = rearrange(x, 'b c f h w -> (b f) c h w')\n        x = super().forward(x)\n        x = rearrange(x, '(b f) c h w -> b c f h w', f=video_length)\n\n        return x\n\n\nclass InflatedGroupNorm(nn.GroupNorm):\n\n    def forward(self, x):\n        video_length = x.shape[2]\n\n        x = rearrange(x, 'b c f h w -> (b f) c h w')\n        x = super().forward(x)\n        x = rearrange(x, '(b f) c h w -> b c f h w', f=video_length)\n\n        return x\n\n\nclass Upsample3D(nn.Module):\n    \"\"\"An 3D upsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        use_conv_transpose (bool): whether to use conv transpose.\n        out_channels (int): output channels.\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 use_conv_transpose=False,\n                 out_channels=None,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_conv_transpose = use_conv_transpose\n        self.name = name\n\n        if use_conv_transpose:\n            raise NotImplementedError\n        elif use_conv:\n            self.conv = InflatedConv3d(\n                self.channels, self.out_channels, 3, padding=1)\n\n    def forward(self, hidden_states, output_size=None):\n        \"\"\"forward with hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n\n        if self.use_conv_transpose:\n            raise NotImplementedError\n\n        # Cast to float32 to as 'upsample_nearest2d_out_frame'\n        # op does not support bfloat16\n        dtype = hidden_states.dtype\n        if dtype == torch.bfloat16:\n            hidden_states = hidden_states.to(torch.float32)\n\n        # upsample_nearest_nhwc fails with large batch sizes.\n        # see https://github.com/huggingface/diffusers/issues/984\n        if hidden_states.shape[0] >= 64:\n            hidden_states = hidden_states.contiguous()\n\n        # if `output_size` is passed we force the interpolation output\n        # size and do not make use of `scale_factor=2`\n        if output_size is None:\n            hidden_states = F.interpolate(\n                hidden_states, scale_factor=[1.0, 2.0, 2.0], mode='nearest')\n        else:\n            hidden_states = F.interpolate(\n                hidden_states, size=output_size, mode='nearest')\n\n        # If the input is bfloat16, we cast back to bfloat16\n        if dtype == torch.bfloat16:\n            hidden_states = hidden_states.to(dtype)\n\n        # if self.use_conv:\n        #     if self.name == \"conv\":\n        #         hidden_states = self.conv(hidden_states)\n        #     else:\n        #         hidden_states = self.Conv2d_0(hidden_states)\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n\n\nclass Downsample3D(nn.Module):\n    \"\"\"A 3D downsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        out_channels (int): output channels\n        padding (int): padding num\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 out_channels=None,\n                 padding=1,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.padding = padding\n        stride = 2\n        self.name = name\n\n        if use_conv:\n            self.conv = InflatedConv3d(\n                self.channels,\n                self.out_channels,\n                3,\n                stride=stride,\n                padding=padding)\n        else:\n            raise NotImplementedError\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n        if self.use_conv and self.padding == 0:\n            raise NotImplementedError\n\n        assert hidden_states.shape[1] == self.channels\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n\n\nclass ResnetBlock3D(nn.Module):\n    \"\"\"3D resnet block support down sample and up sample.\n\n    Args:\n        in_channels (int): input channels.\n        out_channels (int): output channels.\n        conv_shortcut (bool): whether to use conv shortcut.\n        dropout (float): dropout rate.\n        temb_channels (int): time embedding channels.\n        groups (int): conv groups.\n        groups_out (int): conv out groups.\n        pre_norm (bool): whether to norm before conv. Todo: remove.\n        eps (float): eps for groupnorm.\n        non_linearity (str): non linearity type.\n        time_embedding_norm (str): time embedding norm type.\n        output_scale_factor (float): factor to scale input and output.\n        use_in_shortcut (bool): whether to use conv in shortcut.\n    \"\"\"\n\n    def __init__(\n        self,\n        *,\n        in_channels,\n        out_channels=None,\n        conv_shortcut=False,\n        dropout=0.0,\n        temb_channels=512,\n        groups=32,\n        groups_out=None,\n        pre_norm=True,\n        eps=1e-6,\n        non_linearity='swish',\n        time_embedding_norm='default',\n        output_scale_factor=1.0,\n        use_in_shortcut=None,\n        use_inflated_groupnorm=None,\n    ):\n        super().__init__()\n        self.pre_norm = pre_norm\n        self.pre_norm = True\n        self.in_channels = in_channels\n        out_channels = in_channels if out_channels is None else out_channels\n        self.out_channels = out_channels\n        self.use_conv_shortcut = conv_shortcut\n        self.time_embedding_norm = time_embedding_norm\n        self.output_scale_factor = output_scale_factor\n\n        if groups_out is None:\n            groups_out = groups\n\n        if use_inflated_groupnorm:\n            self.norm1 = InflatedGroupNorm(\n                num_groups=groups,\n                num_channels=in_channels,\n                eps=eps,\n                affine=True)\n        else:\n            self.norm1 = torch.nn.GroupNorm(\n                num_groups=groups,\n                num_channels=in_channels,\n                eps=eps,\n                affine=True)\n\n        self.conv1 = InflatedConv3d(\n            in_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if temb_channels is not None:\n            if self.time_embedding_norm == 'default':\n                time_emb_proj_out_channels = out_channels\n            elif self.time_embedding_norm == 'scale_shift':\n                time_emb_proj_out_channels = out_channels * 2\n            else:\n                raise ValueError(f'unknown time_embedding_norm : '\n                                 f'{self.time_embedding_norm} ')\n\n            self.time_emb_proj = torch.nn.Linear(temb_channels,\n                                                 time_emb_proj_out_channels)\n        else:\n            self.time_emb_proj = None\n\n        if use_inflated_groupnorm:\n            self.norm2 = InflatedGroupNorm(\n                num_groups=groups_out,\n                num_channels=out_channels,\n                eps=eps,\n                affine=True)\n        else:\n            self.norm2 = torch.nn.GroupNorm(\n                num_groups=groups_out,\n                num_channels=out_channels,\n                eps=eps,\n                affine=True)\n\n        self.dropout = torch.nn.Dropout(dropout)\n        self.conv2 = InflatedConv3d(\n            out_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if non_linearity == 'swish':\n            self.nonlinearity = lambda x: F.silu(x)\n        elif non_linearity == 'mish':\n            self.nonlinearity = Mish()\n        elif non_linearity == 'silu':\n            self.nonlinearity = nn.SiLU()\n\n        self.use_in_shortcut = self.in_channels != self.out_channels \\\n            if use_in_shortcut is None else use_in_shortcut\n\n        self.conv_shortcut = None\n        if self.use_in_shortcut:\n            self.conv_shortcut = InflatedConv3d(\n                in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n\n    def forward(self, input_tensor, temb):\n        \"\"\"forward with hidden states and time embeddings.\"\"\"\n        hidden_states = input_tensor\n\n        hidden_states = self.norm1(hidden_states)\n        hidden_states = self.nonlinearity(hidden_states)\n\n        hidden_states = self.conv1(hidden_states)\n\n        if temb is not None:\n            temb = self.time_emb_proj(self.nonlinearity(temb))[:, :, None,\n                                                               None, None]\n\n        if temb is not None and self.time_embedding_norm == 'default':\n            hidden_states = hidden_states + temb\n\n        hidden_states = self.norm2(hidden_states)\n\n        if temb is not None and self.time_embedding_norm == 'scale_shift':\n            scale, shift = torch.chunk(temb, 2, dim=1)\n            hidden_states = hidden_states * (1 + scale) + shift\n\n        hidden_states = self.nonlinearity(hidden_states)\n\n        hidden_states = self.dropout(hidden_states)\n        hidden_states = self.conv2(hidden_states)\n\n        if self.conv_shortcut is not None:\n            input_tensor = self.conv_shortcut(input_tensor)\n\n        output_tensor = (input_tensor +\n                         hidden_states) / self.output_scale_factor\n\n        return output_tensor\n\n\nclass Mish(torch.nn.Module):\n    \"\"\"Mish activation function.\"\"\"\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        return hidden_states * torch.tanh(\n            torch.nn.functional.softplus(hidden_states))\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/unet_3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Adapted from https://github.com/huggingface/diffusers/\n# blob/main/src/diffusers/models/unet_2d_condition.py\n\nimport json\nimport os\nfrom dataclasses import dataclass\nfrom typing import List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.utils.checkpoint\nfrom diffusers.configuration_utils import ConfigMixin, register_to_config\nfrom diffusers.models.embeddings import TimestepEmbedding, Timesteps\nfrom diffusers.models.modeling_utils import ModelMixin\nfrom diffusers.utils import BaseOutput\nfrom huggingface_hub import snapshot_download\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import constant_init\nfrom safetensors import safe_open\n\nfrom mmagic.registry import MODELS\nfrom .resnet_3d import InflatedConv3d, InflatedGroupNorm\nfrom .unet_block import (CrossAttnDownBlock3D, CrossAttnUpBlock3D, DownBlock3D,\n                         UNetMidBlock3DCrossAttn, UpBlock3D, get_down_block,\n                         get_up_block)\n\nlogger = MMLogger.get_current_instance()\n\n\n@dataclass\nclass UNet3DConditionOutput(BaseOutput):\n    \"\"\"Output of UNet3DCondtion.\"\"\"\n    sample: torch.FloatTensor\n\n\n@MODELS.register_module()\nclass UNet3DConditionMotionModel(ModelMixin, ConfigMixin):\n    _supports_gradient_checkpointing = True\n    \"\"\" Implementation of UNet3DConditionMotionModel\"\"\"\n\n    @register_to_config\n    def __init__(\n        self,\n        sample_size: Optional[int] = None,\n        in_channels: int = 4,\n        out_channels: int = 4,\n        center_input_sample: bool = False,\n        flip_sin_to_cos: bool = True,\n        freq_shift: int = 0,\n        down_block_types: Tuple[str] = (\n            'CrossAttnDownBlock3D',\n            'CrossAttnDownBlock3D',\n            'CrossAttnDownBlock3D',\n            'DownBlock3D',\n        ),\n        mid_block_type: str = 'UNetMidBlock3DCrossAttn',\n        up_block_types: Tuple[str] = ('UpBlock3D', 'CrossAttnUpBlock3D',\n                                      'CrossAttnUpBlock3D',\n                                      'CrossAttnUpBlock3D'),\n        only_cross_attention: Union[bool, Tuple[bool]] = False,\n        block_out_channels: Tuple[int] = (320, 640, 1280, 1280),\n        layers_per_block: int = 2,\n        downsample_padding: int = 1,\n        mid_block_scale_factor: float = 1,\n        act_fn: str = 'silu',\n        norm_num_groups: int = 32,\n        norm_eps: float = 1e-5,\n        cross_attention_dim: int = 768,\n        attention_head_dim: Union[int, Tuple[int]] = 8,\n        dual_cross_attention: bool = False,\n        use_linear_projection: bool = False,\n        class_embed_type: Optional[str] = None,\n        num_class_embeds: Optional[int] = None,\n        upcast_attention: bool = False,\n        resnet_time_scale_shift: str = 'default',\n\n        # Additional\n        use_inflated_groupnorm=False,\n        use_motion_module=False,\n        motion_module_resolutions=(1, 2, 4, 8),\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type=None,\n        motion_module_kwargs={},\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n        subfolder=None,\n        from_pretrained=None,\n        unet_addtion_kwargs=None,\n    ):\n        super().__init__()\n\n        self.sample_size = sample_size\n        time_embed_dim = block_out_channels[0] * 4\n\n        # input\n        self.conv_in = InflatedConv3d(\n            in_channels, block_out_channels[0], kernel_size=3, padding=(1, 1))\n\n        # time\n        self.time_proj = Timesteps(block_out_channels[0], flip_sin_to_cos,\n                                   freq_shift)\n        timestep_input_dim = block_out_channels[0]\n\n        self.time_embedding = TimestepEmbedding(timestep_input_dim,\n                                                time_embed_dim)\n\n        # class embedding\n        if class_embed_type is None and num_class_embeds is not None:\n            self.class_embedding = nn.Embedding(num_class_embeds,\n                                                time_embed_dim)\n        elif class_embed_type == 'timestep':\n            self.class_embedding = TimestepEmbedding(timestep_input_dim,\n                                                     time_embed_dim)\n        elif class_embed_type == 'identity':\n            self.class_embedding = nn.Identity(time_embed_dim, time_embed_dim)\n        else:\n            self.class_embedding = None\n\n        self.down_blocks = nn.ModuleList([])\n        self.mid_block = None\n        self.up_blocks = nn.ModuleList([])\n\n        if isinstance(only_cross_attention, bool):\n            only_cross_attention = [only_cross_attention\n                                    ] * len(down_block_types)\n\n        if isinstance(attention_head_dim, int):\n            attention_head_dim = (attention_head_dim, ) * len(down_block_types)\n\n        # down\n        output_channel = block_out_channels[0]\n        for i, down_block_type in enumerate(down_block_types):\n            res = 2**i\n            input_channel = output_channel\n            output_channel = block_out_channels[i]\n            is_final_block = i == len(block_out_channels) - 1\n\n            down_block = get_down_block(\n                down_block_type,\n                num_layers=layers_per_block,\n                in_channels=input_channel,\n                out_channels=output_channel,\n                temb_channels=time_embed_dim,\n                add_downsample=not is_final_block,\n                resnet_eps=norm_eps,\n                resnet_act_fn=act_fn,\n                resnet_groups=norm_num_groups,\n                cross_attention_dim=cross_attention_dim,\n                attn_num_head_channels=attention_head_dim[i],\n                downsample_padding=downsample_padding,\n                dual_cross_attention=dual_cross_attention,\n                use_linear_projection=use_linear_projection,\n                only_cross_attention=only_cross_attention[i],\n                upcast_attention=upcast_attention,\n                resnet_time_scale_shift=resnet_time_scale_shift,\n                unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n                unet_use_temporal_attention=unet_use_temporal_attention,\n                use_inflated_groupnorm=use_inflated_groupnorm,\n                use_motion_module=use_motion_module\n                and (res in motion_module_resolutions)\n                and (not motion_module_decoder_only),\n                motion_module_type=motion_module_type,\n                motion_module_kwargs=motion_module_kwargs,\n            )\n            self.down_blocks.append(down_block)\n\n        # mid\n        if mid_block_type == 'UNetMidBlock3DCrossAttn':\n            self.mid_block = UNetMidBlock3DCrossAttn(\n                in_channels=block_out_channels[-1],\n                temb_channels=time_embed_dim,\n                resnet_eps=norm_eps,\n                resnet_act_fn=act_fn,\n                output_scale_factor=mid_block_scale_factor,\n                resnet_time_scale_shift=resnet_time_scale_shift,\n                cross_attention_dim=cross_attention_dim,\n                attn_num_head_channels=attention_head_dim[-1],\n                resnet_groups=norm_num_groups,\n                dual_cross_attention=dual_cross_attention,\n                use_linear_projection=use_linear_projection,\n                upcast_attention=upcast_attention,\n                unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n                unet_use_temporal_attention=unet_use_temporal_attention,\n                use_inflated_groupnorm=use_inflated_groupnorm,\n                use_motion_module=use_motion_module\n                and motion_module_mid_block,\n                motion_module_type=motion_module_type,\n                motion_module_kwargs=motion_module_kwargs,\n            )\n        else:\n            raise ValueError(f'unknown mid_block_type : {mid_block_type}')\n\n        # count how many layers upsample the videos\n        self.num_upsamplers = 0\n\n        # up\n        reversed_block_out_channels = list(reversed(block_out_channels))\n        reversed_attention_head_dim = list(reversed(attention_head_dim))\n        only_cross_attention = list(reversed(only_cross_attention))\n        output_channel = reversed_block_out_channels[0]\n        for i, up_block_type in enumerate(up_block_types):\n            res = 2**(3 - i)\n            is_final_block = i == len(block_out_channels) - 1\n\n            prev_output_channel = output_channel\n            output_channel = reversed_block_out_channels[i]\n            input_channel = reversed_block_out_channels[min(\n                i + 1,\n                len(block_out_channels) - 1)]\n\n            # add upsample block for all BUT final layer\n            if not is_final_block:\n                add_upsample = True\n                self.num_upsamplers += 1\n            else:\n                add_upsample = False\n\n            up_block = get_up_block(\n                up_block_type,\n                num_layers=layers_per_block + 1,\n                in_channels=input_channel,\n                out_channels=output_channel,\n                prev_output_channel=prev_output_channel,\n                temb_channels=time_embed_dim,\n                add_upsample=add_upsample,\n                resnet_eps=norm_eps,\n                resnet_act_fn=act_fn,\n                resnet_groups=norm_num_groups,\n                cross_attention_dim=cross_attention_dim,\n                attn_num_head_channels=reversed_attention_head_dim[i],\n                dual_cross_attention=dual_cross_attention,\n                use_linear_projection=use_linear_projection,\n                only_cross_attention=only_cross_attention[i],\n                upcast_attention=upcast_attention,\n                resnet_time_scale_shift=resnet_time_scale_shift,\n                unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n                unet_use_temporal_attention=unet_use_temporal_attention,\n                use_inflated_groupnorm=use_inflated_groupnorm,\n                use_motion_module=use_motion_module\n                and (res in motion_module_resolutions),\n                motion_module_type=motion_module_type,\n                motion_module_kwargs=motion_module_kwargs,\n            )\n            self.up_blocks.append(up_block)\n            prev_output_channel = output_channel\n\n        # out\n        if use_inflated_groupnorm:\n            self.conv_norm_out = InflatedGroupNorm(\n                num_channels=block_out_channels[0],\n                num_groups=norm_num_groups,\n                eps=norm_eps)\n        else:\n            self.conv_norm_out = nn.GroupNorm(\n                num_channels=block_out_channels[0],\n                num_groups=norm_num_groups,\n                eps=norm_eps)\n        self.conv_norm_out = nn.GroupNorm(\n            num_channels=block_out_channels[0],\n            num_groups=norm_num_groups,\n            eps=norm_eps)\n        self.conv_act = nn.SiLU()\n        self.conv_out = InflatedConv3d(\n            block_out_channels[0], out_channels, kernel_size=3, padding=1)\n        self.init_weights(subfolder, from_pretrained)\n\n    def init_weights(self, subfolder=None, from_pretrained=None):\n        \"\"\"Init weights for models.\n\n        We just use the initialization method proposed in the original paper.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if isinstance(from_pretrained, str):\n            from diffusers.utils import WEIGHTS_NAME\n            model_file = os.path.join(from_pretrained, subfolder, WEIGHTS_NAME)\n            if not os.path.isfile(model_file):\n                cache_file = snapshot_download(\n                    'runwayml/stable-diffusion-v1-5',\n                    allow_patterns=['*.json', '*unet*safetensors'],\n                    ignore_patterns=[\n                        '*.fp16.safetensors', '*v1-5*', '*ema.safetensors'\n                    ])\n                from diffusers.utils import SAFETENSORS_WEIGHTS_NAME\n                model_file = os.path.join(cache_file, subfolder,\n                                          SAFETENSORS_WEIGHTS_NAME)\n                state_dict = {}\n                with safe_open(model_file, framework='pt', device='cpu') as f:\n                    for key in f.keys():\n                        state_dict[key] = f.get_tensor(key)\n            else:\n                state_dict = torch.load(model_file, map_location='cpu')\n\n            m, u = self.load_state_dict(state_dict, strict=False)\n            logger.info(\n                f'### missing keys: {len(m)}; \\n### unexpected keys: {len(u)};'\n            )\n            params = [\n                p.numel() if 'temporal' in n else 0\n                for n, p in self.named_parameters()\n            ]\n            logger.info(\n                f'### Temporal Module Parameters: {sum(params) / 1e6} M')\n        elif from_pretrained is None:\n            #   As Improved-DDPM, we apply zero-initialization to\n            #   second conv block in ResBlock (keywords: conv_2)\n            #   the output layer of the Unet (keywords: 'out' but\n            #     not 'out_blocks')\n            #   projection layer in Attention layer (keywords: proj)\n            for n, m in self.named_modules():\n                if isinstance(m, nn.Conv2d) and ('conv2' in n or\n                                                 ('out' in n\n                                                  and 'out_blocks' not in n)):\n                    constant_init(m, 0)\n                if isinstance(m, nn.Conv1d) and 'proj' in n:\n                    constant_init(m, 0)\n        else:\n            raise TypeError('from_pretrained must be a str or None but'\n                            f' got {type(from_pretrained)} instead.')\n\n    def set_attention_slice(self, slice_size):\n        r\"\"\"\n        Enable sliced attention computation.\n\n        When this option is enabled, the attention module will\n        split the input tensor in slices, to compute attention\n        in several steps. This is useful to save some memory\n        in exchange for a small speed decrease.\n\n        Args:\n            slice_size (`str` or `int` or `list(int)`, *optional*,\n                defaults to `\"auto\"`):\n                When `\"auto\"`, halves the input to the attention heads,\n                so attention will be computed in two steps. If\n                `\"max\"`, maximum amount of memory will be saved by\n                running only one slice at a time. If a number is\n                provided, uses as many slices as\n                `attention_head_dim // slice_size`. In this case,\n                `attention_head_dim' must be a multiple of `slice_size`.\n        \"\"\"\n        sliceable_head_dims = []\n\n        def fn_recursive_retrieve_slicable_dims(module: torch.nn.Module):\n            \"\"\"set attention slice recursively.\"\"\"\n            if hasattr(module, 'set_attention_slice'):\n                sliceable_head_dims.append(module.sliceable_head_dim)\n\n            for child in module.children():\n                fn_recursive_retrieve_slicable_dims(child)\n\n        # retrieve number of attention layers\n        for module in self.children():\n            fn_recursive_retrieve_slicable_dims(module)\n\n        num_slicable_layers = len(sliceable_head_dims)\n\n        if slice_size == 'auto':\n            # half the attention head size is usually a good trade-off between\n            # speed and memory\n            slice_size = [dim // 2 for dim in sliceable_head_dims]\n        elif slice_size == 'max':\n            # make smallest slice possible\n            slice_size = num_slicable_layers * [1]\n\n        slice_size = num_slicable_layers * [slice_size] if not isinstance(\n            slice_size, list) else slice_size\n\n        if len(slice_size) != len(sliceable_head_dims):\n            raise ValueError(\n                f'You have provided {len(slice_size)}, but '\n                f'{self.config} has {len(sliceable_head_dims)} different'\n                f' attention layers. Make sure to match '\n                f'`len(slice_size)` to be {len(sliceable_head_dims)}.')\n\n        for i in range(len(slice_size)):\n            size = slice_size[i]\n            dim = sliceable_head_dims[i]\n            if size is not None and size > dim:\n                raise ValueError(\n                    f'size {size} has to be smaller or equal to {dim}.')\n\n        # Recursively walk through all the children.\n        # Any children which exposes the set_attention_slice method\n        # gets the message\n        def fn_recursive_set_attention_slice(module: torch.nn.Module,\n                                             slice_size: List[int]):\n            \"\"\"set attention slice recursively.\"\"\"\n\n            if hasattr(module, 'set_attention_slice'):\n                module.set_attention_slice(slice_size.pop())\n\n            for child in module.children():\n                fn_recursive_set_attention_slice(child, slice_size)\n\n        reversed_slice_size = list(reversed(slice_size))\n        for module in self.children():\n            fn_recursive_set_attention_slice(module, reversed_slice_size)\n\n    def _set_gradient_checkpointing(self, module, value=False):\n        \"\"\"set gradient checkpoint.\"\"\"\n        if isinstance(module, (CrossAttnDownBlock3D, DownBlock3D,\n                               CrossAttnUpBlock3D, UpBlock3D)):\n            module.gradient_checkpointing = value\n\n    def forward(\n        self,\n        sample: torch.FloatTensor,\n        timestep: Union[torch.Tensor, float, int],\n        encoder_hidden_states: torch.Tensor,\n        class_labels: Optional[torch.Tensor] = None,\n        attention_mask: Optional[torch.Tensor] = None,\n        return_dict: bool = True,\n    ) -> Union[UNet3DConditionOutput, Tuple]:\n        r\"\"\"\n        Args:\n            sample (`torch.FloatTensor`): (batch, channel, height, width)\n            noisy inputs tensor\n            timestep (`torch.FloatTensor` or `float` or `int`):\n            (batch) timesteps\n            encoder_hidden_states (`torch.FloatTensor`):\n            (batch, sequence_length, feature_dim) encoder hidden states\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a\n                [`UNet3DConditionOutput`]\n                instead of a plain tuple.\n\n        Returns:\n            [`UNet3DConditionOutput`] or `tuple`:\n            [`UNet3DConditionOutput`]\n            if `return_dict` is True, otherwise a `tuple`. When\n            returning a tuple, the first element is the sample tensor.\n        \"\"\"\n        # By default samples have to be AT least a multiple of the\n        # overall upsampling factor. he overall upsampling factor is equal\n        # T to 2 ** (# num of upsampling layears).\n        # However, the upsampling interpolation output size\n        # can be forced to fit any upsampling size\n        # on the fly if necessary.\n        default_overall_up_factor = 2**self.num_upsamplers\n\n        # upsample size should be forwarded when sample is\n        # not a multiple of `default_overall_up_factor`\n        forward_upsample_size = False\n        upsample_size = None\n\n        if any(s % default_overall_up_factor != 0 for s in sample.shape[-2:]):\n            logger.info(\n                'Forward upsample size to force interpolation output size.')\n            forward_upsample_size = True\n\n        # prepare attention_mask\n        if attention_mask is not None:\n            attention_mask = (1 - attention_mask.to(sample.dtype)) * -10000.0\n            attention_mask = attention_mask.unsqueeze(1)\n\n        # center input if necessary\n        if self.config.center_input_sample:\n            sample = 2 * sample - 1.0\n\n        # time\n        timesteps = timestep\n        if not torch.is_tensor(timesteps):\n            # This would be a good case for the `match`\n            # statement (Python 3.10+)\n            is_mps = sample.device.type == 'mps'\n            if isinstance(timestep, float):\n                dtype = torch.float32 if is_mps else torch.float64\n            else:\n                dtype = torch.int32 if is_mps else torch.int64\n            timesteps = torch.tensor([timesteps],\n                                     dtype=dtype,\n                                     device=sample.device)\n        elif len(timesteps.shape) == 0:\n            timesteps = timesteps[None].to(sample.device)\n\n        # broadcast to batch dimension in a way\n        # that's compatible with ONNX/Core ML\n        timesteps = timesteps.expand(sample.shape[0])\n\n        t_emb = self.time_proj(timesteps)\n\n        # timesteps does not contain any weights and will\n        # always return f32 tensors\n        # but time_embedding might actually be running in fp16.\n        # so we need to cast here.\n        # there might be better ways to encapsulate this.\n        t_emb = t_emb.to(dtype=self.dtype)\n        emb = self.time_embedding(t_emb)\n\n        if self.class_embedding is not None:\n            if class_labels is None:\n                raise ValueError(\n                    'class_labels should be provided when num_class_embeds > 0'\n                )\n\n            if self.config.class_embed_type == 'timestep':\n                class_labels = self.time_proj(class_labels)\n\n            class_emb = self.class_embedding(class_labels).to(dtype=self.dtype)\n            emb = emb + class_emb\n\n        # pre-process\n        sample = self.conv_in(sample)\n\n        # down\n        down_block_res_samples = (sample, )\n        for downsample_block in self.down_blocks:\n            if hasattr(downsample_block, 'has_cross_attention'\n                       ) and downsample_block.has_cross_attention:\n                sample, res_samples = downsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    encoder_hidden_states=encoder_hidden_states,\n                    attention_mask=attention_mask,\n                )\n            else:\n                sample, res_samples = downsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    encoder_hidden_states=encoder_hidden_states)\n\n            down_block_res_samples += res_samples\n\n        # mid\n        sample = self.mid_block(\n            sample,\n            emb,\n            encoder_hidden_states=encoder_hidden_states,\n            attention_mask=attention_mask)\n\n        # up\n        for i, upsample_block in enumerate(self.up_blocks):\n            is_final_block = i == len(self.up_blocks) - 1\n\n            res_samples = down_block_res_samples[-len(upsample_block.resnets):]\n            down_block_res_samples = down_block_res_samples[:-len(\n                upsample_block.resnets)]\n\n            # if we have not reached the final block and need to forward the\n            # upsample size, we do it here\n            if not is_final_block and forward_upsample_size:\n                upsample_size = down_block_res_samples[-1].shape[2:]\n\n            if hasattr(upsample_block, 'has_cross_attention'\n                       ) and upsample_block.has_cross_attention:\n                sample = upsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    res_hidden_states_tuple=res_samples,\n                    encoder_hidden_states=encoder_hidden_states,\n                    upsample_size=upsample_size,\n                    attention_mask=attention_mask,\n                )\n            else:\n                sample = upsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    res_hidden_states_tuple=res_samples,\n                    upsample_size=upsample_size,\n                    encoder_hidden_states=encoder_hidden_states,\n                )\n\n        # post-process\n        sample = self.conv_norm_out(sample)\n        sample = self.conv_act(sample)\n        sample = self.conv_out(sample)\n\n        if not return_dict:\n            return (sample, )\n\n        return UNet3DConditionOutput(sample=sample)\n\n    @classmethod\n    def from_pretrained_2d(cls,\n                           pretrained_model_path,\n                           subfolder=None,\n                           unet_additional_kwargs=None):\n        \"\"\"a class method for initialization.\"\"\"\n        if subfolder is not None:\n            pretrained_model_path = os.path.join(pretrained_model_path,\n                                                 subfolder)\n        logger.info(f\"loaded temporal unet's pretrained weights \\\n                from {pretrained_model_path} ...\")\n\n        config_file = os.path.join(pretrained_model_path, 'config.json')\n        if not os.path.isfile(config_file):\n            raise RuntimeError(f'{config_file} does not exist')\n        with open(config_file, 'r') as f:\n            config = json.load(f)\n        config['_class_name'] = cls.__name__\n        config['down_block_types'] = [\n            'CrossAttnDownBlock3D', 'CrossAttnDownBlock3D',\n            'CrossAttnDownBlock3D', 'DownBlock3D'\n        ]\n        config['up_block_types'] = [\n            'UpBlock3D', 'CrossAttnUpBlock3D', 'CrossAttnUpBlock3D',\n            'CrossAttnUpBlock3D'\n        ]\n\n        from diffusers.utils import WEIGHTS_NAME\n        model = cls.from_config(config, **unet_additional_kwargs)\n        model_file = os.path.join(pretrained_model_path, WEIGHTS_NAME)\n        if not os.path.isfile(model_file):\n            raise RuntimeError(f'{model_file} does not exist')\n        state_dict = torch.load(model_file, map_location='cpu')\n\n        m, u = model.load_state_dict(state_dict, strict=False)\n        logger.info(\n            f'### missing keys: {len(m)}; \\n### unexpected keys: {len(u)};')\n        # print(f\"### missing keys:\\n{m}\\n### unexpected keys:\\n{u}\\n\")\n\n        params = [\n            p.numel() if 'temporal' in n else 0\n            for n, p in model.named_parameters()\n        ]\n        logger.info(f'### Temporal Module Parameters: {sum(params) / 1e6} M')\n\n        return model\n"
  },
  {
    "path": "mmagic/models/editors/animatediff/unet_block.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Adapted from https://github.com/huggingface/diffusers/blob/\n# main/src/diffusers/models/unet_2d_blocks.py\n\nimport torch\nfrom torch import nn\n\nfrom .attention_3d import Transformer3DModel\nfrom .motion_module import get_motion_module\nfrom .resnet_3d import Downsample3D, ResnetBlock3D, Upsample3D\n\n\ndef get_down_block(\n    down_block_type,\n    num_layers,\n    in_channels,\n    out_channels,\n    temb_channels,\n    add_downsample,\n    resnet_eps,\n    resnet_act_fn,\n    attn_num_head_channels,\n    resnet_groups=None,\n    cross_attention_dim=None,\n    downsample_padding=None,\n    dual_cross_attention=False,\n    use_linear_projection=False,\n    only_cross_attention=False,\n    upcast_attention=False,\n    resnet_time_scale_shift='default',\n    unet_use_cross_frame_attention=None,\n    unet_use_temporal_attention=None,\n    use_inflated_groupnorm=None,\n    use_motion_module=None,\n    motion_module_type=None,\n    motion_module_kwargs=None,\n):\n    \"\"\"get unet down path block.\"\"\"\n\n    down_block_type = down_block_type[7:] if down_block_type.startswith(\n        'UNetRes') else down_block_type\n    if down_block_type == 'DownBlock3D':\n        return DownBlock3D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            temb_channels=temb_channels,\n            add_downsample=add_downsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            downsample_padding=downsample_padding,\n            resnet_time_scale_shift=resnet_time_scale_shift,\n            use_inflated_groupnorm=use_inflated_groupnorm,\n            use_motion_module=use_motion_module,\n            motion_module_type=motion_module_type,\n            motion_module_kwargs=motion_module_kwargs,\n        )\n    elif down_block_type == 'CrossAttnDownBlock3D':\n        if cross_attention_dim is None:\n            raise ValueError('cross_attention_dim must be specified \\\n                            for CrossAttnDownBlock3D')\n        return CrossAttnDownBlock3D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            temb_channels=temb_channels,\n            add_downsample=add_downsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            downsample_padding=downsample_padding,\n            cross_attention_dim=cross_attention_dim,\n            attn_num_head_channels=attn_num_head_channels,\n            dual_cross_attention=dual_cross_attention,\n            use_linear_projection=use_linear_projection,\n            only_cross_attention=only_cross_attention,\n            upcast_attention=upcast_attention,\n            resnet_time_scale_shift=resnet_time_scale_shift,\n            unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n            unet_use_temporal_attention=unet_use_temporal_attention,\n            use_inflated_groupnorm=use_inflated_groupnorm,\n            use_motion_module=use_motion_module,\n            motion_module_type=motion_module_type,\n            motion_module_kwargs=motion_module_kwargs,\n        )\n    raise ValueError(f'{down_block_type} does not exist.')\n\n\ndef get_up_block(\n    up_block_type,\n    num_layers,\n    in_channels,\n    out_channels,\n    prev_output_channel,\n    temb_channels,\n    add_upsample,\n    resnet_eps,\n    resnet_act_fn,\n    attn_num_head_channels,\n    resnet_groups=None,\n    cross_attention_dim=None,\n    dual_cross_attention=False,\n    use_linear_projection=False,\n    only_cross_attention=False,\n    upcast_attention=False,\n    resnet_time_scale_shift='default',\n    unet_use_cross_frame_attention=None,\n    unet_use_temporal_attention=None,\n    use_inflated_groupnorm=None,\n    use_motion_module=None,\n    motion_module_type=None,\n    motion_module_kwargs=None,\n):\n    \"\"\"get unet up path block.\"\"\"\n\n    up_block_type = up_block_type[7:] if up_block_type.startswith(\n        'UNetRes') else up_block_type\n    if up_block_type == 'UpBlock3D':\n        return UpBlock3D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            prev_output_channel=prev_output_channel,\n            temb_channels=temb_channels,\n            add_upsample=add_upsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            resnet_time_scale_shift=resnet_time_scale_shift,\n            use_inflated_groupnorm=use_inflated_groupnorm,\n            use_motion_module=use_motion_module,\n            motion_module_type=motion_module_type,\n            motion_module_kwargs=motion_module_kwargs,\n        )\n    elif up_block_type == 'CrossAttnUpBlock3D':\n        if cross_attention_dim is None:\n            raise ValueError(\n                'cross_attention_dim must be specified for CrossAttnUpBlock3D')\n        return CrossAttnUpBlock3D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            prev_output_channel=prev_output_channel,\n            temb_channels=temb_channels,\n            add_upsample=add_upsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            cross_attention_dim=cross_attention_dim,\n            attn_num_head_channels=attn_num_head_channels,\n            dual_cross_attention=dual_cross_attention,\n            use_linear_projection=use_linear_projection,\n            only_cross_attention=only_cross_attention,\n            upcast_attention=upcast_attention,\n            resnet_time_scale_shift=resnet_time_scale_shift,\n            unet_use_cross_frame_attention=unet_use_cross_frame_attention,\n            unet_use_temporal_attention=unet_use_temporal_attention,\n            use_inflated_groupnorm=use_inflated_groupnorm,\n            use_motion_module=use_motion_module,\n            motion_module_type=motion_module_type,\n            motion_module_kwargs=motion_module_kwargs,\n        )\n    raise ValueError(f'{up_block_type} does not exist.')\n\n\nclass UNetMidBlock3DCrossAttn(nn.Module):\n    \"\"\"3D unet mid block built by cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        output_scale_factor=1.0,\n        cross_attention_dim=1280,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n        upcast_attention=False,\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n        use_inflated_groupnorm=None,\n        use_motion_module=None,\n        motion_module_type=None,\n        motion_module_kwargs=None,\n    ):\n        super().__init__()\n\n        self.has_cross_attention = True\n        self.attn_num_head_channels = attn_num_head_channels\n        resnet_groups = resnet_groups if resnet_groups is not None else min(\n            in_channels // 4, 32)\n\n        # there is always at least one resnet\n        resnets = [\n            ResnetBlock3D(\n                in_channels=in_channels,\n                out_channels=in_channels,\n                temb_channels=temb_channels,\n                eps=resnet_eps,\n                groups=resnet_groups,\n                dropout=dropout,\n                time_embedding_norm=resnet_time_scale_shift,\n                non_linearity=resnet_act_fn,\n                output_scale_factor=output_scale_factor,\n                pre_norm=resnet_pre_norm,\n                use_inflated_groupnorm=use_inflated_groupnorm,\n            )\n        ]\n        attentions = []\n        motion_modules = []\n\n        for _ in range(num_layers):\n            if dual_cross_attention:\n                raise NotImplementedError\n            cfa = unet_use_cross_frame_attention\n            attentions.append(\n                Transformer3DModel(\n                    attn_num_head_channels,\n                    in_channels // attn_num_head_channels,\n                    in_channels=in_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                    upcast_attention=upcast_attention,\n                    unet_use_cross_frame_attention=cfa,\n                    unet_use_temporal_attention=unet_use_temporal_attention,\n                ))\n            motion_modules.append(\n                get_motion_module(\n                    in_channels=in_channels,\n                    motion_module_type=motion_module_type,\n                    motion_module_kwargs=motion_module_kwargs,\n                ) if use_motion_module else None)\n            resnets.append(\n                ResnetBlock3D(\n                    in_channels=in_channels,\n                    out_channels=in_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                    use_inflated_groupnorm=use_inflated_groupnorm,\n                ))\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n        self.motion_modules = nn.ModuleList(motion_modules)\n\n    def forward(self,\n                hidden_states,\n                temb=None,\n                encoder_hidden_states=None,\n                attention_mask=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        hidden_states = self.resnets[0](hidden_states, temb)\n        for attn, resnet, motion_module in zip(self.attentions,\n                                               self.resnets[1:],\n                                               self.motion_modules):\n            hidden_states = attn(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states).sample\n            hidden_states = motion_module(\n                hidden_states,\n                temb,\n                encoder_hidden_states=encoder_hidden_states\n            ) if motion_module is not None else hidden_states\n            hidden_states = resnet(hidden_states, temb)\n\n        return hidden_states\n\n\nclass CrossAttnDownBlock3D(nn.Module):\n    \"\"\"Down block built by 3D cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        cross_attention_dim=1280,\n        output_scale_factor=1.0,\n        downsample_padding=1,\n        add_downsample=True,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n        only_cross_attention=False,\n        upcast_attention=False,\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n        use_inflated_groupnorm=None,\n        use_motion_module=None,\n        motion_module_type=None,\n        motion_module_kwargs=None,\n    ):\n        super().__init__()\n        resnets = []\n        attentions = []\n        motion_modules = []\n\n        self.has_cross_attention = True\n        self.attn_num_head_channels = attn_num_head_channels\n\n        for i in range(num_layers):\n            in_channels = in_channels if i == 0 else out_channels\n            resnets.append(\n                ResnetBlock3D(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                    use_inflated_groupnorm=use_inflated_groupnorm,\n                ))\n            if dual_cross_attention:\n                raise NotImplementedError\n            cfa = unet_use_cross_frame_attention\n            attentions.append(\n                Transformer3DModel(\n                    attn_num_head_channels,\n                    out_channels // attn_num_head_channels,\n                    in_channels=out_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                    only_cross_attention=only_cross_attention,\n                    upcast_attention=upcast_attention,\n                    unet_use_cross_frame_attention=cfa,\n                    unet_use_temporal_attention=unet_use_temporal_attention,\n                ))\n            motion_modules.append(\n                get_motion_module(\n                    in_channels=out_channels,\n                    motion_module_type=motion_module_type,\n                    motion_module_kwargs=motion_module_kwargs,\n                ) if use_motion_module else None)\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n        self.motion_modules = nn.ModuleList(motion_modules)\n\n        if add_downsample:\n            self.downsamplers = nn.ModuleList([\n                Downsample3D(\n                    out_channels,\n                    use_conv=True,\n                    out_channels=out_channels,\n                    padding=downsample_padding,\n                    name='op')\n            ])\n        else:\n            self.downsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(self,\n                hidden_states,\n                temb=None,\n                encoder_hidden_states=None,\n                attention_mask=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        output_states = ()\n\n        for resnet, attn, motion_module in zip(self.resnets, self.attentions,\n                                               self.motion_modules):\n            if self.training and self.gradient_checkpointing:\n\n                def create_custom_forward(module, return_dict=None):\n\n                    def custom_forward(*inputs):\n                        if return_dict is not None:\n                            return module(*inputs, return_dict=return_dict)\n                        else:\n                            return module(*inputs)\n\n                    return custom_forward\n\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet), hidden_states, temb)\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(attn, return_dict=False),\n                    hidden_states,\n                    encoder_hidden_states,\n                )[0]\n                if motion_module is not None:\n                    hidden_states = torch.utils.checkpoint.checkpoint(\n                        create_custom_forward(motion_module),\n                        hidden_states.requires_grad_(), temb,\n                        encoder_hidden_states)\n\n            else:\n                hidden_states = resnet(hidden_states, temb)\n                hidden_states = attn(\n                    hidden_states,\n                    encoder_hidden_states=encoder_hidden_states).sample\n\n                # add motion module\n                hidden_states = motion_module(\n                    hidden_states,\n                    temb,\n                    encoder_hidden_states=encoder_hidden_states\n                ) if motion_module is not None else hidden_states\n\n            output_states += (hidden_states, )\n\n        if self.downsamplers is not None:\n            for downsampler in self.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n            output_states += (hidden_states, )\n\n        return hidden_states, output_states\n\n\nclass DownBlock3D(nn.Module):\n    \"\"\"Down block built by 3D resnet.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_downsample=True,\n        downsample_padding=1,\n        use_inflated_groupnorm=None,\n        use_motion_module=None,\n        motion_module_type=None,\n        motion_module_kwargs=None,\n    ):\n        super().__init__()\n        resnets = []\n        motion_modules = []\n\n        for i in range(num_layers):\n            in_channels = in_channels if i == 0 else out_channels\n            resnets.append(\n                ResnetBlock3D(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                    use_inflated_groupnorm=use_inflated_groupnorm,\n                ))\n            motion_modules.append(\n                get_motion_module(\n                    in_channels=out_channels,\n                    motion_module_type=motion_module_type,\n                    motion_module_kwargs=motion_module_kwargs,\n                ) if use_motion_module else None)\n\n        self.resnets = nn.ModuleList(resnets)\n        self.motion_modules = nn.ModuleList(motion_modules)\n\n        if add_downsample:\n            self.downsamplers = nn.ModuleList([\n                Downsample3D(\n                    out_channels,\n                    use_conv=True,\n                    out_channels=out_channels,\n                    padding=downsample_padding,\n                    name='op')\n            ])\n        else:\n            self.downsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(self, hidden_states, temb=None, encoder_hidden_states=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        output_states = ()\n\n        for resnet, motion_module in zip(self.resnets, self.motion_modules):\n            if self.training and self.gradient_checkpointing:\n\n                def create_custom_forward(module):\n\n                    def custom_forward(*inputs):\n                        return module(*inputs)\n\n                    return custom_forward\n\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet), hidden_states, temb)\n                if motion_module is not None:\n                    hidden_states = torch.utils.checkpoint.checkpoint(\n                        create_custom_forward(motion_module),\n                        hidden_states.requires_grad_(), temb,\n                        encoder_hidden_states)\n            else:\n                hidden_states = resnet(hidden_states, temb)\n\n                # add motion module\n                hidden_states = motion_module(\n                    hidden_states,\n                    temb,\n                    encoder_hidden_states=encoder_hidden_states\n                ) if motion_module is not None else hidden_states\n\n            output_states += (hidden_states, )\n\n        if self.downsamplers is not None:\n            for downsampler in self.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n            output_states += (hidden_states, )\n\n        return hidden_states, output_states\n\n\nclass CrossAttnUpBlock3D(nn.Module):\n    \"\"\"Up block built by 3D cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        prev_output_channel: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        cross_attention_dim=1280,\n        output_scale_factor=1.0,\n        add_upsample=True,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n        only_cross_attention=False,\n        upcast_attention=False,\n        unet_use_cross_frame_attention=None,\n        unet_use_temporal_attention=None,\n        use_inflated_groupnorm=None,\n        use_motion_module=None,\n        motion_module_type=None,\n        motion_module_kwargs=None,\n    ):\n        super().__init__()\n        resnets = []\n        attentions = []\n        motion_modules = []\n\n        self.has_cross_attention = True\n        self.attn_num_head_channels = attn_num_head_channels\n\n        for i in range(num_layers):\n            res_skip_channels = in_channels if (i == num_layers -\n                                                1) else out_channels\n            resnet_in_channels = prev_output_channel if i == 0 \\\n                else out_channels\n\n            resnets.append(\n                ResnetBlock3D(\n                    in_channels=resnet_in_channels + res_skip_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                    use_inflated_groupnorm=use_inflated_groupnorm,\n                ))\n            if dual_cross_attention:\n                raise NotImplementedError\n            cfa = unet_use_cross_frame_attention\n            attentions.append(\n                Transformer3DModel(\n                    attn_num_head_channels,\n                    out_channels // attn_num_head_channels,\n                    in_channels=out_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                    only_cross_attention=only_cross_attention,\n                    upcast_attention=upcast_attention,\n                    unet_use_cross_frame_attention=cfa,\n                    unet_use_temporal_attention=unet_use_temporal_attention,\n                ))\n            motion_modules.append(\n                get_motion_module(\n                    in_channels=out_channels,\n                    motion_module_type=motion_module_type,\n                    motion_module_kwargs=motion_module_kwargs,\n                ) if use_motion_module else None)\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n        self.motion_modules = nn.ModuleList(motion_modules)\n\n        if add_upsample:\n            self.upsamplers = nn.ModuleList([\n                Upsample3D(\n                    out_channels, use_conv=True, out_channels=out_channels)\n            ])\n        else:\n            self.upsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(\n        self,\n        hidden_states,\n        res_hidden_states_tuple,\n        temb=None,\n        encoder_hidden_states=None,\n        upsample_size=None,\n        attention_mask=None,\n    ):\n        \"\"\"forward with hidden states and res hidden states.\"\"\"\n\n        for resnet, attn, motion_module in zip(self.resnets, self.attentions,\n                                               self.motion_modules):\n            # pop res hidden states\n            res_hidden_states = res_hidden_states_tuple[-1]\n            res_hidden_states_tuple = res_hidden_states_tuple[:-1]\n            hidden_states = torch.cat([hidden_states, res_hidden_states],\n                                      dim=1)\n\n            if self.training and self.gradient_checkpointing:\n\n                def create_custom_forward(module, return_dict=None):\n\n                    def custom_forward(*inputs):\n                        if return_dict is not None:\n                            return module(*inputs, return_dict=return_dict)\n                        else:\n                            return module(*inputs)\n\n                    return custom_forward\n\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet), hidden_states, temb)\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(attn, return_dict=False),\n                    hidden_states,\n                    encoder_hidden_states,\n                )[0]\n                if motion_module is not None:\n                    hidden_states = torch.utils.checkpoint.checkpoint(\n                        create_custom_forward(motion_module),\n                        hidden_states.requires_grad_(), temb,\n                        encoder_hidden_states)\n\n            else:\n                hidden_states = resnet(hidden_states, temb)\n                hidden_states = attn(\n                    hidden_states,\n                    encoder_hidden_states=encoder_hidden_states).sample\n\n                # add motion module\n                hidden_states = motion_module(\n                    hidden_states,\n                    temb,\n                    encoder_hidden_states=encoder_hidden_states\n                ) if motion_module is not None else hidden_states\n\n        if self.upsamplers is not None:\n            for upsampler in self.upsamplers:\n                hidden_states = upsampler(hidden_states, upsample_size)\n\n        return hidden_states\n\n\nclass UpBlock3D(nn.Module):\n    \"\"\"Up block built by 3D resnet.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        prev_output_channel: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_upsample=True,\n        use_motion_module=None,\n        motion_module_type=None,\n        motion_module_kwargs=None,\n        use_inflated_groupnorm=None,\n    ):\n        super().__init__()\n        resnets = []\n        motion_modules = []\n\n        for i in range(num_layers):\n            res_skip_channels = in_channels if (i == num_layers -\n                                                1) else out_channels\n            resnet_in_channels = prev_output_channel if i == 0 \\\n                else out_channels\n\n            resnets.append(\n                ResnetBlock3D(\n                    in_channels=resnet_in_channels + res_skip_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                    use_inflated_groupnorm=use_inflated_groupnorm,\n                ))\n            motion_modules.append(\n                get_motion_module(\n                    in_channels=out_channels,\n                    motion_module_type=motion_module_type,\n                    motion_module_kwargs=motion_module_kwargs,\n                ) if use_motion_module else None)\n\n        self.resnets = nn.ModuleList(resnets)\n        self.motion_modules = nn.ModuleList(motion_modules)\n\n        if add_upsample:\n            self.upsamplers = nn.ModuleList([\n                Upsample3D(\n                    out_channels, use_conv=True, out_channels=out_channels)\n            ])\n        else:\n            self.upsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(\n        self,\n        hidden_states,\n        res_hidden_states_tuple,\n        temb=None,\n        upsample_size=None,\n        encoder_hidden_states=None,\n    ):\n        \"\"\"forward with hidden states and res hidden states.\"\"\"\n\n        for resnet, motion_module in zip(self.resnets, self.motion_modules):\n            # pop res hidden states\n            res_hidden_states = res_hidden_states_tuple[-1]\n            res_hidden_states_tuple = res_hidden_states_tuple[:-1]\n            hidden_states = torch.cat([hidden_states, res_hidden_states],\n                                      dim=1)\n\n            if self.training and self.gradient_checkpointing:\n\n                def create_custom_forward(module):\n\n                    def custom_forward(*inputs):\n                        return module(*inputs)\n\n                    return custom_forward\n\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet), hidden_states, temb)\n                if motion_module is not None:\n                    hidden_states = torch.utils.checkpoint.checkpoint(\n                        create_custom_forward(motion_module),\n                        hidden_states.requires_grad_(), temb,\n                        encoder_hidden_states)\n            else:\n                hidden_states = resnet(hidden_states, temb)\n                hidden_states = motion_module(\n                    hidden_states,\n                    temb,\n                    encoder_hidden_states=encoder_hidden_states\n                ) if motion_module is not None else hidden_states\n\n        if self.upsamplers is not None:\n            for upsampler in self.upsamplers:\n                hidden_states = upsampler(hidden_states, upsample_size)\n\n        return hidden_states\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .aot_decoder import AOTDecoder\nfrom .aot_encoder import AOTEncoder\nfrom .aot_encoder_decoder import AOTEncoderDecoder\nfrom .aot_inpaintor import AOTInpaintor\nfrom .aot_neck import AOTBlockNeck\n\n__all__ = [\n    'AOTEncoderDecoder', 'AOTBlockNeck', 'AOTInpaintor', 'AOTEncoder',\n    'AOTDecoder'\n]\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/aot_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass AOTDecoder(BaseModule):\n    \"\"\"Decoder used in AOT-GAN model.\n\n    This implementation follows:\n    Aggregated Contextual Transformations for High-Resolution Image Inpainting\n\n    Args:\n        in_channels (int, optional): Channel number of input feature.\n            Default: 256.\n        mid_channels (int, optional): Channel number of middle feature.\n            Default: 128.\n        out_channels (int, optional): Channel number of output feature.\n            Default 3.\n        act_cfg (dict, optional): Config dict for activation layer,\n            \"relu\" by default.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=256,\n                 mid_channels=128,\n                 out_channels=3,\n                 act_cfg=dict(type='ReLU')):\n        super().__init__()\n\n        self.decoder = nn.ModuleList([\n            ConvModule(\n                in_channels,\n                mid_channels,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                act_cfg=act_cfg),\n            ConvModule(\n                mid_channels,\n                mid_channels // 2,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                act_cfg=act_cfg),\n            ConvModule(\n                mid_channels // 2,\n                out_channels,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                act_cfg=None)\n        ])\n        self.output_act = nn.Tanh()\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        for i in range(0, len(self.decoder)):\n            if i <= 1:\n                x = F.interpolate(\n                    x, scale_factor=2, mode='bilinear', align_corners=True)\n            x = self.decoder[i](x)\n\n        return self.output_act(x)\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/aot_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass AOTEncoder(BaseModule):\n    \"\"\"Encoder used in AOT-GAN model.\n\n    This implementation follows:\n    Aggregated Contextual Transformations for High-Resolution Image Inpainting\n\n    Args:\n        in_channels (int, optional): Channel number of input feature.\n            Default: 4.\n        mid_channels (int, optional): Channel number of middle feature.\n            Default: 64.\n        out_channels (int, optional): Channel number of output feature.\n            Default: 256.\n        act_cfg (dict, optional): Config dict for activation layer,\n            \"relu\" by default.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=4,\n                 mid_channels=64,\n                 out_channels=256,\n                 act_cfg=dict(type='ReLU')):\n        super().__init__()\n        self.encoder = nn.Sequential(\n            nn.ReflectionPad2d(3),\n            ConvModule(\n                in_channels,\n                mid_channels,\n                kernel_size=7,\n                stride=1,\n                act_cfg=act_cfg),\n            ConvModule(\n                mid_channels,\n                mid_channels * 2,\n                kernel_size=4,\n                stride=2,\n                padding=1,\n                act_cfg=act_cfg),\n            ConvModule(\n                mid_channels * 2,\n                out_channels,\n                kernel_size=4,\n                stride=2,\n                padding=1,\n                act_cfg=act_cfg))\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        return self.encoder(x)\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/aot_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nfrom mmagic.registry import MODELS\nfrom ..global_local import GLEncoderDecoder\n\n\n@MODELS.register_module()\nclass AOTEncoderDecoder(GLEncoderDecoder):\n    \"\"\"Encoder-Decoder used in AOT-GAN model.\n\n    This implementation follows:\n    Aggregated Contextual Transformations for High-Resolution Image Inpainting\n    The architecture of the encoder-decoder is:\n    (conv2d x 3) --> (dilated conv2d x 8) --> (conv2d or deconv2d x 3).\n\n    Args:\n        encoder (dict): Config dict to encoder.\n        decoder (dict): Config dict to build decoder.\n        dilation_neck (dict): Config dict to build dilation neck.\n    \"\"\"\n\n    def __init__(self,\n                 encoder=dict(type='AOTEncoder'),\n                 decoder=dict(type='AOTDecoder'),\n                 dilation_neck=dict(type='AOTBlockNeck')):\n        super().__init__()\n        self.encoder = MODELS.build(encoder)\n        self.decoder = MODELS.build(decoder)\n        self.dilation_neck = MODELS.build(dilation_neck)\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/aot_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List\n\nimport torch\n\nfrom mmagic.models.base_models import OneStageInpaintor\nfrom mmagic.registry import MODELS\nfrom ...utils import set_requires_grad\n\n\n@MODELS.register_module()\nclass AOTInpaintor(OneStageInpaintor):\n    \"\"\"Inpaintor for AOT-GAN method.\n\n    This inpaintor is implemented according to the paper: Aggregated Contextual\n    Transformations for High-Resolution Image Inpainting\n    \"\"\"\n\n    def forward_train_d(self, data_batch, is_real, is_disc, mask):\n        \"\"\"Forward function in discriminator training step.\n\n        In this function, we compute the prediction for each data batch (real\n        or fake). Meanwhile, the standard gan loss will be computed with\n        several proposed losses for stable training.\n\n        Args:\n            data_batch (torch.Tensor): Batch of real data or fake data.\n            is_real (bool): If True, the gan loss will regard this batch as\n                real data. Otherwise, the gan loss will regard this batch as\n                fake data.\n            is_disc (bool): If True, this function is called in discriminator\n                training step. Otherwise, this function is called in generator\n                training step. This will help us to compute different types of\n                adversarial loss, like LSGAN.\n            mask (torch.Tensor): Mask of data.\n\n        Returns:\n            dict: Contains the loss items computed in this function.\n        \"\"\"\n\n        pred = self.disc(data_batch)\n        loss_ = self.loss_gan(pred, is_real, is_disc, mask=mask)\n\n        loss = dict(real_loss=loss_) if is_real else dict(fake_loss=loss_)\n\n        if self.with_disc_shift_loss:\n            loss_d_shift = self.loss_disc_shift(loss_)\n            # 0.5 for average the fake and real data\n            loss.update(loss_disc_shift=loss_d_shift * 0.5)\n\n        return loss\n\n    def generator_loss(self, fake_res, fake_img, gt, mask, masked_img):\n        \"\"\"Forward function in generator training step.\n\n        In this function, we mainly compute the loss items for generator with\n        the given (fake_res, fake_img). In general, the `fake_res` is the\n        direct output of the generator and the `fake_img` is the composition of\n        direct output and ground-truth image.\n\n        Args:\n            fake_res (torch.Tensor): Direct output of the generator.\n            fake_img (torch.Tensor): Composition of `fake_res` and\n                ground-truth image.\n            gt (torch.Tensor): Ground-truth image.\n            mask (torch.Tensor): Mask image.\n            masked_img (torch.Tensor): Composition of mask image and\n                ground-truth image.\n\n        Returns:\n            tuple(dict): Dict contains the results computed within this\n                function for visualization and dict contains the loss items\n                computed in this function.\n        \"\"\"\n        loss = dict()\n\n        if self.with_gan:\n            pred = self.disc(fake_img)\n            loss_g_fake = self.loss_gan(pred, True, False, mask=mask)\n            loss['loss_g_fake'] = loss_g_fake\n\n        if self.with_l1_valid_loss:\n            loss_l1_valid = self.loss_l1_valid(fake_res, gt)\n            loss['loss_l1_valid'] = loss_l1_valid\n\n        if self.with_out_percep_loss:\n            loss_out_percep, loss_out_style = self.loss_percep(fake_res, gt)\n            if loss_out_percep is not None:\n                loss['loss_out_percep'] = loss_out_percep\n            if loss_out_style is not None:\n                loss['loss_out_style'] = loss_out_style\n\n        res = dict(\n            gt_img=gt.cpu(),\n            masked_img=masked_img.cpu(),\n            fake_res=fake_res.cpu(),\n            fake_img=fake_img.cpu())\n\n        return res, loss\n\n    def forward_tensor(self, inputs, data_samples):\n        \"\"\"Forward function in tensor mode.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_samples (List[dict]): List of data sample dict.\n\n        Returns:\n            tuple: Direct output of the generator and composition of `fake_res`\n                and ground-truth image.\n        \"\"\"\n        # Pre-process runs in BaseModel.val_step / test_step\n        masks = data_samples.mask\n\n        masked_imgs = inputs  # N,3,H,W\n        masked_imgs = masked_imgs.float() + masks\n\n        input_xs = torch.cat([masked_imgs, masks], dim=1)  # N,4,H,W\n        fake_reses = self.generator(input_xs)\n        fake_imgs = fake_reses * masks + masked_imgs * (1. - masks)\n        return fake_reses, fake_imgs\n\n    def train_step(self, data: List[dict], optim_wrapper):\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n        1. get fake res/image\n        2. compute reconstruction losses for generator\n        3. compute adversarial loss for discriminator\n        4. optimize generator\n        5. optimize discriminator\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        # prepare data for training\n        gt_img = data_samples.gt_img\n        mask = data_samples.mask\n        mask = mask.float()\n\n        masked_img = batch_inputs\n        masked_img = masked_img.float() + mask\n\n        # get common output from encdec\n        input_x = torch.cat([masked_img, mask], dim=1)\n        fake_res = self.generator(input_x)\n        fake_img = gt_img * (1. - mask) + fake_res * mask\n\n        # discriminator training step\n        if self.train_cfg.disc_step > 0:\n            set_requires_grad(self.disc, True)\n\n            disc_losses_real = self.forward_train_d(\n                gt_img, True, True, mask=mask)\n            disc_losses_fake = self.forward_train_d(\n                fake_img.detach(), False, True, mask=mask)\n            disc_losses_ = disc_losses_real['real_loss'] + disc_losses_fake[\n                'fake_loss']\n            disc_losses = dict(disc_losses=disc_losses_)\n\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            optim_wrapper['disc'].backward(loss_disc)\n            optim_wrapper['disc'].step()\n            optim_wrapper['disc'].zero_grad()\n            log_vars.update(log_vars_d)\n\n            self.disc_step_count = (self.disc_step_count +\n                                    1) % self.train_cfg.disc_step\n            if self.disc_step_count != 0:\n                return log_vars\n\n        # generator (encdec) training step, results contain the data\n        # for visualization\n        if self.with_gan:\n            set_requires_grad(self.disc, False)\n        results, g_losses = self.generator_loss(fake_res, fake_img, gt_img,\n                                                mask, masked_img)\n        loss_g, log_vars_g = self.parse_losses(g_losses)\n        log_vars.update(log_vars_g)\n\n        optim_wrapper['generator'].backward(loss_g)\n        optim_wrapper['generator'].step()\n        optim_wrapper['generator'].zero_grad()\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/aotgan/aot_neck.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass AOTBlockNeck(BaseModule):\n    \"\"\"Dilation backbone used in AOT-GAN model.\n\n    This implementation follows:\n    Aggregated Contextual Transformations for High-Resolution Image Inpainting\n\n    Args:\n        in_channels (int, optional): Channel number of input feature.\n            Default: 256.\n        dilation_rates (Tuple[int], optional): The dilation rates used\n        for AOT block. Default: (1, 2, 4, 8).\n        num_aotblock (int, optional): Number of AOT blocks. Default: 8.\n        act_cfg (dict, optional): Config dict for activation layer,\n            \"relu\" by default.\n        kwargs (keyword arguments).\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=256,\n                 dilation_rates=(1, 2, 4, 8),\n                 num_aotblock=8,\n                 act_cfg=dict(type='ReLU'),\n                 **kwargs):\n        super().__init__()\n\n        self.dilation_rates = list(dilation_rates)\n\n        self.model = nn.Sequential(*[(AOTBlock(\n            in_channels=in_channels,\n            dilation_rates=self.dilation_rates,\n            act_cfg=act_cfg,\n        )) for _ in range(0, num_aotblock)])\n\n    def forward(self, x):\n        x = self.model(x)\n        return x\n\n\nclass AOTBlock(BaseModule):\n    \"\"\"AOT Block which constitutes the dilation backbone.\n\n    This implementation follows:\n    Aggregated Contextual Transformations for High-Resolution Image Inpainting\n\n    The AOT Block adopts the split-transformation-merge strategy:\n    Splitting: A kernel with 256 output channels is split into four\n               64-channel sub-kernels.\n    Transforming: Each sub-kernel performs a different transformation with\n                  a different dilation rate.\n    Splitting: Sub-kernels with different receptive fields are merged.\n\n    Args:\n        in_channels (int, optional): Channel number of input feature.\n            Default: 256.\n        dilation_rates (Tuple[int]): The dilation rates used for AOT block.\n            Default (1, 2, 4, 8).\n        act_cfg (dict, optional): Config dict for activation layer,\n            \"relu\" by default.\n        kwargs (keyword arguments).\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=256,\n                 dilation_rates=(1, 2, 4, 8),\n                 act_cfg=dict(type='ReLU'),\n                 **kwargs):\n        super().__init__()\n        self.dilation_rates = dilation_rates\n        self.blocks = nn.ModuleList([\n            nn.Sequential(\n                nn.ReflectionPad2d(dilation_rate),\n                ConvModule(\n                    in_channels,\n                    in_channels // 4,\n                    kernel_size=3,\n                    dilation=dilation_rate,\n                    act_cfg=act_cfg)) for dilation_rate in self.dilation_rates\n        ])\n\n        self.fuse = nn.Sequential(\n            nn.ReflectionPad2d(1),\n            ConvModule(in_channels, in_channels, 3, dilation=1, act_cfg=None))\n\n        self.gate = nn.Sequential(\n            nn.ReflectionPad2d(1),\n            ConvModule(in_channels, in_channels, 3, dilation=1, act_cfg=None))\n\n    def normalize(self, x):\n        mean = x.mean((2, 3), keepdim=True)\n        std = x.std((2, 3), keepdim=True) + 1e-9\n        x = 2 * (x - mean) / std - 1\n        x = 5 * x\n        return x\n\n    def forward(self, x):\n\n        dilate_x = [\n            self.blocks[i](x) for i in range(0, len(self.dilation_rates))\n        ]\n        dilate_x = torch.cat(dilate_x, 1)\n        dilate_x = self.fuse(dilate_x)\n        mask = self.normalize(self.gate(x))\n        mask = torch.sigmoid(mask)\n        return x * (1 - mask) + dilate_x * mask\n"
  },
  {
    "path": "mmagic/models/editors/arcface/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .id_loss import IDLossModel\n\n__all__ = ['IDLossModel']\n"
  },
  {
    "path": "mmagic/models/editors/arcface/arcface_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom collections import namedtuple\n\nimport torch\nfrom torch.nn import (AdaptiveAvgPool2d, BatchNorm2d, Conv2d, MaxPool2d,\n                      Module, PReLU, ReLU, Sequential, Sigmoid)\n\n# yapf: disable\n\"\"\"\nArcFace implementation from [TreB1eN](https://github.com/TreB1eN/InsightFace_Pytorch) # isort:skip  # noqa\n\"\"\"\n# yapf: enable\n\n\nclass Flatten(Module):\n    \"\"\"Flatten Module.\"\"\"\n\n    def forward(self, input):\n        return input.view(input.size(0), -1)\n\n\ndef l2_norm(input, axis=1):\n    \"\"\"l2 normalization.\n\n    Args:\n        input (torch.Tensor): The input tensor.\n        axis (int, optional): Specifies which axis of input to calculate the\n            norm across. Defaults to 1.\n\n    Returns:\n        Tensor: Tensor after L2 normalization per-instance.\n    \"\"\"\n    norm = torch.norm(input, 2, axis, True)\n    output = torch.div(input, norm)\n    return output\n\n\nclass Bottleneck(namedtuple('Block', ['in_channel', 'depth', 'stride'])):\n    \"\"\"A named tuple describing a ResNet block.\"\"\"\n\n\ndef get_block(in_channel, depth, num_units, stride=2):\n    \"\"\"Get a single block config.\n\n    Args:\n        in_channel (int): Input channels.\n        depth (int): Output channels.\n        num_units (int): Number of unit modules.\n        stride (int, optional): Conv2d stride. Defaults to 2.\n\n    Returns:\n        list: A list of unit modules' config.\n    \"\"\"\n    return [Bottleneck(in_channel, depth, stride)\n            ] + [Bottleneck(depth, depth, 1) for i in range(num_units - 1)]\n\n\ndef get_blocks(num_layers):\n    \"\"\"Get block configs of backbone.\n\n    Args:\n        num_layers (int): Number of ConvBlock layers in backbone.\n\n    Raises:\n        ValueError: `num_layers` must be one of [50, 100, 152].\n\n    Returns:\n        list: A list of block configs.\n    \"\"\"\n    if num_layers == 50:\n        blocks = [\n            get_block(in_channel=64, depth=64, num_units=3),\n            get_block(in_channel=64, depth=128, num_units=4),\n            get_block(in_channel=128, depth=256, num_units=14),\n            get_block(in_channel=256, depth=512, num_units=3)\n        ]\n    elif num_layers == 100:\n        blocks = [\n            get_block(in_channel=64, depth=64, num_units=3),\n            get_block(in_channel=64, depth=128, num_units=13),\n            get_block(in_channel=128, depth=256, num_units=30),\n            get_block(in_channel=256, depth=512, num_units=3)\n        ]\n    elif num_layers == 152:\n        blocks = [\n            get_block(in_channel=64, depth=64, num_units=3),\n            get_block(in_channel=64, depth=128, num_units=8),\n            get_block(in_channel=128, depth=256, num_units=36),\n            get_block(in_channel=256, depth=512, num_units=3)\n        ]\n    else:\n        raise ValueError(\n            'Invalid number of layers: {}. Must be one of [50, 100, 152]'.\n            format(num_layers))\n    return blocks\n\n\nclass SEModule(Module):\n    \"\"\"Squeeze-and-Excitation Modules.\n\n    Args:\n        channels (int): Input channels.\n        reduction (int): Intermediate channels reduction ratio.\n    \"\"\"\n\n    def __init__(self, channels, reduction):\n        super(SEModule, self).__init__()\n        self.avg_pool = AdaptiveAvgPool2d(1)\n        self.fc1 = Conv2d(\n            channels,\n            channels // reduction,\n            kernel_size=1,\n            padding=0,\n            bias=False)\n        self.relu = ReLU(inplace=True)\n        self.fc2 = Conv2d(\n            channels // reduction,\n            channels,\n            kernel_size=1,\n            padding=0,\n            bias=False)\n        self.sigmoid = Sigmoid()\n\n    def forward(self, x):\n        \"\"\"Forward Function.\"\"\"\n        module_input = x\n        x = self.avg_pool(x)\n        x = self.fc1(x)\n        x = self.relu(x)\n        x = self.fc2(x)\n        x = self.sigmoid(x)\n        return module_input * x\n\n\nclass bottleneck_IR(Module):\n    \"\"\"Intermediate Resblock of bottleneck.\n\n    Args:\n        in_channel (int): Input channels.\n        depth (int): Output channels.\n        stride (int): Conv2d stride.\n    \"\"\"\n\n    def __init__(self, in_channel, depth, stride):\n        \"\"\"Intermediate Resblock of bottleneck.\n\n        Args:\n            in_channel (int): Input channels.\n            depth (int): Output channels.\n            stride (int): Conv2d stride.\n        \"\"\"\n        super(bottleneck_IR, self).__init__()\n        if in_channel == depth:\n            self.shortcut_layer = MaxPool2d(1, stride)\n        else:\n            self.shortcut_layer = Sequential(\n                Conv2d(in_channel, depth, (1, 1), stride, bias=False),\n                BatchNorm2d(depth))\n        self.res_layer = Sequential(\n            BatchNorm2d(in_channel),\n            Conv2d(in_channel, depth, (3, 3), (1, 1), 1, bias=False),\n            PReLU(depth), Conv2d(depth, depth, (3, 3), stride, 1, bias=False),\n            BatchNorm2d(depth))\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        shortcut = self.shortcut_layer(x)\n        res = self.res_layer(x)\n        return res + shortcut\n\n\nclass bottleneck_IR_SE(Module):\n    \"\"\"Intermediate Resblock of bottleneck with SEModule.\n\n    Args:\n        in_channel (int): Input channels.\n        depth (int): Output channels.\n        stride (int): Conv2d stride.\n    \"\"\"\n\n    def __init__(self, in_channel, depth, stride):\n        super(bottleneck_IR_SE, self).__init__()\n        if in_channel == depth:\n            self.shortcut_layer = MaxPool2d(1, stride)\n        else:\n            self.shortcut_layer = Sequential(\n                Conv2d(in_channel, depth, (1, 1), stride, bias=False),\n                BatchNorm2d(depth))\n        self.res_layer = Sequential(\n            BatchNorm2d(in_channel),\n            Conv2d(in_channel, depth, (3, 3), (1, 1), 1, bias=False),\n            PReLU(depth), Conv2d(depth, depth, (3, 3), stride, 1, bias=False),\n            BatchNorm2d(depth), SEModule(depth, 16))\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        shortcut = self.shortcut_layer(x)\n        res = self.res_layer(x)\n        return res + shortcut\n"
  },
  {
    "path": "mmagic/models/editors/arcface/id_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmengine\nimport torch\nfrom torch import nn\n\nfrom mmagic.registry import MODELS\nfrom .model_irse import Backbone\n\n\n@MODELS.register_module('ArcFace')\nclass IDLossModel(nn.Module):\n    \"\"\"Face id loss model.\n\n    Args:\n        ir_se50_weights (str, optional): Url of ir-se50 weights.\n            Defaults to None.\n    \"\"\"\n    # ir se50 weight download link\n    _ir_se50_url = 'https://download.openxlab.org.cn/models/rangoliu/Arcface-IR-SE50/weight/Arcface-IR-SE50'  # noqa\n\n    def __init__(self, ir_se50_weights=None):\n        super(IDLossModel, self).__init__()\n        mmengine.print_log('Loading ResNet ArcFace', 'current')\n        self.facenet = Backbone(\n            input_size=112, num_layers=50, drop_ratio=0.6, mode='ir_se')\n        if ir_se50_weights is None:\n            ir_se50_weights = self._ir_se50_url\n        self.facenet.load_state_dict(\n            torch.hub.load_state_dict_from_url(\n                ir_se50_weights, map_location='cpu'))\n        self.pool = torch.nn.AdaptiveAvgPool2d((256, 256))\n        self.face_pool = torch.nn.AdaptiveAvgPool2d((112, 112))\n        self.facenet = self.facenet.eval()\n\n    def extract_feats(self, x):\n        \"\"\"Extracting face features.\n\n        Args:\n            x (torch.Tensor): Image tensor of faces.\n\n        Returns:\n            torch.Tensor: Face features.\n        \"\"\"\n        if x.shape[2] != 256:\n            x = self.pool(x)\n        x = x[:, :, 35:223, 32:220]  # Crop interesting region\n        x = self.face_pool(x)\n        x_feats = self.facenet(x)\n        return x_feats\n\n    def forward(self, pred=None, gt=None):\n        \"\"\"Calculate face loss.\n\n        Args:\n            pred (torch.Tensor, optional): Predictions of face images.\n                Defaults to None.\n            gt (torch.Tensor, optional): Ground truth of face images.\n                Defaults to None.\n\n        Returns:\n            Tuple(float, float): A tuple contain face similarity loss and\n                improvement.\n        \"\"\"\n        n_samples = gt.shape[0]\n        y_feats = self.extract_feats(\n            gt)  # Otherwise use the feature from there\n        y_hat_feats = self.extract_feats(pred)\n        y_feats = y_feats.detach()\n        loss = 0\n        sim_improvement = 0\n        count = 0\n        for i in range(n_samples):\n            diff_target = y_hat_feats[i].dot(y_feats[i])\n            loss += 1 - diff_target\n            count += 1\n\n        return loss / count, sim_improvement / count\n"
  },
  {
    "path": "mmagic/models/editors/arcface/model_irse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom torch.nn import (BatchNorm1d, BatchNorm2d, Conv2d, Dropout, Linear,\n                      Module, PReLU, Sequential)\n\nfrom .arcface_modules import (Flatten, bottleneck_IR, bottleneck_IR_SE,\n                              get_blocks, l2_norm)\n\n# yapf: disable\n\"\"\"\nModified Backbone implementation from [TreB1eN](https://github.com/TreB1eN/InsightFace_Pytorch) # isort:skip  # noqa\n\"\"\"\n# yapf: enable\n\n\nclass Backbone(Module):\n    ''' Arcface backbone.\n    There are many repos follow this codes for facial recognition, and we also\n    follow this routine.\n    Ref: https://github.com/orpatashnik/StyleCLIP/blob/main/models/facial_recognition/helpers.py # noqa\n\n    Args:\n        input_size (int): Input size of image.\n        num_layers (int): Number of layer in backbone.\n        mode (str, optional): Bottle neck mode. If set to 'ir_se', then\n            SEModule will be applied. Defaults to 'ir'.\n        drop_ratio (float, optional): Drop out ratio. Defaults to 0.4.\n        affine (bool, optional): Whether use affine in BatchNorm1d.\n            Defaults to True.\n    '''\n\n    def __init__(self,\n                 input_size,\n                 num_layers,\n                 mode='ir',\n                 drop_ratio=0.4,\n                 affine=True):\n        super(Backbone, self).__init__()\n        assert input_size in [112, 224], 'input_size should be 112 or 224'\n        assert num_layers in [50, 100,\n                              152], 'num_layers should be 50, 100 or 152'\n        assert mode in ['ir', 'ir_se'], 'mode should be ir or ir_se'\n        blocks = get_blocks(num_layers)\n        if mode == 'ir':\n            unit_module = bottleneck_IR\n        elif mode == 'ir_se':\n            unit_module = bottleneck_IR_SE\n        self.input_layer = Sequential(\n            Conv2d(3, 64, (3, 3), 1, 1, bias=False), BatchNorm2d(64),\n            PReLU(64))\n        if input_size == 112:\n            self.output_layer = Sequential(\n                BatchNorm2d(512), Dropout(drop_ratio), Flatten(),\n                Linear(512 * 7 * 7, 512), BatchNorm1d(512, affine=affine))\n        else:\n            self.output_layer = Sequential(\n                BatchNorm2d(512), Dropout(drop_ratio), Flatten(),\n                Linear(512 * 14 * 14, 512), BatchNorm1d(512, affine=affine))\n\n        modules = []\n        for block in blocks:\n            for bottleneck in block:\n                modules.append(\n                    unit_module(bottleneck.in_channel, bottleneck.depth,\n                                bottleneck.stride))\n        self.body = Sequential(*modules)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        x = self.input_layer(x)\n        x = self.body(x)\n        x = self.output_layer(x)\n        return l2_norm(x)\n\n\ndef IR_50(input_size):\n    \"\"\"Constructs a ir-50 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=50, mode='ir', drop_ratio=0.4, affine=False)\n    return model\n\n\ndef IR_101(input_size):\n    \"\"\"Constructs a ir-101 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=100, mode='ir', drop_ratio=0.4, affine=False)\n    return model\n\n\ndef IR_152(input_size):\n    \"\"\"Constructs a ir-152 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=152, mode='ir', drop_ratio=0.4, affine=False)\n    return model\n\n\ndef IR_SE_50(input_size):\n    \"\"\"Constructs a ir_se-50 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=50, mode='ir_se', drop_ratio=0.4, affine=False)\n    return model\n\n\ndef IR_SE_101(input_size):\n    \"\"\"Constructs a ir_se-101 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=100, mode='ir_se', drop_ratio=0.4, affine=False)\n    return model\n\n\ndef IR_SE_152(input_size):\n    \"\"\"Constructs a ir_se-152 model.\"\"\"\n    model = Backbone(\n        input_size, num_layers=152, mode='ir_se', drop_ratio=0.4, affine=False)\n    return model\n"
  },
  {
    "path": "mmagic/models/editors/basicvsr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .basicvsr import BasicVSR\nfrom .basicvsr_net import BasicVSRNet\n\n__all__ = ['BasicVSR', 'BasicVSRNet']\n"
  },
  {
    "path": "mmagic/models/editors/basicvsr/basicvsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models import BaseEditModel\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass BasicVSR(BaseEditModel):\n    \"\"\"BasicVSR model for video super-resolution.\n\n    Note that this model is used for IconVSR.\n\n    Paper:\n        BasicVSR: The Search for Essential Components in Video Super-Resolution\n        and Beyond, CVPR, 2021\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        ensemble (dict): Config for ensemble. Default: None.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 ensemble=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n        super().__init__(\n            generator=generator,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        # fix pre-trained networks\n        self.fix_iter = train_cfg.get('fix_iter', 0) if train_cfg else 0\n        self.is_weight_fixed = False\n\n        # count training steps\n        self.register_buffer('step_counter', torch.zeros(1))\n\n        # ensemble\n        self.forward_ensemble = None\n        if ensemble is not None:\n            if ensemble['type'] == 'SpatialTemporalEnsemble':\n                from mmagic.models.archs import SpatialTemporalEnsemble\n                is_temporal = ensemble.get('is_temporal_ensemble', False)\n                self.forward_ensemble = SpatialTemporalEnsemble(is_temporal)\n            else:\n                raise NotImplementedError(\n                    'Currently support only '\n                    '\"SpatialTemporalEnsemble\", but got type '\n                    f'[{ensemble[\"type\"]}]')\n\n    def check_if_mirror_extended(self, lrs):\n        \"\"\"Check whether the input is a mirror-extended sequence.\n\n        If mirror-extended, the i-th (i=0, ..., t-1) frame is equal to the\n        (t-1-i)-th frame.\n\n        Args:\n            lrs (tensor): Input LR images with shape (n, t, c, h, w)\n        \"\"\"\n\n        is_mirror_extended = False\n        if lrs.size(1) % 2 == 0:\n            lrs_1, lrs_2 = torch.chunk(lrs, 2, dim=1)\n            if torch.norm(lrs_1 - lrs_2.flip(1)) == 0:\n                is_mirror_extended = True\n\n        return is_mirror_extended\n\n    def forward_train(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training. Returns dict of losses of training.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        # fix SPyNet and EDVR at the beginning\n        if self.step_counter < self.fix_iter:\n            if not self.is_weight_fixed:\n                self.is_weight_fixed = True\n                for k, v in self.generator.named_parameters():\n                    if 'spynet' in k or 'edvr' in k:\n                        v.requires_grad_(False)\n        elif self.step_counter == self.fix_iter:\n            # train all the parameters\n            self.generator.requires_grad_(True)\n\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        batch_gt_data = data_samples.gt_img\n\n        loss = self.pixel_loss(feats, batch_gt_data)\n        self.step_counter += 1\n\n        return dict(loss=loss)\n\n    def forward_inference(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward inference. Returns predictions of validation, testing.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            DataSample: predictions.\n        \"\"\"\n\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        # feats.shape = [b, t, c, h, w]\n        feats = self.data_preprocessor.destruct(feats, data_samples)\n\n        # If the GT is an image (i.e. the center frame), the output sequence is\n        # turned to an image.\n        gt = data_samples.gt_img[0]\n        if gt is not None and gt.data.ndim == 3:\n            t = feats.size(1)\n            if self.check_if_mirror_extended(inputs):\n                # with mirror extension\n                feats = 0.5 * (feats[:, t // 4] + feats[:, -1 - t // 4])\n            else:\n                # without mirror extension\n                feats = feats[:, t // 2]\n\n        # create a stacked data sample\n        predictions = DataSample(\n            pred_img=feats.cpu(), metainfo=data_samples.metainfo)\n\n        return predictions\n"
  },
  {
    "path": "mmagic/models/editors/basicvsr/basicvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom logging import WARNING\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine import MMLogger, print_log\nfrom mmengine.model import BaseModule\nfrom mmengine.runner import load_checkpoint\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import flow_warp, make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass BasicVSRNet(BaseModule):\n    \"\"\"BasicVSR network structure for video super-resolution.\n\n    Support only x4 upsampling.\n\n    Paper:\n        BasicVSR: The Search for Essential Components in Video Super-Resolution\n        and Beyond, CVPR, 2021\n\n    Args:\n        mid_channels (int): Channel number of the intermediate features.\n            Default: 64.\n        num_blocks (int): Number of residual blocks in each propagation branch.\n            Default: 30.\n        spynet_pretrained (str): Pre-trained model path of SPyNet.\n            Default: None.\n    \"\"\"\n\n    def __init__(self, mid_channels=64, num_blocks=30, spynet_pretrained=None):\n\n        super().__init__()\n\n        self.mid_channels = mid_channels\n\n        # optical flow network for feature alignment\n        self.spynet = SPyNet(pretrained=spynet_pretrained)\n\n        # propagation branches\n        self.backward_resblocks = ResidualBlocksWithInputConv(\n            mid_channels + 3, mid_channels, num_blocks)\n        self.forward_resblocks = ResidualBlocksWithInputConv(\n            mid_channels + 3, mid_channels, num_blocks)\n\n        # upsample\n        self.fusion = nn.Conv2d(\n            mid_channels * 2, mid_channels, 1, 1, 0, bias=True)\n        self.upsample1 = PixelShufflePack(\n            mid_channels, mid_channels, 2, upsample_kernel=3)\n        self.upsample2 = PixelShufflePack(\n            mid_channels, 64, 2, upsample_kernel=3)\n        self.conv_hr = nn.Conv2d(64, 64, 3, 1, 1)\n        self.conv_last = nn.Conv2d(64, 3, 3, 1, 1)\n        self.img_upsample = nn.Upsample(\n            scale_factor=4, mode='bilinear', align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        self._raised_warning = False\n\n    def check_if_mirror_extended(self, lrs):\n        \"\"\"Check whether the input is a mirror-extended sequence.\n\n        If mirror-extended, the i-th (i=0, ..., t-1) frame is equal to the\n        (t-1-i)-th frame.\n\n        Args:\n            lrs (tensor): Input LR images with shape (n, t, c, h, w)\n        \"\"\"\n\n        self.is_mirror_extended = False\n        if lrs.size(1) % 2 == 0:\n            lrs_1, lrs_2 = torch.chunk(lrs, 2, dim=1)\n            if torch.norm(lrs_1 - lrs_2.flip(1)) == 0:\n                self.is_mirror_extended = True\n\n    def compute_flow(self, lrs):\n        \"\"\"Compute optical flow using SPyNet for feature warping.\n\n        Note that if the input is an mirror-extended sequence, 'flows_forward'\n        is not needed, since it is equal to 'flows_backward.flip(1)'.\n\n        Args:\n            lrs (tensor): Input LR images with shape (n, t, c, h, w)\n\n        Return:\n            tuple(Tensor): Optical flow. 'flows_forward' corresponds to the\n                flows used for forward-time propagation (current to previous).\n                'flows_backward' corresponds to the flows used for\n                backward-time propagation (current to next).\n        \"\"\"\n\n        n, t, c, h, w = lrs.size()\n        lrs_1 = lrs[:, :-1, :, :, :].reshape(-1, c, h, w)\n        lrs_2 = lrs[:, 1:, :, :, :].reshape(-1, c, h, w)\n\n        flows_backward = self.spynet(lrs_1, lrs_2).view(n, t - 1, 2, h, w)\n\n        if self.is_mirror_extended:  # flows_forward = flows_backward.flip(1)\n            flows_forward = None\n        else:\n            flows_forward = self.spynet(lrs_2, lrs_1).view(n, t - 1, 2, h, w)\n\n        return flows_forward, flows_backward\n\n    def forward(self, lrs):\n        \"\"\"Forward function for BasicVSR.\n\n        Args:\n            lrs (Tensor): Input LR sequence with shape (n, t, c, h, w).\n\n        Returns:\n            Tensor: Output HR sequence with shape (n, t, c, 4h, 4w).\n        \"\"\"\n        n, t, c, h, w = lrs.size()\n        if (h < 64 or w < 64) and not self._raised_warning:\n            print_log(\n                f'{self.__class__.__name__} is designed for input '\n                'larger than 64x64, but the resolution of current image '\n                f'is {h}x{w}. We recommend you to check your input.',\n                'current', WARNING)\n            self._raised_warning = True\n\n        # check whether the input is an extended sequence\n        self.check_if_mirror_extended(lrs)\n\n        # compute optical flow\n        flows_forward, flows_backward = self.compute_flow(lrs)\n\n        # backward-time propagation\n        outputs = []\n        feat_prop = lrs.new_zeros(n, self.mid_channels, h, w)\n        for i in range(t - 1, -1, -1):\n            if i < t - 1:  # no warping required for the last timestep\n                flow = flows_backward[:, i, :, :, :]\n                feat_prop = flow_warp(feat_prop, flow.permute(0, 2, 3, 1))\n\n            feat_prop = torch.cat([lrs[:, i, :, :, :], feat_prop], dim=1)\n            feat_prop = self.backward_resblocks(feat_prop)\n\n            outputs.append(feat_prop)\n        outputs = outputs[::-1]\n\n        # forward-time propagation and upsampling\n        feat_prop = torch.zeros_like(feat_prop)\n        for i in range(0, t):\n            lr_curr = lrs[:, i, :, :, :]\n            if i > 0:  # no warping required for the first timestep\n                if flows_forward is not None:\n                    flow = flows_forward[:, i - 1, :, :, :]\n                else:\n                    flow = flows_backward[:, -i, :, :, :]\n                feat_prop = flow_warp(feat_prop, flow.permute(0, 2, 3, 1))\n\n            feat_prop = torch.cat([lr_curr, feat_prop], dim=1)\n            feat_prop = self.forward_resblocks(feat_prop)\n\n            # upsampling given the backward and forward features\n            out = torch.cat([outputs[i], feat_prop], dim=1)\n            out = self.lrelu(self.fusion(out))\n            out = self.lrelu(self.upsample1(out))\n            out = self.lrelu(self.upsample2(out))\n            out = self.lrelu(self.conv_hr(out))\n            out = self.conv_last(out)\n            base = self.img_upsample(lr_curr)\n            out += base\n            outputs[i] = out\n\n        return torch.stack(outputs, dim=1)\n\n\nclass ResidualBlocksWithInputConv(BaseModule):\n    \"\"\"Residual blocks with a convolution in front.\n\n    Args:\n        in_channels (int): Number of input channels of the first conv.\n        out_channels (int): Number of channels of the residual blocks.\n            Default: 64.\n        num_blocks (int): Number of residual blocks. Default: 30.\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels=64, num_blocks=30):\n        super().__init__()\n\n        main = []\n\n        # a convolution used to match the channels of the residual blocks\n        main.append(nn.Conv2d(in_channels, out_channels, 3, 1, 1, bias=True))\n        main.append(nn.LeakyReLU(negative_slope=0.1, inplace=True))\n\n        # residual blocks\n        main.append(\n            make_layer(\n                ResidualBlockNoBN, num_blocks, mid_channels=out_channels))\n\n        self.main = nn.Sequential(*main)\n\n    def forward(self, feat):\n        \"\"\"Forward function for ResidualBlocksWithInputConv.\n\n        Args:\n            feat (Tensor): Input feature with shape (n, in_channels, h, w)\n\n        Returns:\n            Tensor: Output feature with shape (n, out_channels, h, w)\n        \"\"\"\n        return self.main(feat)\n\n\nclass SPyNet(BaseModule):\n    \"\"\"SPyNet network structure.\n\n    The difference to the SPyNet in [tof.py] is that\n        1. more SPyNetBasicModule is used in this version, and\n        2. no batch normalization is used in this version.\n\n    Paper:\n        Optical Flow Estimation using a Spatial Pyramid Network, CVPR, 2017\n\n    Args:\n        pretrained (str): path for pre-trained SPyNet. Default: None.\n    \"\"\"\n\n    def __init__(self, pretrained):\n        super().__init__()\n\n        self.basic_module = nn.ModuleList(\n            [SPyNetBasicModule() for _ in range(6)])\n\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=True, logger=logger)\n        elif pretrained is not None:\n            raise TypeError('[pretrained] should be str or None, '\n                            f'but got {type(pretrained)}.')\n\n        self.register_buffer(\n            'mean',\n            torch.Tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1))\n        self.register_buffer(\n            'std',\n            torch.Tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1))\n\n    def compute_flow(self, ref, supp):\n        \"\"\"Compute flow from ref to supp.\n\n        Note that in this function, the images are already resized to a\n        multiple of 32.\n\n        Args:\n            ref (Tensor): Reference image with shape of (n, 3, h, w).\n            supp (Tensor): Supporting image with shape of (n, 3, h, w).\n\n        Returns:\n            Tensor: Estimated optical flow: (n, 2, h, w).\n        \"\"\"\n        n, _, h, w = ref.size()\n\n        # normalize the input images\n        ref = [(ref - self.mean) / self.std]\n        supp = [(supp - self.mean) / self.std]\n\n        # generate downsampled frames\n        for level in range(5):\n            ref.append(\n                F.avg_pool2d(\n                    input=ref[-1],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n            supp.append(\n                F.avg_pool2d(\n                    input=supp[-1],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n        ref = ref[::-1]\n        supp = supp[::-1]\n\n        # flow computation\n        flow = ref[0].new_zeros(n, 2, h // 32, w // 32)\n        for level in range(len(ref)):\n            if level == 0:\n                flow_up = flow\n            else:\n                flow_up = F.interpolate(\n                    input=flow,\n                    scale_factor=2,\n                    mode='bilinear',\n                    align_corners=True) * 2.0\n\n            # add the residue to the upsampled flow\n            flow = flow_up + self.basic_module[level](\n                torch.cat([\n                    ref[level],\n                    flow_warp(\n                        supp[level],\n                        flow_up.permute(0, 2, 3, 1),\n                        padding_mode='border'), flow_up\n                ], 1))\n\n        return flow\n\n    def forward(self, ref, supp):\n        \"\"\"Forward function of SPyNet.\n\n        This function computes the optical flow from ref to supp.\n\n        Args:\n            ref (Tensor): Reference image with shape of (n, 3, h, w).\n            supp (Tensor): Supporting image with shape of (n, 3, h, w).\n\n        Returns:\n            Tensor: Estimated optical flow: (n, 2, h, w).\n        \"\"\"\n\n        # upsize to a multiple of 32\n        h, w = ref.shape[2:4]\n        w_up = w if (w % 32) == 0 else 32 * (w // 32 + 1)\n        h_up = h if (h % 32) == 0 else 32 * (h // 32 + 1)\n        ref = F.interpolate(\n            input=ref, size=(h_up, w_up), mode='bilinear', align_corners=False)\n        supp = F.interpolate(\n            input=supp,\n            size=(h_up, w_up),\n            mode='bilinear',\n            align_corners=False)\n\n        # compute flow, and resize back to the original resolution\n        flow = F.interpolate(\n            input=self.compute_flow(ref, supp),\n            size=(h, w),\n            mode='bilinear',\n            align_corners=False)\n\n        # adjust the flow values\n        flow[:, 0, :, :] *= float(w) / float(w_up)\n        flow[:, 1, :, :] *= float(h) / float(h_up)\n\n        return flow\n\n\nclass SPyNetBasicModule(BaseModule):\n    \"\"\"Basic Module for SPyNet.\n\n    Paper:\n        Optical Flow Estimation using a Spatial Pyramid Network, CVPR, 2017\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n        self.basic_module = nn.Sequential(\n            ConvModule(\n                in_channels=8,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=64,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=64,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=16,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=16,\n                out_channels=2,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=None))\n\n    def forward(self, tensor_input):\n        \"\"\"\n        Args:\n            tensor_input (Tensor): Input tensor with shape (b, 8, h, w).\n                8 channels contain:\n                [reference image (3), neighbor image (3), initial flow (2)].\n\n        Returns:\n            Tensor: Refined flow with shape (b, 2, h, w)\n        \"\"\"\n        return self.basic_module(tensor_input)\n"
  },
  {
    "path": "mmagic/models/editors/basicvsr_plusplus_net/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .basicvsr_plusplus_net import BasicVSRPlusPlusNet\n\n__all__ = ['BasicVSRPlusPlusNet']\n"
  },
  {
    "path": "mmagic/models/editors/basicvsr_plusplus_net/basicvsr_plusplus_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.ops import ModulatedDeformConv2d, modulated_deform_conv2d\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init\n\nfrom mmagic.models.archs import PixelShufflePack\nfrom mmagic.models.utils import flow_warp\nfrom mmagic.registry import MODELS\nfrom ..basicvsr.basicvsr_net import ResidualBlocksWithInputConv, SPyNet\n\n\n@MODELS.register_module()\nclass BasicVSRPlusPlusNet(BaseModule):\n    \"\"\"BasicVSR++ network structure.\n\n    Support either x4 upsampling or same size output.\n\n    Paper:\n        BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation\n        and Alignment\n\n    Args:\n        mid_channels (int, optional): Channel number of the intermediate\n            features. Default: 64.\n        num_blocks (int, optional): The number of residual blocks in each\n            propagation branch. Default: 7.\n        max_residue_magnitude (int): The maximum magnitude of the offset\n            residue (Eq. 6 in paper). Default: 10.\n        is_low_res_input (bool, optional): Whether the input is low-resolution\n            or not. If False, the output resolution is equal to the input\n            resolution. Default: True.\n        spynet_pretrained (str, optional): Pre-trained model path of SPyNet.\n            Default: None.\n        cpu_cache_length (int, optional): When the length of sequence is larger\n            than this value, the intermediate features are sent to CPU. This\n            saves GPU memory, but slows down the inference speed. You can\n            increase this number if you have a GPU with large memory.\n            Default: 100.\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels=64,\n                 num_blocks=7,\n                 max_residue_magnitude=10,\n                 is_low_res_input=True,\n                 spynet_pretrained=None,\n                 cpu_cache_length=100):\n\n        super().__init__()\n        self.mid_channels = mid_channels\n        self.is_low_res_input = is_low_res_input\n        self.cpu_cache_length = cpu_cache_length\n\n        # optical flow\n        self.spynet = SPyNet(pretrained=spynet_pretrained)\n\n        # feature extraction module\n        if is_low_res_input:\n            self.feat_extract = ResidualBlocksWithInputConv(3, mid_channels, 5)\n        else:\n            self.feat_extract = nn.Sequential(\n                nn.Conv2d(3, mid_channels, 3, 2, 1),\n                nn.LeakyReLU(negative_slope=0.1, inplace=True),\n                nn.Conv2d(mid_channels, mid_channels, 3, 2, 1),\n                nn.LeakyReLU(negative_slope=0.1, inplace=True),\n                ResidualBlocksWithInputConv(mid_channels, mid_channels, 5))\n\n        # propagation branches\n        self.deform_align = nn.ModuleDict()\n        self.backbone = nn.ModuleDict()\n        modules = ['backward_1', 'forward_1', 'backward_2', 'forward_2']\n        for i, module in enumerate(modules):\n            self.deform_align[module] = SecondOrderDeformableAlignment(\n                2 * mid_channels,\n                mid_channels,\n                3,\n                padding=1,\n                deform_groups=16,\n                max_residue_magnitude=max_residue_magnitude)\n            self.backbone[module] = ResidualBlocksWithInputConv(\n                (2 + i) * mid_channels, mid_channels, num_blocks)\n\n        # upsampling module\n        self.reconstruction = ResidualBlocksWithInputConv(\n            5 * mid_channels, mid_channels, 5)\n        self.upsample1 = PixelShufflePack(\n            mid_channels, mid_channels, 2, upsample_kernel=3)\n        self.upsample2 = PixelShufflePack(\n            mid_channels, 64, 2, upsample_kernel=3)\n        self.conv_hr = nn.Conv2d(64, 64, 3, 1, 1)\n        self.conv_last = nn.Conv2d(64, 3, 3, 1, 1)\n        self.img_upsample = nn.Upsample(\n            scale_factor=4, mode='bilinear', align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n    def check_if_mirror_extended(self, lqs):\n        \"\"\"Check whether the input is a mirror-extended sequence.\n\n        If mirror-extended, the i-th (i=0, ..., t-1) frame is equal to the\n        (t-1-i)-th frame.\n\n        Args:\n            lqs (tensor): Input low quality (LQ) sequence with\n                shape (n, t, c, h, w).\n        \"\"\"\n\n        # check if the sequence is augmented by flipping\n        self.is_mirror_extended = False\n        if lqs.size(1) % 2 == 0:\n            lqs_1, lqs_2 = torch.chunk(lqs, 2, dim=1)\n            if torch.norm(lqs_1 - lqs_2.flip(1)) == 0:\n                self.is_mirror_extended = True\n\n    def compute_flow(self, lqs):\n        \"\"\"Compute optical flow using SPyNet for feature alignment.\n\n        Note that if the input is an mirror-extended sequence, 'flows_forward'\n        is not needed, since it is equal to 'flows_backward.flip(1)'.\n\n        Args:\n            lqs (tensor): Input low quality (LQ) sequence with\n                shape (n, t, c, h, w).\n\n        Return:\n            tuple(Tensor): Optical flow. 'flows_forward' corresponds to the\n                flows used for forward-time propagation (current to previous).\n                'flows_backward' corresponds to the flows used for\n                backward-time propagation (current to next).\n        \"\"\"\n\n        n, t, c, h, w = lqs.size()\n        lqs_1 = lqs[:, :-1, :, :, :].reshape(-1, c, h, w)\n        lqs_2 = lqs[:, 1:, :, :, :].reshape(-1, c, h, w)\n\n        flows_backward = self.spynet(lqs_1, lqs_2).view(n, t - 1, 2, h, w)\n\n        if self.is_mirror_extended:  # flows_forward = flows_backward.flip(1)\n            flows_forward = None\n        else:\n            flows_forward = self.spynet(lqs_2, lqs_1).view(n, t - 1, 2, h, w)\n\n        if self.cpu_cache:\n            flows_backward = flows_backward.cpu()\n            flows_forward = flows_forward.cpu()\n\n        return flows_forward, flows_backward\n\n    def propagate(self, feats, flows, module_name):\n        \"\"\"Propagate the latent features throughout the sequence.\n\n        Args:\n            feats dict(list[tensor]): Features from previous branches. Each\n                component is a list of tensors with shape (n, c, h, w).\n            flows (tensor): Optical flows with shape (n, t - 1, 2, h, w).\n            module_name (str): The name of the propagation branches. Can either\n                be 'backward_1', 'forward_1', 'backward_2', 'forward_2'.\n\n        Return:\n            dict(list[tensor]): A dictionary containing all the propagated\n                features. Each key in the dictionary corresponds to a\n                propagation branch, which is represented by a list of tensors.\n        \"\"\"\n\n        n, t, _, h, w = flows.size()\n\n        # PyTorch 2.0 could not compile data type of 'range'\n        # frame_idx = range(0, t + 1)\n        # flow_idx = range(-1, t)\n        frame_idx = list(range(0, t + 1))\n        flow_idx = list(range(-1, t))\n        mapping_idx = list(range(0, len(feats['spatial'])))\n        mapping_idx += mapping_idx[::-1]\n\n        if 'backward' in module_name:\n            frame_idx = frame_idx[::-1]\n            flow_idx = frame_idx\n\n        feat_prop = flows.new_zeros(n, self.mid_channels, h, w)\n        for i, idx in enumerate(frame_idx):\n            feat_current = feats['spatial'][mapping_idx[idx]]\n            if self.cpu_cache:\n                feat_current = feat_current.cuda()\n                feat_prop = feat_prop.cuda()\n            # second-order deformable alignment\n            if i > 0:\n                flow_n1 = flows[:, flow_idx[i], :, :, :]\n                if self.cpu_cache:\n                    flow_n1 = flow_n1.cuda()\n\n                cond_n1 = flow_warp(feat_prop, flow_n1.permute(0, 2, 3, 1))\n\n                # initialize second-order features\n                feat_n2 = torch.zeros_like(feat_prop)\n                flow_n2 = torch.zeros_like(flow_n1)\n                cond_n2 = torch.zeros_like(cond_n1)\n\n                if i > 1:  # second-order features\n                    feat_n2 = feats[module_name][-2]\n                    if self.cpu_cache:\n                        feat_n2 = feat_n2.cuda()\n\n                    flow_n2 = flows[:, flow_idx[i - 1], :, :, :]\n                    if self.cpu_cache:\n                        flow_n2 = flow_n2.cuda()\n\n                    flow_n2 = flow_n1 + flow_warp(flow_n2,\n                                                  flow_n1.permute(0, 2, 3, 1))\n                    cond_n2 = flow_warp(feat_n2, flow_n2.permute(0, 2, 3, 1))\n\n                # flow-guided deformable convolution\n                cond = torch.cat([cond_n1, feat_current, cond_n2], dim=1)\n                feat_prop = torch.cat([feat_prop, feat_n2], dim=1)\n                feat_prop = self.deform_align[module_name](feat_prop, cond,\n                                                           flow_n1, flow_n2)\n\n            # concatenate and residual blocks\n            feat = [feat_current] + [\n                feats[k][idx]\n                for k in feats if k not in ['spatial', module_name]\n            ] + [feat_prop]\n            if self.cpu_cache:\n                feat = [f.cuda() for f in feat]\n\n            feat = torch.cat(feat, dim=1)\n            feat_prop = feat_prop + self.backbone[module_name](feat)\n            feats[module_name].append(feat_prop)\n\n            if self.cpu_cache:\n                feats[module_name][-1] = feats[module_name][-1].cpu()\n                torch.cuda.empty_cache()\n\n        if 'backward' in module_name:\n            feats[module_name] = feats[module_name][::-1]\n\n        return feats\n\n    def upsample(self, lqs, feats):\n        \"\"\"Compute the output image given the features.\n\n        Args:\n            lqs (tensor): Input low quality (LQ) sequence with\n                shape (n, t, c, h, w).\n            feats (dict): The features from the propagation branches.\n\n        Returns:\n            Tensor: Output HR sequence with shape (n, t, c, 4h, 4w).\n        \"\"\"\n\n        outputs = []\n        num_outputs = len(feats['spatial'])\n\n        mapping_idx = list(range(0, num_outputs))\n        mapping_idx += mapping_idx[::-1]\n\n        for i in range(0, lqs.size(1)):\n            hr = [feats[k].pop(0) for k in feats if k != 'spatial']\n            hr.insert(0, feats['spatial'][mapping_idx[i]])\n            hr = torch.cat(hr, dim=1)\n            if self.cpu_cache:\n                hr = hr.cuda()\n\n            hr = self.reconstruction(hr)\n            hr = self.lrelu(self.upsample1(hr))\n            hr = self.lrelu(self.upsample2(hr))\n            hr = self.lrelu(self.conv_hr(hr))\n            hr = self.conv_last(hr)\n            if self.is_low_res_input:\n                hr += self.img_upsample(lqs[:, i, :, :, :])\n            else:\n                hr += lqs[:, i, :, :, :]\n\n            if self.cpu_cache:\n                hr = hr.cpu()\n                torch.cuda.empty_cache()\n\n            outputs.append(hr)\n\n        return torch.stack(outputs, dim=1)\n\n    def forward(self, lqs):\n        \"\"\"Forward function for BasicVSR++.\n\n        Args:\n            lqs (tensor): Input low quality (LQ) sequence with\n                shape (n, t, c, h, w).\n\n        Returns:\n            Tensor: Output HR sequence with shape (n, t, c, 4h, 4w).\n        \"\"\"\n\n        n, t, c, h, w = lqs.size()\n\n        # whether to cache the features in CPU (no effect if using CPU)\n        if t > self.cpu_cache_length and lqs.is_cuda:\n            self.cpu_cache = True\n        else:\n            self.cpu_cache = False\n\n        if self.is_low_res_input:\n            lqs_downsample = lqs.clone()\n        else:\n            lqs_downsample = F.interpolate(\n                lqs.view(-1, c, h, w), scale_factor=0.25,\n                mode='bicubic').view(n, t, c, h // 4, w // 4)\n\n        # check whether the input is an extended sequence\n        self.check_if_mirror_extended(lqs)\n\n        feats = {}\n        # compute spatial features\n        if self.cpu_cache:\n            feats['spatial'] = []\n            for i in range(0, t):\n                feat = self.feat_extract(lqs[:, i, :, :, :]).cpu()\n                feats['spatial'].append(feat)\n                torch.cuda.empty_cache()\n        else:\n            feats_ = self.feat_extract(lqs.view(-1, c, h, w))\n            h, w = feats_.shape[2:]\n            feats_ = feats_.view(n, t, -1, h, w)\n            feats['spatial'] = [feats_[:, i, :, :, :] for i in range(0, t)]\n\n        # compute optical flow using the low-res inputs\n        assert lqs_downsample.size(3) >= 64 and lqs_downsample.size(4) >= 64, (\n            'The height and width of low-res inputs must be at least 64, '\n            f'but got {h} and {w}.')\n        flows_forward, flows_backward = self.compute_flow(lqs_downsample)\n\n        # feature propagation\n        for iter_ in [1, 2]:\n            for direction in ['backward', 'forward']:\n                module = f'{direction}_{iter_}'\n\n                feats[module] = []\n\n                if direction == 'backward':\n                    flows = flows_backward\n                elif flows_forward is not None:\n                    flows = flows_forward\n                else:\n                    flows = flows_backward.flip(1)\n\n                feats = self.propagate(feats, flows, module)\n                if self.cpu_cache:\n                    del flows\n                    torch.cuda.empty_cache()\n\n        return self.upsample(lqs, feats)\n\n\nclass SecondOrderDeformableAlignment(ModulatedDeformConv2d):\n    \"\"\"Second-order deformable alignment module.\n\n    Args:\n        in_channels (int): Same as nn.Conv2d.\n        out_channels (int): Same as nn.Conv2d.\n        kernel_size (int or tuple[int]): Same as nn.Conv2d.\n        stride (int or tuple[int]): Same as nn.Conv2d.\n        padding (int or tuple[int]): Same as nn.Conv2d.\n        dilation (int or tuple[int]): Same as nn.Conv2d.\n        groups (int): Same as nn.Conv2d.\n        bias (bool or str): If specified as `auto`, it will be decided by the\n            norm_cfg. Bias will be set as True if norm_cfg is None, otherwise\n            False.\n        max_residue_magnitude (int): The maximum magnitude of the offset\n            residue (Eq. 6 in paper). Default: 10.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        self.max_residue_magnitude = kwargs.pop('max_residue_magnitude', 10)\n\n        super(SecondOrderDeformableAlignment, self).__init__(*args, **kwargs)\n\n        self.conv_offset = nn.Sequential(\n            nn.Conv2d(3 * self.out_channels + 4, self.out_channels, 3, 1, 1),\n            nn.LeakyReLU(negative_slope=0.1, inplace=True),\n            nn.Conv2d(self.out_channels, self.out_channels, 3, 1, 1),\n            nn.LeakyReLU(negative_slope=0.1, inplace=True),\n            nn.Conv2d(self.out_channels, self.out_channels, 3, 1, 1),\n            nn.LeakyReLU(negative_slope=0.1, inplace=True),\n            nn.Conv2d(self.out_channels, 27 * self.deform_groups, 3, 1, 1),\n        )\n\n        self.init_offset()\n\n    def init_offset(self):\n        \"\"\"Init constant offset.\"\"\"\n        constant_init(self.conv_offset[-1], val=0, bias=0)\n\n    def forward(self, x, extra_feat, flow_1, flow_2):\n        \"\"\"Forward function.\"\"\"\n        extra_feat = torch.cat([extra_feat, flow_1, flow_2], dim=1)\n        out = self.conv_offset(extra_feat)\n        o1, o2, mask = torch.chunk(out, 3, dim=1)\n\n        # offset\n        offset = self.max_residue_magnitude * torch.tanh(\n            torch.cat((o1, o2), dim=1))\n        offset_1, offset_2 = torch.chunk(offset, 2, dim=1)\n        offset_1 = offset_1 + flow_1.flip(1).repeat(1,\n                                                    offset_1.size(1) // 2, 1,\n                                                    1)\n        offset_2 = offset_2 + flow_2.flip(1).repeat(1,\n                                                    offset_2.size(1) // 2, 1,\n                                                    1)\n        offset = torch.cat([offset_1, offset_2], dim=1)\n\n        # mask\n        mask = torch.sigmoid(mask)\n\n        return modulated_deform_conv2d(x, offset, mask, self.weight, self.bias,\n                                       self.stride, self.padding,\n                                       self.dilation, self.groups,\n                                       self.deform_groups)\n"
  },
  {
    "path": "mmagic/models/editors/biggan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .biggan import BigGAN\nfrom .biggan_deep_discriminator import BigGANDeepDiscriminator\nfrom .biggan_deep_generator import BigGANDeepGenerator\nfrom .biggan_discriminator import BigGANDiscriminator\nfrom .biggan_generator import BigGANGenerator\n# from .generator_discriminator import BigGANDiscriminator, BigGANGenerator\nfrom .biggan_modules import (BigGANConditionBN, BigGANDeepDiscResBlock,\n                             BigGANDeepGenResBlock, BigGANDiscResBlock,\n                             BigGANGenResBlock, SelfAttentionBlock,\n                             SNConvModule)\n\n__all__ = [\n    'BigGAN',\n    'BigGANGenerator',\n    'BigGANDiscriminator',\n    'BigGANGenResBlock',\n    'BigGANConditionBN',\n    'SelfAttentionBlock',\n    'BigGANDiscResBlock',\n    'BigGANDeepDiscriminator',\n    'BigGANDeepGenerator',\n    'BigGANDeepDiscResBlock',\n    'BigGANDeepGenResBlock',\n    'SNConvModule',\n]\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseConditionalGAN\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module()\nclass BigGAN(BaseConditionalGAN):\n    \"\"\"Implementation of `Large Scale GAN Training for High Fidelity Natural\n    Image Synthesis <https://arxiv.org/abs/1809.11096>`_ (BigGAN).\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.biggan.BigGANGenerator`\n    and\n    :class:`~mmagic.models.editors.biggan.BigGANDiscriminator`\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): Number of times the generator was completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): Number of times the discriminator was\n            completely updated before the generator is updated. Defaults to 1.\n        noise_size (Optional[int]): Size of the input noise vector.\n            Default to 128.\n        num_classes (Optional[int]): The number classes you would like to\n            generate. Defaults to None.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 noise_size: Optional[int] = None,\n                 num_classes: Optional[int] = None,\n                 ema_config: Optional[Dict] = None):\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, noise_size,\n                         num_classes, ema_config)\n\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. BigGAN use hinge loss to train\n        the discriminator.\n\n        .. math:\n            L_{D} = -\\mathbb{E}_{\\left(x, y\\right)\\sim{p}_{data}}\n                \\left[\\min\\left(0, -1 + D\\left(x, y\\right)\\right)\\right]\n                -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\\left[\\min\n                \\left(0, -1 - D\\left(G\\left(z\\right), y\\right)\\right)\\right]\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.relu(1 + disc_pred_fake).mean()\n        losses_dict['loss_disc_real'] = F.relu(1 - disc_pred_real).mean()\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake):\n        r\"\"\"Get disc loss. BigGAN use hinge loss to train\n        the generator.\n\n        .. math:\n            L_{G} = -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\n                D\\left(G\\left(z\\right), y\\right)\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n        real_labels = self.data_sample_to_label(data_samples)\n        assert real_labels is not None, (\n            'Cannot found \\'gt_label\\' in \\'data_sample\\'.')\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise=noise_batch, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n        disc_pred_real = self.discriminator(real_imgs, label=real_labels)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        fake_imgs = self.generator(\n            noise=noise, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_deep_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport mmengine\nimport torch\nimport torch.nn as nn\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import normal_init, xavier_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\nfrom .biggan_modules import SelfAttentionBlock, SNConvModule\nfrom .biggan_snmodule import SNEmbedding, SNLinear\n\n\n@MODELS.register_module()\nclass BigGANDeepDiscriminator(nn.Module):\n    \"\"\"BigGAN-Deep Discriminator. The implementation refers to\n    https://github.com/ajbrock/BigGAN-PyTorch/blob/master/BigGANdeep.py # noqa.\n\n    The overall structure of BigGAN's discriminator is the same with\n    the projection discriminator.\n\n    The main difference between BigGAN and BigGAN-deep is that\n    BigGAN-deep use more deeper residual blocks to construct the whole\n    model.\n\n    More details can be found in: Large Scale GAN Training for High Fidelity\n    Natural Image Synthesis (ICLR2019).\n\n    The design of the model structure is highly corresponding to the output\n    resolution. For origin BigGAN-Deep's generator, you can set ``output_scale``\n    as you need and use the default value of ``arch_cfg`` and ``blocks_cfg``.\n    If you want to customize the model, you can set the arguments in this way:\n\n    ``arch_cfg``: Config for the architecture of this generator. You can refer\n    the ``_default_arch_cfgs`` in the ``_get_default_arch_cfg`` function to see\n    the format of the ``arch_cfg``. Basically, you need to provide information\n    of each block such as the numbers of input and output channels, whether to\n    perform upsampling etc.\n\n    ``blocks_cfg``: Config for the convolution block. You can adjust block params\n    like ``channel_ratio`` here. You can also replace the block type\n    to your registered customized block. However, you should notice that some\n    params are shared between these blocks like ``act_cfg``, ``with_spectral_norm``,\n    ``sn_eps`` etc.\n\n    Args:\n        input_scale (int): The scale of the input image.\n        num_classes (int, optional): The number of conditional classes.\n            Defaults to 0.\n        in_channels (int, optional): The channel number of the input image.\n            Defaults to 3.\n        out_channels (int, optional): The channel number of the final output.\n            Defaults to 1.\n        base_channels (int, optional): The basic channel number of the\n            discriminator. The other layers contains channels based on this\n            number. Defaults to 96.\n        block_depth (int, optional): The repeat times of Residual Blocks in\n            each level of architecture. Defaults to 2.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        init_type (str, optional): The name of an initialization method:\n            ortho | N02 | xavier. Defaults to 'ortho'.\n        act_cfg (dict, optional): Config for the activation layer.\n            Defaults to dict(type='ReLU').\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        blocks_cfg (dict, optional): Config for the convolution block.\n            Defaults to dict(type='BigGANDiscResBlock').\n        arch_cfg (dict, optional): Config for the architecture of this\n            discriminator. Defaults to None.\n        pretrained (str | dict, optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 input_scale,\n                 num_classes=0,\n                 in_channels=3,\n                 out_channels=1,\n                 base_channels=96,\n                 block_depth=2,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 init_type='ortho',\n                 act_cfg=dict(type='ReLU', inplace=False),\n                 with_spectral_norm=True,\n                 blocks_cfg=dict(type='BigGANDeepDiscResBlock'),\n                 arch_cfg=None,\n                 pretrained=None):\n        super().__init__()\n        self.num_classes = num_classes\n        self.out_channels = out_channels\n        self.input_scale = input_scale\n        self.in_channels = in_channels\n        self.base_channels = base_channels\n        self.block_depth = block_depth\n        self.arch = arch_cfg if arch_cfg else self._get_default_arch_cfg(\n            self.input_scale, self.base_channels)\n        self.blocks_cfg = deepcopy(blocks_cfg)\n        self.blocks_cfg.update(\n            dict(\n                act_cfg=act_cfg,\n                sn_eps=sn_eps,\n                sn_style=sn_style,\n                with_spectral_norm=with_spectral_norm))\n\n        self.input_conv = SNConvModule(\n            3,\n            self.arch['in_channels'][0],\n            kernel_size=3,\n            padding=1,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            act_cfg=None)\n\n        self.conv_blocks = nn.ModuleList()\n        for index, out_ch in enumerate(self.arch['out_channels']):\n            for depth in range(self.block_depth):\n                # change args to adapt to current block\n                block_cfg_ = deepcopy(self.blocks_cfg)\n                block_cfg_.update(\n                    dict(\n                        in_channels=self.arch['in_channels'][index]\n                        if depth == 0 else out_ch,\n                        out_channels=out_ch,\n                        with_downsample=self.arch['downsample'][index]\n                        and depth == 0))\n                self.conv_blocks.append(MODELS.build(block_cfg_))\n            if self.arch['attention'][index]:\n                self.conv_blocks.append(\n                    SelfAttentionBlock(\n                        out_ch,\n                        with_spectral_norm=with_spectral_norm,\n                        sn_eps=sn_eps,\n                        sn_style=sn_style))\n\n        self.activate = MODELS.build(act_cfg)\n\n        self.decision = nn.Linear(self.arch['out_channels'][-1], out_channels)\n        if with_spectral_norm:\n            if sn_style == 'torch':\n                self.decision = spectral_norm(self.decision, eps=sn_eps)\n            elif sn_style == 'ajbrock':\n                self.decision = SNLinear(\n                    self.arch['out_channels'][-1], out_channels, eps=sn_eps)\n            else:\n                raise NotImplementedError(\n                    f'{sn_style} style SN is not supported yet')\n\n        if self.num_classes > 0:\n            self.proj_y = nn.Embedding(self.num_classes,\n                                       self.arch['out_channels'][-1])\n            if with_spectral_norm:\n                if sn_style == 'torch':\n                    self.proj_y = spectral_norm(self.proj_y, eps=sn_eps)\n                elif sn_style == 'ajbrock':\n                    self.proj_y = SNEmbedding(\n                        self.num_classes,\n                        self.arch['out_channels'][-1],\n                        eps=sn_eps)\n                else:\n                    raise NotImplementedError(\n                        f'{sn_style} style SN is not supported yet')\n\n        self.init_weights(pretrained=pretrained, init_type=init_type)\n\n    def _get_default_arch_cfg(self, input_scale, base_channels):\n        assert input_scale in [32, 64, 128, 256, 512]\n        _default_arch_cfgs = {\n            '32': {\n                'in_channels': [base_channels * item for item in [4, 4, 4]],\n                'out_channels': [base_channels * item for item in [4, 4, 4]],\n                'downsample': [True, True, False, False],\n                'resolution': [16, 8, 8, 8],\n                'attention': [False, False, False, False]\n            },\n            '64': {\n                'in_channels': [base_channels * item for item in [1, 2, 4, 8]],\n                'out_channels':\n                [base_channels * item for item in [2, 4, 8, 16]],\n                'downsample': [True] * 4 + [False],\n                'resolution': [32, 16, 8, 4, 4],\n                'attention': [False, False, False, False, False]\n            },\n            '128': {\n                'in_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [2, 4, 8, 16, 16]],\n                'downsample': [True] * 5 + [False],\n                'resolution': [64, 32, 16, 8, 4, 4],\n                'attention': [True, False, False, False, False, False]\n            },\n            '256': {\n                'in_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [2, 4, 8, 8, 16, 16]],\n                'downsample': [True] * 6 + [False],\n                'resolution': [128, 64, 32, 16, 8, 4, 4],\n                'attention': [False, True, False, False, False, False]\n            },\n            '512': {\n                'in_channels':\n                [base_channels * item for item in [1, 1, 2, 4, 8, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 8, 16, 16]],\n                'downsample': [True] * 7 + [False],\n                'resolution': [256, 128, 64, 32, 16, 8, 4, 4],\n                'attention': [False, False, False, True, False, False, False]\n            }\n        }\n\n        return _default_arch_cfgs[str(input_scale)]\n\n    def forward(self, x, label=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n            label (torch.Tensor | None): Label Tensor. Defaults to None.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image with\n                given label.\n        \"\"\"\n        x0 = self.input_conv(x)\n        for conv_block in self.conv_blocks:\n            x0 = conv_block(x0)\n        x0 = self.activate(x0)\n        x0 = torch.sum(x0, dim=[2, 3])\n        out = self.decision(x0)\n\n        if self.num_classes > 0:\n            w_y = self.proj_y(label)\n            out = out + torch.sum(w_y * x0, dim=1, keepdim=True)\n        return out\n\n    def init_weights(self, pretrained=None, init_type='ortho'):\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str | dict, optional): Path for the pretrained model or\n                dict containing information for pretrained models whose\n                necessary key is 'ckpt_path'. Besides, you can also provide\n                'prefix' to load the generator part from the whole state dict.\n                Defaults to None.\n            init_type (str, optional): The name of an initialization method:\n                ortho | N02 | xavier. Defaults to 'ortho'.\n        \"\"\"\n\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif isinstance(pretrained, dict):\n            ckpt_path = pretrained.get('ckpt_path', None)\n            assert ckpt_path is not None\n            prefix = pretrained.get('prefix', '')\n            map_location = pretrained.get('map_location', 'cpu')\n            strict = pretrained.get('strict', True)\n            state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                      map_location)\n            self.load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained model from {ckpt_path}')\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                    if init_type == 'ortho':\n                        nn.init.orthogonal_(m.weight)\n                    elif init_type == 'N02':\n                        normal_init(m, 0.0, 0.02)\n                    elif init_type == 'xavier':\n                        xavier_init(m)\n                    else:\n                        raise NotImplementedError(\n                            f'{init_type} initialization \\\n                            not supported now.')\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_deep_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport mmengine\nimport torch\nimport torch.nn as nn\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import normal_init, xavier_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom .biggan_modules import SelfAttentionBlock, SNConvModule\nfrom .biggan_snmodule import SNLinear\n\n\n@MODELS.register_module()\nclass BigGANDeepGenerator(nn.Module):\n    \"\"\"BigGAN-Deep Generator. The implementation refers to\n    https://github.com/ajbrock/BigGAN-PyTorch/blob/master/BigGANdeep.py # noqa.\n\n    In BigGAN, we use a SAGAN-based architecture composing of an\n    self-attention block and number of convolutional residual blocks\n    with spectral normalization. BigGAN-deep follow the same architecture.\n\n    The main difference between BigGAN and BigGAN-deep is that\n    BigGAN-deep uses deeper residual blocks to construct the whole\n    model.\n\n    More details can be found in: Large Scale GAN Training for High Fidelity\n    Natural Image Synthesis (ICLR2019).\n\n    The design of the model structure is highly corresponding to the output\n    resolution. For the original BigGAN-Deep's generator, you can set ``output_scale``\n    as you need and use the default value of ``arch_cfg`` and ``blocks_cfg``.\n    If you want to customize the model, you can set the arguments in this way:\n\n    ``arch_cfg``: Config for the architecture of this generator. You can refer\n    the ``_default_arch_cfgs`` in the ``_get_default_arch_cfg`` function to see\n    the format of the ``arch_cfg``. Basically, you need to provide information\n    of each block such as the numbers of input and output channels, whether to\n    perform upsampling, etc.\n\n    ``blocks_cfg``: Config for the convolution block. You can adjust block params\n    like ``channel_ratio`` here. You can also replace the block type\n    to your registered customized block. However, you should notice that some\n    params are shared among these blocks like ``act_cfg``, ``with_spectral_norm``,\n    ``sn_eps``, etc.\n\n    Args:\n        output_scale (int): Output scale for the generated image.\n        noise_size (int, optional): Size of the input noise vector. Defaults\n            to 120.\n        num_classes (int, optional): The number of conditional classes. If set\n            to 0, this model will be degraded to an unconditional model.\n            Defaults to 0.\n        out_channels (int, optional): Number of channels in output images.\n            Defaults to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Defaults to 96.\n        block_depth (int, optional): The repeat times of Residual Blocks in\n            each level of architecture. Defaults to 2.\n        input_scale (int, optional): The scale of the input 2D feature map.\n            Defaults to 4.\n        with_shared_embedding (bool, optional): Whether to use shared\n            embedding. Defaults to True.\n        shared_dim (int, optional): The output channels of shared embedding.\n            Defaults to 128.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        init_type (str, optional): The name of an initialization method:\n            ortho | N02 | xavier. Defaults to 'ortho'.\n        concat_noise (bool, optional): Whether to concat input noise vector\n            with class vector. Defaults to True.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to dict(type='nearest', scale_factor=2).\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        auto_sync_bn (bool, optional): Whether to use synchronized batch\n            normalization. Defaults to True.\n        blocks_cfg (dict, optional): Config for the convolution block. Defaults\n            to dict(type='BigGANGenResBlock').\n        arch_cfg (dict, optional): Config for the architecture of this\n            generator. Defaults to None.\n        out_norm_cfg (dict, optional): Config for the norm of output layer.\n            Defaults to dict(type='BN').\n        pretrained (str | dict, optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict. Defaults to None.\n        rgb2bgr (bool, optional): Whether to reformat the output channels\n                with order `bgr`. We provide several pre-trained BigGAN-Deep\n                weights whose output channels order is `rgb`. You can set\n                this argument to True to use the weights.\n    \"\"\"\n\n    def __init__(self,\n                 output_scale,\n                 noise_size=120,\n                 num_classes=0,\n                 out_channels=3,\n                 base_channels=96,\n                 block_depth=2,\n                 input_scale=4,\n                 with_shared_embedding=True,\n                 shared_dim=128,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 init_type='ortho',\n                 concat_noise=True,\n                 act_cfg=dict(type='ReLU', inplace=False),\n                 upsample_cfg=dict(type='nearest', scale_factor=2),\n                 with_spectral_norm=True,\n                 auto_sync_bn=True,\n                 blocks_cfg=dict(type='BigGANDeepGenResBlock'),\n                 arch_cfg=None,\n                 out_norm_cfg=dict(type='BN'),\n                 pretrained=None,\n                 rgb2bgr=False):\n        super().__init__()\n        self.noise_size = noise_size\n        self.num_classes = num_classes\n        self.shared_dim = shared_dim\n        self.with_shared_embedding = with_shared_embedding\n        self.output_scale = output_scale\n        self.arch = arch_cfg if arch_cfg else self._get_default_arch_cfg(\n            self.output_scale, base_channels)\n        self.input_scale = input_scale\n        self.concat_noise = concat_noise\n        self.blocks_cfg = deepcopy(blocks_cfg)\n        self.upsample_cfg = deepcopy(upsample_cfg)\n        self.block_depth = block_depth\n        self.rgb2bgr = rgb2bgr\n        self.sn_style = sn_style\n\n        # Validity Check\n        # If 'num_classes' equals to zero, we shall set 'with_shared_embedding'\n        # to False.\n        if num_classes == 0:\n            assert not self.with_shared_embedding\n            assert not self.concat_noise\n        elif not self.with_shared_embedding:\n            # If not `with_shared_embedding`, we will use `nn.Embedding` to\n            # replace the original `Linear` layer in conditional BN.\n            # Meanwhile, we do not adopt split noises.\n            assert not self.concat_noise\n\n        # First linear layer\n        if self.concat_noise:\n            self.noise2feat = nn.Linear(\n                self.noise_size + self.shared_dim,\n                self.arch['in_channels'][0] * (self.input_scale**2))\n        else:\n            self.noise2feat = nn.Linear(\n                self.noise_size,\n                self.arch['in_channels'][0] * (self.input_scale**2))\n\n        if with_spectral_norm:\n            if sn_style == 'torch':\n                self.noise2feat = spectral_norm(self.noise2feat, eps=sn_eps)\n            elif sn_style == 'ajbrock':\n                self.noise2feat = SNLinear(\n                    self.noise_size +\n                    (self.shared_dim if self.concat_noise else 0),\n                    self.arch['in_channels'][0] * (self.input_scale**2),\n                    eps=sn_eps)\n            else:\n                NotImplementedError(f'{sn_style} style SN is not supported')\n\n        # If using 'shared_embedding', we will get an unified embedding of\n        # label for all blocks. If not, we just pass the label to each\n        # block.\n        if with_shared_embedding:\n            self.shared_embedding = nn.Embedding(num_classes, shared_dim)\n        else:\n            self.shared_embedding = nn.Identity()\n\n        if num_classes > 0:\n            if self.concat_noise:\n                self.dim_after_concat = (\n                    self.shared_dim + self.noise_size\n                    if self.with_shared_embedding else self.num_classes)\n            else:\n                self.dim_after_concat = (\n                    self.shared_dim\n                    if self.with_shared_embedding else self.num_classes)\n        else:\n            self.dim_after_concat = 0\n        self.blocks_cfg.update(\n            dict(\n                dim_after_concat=self.dim_after_concat,\n                act_cfg=act_cfg,\n                sn_eps=sn_eps,\n                sn_style=sn_style,\n                input_is_label=(num_classes > 0)\n                and (not with_shared_embedding),\n                with_spectral_norm=with_spectral_norm,\n                auto_sync_bn=auto_sync_bn))\n\n        self.conv_blocks = nn.ModuleList()\n        for index, out_ch in enumerate(self.arch['out_channels']):\n            for depth in range(self.block_depth):\n                # change args to adapt to current block\n                block_cfg_ = deepcopy(self.blocks_cfg)\n                block_cfg_.update(\n                    dict(\n                        in_channels=self.arch['in_channels'][index],\n                        out_channels=out_ch if depth == (self.block_depth - 1)\n                        else self.arch['in_channels'][index],\n                        upsample_cfg=self.upsample_cfg\n                        if self.arch['upsample'][index]\n                        and depth == (self.block_depth - 1) else None))\n                self.conv_blocks.append(MODELS.build(block_cfg_))\n\n            if self.arch['attention'][index]:\n                self.conv_blocks.append(\n                    SelfAttentionBlock(\n                        out_ch,\n                        with_spectral_norm=with_spectral_norm,\n                        sn_eps=sn_eps,\n                        sn_style=sn_style))\n\n        self.output_layer = SNConvModule(\n            self.arch['out_channels'][-1],\n            out_channels,\n            kernel_size=3,\n            padding=1,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            act_cfg=act_cfg,\n            norm_cfg=out_norm_cfg,\n            bias=True,\n            order=('norm', 'act', 'conv'))\n\n        self.init_weights(pretrained=pretrained, init_type=init_type)\n\n    def _get_default_arch_cfg(self, output_scale, base_channels):\n        assert output_scale in [32, 64, 128, 256, 512]\n        _default_arch_cfgs = {\n            '32': {\n                'in_channels': [base_channels * item for item in [4, 4, 4]],\n                'out_channels': [base_channels * item for item in [4, 4, 4]],\n                'upsample': [True] * 3,\n                'resolution': [8, 16, 32],\n                'attention': [False, False, False]\n            },\n            '64': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 4]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 4, 2]],\n                'upsample': [True] * 4,\n                'resolution': [8, 16, 32, 64],\n                'attention': [False, False, False, True]\n            },\n            '128': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 4, 2]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 4, 2, 1]],\n                'upsample': [True] * 5,\n                'resolution': [8, 16, 32, 64, 128],\n                'attention': [False, False, False, True, False]\n            },\n            '256': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 8, 4, 2]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 8, 4, 2, 1]],\n                'upsample': [True] * 6,\n                'resolution': [8, 16, 32, 64, 128, 256],\n                'attention': [False, False, False, True, False, False]\n            },\n            '512': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 8, 4, 2, 1]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 8, 4, 2, 1, 1]],\n                'upsample': [True] * 7,\n                'resolution': [8, 16, 32, 64, 128, 256, 512],\n                'attention': [False, False, False, True, False, False, False]\n            }\n        }\n\n        return _default_arch_cfgs[str(output_scale)]\n\n    def forward(self,\n                noise,\n                label=None,\n                num_batches=0,\n                return_noise=False,\n                truncation=-1.0,\n                use_outside_embedding=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            label (torch.Tensor | callable | None): You can directly give a\n                batch of label through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of label data. Otherwise, the\n                ``None`` indicates to use the default label sampler.\n                Defaults to None.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` and\n                ``label`` will be returned in a dict with ``fake_img``.\n                Defaults to False.\n            truncation (float, optional): Truncation factor. Give value not\n                less than 0., the truncation trick will be adopted.\n                Otherwise, the truncation trick will not be adopted.\n                Defaults to -1..\n            use_outside_embedding (bool, optional): Whether to use outside\n                embedding or use `shared_embedding`. Set to `True` if\n                embedding has already be performed outside this function.\n                Default to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img``,\n                ``noise_batch`` and ``label`` will be returned.\n        \"\"\"\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size))\n        # perform truncation\n        if truncation >= 0.0:\n            noise_batch = torch.clamp(noise_batch, -1. * truncation,\n                                      1. * truncation)\n\n        if self.num_classes == 0:\n            label_batch = None\n\n        elif isinstance(label, torch.Tensor):\n            if not use_outside_embedding:\n                assert label.ndim == 1, (\n                    'The label should be in shape of (n, )'\n                    f'but got {label.shape}.')\n            label_batch = label\n        elif callable(label):\n            label_generator = label\n            assert num_batches > 0\n            label_batch = label_generator((num_batches, ))\n        else:\n            assert num_batches > 0\n            label_batch = torch.randint(0, self.num_classes, (num_batches, ))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n        if label_batch is not None:\n            label_batch = label_batch.to(get_module_device(self))\n            if not use_outside_embedding:\n                class_vector = self.shared_embedding(label_batch)\n            else:\n                class_vector = label_batch\n        else:\n            class_vector = None\n\n        # If 'concat noise', concat class vector and noise batch\n        if self.concat_noise:\n            if class_vector is not None:\n                z = torch.cat([noise_batch, class_vector], dim=1)\n                y = z\n        elif self.num_classes > 0:\n            z = noise_batch\n            y = class_vector\n        else:\n            z = noise_batch\n            y = None\n\n        # First linear layer\n        x = self.noise2feat(z)\n        # Reshape\n        # We use this conversion step to allow for loading TF weights\n        # TF convention on shape is [batch, height, width, channels]\n        # PT convention on shape is [batch, channels, height, width]\n        x = x.view(x.size(0), self.input_scale, self.input_scale, -1)\n        x = x.permute(0, 3, 1, 2).contiguous()\n        # Loop over blocks\n        for idx, conv_block in enumerate(self.conv_blocks):\n            if isinstance(conv_block, SelfAttentionBlock):\n                x = conv_block(x)\n            else:\n                x = conv_block(x, y)\n        # Apply batchnorm-relu-conv-tanh at output\n        x = self.output_layer(x)\n        out_img = torch.tanh(x)\n\n        if self.rgb2bgr:\n            out_img = out_img[:, [2, 1, 0], ...]\n\n        if return_noise:\n            output = dict(\n                fake_img=out_img, noise_batch=noise_batch, label=label_batch)\n            return output\n\n        return out_img\n\n    def init_weights(self, pretrained=None, init_type='ortho'):\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str | dict, optional): Path for the pretrained model or\n                dict containing information for pretrained models whose\n                necessary key is 'ckpt_path'. Besides, you can also provide\n                'prefix' to load the generator part from the whole state dict.\n                Defaults to None.\n            init_type (str, optional): The name of an initialization method:\n                ortho | N02 | xavier. Defaults to 'ortho'.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif isinstance(pretrained, dict):\n            ckpt_path = pretrained.get('ckpt_path', None)\n            assert ckpt_path is not None\n            prefix = pretrained.get('prefix', '')\n            map_location = pretrained.get('map_location', 'cpu')\n            strict = pretrained.get('strict', True)\n            state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                      map_location)\n            self.load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained model from {ckpt_path}')\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                    if init_type == 'ortho':\n                        nn.init.orthogonal_(m.weight)\n                    elif init_type == 'N02':\n                        normal_init(m, 0.0, 0.02)\n                    elif init_type == 'xavier':\n                        xavier_init(m)\n                    else:\n                        raise NotImplementedError(\n                            f'{init_type} initialization \\\n                            not supported now.')\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import (BaseModule, normal_init, update_init_info,\n                            xavier_init)\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\nfrom .biggan_modules import SelfAttentionBlock\nfrom .biggan_snmodule import SNEmbedding, SNLinear\n\n\n@MODELS.register_module()\nclass BigGANDiscriminator(BaseModule):\n    \"\"\"BigGAN Discriminator. The implementation refers to\n    https://github.com/ajbrock/BigGAN-PyTorch/blob/master/BigGAN.py # noqa.\n\n    In BigGAN, we use a SAGAN-based architecture composing of an self-attention\n    block and number of convolutional residual blocks with spectral\n    normalization.\n\n    More details can be found in: Large Scale GAN Training for High Fidelity\n    Natural Image Synthesis (ICLR2019).\n\n    The design of the model structure is highly corresponding to the output\n    resolution. For the original BigGAN's generator, you can set ``output_scale``\n    as you need and use the default value of ``arch_cfg`` and ``blocks_cfg``.\n    If you want to customize the model, you can set the arguments in this way:\n\n    ``arch_cfg``: Config for the architecture of this generator. You can refer\n    the ``_default_arch_cfgs`` in the ``_get_default_arch_cfg`` function to see\n    the format of the ``arch_cfg``. Basically, you need to provide information\n    of each block such as the numbers of input and output channels, whether to\n    perform upsampling, etc.\n\n    ``blocks_cfg``: Config for the convolution block. You can replace the block\n    type to your registered customized block and adjust block params here.\n    However, you should notice that some params are shared among these blocks\n    like ``act_cfg``, ``with_spectral_norm``, ``sn_eps``, etc.\n\n    Args:\n        input_scale (int): The scale of the input image.\n        num_classes (int, optional): The number of conditional classes.\n            Defaults to 0.\n        in_channels (int, optional): The channel number of the input image.\n            Defaults to 3.\n        out_channels (int, optional): The channel number of the final output.\n            Defaults to 1.\n        base_channels (int, optional): The basic channel number of the\n            discriminator. The other layers contains channels based on this\n            number. Defaults to 96.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        act_cfg (dict, optional): Config for the activation layer.\n            Defaults to dict(type='ReLU').\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        blocks_cfg (dict, optional): Config for the convolution block.\n            Defaults to dict(type='BigGANDiscResBlock').\n        arch_cfg (dict, optional): Config for the architecture of this\n            discriminator. Defaults to None.\n        init_cfg (dict, optional): Initialization config dict. If type is\n            `Pretrained`, the pretrain model will be loaded. Otherwise, type\n            will be parsed as the name of initialization method. Support values\n            are 'ortho', 'N02', 'xavier'. Defaults to dict(type='ortho').\n    \"\"\"\n\n    def __init__(self,\n                 input_scale,\n                 num_classes=0,\n                 in_channels=3,\n                 out_channels=1,\n                 base_channels=96,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=True,\n                 blocks_cfg=dict(type='BigGANDiscResBlock'),\n                 arch_cfg=None,\n                 init_cfg=dict(type='ortho')):\n        super().__init__(init_cfg=init_cfg)\n        self.num_classes = num_classes\n        self.out_channels = out_channels\n        self.input_scale = input_scale\n        self.in_channels = in_channels\n        self.base_channels = base_channels\n        self.arch = arch_cfg if arch_cfg else self._get_default_arch_cfg(\n            self.input_scale, self.in_channels, self.base_channels)\n        self.blocks_cfg = deepcopy(blocks_cfg)\n        self.blocks_cfg.update(\n            dict(\n                act_cfg=act_cfg,\n                sn_eps=sn_eps,\n                sn_style=sn_style,\n                with_spectral_norm=with_spectral_norm))\n        self.sn_style = sn_style\n\n        self.conv_blocks = nn.ModuleList()\n        for index, out_ch in enumerate(self.arch['out_channels']):\n            # change args to adapt to current block\n            self.blocks_cfg.update(\n                dict(\n                    in_channels=self.arch['in_channels'][index],\n                    out_channels=out_ch,\n                    with_downsample=self.arch['downsample'][index],\n                    is_head_block=(index == 0)))\n            self.conv_blocks.append(MODELS.build(self.blocks_cfg))\n            if self.arch['attention'][index]:\n                self.conv_blocks.append(\n                    SelfAttentionBlock(\n                        out_ch,\n                        with_spectral_norm=with_spectral_norm,\n                        sn_eps=sn_eps,\n                        sn_style=sn_style))\n\n        self.activate = MODELS.build(act_cfg)\n\n        self.decision = nn.Linear(self.arch['out_channels'][-1], out_channels)\n        if with_spectral_norm:\n            if sn_style == 'torch':\n                self.decision = spectral_norm(self.decision, eps=sn_eps)\n            elif sn_style == 'ajbrock':\n                self.decision = SNLinear(\n                    self.arch['out_channels'][-1], out_channels, eps=sn_eps)\n            else:\n                raise NotImplementedError('sn style')\n\n        if self.num_classes > 0:\n            self.proj_y = nn.Embedding(self.num_classes,\n                                       self.arch['out_channels'][-1])\n            if with_spectral_norm:\n                if sn_style == 'torch':\n                    self.proj_y = spectral_norm(self.proj_y, eps=sn_eps)\n                elif sn_style == 'ajbrock':\n                    self.proj_y = SNEmbedding(\n                        self.num_classes,\n                        self.arch['out_channels'][-1],\n                        eps=sn_eps)\n                else:\n                    raise NotImplementedError('sn style')\n\n    def _get_default_arch_cfg(self, input_scale, in_channels, base_channels):\n        assert input_scale in [32, 64, 128, 256, 512]\n        _default_arch_cfgs = {\n            '32': {\n                'in_channels':\n                [in_channels] + [base_channels * item for item in [4, 4, 4]],\n                'out_channels':\n                [base_channels * item for item in [4, 4, 4, 4]],\n                'downsample': [True, True, False, False],\n                'resolution': [16, 8, 8, 8],\n                'attention': [False, False, False, False]\n            },\n            '64': {\n                'in_channels': [in_channels] +\n                [base_channels * item for item in [1, 2, 4, 8]],\n                'out_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 16]],\n                'downsample': [True] * 4 + [False],\n                'resolution': [32, 16, 8, 4, 4],\n                'attention': [False, False, False, False, False]\n            },\n            '128': {\n                'in_channels': [in_channels] +\n                [base_channels * item for item in [1, 2, 4, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 16, 16]],\n                'downsample': [True] * 5 + [False],\n                'resolution': [64, 32, 16, 8, 4, 4],\n                'attention': [True, False, False, False, False, False]\n            },\n            '256': {\n                'in_channels': [in_channels] +\n                [base_channels * item for item in [1, 2, 4, 8, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [1, 2, 4, 8, 8, 16, 16]],\n                'downsample': [True] * 6 + [False],\n                'resolution': [128, 64, 32, 16, 8, 4, 4],\n                'attention': [False, True, False, False, False, False]\n            },\n            '512': {\n                'in_channels': [in_channels] +\n                [base_channels * item for item in [1, 1, 2, 4, 8, 8, 16]],\n                'out_channels':\n                [base_channels * item for item in [1, 1, 2, 4, 8, 8, 16, 16]],\n                'downsample': [True] * 7 + [False],\n                'resolution': [256, 128, 64, 32, 16, 8, 4, 4],\n                'attention': [False, False, False, True, False, False, False]\n            }\n        }\n\n        return _default_arch_cfgs[str(input_scale)]\n\n    def forward(self, x, label=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n            label (torch.Tensor | None): Label Tensor. Defaults to None.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image with\n                given label.\n        \"\"\"\n        x0 = x\n        for conv_block in self.conv_blocks:\n            x0 = conv_block(x0)\n        x0 = self.activate(x0)\n        x0 = torch.sum(x0, dim=[2, 3])\n        out = self.decision(x0)\n\n        if self.num_classes > 0:\n            w_y = self.proj_y(label)\n            out = out + torch.sum(w_y * x0, dim=1, keepdim=True)\n        return out\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        for m in self.modules():\n            init_type = self.init_cfg['type']\n            module_name = m.__class__.__name__\n            if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                if init_type == 'ortho':\n                    nn.init.orthogonal_(m.weight)\n                elif init_type == 'N02':\n                    normal_init(m, 0.0, 0.02)\n                elif init_type == 'xavier':\n                    xavier_init(m)\n                else:\n                    raise NotImplementedError(\n                        f'{init_type} initialization not supported now.')\n                # save init info\n                init_info = (f'{module_name} belongs to (nn.Conv2d, '\n                             'nn.Linear, nn.Embedding), initialize by '\n                             f'\\'init_type\\' {init_type}')\n                if hasattr(m, '_params_init_info'):\n                    update_init_info(m, init_info)\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import (BaseModule, normal_init, update_init_info,\n                            xavier_init)\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom .biggan_modules import SelfAttentionBlock, SNConvModule\nfrom .biggan_snmodule import SNLinear\n\n\n@MODELS.register_module()\nclass BigGANGenerator(BaseModule):\n    \"\"\"BigGAN Generator. The implementation refers to\n    https://github.com/ajbrock/BigGAN-PyTorch/blob/master/BigGAN.py # noqa.\n\n    In BigGAN, we use a SAGAN-based architecture composing of an self-attention\n    block and number of convolutional residual blocks with spectral\n    normalization.\n\n    More details can be found in: Large Scale GAN Training for High Fidelity\n    Natural Image Synthesis (ICLR2019).\n\n    The design of the model structure is highly corresponding to the output\n    resolution. For the original BigGAN's generator, you can set ``output_scale``\n    as you need and use the default value of ``arch_cfg`` and ``blocks_cfg``.\n    If you want to customize the model, you can set the arguments in this way:\n\n    ``arch_cfg``: Config for the architecture of this generator. You can refer\n    the ``_default_arch_cfgs`` in the ``_get_default_arch_cfg`` function to see\n    the format of the ``arch_cfg``. Basically, you need to provide information\n    of each block such as the numbers of input and output channels, whether to\n    perform upsampling, etc.\n\n    ``blocks_cfg``: Config for the convolution block. You can replace the block\n    type to your registered customized block and adjust block params here.\n    However, you should notice that some params are shared among these blocks\n    like ``act_cfg``, ``with_spectral_norm``, ``sn_eps``, etc.\n\n    Args:\n        output_scale (int): Output scale for the generated image.\n        noise_size (int, optional): Size of the input noise vector. Defaults\n            to 120.\n        num_classes (int, optional): The number of conditional classes. If set\n            to 0, this model will be degraded to an unconditional model.\n            Defaults to 0.\n        out_channels (int, optional): Number of channels in output images.\n            Defaults to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Defaults to 96.\n        input_scale (int, optional): The scale of the input 2D feature map.\n            Defaults to 4.\n        with_shared_embedding (bool, optional): Whether to use shared\n            embedding. Defaults to True.\n        shared_dim (int, optional): The output channels of shared embedding.\n            Defaults to 128.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        split_noise (bool, optional): Whether to split input noise vector.\n            Defaults to True.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to dict(type='nearest', scale_factor=2).\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        auto_sync_bn (bool, optional): Whether to use synchronized batch\n            normalization. Defaults to True.\n        blocks_cfg (dict, optional): Config for the convolution block. Defaults\n            to dict(type='BigGANGenResBlock').\n        arch_cfg (dict, optional): Config for the architecture of this\n            generator. Defaults to None.\n        out_norm_cfg (dict, optional): Config for the norm of output layer.\n            Defaults to dict(type='BN').\n        rgb2bgr (bool, optional): Whether to reformat the output channels\n                with order `bgr`. We provide several pre-trained BigGAN\n                weights whose output channels order is `rgb`. You can set\n                this argument to True to use the weights.\n        init_cfg (dict, optional): Initialization config dict. If type is\n            `Pretrained`, the pretrain model will be loaded. Otherwise, type\n            will be parsed as the name of initialization method. Support values\n            are 'ortho', 'N02', 'xavier'. Defaults to dict(type='ortho').\n    \"\"\"\n\n    def __init__(self,\n                 output_scale,\n                 noise_size=120,\n                 num_classes=0,\n                 out_channels=3,\n                 base_channels=96,\n                 input_scale=4,\n                 with_shared_embedding=True,\n                 shared_dim=128,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 split_noise=True,\n                 act_cfg=dict(type='ReLU'),\n                 upsample_cfg=dict(type='nearest', scale_factor=2),\n                 with_spectral_norm=True,\n                 auto_sync_bn=True,\n                 blocks_cfg=dict(type='BigGANGenResBlock'),\n                 arch_cfg=None,\n                 out_norm_cfg=dict(type='BN'),\n                 rgb2bgr=False,\n                 init_cfg=dict(type='ortho')):\n        super().__init__(init_cfg=init_cfg)\n        self.noise_size = noise_size\n        self.num_classes = num_classes\n        self.shared_dim = shared_dim\n        self.with_shared_embedding = with_shared_embedding\n        self.output_scale = output_scale\n        self.arch = arch_cfg if arch_cfg else self._get_default_arch_cfg(\n            self.output_scale, base_channels)\n        self.input_scale = input_scale\n        self.split_noise = split_noise\n        self.blocks_cfg = deepcopy(blocks_cfg)\n        self.upsample_cfg = deepcopy(upsample_cfg)\n        self.rgb2bgr = rgb2bgr\n        self.sn_style = sn_style\n\n        # Validity Check\n        # If 'num_classes' equals to zero, we shall set 'with_shared_embedding'\n        # to False.\n        if num_classes == 0:\n            assert not self.with_shared_embedding\n        else:\n            if not self.with_shared_embedding:\n                # If not `with_shared_embedding`, we will use `nn.Embedding` to\n                # replace the original `Linear` layer in conditional BN.\n                # Meanwhile, we do not adopt split noises.\n                assert not self.split_noise\n\n        # If using split latents, we may need to adjust noise_size\n        if self.split_noise:\n            # Number of places z slots into\n            self.num_slots = len(self.arch['in_channels']) + 1\n            self.noise_chunk_size = self.noise_size // self.num_slots\n            # Recalculate latent dimensionality for even splitting into chunks\n            self.noise_size = self.noise_chunk_size * self.num_slots\n        else:\n            self.num_slots = 1\n            self.noise_chunk_size = 0\n\n        # First linear layer\n        self.noise2feat = nn.Linear(\n            self.noise_size // self.num_slots,\n            self.arch['in_channels'][0] * (self.input_scale**2))\n        if with_spectral_norm:\n            if sn_style == 'torch':\n                self.noise2feat = spectral_norm(self.noise2feat, eps=sn_eps)\n            elif sn_style == 'ajbrock':\n                self.noise2feat = SNLinear(\n                    self.noise_size // self.num_slots,\n                    self.arch['in_channels'][0] * (self.input_scale**2),\n                    eps=sn_eps)\n            else:\n                raise NotImplementedError(f'Your {sn_style} is not supported')\n\n        # If using 'shared_embedding', we will get an unified embedding of\n        # label for all blocks. If not, we just pass the label to each\n        # block.\n        if with_shared_embedding:\n            self.shared_embedding = nn.Embedding(num_classes, shared_dim)\n        else:\n            self.shared_embedding = nn.Identity()\n\n        if num_classes > 0:\n            self.dim_after_concat = (\n                self.shared_dim + self.noise_chunk_size\n                if self.with_shared_embedding else self.num_classes)\n        else:\n            self.dim_after_concat = self.noise_chunk_size\n\n        self.blocks_cfg.update(\n            dict(\n                dim_after_concat=self.dim_after_concat,\n                act_cfg=act_cfg,\n                sn_eps=sn_eps,\n                sn_style=sn_style,\n                input_is_label=(num_classes > 0)\n                and (not with_shared_embedding),\n                with_spectral_norm=with_spectral_norm,\n                auto_sync_bn=auto_sync_bn))\n\n        self.conv_blocks = nn.ModuleList()\n        for index, out_ch in enumerate(self.arch['out_channels']):\n            # change args to adapt to current block\n            self.blocks_cfg.update(\n                dict(\n                    in_channels=self.arch['in_channels'][index],\n                    out_channels=out_ch,\n                    upsample_cfg=self.upsample_cfg\n                    if self.arch['upsample'][index] else None))\n            self.conv_blocks.append(MODELS.build(self.blocks_cfg))\n            if self.arch['attention'][index]:\n                self.conv_blocks.append(\n                    SelfAttentionBlock(\n                        out_ch,\n                        with_spectral_norm=with_spectral_norm,\n                        sn_eps=sn_eps,\n                        sn_style=sn_style))\n\n        self.output_layer = SNConvModule(\n            self.arch['out_channels'][-1],\n            out_channels,\n            kernel_size=3,\n            padding=1,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            act_cfg=act_cfg,\n            norm_cfg=out_norm_cfg,\n            bias=True,\n            order=('norm', 'act', 'conv'))\n\n    def _get_default_arch_cfg(self, output_scale, base_channels):\n        assert output_scale in [32, 64, 128, 256, 512]\n        _default_arch_cfgs = {\n            '32': {\n                'in_channels': [base_channels * item for item in [4, 4, 4]],\n                'out_channels': [base_channels * item for item in [4, 4, 4]],\n                'upsample': [True] * 3,\n                'resolution': [8, 16, 32],\n                'attention': [False, False, False]\n            },\n            '64': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 4]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 4, 2]],\n                'upsample': [True] * 4,\n                'resolution': [8, 16, 32, 64],\n                'attention': [False, False, False, True]\n            },\n            '128': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 4, 2]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 4, 2, 1]],\n                'upsample': [True] * 5,\n                'resolution': [8, 16, 32, 64, 128],\n                'attention': [False, False, False, True, False]\n            },\n            '256': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 8, 4, 2]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 8, 4, 2, 1]],\n                'upsample': [True] * 6,\n                'resolution': [8, 16, 32, 64, 128, 256],\n                'attention': [False, False, False, True, False, False]\n            },\n            '512': {\n                'in_channels':\n                [base_channels * item for item in [16, 16, 8, 8, 4, 2, 1]],\n                'out_channels':\n                [base_channels * item for item in [16, 8, 8, 4, 2, 1, 1]],\n                'upsample': [True] * 7,\n                'resolution': [8, 16, 32, 64, 128, 256, 512],\n                'attention': [False, False, False, True, False, False, False]\n            }\n        }\n\n        return _default_arch_cfgs[str(output_scale)]\n\n    def forward(self,\n                noise,\n                label=None,\n                num_batches=0,\n                return_noise=False,\n                truncation=-1.0,\n                use_outside_embedding=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            label (torch.Tensor | callable | None): You can directly give a\n                batch of label through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of label data. Otherwise, the\n                ``None`` indicates to use the default label sampler.\n                Defaults to None.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` and\n                ``label`` will be returned in a dict with ``fake_img``.\n                Defaults to False.\n            truncation (float, optional): Truncation factor. Give value not\n                less than 0., the truncation trick will be adopted.\n                Otherwise, the truncation trick will not be adopted.\n                Defaults to -1..\n            use_outside_embedding (bool, optional): Whether to use outside\n                embedding or use `shared_embedding`. Set to `True` if\n                embedding has already be performed outside this function.\n                Default to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img``,\n                ``noise_batch`` and ``label`` will be returned.\n        \"\"\"\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size))\n\n        # perform truncation\n        if truncation >= 0.0:\n            noise_batch = torch.clamp(noise_batch, -1. * truncation,\n                                      1. * truncation)\n\n        if self.num_classes == 0:\n            label_batch = None\n\n        elif isinstance(label, torch.Tensor):\n            if not use_outside_embedding:\n                if label.ndim != 1:\n                    assert all([s == 1 for s in label.shape[1:]])\n                    label = label.view(-1)\n                assert label.ndim == 1, (\n                    'The label should be in shape of (n, )'\n                    f'but got {label.shape}.')\n            label_batch = label\n        elif callable(label):\n            label_generator = label\n            assert num_batches > 0\n            label_batch = label_generator((num_batches, ))\n        else:\n            assert num_batches > 0\n            label_batch = torch.randint(0, self.num_classes, (num_batches, ))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n        if label_batch is not None:\n            label_batch = label_batch.to(get_module_device(self))\n            if not use_outside_embedding:\n                class_vector = self.shared_embedding(label_batch)\n            else:\n                class_vector = label_batch\n        else:\n            class_vector = None\n        # If 'split noise', concat class vector and noise chunk\n        if self.split_noise:\n            zs = torch.split(noise_batch, self.noise_chunk_size, dim=1)\n            z = zs[0]\n            if class_vector is not None:\n                ys = [torch.cat([class_vector, item], 1) for item in zs[1:]]\n            else:\n                ys = zs[1:]\n        else:\n            ys = [class_vector] * len(self.conv_blocks)\n            z = noise_batch\n\n        # First linear layer\n        x = self.noise2feat(z)\n        # Reshape\n        x = x.view(x.size(0), -1, self.input_scale, self.input_scale)\n\n        # Loop over blocks\n        counter = 0\n        for conv_block in self.conv_blocks:\n            if isinstance(conv_block, SelfAttentionBlock):\n                x = conv_block(x)\n            else:\n                x = conv_block(x, ys[counter])\n                counter += 1\n\n        # Apply batchnorm-relu-conv-tanh at output\n        out_img = torch.tanh(self.output_layer(x))\n\n        if self.rgb2bgr:\n            out_img = out_img[:, [2, 1, 0], ...]\n\n        if return_noise:\n            output = dict(\n                fake_img=out_img, noise_batch=noise_batch, label=label_batch)\n            return output\n\n        return out_img\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        for m in self.modules():\n            init_type = self.init_cfg['type']\n            module_name = m.__class__.__name__\n            if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                if init_type == 'ortho':\n                    nn.init.orthogonal_(m.weight)\n                elif init_type == 'N02':\n                    normal_init(m, 0.0, 0.02)\n                elif init_type == 'xavier':\n                    xavier_init(m)\n                else:\n                    raise NotImplementedError(\n                        f'{init_type} initialization not supported now.')\n                # save init info\n                init_info = (f'{module_name} belongs to (nn.Conv2d, '\n                             'nn.Linear, nn.Embedding), initialize by '\n                             f'\\'init_type\\' {init_type}')\n                if hasattr(m, '_params_init_info'):\n                    update_init_info(m, init_info)\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom torch.nn import Parameter\nfrom torch.nn.modules.batchnorm import SyncBatchNorm\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\nfrom .biggan_snmodule import SNConv2d, SNLinear\n\n\nclass SNConvModule(ConvModule):\n    \"\"\"Spectral Normalization ConvModule.\n\n    In this module, we inherit default ``mmcv.cnn.ConvModule`` and adopt\n    spectral normalization. The spectral normalization is proposed in:\n    Spectral Normalization for Generative Adversarial Networks.\n\n    Args:\n        with_spectral_norm (bool, optional): Whether to use Spectral\n            Normalization. Defaults to False.\n        spectral_norm_cfg (dict, optional): Config for Spectral Normalization.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 with_spectral_norm=False,\n                 spectral_norm_cfg=None,\n                 **kwargs):\n        super().__init__(*args, with_spectral_norm=False, **kwargs)\n        self.with_spectral_norm = with_spectral_norm\n        self.spectral_norm_cfg = deepcopy(\n            spectral_norm_cfg) if spectral_norm_cfg else dict()\n\n        self.sn_eps = self.spectral_norm_cfg.get('eps', 1e-6)\n        self.sn_style = self.spectral_norm_cfg.get('sn_style', 'torch')\n\n        if self.with_spectral_norm:\n            if self.sn_style == 'torch':\n                self.conv = spectral_norm(self.conv, eps=self.sn_eps)\n            elif self.sn_style == 'ajbrock':\n                self.snconv_kwargs = deepcopy(kwargs) if kwargs else dict()\n                if 'act_cfg' in self.snconv_kwargs.keys():\n                    self.snconv_kwargs.pop('act_cfg')\n                if 'norm_cfg' in self.snconv_kwargs.keys():\n                    self.snconv_kwargs.pop('norm_cfg')\n                if 'order' in self.snconv_kwargs.keys():\n                    self.snconv_kwargs.pop('order')\n                self.conv = SNConv2d(\n                    *args, **self.snconv_kwargs, eps=self.sn_eps)\n            else:\n                raise NotImplementedError(\n                    f'{self.sn_style} style spectral Norm is not supported yet'\n                )\n\n\n@MODELS.register_module()\nclass BigGANGenResBlock(nn.Module):\n    \"\"\"Residual block used in BigGAN's generator.\n\n    Args:\n        in_channels (int): The channel number of the input feature map.\n        out_channels (int): The channel number of the output feature map.\n        dim_after_concat (int): The channel number of the noise concatenated\n            with the class vector.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to dict(type='nearest', scale_factor=2).\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization in this block. Defaults to True.\n        input_is_label (bool, optional): Whether the input of BNs' linear layer\n            is raw label instead of class vector. Defaults to False.\n        auto_sync_bn (bool, optional): Whether to use synchronized batch\n            normalization. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 dim_after_concat,\n                 act_cfg=dict(type='ReLU'),\n                 upsample_cfg=dict(type='nearest', scale_factor=2),\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 with_spectral_norm=True,\n                 input_is_label=False,\n                 auto_sync_bn=True):\n        super().__init__()\n        self.activation = MODELS.build(act_cfg)\n        self.upsample_cfg = deepcopy(upsample_cfg)\n        self.with_upsample = upsample_cfg is not None\n        if self.with_upsample:\n            self.upsample_layer = MODELS.build(self.upsample_cfg)\n        self.learnable_sc = in_channels != out_channels or self.with_upsample\n        if self.learnable_sc:\n            self.shortcut = SNConvModule(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=1,\n                stride=1,\n                padding=0,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm,\n                spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n        # Here in_channels of BigGANGenResBlock equal to num_features of\n        # BigGANConditionBN\n        self.bn1 = BigGANConditionBN(\n            in_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n        # Here out_channels of BigGANGenResBlock equal to num_features of\n        # BigGANConditionBN\n        self.bn2 = BigGANConditionBN(\n            out_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n\n        self.conv1 = SNConvModule(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv2 = SNConvModule(\n            in_channels=out_channels,\n            out_channels=out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n    def forward(self, x, y):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            y (torch.Tensor): Label tensor or class embedding concatenated with\n                noise tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n        x0 = self.bn1(x, y)\n        x0 = self.activation(x0)\n        if self.with_upsample:\n            x0 = self.upsample_layer(x0)\n            x = self.upsample_layer(x)\n        x0 = self.conv1(x0)\n        x0 = self.bn2(x0, y)\n        x0 = self.activation(x0)\n        x0 = self.conv2(x0)\n        if self.learnable_sc:\n            x = self.shortcut(x)\n        return x0 + x\n\n\n@MODELS.register_module()\nclass BigGANConditionBN(nn.Module):\n    \"\"\"Conditional Batch Normalization used in BigGAN.\n\n    Args:\n        num_features (int): The channel number of the input feature map tensor.\n        linear_input_channels (int): The channel number of the linear layers'\n            input tensor.\n        bn_eps (float, optional): Epsilon value for batch normalization.\n            Defaults to 1e-5.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        momentum (float, optional): The value used for the running_mean and\n            running_var computation. Defaults to 0.1.\n        input_is_label (bool, optional): Whether the input of BNs' linear layer\n            is raw label instead of class vector. Defaults to False.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        auto_sync_bn (bool, optional): Whether to use synchronized batch\n            normalization. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 num_features,\n                 linear_input_channels,\n                 bn_eps=1e-5,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 momentum=0.1,\n                 input_is_label=False,\n                 with_spectral_norm=True,\n                 auto_sync_bn=True):\n        super().__init__()\n        assert num_features > 0\n        if linear_input_channels > 0:\n            self.use_cbn = True\n        else:\n            self.use_cbn = False\n        # Prepare gain and bias layers\n        if self.use_cbn:\n            if not input_is_label:\n                self.gain = nn.Linear(\n                    linear_input_channels, num_features, bias=False)\n                self.bias = nn.Linear(\n                    linear_input_channels, num_features, bias=False)\n                # please pay attention if shared_embedding is False\n                if with_spectral_norm:\n                    if sn_style == 'torch':\n                        self.gain = spectral_norm(self.gain, eps=sn_eps)\n                        self.bias = spectral_norm(self.bias, eps=sn_eps)\n                    elif sn_style == 'ajbrock':\n                        self.gain = SNLinear(\n                            linear_input_channels,\n                            num_features,\n                            bias=False,\n                            eps=sn_eps)\n                        self.bias = SNLinear(\n                            linear_input_channels,\n                            num_features,\n                            bias=False,\n                            eps=sn_eps)\n                    else:\n                        raise NotImplementedError('sn style')\n            else:\n                self.gain = nn.Embedding(linear_input_channels, num_features)\n                self.bias = nn.Embedding(linear_input_channels, num_features)\n\n        self.bn = nn.BatchNorm2d(\n            num_features,\n            eps=bn_eps,\n            momentum=momentum,\n            affine=not self.use_cbn)\n\n        if auto_sync_bn and dist.is_initialized():\n            self.bn = SyncBatchNorm.convert_sync_batchnorm(self.bn)\n\n    def forward(self, x, y):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            y (torch.Tensor): Label tensor or class embedding concatenated with\n                noise tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n        if self.use_cbn:\n            # Calculate class-conditional gains and biases\n            gain = (1. + self.gain(y)).view(y.size(0), -1, 1, 1)\n            bias = self.bias(y).view(y.size(0), -1, 1, 1)\n            out = self.bn(x)\n            out = out * gain + bias\n        else:\n            out = self.bn(x)\n        return out\n\n\n@MODELS.register_module()\nclass SelfAttentionBlock(nn.Module):\n    \"\"\"Self-Attention block used in BigGAN.\n\n    Args:\n        in_channels (int): The channel number of the input feature map.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 with_spectral_norm=True,\n                 sn_eps=1e-6,\n                 sn_style='ajbrock'):\n        super(SelfAttentionBlock, self).__init__()\n\n        self.in_channels = in_channels\n        self.theta = SNConvModule(\n            self.in_channels,\n            self.in_channels // 8,\n            kernel_size=1,\n            padding=0,\n            bias=False,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n        self.phi = SNConvModule(\n            self.in_channels,\n            self.in_channels // 8,\n            kernel_size=1,\n            padding=0,\n            bias=False,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n        self.g = SNConvModule(\n            self.in_channels,\n            self.in_channels // 2,\n            kernel_size=1,\n            padding=0,\n            bias=False,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n        self.o = SNConvModule(\n            self.in_channels // 2,\n            self.in_channels,\n            kernel_size=1,\n            padding=0,\n            bias=False,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n        # Learnable gain parameter\n        self.gamma = Parameter(torch.tensor(0.), requires_grad=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n        # Apply convs\n        theta = self.theta(x)\n        phi = F.max_pool2d(self.phi(x), [2, 2])\n        g = F.max_pool2d(self.g(x), [2, 2])\n        # Perform reshapes\n        theta = theta.view(-1, self.in_channels // 8, x.shape[2] * x.shape[3])\n        phi = phi.view(-1, self.in_channels // 8, x.shape[2] * x.shape[3] // 4)\n        g = g.view(-1, self.in_channels // 2, x.shape[2] * x.shape[3] // 4)\n        # Matmul and softmax to get attention maps\n        beta = F.softmax(torch.bmm(theta.transpose(1, 2), phi), -1)\n        # Attention map times g path\n        o = self.o(\n            torch.bmm(g, beta.transpose(1, 2)).view(-1, self.in_channels // 2,\n                                                    x.shape[2], x.shape[3]))\n        return self.gamma * o + x\n\n\n@MODELS.register_module()\nclass BigGANDiscResBlock(nn.Module):\n    \"\"\"Residual block used in BigGAN's discriminator.\n\n    Args:\n        in_channels (int): The channel number of the input tensor.\n        out_channels (int): The channel number of the output tensor.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU', inplace=False).\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        with_downsample (bool, optional): Whether to use downsampling in this\n            block. Defaults to True.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n        is_head_block (bool, optional): Whether this block is the first block\n            of BigGAN. Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 act_cfg=dict(type='ReLU', inplace=False),\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 with_downsample=True,\n                 with_spectral_norm=True,\n                 is_head_block=False):\n        super().__init__()\n        self.activation = MODELS.build(act_cfg)\n        self.with_downsample = with_downsample\n        self.is_head_block = is_head_block\n        if self.with_downsample:\n            self.downsample = nn.AvgPool2d(kernel_size=2, stride=2)\n        self.learnable_sc = in_channels != out_channels or self.with_downsample\n        if self.learnable_sc:\n            self.shortcut = SNConvModule(\n                in_channels=in_channels,\n                out_channels=out_channels,\n                kernel_size=1,\n                stride=1,\n                padding=0,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm,\n                spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv1 = SNConvModule(\n            in_channels=in_channels,\n            out_channels=out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv2 = SNConvModule(\n            in_channels=out_channels,\n            out_channels=out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n    def forward_sc(self, x):\n        \"\"\"Forward function of shortcut.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n\n        Returns:\n            torch.Tensor: Output tensor of shortcut.\n        \"\"\"\n        if self.is_head_block:\n            if self.with_downsample:\n                x = self.downsample(x)\n            if self.learnable_sc:\n                x = self.shortcut(x)\n        else:\n            if self.learnable_sc:\n                x = self.shortcut(x)\n            if self.with_downsample:\n                x = self.downsample(x)\n        return x\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n        if self.is_head_block:\n            x0 = x\n        else:\n            x0 = self.activation(x)\n        x0 = self.conv1(x0)\n        x0 = self.activation(x0)\n        x0 = self.conv2(x0)\n        if self.with_downsample:\n            x0 = self.downsample(x0)\n        x1 = self.forward_sc(x)\n        return x0 + x1\n\n\n@MODELS.register_module()\nclass BigGANDeepGenResBlock(nn.Module):\n    \"\"\"Residual block used in BigGAN-Deep's generator.\n\n    Args:\n        in_channels (int): The channel number of the input feature map.\n        out_channels (int): The channel number of the output feature map.\n        dim_after_concat (int): The channel number of the noise concatenated\n            with the class vector.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to dict(type='nearest', scale_factor=2).\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        bn_eps (float, optional): Epsilon value for batch normalization.\n            Defaults to 1e-5.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization in this block. Defaults to True.\n        input_is_label (bool, optional): Whether the input of BNs' linear layer\n            is raw label instead of class vector. Defaults to False.\n        auto_sync_bn (bool, optional): Whether to use synchronized batch\n            normalization. Defaults to True.\n        channel_ratio (int, optional): The ratio of the input channels' number\n            to the hidden channels' number. Defaults to 4.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 dim_after_concat,\n                 act_cfg=dict(type='ReLU'),\n                 upsample_cfg=dict(type='nearest', scale_factor=2),\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 bn_eps=1e-5,\n                 with_spectral_norm=True,\n                 input_is_label=False,\n                 auto_sync_bn=True,\n                 channel_ratio=4):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.hidden_channels = self.in_channels // channel_ratio\n        self.activation = MODELS.build(act_cfg)\n        self.upsample_cfg = deepcopy(upsample_cfg)\n        self.with_upsample = upsample_cfg is not None\n        if self.with_upsample:\n            self.upsample_layer = MODELS.build(self.upsample_cfg)\n        # Here in_channels of BigGANGenResBlock equal to num_features of\n        # BigGANConditionBN\n        self.bn1 = BigGANConditionBN(\n            in_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            bn_eps=bn_eps,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n        # Here out_channels of BigGANGenResBlock equal to num_features of\n        # BigGANConditionBN\n        self.bn2 = BigGANConditionBN(\n            self.hidden_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            bn_eps=bn_eps,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n\n        self.bn3 = BigGANConditionBN(\n            self.hidden_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            bn_eps=bn_eps,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n\n        self.bn4 = BigGANConditionBN(\n            self.hidden_channels,\n            dim_after_concat,\n            sn_eps=sn_eps,\n            sn_style=sn_style,\n            bn_eps=bn_eps,\n            input_is_label=input_is_label,\n            with_spectral_norm=with_spectral_norm,\n            auto_sync_bn=auto_sync_bn)\n\n        self.conv1 = SNConvModule(\n            in_channels=in_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv2 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv3 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv4 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=out_channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n    def forward(self, x, y):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            y (torch.Tensor): Label tensor or class embedding concatenated with\n                noise tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n        x0 = self.bn1(x, y)\n        x0 = self.activation(x0)\n        x0 = self.conv1(x0)\n\n        x0 = self.bn2(x0, y)\n        x0 = self.activation(x0)\n        # Drop channels in x  if necessary\n        if self.in_channels != self.out_channels:\n            x = x[:, :self.out_channels]\n        # upsample both h and x at this point\n        if self.with_upsample:\n            x0 = self.upsample_layer(x0)\n            x = self.upsample_layer(x)\n        x0 = self.conv2(x0)\n\n        x0 = self.bn3(x0, y)\n        x0 = self.activation(x0)\n        x0 = self.conv3(x0)\n\n        x0 = self.bn4(x0, y)\n        x0 = self.activation(x0)\n        x0 = self.conv4(x0)\n        return x0 + x\n\n\n@MODELS.register_module()\nclass BigGANDeepDiscResBlock(nn.Module):\n    \"\"\"Residual block used in BigGAN-Deep's discriminator.\n\n    Args:\n        in_channels (int): The channel number of the input tensor.\n        out_channels (int): The channel number of the output tensor.\n        channel_ratio (int, optional): The ratio of the input channels' number\n            to the hidden channels' number. Defaults to 4.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU', inplace=False).\n        sn_eps (float, optional): Epsilon value for spectral normalization.\n            Defaults to 1e-6.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `ajbrock`.\n        with_downsample (bool, optional): Whether to use downsampling in this\n            block. Defaults to True.\n        with_spectral_norm (bool, optional): Whether to use spectral\n            normalization. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 channel_ratio=4,\n                 act_cfg=dict(type='ReLU', inplace=False),\n                 sn_eps=1e-6,\n                 sn_style='ajbrock',\n                 with_downsample=True,\n                 with_spectral_norm=True):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.hidden_channels = self.out_channels // channel_ratio\n        self.activation = MODELS.build(act_cfg)\n        self.with_downsample = with_downsample\n\n        if self.with_downsample:\n            self.downsample = nn.AvgPool2d(kernel_size=2, stride=2)\n\n        self.learnable_sc = (in_channels != out_channels)\n        if self.learnable_sc:\n            self.shortcut = SNConvModule(\n                in_channels=in_channels,\n                out_channels=out_channels - in_channels,\n                kernel_size=1,\n                stride=1,\n                padding=0,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm,\n                spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n        self.conv1 = SNConvModule(\n            in_channels=in_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            order=('act', 'conv', 'norm'))\n\n        self.conv2 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            order=('act', 'conv', 'norm'))\n\n        self.conv3 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=self.hidden_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style),\n            order=('act', 'conv', 'norm'))\n\n        self.conv4 = SNConvModule(\n            in_channels=self.hidden_channels,\n            out_channels=out_channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=dict(eps=sn_eps, sn_style=sn_style))\n\n    def forward_sc(self, x):\n        \"\"\"Forward function of shortcut.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n\n        Returns:\n            torch.Tensor: Output tensor of shortcut.\n        \"\"\"\n        if self.with_downsample:\n            x = self.downsample(x)\n        if self.learnable_sc:\n            x0 = self.shortcut(x)\n            x = torch.cat([x, x0], dim=1)\n        return x\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n\n        x0 = self.conv1(x)\n        x0 = self.conv2(x0)\n        x0 = self.conv3(x0)\n        x0 = self.activation(x0)\n        # downsample\n        if self.with_downsample:\n            x0 = self.downsample(x0)\n        x0 = self.conv4(x0)\n        x1 = self.forward_sc(x)\n        return x0 + x1\n"
  },
  {
    "path": "mmagic/models/editors/biggan/biggan_snmodule.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n# yapf:disable\n'''\n    Ref: Functions in this file are borrowed from https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py # noqa\n'''\n# yapf:enable\n\n\ndef proj(x, y):\n    \"\"\"Calculate Projection of x onto y.\n\n    Args:\n        x (torch.Tensor): Projection vector x.\n        y (torch.Tensor): Direction vector y.\n\n    Returns:\n        torch.Tensor: Projection of x onto y.\n    \"\"\"\n    return torch.mm(y, x.t()) * y / torch.mm(y, y.t())\n\n\ndef gram_schmidt(x, ys):\n    \"\"\"Orthogonalize x w.r.t list of vectors ys.\n\n    Args:\n        x (torch.Tensor): Vector to be added into the\n            orthogonal vectors.\n        ys (list[torch.Tensor]): A set of orthogonal vectors.\n\n    Returns:\n        torch.Tensor: Result of Gram–Schmidt orthogonalization.\n    \"\"\"\n    for y in ys:\n        x = x - proj(x, y)\n    return x\n\n\n@torch.no_grad()\ndef power_iteration(weight, u_list, update=True, eps=1e-12):\n    \"\"\"Power iteration method for calculating spectral norm.\n\n    Args:\n        weight (torch.Tensor): Module weight.\n        u_list (list[torch.Tensor]): list of left singular vector.\n            The length of list equals to the simulation times.\n        update (bool, optional): Whether update left singular\n            vector. Defaults to True.\n        eps (float, optional): Vector Normalization epsilon.\n            Defaults to 1e-12.\n\n    Returns:\n        tuple[list[tensor.Tensor]]: Tuple consist of three lists\n            which contain singular values, left singular\n            vector and right singular vector respectively.\n    \"\"\"\n    us, vs, svs = [], [], []\n    for i, u in enumerate(u_list):\n        v = torch.matmul(u, weight)\n        v = F.normalize(gram_schmidt(v, vs), eps=eps)\n        vs += [v]\n        u = torch.matmul(v, weight.t())\n        u = F.normalize(gram_schmidt(u, us), eps=eps)\n        us += [u]\n        if update:\n            u_list[i][:] = u\n        svs += [\n            torch.squeeze(torch.matmul(torch.matmul(v, weight.t()), u.t()))\n        ]\n    return svs, us, vs\n\n\nclass SpectralNorm(object):\n    \"\"\"Spectral normalization base class.\n\n    Args:\n        num_svs (int): Number of singular values.\n        num_iters (int): Number of power iterations per step.\n        num_outputs (int): Number of output channels.\n        transpose (bool, optional): If set to `True`, weight\n            matrix will be transposed before power iteration.\n            Defaults to False.\n        eps (float, optional): Vector Normalization epsilon for\n            avoiding divide by zero. Defaults to 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 num_svs,\n                 num_iters,\n                 num_outputs,\n                 transpose=False,\n                 eps=1e-12):\n        self.num_iters = num_iters\n        self.num_svs = num_svs\n        self.transpose = transpose\n        self.eps = eps\n        # Register a singular vector for each sv\n        for i in range(self.num_svs):\n            self.register_buffer('u%d' % i, torch.randn(1, num_outputs))\n            self.register_buffer('sv%d' % i, torch.ones(1))\n\n    @property\n    def u(self):\n        \"\"\"Get left singular vectors.\"\"\"\n        return [getattr(self, 'u%d' % i) for i in range(self.num_svs)]\n\n    @property\n    def sv(self):\n        \"\"\"Get singular values.\"\"\"\n        return [getattr(self, 'sv%d' % i) for i in range(self.num_svs)]\n\n    def sn_weight(self):\n        \"\"\"Compute the spectrally-normalized weight.\"\"\"\n        W_mat = self.weight.view(self.weight.size(0), -1)\n        if self.transpose:\n            W_mat = W_mat.t()\n        # Apply num_iters power iterations\n        for _ in range(self.num_iters):\n            svs, us, vs = power_iteration(\n                W_mat, self.u, update=self.training, eps=self.eps)\n        # Update the svs\n        if self.training:\n            with torch.no_grad():\n                for i, sv in enumerate(svs):\n                    self.sv[i][:] = sv\n        return self.weight / svs[-1]\n\n\nclass SNConv2d(nn.Conv2d, SpectralNorm):\n    \"\"\"2D Conv layer with spectral norm.\n\n    Args:\n        in_channels (int): Number of channels in the input feature map.\n        out_channels (int): Number of channels produced by the convolution.\n        kernel_size (int): Size of the convolving kernel.\n        stride (int, optional): Stride of the convolution.. Defaults to 1.\n        padding (int, optional): Zero-padding added to both sides of\n            the input. Defaults to 0.\n        dilation (int, optional): Spacing between kernel elements.\n            Defaults to 1.\n        groups (int, optional): Number of blocked connections from input\n            channels to output channels. Defaults to 1.\n        bias (bool, optional): Whether to use bias parameter.\n            Defaults to True.\n        num_svs (int): Number of singular values.\n        num_iters (int): Number of power iterations per step.\n        eps (float, optional): Vector Normalization epsilon for\n            avoiding divide by zero. Defaults to 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 stride=1,\n                 padding=0,\n                 dilation=1,\n                 groups=1,\n                 bias=True,\n                 num_svs=1,\n                 num_iters=1,\n                 eps=1e-12):\n        nn.Conv2d.__init__(self, in_channels, out_channels, kernel_size,\n                           stride, padding, dilation, groups, bias)\n        SpectralNorm.__init__(self, num_svs, num_iters, out_channels, eps=eps)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        return F.conv2d(x, self.sn_weight(), self.bias, self.stride,\n                        self.padding, self.dilation, self.groups)\n\n\nclass SNLinear(nn.Linear, SpectralNorm):\n    \"\"\"Linear layer with spectral norm.\n\n    Args:\n        in_features (int): Number of channels in the input feature.\n        out_features (int): Number of channels in the out feature.\n        bias (bool, optional):  Whether to use bias parameter.\n            Defaults to True.\n        num_svs (int): Number of singular values.\n        num_iters (int): Number of power iterations per step.\n        eps (float, optional): Vector Normalization epsilon for\n            avoiding divide by zero. Defaults to 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 in_features,\n                 out_features,\n                 bias=True,\n                 num_svs=1,\n                 num_iters=1,\n                 eps=1e-12):\n        nn.Linear.__init__(self, in_features, out_features, bias)\n        SpectralNorm.__init__(self, num_svs, num_iters, out_features, eps=eps)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        return F.linear(x, self.sn_weight(), self.bias)\n\n\n# We use num_embeddings as the dim instead of embedding_dim here\n# for convenience sake\nclass SNEmbedding(nn.Embedding, SpectralNorm):\n    \"\"\"Embedding layer with spectral norm.\n\n    Args:\n        num_embeddings (int): Size of the dictionary of embeddings.\n        embedding_dim (int): The size of each embedding vector.\n        padding_idx (int, optional):  If specified, the entries at\n            padding_idx do not contribute to the gradient; therefore,\n            the embedding vector at padding_idx is not updated during\n            training, i.e. it remains as a fixed “pad”. For a newly\n            constructed Embedding, the embedding vector at padding_idx\n            will default to all zeros, but can be updated to another value\n            to be used as the padding vector. Defaults to None.\n        max_norm (float, optional): If given, each embedding vector with\n            norm larger than max_norm is renormalized to have norm\n            max_norm. Defaults to None.\n        norm_type (int, optional):  The p of the p-norm to compute for\n            the max_norm option. Default 2.\n        scale_grad_by_freq (bool, optional): If given, this will scale\n            gradients by the inverse of frequency of the words in the\n            mini-batch. Default False.\n        sparse (bool, optional):  If True, gradient w.r.t. weight matrix\n            will be a sparse tensor. See Notes for more details regarding\n            sparse gradients. Defaults to False.\n        _weight (torch.Tensor, optional): Initial Weight. Defaults to None.\n        num_svs (int): Number of singular values.\n        num_iters (int): Number of power iterations per step.\n        eps (float, optional): Vector Normalization epsilon for\n            avoiding divide by zero. Defaults to 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 num_embeddings,\n                 embedding_dim,\n                 padding_idx=None,\n                 max_norm=None,\n                 norm_type=2,\n                 scale_grad_by_freq=False,\n                 sparse=False,\n                 _weight=None,\n                 num_svs=1,\n                 num_iters=1,\n                 eps=1e-12):\n        nn.Embedding.__init__(self, num_embeddings, embedding_dim, padding_idx,\n                              max_norm, norm_type, scale_grad_by_freq, sparse,\n                              _weight)\n        SpectralNorm.__init__(\n            self, num_svs, num_iters, num_embeddings, eps=eps)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        return F.embedding(x, self.sn_weight())\n"
  },
  {
    "path": "mmagic/models/editors/cain/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .cain import CAIN\nfrom .cain_net import CAINNet\n\n__all__ = [\n    'CAIN',\n    'CAINNet',\n]\n"
  },
  {
    "path": "mmagic/models/editors/cain/cain.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models.base_models import BasicInterpolator\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass CAIN(BasicInterpolator):\n    \"\"\"CAIN model for Video Interpolation.\n\n    Paper: Channel Attention Is All You Need for Video Frame Interpolation\n    Ref repo: https://github.com/myungsub/CAIN\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        required_frames (int): Required frames in each process. Default: 2\n        step_frames (int): Step size of video frame interpolation. Default: 1\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`.\n    \"\"\"\n\n    def forward_inference(self, inputs, data_samples=None):\n        \"\"\"Forward inference. Returns predictions of validation, testing, and\n        simple inference.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[DataSample]: predictions.\n        \"\"\"\n\n        predictions = super().forward_inference(\n            inputs, data_samples, padding_flag=True)\n\n        return predictions\n"
  },
  {
    "path": "mmagic/models/editors/cain/cain_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import pixel_unshuffle\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass CAINNet(BaseModule):\n    \"\"\"CAIN network structure.\n\n    Paper: Channel Attention Is All You Need for Video Frame Interpolation.\n    Ref repo: https://github.com/myungsub/CAIN\n\n    Args:\n        in_channels (int): Channel number of inputs. Default: 3.\n        kernel_size (int): Kernel size of CAINNet. Default: 3.\n        num_block_groups (int): Number of block groups. Default: 5.\n        num_block_layers (int): Number of blocks in a group. Default: 12.\n        depth (int): Down scale depth, scale = 2**depth. Default: 3.\n        reduction (int): Channel reduction of CA. Default: 16.\n        norm (str | None): Normalization layer. If it is None, no\n            normalization is performed. Default: None.\n        padding (int): Padding of CAINNet. Default: 7.\n        act (function): activate function. Default: nn.LeakyReLU(0.2, True).\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=3,\n                 kernel_size=3,\n                 num_block_groups=5,\n                 num_block_layers=12,\n                 depth=3,\n                 reduction=16,\n                 norm=None,\n                 padding=7,\n                 act=nn.LeakyReLU(0.2, True),\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        mid_channels = in_channels * (4**depth)\n        self.scale = 2**depth\n        self.padding = padding\n\n        self.conv_first = nn.Conv2d(mid_channels * 2, mid_channels,\n                                    kernel_size, 1, 1)\n        self.body = make_layer(\n            ResidualGroup,\n            num_block_groups,\n            block_layer=ResidualChannelAttention,\n            num_block_layers=num_block_layers,\n            mid_channels=mid_channels,\n            kernel_size=kernel_size,\n            reduction=reduction,\n            norm=norm,\n            act=act)\n        self.conv_last = nn.Conv2d(mid_channels, mid_channels, kernel_size, 1,\n                                   1)\n\n    def forward(self, imgs, padding_flag=False):\n        \"\"\"Forward function.\n\n        Args:\n            imgs (Tensor): Input tensor with shape (n, 2, c, h, w).\n            padding_flag (bool): Padding or not. Default: False.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        assert imgs.shape[1] == 2\n        x1, x2 = imgs[:, 0], imgs[:, 1]\n\n        mean1 = x1.mean((2, 3), keepdim=True)\n        mean2 = x2.mean((2, 3), keepdim=True)\n        x1 -= mean1\n        x2 -= mean2\n\n        if padding_flag:\n            padding_function, depadding_function = get_padding_functions(\n                x1, self.padding)\n            x1 = padding_function(x1)\n            x2 = padding_function(x2)\n\n        x1 = pixel_unshuffle(x1, self.scale)\n        x2 = pixel_unshuffle(x2, self.scale)\n\n        x = torch.cat([x1, x2], dim=1)\n        x = self.conv_first(x)\n        res = self.body(x)\n        res += x\n        x = self.conv_last(res)\n        x = F.pixel_shuffle(x, self.scale)\n\n        if padding_flag:\n            x = depadding_function(x)\n\n        x += (mean1 + mean2) / 2\n        return x\n\n\ndef get_padding_functions(x, padding=7):\n    \"\"\"Generate padding function for CAIN.\n\n    This function produces two functions to pad and depad a tensor, given the\n    number of pixels to be padded. When applying padding and depadding\n    sequentially, the original tensor is obtained.\n\n    The generated padding function will pad the given tensor to the 'padding'\n    power of 2, i.e., pow(2, 'padding').\n\n    tensor --padding_function--> padded tensor\n    padded tensor --depadding_function--> original tensor\n\n    Args:\n        x (Tensor): Input tensor.\n        padding (int): Padding size. Default: 7.\n\n    Returns:\n        padding_function (Function): Padding function.\n        depadding_function (Function): Depadding function.\n    \"\"\"\n\n    h, w = x.shape[-2:]\n    padding_width, padding_height = 0, 0\n    if w != ((w >> padding) << padding):\n        padding_width = (((w >> padding) + 1) << padding) - w\n    if h != ((h >> padding) << padding):\n        padding_height = (((h >> padding) + 1) << padding) - h\n\n    left, right = padding_width // 2, padding_width - padding_width // 2\n    up, down = padding_height // 2, padding_height - padding_height // 2\n    if down >= h or right >= w:\n        function = nn.ReplicationPad2d\n    else:\n        function = nn.ReflectionPad2d\n\n    padding_function = function(padding=[left, right, up, down])\n    depadding_function = function(\n        padding=[0 - left, 0 - right, 0 - up, 0 - down])\n\n    return padding_function, depadding_function\n\n\nclass ConvNormWithReflectionPad(BaseModule):\n    \"\"\"Apply reflection padding, followed by a convolution, which can be\n    followed by an optional normalization.\n\n    Args:\n        in_channels (int): Channel number of input features.\n        out_channels (int): Channel number of output features.\n        kernel_size (int): Kernel size of convolution layer.\n        norm (str | None): Normalization layer. If it is None, no\n            normalization is performed. Default: None.\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels, kernel_size, norm=None):\n        super().__init__()\n\n        self.reflection_pad = nn.ReflectionPad2d(kernel_size // 2)\n        self.conv = nn.Conv2d(\n            in_channels, out_channels, kernel_size=kernel_size, bias=True)\n\n        if norm is None:\n            self.norm = None\n        elif norm.lower() == 'in':\n            self.norm = nn.InstanceNorm2d(\n                out_channels, track_running_stats=True)\n        elif norm.lower() == 'bn':\n            self.norm = nn.BatchNorm2d(out_channels)\n        else:\n            raise ValueError(f\"Invalid value for 'norm': {norm}\")\n\n    def forward(self, x):\n        \"\"\"Forward function for ConvNormWithReflectionPad.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape (n, c, h, w).\n        \"\"\"\n\n        out = self.reflection_pad(x)\n        out = self.conv(out)\n        if self.norm:\n            out = self.norm(out)\n        return out\n\n\nclass ChannelAttentionLayer(BaseModule):\n    \"\"\"Channel Attention (CA) Layer.\n\n    Args:\n        mid_channels (int): Channel number of the intermediate features.\n        reduction (int): Channel reduction of CA. Default: 16.\n    \"\"\"\n\n    def __init__(self, mid_channels, reduction=16):\n        super().__init__()\n\n        # global average pooling: (n, c, h, w) --> (n, c, 1, 1)\n        self.avg_pool = nn.AdaptiveAvgPool2d(1)\n        # channel reduction.\n        self.channel_attention = nn.Sequential(\n            nn.Conv2d(\n                mid_channels,\n                mid_channels // reduction,\n                1,\n                padding=0,\n                bias=True), nn.ReLU(inplace=True),\n            nn.Conv2d(\n                mid_channels // reduction,\n                mid_channels,\n                1,\n                padding=0,\n                bias=True), nn.Sigmoid())\n\n    def forward(self, x):\n        \"\"\"Forward function for ChannelAttentionLayer.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape (n, c, h, w).\n        \"\"\"\n\n        y = self.avg_pool(x)\n        y = self.channel_attention(y)\n        return x * y\n\n\nclass ResidualChannelAttention(BaseModule):\n    \"\"\"Residual Channel Attention Module.\n\n    Args:\n        mid_channels (int): Channel number of the intermediate features.\n        kernel_size (int): Kernel size of convolution layers. Default: 3.\n        reduction (int): Channel reduction. Default: 16.\n        norm (None | function): Norm layer. If None, no norm layer.\n            Default: None.\n        act (function): activation function. Default: nn.LeakyReLU(0.2, True).\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels,\n                 kernel_size=3,\n                 reduction=16,\n                 norm=None,\n                 act=nn.LeakyReLU(0.2, True)):\n        super().__init__()\n\n        self.body = nn.Sequential(\n            ConvNormWithReflectionPad(\n                mid_channels, mid_channels, kernel_size, norm=norm), act,\n            ConvNormWithReflectionPad(\n                mid_channels, mid_channels, kernel_size, norm=norm),\n            ChannelAttentionLayer(mid_channels, reduction))\n\n    def forward(self, x):\n        \"\"\"Forward function for ResidualChannelAttention.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape (n, c, h, w).\n        \"\"\"\n\n        out = self.body(x)\n        return out + x\n\n\nclass ResidualGroup(BaseModule):\n    \"\"\"Residual Group, consisting of a stack of residual channel attention,\n    followed by a convolution.\n\n    Args:\n        block_layer (nn.Module): nn.Module class for basic block.\n        num_block_layers (int): number of blocks.\n        mid_channels (int): Channel number of the intermediate features.\n        kernel_size (int): Kernel size of ResidualGroup.\n        reduction (int): Channel reduction of CA. Default: 16.\n        act (function): activation function. Default: nn.LeakyReLU(0.2, True).\n        norm (str | None): Normalization layer. If it is None, no\n            normalization is performed. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 block_layer,\n                 num_block_layers,\n                 mid_channels,\n                 kernel_size,\n                 reduction,\n                 act=nn.LeakyReLU(0.2, True),\n                 norm=None):\n        super().__init__()\n\n        self.body = make_layer(\n            block_layer,\n            num_block_layers,\n            mid_channels=mid_channels,\n            kernel_size=kernel_size,\n            reduction=reduction,\n            norm=norm,\n            act=act)\n        self.conv_after_body = ConvNormWithReflectionPad(\n            mid_channels, mid_channels, kernel_size, norm=norm)\n\n    def forward(self, x):\n        \"\"\"Forward function for ResidualGroup.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Output tensor with shape (n, c, h, w).\n        \"\"\"\n\n        y = self.body(x)\n        y = self.conv_after_body(y)\n        return x + y\n"
  },
  {
    "path": "mmagic/models/editors/controlnet/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .controlnet import ControlStableDiffusion\nfrom .controlnet_utils import change_base_model\n\n__all__ = ['ControlStableDiffusion', 'change_base_model']\n"
  },
  {
    "path": "mmagic/models/editors/controlnet/controlnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom logging import WARNING\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.optim import OptimWrapperDict\nfrom PIL import Image\nfrom torch import Tensor\nfrom tqdm import tqdm\n\nfrom mmagic.models.archs import AttentionInjection\nfrom mmagic.models.utils import build_module\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ..stable_diffusion import StableDiffusion\nfrom .controlnet_utils import change_base_model\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass ControlStableDiffusion(StableDiffusion):\n    \"\"\"Implementation of `ControlNet with Stable Diffusion.\n\n    <https://arxiv.org/abs/2302.05543>`_ (ControlNet).\n\n    Args:\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        controlnet (Union[dict, nn.Module]): The config or module for\n            ControlNet.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        dtype (str, optional): The dtype for the model. Defaults to 'fp16'.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise  # noqa\n            Defaults to 0.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Defaults to\n                dict(type='DataPreprocessor').\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Defaults to None/\n    \"\"\"\n\n    def __init__(self,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 controlnet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 dtype: str = 'fp32',\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor=dict(type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None,\n                 attention_injection=False):\n        super().__init__(vae, text_encoder, tokenizer, unet, scheduler,\n                         test_scheduler, dtype, enable_xformers,\n                         noise_offset_weight, tomesd_cfg, data_preprocessor,\n                         init_cfg)\n\n        default_args = dict()\n        if dtype is not None:\n            default_args['dtype'] = dtype\n\n        # NOTE: initialize controlnet as fp32\n        self.controlnet = build_module(controlnet, MODELS)\n        self._controlnet_ori_dtype = next(self.controlnet.parameters()).dtype\n        print_log(\n            'Set ControlNetModel dtype to '\n            f'\\'{self._controlnet_ori_dtype}\\'.', 'current')\n        self.set_xformers(self.controlnet)\n\n        self.vae.requires_grad_(False)\n        self.text_encoder.requires_grad_(False)\n        self.unet.requires_grad_(False)\n\n        if attention_injection:\n            self.unet = AttentionInjection(self.unet)\n\n    def init_weights(self):\n        \"\"\"Initialize the weights. Noted that this function will only be called\n        at train. If you want to inference with a different unet model, you can\n        call this function manually or use\n        `mmagic.models.editors.controlnet.controlnet_utils.change_base_model`\n        to convert the weight of ControlNet manually.\n\n        Example:\n        >>> 1. init controlnet from unet\n        >>> init_cfg = dict(type='init_from_unet')\n\n        >>> 2. switch controlnet weight from unet\n        >>> # base model is not defined, use `runwayml/stable-diffusion-v1-5`\n        >>> # as default\n        >>> init_cfg = dict(type='convert_from_unet')\n        >>> # base model is defined\n        >>> init_cfg = dict(\n        >>>     type='convert_from_unet',\n        >>>     base_model=dict(\n        >>>         type='UNet2DConditionModel',\n        >>>         from_pretrained='REPO_ID',\n        >>>         subfolder='unet'))\n        \"\"\"\n        if self.init_cfg is not None:\n            init_type = self.init_cfg.get('type', None)\n        else:\n            init_type = None\n\n        if init_type == 'init_from_unet':\n            # fetch module\n            if is_model_wrapper(self.controlnet):\n                controlnet = self.controlnet.module\n            else:\n                controlnet = self.controlnet\n\n            if is_model_wrapper(self.unet):\n                unet = self.unet.module\n            else:\n                unet = self.unet\n\n            if controlnet._from_pretrained is not None:\n                print_log(\n                    'ControlNet has initialized from pretrained '\n                    f'weight \\'{controlnet._from_pretrained}\\'.'\n                    ' Re-initialize ControlNet from Unet.', 'current', WARNING)\n\n            # copy weight\n            log_template = 'Initialize weight ControlNet from Unet: {}'\n            for n, p in unet.named_parameters():\n                if n in controlnet.state_dict():\n                    print_log(log_template.format(n), 'current')\n                    controlnet.state_dict()[n].copy_(p.data)\n\n            # check zero_conv\n            zero_conv_blocks = controlnet.controlnet_down_blocks\n            for n, p in zero_conv_blocks.named_parameters():\n                if not (p == 0).all():\n                    print_log(f'{n} in ControlNet is not initialized with '\n                              'zero. Set to zero manually.')\n                    p.data.zero_()\n\n        elif init_type == 'convert_from_unet':\n            # fetch module\n            if is_model_wrapper(self.controlnet):\n                controlnet = self.controlnet.module\n            else:\n                controlnet = self.controlnet\n\n            if is_model_wrapper(self.unet):\n                unet = self.unet.module\n            else:\n                unet = self.unet\n\n            # use sd-v15 as base model by default\n            base_model_default_cfg = dict(\n                type='UNet2DConditionModel',\n                from_pretrained='runwayml/stable-diffusion-v1-5',\n                subfolder='unet')\n            base_model_cfg = self.init_cfg.get('base_model',\n                                               base_model_default_cfg)\n            base_model = MODELS.build(base_model_cfg)\n            change_base_model(controlnet, unet, base_model)\n\n        else:\n            assert init_type is None, (\n                'Only support \\'init_from_unet\\', \\'convert_from_unet\\' or '\n                f'None. But receive {init_type}.')\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        \"\"\"Train step for ControlNet model.\n        Args:\n            data (dict): Data sampled from dataloader.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n        optimizer = optim_wrapper['controlnet']\n\n        with optimizer.optim_context(self.controlnet):\n            target = inputs['target']\n            control = (inputs['source'] + 1) / 2  # [-1, 1] -> [0, 1]\n            prompt = data_samples.prompt\n\n            num_batches = target.shape[0]\n\n            target = target.to(self.dtype)\n            latents = self.vae.encode(target).latent_dist.sample()\n            latents = latents * self.vae.config.scaling_factor\n\n            noise = torch.randn_like(latents)\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n\n            noisy_latents = self.scheduler.add_noise(latents, noise, timesteps)\n\n            input_ids = self.tokenizer(\n                prompt,\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n\n            encoder_hidden_states = self.text_encoder(input_ids)[0]\n\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            # forward control\n            # NOTE: we train controlnet in fp32, convert to float manually\n            down_block_res_samples, mid_block_res_sample = self.controlnet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float(),\n                controlnet_cond=control.float(),\n                return_dict=False,\n            )\n            # Predict the noise residual and compute loss\n            # NOTE: we train unet in fp32, convert to float manually\n            model_output = self.unet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float(),\n                down_block_additional_residuals=down_block_res_samples,\n                mid_block_additional_residual=mid_block_res_sample)\n            model_pred = model_output['sample']\n\n            loss = F.mse_loss(model_pred.float(), gt.float(), reduction='mean')\n\n            optimizer.update_params(loss)\n\n        return dict(loss=loss)\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        prompt = data['data_samples'].prompt\n        control = data['inputs']['source']\n\n        output = self.infer(\n            prompt, control=((control + 1) / 2), return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(\n            samples, data['data_samples'], key='target')\n        control = self.data_preprocessor.destruct(\n            control, data['data_samples'], key='source')\n\n        data_sample = DataSample(\n            fake_img=samples,\n            control=control,\n            prompt=data['data_samples'].prompt)\n        data_sample_list = data_sample.split()\n        return data_sample_list\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        prompt = data['data_samples'].prompt\n        control = data['inputs']['source']\n\n        output = self.infer(\n            prompt, control=((control + 1) / 2), return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(\n            samples, data['data_samples'], key='target')\n        control = self.data_preprocessor.destruct(\n            control, data['data_samples'], key='source')\n\n        data_sample = DataSample(\n            fake_img=samples,\n            control=control,\n            prompt=data['data_samples'].prompt)\n        data_sample_list = data_sample.split()\n        return data_sample_list\n\n    # NOTE: maybe we should do this in a controlnet preprocessor\n    @staticmethod\n    def prepare_control(image: Tuple[Image.Image, List[Image.Image], Tensor,\n                                     List[Tensor]], width: int, height: int,\n                        batch_size: int, num_images_per_prompt: int,\n                        device: str, dtype: str) -> Tensor:\n        \"\"\"A helper function to prepare single control images.\n\n        Args:\n            image (Tuple[Image.Image, List[Image.Image], Tensor, List[Tensor]]):  # noqa\n                The input image for control.\n            batch_size (int): The number of the prompt. The control will\n                be repeated for `batch_size` times.\n            num_images_per_prompt (int): The number images generate for one\n                prompt.\n            device (str): The device of the control.\n            dtype (str): The dtype of the control.\n\n        Returns:\n            Tensor: The control in torch.tensor.\n        \"\"\"\n        if not isinstance(image, torch.Tensor):\n            if isinstance(image, Image.Image):\n                image = [image]\n\n            if isinstance(image[0], Image.Image):\n                image = [\n                    img.resize((width, height), resample=Image.LANCZOS)\n                    for img in image\n                ]\n                image = [np.array(img)[None, :] for img in image]\n                image = np.concatenate(image, axis=0)\n                image = np.array(image).astype(np.float32) / 255.0\n                image = image.transpose(0, 3, 1, 2)\n                image = torch.from_numpy(image)\n            elif isinstance(image[0], torch.Tensor):\n                image = torch.cat(image, dim=0)\n\n        image_batch_size = image.shape[0]\n\n        if image_batch_size == 1:\n            repeat_by = batch_size * num_images_per_prompt\n        else:\n            assert image_batch_size == batch_size, (\n                'The number of Control condition must be 1 or equal to the '\n                'number of prompt.')\n            # image batch size is the same as prompt batch size\n            repeat_by = num_images_per_prompt\n\n        image = image.repeat_interleave(repeat_by, dim=0)\n\n        image = image.to(device=device, dtype=dtype)\n\n        return image\n\n    def train(self, mode: bool = True):\n        \"\"\"Set train/eval mode.\n\n        Args:\n            mode (bool, optional): Whether set train mode. Defaults to True.\n        \"\"\"\n        if mode:\n            if next(self.controlnet.parameters()\n                    ).dtype != self._controlnet_ori_dtype:\n                print_log(\n                    'Set ControlNetModel dtype to '\n                    f'\\'{self._controlnet_ori_dtype}\\' in the train mode.',\n                    'current')\n            self.controlnet.to(self._controlnet_ori_dtype)\n        else:\n            self.controlnet.to(self.dtype)\n            print_log(\n                f'Set ControlNetModel dtype to \\'{self.dtype}\\' '\n                'in the eval mode.', 'current')\n        return super().train(mode)\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              control: Optional[Union[str, np.ndarray, torch.Tensor]] = None,\n              controlnet_conditioning_scale: float = 1.0,\n              num_inference_steps: int = 20,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[torch.Generator] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              return_type='image',\n              show_progress=True):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (str or List[str]): The prompt or prompts to guide\n                the image generation.\n            height (int, Optional): The height in pixels of the generated\n                image. If not passed, the height will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            width (int, Optional): The width in pixels of the generated image.\n                If not passed, the width will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            num_inference_steps (int): The number of denoising steps.\n                More denoising steps usually lead to a higher quality image at\n                the expense of slower inference. Defaults to 50.\n            guidance_scale (float): Guidance scale as defined in Classifier-\n                Free Diffusion Guidance (https://arxiv.org/abs/2207.12598).\n                Defaults to 7.5\n            negative_prompt (str or List[str], optional): The prompt or\n                prompts not to guide the image generation. Ignored when not\n                using guidance (i.e., ignored if `guidance_scale` is less\n                than 1). Defaults to None.\n            num_images_per_prompt (int): The number of images to generate\n                per prompt. Defaults to 1.\n            eta (float): Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                DDIMScheduler, will be ignored for others. Defaults to 0.0.\n            generator (torch.Generator, optional): A torch generator to make\n                generation deterministic. Defaults to None.\n            latents (torch.FloatTensor, optional): Pre-generated noisy latents,\n                sampled from a Gaussian distribution, to be used as inputs for\n                image generation. Can be used to tweak the same generation with\n                different prompts. If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n                Defaults to None.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images and Control image.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        img_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n        if is_model_wrapper(self.controlnet):\n            control_dtype = self.controlnet.module.dtype\n        else:\n            control_dtype = self.controlnet.dtype\n        controls = self.prepare_control(\n            control,\n            width,\n            height,\n            batch_size,\n            num_images_per_prompt,\n            device,\n            dtype=control_dtype)\n        if do_classifier_free_guidance:\n            controls = torch.cat([controls] * 2)\n\n        # 3. Encode input prompt\n        text_embeddings = self._encode_prompt(prompt, device,\n                                              num_images_per_prompt,\n                                              do_classifier_free_guidance,\n                                              negative_prompt)\n\n        # 4. Prepare timesteps\n        # self.scheduler.set_timesteps(num_inference_steps, device=device)\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare latent variables\n        num_channels_latents = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        # 6. Prepare extra step kwargs.\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            latent_model_input = latent_model_input.to(control_dtype)\n            text_embeddings = text_embeddings.to(control_dtype)\n\n            down_block_res_samples, mid_block_res_sample = self.controlnet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=text_embeddings,\n                controlnet_cond=controls,\n                return_dict=False,\n            )\n\n            down_block_res_samples = [\n                down_block_res_sample * controlnet_conditioning_scale\n                for down_block_res_sample in down_block_res_samples\n            ]\n            mid_block_res_sample *= controlnet_conditioning_scale\n\n            # predict the noise residual\n            noise_pred = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=text_embeddings,\n                down_block_additional_residuals=down_block_res_samples,\n                mid_block_additional_residual=mid_block_res_sample,\n            )['sample']\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.test_scheduler.step(\n                    noise_pred, t, latents, **extra_step_kwargs)['prev_sample']\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n\n        if do_classifier_free_guidance:\n            controls = torch.split(controls, controls.shape[0] // 2, dim=0)[0]\n\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n            controls = self.output_to_pil(controls * 2 - 1)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n            controls = controls.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image, 'controls': controls}\n\n    def forward(self, *args, **kwargs):\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n\n\n@MODELS.register_module()\nclass ControlStableDiffusionImg2Img(ControlStableDiffusion):\n\n    def _default_height_width(self, height, width, image):\n        if isinstance(image, list):\n            image = image[0]\n\n        if height is None:\n            if isinstance(image, Image.Image):\n                height = image.height\n            elif isinstance(image, torch.Tensor):\n                height = image.shape[3]\n\n            height = (height // 8) * 8  # round down to nearest multiple of 8\n\n        if width is None:\n            if isinstance(image, Image.Image):\n                width = image.width\n            elif isinstance(image, torch.Tensor):\n                width = image.shape[2]\n\n            width = (width // 8) * 8  # round down to nearest multiple of 8\n\n        return height, width\n\n    def get_timesteps(self, num_inference_steps, strength, device):\n        # get the original timestep using init_timestep\n        init_timestep = min(\n            int(num_inference_steps * strength), num_inference_steps)\n\n        t_start = max(num_inference_steps - init_timestep, 0)\n        timesteps = self.test_scheduler.timesteps[t_start:]\n\n        return timesteps, num_inference_steps - t_start\n\n    def prepare_latents(self,\n                        image,\n                        timestep,\n                        batch_size,\n                        num_images_per_prompt,\n                        dtype,\n                        device,\n                        generator=None,\n                        noise=None):\n        if not isinstance(image, (torch.Tensor, Image.Image, list)):\n            raise ValueError(\n                f'`image` has to be of type `torch.Tensor`, '\n                f' `PIL.Image.Image` or list but is {type(image)}')\n\n        image = image.to(device=device, dtype=dtype)\n\n        batch_size = batch_size * num_images_per_prompt\n        if isinstance(generator, list) and len(generator) != batch_size:\n            raise ValueError(\n                f'You have passed a list of generators of '\n                f' length {len(generator)}, but requested an effective batch'\n                f' size of {batch_size}. Make sure the batch size '\n                f' matches the length of the generators.')\n\n        if isinstance(generator, list):\n            init_latents = [\n                self.vae.encode(image[i:i +\n                                      1]).latent_dist.sample(generator[i])\n                for i in range(batch_size)\n            ]\n            init_latents = torch.cat(init_latents, dim=0)\n        else:\n            init_latents = self.vae.encode(image).latent_dist.sample(generator)\n\n        init_latents = self.vae.config.scaling_factor * init_latents\n\n        vae_encode_latents = init_latents\n\n        if batch_size > init_latents.shape[0] and \\\n                batch_size % init_latents.shape[0] == 0:\n            raise ValueError(\n                f'Cannot duplicate `image` of batch size'\n                f' {init_latents.shape[0]} to {batch_size} text prompts.')\n        else:\n            init_latents = torch.cat([init_latents], dim=0)\n\n        shape = init_latents.shape\n        if noise is None:\n            noise = torch.randn(\n                shape, generator=generator, device=device, dtype=dtype)\n\n        # get latents\n        init_latents = self.scheduler.add_noise(init_latents, noise, timestep)\n\n        return init_latents, vae_encode_latents\n\n    def prepare_latent_image(self, image, dtype):\n        if isinstance(image, torch.Tensor):\n            # Batch single image\n            if image.ndim == 3:\n                image = image.unsqueeze(0)\n\n            image = image.to(dtype=dtype)\n        else:\n            # preprocess image\n            if isinstance(image, (Image.Image, np.ndarray)):\n                image = [image]\n\n            if isinstance(image, list) and isinstance(image[0], Image.Image):\n                image = [np.array(i.convert('RGB'))[None, :] for i in image]\n                image = np.concatenate(image, axis=0)\n            elif isinstance(image, list) and isinstance(image[0], np.ndarray):\n                image = np.concatenate([i[None, :] for i in image], axis=0)\n\n            image = image.transpose(0, 3, 1, 2)\n            image = torch.from_numpy(image).to(dtype=dtype) / 127.5 - 1.0\n\n        return image\n\n    @torch.no_grad()\n    def infer(\n        self,\n        prompt: Union[str, List[str]],\n        latent_image: Union[torch.FloatTensor, Image.Image,\n                            List[torch.FloatTensor], List[Image.Image]] = None,\n        latent_mask: torch.FloatTensor = None,\n        strength: float = 1.0,\n        height: Optional[int] = None,\n        width: Optional[int] = None,\n        control: Optional[Union[str, np.ndarray, torch.Tensor]] = None,\n        controlnet_conditioning_scale: float = 1.0,\n        num_inference_steps: int = 20,\n        guidance_scale: float = 7.5,\n        negative_prompt: Optional[Union[str, List[str]]] = None,\n        num_images_per_prompt: Optional[int] = 1,\n        eta: float = 0.0,\n        generator: Optional[torch.Generator] = None,\n        latents: Optional[torch.FloatTensor] = None,\n        return_type='image',\n        show_progress=True,\n        reference_img: Union[torch.FloatTensor, Image.Image,\n                             List[torch.FloatTensor],\n                             List[Image.Image]] = None,\n    ):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (str or List[str]): The prompt or prompts to guide\n                the image generation.\n            height (int, Optional): The height in pixels of the generated\n                image. If not passed, the height will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            width (int, Optional): The width in pixels of the generated image.\n                If not passed, the width will be\n                `self.unet_sample_size * self.vae_scale_factor` Defaults\n                to None.\n            num_inference_steps (int): The number of denoising steps.\n                More denoising steps usually lead to a higher quality image at\n                the expense of slower inference. Defaults to 50.\n            guidance_scale (float): Guidance scale as defined in Classifier-\n                Free Diffusion Guidance (https://arxiv.org/abs/2207.12598).\n                Defaults to 7.5\n            negative_prompt (str or List[str], optional): The prompt or\n                prompts not to guide the image generation. Ignored when not\n                using guidance (i.e., ignored if `guidance_scale` is less\n                than 1). Defaults to None.\n            num_images_per_prompt (int): The number of images to generate\n                per prompt. Defaults to 1.\n            eta (float): Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                DDIMScheduler, will be ignored for others. Defaults to 0.0.\n            generator (torch.Generator, optional): A torch generator to make\n                generation deterministic. Defaults to None.\n            latents (torch.FloatTensor, optional): Pre-generated noisy latents,\n                sampled from a Gaussian distribution, to be used as inputs for\n                image generation. Can be used to tweak the same generation with\n                different prompts. If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n                Defaults to None.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images and Control image.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n\n        # 0. Default height and width to unet\n        # height = height or self.unet_sample_size * self.vae_scale_factor\n        # width = width or self.unet_sample_size * self.vae_scale_factor\n\n        height, width = self._default_height_width(height, width, control)\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        img_dtype = self.vae.module.dtype if hasattr(\n            self.vae, 'module') else self.vae.dtype\n        if is_model_wrapper(self.controlnet):\n            control_dtype = self.controlnet.module.dtype\n        else:\n            control_dtype = self.controlnet.dtype\n        controls = self.prepare_control(\n            control,\n            width,\n            height,\n            batch_size,\n            num_images_per_prompt,\n            device,\n            dtype=control_dtype)\n        if do_classifier_free_guidance:\n            controls = torch.cat([controls] * 2)\n\n        latent_image = self.prepare_latent_image(latent_image,\n                                                 self.controlnet.dtype)\n\n        if reference_img is not None:\n            reference_img = self.prepare_latent_image(reference_img,\n                                                      self.controlnet.dtype)\n\n        # 3. Encode input prompt\n        text_embeddings = self._encode_prompt(prompt, device,\n                                              num_images_per_prompt,\n                                              do_classifier_free_guidance,\n                                              negative_prompt)\n        text_embeddings = text_embeddings.to(control_dtype)\n\n        # 4. Prepare timesteps\n        # self.scheduler.set_timesteps(num_inference_steps, device=device)\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        timesteps, num_inference_steps = self.get_timesteps(\n            num_inference_steps, strength, device)\n\n        latent_timestep = timesteps[:1].repeat(batch_size *\n                                               num_images_per_prompt)\n\n        # 5. Prepare latent variables\n        latents, vae_encode_latents = self.prepare_latents(\n            latent_image,\n            latent_timestep,\n            batch_size,\n            num_images_per_prompt,\n            text_embeddings.dtype,\n            device,\n            generator,\n            noise=latents)\n\n        if reference_img is not None:\n            _, ref_img_vae_latents = self.prepare_latents(\n                reference_img,\n                latent_timestep,\n                batch_size,\n                num_images_per_prompt,\n                text_embeddings.dtype,\n                device,\n                generator,\n                noise=latents)\n\n        # 6. Prepare extra step kwargs.\n        extra_step_kwargs = self.prepare_test_scheduler_extra_step_kwargs(\n            generator, eta)\n\n        # 7. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            latent_model_input = latent_model_input.to(control_dtype)\n\n            if reference_img is not None:\n                ref_img_vae_latents_t = self.scheduler.add_noise(\n                    ref_img_vae_latents, torch.randn_like(ref_img_vae_latents),\n                    t)\n                ref_img_vae_latents_model_input = torch.cat(\n                    [ref_img_vae_latents_t] * 2) if \\\n                    do_classifier_free_guidance else ref_img_vae_latents_t\n                ref_img_vae_latents_model_input =  \\\n                    self.test_scheduler.scale_model_input(\n                        ref_img_vae_latents_model_input, t)\n                ref_img_vae_latents_model_input = \\\n                    ref_img_vae_latents_model_input.to(control_dtype)\n\n            down_block_res_samples, mid_block_res_sample = self.controlnet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=text_embeddings,\n                controlnet_cond=controls,\n                return_dict=False,\n            )\n\n            down_block_res_samples = [\n                down_block_res_sample * controlnet_conditioning_scale\n                for down_block_res_sample in down_block_res_samples\n            ]\n            mid_block_res_sample *= controlnet_conditioning_scale\n\n            # predict the noise residual\n            if reference_img is not None:\n                noise_pred = self.unet(\n                    latent_model_input,\n                    t,\n                    encoder_hidden_states=text_embeddings,\n                    down_block_additional_residuals=down_block_res_samples,\n                    mid_block_additional_residual=mid_block_res_sample,\n                    ref_x=ref_img_vae_latents_model_input)['sample']\n            else:\n                noise_pred = self.unet(\n                    latent_model_input,\n                    t,\n                    encoder_hidden_states=text_embeddings,\n                    down_block_additional_residuals=down_block_res_samples,\n                    mid_block_additional_residual=mid_block_res_sample,\n                )['sample']\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.test_scheduler.step(\n                    noise_pred, t, latents, **extra_step_kwargs)['prev_sample']\n\n        if latent_mask is not None:\n            latents = latents * latent_mask + \\\n                vae_encode_latents * (1.0 - latent_mask)\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n\n        if do_classifier_free_guidance:\n            controls = torch.split(controls, controls.shape[0] // 2, dim=0)[0]\n\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n            controls = self.output_to_pil(controls * 2 - 1)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n            controls = controls.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image, 'controls': controls}\n"
  },
  {
    "path": "mmagic/models/editors/controlnet/controlnet_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom logging import ERROR\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmengine import print_log\nfrom mmengine.runner import save_checkpoint\n\n\ndef change_base_model(controlnet: nn.Module,\n                      curr_model: nn.Module,\n                      base_model: nn.Module,\n                      save_path: Optional[str] = None,\n                      *args,\n                      **kwargs) -> nn.Module:\n    \"\"\"This function is used to change the base model of ControlNet. Refers to\n    https://github.com/lllyasviel/ControlNet/blob/main/tool_transfer_control.py\n    .\n\n    # noqa.\n\n    Args:\n        controlnet (nn.Module): The model for ControlNet to convert.\n        curr_model (nn.Module): The model of current Stable Diffusion's Unet.\n        base_model (nn.Module): The model of Stable Diffusion's Unet which\n            ControlNet initialized with.\n        save_path (str, optional): The path to save the converted model.\n            Defaults to None.\n\n        *args, **kwargs: Arguments for `save_checkpoint`.\n    \"\"\"\n    dtype = next(controlnet.parameters()).dtype\n    base_state_dict = base_model.state_dict()\n    curr_state_dict = curr_model.state_dict()\n\n    print_log('Start convert ControlNet to new Unet.', 'current')\n    for k, v in controlnet.state_dict().items():\n        if k in base_state_dict:\n            base_v = base_state_dict[k].cpu()\n            curr_v = curr_state_dict[k].cpu()\n            try:\n                offset = v.cpu() - base_v\n                new_v = offset + curr_v\n                controlnet.state_dict()[k].data.copy_(new_v.to(dtype))\n                print_log(f'Convert success: \\'{k}\\'.', 'current')\n            except Exception as exception:\n                print_log(\n                    f'Error occurs when convert \\'{k}\\'. '\n                    'Please check that the model structure of '\n                    '\\'ControlNet\\', \\'BaseModel\\' and \\'CurrentModel\\' '\n                    'are consistent.', 'current', ERROR)\n                raise exception\n    if save_path:\n        save_checkpoint(controlnet.state_dict(), save_path, *args, **kwargs)\n\n    return controlnet\n"
  },
  {
    "path": "mmagic/models/editors/cyclegan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .cyclegan import CycleGAN\nfrom .cyclegan_generator import ResnetGenerator\n\n__all__ = ['CycleGAN', 'ResnetGenerator']\n"
  },
  {
    "path": "mmagic/models/editors/cyclegan/cyclegan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ...base_models import BaseTranslationModel\nfrom ...utils import set_requires_grad\nfrom .cyclegan_modules import GANImageBuffer\n\n\n@MODELS.register_module()\nclass CycleGAN(BaseTranslationModel):\n    \"\"\"CycleGAN model for unpaired image-to-image translation.\n\n    Ref:\n    Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial\n    Networks\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 buffer_size=50,\n                 loss_config=dict(cycle_loss_weight=10., id_loss_weight=0.5),\n                 **kwargs):\n        super().__init__(*args, **kwargs)\n        # GAN image buffers\n        self.image_buffers = dict()\n        self.buffer_size = buffer_size\n        for domain in self._reachable_domains:\n            self.image_buffers[domain] = GANImageBuffer(self.buffer_size)\n\n        self.loss_config = loss_config\n\n    def forward_test(self, img, target_domain, **kwargs):\n        \"\"\"Forward function for testing.\n\n        Args:\n            img (tensor): Input image tensor.\n            target_domain (str): Target domain of output image.\n            kwargs (dict): Other arguments.\n\n        Returns:\n            dict: Forward results.\n        \"\"\"\n        # This is a trick for CycleGAN\n        # ref: https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/e1bdf46198662b0f4d0b318e24568205ec4d7aee/test.py#L54 # noqa\n        self.train()\n        target = self.translation(img, target_domain=target_domain, **kwargs)\n        results = dict(source=img, target=target)\n        return results\n\n    def _get_disc_loss(self, outputs):\n        \"\"\"Backward function for the discriminators.\n\n        Args:\n            outputs (dict): Dict of forward results.\n\n        Returns:\n            dict: Discriminators' loss and loss dict.\n        \"\"\"\n        discriminators = self.get_module(self.discriminators)\n\n        log_vars_d = dict()\n        loss_d = 0\n\n        # GAN loss for discriminators['a']\n        for domain in self._reachable_domains:\n            losses = dict()\n            fake_img = self.image_buffers[domain].query(\n                outputs[f'fake_{domain}'])\n            fake_pred = discriminators[domain](fake_img.detach())\n            losses[f'loss_gan_d_{domain}_fake'] = F.mse_loss(\n                fake_pred, 0. * torch.ones_like(fake_pred))\n            real_pred = discriminators[domain](outputs[f'real_{domain}'])\n            losses[f'loss_gan_d_{domain}_real'] = F.mse_loss(\n                real_pred, 1. * torch.ones_like(real_pred))\n\n            _loss_d, _log_vars_d = self.parse_losses(losses)\n            _loss_d *= 0.5\n            loss_d += _loss_d\n            log_vars_d[f'loss_gan_d_{domain}'] = _log_vars_d['loss'] * 0.5\n\n        return loss_d, log_vars_d\n\n    def _get_gen_loss(self, outputs):\n        \"\"\"Backward function for the generators.\n\n        Args:\n            outputs (dict): Dict of forward results.\n\n        Returns:\n            dict: Generators' loss and loss dict.\n        \"\"\"\n        generators = self.get_module(self.generators)\n        discriminators = self.get_module(self.discriminators)\n\n        losses = dict()\n        # gan loss\n        for domain in self._reachable_domains:\n            # Identity reconstruction for generators\n            outputs[f'identity_{domain}'] = generators[domain](\n                outputs[f'real_{domain}'])\n            # GAN loss for generators\n            fake_pred = discriminators[domain](outputs[f'fake_{domain}'])\n            # LSGAN loss\n            losses[f'loss_gan_g_{domain}'] = F.mse_loss(\n                fake_pred, 1. * torch.ones_like(fake_pred))\n\n        # cycle loss\n        loss_weight = self.loss_config['cycle_loss_weight']\n        losses['cycle_loss'] = 0.\n        for domain in self._reachable_domains:\n            losses['cycle_loss'] += loss_weight * F.l1_loss(\n                outputs[f'cycle_{domain}'],\n                outputs[f'real_{domain}'],\n                reduction='mean')\n\n        # id loss\n        loss_weight = self.loss_config['id_loss_weight']\n        if loss_weight != 0.:\n            losses['id_loss'] = 0.\n            for domain in self._reachable_domains:\n                losses['id_loss'] += loss_weight * F.l1_loss(\n                    outputs[f'identity_{domain}'],\n                    outputs[f'real_{domain}'],\n                    reduction='mean')\n\n        loss_g, log_vars_g = self.parse_losses(losses)\n\n        return loss_g, log_vars_g\n\n    def _get_opposite_domain(self, domain):\n        \"\"\"Get the opposite domain respect to the input domain.\n\n        Args:\n            domain (str): The input domain.\n\n        Returns:\n            str: The opposite domain.\n        \"\"\"\n        for item in self._reachable_domains:\n            if item != domain:\n                return item\n        return None\n\n    def train_step(self, data: dict, optim_wrapper: OptimWrapperDict):\n        \"\"\"Training step function.\n\n        Args:\n            data_batch (dict): Dict of the input data batch.\n            optimizer (dict[torch.optim.Optimizer]): Dict of optimizers for\n                the generators and discriminators.\n            ddp_reducer (:obj:`Reducer` | None, optional): Reducer from ddp.\n                It is used to prepare for ``backward()`` in ddp. Defaults to\n                None.\n            running_status (dict | None, optional): Contains necessary basic\n                information for training, e.g., iteration number. Defaults to\n                None.\n\n        Returns:\n            dict: Dict of loss, information for logger, the number of samples\\\n                and results for visualization.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n        disc_optimizer_wrapper = optim_wrapper['discriminators']\n\n        inputs_dict = data['inputs']\n        outputs, log_vars = dict(), dict()\n\n        # forward generators\n        with disc_optimizer_wrapper.optim_context(self.discriminators):\n            for target_domain in self._reachable_domains:\n                # fetch data by domain\n                source_domain = self.get_other_domains(target_domain)[0]\n                img = inputs_dict[f'img_{source_domain}']\n                # translation process\n                results = self(\n                    img, test_mode=False, target_domain=target_domain)\n                outputs[f'real_{source_domain}'] = results['source']\n                outputs[f'fake_{target_domain}'] = results['target']\n                # cycle process\n                results = self(\n                    results['target'],\n                    test_mode=False,\n                    target_domain=source_domain)\n                outputs[f'cycle_{source_domain}'] = results['target']\n\n            # update discriminators\n            disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n            loss_d, log_vars_d = self._get_disc_loss(outputs)\n            disc_optimizer_wrapper.update_params(loss_d)\n            log_vars.update(log_vars_d)\n\n        # generators, no updates to discriminator parameters.\n        if ((curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0\n                and curr_iter >= self.disc_init_steps):\n            set_requires_grad(self.discriminators, False)\n            # update generator\n            gen_optimizer_wrapper = optim_wrapper['generators']\n            with gen_optimizer_wrapper.optim_context(self.generators):\n                loss_g, log_vars_g = self._get_gen_loss(outputs)\n                gen_optimizer_wrapper.update_params(loss_g)\n                log_vars.update(log_vars_g)\n\n            set_requires_grad(self.discriminators, True)\n\n        return log_vars\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n\n        outputs = {}\n        for src_domain in self._reachable_domains:\n            # Identity reconstruction for generators\n            target_domain = self.get_other_domains(src_domain)[0]\n            target = self.forward_test(\n                inputs_dict[f'img_{src_domain}'],\n                target_domain=target_domain)['target']\n            outputs[f'img_{target_domain}'] = target\n\n        batch_sample_list = []\n        num_batches = next(iter(outputs.values())).shape[0]\n        data_samples = data_samples.split()\n        for idx in range(num_batches):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n\n            for src_domain in self._reachable_domains:\n                target_domain = self.get_other_domains(src_domain)[0]\n                fake_img = outputs[f'img_{target_domain}'][idx]\n                fake_img = self.data_preprocessor.destruct(\n                    fake_img, data_samples[idx], f'img_{target_domain}')\n                setattr(gen_sample, f'fake_{target_domain}', fake_img)\n\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n\n        outputs = {}\n        for src_domain in self._reachable_domains:\n            # Identity reconstruction for generators\n            target_domain = self.get_other_domains(src_domain)[0]\n            target = self.forward_test(\n                inputs_dict[f'img_{src_domain}'],\n                target_domain=target_domain)['target']\n            outputs[f'img_{target_domain}'] = target\n\n        batch_sample_list = []\n        num_batches = next(iter(outputs.values())).shape[0]\n        data_samples = data_samples.split()\n        for idx in range(num_batches):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n\n            for src_domain in self._reachable_domains:\n                target_domain = self.get_other_domains(src_domain)[0]\n                fake_img = outputs[f'img_{target_domain}'][idx]\n                fake_img = self.data_preprocessor.destruct(\n                    fake_img, data_samples[idx], f'img_{target_domain}')\n                gen_sample.set_tensor_data({f'fake_{target_domain}': fake_img})\n\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n"
  },
  {
    "path": "mmagic/models/editors/cyclegan/cyclegan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.utils import generation_init_weights\nfrom mmagic.registry import MODELS\nfrom .cyclegan_modules import ResidualBlockWithDropout\n\n\n@MODELS.register_module()\nclass ResnetGenerator(BaseModule):\n    \"\"\"Construct a Resnet-based generator that consists of residual blocks\n    between a few downsampling/upsampling operations.\n\n    Args:\n        in_channels (int): Number of channels in input images.\n        out_channels (int): Number of channels in output images.\n        base_channels (int): Number of filters at the last conv layer.\n            Default: 64.\n        norm_cfg (dict): Config dict to build norm layer. Default:\n            `dict(type='IN')`.\n        use_dropout (bool): Whether to use dropout layers. Default: False.\n        num_blocks (int): Number of residual blocks. Default: 9.\n        padding_mode (str): The name of padding layer in conv layers:\n            'reflect' | 'replicate' | 'zeros'. Default: 'reflect'.\n        init_cfg (dict): Config dict for initialization.\n            `type`: The name of our initialization method. Default: 'normal'.\n            `gain`: Scaling factor for normal, xavier and orthogonal.\n            Default: 0.02.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 base_channels=64,\n                 norm_cfg=dict(type='IN'),\n                 use_dropout=False,\n                 num_blocks=9,\n                 padding_mode='reflect',\n                 init_cfg=dict(type='normal', gain=0.02)):\n        super().__init__(init_cfg=init_cfg)\n        assert num_blocks >= 0, ('Number of residual blocks must be '\n                                 f'non-negative, but got {num_blocks}.')\n        assert isinstance(norm_cfg, dict), (\"'norm_cfg' should be dict, but\"\n                                            f'got {type(norm_cfg)}')\n        assert 'type' in norm_cfg, \"'norm_cfg' must have key 'type'\"\n        # We use norm layers in the resnet generator.\n        # Only for IN, use bias to follow cyclegan's original implementation.\n        use_bias = norm_cfg['type'] == 'IN'\n\n        model = []\n        model += [\n            ConvModule(\n                in_channels=in_channels,\n                out_channels=base_channels,\n                kernel_size=7,\n                padding=3,\n                bias=use_bias,\n                norm_cfg=norm_cfg,\n                padding_mode=padding_mode)\n        ]\n\n        num_down = 2\n        # add downsampling layers\n        for i in range(num_down):\n            multiple = 2**i\n            model += [\n                ConvModule(\n                    in_channels=base_channels * multiple,\n                    out_channels=base_channels * multiple * 2,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    bias=use_bias,\n                    norm_cfg=norm_cfg)\n            ]\n\n        # add residual blocks\n        multiple = 2**num_down\n        for i in range(num_blocks):\n            model += [\n                ResidualBlockWithDropout(\n                    base_channels * multiple,\n                    padding_mode=padding_mode,\n                    norm_cfg=norm_cfg,\n                    use_dropout=use_dropout)\n            ]\n\n        # add upsampling layers\n        for i in range(num_down):\n            multiple = 2**(num_down - i)\n            model += [\n                ConvModule(\n                    in_channels=base_channels * multiple,\n                    out_channels=base_channels * multiple // 2,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    bias=use_bias,\n                    conv_cfg=dict(type='deconv', output_padding=1),\n                    norm_cfg=norm_cfg)\n            ]\n\n        model += [\n            ConvModule(\n                in_channels=base_channels,\n                out_channels=out_channels,\n                kernel_size=7,\n                padding=3,\n                bias=True,\n                norm_cfg=None,\n                act_cfg=dict(type='Tanh'),\n                padding_mode=padding_mode)\n        ]\n\n        self.model = nn.Sequential(*model)\n        self.init_type = 'normal' if init_cfg is None else init_cfg.get(\n            'type', 'normal')\n        self.init_gain = 0.02 if init_cfg is None else init_cfg.get(\n            'gain', 0.02)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.model(x)\n\n    def init_weights(self):\n        \"\"\"Initialize weights for the model.\"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        generation_init_weights(\n            self, init_type=self.init_type, init_gain=self.init_gain)\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/cyclegan/cyclegan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\n\n\nclass ResidualBlockWithDropout(nn.Module):\n    \"\"\"Define a Residual Block with dropout layers.\n\n    Ref:\n    Deep Residual Learning for Image Recognition\n\n    A residual block is a conv block with skip connections. A dropout layer is\n    added between two common conv modules.\n\n    Args:\n        channels (int): Number of channels in the conv layer.\n        padding_mode (str): The name of padding layer:\n            'reflect' | 'replicate' | 'zeros'.\n        norm_cfg (dict): Config dict to build norm layer. Default:\n            `dict(type='IN')`.\n        use_dropout (bool): Whether to use dropout layers. Default: True.\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 padding_mode,\n                 norm_cfg=dict(type='BN'),\n                 use_dropout=True):\n        super().__init__()\n        assert isinstance(norm_cfg, dict), (\"'norm_cfg' should be dict, but\"\n                                            f'got {type(norm_cfg)}')\n        assert 'type' in norm_cfg, \"'norm_cfg' must have key 'type'\"\n        # We use norm layers in the residual block with dropout layers.\n        # Only for IN, use bias to follow cyclegan's original implementation.\n        use_bias = norm_cfg['type'] == 'IN'\n\n        block = [\n            ConvModule(\n                in_channels=channels,\n                out_channels=channels,\n                kernel_size=3,\n                padding=1,\n                bias=use_bias,\n                norm_cfg=norm_cfg,\n                padding_mode=padding_mode)\n        ]\n\n        if use_dropout:\n            block += [nn.Dropout(0.5)]\n\n        block += [\n            ConvModule(\n                in_channels=channels,\n                out_channels=channels,\n                kernel_size=3,\n                padding=1,\n                bias=use_bias,\n                norm_cfg=norm_cfg,\n                act_cfg=None,\n                padding_mode=padding_mode)\n        ]\n\n        self.block = nn.Sequential(*block)\n\n    def forward(self, x):\n        \"\"\"Forward function. Add skip connections without final ReLU.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = x + self.block(x)\n        return out\n\n\nclass GANImageBuffer:\n    \"\"\"This class implements an image buffer that stores previously generated\n    images.\n\n    This buffer allows us to update the discriminator using a history of\n    generated images rather than the ones produced by the latest generator\n    to reduce model oscillation.\n\n    Args:\n        buffer_size (int): The size of image buffer. If buffer_size = 0,\n            no buffer will be created.\n        buffer_ratio (float): The chance / possibility  to use the images\n            previously stored in the buffer. Default: 0.5.\n    \"\"\"\n\n    def __init__(self, buffer_size, buffer_ratio=0.5):\n        self.buffer_size = buffer_size\n        # create an empty buffer\n        if self.buffer_size > 0:\n            self.img_num = 0\n            self.image_buffer = []\n        self.buffer_ratio = buffer_ratio\n\n    def query(self, images):\n        \"\"\"Query current image batch using a history of generated images.\n\n        Args:\n            images (Tensor): Current image batch without history information.\n        \"\"\"\n        if self.buffer_size == 0:  # if the buffer size is 0, do nothing\n            return images\n        return_images = []\n        for image in images:\n            image = torch.unsqueeze(image.data, 0)\n            # if the buffer is not full, keep inserting current images\n            if self.img_num < self.buffer_size:\n                self.img_num = self.img_num + 1\n                self.image_buffer.append(image)\n                return_images.append(image)\n            else:\n                use_buffer = np.random.random() < self.buffer_ratio\n                # by self.buffer_ratio, the buffer will return a previously\n                # stored image, and insert the current image into the buffer\n                if use_buffer:\n                    random_id = np.random.randint(0, self.buffer_size)\n                    image_tmp = self.image_buffer[random_id].clone()\n                    self.image_buffer[random_id] = image\n                    return_images.append(image_tmp)\n                # by (1 - self.buffer_ratio), the buffer will return the\n                # current image\n                else:\n                    return_images.append(image)\n        # collect all the images and return\n        return_images = torch.cat(return_images, 0)\n        return return_images\n"
  },
  {
    "path": "mmagic/models/editors/dcgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .dcgan import DCGAN\nfrom .dcgan_discriminator import DCGANDiscriminator\nfrom .dcgan_generator import DCGANGenerator\n\n__all__ = ['DCGAN', 'DCGANDiscriminator', 'DCGANGenerator']\n"
  },
  {
    "path": "mmagic/models/editors/dcgan/dcgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseGAN\n\n\n@MODELS.register_module()\nclass DCGAN(BaseGAN):\n    \"\"\"Implementation of `Unsupervised Representation Learning with Deep\n    Convolutional Generative Adversarial Networks`.\n\n    Paper link:\n        <https://arxiv.org/abs/1511.06434>`_ (DCGAN).\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.dcgan.DCGANGenerator`  # noqa\n    and\n    :class:`~mmagic.models.editors.dcgan.DCGANDiscriminator`  # noqa\n    \"\"\"\n\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. DCGAN use the vanilla gan loss to train\n        the discriminator.\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 0. * torch.ones_like(disc_pred_fake))\n        losses_dict['loss_disc_real'] = F.binary_cross_entropy_with_logits(\n            disc_pred_real, 1. * torch.ones_like(disc_pred_real))\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple:\n        \"\"\"Get gen loss. DCGAN use the vanilla gan loss to train the generator.\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = F.binary_cross_entropy_with_logits(\n            disc_pred_fake, 1. * torch.ones_like(disc_pred_fake))\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/dcgan/dcgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule, normal_init, update_init_info\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DCGANDiscriminator(BaseModule):\n    \"\"\"Discriminator for DCGAN.\n\n    Implementation Details for DCGAN architecture:\n\n    #. Adopt convolution in the discriminator;\n    #. Use batchnorm in the discriminator except for the input and final \\\n       output layer;\n    #. Use LeakyReLU in the discriminator in addition to the output layer.\n\n    Args:\n        input_scale (int): The scale of the input image.\n        output_scale (int): The final scale of the convolutional feature.\n        out_channels (int): The channel number of the final output layer.\n        in_channels (int, optional): The channel number of the input image.\n            Defaults to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Defaults to 128.\n        default_norm_cfg (dict, optional): Norm config for all of layers\n            except for the final output layer. Defaults to ``dict(type='BN')``.\n        default_act_cfg (dict, optional): Activation config for all of layers\n            except for the final output layer. Defaults to\n            ``dict(type='ReLU')``.\n        out_act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to ``dict(type='Tanh')``.\n        pretrained (str, optional): Path for the pretrained model. Default to\n            ``None``.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 input_scale,\n                 output_scale,\n                 out_channels,\n                 in_channels=3,\n                 base_channels=128,\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='LeakyReLU'),\n                 out_act_cfg=None,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        self.input_scale = input_scale\n        self.output_scale = output_scale\n        self.out_channels = out_channels\n        self.base_channels = base_channels\n\n        # the number of times for downsampling\n        self.num_downsamples = int(np.log2(input_scale // output_scale))\n\n        # build up downsampling backbone (excluding the output layer)\n        downsamples = []\n        curr_channels = in_channels\n        for i in range(self.num_downsamples):\n            # remove norm for the first conv\n            norm_cfg_ = None if i == 0 else default_norm_cfg\n            in_ch = in_channels if i == 0 else base_channels * 2**(i - 1)\n\n            downsamples.append(\n                ConvModule(\n                    in_ch,\n                    base_channels * 2**i,\n                    kernel_size=4,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=dict(type='Conv2d'),\n                    norm_cfg=norm_cfg_,\n                    act_cfg=default_act_cfg))\n            curr_channels = base_channels * 2**i\n\n        self.downsamples = nn.Sequential(*downsamples)\n\n        # define output layer\n        self.output_layer = ConvModule(\n            curr_channels,\n            out_channels,\n            kernel_size=4,\n            stride=1,\n            padding=0,\n            conv_cfg=dict(type='Conv2d'),\n            norm_cfg=None,\n            act_cfg=out_act_cfg)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image.\n        \"\"\"\n\n        n = x.shape[0]\n        x = self.downsamples(x)\n        x = self.output_layer(x)\n\n        # reshape to a flatten feature\n        return x.view(n, -1)\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\n\n        We just use the initialization method proposed in the original paper.\n        \"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        for m in self.modules():\n            module_name = m.__class__.__name__\n            if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):\n                normal_init(m, 0, 0.02)\n                init_info = (f'{module_name} belongs to (nn.Conv2d and '\n                             'nn.ConvTranspose2d), initialize by normal '\n                             'distribution with 0 mean and 0.02 std.')\n            elif isinstance(m, _BatchNorm):\n                nn.init.normal_(m.weight.data)\n                nn.init.constant_(m.bias.data, 0)\n                init_info = (f'{module_name} is BatchNorm, initialize weight '\n                             'by normal discribution with unit mean and zero '\n                             'std, and initialize bias as 0.')\n            # save init info\n            update_init_info(m, init_info)\n"
  },
  {
    "path": "mmagic/models/editors/dcgan/dcgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule, normal_init, update_init_info\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\n\n\n@MODELS.register_module()\nclass DCGANGenerator(BaseModule):\n    \"\"\"Generator for DCGAN.\n\n    Implementation Details for DCGAN architecture:\n\n    #. Adopt transposed convolution in the generator;\n    #. Use batchnorm in the generator except for the final output layer;\n    #. Use ReLU in the generator in addition to the final output layer.\n\n    More details can be found in the original paper:\n    Unsupervised Representation Learning with Deep Convolutional\n    Generative Adversarial Networks\n    http://arxiv.org/abs/1511.06434\n\n    Args:\n        output_scale (int | tuple[int]): Output scale for the generated\n            image. If only a integer is provided, the output image will\n            be a square shape. The tuple of two integers will set the\n            height and width for the output image, respectively.\n        out_channels (int, optional): The channel number of the output feature.\n            Default to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Default to 1024.\n        input_scale (int | tuple[int], optional): Output scale for the\n            generated image. If only a integer is provided, the input feature\n            ahead of the convolutional generator will be a square shape. The\n            tuple of two integers will set the height and width for the input\n            convolutional feature, respectively. Defaults to 4.\n        noise_size (int, optional): Size of the input noise\n            vector. Defaults to 100.\n        default_norm_cfg (dict, optional): Norm config for all of layers\n            except for the final output layer. Defaults to ``dict(type='BN')``.\n        default_act_cfg (dict, optional): Activation config for all of layers\n            except for the final output layer. Defaults to\n            ``dict(type='ReLU')``.\n        out_act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to ``dict(type='Tanh')``.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 output_scale,\n                 out_channels=3,\n                 base_channels=1024,\n                 input_scale=4,\n                 noise_size=100,\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='ReLU'),\n                 out_act_cfg=dict(type='Tanh'),\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        self.output_scale = output_scale\n        self.base_channels = base_channels\n        self.input_scale = input_scale\n        self.noise_size = noise_size\n\n        # the number of times for upsampling\n        self.num_upsamples = int(np.log2(output_scale // input_scale))\n\n        # output 4x4 feature map\n        self.noise2feat = ConvModule(\n            noise_size,\n            base_channels,\n            kernel_size=4,\n            stride=1,\n            padding=0,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=default_norm_cfg,\n            act_cfg=default_act_cfg)\n\n        # build up upsampling backbone (excluding the output layer)\n        upsampling = []\n        curr_channel = base_channels\n        for _ in range(self.num_upsamples - 1):\n            upsampling.append(\n                ConvModule(\n                    curr_channel,\n                    curr_channel // 2,\n                    kernel_size=4,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=dict(type='ConvTranspose2d'),\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n\n            curr_channel //= 2\n\n        self.upsampling = nn.Sequential(*upsampling)\n\n        # output layer\n        self.output_layer = ConvModule(\n            curr_channel,\n            out_channels,\n            kernel_size=4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='ConvTranspose2d'),\n            norm_cfg=None,\n            act_cfg=out_act_cfg)\n\n        # self.init_weights(pretrained=pretrained)\n\n    def forward(self, noise, num_batches=0, return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img`` and\n                ``noise_batch`` will be returned.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            if noise.ndim == 2:\n                noise_batch = noise[:, :, None, None]\n            elif noise.ndim == 4:\n                noise_batch = noise\n            else:\n                raise ValueError('The noise should be in shape of (n, c) or '\n                                 f'(n, c, 1, 1), but got {noise.shape}')\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size, 1, 1))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size, 1, 1))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n\n        x = self.noise2feat(noise_batch)\n        x = self.upsampling(x)\n        x = self.output_layer(x)\n\n        if return_noise:\n            return dict(fake_img=x, noise_batch=noise_batch)\n\n        return x\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\n\n        We just use the initialization method proposed in the original paper.\n        \"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n\n        for m in self.modules():\n            if isinstance(m, (nn.Conv2d, nn.ConvTranspose2d)):\n                normal_init(m, 0, 0.02)\n            elif isinstance(m, _BatchNorm):\n                nn.init.normal_(m.weight.data)\n                nn.init.constant_(m.bias.data, 0)\n            # save init info\n            update_init_info(\n                m, f'Initialize {m.__class__.__name__} by '\n                f'\\'init_type\\' {self.init_cfg}.')\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .denoising_unet import DenoisingUnet\n\n__all__ = ['DenoisingUnet']\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/attention.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\nfrom addict import Dict\nfrom torch import nn\n\n\nclass Transformer2DModel(nn.Module):\n    \"\"\"Transformer model for image-like data. Takes either discrete (classes of\n    vector embeddings) or continuous (actual embeddings) inputs.\n\n    When input is continuous: First, project the input\n     (aka embedding) and reshape to b, t, d. Then apply standard\n    transformer action. Finally, reshape to image.\n\n    When input is discrete: First, input (classes of latent pixels)\n     is converted to embeddings and has positional\n    embeddings applied, see `ImagePositionalEmbeddings`.\n    Then apply standard transformer action. Finally, predict\n    classes of unnoised image.\n\n    Note that it is assumed one of the input classes is\n    the masked latent pixel. The predicted classes of the unnoised\n    image do not contain a prediction for the masked pixel as\n    the unnoised image cannot be masked.\n\n    Args:\n        num_attention_heads (`int`, *optional*, defaults to 16):\n            The number of heads to use for multi-head attention.\n        attention_head_dim (`int`, *optional*, defaults to 88):\n            The number of channels in each head.\n        in_channels (`int`, *optional*):\n            Pass if the input is continuous.\n            The number of channels in the input and output.\n        num_layers (`int`, *optional*, defaults to 1):\n            The number of layers of Transformer blocks to use.\n        dropout (`float`, *optional*, defaults to 0.1):\n            The dropout probability to use.\n        norm_num_groups (int):\n            Norm group num, defaults to 32.\n        cross_attention_dim (`int`, *optional*):\n            The number of context dimensions to use.\n        attention_bias (`bool`, *optional*):\n            Configure if the TransformerBlocks' attention should contain\n            a bias parameter.\n        sample_size (`int`, *optional*):\n            Pass if the input is discrete. The width of the latent images.\n            Note that this is fixed at training time as it is used for\n            learning a number of position embeddings. See\n            `ImagePositionalEmbeddings`.\n        num_vector_embeds (`int`, *optional*):\n            Pass if the input is discrete. The number of classes of\n            the vector embeddings of the latent pixels.\n            Includes the class for the masked latent pixel.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n            Activation function to be used in feed-forward.\n        use_linear_projection (bool):\n            Whether to use linear projection, defaults to False.\n        only_cross_attention (bool):\n            whether only use cross attention, defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_attention_heads: int = 16,\n        attention_head_dim: int = 88,\n        in_channels: Optional[int] = None,\n        num_layers: int = 1,\n        dropout: float = 0.0,\n        norm_num_groups: int = 32,\n        cross_attention_dim: Optional[int] = None,\n        attention_bias: bool = False,\n        sample_size: Optional[int] = None,\n        num_vector_embeds: Optional[int] = None,\n        activation_fn: str = 'geglu',\n        use_linear_projection: bool = False,\n        only_cross_attention: bool = False,\n    ):\n        super().__init__()\n        self.use_linear_projection = use_linear_projection\n        self.num_attention_heads = num_attention_heads\n        self.attention_head_dim = attention_head_dim\n        inner_dim = num_attention_heads * attention_head_dim\n\n        # 1. Transformer2DModel can process both standard continuous\n        # images of shape `(batch_size, num_channels, width, height)`\n        # as well as quantized image embeddings of shape\n        # `(batch_size, num_image_vectors)`\n        # Define whether input is continuous or discrete\n        # depending on configuration\n        self.is_input_continuous = in_channels is not None\n        self.is_input_vectorized = num_vector_embeds is not None\n\n        if self.is_input_continuous and self.is_input_vectorized:\n            raise ValueError(\n                f'Cannot define both `in_channels`: {in_channels} '\n                f'and `num_vector_embeds`: {num_vector_embeds}. Make'\n                f' sure that either `in_channels` or `num_vector_embeds` '\n                'is None.')\n        elif not self.is_input_continuous and not self.is_input_vectorized:\n            raise ValueError(\n                f'Has to define either `in_channels`: {in_channels} or'\n                f' `num_vector_embeds`: {num_vector_embeds}. Make'\n                f' sure that either `in_channels` or '\n                '`num_vector_embeds` is not None.')\n\n        # 2. Define input layers\n        if self.is_input_continuous:\n            self.in_channels = in_channels\n\n            self.norm = torch.nn.GroupNorm(\n                num_groups=norm_num_groups,\n                num_channels=in_channels,\n                eps=1e-6,\n                affine=True)\n            if use_linear_projection:\n                self.proj_in = nn.Linear(in_channels, inner_dim)\n            else:\n                self.proj_in = nn.Conv2d(\n                    in_channels, inner_dim, kernel_size=1, stride=1, padding=0)\n        else:\n            raise ValueError('input_vectorized not supported now.')\n\n        # 3. Define transformers blocks\n        self.transformer_blocks = nn.ModuleList([\n            BasicTransformerBlock(\n                inner_dim,\n                num_attention_heads,\n                attention_head_dim,\n                dropout=dropout,\n                cross_attention_dim=cross_attention_dim,\n                activation_fn=activation_fn,\n                attention_bias=attention_bias,\n                only_cross_attention=only_cross_attention,\n            ) for d in range(num_layers)\n        ])\n\n        # 4. Define output layers\n        if use_linear_projection:\n            self.proj_out = nn.Linear(in_channels, inner_dim)\n        else:\n            self.proj_out = nn.Conv2d(\n                inner_dim, in_channels, kernel_size=1, stride=1, padding=0)\n\n    def _set_attention_slice(self, slice_size):\n        \"\"\"set attention slice.\"\"\"\n\n        for block in self.transformer_blocks:\n            block._set_attention_slice(slice_size)\n\n    def forward(self,\n                hidden_states,\n                encoder_hidden_states=None,\n                timestep=None,\n                return_dict: bool = True):\n        \"\"\"forward function.\n\n        Args:\n            hidden_states ( When discrete, `torch.LongTensor`\n                of shape `(batch size, num latent pixels)`.\n                When continuous, `torch.FloatTensor` of shape `\n                (batch size, channel, height, width)`): Input\n                hidden_states\n            encoder_hidden_states ( `torch.LongTensor` of shape\n                `(batch size, context dim)`, *optional*):\n                Conditional embeddings for cross attention layer.\n                If not given, cross-attention defaults to\n                self-attention.\n            timestep ( `torch.long`, *optional*):\n                Optional timestep to be applied as an embedding\n                in AdaLayerNorm's. Used to indicate denoising step.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a\n                [`models.unet_2d_condition.UNet2DConditionOutput`]\n                instead of a plain tuple.\n\n        Returns:\n            Dict if `return_dict` is True, otherwise a `tuple`.\n            When returning a tuple, the first element is the sample\n            tensor.\n        \"\"\"\n        # 1. Input\n        if self.is_input_continuous:\n            batch, channel, height, weight = hidden_states.shape\n            residual = hidden_states\n\n            hidden_states = self.norm(hidden_states)\n            if not self.use_linear_projection:\n                hidden_states = self.proj_in(hidden_states)\n                inner_dim = hidden_states.shape[1]\n                hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                    batch, height * weight, inner_dim)\n            else:\n                inner_dim = hidden_states.shape[1]\n                hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                    batch, height * weight, inner_dim)\n                hidden_states = self.proj_in(hidden_states)\n        else:\n            raise ValueError('input_vectorized not supported now.')\n\n        # 2. Blocks\n        for block in self.transformer_blocks:\n            hidden_states = block(\n                hidden_states,\n                context=encoder_hidden_states,\n                timestep=timestep)\n\n        # 3. Output\n        if not self.use_linear_projection:\n            hidden_states = (\n                hidden_states.reshape(batch, height, weight,\n                                      inner_dim).permute(0, 3, 1,\n                                                         2).contiguous())\n            hidden_states = self.proj_out(hidden_states)\n        else:\n            hidden_states = self.proj_out(hidden_states)\n            hidden_states = (\n                hidden_states.reshape(batch, height, weight,\n                                      inner_dim).permute(0, 3, 1,\n                                                         2).contiguous())\n\n        output = hidden_states + residual\n\n        if not return_dict:\n            return (output, )\n\n        return Dict(sample=output)\n\n\nclass BasicTransformerBlock(nn.Module):\n    \"\"\"A basic Transformer block.\n\n    Args:\n        dim (int): The number of channels in the input and output.\n        num_attention_heads (int): The number of heads to use for\n         multi-head attention.\n        attention_head_dim (int): The number of channels in each head.\n        dropout (float, *optional*, defaults to 0.0):\n            The dropout probability to use.\n        cross_attention_dim (int, *optional*):\n            The size of the context vector for cross attention.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n            Activation function to be used in feed-forward.\n        attention_bias (bool, *optional*, defaults to `False`):\n            Configure if the attentions should contain a bias parameter.\n        only_cross_attention (bool, defaults to False):\n            whether to use cross attention only.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_attention_heads: int,\n        attention_head_dim: int,\n        dropout=0.0,\n        cross_attention_dim: Optional[int] = None,\n        activation_fn: str = 'geglu',\n        attention_bias: bool = False,\n        only_cross_attention: bool = False,\n    ):\n        super().__init__()\n        self.only_cross_attention = only_cross_attention\n        self.attn1 = CrossAttention(\n            query_dim=dim,\n            heads=num_attention_heads,\n            dim_head=attention_head_dim,\n            dropout=dropout,\n            bias=attention_bias,\n            cross_attention_dim=cross_attention_dim\n            if only_cross_attention else None,\n        )  # is a self-attention\n        self.ff = FeedForward(\n            dim, dropout=dropout, activation_fn=activation_fn)\n        self.attn2 = CrossAttention(\n            query_dim=dim,\n            cross_attention_dim=cross_attention_dim,\n            heads=num_attention_heads,\n            dim_head=attention_head_dim,\n            dropout=dropout,\n            bias=attention_bias,\n        )  # is self-attn if context is none\n\n        # layer norms\n        self.norm1 = nn.LayerNorm(dim)\n        self.norm2 = nn.LayerNorm(dim)\n        self.norm3 = nn.LayerNorm(dim)\n\n    def _set_attention_slice(self, slice_size):\n        \"\"\"set attention slice.\"\"\"\n        self.attn1._slice_size = slice_size\n        self.attn2._slice_size = slice_size\n\n    def forward(self, hidden_states, context=None, timestep=None):\n        \"\"\"forward with hidden states, context and timestep.\"\"\"\n        # 1. Self-Attention\n        norm_hidden_states = (self.norm1(hidden_states))\n\n        if self.only_cross_attention:\n            hidden_states = self.attn1(norm_hidden_states,\n                                       context) + hidden_states\n        else:\n            hidden_states = self.attn1(norm_hidden_states) + hidden_states\n\n        # 2. Cross-Attention\n        norm_hidden_states = (self.norm2(hidden_states))\n        hidden_states = self.attn2(\n            norm_hidden_states, context=context) + hidden_states\n\n        # 3. Feed-forward\n        hidden_states = self.ff(self.norm3(hidden_states)) + hidden_states\n\n        return hidden_states\n\n\nclass CrossAttention(nn.Module):\n    r\"\"\"\n    A cross attention layer.\n\n    Args:\n        query_dim (`int`): The number of channels in the query.\n        cross_attention_dim (`int`, *optional*):\n            The number of channels in the context.\n            If not given, defaults to `query_dim`.\n        heads (`int`,  *optional*, defaults to 8):\n            The number of heads to use for multi-head attention.\n        dim_head (`int`,  *optional*, defaults to 64):\n            The number of channels in each head.\n        dropout (`float`, *optional*, defaults to 0.0):\n            The dropout probability to use.\n        bias (`bool`, *optional*, defaults to False):\n            Set to `True` for the query, key,\n            and value linear layers to contain a bias parameter.\n    \"\"\"\n\n    def __init__(\n        self,\n        query_dim: int,\n        cross_attention_dim: Optional[int] = None,\n        heads: int = 8,\n        dim_head: int = 64,\n        dropout: float = 0.0,\n        bias=False,\n    ):\n        super().__init__()\n        inner_dim = dim_head * heads\n        cross_attention_dim = cross_attention_dim if cross_attention_dim is not None else query_dim  # noqa\n\n        self.scale = dim_head**-0.5\n        self.heads = heads\n        # for slice_size > 0 the attention score computation\n        # is split across the batch axis to save memory\n        # You can set slice_size with `set_attention_slice`\n        self._slice_size = None\n\n        self.to_q = nn.Linear(query_dim, inner_dim, bias=bias)\n        self.to_k = nn.Linear(cross_attention_dim, inner_dim, bias=bias)\n        self.to_v = nn.Linear(cross_attention_dim, inner_dim, bias=bias)\n\n        self.to_out = nn.ModuleList([])\n        self.to_out.append(nn.Linear(inner_dim, query_dim))\n        self.to_out.append(nn.Dropout(dropout))\n\n    def reshape_heads_to_batch_dim(self, tensor):\n        \"\"\"reshape heads num to batch dim.\"\"\"\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size, seq_len, head_size,\n                                dim // head_size)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size * head_size,\n                                                    seq_len, dim // head_size)\n        return tensor\n\n    def reshape_batch_dim_to_heads(self, tensor):\n        \"\"\"reshape batch dim to heads num.\"\"\"\n        batch_size, seq_len, dim = tensor.shape\n        head_size = self.heads\n        tensor = tensor.reshape(batch_size // head_size, head_size, seq_len,\n                                dim)\n        tensor = tensor.permute(0, 2, 1, 3).reshape(batch_size // head_size,\n                                                    seq_len, dim * head_size)\n        return tensor\n\n    def forward(self, hidden_states, context=None, mask=None):\n        \"\"\"forward with hidden states, context and mask.\"\"\"\n        batch_size, sequence_length, _ = hidden_states.shape\n\n        query = self.to_q(hidden_states)\n        context = context if context is not None else hidden_states\n        key = self.to_k(context)\n        value = self.to_v(context)\n\n        dim = query.shape[-1]\n\n        query = self.reshape_heads_to_batch_dim(query)\n        key = self.reshape_heads_to_batch_dim(key)\n        value = self.reshape_heads_to_batch_dim(value)\n\n        # TODO(PVP) - mask is currently never used. Remember\n        # to re-implement when used\n\n        # attention, what we cannot get enough of\n        if self._slice_size is None or query.shape[0] // self._slice_size == 1:\n            hidden_states = self._attention(query, key, value)\n        else:\n            hidden_states = self._sliced_attention(query, key, value,\n                                                   sequence_length, dim)\n\n        # linear proj\n        hidden_states = self.to_out[0](hidden_states)\n        # dropout\n        hidden_states = self.to_out[1](hidden_states)\n        return hidden_states\n\n    def _attention(self, query, key, value):\n        \"\"\"attention calculation.\"\"\"\n        attention_scores = torch.baddbmm(\n            torch.empty(\n                query.shape[0],\n                query.shape[1],\n                key.shape[1],\n                dtype=query.dtype,\n                device=query.device),\n            query,\n            key.transpose(-1, -2),\n            beta=0,\n            alpha=self.scale,\n        )\n        attention_probs = attention_scores.softmax(dim=-1)\n        # compute attention output\n\n        hidden_states = torch.bmm(attention_probs, value)\n\n        # reshape hidden_states\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n\n    def _sliced_attention(self, query, key, value, sequence_length, dim):\n        \"\"\"sliced attention calculation.\"\"\"\n        batch_size_attention = query.shape[0]\n        hidden_states = torch.zeros(\n            (batch_size_attention, sequence_length, dim // self.heads),\n            device=query.device,\n            dtype=query.dtype)\n        slice_size = self._slice_size if self._slice_size is not None \\\n            else hidden_states.shape[0]\n        for i in range(hidden_states.shape[0] // slice_size):\n            start_idx = i * slice_size\n            end_idx = (i + 1) * slice_size\n            attn_slice = torch.baddbmm(\n                torch.empty(\n                    slice_size,\n                    query.shape[1],\n                    key.shape[1],\n                    dtype=query.dtype,\n                    device=query.device),\n                query[start_idx:end_idx],\n                key[start_idx:end_idx].transpose(-1, -2),\n                beta=0,\n                alpha=self.scale,\n            )\n            attn_slice = attn_slice.softmax(dim=-1)\n            attn_slice = torch.bmm(attn_slice, value[start_idx:end_idx])\n\n            hidden_states[start_idx:end_idx] = attn_slice\n\n        # reshape hidden_states\n        hidden_states = self.reshape_batch_dim_to_heads(hidden_states)\n        return hidden_states\n\n\nclass FeedForward(nn.Module):\n    r\"\"\"\n    A feed-forward layer.\n\n    Args:\n        dim (int): The number of channels in the input.\n        dim_out (int, *optional*):\n            The number of channels in the output.\n            If not given, defaults to `dim`.\n        mult (int, *optional*, defaults to 4):\n            The multiplier to use for the hidden dimension.\n        dropout (`float`, *optional*, defaults to 0.0):\n            The dropout probability to use.\n        activation_fn (`str`, *optional*, defaults to `\"geglu\"`):\n            Activation function to be used in feed-forward.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        dim_out: Optional[int] = None,\n        mult: int = 4,\n        dropout: float = 0.0,\n        activation_fn: str = 'geglu',\n    ):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = dim_out if dim_out is not None else dim\n\n        if activation_fn == 'geglu':\n            geglu = GEGLU(dim, inner_dim)\n        elif activation_fn == 'geglu-approximate':\n            geglu = ApproximateGELU(dim, inner_dim)\n\n        self.net = nn.ModuleList([])\n        # project in\n        self.net.append(geglu)\n        # project dropout\n        self.net.append(nn.Dropout(dropout))\n        # project out\n        self.net.append(nn.Linear(inner_dim, dim_out))\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        for module in self.net:\n            hidden_states = module(hidden_states)\n        return hidden_states\n\n\n# feedforward\nclass GEGLU(nn.Module):\n    r\"\"\"\n    A variant of the gated linear unit activation function\n    from https://arxiv.org/abs/2002.05202.\n\n    Args:\n        dim_in (`int`): The number of channels in the input.\n        dim_out (`int`): The number of channels in the output.\n    \"\"\"\n\n    def __init__(self, dim_in: int, dim_out: int):\n        super().__init__()\n        self.proj = nn.Linear(dim_in, dim_out * 2)\n\n    def gelu(self, gate):\n        \"\"\"gelu activation.\"\"\"\n        return F.gelu(gate)\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        hidden_states, gate = self.proj(hidden_states).chunk(2, dim=-1)\n        return hidden_states * self.gelu(gate)\n\n\nclass ApproximateGELU(nn.Module):\n    \"\"\"The approximate form of Gaussian Error Linear Unit (GELU)\n\n    For more details, see section 2: https://arxiv.org/abs/1606.08415\n    \"\"\"\n\n    def __init__(self, dim_in: int, dim_out: int):\n        super().__init__()\n        self.proj = nn.Linear(dim_in, dim_out)\n\n    def forward(self, x):\n        \"\"\"forward function.\"\"\"\n        x = self.proj(x)\n        return x * torch.sigmoid(1.702 * x)\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/denoising_unet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom copy import deepcopy\nfrom functools import partial\nfrom typing import Tuple\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn.bricks import build_norm_layer\nfrom mmcv.cnn.bricks.conv_module import ConvModule\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModule, constant_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\nfrom mmagic.registry import MODELS\nfrom .embeddings import TimestepEmbedding, Timesteps\nfrom .unet_blocks import UNetMidBlock2DCrossAttn, get_down_block, get_up_block\n\nlogger = MMLogger.get_current_instance()\n\n\nclass EmbedSequential(nn.Sequential):\n    \"\"\"A sequential module that passes timestep embeddings to the children that\n    support it as an extra input.\n\n    Modified from\n    https://github.com/openai/improved-diffusion/blob/main/improved_diffusion/unet.py#L35\n    \"\"\"\n\n    def forward(self, x, y, encoder_out=None):\n        for layer in self:\n            if isinstance(layer, DenoisingResBlock):\n                x = layer(x, y)\n            elif isinstance(\n                    layer,\n                    MultiHeadAttentionBlock) and encoder_out is not None:\n                x = layer(x, encoder_out)\n            else:\n                x = layer(x)\n        return x\n\n\n@MODELS.register_module('GN32')\nclass GroupNorm32(nn.GroupNorm):\n\n    def __init__(self, num_channels, num_groups=32, **kwargs):\n        super().__init__(num_groups, num_channels, **kwargs)\n\n    def forward(self, x):\n        return super().forward(x.float()).type(x.dtype)\n\n\ndef convert_module_to_f16(layer):\n    \"\"\"Convert primitive modules to float16.\"\"\"\n    if isinstance(layer, (nn.Conv1d, nn.Conv2d, nn.Conv3d)):\n        layer.weight.data = layer.weight.data.half()\n        if layer.bias is not None:\n            layer.bias.data = layer.bias.data.half()\n\n\ndef convert_module_to_f32(layer):\n    \"\"\"Convert primitive modules to float32, undoing\n    convert_module_to_f16().\"\"\"\n    if isinstance(layer, (nn.Conv1d, nn.Conv2d, nn.Conv3d)):\n        layer.weight.data = layer.weight.data.float()\n        if layer.bias is not None:\n            layer.bias.data = layer.bias.data.float()\n\n\n@MODELS.register_module()\nclass SiLU(BaseModule):\n    r\"\"\"Applies the Sigmoid Linear Unit (SiLU) function, element-wise.\n    The SiLU function is also known as the swish function.\n    Args:\n        input (bool, optional): Use inplace operation or not.\n            Defaults to `False`.\n    \"\"\"\n\n    def __init__(self, inplace=False):\n        super().__init__()\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0') and inplace:\n            mmengine.print_log(\n                'Inplace version of \\'SiLU\\' is not supported for '\n                f'torch < 1.6.0, found \\'{torch.version}\\'.')\n        self.inplace = inplace\n\n    def forward(self, x):\n        \"\"\"Forward function for SiLU.\n        Args:\n            x (torch.Tensor): Input tensor.\n\n        Returns:\n            torch.Tensor: Tensor after activation.\n        \"\"\"\n\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            return x * torch.sigmoid(x)\n\n        return F.silu(x, inplace=self.inplace)\n\n\n@MODELS.register_module()\nclass MultiHeadAttention(BaseModule):\n    \"\"\"An attention block allows spatial position to attend to each other.\n\n    Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.  # noqa\n\n    Args:\n        in_channels (int): Channels of the input feature map.\n        num_heads (int, optional): Number of heads in the attention.\n        norm_cfg (dict, optional): Config for normalization layer. Default\n            to ``dict(type='GN', num_groups=32)``\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 num_heads=1,\n                 norm_cfg=dict(type='GN', num_groups=32)):\n        super().__init__()\n        self.num_heads = num_heads\n        _, self.norm = build_norm_layer(norm_cfg, in_channels)\n        self.qkv = nn.Conv1d(in_channels, in_channels * 3, 1)\n        self.proj = nn.Conv1d(in_channels, in_channels, 1)\n        self.init_weights()\n\n    @staticmethod\n    def QKVAttention(qkv):\n        channel = qkv.shape[1] // 3\n        q, k, v = torch.chunk(qkv, 3, dim=1)\n        scale = 1 / np.sqrt(np.sqrt(channel))\n        weight = torch.einsum('bct,bcs->bts', q * scale, k * scale)\n        weight = torch.softmax(weight.float(), dim=-1).type(weight.dtype)\n        weight = torch.einsum('bts,bcs->bct', weight, v)\n        return weight\n\n    def forward(self, x):\n        \"\"\"Forward function for multi head attention.\n        Args:\n            x (torch.Tensor): Input feature map.\n\n        Returns:\n            torch.Tensor: Feature map after attention.\n        \"\"\"\n        b, c, *spatial = x.shape\n        x = x.reshape(b, c, -1)\n        qkv = self.qkv(self.norm(x))\n        qkv = qkv.reshape(b * self.num_heads, -1, qkv.shape[2])\n        h = self.QKVAttention(qkv)\n        h = h.reshape(b, -1, h.shape[-1])\n        h = self.proj(h)\n        return (h + x).reshape(b, c, *spatial)\n\n    def init_weights(self):\n        constant_init(self.proj, 0)\n\n\n@MODELS.register_module()\nclass MultiHeadAttentionBlock(BaseModule):\n    \"\"\"An attention block that allows spatial positions to attend to each\n    other.\n\n    Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 num_heads=1,\n                 num_head_channels=-1,\n                 use_new_attention_order=False,\n                 norm_cfg=dict(type='GN32', num_groups=32),\n                 encoder_channels=None):\n        super().__init__()\n        self.in_channels = in_channels\n        if num_head_channels == -1:\n            self.num_heads = num_heads\n        else:\n            assert (in_channels % num_head_channels == 0), (\n                f'q,k,v channels {in_channels} is not divisible by '\n                'num_head_channels {num_head_channels}')\n            self.num_heads = in_channels // num_head_channels\n        _, self.norm = build_norm_layer(norm_cfg, in_channels)\n        self.qkv = nn.Conv1d(in_channels, in_channels * 3, 1)\n\n        if use_new_attention_order:\n            # split qkv before split heads\n            self.attention = QKVAttention(self.num_heads)\n        else:\n            # split heads before split qkv\n            self.attention = QKVAttentionLegacy(self.num_heads)\n\n        self.proj_out = nn.Conv1d(in_channels, in_channels, 1)\n        if encoder_channels is not None:\n            self.encoder_kv = nn.Conv1d(encoder_channels, in_channels * 2, 1)\n\n    def forward(self, x, encoder_out=None):\n        b, c, *spatial = x.shape\n        x = x.reshape(b, c, -1)\n        qkv = self.qkv(self.norm(x))\n        if encoder_out is not None:\n            encoder_out = self.encoder_kv(encoder_out)\n            h = self.attention(qkv, encoder_out)\n        else:\n            h = self.attention(qkv)\n        h = self.proj_out(h)\n        return (x + h).reshape(b, c, *spatial)\n\n\n@MODELS.register_module()\nclass QKVAttentionLegacy(BaseModule):\n    \"\"\"A module which performs QKV attention.\n\n    Matches legacy QKVAttention + input/output heads shaping\n    \"\"\"\n\n    def __init__(self, n_heads):\n        super().__init__()\n        self.n_heads = n_heads\n\n    def forward(self, qkv, encoder_kv=None):\n        \"\"\"Apply QKV attention.\n\n        :param qkv: an [N x (H * 3 * C) x T] tensor of Qs, Ks, and Vs.\n        :return: an [N x (H * C) x T] tensor after attention.\n        \"\"\"\n        bs, width, length = qkv.shape\n        assert width % (3 * self.n_heads) == 0\n        ch = width // (3 * self.n_heads)\n        q, k, v = qkv.reshape(bs * self.n_heads, ch * 3, length).split(\n            ch, dim=1)\n        if encoder_kv is not None:\n            assert encoder_kv.shape[1] == self.n_heads * ch * 2\n            ek, ev = encoder_kv.reshape(bs * self.n_heads, ch * 2, -1).split(\n                ch, dim=1)\n            k = torch.cat([ek, k], dim=-1)\n            v = torch.cat([ev, v], dim=-1)\n        scale = 1 / math.sqrt(math.sqrt(ch))\n        weight = torch.einsum(\n            'bct,bcs->bts', q * scale,\n            k * scale)  # More stable with f16 than dividing afterwards\n        weight = torch.softmax(weight.float(), dim=-1).type(weight.dtype)\n        a = torch.einsum('bts,bcs->bct', weight, v)\n        return a.reshape(bs, -1, length)\n\n\n@MODELS.register_module()\nclass QKVAttention(BaseModule):\n    \"\"\"A module which performs QKV attention and splits in a different\n    order.\"\"\"\n\n    def __init__(self, n_heads):\n        super().__init__()\n        self.n_heads = n_heads\n\n    def forward(self, qkv):\n        \"\"\"Apply QKV attention.\n\n        :param qkv: an [N x (3 * H * C) x T] tensor of Qs, Ks, and Vs.\n        :return: an [N x (H * C) x T] tensor after attention.\n        \"\"\"\n        bs, width, length = qkv.shape\n        assert width % (3 * self.n_heads) == 0\n        ch = width // (3 * self.n_heads)\n        q, k, v = qkv.chunk(3, dim=1)\n        scale = 1 / math.sqrt(math.sqrt(ch))\n        weight = torch.einsum(\n            'bct,bcs->bts',\n            (q * scale).view(bs * self.n_heads, ch, length),\n            (k * scale).view(bs * self.n_heads, ch, length),\n        )  # More stable with f16 than dividing afterwards\n        weight = torch.softmax(weight.float(), dim=-1).type(weight.dtype)\n        a = torch.einsum('bts,bcs->bct', weight,\n                         v.reshape(bs * self.n_heads, ch, length))\n        return a.reshape(bs, -1, length)\n\n\n@MODELS.register_module()\nclass TimeEmbedding(BaseModule):\n    \"\"\"Time embedding layer, reference to Two level embedding. First embedding\n    time by an embedding function, then feed to neural networks.\n\n    Args:\n        in_channels (int): The channel number of the input feature map.\n        embedding_channels (int): The channel number of the output embedding.\n        embedding_mode (str, optional): Embedding mode for the time embedding.\n            Defaults to 'sin'.\n        embedding_cfg (dict, optional): Config for time embedding.\n            Defaults to None.\n        act_cfg (dict, optional): Config for activation layer. Defaults to\n            ``dict(type='SiLU', inplace=False)``.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 embedding_channels,\n                 embedding_mode='sin',\n                 embedding_cfg=None,\n                 act_cfg=dict(type='SiLU', inplace=False)):\n        super().__init__()\n        self.blocks = nn.Sequential(\n            nn.Linear(in_channels, embedding_channels), MODELS.build(act_cfg),\n            nn.Linear(embedding_channels, embedding_channels))\n\n        # add `dim` to embedding config\n        embedding_cfg_ = dict(dim=in_channels)\n        if embedding_cfg is not None:\n            embedding_cfg_.update(embedding_cfg)\n        if embedding_mode.upper() == 'SIN':\n            self.embedding_fn = partial(self.sinusodial_embedding,\n                                        **embedding_cfg_)\n        else:\n            raise ValueError('Only support `SIN` for time embedding, '\n                             f'but receive {embedding_mode}.')\n\n    @staticmethod\n    def sinusodial_embedding(timesteps, dim, max_period=10000):\n        \"\"\"Create sinusoidal timestep embeddings.\n\n        Args:\n            timesteps (torch.Tensor): Timestep to embedding. 1-D tensor shape\n                as ``[bz, ]``,  one per batch element.\n            dim (int): The dimension of the embedding.\n            max_period (int, optional): Controls the minimum frequency of the\n                embeddings. Defaults to ``10000``.\n\n        Returns:\n            torch.Tensor: Embedding results shape as `[bz, dim]`.\n        \"\"\"\n\n        half = dim // 2\n        freqs = torch.exp(\n            -np.log(max_period) *\n            torch.arange(start=0, end=half, dtype=torch.float32) /\n            half).to(device=timesteps.device)\n        args = timesteps[:, None].float() * freqs[None]\n        embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)\n        if dim % 2:\n            embedding = torch.cat(\n                [embedding, torch.zeros_like(embedding[:, :1])], dim=-1)\n        return embedding\n\n    def forward(self, t):\n        \"\"\"Forward function for time embedding layer.\n        Args:\n            t (torch.Tensor): Input timesteps.\n\n        Returns:\n            torch.Tensor: Timesteps embedding.\n\n        \"\"\"\n        return self.blocks(self.embedding_fn(t))\n\n\n@MODELS.register_module()\nclass DenoisingResBlock(BaseModule):\n    \"\"\"Resblock for the denoising network. If `in_channels` not equals to\n    `out_channels`, a learnable shortcut with conv layers will be added.\n\n    Args:\n        in_channels (int): Number of channels of the input feature map.\n        embedding_channels (int): Number of channels of the input embedding.\n        use_scale_shift_norm (bool): Whether use scale-shift-norm in\n            `NormWithEmbedding` layer.\n        dropout (float): Probability of the dropout layers.\n        out_channels (int, optional): Number of output channels of the\n            ResBlock. If not defined, the output channels will equal to the\n            `in_channels`. Defaults to `None`.\n        norm_cfg (dict, optional): The config for the normalization layers.\n            Defaults too ``dict(type='GN', num_groups=32)``.\n        act_cfg (dict, optional): The config for the activation layers.\n            Defaults to ``dict(type='SiLU', inplace=False)``.\n        shortcut_kernel_size (int, optional): The kernel size for the shortcut\n            conv. Defaults to ``1``.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 embedding_channels,\n                 use_scale_shift_norm,\n                 dropout,\n                 out_channels=None,\n                 norm_cfg=dict(type='GN', num_groups=32),\n                 act_cfg=dict(type='SiLU', inplace=False),\n                 shortcut_kernel_size=1,\n                 up=False,\n                 down=False):\n        super().__init__()\n        out_channels = in_channels if out_channels is None else out_channels\n\n        _norm_cfg = deepcopy(norm_cfg)\n\n        _, norm_1 = build_norm_layer(_norm_cfg, in_channels)\n        conv_1 = [\n            norm_1,\n            MODELS.build(act_cfg),\n            nn.Conv2d(in_channels, out_channels, 3, padding=1)\n        ]\n        self.conv_1 = nn.Sequential(*conv_1)\n\n        norm_with_embedding_cfg = dict(\n            in_channels=out_channels,\n            embedding_channels=embedding_channels,\n            use_scale_shift=use_scale_shift_norm,\n            norm_cfg=_norm_cfg)\n        self.norm_with_embedding = MODELS.build(\n            dict(type='NormWithEmbedding'),\n            default_args=norm_with_embedding_cfg)\n\n        conv_2 = [\n            MODELS.build(act_cfg),\n            nn.Dropout(dropout),\n            nn.Conv2d(out_channels, out_channels, 3, padding=1)\n        ]\n        self.conv_2 = nn.Sequential(*conv_2)\n\n        assert shortcut_kernel_size in [\n            1, 3\n        ], ('Only support `1` and `3` for `shortcut_kernel_size`, but '\n            f'receive {shortcut_kernel_size}.')\n\n        self.learnable_shortcut = out_channels != in_channels\n\n        if self.learnable_shortcut:\n            shortcut_padding = 1 if shortcut_kernel_size == 3 else 0\n            self.shortcut = nn.Conv2d(\n                in_channels,\n                out_channels,\n                shortcut_kernel_size,\n                padding=shortcut_padding)\n\n        self.updown = up or down\n\n        if up:\n            self.h_upd = DenoisingUpsample(in_channels, False)\n            self.x_upd = DenoisingUpsample(in_channels, False)\n        elif down:\n            self.h_upd = DenoisingDownsample(in_channels, False)\n            self.x_upd = DenoisingDownsample(in_channels, False)\n        else:\n            self.h_upd = self.x_upd = nn.Identity()\n\n        self.init_weights()\n\n    def forward_shortcut(self, x):\n        if self.learnable_shortcut:\n            return self.shortcut(x)\n        return x\n\n    def forward(self, x, y):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            y (torch.Tensor): Shared time embedding or shared label embedding.\n\n        Returns:\n            torch.Tensor : Output feature map tensor.\n        \"\"\"\n        if self.updown:\n            in_rest, in_conv = self.conv_1[:-1], self.conv_1[-1]\n            h = in_rest(x)\n            h = self.h_upd(h)\n            x = self.x_upd(x)\n            h = in_conv(h)\n        else:\n            h = self.conv_1(x)\n\n        shortcut = self.forward_shortcut(x)\n        h = self.norm_with_embedding(h, y)\n        h = self.conv_2(h)\n        return h + shortcut\n\n    def init_weights(self):\n        # apply zero init to last conv layer\n        constant_init(self.conv_2[-1], 0)\n\n\n@MODELS.register_module()\nclass NormWithEmbedding(BaseModule):\n    \"\"\"Nornalization with embedding layer. If `use_scale_shift == True`,\n    embedding results will be chunked and used to re-shift and re-scale\n    normalization results. Otherwise, embedding results will directly add to\n    input of normalization layer.\n\n    Args:\n        in_channels (int): Number of channels of the input feature map.\n        embedding_channels (int) Number of channels of the input embedding.\n        norm_cfg (dict, optional): Config for the normalization operation.\n            Defaults to `dict(type='GN', num_groups=32)`.\n        act_cfg (dict, optional): Config for the activation layer. Defaults\n            to `dict(type='SiLU', inplace=False)`.\n        use_scale_shift (bool): If True, the output of Embedding layer will be\n            split to 'scale' and 'shift' and map the output of normalization\n            layer to ``out * (1 + scale) + shift``. Otherwise, the output of\n            Embedding layer will be added with the input before normalization\n            operation. Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 embedding_channels,\n                 norm_cfg=dict(type='GN', num_groups=32),\n                 act_cfg=dict(type='SiLU', inplace=False),\n                 use_scale_shift=True):\n        super().__init__()\n        self.use_scale_shift = use_scale_shift\n        _, self.norm = build_norm_layer(norm_cfg, in_channels)\n\n        embedding_output = in_channels * 2 if use_scale_shift else in_channels\n        self.embedding_layer = nn.Sequential(\n            MODELS.build(act_cfg),\n            nn.Linear(embedding_channels, embedding_output))\n\n    def forward(self, x, y):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            y (torch.Tensor): Shared time embedding or shared label embedding.\n\n        Returns:\n            torch.Tensor : Output feature map tensor.\n        \"\"\"\n        embedding = self.embedding_layer(y).type(x.dtype)\n        embedding = embedding[:, :, None, None]\n        if self.use_scale_shift:\n            scale, shift = torch.chunk(embedding, 2, dim=1)\n            x = self.norm(x)\n            x = x * (1 + scale) + shift\n        else:\n            x = self.norm(x + embedding)\n        return x\n\n\n@MODELS.register_module()\nclass DenoisingDownsample(BaseModule):\n    \"\"\"Downsampling operation used in the denoising network. Support average\n    pooling and convolution for downsample operation.\n\n    Args:\n        in_channels (int): Number of channels of the input feature map to be\n            downsampled.\n        with_conv (bool, optional): Whether use convolution operation for\n            downsampling.  Defaults to `True`.\n    \"\"\"\n\n    def __init__(self, in_channels, with_conv=True):\n        super().__init__()\n        if with_conv:\n            self.downsample = nn.Conv2d(in_channels, in_channels, 3, 2, 1)\n        else:\n            self.downsample = nn.AvgPool2d(kernel_size=2, stride=2)\n\n    def forward(self, x):\n        \"\"\"Forward function for downsampling operation.\n        Args:\n            x (torch.Tensor): Feature map to downsample.\n\n        Returns:\n            torch.Tensor: Feature map after downsampling.\n        \"\"\"\n        return self.downsample(x)\n\n\n@MODELS.register_module()\nclass DenoisingUpsample(BaseModule):\n    \"\"\"Upsampling operation used in the denoising network. Allows users to\n    apply an additional convolution layer after the nearest interpolation\n    operation.\n\n    Args:\n        in_channels (int): Number of channels of the input feature map to be\n            downsampled.\n        with_conv (bool, optional): Whether apply an additional convolution\n            layer after upsampling.  Defaults to `True`.\n    \"\"\"\n\n    def __init__(self, in_channels, with_conv=True):\n        super().__init__()\n        self.with_conv = with_conv\n        if with_conv:\n            self.conv = nn.Conv2d(in_channels, in_channels, 3, 1, 1)\n\n    def forward(self, x):\n        \"\"\"Forward function for upsampling operation.\n        Args:\n            x (torch.Tensor): Feature map to upsample.\n\n        Returns:\n            torch.Tensor: Feature map after upsampling.\n        \"\"\"\n        x = F.interpolate(x, scale_factor=2, mode='nearest')\n        if self.with_conv:\n            x = self.conv(x)\n        return x\n\n\ndef build_down_block_resattn(resblocks_per_downsample, resblock_cfg,\n                             in_channels_, out_channels_, attention_scale,\n                             attention_cfg, in_channels_list, level,\n                             channel_factor_list, embedding_channels,\n                             use_scale_shift_norm, dropout, norm_cfg,\n                             resblock_updown, downsample_cfg, scale):\n    \"\"\"build unet down path blocks with resnet and attention.\"\"\"\n\n    in_blocks = nn.ModuleList()\n\n    for _ in range(resblocks_per_downsample):\n        layers = [\n            MODELS.build(\n                resblock_cfg,\n                default_args={\n                    'in_channels': in_channels_,\n                    'out_channels': out_channels_\n                })\n        ]\n        in_channels_ = out_channels_\n\n        if scale in attention_scale:\n            layers.append(\n                MODELS.build(\n                    attention_cfg, default_args={'in_channels': in_channels_}))\n\n        in_channels_list.append(in_channels_)\n        in_blocks.append(EmbedSequential(*layers))\n\n    if level != len(channel_factor_list) - 1:\n        in_blocks.append(\n            EmbedSequential(\n                DenoisingResBlock(\n                    out_channels_,\n                    embedding_channels,\n                    use_scale_shift_norm,\n                    dropout,\n                    norm_cfg=norm_cfg,\n                    out_channels=out_channels_,\n                    down=True) if resblock_updown else MODELS.build(\n                        downsample_cfg,\n                        default_args={'in_channels': in_channels_})))\n        in_channels_list.append(in_channels_)\n        scale *= 2\n    return in_blocks, scale\n\n\ndef build_mid_blocks_resattn(resblock_cfg, attention_cfg, in_channels_):\n    \"\"\"build unet mid blocks with resnet and attention.\"\"\"\n\n    return EmbedSequential(\n        MODELS.build(resblock_cfg, default_args={'in_channels': in_channels_}),\n        MODELS.build(\n            attention_cfg, default_args={'in_channels': in_channels_}),\n        MODELS.build(resblock_cfg, default_args={'in_channels': in_channels_}),\n    )\n\n\ndef build_up_blocks_resattn(\n    resblocks_per_downsample,\n    resblock_cfg,\n    in_channels_,\n    in_channels_list,\n    base_channels,\n    factor,\n    scale,\n    attention_scale,\n    attention_cfg,\n    channel_factor_list,\n    level,\n    embedding_channels,\n    use_scale_shift_norm,\n    dropout,\n    norm_cfg,\n    resblock_updown,\n    upsample_cfg,\n):\n    \"\"\"build up path blocks with resnet and attention.\"\"\"\n\n    out_blocks = nn.ModuleList()\n    for idx in range(resblocks_per_downsample + 1):\n        layers = [\n            MODELS.build(\n                resblock_cfg,\n                default_args={\n                    'in_channels': in_channels_ + in_channels_list.pop(),\n                    'out_channels': int(base_channels * factor)\n                })\n        ]\n        in_channels_ = int(base_channels * factor)\n        if scale in attention_scale:\n            layers.append(\n                MODELS.build(\n                    attention_cfg, default_args={'in_channels': in_channels_}))\n        if (level != len(channel_factor_list) - 1\n                and idx == resblocks_per_downsample):\n            out_channels_ = in_channels_\n            layers.append(\n                DenoisingResBlock(\n                    in_channels_,\n                    embedding_channels,\n                    use_scale_shift_norm,\n                    dropout,\n                    norm_cfg=norm_cfg,\n                    out_channels=out_channels_,\n                    up=True) if resblock_updown else MODELS.\n                build(\n                    upsample_cfg, default_args={'in_channels': in_channels_}))\n            scale //= 2\n        out_blocks.append(EmbedSequential(*layers))\n\n    return out_blocks, in_channels_, scale\n\n\n@MODELS.register_module()\nclass DenoisingUnet(BaseModule):\n    \"\"\"Denoising Unet. This network receives a diffused image ``x_t`` and\n    current timestep ``t``, and returns a ``output_dict`` corresponding to the\n    passed ``output_cfg``.\n\n    ``output_cfg`` defines the number of channels and the meaning of the\n    output. ``output_cfg`` mainly contains keys of ``mean`` and ``var``,\n    denoting how the network outputs mean and variance required for the\n    denoising process.\n    For ``mean``:\n    1. ``dict(mean='EPS')``: Model will predict noise added in the\n        diffusion process, and the ``output_dict`` will contain a key named\n        ``eps_t_pred``.\n    2. ``dict(mean='START_X')``: Model will direct predict the mean of the\n        original image `x_0`, and the ``output_dict`` will contain a key named\n        ``x_0_pred``.\n    3. ``dict(mean='X_TM1_PRED')``: Model will predict the mean of diffused\n        image at `t-1` timestep, and the ``output_dict`` will contain a key\n        named ``x_tm1_pred``.\n\n    For ``var``:\n    1. ``dict(var='FIXED_SMALL')`` or ``dict(var='FIXED_LARGE')``: Variance in\n        the denoising process is regarded as a fixed value. Therefore only\n        'mean' will be predicted, and the output channels will equal to the\n        input image (e.g., three channels for RGB image.)\n    2. ``dict(var='LEARNED')``: Model will predict `log_variance` in the\n        denoising process, and the ``output_dict`` will contain a key named\n        ``log_var``.\n    3. ``dict(var='LEARNED_RANGE')``: Model will predict an interpolation\n        factor and the `log_variance` will be calculated as\n        `factor * upper_bound + (1-factor) * lower_bound`. The ``output_dict``\n        will contain a key named ``factor``.\n\n    If ``var`` is not ``FIXED_SMALL`` or ``FIXED_LARGE``, the number of output\n    channels will be the double of input channels, where the first half part\n    contains predicted mean values and the other part is the predicted\n    variance values. Otherwise, the number of output channels equals to the\n    input channels, only containing the predicted mean values.\n\n    Args:\n        image_size (int | list[int]): The size of image to denoise.\n        in_channels (int, optional): The input channels of the input image.\n            Defaults as ``3``.\n        out_channels (int, optional): The output channels of the output\n            prediction. Defaults as ``None`` for automaticaaly assigned by\n            ``var_mode``.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contain channels based on this number.\n            Defaults to ``128``.\n        resblocks_per_downsample (int, optional): Number of ResBlock used\n            between two downsample operations. The number of ResBlock between\n            upsample operations will be the same value to keep symmetry.\n            Defaults to 3.\n        num_timesteps (int, optional): The total timestep of the denoising\n            process and the diffusion process. Defaults to ``1000``.\n        use_rescale_timesteps (bool, optional): Whether rescale the input\n            timesteps in range of [0, 1000].  Defaults to ``True``.\n        dropout (float, optional): The probability of dropout operation of\n            each ResBlock. Pass ``0`` to do not use dropout. Defaults as 0.\n        embedding_channels (int, optional): The output channels of time\n            embedding layer and label embedding layer. If not passed (or\n            passed ``-1``), output channels of the embedding layers will set\n            as four times of ``base_channels``. Defaults to ``-1``.\n        num_classes (int, optional): The number of conditional classes. If set\n            to 0, this model will be degraded to an unconditional model.\n            Defaults to 0.\n        channels_cfg (list | dict[list], optional): Config for input channels\n            of the intermediate blocks. If list is passed, each element of the\n            list indicates the scale factor for the input channels of the\n            current block with regard to the ``base_channels``. For block\n            ``i``, the input and output channels should be\n            ``channels_cfg[i] * base_channels`` and\n            ``channels_cfg[i+1] * base_channels`` If dict is provided, the key\n            of the dict should be the output scale and corresponding value\n            should be a list to define channels. Default: Please refer to\n            ``_default_channels_cfg``.\n        output_cfg (dict, optional): Config for output variables. Defaults to\n            ``dict(mean='eps', var='learned_range')``.\n        norm_cfg (dict, optional): The config for normalization layers.\n            Defaults to ``dict(type='GN', num_groups=32)``.\n        act_cfg (dict, optional): The config for activation layers. Defaults\n            to ``dict(type='SiLU', inplace=False)``.\n        shortcut_kernel_size (int, optional): The kernel size for shortcut\n            conv in ResBlocks. The value of this argument will overwrite the\n            default value of `resblock_cfg`. Defaults to `3`.\n        use_scale_shift_norm (bool, optional): Whether perform scale and shift\n            after normalization operation. Defaults to True.\n        num_heads (int, optional): The number of attention heads. Defaults to\n            4.\n        time_embedding_mode (str, optional): Embedding method of\n            ``time_embedding``. Defaults to 'sin'.\n        time_embedding_cfg (dict, optional): Config for ``time_embedding``.\n            Defaults to None.\n        resblock_cfg (dict, optional): Config for ResBlock. Defaults to\n            ``dict(type='DenoisingResBlock')``.\n        attention_cfg (dict, optional): Config for attention operation.\n            Defaults to ``dict(type='MultiHeadAttention')``.\n        upsample_conv (bool, optional): Whether use conv in upsample block.\n            Defaults to ``True``.\n        downsample_conv (bool, optional): Whether use conv operation in\n            downsample block.  Defaults to ``True``.\n        upsample_cfg (dict, optional): Config for upsample blocks.\n            Defaults to ``dict(type='DenoisingDownsample')``.\n        downsample_cfg (dict, optional): Config for downsample blocks.\n            Defaults to ``dict(type='DenoisingUpsample')``.\n        attention_res (int | list[int], optional): Resolution of feature maps\n            to apply attention operation. Defaults to ``[16, 8]``.\n        pretrained (str | dict, optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict.  Defaults to None.\n    \"\"\"\n\n    _default_channels_cfg = {\n        512: [0.5, 1, 1, 2, 2, 4, 4],\n        256: [1, 1, 2, 2, 4, 4],\n        128: [1, 1, 2, 3, 4],\n        64: [1, 2, 3, 4],\n        32: [1, 2, 2, 2]\n    }\n\n    def __init__(self,\n                 image_size,\n                 in_channels=3,\n                 out_channels=None,\n                 base_channels=128,\n                 resblocks_per_downsample=3,\n                 num_timesteps=1000,\n                 use_rescale_timesteps=False,\n                 dropout=0,\n                 embedding_channels=-1,\n                 num_classes=0,\n                 use_fp16=False,\n                 channels_cfg=None,\n                 output_cfg=dict(mean='eps', var='learned_range'),\n                 norm_cfg=dict(type='GN', num_groups=32),\n                 act_cfg=dict(type='SiLU', inplace=False),\n                 shortcut_kernel_size=1,\n                 use_scale_shift_norm=False,\n                 resblock_updown=False,\n                 num_heads=4,\n                 time_embedding_mode='sin',\n                 time_embedding_cfg=None,\n                 resblock_cfg=dict(type='DenoisingResBlock'),\n                 attention_cfg=dict(type='MultiHeadAttention'),\n                 encoder_channels=None,\n                 downsample_conv=True,\n                 upsample_conv=True,\n                 downsample_cfg=dict(type='DenoisingDownsample'),\n                 upsample_cfg=dict(type='DenoisingUpsample'),\n                 attention_res=[16, 8],\n                 pretrained=None,\n                 unet_type='',\n                 down_block_types: Tuple[str] = (),\n                 up_block_types: Tuple[str] = (),\n                 cross_attention_dim=768,\n                 layers_per_block: int = 2):\n\n        super().__init__()\n\n        self.unet_type = unet_type\n        self.num_classes = num_classes\n        self.num_timesteps = num_timesteps\n        self.base_channels = base_channels\n        self.encoder_channels = encoder_channels\n        self.use_rescale_timesteps = use_rescale_timesteps\n        self.dtype = torch.float16 if use_fp16 else torch.float32\n\n        self.output_cfg = deepcopy(output_cfg)\n        self.mean_mode = self.output_cfg.get('mean', 'eps')\n        self.var_mode = self.output_cfg.get('var', 'learned_range')\n        self.in_channels = in_channels\n\n        # double output_channels to output mean and var at same time\n        if out_channels is None:\n            out_channels = in_channels if 'FIXED' in self.var_mode.upper() \\\n                else 2 * in_channels\n        self.out_channels = out_channels\n\n        # check type of image_size\n        if not isinstance(image_size, int) and not isinstance(\n                image_size, list):\n            raise TypeError(\n                'Only support `int` and `list[int]` for `image_size`.')\n        if isinstance(image_size, list):\n            assert len(\n                image_size) == 2, 'The length of `image_size` should be 2.'\n            assert image_size[0] == image_size[\n                1], 'Width and height of the image should be same.'\n            image_size = image_size[0]\n        self.image_size = image_size\n\n        channels_cfg = deepcopy(self._default_channels_cfg) \\\n            if channels_cfg is None else deepcopy(channels_cfg)\n        if isinstance(channels_cfg, dict):\n            if image_size not in channels_cfg:\n                raise KeyError(f'`image_size={image_size} is not found in '\n                               '`channels_cfg`, only support configs for '\n                               f'{[chn for chn in channels_cfg.keys()]}')\n            self.channel_factor_list = channels_cfg[image_size]\n        elif isinstance(channels_cfg, list):\n            self.channel_factor_list = channels_cfg\n        else:\n            raise ValueError('Only support list or dict for `channels_cfg`, '\n                             f'receive {type(channels_cfg)}')\n\n        embedding_channels = base_channels * 4 \\\n            if embedding_channels == -1 else embedding_channels\n\n        # init the channel scale factor\n        scale = 1\n        ch = int(base_channels * self.channel_factor_list[0])\n        self.in_channels_list = [ch]\n\n        if self.unet_type == 'stable':\n            # time\n            self.time_proj = Timesteps(ch)\n            self.time_embedding = TimestepEmbedding(base_channels,\n                                                    embedding_channels)\n\n            self.conv_in = nn.Conv2d(\n                in_channels, ch, kernel_size=3, padding=(1, 1))\n        else:\n            self.time_embedding = TimeEmbedding(\n                base_channels,\n                embedding_channels=embedding_channels,\n                embedding_mode=time_embedding_mode,\n                embedding_cfg=time_embedding_cfg,\n                act_cfg=act_cfg)\n\n            self.in_blocks = nn.ModuleList(\n                [EmbedSequential(nn.Conv2d(in_channels, ch, 3, 1, padding=1))])\n\n        if self.num_classes != 0:\n            self.label_embedding = nn.Embedding(self.num_classes,\n                                                embedding_channels)\n\n        self.resblock_cfg = deepcopy(resblock_cfg)\n        self.resblock_cfg.setdefault('dropout', dropout)\n        self.resblock_cfg.setdefault('norm_cfg', norm_cfg)\n        self.resblock_cfg.setdefault('act_cfg', act_cfg)\n        self.resblock_cfg.setdefault('embedding_channels', embedding_channels)\n        self.resblock_cfg.setdefault('use_scale_shift_norm',\n                                     use_scale_shift_norm)\n        self.resblock_cfg.setdefault('shortcut_kernel_size',\n                                     shortcut_kernel_size)\n\n        # get scales of ResBlock to apply attention\n        attention_scale = [image_size // int(res) for res in attention_res]\n        self.attention_cfg = deepcopy(attention_cfg)\n        self.attention_cfg.setdefault('num_heads', num_heads)\n        self.attention_cfg.setdefault('norm_cfg', norm_cfg)\n\n        self.downsample_cfg = deepcopy(downsample_cfg)\n        self.downsample_cfg.setdefault('with_conv', downsample_conv)\n        self.upsample_cfg = deepcopy(upsample_cfg)\n        self.upsample_cfg.setdefault('with_conv', upsample_conv)\n\n        self.down_blocks = nn.ModuleList([])\n        self.mid_block = None\n        self.up_blocks = nn.ModuleList([])\n\n        attention_head_dim = (num_heads, ) * len(down_block_types)\n\n        # construct the encoder part of Unet\n        for level, factor in enumerate(self.channel_factor_list):\n            in_channels_ = ch if level == 0 \\\n                else int(base_channels * self.channel_factor_list[level - 1])\n            out_channels_ = int(base_channels * factor)\n\n            if self.unet_type == 'stable':\n                is_final_block = level == len(self.channel_factor_list) - 1\n                down_block_type = down_block_types[level]\n                down_block = get_down_block(\n                    down_block_type,\n                    num_layers=layers_per_block,\n                    in_channels=in_channels_,\n                    out_channels=out_channels_,\n                    temb_channels=embedding_channels,\n                    cross_attention_dim=cross_attention_dim,\n                    add_downsample=not is_final_block,\n                    resnet_act_fn=act_cfg['type'],\n                    resnet_groups=norm_cfg['num_groups'],\n                    attn_num_head_channels=attention_head_dim[level],\n                )\n                self.down_blocks.append(down_block)\n\n            else:\n                in_blocks, scale = build_down_block_resattn(\n                    resblocks_per_downsample=resblocks_per_downsample,\n                    resblock_cfg=self.resblock_cfg,\n                    in_channels_=in_channels_,\n                    out_channels_=out_channels_,\n                    attention_scale=attention_scale,\n                    attention_cfg=self.attention_cfg,\n                    in_channels_list=self.in_channels_list,\n                    level=level,\n                    channel_factor_list=self.channel_factor_list,\n                    embedding_channels=embedding_channels,\n                    use_scale_shift_norm=use_scale_shift_norm,\n                    dropout=dropout,\n                    norm_cfg=norm_cfg,\n                    resblock_updown=resblock_updown,\n                    downsample_cfg=self.downsample_cfg,\n                    scale=scale)\n                self.in_blocks.extend(in_blocks)\n\n        # construct the bottom part of Unet\n        block_out_channels = [\n            times * base_channels for times in self.channel_factor_list\n        ]\n        in_channels_ = self.in_channels_list[-1]\n        if self.unet_type == 'stable':\n            self.mid_block = UNetMidBlock2DCrossAttn(\n                in_channels=block_out_channels[-1],\n                temb_channels=embedding_channels,\n                cross_attention_dim=cross_attention_dim,\n                resnet_act_fn=act_cfg['type'],\n                resnet_time_scale_shift='default',\n                attn_num_head_channels=attention_head_dim[-1],\n                resnet_groups=norm_cfg['num_groups'],\n            )\n        else:\n            self.mid_blocks = build_mid_blocks_resattn(self.resblock_cfg,\n                                                       self.attention_cfg,\n                                                       in_channels_)\n\n        # stable up parameters\n        self.num_upsamplers = 0\n        reversed_block_out_channels = list(reversed(block_out_channels))\n        reversed_attention_head_dim = list(reversed(attention_head_dim))\n        output_channel = reversed_block_out_channels[0]\n\n        # construct the decoder part of Unet\n        in_channels_list = deepcopy(self.in_channels_list)\n        if self.unet_type != 'stable':\n            self.out_blocks = nn.ModuleList()\n        for level, factor in enumerate(self.channel_factor_list[::-1]):\n\n            if self.unet_type == 'stable':\n                is_final_block = level == len(block_out_channels) - 1\n\n                prev_output_channel = output_channel\n                output_channel = reversed_block_out_channels[level]\n                input_channel = reversed_block_out_channels[min(\n                    level + 1,\n                    len(block_out_channels) - 1)]\n\n                # add upsample block for all BUT final layer\n                if not is_final_block:\n                    add_upsample = True\n                    self.num_upsamplers += 1\n                else:\n                    add_upsample = False\n\n                up_block_type = up_block_types[level]\n                up_block = get_up_block(\n                    up_block_type,\n                    num_layers=layers_per_block + 1,\n                    in_channels=input_channel,\n                    out_channels=output_channel,\n                    prev_output_channel=prev_output_channel,\n                    temb_channels=embedding_channels,\n                    cross_attention_dim=cross_attention_dim,\n                    add_upsample=add_upsample,\n                    resnet_act_fn=act_cfg['type'],\n                    resnet_groups=norm_cfg['num_groups'],\n                    attn_num_head_channels=reversed_attention_head_dim[level],\n                )\n                self.up_blocks.append(up_block)\n                prev_output_channel = output_channel\n            else:\n                out_blocks, in_channels_, scale = build_up_blocks_resattn(\n                    resblocks_per_downsample,\n                    self.resblock_cfg,\n                    in_channels_,\n                    in_channels_list,\n                    base_channels,\n                    factor,\n                    scale,\n                    attention_scale,\n                    self.attention_cfg,\n                    self.channel_factor_list,\n                    level,\n                    embedding_channels,\n                    use_scale_shift_norm,\n                    dropout,\n                    norm_cfg,\n                    resblock_updown,\n                    self.upsample_cfg,\n                )\n                self.out_blocks.extend(out_blocks)\n\n        if self.unet_type == 'stable':\n            # out\n            self.conv_norm_out = nn.GroupNorm(\n                num_channels=block_out_channels[0],\n                num_groups=norm_cfg['num_groups'])\n            if digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n                self.conv_act = nn.SiLU()\n            else:\n                mmengine.print_log('\\'SiLU\\' is not supported for '\n                                   f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                                   'Use ReLu instead but result maybe wrong')\n                self.conv_act = nn.ReLU()\n            self.conv_out = nn.Conv2d(\n                block_out_channels[0],\n                self.out_channels,\n                kernel_size=3,\n                padding=1)\n        else:\n            self.out = ConvModule(\n                in_channels=in_channels_,\n                out_channels=out_channels,\n                kernel_size=3,\n                padding=1,\n                act_cfg=act_cfg,\n                norm_cfg=norm_cfg,\n                bias=True,\n                order=('norm', 'act', 'conv'))\n\n        if self.unet_type == 'stable':\n            self.sample_size = image_size // 8  # NOTE: hard code here\n\n        self.init_weights(pretrained)\n\n    def forward(self,\n                x_t,\n                t,\n                encoder_hidden_states=None,\n                label=None,\n                return_noise=False):\n        \"\"\"Forward function.\n        Args:\n            x_t (torch.Tensor): Diffused image at timestep `t` to denoise.\n            t (torch.Tensor): Current timestep.\n            label (torch.Tensor | callable | None): You can directly give a\n                batch of label through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of label data. Otherwise, the\n                ``None`` indicates to use the default label sampler.\n            return_noise (bool, optional): If True, inputted ``x_t`` and ``t``\n                will be returned in a dict with output desired by\n                ``output_cfg``. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``\n        \"\"\"\n        # By default samples have to be AT least a multiple of t\n        # he overall upsampling factor.\n        # The overall upsampling factor is equal\n        # to 2 ** (# num of upsampling layers).\n        # However, the upsampling interpolation output size\n        # can be forced to fit any upsampling size\n        # on the fly if necessary.\n        default_overall_up_factor = 2**self.num_upsamplers\n\n        # upsample size should be forwarded when sample is not\n        # a multiple of `default_overall_up_factor`\n        forward_upsample_size = False\n        upsample_size = None\n\n        if any(s % default_overall_up_factor != 0 for s in x_t.shape[-2:]):\n            logger.info(\n                'Forward upsample size to force interpolation output size.')\n            forward_upsample_size = True\n\n        if not torch.is_tensor(t):\n            t = torch.tensor([t], dtype=torch.long, device=x_t.device)\n        elif torch.is_tensor(t) and len(t.shape) == 0:\n            t = t[None].to(x_t.device)\n\n        if self.unet_type == 'stable':\n            # broadcast to batch dimension in a way that's\n            # compatible with ONNX/Core ML\n            t = t.expand(x_t.shape[0])\n\n            t_emb = self.time_proj(t)\n\n            # t does not contain any weights and will always return f32 tensors\n            # but time_embedding might actually be running in fp16.\n            # so we need to cast here.\n            # there might be better ways to encapsulate this.\n            t_emb = t_emb.to(dtype=self.dtype)\n            embedding = self.time_embedding(t_emb)\n        else:\n            embedding = self.time_embedding(t)\n\n        if label is not None:\n            assert hasattr(self, 'label_embedding')\n            embedding = self.label_embedding(label) + embedding\n\n        if self.unet_type == 'stable':\n            # 2. pre-process\n            x_t = self.conv_in(x_t)\n\n            # 3. down\n            down_block_res_samples = (x_t, )\n            for downsample_block in self.down_blocks:\n                if hasattr(downsample_block, 'attentions'\n                           ) and downsample_block.attentions is not None:\n                    x_t, res_samples = downsample_block(\n                        hidden_states=x_t,\n                        temb=embedding,\n                        encoder_hidden_states=encoder_hidden_states,\n                    )\n                else:\n                    x_t, res_samples = downsample_block(\n                        hidden_states=x_t, temb=embedding)\n\n                down_block_res_samples += res_samples\n\n            # 4. mid\n            x_t = self.mid_block(\n                x_t, embedding, encoder_hidden_states=encoder_hidden_states)\n\n            # 5. up\n            for i, upsample_block in enumerate(self.up_blocks):\n                is_final_block = i == len(self.up_blocks) - 1\n\n                res_samples = down_block_res_samples[-len(upsample_block.\n                                                          resnets):]\n                down_block_res_samples = down_block_res_samples[:-len(\n                    upsample_block.resnets)]\n\n                # if we have not reached the final block\n                # and need to forward the upsample size, we do it here\n                if not is_final_block and forward_upsample_size:\n                    upsample_size = down_block_res_samples[-1].shape[2:]\n\n                if hasattr(upsample_block, 'attentions'\n                           ) and upsample_block.attentions is not None:\n                    x_t = upsample_block(\n                        hidden_states=x_t,\n                        temb=embedding,\n                        res_hidden_states_tuple=res_samples,\n                        encoder_hidden_states=encoder_hidden_states,\n                        upsample_size=upsample_size,\n                    )\n                else:\n                    x_t = upsample_block(\n                        hidden_states=x_t,\n                        temb=embedding,\n                        res_hidden_states_tuple=res_samples,\n                        upsample_size=upsample_size)\n            # 6. post-process\n            x_t = self.conv_norm_out(x_t)\n            x_t = self.conv_act(x_t)\n            x_t = self.conv_out(x_t)\n\n            outputs = x_t\n        else:\n            h, hs = x_t, []\n            h = h.type(self.dtype)\n            # forward downsample blocks\n            for block in self.in_blocks:\n                h = block(h, embedding)\n                hs.append(h)\n\n            # forward middle blocks\n            h = self.mid_blocks(h, embedding)\n\n            # forward upsample blocks\n            for block in self.out_blocks:\n                h = block(torch.cat([h, hs.pop()], dim=1), embedding)\n            h = h.type(x_t.dtype)\n            outputs = self.out(h)\n\n        return {'sample': outputs}\n\n    def init_weights(self, pretrained=None):\n        \"\"\"Init weights for models.\n\n        We just use the initialization method proposed in the original paper.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            # As Improved-DDPM, we apply zero-initialization to\n            #   second conv block in ResBlock (keywords: conv_2)\n            #   the output layer of the Unet (keywords: 'out' but\n            #     not 'out_blocks')\n            #   projection layer in Attention layer (keywords: proj)\n            for n, m in self.named_modules():\n                if isinstance(m, nn.Conv2d) and ('conv_2' in n or\n                                                 ('out' in n\n                                                  and 'out_blocks' not in n)):\n                    constant_init(m, 0)\n                if isinstance(m, nn.Conv1d) and 'proj' in n:\n                    constant_init(m, 0)\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n\n    def convert_to_fp16(self):\n        \"\"\"Convert the precision of the model to float16.\"\"\"\n        self.in_blocks.apply(convert_module_to_f16)\n        self.mid_blocks.apply(convert_module_to_f16)\n        self.out_blocks.apply(convert_module_to_f16)\n\n    def convert_to_fp32(self):\n        \"\"\"Convert the precision of the model to float32.\"\"\"\n        self.in_blocks.apply(convert_module_to_f32)\n        self.mid_blocks.apply(convert_module_to_f32)\n        self.out_blocks.apply(convert_module_to_f32)\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/embeddings.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport mmengine\nimport torch\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\nfrom torch import nn\n\n\nclass TimestepEmbedding(nn.Module):\n    \"\"\"Module which uses linear to embed timestep.\"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 time_embed_dim: int,\n                 act_fn: str = 'silu',\n                 out_dim: int = None):\n        super().__init__()\n\n        self.linear_1 = nn.Linear(in_channels, time_embed_dim)\n        self.act = None\n        if act_fn == 'silu' and \\\n                digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n            self.act = nn.SiLU()\n        else:\n            mmengine.print_log('\\'SiLU\\' is not supported for '\n                               f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                               'Use ReLu instead but result maybe wrong')\n            self.act = nn.ReLU()\n\n        if out_dim is not None:\n            time_embed_dim_out = out_dim\n        else:\n            time_embed_dim_out = time_embed_dim\n        self.linear_2 = nn.Linear(time_embed_dim, time_embed_dim_out)\n\n    def forward(self, sample):\n        \"\"\"forward with sample.\"\"\"\n\n        sample = self.linear_1(sample)\n\n        if self.act is not None:\n            sample = self.act(sample)\n\n        sample = self.linear_2(sample)\n        return sample\n\n\nclass Timesteps(nn.Module):\n    \"\"\"A module which transforms timesteps to embedding.\"\"\"\n\n    def __init__(self,\n                 num_channels: int,\n                 flip_sin_to_cos: bool = True,\n                 downscale_freq_shift: float = 0):\n        super().__init__()\n        self.num_channels = num_channels\n        self.flip_sin_to_cos = flip_sin_to_cos\n        self.downscale_freq_shift = downscale_freq_shift\n        self.max_period = 10000\n        self.scale = 1\n\n    def forward(self, timesteps):\n        \"\"\"forward with timesteps.\"\"\"\n\n        assert len(timesteps.shape) == 1, 'Timesteps should be a 1d-array'\n\n        embedding_dim = self.num_channels\n        half_dim = embedding_dim // 2\n        exponent = -math.log(self.max_period) * \\\n            torch.arange(\n                start=0,\n                end=half_dim,\n                dtype=torch.float32,\n                device=timesteps.device)\n        exponent = exponent / (half_dim - self.downscale_freq_shift)\n\n        emb = torch.exp(exponent)\n        emb = timesteps[:, None].float() * emb[None, :]\n\n        # scale embeddings\n        emb = self.scale * emb\n\n        # concat sine and cosine embeddings\n        emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=-1)\n\n        # flip sine and cosine embeddings\n        if self.flip_sin_to_cos:\n            emb = torch.cat([emb[:, half_dim:], emb[:, :half_dim]], dim=-1)\n\n        # zero pad\n        if embedding_dim % 2 == 1:\n            emb = torch.nn.functional.pad(emb, (0, 1, 0, 0))\n        return emb\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/res_blocks.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmengine\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\n\nclass ResnetBlock2D(nn.Module):\n    \"\"\"resnet block support down sample and up sample.\n\n    Args:\n        in_channels (int): input channels.\n        out_channels (int): output channels.\n        conv_shortcut (bool): whether to use conv shortcut.\n        dropout (float): dropout rate.\n        temb_channels (int): time embedding channels.\n        groups (int): conv groups.\n        groups_out (int): conv out groups.\n        pre_norm (bool): whether to norm before conv. Todo: remove.\n        eps (float): eps for groupnorm.\n        non_linearity (str): non linearity type.\n        time_embedding_norm (str): time embedding norm type.\n        output_scale_factor (float): factor to scale input and output.\n        use_in_shortcut (bool): whether to use conv in shortcut.\n        up (bool): whether to upsample.\n        down (bool): whether to downsample.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels=None,\n        conv_shortcut=False,\n        dropout=0.0,\n        temb_channels=512,\n        groups=32,\n        groups_out=None,\n        pre_norm=True,\n        eps=1e-6,\n        non_linearity='silu',\n        time_embedding_norm='default',\n        output_scale_factor=1.0,\n        use_in_shortcut=None,\n        up=False,\n        down=False,\n    ):\n        super().__init__()\n        self.pre_norm = pre_norm\n        self.pre_norm = True\n        self.in_channels = in_channels\n        out_channels = in_channels if out_channels is None else out_channels\n        self.out_channels = out_channels\n        self.use_conv_shortcut = conv_shortcut\n        self.time_embedding_norm = time_embedding_norm\n        self.up = up\n        self.down = down\n        self.output_scale_factor = output_scale_factor\n\n        if groups_out is None:\n            groups_out = groups\n\n        self.norm1 = torch.nn.GroupNorm(\n            num_groups=groups, num_channels=in_channels, eps=eps, affine=True)\n\n        self.conv1 = torch.nn.Conv2d(\n            in_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if temb_channels is not None:\n            self.time_emb_proj = torch.nn.Linear(temb_channels, out_channels)\n        else:\n            self.time_emb_proj = None\n\n        self.norm2 = torch.nn.GroupNorm(\n            num_groups=groups_out,\n            num_channels=out_channels,\n            eps=eps,\n            affine=True)\n        self.dropout = torch.nn.Dropout(dropout)\n        self.conv2 = torch.nn.Conv2d(\n            out_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if non_linearity == 'silu' and \\\n                digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n            self.nonlinearity = nn.SiLU()\n        else:\n            mmengine.print_log('\\'SiLU\\' is not supported for '\n                               f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                               'Use ReLu instead but result maybe wrong')\n            self.nonlinearity = nn.ReLU()\n\n        self.upsample = self.downsample = None\n        if self.up:\n            self.upsample = Upsample2D(in_channels, use_conv=False)\n        elif self.down:\n            self.downsample = Downsample2D(\n                in_channels, use_conv=False, padding=1, name='op')\n\n        self.use_in_shortcut = self.in_channels != self.out_channels if use_in_shortcut is None else use_in_shortcut  # noqa\n\n        self.conv_shortcut = None\n        if self.use_in_shortcut:\n            self.conv_shortcut = torch.nn.Conv2d(\n                in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n\n    def forward(self, input_tensor, temb):\n        \"\"\"forward with hidden states and time embeddings.\"\"\"\n        hidden_states = input_tensor\n\n        hidden_states = self.norm1(hidden_states)\n        hidden_states = self.nonlinearity(hidden_states)\n\n        if self.upsample is not None:\n            # upsample_nearest_nhwc fails with large batch sizes.\n            # see https://github.com/huggingface/diffusers/issues/984\n            if hidden_states.shape[0] >= 64:\n                input_tensor = input_tensor.contiguous()\n                hidden_states = hidden_states.contiguous()\n            input_tensor = self.upsample(input_tensor)\n            hidden_states = self.upsample(hidden_states)\n        elif self.downsample is not None:\n            input_tensor = self.downsample(input_tensor)\n            hidden_states = self.downsample(hidden_states)\n\n        hidden_states = self.conv1(hidden_states)\n\n        if temb is not None:\n            temb = self.time_emb_proj(self.nonlinearity(temb))[:, :, None,\n                                                               None]\n            hidden_states = hidden_states + temb\n\n        hidden_states = self.norm2(hidden_states)\n        hidden_states = self.nonlinearity(hidden_states)\n\n        hidden_states = self.dropout(hidden_states)\n        hidden_states = self.conv2(hidden_states)\n\n        if self.conv_shortcut is not None:\n            input_tensor = self.conv_shortcut(input_tensor)\n\n        output_tensor = (input_tensor +\n                         hidden_states) / self.output_scale_factor\n\n        return output_tensor\n\n\nclass Upsample2D(nn.Module):\n    \"\"\"An upsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        use_conv_transpose (bool): whether to use conv transpose.\n        out_channels (int): output channels.\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 use_conv_transpose=False,\n                 out_channels=None,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_conv_transpose = use_conv_transpose\n        self.name = name\n\n        conv = None\n        if use_conv:\n            conv = nn.Conv2d(self.channels, self.out_channels, 3, padding=1)\n        else:\n            conv = nn.ConvTranspose2d(channels, self.out_channels, 4, 2, 1)\n\n        self.conv = conv\n\n    def forward(self, hidden_states, output_size=None):\n        \"\"\"forward with hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n\n        if self.use_conv_transpose:\n            return self.conv(hidden_states)\n\n        # if `output_size` is passed we force the interpolation output\n        # size and do not make use of `scale_factor=2`\n        if output_size is None:\n            hidden_states = F.interpolate(\n                hidden_states, scale_factor=2.0, mode='nearest')\n        else:\n            hidden_states = F.interpolate(\n                hidden_states, size=output_size, mode='nearest')\n\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n\n\nclass Downsample2D(nn.Module):\n    \"\"\"A downsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        out_channels (int): output channels\n        padding (int): padding num\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 out_channels=None,\n                 padding=1,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.padding = padding\n        stride = 2\n        self.name = name\n\n        if use_conv:\n            conv = nn.Conv2d(\n                self.channels,\n                self.out_channels,\n                3,\n                stride=stride,\n                padding=padding)\n        else:\n            assert self.channels == self.out_channels\n            conv = nn.AvgPool2d(kernel_size=stride, stride=stride)\n\n        self.conv = conv\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n        if self.use_conv and self.padding == 0:\n            pad = (0, 1, 0, 1)\n            hidden_states = F.pad(hidden_states, pad, mode='constant', value=0)\n\n        assert hidden_states.shape[1] == self.channels\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n"
  },
  {
    "path": "mmagic/models/editors/ddpm/unet_blocks.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom torch import nn\n\nfrom .attention import Transformer2DModel\nfrom .res_blocks import Downsample2D, ResnetBlock2D, Upsample2D\n\n\ndef get_down_block(\n    down_block_type,\n    num_layers,\n    in_channels,\n    out_channels,\n    temb_channels,\n    add_downsample,\n    resnet_act_fn,\n    attn_num_head_channels,\n    resnet_eps=1e-5,\n    resnet_groups=32,\n    cross_attention_dim=1280,\n    downsample_padding=1,\n    dual_cross_attention=False,\n    use_linear_projection=False,\n    only_cross_attention=False,\n):\n    \"\"\"get unet down path block.\"\"\"\n\n    down_block_type = down_block_type[7:] if down_block_type.startswith(\n        'UNetRes') else down_block_type\n    if down_block_type == 'DownBlock2D':\n        return DownBlock2D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            temb_channels=temb_channels,\n            add_downsample=add_downsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            downsample_padding=downsample_padding,\n        )\n    elif down_block_type == 'CrossAttnDownBlock2D':\n        return CrossAttnDownBlock2D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            temb_channels=temb_channels,\n            add_downsample=add_downsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            downsample_padding=downsample_padding,\n            cross_attention_dim=cross_attention_dim,\n            attn_num_head_channels=attn_num_head_channels,\n            dual_cross_attention=dual_cross_attention,\n            use_linear_projection=use_linear_projection,\n            only_cross_attention=only_cross_attention,\n        )\n    raise ValueError(f'{down_block_type} does not exist.')\n\n\ndef get_up_block(\n    up_block_type,\n    num_layers,\n    in_channels,\n    out_channels,\n    prev_output_channel,\n    temb_channels,\n    add_upsample,\n    resnet_act_fn,\n    attn_num_head_channels,\n    resnet_eps=1e-5,\n    resnet_groups=32,\n    cross_attention_dim=1280,\n    dual_cross_attention=False,\n    use_linear_projection=False,\n    only_cross_attention=False,\n):\n    \"\"\"get unet up path block.\"\"\"\n\n    up_block_type = up_block_type[7:] if up_block_type.startswith(\n        'UNetRes') else up_block_type\n    if up_block_type == 'UpBlock2D':\n        return UpBlock2D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            prev_output_channel=prev_output_channel,\n            temb_channels=temb_channels,\n            add_upsample=add_upsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n        )\n    elif up_block_type == 'CrossAttnUpBlock2D':\n        return CrossAttnUpBlock2D(\n            num_layers=num_layers,\n            in_channels=in_channels,\n            out_channels=out_channels,\n            prev_output_channel=prev_output_channel,\n            temb_channels=temb_channels,\n            add_upsample=add_upsample,\n            resnet_eps=resnet_eps,\n            resnet_act_fn=resnet_act_fn,\n            resnet_groups=resnet_groups,\n            cross_attention_dim=cross_attention_dim,\n            attn_num_head_channels=attn_num_head_channels,\n            dual_cross_attention=dual_cross_attention,\n            use_linear_projection=use_linear_projection,\n            only_cross_attention=only_cross_attention,\n        )\n    raise ValueError(f'{up_block_type} does not exist.')\n\n\nclass UNetMidBlock2DCrossAttn(nn.Module):\n    \"\"\"unet mid block built by cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-5,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        attention_type='default',\n        output_scale_factor=1.0,\n        cross_attention_dim=1280,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n    ):\n        super().__init__()\n\n        self.attention_type = attention_type\n        self.attn_num_head_channels = attn_num_head_channels\n        resnet_groups = resnet_groups if resnet_groups is not None else min(\n            in_channels // 4, 32)\n\n        # there is always at least one resnet\n        resnets = [\n            ResnetBlock2D(\n                in_channels=in_channels,\n                out_channels=in_channels,\n                temb_channels=temb_channels,\n                eps=resnet_eps,\n                groups=resnet_groups,\n                dropout=dropout,\n                time_embedding_norm=resnet_time_scale_shift,\n                non_linearity=resnet_act_fn,\n                output_scale_factor=output_scale_factor,\n                pre_norm=resnet_pre_norm,\n            )\n        ]\n        attentions = []\n\n        for _ in range(num_layers):\n            attentions.append(\n                Transformer2DModel(\n                    attn_num_head_channels,\n                    in_channels // attn_num_head_channels,\n                    in_channels=in_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                ))\n\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=in_channels,\n                    out_channels=in_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n\n    def set_attention_slice(self, slice_size):\n        \"\"\"set attention slice.\"\"\"\n\n        head_dims = self.attn_num_head_channels\n        head_dims = [head_dims] if isinstance(head_dims, int) else head_dims\n        if slice_size is not None and any(dim % slice_size != 0\n                                          for dim in head_dims):\n            raise ValueError(\n                f'Make sure slice_size {slice_size} is a common divisor of '\n                f'the number of heads used in cross_attention: {head_dims}')\n\n        for attn in self.attentions:\n            attn._set_attention_slice(slice_size)\n\n    def forward(self, hidden_states, temb=None, encoder_hidden_states=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        hidden_states = self.resnets[0](hidden_states, temb)\n        for attn, resnet in zip(self.attentions, self.resnets[1:]):\n            hidden_states = attn(hidden_states, encoder_hidden_states).sample\n            hidden_states = resnet(hidden_states, temb)\n\n        return hidden_states\n\n\nclass CrossAttnDownBlock2D(nn.Module):\n    \"\"\"Down block built by cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-5,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        cross_attention_dim=1280,\n        attention_type='default',\n        output_scale_factor=1.0,\n        downsample_padding=1,\n        add_downsample=True,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n        only_cross_attention=False,\n    ):\n        super().__init__()\n        resnets = []\n        attentions = []\n\n        self.attention_type = attention_type\n        self.attn_num_head_channels = attn_num_head_channels\n\n        for i in range(num_layers):\n            in_channels = in_channels if i == 0 else out_channels\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n            attentions.append(\n                Transformer2DModel(\n                    attn_num_head_channels,\n                    out_channels // attn_num_head_channels,\n                    in_channels=out_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                    only_cross_attention=only_cross_attention,\n                ))\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_downsample:\n            self.downsamplers = nn.ModuleList([\n                Downsample2D(\n                    out_channels,\n                    use_conv=True,\n                    out_channels=out_channels,\n                    padding=downsample_padding,\n                    name='op')\n            ])\n        else:\n            self.downsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def set_attention_slice(self, slice_size):\n        \"\"\"set attention slice.\"\"\"\n\n        head_dims = self.attn_num_head_channels\n        head_dims = [head_dims] if isinstance(head_dims, int) else head_dims\n        if slice_size is not None and any(dim % slice_size != 0\n                                          for dim in head_dims):\n            raise ValueError(\n                f'Make sure slice_size {slice_size} is a common divisor of '\n                f'the number of heads used in cross_attention: {head_dims}')\n\n        for attn in self.attentions:\n            attn._set_attention_slice(slice_size)\n\n    def forward(self, hidden_states, temb=None, encoder_hidden_states=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        output_states = ()\n\n        for resnet, attn in zip(self.resnets, self.attentions):\n            hidden_states = resnet(hidden_states, temb)\n            hidden_states = attn(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states).sample\n\n            output_states += (hidden_states, )\n\n        if self.downsamplers is not None:\n            for downsampler in self.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n            output_states += (hidden_states, )\n\n        return hidden_states, output_states\n\n\nclass DownBlock2D(nn.Module):\n    \"\"\"Down block built by resnet.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-5,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_downsample=True,\n        downsample_padding=1,\n    ):\n        super().__init__()\n        resnets = []\n\n        for i in range(num_layers):\n            in_channels = in_channels if i == 0 else out_channels\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_downsample:\n            self.downsamplers = nn.ModuleList([\n                Downsample2D(\n                    out_channels,\n                    use_conv=True,\n                    out_channels=out_channels,\n                    padding=downsample_padding,\n                    name='op')\n            ])\n        else:\n            self.downsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(self, hidden_states, temb=None):\n        \"\"\"forward with hidden states.\"\"\"\n\n        output_states = ()\n\n        for resnet in self.resnets:\n            hidden_states = resnet(hidden_states, temb)\n\n            output_states += (hidden_states, )\n\n        if self.downsamplers is not None:\n            for downsampler in self.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n            output_states += (hidden_states, )\n\n        return hidden_states, output_states\n\n\nclass CrossAttnUpBlock2D(nn.Module):\n    \"\"\"Up block built by cross attention.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        prev_output_channel: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-5,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        cross_attention_dim=1280,\n        attention_type='default',\n        output_scale_factor=1.0,\n        add_upsample=True,\n        dual_cross_attention=False,\n        use_linear_projection=False,\n        only_cross_attention=False,\n    ):\n        super().__init__()\n        resnets = []\n        attentions = []\n\n        self.attention_type = attention_type\n        self.attn_num_head_channels = attn_num_head_channels\n\n        for i in range(num_layers):\n            res_skip_channels = in_channels if (i == num_layers -\n                                                1) else out_channels\n            resnet_in_channels = \\\n                prev_output_channel if i == 0 else out_channels\n\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=resnet_in_channels + res_skip_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n            attentions.append(\n                Transformer2DModel(\n                    attn_num_head_channels,\n                    out_channels // attn_num_head_channels,\n                    in_channels=out_channels,\n                    num_layers=1,\n                    cross_attention_dim=cross_attention_dim,\n                    norm_num_groups=resnet_groups,\n                    use_linear_projection=use_linear_projection,\n                    only_cross_attention=only_cross_attention,\n                ))\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_upsample:\n            self.upsamplers = nn.ModuleList([\n                Upsample2D(\n                    out_channels, use_conv=True, out_channels=out_channels)\n            ])\n        else:\n            self.upsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def set_attention_slice(self, slice_size):\n        \"\"\"set attention slice.\"\"\"\n\n        head_dims = self.attn_num_head_channels\n        head_dims = [head_dims] if isinstance(head_dims, int) else head_dims\n        if slice_size is not None and any(dim % slice_size != 0\n                                          for dim in head_dims):\n            raise ValueError(\n                f'Make sure slice_size {slice_size} is a common divisor of '\n                f'the number of heads used in cross_attention: {head_dims}')\n\n        for attn in self.attentions:\n            attn._set_attention_slice(slice_size)\n\n        self.gradient_checkpointing = False\n\n    def forward(\n        self,\n        hidden_states,\n        res_hidden_states_tuple,\n        temb=None,\n        encoder_hidden_states=None,\n        upsample_size=None,\n    ):\n        \"\"\"forward with hidden states and res hidden states.\"\"\"\n\n        for resnet, attn in zip(self.resnets, self.attentions):\n            # pop res hidden states\n            res_hidden_states = res_hidden_states_tuple[-1]\n            res_hidden_states_tuple = res_hidden_states_tuple[:-1]\n            hidden_states = torch.cat([hidden_states, res_hidden_states],\n                                      dim=1)\n\n            hidden_states = resnet(hidden_states, temb)\n            hidden_states = attn(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states).sample\n\n        if self.upsamplers is not None:\n            for upsampler in self.upsamplers:\n                hidden_states = upsampler(hidden_states, upsample_size)\n\n        return hidden_states\n\n\nclass UpBlock2D(nn.Module):\n    \"\"\"Up block built by resnet.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        prev_output_channel: int,\n        out_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-5,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_upsample=True,\n    ):\n        super().__init__()\n        resnets = []\n\n        for i in range(num_layers):\n            res_skip_channels = in_channels if (i == num_layers -\n                                                1) else out_channels\n            resnet_in_channels = \\\n                prev_output_channel if i == 0 else out_channels\n\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=resnet_in_channels + res_skip_channels,\n                    out_channels=out_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_upsample:\n            self.upsamplers = nn.ModuleList([\n                Upsample2D(\n                    out_channels, use_conv=True, out_channels=out_channels)\n            ])\n        else:\n            self.upsamplers = None\n\n        self.gradient_checkpointing = False\n\n    def forward(self,\n                hidden_states,\n                res_hidden_states_tuple,\n                temb=None,\n                upsample_size=None):\n        \"\"\"forward with hidden states and res hidden states.\"\"\"\n\n        for resnet in self.resnets:\n            # pop res hidden states\n            res_hidden_states = res_hidden_states_tuple[-1]\n            res_hidden_states_tuple = res_hidden_states_tuple[:-1]\n            hidden_states = torch.cat([hidden_states, res_hidden_states],\n                                      dim=1)\n\n            hidden_states = resnet(hidden_states, temb)\n\n        if self.upsamplers is not None:\n            for upsampler in self.upsamplers:\n                hidden_states = upsampler(hidden_states, upsample_size)\n\n        return hidden_states\n"
  },
  {
    "path": "mmagic/models/editors/deblurganv2/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .deblurganv2 import DeblurGanV2\nfrom .deblurganv2_discriminator import DeblurGanV2Discriminator\nfrom .deblurganv2_generator import DeblurGanV2Generator\n\n__all__ = ['DeblurGanV2', 'DeblurGanV2Generator', 'DeblurGanV2Discriminator']\n"
  },
  {
    "path": "mmagic/models/editors/deblurganv2/deblurganv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nfrom mmengine.model import BaseModel\nfrom mmengine.optim import OptimWrapperDict\nfrom torch import nn\n\nfrom mmagic.models.losses import AdvLoss\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass DeblurGanV2(BaseModel):\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 pixel_loss: Optional[Union[dict, str]] = None,\n                 disc_loss: Optional[Union[dict, str]] = None,\n                 adv_lambda: float = 0.001,\n                 warmup_num: int = 3,\n                 train_cfg: Optional[dict] = None,\n                 test_cfg: Optional[dict] = None,\n                 init_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[dict] = None):\n\n        super().__init__(\n            init_cfg=init_cfg, data_preprocessor=data_preprocessor)\n        if isinstance(generator, dict):\n            self.generator = MODELS.build(generator)\n        else:\n            self.generator = generator\n\n        if discriminator:\n            if isinstance(generator, dict):\n                self.discriminator = MODELS.build(discriminator)\n            else:\n                self.discriminator = discriminator\n        else:\n            self.discriminator = None\n\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n        self.epoch_num = 0\n        self.warmup_num = warmup_num\n\n        self.adv_lambda = adv_lambda\n\n        self.register_buffer('step_counter', torch.tensor(0), False)\n\n        if pixel_loss:\n            self.pixel_loss = MODELS.build(pixel_loss)\n\n        if disc_loss:\n            if isinstance(disc_loss, dict):\n                self.disc_loss = MODELS.build(disc_loss)\n            else:\n                self.disc_loss = AdvLoss(disc_loss)\n        else:\n            self.disc_loss = None\n        if self.disc_loss and getattr(self.discriminator, 'full_gan', None):\n            self.disc_loss2 = copy.deepcopy(self.disc_loss)\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs) -> Union[torch.Tensor, List[DataSample], dict]:\n        \"\"\"Returns losses or predictions of training, validation, testing, and\n        simple inference process.\n\n        ``forward`` method of BaseModel is an abstract method, its subclasses\n        must implement this method.\n\n        Accepts ``inputs`` and ``data_samples`` processed by\n        :attr:`data_preprocessor`, and returns results according to mode\n        arguments.\n\n        During non-distributed training, validation, and testing process,\n        ``forward`` will be called by ``BaseModel.train_step``,\n        ``BaseModel.val_step`` and ``BaseModel.val_step`` directly.\n\n        During distributed data parallel training process,\n        ``MMSeparateDistributedDataParallel.train_step`` will first call\n        ``DistributedDataParallel.forward`` to enable automatic\n        gradient synchronization, and then call ``forward`` to get training\n        loss.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``. Default: 'tensor'.\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == val``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict`` or tensor for custom use.\n        \"\"\"\n        if isinstance(inputs, dict):\n            inputs = inputs['img']\n        if mode == 'tensor':\n            return self.forward_tensor(inputs, data_samples, **kwargs)\n\n        elif mode == 'val':\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n        elif mode == 'predict':\n            h, w = data_samples.ori_img_shape[0][0:2]\n            block_size = 32\n            min_height = (h // block_size + 1) * block_size\n            min_width = (w // block_size + 1) * block_size\n            pad = torch.nn.ZeroPad2d(\n                padding=(0, min_width - w, 0, min_height - h))\n            inputs = pad(inputs)\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions.pred_img = predictions.pred_img[:, :, :h, :w]\n            predictions = self.convert_to_datasample(predictions, data_samples,\n                                                     inputs)\n            return predictions\n\n        elif mode == 'loss':\n            return self.forward_train(inputs, data_samples, **kwargs)\n\n    def convert_to_datasample(self, predictions: DataSample,\n                              data_samples: DataSample,\n                              inputs: Optional[torch.Tensor]\n                              ) -> List[DataSample]:\n        \"\"\"Add predictions and destructed inputs (if passed) to data samples.\n\n        Args:\n            predictions (DataSample): The predictions of the model.\n            data_samples (DataSample): The data samples loaded from\n                dataloader.\n            inputs (Optional[torch.Tensor]): The input of model. Defaults to\n                None.\n\n        Returns:\n            List[DataSample]: Modified data samples.\n        \"\"\"\n\n        if inputs is not None:\n            destructed_input = self.data_preprocessor.destruct(\n                inputs, data_samples, 'img')\n            data_samples.set_tensor_data({'input': destructed_input})\n        data_samples = data_samples.split()\n        predictions = predictions.split()\n\n        for data_sample, pred in zip(data_samples, predictions):\n            data_sample.output = pred\n\n        return data_samples\n\n    def forward_tensor(self,\n                       inputs: torch.Tensor,\n                       data_samples: Optional[List[DataSample]] = None,\n                       **kwargs) -> torch.Tensor:\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        if torch.cuda.is_available():\n            inputs = inputs.cuda()\n        feats = self.generator(inputs)\n        return feats\n\n    def forward_inference(self,\n                          inputs: torch.Tensor,\n                          data_samples: Optional[List[DataSample]] = None,\n                          **kwargs) -> List[DataSample]:\n        \"\"\"Forward inference. Returns predictions of validation, testing, and\n        simple inference.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[EditDataSample]: predictions.\n        \"\"\"\n\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        feats = self.data_preprocessor.destruct(feats, data_samples)\n        predictions = DataSample(pred_img=feats.cpu())\n\n        return predictions\n\n    def forward_train(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training. Losses of training is calculated in train_step.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: Result of ``forward_tensor`` with ``training=True``.\n        \"\"\"\n\n        return self.forward_tensor(\n            inputs, data_samples, training=True, **kwargs)\n\n    def val_step(self, data: Union[tuple, dict, list]) -> list:\n        \"\"\"Gets the predictions of given data.\n\n        Calls ``self.data_preprocessor(data, False)`` and\n        ``self(inputs, data_sample, mode='predict')`` in order. Return the\n        predictions which will be passed to evaluator.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            list: The predictions of given data.\n        \"\"\"\n        data = self.data_preprocessor(data, False)\n        return self._run_forward(data, mode='val')\n        self.epoch_num += 1\n\n    def test_step(self, data: Union[dict, tuple, list]) -> list:\n        \"\"\"``BaseModel`` implements ``test_step`` the same as ``val_step``.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            list: The predictions of given data.\n        \"\"\"\n        data = self.data_preprocessor(data, False)\n        return self._run_forward(data, mode='predict')\n\n    def _run_forward(self, data: Union[dict, tuple, list],\n                     mode: str) -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"Unpacks data for :meth:`forward`\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n            mode (str): Mode of forward.\n\n        Returns:\n            dict or list: Results of training or testing mode.\n        \"\"\"\n        if isinstance(data, dict):\n            results = self(**data, mode=mode)\n        elif isinstance(data, (list, tuple)):\n            results = self(*data, mode=mode)\n        else:\n            raise TypeError('Output of `data_preprocessor` should be '\n                            f'list, tuple or dict, but got {type(data)}')\n        return results\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step of GAN-based method.\n\n        Args:\n            data (List[dict]): Data sampled from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance\n                used to update model parameters.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        data = self.data_preprocessor(data, True)\n        batch_inputs = data['inputs']\n\n        data_samples = data['data_samples']\n        batch_gt_data = self.extract_gt_data(data_samples)\n\n        log_vars = dict()\n\n        if self.warmup_num == self.epoch_num:\n            self.generator.module.unfreeze()\n\n        g_optim_wrapper = optim_wrapper['generator']\n        with g_optim_wrapper.optim_context(self):\n            batch_outputs = self.forward_train(batch_inputs, data_samples)\n\n        log_vars_d = self.d_step_with_optim(\n            batch_outputs=batch_outputs.detach(),\n            batch_gt_data=batch_gt_data,\n            optim_wrapper=optim_wrapper)\n\n        log_vars.update(log_vars_d)\n\n        log_vars_d = self.g_step_with_optim(\n            batch_outputs=batch_outputs,\n            batch_gt_data=batch_gt_data,\n            optim_wrapper=optim_wrapper)\n\n        log_vars.update(log_vars_d)\n\n        if 'loss' in log_vars:\n            log_vars.pop('loss')\n\n        self.step_counter += 1\n\n        return log_vars\n\n    def g_step(self, batch_outputs: torch.Tensor, batch_gt_data: torch.Tensor):\n        \"\"\"G step of DobuleGAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        losses = dict()\n        loss_gx = self.pixel_loss(batch_outputs, batch_gt_data)\n        batch_outputs2 = ((batch_outputs + 1) / 2.0 -\n                          self.pixel_loss.vgg.mean) / self.pixel_loss.vgg.std\n        batch_gt_data2 = ((batch_gt_data + 1) / 2.0 -\n                          self.pixel_loss.vgg.mean) / self.pixel_loss.vgg.std\n        loss_gp = torch.nn.MSELoss()(batch_outputs2, batch_gt_data2)\n        losses['loss_g_content'] = 0.006 * loss_gx[0] + 0.5 * loss_gp\n\n        if getattr(self.discriminator, 'full_gan', None):\n            losses['loss_g_adv'] = self.adv_lambda * (self.disc_loss(\n                self.discriminator.patch_gan,\n                batch_outputs,\n                batch_gt_data,\n                model='generator') + self.disc_loss2(\n                    self.discriminator.full_gan,\n                    batch_outputs,\n                    batch_gt_data,\n                    model='generator')) / 2\n        else:\n            losses['loss_g_adv'] = self.adv_lambda * (\n                self.disc_loss(\n                    self.discriminator.patch_gan,\n                    batch_outputs,\n                    batch_gt_data,\n                    model='generator'))\n        losses['loss_g'] = losses['loss_g_content'] + losses['loss_g_adv']\n\n        return losses\n\n    def d_step(self, batch_outputs: torch.Tensor, batch_gt_data: torch.Tensor):\n        \"\"\"D step of DobuleGAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n        if getattr(self.discriminator, 'full_gan', None):\n            loss_d = (self.disc_loss(self.discriminator.patch_gan,\n                                     batch_outputs, batch_gt_data) +\n                      self.disc_loss2(self.discriminator.full_gan,\n                                      batch_outputs, batch_gt_data)) / 2\n        else:\n            loss_d = self.disc_loss(self.discriminator.patch_gan,\n                                    batch_outputs, batch_gt_data)\n        return loss_d\n\n    def g_step_with_optim(self, batch_outputs: torch.Tensor,\n                          batch_gt_data: torch.Tensor,\n                          optim_wrapper: OptimWrapperDict):\n        \"\"\"G step with optim of GAN: Calculate losses of generator and run\n        optim.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n            optim_wrapper (OptimWrapperDict): Optim wrapper dict.\n\n        Returns:\n            dict: Dict of parsed losses.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n        g_optim_wrapper.zero_grad()\n        with g_optim_wrapper.optim_context(self):\n            losses_g_double = self.g_step(batch_outputs, batch_gt_data)\n\n        parsed_losses_g, log_vars_g = self.parse_losses(losses_g_double)\n        loss_pix = g_optim_wrapper.scale_loss(parsed_losses_g)\n        g_optim_wrapper.backward(loss_pix)\n        g_optim_wrapper.step()\n\n        return log_vars_g\n\n    def d_step_with_optim(self, batch_outputs: torch.Tensor,\n                          batch_gt_data: torch.Tensor,\n                          optim_wrapper: OptimWrapperDict):\n        \"\"\"D step with optim of GAN: Calculate losses of discriminator and run\n        optim.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n            optim_wrapper (OptimWrapperDict): Optim wrapper dict.\n\n        Returns:\n            dict: Dict of parsed losses.\n        \"\"\"\n\n        log_vars = dict()\n        d_optim_wrapper = optim_wrapper['discriminator']\n        d_optim_wrapper.zero_grad()\n        with d_optim_wrapper.optim_context(self):\n\n            loss_d_double = self.adv_lambda * self.d_step(\n                batch_outputs, batch_gt_data)\n\n        parsed_losses_df, log_vars_df = self.parse_losses(\n            dict(loss_d=loss_d_double))\n        log_vars.update(log_vars_df)\n        loss_df = d_optim_wrapper.scale_loss(parsed_losses_df)\n        d_optim_wrapper.backward(loss_df, retain_graph=True)\n        d_optim_wrapper.step()\n\n        return log_vars\n\n    def extract_gt_data(self, data_samples):\n        \"\"\"extract gt data from data samples.\n\n        Args:\n            data_samples (list): List of DataSample.\n\n        Returns:\n            Tensor: Extract gt data.\n        \"\"\"\n\n        batch_gt_data = data_samples.gt_img\n\n        return batch_gt_data\n"
  },
  {
    "path": "mmagic/models/editors/deblurganv2/deblurganv2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport functools\n\nimport numpy as np\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom .deblurganv2_util import get_norm_layer\n\nbackbone_list = ['DoubleGan', 'MultiScale', 'NoGan', 'PatchGan']\n\n\nclass NLayerDiscriminator(nn.Module):\n    \"\"\"Defines the PatchGAN discriminator with the specified arguments.\"\"\"\n\n    def __init__(self,\n                 input_nc=3,\n                 ndf=64,\n                 n_layers=3,\n                 norm_layer=nn.BatchNorm2d,\n                 use_sigmoid=False,\n                 use_parallel=True):\n        super(NLayerDiscriminator, self).__init__()\n        self.use_parallel = use_parallel\n        if type(norm_layer) == functools.partial:\n            use_bias = norm_layer.func == nn.InstanceNorm2d\n        else:\n            use_bias = norm_layer == nn.InstanceNorm2d\n\n        kw = 4\n        padw = int(np.ceil((kw - 1) / 2))\n        sequence = [\n            nn.Conv2d(input_nc, ndf, kernel_size=kw, stride=2, padding=padw),\n            nn.LeakyReLU(0.2, True)\n        ]\n\n        nf_mult = 1\n        for n in range(1, n_layers):\n            nf_mult_prev = nf_mult\n            nf_mult = min(2**n, 8)\n            sequence += [\n                nn.Conv2d(\n                    ndf * nf_mult_prev,\n                    ndf * nf_mult,\n                    kernel_size=kw,\n                    stride=2,\n                    padding=padw,\n                    bias=use_bias),\n                norm_layer(ndf * nf_mult),\n                nn.LeakyReLU(0.2, True)\n            ]\n\n        nf_mult_prev = nf_mult\n        nf_mult = min(2**n_layers, 8)\n        sequence += [\n            nn.Conv2d(\n                ndf * nf_mult_prev,\n                ndf * nf_mult,\n                kernel_size=kw,\n                stride=1,\n                padding=padw,\n                bias=use_bias),\n            norm_layer(ndf * nf_mult),\n            nn.LeakyReLU(0.2, True)\n        ]\n\n        sequence += [\n            nn.Conv2d(\n                ndf * nf_mult, 1, kernel_size=kw, stride=1, padding=padw)\n        ]\n\n        if use_sigmoid:\n            sequence += [nn.Sigmoid()]\n\n        self.model = nn.Sequential(*sequence)\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        return self.model(input)\n\n\nclass DicsriminatorTail(nn.Module):\n\n    def __init__(self,\n                 nf_mult,\n                 n_layers,\n                 ndf=64,\n                 norm_layer=nn.BatchNorm2d,\n                 use_parallel=True):\n        super(DicsriminatorTail, self).__init__()\n        self.use_parallel = use_parallel\n        if type(norm_layer) == functools.partial:\n            use_bias = norm_layer.func == nn.InstanceNorm2d\n        else:\n            use_bias = norm_layer == nn.InstanceNorm2d\n\n        kw = 4\n        padw = int(np.ceil((kw - 1) / 2))\n\n        nf_mult_prev = nf_mult\n        nf_mult = min(2**n_layers, 8)\n        sequence = [\n            nn.Conv2d(\n                ndf * nf_mult_prev,\n                ndf * nf_mult,\n                kernel_size=kw,\n                stride=1,\n                padding=padw,\n                bias=use_bias),\n            norm_layer(ndf * nf_mult),\n            nn.LeakyReLU(0.2, True)\n        ]\n\n        sequence += [\n            nn.Conv2d(\n                ndf * nf_mult, 1, kernel_size=kw, stride=1, padding=padw)\n        ]\n\n        self.model = nn.Sequential(*sequence)\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        return self.model(input)\n\n\nclass MultiScaleDiscriminator(nn.Module):\n    \"\"\"Defines the MultiScale PatchGAN discriminator with the specified\n    arguments.\"\"\"\n\n    def __init__(self,\n                 input_nc=3,\n                 ndf=64,\n                 norm_layer=nn.BatchNorm2d,\n                 use_parallel=True):\n        super(MultiScaleDiscriminator, self).__init__()\n        self.use_parallel = use_parallel\n        if type(norm_layer) == functools.partial:\n            use_bias = norm_layer.func == nn.InstanceNorm2d\n        else:\n            use_bias = norm_layer == nn.InstanceNorm2d\n\n        kw = 4\n        padw = int(np.ceil((kw - 1) / 2))\n        sequence = [\n            nn.Conv2d(input_nc, ndf, kernel_size=kw, stride=2, padding=padw),\n            nn.LeakyReLU(0.2, True)\n        ]\n\n        nf_mult = 1\n        for n in range(1, 3):\n            nf_mult_prev = nf_mult\n            nf_mult = min(2**n, 8)\n            sequence += [\n                nn.Conv2d(\n                    ndf * nf_mult_prev,\n                    ndf * nf_mult,\n                    kernel_size=kw,\n                    stride=2,\n                    padding=padw,\n                    bias=use_bias),\n                norm_layer(ndf * nf_mult),\n                nn.LeakyReLU(0.2, True)\n            ]\n\n        self.scale_one = nn.Sequential(*sequence)\n        self.first_tail = DicsriminatorTail(nf_mult=nf_mult, n_layers=3)\n        nf_mult_prev = 4\n        nf_mult = 8\n\n        self.scale_two = nn.Sequential(\n            nn.Conv2d(\n                ndf * nf_mult_prev,\n                ndf * nf_mult,\n                kernel_size=kw,\n                stride=2,\n                padding=padw,\n                bias=use_bias), norm_layer(ndf * nf_mult),\n            nn.LeakyReLU(0.2, True))\n        nf_mult_prev = nf_mult\n        self.second_tail = DicsriminatorTail(nf_mult=nf_mult, n_layers=4)\n        self.scale_three = nn.Sequential(\n            nn.Conv2d(\n                ndf * nf_mult_prev,\n                ndf * nf_mult,\n                kernel_size=kw,\n                stride=2,\n                padding=padw,\n                bias=use_bias), norm_layer(ndf * nf_mult),\n            nn.LeakyReLU(0.2, True))\n        self.third_tail = DicsriminatorTail(nf_mult=nf_mult, n_layers=5)\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x = self.scale_one(input)\n        x_1 = self.first_tail(x)\n        x = self.scale_two(x)\n        x_2 = self.second_tail(x)\n        x = self.scale_three(x)\n        x = self.third_tail(x)\n        return [x_1, x_2, x]\n\n\ndef get_fullD(norm_layer):\n    \"\"\"Get a full gan discriminator.\n\n    Args:\n        norm_layer (Str): norm type\n    \"\"\"\n    model_d = NLayerDiscriminator(\n        n_layers=5,\n        norm_layer=get_norm_layer(norm_type=norm_layer),\n        use_sigmoid=False)\n    return model_d\n\n\nclass DoubleGan(nn.Module):\n    \"\"\"Get a discriminator with a patch gan and a full gan.\"\"\"\n\n    def __init__(self, norm_layer='instance', d_layers=3):\n        super().__init__()\n        self.patch_gan = NLayerDiscriminator(\n            n_layers=d_layers,\n            norm_layer=get_norm_layer(norm_type=norm_layer),\n            use_sigmoid=False)\n        self.full_gan = get_fullD(norm_layer)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            List(torch.Tensor) : ``List(torch.tensor)`` will be returned.\n        \"\"\"\n        # d_full_gan = self.model_d['full'](x)\n        d_full_gan_output = self.full_gan(x)\n        # d_patch_gan = self.model_d['patch'](x)\n        d_patch_gan_output = self.patch_gan(x)\n        return [d_full_gan_output, d_patch_gan_output]\n\n\nclass PatchGan(nn.Module):\n    \"\"\"A patch gan discriminator with the specified arguments.\"\"\"\n\n    def __init__(self, norm_layer='instance', d_layers=3):\n        super().__init__()\n        self.patch_gan = NLayerDiscriminator(\n            n_layers=d_layers,\n            norm_layer=get_norm_layer(norm_type=norm_layer),\n            use_sigmoid=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        d_patch_gan_output = self.patch_gan(x)\n        return d_patch_gan_output\n\n\nclass MultiScale(nn.Module):\n    \"\"\"A multiscale patch gan discriminator with the specified arguments.\"\"\"\n\n    def __init__(self, norm_layer='instance', d_layers=3):\n        super().__init__()\n        self.model_d = MultiScaleDiscriminator(\n            norm_layer=get_norm_layer(norm_type=norm_layer))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        result_d = self.model_d(x)\n        return result_d\n\n\n@MODELS.register_module()\nclass DeblurGanV2Discriminator:\n    \"\"\"Defines the discriminator for DeblurGanv2 with the specified arguments..\n\n    Args:\n        model (Str): Type of the discriminator model\n    \"\"\"\n\n    def __new__(cls, backbone, *args, **kwargs):\n        if backbone == 'DoubleGan':\n            return DoubleGan(*args, **kwargs)\n        elif backbone == 'NoGan' or backbone == '':\n            return super().__new__(cls)\n        elif backbone == 'PatchGan':\n            return PatchGan(*args, **kwargs)\n        elif backbone == 'MultiScale':\n            return MultiScale(*args, **kwargs)\n        else:\n            raise Exception('Discriminator model {} not found, '\n                            'Please use the following models: '\n                            '{}'.format(backbone, backbone_list))\n"
  },
  {
    "path": "mmagic/models/editors/deblurganv2/deblurganv2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\nfrom .deblurganv2_util import MobileNetV2, get_norm_layer, inceptionresnetv2\n\nbackbone_list = ['FPNInception', 'FPNMobileNet', 'FPNInceptionSimple']\n\n\nclass FPNHead(nn.Module):\n    \"\"\"Head for FPNInception,FPNInceptionSimple and FPNMobilenet.\"\"\"\n\n    def __init__(self, num_in, num_mid, num_out):\n        super().__init__()\n\n        self.block0 = nn.Conv2d(\n            num_in, num_mid, kernel_size=3, padding=1, bias=False)\n        self.block1 = nn.Conv2d(\n            num_mid, num_out, kernel_size=3, padding=1, bias=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x = nn.functional.relu(self.block0(x), inplace=True)\n        x = nn.functional.relu(self.block1(x), inplace=True)\n        return x\n\n\nclass FPN_inception(nn.Module):\n\n    def __init__(self, norm_layer, num_filter=256, pretrained='imagenet'):\n        \"\"\"Creates an `FPN` instance for feature extraction.\n\n        Args:\n          num_filter: the number of filters in each output pyramid level\n          pretrained: use ImageNet pre-trained backbone feature extractor\n        \"\"\"\n\n        super().__init__()\n        self.inception = inceptionresnetv2(\n            num_classes=1000, pretrained=pretrained)\n\n        self.enc0 = self.inception.conv2d_1a\n        self.enc1 = nn.Sequential(\n            self.inception.conv2d_2a,\n            self.inception.conv2d_2b,\n            self.inception.maxpool_3a,\n        )  # 64\n        self.enc2 = nn.Sequential(\n            self.inception.conv2d_3b,\n            self.inception.conv2d_4a,\n            self.inception.maxpool_5a,\n        )  # 192\n        self.enc3 = nn.Sequential(\n            self.inception.mixed_5b,\n            self.inception.repeat,\n            self.inception.mixed_6a,\n        )  # 1088\n        self.enc4 = nn.Sequential(\n            self.inception.repeat_1,\n            self.inception.mixed_7a,\n        )  # 2080\n        self.td1 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter), nn.ReLU(inplace=True))\n        self.td2 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter), nn.ReLU(inplace=True))\n        self.td3 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter), nn.ReLU(inplace=True))\n        self.pad = nn.ReflectionPad2d(1)\n        self.lateral4 = nn.Conv2d(2080, num_filter, kernel_size=1, bias=False)\n        self.lateral3 = nn.Conv2d(1088, num_filter, kernel_size=1, bias=False)\n        self.lateral2 = nn.Conv2d(192, num_filter, kernel_size=1, bias=False)\n        self.lateral1 = nn.Conv2d(64, num_filter, kernel_size=1, bias=False)\n        self.lateral0 = nn.Conv2d(\n            32, num_filter // 2, kernel_size=1, bias=False)\n\n        for param in self.inception.parameters():\n            param.requires_grad = False\n\n    def unfreeze(self):\n        \"\"\"Unfreeze params.\"\"\"\n        for param in self.inception.parameters():\n            param.requires_grad = True\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        # Bottom-up pathway, from ResNet\n        enc0 = self.enc0(x)\n\n        enc1 = self.enc1(enc0)  # 256\n\n        enc2 = self.enc2(enc1)  # 512\n\n        enc3 = self.enc3(enc2)  # 1024\n\n        enc4 = self.enc4(enc3)  # 2048\n\n        # Lateral connections\n\n        lateral4 = self.pad(self.lateral4(enc4))\n        lateral3 = self.pad(self.lateral3(enc3))\n        lateral2 = self.lateral2(enc2)\n        lateral1 = self.pad(self.lateral1(enc1))\n        lateral0 = self.lateral0(enc0)\n\n        # Top-down pathway\n        pad = (1, 2, 1, 2)  # pad last dim by 1 on each side\n        pad1 = (0, 1, 0, 1)\n        map4 = lateral4\n        map3 = self.td1(\n            lateral3 +\n            nn.functional.upsample(map4, scale_factor=2, mode='nearest'))\n        map2 = self.td2(\n            F.pad(lateral2, pad, 'reflect') +\n            nn.functional.upsample(map3, scale_factor=2, mode='nearest'))\n        map1 = self.td3(\n            lateral1 +\n            nn.functional.upsample(map2, scale_factor=2, mode='nearest'))\n        return F.pad(lateral0, pad1, 'reflect'), map1, map2, map3, map4\n\n\nclass FPNInception(nn.Module):\n    \"\"\"Feature Pyramid Network (FPN) with four feature maps of resolutions 1/4,\n    1/8, 1/16, 1/32 and `num_filter` filters for all feature maps.\"\"\"\n\n    def __init__(self,\n                 norm_layer,\n                 output_ch=3,\n                 num_filter=128,\n                 num_filter_fpn=256):\n        super().__init__()\n\n        norm_layer = get_norm_layer(norm_type=norm_layer)\n        self.fpn = FPN_inception(\n            num_filter=num_filter_fpn, norm_layer=norm_layer)\n\n        # The segmentation heads on top of the FPN\n\n        self.head1 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head2 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head3 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head4 = FPNHead(num_filter_fpn, num_filter, num_filter)\n\n        self.smooth = nn.Sequential(\n            nn.Conv2d(4 * num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter),\n            nn.ReLU(),\n        )\n\n        self.smooth2 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter // 2, kernel_size=3, padding=1),\n            norm_layer(num_filter // 2),\n            nn.ReLU(),\n        )\n\n        self.final = nn.Conv2d(\n            num_filter // 2, output_ch, kernel_size=3, padding=1)\n\n    def unfreeze(self):\n        \"\"\"Unfreeze params.\"\"\"\n        self.fpn.unfreeze()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        map0, map1, map2, map3, map4 = self.fpn(x)\n\n        map4 = nn.functional.upsample(\n            self.head4(map4), scale_factor=8, mode='nearest')\n        map3 = nn.functional.upsample(\n            self.head3(map3), scale_factor=4, mode='nearest')\n        map2 = nn.functional.upsample(\n            self.head2(map2), scale_factor=2, mode='nearest')\n        map1 = nn.functional.upsample(\n            self.head1(map1), scale_factor=1, mode='nearest')\n\n        smoothed = self.smooth(torch.cat([map4, map3, map2, map1], dim=1))\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n        smoothed = self.smooth2(smoothed + map0)\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n\n        final = self.final(smoothed)\n        res = torch.tanh(final) + x\n\n        return torch.clamp(res, min=-1, max=1)\n\n\nclass FPN_inceptionsimple(nn.Module):\n\n    def __init__(self, norm_layer, num_filters=256):\n        \"\"\"Creates an `FPN` instance for feature extraction.\n\n        Args:\n          num_filters: the number of filters in each output pyramid level\n          pretrained: use ImageNet pre-trained backbone feature extractor\n        \"\"\"\n\n        super().__init__()\n        self.inception = inceptionresnetv2(\n            num_classes=1000, pretrained='imagenet')\n\n        self.enc0 = self.inception.conv2d_1a\n        self.enc1 = nn.Sequential(\n            self.inception.conv2d_2a,\n            self.inception.conv2d_2b,\n            self.inception.maxpool_3a,\n        )  # 64\n        self.enc2 = nn.Sequential(\n            self.inception.conv2d_3b,\n            self.inception.conv2d_4a,\n            self.inception.maxpool_5a,\n        )  # 192\n        self.enc3 = nn.Sequential(\n            self.inception.mixed_5b,\n            self.inception.repeat,\n            self.inception.mixed_6a,\n        )  # 1088\n        self.enc4 = nn.Sequential(\n            self.inception.repeat_1,\n            self.inception.mixed_7a,\n        )  # 2080\n\n        self.pad = nn.ReflectionPad2d(1)\n        self.lateral4 = nn.Conv2d(2080, num_filters, kernel_size=1, bias=False)\n        self.lateral3 = nn.Conv2d(1088, num_filters, kernel_size=1, bias=False)\n        self.lateral2 = nn.Conv2d(192, num_filters, kernel_size=1, bias=False)\n        self.lateral1 = nn.Conv2d(64, num_filters, kernel_size=1, bias=False)\n        self.lateral0 = nn.Conv2d(\n            32, num_filters // 2, kernel_size=1, bias=False)\n\n        for param in self.inception.parameters():\n            param.requires_grad = False\n\n    def unfreeze(self):\n        \"\"\"Unfreeze params.\"\"\"\n        for param in self.inception.parameters():\n            param.requires_grad = True\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        # Bottom-up pathway, from ResNet\n        enc0 = self.enc0(x)\n\n        enc1 = self.enc1(enc0)  # 256\n\n        enc2 = self.enc2(enc1)  # 512\n\n        enc3 = self.enc3(enc2)  # 1024\n\n        enc4 = self.enc4(enc3)  # 2048\n\n        # Lateral connections\n\n        lateral4 = self.pad(self.lateral4(enc4))\n        lateral3 = self.pad(self.lateral3(enc3))\n        lateral2 = self.lateral2(enc2)\n        lateral1 = self.pad(self.lateral1(enc1))\n        lateral0 = self.lateral0(enc0)\n\n        # Top-down pathway\n        pad = (1, 2, 1, 2)  # pad last dim by 1 on each side\n        pad1 = (0, 1, 0, 1)\n        map4 = lateral4\n        map3 = lateral3 + nn.functional.upsample(\n            map4, scale_factor=2, mode='nearest')\n        map2 = F.pad(lateral2, pad, 'reflect') + nn.functional.upsample(\n            map3, scale_factor=2, mode='nearest')\n        map1 = lateral1 + nn.functional.upsample(\n            map2, scale_factor=2, mode='nearest')\n        return F.pad(lateral0, pad1, 'reflect'), map1, map2, map3, map4\n\n\nclass FPNInceptionSimple(nn.Module):\n    \"\"\"Feature Pyramid Network (FPN) with four feature maps of resolutions 1/4,\n    1/8, 1/16, 1/32 and `num_filter` filters for all feature maps.\"\"\"\n\n    def __init__(self,\n                 norm_layer,\n                 output_ch=3,\n                 num_filter=128,\n                 num_filter_fpn=256):\n        super().__init__()\n\n        norm_layer = get_norm_layer(norm_type=norm_layer)\n        self.fpn = FPN_inceptionsimple(\n            num_filter=num_filter_fpn, norm_layer=norm_layer)\n\n        # The segmentation heads on top of the FPN\n\n        self.head1 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head2 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head3 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head4 = FPNHead(num_filter_fpn, num_filter, num_filter)\n\n        self.smooth = nn.Sequential(\n            nn.Conv2d(4 * num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter),\n            nn.ReLU(),\n        )\n\n        self.smooth2 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter // 2, kernel_size=3, padding=1),\n            norm_layer(num_filter // 2),\n            nn.ReLU(),\n        )\n\n        self.final = nn.Conv2d(\n            num_filter // 2, output_ch, kernel_size=3, padding=1)\n\n    def unfreeze(self):\n        \"\"\"unfreeze the fpn network.\"\"\"\n        self.fpn.unfreeze()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        map0, map1, map2, map3, map4 = self.fpn(x)\n\n        map4 = nn.functional.upsample(\n            self.head4(map4), scale_factor=8, mode='nearest')\n        map3 = nn.functional.upsample(\n            self.head3(map3), scale_factor=4, mode='nearest')\n        map2 = nn.functional.upsample(\n            self.head2(map2), scale_factor=2, mode='nearest')\n        map1 = nn.functional.upsample(\n            self.head1(map1), scale_factor=1, mode='nearest')\n\n        smoothed = self.smooth(torch.cat([map4, map3, map2, map1], dim=1))\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n        smoothed = self.smooth2(smoothed + map0)\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n\n        final = self.final(smoothed)\n        res = torch.tanh(final) + x\n\n        return torch.clamp(res, min=-1, max=1)\n\n\nclass FPN_mobilenet(nn.Module):\n\n    def __init__(self, norm_layer, num_filters=128, pretrained=None):\n        \"\"\"Creates an `FPN` instance for feature extraction.\n\n        Args:\n          num_filters: the number of filters in each output pyramid level\n          pretrained: use ImageNet pre-trained backbone feature extractor\n        \"\"\"\n\n        super().__init__()\n        net = MobileNetV2(n_class=1000)\n\n        if pretrained:\n            # Load weights into the project directory\n            if torch.cuda.is_available():\n                state_dict = torch.load(\n                    pretrained)  # add map_location='cpu' if no gpu\n            else:\n                state_dict = torch.load(pretrained, map_location='cpu')\n            net.load_state_dict(state_dict)\n        self.features = net.features\n\n        self.enc0 = nn.Sequential(*self.features[0:2])\n        self.enc1 = nn.Sequential(*self.features[2:4])\n        self.enc2 = nn.Sequential(*self.features[4:7])\n        self.enc3 = nn.Sequential(*self.features[7:11])\n        self.enc4 = nn.Sequential(*self.features[11:16])\n\n        self.td1 = nn.Sequential(\n            nn.Conv2d(num_filters, num_filters, kernel_size=3, padding=1),\n            norm_layer(num_filters), nn.ReLU(inplace=True))\n        self.td2 = nn.Sequential(\n            nn.Conv2d(num_filters, num_filters, kernel_size=3, padding=1),\n            norm_layer(num_filters), nn.ReLU(inplace=True))\n        self.td3 = nn.Sequential(\n            nn.Conv2d(num_filters, num_filters, kernel_size=3, padding=1),\n            norm_layer(num_filters), nn.ReLU(inplace=True))\n\n        self.lateral4 = nn.Conv2d(160, num_filters, kernel_size=1, bias=False)\n        self.lateral3 = nn.Conv2d(64, num_filters, kernel_size=1, bias=False)\n        self.lateral2 = nn.Conv2d(32, num_filters, kernel_size=1, bias=False)\n        self.lateral1 = nn.Conv2d(24, num_filters, kernel_size=1, bias=False)\n        self.lateral0 = nn.Conv2d(\n            16, num_filters // 2, kernel_size=1, bias=False)\n\n        for param in self.features.parameters():\n            param.requires_grad = False\n\n    def unfreeze(self):\n        \"\"\"Unfreeze params.\"\"\"\n        for param in self.features.parameters():\n            param.requires_grad = True\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        # Bottom-up pathway, from ResNet\n        enc0 = self.enc0(x)\n\n        enc1 = self.enc1(enc0)  # 256\n\n        enc2 = self.enc2(enc1)  # 512\n\n        enc3 = self.enc3(enc2)  # 1024\n\n        enc4 = self.enc4(enc3)  # 2048\n\n        # Lateral connections\n\n        lateral4 = self.lateral4(enc4)\n        lateral3 = self.lateral3(enc3)\n        lateral2 = self.lateral2(enc2)\n        lateral1 = self.lateral1(enc1)\n        lateral0 = self.lateral0(enc0)\n\n        # Top-down pathway\n        map4 = lateral4\n        map3 = self.td1(\n            lateral3 +\n            nn.functional.upsample(map4, scale_factor=2, mode='nearest'))\n        map2 = self.td2(\n            lateral2 +\n            nn.functional.upsample(map3, scale_factor=2, mode='nearest'))\n        map1 = self.td3(\n            lateral1 +\n            nn.functional.upsample(map2, scale_factor=2, mode='nearest'))\n        return lateral0, map1, map2, map3, map4\n\n\nclass FPNMobileNet(nn.Module):\n\n    def __init__(self,\n                 norm_layer,\n                 output_ch=3,\n                 num_filter=64,\n                 num_filter_fpn=128,\n                 pretrained=None):\n        super().__init__()\n\n        # Feature Pyramid Network (FPN) with four feature maps of resolutions\n        # 1/4, 1/8, 1/16, 1/32 and `num_filters` filters for all feature maps.\n        norm_layer = get_norm_layer(norm_type=norm_layer)\n        self.fpn = FPN_mobilenet(\n            num_filters=num_filter_fpn,\n            norm_layer=norm_layer,\n            pretrained=pretrained)\n\n        # The segmentation heads on top of the FPN\n\n        self.head1 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head2 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head3 = FPNHead(num_filter_fpn, num_filter, num_filter)\n        self.head4 = FPNHead(num_filter_fpn, num_filter, num_filter)\n\n        self.smooth = nn.Sequential(\n            nn.Conv2d(4 * num_filter, num_filter, kernel_size=3, padding=1),\n            norm_layer(num_filter),\n            nn.ReLU(),\n        )\n\n        self.smooth2 = nn.Sequential(\n            nn.Conv2d(num_filter, num_filter // 2, kernel_size=3, padding=1),\n            norm_layer(num_filter // 2),\n            nn.ReLU(),\n        )\n\n        self.final = nn.Conv2d(\n            num_filter // 2, output_ch, kernel_size=3, padding=1)\n\n    def unfreeze(self):\n        \"\"\"unfreeze the fpn network.\"\"\"\n        self.fpn.unfreeze()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        map0, map1, map2, map3, map4 = self.fpn(x)\n\n        map4 = nn.functional.upsample(\n            self.head4(map4), scale_factor=8, mode='nearest')\n        map3 = nn.functional.upsample(\n            self.head3(map3), scale_factor=4, mode='nearest')\n        map2 = nn.functional.upsample(\n            self.head2(map2), scale_factor=2, mode='nearest')\n        map1 = nn.functional.upsample(\n            self.head1(map1), scale_factor=1, mode='nearest')\n\n        smoothed = self.smooth(torch.cat([map4, map3, map2, map1], dim=1))\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n        smoothed = self.smooth2(smoothed + map0)\n        smoothed = nn.functional.upsample(\n            smoothed, scale_factor=2, mode='nearest')\n\n        final = self.final(smoothed)\n        res = torch.tanh(final) + x\n\n        return torch.clamp(res, min=-1, max=1)\n\n\n@MODELS.register_module()\nclass DeblurGanV2Generator:\n    \"\"\"Defines the generator for DeblurGanv2 with the specified arguments..\n\n    Args:\n        model (Str): Type of the generator  model\n    \"\"\"\n\n    def __new__(cls, backbone, *args, **kwargs):\n        if backbone == 'FPNInception':\n            return FPNInception(*args, **kwargs)\n        elif backbone == 'FPNMobileNet':\n            return FPNMobileNet(*args, **kwargs)\n        elif backbone == 'FPNInceptionSimple':\n            return FPNInceptionSimple(*args, **kwargs)\n        else:\n            raise Exception('Generator model {} not found, '\n                            'Please use the following models: '\n                            '{}'.format(backbone, backbone_list))\n"
  },
  {
    "path": "mmagic/models/editors/deblurganv2/deblurganv2_util.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom __future__ import absolute_import, division, print_function\nimport functools\nimport math\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils import model_zoo\n\npretrained_settings = {\n    'inceptionresnetv2': {\n        'imagenet': {\n            'url':\n            'https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/'\n            'weight/inceptionresnetv2-520b38e4.pth',\n            'input_space': 'RGB',\n            'input_size': [3, 299, 299],\n            'input_range': [0, 1],\n            'mean': [0.5, 0.5, 0.5],\n            'std': [0.5, 0.5, 0.5],\n            'num_classes': 1000\n        },\n        'imagenet+background': {\n            'url':\n            'https://download.openxlab.org.cn/models/xiaomile/DeblurGANv2/'\n            'weight/inceptionresnetv2-520b38e4.pth',\n            'input_space': 'RGB',\n            'input_size': [3, 299, 299],\n            'input_range': [0, 1],\n            'mean': [0.5, 0.5, 0.5],\n            'std': [0.5, 0.5, 0.5],\n            'num_classes': 1001\n        }\n    }\n}\n\n\nclass BasicConv2d(nn.Module):\n\n    def __init__(self, in_planes, out_planes, kernel_size, stride, padding=0):\n        super(BasicConv2d, self).__init__()\n        self.conv = nn.Conv2d(\n            in_planes,\n            out_planes,\n            kernel_size=kernel_size,\n            stride=stride,\n            padding=padding,\n            bias=False)  # verify bias false\n        self.bn = nn.BatchNorm2d(\n            out_planes,\n            eps=0.001,  # value found in tensorflow\n            momentum=0.1,  # default pytorch value\n            affine=True)\n        self.relu = nn.ReLU(inplace=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x = self.conv(x)\n        x = self.bn(x)\n        x = self.relu(x)\n        return x\n\n\nclass Mixed_5b(nn.Module):\n\n    def __init__(self):\n        super(Mixed_5b, self).__init__()\n\n        self.branch0 = BasicConv2d(192, 96, kernel_size=1, stride=1)\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(192, 48, kernel_size=1, stride=1),\n            BasicConv2d(48, 64, kernel_size=5, stride=1, padding=2))\n\n        self.branch2 = nn.Sequential(\n            BasicConv2d(192, 64, kernel_size=1, stride=1),\n            BasicConv2d(64, 96, kernel_size=3, stride=1, padding=1),\n            BasicConv2d(96, 96, kernel_size=3, stride=1, padding=1))\n\n        self.branch3 = nn.Sequential(\n            nn.AvgPool2d(3, stride=1, padding=1, count_include_pad=False),\n            BasicConv2d(192, 64, kernel_size=1, stride=1))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        x2 = self.branch2(x)\n        x3 = self.branch3(x)\n        out = torch.cat((x0, x1, x2, x3), 1)\n        return out\n\n\nclass Block35(nn.Module):\n\n    def __init__(self, scale=1.0):\n        super(Block35, self).__init__()\n\n        self.scale = scale\n\n        self.branch0 = BasicConv2d(320, 32, kernel_size=1, stride=1)\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(320, 32, kernel_size=1, stride=1),\n            BasicConv2d(32, 32, kernel_size=3, stride=1, padding=1))\n\n        self.branch2 = nn.Sequential(\n            BasicConv2d(320, 32, kernel_size=1, stride=1),\n            BasicConv2d(32, 48, kernel_size=3, stride=1, padding=1),\n            BasicConv2d(48, 64, kernel_size=3, stride=1, padding=1))\n\n        self.conv2d = nn.Conv2d(128, 320, kernel_size=1, stride=1)\n        self.relu = nn.ReLU(inplace=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        x2 = self.branch2(x)\n        out = torch.cat((x0, x1, x2), 1)\n        out = self.conv2d(out)\n        out = out * self.scale + x\n        out = self.relu(out)\n        return out\n\n\nclass Mixed_6a(nn.Module):\n\n    def __init__(self):\n        super(Mixed_6a, self).__init__()\n\n        self.branch0 = BasicConv2d(320, 384, kernel_size=3, stride=2)\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(320, 256, kernel_size=1, stride=1),\n            BasicConv2d(256, 256, kernel_size=3, stride=1, padding=1),\n            BasicConv2d(256, 384, kernel_size=3, stride=2))\n\n        self.branch2 = nn.MaxPool2d(3, stride=2)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        x2 = self.branch2(x)\n        out = torch.cat((x0, x1, x2), 1)\n        return out\n\n\nclass Block17(nn.Module):\n\n    def __init__(self, scale=1.0):\n        super(Block17, self).__init__()\n\n        self.scale = scale\n\n        self.branch0 = BasicConv2d(1088, 192, kernel_size=1, stride=1)\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(1088, 128, kernel_size=1, stride=1),\n            BasicConv2d(\n                128, 160, kernel_size=(1, 7), stride=1, padding=(0, 3)),\n            BasicConv2d(\n                160, 192, kernel_size=(7, 1), stride=1, padding=(3, 0)))\n\n        self.conv2d = nn.Conv2d(384, 1088, kernel_size=1, stride=1)\n        self.relu = nn.ReLU(inplace=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        out = torch.cat((x0, x1), 1)\n        out = self.conv2d(out)\n        out = out * self.scale + x\n        out = self.relu(out)\n        return out\n\n\nclass Mixed_7a(nn.Module):\n\n    def __init__(self):\n        super(Mixed_7a, self).__init__()\n\n        self.branch0 = nn.Sequential(\n            BasicConv2d(1088, 256, kernel_size=1, stride=1),\n            BasicConv2d(256, 384, kernel_size=3, stride=2))\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(1088, 256, kernel_size=1, stride=1),\n            BasicConv2d(256, 288, kernel_size=3, stride=2))\n\n        self.branch2 = nn.Sequential(\n            BasicConv2d(1088, 256, kernel_size=1, stride=1),\n            BasicConv2d(256, 288, kernel_size=3, stride=1, padding=1),\n            BasicConv2d(288, 320, kernel_size=3, stride=2))\n\n        self.branch3 = nn.MaxPool2d(3, stride=2)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        x2 = self.branch2(x)\n        x3 = self.branch3(x)\n        out = torch.cat((x0, x1, x2, x3), 1)\n        return out\n\n\nclass Block8(nn.Module):\n\n    def __init__(self, scale=1.0, noReLU=False):\n        super(Block8, self).__init__()\n\n        self.scale = scale\n        self.noReLU = noReLU\n\n        self.branch0 = BasicConv2d(2080, 192, kernel_size=1, stride=1)\n\n        self.branch1 = nn.Sequential(\n            BasicConv2d(2080, 192, kernel_size=1, stride=1),\n            BasicConv2d(\n                192, 224, kernel_size=(1, 3), stride=1, padding=(0, 1)),\n            BasicConv2d(\n                224, 256, kernel_size=(3, 1), stride=1, padding=(1, 0)))\n\n        self.conv2d = nn.Conv2d(448, 2080, kernel_size=1, stride=1)\n        if not self.noReLU:\n            self.relu = nn.ReLU(inplace=False)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x0 = self.branch0(x)\n        x1 = self.branch1(x)\n        out = torch.cat((x0, x1), 1)\n        out = self.conv2d(out)\n        out = out * self.scale + x\n        if not self.noReLU:\n            out = self.relu(out)\n        return out\n\n\nclass InceptionResNetV2(nn.Module):\n    \"\"\"Define a inceptionresnetv2 model.\"\"\"\n\n    def __init__(self, num_classes=1001):\n        super(InceptionResNetV2, self).__init__()\n        # Special attributes\n        self.input_space = None\n        self.input_size = (299, 299, 3)\n        self.mean = None\n        self.std = None\n        # Modules\n        self.conv2d_1a = BasicConv2d(3, 32, kernel_size=3, stride=2)\n        self.conv2d_2a = BasicConv2d(32, 32, kernel_size=3, stride=1)\n        self.conv2d_2b = BasicConv2d(\n            32, 64, kernel_size=3, stride=1, padding=1)\n        self.maxpool_3a = nn.MaxPool2d(3, stride=2)\n        self.conv2d_3b = BasicConv2d(64, 80, kernel_size=1, stride=1)\n        self.conv2d_4a = BasicConv2d(80, 192, kernel_size=3, stride=1)\n        self.maxpool_5a = nn.MaxPool2d(3, stride=2)\n        self.mixed_5b = Mixed_5b()\n        self.repeat = nn.Sequential(\n            Block35(scale=0.17), Block35(scale=0.17), Block35(scale=0.17),\n            Block35(scale=0.17), Block35(scale=0.17), Block35(scale=0.17),\n            Block35(scale=0.17), Block35(scale=0.17), Block35(scale=0.17),\n            Block35(scale=0.17))\n        self.mixed_6a = Mixed_6a()\n        self.repeat_1 = nn.Sequential(\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10), Block17(scale=0.10),\n            Block17(scale=0.10), Block17(scale=0.10))\n        self.mixed_7a = Mixed_7a()\n        self.repeat_2 = nn.Sequential(\n            Block8(scale=0.20), Block8(scale=0.20), Block8(scale=0.20),\n            Block8(scale=0.20), Block8(scale=0.20), Block8(scale=0.20),\n            Block8(scale=0.20), Block8(scale=0.20), Block8(scale=0.20))\n        self.block8 = Block8(noReLU=True)\n        self.conv2d_7b = BasicConv2d(2080, 1536, kernel_size=1, stride=1)\n        self.avgpool_1a = nn.AvgPool2d(8, count_include_pad=False)\n        self.last_linear = nn.Linear(1536, num_classes)\n\n    def features(self, input):\n        \"\"\"Get network features.\n\n        Args:\n            input (torch.tensor): You can directly input a ``torch.Tensor``.\n        \"\"\"\n        x = self.conv2d_1a(input)\n        x = self.conv2d_2a(x)\n        x = self.conv2d_2b(x)\n        x = self.maxpool_3a(x)\n        x = self.conv2d_3b(x)\n        x = self.conv2d_4a(x)\n        x = self.maxpool_5a(x)\n        x = self.mixed_5b(x)\n        x = self.repeat(x)\n        x = self.mixed_6a(x)\n        x = self.repeat_1(x)\n        x = self.mixed_7a(x)\n        x = self.repeat_2(x)\n        x = self.block8(x)\n        x = self.conv2d_7b(x)\n        return x\n\n    def logits(self, features):\n        \"\"\"Get features logits.\n\n        Args:\n            features (torch.tensor): You can directly input a ``torch.Tensor``.\n        \"\"\"\n        x = self.avgpool_1a(features)\n        x = x.view(x.size(0), -1)\n        x = F.dropout(x, training=self.training)\n        x = self.last_linear(x)\n        return x\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x = self.features(input)\n        x = self.logits(x)\n        return x\n\n\ndef inceptionresnetv2(num_classes=1000, pretrained='imagenet'):\n    \"\"\"return a inceptionresnetv2 network.\"\"\"\n    if pretrained:\n        settings = pretrained_settings['inceptionresnetv2'][pretrained]\n        model = InceptionResNetV2(num_classes=1001)\n        model.load_state_dict(model_zoo.load_url(settings['url']))\n\n        if pretrained == 'imagenet':\n            new_last_linear = nn.Linear(1536, 1000)\n            new_last_linear.weight.data = model.last_linear.weight.data[1:]\n            new_last_linear.bias.data = model.last_linear.bias.data[1:]\n            model.last_linear = new_last_linear\n\n        model.input_space = settings['input_space']\n        model.input_size = settings['input_size']\n        model.input_range = settings['input_range']\n\n        model.mean = settings['mean']\n        model.std = settings['std']\n    else:\n        model = InceptionResNetV2(num_classes=num_classes)\n    return model\n\n\ndef conv_bn(inp, oup, stride):\n    return nn.Sequential(\n        nn.Conv2d(inp, oup, 3, stride, 1, bias=False), nn.BatchNorm2d(oup),\n        nn.ReLU6(inplace=True))\n\n\ndef conv_1x1_bn(inp, oup):\n    return nn.Sequential(\n        nn.Conv2d(inp, oup, 1, 1, 0, bias=False), nn.BatchNorm2d(oup),\n        nn.ReLU6(inplace=True))\n\n\nclass InvertedResidual(nn.Module):\n\n    def __init__(self, inp, oup, stride, expand_ratio):\n        super(InvertedResidual, self).__init__()\n        self.stride = stride\n        assert stride in [1, 2]\n\n        hidden_dim = round(inp * expand_ratio)\n        self.use_res_connect = self.stride == 1 and inp == oup\n\n        if expand_ratio == 1:\n            self.conv = nn.Sequential(\n                # dw\n                nn.Conv2d(\n                    hidden_dim,\n                    hidden_dim,\n                    3,\n                    stride,\n                    1,\n                    groups=hidden_dim,\n                    bias=False),\n                nn.BatchNorm2d(hidden_dim),\n                nn.ReLU6(inplace=True),\n                # pw-linear\n                nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),\n                nn.BatchNorm2d(oup),\n            )\n        else:\n            self.conv = nn.Sequential(\n                # pw\n                nn.Conv2d(inp, hidden_dim, 1, 1, 0, bias=False),\n                nn.BatchNorm2d(hidden_dim),\n                nn.ReLU6(inplace=True),\n                # dw\n                nn.Conv2d(\n                    hidden_dim,\n                    hidden_dim,\n                    3,\n                    stride,\n                    1,\n                    groups=hidden_dim,\n                    bias=False),\n                nn.BatchNorm2d(hidden_dim),\n                nn.ReLU6(inplace=True),\n                # pw-linear\n                nn.Conv2d(hidden_dim, oup, 1, 1, 0, bias=False),\n                nn.BatchNorm2d(oup),\n            )\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        if self.use_res_connect:\n            return x + self.conv(x)\n        else:\n            return self.conv(x)\n\n\nclass MobileNetV2(nn.Module):\n\n    def __init__(self, n_class=1000, input_size=224, width_mult=1.):\n        super(MobileNetV2, self).__init__()\n        block = InvertedResidual\n        input_channel = 32\n        last_channel = 1280\n        interverted_residual_setting = [\n            # t, c, n, s\n            [1, 16, 1, 1],\n            [6, 24, 2, 2],\n            [6, 32, 3, 2],\n            [6, 64, 4, 2],\n            [6, 96, 3, 1],\n            [6, 160, 3, 2],\n            [6, 320, 1, 1],\n        ]\n\n        # building first layer\n        assert input_size % 32 == 0\n        input_channel = int(input_channel * width_mult)\n        self.last_channel = int(\n            last_channel * width_mult) if width_mult > 1.0 else last_channel\n        self.features = [conv_bn(3, input_channel, 2)]\n        # building inverted residual blocks\n        for t, c, n, s in interverted_residual_setting:\n            output_channel = int(c * width_mult)\n            for i in range(n):\n                if i == 0:\n                    self.features.append(\n                        block(\n                            input_channel, output_channel, s, expand_ratio=t))\n                else:\n                    self.features.append(\n                        block(\n                            input_channel, output_channel, 1, expand_ratio=t))\n                input_channel = output_channel\n        # building last several layers\n        self.features.append(conv_1x1_bn(input_channel, self.last_channel))\n        # make it nn.Sequential\n        self.features = nn.Sequential(*self.features)\n\n        # building classifier\n        self.classifier = nn.Sequential(\n            nn.Dropout(0.2),\n            nn.Linear(self.last_channel, n_class),\n        )\n\n        self._initialize_weights()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        x = self.features(x)\n        x = x.mean(3).mean(2)\n        x = self.classifier(x)\n        return x\n\n    def _initialize_weights(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels\n                m.weight.data.normal_(0, math.sqrt(2. / n))\n                if m.bias is not None:\n                    m.bias.data.zero_()\n            elif isinstance(m, nn.BatchNorm2d):\n                m.weight.data.fill_(1)\n                m.bias.data.zero_()\n            elif isinstance(m, nn.Linear):\n                n = m.weight.size(1)\n                m.weight.data.normal_(0, 0.01)\n                m.bias.data.zero_()\n\n\ndef get_norm_layer(norm_type='instance'):\n    \"\"\"Returns a norm layer of the specified type.\n\n    Args:\n        norm_type (Str): norm layer type\n    \"\"\"\n    if norm_type == 'batch':\n        norm_layer = functools.partial(nn.BatchNorm2d, affine=True)\n    elif norm_type == 'instance':\n        norm_layer = functools.partial(\n            nn.InstanceNorm2d, affine=False, track_running_stats=True)\n    else:\n        raise NotImplementedError('normalization layer [%s] is not found' %\n                                  norm_type)\n    return norm_layer\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .contextual_attention import ContextualAttentionModule\nfrom .contextual_attention_neck import ContextualAttentionNeck\nfrom .deepfill_decoder import DeepFillDecoder\nfrom .deepfill_disc import DeepFillv1Discriminators\nfrom .deepfill_encoder import DeepFillEncoder\nfrom .deepfill_refiner import DeepFillRefiner\nfrom .deepfillv1 import DeepFillv1Inpaintor\n\n__all__ = [\n    'DeepFillEncoder', 'DeepFillDecoder', 'ContextualAttentionNeck',\n    'DeepFillv1Inpaintor', 'ContextualAttentionModule',\n    'DeepFillv1Discriminators', 'DeepFillRefiner'\n]\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/contextual_attention.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\n\nclass ContextualAttentionModule(BaseModule):\n    \"\"\"Contexture attention module.\n\n    The details of this module can be found in:\n    Generative Image Inpainting with Contextual Attention\n\n    Args:\n        unfold_raw_kernel_size (int): Kernel size used in unfolding raw\n            feature. Default: 4.\n        unfold_raw_stride (int): Stride used in unfolding raw feature. Default:\n            2.\n        unfold_raw_padding (int): Padding used in unfolding raw feature.\n            Default: 1.\n        unfold_corr_kernel_size (int): Kernel size used in unfolding\n            context for computing correlation maps. Default: 3.\n        unfold_corr_stride (int): Stride used in unfolding context for\n            computing correlation maps. Default: 1.\n        unfold_corr_dilation (int): Dilation used in unfolding context for\n            computing correlation maps. Default: 1.\n        unfold_corr_padding (int): Padding used in unfolding context for\n            computing correlation maps. Default: 1.\n        scale (float): The resale factor used in resize input features.\n            Default: 0.5.\n        fuse_kernel_size (int): The kernel size used in fusion module.\n            Default: 3.\n        softmax_scale (float): The scale factor for softmax function.\n            Default: 10.\n        return_attention_score (bool): If True, the attention score will be\n            returned. Default: True.\n    \"\"\"\n\n    def __init__(self,\n                 unfold_raw_kernel_size=4,\n                 unfold_raw_stride=2,\n                 unfold_raw_padding=1,\n                 unfold_corr_kernel_size=3,\n                 unfold_corr_stride=1,\n                 unfold_corr_dilation=1,\n                 unfold_corr_padding=1,\n                 scale=0.5,\n                 fuse_kernel_size=3,\n                 softmax_scale=10,\n                 return_attention_score=True):\n        super().__init__()\n        self.unfold_raw_kernel_size = unfold_raw_kernel_size\n        self.unfold_raw_stride = unfold_raw_stride\n        self.unfold_raw_padding = unfold_raw_padding\n        self.unfold_corr_kernel_size = unfold_corr_kernel_size\n        self.unfold_corr_stride = unfold_corr_stride\n        self.unfold_corr_dilation = unfold_corr_dilation\n        self.unfold_corr_padding = unfold_corr_padding\n        self.scale = scale\n        self.fuse_kernel_size = fuse_kernel_size\n        self.with_fuse_correlation = fuse_kernel_size > 1\n        self.softmax_scale = softmax_scale\n        self.return_attention_score = return_attention_score\n\n        if self.with_fuse_correlation:\n            assert fuse_kernel_size % 2 == 1\n            fuse_kernel = torch.eye(fuse_kernel_size).view(\n                1, 1, fuse_kernel_size, fuse_kernel_size)\n            self.register_buffer('fuse_kernel', fuse_kernel)\n            padding = int((fuse_kernel_size - 1) // 2)\n            self.fuse_conv = partial(F.conv2d, padding=padding, stride=1)\n        self.softmax = nn.Softmax(dim=1)\n\n    def forward(self, x, context, mask=None):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Tensor with shape (n, c, h, w).\n            context (torch.Tensor): Tensor with shape (n, c, h, w).\n            mask (torch.Tensor): Tensor with shape (n, 1, h, w). Default: None.\n\n        Returns:\n            tuple(torch.Tensor): Features after contextural attention.\n        \"\"\"\n        # raw features to be used in copy (deconv)\n        raw_context = context\n        raw_context_cols = self.im2col(\n            raw_context,\n            kernel_size=self.unfold_raw_kernel_size,\n            stride=self.unfold_raw_stride,\n            padding=self.unfold_raw_padding,\n            normalize=False,\n            return_cols=True)\n        # resize the feature to reduce computational cost\n        x = F.interpolate(x, scale_factor=self.scale)\n        context = F.interpolate(context, scale_factor=self.scale)\n\n        context_cols = self.im2col(\n            context,\n            kernel_size=self.unfold_corr_kernel_size,\n            stride=self.unfold_corr_stride,\n            padding=self.unfold_corr_padding,\n            dilation=self.unfold_corr_dilation,\n            normalize=True,\n            return_cols=True)\n        h_unfold, w_unfold = self.calculate_unfold_hw(\n            context.size()[-2:],\n            kernel_size=self.unfold_corr_kernel_size,\n            stride=self.unfold_corr_stride,\n            padding=self.unfold_corr_padding,\n            dilation=self.unfold_corr_dilation,\n        )\n        # reshape context_cols to\n        # (n*h_unfold*w_unfold, c, unfold_mks, unfold_mks)\n        # 'mks' is short for 'mask_kernel_size'\n        context_cols = context_cols.reshape(-1, *context_cols.shape[2:])\n\n        # the shape of correlation map should be:\n        # (n, h_unfold*w_unfold, h', w')\n        correlation_map = self.patch_correlation(x, context_cols)\n        # fuse correlation map to enlarge consistent attention region.\n        if self.with_fuse_correlation:\n            correlation_map = self.fuse_correlation_map(\n                correlation_map, h_unfold, w_unfold)\n\n        correlation_map = self.mask_correlation_map(correlation_map, mask=mask)\n\n        attention_score = self.softmax(correlation_map * self.softmax_scale)\n\n        raw_context_filter = raw_context_cols.reshape(\n            -1, *raw_context_cols.shape[2:])\n        output = self.patch_copy_deconv(attention_score, raw_context_filter)\n        # deconv will cause overlap and we need to remove the effects of that\n        overlap_factor = self.calculate_overlap_factor(attention_score)\n        output /= overlap_factor\n\n        if self.return_attention_score:\n            n, _, h_s, w_s = attention_score.size()\n            attention_score = attention_score.view(n, h_unfold, w_unfold, h_s,\n                                                   w_s)\n            return output, attention_score\n\n        return output\n\n    def patch_correlation(self, x, kernel):\n        \"\"\"Calculate patch correlation.\n\n        Args:\n            x (torch.Tensor): Input tensor.\n            kernel (torch.Tensor): Kernel tensor.\n\n        Returns:\n            torch.Tensor: Tensor with shape of (n, l, h, w).\n        \"\"\"\n        n, _, h_in, w_in = x.size()\n\n        patch_corr = F.conv2d(\n            x.view(1, -1, h_in, w_in),\n            kernel,\n            stride=self.unfold_corr_stride,\n            padding=self.unfold_corr_padding,\n            dilation=self.unfold_corr_dilation,\n            groups=n)\n        h_out, w_out = patch_corr.size()[-2:]\n        return patch_corr.view(n, -1, h_out, w_out)\n\n    def patch_copy_deconv(self, attention_score, context_filter):\n        \"\"\"Copy patches using deconv.\n\n        Args:\n            attention_score (torch.Tensor): Tensor with shape of (n, l , h, w).\n            context_filter (torch.Tensor): Filter kernel.\n\n        Returns:\n            torch.Tensor: Tensor with shape of (n, c, h, w).\n        \"\"\"\n        n, _, h, w = attention_score.size()\n        attention_score = attention_score.view(1, -1, h, w)\n        output = F.conv_transpose2d(\n            attention_score,\n            context_filter,\n            stride=self.unfold_raw_stride,\n            padding=self.unfold_raw_padding,\n            groups=n)\n        h_out, w_out = output.size()[-2:]\n        return output.view(n, -1, h_out, w_out)\n\n    def fuse_correlation_map(self, correlation_map, h_unfold, w_unfold):\n        \"\"\"Fuse correlation map.\n\n        This operation is to fuse correlation map for increasing large\n        consistent correlation regions.\n\n        The mechanism behind this op is simple and easy to understand. A\n        standard 'Eye' matrix will be applied as a filter on the correlation\n        map in horizontal and vertical direction.\n\n        The shape of input correlation map is (n, h_unfold*w_unfold, h, w).\n        When adopting fusing, we will apply convolutional filter in the\n        reshaped feature map with shape of (n, 1, h_unfold*w_fold, h*w).\n\n        A simple specification for horizontal direction is shown below:\n\n        .. code-block:: python\n\n                   (h, (h, (h, (h,\n                    0)  1)  2)  3)  ...\n            (h, 0)\n            (h, 1)      1\n            (h, 2)          1\n            (h, 3)              1\n            ...\n        \"\"\"\n        # horizontal direction\n        n, _, h_map, w_map = correlation_map.size()\n        map_ = correlation_map.permute(0, 2, 3, 1)\n        map_ = map_.reshape(n, h_map * w_map, h_unfold * w_unfold, 1)\n        map_ = map_.permute(0, 3, 1, 2).contiguous()\n        map_ = self.fuse_conv(map_, self.fuse_kernel)\n\n        correlation_map = map_.view(n, h_unfold, w_unfold, h_map, w_map)\n\n        # vertical direction\n        map_ = correlation_map.permute(0, 2, 1, 4,\n                                       3).reshape(n, 1, h_unfold * w_unfold,\n                                                  h_map * w_map)\n        map_ = self.fuse_conv(map_, self.fuse_kernel)\n\n        # Note that the dimension should be transposed since the convolution of\n        # eye matrix will put the normed scores into the last several dimension\n        correlation_map = map_.view(n, w_unfold, h_unfold, w_map,\n                                    h_map).permute(0, 4, 3, 2, 1)\n        correlation_map = correlation_map.reshape(n, -1, h_unfold, w_unfold)\n\n        return correlation_map\n\n    def calculate_unfold_hw(self,\n                            input_size,\n                            kernel_size=3,\n                            stride=1,\n                            dilation=1,\n                            padding=0):\n        \"\"\"Calculate (h, w) after unfolding.\n\n        The official implementation of `unfold` in pytorch will put the\n        dimension (h, w) into `L`. Thus, this function is just to calculate the\n        (h, w) according to the equation in:\n        https://pytorch.org/docs/stable/nn.html#torch.nn.Unfold\n        \"\"\"\n        h_in, w_in = input_size\n\n        h_unfold = int((h_in + 2 * padding - dilation *\n                        (kernel_size - 1) - 1) / stride + 1)\n\n        w_unfold = int((w_in + 2 * padding - dilation *\n                        (kernel_size - 1) - 1) / stride + 1)\n        return h_unfold, w_unfold\n\n    def calculate_overlap_factor(self, attention_score):\n        \"\"\"Calculate the overlap factor after applying deconv.\n\n        Args:\n            attention_score (torch.Tensor): The attention score with shape of\n                (n, c, h, w).\n\n        Returns:\n            torch.Tensor: The overlap factor will be returned.\n        \"\"\"\n        h, w = attention_score.shape[-2:]\n        kernel_size = self.unfold_raw_kernel_size\n\n        ones_input = torch.ones(1, 1, h, w).to(attention_score)\n        ones_filter = torch.ones(1, 1, kernel_size,\n                                 kernel_size).to(attention_score)\n        overlap = F.conv_transpose2d(\n            ones_input,\n            ones_filter,\n            stride=self.unfold_raw_stride,\n            padding=self.unfold_raw_padding)\n\n        # avoid division by zero\n        overlap[overlap == 0] = 1.\n        return overlap\n\n    def mask_correlation_map(self, correlation_map, mask):\n        \"\"\"Add mask weight for correlation map.\n\n        Add a negative infinity number to the masked regions so that softmax\n        function will result in 'zero' in those regions.\n\n        Args:\n            correlation_map (torch.Tensor): Correlation map with shape of\n                (n, h_unfold*w_unfold, h_map, w_map).\n            mask (torch.Tensor): Mask tensor with shape of (n, c, h, w). '1'\n                in the mask indicates masked region while '0' indicates valid\n                region.\n\n        Returns:\n            torch.Tensor: Updated correlation map with mask.\n        \"\"\"\n        if mask is not None:\n            mask = F.interpolate(mask, scale_factor=self.scale)\n            # if any pixel is masked in patch, the patch is considered to be\n            # masked\n            mask_cols = self.im2col(\n                mask,\n                kernel_size=self.unfold_corr_kernel_size,\n                stride=self.unfold_corr_stride,\n                padding=self.unfold_corr_padding,\n                dilation=self.unfold_corr_dilation)\n            mask_cols = (mask_cols.sum(dim=1, keepdim=True) > 0).float()\n            mask_cols = mask_cols.permute(0, 2,\n                                          1).reshape(mask.size(0), -1, 1, 1)\n            # add negative inf will bring zero in softmax\n            mask_cols[mask_cols == 1] = -float('inf')\n            correlation_map += mask_cols\n        return correlation_map\n\n    def im2col(self,\n               img,\n               kernel_size,\n               stride=1,\n               padding=0,\n               dilation=1,\n               normalize=False,\n               return_cols=False):\n        \"\"\"Reshape image-style feature to columns.\n\n        This function is used for unfold feature maps to columns. The\n        details of this function can be found in:\n        https://pytorch.org/docs/1.1.0/nn.html?highlight=unfold#torch.nn.Unfold\n\n        Args:\n            img (torch.Tensor): Features to be unfolded. The shape of this\n                feature should be (n, c, h, w).\n            kernel_size (int): In this function, we only support square kernel\n                with same height and width.\n            stride (int): Stride number in unfolding. Default: 1.\n            padding (int): Padding number in unfolding. Default: 0.\n            dilation (int): Dilation number in unfolding. Default: 1.\n            normalize (bool): If True, the unfolded feature will be normalized.\n                Default: False.\n            return_cols (bool): The official implementation in PyTorch of\n                unfolding will return features with shape of\n                (n, c*$prod{kernel_size}$, L). If True, the features will be\n                reshaped to (n, L, c, kernel_size, kernel_size). Otherwise,\n                the results will maintain the shape as the official\n                implementation.\n\n        Returns:\n            torch.Tensor: Unfolded columns. If `return_cols` is True, the \\\n                shape of output tensor is \\\n                `(n, L, c, kernel_size, kernel_size)`. Otherwise, the shape \\\n                will be `(n, c*$prod{kernel_size}$, L)`.\n        \"\"\"\n\n        # unfold img to columns with shape (n, c*kernel_size**2, num_cols)\n        img_unfold = F.unfold(\n            img,\n            kernel_size,\n            stride=stride,\n            padding=padding,\n            dilation=dilation)\n        # normalize the feature map\n        if normalize:\n            norm = torch.sqrt((img_unfold**2).sum(dim=1, keepdim=True))\n            eps = torch.tensor([1e-4]).to(img)\n            img_unfold = img_unfold / torch.max(norm, eps)\n\n        if return_cols:\n            img_unfold_ = img_unfold.permute(0, 2, 1)\n            n, num_cols = img_unfold_.size()[:2]\n            img_cols = img_unfold_.view(n, num_cols, img.size(1), kernel_size,\n                                        kernel_size)\n            return img_cols\n\n        return img_unfold\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/contextual_attention_neck.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.models.editors.deepfillv1.contextual_attention import \\\n    ContextualAttentionModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass ContextualAttentionNeck(BaseModule):\n    \"\"\"Neck with contextual attention module.\n\n    Args:\n        in_channels (int): The number of input channels.\n        conv_type (str): The type of conv module. In DeepFillv1 model, the\n            `conv_type` should be 'conv'. In DeepFillv2 model, the `conv_type`\n            should be 'gated_conv'.\n        conv_cfg (dict | None): Config of conv module. Default: None.\n        norm_cfg (dict | None): Config of norm module. Default: None.\n        act_cfg (dict | None): Config of activation layer. Default:\n            dict(type='ELU').\n        contextual_attention_args (dict): Config of contextual attention\n            module. Default: dict(softmax_scale=10.).\n        kwargs (keyword arguments).\n    \"\"\"\n    _conv_type = dict(conv=ConvModule, gated_conv=SimpleGatedConvModule)\n\n    def __init__(self,\n                 in_channels,\n                 conv_type='conv',\n                 conv_cfg=None,\n                 norm_cfg=None,\n                 act_cfg=dict(type='ELU'),\n                 contextual_attention_args=dict(softmax_scale=10.),\n                 **kwargs):\n        super().__init__()\n        self.contextual_attention = ContextualAttentionModule(\n            **contextual_attention_args)\n        conv_module = self._conv_type[conv_type]\n        self.conv1 = conv_module(\n            in_channels,\n            in_channels,\n            3,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            **kwargs)\n        self.conv2 = conv_module(\n            in_channels,\n            in_channels,\n            3,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            **kwargs)\n\n    def forward(self, x, mask):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n            mask (torch.Tensor): Input tensor with shape of (n, 1, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        x, offset = self.contextual_attention(x, x, mask)\n        x = self.conv1(x)\n        x = self.conv2(x)\n\n        return x, offset\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/deepfill_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom functools import partial\n\nimport torch\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule, build_activation_layer\nfrom mmengine.model import BaseModule\n\n# from ...modules import SimpleGatedConvModule\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DeepFillDecoder(BaseModule):\n    \"\"\"Decoder used in DeepFill model.\n\n    This implementation follows:\n    Generative Image Inpainting with Contextual Attention\n\n    Args:\n        in_channels (int): The number of input channels.\n        conv_type (str): The type of conv module. In DeepFillv1 model, the\n            `conv_type` should be 'conv'. In DeepFillv2 model, the `conv_type`\n            should be 'gated_conv'.\n        norm_cfg (dict): Config dict to build norm layer. Default: None.\n        act_cfg (dict): Config dict for activation layer, \"elu\" by default.\n        out_act_cfg (dict): Config dict for output activation layer. Here, we\n            provide commonly used `clamp` or `clip` operation.\n        channel_factor (float): The scale factor for channel size.\n            Default: 1.\n        kwargs (keyword arguments).\n    \"\"\"\n    _conv_type = dict(conv=ConvModule, gated_conv=SimpleGatedConvModule)\n\n    def __init__(self,\n                 in_channels,\n                 conv_type='conv',\n                 norm_cfg=None,\n                 act_cfg=dict(type='ELU'),\n                 out_act_cfg=dict(type='clip', min=-1., max=1.),\n                 channel_factor=1.,\n                 **kwargs):\n        super().__init__()\n        self.with_out_activation = out_act_cfg is not None\n\n        conv_module = self._conv_type[conv_type]\n        channel_list = [128, 128, 64, 64, 32, 16, 3]\n        channel_list = [int(x * channel_factor) for x in channel_list]\n        # dirty code for assign output channel with 3\n        channel_list[-1] = 3\n        for i in range(7):\n            kwargs_ = copy.deepcopy(kwargs)\n            if i == 6:\n                act_cfg = None\n                if conv_type == 'gated_conv':\n                    kwargs_['feat_act_cfg'] = None\n            self.add_module(\n                f'dec{i + 1}',\n                conv_module(\n                    in_channels,\n                    channel_list[i],\n                    kernel_size=3,\n                    padding=1,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    **kwargs_))\n            in_channels = channel_list[i]\n\n        if self.with_out_activation:\n            act_type = out_act_cfg['type']\n            if act_type == 'clip':\n                act_cfg_ = copy.deepcopy(out_act_cfg)\n                act_cfg_.pop('type')\n                self.out_act = partial(torch.clamp, **act_cfg_)\n            else:\n                self.out_act = build_activation_layer(out_act_cfg)\n\n    def forward(self, input_dict):\n        \"\"\"Forward Function.\n\n        Args:\n            input_dict (dict | torch.Tensor): Input dict with middle features\n                or torch.Tensor.\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h, w).\n        \"\"\"\n        if isinstance(input_dict, dict):\n            x = input_dict['out']\n        else:\n            x = input_dict\n        for i in range(7):\n            x = getattr(self, f'dec{i + 1}')(x)\n            if i in (1, 3):\n                x = F.interpolate(x, scale_factor=2)\n\n        if self.with_out_activation:\n            x = self.out_act(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/deepfill_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import normal_init\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DeepFillv1Discriminators(BaseModule):\n    \"\"\"Discriminators used in DeepFillv1 model.\n\n    In DeepFillv1 model, the discriminators are independent without any\n    concatenation like Global&Local model. Thus, we call this model\n    `DeepFillv1Discriminators`. There exist a global discriminator and a local\n    discriminator with global and local input respectively.\n\n    The details can be found in:\n    Generative Image Inpainting with Contextual Attention.\n\n    Args:\n        global_disc_cfg (dict): Config dict for global discriminator.\n        local_disc_cfg (dict): Config dict for local discriminator.\n    \"\"\"\n\n    def __init__(self, global_disc_cfg, local_disc_cfg):\n        super().__init__()\n        self.global_disc = MODELS.build(global_disc_cfg)\n        self.local_disc = MODELS.build(local_disc_cfg)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (tuple[torch.Tensor]): Contains global image and the local image\n                patch.\n\n        Returns:\n            tuple[torch.Tensor]: Contains the prediction from discriminators \\\n                in global image and local image patch.\n        \"\"\"\n        global_img, local_img = x\n\n        global_pred = self.global_disc(global_img)\n        local_pred = self.local_disc(local_img)\n\n        return global_pred, local_pred\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n\n        for m in self.modules():\n            if isinstance(m, nn.Linear):\n                normal_init(m, 0, std=0.02)\n            elif isinstance(m, nn.Conv2d):\n                normal_init(m, 0.0, std=0.02)\n\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/deepfill_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DeepFillEncoder(BaseModule):\n    \"\"\"Encoder used in DeepFill model.\n\n    This implementation follows:\n    Generative Image Inpainting with Contextual Attention\n\n    Args:\n        in_channels (int): The number of input channels. Default: 5.\n        conv_type (str): The type of conv module. In DeepFillv1 model, the\n            `conv_type` should be 'conv'. In DeepFillv2 model, the `conv_type`\n            should be 'gated_conv'.\n        norm_cfg (dict): Config dict to build norm layer. Default: None.\n        act_cfg (dict): Config dict for activation layer, \"elu\" by default.\n        encoder_type (str): Type of the encoder. Should be one of ['stage1',\n            'stage2_conv', 'stage2_attention']. Default: 'stage1'.\n        channel_factor (float): The scale factor for channel size.\n            Default: 1.\n        kwargs (keyword arguments).\n    \"\"\"\n    _conv_type = dict(conv=ConvModule, gated_conv=SimpleGatedConvModule)\n\n    def __init__(self,\n                 in_channels=5,\n                 conv_type='conv',\n                 norm_cfg=None,\n                 act_cfg=dict(type='ELU'),\n                 encoder_type='stage1',\n                 channel_factor=1.,\n                 **kwargs):\n        super().__init__()\n        conv_module = self._conv_type[conv_type]\n        channel_list_dict = dict(\n            stage1=[32, 64, 64, 128, 128, 128],\n            stage2_conv=[32, 32, 64, 64, 128, 128],\n            stage2_attention=[32, 32, 64, 128, 128, 128])\n        channel_list = channel_list_dict[encoder_type]\n        channel_list = [int(x * channel_factor) for x in channel_list]\n        kernel_size_list = [5, 3, 3, 3, 3, 3]\n        stride_list = [1, 2, 1, 2, 1, 1]\n        for i in range(6):\n            ks = kernel_size_list[i]\n            padding = (ks - 1) // 2\n            self.add_module(\n                f'enc{i + 1}',\n                conv_module(\n                    in_channels,\n                    channel_list[i],\n                    kernel_size=ks,\n                    stride=stride_list[i],\n                    padding=padding,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    **kwargs))\n            in_channels = channel_list[i]\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        for i in range(6):\n            x = getattr(self, f'enc{i + 1}')(x)\n        outputs = dict(out=x)\n        return outputs\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/deepfill_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DeepFillRefiner(BaseModule):\n    \"\"\"Refiner used in DeepFill model.\n\n    This implementation follows:\n    Generative Image Inpainting with Contextual Attention.\n\n    Args:\n        encoder_attention (dict): Config dict for encoder used in branch\n            with contextual attention module.\n        encoder_conv (dict): Config dict for encoder used in branch with\n            just convolutional operation.\n        dilation_neck (dict): Config dict for dilation neck in branch with\n            just convolutional operation.\n        contextual_attention (dict): Config dict for contextual attention\n            neck.\n        decoder (dict): Config dict for decoder used to fuse and decode\n            features.\n    \"\"\"\n\n    def __init__(self,\n                 encoder_attention=dict(\n                     type='DeepFillEncoder', encoder_type='stage2_attention'),\n                 encoder_conv=dict(\n                     type='DeepFillEncoder', encoder_type='stage2_conv'),\n                 dilation_neck=dict(\n                     type='GLDilationNeck',\n                     in_channels=128,\n                     act_cfg=dict(type='ELU')),\n                 contextual_attention=dict(\n                     type='ContextualAttentionNeck', in_channels=128),\n                 decoder=dict(type='DeepFillDecoder', in_channels=256)):\n        super().__init__()\n        self.encoder_attention = MODELS.build(encoder_attention)\n        self.encoder_conv = MODELS.build(encoder_conv)\n        self.contextual_attention_neck = MODELS.build(contextual_attention)\n        self.dilation_neck = MODELS.build(dilation_neck)\n        self.decoder = MODELS.build(decoder)\n\n    def forward(self, x, mask):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n            mask (torch.Tensor): Input tensor with shape of (n, 1, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        # conv branch\n        encoder_dict = self.encoder_conv(x)\n        conv_x = self.dilation_neck(encoder_dict['out'])\n\n        # contextual attention branch\n        attention_x = self.encoder_attention(x)['out']\n        h_x, w_x = attention_x.shape[-2:]\n        # resale mask to a smaller size\n        resized_mask = F.interpolate(mask, size=(h_x, w_x))\n        attention_x, offset = self.contextual_attention_neck(\n            attention_x, resized_mask)\n\n        # concat two branches\n        x = torch.cat([conv_x, attention_x], dim=1)\n        x = self.decoder(dict(out=x))\n\n        return x, offset\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv1/deepfillv1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional\n\nimport torch\n\nfrom mmagic.models.base_models import TwoStageInpaintor\nfrom mmagic.models.utils import extract_around_bbox, extract_bbox_patch\nfrom mmagic.registry import MODELS\nfrom ...utils import set_requires_grad\n\n\n@MODELS.register_module()\nclass DeepFillv1Inpaintor(TwoStageInpaintor):\n    \"\"\"Inpaintor for deepfillv1 method.\n\n    This inpaintor is implemented according to the paper:\n    Generative image inpainting with contextual attention\n\n    Importantly, this inpaintor is an example for using custom training\n    schedule based on `TwoStageInpaintor`.\n\n    The training pipeline of deepfillv1 is as following:\n\n    .. code-block:: python\n\n        if cur_iter < iter_tc:\n            update generator with only l1 loss\n        else:\n            update discriminator\n            if cur_iter > iter_td:\n                update generator with l1 loss and adversarial loss\n\n    The new attribute `cur_iter` is added for recording current number of\n    iteration. The `train_cfg` contains the setting of the training schedule:\n\n    .. code-block:: python\n\n        train_cfg = dict(\n            start_iter=0,\n            disc_step=1,\n            iter_tc=90000,\n            iter_td=100000\n        )\n\n    `iter_tc` and `iter_td` correspond to the notation :math:`T_C` and\n    :math:`T_D` of the original paper.\n\n    Args:\n        generator (dict): Config for encoder-decoder style generator.\n        disc (dict): Config for discriminator.\n        loss_gan (dict): Config for adversarial loss.\n        loss_gp (dict): Config for gradient penalty loss.\n        loss_disc_shift (dict): Config for discriminator shift loss.\n        loss_composed_percep (dict): Config for perceptual and style loss with\n            composed image as input.\n        loss_out_percep (dict): Config for perceptual and style loss with\n            direct output as input.\n        loss_l1_hole (dict): Config for l1 loss in the hole.\n        loss_l1_valid (dict): Config for l1 loss in the valid region.\n        loss_tv (dict): Config for total variation loss.\n        train_cfg (dict): Configs for training scheduler. `disc_step` must be\n            contained for indicates the discriminator updating steps in each\n            training step.\n        test_cfg (dict): Configs for testing scheduler.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor: dict,\n                 encdec: dict,\n                 disc=None,\n                 loss_gan=None,\n                 loss_gp=None,\n                 loss_disc_shift=None,\n                 loss_composed_percep=None,\n                 loss_out_percep=False,\n                 loss_l1_hole=None,\n                 loss_l1_valid=None,\n                 loss_tv=None,\n                 stage1_loss_type=None,\n                 stage2_loss_type=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(\n            data_preprocessor=data_preprocessor,\n            encdec=encdec,\n            disc=disc,\n            loss_gan=loss_gan,\n            loss_gp=loss_gp,\n            loss_disc_shift=loss_disc_shift,\n            loss_composed_percep=loss_composed_percep,\n            loss_out_percep=loss_out_percep,\n            loss_l1_hole=loss_l1_hole,\n            loss_l1_valid=loss_l1_valid,\n            loss_tv=loss_tv,\n            stage1_loss_type=stage1_loss_type,\n            stage2_loss_type=stage2_loss_type,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg)\n\n        if self.train_cfg is not None:\n            self.cur_iter = self.train_cfg.start_iter\n\n    def forward_train_d(self, data_batch, is_real, is_disc):\n        \"\"\"Forward function in discriminator training step.\n\n        In this function, we modify the default implementation with only one\n        discriminator. In DeepFillv1 model, they use two separated\n        discriminators for global and local consistency.\n\n        Args:\n            data_batch (torch.Tensor): Batch of real data or fake data.\n            is_real (bool): If True, the gan loss will regard this batch as\n                real data. Otherwise, the gan loss will regard this batch as\n                fake data.\n            is_disc (bool): If True, this function is called in discriminator\n                training step. Otherwise, this function is called in generator\n                training step. This will help us to compute different types of\n                adversarial loss, like LSGAN.\n\n        Returns:\n            dict: Contains the loss items computed in this function.\n        \"\"\"\n        global_pred, local_pred = self.disc(data_batch)\n        loss_global = self.loss_gan(global_pred, is_real, is_disc)\n        loss_local = self.loss_gan(local_pred, is_real, is_disc)\n\n        if is_real:\n            loss = dict(\n                real_loss_global=loss_global, real_loss_local=loss_local)\n        else:\n            loss = dict(\n                fake_loss_global=loss_global, fake_loss_local=loss_local)\n\n        if self.with_disc_shift_loss:\n            loss_d_shift_global = self.loss_disc_shift(loss_global)\n            loss_d_shift_local = self.loss_disc_shift(loss_local)\n            # 0.5 for average the fake and real data\n            loss.update(loss_disc_shift_global=loss_d_shift_global * 0.5)\n            loss.update(loss_disc_shift_local=loss_d_shift_local * 0.5)\n\n        return loss\n\n    def two_stage_loss(self, stage1_data, stage2_data, gt, mask, masked_img):\n        \"\"\"Calculate two-stage loss.\n\n        Args:\n            stage1_data (dict): Contain stage1 results.\n            stage2_data (dict): Contain stage2 results.\n            gt (torch.Tensor): Ground-truth image.\n            mask (torch.Tensor): Mask image.\n            masked_img (torch.Tensor): Composition of mask image and\n                ground-truth image.\n        Returns:\n            tuple(dict): Dict contains the results computed within this \\\n                function for visualization and dict contains the loss items \\\n                computed in this function.\n        \"\"\"\n        loss = dict()\n        results = dict(\n            gt_img=gt.cpu(), mask=mask.cpu(), masked_img=masked_img.cpu())\n        # calculate losses for stage1\n        if self.stage1_loss_type is not None:\n            fake_res = stage1_data['fake_res']\n            fake_img = stage1_data['fake_img']\n            for type_key in self.stage1_loss_type:\n                tmp_loss = self.calculate_loss_with_type(\n                    type_key, fake_res, fake_img, gt, mask, prefix='stage1_')\n                loss.update(tmp_loss)\n\n        results.update(\n            dict(\n                stage1_fake_res=stage1_data['fake_res'].cpu(),\n                stage1_fake_img=stage1_data['fake_img'].cpu()))\n\n        if self.stage2_loss_type is not None:\n            fake_res = stage2_data['fake_res']\n            fake_img = stage2_data['fake_img']\n            fake_local = stage2_data['fake_local']\n            for type_key in self.stage2_loss_type:\n                tmp_loss = self.calculate_loss_with_type(\n                    type_key,\n                    fake_res,\n                    fake_img,\n                    gt,\n                    mask,\n                    prefix='stage2_',\n                    fake_local=fake_local)\n                loss.update(tmp_loss)\n        results.update(\n            dict(\n                stage2_fake_res=stage2_data['fake_res'].cpu(),\n                stage2_fake_img=stage2_data['fake_img'].cpu()))\n\n        return results, loss\n\n    def calculate_loss_with_type(self,\n                                 loss_type,\n                                 fake_res,\n                                 fake_img,\n                                 gt,\n                                 mask,\n                                 prefix='stage1_',\n                                 fake_local=None):\n        \"\"\"Calculate multiple types of losses.\n\n        Args:\n            loss_type (str): Type of the loss.\n            fake_res (torch.Tensor): Direct results from model.\n            fake_img (torch.Tensor): Composited results from model.\n            gt (torch.Tensor): Ground-truth tensor.\n            mask (torch.Tensor): Mask tensor.\n            prefix (str, optional): Prefix for loss name.\n                Defaults to 'stage1\\_'. # noqa\n            fake_local (torch.Tensor, optional): Local results from model.\n                Defaults to None.\n\n        Returns:\n            dict: Contain loss value with its name.\n        \"\"\"\n        loss_dict = dict()\n        if loss_type == 'loss_gan':\n            g_fake_global_pred, g_fake_local_pred = self.disc(\n                (fake_img, fake_local))\n            loss_g_fake_global = self.loss_gan(\n                g_fake_global_pred, True, is_disc=False)\n            loss_g_fake_local = self.loss_gan(\n                g_fake_local_pred, True, is_disc=False)\n            loss_dict[prefix +\n                      'loss_g_fake'] = loss_g_fake_global + loss_g_fake_local\n        elif 'percep' in loss_type:\n            loss_pecep, loss_style = self.loss_percep(fake_img, gt)\n            if loss_pecep is not None:\n                loss_dict[prefix + loss_type] = loss_pecep\n            if loss_style is not None:\n                loss_dict[prefix + loss_type[:-6] + 'style'] = loss_style\n        elif 'tv' in loss_type:\n            loss_tv = self.loss_tv(fake_img, mask=mask)\n            loss_dict[prefix + loss_type] = loss_tv\n        elif 'l1' in loss_type:\n            weight = 1. - mask if 'valid' in loss_type else mask\n            loss_l1 = getattr(self, loss_type)(fake_res, gt, weight=weight)\n            loss_dict[prefix + loss_type] = loss_l1\n        else:\n            raise NotImplementedError(\n                f'Please check your loss type {loss_type}'\n                ' and the config dict in init function. '\n                'We cannot find the related loss function.')\n\n        return loss_dict\n\n    def train_step(self, data: List[dict], optim_wrapper):\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n\n            1. get fake res/image\n            2. optimize discriminator (if have)\n            3. optimize generator\n\n        If `self.train_cfg.disc_step > 1`, the train step will contain multiple\n        iterations for optimizing discriminator with different input data and\n        only one iteration for optimizing generator after `disc_step`\n        iterations for discriminator.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of \\\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        masked_img = batch_inputs  # float\n        gt_img = data_samples.gt_img\n        mask = data_samples.mask\n        mask = mask.float()\n\n        # PyTorch 2.0 could not compile 'data_samples.mask_bbox'\n        # bbox_tensor = torch.LongTensor(data_samples.mask_bbox)\n        bbox_tensor = torch.LongTensor(data_samples.metainfo['mask_bbox'])\n\n        # get common output from encdec\n        # input with ones\n        tmp_ones = torch.ones_like(mask)\n        input_x = torch.cat([masked_img, tmp_ones, mask], dim=1)\n        stage1_fake_res, stage2_fake_res = self.generator(input_x)\n        stage1_fake_img = masked_img * (1. - mask) + stage1_fake_res * mask\n        stage2_fake_img = masked_img * (1. - mask) + stage2_fake_res * mask\n\n        stage2_fake_local, bbox_new = extract_around_bbox(\n            stage2_fake_img, bbox_tensor, self.train_cfg.local_size)\n        gt_local = extract_bbox_patch(bbox_new, gt_img)\n        fake_gt_local = torch.cat([stage2_fake_local, gt_local], dim=2)\n        # discriminator training step\n        # In this version, we only use the results from the second stage to\n        # train discriminators, which is a commonly used setting. This can be\n        # easily modified to your custom training schedule.\n        if self.train_cfg.disc_step > 0 and self.with_gan:\n            set_requires_grad(self.disc, True)\n            fake_data = (stage2_fake_img.detach(), stage2_fake_local.detach())\n            real_data = (gt_img, gt_local)\n\n            disc_losses = self.forward_train_d(fake_data, False, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].zero_grad()\n            optim_wrapper['disc'].backward(loss_disc)\n\n            disc_losses = self.forward_train_d(real_data, True, is_disc=True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].backward(loss_disc)\n\n            if self.with_gp_loss:\n                if hasattr(self.disc, 'module'):\n                    global_disc = self.disc.module.global_disc\n                    local_disc = self.disc.module.local_disc\n                else:\n                    global_disc = self.disc.global_disc\n                    local_disc = self.disc.local_disc\n\n                loss_gp_global = self.loss_gp(\n                    global_disc, gt_img, stage2_fake_img, mask=mask)\n                loss_gp_local = self.loss_gp(local_disc, gt_local,\n                                             stage2_fake_local)\n                loss_disc, log_vars_d = self.parse_losses(\n                    dict(\n                        loss_gp_global=loss_gp_global,\n                        loss_gp_local=loss_gp_local))\n                log_vars.update(log_vars_d)\n                optim_wrapper['disc'].backward(loss_disc)\n\n            optim_wrapper['disc'].step()\n\n            self.disc_step_count = (self.disc_step_count +\n                                    1) % self.train_cfg.disc_step\n            if self.disc_step_count != 0:\n                # results contain the data for visualization\n                results = dict(\n                    gt_img=gt_img.cpu(),\n                    masked_img=masked_img.cpu(),\n                    stage1_fake_res=stage1_fake_res.cpu(),\n                    stage1_fake_img=stage1_fake_img.cpu(),\n                    stage2_fake_res=stage2_fake_res.cpu(),\n                    stage2_fake_img=stage2_fake_img.cpu(),\n                    fake_gt_local=fake_gt_local.cpu(),\n                    fake_res=stage2_fake_res.cpu(),\n                    fake_img=stage2_fake_img.cpu())\n\n                return log_vars\n\n        # prepare stage1 results and stage2 results dict for calculating losses\n        stage1_results = dict(\n            fake_res=stage1_fake_res, fake_img=stage1_fake_img)\n        stage2_results = dict(\n            fake_res=stage2_fake_res,\n            fake_img=stage2_fake_img,\n            fake_local=stage2_fake_local)\n\n        # generator (encdec) and refiner training step, results contain the\n        # data for visualization\n        if self.with_gan:\n            set_requires_grad(self.disc, False)\n        results, two_stage_losses = self.two_stage_loss(\n            stage1_results, stage2_results, gt_img, mask, masked_img)\n        loss_two_stage, log_vars_two_stage = self.parse_losses(\n            two_stage_losses)\n        log_vars.update(log_vars_two_stage)\n        optim_wrapper['generator'].zero_grad()\n        optim_wrapper['generator'].backward(loss_two_stage)\n        optim_wrapper['generator'].step()\n\n        results['fake_gt_local'] = fake_gt_local.cpu()\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv2/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .two_stage_encoder_decoder import DeepFillEncoderDecoder\n\n__all__ = ['DeepFillEncoderDecoder']\n"
  },
  {
    "path": "mmagic/models/editors/deepfillv2/two_stage_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init, normal_init\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DeepFillEncoderDecoder(BaseModule):\n    \"\"\"Two-stage encoder-decoder structure used in DeepFill model.\n\n    The details are in:\n    Generative Image Inpainting with Contextual Attention\n\n    Args:\n        stage1 (dict): Config dict for building stage1 model. As\n            DeepFill model uses Global&Local model as baseline in first stage,\n            the stage1 model can be easily built with `GLEncoderDecoder`.\n        stage2 (dict): Config dict for building stage2 model.\n        return_offset (bool): Whether to return offset feature in contextual\n            attention module. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 stage1=dict(\n                     type='GLEncoderDecoder',\n                     encoder=dict(type='DeepFillEncoder'),\n                     decoder=dict(type='DeepFillDecoder', in_channels=128),\n                     dilation_neck=dict(\n                         type='GLDilationNeck',\n                         in_channels=128,\n                         act_cfg=dict(type='ELU'))),\n                 stage2=dict(type='DeepFillRefiner'),\n                 return_offset=False):\n        super().__init__()\n        self.stage1 = MODELS.build(stage1)\n        self.stage2 = MODELS.build(stage2)\n\n        self.return_offset = return_offset\n\n        # support fp16\n        self.fp16_enabled = False\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): This input tensor has the shape of (n, 5, h, w).\n                In channel dimension, we concatenate [masked_img, ones, mask]\n                as DeepFillv1 models do.\n\n        Returns:\n            tuple[torch.Tensor]: The first two item is the results from first \\\n                and second stage. If set `return_offset` as True, the offset \\\n                will be returned as the third item.\n        \"\"\"\n        input_x = x.clone()\n        masked_img = input_x[:, :3, ...]\n        mask = input_x[:, -1:, ...]\n        x = self.stage1(x)\n        stage1_res = x.clone()\n        stage1_img = stage1_res * mask + masked_img * (1. - mask)\n        stage2_input = torch.cat([stage1_img, input_x[:, 3:, ...]], dim=1)\n        stage2_res, offset = self.stage2(stage2_input, mask)\n\n        if self.return_offset:\n            return stage1_res, stage2_res, offset\n\n        return stage1_res, stage2_res\n\n    # TODO: study the effects of init functions\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                normal_init(m, 0, 0.02)\n            elif isinstance(m, (_BatchNorm, nn.InstanceNorm2d)):\n                constant_init(m, 1)\n\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/dic/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .dic import DIC\nfrom .dic_net import (DICNet, FeedbackBlock, FeedbackBlockCustom,\n                      FeedbackBlockHeatmapAttention)\nfrom .feedback_hour_glass import FeedbackHourglass\nfrom .light_cnn import LightCNN, MaxFeature\n\n__all__ = [\n    'DICNet',\n    'DIC',\n    'FeedbackHourglass',\n    'LightCNN',\n    'MaxFeature',\n    'FeedbackBlock',\n    'FeedbackBlockCustom',\n    'FeedbackBlockHeatmapAttention',\n]\n"
  },
  {
    "path": "mmagic/models/editors/dic/dic.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List\n\nimport torch\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.models.utils import set_requires_grad\nfrom mmagic.registry import MODELS\nfrom ..srgan import SRGAN\n\n\n@MODELS.register_module()\nclass DIC(SRGAN):\n    \"\"\"DIC model for Face Super-Resolution.\n\n    Paper: Deep Face Super-Resolution with Iterative Collaboration between\n        Attentive Recovery and Landmark Estimation.\n\n    Args:\n        generator (dict): Config for the generator.\n        pixel_loss (dict): Config for the pixel loss.\n        align_loss (dict): Config for the align loss.\n        discriminator (dict): Config for the discriminator. Default: None.\n        gan_loss (dict): Config for the gan loss. Default: None.\n        feature_loss (dict): Config for the feature loss. Default: None.\n        train_cfg (dict): Config for train. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 align_loss,\n                 discriminator=None,\n                 gan_loss=None,\n                 feature_loss=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            discriminator=discriminator,\n            gan_loss=gan_loss,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.align_loss = MODELS.build(align_loss)\n        self.feature_loss = MODELS.build(\n            feature_loss) if feature_loss else None\n\n        self.pixel_init = train_cfg.get('pixel_init', 0) if train_cfg else 0\n\n    def forward_tensor(self, inputs, data_samples=None, training=False):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            training (bool): Whether is training. Default: False.\n\n        Returns:\n            (Tensor | Tuple[List[Tensor]]): results of forward inference and\n                forward train.\n        \"\"\"\n\n        sr_list, heatmap_list = self.generator(inputs)\n\n        if training:\n            return sr_list, heatmap_list\n        else:\n            return sr_list[-1]\n\n    def if_run_g(self):\n        \"\"\"Calculates whether need to run the generator step.\"\"\"\n\n        return True\n\n    def if_run_d(self):\n        \"\"\"Calculates whether need to run the discriminator step.\"\"\"\n\n        return self.step_counter >= self.pixel_init and super().if_run_d()\n\n    def g_step(self, batch_outputs, batch_gt_data):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        sr_list, heatmap_list = batch_outputs\n        gt, gt_heatmap = batch_gt_data\n\n        losses = dict()\n\n        # pix loss\n        for step, (sr, heatmap) in enumerate(zip(sr_list, heatmap_list)):\n            losses[f'loss_pixel_v{step}'] = self.pixel_loss(sr, gt)\n            losses[f'loss_align_v{step}'] = self.align_loss(\n                heatmap, gt_heatmap)\n\n        if self.step_counter >= self.pixel_init:\n            pred = sr_list[-1]\n\n            # perceptual loss\n            if self.feature_loss:\n                loss_feature = self.feature_loss(pred, gt)\n                losses['loss_feature'] = loss_feature\n\n            # gan loss for generator\n            if self.gan_loss and self.discriminator:\n                fake_g_pred = self.discriminator(pred)\n                losses['loss_gan'] = self.gan_loss(\n                    fake_g_pred, target_is_real=True, is_disc=False)\n\n        return losses\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step of GAN-based method.\n\n        Args:\n            data (List[dict]): Data sampled from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance\n                used to update model parameters.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n\n        data = self.data_preprocessor(data, True)\n        batch_inputs = data['inputs']\n        data_samples = data['data_samples']\n        batch_gt_data = self.extract_gt_data(data_samples)\n\n        log_vars = dict()\n\n        with g_optim_wrapper.optim_context(self):\n            batch_outputs = self.forward_train(batch_inputs, data_samples)\n\n        if self.if_run_g():\n            set_requires_grad(self.discriminator, False)\n\n            log_vars_d = self.g_step_with_optim(\n                batch_outputs=batch_outputs,\n                batch_gt_data=batch_gt_data,\n                optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if self.if_run_d():\n            set_requires_grad(self.discriminator, True)\n\n            sr_list, _ = batch_outputs\n            gt, _ = batch_gt_data\n\n            for _ in range(self.disc_repeat):\n                # detach before function call to resolve PyTorch2.0 compile bug\n                log_vars_d = self.d_step_with_optim(\n                    batch_outputs=sr_list[-1].detach(),\n                    batch_gt_data=gt,\n                    optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if 'loss' in log_vars:\n            log_vars.pop('loss')\n\n        self.step_counter += 1\n\n        return log_vars\n\n    @staticmethod\n    def extract_gt_data(data_samples):\n        \"\"\"extract gt data from data samples.\n\n        Args:\n            data_samples (list): List of DataSample.\n\n        Returns:\n            Tensor: Extract gt data.\n        \"\"\"\n\n        batch_gt_img = data_samples.gt_img\n        batch_gt_heatmap = data_samples.gt_heatmap\n\n        return [batch_gt_img, batch_gt_heatmap]\n"
  },
  {
    "path": "mmagic/models/editors/dic/dic_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\nfrom .feedback_hour_glass import FeedbackHourglass, reduce_to_five_heatmaps\n\n\n@MODELS.register_module()\nclass DICNet(BaseModule):\n    \"\"\"DIC network structure for face super-resolution.\n\n    Paper: Deep Face Super-Resolution with Iterative Collaboration between\n        Attentive Recovery and Landmark Estimation\n\n    Args:\n        in_channels (int): Number of channels in the input image\n        out_channels (int): Number of channels in the output image\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64\n        num_blocks (tuple[int]): Block numbers in the trunk network.\n            Default: 6\n        hg_mid_channels (int): Channel number of intermediate features\n            of HourGlass. Default: 256\n        hg_num_keypoints (int): Keypoint number of HourGlass. Default: 68\n        num_steps (int): Number of iterative steps. Default: 4\n        upscale_factor (int): Upsampling factor. Default: 8\n        detach_attention (bool): Detached from the current tensor for heatmap\n            or not.\n        prelu_init (float): `init` of PReLU. Default: 0.2\n        num_heatmaps (int): Number of heatmaps. Default: 5\n        num_fusion_blocks (int): Number of fusion blocks. Default: 7\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels,\n                 num_blocks=6,\n                 hg_mid_channels=256,\n                 hg_num_keypoints=68,\n                 num_steps=4,\n                 upscale_factor=8,\n                 detach_attention=False,\n                 prelu_init=0.2,\n                 num_heatmaps=5,\n                 num_fusion_blocks=7,\n                 init_cfg=None):\n\n        super().__init__(init_cfg=init_cfg)\n\n        self.num_steps = num_steps\n        self.detach_attention = detach_attention\n\n        self.conv_first = nn.Sequential(\n            nn.Conv2d(in_channels, mid_channels * 4, 3, 1, 1),\n            nn.PReLU(init=prelu_init), nn.PixelShuffle(2))\n\n        self.first_block = FeedbackBlockCustom(\n            in_channels=mid_channels,\n            mid_channels=mid_channels,\n            num_blocks=num_blocks,\n            upscale_factor=upscale_factor)\n\n        self.block = FeedbackBlockHeatmapAttention(\n            mid_channels=mid_channels,\n            num_blocks=num_blocks,\n            upscale_factor=upscale_factor,\n            num_heatmaps=num_heatmaps,\n            num_fusion_blocks=num_fusion_blocks)\n        self.block.need_reset = False\n\n        self.hour_glass = FeedbackHourglass(\n            mid_channels=hg_mid_channels, num_keypoints=hg_num_keypoints)\n\n        self.conv_last = nn.Sequential(\n            nn.ConvTranspose2d(mid_channels, mid_channels, 8, 4, 2),\n            nn.PReLU(init=prelu_init),\n            nn.Conv2d(mid_channels, out_channels, 3, 1, 1))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Forward results.\n            sr_outputs (list[Tensor]): forward sr results.\n            heatmap_outputs (list[Tensor]): forward heatmap results.\n        \"\"\"\n\n        inter_res = nn.functional.interpolate(\n            x, size=(128, 128), mode='bilinear', align_corners=False)\n\n        x = self.conv_first(x)\n\n        sr_outputs = []\n        heatmap_outputs = []\n        last_hidden = None\n        heatmap = None\n\n        for step in range(self.num_steps):\n            if step == 0:\n                sr_feature = self.first_block(x)\n                self.block.last_hidden = sr_feature\n            else:\n                heatmap = reduce_to_five_heatmaps(heatmap,\n                                                  self.detach_attention)\n                sr_feature = self.block(x, heatmap)\n\n            sr = self.conv_last(sr_feature)\n            sr = torch.add(inter_res, sr)\n            heatmap, last_hidden = self.hour_glass(sr, last_hidden)\n\n            sr_outputs.append(sr)\n            heatmap_outputs.append(heatmap)\n\n        return sr_outputs, heatmap_outputs\n\n\nclass FeedbackBlock(nn.Module):\n    \"\"\"Feedback Block of DIC.\n\n    It has a style of:\n\n    .. code-block:: text\n\n        ----- Module ----->\n          ^            |\n          |____________|\n\n    Args:\n        mid_channels (int): Number of channels in the intermediate features.\n        num_blocks (int): Number of blocks.\n        upscale_factor (int): upscale factor.\n        padding (int): Padding size. Default: 2.\n        prelu_init (float): `init` of PReLU. Default: 0.2\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels,\n                 num_blocks,\n                 upscale_factor,\n                 padding=2,\n                 prelu_init=0.2):\n        super().__init__()\n\n        stride = upscale_factor\n        kernel_size = upscale_factor + 4\n\n        self.num_blocks = num_blocks\n        self.need_reset = True\n        self.last_hidden = None\n\n        self.conv_first = nn.Sequential(\n            nn.Conv2d(2 * mid_channels, mid_channels, kernel_size=1),\n            nn.PReLU(init=prelu_init))\n\n        self.up_blocks = nn.ModuleList()\n        self.down_blocks = nn.ModuleList()\n        self.lr_blocks = nn.ModuleList()\n        self.hr_blocks = nn.ModuleList()\n\n        for idx in range(self.num_blocks):\n            self.up_blocks.append(\n                nn.Sequential(\n                    nn.ConvTranspose2d(mid_channels, mid_channels, kernel_size,\n                                       stride, padding),\n                    nn.PReLU(init=prelu_init)))\n            self.down_blocks.append(\n                nn.Sequential(\n                    nn.Conv2d(mid_channels, mid_channels, kernel_size, stride,\n                              padding), nn.PReLU(init=prelu_init)))\n            if idx > 0:\n                self.lr_blocks.append(\n                    nn.Sequential(\n                        nn.Conv2d(\n                            mid_channels * (idx + 1),\n                            mid_channels,\n                            kernel_size=1), nn.PReLU(init=prelu_init)))\n                self.hr_blocks.append(\n                    nn.Sequential(\n                        nn.Conv2d(\n                            mid_channels * (idx + 1),\n                            mid_channels,\n                            kernel_size=1), nn.PReLU(init=prelu_init)))\n\n        self.conv_last = nn.Sequential(\n            nn.Conv2d(num_blocks * mid_channels, mid_channels, kernel_size=1),\n            nn.PReLU(init=prelu_init))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.need_reset:\n            self.last_hidden = x\n            self.need_reset = False\n\n        x = torch.cat((x, self.last_hidden), dim=1)\n        x = self.conv_first(x)\n\n        lr_features = [x]\n        hr_features = []\n\n        for idx in range(self.num_blocks):\n            # when idx == 0, lr_features == [x]\n            lr = torch.cat(lr_features, 1)\n            if idx > 0:\n                lr = self.lr_blocks[idx - 1](lr)\n            hr = self.up_blocks[idx](lr)\n\n            hr_features.append(hr)\n\n            hr = torch.cat(hr_features, 1)\n            if idx > 0:\n                hr = self.hr_blocks[idx - 1](hr)\n            lr = self.down_blocks[idx](hr)\n\n            lr_features.append(lr)\n\n        output = torch.cat(lr_features[1:], 1)\n        output = self.conv_last(output)\n\n        self.last_hidden = output\n\n        return output\n\n\nclass FeedbackBlockCustom(FeedbackBlock):\n    \"\"\"Custom feedback block, will be used as the first feedback block.\n\n    Args:\n        in_channels (int): Number of channels in the input features.\n        mid_channels (int): Number of channels in the intermediate features.\n        num_blocks (int): Number of blocks.\n        upscale_factor (int): upscale factor.\n    \"\"\"\n\n    def __init__(self, in_channels, mid_channels, num_blocks, upscale_factor):\n        super().__init__(mid_channels, num_blocks, upscale_factor)\n\n        prelu_init = 0.2\n        self.conv_first = nn.Sequential(\n            nn.Conv2d(in_channels, mid_channels, kernel_size=1),\n            nn.PReLU(init=prelu_init))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.conv_first(x)\n\n        lr_features = [x]\n        hr_features = []\n\n        for idx in range(self.num_blocks):\n            # when idx == 0, lr_features == [x]\n            lr = torch.cat(lr_features, 1)\n            if idx > 0:\n                lr = self.lr_blocks[idx - 1](lr)\n            hr = self.up_blocks[idx](lr)\n\n            hr_features.append(hr)\n\n            hr = torch.cat(hr_features, 1)\n            if idx > 0:\n                hr = self.hr_blocks[idx - 1](hr)\n            lr = self.down_blocks[idx](hr)\n\n            lr_features.append(lr)\n\n        output = torch.cat(lr_features[1:], 1)\n        output = self.conv_last(output)\n\n        return output\n\n\nclass GroupResBlock(nn.Module):\n    \"\"\"ResBlock with Group Conv.\n\n    Args:\n        in_channels (int): Channel number of input features.\n        out_channels (int): Channel number of output features.\n        mid_channels (int): Channel number of intermediate features.\n        groups (int): Number of blocked connections from input to output.\n        res_scale (float): Used to scale the residual before addition.\n            Default: 1.0.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels,\n                 groups,\n                 res_scale=1.0):\n        super().__init__()\n\n        self.res = nn.Sequential(\n            nn.Conv2d(in_channels, mid_channels, 3, 1, 1, groups=groups),\n            nn.LeakyReLU(negative_slope=0.2, inplace=True),\n            nn.Conv2d(mid_channels, out_channels, 3, 1, 1, groups=groups))\n        self.res_scale = res_scale\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        res = self.res(x).mul(self.res_scale)\n        return x + res\n\n\nclass FeatureHeatmapFusingBlock(nn.Module):\n    \"\"\"Fusing Feature and Heatmap.\n\n    Args:\n        in_channels (int): Number of channels in the input features.\n        num_heatmaps (int): Number of heatmap.\n        num_blocks (int): Number of blocks.\n        mid_channels (int | None): Number of channels in the intermediate\n            features. Default: None\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 num_heatmaps,\n                 num_blocks,\n                 mid_channels=None):\n        super().__init__()\n\n        self.num_heatmaps = num_heatmaps\n        res_block_channel = in_channels * num_heatmaps\n        if mid_channels is None:\n            self.mid_channels = num_heatmaps * in_channels\n        else:\n            self.mid_channels = mid_channels\n        self.conv_first = nn.Sequential(\n            nn.Conv2d(in_channels, res_block_channel, kernel_size=1),\n            nn.LeakyReLU(negative_slope=0.2, inplace=True))\n        self.body = make_layer(\n            GroupResBlock,\n            num_blocks,\n            in_channels=res_block_channel,\n            out_channels=res_block_channel,\n            mid_channels=self.mid_channels,\n            groups=num_heatmaps)\n\n    def forward(self, feature, heatmap):\n        \"\"\"Forward function.\n\n        Args:\n            feature (Tensor): Input feature tensor.\n            heatmap (Tensor): Input heatmap tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        assert self.num_heatmaps == heatmap.size(1)\n        batch_size = heatmap.size(0)\n        w, h = feature.shape[-2:]\n\n        feature = self.conv_first(feature)\n        # B * (num_heatmaps*in_channels) * h * w\n        feature = self.body(feature)\n        attention = nn.functional.softmax(\n            heatmap, dim=1)  # B * num_heatmaps * h * w\n\n        feature = feature.view(batch_size, self.num_heatmaps, -1, w,\n                               h) * attention.unsqueeze(2)\n        feature = feature.sum(1)\n        return feature\n\n\nclass FeedbackBlockHeatmapAttention(FeedbackBlock):\n    \"\"\"Feedback block with HeatmapAttention.\n\n    Args:\n        in_channels (int): Number of channels in the input features.\n        mid_channels (int): Number of channels in the intermediate features.\n        num_blocks (int): Number of blocks.\n        upscale_factor (int): upscale factor.\n        padding (int): Padding size. Default: 2.\n        prelu_init (float): `init` of PReLU. Default: 0.2\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels,\n                 num_blocks,\n                 upscale_factor,\n                 num_heatmaps,\n                 num_fusion_blocks,\n                 padding=2,\n                 prelu_init=0.2):\n\n        super().__init__(\n            mid_channels,\n            num_blocks,\n            upscale_factor,\n            padding=padding,\n            prelu_init=prelu_init)\n        self.fusion_block = FeatureHeatmapFusingBlock(mid_channels,\n                                                      num_heatmaps,\n                                                      num_fusion_blocks)\n\n    def forward(self, x, heatmap):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature tensor.\n            heatmap (Tensor): Input heatmap tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.need_reset:\n            self.last_hidden = x\n            self.need_reset = False\n\n        x = torch.cat((x, self.last_hidden), dim=1)\n        x = self.conv_first(x)\n\n        # fusion\n        x = self.fusion_block(x, heatmap)\n\n        lr_features = []\n        hr_features = []\n        lr_features.append(x)\n\n        for idx in range(self.num_blocks):\n            # when idx == 0, lr_features == [x]\n            lr = torch.cat(lr_features, 1)\n            if idx > 0:\n                lr = self.lr_blocks[idx - 1](lr)\n            hr = self.up_blocks[idx](lr)\n\n            hr_features.append(hr)\n\n            hr = torch.cat(hr_features, 1)\n            if idx > 0:\n                hr = self.hr_blocks[idx - 1](hr)\n            lr = self.down_blocks[idx](hr)\n\n            lr_features.append(lr)\n\n        output = torch.cat(lr_features[1:], 1)\n        output = self.conv_last(output)\n\n        self.last_hidden = output\n\n        return output\n"
  },
  {
    "path": "mmagic/models/editors/dic/feedback_hour_glass.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FeedbackHourglass(BaseModule):\n    \"\"\"Feedback Hourglass model for face landmark.\n\n    It has a style of:\n\n    ::\n\n        -- preprocessing ----- Hourglass ----->\n                           ^               |\n                           |_______________|\n\n    Args:\n        mid_channels (int): Number of channels in the intermediate features.\n        num_keypoints (int): Number of keypoints.\n    \"\"\"\n\n    def __init__(self, mid_channels, num_keypoints):\n        super().__init__()\n        self.mid_channels = mid_channels\n        self.num_keypoints = num_keypoints\n\n        self.pre_conv_block = nn.Sequential(\n            nn.Conv2d(3, self.mid_channels // 4, 7, 2, 3),\n            nn.ReLU(inplace=True),\n            ResBlock(self.mid_channels // 4, self.mid_channels // 2),\n            nn.MaxPool2d(2, 2),\n            ResBlock(self.mid_channels // 2, self.mid_channels // 2),\n            ResBlock(self.mid_channels // 2, self.mid_channels),\n        )\n        self.first_conv = nn.Conv2d(2 * self.mid_channels,\n                                    2 * self.mid_channels, 1)\n\n        self.hg = Hourglass(4, 2 * self.mid_channels)\n        self.last = nn.Sequential(\n            ResBlock(self.mid_channels, self.mid_channels),\n            nn.Conv2d(self.mid_channels, self.mid_channels, 1),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(self.mid_channels, self.num_keypoints, 1))\n\n    def forward(self, x, last_hidden=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n            last_hidden (Tensor | None): The feedback of FeedbackHourglass.\n                In first step, last_hidden=None. Otherwise, last_hidden is\n                the past output of FeedbackHourglass.\n                Default: None.\n\n        Returns:\n            heatmap (Tensor): Heatmap of facial landmark.\n            feedback (Tensor): Feedback Tensor.\n        \"\"\"\n\n        feature = self.pre_conv_block(x)\n        if last_hidden is None:\n            feature = self.first_conv(torch.cat((feature, feature), dim=1))\n        else:\n            feature = self.first_conv(torch.cat((feature, last_hidden), dim=1))\n        feature = self.hg(feature)\n        heatmap = self.last(feature[:, :self.mid_channels])  # first half\n        feedback = feature[:, self.mid_channels:]  # second half\n        return heatmap, feedback\n\n\nclass ResBlock(nn.Module):\n    \"\"\"ResBlock for Hourglass.\n\n    It has a style of:\n\n    ::\n\n        ---Conv-ReLU-Conv-Conv-+-\n         |_________Conv________|\n\n        or\n\n        ---Conv-ReLU-Conv-Conv-+-\n         |_____________________|\n\n    Args:\n        in_channels (int): Number of channels in the input features.\n        out_channels (int): Number of channels in the output features.\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels):\n        super().__init__()\n        self.conv_block = nn.Sequential(\n            nn.Conv2d(in_channels, out_channels // 2, 1),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(\n                out_channels // 2, out_channels // 2, 3, stride=1, padding=1),\n            nn.Conv2d(out_channels // 2, out_channels, 1))\n        if in_channels == out_channels:\n            self.skip_layer = None\n        else:\n            self.skip_layer = nn.Conv2d(in_channels, out_channels, 1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        residual = self.conv_block(x)\n        if self.skip_layer:\n            x = self.skip_layer(x)\n        return x + residual\n\n\nclass Hourglass(nn.Module):\n    \"\"\"Hourglass model for face landmark.\n\n    It is a recursive model.\n\n    Args:\n        depth (int): Depth of Hourglass, the number of recursions.\n        mid_channels (int): Number of channels in the intermediate features.\n    \"\"\"\n\n    def __init__(self, depth, mid_channels):\n        super().__init__()\n        self.up1 = ResBlock(mid_channels, mid_channels)\n        self.pool = nn.MaxPool2d(2, 2)\n        self.low1 = ResBlock(mid_channels, mid_channels)\n        if depth == 1:\n            self.low2 = ResBlock(mid_channels, mid_channels)\n        else:\n            self.low2 = Hourglass(depth - 1, mid_channels)\n        self.low3 = ResBlock(mid_channels, mid_channels)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        up1 = self.up1(x)\n        low1 = self.low1(self.pool(x))\n        low2 = self.low2(low1)\n        low3 = self.low3(low2)\n        up2 = nn.functional.interpolate(\n            low3, scale_factor=2, mode='bilinear', align_corners=True)\n        return up1 + up2\n\n\ndef reduce_to_five_heatmaps(ori_heatmap, detach):\n    \"\"\"Reduce facial landmark heatmaps to 5 heatmaps.\n\n    DIC realizes facial SR with the help of key points of the face.\n    The number of key points in datasets are different from each other.\n    This function reduces the input heatmaps into 5 heatmaps:\n        left eye\n        right eye\n        nose\n        mouse\n        face silhouette\n\n    Args:\n        ori_heatmap (Tensor): Input heatmap tensor. (B, N, 32, 32).\n        detach (bool): Detached from the current tensor or not.\n\n    returns:\n        Tensor: New heatmap tensor. (B, 5, 32, 32).\n    \"\"\"\n\n    heatmap = ori_heatmap.clone()\n    max_heat = heatmap.max(dim=2, keepdim=True)[0].max(dim=3, keepdim=True)[0]\n    max_heat = max_heat.clamp_min_(0.05)\n    heatmap /= max_heat\n    if heatmap.size(1) == 5:\n        return heatmap.detach() if detach else heatmap\n    elif heatmap.size(1) == 68:\n        new_heatmap = torch.zeros_like(heatmap[:, :5])\n        new_heatmap[:, 0] = heatmap[:, 36:42].sum(1)  # left eye\n        new_heatmap[:, 1] = heatmap[:, 42:48].sum(1)  # right eye\n        new_heatmap[:, 2] = heatmap[:, 27:36].sum(1)  # nose\n        new_heatmap[:, 3] = heatmap[:, 48:68].sum(1)  # mouse\n        new_heatmap[:, 4] = heatmap[:, :27].sum(1)  # face silhouette\n        return new_heatmap.detach() if detach else new_heatmap\n    elif heatmap.size(1) == 194:  # Helen\n        new_heatmap = torch.zeros_like(heatmap[:, :5])\n        tmp_id = torch.cat((torch.arange(134, 153), torch.arange(174, 193)))\n        new_heatmap[:, 0] = heatmap[:, tmp_id].sum(1)  # left eye\n        tmp_id = torch.cat((torch.arange(114, 133), torch.arange(154, 173)))\n        new_heatmap[:, 1] = heatmap[:, tmp_id].sum(1)  # right eye\n        tmp_id = torch.arange(41, 57)\n        new_heatmap[:, 2] = heatmap[:, tmp_id].sum(1)  # nose\n        tmp_id = torch.arange(58, 113)\n        new_heatmap[:, 3] = heatmap[:, tmp_id].sum(1)  # mouse\n        tmp_id = torch.arange(0, 40)\n        new_heatmap[:, 4] = heatmap[:, tmp_id].sum(1)  # face silhouette\n        return new_heatmap.detach() if detach else new_heatmap\n    else:\n        raise NotImplementedError(\n            f'Face landmark number {heatmap.size(1)} not implemented!')\n"
  },
  {
    "path": "mmagic/models/editors/dic/light_cnn.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine import MMLogger\nfrom mmengine.model import BaseModule\nfrom mmengine.runner import load_checkpoint\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass LightCNN(BaseModule):\n    \"\"\"LightCNN discriminator with input size 128 x 128.\n\n    It is used to train DICGAN.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n    \"\"\"\n\n    def __init__(self, in_channels):\n        super().__init__()\n\n        self.features = nn.Sequential(\n            MaxFeature(in_channels, 48, 5, 1, 2),\n            nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True),\n            MaxFeature(48, 48, 1, 1, 0),\n            MaxFeature(48, 96, 3, 1, 1),\n            nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True),\n            MaxFeature(96, 96, 1, 1, 0),\n            MaxFeature(96, 192, 3, 1, 1),\n            nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True),\n            MaxFeature(192, 192, 1, 1, 0),\n            MaxFeature(192, 128, 3, 1, 1),\n            MaxFeature(128, 128, 1, 1, 0),\n            MaxFeature(128, 128, 3, 1, 1),\n            nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True),\n        )\n        self.classifier = nn.Sequential(\n            MaxFeature(8 * 8 * 128, 256, filter_type='linear'),\n            nn.LeakyReLU(0.2, True), nn.Linear(256, 1))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x = self.features(x)\n        x = x.view(x.size(0), -1)\n        out = self.classifier(x)\n        return out\n\n    def init_weights(self, pretrained=None, strict=True):\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n            strict (boo, optional): Whether strictly load the pretrained model.\n                Defaults to True.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=strict, logger=logger)\n        elif pretrained is not None:\n            raise TypeError(f'\"pretrained\" must be a str or None. '\n                            f'But received {type(pretrained)}.')\n\n\nclass MaxFeature(nn.Module):\n    \"\"\"Conv2d or Linear layer with max feature selector.\n\n    Generate feature maps with double channels, split them and select the max\n        feature.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        kernel_size (int or tuple): Size of the convolving kernel.\n        stride (int or tuple, optional): Stride of the convolution. Default: 1\n        padding (int or tuple, optional): Zero-padding added to both sides of\n            the input. Default: 1\n        filter_type (str): Type of filter. Options are 'conv2d' and 'linear'.\n            Default: 'conv2d'.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size=3,\n                 stride=1,\n                 padding=1,\n                 filter_type='conv2d'):\n        super().__init__()\n        self.out_channels = out_channels\n        filter_type = filter_type.lower()\n        if filter_type == 'conv2d':\n            self.filter = nn.Conv2d(\n                in_channels,\n                2 * out_channels,\n                kernel_size=kernel_size,\n                stride=stride,\n                padding=padding)\n        elif filter_type == 'linear':\n            self.filter = nn.Linear(in_channels, 2 * out_channels)\n        else:\n            raise ValueError(\"'filter_type' should be 'conv2d' or 'linear', \"\n                             f'but got {filter_type}')\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x = self.filter(x)\n        out = torch.chunk(x, chunks=2, dim=1)\n        return torch.max(out[0], out[1])\n"
  },
  {
    "path": "mmagic/models/editors/dim/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .dim import DIM\n\n__all__ = ['DIM']\n"
  },
  {
    "path": "mmagic/models/editors/dim/dim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Tuple\n\nimport torch\nfrom mmengine.logging import MMLogger\n\nfrom mmagic.models.base_models import BaseMattor\nfrom mmagic.models.utils import get_unknown_tensor\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass DIM(BaseMattor):\n    \"\"\"Deep Image Matting model.\n\n    https://arxiv.org/abs/1703.03872\n\n    .. note::\n\n        For ``(self.train_cfg.train_backbone, self.train_cfg.train_refiner)``:\n\n            * ``(True, False)`` corresponds to the encoder-decoder stage in \\\n                the paper.\n            * ``(False, True)`` corresponds to the refinement stage in the \\\n                paper.\n            * ``(True, True)`` corresponds to the fine-tune stage in the paper.\n\n    Args:\n        data_preprocessor (dict, optional): Config of data pre-processor.\n        backbone (dict): Config of backbone.\n        refiner (dict): Config of refiner.\n        loss_alpha (dict): Config of the alpha prediction loss. Default: None.\n        loss_comp (dict): Config of the composition loss. Default: None.\n        loss_refine (dict): Config of the loss of the refiner. Default: None.\n        train_cfg (dict): Config of training. In ``train_cfg``,\n            ``train_backbone`` should be specified. If the model has a refiner,\n            ``train_refiner`` should be specified.\n        test_cfg (dict): Config of testing. In ``test_cfg``, If the model has a\n            refiner, ``train_refiner`` should be specified.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor,\n                 backbone,\n                 refiner=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 loss_alpha=None,\n                 loss_comp=None,\n                 loss_refine=None,\n                 init_cfg: Optional[dict] = None):\n        # Build data _preprocessor and backbone\n        # No init here, init at last\n        super().__init__(\n            backbone=backbone,\n            data_preprocessor=data_preprocessor,\n            init_cfg=init_cfg,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg)\n\n        # build refiner if it's not None.\n        if refiner is None:\n            self.train_cfg['train_refiner'] = False\n            self.test_cfg['refine'] = False\n        else:\n            self.refiner = MODELS.build(refiner)\n\n        # if argument train_cfg is not None, validate if the config is proper.\n        assert hasattr(self.train_cfg, 'train_refiner')\n        assert hasattr(self.test_cfg, 'refine')\n        if self.test_cfg.refine and not self.train_cfg.train_refiner:\n            logger = MMLogger.get_current_instance()\n            logger.warning(\n                'You are not training the refiner, but it is used for '\n                'model forwarding.')\n\n        if not self.train_cfg.train_backbone:\n            self.freeze_backbone()\n\n        # Build losses\n        if all(v is None for v in (loss_alpha, loss_comp, loss_refine)):\n            raise ValueError('Please specify at least one loss for DIM.')\n\n        if loss_alpha is not None:\n            self.loss_alpha = MODELS.build(loss_alpha)\n        if loss_comp is not None:\n            self.loss_comp = MODELS.build(loss_comp)\n        if loss_refine is not None:\n            self.loss_refine = MODELS.build(loss_refine)\n\n    def init_weights(self):\n        \"\"\"Initialize the model network weights.\"\"\"\n        super().init_weights()\n        if self.with_refiner:\n            self.refiner.init_weights()\n\n    @property\n    def with_refiner(self):\n        \"\"\"Whether the matting model has a refiner.\"\"\"\n        return hasattr(self, 'refiner') and self.refiner is not None\n\n    def train(self, mode=True):\n        \"\"\"Mode switcher.\n\n        Args:\n            mode (bool): whether to set training mode (``True``) or evaluation\n                mode (``False``). Default: ``True``.\n        \"\"\"\n        super().train(mode)\n        if mode and (not self.train_cfg.train_backbone):\n            self.backbone.eval()\n\n    def freeze_backbone(self):\n        \"\"\"Freeze the backbone and only train the refiner.\"\"\"\n        self.backbone.eval()\n        for param in self.backbone.parameters():\n            param.requires_grad = False\n\n    def _forward(self,\n                 x: torch.Tensor,\n                 *,\n                 refine: bool = True) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Raw forward function.\n\n        Args:\n            x (torch.Tensor): Concatenation of merged image and trimap\n                with shape (N, 4, H, W)\n            refine (bool): if forward through refiner\n\n        Returns:\n            torch.Tensor: pred_alpha, with shape (N, 1, H, W)\n            torch.Tensor: pred_refine, with shape (N, 4, H, W)\n        \"\"\"\n\n        raw_alpha = self.backbone(x)\n        pred_alpha = raw_alpha.sigmoid()\n\n        if refine and hasattr(self, 'refiner'):\n            refine_input = torch.cat((x[:, :3, :, :], pred_alpha), 1)\n            pred_refine = self.refiner(refine_input, raw_alpha)\n        else:\n            # As ONNX does not support NoneType for output,\n            # we choose to use zero tensor to represent None\n            pred_refine = torch.zeros([])\n        return pred_alpha, pred_refine\n\n    def _forward_test(self, inputs):\n        \"\"\"Forward to get alpha prediction.\"\"\"\n        pred_alpha, pred_refine = self._forward(inputs)\n        if self.test_cfg.refine:\n            return pred_refine\n        else:\n            return pred_alpha\n\n    def _forward_train(self, inputs, data_samples):\n        \"\"\"Defines the computation performed at every training call.\n\n        Args:\n            inputs (torch.Tensor): Concatenation of normalized image and trimap\n                shape (N, 4, H, W)\n            data_samples (list[DataSample]): Data samples containing:\n                - gt_alpha (Tensor): Ground-truth of alpha\n                    shape (N, 1, H, W), normalized to 0 to 1.\n                - gt_fg (Tensor): Ground-truth of foreground\n                    shape (N, C, H, W), normalized to 0 to 1.\n                - gt_bg (Tensor): Ground-truth of background\n                    shape (N, C, H, W), normalized to 0 to 1.\n\n        Returns:\n            dict: Contains the loss items and batch information.\n        \"\"\"\n        # merged, trimap, meta, alpha, ori_merged, fg, bg\n\n        gt_alpha = data_samples.gt_alpha\n        gt_fg = data_samples.gt_fg\n        gt_bg = data_samples.gt_bg\n        gt_merged = data_samples.gt_merged\n\n        pred_alpha, pred_refine = self._forward(\n            inputs, refine=self.train_cfg.train_refiner)\n\n        trimap = inputs[:, 3:, :, :]\n        # Dim should use proc_trimap='rescale_to_zero_one'\n        weight = get_unknown_tensor(trimap, unknown_value=128 / 255)\n\n        losses = dict()\n        if self.train_cfg.train_backbone:\n            if self.loss_alpha is not None:\n                losses['loss_alpha'] = self.loss_alpha(pred_alpha, gt_alpha,\n                                                       weight)\n            if self.loss_comp is not None:\n                losses['loss_comp'] = self.loss_comp(pred_alpha, gt_fg, gt_bg,\n                                                     gt_merged, weight)\n        if self.train_cfg.train_refiner:\n            losses['loss_refine'] = self.loss_refine(pred_refine, gt_alpha,\n                                                     weight)\n        return losses\n"
  },
  {
    "path": "mmagic/models/editors/disco_diffusion/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .clip_wrapper import ClipWrapper\nfrom .disco import DiscoDiffusion\nfrom .guider import ImageTextGuider\nfrom .secondary_model import SecondaryDiffusionImageNet2, alpha_sigma_to_t\n\n__all__ = [\n    'DiscoDiffusion', 'ImageTextGuider', 'ClipWrapper',\n    'SecondaryDiffusionImageNet2', 'alpha_sigma_to_t'\n]\n"
  },
  {
    "path": "mmagic/models/editors/disco_diffusion/clip_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import print_log\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass ClipWrapper(nn.Module):\n    r\"\"\"Clip Models wrapper.\n\n    We provide wrappers for the clip models of ``openai`` and\n    ``mlfoundations``, where the user can specify ``clip_type``\n    as ``clip`` or ``open_clip``, and then initialize a clip model\n    using the same arguments as in the original codebase. The\n    following clip models settings are provided in the official\n    repo of disco diffusion:\n    |            Setting            | Source    | Arguments                                                    | # noqa\n    |:-----------------------------:|-----------|--------------------------------------------------------------| # noqa\n    | ViTB32                        | clip      | name='ViT-B/32',                  jit=False                  | # noqa\n    | ViTB16                        | clip      | name='ViT-B/16',                  jit=False                  | # noqa\n    | ViTL14                        | clip      | name='ViT-L/14',                  jit=False                  | # noqa\n    | ViTL14_336px                  | clip      | name='ViT-L/14@336px',            jit=False                  | # noqa\n    | RN50                          | clip      | name='RN50',                      jit=False                  | # noqa\n    | RN50x4                        | clip      | name='RN50x4',                    jit=False                  | # noqa\n    | RN50x16                       | clip      | name='RN50x16',                   jit=False                  | # noqa\n    | RN50x64                       | clip      | name='RN50x64',                   jit=False                  | # noqa\n    | RN101                         | clip      | name='RN101',                     jit=False                  | # noqa\n    | ViTB32_laion2b_e16            | open_clip | name='ViT-B-32',                  pretrained='laion2b_e16'   | # noqa\n    | ViTB32_laion400m_e31          | open_clip | model_name='ViT-B-32',            pretrained='laion400m_e31' | # noqa\n    | ViTB32_laion400m_32           | open_clip | model_name='ViT-B-32',            pretrained='laion400m_e32' | # noqa\n    | ViTB32quickgelu_laion400m_e31 | open_clip | model_name='ViT-B-32-quickgelu',  pretrained='laion400m_e31' | # noqa\n    | ViTB32quickgelu_laion400m_e32 | open_clip | model_name='ViT-B-32-quickgelu',  pretrained='laion400m_e32' | # noqa\n    | ViTB16_laion400m_e31          | open_clip | model_name='ViT-B-16',            pretrained='laion400m_e31' | # noqa\n    | ViTB16_laion400m_e32          | open_clip | model_name='ViT-B-16',            pretrained='laion400m_e32' | # noqa\n    | RN50_yffcc15m                 | open_clip | model_name='RN50',                pretrained='yfcc15m'       | # noqa\n    | RN50_cc12m                    | open_clip | model_name='RN50',                pretrained='cc12m'         | # noqa\n    | RN50_quickgelu_yfcc15m        | open_clip | model_name='RN50-quickgelu',      pretrained='yfcc15m'       | # noqa\n    | RN50_quickgelu_cc12m          | open_clip | model_name='RN50-quickgelu',      pretrained='cc12m'         | # noqa\n    | RN101_yfcc15m                 | open_clip | model_name='RN101',               pretrained='yfcc15m'       | # noqa\n    | RN101_quickgelu_yfcc15m       | open_clip | model_name='RN101-quickgelu',     pretrained='yfcc15m'       | # noqa\n\n    An example of a ``clip_modes_cfg`` is as follows:\n\n    Examples:\n\n    >>> # Use OpenAI's CLIP\n    >>> config = dict(\n    >>>     type='ClipWrapper',\n    >>>     clip_type='clip',\n    >>>     name='ViT-B/32',\n    >>>     jit=False)\n\n    >>> # Use OpenCLIP\n    >>> config = dict(\n    >>>     type='ClipWrapper',\n    >>>     clip_type='open_clip',\n    >>>     model_name='RN50',\n    >>>     pretrained='yfcc15m')\n\n    >>> # Use CLIP from Hugging Face Transformers\n    >>> config = dict(\n    >>>     type='ClipWrapper',\n    >>>     clip_type='huggingface',\n    >>>     pretrained_model_name_or_path='runwayml/stable-diffusion-v1-5',\n    >>>     subfolder='text_encoder')\n\n    Args:\n        clip_type (List[Dict]): The original source of the clip model. Whether be\n            ``clip``, ``open_clip`` or ``hugging_face``.\n\n        *args, **kwargs: Arguments to initialize corresponding clip model.\n    \"\"\"\n\n    def __init__(self, clip_type, *args, **kwargs):\n\n        super().__init__()\n        self.clip_type = clip_type\n        assert clip_type in ['clip', 'open_clip', 'huggingface']\n\n        error_msg = ('{} need to be installed! Run `pip install -r '\n                     'requirements/optional.txt` and try again')\n        if clip_type == 'clip':\n            try:\n                import clip\n            except ImportError:\n                raise ImportError(error_msg.format('\\'clip\\''))\n            print_log(f'Creating {kwargs[\"name\"]} by OpenAI', 'current')\n            self.model, _ = clip.load(*args, **kwargs)\n        elif clip_type == 'open_clip':\n            try:\n                import open_clip\n            except ImportError:\n                raise ImportError(error_msg.format('\\'open_clip_torch\\''))\n            print_log(f'Creating {kwargs[\"model_name\"]} by '\n                      'mlfoundations', 'current')\n            self.model = open_clip.create_model(*args, **kwargs)\n\n        elif clip_type == 'huggingface':\n            try:\n                import transformers\n            except ImportError:\n                raise ImportError(error_msg.format('\\'transforms\\''))\n            # NOTE: use CLIPTextModel to adopt stable diffusion pipeline\n            model_cls = transformers.CLIPTextModel\n            self.model = model_cls.from_pretrained(*args, **kwargs)\n            self.config = self.model.config\n            print_log(\n                f'Creating {self.model.name_or_path} '\n                'by \\'HuggingFace\\'', 'current')\n\n        self.model.eval().requires_grad_(False)\n\n    def get_embedding_layer(self):\n        \"\"\"Function to get embedding layer of the clip model.\n\n        Only support for CLIPTextModel currently.\n        \"\"\"\n\n        if self.clip_type != 'huggingface':\n            print_log(\n                'Do not support \\'get_embedding_layer\\' for clip_type: '\n                f'\\'{self.clip_type}\\' currently.', 'current')\n            return None\n        if self.model.__class__.__name__ != 'CLIPTextModel':\n            print_log(\n                'Only support \\'get_embedding_layer\\' for '\n                'CLIPTextModel.', 'current')\n            return None\n\n        return self.model.text_model.embeddings.token_embedding\n\n    def add_embedding(self, embeddings: Union[dict, List[dict]]):\n        assert self.clip_type == 'huggingface', (\n            'Only support add embedding for HuggingFace transformers.')\n        assert self.model.__class__.__name__ == 'CLIPTextModel', (\n            'Only support add embedding for \\'CLIPTextModel\\' (CLIP).')\n\n        embedding_layer = self.get_embedding_layer()\n        if not isinstance(embedding_layer, EmbeddingLayerWithFixes):\n            self.model.embeddings = EmbeddingLayerWithFixes(embedding_layer)\n\n        self.model.embeddings.add_embedding(embeddings)\n\n    def set_only_embedding_trainable(self):\n        func_name = '\\'set_only_embedding_trainable\\''\n        assert self.clip_type == 'huggingface', (\n            f'Only support {func_name} for HuggingFace transformers.')\n        assert self.model.__class__.__name__ == 'CLIPTextModel', (\n            f'Only support {func_name} for \\'CLIPTextModel\\' (CLIP).')\n        self.model.requires_grad_(False)\n        embedding_layer = self.get_embedding_layer()\n        if isinstance(embedding_layer, EmbeddingLayerWithFixes):\n            embedding_layer.trainable_embeddings.requires_grad_(True)\n            print_log('Set only embedding trainable.', 'current')\n        else:\n            print_log(\n                'Do not found EmbeddingLayerWithFixes. '\n                f'{func_name} do nothing.', 'current')\n\n    def set_embedding_layer(self):\n        assert self.clip_type == 'huggingface', (\n            'Only support add embedding for HuggingFace transformers.')\n        assert self.model.__class__.__name__ == 'CLIPTextModel', (\n            'Only support add embedding for \\'CLIPTextModel\\' (CLIP).')\n        embedding_layer = self.get_embedding_layer()\n        if not isinstance(embedding_layer, EmbeddingLayerWithFixes):\n            self.model.text_model.embeddings.token_embedding = \\\n                EmbeddingLayerWithFixes(embedding_layer)\n        print_log('Set embedding layer to EmbeddingLayerWithFixes', 'current')\n\n    def unset_embedding_layer(self):\n        wrapped_embedding_layer = self.model.embeddings\n        if isinstance(wrapped_embedding_layer, EmbeddingLayerWithFixes):\n            self.model.text_model.embeddings.token_embedding = \\\n                wrapped_embedding_layer.wrapped\n        print_log('Unset embedding layer.', 'current')\n\n    def forward(self, *args, **kwargs):\n        \"\"\"Forward function.\"\"\"\n        return self.model(*args, **kwargs)\n\n\nclass EmbeddingLayerWithFixes(nn.Module):\n    \"\"\"The revised embedding layer to support external embeddings. This design\n    of this class is inspired by https://github.com/AUTOMATIC1111/stable-\n    diffusion-webui/blob/22bcc7be428c94e9408f589966c2040187245d81/modules/sd_hi\n    jack.py#L224  # noqa.\n\n    Args:\n        wrapped (nn.Emebdding): The embedding layer to be wrapped.\n        external_embeddings (Union[dict, List[dict]], optional): The external\n            embeddings added to this layer. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 wrapped: nn.Embedding,\n                 external_embeddings: Optional[Union[dict,\n                                                     List[dict]]] = None):\n        super().__init__()\n        self.wrapped = wrapped\n        self.num_embeddings = wrapped.weight.shape[0]\n\n        self.external_embeddings = []\n        if external_embeddings:\n            self.add_embeddings(external_embeddings)\n\n        self.trainable_embeddings = nn.ParameterDict()\n\n    @property\n    def weight(self):\n        \"\"\"Get the weight of wrapped embedding layer.\"\"\"\n        return self.wrapped.weight\n\n    def check_duplicate_names(self, embeddings: List[dict]):\n        \"\"\"Check whether duplicate names exist in list of 'external\n        embeddings'.\n\n        Args:\n            embeddings (List[dict]): A list of embedding to be check.\n        \"\"\"\n        names = [emb['name'] for emb in embeddings]\n        assert len(names) == len(set(names)), (\n            'Found duplicated names in \\'external_embeddings\\'. Name list: '\n            f'\\'{names}\\'')\n\n    def check_ids_overlap(self, embeddings):\n        \"\"\"Check whether overlap exist in token ids of 'external_embeddings'.\n\n        Args:\n            embeddings (List[dict]): A list of embedding to be check.\n        \"\"\"\n        ids_range = [[emb['start'], emb['end'], emb['name']]\n                     for emb in embeddings]\n        ids_range.sort()  # sort by 'start'\n        # check if 'end' has overlapping\n        for idx in range(len(ids_range) - 1):\n            name1, name2 = ids_range[idx][-1], ids_range[idx + 1][-1]\n            assert ids_range[idx][1] <= ids_range[idx + 1][0], (\n                f'Found ids overlapping between embeddings \\'{name1}\\' '\n                f'and \\'{name2}\\'.')\n\n    def add_embeddings(self, embeddings: Optional[Union[dict, List[dict]]]):\n        \"\"\"Add external embeddings to this layer.\n\n        Use case:\n\n        >>> 1. Add token to tokenizer and get the token id.\n        >>> tokenizer = TokenizerWrapper('openai/clip-vit-base-patch32')\n        >>> # 'how much' in kiswahili\n        >>> tokenizer.add_placeholder_tokens('ngapi', num_vec_per_token=4)\n        >>>\n        >>> 2. Add external embeddings to the model.\n        >>> new_embedding = {\n        >>>     'name': 'ngapi',  # 'how much' in kiswahili\n        >>>     'embedding': torch.ones(1, 15) * 4,\n        >>>     'start': tokenizer.get_token_info('kwaheri')['start'],\n        >>>     'end': tokenizer.get_token_info('kwaheri')['end'],\n        >>>     'trainable': False  # if True, will registry as a parameter\n        >>> }\n        >>> embedding_layer = nn.Embedding(10, 15)\n        >>> embedding_layer_wrapper = EmbeddingLayerWithFixes(embedding_layer)\n        >>> embedding_layer_wrapper.add_embeddings(new_embedding)\n        >>>\n        >>> 3. Forward tokenizer and embedding layer!\n        >>> input_text = ['hello, ngapi!', 'hello my friend, ngapi?']\n        >>> input_ids = tokenizer(\n        >>>     input_text, padding='max_length', truncation=True,\n        >>>     return_tensors='pt')['input_ids']\n        >>> out_feat = embedding_layer_wrapper(input_ids)\n        >>>\n        >>> 4. Let's validate the result!\n        >>> assert (out_feat[0, 3: 7] == 2.3).all()\n        >>> assert (out_feat[2, 5: 9] == 2.3).all()\n\n        Args:\n            embeddings (Union[dict, list[dict]]): The external embeddings to\n                be added. Each dict must contain the following 4 fields: 'name'\n                (the name of this embedding), 'embedding' (the embedding\n                tensor), 'start' (the start token id of this embedding), 'end'\n                (the end token id of this embedding). For example:\n                `{name: NAME, start: START, end: END, embedding: torch.Tensor}`\n        \"\"\"\n        if isinstance(embeddings, dict):\n            embeddings = [embeddings]\n\n        self.external_embeddings += embeddings\n        self.check_duplicate_names(self.external_embeddings)\n        self.check_ids_overlap(self.external_embeddings)\n\n        # set for trainable\n        added_trainable_emb_info = []\n        for embedding in embeddings:\n            trainable = embedding.get('trainable', False)\n            if trainable:\n                name = embedding['name']\n                embedding['embedding'] = torch.nn.Parameter(\n                    embedding['embedding'])\n                self.trainable_embeddings[name] = embedding['embedding']\n                added_trainable_emb_info.append(name)\n\n        added_emb_info = [emb['name'] for emb in embeddings]\n        added_emb_info = ', '.join(added_emb_info)\n        print_log(f'Successfully add external embeddings: {added_emb_info}.',\n                  'current')\n\n        if added_trainable_emb_info:\n            added_trainable_emb_info = ', '.join(added_trainable_emb_info)\n            print_log(\n                'Successfully add trainable external embeddings: '\n                f'{added_trainable_emb_info}', 'current')\n\n    def replace_input_ids(self, input_ids: torch.Tensor) -> torch.Tensor:\n        \"\"\"Replace external input ids to 0.\n\n        Args:\n            input_ids (torch.Tensor): The input ids to be replaced.\n\n        Returns:\n            torch.Tensor: The replaced input ids.\n        \"\"\"\n        input_ids_fwd = input_ids.clone()\n        input_ids_fwd[input_ids_fwd >= self.num_embeddings] = 0\n        return input_ids_fwd\n\n    def replace_embeddings(self, input_ids: torch.Tensor,\n                           embedding: torch.Tensor,\n                           external_embedding: dict) -> torch.Tensor:\n        \"\"\"Replace external embedding to the embedding layer. Noted that, in\n        this function we use `torch.cat` to avoid inplace modification.\n\n        Args:\n            input_ids (torch.Tensor): The original token ids. Shape like\n                [LENGTH, ].\n            embedding (torch.Tensor): The embedding of token ids after\n                `replace_input_ids` function.\n            external_embedding (dict): The external embedding to be replaced.\n\n        Returns:\n            torch.Tensor: The replaced embedding.\n        \"\"\"\n        new_embedding = []\n\n        name = external_embedding['name']\n        start = external_embedding['start']\n        end = external_embedding['end']\n        target_ids_to_replace = [i for i in range(start, end)]\n        ext_emb = external_embedding['embedding']\n\n        # do not need to replace\n        if not (input_ids == start).any():\n            return embedding\n\n        # start replace\n        s_idx, e_idx = 0, 0\n        while e_idx < len(input_ids):\n            if input_ids[e_idx] == start:\n                if e_idx != 0:\n                    # add embedding do not need to replace\n                    new_embedding.append(embedding[s_idx:e_idx])\n\n                # check if the next embedding need to replace is valid\n                actually_ids_to_replace = [\n                    int(i) for i in input_ids[e_idx:e_idx + end - start]\n                ]\n                assert actually_ids_to_replace == target_ids_to_replace, (\n                    f'Invalid \\'input_ids\\' in position: {s_idx} to {e_idx}. '\n                    f'Expect \\'{target_ids_to_replace}\\' for embedding '\n                    f'\\'{name}\\' but found \\'{actually_ids_to_replace}\\'.')\n\n                new_embedding.append(ext_emb)\n\n                s_idx = e_idx + end - start\n                e_idx = s_idx + 1\n            else:\n                e_idx += 1\n\n        if e_idx == len(input_ids):\n            new_embedding.append(embedding[s_idx:e_idx])\n\n        return torch.cat(new_embedding, dim=0)\n\n    def forward(self,\n                input_ids: torch.Tensor,\n                external_embeddings: Optional[List[dict]] = None):\n        \"\"\"The forward function.\n\n        Args:\n            input_ids (torch.Tensor): The token ids shape like [bz, LENGTH] or\n                [LENGTH, ].\n            external_embeddings (Optional[List[dict]]): The external\n                embeddings. If not passed, only `self.external_embeddings`\n                will be used.  Defaults to None.\n\n        input_ids: shape like [bz, LENGTH] or [LENGTH].\n        \"\"\"\n        assert input_ids.ndim in [1, 2]\n        if input_ids.ndim == 1:\n            input_ids = input_ids.unsqueeze(0)\n\n        if external_embeddings is None and not self.external_embeddings:\n            return self.wrapped(input_ids)\n\n        input_ids_fwd = self.replace_input_ids(input_ids)\n        inputs_embeds = self.wrapped(input_ids_fwd)\n\n        vecs = []\n\n        if external_embeddings is None:\n            external_embeddings = []\n        elif isinstance(external_embeddings, dict):\n            external_embeddings = [external_embeddings]\n        embeddings = self.external_embeddings + external_embeddings\n\n        for input_id, embedding in zip(input_ids, inputs_embeds):\n            new_embedding = embedding\n            for external_embedding in embeddings:\n                new_embedding = self.replace_embeddings(\n                    input_id, new_embedding, external_embedding)\n            vecs.append(new_embedding)\n\n        return torch.stack(vecs)\n"
  },
  {
    "path": "mmagic/models/editors/disco_diffusion/disco.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Union\n\nimport mmcv\nimport mmengine\nimport torch\nimport torch.nn as nn\nfrom mmengine.runner import set_random_seed\nfrom mmengine.runner.checkpoint import (_load_checkpoint,\n                                        _load_checkpoint_with_prefix)\nfrom tqdm import tqdm\n\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom .guider import ImageTextGuider\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module('disco')\n@MODELS.register_module('dd')\n@MODELS.register_module()\nclass DiscoDiffusion(nn.Module):\n    \"\"\"Disco Diffusion (DD) is a Google Colab Notebook which leverages an AI\n    Image generating technique called CLIP-Guided Diffusion to allow you to\n    create compelling and beautiful images from just text inputs. Created by\n    Somnai, augmented by Gandamu, and building on the work of RiversHaveWings,\n    nshepperd, and many others.\n\n    Ref:\n        Github Repo: https://github.com/alembics/disco-diffusion\n        Colab: https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb # noqa\n\n    Args:\n        unet (ModelType): Config of denoising Unet.\n        diffusion_scheduler (ModelType): Config of diffusion_scheduler scheduler.\n        secondary_model (ModelType): A smaller secondary diffusion model\n            trained by Katherine Crowson to remove noise from intermediate\n            timesteps to prepare them for CLIP.\n            Ref: https://twitter.com/rivershavewings/status/1462859669454536711 # noqa\n            Defaults to None.\n        clip_models (list): Config of clip models. Defaults to [].\n        use_fp16 (bool): Whether to use fp16 for unet model. Defaults to False.\n        pretrained_cfgs (dict): Path Config for pretrained weights. Usually\n            this is a dict contains module name and the corresponding ckpt\n            path. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 unet,\n                 diffusion_scheduler,\n                 secondary_model=None,\n                 clip_models=[],\n                 use_fp16=False,\n                 pretrained_cfgs=None):\n        super().__init__()\n        self.unet = unet if isinstance(unet, nn.Module) else MODELS.build(unet)\n        self.diffusion_scheduler = DIFFUSION_SCHEDULERS.build(\n            diffusion_scheduler) if isinstance(diffusion_scheduler,\n                                               dict) else diffusion_scheduler\n\n        assert len(clip_models) > 0\n        if isinstance(clip_models[0], nn.Module):\n            _clip_models = clip_models\n        else:\n            _clip_models = []\n            for clip_cfg in clip_models:\n                _clip_models.append(MODELS.build(clip_cfg))\n        self.guider = ImageTextGuider(_clip_models)\n\n        if secondary_model is not None:\n            self.secondary_model = secondary_model if isinstance(\n                secondary_model, nn.Module) else MODELS.build(secondary_model)\n            self.with_secondary_model = True\n        else:\n            self.with_secondary_model = False\n\n        if pretrained_cfgs:\n            self.load_pretrained_models(pretrained_cfgs)\n        if use_fp16:\n            mmengine.print_log('Convert unet modules to floatpoint16')\n            self.unet.convert_to_fp16()\n\n    def load_pretrained_models(self, pretrained_cfgs):\n        \"\"\"Loading pretrained weights to model. ``pretrained_cfgs`` is a dict\n        consist of module name as key and checkpoint path as value.\n\n        Args:\n            pretrained_cfgs (dict): Path Config for pretrained weights.\n            Usually this is a dict contains module name and the\n            corresponding ckpt path. Defaults to None.\n        \"\"\"\n        for key, ckpt_cfg in pretrained_cfgs.items():\n            prefix = ckpt_cfg.get('prefix', '')\n            map_location = ckpt_cfg.get('map_location', 'cpu')\n            strict = ckpt_cfg.get('strict', True)\n            ckpt_path = ckpt_cfg.get('ckpt_path')\n            if prefix:\n                state_dict = _load_checkpoint_with_prefix(\n                    prefix, ckpt_path, map_location)\n            else:\n                state_dict = _load_checkpoint(ckpt_path, map_location)\n            getattr(self, key).load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained {key} from {ckpt_path}')\n\n    @property\n    def device(self):\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    @torch.no_grad()\n    def infer(self,\n              scheduler_kwargs=None,\n              height=None,\n              width=None,\n              init_image=None,\n              batch_size=1,\n              num_inference_steps=100,\n              skip_steps=0,\n              show_progress=True,\n              text_prompts=[],\n              image_prompts=[],\n              eta=0.8,\n              clip_guidance_scale=5000,\n              init_scale=1000,\n              tv_scale=0.,\n              sat_scale=0.,\n              range_scale=150,\n              cut_overview=[12] * 400 + [4] * 600,\n              cut_innercut=[4] * 400 + [12] * 600,\n              cut_ic_pow=[1] * 1000,\n              cut_icgray_p=[0.2] * 400 + [0] * 600,\n              cutn_batches=4,\n              seed=None):\n        \"\"\"Inference API for disco diffusion.\n\n        Args:\n            scheduler_kwargs (dict): Args for infer time diffusion\n                scheduler. Defaults to None.\n            height (int): Height of output image. Defaults to None.\n            width (int): Width of output image. Defaults to None.\n            init_image (str): Initial image at the start point\n                of denoising. Defaults to None.\n            batch_size (int): Batch size. Defaults to 1.\n            num_inference_steps (int): Number of inference steps.\n                Defaults to 1000.\n            skip_steps (int): Denoising steps to skip, usually set\n                with ``init_image``. Defaults to 0.\n            show_progress (bool): Whether to show progress.\n                Defaults to False.\n            text_prompts (list): Text prompts. Defaults to [].\n            image_prompts (list): Image prompts, this is not the same as\n                ``init_image``, they works the same way with\n                ``text_prompts``. Defaults to [].\n            eta (float): Eta for ddim sampling. Defaults to 0.8.\n            clip_guidance_scale (int): The Scale of influence of prompts\n                on output image. Defaults to 1000.\n            seed (int): Sampling seed. Defaults to None.\n        \"\"\"\n        # set diffusion_scheduler\n        if scheduler_kwargs is not None:\n            mmengine.print_log('Switch to infer diffusion scheduler!',\n                               'current')\n            infer_scheduler = DIFFUSION_SCHEDULERS.build(scheduler_kwargs)\n        else:\n            infer_scheduler = self.diffusion_scheduler\n        # set random seed\n        if isinstance(seed, int):\n            set_random_seed(seed=seed)\n\n        # set step values\n        if num_inference_steps > 0:\n            infer_scheduler.set_timesteps(num_inference_steps)\n\n        _ = image_prompts\n\n        height = (height // 64) * 64 if height else self.unet.image_size\n        width = (width // 64) * 64 if width else self.unet.image_size\n        if init_image is None:\n            image = torch.randn(\n                (batch_size, self.unet.in_channels, height, width))\n            image = image.to(self.device)\n        else:\n            init = mmcv.imread(init_image, channel_order='rgb')\n            init = mmcv.imresize(\n                init, (width, height), interpolation='lanczos') / 255.\n            init_image = torch.as_tensor(\n                init,\n                dtype=torch.float32).to(self.device).unsqueeze(0).permute(\n                    0, 3, 1, 2).mul(2).sub(1)\n            image = init_image.clone()\n            image = infer_scheduler.add_noise(\n                image, torch.randn_like(image),\n                infer_scheduler.timesteps[skip_steps])\n        # get stats from text prompts and image prompts\n        model_stats = self.guider.compute_prompt_stats(\n            text_prompts=text_prompts)\n        timesteps = infer_scheduler.timesteps[skip_steps:]\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for t in timesteps:\n            # 1. predicted model_output\n            model_output = self.unet(image, t)['sample']\n\n            # 2. compute previous image: x_t -> x_t-1\n            cond_kwargs = dict(\n                model_stats=model_stats,\n                init_image=init_image,\n                unet=self.unet,\n                clip_guidance_scale=clip_guidance_scale,\n                init_scale=init_scale,\n                tv_scale=tv_scale,\n                sat_scale=sat_scale,\n                range_scale=range_scale,\n                cut_overview=cut_overview,\n                cut_innercut=cut_innercut,\n                cut_ic_pow=cut_ic_pow,\n                cut_icgray_p=cut_icgray_p,\n                cutn_batches=cutn_batches,\n            )\n            if self.with_secondary_model:\n                cond_kwargs.update(secondary_model=self.secondary_model)\n            diffusion_scheduler_output = infer_scheduler.step(\n                model_output,\n                t,\n                image,\n                cond_fn=self.guider.cond_fn,\n                cond_kwargs=cond_kwargs,\n                eta=eta)\n\n            image = diffusion_scheduler_output['prev_sample']\n        return {'samples': image}\n"
  },
  {
    "path": "mmagic/models/editors/disco_diffusion/guider.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport lpips\nimport numpy as np\nimport pandas as pd\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torchvision.transforms as T\nimport torchvision.transforms.functional as TF\nfrom mmengine.utils import digit_version\nfrom resize_right import resize\nfrom torchvision import __version__ as TORCHVISION_VERSION\n\nfrom mmagic.models.losses import tv_loss\nfrom mmagic.utils import try_import\nfrom .secondary_model import alpha_sigma_to_t\n\nclip = try_import('clip')\n\nnormalize = T.Normalize(\n    mean=[0.48145466, 0.4578275, 0.40821073],\n    std=[0.26862954, 0.26130258, 0.27577711])\n\n\ndef sinc(x):\n    \"\"\"\n    Sinc function.\n    If x equal to 0,\n        sinc(x) = 1\n    else:\n        sinc(x) = sin(x)/ x\n    Args:\n        x (torch.Tensor): Input Tensor\n\n    Returns:\n        torch.Tensor: Function output.\n    \"\"\"\n    return torch.where(x != 0,\n                       torch.sin(math.pi * x) / (math.pi * x), x.new_ones([]))\n\n\ndef lanczos(x, a):\n    \"\"\"Lanczos filter's reconstruction kernel L(x).\"\"\"\n    cond = torch.logical_and(-a < x, x < a)\n    out = torch.where(cond, sinc(x) * sinc(x / a), x.new_zeros([]))\n    return out / out.sum()\n\n\ndef ramp(ratio, width):\n    \"\"\"_summary_\n\n    Args:\n        ratio (_type_): _description_\n        width (_type_): _description_\n\n    Returns:\n        _type_: _description_\n    \"\"\"\n    n = math.ceil(width / ratio + 1)\n    out = torch.empty([n])\n    cur = 0\n    for i in range(out.shape[0]):\n        out[i] = cur\n        cur += ratio\n    return torch.cat([-out[1:].flip([0]), out])[1:-1]\n\n\ndef resample(input, size, align_corners=True):\n    \"\"\"Lanczos resampling image.\n\n    Args:\n        input (torch.Tensor): Input image tensor.\n        size (Tuple[int, int]): Output image size.\n        align_corners (bool): align_corners argument of F.interpolate.\n            Defaults to True.\n\n    Returns:\n        torch.Tensor: Resampling results.\n    \"\"\"\n    n, c, h, w = input.shape\n    dh, dw = size\n\n    input = input.reshape([n * c, 1, h, w])\n\n    if dh < h:\n        kernel_h = lanczos(ramp(dh / h, 2), 2).to(input.device, input.dtype)\n        pad_h = (kernel_h.shape[0] - 1) // 2\n        input = F.pad(input, (0, 0, pad_h, pad_h), 'reflect')\n        input = F.conv2d(input, kernel_h[None, None, :, None])\n\n    if dw < w:\n        kernel_w = lanczos(ramp(dw / w, 2), 2).to(input.device, input.dtype)\n        pad_w = (kernel_w.shape[0] - 1) // 2\n        input = F.pad(input, (pad_w, pad_w, 0, 0), 'reflect')\n        input = F.conv2d(input, kernel_w[None, None, None, :])\n\n    input = input.reshape([n, c, h, w])\n    return F.interpolate(\n        input, size, mode='bicubic', align_corners=align_corners)\n\n\ndef range_loss(input):\n    \"\"\"range loss.\"\"\"\n    return (input - input.clamp(-1, 1)).pow(2).mean([1, 2, 3])\n\n\ndef spherical_dist_loss(x, y):\n    \"\"\"spherical distance loss.\"\"\"\n    x = F.normalize(x, dim=-1)\n    y = F.normalize(y, dim=-1)\n    return (x - y).norm(dim=-1).div(2).arcsin().pow(2).mul(2)\n\n\nclass MakeCutouts(nn.Module):\n    \"\"\"Each iteration, the AI cuts the image into smaller pieces known as cuts.\n\n    , and compares each cut to the prompt to decide how to guide the next\n    diffusion step.\n    This classes will randomly cut patches and perform image augmentation to\n    these patches.\n\n    Args:\n        cut_size (int): Size of the patches.\n        cutn (int): Number of patches to cut.\n    \"\"\"\n\n    def __init__(self, cut_size, cutn):\n        super().__init__()\n        self.cut_size = cut_size\n        self.cutn = cutn\n        self.augs = T.Compose([\n            T.RandomHorizontalFlip(p=0.5),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.RandomAffine(degrees=15, translate=(0.1, 0.1)),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.RandomPerspective(distortion_scale=0.4, p=0.7),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.RandomGrayscale(p=0.15),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n        ])\n\n    def forward(self, input, skip_augs=False):\n        input = T.Pad(input.shape[2] // 4, fill=0)(input)\n        sideY, sideX = input.shape[2:4]\n        max_size = min(sideX, sideY)\n\n        cutouts = []\n        for ch in range(self.cutn):\n            if ch > self.cutn - self.cutn // 4:\n                cutout = input.clone()\n            else:\n                size = int(max_size * torch.zeros(1, ).normal_(\n                    mean=.8, std=.3).clip(float(self.cut_size / max_size), 1.))\n                offsetx = torch.randint(0, abs(sideX - size + 1), ())\n                offsety = torch.randint(0, abs(sideY - size + 1), ())\n                cutout = input[:, :, offsety:offsety + size,\n                               offsetx:offsetx + size]\n\n            if not skip_augs:\n                cutout = self.augs(cutout)\n            cutouts.append(resample(cutout, (self.cut_size, self.cut_size)))\n            del cutout\n\n        cutouts = torch.cat(cutouts, dim=0)\n        return cutouts\n\n\nclass MakeCutoutsDango(nn.Module):\n    \"\"\"Dango233(https://github.com/Dango233)'s version of MakeCutouts.\n\n    The improvement compared to ``MakeCutouts`` is that it use partial\n    greyscale augmentation to capture structure, and partial rotation\n    augmentation to capture whole frames.\n\n    Args:\n        cut_size (int): Size of the patches.\n        Overview (int): The total number of overview cuts.\n        In details,\n            Overview=1, Add whole frame;\n            Overview=2, Add grayscaled frame;\n            Overview=3, Add horizontal flip frame;\n            Overview=4, Add grayscaled horizontal flip frame;\n            Overview>4, Repeat add frame Overview times.\n            Defaults to 4.\n        InnerCrop (int): The total number of inner cuts.\n            Defaults to 0.\n        IC_Size_Pow (float): This sets the size of the border\n            used for inner cuts.  High values have larger borders,\n            and therefore the cuts themselves will be smaller and\n            provide finer details. Defaults to 0.5.\n        IC_Grey_P (float): The portion of the inner cuts can be set to be\n            grayscale instead of color. This may help with improved\n            definition of shapes and edges, especially in the early\n            diffusion steps where the image structure is being defined.\n            Defaults to 0.2.\n    \"\"\"\n\n    def __init__(self,\n                 cut_size,\n                 Overview=4,\n                 InnerCrop=0,\n                 IC_Size_Pow=0.5,\n                 IC_Grey_P=0.2):\n        super().__init__()\n        self.cut_size = cut_size\n        self.Overview = Overview\n        self.InnerCrop = InnerCrop\n        self.IC_Size_Pow = IC_Size_Pow\n        self.IC_Grey_P = IC_Grey_P\n\n        random_affine_args = dict(degrees=10, translate=(0.05, 0.05))\n        if digit_version(TORCHVISION_VERSION) >= digit_version('0.9.0'):\n            random_affine_args['interpolation'] = T.InterpolationMode.BILINEAR\n        else:\n            from PIL import Image\n            random_affine_args['resample'] = Image.NEAREST\n\n        self.augs = T.Compose([\n            T.RandomHorizontalFlip(p=0.5),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.RandomAffine(**random_affine_args),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.RandomGrayscale(p=0.1),\n            T.Lambda(lambda x: x + torch.randn_like(x) * 0.01),\n            T.ColorJitter(\n                brightness=0.1, contrast=0.1, saturation=0.1, hue=0.1),\n        ])\n\n    def forward(self, input, skip_augs=False):\n        \"\"\"Forward function.\"\"\"\n        cutouts = []\n        gray = T.Grayscale(3)\n        sideY, sideX = input.shape[2:4]\n        max_size = min(sideX, sideY)\n        min_size = min(sideX, sideY, self.cut_size)\n        output_shape = [1, 3, self.cut_size, self.cut_size]\n        pad_input = F.pad(input,\n                          ((sideY - max_size) // 2, (sideY - max_size) // 2,\n                           (sideX - max_size) // 2, (sideX - max_size) // 2))\n        cutout = resize(pad_input, out_shape=output_shape)\n\n        if self.Overview > 0:\n            if self.Overview <= 4:\n                if self.Overview >= 1:\n                    cutouts.append(cutout)\n                if self.Overview >= 2:\n                    cutouts.append(gray(cutout))\n                if self.Overview >= 3:\n                    cutouts.append(TF.hflip(cutout))\n                if self.Overview == 4:\n                    cutouts.append(gray(TF.hflip(cutout)))\n            else:\n                cutout = resize(pad_input, out_shape=output_shape)\n                for _ in range(self.Overview):\n                    cutouts.append(cutout)\n\n        if self.InnerCrop > 0:\n            for i in range(self.InnerCrop):\n                size = int(\n                    torch.rand([])**self.IC_Size_Pow * (max_size - min_size) +\n                    min_size)\n                offsetx = torch.randint(0, sideX - size + 1, ())\n                offsety = torch.randint(0, sideY - size + 1, ())\n                cutout = input[:, :, offsety:offsety + size,\n                               offsetx:offsetx + size]\n                if i <= int(self.IC_Grey_P * self.InnerCrop):\n                    cutout = gray(cutout)\n                cutout = resize(cutout, out_shape=output_shape)\n                cutouts.append(cutout)\n        cutouts = torch.cat(cutouts)\n        if not skip_augs:\n            cutouts = self.augs(cutouts)\n        return cutouts\n\n\ndef parse_prompt(prompt):\n    \"\"\"Parse prompt, return text and text weight.\"\"\"\n    if prompt.startswith('http://') or prompt.startswith('https://'):\n        vals = prompt.rsplit(':', 2)\n        vals = [vals[0] + ':' + vals[1], *vals[2:]]\n    else:\n        vals = prompt.rsplit(':', 1)\n    vals = vals + ['', '1'][len(vals):]\n    return vals[0], float(vals[1])\n\n\ndef split_prompts(prompts, max_frames=1):\n    \"\"\"Split prompts to a list of prompts.\"\"\"\n    prompt_series = pd.Series([np.nan for a in range(max_frames)])\n    for i, prompt in prompts.items():\n        prompt_series[i] = prompt\n    # prompt_series = prompt_series.astype(str)\n    prompt_series = prompt_series.ffill().bfill()\n    return prompt_series\n\n\nclass ImageTextGuider(nn.Module):\n    \"\"\"Disco-Diffusion uses text and images to guide image generation. We will\n    use the clip models to extract text and image features as prompts, and then\n    during the iteration, the features of the image patches are computed, and\n    the similarity loss between the prompts features and the generated features\n    is computed. Other losses also include RGB Range loss, total variation\n    loss. Using these losses we can guide the image generation towards the\n    desired target.\n\n    Args:\n        clip_models (List[Dict]): List of clip model settings.\n    \"\"\"\n\n    def __init__(self, clip_models):\n        super().__init__()\n\n        assert clip is not None, (\n            \"Cannot import 'clip'. Please install 'clip' via \"\n            \"\\\"pip install git+https://github.com/openai/CLIP.git\\\".\")\n\n        self.clip_models = clip_models\n        self.lpips_model = lpips.LPIPS(net='vgg')\n\n    def frame_prompt_from_text(self, text_prompts, frame_num=0):\n        \"\"\"Get current frame prompt.\"\"\"\n        prompts_series = split_prompts(text_prompts)\n        if prompts_series is not None and frame_num >= len(prompts_series):\n            frame_prompt = prompts_series[-1]\n        elif prompts_series is not None:\n            frame_prompt = prompts_series[frame_num]\n        else:\n            frame_prompt = []\n        return frame_prompt\n\n    def compute_prompt_stats(self,\n                             text_prompts=[],\n                             image_prompt=None,\n                             fuzzy_prompt=False,\n                             rand_mag=0.05):\n        \"\"\"Compute prompts statistics.\n\n        Args:\n            text_prompts (list): Text prompts. Defaults to [].\n            image_prompt (list): Image prompts. Defaults to None.\n            fuzzy_prompt (bool, optional): Controls whether to add multiple\n                noisy prompts to the prompt losses. If True, can increase\n                variability of image output. Defaults to False.\n            rand_mag (float, optional): Controls the magnitude of the\n                random noise added by fuzzy_prompt. Defaults to 0.05.\n        \"\"\"\n        model_stats = []\n        frame_prompt = self.frame_prompt_from_text(text_prompts)\n        for clip_model in self.clip_models:\n            model_stat = {\n                'clip_model': None,\n                'target_embeds': [],\n                'make_cutouts': None,\n                'weights': []\n            }\n            model_stat['clip_model'] = clip_model\n\n            for prompt in frame_prompt:\n                txt, weight = parse_prompt(prompt)\n                txt = clip_model.model.encode_text(\n                    clip.tokenize(prompt).to(self.device)).float()\n\n                if fuzzy_prompt:\n                    for i in range(25):\n                        model_stat['target_embeds'].append(\n                            (txt +\n                             torch.randn(txt.shape).cuda() * rand_mag).clamp(\n                                 0, 1))\n                        model_stat['weights'].append(weight)\n                else:\n                    model_stat['target_embeds'].append(txt)\n                    model_stat['weights'].append(weight)\n            model_stat['target_embeds'] = torch.cat(\n                model_stat['target_embeds'])\n            model_stat['weights'] = torch.tensor(\n                model_stat['weights'], device=self.device)\n            if model_stat['weights'].sum().abs() < 1e-3:\n                raise RuntimeError('The weights must not sum to 0.')\n            model_stat['weights'] /= model_stat['weights'].sum().abs()\n            model_stats.append(model_stat)\n        return model_stats\n\n    def cond_fn(self,\n                model,\n                diffusion_scheduler,\n                x,\n                t,\n                beta_prod_t,\n                model_stats,\n                secondary_model=None,\n                init_image=None,\n                clamp_grad=True,\n                clamp_max=0.05,\n                clip_guidance_scale=5000,\n                init_scale=1000,\n                tv_scale=0.,\n                sat_scale=0.,\n                range_scale=150,\n                cut_overview=[12] * 400 + [4] * 600,\n                cut_innercut=[4] * 400 + [12] * 600,\n                cut_ic_pow=[1] * 1000,\n                cut_icgray_p=[0.2] * 400 + [0] * 600,\n                cutn_batches=4):\n        \"\"\"Clip guidance function.\n\n        Args:\n            model (nn.Module): _description_\n            diffusion_scheduler (object): _description_\n            x (torch.Tensor): _description_\n            t (int): _description_\n            beta_prod_t (torch.Tensor): _description_\n            model_stats (List[torch.Tensor]): _description_\n            secondary_model (nn.Module): A smaller secondary diffusion model\n                trained by Katherine Crowson to remove noise from intermediate\n                timesteps to prepare them for CLIP.\n                Ref: https://twitter.com/rivershavewings/status/1462859669454536711 # noqa\n                Defaults to None.\n            init_image (torch.Tensor): Initial image for denoising.\n                Defaults to None.\n            clamp_grad (bool, optional): Whether clamp gradient. Defaults to True.\n            clamp_max (float, optional): Clamp max values. Defaults to 0.05.\n            clip_guidance_scale (int, optional): The scale of influence of\n                clip guidance on image generation. Defaults to 5000.\n        \"\"\"\n        with torch.enable_grad():\n            x_is_NaN = False\n            x = x.detach().requires_grad_()\n            n = x.shape[0]\n            if secondary_model is not None:\n                alpha = torch.tensor(\n                    diffusion_scheduler.alphas_cumprod[t]**0.5,\n                    dtype=torch.float32)\n                sigma = torch.tensor(\n                    (1 - diffusion_scheduler.alphas_cumprod[t])**0.5,\n                    dtype=torch.float32)\n                cosine_t = alpha_sigma_to_t(alpha, sigma).to(x.device)\n                model_output = secondary_model(\n                    x, cosine_t[None].repeat([x.shape[0]]))\n                pred_original_sample = model_output['pred']\n            else:\n                model_output = model(x, t)['sample']\n                model_output, predicted_variance = torch.split(\n                    model_output, x.shape[1], dim=1)\n                alpha_prod_t = 1 - beta_prod_t\n                pred_original_sample = (x - beta_prod_t**(0.5) *\n                                        model_output) / alpha_prod_t**(0.5)\n            # fac = diffusion_scheduler_output['beta_prod_t']** (0.5)\n            # x_in = diffusion_scheduler_output['original_sample'] * fac + x * (1 - fac) # noqa\n            fac = beta_prod_t**(0.5)\n            x_in = pred_original_sample * fac + x * (1 - fac)\n            x_in_grad = torch.zeros_like(x_in)\n            for model_stat in model_stats:\n                for i in range(cutn_batches):\n                    t_int = int(t.item()) + 1\n                    try:\n                        input_resolution = model_stat[\n                            'clip_model'].model.visual.input_resolution\n                    except AttributeError:\n                        input_resolution = 224\n\n                    cuts = MakeCutoutsDango(\n                        input_resolution,\n                        Overview=cut_overview[1000 - t_int],\n                        InnerCrop=cut_innercut[1000 - t_int],\n                        IC_Size_Pow=cut_ic_pow[1000 - t_int],\n                        IC_Grey_P=cut_icgray_p[1000 - t_int])\n                    clip_in = normalize(cuts(x_in.add(1).div(2)))\n                    image_embeds = model_stat['clip_model'].model.encode_image(\n                        clip_in).float()\n                    dists = spherical_dist_loss(\n                        image_embeds.unsqueeze(1),\n                        model_stat['target_embeds'].unsqueeze(0))\n                    dists = dists.view([\n                        cut_overview[1000 - t_int] +\n                        cut_innercut[1000 - t_int], n, -1\n                    ])\n                    losses = dists.mul(model_stat['weights']).sum(2).mean(0)\n                    x_in_grad += torch.autograd.grad(\n                        losses.sum() * clip_guidance_scale,\n                        x_in)[0] / cutn_batches\n            tv_losses = tv_loss(x_in)\n            range_losses = range_loss(pred_original_sample)\n            sat_losses = torch.abs(x_in - x_in.clamp(min=-1, max=1)).mean()\n            loss = tv_losses.sum() * tv_scale + range_losses.sum(\n            ) * range_scale + sat_losses.sum() * sat_scale\n            if init_image is not None and init_scale:\n                init_losses = self.lpips_model(x_in, init_image)\n                loss = loss + init_losses.sum() * init_scale\n            x_in_grad += torch.autograd.grad(loss, x_in)[0]\n            if not torch.isnan(x_in_grad).any():\n                grad = -torch.autograd.grad(x_in, x, x_in_grad)[0]\n            else:\n                x_is_NaN = True\n                grad = torch.zeros_like(x)\n        if clamp_grad and not x_is_NaN:\n            magnitude = grad.square().mean().sqrt()\n            return grad * magnitude.clamp(max=clamp_max) / magnitude\n        return grad\n\n    @property\n    def device(self):\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    def forward(self, x):\n        \"\"\"forward function.\"\"\"\n        raise NotImplementedError('No forward function for disco guider')\n"
  },
  {
    "path": "mmagic/models/editors/disco_diffusion/secondary_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom functools import partial\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\n\n# Note: This model is copied from Disco-Diffusion colab.\n# SourceCode: https://colab.research.google.com/drive/1uGKaBOEACeinAA7jX1_zSFtj_ZW-huHS#scrollTo=XIqUfrmvLIhg # noqa\n\n\ndef append_dims(x, n):\n    \"\"\"Append dims.\"\"\"\n    return x[(Ellipsis, *(None, ) * (n - x.ndim))]\n\n\ndef expand_to_planes(x, shape):\n    \"\"\"Expand tensor to planes.\"\"\"\n    return append_dims(x, len(shape)).repeat([1, 1, *shape[2:]])\n\n\ndef alpha_sigma_to_t(alpha, sigma):\n    \"\"\"convert alpha&sigma to timestep.\"\"\"\n    return torch.atan2(sigma, alpha) * 2 / math.pi\n\n\ndef t_to_alpha_sigma(t):\n    \"\"\"convert timestep to alpha and sigma.\"\"\"\n    return torch.cos(t * math.pi / 2), torch.sin(t * math.pi / 2)\n\n\nclass ConvBlock(nn.Sequential):\n    \"\"\"Convolution Block.\n\n    Args:\n        c_in (int): Input channels.\n        c_out (int): Output channels.\n    \"\"\"\n\n    def __init__(self, c_in, c_out):\n        super().__init__(\n            nn.Conv2d(c_in, c_out, 3, padding=1),\n            nn.ReLU(inplace=True),\n        )\n\n\nclass SkipBlock(nn.Module):\n    \"\"\"Skip block wrapper. Wrapping main block and skip block and concat their\n    outputs together.\n\n    Args:\n        main (list): A list of main modules.\n        skip (nn.Module): Skip Module. If not given,\n            set to ``nn.Identity()``. Defaults to None.\n    \"\"\"\n\n    def __init__(self, main, skip=None):\n        super().__init__()\n        self.main = nn.Sequential(*main)\n        self.skip = skip if skip else nn.Identity()\n\n    def forward(self, input):\n        \"\"\"Forward function.\"\"\"\n        return torch.cat([self.main(input), self.skip(input)], dim=1)\n\n\nclass FourierFeatures(nn.Module):\n    \"\"\"Fourier features mapping MLP.\n\n    Args:\n        in_features (int): Input channels.\n        out_features (int): Output channels.\n        std (float): Standard deviation. Defaults to 1..\n    \"\"\"\n\n    def __init__(self, in_features, out_features, std=1.):\n        super().__init__()\n        assert out_features % 2 == 0\n        self.weight = nn.Parameter(\n            torch.randn([out_features // 2, in_features]) * std)\n\n    def forward(self, input):\n        \"\"\"Forward function.\"\"\"\n        f = 2 * math.pi * input @ self.weight.T\n        return torch.cat([f.cos(), f.sin()], dim=-1)\n\n\n@MODELS.register_module()\nclass SecondaryDiffusionImageNet2(nn.Module):\n    \"\"\"A smaller secondary diffusion model trained by Katherine Crowson to\n    remove noise from intermediate timesteps to prepare them for CLIP.\n\n    Ref: https://twitter.com/rivershavewings/status/1462859669454536711 # noqa\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.in_channels = 3\n        c = 64  # The base channel count\n        cs = [c, c * 2, c * 2, c * 4, c * 4, c * 8]\n\n        self.timestep_embed = FourierFeatures(1, 16)\n        self.down = nn.AvgPool2d(2)\n        self.up = nn.Upsample(\n            scale_factor=2, mode='bilinear', align_corners=False)\n\n        self.net = nn.Sequential(\n            ConvBlock(3 + 16, cs[0]),\n            ConvBlock(cs[0], cs[0]),\n            SkipBlock([\n                self.down,\n                ConvBlock(cs[0], cs[1]),\n                ConvBlock(cs[1], cs[1]),\n                SkipBlock([\n                    self.down,\n                    ConvBlock(cs[1], cs[2]),\n                    ConvBlock(cs[2], cs[2]),\n                    SkipBlock([\n                        self.down,\n                        ConvBlock(cs[2], cs[3]),\n                        ConvBlock(cs[3], cs[3]),\n                        SkipBlock([\n                            self.down,\n                            ConvBlock(cs[3], cs[4]),\n                            ConvBlock(cs[4], cs[4]),\n                            SkipBlock([\n                                self.down,\n                                ConvBlock(cs[4], cs[5]),\n                                ConvBlock(cs[5], cs[5]),\n                                ConvBlock(cs[5], cs[5]),\n                                ConvBlock(cs[5], cs[4]),\n                                self.up,\n                            ]),\n                            ConvBlock(cs[4] * 2, cs[4]),\n                            ConvBlock(cs[4], cs[3]),\n                            self.up,\n                        ]),\n                        ConvBlock(cs[3] * 2, cs[3]),\n                        ConvBlock(cs[3], cs[2]),\n                        self.up,\n                    ]),\n                    ConvBlock(cs[2] * 2, cs[2]),\n                    ConvBlock(cs[2], cs[1]),\n                    self.up,\n                ]),\n                ConvBlock(cs[1] * 2, cs[1]),\n                ConvBlock(cs[1], cs[0]),\n                self.up,\n            ]),\n            ConvBlock(cs[0] * 2, cs[0]),\n            nn.Conv2d(cs[0], 3, 3, padding=1),\n        )\n\n    def forward(self, input, t):\n        \"\"\"Forward function.\"\"\"\n        timestep_embed = expand_to_planes(\n            self.timestep_embed(t[:, None]), input.shape)\n        v = self.net(torch.cat([input, timestep_embed], dim=1))\n        alphas, sigmas = map(\n            partial(append_dims, n=v.ndim), t_to_alpha_sigma(t))\n        pred = input * alphas - v * sigmas\n        eps = input * sigmas + v * alphas\n        return dict(v=v, pred=pred, eps=eps)\n"
  },
  {
    "path": "mmagic/models/editors/dreambooth/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .dreambooth import DreamBooth\n\n__all__ = ['DreamBooth']\n"
  },
  {
    "path": "mmagic/models/editors/dreambooth/dreambooth.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\n\nfrom mmagic.models.archs import set_lora\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ..stable_diffusion.stable_diffusion import StableDiffusion\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass DreamBooth(StableDiffusion):\n    \"\"\"Implementation of `DreamBooth with Stable Diffusion.\n\n    <https://arxiv.org/abs/2208.12242>`_ (DreamBooth).\n\n    Args:\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        lora_config (dict, optional): The config for LoRA finetuning. Defaults\n            to None.\n        val_prompts (Union[str, List[str]], optional): The prompts for\n            validation. Defaults to None.\n        class_prior_prompt (str, optional): The prompt for class prior loss.\n        num_class_images (int, optional): The number of images for class prior.\n            Defaults to 3.\n        prior_loss_weight (float, optional): The weight for class prior loss.\n            Defaults to 0.\n        finetune_text_encoder (bool, optional): Whether to fine-tune text\n            encoder. Defaults to False.\n        dtype (str, optional): The dtype for the model. Defaults to 'fp16'.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise  # noqa\n            Defaults to 0.\n        tomesd_cfg (dict, optional): The config for TOMESD. Please refers to\n            https://github.com/dbolya/tomesd and\n            https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/utils/tome_utils.py for detail.  # noqa\n            Defaults to None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Defaults to\n                dict(type='DataPreprocessor').\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Defaults to None/\n    \"\"\"\n\n    def __init__(self,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 lora_config: Optional[dict] = None,\n                 val_prompts: Union[str, List[str]] = None,\n                 class_prior_prompt: Optional[str] = None,\n                 num_class_images: Optional[int] = 3,\n                 prior_loss_weight: float = 0,\n                 finetune_text_encoder: bool = False,\n                 dtype: str = 'fp16',\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None):\n\n        super().__init__(vae, text_encoder, tokenizer, unet, scheduler,\n                         test_scheduler, dtype, enable_xformers,\n                         noise_offset_weight, tomesd_cfg, data_preprocessor,\n                         init_cfg)\n        self.num_class_images = num_class_images\n        self.class_prior_prompt = class_prior_prompt\n        self.prior_loss_weight = prior_loss_weight\n        self.class_images = []\n\n        self.dtype = torch.float32\n        if dtype == 'fp16':\n            self.dtype = torch.float16\n        elif dtype == 'bf16':\n            self.dtype = torch.bfloat16\n        else:\n            assert dtype in [\n                'fp32', None\n            ], ('dtype must be one of \\'fp32\\', \\'fp16\\', \\'bf16\\' or None.')\n\n        self.finetune_text_encoder = finetune_text_encoder\n        self.val_prompts = val_prompts\n        self.lora_config = deepcopy(lora_config)\n\n        self.prepare_model()\n        self.set_lora()\n\n    @torch.no_grad()\n    def generate_class_prior_images(self, num_batches=None):\n        \"\"\"Generate images for class prior loss.\n\n        Args:\n            num_batches (int): Number of batches to generate images.\n                If not passed, all images will be generated in one\n                forward. Defaults to None.\n        \"\"\"\n        if self.prior_loss_weight == 0:\n            return\n        if self.class_images:\n            return\n\n        assert self.class_prior_prompt is not None, (\n            '\\'class_prior_prompt\\' must be set when \\'prior_loss_weight\\' is '\n            'larger than 0.')\n        assert self.num_class_images is not None, (\n            '\\'num_class_images\\' must be set when \\'prior_loss_weight\\' is '\n            'larger than 0.')\n\n        print_log(\n            'Generating class prior images with prompt: '\n            f'{self.class_prior_prompt}', 'current')\n        num_batches = num_batches or self.num_class_images\n\n        unet_dtype = next(self.unet.parameters()).dtype\n        self.unet.to(self.dtype)\n        for idx in range(0, self.num_class_images, num_batches):\n            prompt = self.class_prior_prompt\n            if self.num_class_images > 1:\n                prompt += f' {idx + 1} of {self.num_class_images}'\n\n            output = self.infer(prompt, return_type='tensor')\n            samples = output['samples']\n            self.class_images.append(samples.clamp(-1, 1))\n        self.unet.to(unet_dtype)\n\n    def prepare_model(self):\n        \"\"\"Prepare model for training.\n\n        Move model to target dtype and disable gradient for some models.\n        \"\"\"\n        self.vae.requires_grad_(False)\n        print_log('Set VAE untrainable.', 'current')\n        self.vae.to(self.dtype)\n        print_log(f'Move VAE to {self.dtype}.', 'current')\n        if not self.finetune_text_encoder or self.lora_config:\n            self.text_encoder.requires_grad_(False)\n            print_log('Set Text Encoder untrainable.', 'current')\n            self.text_encoder.to(self.dtype)\n            print_log(f'Move Text Encoder to {self.dtype}.', 'current')\n        if self.lora_config:\n            self.unet.requires_grad_(False)\n            print_log('Set Unet untrainable.', 'current')\n\n    def set_lora(self):\n        \"\"\"Set LORA for model.\"\"\"\n        if self.lora_config:\n            set_lora(self.unet, self.lora_config)\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        data_samples = data['data_samples']\n        if self.val_prompts is None:\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples.split() * len(prompt)\n            data_samples = DataSample.stack(data_samples.split() * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        if self.val_prompts is None:\n            data = self.data_preprocessor(data)\n            data_samples = data['data_samples']\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples = DataSample.stack(data['data_samples'] * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    def train_step(self, data, optim_wrapper):\n\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n\n        with optim_wrapper.optim_context(self.unet):\n            image = inputs  # image for new concept\n            prompt = data_samples.prompt\n            num_batches = image.shape[0]\n\n            if self.prior_loss_weight != 0:\n                # image and prompt for prior preservation\n                self.generate_class_prior_images(num_batches=num_batches)\n                class_images_used = []\n                for _ in range(num_batches):\n                    idx = random.randint(0, len(self.class_images) - 1)\n                    class_images_used.append(self.class_images[idx])\n\n                image = torch.cat([image, *class_images_used], dim=0)\n                prompt = prompt + [self.class_prior_prompt]\n\n            image = image.to(self.dtype)\n            latents = self.vae.encode(image).latent_dist.sample()\n            latents = latents * self.vae.config.scaling_factor\n\n            noise = torch.randn_like(latents)\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n\n            noisy_latents = self.scheduler.add_noise(latents, noise, timesteps)\n\n            input_ids = self.tokenizer(\n                prompt,\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n\n            encoder_hidden_states = self.text_encoder(input_ids)[0]\n\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            # NOTE: we train unet in fp32, convert to float manually\n            model_output = self.unet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float())\n            model_pred = model_output['sample']\n\n            loss_dict = dict()\n            if self.prior_loss_weight != 0:\n                model_pred, prior_pred = model_pred.split(2, dim=1)\n                gt, prior_gt = gt.split(2, dim=1)\n                # calculate loss in FP32\n                dreambooth_loss = F.mse_loss(model_pred.float(), gt.float())\n                prior_loss = F.mse_loss(prior_pred.float(), prior_gt.float())\n                loss_dict['dreambooth_loss'] = dreambooth_loss\n                loss_dict['prior_loss'] = prior_loss * self.prior_loss_weight\n\n            else:\n                # calculate loss in FP32\n                dreambooth_loss = F.mse_loss(model_pred.float(), gt.float())\n                loss_dict['dreambooth_loss'] = dreambooth_loss\n\n            parsed_loss, log_vars = self.parse_losses(loss_dict)\n            optim_wrapper.update_params(parsed_loss)\n\n        return log_vars\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[list] = None,\n                mode: str = 'tensor') -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n"
  },
  {
    "path": "mmagic/models/editors/duf/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .duf import DynamicUpsamplingFilter\n\n__all__ = ['DynamicUpsamplingFilter']\n"
  },
  {
    "path": "mmagic/models/editors/duf/duf.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\n\nclass DynamicUpsamplingFilter(BaseModule):\n    \"\"\"Dynamic upsampling filter used in DUF.\n\n    Ref: https://github.com/yhjo09/VSR-DUF.\n    It only supports input with 3 channels. And it applies the same filters\n    to 3 channels.\n\n    Args:\n        filter_size (tuple): Filter size of generated filters.\n            The shape is (kh, kw). Default: (5, 5).\n    \"\"\"\n\n    def __init__(self, filter_size=(5, 5)):\n        super().__init__()\n        if not isinstance(filter_size, tuple):\n            raise TypeError('The type of filter_size must be tuple, '\n                            f'but got type{filter_size}')\n        if len(filter_size) != 2:\n            raise ValueError('The length of filter size must be 2, '\n                             f'but got {len(filter_size)}.')\n        # generate a local expansion filter, similar to im2col\n        self.filter_size = filter_size\n        filter_prod = np.prod(filter_size)\n        expansion_filter = torch.eye(int(filter_prod)).view(\n            filter_prod, 1, *filter_size)  # (kh*kw, 1, kh, kw)\n        self.expansion_filter = expansion_filter.repeat(\n            3, 1, 1, 1)  # repeat for all the 3 channels\n\n    def forward(self, x, filters):\n        \"\"\"Forward function for DynamicUpsamplingFilter.\n\n        Args:\n            x (Tensor): Input image with 3 channels. The shape is (n, 3, h, w).\n            filters (Tensor): Generated dynamic filters.\n                The shape is (n, filter_prod, upsampling_square, h, w).\n                filter_prod: prod of filter kernel size, e.g., 1*5*5=25.\n                upsampling_square: similar to pixel shuffle,\n                    upsampling_square = upsampling * upsampling\n                    e.g., for x 4 upsampling, upsampling_square= 4*4 = 16\n\n        Returns:\n            Tensor: Filtered image with shape (n, 3*upsampling, h, w)\n        \"\"\"\n        n, filter_prod, upsampling_square, h, w = filters.size()\n        kh, kw = self.filter_size\n        expanded_input = F.conv2d(\n            x,\n            self.expansion_filter.to(x),\n            padding=(kh // 2, kw // 2),\n            groups=3)  # (n, 3*filter_prod, h, w)\n        expanded_input = expanded_input.view(n, 3, filter_prod, h, w).permute(\n            0, 3, 4, 1, 2)  # (n, h, w, 3, filter_prod)\n        filters = filters.permute(\n            0, 3, 4, 1, 2)  # (n, h, w, filter_prod, upsampling_square]\n        out = torch.matmul(expanded_input,\n                           filters)  # (n, h, w, 3, upsampling_square)\n        return out.permute(0, 3, 4, 1, 2).view(n, 3 * upsampling_square, h, w)\n"
  },
  {
    "path": "mmagic/models/editors/edsr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .edsr_net import EDSRNet\n\n__all__ = ['EDSRNet']\n"
  },
  {
    "path": "mmagic/models/editors/edsr/edsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass EDSRNet(BaseModule):\n    \"\"\"EDSR network structure.\n\n    Paper: Enhanced Deep Residual Networks for Single Image Super-Resolution.\n    Ref repo: https://github.com/thstkdgus35/EDSR-PyTorch\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_blocks (int): Block number in the trunk network. Default: 16.\n        upscale_factor (int): Upsampling factor. Support 2^n and 3.\n            Default: 4.\n        res_scale (float): Used to scale the residual in residual block.\n            Default: 1.\n        rgb_mean (list[float]): Image mean in RGB orders.\n            Default: [0.4488, 0.4371, 0.4040], calculated from DIV2K dataset.\n        rgb_std (list[float]): Image std in RGB orders. In EDSR, it uses\n            [1.0, 1.0, 1.0]. Default: [1.0, 1.0, 1.0].\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=16,\n                 upscale_factor=4,\n                 res_scale=1,\n                 rgb_mean=[0.4488, 0.4371, 0.4040],\n                 rgb_std=[1.0, 1.0, 1.0]):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.mid_channels = mid_channels\n        self.num_blocks = num_blocks\n        self.upscale_factor = upscale_factor\n\n        self.mean = torch.Tensor(rgb_mean).view(1, -1, 1, 1)\n        self.std = torch.Tensor(rgb_std).view(1, -1, 1, 1)\n\n        self.conv_first = nn.Conv2d(in_channels, mid_channels, 3, padding=1)\n        self.body = make_layer(\n            ResidualBlockNoBN,\n            num_blocks,\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n        self.conv_after_body = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n        self.upsample = UpsampleModule(upscale_factor, mid_channels)\n        self.conv_last = nn.Conv2d(\n            mid_channels, out_channels, 3, 1, 1, bias=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        self.mean = self.mean.to(x)\n        self.std = self.std.to(x)\n\n        x = (x - self.mean) / self.std\n        x = self.conv_first(x)\n        res = self.conv_after_body(self.body(x))\n        res += x\n\n        x = self.conv_last(self.upsample(res))\n        x = x * self.std + self.mean\n\n        return x\n\n\nclass UpsampleModule(nn.Sequential):\n    \"\"\"Upsample module used in EDSR.\n\n    Args:\n        scale (int): Scale factor. Supported scales: 2^n and 3.\n        mid_channels (int): Channel number of intermediate features.\n    \"\"\"\n\n    def __init__(self, scale, mid_channels):\n        modules = []\n        if (scale & (scale - 1)) == 0:  # scale = 2^n\n            for _ in range(int(math.log(scale, 2))):\n                modules.append(\n                    PixelShufflePack(\n                        mid_channels, mid_channels, 2, upsample_kernel=3))\n        elif scale == 3:\n            modules.append(\n                PixelShufflePack(\n                    mid_channels, mid_channels, scale, upsample_kernel=3))\n        else:\n            raise ValueError(f'scale {scale} is not supported. '\n                             'Supported scales: 2^n and 3.')\n\n        super().__init__(*modules)\n"
  },
  {
    "path": "mmagic/models/editors/edvr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .edvr import EDVR\nfrom .edvr_net import EDVRNet\n\n__all__ = ['EDVR', 'EDVRNet']\n"
  },
  {
    "path": "mmagic/models/editors/edvr/edvr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models import BaseEditModel\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass EDVR(BaseEditModel):\n    \"\"\"EDVR model for video super-resolution.\n\n    EDVR: Video Restoration with Enhanced Deformable Convolutional Networks.\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.with_tsa = generator.get('with_tsa', False)\n        self.tsa_iter = self.train_cfg.get('tsa_iter',\n                                           None) if self.train_cfg else None\n        self.register_buffer('step_counter', torch.tensor(0), False)\n\n    def forward_train(self, inputs, data_samples=None):\n        \"\"\"Forward training. Returns dict of losses of training.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        if self.step_counter == 0 and self.with_tsa:\n            if self.tsa_iter is None:\n                raise KeyError(\n                    'In TSA mode, train_cfg must contain \"tsa_iter\".')\n            # only train TSA module at the beginning if with TSA module\n            for k, v in self.generator.named_parameters():\n                if 'fusion' not in k:\n                    v.requires_grad = False\n\n        if self.with_tsa and (self.step_counter == self.tsa_iter):\n            # train all the parameters\n            for v in self.generator.parameters():\n                v.requires_grad = True\n        self.step_counter += 1\n\n        return super().forward_train(inputs, data_samples)\n"
  },
  {
    "path": "mmagic/models/editors/edvr/edvr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmcv.ops import ModulatedDeformConv2d, modulated_deform_conv2d\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init, kaiming_init\nfrom torch.nn.modules.utils import _pair\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass EDVRNet(BaseModule):\n    \"\"\"EDVR network structure for video super-resolution.\n\n    Now only support X4 upsampling factor.\n    Paper:\n    EDVR: Video Restoration with Enhanced Deformable Convolutional Networks.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_frames (int): Number of input frames. Default: 5.\n        deform_groups (int): Deformable groups. Defaults: 8.\n        num_blocks_extraction (int): Number of blocks for feature extraction.\n            Default: 5.\n        num_blocks_reconstruction (int): Number of blocks for reconstruction.\n            Default: 10.\n        center_frame_idx (int): The index of center frame. Frame counting from\n            0. Default: 2.\n        with_tsa (bool): Whether to use TSA module. Default: True.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_frames=5,\n                 deform_groups=8,\n                 num_blocks_extraction=5,\n                 num_blocks_reconstruction=10,\n                 center_frame_idx=2,\n                 with_tsa=True,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.center_frame_idx = center_frame_idx\n        self.with_tsa = with_tsa\n        act_cfg = dict(type='LeakyReLU', negative_slope=0.1)\n\n        self.conv_first = nn.Conv2d(in_channels, mid_channels, 3, 1, 1)\n        self.feature_extraction = make_layer(\n            ResidualBlockNoBN,\n            num_blocks_extraction,\n            mid_channels=mid_channels)\n\n        # generate pyramid features\n        self.feat_l2_conv1 = ConvModule(\n            mid_channels, mid_channels, 3, 2, 1, act_cfg=act_cfg)\n        self.feat_l2_conv2 = ConvModule(\n            mid_channels, mid_channels, 3, 1, 1, act_cfg=act_cfg)\n        self.feat_l3_conv1 = ConvModule(\n            mid_channels, mid_channels, 3, 2, 1, act_cfg=act_cfg)\n        self.feat_l3_conv2 = ConvModule(\n            mid_channels, mid_channels, 3, 1, 1, act_cfg=act_cfg)\n        # pcd alignment\n        self.pcd_alignment = PCDAlignment(\n            mid_channels=mid_channels, deform_groups=deform_groups)\n        # fusion\n        if self.with_tsa:\n            self.fusion = TSAFusion(\n                mid_channels=mid_channels,\n                num_frames=num_frames,\n                center_frame_idx=self.center_frame_idx)\n        else:\n            self.fusion = nn.Conv2d(num_frames * mid_channels, mid_channels, 1,\n                                    1)\n\n        # reconstruction\n        self.reconstruction = make_layer(\n            ResidualBlockNoBN,\n            num_blocks_reconstruction,\n            mid_channels=mid_channels)\n        # upsample\n        self.upsample1 = PixelShufflePack(\n            mid_channels, mid_channels, 2, upsample_kernel=3)\n        self.upsample2 = PixelShufflePack(\n            mid_channels, 64, 2, upsample_kernel=3)\n        # we fix the output channels in the last few layers to 64.\n        self.conv_hr = nn.Conv2d(64, 64, 3, 1, 1)\n        self.conv_last = nn.Conv2d(64, out_channels, 3, 1, 1)\n        self.img_upsample = nn.Upsample(\n            scale_factor=4, mode='bilinear', align_corners=False)\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n    def forward(self, x):\n        \"\"\"Forward function for EDVRNet.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, t, c, h, w).\n\n        Returns:\n            Tensor: SR center frame with shape (n, c, h, w).\n        \"\"\"\n        n, t, c, h, w = x.size()\n        assert h % 4 == 0 and w % 4 == 0, (\n            'The height and width of inputs should be a multiple of 4, '\n            f'but got {h} and {w}.')\n\n        x_center = x[:, self.center_frame_idx, :, :, :].contiguous()\n\n        # extract LR features\n        # L1\n        l1_feat = self.lrelu(self.conv_first(x.view(-1, c, h, w)))\n        l1_feat = self.feature_extraction(l1_feat)\n        # L2\n        l2_feat = self.feat_l2_conv2(self.feat_l2_conv1(l1_feat))\n        # L3\n        l3_feat = self.feat_l3_conv2(self.feat_l3_conv1(l2_feat))\n\n        l1_feat = l1_feat.view(n, t, -1, h, w)\n        l2_feat = l2_feat.view(n, t, -1, h // 2, w // 2)\n        l3_feat = l3_feat.view(n, t, -1, h // 4, w // 4)\n\n        # pcd alignment\n        ref_feats = [  # reference feature list\n            l1_feat[:, self.center_frame_idx, :, :, :].clone(),\n            l2_feat[:, self.center_frame_idx, :, :, :].clone(),\n            l3_feat[:, self.center_frame_idx, :, :, :].clone()\n        ]\n        aligned_feat = []\n        for i in range(t):\n            neighbor_feats = [\n                l1_feat[:, i, :, :, :].clone(), l2_feat[:, i, :, :, :].clone(),\n                l3_feat[:, i, :, :, :].clone()\n            ]\n            aligned_feat.append(self.pcd_alignment(neighbor_feats, ref_feats))\n        aligned_feat = torch.stack(aligned_feat, dim=1)  # (n, t, c, h, w)\n\n        if self.with_tsa:\n            feat = self.fusion(aligned_feat)\n        else:\n            aligned_feat = aligned_feat.view(n, -1, h, w)\n            feat = self.fusion(aligned_feat)\n\n        # reconstruction\n        out = self.reconstruction(feat)\n        out = self.lrelu(self.upsample1(out))\n        out = self.lrelu(self.upsample2(out))\n        out = self.lrelu(self.conv_hr(out))\n        out = self.conv_last(out)\n        base = self.img_upsample(x_center)\n        out += base\n        return out\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n\n        super().init_weights()\n\n        init_type = None if self.init_cfg is None else self.init_cfg.get(\n            'type', None)\n        if init_type != 'Pretrained' and self.with_tsa:\n            for module in [\n                    self.fusion.feat_fusion, self.fusion.spatial_attn1,\n                    self.fusion.spatial_attn2, self.fusion.spatial_attn3,\n                    self.fusion.spatial_attn4, self.fusion.spatial_attn_l1,\n                    self.fusion.spatial_attn_l2, self.fusion.spatial_attn_l3,\n                    self.fusion.spatial_attn_add1\n            ]:\n                kaiming_init(\n                    module.conv,\n                    a=0.1,\n                    mode='fan_out',\n                    nonlinearity='leaky_relu',\n                    bias=0,\n                    distribution='uniform')\n\n\nclass ModulatedDCNPack(ModulatedDeformConv2d):\n    \"\"\"Modulated Deformable Convolutional Pack.\n\n    Different from the official DCN, which generates offsets and masks from\n    the preceding features, this ModulatedDCNPack takes another different\n    feature to generate masks and offsets.\n\n    Args:\n        in_channels (int): Same as nn.Conv2d.\n        out_channels (int): Same as nn.Conv2d.\n        kernel_size (int or tuple[int]): Same as nn.Conv2d.\n        stride (int or tuple[int]): Same as nn.Conv2d.\n        padding (int or tuple[int]): Same as nn.Conv2d.\n        dilation (int or tuple[int]): Same as nn.Conv2d.\n        groups (int): Same as nn.Conv2d.\n        bias (bool or str): If specified as `auto`, it will be decided by the\n            norm_cfg. Bias will be set as True if norm_cfg is None, otherwise\n            False.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        self.conv_offset = nn.Conv2d(\n            self.in_channels,\n            self.deform_groups * 3 * self.kernel_size[0] * self.kernel_size[1],\n            kernel_size=self.kernel_size,\n            stride=_pair(self.stride),\n            padding=_pair(self.padding),\n            bias=True)\n        self.init_offset()\n\n    def init_offset(self):\n        \"\"\"Init constant offset.\"\"\"\n        constant_init(self.conv_offset, val=0, bias=0)\n\n    def forward(self, x, extra_feat):\n        \"\"\"Forward function.\"\"\"\n        out = self.conv_offset(extra_feat)\n        o1, o2, mask = torch.chunk(out, 3, dim=1)\n        offset = torch.cat((o1, o2), dim=1)\n        mask = torch.sigmoid(mask)\n        return modulated_deform_conv2d(x, offset, mask, self.weight, self.bias,\n                                       self.stride, self.padding,\n                                       self.dilation, self.groups,\n                                       self.deform_groups)\n\n\nclass PCDAlignment(BaseModule):\n    \"\"\"Alignment module using Pyramid, Cascading and Deformable convolution\n    (PCD). It is used in EDVRNet.\n\n    Args:\n        mid_channels (int): Number of the channels of middle features.\n            Default: 64.\n        deform_groups (int): Deformable groups. Defaults: 8.\n        act_cfg (dict): Activation function config for ConvModule.\n            Default: LeakyReLU with negative_slope=0.1.\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels=64,\n                 deform_groups=8,\n                 act_cfg=dict(type='LeakyReLU', negative_slope=0.1)):\n        super().__init__()\n\n        # Pyramid has three levels:\n        # L3: level 3, 1/4 spatial size\n        # L2: level 2, 1/2 spatial size\n        # L1: level 1, original spatial size\n        self.offset_conv1 = nn.ModuleDict()\n        self.offset_conv2 = nn.ModuleDict()\n        self.offset_conv3 = nn.ModuleDict()\n        self.dcn_pack = nn.ModuleDict()\n        self.feat_conv = nn.ModuleDict()\n        for i in range(3, 0, -1):\n            level = f'l{i}'\n            self.offset_conv1[level] = ConvModule(\n                mid_channels * 2, mid_channels, 3, padding=1, act_cfg=act_cfg)\n            if i == 3:\n                self.offset_conv2[level] = ConvModule(\n                    mid_channels, mid_channels, 3, padding=1, act_cfg=act_cfg)\n            else:\n                self.offset_conv2[level] = ConvModule(\n                    mid_channels * 2,\n                    mid_channels,\n                    3,\n                    padding=1,\n                    act_cfg=act_cfg)\n                self.offset_conv3[level] = ConvModule(\n                    mid_channels, mid_channels, 3, padding=1, act_cfg=act_cfg)\n            self.dcn_pack[level] = ModulatedDCNPack(\n                mid_channels,\n                mid_channels,\n                3,\n                padding=1,\n                deform_groups=deform_groups)\n\n            if i < 3:\n                act_cfg_ = act_cfg if i == 2 else None\n                self.feat_conv[level] = ConvModule(\n                    mid_channels * 2,\n                    mid_channels,\n                    3,\n                    padding=1,\n                    act_cfg=act_cfg_)\n\n        # Cascading DCN\n        self.cas_offset_conv1 = ConvModule(\n            mid_channels * 2, mid_channels, 3, padding=1, act_cfg=act_cfg)\n        self.cas_offset_conv2 = ConvModule(\n            mid_channels, mid_channels, 3, padding=1, act_cfg=act_cfg)\n        self.cas_dcnpack = ModulatedDCNPack(\n            mid_channels,\n            mid_channels,\n            3,\n            padding=1,\n            deform_groups=deform_groups)\n\n        self.upsample = nn.Upsample(\n            scale_factor=2, mode='bilinear', align_corners=False)\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n    def forward(self, neighbor_feats, ref_feats):\n        \"\"\"Forward function for PCDAlignment.\n\n        Align neighboring frames to the reference frame in the feature level.\n\n        Args:\n            neighbor_feats (list[Tensor]): List of neighboring features. It\n                contains three pyramid levels (L1, L2, L3),\n                each with shape (n, c, h, w).\n            ref_feats (list[Tensor]): List of reference features. It\n                contains three pyramid levels (L1, L2, L3),\n                each with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Aligned features.\n        \"\"\"\n        # The number of pyramid levels is 3.\n        assert len(neighbor_feats) == 3 and len(ref_feats) == 3, (\n            'The length of neighbor_feats and ref_feats must be both 3, '\n            f'but got {len(neighbor_feats)} and {len(ref_feats)}')\n\n        # Pyramids\n        upsampled_offset, upsampled_feat = None, None\n        for i in range(3, 0, -1):\n            level = f'l{i}'\n            offset = torch.cat([neighbor_feats[i - 1], ref_feats[i - 1]],\n                               dim=1)\n            offset = self.offset_conv1[level](offset)\n            if i == 3:\n                offset = self.offset_conv2[level](offset)\n            else:\n                offset = self.offset_conv2[level](\n                    torch.cat([offset, upsampled_offset], dim=1))\n                offset = self.offset_conv3[level](offset)\n\n            feat = self.dcn_pack[level](neighbor_feats[i - 1], offset)\n            if i == 3:\n                feat = self.lrelu(feat)\n            else:\n                feat = self.feat_conv[level](\n                    torch.cat([feat, upsampled_feat], dim=1))\n\n            if i > 1:\n                # upsample offset and features\n                upsampled_offset = self.upsample(offset) * 2\n                upsampled_feat = self.upsample(feat)\n\n        # Cascading\n        offset = torch.cat([feat, ref_feats[0]], dim=1)\n        offset = self.cas_offset_conv2(self.cas_offset_conv1(offset))\n        feat = self.lrelu(self.cas_dcnpack(feat, offset))\n        return feat\n\n\nclass TSAFusion(BaseModule):\n    \"\"\"Temporal Spatial Attention (TSA) fusion module. It is used in EDVRNet.\n\n    Args:\n        mid_channels (int): Number of the channels of middle features.\n            Default: 64.\n        num_frames (int): Number of frames. Default: 5.\n        center_frame_idx (int): The index of center frame. Default: 2.\n        act_cfg (dict): Activation function config for ConvModule.\n            Default: LeakyReLU with negative_slope=0.1.\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels=64,\n                 num_frames=5,\n                 center_frame_idx=2,\n                 act_cfg=dict(type='LeakyReLU', negative_slope=0.1)):\n        super().__init__()\n        self.center_frame_idx = center_frame_idx\n        # temporal attention (before fusion conv)\n        self.temporal_attn1 = nn.Conv2d(\n            mid_channels, mid_channels, 3, padding=1)\n        self.temporal_attn2 = nn.Conv2d(\n            mid_channels, mid_channels, 3, padding=1)\n        self.feat_fusion = ConvModule(\n            num_frames * mid_channels, mid_channels, 1, act_cfg=act_cfg)\n\n        # spatial attention (after fusion conv)\n        self.max_pool = nn.MaxPool2d(3, stride=2, padding=1)\n        self.avg_pool = nn.AvgPool2d(3, stride=2, padding=1)\n        self.spatial_attn1 = ConvModule(\n            num_frames * mid_channels, mid_channels, 1, act_cfg=act_cfg)\n        self.spatial_attn2 = ConvModule(\n            mid_channels * 2, mid_channels, 1, act_cfg=act_cfg)\n        self.spatial_attn3 = ConvModule(\n            mid_channels, mid_channels, 3, padding=1, act_cfg=act_cfg)\n        self.spatial_attn4 = ConvModule(\n            mid_channels, mid_channels, 1, act_cfg=act_cfg)\n        self.spatial_attn5 = nn.Conv2d(\n            mid_channels, mid_channels, 3, padding=1)\n        self.spatial_attn_l1 = ConvModule(\n            mid_channels, mid_channels, 1, act_cfg=act_cfg)\n        self.spatial_attn_l2 = ConvModule(\n            mid_channels * 2, mid_channels, 3, padding=1, act_cfg=act_cfg)\n        self.spatial_attn_l3 = ConvModule(\n            mid_channels, mid_channels, 3, padding=1, act_cfg=act_cfg)\n        self.spatial_attn_add1 = ConvModule(\n            mid_channels, mid_channels, 1, act_cfg=act_cfg)\n        self.spatial_attn_add2 = nn.Conv2d(mid_channels, mid_channels, 1)\n\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n        self.upsample = nn.Upsample(\n            scale_factor=2, mode='bilinear', align_corners=False)\n\n    def forward(self, aligned_feat):\n        \"\"\"Forward function for TSAFusion.\n\n        Args:\n            aligned_feat (Tensor): Aligned features with shape (n, t, c, h, w).\n\n        Returns:\n            Tensor: Features after TSA with the shape (n, c, h, w).\n        \"\"\"\n        n, t, c, h, w = aligned_feat.size()\n        # temporal attention\n        embedding_ref = self.temporal_attn1(\n            aligned_feat[:, self.center_frame_idx, :, :, :].clone())\n        emb = self.temporal_attn2(aligned_feat.view(-1, c, h, w))\n        emb = emb.view(n, t, -1, h, w)  # (n, t, c, h, w)\n\n        corr_l = []  # correlation list\n        for i in range(t):\n            emb_neighbor = emb[:, i, :, :, :]\n            corr = torch.sum(emb_neighbor * embedding_ref, 1)  # (n, h, w)\n            corr_l.append(corr.unsqueeze(1))  # (n, 1, h, w)\n        corr_prob = torch.sigmoid(torch.cat(corr_l, dim=1))  # (n, t, h, w)\n        corr_prob = corr_prob.unsqueeze(2).expand(n, t, c, h, w)\n        corr_prob = corr_prob.contiguous().view(n, -1, h, w)  # (n, t*c, h, w)\n        aligned_feat = aligned_feat.view(n, -1, h, w) * corr_prob\n\n        # fusion\n        feat = self.feat_fusion(aligned_feat)\n\n        # spatial attention\n        attn = self.spatial_attn1(aligned_feat)\n        attn_max = self.max_pool(attn)\n        attn_avg = self.avg_pool(attn)\n        attn = self.spatial_attn2(torch.cat([attn_max, attn_avg], dim=1))\n        # pyramid levels\n        attn_level = self.spatial_attn_l1(attn)\n        attn_max = self.max_pool(attn_level)\n        attn_avg = self.avg_pool(attn_level)\n        attn_level = self.spatial_attn_l2(\n            torch.cat([attn_max, attn_avg], dim=1))\n        attn_level = self.spatial_attn_l3(attn_level)\n        attn_level = self.upsample(attn_level)\n\n        attn = self.spatial_attn3(attn) + attn_level\n        attn = self.spatial_attn4(attn)\n        attn = self.upsample(attn)\n        attn = self.spatial_attn5(attn)\n        attn_add = self.spatial_attn_add2(self.spatial_attn_add1(attn))\n        attn = torch.sigmoid(attn)\n\n        # after initialization, * 2 makes (attn * 2) to be close to 1.\n        feat = feat * attn * 2 + attn_add\n        return feat\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .camera import GaussianCamera, UniformCamera\nfrom .dual_discriminator import DualDiscriminator\nfrom .eg3d import EG3D\nfrom .eg3d_generator import TriplaneGenerator\n\n__all__ = [\n    'DualDiscriminator', 'TriplaneGenerator', 'EG3D', 'UniformCamera',\n    'GaussianCamera'\n]\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/camera.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import List, Optional, Union\n\nimport torch\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.utils import normalize_vecs\nfrom mmagic.registry import MODELS\n\nDeviceType = Optional[Union[str, int]]\nVectorType = Optional[Union[list, torch.Tensor]]\n\n\nclass BaseCamera(object):\n    \"\"\"Base camera class. Sample camera position on sphere with specific\n    distribution (e.g., Gaussian, Uniform) and return camera-to-world matrix\n    and intrinsics matrix.\n\n    Args:\n        horizontal_mean (Optional[float]): Mean of the horizontal range in\n            radian. Defaults to None.\n        vertical_mean (Optional[float]): Mean of the vertical range in radian.\n            Defaults to None.\n        horizontal_std (Optional[float]): Standard deviation of the horizontal\n            range in radian. Defaults to None.\n        vertical_std (Optional[float]): Standard deviation of the vertical\n            range in radian. Defaults to None.\n        look_at (Optional[List, torch.Tensor]): The look at position of the\n            camera. Defaults to None.\n        fov (Optional[float]): The FOV (field-of-view) in degree. Defaults\n            to None.\n        up (Optional[List, torch.Tensor]): The up direction of the world\n            coordinate. Defaults to None.\n        radius (Optional[float]): Radius of the sphere. Defaults to None.\n        sampling_strategy (Optional[str]): The sampling strategy (distribution)\n            of the camera. Support 'Uniform' and 'Gaussian'.\n            Defaults to 'Uniform'.\n    \"\"\"\n\n    def __init__(self,\n                 horizontal_mean: Optional[float] = None,\n                 vertical_mean: Optional[float] = None,\n                 horizontal_std: Optional[float] = 0,\n                 vertical_std: Optional[float] = 0,\n                 look_at: VectorType = [0, 0, 0],\n                 fov: Optional[float] = None,\n                 focal: Optional[float] = None,\n                 up: VectorType = [0, 1, 0],\n                 radius: Optional[float] = 1,\n                 sampling_strategy: str = 'uniform'):\n        super().__init__()\n        self.horizontal_mean = horizontal_mean\n        self.vertical_mean = vertical_mean\n        self.horizontal_std = horizontal_std\n        self.vertical_std = vertical_std\n        self.look_at = look_at\n        self.up = up\n        self.radius = radius\n        self.sampling_statregy = sampling_strategy\n\n        assert ((fov is None) or (focal is None)), (\n            '\\'fov\\' and \\'focal\\' should not be passed at the same time.')\n        self.fov = fov\n        self.focal = focal\n\n    def _sample_in_range(self, mean: float, std: float,\n                         batch_size: int) -> torch.Tensor:\n        \"\"\"Sample value with specific mean and std.\n\n        Args:\n            mean (float): Mean of the sampled value.\n            std (float): Standard deviation of the sampled value.\n            batch_size (int): The batch size of the sampled result.\n\n        Returns:\n            torch.Tensor: Sampled results.\n        \"\"\"\n        if self.sampling_statregy.upper() == 'UNIFORM':\n            return (torch.rand((batch_size, 1)) - 0.5) * 2 * std + mean\n        elif self.sampling_statregy.upper() == 'GAUSSIAN':\n            return torch.randn((batch_size, 1)) * std + mean\n        else:\n            raise ValueError(\n                'Only support \\'Uniform\\' sampling and \\'Gaussian\\' sampling '\n                'currently. If you want to implement your own sampling '\n                'method, you can overwrite \\'_sample_in_range\\' function by '\n                'yourself.')\n\n    def sample_intrinsic(self,\n                         fov: Optional[float] = None,\n                         focal: Optional[float] = None,\n                         device: Optional[DeviceType] = None,\n                         batch_size: int = 1) -> torch.Tensor:\n        \"\"\"Sample intrinsic matrix.\n\n        Args:\n            fov (Optional[float], optional): FOV (field of view) in degree. If\n                not passed, :attr:`self.fov` will be used. Defaults to None.\n            focal (Optional[float], optional): Focal in pixel. If\n                not passed, :attr:`self.focal` will be used. Defaults to None.\n            batch_size (int): The batch size of the output. Defaults to 1.\n            device (DeviceType, optional): Device to put the intrinsic\n                matrix. If not passed, :attr:`self.device` will be used.\n                Defaults to None.\n\n        Returns:\n            torch.Tensor: Intrinsic matrix.\n        \"\"\"\n        # 1. check if foc and focal is both passed\n        assert (fov is None) or (focal is None), (\n            '\\'fov\\' and focal should not be passed at the same time.')\n        # 2. if fov and focal is neither not passed, use initialized ones.\n        if fov is None and focal is None:\n            fov = self.fov if fov is None else fov\n            focal = self.focal if focal is None else focal\n\n        if fov is None and focal is None:\n            raise ValueError(\n                '\\'fov\\', \\'focal\\', \\'self.fov\\' and \\'self.focal\\' should '\n                'not be None neither.')\n\n        if fov is not None:\n            intrinstic = self.fov_to_intrinsic(fov, device)\n        else:\n            intrinstic = self.focal_to_instrinsic(focal, device)\n        return intrinstic[None, ...].repeat(batch_size, 1, 1)\n\n    def fov_to_intrinsic(self,\n                         fov: Optional[float] = None,\n                         device: DeviceType = None) -> torch.Tensor:\n        \"\"\"Calculate intrinsic matrix from FOV (field of view).\n\n        Args:\n            fov (Optional[float], optional): FOV (field of view) in degree. If\n                not passed, :attr:`self.fov` will be used. Defaults to None.\n            device (DeviceType, optional): Device to put the intrinsic\n                matrix. If not passed, :attr:`self.device` will be used.\n                Defaults to None.\n\n        Returns:\n            torch.Tensor: Intrinsic matrix.\n        \"\"\"\n        fov = self.fov if fov is None else fov\n        assert fov is not None, (\n            '\\'fov\\' and \\'self.fov\\' should not be None at the same time.')\n        # device = self.device if device is None else device\n        # NOTE: EG3D multiplies '1 / 1.414' as `image_width` to `focal`, we\n        # retain this operation\n        focal = float(1 / (math.tan(fov * math.pi / 360) * 1.414))\n        intrinsics = [[focal, 0, 0.5], [0, focal, 0.5], [0, 0, 1]]\n        intrinsics = torch.tensor(intrinsics, device=device)\n        return intrinsics\n\n    def focal_to_instrinsic(self,\n                            focal: Optional[float] = None,\n                            device: DeviceType = None) -> torch.Tensor:\n        \"\"\"Calculate intrinsic matrix from focal.\n\n        Args:\n            focal (Optional[float], optional): Focal in degree. If\n                not passed, :attr:`self.focal` will be used. Defaults to None.\n            device (DeviceType, optional): Device to put the intrinsic\n                matrix. If not passed, :attr:`self.device` will be used.\n                Defaults to None.\n\n        Returns:\n            torch.Tensor: Intrinsic matrix.\n        \"\"\"\n        focal = self.focal if focal is None else focal\n        assert focal is not None, (\n            '\\'focal\\' and \\'self.focal\\' should not be None at the '\n            'same time.')\n        # device = self.device if device is None else device\n        intrinsics = [[focal, 0, 0.5], [0, focal, 0.5], [0, 0, 1]]\n        intrinsics = torch.tensor(intrinsics, device=device)\n        return intrinsics\n\n    def sample_theta(self, mean: float, std: float,\n                     batch_size: int) -> torch.Tensor:\n        \"\"\"Sampling the theta (yaw).\n\n        Args:\n            mean (float): Mean of theta.\n            std (float): Standard deviation of theta.\n            batch_size (int): Target batch size of theta.\n\n        Returns:\n            torch.Tensor: Sampled theta.\n        \"\"\"\n        h = self._sample_in_range(mean, std, batch_size)\n        return h\n\n    def sample_phi(self, mean: float, std: float,\n                   batch_size: int) -> torch.Tensor:\n        \"\"\"Sampling the phi (pitch). Unlike sampling theta, we uniformly sample\n        phi on cosine space to release a spherical uniform sampling.\n\n        Args:\n            mean (float): Mean of phi.\n            std (float): Standard deviation of phi.\n            batch_size (int): Target batch size of phi.\n\n        Returns:\n            torch.Tensor: Sampled phi.\n        \"\"\"\n        v = self._sample_in_range(mean, std, batch_size)\n        v = torch.clamp(v, 1e-5, math.pi - 1e-5)\n\n        v = v / math.pi\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            import numpy as np\n            phi = torch.from_numpy(np.arccos((1 - 2 * v).numpy()))\n        else:\n            phi = torch.arccos(1 - 2 * v)\n        return phi\n\n    def sample_camera2world(self,\n                            h_mean: Optional[float] = None,\n                            v_mean: Optional[float] = None,\n                            h_std: Optional[float] = None,\n                            v_std: Optional[float] = None,\n                            look_at: VectorType = None,\n                            up: VectorType = None,\n                            radius: Optional[float] = None,\n                            batch_size: int = 1,\n                            device: Optional[str] = None) -> torch.Tensor:\n        \"\"\"Sample camera-to-world matrix with the passed condition.\n\n        Args:\n            h_mean (Optional[float], optional): Mean of horizontal range in\n                radian. Defaults to None.\n            v_mean (Optional[float], optional): Mean of vertical range in\n                radian. Defaults to None.\n            h_std (Optional[float], optional): Standard deviation of\n                horizontal in radian. Defaults to None.\n            v_std (Optional[float], optional): Standard deviation of\n                horizontal in radian. Defaults to None.\n            look_at (Optional[Tuple[list, torch.Tensor]], optional): Look-at\n                position. Defaults to None.\n            up (Optional[Tuple[list, torch.Tensor]], optional): Up direction\n                of the world coordinate. Defaults to None.\n            radius (Optional[float]): Radius of the sphere. Defaults to None.\n            batch_size (int, optional): Batch size of the results.\n                Defaults to 1.\n            device (Optional[str], optional): The target device of the results.\n                Defaults to None.\n\n        Returns:\n            torch.Tensor: Sampled camera-to-world matrix.\n        \"\"\"\n        # parse input\n        h_mean = self.horizontal_mean if h_mean is None else h_mean\n        v_mean = self.vertical_mean if v_mean is None else v_mean\n        h_std = self.horizontal_std if h_std is None else h_std\n        v_std = self.vertical_std if v_std is None else v_std\n        radius = self.radius if radius is None else radius\n        # device = self.device if device is None else device\n        look_at = self.look_at if look_at is None else look_at\n        if not isinstance(look_at, torch.FloatTensor):\n            look_at = torch.FloatTensor(look_at)\n        look_at = look_at.to(device)\n        up = self.up if up is None else up\n        if not isinstance(up, torch.FloatTensor):\n            up = torch.FloatTensor(up)\n        up = up.to(device)\n\n        # sample yaw and pitch\n        theta = self.sample_theta(h_mean, h_std, batch_size).to(device)\n        phi = self.sample_phi(v_mean, v_std, batch_size).to(device)\n        # construct camera origin\n        camera_origins = torch.zeros((batch_size, 3), device=device)\n\n        camera_origins[:, 0:1] = radius * torch.sin(phi) * torch.cos(math.pi -\n                                                                     theta)\n        camera_origins[:, 2:3] = radius * torch.sin(phi) * torch.sin(math.pi -\n                                                                     theta)\n        camera_origins[:, 1:2] = radius * torch.cos(phi)\n        # calculate forward vector and camer2world\n        forward_vectors = normalize_vecs(look_at - camera_origins)\n        camera2world = create_cam2world_matrix(forward_vectors, camera_origins,\n                                               up)\n        return camera2world\n\n    def interpolation_cam2world(self,\n                                num_images: int,\n                                h_mean: Optional[float] = None,\n                                v_mean: Optional[float] = None,\n                                h_std: Optional[float] = None,\n                                v_std: Optional[float] = None,\n                                look_at: VectorType = None,\n                                up: VectorType = None,\n                                radius: Optional[float] = None,\n                                batch_size: int = 1,\n                                device: Optional[str] = None\n                                ) -> List[torch.Tensor]:\n        \"\"\"Interpolation camera original in spherical trajectory and return a\n        list of camera-to-world matrix.\n\n        Args:\n            num_images (int): The number of images in interpolation.\n            h_mean (Optional[float], optional): Mean of horizontal range in\n                radian. Defaults to None.\n            v_mean (Optional[float], optional): Mean of vertical range in\n                radian. Defaults to None.\n            h_std (Optional[float], optional): Standard deviation of\n                horizontal in radian. Defaults to None.\n            v_std (Optional[float], optional): Standard deviation of\n                horizontal in radian. Defaults to None.\n            look_at (Optional[Tuple[list, torch.Tensor]], optional): Look-at\n                position. Defaults to None.\n            up (Optional[Tuple[list, torch.Tensor]], optional): Up direction\n                of the world coordinate. Defaults to None.\n            radius (Optional[float]): Radius of the sphere. Defaults to None.\n            batch_size (int, optional): Batch size of the results.\n                Defaults to 1.\n            device (Optional[str], optional): The target device of the results.\n                Defaults to None.\n\n        Returns:\n            List[torch.Tensor]: List of sampled camera-to-world matrix.\n        \"\"\"\n        h_mean = self.horizontal_mean if h_mean is None else h_mean\n        v_mean = self.vertical_mean if v_mean is None else v_mean\n        h_std = self.horizontal_std if h_std is None else h_std\n        v_std = self.vertical_std if v_std is None else v_std\n        radius = self.radius if radius is None else radius\n        look_at = self.look_at if look_at is None else look_at\n        if not isinstance(look_at, torch.FloatTensor):\n            look_at = torch.FloatTensor(look_at)\n        look_at = look_at.to(device)\n        up = self.up if up is None else up\n        if not isinstance(up, torch.FloatTensor):\n            up = torch.FloatTensor(up)\n        up = up.to(device)\n\n        cam2world_list = []\n        for idx in range(num_images):\n            h = h_mean + h_std * math.sin(2 * math.pi / num_images * idx)\n            v = v_mean + v_std * math.cos(2 * math.pi / num_images * idx)\n            cam2world = self.sample_camera2world(\n                h_mean=h,\n                v_mean=v,\n                h_std=0,\n                v_std=0,\n                batch_size=batch_size,\n                device=device)\n            cam2world_list.append(cam2world)\n\n        return cam2world_list\n\n    def __repr__(self):\n        repr_string = f'{self.__class__.__name__}'\n        attribute_list = [\n            'horizontal_mean', 'vertical_mean', 'horizontal_std',\n            'vertical_std', 'FOV', 'focal', 'look_at', 'up', 'radius',\n            'sampling_statregy'\n        ]\n        for attribute in attribute_list:\n            if getattr(self, attribute, None) is not None:\n                repr_string += f'\\n    {attribute}: {getattr(self, attribute)}'\n        return repr_string\n\n\n@MODELS.register_module()\nclass GaussianCamera(BaseCamera):\n    \"\"\"Pre-defined camera class. Sample camera position in gaussian\n    distribution.\n\n    Args:\n        horizontal_mean (Optional[float]): Mean of the horizontal range in\n            radian. Defaults to None.\n        vertical_mean (Optional[float]): Mean of the vertical range in radian.\n            Defaults to None.\n        horizontal_std (Optional[float]): Standard deviation of the horizontal\n            range in radian. Defaults to None.\n        vertical_std (Optional[float]): Standard deviation of the vertical\n            range in radian. Defaults to None.\n        look_at (Optional[List, torch.Tensor]): The look at position of the\n            camera. Defaults to None.\n        up (Optional[List, torch.Tensor]): The up direction of the world\n            coordinate. Defaults to None.\n        radius (Optional[float]): Radius of the sphere. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 horizontal_mean: Optional[float] = None,\n                 vertical_mean: Optional[float] = None,\n                 horizontal_std: Optional[float] = 0,\n                 vertical_std: Optional[float] = 0,\n                 look_at: List = [0, 0, 0],\n                 fov: Optional[float] = None,\n                 focal: Optional[float] = None,\n                 up: VectorType = [0, 1, 0],\n                 radius: Optional[float] = 1):\n        super().__init__(horizontal_mean, vertical_mean, horizontal_std,\n                         vertical_std, look_at, fov, focal, up, radius,\n                         'gaussian')\n\n\n@MODELS.register_module()\nclass UniformCamera(BaseCamera):\n    \"\"\"Pre-defined camera class. Sample camera position in uniform\n    distribution.\n\n    Args:\n        horizontal_mean (Optional[float]): Mean of the horizontal range in\n            radian. Defaults to None.\n        vertical_mean (Optional[float]): Mean of the vertical range in radian.\n            Defaults to None.\n        horizontal_std (Optional[float]): Standard deviation of the horizontal\n            range in radian. Defaults to None.\n        vertical_std (Optional[float]): Standard deviation of the vertical\n            range in radian. Defaults to None.\n        look_at (Optional[List, torch.Tensor]): The look at position of the\n            camera. Defaults to None.\n        up (Optional[List, torch.Tensor]): The up direction of the world\n            coordinate. Defaults to None.\n        radius (Optional[float]): Radius of the sphere. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 horizontal_mean: Optional[float] = None,\n                 vertical_mean: Optional[float] = None,\n                 horizontal_std: Optional[float] = 0,\n                 vertical_std: Optional[float] = 0,\n                 look_at: List = [0, 0, 0],\n                 fov: Optional[float] = None,\n                 focal: Optional[float] = None,\n                 up: VectorType = [0, 1, 0],\n                 radius: Optional[float] = 1):\n        super().__init__(horizontal_mean, vertical_mean, horizontal_std,\n                         vertical_std, look_at, fov, focal, up, radius,\n                         'uniform')\n\n\ndef create_cam2world_matrix(forward_vector: torch.Tensor, origin: torch.Tensor,\n                            up: torch.Tensor) -> torch.Tensor:\n    \"\"\"Calculate camera-to-world matrix from camera's forward vector, world\n    origin and world up direction. The calculation is performed in right-hand\n    coordinate system and the returned matrix is in homogeneous coordinates\n    (shape like (bz, 4, 4)).\n\n    Args:\n        forward_vector (torch.Tensor): The forward vector of the camera.\n        origin (torch.Tensor): The origin of the world coordinate.\n        up (torch.Tensor): The up direction of the world coordinate.\n\n    Returns:\n        torch.Tensor: Camera-to-world matrix.\n    \"\"\"\n\n    forward_vector = normalize_vecs(forward_vector)\n    up_vector = up.type(torch.float).expand_as(forward_vector)\n    right_vector = -normalize_vecs(\n        torch.cross(up_vector, forward_vector, dim=-1))\n    up_vector = normalize_vecs(\n        torch.cross(forward_vector, right_vector, dim=-1))\n\n    rotation_matrix = torch.eye(\n        4, device=origin.device).unsqueeze(0).repeat(forward_vector.shape[0],\n                                                     1, 1)\n    rotation_matrix[:, :3, :3] = torch.stack(\n        (right_vector, up_vector, forward_vector), axis=-1)\n\n    translation_matrix = torch.eye(\n        4, device=origin.device).unsqueeze(0).repeat(forward_vector.shape[0],\n                                                     1, 1)\n    translation_matrix[:, :3, 3] = origin\n    cam2world = (translation_matrix @ rotation_matrix)[:, :, :]\n    assert (cam2world.shape[1:] == (4, 4))\n    return cam2world\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/dual_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.runner.amp import autocast\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom ..stylegan2 import StyleGAN2Discriminator\n\n\n@MODELS.register_module('EG3DDiscriminator')\n@MODELS.register_module()\nclass DualDiscriminator(StyleGAN2Discriminator):\n    \"\"\"Dual Discriminator for EG3D. DualDiscriminator shares the same network\n    structure with StyleGAN2's Discriminator. However, DualDiscriminator take\n    volume rendered low-resolution image and super-resolved image at the same\n    time. The LR image will be upsampled and concatenate with SR ones, and then\n    feed to the discriminator together.\n\n    Args:\n        img_channels (int): The number of the image channels. Defaults to 3.\n        use_dual_disc (bool): Whether use dual discriminator as EG3D. If True,\n            the input channel of the first conv block will be set as\n            `2 * img_channels`. Defaults to True.\n        disc_c_noise (float): The factor of noise's standard deviation add to\n            conditional input before passed to mapping network. Defaults to 0.\n        *args, **kwargs: Arguments for StyleGAN2Discriminator.\n    \"\"\"\n\n    def __init__(self,\n                 img_channels: int = 3,\n                 use_dual_disc: bool = True,\n                 disc_c_noise: float = 0,\n                 *args,\n                 **kwargs):\n        if use_dual_disc:\n            img_channels *= 2\n        self.use_dual_disc = use_dual_disc\n        super().__init__(img_channels=img_channels, *args, **kwargs)\n        self.disc_c_noise = disc_c_noise\n\n    def forward(self,\n                img: Tensor,\n                img_raw: Optional[Tensor] = None,\n                cond: Optional[Tensor] = None):\n        \"\"\"Forward function.\n\n        Args:\n            img (torch.Tensor): Input high resoluation image tensor.\n            img_raw (torch.Tensor): Input raw (low resolution) image tensor.\n                Defaults to None.\n            cond (torch.Tensor): The conditional input (camera-to-world matrix\n                and intrinsics matrix). Defaults to None.\n\n        Returns:\n            torch.Tensor: Predict score for the input image.\n        \"\"\"\n        if self.use_dual_disc:\n            assert img_raw is not None, (\n                '\\'img_raw\\' must be passed when \\'use_dual_disc\\' is True.')\n\n        # This setting was used to finetune on converted weights\n        if self.input_bgr2rgb:\n            img = img[:, [2, 1, 0], ...]\n            if img_raw is not None:\n                img_raw = img_raw[:, [2, 1, 0], ...]\n\n        if img_raw is not None:\n            # the official implementation only use 'antialiased' upsampline,\n            # therefore we only support 'antialiased' for torch >= 1.11.0\n            interpolation_kwargs = dict(\n                size=(img.shape[-1], img.shape[-1]),\n                mode='bilinear',\n                align_corners=False)\n            if digit_version(TORCH_VERSION) >= digit_version('1.11.0'):\n                interpolation_kwargs['antialias'] = True\n            img_raw_sr = F.interpolate(img_raw, **interpolation_kwargs)\n            img = torch.cat([img, img_raw_sr], dim=1)\n\n        # convs has own fp-16 controller, do not wrap here\n        x = self.convs(img)\n        x = self.mbstd_layer(x)\n\n        fp16_enabled = (\n            self.final_conv.fp16_enabled or not self.convert_input_fp32)\n        with autocast(enabled=fp16_enabled):\n            if not fp16_enabled:\n                x = x.to(torch.float32)\n            x = self.final_conv(x)\n            x = x.view(x.shape[0], -1)\n            x = self.final_linear(x)\n\n            # conditioning\n            if cond is not None:\n                assert self.mapping is not None, (\n                    '\\'mapping\\' network must not be None when conditional '\n                    'input is passed.')\n\n                # if self.disc_c_noise is not None and self.disc_c_noise > 0:\n                if self.disc_c_noise is not None:\n                    cond = cond + torch.randn_like(\n                        cond) * cond.std() * self.disc_c_noise\n                cmap = self.mapping(None, cond)\n                x = (x * cmap).sum(\n                    dim=1, keepdim=True) * (1 / np.sqrt(cmap.shape[1]))\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/eg3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import Config\nfrom mmengine.utils import ProgressBar\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, SampleList\nfrom ...base_models import BaseConditionalGAN\nfrom ...utils import get_valid_num_batches\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass EG3D(BaseConditionalGAN):\n    \"\"\"Implementation of `Efficient Geometry-aware 3D Generative Adversarial\n    Networks`\n\n    <https://openaccess.thecvf.com/content/CVPR2022/papers/Chan_Efficient_Geometry-Aware_3D_Generative_Adversarial_Networks_CVPR_2022_paper.pdf>_ (EG3D).  # noqa\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.eg3d.eg3d_generator.TriplaneGenerator`\n    and\n    :class:`~mmagic.models.editors.eg3d.dual_discriminator.DualDiscriminator`\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        camera (Optional[ModelType]): The pre-defined camera to sample random\n            camera position. If you want to generate images or videos via\n            high-level API, you must set this argument. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): Number of times the generator was completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): Number of times the discriminator was\n            completely updated before the generator is updated. Defaults to 1.\n        noise_size (Optional[int]): Size of the input noise vector.\n            Default to 128.\n        num_classes (Optional[int]): The number classes you would like to\n            generate. Defaults to None.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n        loss_config (Optional[Dict]): The config for training losses.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 camera: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 noise_size: Optional[int] = None,\n                 ema_config: Optional[Dict] = None,\n                 loss_config: Optional[Dict] = None):\n\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, noise_size,\n                         None, ema_config, loss_config)\n        if isinstance(camera, dict):\n            self.camera = MODELS.build(camera)\n        elif isinstance(camera, nn.Module):\n            self.camera = camera\n        else:\n            self.camera = None\n\n    def label_fn(self,\n                 label: Optional[Tensor] = None,\n                 num_batches: int = 1) -> Tensor:\n        \"\"\"Label sampling function for EG3D model.\n\n        Args:\n            label (Optional[Tensor]): Conditional for EG3D model. If not\n                passed, :attr:`self.camera` will be used to sample random\n                camera-to-world and intrinsics matrix. Defaults to None.\n\n        Returns:\n            torch.Tensor: Conditional input for EG3D model.\n        \"\"\"\n        if label is not None:\n            return label\n\n        # sample random conditional from camera\n        assert self.camera is not None, (\n            '\\'camera\\' is not defined for \\'EG3D\\'.')\n        camera2world = self.camera.sample_camera2world(batch_size=num_batches)\n        intrinsics = self.camera.sample_intrinsic(batch_size=num_batches)\n        cond = torch.cat(\n            [camera2world.reshape(-1, 16),\n             intrinsics.reshape(-1, 9)], dim=1).to(self.device)\n        return cond\n\n    def data_sample_to_label(self, data_sample: SampleList\n                             ) -> Optional[torch.Tensor]:\n        \"\"\"Get labels from input `data_sample` and pack to `torch.Tensor`. If\n        no label is found in the passed `data_sample`, `None` would be\n        returned.\n\n        Args:\n            data_sample (List[DataSample]): Input data samples.\n\n        Returns:\n            Optional[torch.Tensor]: Packed label tensor.\n        \"\"\"\n\n        if not data_sample or 'gt_label' not in data_sample.keys():\n            return None\n        return data_sample.gt_label.label\n\n    def pack_to_data_sample(\n            self,\n            output: Dict[str, Tensor],\n            # index: int,\n            data_sample: Optional[DataSample] = None) -> DataSample:\n        \"\"\"Pack output to data sample. If :attr:`data_sample` is not passed, a\n        new DataSample will be instantiated. Otherwise, outputs will be added\n        to the passed datasample.\n\n        Args:\n            output (Dict[Tensor]): Output of the model.\n            index (int): The index to save.\n            data_sample (DataSample, optional): Data sample to save\n                outputs. Defaults to None.\n\n        Returns:\n            DataSample: Data sample with packed outputs.\n        \"\"\"\n\n        assert isinstance(output,\n                          dict), ('Output of EG3D generator should be a dict.')\n\n        data_sample = DataSample() if data_sample is None else data_sample\n        for k, v in output.items():\n            assert isinstance(v, torch.Tensor), (\n                f'Output must be tensor. But \\'{k}\\' is type of '\n                f'\\'{type(v)}\\'.')\n            # NOTE: hard code here, we assume all tensor are [bz, ...]\n            data_sample.set_tensor_data({k: v})\n\n        return data_sample\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        \"\"\"Sample images with the given inputs. If forward mode is 'ema' or\n        'orig', the image generated by corresponding generator will be\n        returned. If forward mode is 'ema/orig', images generated by original\n        generator and EMA generator will both be returned in a dict.\n\n        Args:\n            inputs (ForwardInputs): Dict containing the necessary\n                information (e.g. noise, num_batches, mode) to generate image.\n            data_samples (Optional[list]): Data samples collated by\n                :attr:`data_preprocessor`. Defaults to None.\n            mode (Optional[str]): `mode` is not used in\n                :class:`BaseConditionalGAN`. Defaults to None.\n\n        Returns:\n            List[DataSample]: Generated images or image dict.\n        \"\"\"\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            sample_kwargs = {}\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n            sample_kwargs = inputs.get('sample_kwargs', dict())\n        num_batches = noise.shape[0]\n\n        labels = self.data_sample_to_label(data_samples)\n        if labels is None:\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            labels = self.label_fn(num_batches=num_batches)\n\n        sample_model = self._get_valid_model(inputs)\n        batch_sample_list = []\n        if sample_model in ['ema', 'orig']:\n            if sample_model == 'ema':\n                generator = self.generator_ema\n            else:\n                generator = self.generator\n            outputs = generator(noise, label=labels)\n            outputs['fake_img'] = self.data_preprocessor.destruct(\n                outputs['fake_img'], data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample = self.pack_to_data_sample(outputs, gen_sample)\n            gen_sample.noise = noise\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = sample_model\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        else:\n            outputs_orig = self.generator(noise, label=labels)\n            outputs_ema = self.generator_ema(noise, label=labels)\n            outputs_orig['fake_img'] = self.data_preprocessor.destruct(\n                outputs_orig['fake_img'], data_samples)\n            outputs_ema['fake_img'] = self.data_preprocessor.destruct(\n                outputs_ema['fake_img'], data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.ema = self.pack_to_data_sample(outputs_ema)\n            gen_sample.orig = self.pack_to_data_sample(outputs_orig)\n            gen_sample.noise = noise\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            gen_sample.sample_model = sample_model\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        return batch_sample_list\n\n    @torch.no_grad()\n    def interpolation(self,\n                      num_images: int,\n                      num_batches: int = 4,\n                      mode: str = 'both',\n                      sample_model: str = 'orig',\n                      show_pbar: bool = True) -> List[dict]:\n        \"\"\"Interpolation input and return a list of output results. We support\n        three kinds of interpolation mode:\n\n        * 'camera': First generate style code with random noise and forward\n            camera. Then synthesis images with interpolated camera position\n            and fixed style code.\n\n        * 'conditioning': First generate style code with fixed noise and\n            interpolated camera. Then synthesis images with style codes and\n            forward camera.\n\n        * 'both': Generate images with interpolated camera position.\n\n        Args:\n            num_images (int): The number of images want to generate.\n            num_batches (int, optional): The number of batches to generate at\n                one time. Defaults to 4.\n            mode (str, optional): The interpolation mode. Supported choices\n                are 'both', 'camera', and 'conditioning'. Defaults to 'both'.\n            sample_model (str, optional): The model used to generate images,\n                support 'orig' and 'ema'. Defaults to 'orig'.\n            show_pbar (bool, optional): Whether display a progress bar during\n                interpolation. Defaults to True.\n\n        Returns:\n            List[dict]: The list of output dict of each frame.\n        \"\"\"\n        assert hasattr(self, 'camera'), ('Camera must be defined.')\n        assert mode.upper() in ['BOTH', 'CONDITIONING', 'CAMERA']\n        assert sample_model in ['ema', 'orig']\n        if sample_model == 'orig':\n            gen = self.generator\n        else:\n            assert self.with_ema_gen, (\n                '\\'sample_model\\' is EMA, but ema model not found.')\n            # generator_ema is wrapped by AverageModel\n            gen = self.generator_ema.module\n\n        cam2world_forward = self.camera.sample_camera2world(\n            h_std=0, v_std=0, batch_size=num_batches, device=self.device)\n        intrinsics = self.camera.sample_intrinsic(\n            batch_size=num_batches, device=self.device)\n        cond_forward = torch.cat([\n            cam2world_forward.view(num_batches, -1),\n            intrinsics.view(num_batches, -1)\n        ],\n                                 dim=1)\n        # 1. generate cond list\n        if mode.upper() in ['CAMERA', 'BOTH']:\n            cam2world_list = self.camera.interpolation_cam2world(\n                num_images, batch_size=num_batches, device=self.device)\n            cond_list = []\n            for cam2world in cam2world_list:\n                cond = torch.cat([\n                    cam2world.view(num_batches, -1),\n                    intrinsics.view(num_batches, -1)\n                ],\n                                 dim=1)\n                cond_list.append(cond)\n        else:\n            cond_list = [cond_forward for _ in range(num_images)]\n\n        # 2. generate pre-defined style list\n        if mode.upper() == 'CAMERA':\n            # same noise + forward cond\n            style = gen.backbone.mapping(\n                self.noise_fn(num_batches=num_batches), cond_forward)\n            style_list = [style for _ in range(num_images)]\n        else:\n            # same noise + different cond\n            noise = self.noise_fn(num_batches=num_batches)\n            style_list = [\n                gen.backbone.mapping(noise, cond) for cond in cond_list\n            ]\n\n        # 3. interpolation\n        if show_pbar:\n            pbar = ProgressBar(num_images)\n        output_list = []\n        for style, cond in zip(style_list, cond_list):\n            # generate image with const noise\n            output = gen(\n                style,\n                cond,\n                input_is_latent=True,\n                add_noise=True,\n                randomize_noise=False)  # use fixed noise\n            output_list.append({k: v.cpu() for k, v in output.items()})\n\n            if show_pbar:\n                pbar.update(1)\n        if show_pbar:\n            print('\\n')\n\n        return output_list\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/eg3d_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Optional, Tuple\n\nimport torch\nfrom mmengine.model import BaseModule\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom .eg3d_modules import SuperResolutionModule, TriPlaneBackbone\nfrom .ray_sampler import sample_rays\nfrom .renderer import EG3DRenderer\n\n\n@MODELS.register_module('EG3DGenerator')\n@MODELS.register_module()\nclass TriplaneGenerator(BaseModule):\n    \"\"\"The generator for EG3D.\n\n    EG3D generator contains three components:\n\n    * A StyleGAN2 based backbone to generate a triplane feature\n    * A neural renderer to sample and render low-resolution 2D feature and\n      image from generated triplane feature\n    * A super resolution module to upsample low-resolution image to\n      high-resolution one\n\n    Args:\n        out_size (int): The resolution of the generated 2D image.\n        noise_size (int): The size of the noise vector of the StyleGAN2\n            backbone. Defaults to 512.\n        style_channels (int): The number of channels for style code.\n            Defaults to 512.\n        cond_size (int): The size of the conditional input. Defaults to 25\n            (first 16 elements are flattened camera-to-world matrix and the\n            last 9 elements are flattened intrinsic matrix).\n        cond_mapping_channels (Optional[int]): The channels of the\n            conditional mapping layers. If not passed, will use the same value\n            as :attr:`style_channels`. Defaults to None.\n        cond_scale (float): The scale factor is multiple by the conditional\n            input. Defaults to 1.\n        zero_cond_input (bool): Whether use 'zero tensor' as the conditional\n            input. Defaults to False.\n        num_mlps (int): The number of MLP layers (mapping network) used in\n            backbone. Defaults to 8.\n        triplane_size (int): The size of generated triplane feature. Defaults\n            to 256.\n        triplane_channels (int): The number of channels for each plane of the\n            triplane feature. Defaults to 32.\n        sr_in_size (int): The input resolution of super resolution module. If\n            the input feature not match with the passed `sr_in_size`, bilinear\n            interpolation will be used to resize feature to target size.\n            Defaults to 64.\n        sr_in_channels (int): The number of the input channels of super\n            resolution module. Defaults to 32.\n        sr_hidden_channels (int): The number of the hidden channels of super\n            resolution module. Defaults to 128.\n        sr_out_channels (int): The number of the output channels of super\n            resolution module. Defaults to 64.\n        sr_add_noise (bool): Whether use noise injection to super resolution\n            module. Defaults to False.\n        neural_rendering_resolution (int): The resolution of the neural\n            rendering output. Defaults to 64. Noted that in the training\n            process, neural rendering resolution will be changed.\n            Defaults to 64.\n        renderer_cfg (int): The config to build :class:`EG3DRenderer`.\n            Defaults to '{}'.\n        rgb2bgr (bool): Whether convert the RGB output to BGR. This is useful\n            when pretrained model is trained on RGB dataset. Defaults to False.\n        init_cfg (Optional[dict]): Initialization config. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 out_size: int,\n                 noise_size: int = 512,\n                 style_channels: int = 512,\n                 cond_size: int = 25,\n                 cond_mapping_channels: Optional[int] = None,\n                 cond_scale: float = 1,\n                 zero_cond_input: bool = False,\n                 num_mlps: int = 8,\n                 triplane_size: int = 256,\n                 triplane_channels: int = 32,\n                 sr_in_size: int = 64,\n                 sr_in_channels: int = 32,\n                 sr_hidden_channels: int = 128,\n                 sr_out_channels: int = 64,\n                 sr_antialias: bool = True,\n                 sr_add_noise: bool = True,\n                 neural_rendering_resolution: int = 64,\n                 renderer_cfg: dict = dict(),\n                 rgb2bgr: bool = False,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.out_size = out_size\n        self.noise_size = noise_size\n        self.cond_size = cond_size\n        self.style_size = style_channels\n\n        self.cond_scale = cond_scale\n        self.zero_cond_input = zero_cond_input\n        self.sr_add_noise = sr_add_noise\n\n        # build StyleGAN2 backbone\n        self.triplane_channels = triplane_channels\n        self.backbone = TriPlaneBackbone(\n            out_size=triplane_size,\n            noise_size=noise_size,\n            out_channels=triplane_channels * 3,\n            style_channels=style_channels,\n            num_mlps=num_mlps,\n            cond_size=cond_size,\n            cond_scale=self.cond_scale,\n            cond_mapping_channels=cond_mapping_channels,\n            zero_cond_input=self.zero_cond_input)\n\n        # build renderer + nerf-decoder and ray sampler\n        self.neural_rendering_resolution = neural_rendering_resolution\n        renderer_cfg_ = deepcopy(renderer_cfg)\n        decoder_cfg_ = renderer_cfg.get('decoder_cfg', dict())\n        decoder_cfg_['in_channels'] = triplane_channels\n        decoder_cfg_['out_channels'] = sr_in_channels\n        renderer_cfg_['decoder_cfg'] = decoder_cfg_\n        self.renderer = EG3DRenderer(**deepcopy(renderer_cfg_))\n\n        # build super-resolution module\n        sr_factor = out_size // sr_in_size\n        assert sr_factor in [\n            2, 4, 8\n        ], ('Only support super resolution with factor 2, 4 or 8. '\n            f'But \\'out_size\\' and \\'sr_in_size\\'are {out_size} and '\n            f'{sr_in_size}.')\n        self.sr_model = SuperResolutionModule(\n            in_channels=sr_in_channels,\n            in_size=sr_in_size,\n            hidden_size=sr_in_size * 2 if sr_factor in [4, 8] else sr_in_size,\n            out_size=out_size,\n            style_channels=style_channels,\n            hidden_channels=sr_hidden_channels,\n            out_channels=sr_out_channels,\n            sr_antialias=sr_antialias)\n\n        # flag for pretrained models\n        self.rgb2bgr = rgb2bgr\n\n    def sample_ray(self, cond: torch.Tensor) -> Tuple[Tensor]:\n        \"\"\"Sample render points corresponding to the given conditional.\n\n        Args:\n            cond (torch.Tensor): Conditional inputs.\n\n        Returns:\n            Tuple[Tensor]: The original and direction vector of sampled rays.\n        \"\"\"\n        cam2world_matrix = cond[:, :16].view(-1, 4, 4)\n        intrinsics = cond[:, 16:25].view(-1, 3, 3)\n\n        ray_origin, ray_directions = sample_rays(\n            cam2world_matrix, intrinsics, self.neural_rendering_resolution)\n        return ray_origin, ray_directions\n\n    def forward(self,\n                noise: Tensor,\n                label: Optional[Tensor] = None,\n                truncation: Optional[float] = 1,\n                num_truncation_layer: Optional[int] = None,\n                input_is_latent: bool = False,\n                plane: Optional[Tensor] = None,\n                add_noise: bool = True,\n                randomize_noise: bool = True,\n                render_kwargs: Optional[dict] = None) -> dict:\n        \"\"\"The forward function for EG3D generator.\n\n        Args:\n            noise (Tensor): The input noise vector.\n            label (Optional[Tensor]): The conditional input. Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            num_truncation_layer (int, optional): Number of layers use\n                truncated latent. Defaults to None.\n            input_is_latent (bool): Whether the input latent. Defaults to\n                False.\n            plane (Optional[Tensor]): The pre-generated triplane feature. If\n                passed, will use the passed plane to generate 2D image.\n                Defaults to None.\n            add_noise (bool): Whether apply noise injection to the triplane\n                backbone. Defaults to True.\n            randomize_noise (bool, optional): If `False`, images are sampled\n                with the buffered noise tensor injected to the style conv\n                block. Defaults to True.\n            render_kwargs (Optional[dict], optional): The specific kwargs for\n                rendering. Defaults to None.\n\n        Returns:\n            dict: A dict contains 'fake_img', 'lr_img', 'depth',\n                'ray_directions' and 'ray_origins'.\n        \"\"\"\n        batch_size = noise.shape[0]\n\n        if not input_is_latent:\n            styles = self.backbone.mapping(\n                noise,\n                label,\n                truncation=truncation,\n                num_truncation_layer=num_truncation_layer)\n        else:\n            styles = noise\n\n        ray_origins, ray_directions = self.sample_ray(label)\n\n        if plane is None:\n            plane = self.backbone.synthesis(\n                styles, add_noise=add_noise, randomize_noise=randomize_noise)\n\n        # Reshape output into three `triplane_channels`-channel planes\n        plane = plane.view(\n            len(plane), 3, self.triplane_channels, plane.shape[-2],\n            plane.shape[-1])\n\n        # Perform volume rendering\n        feature_samples, depth_samples, _ = self.renderer(\n            plane, ray_origins, ray_directions, render_kwargs=render_kwargs)\n\n        # Reshape into 'raw' neural-rendered image\n        H = W = self.neural_rendering_resolution\n        feature_image = feature_samples.permute(0, 2, 1).reshape(\n            batch_size, feature_samples.shape[-1], H, W).contiguous()\n        depth_image = depth_samples.permute(0, 2,\n                                            1).reshape(batch_size, 1, H, W)\n\n        # Run super resolution to get final image\n        rgb_image = feature_image[:, :3]\n        sr_image = self.sr_model(\n            rgb_image, feature_image, styles, add_noise=self.sr_add_noise)\n\n        if self.rgb2bgr:\n            sr_image = sr_image.flip(1)\n            rgb_image = rgb_image.flip(1)\n\n        output_dict = dict(\n            fake_img=sr_image,\n            lr_img=rgb_image,  # low-resolution images\n            depth=depth_image,\n            ray_directions=ray_directions,\n            ray_origins=ray_origins)\n\n        return output_dict\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/eg3d_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom mmengine.model import BaseModule\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom ..stylegan2 import StyleGAN2Generator\nfrom ..stylegan2.stylegan2_modules import ModulatedStyleConv, ModulatedToRGB\n\n\nclass TriPlaneBackbone(StyleGAN2Generator):\n    \"\"\"Tr-plane backbone for EG3D generator. This class is a wrapper of\n    StyleGAN2Generator.\n\n    Args:\n        noise_size (int, optional): The size of (number of channels) the input\n            noise. If not passed, will be set the same value as\n            :attr:`style_channels`. Defaults to None.\n        out_size (int): The output size of the StyleGAN2 generator.\n        out_channels (int): The number of channels for output.\n        num_mlps (int, optional): The number of MLP layers. Defaults to 8.\n        style_channels (int): The number of channels for style code. Defaults\n            to 512.\n        cond_size (int, optional): The size of the conditional input. If not\n            passed or less than 1, no conditional embedding will be used.\n            Defaults to None.\n        cond_mapping_channels (int, optional): The channels of the\n            conditional mapping layers. If not passed, will use the same value\n            as :attr:`style_channels`. Defaults to None.\n        cond_scale (float): The scale factor is multiple by the conditional\n            input. Defaults to 1.\n        zero_cond_input (bool): Whether use 'zero tensor' as the conditional\n            input. Defaults to False.\n\n        *args, **kwargs: Arguments for StyleGAN2Generator.\n    \"\"\"\n\n    def __init__(self,\n                 noise_size: int,\n                 out_size: int,\n                 out_channels: int,\n                 num_mlps: int = 8,\n                 style_channels: int = 512,\n                 cond_size: Optional[int] = 25,\n                 cond_mapping_channels: Optional[int] = None,\n                 cond_scale: float = 0,\n                 zero_cond_input: bool = False,\n                 *args,\n                 **kwargs):\n        super().__init__(\n            out_size,\n            style_channels,\n            num_mlps=num_mlps,\n            noise_size=noise_size,\n            out_channels=out_channels,\n            cond_size=cond_size,\n            cond_mapping_channels=cond_mapping_channels,\n            *args,\n            **kwargs)\n\n        self.cond_scale = cond_scale\n        self.zero_cond_input = zero_cond_input\n\n    def mapping(self,\n                noise: torch.Tensor,\n                label: Optional[torch.Tensor] = None,\n                truncation: float = 1,\n                num_truncation_layer: Optional[int] = None,\n                update_ws: bool = True) -> torch.Tensor:\n        \"\"\"Mapping input noise (z) to style space (w).\n\n        Args:\n            noise (torch.Tensor): Noise input.\n            label (Optional[torch.Tensor]): Conditional inputs.\n                Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            num_truncation_layer (int, optional): Number of layers use\n                truncated latent. Defaults to None.\n            update_ws (bool): Whether update latent code with EMA. Only work\n                when `w_avg` is registered. Defaults to False.\n\n        Returns:\n            torch.Tensor: Style codes after mapping.\n        \"\"\"\n        assert noise.shape[1] == self.noise_size\n        noise = self.pixel_norm(noise)\n\n        if label is not None:\n            assert label.shape[1] == self.cond_size\n            if self.zero_cond_input:\n                label = torch.zeros_like(label)\n            label = label * self.cond_scale\n            embedding = self.embed(label)\n            embedding = self.pixel_norm(embedding)\n        else:\n            # generate a zero input even if cond is not passed.\n            if self.zero_cond_input:\n                assert self.cond_size is not None, (\n                    '\\'cond_size\\' must be passed when '\n                    '\\'zero_cond_input\\' is True.')\n                label = torch.zeros(\n                    noise.shape[0], self.cond_size, device=noise.device)\n                embedding = self.embed(label)\n                embedding = self.pixel_norm(embedding)\n            else:\n                embedding = None\n        mapping_input = noise if embedding is None \\\n            else torch.cat([noise, embedding], dim=1)\n\n        styles = self.style_mapping(mapping_input)\n\n        if hasattr(self, 'w_avg') and update_ws:\n            self.w_avg.copy_(styles.detach().mean(\n                dim=0).lerp(self.w_avg, self.w_avg_beta))\n\n        if truncation < 1:\n            truncation_latent = self.get_mean_latent()\n            styles = truncation_latent + truncation * (\n                styles - truncation_latent)\n\n        return styles\n\n    def synthesis(self, styles: torch.Tensor, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Generate the Triplane feature.\n\n        Args:\n            styles (torch.Tensor): The input style code.\n            *args, **kwargs: Arguments for StyleGAN2Generator's forward.\n\n        Returns:\n            torch.Tensor: The generated Triplane feature.\n        \"\"\"\n        outputs = super().forward(\n            styles, input_is_latent=True, update_ws=False, *args, **kwargs)\n        return outputs\n\n\nclass SuperResolutionModule(BaseModule):\n    \"\"\"Super resolution module for EG3D generator.\n\n    Args:\n        in_channels (int): The channels of the input feature.\n        in_size (int): The size of the input feature.\n        hidden_size (int): The size of the hidden feature. Only support hidden\n            size equals to in_size or in_size times two. Defaults to None.\n        out_size (int): The size of the output image. Defaults to None.\n        hidden_channels (int): The channels of the hidden feature.\n            Defaults to 64.\n        style_channels (int): The channels of the style code. Defaults to 512.\n        sr_antialias (bool): Whether use antialias interpolation method in\n            upsampling. Defaults to True.\n        fp16_enable (bool): Whether enable fp16 in this module.\n            Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 in_size: Optional[int] = None,\n                 hidden_size: Optional[int] = None,\n                 out_size: Optional[int] = None,\n                 hidden_channels: int = 128,\n                 out_channels: int = 64,\n                 style_channels: Optional[int] = 512,\n                 sr_antialias: bool = True,\n                 fp16_enable: bool = False):\n        super().__init__()\n        self.in_size = in_size\n        self.sr_antialias = sr_antialias\n        self.fp16_enable = fp16_enable\n\n        self.style_channels = style_channels\n\n        block0_upsample = hidden_size > in_size\n        if block0_upsample:\n            assert hidden_size == in_size * 2, (\n                'Only support upsampling with factor 2. But \\'in_resolution\\' '\n                f'and \\'hidden_resolution\\' are \\'{in_size}\\' and '\n                f'\\'{hidden_size}\\'.')\n\n        self.block0 = SynthesisBlock(\n            in_channels,\n            hidden_channels,\n            style_channels,\n            img_channels=3,\n            upsample=block0_upsample,\n            fp16_enabled=fp16_enable)\n\n        block1_upsample = out_size > hidden_size\n        if block1_upsample:\n            assert out_size == hidden_size * 2, (\n                'Only support upsampling with factor 2. But '\n                '\\'hidden_resolution\\' and \\'out_resolution\\' are '\n                f'\\'{in_size}\\' and \\'{hidden_size}\\'.')\n        self.block1 = SynthesisBlock(\n            hidden_channels,\n            out_channels,\n            style_channels,\n            img_channels=3,\n            upsample=block1_upsample,\n            fp16_enabled=fp16_enable)\n        if digit_version(TORCH_VERSION) < digit_version('1.11.0'):\n            print_log(f'Current Pytorch version is {TORCH_VERSION}, lower '\n                      'than 1.11.0. \\'sr_antialias\\' is ignored.')\n\n    def forward(self,\n                img: torch.Tensor,\n                feature: torch.Tensor,\n                styles: Union[torch.Tensor, List[torch.Tensor]],\n                add_noise: bool = False) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            img (torch.Tensor): Image to super resolution.\n            x (torch.Tensor): Feature map of the input image.\n            styles (torch.Tensor): Style codes in w space.\n            add_noise (bool, optional): Whether add noise to image.\n                Defaults to False.\n\n        Returns:\n            torch.Tensor: Image after super resolution.\n        \"\"\"\n        if isinstance(styles, list):\n            styles = styles[-1]\n        if styles.ndim == 3:\n            styles = styles[-1]\n        assert styles.ndim == 2 and styles.shape[-1] == self.style_channels\n        styles = styles[:, None, :].repeat(1, 3, 1)\n        if feature.shape[-1] != self.in_size:\n            interpolation_kwargs = dict(\n                size=(self.in_size, self.in_size),\n                mode='bilinear',\n                align_corners=False)\n            if digit_version(TORCH_VERSION) >= digit_version('1.11.0'):\n                interpolation_kwargs['antialias'] = self.sr_antialias\n            feature = F.interpolate(feature, **interpolation_kwargs)\n            img = F.interpolate(img, **interpolation_kwargs)\n        feature, img = self.block0(feature, img, styles, add_noise)\n        feature, img = self.block1(feature, img, styles, add_noise)\n        return img\n\n\nclass SynthesisBlock(BaseModule):\n    \"\"\"Synthesis block for EG3D's SuperResolutionModule.\n\n    Args:\n        in_channels (int): The number of channels for the input feature.\n        out_channels (int): The number of channels for the output feature.\n        style_channels (int): The number of channels for style code.\n        img_channels (int): The number of channels of output image.\n        upsample (bool): Whether do upsampling. Defaults to True.\n        conv_clamp (float, optional): Whether clamp the convolutional layer\n            results to avoid gradient overflow. Defaults to `256.0`.\n        fp16_enabled (bool): Whether enable fp16. Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 out_channels: int,\n                 style_channels: int,\n                 img_channels: int,\n                 upsample: bool = True,\n                 conv_clamp: int = 256,\n                 fp16_enabled: bool = False):\n        super().__init__()\n        # architecture is default as 'skip' in EG3D\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.fp16_enabled = fp16_enabled\n\n        self.upsample = upsample\n\n        self.conv0 = ModulatedStyleConv(\n            in_channels,\n            out_channels,\n            kernel_size=3,\n            upsample=upsample,\n            style_channels=style_channels,\n            fp16_enabled=fp16_enabled,\n            conv_clamp=conv_clamp)\n\n        self.conv1 = ModulatedStyleConv(\n            out_channels,\n            out_channels,\n            kernel_size=3,\n            style_channels=style_channels,\n            conv_clamp=conv_clamp)\n\n        self.to_rgb = ModulatedToRGB(\n            out_channels, style_channels, img_channels, upsample=upsample)\n\n    def forward(self,\n                x: torch.Tensor,\n                img: torch.Tensor,\n                styles: torch.Tensor,\n                add_noise: bool = False) -> Tuple[torch.Tensor]:\n        \"\"\"Forward Synthesis block.\n\n        Args:\n            x (torch.Tensor): Input feature.\n            img (torch.Tensor): Input image.\n            styles (torch.Tensor): Input style code.\n            add_noise (bool, optional): Whether apply noise injection.\n                Defaults to False.\n\n        Returns:\n            Tuple[torch.Tensor]: Output feature and image.\n        \"\"\"\n        w_iter = iter(styles.unbind(dim=1))\n        x = self.conv0(x, next(w_iter), add_noise=add_noise)\n        x = self.conv1(x, next(w_iter), add_noise=add_noise)\n\n        img = self.to_rgb(x, next(w_iter), img)\n\n        assert img.dtype == torch.float32\n        return x, img\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/eg3d_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Tuple\n\nimport torch\n\n\ndef get_ray_limits_box(rays_o: torch.Tensor, rays_d: torch.Tensor,\n                       box_side_length: float\n                       ) -> Tuple[torch.Tensor, torch.Tensor]:\n    \"\"\"\n    Author: Petr Kellnhofer\n    Intersects rays with the [-1, 1] NDC volume.\n    Returns min and max distance of entry.\n    Returns -1 for no intersection.\n    https://www.scratchapixel.com/lessons/3d-basic-rendering/minimal-ray-tracer-rendering-simple-shapes/ray-box-intersection  # noqa\n\n    Args:\n        rays_o (torch.Tensor): The origin of each ray.\n        rays_d (torch.Tensor): The direction vector of each ray.\n        box_side_length (float): The side length of axis aligned\n            bounding box (AABB).\n\n    Returns:\n        Tuple[torch.Tensor, torch.Tensor]: Start and end point\n            for each ray. Both shape like (bz, res, res, 1).\n    \"\"\"\n    o_shape = rays_o.shape\n    rays_o = rays_o.detach().reshape(-1, 3)\n    rays_d = rays_d.detach().reshape(-1, 3)\n\n    bb_min = [\n        -1 * (box_side_length / 2), -1 * (box_side_length / 2),\n        -1 * (box_side_length / 2)\n    ]\n    bb_max = [\n        1 * (box_side_length / 2), 1 * (box_side_length / 2),\n        1 * (box_side_length / 2)\n    ]\n    bounds = torch.tensor([bb_min, bb_max],\n                          dtype=rays_o.dtype,\n                          device=rays_o.device)\n    is_valid = torch.ones(rays_o.shape[:-1], dtype=bool, device=rays_o.device)\n\n    # Precompute inverse for stability.\n    invdir = 1 / rays_d\n    sign = (invdir < 0).long()\n\n    # Intersect with YZ plane.\n    tmin = (bounds.index_select(0, sign[..., 0])[..., 0] -\n            rays_o[..., 0]) * invdir[..., 0]\n    tmax = (bounds.index_select(0, 1 - sign[..., 0])[..., 0] -\n            rays_o[..., 0]) * invdir[..., 0]\n\n    # Intersect with XZ plane.\n    tymin = (bounds.index_select(0, sign[..., 1])[..., 1] -\n             rays_o[..., 1]) * invdir[..., 1]\n    tymax = (bounds.index_select(0, 1 - sign[..., 1])[..., 1] -\n             rays_o[..., 1]) * invdir[..., 1]\n\n    # Resolve parallel rays.\n    is_valid[torch.logical_or(tmin > tymax, tymin > tmax)] = False\n\n    # Use the shortest intersection.\n    tmin = torch.max(tmin, tymin)\n    tmax = torch.min(tmax, tymax)\n\n    # Intersect with XY plane.\n    tzmin = (bounds.index_select(0, sign[..., 2])[..., 2] -\n             rays_o[..., 2]) * invdir[..., 2]\n    tzmax = (bounds.index_select(0, 1 - sign[..., 2])[..., 2] -\n             rays_o[..., 2]) * invdir[..., 2]\n\n    # Resolve parallel rays.\n    is_valid[torch.logical_or(tmin > tzmax, tzmin > tmax)] = False\n\n    # Use the shortest intersection.\n    tmin = torch.max(tmin, tzmin)\n    tmax = torch.min(tmax, tzmax)\n\n    # Mark invalid.\n    tmin[torch.logical_not(is_valid)] = -1\n    tmax[torch.logical_not(is_valid)] = -2\n\n    return tmin.reshape(*o_shape[:-1], 1), tmax.reshape(*o_shape[:-1], 1)\n\n\ndef inverse_transform_sampling(bins: torch.Tensor,\n                               weights: torch.Tensor,\n                               n_importance: int,\n                               deterministic: bool = False,\n                               eps: float = 1e-5) -> torch.Tensor:\n    \"\"\"Sample `N_importance` samples from `bins` with distribution defined by\n    `weights`.\n\n    Args:\n        bins (int): (N_points, N_samples+1) where N_samples is the number\n            of coarse samples per ray - 2.\n        weights (torch.Tensor): Weights shape like (N_points, N_samples-1).\n        n_importance (int): The number of samples to draw from the\n            distribution.\n        deterministic (bool): Whether use deterministic sampling method.\n            Defaults to False.\n        eps (float): a small number to prevent division by zero.\n            Defaults to 1e-5.\n\n    Outputs:\n        torch.Tensor: the sampled samples.\n    \"\"\"\n    N_rays, N_samples_ = weights.shape\n    # prevent division by zero (don't do inplace op!)\n    weights = weights + eps\n    # (N_rays, N_samples_)\n    pdf = weights / torch.sum(weights, -1, keepdim=True)\n    # (N_rays, N_samples), cumulative distribution function\n    cdf = torch.cumsum(pdf, -1)\n    # (N_rays, N_samples_+1)\n    cdf = torch.cat([torch.zeros_like(cdf[:, :1]), cdf], -1)\n    # padded to 0~1 inclusive\n\n    if deterministic:\n        u = torch.linspace(0, 1, n_importance, device=bins.device)\n        u = u.expand(N_rays, n_importance)\n    else:\n        u = torch.rand(N_rays, n_importance, device=bins.device)\n    u = u.contiguous()\n\n    inds = torch.searchsorted(cdf, u, right=True)\n    below = torch.clamp_min(inds - 1, 0)\n    above = torch.clamp_max(inds, N_samples_)\n\n    inds_sampled = torch.stack([below, above],\n                               -1).view(N_rays, 2 * n_importance)\n    cdf_g = torch.gather(cdf, 1, inds_sampled).view(N_rays, n_importance, 2)\n    bins_g = torch.gather(bins, 1, inds_sampled).view(N_rays, n_importance, 2)\n\n    denom = cdf_g[..., 1] - cdf_g[..., 0]\n    # denom equals 0 means a bin has weight 0, in which case it will not\n    # be sampled anyway, therefore any value for it is fine (set to 1 here)\n    denom[denom < eps] = 1\n    t = (u - cdf_g[..., 0]) / denom\n    samples = bins_g[..., 0] + t * (bins_g[..., 1] - bins_g[..., 0])\n\n    return samples\n\n\ndef linspace_batch(start: torch.Tensor, stop: torch.Tensor,\n                   num: int) -> torch.Tensor:\n    \"\"\"Creates a tensor of shape [num, *start.shape] whose values are evenly\n    spaced from start to end, inclusive.\n\n    Replicates but the multi-dimensional behaviour of numpy.linspace in\n    PyTorch.\n\n    Args:\n        start (torch.Tensor): The start point of each ray. Shape like\n            (bz, res, res, 1).\n        stop (torch.Tensor): The end point of each ray. Shape like\n            (bz, res, res, 1).\n        num (int): The number of points to sample.\n\n    Returns:\n        torch.Tensor: The sampled points. Shape like (num, bz, res, res, 1)\n    \"\"\"\n    # create a tensor of 'num' steps from 0 to 1\n    steps = torch.arange(\n        num, dtype=torch.float32, device=start.device) / (\n            num - 1)\n\n    # reshape the 'steps' tensor to [-1, *([1]*start.ndim)] to allow for\n    # broadcastings\n    # - using 'steps.reshape([-1, *([1]*start.ndim)])' would be nice here but\n    # torchscript cannot statically infer the expected size of a list in this\n    # context, hence the code below\n    for i in range(start.ndim):\n        steps = steps.unsqueeze(-1)\n\n    # the output starts at 'start' and increments until 'stop' in\n    # each dimension\n    out = start[None] + steps * (stop - start)[None]\n\n    return out\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/ray_sampler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Tuple\n\nimport torch\n\n\ndef sample_rays(cam2world: torch.Tensor, intrinsics: torch.Tensor,\n                resolution: int) -> Tuple[torch.Tensor]:\n    \"\"\"Sample origin and direction vectors of rays with passed camera-to-world\n    matrix and intrinsics matrix. Noted that skew coefficient is not considered\n    in this function.\n\n    Args:\n        cam2world (torch.Tensor): The camera-to-world matrix in homogeneous\n            coordinates. Shape like (bz, 4, 4).\n        intrinsics (torch.Tensor): The intrinsic matrix. Shape like (bz, 3, 3).\n        resolution (int): The expect resolution of the render output.\n\n    Returns:\n        Tuple[torch.Tensor]: Origins and view directions for rays. Both shape\n            like (bz, resolution^2, 3)\n    \"\"\"\n    batch_size, n_points = cam2world.shape[0], resolution**2\n    cam_in_world = cam2world[:, :3, 3]\n    fx = intrinsics[:, 0, 0]\n    fy = intrinsics[:, 1, 1]\n    cx = intrinsics[:, 0, 2]\n    cy = intrinsics[:, 1, 2]\n\n    device = cam2world.device\n\n    # torch.meshgrid has been modified in 1.10.0 (compatibility with previous\n    # versions), and will be further modified in 1.12 (Breaking Change)\n    if 'indexing' in torch.meshgrid.__code__.co_varnames:\n        u, v = torch.meshgrid(\n            torch.arange(resolution, dtype=torch.float32, device=device),\n            torch.arange(resolution, dtype=torch.float32, device=device),\n            indexing='ij')\n    else:\n        u, v = torch.meshgrid(\n            torch.arange(resolution, dtype=torch.float32, device=device),\n            torch.arange(resolution, dtype=torch.float32, device=device))\n    uv = torch.stack([u, v])\n    uv = uv * (1. / resolution) + (0.5 / resolution)\n    uv = uv.flip(0).reshape(2, -1).transpose(1, 0)\n    uv = uv.unsqueeze(0).repeat(cam2world.shape[0], 1, 1)\n\n    x_cam = uv[:, :, 0].view(batch_size, -1)\n    y_cam = uv[:, :, 1].view(batch_size, -1)\n    z_cam = torch.ones((batch_size, n_points), device=cam2world.device)\n\n    x_lift = (x_cam - cx.unsqueeze(-1)) / fx.unsqueeze(-1) * z_cam\n    y_lift = (y_cam - cy.unsqueeze(-1)) / fy.unsqueeze(-1) * z_cam\n\n    points_in_cam = torch.stack(\n        (x_lift, y_lift, z_cam, torch.ones_like(z_cam)), dim=-1)\n\n    # camera coordinate to world coordinate\n    points_in_world = torch.bmm(cam2world, points_in_cam.permute(0, 2, 1))\n    points_in_world = points_in_world.permute(0, 2, 1)[:, :, :3]\n\n    ray_dirs = points_in_world - cam_in_world[:, None, :]\n    ray_dirs = torch.nn.functional.normalize(ray_dirs, dim=2)\n\n    ray_origins = cam_in_world.unsqueeze(1).repeat(1, ray_dirs.shape[1], 1)\n\n    return ray_origins, ray_dirs\n"
  },
  {
    "path": "mmagic/models/editors/eg3d/renderer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"The renderer is a module that takes in rays, decides where to sample along\neach ray, and computes pixel colors using the volume rendering equation.\"\"\"\n\nfrom typing import Any, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom ..stylegan3.stylegan3_modules import FullyConnectedLayer\nfrom .eg3d_utils import (get_ray_limits_box, inverse_transform_sampling,\n                         linspace_batch)\n\n\nclass EG3DRenderer(BaseModule):\n    \"\"\"Renderer for EG3D. This class samples render points on each input ray\n    and interpolate the triplane feature corresponding to the points'\n    coordinates. Then, predict each point's RGB feature and density (sigma) by\n    a neural network and calculate the RGB feature of each ray by integration.\n    Different from typical NeRF models, the decoder of EG3DRenderer takes\n    triplane feature of each points as input instead of positional encoding of\n    the coordinates.\n\n    Args:\n        decoder_cfg (dict): The config to build neural renderer.\n        ray_start (float): The start position of all rays.\n        ray_end (float): The end position of all rays.\n        box_warp (float): The side length of the cube spanned by the triplanes.\n            The box is axis-aligned, centered at the origin. The range of each\n            axis is `[-box_warp/2, box_warp/2]`. If `box_warp=1.8`, it has\n            vertices at the range of axis is `[-0.9, 0.9]`. Defaults to 1.\n        depth_resolution (int): Resolution of depth, as well as the number of\n            points per ray. Defaults to 64.\n        depth_resolution_importance (int): Resolution of depth in hierarchical\n            sampling. Defaults to 64.\n        clamp_mode (str): The clamp mode for density predicted by neural\n            renderer. Defaults to 'softplus'.\n        white_back (bool): Whether render a white background. Defaults to True.\n        projection_mode (str): The projection method to mapping coordinates of\n            render points to plane feature. The usage of this argument please\n            refer to :meth:`self.project_onto_planes` and\n            https://github.com/NVlabs/eg3d/issues/67. Defaults to 'Official'.\n    \"\"\"\n\n    def __init__(self,\n                 decoder_cfg: dict,\n                 ray_start: float,\n                 ray_end: float,\n                 box_warp: float = 1,\n                 depth_resolution: int = 64,\n                 depth_resolution_importance: int = 64,\n                 density_noise: float = 0,\n                 clamp_mode: str = 'softplus',\n                 white_back: bool = True,\n                 projection_mode: str = 'Official'):\n        super().__init__()\n        self.decoder = EG3DDecoder(**decoder_cfg)\n\n        self.ray_start = ray_start\n        self.ray_end = ray_end\n        self.box_warp = box_warp\n        self.depth_resolution = depth_resolution\n        self.depth_resolution_importance = depth_resolution_importance\n        self.density_noise = density_noise\n\n        self.clamp_mode = clamp_mode\n        self.white_back = white_back\n        self.projection_mode = projection_mode\n\n    def get_value(self,\n                  target: str,\n                  render_kwargs: Optional[dict] = None) -> Any:\n        \"\"\"Get value of target field.\n\n        Args:\n            target (str): The key of the target field.\n            render_kwargs (Optional[dict], optional): The input key word\n                arguments dict. Defaults to None.\n\n        Returns:\n            Any: The default value of target field.\n        \"\"\"\n        if render_kwargs is None:\n            return getattr(self, target)\n        return render_kwargs.get(target, getattr(self, target))\n\n    def forward(self,\n                planes: torch.Tensor,\n                ray_origins: torch.Tensor,\n                ray_directions: torch.Tensor,\n                render_kwargs: Optional[dict] = None) -> Tuple[torch.Tensor]:\n        \"\"\"Render 2D RGB feature, weighed depth and weights with the passed\n        triplane features and rays. 'weights' denotes `w` in Equation 5 of the\n        NeRF's paper.\n\n        Args:\n            planes (torch.Tensor): The triplane features shape like\n                (bz, 3, TriPlane_feat, TriPlane_res, TriPlane_res).\n            ray_origins (torch.Tensor): The original of each ray to render,\n                shape like (bz, NeRF_res * NeRF_res, 3).\n            ray_directions (torch.Tensor): The direction vector of each ray to\n                render, shape like (bz, NeRF_res * NeRF_res, 3).\n            render_kwargs (Optional[dict], optional): The specific kwargs for\n                rendering. Defaults to None.\n\n        Returns:\n            Tuple[torch.Tensor]: Renderer RGB feature, weighted depths and\n                weights.\n        \"\"\"\n        ray_start = self.get_value('ray_start', render_kwargs)\n        ray_end = self.get_value('ray_end', render_kwargs)\n        box_warp = self.get_value('box_warp', render_kwargs)\n        depth_resolution = self.get_value('depth_resolution', render_kwargs)\n        depth_resolution_importance = self.get_value(\n            'depth_resolution_importance', render_kwargs)\n        density_noise = self.get_value('density_noise', render_kwargs)\n\n        if ray_start == ray_end == 'auto':\n            ray_start, ray_end = get_ray_limits_box(\n                ray_origins, ray_directions, box_side_length=box_warp)\n            is_ray_valid = ray_end > ray_start\n            if torch.any(is_ray_valid).item():\n                ray_start[~is_ray_valid] = ray_start[is_ray_valid].min()\n                ray_end[~is_ray_valid] = ray_start[is_ray_valid].max()\n            depths_coarse = self.sample_stratified(ray_origins, ray_start,\n                                                   ray_end, depth_resolution)\n        else:\n            assert (isinstance(ray_start, float) and isinstance(\n                ray_end, float)), (\n                    '\\'ray_start\\' and \\'ray_end\\' must be both float type or '\n                    f'both \\'auto\\'. But receive {ray_start} and {ray_end}.')\n            assert ray_start < ray_end, (\n                '\\'ray_start\\' must less than \\'ray_end\\'.')\n            # Create stratified depth samples\n            depths_coarse = self.sample_stratified(ray_origins, ray_start,\n                                                   ray_end, depth_resolution)\n\n        batch_size, num_rays, samples_per_ray, _ = depths_coarse.shape\n\n        # Coarse Pass\n        sample_coordinates = (\n            ray_origins.unsqueeze(-2) +\n            depths_coarse * ray_directions.unsqueeze(-2)).reshape(\n                batch_size, -1, 3)\n\n        out = self.neural_rendering(planes, sample_coordinates, density_noise,\n                                    box_warp)\n        colors_coarse = out['rgb']\n        densities_coarse = out['sigma']\n        colors_coarse = colors_coarse.reshape(batch_size, num_rays,\n                                              samples_per_ray,\n                                              colors_coarse.shape[-1])\n        densities_coarse = densities_coarse.reshape(batch_size, num_rays,\n                                                    samples_per_ray, 1)\n\n        # Fine Pass\n        N_importance = depth_resolution_importance\n        if N_importance is not None and N_importance > 0:\n            _, _, weights = self.volume_rendering(colors_coarse,\n                                                  densities_coarse,\n                                                  depths_coarse)\n\n            depths_fine = self.sample_importance(depths_coarse, weights,\n                                                 N_importance)\n            sample_coordinates = (\n                ray_origins.unsqueeze(-2) +\n                depths_fine * ray_directions.unsqueeze(-2)).reshape(\n                    batch_size, -1, 3)\n\n            out = self.neural_rendering(planes, sample_coordinates,\n                                        density_noise, box_warp)\n            colors_fine = out['rgb']\n            densities_fine = out['sigma']\n            colors_fine = colors_fine.reshape(batch_size, num_rays,\n                                              N_importance,\n                                              colors_fine.shape[-1])\n            densities_fine = densities_fine.reshape(batch_size, num_rays,\n                                                    N_importance, 1)\n\n            all_depths, all_colors, all_densities = self.unify_samples(\n                depths_coarse, colors_coarse, densities_coarse, depths_fine,\n                colors_fine, densities_fine)\n\n            # Aggregate\n            rgb_final, depth_final, weights = self.volume_rendering(\n                all_colors, all_densities, all_depths)\n        else:\n            rgb_final, depth_final, weights = self.volume_rendering(\n                colors_coarse, densities_coarse, depths_coarse)\n\n        return rgb_final, depth_final, weights.sum(2)\n\n    def sample_stratified(self, ray_origins: torch.Tensor,\n                          ray_start: Union[float, torch.Tensor],\n                          ray_end: Union[float, torch.Tensor],\n                          depth_resolution: int) -> torch.Tensor:\n        \"\"\"Return depths of approximately uniformly spaced samples along rays.\n\n        Args:\n            ray_origins (torch.Tensor): The original of each ray, shape like\n                (bz, NeRF_res * NeRF_res, 3). Only used to provide\n                device and shape info.\n            ray_start (Union[float, torch.Tensor]): The start position of rays.\n                If a float is passed, all rays will have the same start\n                distance.\n            ray_end (Union[float, torch.Tensor]): The end position of rays. If\n                a float is passed, all rays will have the same end distance.\n            depth_resolution (int): Resolution of depth, as well as the number\n                of points per ray.\n\n        Returns:\n            torch.Tensor: The sampled coarse depth shape like\n                (bz, NeRF_res * NeRF_res, 1).\n        \"\"\"\n        N, M, _ = ray_origins.shape\n        if isinstance(ray_start, torch.Tensor):\n            # perform linspace for batch of tensor\n            depths_coarse = linspace_batch(ray_start, ray_end,\n                                           depth_resolution)\n            depths_coarse = depths_coarse.permute(1, 2, 0, 3)\n            depth_delta = (ray_end - ray_start) / (depth_resolution - 1)\n            depths_coarse += torch.rand_like(depths_coarse) * depth_delta[...,\n                                                                          None]\n        else:\n            depths_coarse = torch.linspace(\n                ray_start,\n                ray_end,\n                depth_resolution,\n                device=ray_origins.device)\n            depths_coarse = depths_coarse.reshape(1, 1, depth_resolution, 1)\n            depths_coarse = depths_coarse.repeat(N, M, 1, 1)\n\n            depth_delta = (ray_end - ray_start) / (depth_resolution - 1)\n            depths_coarse += torch.rand_like(depths_coarse) * depth_delta\n\n        return depths_coarse\n\n    def neural_rendering(self, planes: torch.Tensor, sample_coordinates: float,\n                         density_noise: float, box_warp: float) -> dict:\n        \"\"\"Predict RGB features and densities of the coordinates by neural\n        renderer model and the triplane input.\n\n        Args:\n            planes (torch.Tensor): Triplane feature shape like\n                (bz, 3, TriPlane_feat, TriPlane_res, TriPlane_res).\n            sample_coordinates (torch.Tensor): Coordinates of the sampling\n                points, shape like (bz, N_depth * NeRF_res * NeRF_res, 1).\n            density_noise (float): Strength of noise add to the predicted\n                density.\n            box_warp (float): The side length of the cube spanned by the\n                triplanes.\n\n        Returns:\n            dict: A dict contains RGB features ('rgb') and densities ('sigma').\n        \"\"\"\n        sampled_features = self.sample_from_planes(\n            planes, sample_coordinates, box_warp=box_warp)\n\n        out = self.decoder(sampled_features)\n        if density_noise > 0:\n            out['sigma'] += torch.randn_like(out['sigma']) * density_noise\n        return out\n\n    def sample_from_planes(self,\n                           plane_features: torch.Tensor,\n                           coordinates: torch.Tensor,\n                           interp_mode: str = 'bilinear',\n                           box_warp: float = None) -> torch.Tensor:\n        \"\"\"Sample from feature from triplane feature with the passed\n        coordinates of render points.\n\n        Args:\n            plane_features (torch.Tensor): The triplane feature.\n            coordinates (torch.Tensor): The coordinates of points to render.\n            interp_mode (str): The interpolation mode to sample feature from\n                triplane.\n            box_warp (float): The side length of the cube spanned by the\n                triplanes.\n\n        Returns:\n            torch.Tensor: The sampled triplane feature of the render points.\n        \"\"\"\n        N, n_planes, C, H, W = plane_features.shape\n        _, M, _ = coordinates.shape\n        plane_features = plane_features.view(N * n_planes, C, H, W)\n\n        coordinates = (2 / box_warp) * coordinates\n        # NOTE: do not support change projection_mode for specific renderer,\n        # use self.projection_mode\n        projected_coordinates = self.project_onto_planes(coordinates)\n        projected_coordinates = projected_coordinates[:, None, ...]\n\n        output_features = torch.nn.functional.grid_sample(\n            plane_features,\n            projected_coordinates.float(),\n            mode=interp_mode,\n            padding_mode='zeros',\n            align_corners=False)\n        output_features = output_features.permute(0, 3, 2, 1).reshape(\n            N, n_planes, M, C)\n        return output_features\n\n    def project_onto_planes(self, coordinates: torch.Tensor) -> torch.Tensor:\n        \"\"\"Project 3D points to plane formed by coordinate axes. In this\n        function, we use indexing operation to replace matrix multiplication to\n        achieve higher calculation performance.\n\n        In the original implementation, the mapping matrix is incorrect.\n        Therefore we support users to define `projection_mode` to control\n        projection behavior in the initialization function of\n        :class:`~EG3DRenderer`. If you want to run inference with the official\n        pretrained model, please remember to set\n        `projection_mode = 'official'`. More information please refer to\n        https://github.com/NVlabs/eg3d/issues/67.\n\n        If the project mode `official`, the equivalent projection matrix is\n        inverse matrix of:\n\n            [[[1, 0, 0], [0, 1, 0], [0, 0, 1]],\n            [[1, 0, 0], [0, 0, 1], [0, 1, 0]],\n            [[0, 0, 1], [1, 0, 0], [0, 1, 0]]]\n\n        Otherwise, the equivalent projection matrix is inverse matrix of:\n\n            [[[1, 0, 0], [0, 1, 0], [0, 0, 1]],\n            [[1, 0, 0], [0, 0, 1], [0, 1, 0]],\n            [[0, 0, 1], [0, 1, 0], [1, 0, 0]]]\n\n        Args:\n            coordinates (torch.Tensor): The coordinates of the render points.\n                shape like (bz, NeRF_res * NeRF_res * N_depth, 3).\n\n        Returns:\n            torch.Tensor: The projected coordinates.\n        \"\"\"\n        N, _, _ = coordinates.shape\n        xy_coord = coordinates[:, :, (0, 1)]  # (bz, N_points, 3)\n        xz_coord = coordinates[:, :, (0, 2)]  # (bz, N_points, 3)\n        if self.projection_mode.upper() == 'OFFICIAL':\n            yz_coord = coordinates[:, :, (2, 0)]  # actually zx_coord\n        else:\n            yz_coord = coordinates[:, :, (2, 1)]\n        coord_proejcted = torch.cat([xy_coord, xz_coord, yz_coord], dim=0)\n        # create a index list to release the following remapping:\n        # [xy, xy, ..., xz, xz, ..., yz, yz, ...] -> [xy, xz, yz, ...]\n        index = []\n        for n in range(N):\n            index += [n, N + n, N * 2 + n]\n        return coord_proejcted[index, ...]\n\n    def unify_samples(self, depths_c: torch.Tensor, colors_c: torch.Tensor,\n                      densities_c: torch.Tensor, depths_f: torch.Tensor,\n                      colors_f: torch.Tensor,\n                      densities_f: torch.Tensor) -> Tuple[torch.Tensor]:\n        \"\"\"Sort and merge coarse samples and fine samples.\n\n        Args:\n            depths_c (torch.Tensor): Coarse depths shape like\n                (bz, NeRF_res * NeRF_res, N_depth, 1).\n            colors_c (torch.Tensor): Coarse color features shape like\n                (bz, NeRF_res * NeRF_res, N_depth, N_feat).\n            densities_c (torch.Tensor): Coarse densities shape like\n                (bz, NeRF_res * NeRF_res, N_depth, 1).\n            depths_f (torch.Tensor): Fine depths shape like\n                (bz, NeRF_res * NeRF_res, N_depth_fine, 1).\n            colors_f (torch.Tensor): Fine colors features shape like\n                (bz, NeRF_res * NeRF_res, N_depth_fine, N_feat).\n            densities_f (torch.Tensor): Fine densities shape like\n                (bz, NeRF_res * NeRF_res, N_depth_fine, 1).\n\n        Returns:\n            Tuple[torch.Tensor]: Unified depths, color features and densities.\n                The third dimension of returns are `N_depth + N_depth_fine`.\n        \"\"\"\n        all_depths = torch.cat([depths_c, depths_f], dim=-2)\n        all_colors = torch.cat([colors_c, colors_f], dim=-2)\n        all_densities = torch.cat([densities_c, densities_f], dim=-2)\n\n        _, indices = torch.sort(all_depths, dim=-2)\n        all_depths = torch.gather(all_depths, -2, indices)\n        all_colors = torch.gather(\n            all_colors, -2, indices.expand(-1, -1, -1, all_colors.shape[-1]))\n        all_densities = torch.gather(all_densities, -2,\n                                     indices.expand(-1, -1, -1, 1))\n\n        return all_depths, all_colors, all_densities\n\n    def volume_rendering(self, colors: torch.Tensor, densities: torch.Tensor,\n                         depths: torch.Tensor) -> Tuple[torch.Tensor]:\n        \"\"\"Volume rendering.\n\n        Args:\n            colors (torch.Tensor): Color feature for each points. Shape like\n                (bz, N_points, N_depth, N_feature).\n            densities (torch.Tensor): Density for each points. Shape like\n                (bz, N_points, N_depth, 1).\n            depths (torch.Tensor): Depths for each points. Shape like\n                (bz, N_points, N_depth, 1).\n\n        Returns:\n            Tuple[torch.Tensor]: A tuple of color feature\n                `(bz, N_points, N_feature)`, weighted depth\n                `(bz, N_points, 1)` and weight\n                `(bz, N_points, N_depth-1, 1)`.\n        \"\"\"\n        deltas = depths[:, :, 1:] - depths[:, :, :-1]\n        colors_mid = (colors[:, :, :-1] + colors[:, :, 1:]) / 2\n        densities_mid = (densities[:, :, :-1] + densities[:, :, 1:]) / 2\n        depths_mid = (depths[:, :, :-1] + depths[:, :, 1:]) / 2\n\n        if self.clamp_mode == 'softplus':\n            # activation bias of -1 makes things initialize better\n            densities_mid = F.softplus(densities_mid - 1)\n        else:\n            assert False, (\n                'EG3DRenderer only supports \\'softplus\\' for \\'clamp_mode\\', '\n                f'but receive \\'{self.clamp_mode}\\'.')\n\n        density_delta = densities_mid * deltas\n\n        alpha = 1 - torch.exp(-density_delta)\n\n        alpha_shifted = torch.cat(\n            [torch.ones_like(alpha[:, :, :1]), 1 - alpha + 1e-10], -2)\n        weights = alpha * torch.cumprod(alpha_shifted, -2)[:, :, :-1]\n\n        composite_rgb = torch.sum(weights * colors_mid, -2)\n        weight_total = weights.sum(2)\n        composite_depth = torch.sum(weights * depths_mid, -2) / weight_total\n\n        # clip the composite to min/max range of depths\n        if digit_version(TORCH_VERSION) < digit_version('1.8.0'):\n            composite_depth[torch.isnan(composite_depth)] = float('inf')\n        else:\n            composite_depth = torch.nan_to_num(composite_depth, float('inf'))\n        composite_depth = torch.clamp(composite_depth, torch.min(depths),\n                                      torch.max(depths))\n\n        if self.white_back:\n            composite_rgb = composite_rgb + 1 - weight_total\n\n        composite_rgb = composite_rgb * 2 - 1  # Scale to (-1, 1)\n\n        return composite_rgb, composite_depth, weights\n\n    @torch.no_grad()\n    def sample_importance(self, z_vals: torch.Tensor, weights: torch.Tensor,\n                          N_importance: int) -> torch.Tensor:\n        \"\"\"Return depths of importance sampled points along rays.\n\n        Args:\n            z_vals (torch.Tensor): Coarse Z value (depth). Shape like\n                (bz, N_points, N_depth, N_feature).\n            weights (torch.Tensor): Weights of the coarse samples. Shape like\n                (bz, N_points, N_depths-1, 1).\n            N_importance (int): Number of samples to resample.\n        \"\"\"\n        batch_size, num_rays, samples_per_ray, _ = z_vals.shape\n        z_vals = z_vals.reshape(batch_size * num_rays, samples_per_ray)\n        # -1 to account for loss of 1 sample in MipRayMarcher\n        weights = weights.reshape(batch_size * num_rays, -1)\n\n        # smooth weights as MipNeRF\n        # max(weights[:-1], weights[1:])\n        weights = F.max_pool1d(weights.unsqueeze(1).float(), 2, 1, padding=1)\n        # 0.5 * (weights[:-1] + weights[1:])\n        weights = F.avg_pool1d(weights, 2, 1).squeeze()\n        weights = weights + 0.01  # add resampling padding\n\n        z_vals_mid = 0.5 * (z_vals[:, :-1] + z_vals[:, 1:])\n        importance_z_vals = inverse_transform_sampling(z_vals_mid,\n                                                       weights[:, 1:-1],\n                                                       N_importance).detach()\n        importance_z_vals = importance_z_vals.reshape(batch_size, num_rays,\n                                                      N_importance, 1)\n        return importance_z_vals\n\n\nclass EG3DDecoder(BaseModule):\n    \"\"\"Decoder for EG3D model.\n\n    Args:\n        in_channels (int): The number of input channels.\n        out_channels (int): The number of output channels. Defaults to 32.\n        hidden_channels (int): The number of channels of hidden layer.\n            Defaults to 64.\n        lr_multiplier (float, optional): Equalized learning rate multiplier.\n            Defaults to 1.\n        rgb_padding (float): Padding for RGB output. Defaults to 0.001.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels: int,\n                 out_channels: int = 32,\n                 hidden_channels: int = 64,\n                 lr_multiplier: float = 1,\n                 rgb_padding: float = 0.001):\n        super().__init__()\n        self.net = nn.Sequential(\n            FullyConnectedLayer(\n                in_channels, hidden_channels, lr_multiplier=lr_multiplier),\n            nn.Softplus(),\n            FullyConnectedLayer(\n                hidden_channels, 1 + out_channels,\n                lr_multiplier=lr_multiplier))\n        self.rgb_padding = rgb_padding\n\n    def forward(self, sampled_features: torch.Tensor) -> dict:\n        \"\"\"Forward function.\n\n        Args:\n            sampled_features (torch.Tensor): The sampled triplane feature for\n                each points. Shape like (batch_size, xxx, xxx, n_ch).\n\n        Returns:\n            dict: A dict contains rgb feature and sigma value for each point.\n        \"\"\"\n        sampled_features = sampled_features.mean(1)\n        N, M, C = sampled_features.shape\n\n        feat = sampled_features.view(-1, C)\n        feat = self.net(feat)\n        feat = feat.view(N, M, -1)\n\n        rgb = torch.sigmoid(\n            feat[..., 1:]) * (1 + 2 * self.rgb_padding) - self.rgb_padding\n        sigma = feat[..., 0:1]\n\n        return {'rgb': rgb, 'sigma': sigma}\n"
  },
  {
    "path": "mmagic/models/editors/esrgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .esrgan import ESRGAN\nfrom .rrdb_net import RRDBNet\n\n__all__ = [\n    'ESRGAN',\n    'RRDBNet',\n]\n"
  },
  {
    "path": "mmagic/models/editors/esrgan/esrgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom ..srgan import SRGAN\n\n\n@MODELS.register_module()\nclass ESRGAN(SRGAN):\n    \"\"\"Enhanced SRGAN model for single image super-resolution.\n\n    Ref:\n    ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks.\n    It uses RaGAN for GAN updates:\n    The relativistic discriminator: a key element missing from standard GAN.\n\n    Args:\n        generator (dict): Config for the generator.\n        discriminator (dict): Config for the discriminator. Default: None.\n        gan_loss (dict): Config for the gan loss.\n            Note that the loss weight in gan loss is only for the generator.\n        pixel_loss (dict): Config for the pixel loss. Default: None.\n        perceptual_loss (dict): Config for the perceptual loss. Default: None.\n        train_cfg (dict): Config for training. Default: None.\n            You may change the training of gan by setting:\n            `disc_steps`: how many discriminator updates after one generate\n            update;\n            `disc_init_steps`: how many discriminator updates at the start of\n            the training.\n            These two keys are useful when training with WGAN.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n    \"\"\"\n\n    def g_step(self, batch_outputs: torch.Tensor, batch_gt_data: torch.Tensor):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        losses = dict()\n\n        # pix loss\n        if self.pixel_loss:\n            losses['loss_pix'] = self.pixel_loss(batch_outputs, batch_gt_data)\n\n        # perceptual loss\n        if self.perceptual_loss:\n            loss_percep, loss_style = self.perceptual_loss(\n                batch_outputs, batch_gt_data)\n            if loss_percep is not None:\n                losses['loss_perceptual'] = loss_percep\n            if loss_style is not None:\n                losses['loss_style'] = loss_style\n\n        # gan loss for generator\n        if self.gan_loss and self.discriminator:\n            real_d_pred = self.discriminator(batch_gt_data).detach()\n            fake_g_pred = self.discriminator(batch_outputs)\n            loss_gan_fake = self.gan_loss(\n                fake_g_pred - torch.mean(real_d_pred),\n                target_is_real=True,\n                is_disc=False)\n            loss_gan_real = self.gan_loss(\n                real_d_pred - torch.mean(fake_g_pred),\n                target_is_real=False,\n                is_disc=False)\n            losses['loss_gan'] = (loss_gan_fake + loss_gan_real) / 2\n\n        return losses\n\n    def d_step_real(self, batch_outputs: torch.Tensor,\n                    batch_gt_data: torch.Tensor):\n        \"\"\"D step of real data.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        # real\n        fake_d_pred = self.discriminator(batch_outputs)\n        real_d_pred = self.discriminator(batch_gt_data)\n        loss_d_real = self.gan_loss(\n            real_d_pred - torch.mean(fake_d_pred.detach()),\n            target_is_real=True,\n            is_disc=True\n        ) * 0.5  # 0.5 for averaging loss_d_real and loss_d_fake\n\n        self.real_d_pred = torch.mean(real_d_pred.detach())\n        # for d_step_fake\n\n        return loss_d_real\n\n    def d_step_fake(self, batch_outputs: torch.Tensor, batch_gt_data):\n        \"\"\"D step of fake data.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        # fake\n        fake_d_pred = self.discriminator(batch_outputs.detach())\n        loss_d_fake = self.gan_loss(\n            fake_d_pred - self.real_d_pred, target_is_real=False, is_disc=True\n        ) * 0.5  # 0.5 for averaging loss_d_real and loss_d_fake\n\n        return loss_d_fake\n"
  },
  {
    "path": "mmagic/models/editors/esrgan/rrdb_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import pixel_unshuffle\nfrom mmagic.models.utils import default_init_weights, make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass RRDBNet(BaseModule):\n    \"\"\"Networks consisting of Residual in Residual Dense Block, which is used\n    in ESRGAN and Real-ESRGAN.\n\n    ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks.\n    Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data. # noqa: E501\n    Currently, it supports [x1/x2/x4] upsampling scale factor.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64\n        num_blocks (int): Block number in the trunk network. Defaults: 23\n        growth_channels (int): Channels for each growth. Default: 32.\n        upscale_factor (int): Upsampling factor. Support x1, x2 and x4.\n            Default: 4.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n    _supported_upscale_factors = [1, 2, 4]\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=23,\n                 growth_channels=32,\n                 upscale_factor=4,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        if upscale_factor in self._supported_upscale_factors:\n            in_channels = in_channels * ((4 // upscale_factor)**2)\n        else:\n            raise ValueError(f'Unsupported scale factor {upscale_factor}. '\n                             f'Currently supported ones are '\n                             f'{self._supported_upscale_factors}.')\n\n        self.upscale_factor = upscale_factor\n        self.conv_first = nn.Conv2d(in_channels, mid_channels, 3, 1, 1)\n        self.body = make_layer(\n            RRDB,\n            num_blocks,\n            mid_channels=mid_channels,\n            growth_channels=growth_channels)\n        self.conv_body = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n        # upsample\n        self.conv_up1 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n        self.conv_up2 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n        self.conv_hr = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n        self.conv_last = nn.Conv2d(mid_channels, out_channels, 3, 1, 1)\n\n        self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        if self.upscale_factor in [1, 2]:\n            feat = pixel_unshuffle(x, scale=4 // self.upscale_factor)\n        else:\n            feat = x\n\n        feat = self.conv_first(feat)\n        body_feat = self.conv_body(self.body(feat))\n        feat = feat + body_feat\n\n        # upsample\n        feat = self.lrelu(\n            self.conv_up1(F.interpolate(feat, scale_factor=2, mode='nearest')))\n        feat = self.lrelu(\n            self.conv_up2(F.interpolate(feat, scale_factor=2, mode='nearest')))\n\n        out = self.conv_last(self.lrelu(self.conv_hr(feat)))\n        return out\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n        if self.init_cfg:\n            super().init_weights()\n        else:\n            # Use smaller std for better stability and performance. We\n            # use 0.1. See more details in \"ESRGAN: Enhanced Super-Resolution\n            # Generative Adversarial Networks\"\n            for m in [\n                    self.conv_first, self.conv_body, self.conv_up1,\n                    self.conv_up2, self.conv_hr, self.conv_last\n            ]:\n                default_init_weights(m, 0.1)\n\n\nclass ResidualDenseBlock(nn.Module):\n    \"\"\"Residual Dense Block.\n\n    Used in RRDB block in ESRGAN.\n\n    Args:\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        growth_channels (int): Channels for each growth. Default: 32.\n    \"\"\"\n\n    def __init__(self, mid_channels=64, growth_channels=32):\n        super().__init__()\n        for i in range(5):\n            out_channels = mid_channels if i == 4 else growth_channels\n            self.add_module(\n                f'conv{i+1}',\n                nn.Conv2d(mid_channels + i * growth_channels, out_channels, 3,\n                          1, 1))\n        self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)\n\n        self.init_weights()\n\n    def init_weights(self):\n        \"\"\"Init weights for ResidualDenseBlock.\n\n        Use smaller std for better stability and performance. We empirically\n        use 0.1. See more details in \"ESRGAN: Enhanced Super-Resolution\n        Generative Adversarial Networks\"\n        \"\"\"\n        for i in range(5):\n            default_init_weights(getattr(self, f'conv{i+1}'), 0.1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x1 = self.lrelu(self.conv1(x))\n        x2 = self.lrelu(self.conv2(torch.cat((x, x1), 1)))\n        x3 = self.lrelu(self.conv3(torch.cat((x, x1, x2), 1)))\n        x4 = self.lrelu(self.conv4(torch.cat((x, x1, x2, x3), 1)))\n        x5 = self.conv5(torch.cat((x, x1, x2, x3, x4), 1))\n        # Empirically, we use 0.2 to scale the residual for better performance\n        return x5 * 0.2 + x\n\n\nclass RRDB(nn.Module):\n    \"\"\"Residual in Residual Dense Block.\n\n    Used in RRDB-Net in ESRGAN.\n\n    Args:\n        mid_channels (int): Channel number of intermediate features.\n        growth_channels (int): Channels for each growth. Default: 32.\n    \"\"\"\n\n    def __init__(self, mid_channels, growth_channels=32):\n        super().__init__()\n        self.rdb1 = ResidualDenseBlock(mid_channels, growth_channels)\n        self.rdb2 = ResidualDenseBlock(mid_channels, growth_channels)\n        self.rdb3 = ResidualDenseBlock(mid_channels, growth_channels)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = self.rdb1(x)\n        out = self.rdb2(out)\n        out = self.rdb3(out)\n        # Empirically, we use 0.2 to scale the residual for better performance\n        return out * 0.2 + x\n"
  },
  {
    "path": "mmagic/models/editors/fastcomposer/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .fastcomposer import FastComposer\n\n__all__ = ['FastComposer']\n"
  },
  {
    "path": "mmagic/models/editors/fastcomposer/fastcomposer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom collections import OrderedDict\nfrom typing import Any, Callable, Dict, List, Optional, Union\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom torch import nn\nfrom torch.hub import load_state_dict_from_url\nfrom tqdm import tqdm\nfrom transformers import CLIPTokenizer\n\nfrom mmagic.registry import MODELS\nfrom ..stable_diffusion import StableDiffusion\nfrom .fastcomposer_util import FastComposerModel, get_object_transforms\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass FastComposer(StableDiffusion):\n\n    def __init__(self,\n                 pretrained_cfg: dict,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 dtype: str = 'fp32',\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor=dict(type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None):\n        super().__init__(vae, text_encoder, tokenizer, unet, scheduler,\n                         test_scheduler, dtype, enable_xformers,\n                         noise_offset_weight, tomesd_cfg, data_preprocessor,\n                         init_cfg)\n        self.vae = self.vae.model\n        self.unet = self.unet.model\n        model = FastComposerModel.from_pretrained(pretrained_cfg, self.vae,\n                                                  self.unet)\n        if pretrained_cfg['finetuned_model_path'][:7] == 'http://' or \\\n                pretrained_cfg['finetuned_model_path'][:8] == 'https://':\n            model.load_state_dict(\n                load_state_dict_from_url(\n                    pretrained_cfg['finetuned_model_path'],\n                    map_location='cpu'),\n                strict=False)\n        elif pretrained_cfg['finetuned_model_path']:\n            model.load_state_dict(\n                torch.load(\n                    pretrained_cfg['finetuned_model_path'],\n                    map_location='cpu'),\n                strict=False)\n        weight_dtype = torch.float32\n        if dtype == 'fp16':\n            weight_dtype = torch.float16\n        elif dtype == 'bf16':\n            weight_dtype = torch.bfloat16\n        model = model.to(weight_dtype)\n\n        self.unet = model.unet\n\n        if pretrained_cfg['enable_xformers_memory_efficient_attention']:\n            self.unet.enable_xformers_memory_efficient_attention()\n\n        self.text_encoder = model.text_encoder\n        self.image_encoder = model.image_encoder\n\n        self.postfuse_module = model.postfuse_module\n\n        del model\n\n        self.special_tokenizer = CLIPTokenizer.from_pretrained(\n            pretrained_cfg['pretrained_model_name_or_path'],\n            subfolder='tokenizer',\n            revision=pretrained_cfg['revision'],\n        )\n        self.special_tokenizer.add_tokens(['img'], special_tokens=True)\n        self.image_token_id = self.special_tokenizer.convert_tokens_to_ids(\n            'img')\n\n        self.object_transforms = get_object_transforms(pretrained_cfg)\n\n    @torch.no_grad()\n    def _tokenize_and_mask_noun_phrases_ends(self, caption):\n        \"\"\"Augment the text embedding.\"\"\"\n\n        input_ids = self.special_tokenizer.encode(caption)\n        noun_phrase_end_mask = [False for _ in input_ids]\n        clean_input_ids = []\n        clean_index = 0\n\n        for i, id in enumerate(input_ids):\n            if id == self.image_token_id:\n                noun_phrase_end_mask[clean_index - 1] = True\n            else:\n                clean_input_ids.append(id)\n                clean_index += 1\n\n        max_len = self.special_tokenizer.model_max_length\n\n        if len(clean_input_ids) > max_len:\n            clean_input_ids = clean_input_ids[:max_len]\n        else:\n            clean_input_ids = clean_input_ids + [\n                self.tokenizer.pad_token_id\n            ] * (\n                max_len - len(clean_input_ids))\n\n        if len(noun_phrase_end_mask) > max_len:\n            noun_phrase_end_mask = noun_phrase_end_mask[:max_len]\n        else:\n            noun_phrase_end_mask = noun_phrase_end_mask + [False] * (\n                max_len - len(noun_phrase_end_mask))\n\n        clean_input_ids = torch.tensor(clean_input_ids, dtype=torch.long)\n        noun_phrase_end_mask = torch.tensor(\n            noun_phrase_end_mask, dtype=torch.bool)\n        return clean_input_ids.unsqueeze(0), noun_phrase_end_mask.unsqueeze(0)\n\n    @torch.no_grad()\n    def _encode_augmented_prompt(self, prompt: str,\n                                 reference_images: List[Image.Image],\n                                 device: torch.device,\n                                 weight_dtype: torch.dtype):\n        \"\"\"Encode reference images.\n\n        Args:\n            prompt (str or list(int)): prompt to be encoded.\n            reference_images: (List[Image.Image]): List of reference images.\n            device (torch.device):torch device.\n            weight_dtype (torch.dtype): torch.dtype.\n\n        Returns:\n            text_embeddings (torch.Tensor): text embeddings generated by\n                clip text encoder.\n        \"\"\"\n        # TODO: check this\n        object_pixel_values = []\n        for image in reference_images:\n            image_tensor = torch.from_numpy(np.array(\n                image.convert('RGB'))).permute(2, 0, 1)\n            image = self.object_transforms(image_tensor)\n            object_pixel_values.append(image)\n\n        object_pixel_values = torch.stack(\n            object_pixel_values,\n            dim=0).to(memory_format=torch.contiguous_format).float()\n        object_pixel_values = object_pixel_values.unsqueeze(0).to(\n            dtype=weight_dtype, device=device)\n        object_embeds = self.image_encoder(object_pixel_values)\n\n        id_and_mask = self._tokenize_and_mask_noun_phrases_ends(prompt)\n        input_ids, image_token_mask = id_and_mask\n        input_ids, image_token_mask = input_ids.to(\n            device), image_token_mask.to(device)\n\n        num_objects = image_token_mask.sum(dim=1)\n\n        augmented_prompt_embeds = self.postfuse_module(\n            self.text_encoder(input_ids)[0], object_embeds, image_token_mask,\n            num_objects)\n        return augmented_prompt_embeds\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]] = None,\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[Union[torch.Generator,\n                                        List[torch.Generator]]] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              prompt_embeds: Optional[torch.FloatTensor] = None,\n              negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n              output_type: Optional[str] = 'pil',\n              return_dict: bool = True,\n              callback: Optional[Callable[[int, int, torch.FloatTensor],\n                                          None]] = None,\n              callback_steps: int = 1,\n              cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n              alpha_: float = 0.7,\n              reference_subject_images: List[Image.Image] = None,\n              augmented_prompt_embeds: Optional[torch.FloatTensor] = None,\n              show_progress: bool = True):\n        r\"\"\"\n        Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide the image generation.\n                If not defined, one has to pass `prompt_embeds`.\n                instead.\n            height (`int`, *optional*):\n                defaults to\n                self.unet.config.sample_size * self.vae_scale_factor\n                The height in pixels of the generated image.\n            width (`int`, *optional*):\n                defaults to\n                self.unet.config.sample_size * self.vae_scale_factor\n                The width in pixels of the generated image.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps.\n                More denoising steps usually lead to a higher quality image\n                at the expense of slower inference.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in\n                [Classifier-Free Diffusion Guidance]\n                (https://arxiv.org/abs/2207.12598).\n                `guidance_scale` is defined as `w` of equation\n                2. of [Imagen Paper](https://arxiv.org/pdf/2205.11487.pdf).\n                Guidance scale is enabled by setting `guidance_scale >\n                1`. Higher guidance scale encourages to generate images\n                that are closely linked to the text `prompt`,\n                usually at the expense of lower image quality.\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                If not defined, one has to pass\n                `negative_prompt_embeds` instead.\n                Ignored when not using guidance\n                (i.e., ignored if `guidance_scale` is less than `1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator` or `List[torch.Generator]`,\n             *optional*):\n                One or a list of [torch generator(s)](https://pytorch.org/\n                docs/stable/generated/torch.Generator.html)\n                to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents,\n                sampled from a Gaussian distribution,\n                to be used as inputs for image generation.\n                Can be used to tweak the same generation with\n                different prompts. If not provided, a latents tensor\n                will ge generated by sampling using\n                the supplied random `generator`.\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings.\n                Can be used to easily tweak text inputs,\n                *e.g.* prompt weighting. If not provided,\n                text embeddings will be generated from `prompt`\n                input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings.\n                Can be used to easily tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will be\n                generated from `negative_prompt` input argument.\n            output_type (`str`, *optional*, defaults to `\"pil\"`):\n                The output format of the generate image. Choose between\n                [PIL](https://pillow.readthedocs.io/en/stable/):\n                `PIL.Image.Image` or `np.array`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a\n                [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`]\n                instead of a plain tuple.\n            callback (`Callable`, *optional*):\n                A function that will be called every `callback_steps`\n                steps during inference. The function will be\n                called with the following arguments: `callback(step: int,\n                timestep: int, latents: torch.FloatTensor)`.\n            callback_steps (`int`, *optional*, defaults to 1):\n                The frequency at which the `callback` function will be called.\n                If not specified, the callback will be called at every step.\n            cross_attention_kwargs (`dict`, *optional*):\n                A kwargs dictionary that if specified is passed along to the\n                `AttentionProcessor` as defined under `self.processor` in\n                [diffusers.cross_attention](https://github.com/huggingface/\n                diffusers/blob/main/src/diffusers/models/cross_attention.py).\n            alpha_ (`float`, defaults to 0.7):\n                The ratio of subject conditioning. If `alpha_` is 0.7,\n                the beginning 30% of denoising steps use text prompts,\n                while the last 70% utilize image-augmented prompts.\n                Increase alpha for identity preservation,\n                decrease it for prompt consistency.\n            reference_subject_images (`List[PIL.Image.Image]`):\n                a list of PIL images that are used as reference subjects.\n                The number of images should be equal to the\n                number of augmented tokens in the prompts.\n            augmented_prompt_embeds: (`torch.FloatTensor`, *optional*):\n                Pre-generated image augmented text embeddings.\n                If not provided, embeddings will be generated from `prompt`\n                and `reference_subject_images`.\n            show_progress: ('bool'):\n                show progress or not.\n        Examples:\n\n        Returns:\n            `OrderedDict` or `tuple`:\n            `OrderedDict` if `return_dict` is True, otherwise a `tuple.\n            When returning a tuple, the first element is a list with\n            the generated images, and the second element is a\n            list of `bool`s denoting whether the corresponding\n            generated image likely represents \"not-safe-for-work\"\n            (nsfw) content, according to the `safety_checker`.\n        \"\"\"\n        # 0. Default height and width to unet\n        height = height or self.unet.config.sample_size * self.vae_scale_factor\n        width = width or self.unet.config.sample_size * self.vae_scale_factor\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(\n            prompt,\n            height,\n            width,\n        )\n\n        assert_text = 'Prompt and reference subject images or prompt_embeds ' \\\n                      'and augmented_prompt_embeds must be provided.'\n\n        assert (prompt and reference_subject_images) or \\\n               (prompt_embeds and augmented_prompt_embeds), assert_text\n\n        # 2. Define call parameters\n        if prompt is not None and isinstance(prompt, str):\n            batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        device = self.device\n        # here `guidance_scale` is defined analog to\n        # the guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        assert do_classifier_free_guidance\n\n        # 3. Encode input prompt\n        prompt_text_only = prompt.replace('img', '')\n\n        prompt_embeds = self._encode_prompt(prompt_text_only, device,\n                                            num_images_per_prompt,\n                                            do_classifier_free_guidance,\n                                            negative_prompt)\n\n        if augmented_prompt_embeds is None:\n            augmented_prompt_embeds = self._encode_augmented_prompt(\n                prompt, reference_subject_images, device, prompt_embeds.dtype)\n            augmented_prompt_embeds = augmented_prompt_embeds.repeat(\n                num_images_per_prompt, 1, 1)\n\n        prompt_embeds = torch.cat([prompt_embeds, augmented_prompt_embeds],\n                                  dim=0)\n\n        # 4. Prepare timesteps\n        self.scheduler.set_timesteps(num_inference_steps, device=device)\n        timesteps = self.scheduler.timesteps\n\n        # 5. Prepare latent variables\n        num_channels_latents = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        start_subject_conditioning_step = (1 - alpha_) * num_inference_steps\n\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n        (null_prompt_embeds, text_prompt_embeds,\n         augmented_prompt_embeds) = prompt_embeds.chunk(3)\n\n        # 7. Denoising loop\n        num_warmup_steps = len(\n            timesteps) - num_inference_steps * self.scheduler.order\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            latent_model_input = (\n                torch.cat([latents] *\n                          2) if do_classifier_free_guidance else latents)\n            latent_model_input = self.scheduler.scale_model_input(\n                latent_model_input, t)\n\n            if i <= start_subject_conditioning_step:\n                current_prompt_embeds = torch.cat(\n                    [null_prompt_embeds, text_prompt_embeds], dim=0)\n            else:\n                current_prompt_embeds = torch.cat(\n                    [null_prompt_embeds, augmented_prompt_embeds], dim=0)\n\n            # predict the noise residual\n            noise_pred = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=current_prompt_embeds,\n                cross_attention_kwargs=cross_attention_kwargs,\n            ).sample\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n            else:\n                assert 0, 'Not Implemented'\n\n            # compute the previous noisy sample x_t -> x_t-1\n            latents = self.scheduler.step(noise_pred, t, latents,\n                                          **extra_step_kwargs).prev_sample\n\n            # call the callback, if provided\n            if i == len(timesteps) - 1 or (i + 1 > num_warmup_steps and\n                                           (i + 1) % self.scheduler.order\n                                           == 0):\n                if callback is not None and i % callback_steps == 0:\n                    callback(i, t, latents)\n        has_nsfw_concept = None\n        if output_type == 'latent':\n            image = latents\n            has_nsfw_concept = None\n        elif output_type == 'pil':\n            # 8. Post-processing\n            image = self.decode_latents(latents)\n\n            # 10. Convert to PIL\n            image = self.output_to_pil(image)\n        else:\n            # 8. Post-processing\n            image = self.decode_latents(latents)\n\n        # Offload last model to CPU\n        if hasattr(\n                self,\n                'final_offload_hook') and self.final_offload_hook is not None:\n            self.final_offload_hook.offload()\n\n        if not return_dict:\n            return (image, has_nsfw_concept)\n\n        return OrderedDict(\n            samples=image, nsfw_content_detected=has_nsfw_concept)\n"
  },
  {
    "path": "mmagic/models/editors/fastcomposer/fastcomposer_util.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport gc\nimport types\nfrom collections import OrderedDict\nfrom typing import Optional, Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nimport torchvision.transforms as T\nfrom torch import nn\nfrom torch.nn import Linear\nfrom transformers import (CLIPModel, CLIPPreTrainedModel, CLIPTextModel,\n                          CLIPVisionConfig, CLIPVisionModel)\nfrom transformers.modeling_outputs import BaseModelOutputWithPooling\n\nfrom mmagic.utils import try_import\n\n_expand_mask = try_import('transformers.models.clip.modeling_clip')\nif _expand_mask is None:\n    _expand_mask = try_import(\n        'ransformers.models.clip.modeling_clip._prepare_4d_attention_mask')\n\n\nclass FastComposerModel(nn.Module):\n    \"\"\"FastComposerModel is based on the StableDiffusion Model and the Clip\n    Model.\"\"\"\n\n    def __init__(self, text_encoder, image_encoder, vae, unet, cfg):\n        super().__init__()\n        self.text_encoder = text_encoder\n        self.image_encoder = image_encoder\n        self.vae = vae\n        self.unet = unet\n        self.use_ema = False\n        self.ema_param = None\n        self.pretrained_model_name_or_path = cfg[\n            'pretrained_model_name_or_path']\n        self.revision = cfg['revision']\n        self.non_ema_revision = cfg['non_ema_revision']\n        self.object_localization = cfg['object_localization']\n        self.object_localization_weight = cfg['object_localization_weight']\n        self.localization_layers = cfg['localization_layers']\n        self.mask_loss = cfg['mask_loss']\n        self.mask_loss_prob = cfg['mask_loss_prob']\n\n        embed_dim = text_encoder.config.hidden_size\n\n        self.postfuse_module = FastComposerPostfuseModule(embed_dim)\n\n        if self.object_localization:\n            self.cross_attention_scores = {}\n            self.unet = unet_store_cross_attention_scores(\n                self.unet, self.cross_attention_scores,\n                self.localization_layers)\n            self.object_localization_loss_fn = BalancedL1Loss(\n                cfg['object_localization_threshold'],\n                cfg['object_localization_normalize'],\n            )\n\n    def _clear_cross_attention_scores(self):\n        \"\"\"Delete cross attention scores.\"\"\"\n        if hasattr(self, 'cross_attention_scores'):\n            keys = list(self.cross_attention_scores.keys())\n            for k in keys:\n                del self.cross_attention_scores[k]\n\n        gc.collect()\n\n    @staticmethod\n    def from_pretrained(cfg, vae, unet):\n        \"\"\"Init FastComposerTextEncoder and FastComposerCLIPImageEncoder.\"\"\"\n\n        text_encoder = FastComposerTextEncoder.from_pretrained(\n            cfg['pretrained_model_name_or_path'],\n            subfolder='text_encoder',\n            revision=cfg['revision'],\n        )\n        if not isinstance(cfg['image_encoder'], dict):\n            image_encoder = FastComposerCLIPImageEncoder.from_pretrained(\n                cfg['image_encoder'])\n        else:\n            vision_model = CLIPVisionModel(\n                CLIPVisionConfig.from_dict(cfg['image_encoder']))\n            visual_projection = Linear(\n                in_features=1024, out_features=768, bias=False)\n            vision_processor = T.Normalize(\n                (0.48145466, 0.4578275, 0.40821073),\n                (0.26862954, 0.26130258, 0.27577711),\n            )\n            image_encoder = FastComposerCLIPImageEncoder(\n                vision_model,\n                visual_projection,\n                vision_processor,\n            )\n\n        return FastComposerModel(text_encoder, image_encoder, vae, unet, cfg)\n\n    def forward(self, batch, noise_scheduler):\n        \"\"\"Forward function.\n\n        Args:\n            batch (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            noise_scheduler (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n\n        Returns:\n            Dict\n        \"\"\"\n\n        pixel_values = batch['pixel_values']\n        input_ids = batch['input_ids']\n        image_token_mask = batch['image_token_mask']\n        object_pixel_values = batch['object_pixel_values']\n        num_objects = batch['num_objects']\n\n        vae_dtype = self.vae.parameters().__next__().dtype\n        vae_input = pixel_values.to(vae_dtype)\n\n        latents = self.vae.encode(vae_input).latent_dist.sample()\n        latents = latents * self.vae.config.scaling_factor\n\n        # Sample noise that we'll add to the latents\n        noise = torch.randn_like(latents)\n        bsz = latents.shape[0]\n        # Sample a random timestep for each image\n        timesteps = torch.randint(\n            0,\n            noise_scheduler.num_train_timesteps, (bsz, ),\n            device=latents.device)\n        timesteps = timesteps.long()\n\n        # Add noise to the latents according to\n        # the noise magnitude at each timestep\n        # (this is the forward diffusion process)\n        noisy_latents = noise_scheduler.add_noise(latents, noise, timesteps)\n\n        # (bsz, max_num_objects, num_image_tokens, dim)\n        object_embeds = self.image_encoder(object_pixel_values)\n\n        encoder_hidden_states = self.text_encoder(\n            input_ids, image_token_mask, object_embeds,\n            num_objects)[0]  # (bsz, seq_len, dim)\n\n        encoder_hidden_states = self.postfuse_module(\n            encoder_hidden_states,\n            object_embeds,\n            image_token_mask,\n            num_objects,\n        )\n\n        # Get the target for loss depending on the prediction type\n        if noise_scheduler.config.prediction_type == 'epsilon':\n            target = noise\n        elif noise_scheduler.config.prediction_type == 'v_prediction':\n            target = noise_scheduler.get_velocity(latents, noise, timesteps)\n        else:\n            raise ValueError('Unknown prediction type '\n                             f'{noise_scheduler.config.prediction_type}')\n\n        pred = self.unet(noisy_latents, timesteps,\n                         encoder_hidden_states).sample\n\n        if self.mask_loss and torch.rand(1) < self.mask_loss_prob:\n            object_segmaps = batch['object_segmaps']\n            mask = (object_segmaps.sum(dim=1) > 0).float()\n            mask = F.interpolate(\n                mask.unsqueeze(1),\n                size=(pred.shape[-2], pred.shape[-1]),\n                mode='bilinear',\n                align_corners=False,\n            )\n            pred = pred * mask\n            target = target * mask\n\n        denoise_loss = F.mse_loss(\n            pred.float(), target.float(), reduction='mean')\n\n        return_dict = {'denoise_loss': denoise_loss}\n\n        if self.object_localization:\n            object_segmaps = batch['object_segmaps']\n            image_token_idx = batch['image_token_idx']\n            image_token_idx_mask = batch['image_token_idx_mask']\n            localization_loss = get_object_localization_loss(\n                self.cross_attention_scores,\n                object_segmaps,\n                image_token_idx,\n                image_token_idx_mask,\n                self.object_localization_loss_fn,\n            )\n            return_dict['localization_loss'] = localization_loss\n            loss = self.object_localization_weight * localization_loss\n            loss += denoise_loss\n            self._clear_cross_attention_scores()\n        else:\n            loss = denoise_loss\n\n        return_dict['loss'] = loss\n        return return_dict\n\n\nclass FastComposerTextEncoder(CLIPPreTrainedModel):\n    \"\"\"TextEncoder for FastComposerModel.\"\"\"\n\n    @staticmethod\n    def from_pretrained(model_name_or_path, **kwargs):\n        \"\"\"Init textEncoder with Stable Diffusion Model name or path.\"\"\"\n        model = CLIPTextModel.from_pretrained(model_name_or_path, **kwargs)\n        text_model = model.text_model\n        return FastComposerTextEncoder(text_model)\n\n    def __init__(self, text_model):\n        super().__init__(text_model.config)\n        self.config = text_model.config\n        self.final_layer_norm = text_model.final_layer_norm\n        self.embeddings = text_model.embeddings\n        self.encoder = text_model.encoder\n        self._build_causal_attention_mask = build_causal_attention_mask\n\n    def forward(\n        self,\n        input_ids,\n        image_token_mask=None,\n        object_embeds=None,\n        num_objects=None,\n        attention_mask: Optional[torch.Tensor] = None,\n        output_attentions: Optional[bool] = None,\n        output_hidden_states: Optional[bool] = None,\n        return_dict: Optional[bool] = None,\n    ) -> Union[Tuple, BaseModelOutputWithPooling]:\n        \"\"\"Forward function.\n\n        Args:\n            input_ids (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            image_token_mask (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            object_embeds (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            num_objects (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            attention_mask (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            output_attentions (bool ):\n                Default to None.\n            output_hidden_states (bool ):\n                Default to None.\n            return_dict (bool ):\n                Default to None.\n\n        Returns:\n            Union[Tuple, BaseModelOutputWithPooling]\n        \"\"\"\n\n        output_attentions = (\n            output_attentions if output_attentions is not None else\n            self.config.output_attentions)\n        output_hidden_states = (\n            output_hidden_states if output_hidden_states is not None else\n            self.config.output_hidden_states)\n        return_dict = (\n            return_dict\n            if return_dict is not None else self.config.use_return_dict)\n\n        input_shape = input_ids.size()\n        input_ids = input_ids.view(-1, input_shape[-1])\n\n        hidden_states = self.embeddings(input_ids)\n\n        bsz, seq_len = input_shape\n        causal_attention_mask = self._build_causal_attention_mask(\n            bsz, seq_len, hidden_states.dtype).to(hidden_states.device)\n\n        # expand attention_mask\n        if attention_mask is not None:\n            # [bsz, seq_len] -> [bsz, 1, tgt_seq_len, src_seq_len]\n            attention_mask = _expand_mask(attention_mask, hidden_states.dtype)\n\n        encoder_outputs = self.encoder(\n            inputs_embeds=hidden_states,\n            attention_mask=attention_mask,\n            causal_attention_mask=causal_attention_mask,\n            output_attentions=output_attentions,\n            output_hidden_states=output_hidden_states,\n            return_dict=return_dict,\n        )\n\n        last_hidden_state = encoder_outputs[0]\n        last_hidden_state = self.final_layer_norm(last_hidden_state)\n\n        # text_embeds.shape = [batch_size, sequence_length, transformer.width]\n        # take features from the eot embedding\n        # (eot_token is the highest number in each sequence)\n        # casting to torch.int for onnx compatibility:\n        # argmax doesn't support int64 inputs with opset 14\n        pooled_output = last_hidden_state[\n            torch.arange(\n                last_hidden_state.shape[0], device=last_hidden_state.device),\n            input_ids.to(dtype=torch.int, device=last_hidden_state.device\n                         ).argmax(dim=-1), ]\n\n        if not return_dict:\n            return (last_hidden_state, pooled_output) + encoder_outputs[1:]\n\n        return BaseModelOutputWithPooling(\n            last_hidden_state=last_hidden_state,\n            pooler_output=pooled_output,\n            hidden_states=encoder_outputs.hidden_states,\n            attentions=encoder_outputs.attentions,\n        )\n\n\nclass FastComposerCLIPImageEncoder(CLIPPreTrainedModel):\n    \"\"\"CLIPImageEncoder for FastComposerModel.\"\"\"\n\n    @staticmethod\n    def from_pretrained(global_model_name_or_path):\n        \"\"\"Init CLIPModel with Clip model name or path.\"\"\"\n\n        model = CLIPModel.from_pretrained(global_model_name_or_path)\n        vision_model = model.vision_model\n        visual_projection = model.visual_projection\n        vision_processor = T.Normalize(\n            (0.48145466, 0.4578275, 0.40821073),\n            (0.26862954, 0.26130258, 0.27577711),\n        )\n        return FastComposerCLIPImageEncoder(\n            vision_model,\n            visual_projection,\n            vision_processor,\n        )\n\n    def __init__(\n        self,\n        vision_model,\n        visual_projection,\n        vision_processor,\n    ):\n        super().__init__(vision_model.config)\n        self.vision_model = vision_model\n        self.visual_projection = visual_projection\n        self.vision_processor = vision_processor\n\n        self.image_size = vision_model.config.image_size\n\n    def forward(self, object_pixel_values):\n        \"\"\"Forward function.\n\n        Args:\n            object_pixel_values (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n\n        b, num_objects, c, h, w = object_pixel_values.shape\n\n        object_pixel_values = object_pixel_values.view(b * num_objects, c, h,\n                                                       w)\n\n        if h != self.image_size or w != self.image_size:\n            h, w = self.image_size, self.image_size\n            object_pixel_values = F.interpolate(\n                object_pixel_values, (h, w), mode='bilinear')\n\n        object_pixel_values = self.vision_processor(object_pixel_values)\n        object_embeds = self.vision_model(object_pixel_values)[1]\n        object_embeds = self.visual_projection(object_embeds)\n        object_embeds = object_embeds.view(b, num_objects, 1, -1)\n        return object_embeds\n\n\ndef get_object_transforms(cfg):\n    \"\"\"Get Object transforms.\"\"\"\n\n    if cfg['no_object_augmentation']:\n        pre_augmentations = []\n        augmentations = []\n    else:\n        pre_augmentations = [\n            (\n                'zoomin',\n                T.RandomApply([RandomZoomIn(min_zoom=1.0, max_zoom=2.0)],\n                              p=0.5),\n            ),\n        ]\n\n        augmentations = [\n            (\n                'rotate',\n                T.RandomApply(\n                    [\n                        T.RandomAffine(\n                            degrees=30,\n                            interpolation=T.InterpolationMode.BILINEAR)\n                    ],\n                    p=0.75,\n                ),\n            ),\n            ('jitter', T.RandomApply([T.ColorJitter(0.5, 0.5, 0.5, 0.5)],\n                                     p=0.5)),\n            ('blur', T.RandomApply([T.GaussianBlur(5, sigma=(0.1, 2.0))],\n                                   p=0.5)),\n            ('gray', T.RandomGrayscale(p=0.1)),\n            ('flip', T.RandomHorizontalFlip()),\n            ('elastic', T.RandomApply([T.ElasticTransform()], p=0.5)),\n        ]\n\n    object_transforms = torch.nn.Sequential(\n        OrderedDict([\n            *pre_augmentations,\n            ('pad_to_square', PadToSquare(fill=0, padding_mode='constant')),\n            (\n                'resize',\n                T.Resize(\n                    (cfg['object_resolution'], cfg['object_resolution']),\n                    interpolation=T.InterpolationMode.BILINEAR,\n                ),\n            ),\n            *augmentations,\n            ('convert_to_float', T.ConvertImageDtype(torch.float32)),\n        ]))\n    return object_transforms\n\n\nclass FastComposerPostfuseModule(nn.Module):\n    \"\"\"Postfuse Module for FastComposerModel.\"\"\"\n\n    def __init__(self, embed_dim):\n        super().__init__()\n        self.mlp1 = MLP(\n            embed_dim * 2, embed_dim, embed_dim, use_residual=False)\n        self.mlp2 = MLP(embed_dim, embed_dim, embed_dim, use_residual=True)\n        self.layer_norm = nn.LayerNorm(embed_dim)\n\n    def fuse_fn(self, text_embeds, object_embeds):\n        \"\"\"Fuse function.\n\n        Args:\n            text_embeds (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            object_embeds (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n\n        text_object_embeds = torch.cat([text_embeds, object_embeds], dim=-1)\n        text_object_embeds = self.mlp1(text_object_embeds) + text_embeds\n        text_object_embeds = self.mlp2(text_object_embeds)\n        text_object_embeds = self.layer_norm(text_object_embeds)\n        return text_object_embeds\n\n    def forward(\n        self,\n        text_embeds,\n        object_embeds,\n        image_token_mask,\n        num_objects,\n    ) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            text_embeds (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            object_embeds (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            image_token_mask (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n\n        text_object_embeds = fuse_object_embeddings(text_embeds,\n                                                    image_token_mask,\n                                                    object_embeds, num_objects,\n                                                    self.fuse_fn)\n\n        return text_object_embeds\n\n\ndef unet_store_cross_attention_scores(unet, attention_scores, layers=5):\n    \"\"\"Unet store cross attention scores.\"\"\"\n    from diffusers.models.attention_processor import (Attention, AttnProcessor,\n                                                      AttnProcessor2_0)\n\n    UNET_LAYER_NAMES = [\n        'down_blocks.0',\n        'down_blocks.1',\n        'down_blocks.2',\n        'mid_block',\n        'up_blocks.1',\n        'up_blocks.2',\n        'up_blocks.3',\n    ]\n\n    start_layer = (len(UNET_LAYER_NAMES) - layers) // 2\n    end_layer = start_layer + layers\n    applicable_layers = UNET_LAYER_NAMES[start_layer:end_layer]\n\n    def make_new_get_attention_scores_fn(name):\n        \"\"\"Wrapper Function of create attention scores for unet.\"\"\"\n\n        def new_get_attention_scores(module, query, key, attention_mask=None):\n            \"\"\"Create attention scores for unet.\"\"\"\n            attention_probs = module.old_get_attention_scores(\n                query, key, attention_mask)\n            attention_scores[name] = attention_probs\n            return attention_probs\n\n        return new_get_attention_scores\n\n    for name, module in unet.named_modules():\n        if isinstance(module, Attention) and 'attn2' in name:\n            if not any(layer in name for layer in applicable_layers):\n                continue\n            if isinstance(module.processor, AttnProcessor2_0):\n                module.set_processor(AttnProcessor())\n            module.old_get_attention_scores = module.get_attention_scores\n            module.get_attention_scores = types.MethodType(\n                make_new_get_attention_scores_fn(name), module)\n\n    return unet\n\n\nclass BalancedL1Loss(nn.Module):\n    \"\"\"BalancedL1Loss for object localization.\"\"\"\n\n    def __init__(self, threshold=1.0, normalize=False):\n        super().__init__()\n        self.threshold = threshold\n        self.normalize = normalize\n\n    def forward(self, object_token_attn_prob, object_segmaps):\n        \"\"\"Forward function.\n\n        Args:\n            object_token_attn_prob (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n            object_segmaps (torch.Tensor ):\n                You can directly input a ``torch.Tensor``.\n\n        Returns:\n            float : ``float`` will be returned.\n        \"\"\"\n        if self.normalize:\n            object_token_attn_prob = object_token_attn_prob / (\n                object_token_attn_prob.max(dim=2, keepdim=True)[0] + 1e-5)\n        background_segmaps = 1 - object_segmaps\n        background_segmaps_sum = background_segmaps.sum(dim=2) + 1e-5\n        object_segmaps_sum = object_segmaps.sum(dim=2) + 1e-5\n\n        background_loss = (object_token_attn_prob * background_segmaps).sum(\n            dim=2) / background_segmaps_sum\n\n        object_loss = (object_token_attn_prob *\n                       object_segmaps).sum(dim=2) / object_segmaps_sum\n\n        return background_loss - object_loss\n\n\ndef get_object_localization_loss(\n    cross_attention_scores,\n    object_segmaps,\n    image_token_idx,\n    image_token_idx_mask,\n    loss_fn,\n):\n    \"\"\"To obtain the average of the loss for each layer of object\n    localization.\"\"\"\n\n    num_layers = len(cross_attention_scores)\n    loss = 0\n    for k, v in cross_attention_scores.items():\n        layer_loss = get_object_localization_loss_for_one_layer(\n            v, object_segmaps, image_token_idx, image_token_idx_mask, loss_fn)\n        loss += layer_loss\n    return loss / num_layers\n\n\ndef get_object_localization_loss_for_one_layer(\n    cross_attention_scores,\n    object_segmaps,\n    object_token_idx,\n    object_token_idx_mask,\n    loss_fn,\n):\n    \"\"\"Get object localization loss for one layer.\"\"\"\n\n    bxh, num_noise_latents, num_text_tokens = cross_attention_scores.shape\n    b, max_num_objects, _, _ = object_segmaps.shape\n    size = int(num_noise_latents**0.5)\n\n    # Resize the object segmentation maps to\n    # the size of the cross attention scores\n    object_segmaps = F.interpolate(\n        object_segmaps, size=(size, size), mode='bilinear')\n    # (b, max_num_objects, size, size)\n\n    object_segmaps = object_segmaps.view(\n        b, max_num_objects, -1)  # (b, max_num_objects, num_noise_latents)\n\n    num_heads = bxh // b\n\n    cross_attention_scores = cross_attention_scores.view(\n        b, num_heads, num_noise_latents, num_text_tokens)\n\n    # Gather object_token_attn_prob\n    object_token_attn_prob = torch.gather(\n        cross_attention_scores,\n        dim=3,\n        index=object_token_idx.view(b, 1, 1, max_num_objects).expand(\n            b, num_heads, num_noise_latents, max_num_objects),\n    )  # (b, num_heads, num_noise_latents, max_num_objects)\n\n    object_segmaps = (\n        object_segmaps.permute(0, 2,\n                               1).unsqueeze(1).expand(b, num_heads,\n                                                      num_noise_latents,\n                                                      max_num_objects))\n\n    loss = loss_fn(object_token_attn_prob, object_segmaps)\n\n    loss = loss * object_token_idx_mask.view(b, 1, max_num_objects)\n    object_token_cnt = object_token_idx_mask.sum(dim=1).view(b, 1) + 1e-5\n    loss = (loss.sum(dim=2) / object_token_cnt).mean()\n\n    return loss\n\n\nclass RandomZoomIn(nn.Module):\n    \"\"\"RandomZoomIn for object transform.\"\"\"\n\n    def __init__(self, min_zoom=1.0, max_zoom=1.5):\n        super().__init__()\n        self.min_zoom = min_zoom\n        self.max_zoom = max_zoom\n\n    def forward(self, image: torch.Tensor):\n        \"\"\"Forward function.\n\n        Args:\n            image (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        zoom = torch.rand(1) * (self.max_zoom - self.min_zoom) + self.min_zoom\n        image = T.functional.resize(\n            image,\n            (int(zoom * image.shape[1]), int(zoom * image.shape[2])),\n            interpolation=T.InterpolationMode.BILINEAR,\n        )\n        # crop top square\n        image = CropTopSquare()(image)\n        return image\n\n\nclass PadToSquare(nn.Module):\n    \"\"\"If the height of the image is greater than the width, padding will be\n    added on both sides of the image to make it a square.\"\"\"\n\n    def __init__(self, fill=0, padding_mode='constant'):\n        super().__init__()\n        self.fill = fill\n        self.padding_mode = padding_mode\n\n    def forward(self, image: torch.Tensor):\n        \"\"\"Forward function.\n\n        Args:\n            image (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        _, h, w = image.shape\n        if h == w:\n            return image\n        elif h > w:\n            padding = (h - w) // 2\n            image = torch.nn.functional.pad(\n                image,\n                (padding, padding, 0, 0),\n                self.padding_mode,\n                self.fill,\n            )\n        else:\n            padding = (w - h) // 2\n            image = torch.nn.functional.pad(\n                image,\n                (0, 0, padding, padding),\n                self.padding_mode,\n                self.fill,\n            )\n        return image\n\n\nclass CropTopSquare(nn.Module):\n    \"\"\"If the height of the image is greater than the width, the image will be\n    cropped into a square starting from the top of the image.\"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n    def forward(self, image: torch.Tensor):\n        \"\"\"Forward function.\n\n        Args:\n            image (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        _, h, w = image.shape\n        if h <= w:\n            return image\n        return image[:, :w, :]\n\n\nclass MLP(nn.Module):\n    \"\"\"Multilayer Perceptron.\"\"\"\n\n    def __init__(self, in_dim, out_dim, hidden_dim, use_residual=True):\n        super().__init__()\n        if use_residual:\n            assert in_dim == out_dim\n        self.layernorm = nn.LayerNorm(in_dim)\n        self.fc1 = nn.Linear(in_dim, hidden_dim)\n        self.fc2 = nn.Linear(hidden_dim, out_dim)\n        self.use_residual = use_residual\n        self.act_fn = nn.GELU()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor ): You can directly input a ``torch.Tensor``.\n\n        Returns:\n            torch.Tensor : ``torch.tensor`` will be returned.\n        \"\"\"\n        residual = x\n        x = self.layernorm(x)\n        x = self.fc1(x)\n        x = self.act_fn(x)\n        x = self.fc2(x)\n        if self.use_residual:\n            x = x + residual\n        return x\n\n\ndef fuse_object_embeddings(\n    inputs_embeds,\n    image_token_mask,\n    object_embeds,\n    num_objects,\n    fuse_fn=torch.add,\n):\n    \"\"\"Fuse object embeddings.\"\"\"\n\n    object_embeds = object_embeds.to(inputs_embeds.dtype)\n\n    batch_size, max_num_objects = object_embeds.shape[:2]\n    seq_length = inputs_embeds.shape[1]\n    flat_object_embeds = object_embeds.view(-1, object_embeds.shape[-2],\n                                            object_embeds.shape[-1])\n\n    valid_object_mask = (\n        torch.arange(max_num_objects,\n                     device=flat_object_embeds.device)[None, :] <\n        num_objects[:, None])\n\n    valid_object_embeds = flat_object_embeds[valid_object_mask.flatten()]\n\n    inputs_embeds = inputs_embeds.view(-1, inputs_embeds.shape[-1])\n    image_token_mask = image_token_mask.view(-1)\n    valid_object_embeds = valid_object_embeds.view(\n        -1, valid_object_embeds.shape[-1])\n\n    # slice out the image token embeddings\n    image_token_embeds = inputs_embeds[image_token_mask]\n    valid_object_embeds = fuse_fn(image_token_embeds, valid_object_embeds)\n\n    inputs_embeds.masked_scatter_(image_token_mask[:, None],\n                                  valid_object_embeds)\n    inputs_embeds = inputs_embeds.view(batch_size, seq_length, -1)\n    return inputs_embeds\n\n\ndef build_causal_attention_mask(bsz, seq_len, dtype, device=None):\n    \"\"\"The function originally belonged to CLIPTextTransformer, but it has been\n    removed in versions of transformers after 4.25.1.\"\"\"\n\n    # lazily create causal attention mask,\n    # with full attention between the vision tokens\n    # pytorch uses additive attention mask; fill with -inf\n    mask = torch.empty(bsz, seq_len, seq_len, dtype=dtype, device=device)\n    mask.fill_(torch.tensor(torch.finfo(dtype).min))\n    mask.triu_(1)  # zero out the lower diagonal\n    mask = mask.unsqueeze(1)  # expand mask\n    return mask\n"
  },
  {
    "path": "mmagic/models/editors/fba/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .fba_decoder import FBADecoder\nfrom .fba_encoder import FBAResnetDilated\n\n__all__ = [\n    'FBADecoder',\n    'FBAResnetDilated',\n]\n"
  },
  {
    "path": "mmagic/models/editors/fba/fba_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine import MMLogger\nfrom mmengine.model.weight_init import constant_init, kaiming_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FBADecoder(nn.Module):\n    \"\"\"Decoder for FBA matting.\n\n    Args:\n        pool_scales (tuple[int]): Pooling scales used in\n        Pooling Pyramid Module.\n        in_channels (int): Input channels.\n        channels (int): Channels after modules, before conv_seg.\n        conv_cfg (dict|None): Config of conv layers.\n        norm_cfg (dict|None): Config of norm layers.\n        act_cfg (dict): Config of activation layers.\n        align_corners (bool): align_corners argument of F.interpolate.\n    \"\"\"\n\n    def __init__(self,\n                 pool_scales,\n                 in_channels,\n                 channels,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='ReLU'),\n                 align_corners=False):\n        super().__init__()\n\n        assert isinstance(pool_scales, (list, tuple))\n        # Pyramid Pooling Module\n        self.pool_scales = pool_scales\n        self.in_channels = in_channels\n        self.channels = channels\n        self.conv_cfg = conv_cfg\n        self.norm_cfg = norm_cfg\n        self.act_cfg = act_cfg\n        self.align_corners = align_corners\n        self.batch_norm = False\n\n        self.ppm = []\n        for scale in self.pool_scales:\n            self.ppm.append(\n                nn.Sequential(\n                    nn.AdaptiveAvgPool2d(scale),\n                    *(ConvModule(\n                        self.in_channels,\n                        self.channels,\n                        kernel_size=1,\n                        bias=True,\n                        conv_cfg=self.conv_cfg,\n                        norm_cfg=self.norm_cfg,\n                        act_cfg=self.act_cfg).children())))\n        self.ppm = nn.ModuleList(self.ppm)\n\n        # Followed the author's implementation that\n        # concatenate conv layers described in the supplementary\n        # material between up operations\n        self.conv_up1 = nn.Sequential(*(list(\n            ConvModule(\n                self.in_channels + len(pool_scales) * 256,\n                self.channels,\n                padding=1,\n                kernel_size=3,\n                bias=True,\n                conv_cfg=self.conv_cfg,\n                norm_cfg=self.norm_cfg,\n                act_cfg=self.act_cfg).children()) + list(\n                    ConvModule(\n                        self.channels,\n                        self.channels,\n                        padding=1,\n                        bias=True,\n                        kernel_size=3,\n                        conv_cfg=self.conv_cfg,\n                        norm_cfg=self.norm_cfg,\n                        act_cfg=self.act_cfg).children())))\n\n        self.conv_up2 = nn.Sequential(*(list(\n            ConvModule(\n                self.channels * 2,\n                self.channels,\n                padding=1,\n                kernel_size=3,\n                bias=True,\n                conv_cfg=self.conv_cfg,\n                norm_cfg=self.norm_cfg,\n                act_cfg=self.act_cfg).children())))\n\n        if (self.norm_cfg['type'] == 'BN'):\n            d_up3 = 128\n        else:\n            d_up3 = 64\n\n        self.conv_up3 = nn.Sequential(*(list(\n            ConvModule(\n                self.channels + d_up3,\n                64,\n                padding=1,\n                kernel_size=3,\n                bias=True,\n                conv_cfg=self.conv_cfg,\n                norm_cfg=self.norm_cfg,\n                act_cfg=self.act_cfg).children())))\n\n        self.unpool = nn.MaxUnpool2d(2, stride=2)\n\n        conv_up4_1 = list(\n            ConvModule(\n                64 + 3 + 3 + 2,\n                32,\n                padding=1,\n                kernel_size=3,\n                bias=True,\n                act_cfg=self.act_cfg).children())\n        conv_up4_2 = list(\n            ConvModule(\n                32,\n                16,\n                padding=1,\n                kernel_size=3,\n                bias=True,\n                act_cfg=self.act_cfg).children())\n        conv_up4_3 = list(\n            ConvModule(\n                16, 7, padding=0, kernel_size=1, bias=True,\n                act_cfg=None).children())\n        self.conv_up4 = nn.Sequential(*(conv_up4_1 + conv_up4_2 + conv_up4_3))\n\n    def init_weights(self, pretrained=None):\n        \"\"\"Init weights for the model.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    kaiming_init(m)\n                elif isinstance(m, (_BatchNorm, nn.GroupNorm)):\n                    constant_init(m, 1)\n\n        else:\n            raise TypeError('pretrained must be a str or None')\n\n    def forward(self, inputs):\n        \"\"\"Forward function.\n\n        Args:\n            inputs (dict): Output dict of FbaEncoder.\n        Returns:\n            tuple(Tensor): Predicted alpha, fg and bg of the current batch.\n        \"\"\"\n\n        conv_out = inputs['conv_out']\n        img = inputs['merged']\n        two_channel_trimap = inputs['two_channel_trimap']\n        conv5 = conv_out[-1]\n        input_size = conv5.size()\n        ppm_out = [conv5]\n        for pool_scale in self.ppm:\n            ppm_out.append(\n                nn.functional.interpolate(\n                    pool_scale(conv5), (input_size[2], input_size[3]),\n                    mode='bilinear',\n                    align_corners=self.align_corners))\n        ppm_out = torch.cat(ppm_out, 1)\n        x = self.conv_up1(ppm_out)\n\n        x = torch.nn.functional.interpolate(\n            x,\n            scale_factor=2,\n            mode='bilinear',\n            align_corners=self.align_corners)\n\n        x = torch.cat((x, conv_out[-4]), 1)\n\n        x = self.conv_up2(x)\n        x = torch.nn.functional.interpolate(\n            x,\n            scale_factor=2,\n            mode='bilinear',\n            align_corners=self.align_corners)\n\n        x = torch.cat((x, conv_out[-5]), 1)\n        x = self.conv_up3(x)\n\n        x = torch.nn.functional.interpolate(\n            x,\n            scale_factor=2,\n            mode='bilinear',\n            align_corners=self.align_corners)\n\n        x = torch.cat((x, conv_out[-6][:, :3], img, two_channel_trimap), 1)\n        output = self.conv_up4(x)\n        alpha = torch.clamp(output[:, 0:1], 0, 1)\n        F = torch.sigmoid(output[:, 1:4])\n        B = torch.sigmoid(output[:, 4:7])\n\n        return alpha, F, B\n"
  },
  {
    "path": "mmagic/models/editors/fba/fba_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models.archs import ResNet\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FBAResnetDilated(ResNet):\n    \"\"\"ResNet-based encoder for FBA image matting.\"\"\"\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        # x: (merged_t, trimap_t, two_channel_trimap,merged)\n        # t refers to transformed.\n        two_channel_trimap = x[:, 9:11]\n        merged = x[:, 11:14]\n        x = x[:, 0:11, ...]\n        conv_out = [x]\n        if self.deep_stem:\n            x = self.stem(x)\n        else:\n            x = self.conv1(x)\n            x = self.norm1(x)\n            x = self.activate(x)\n        conv_out.append(x)\n        x = self.maxpool(x)\n        x = self.layer1(x)\n        conv_out.append(x)\n        x = self.layer2(x)\n        conv_out.append(x)\n        x = self.layer3(x)\n        conv_out.append(x)\n        x = self.layer4(x)\n        conv_out.append(x)\n        return {\n            'conv_out': conv_out,\n            'merged': merged,\n            'two_channel_trimap': two_channel_trimap\n        }\n"
  },
  {
    "path": "mmagic/models/editors/flavr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .flavr import FLAVR\nfrom .flavr_net import FLAVRNet\n\n__all__ = [\n    'FLAVR',\n    'FLAVRNet',\n]\n"
  },
  {
    "path": "mmagic/models/editors/flavr/flavr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models.base_models import BasicInterpolator\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import tensor2img\n\n# TODO tensor2img will be move\n\n\n@MODELS.register_module()\nclass FLAVR(BasicInterpolator):\n    \"\"\"FLAVR model for video interpolation.\n\n    Paper:\n        FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation\n\n    Ref repo: https://github.com/tarun005/FLAVR\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        required_frames (int): Required frames in each process. Default: 2\n        step_frames (int): Step size of video frame interpolation. Default: 1\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n\n    Attributes:\n        init_cfg (dict, optional): Initialization config dict.\n        data_preprocessor (:obj:`BaseDataPreprocessor`): Used for\n            pre-processing data sampled by dataloader to the format accepted by\n            :meth:`forward`.\n    \"\"\"\n\n    @staticmethod\n    def merge_frames(input_tensors, output_tensors):\n        \"\"\"merge input frames and output frames.\n\n        Interpolate a frame between the given two frames.\n\n        Merged from\n            [[in1, in2, in3, in4], [in2, in3, in4, in5], ...]\n            [[out1], [out2], [out3], ...]\n        to\n            [in1, in2, out1, in3, out2, ..., in(-3), out(-1), in(-2), in(-1)]\n\n        Args:\n            input_tensors (Tensor): The input frames with shape [n, 4, c, h, w]\n            output_tensors (Tensor): The output frames with shape\n                [n, 1, c, h, w].\n\n        Returns:\n            list[np.array]: The final frames.\n        \"\"\"\n\n        num_frames = input_tensors.shape[0]\n        result = [tensor2img(input_tensors[0, 0])]\n        for i in range(num_frames):\n            result.append(tensor2img(input_tensors[i, 1]))\n            result.append(tensor2img(output_tensors[i, 0]))\n        result.append(tensor2img(input_tensors[-1, 2]))\n        result.append(tensor2img(input_tensors[-1, 3]))\n\n        return result\n"
  },
  {
    "path": "mmagic/models/editors/flavr/flavr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FLAVRNet(BaseModule):\n    \"\"\"PyTorch implementation of FLAVR for video frame interpolation.\n\n    Paper:\n        FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation\n\n    Ref repo: https://github.com/tarun005/FLAVR\n\n    Args:\n        num_input_frames (int): Number of input frames.\n        num_output_frames (int): Number of output frames.\n        mid_channels_list (list[int]): List of number of mid channels.\n            Default: [512, 256, 128, 64]\n        encoder_layers_list (list[int]): List of number of layers in encoder.\n            Default: [2, 2, 2, 2]\n        bias (bool): If ``True``, adds a learnable bias to the conv layers.\n            Default: ``True``\n        norm_cfg (dict | None): Config dict for normalization layer.\n            Default: None\n        join_type (str): Join type of tensors from decoder and encoder.\n            Candidates are ``concat`` and ``add``. Default: ``concat``\n        up_mode (str): Up-mode UpConv3d, candidates are ``transpose`` and\n            ``trilinear``. Default: ``transpose``\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 num_input_frames,\n                 num_output_frames,\n                 mid_channels_list=[512, 256, 128, 64],\n                 encoder_layers_list=[2, 2, 2, 2],\n                 bias=False,\n                 norm_cfg=None,\n                 join_type='concat',\n                 up_mode='transpose',\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.encoder = Encoder(\n            block=BasicBlock,\n            layers=encoder_layers_list,\n            stem_layer=BasicStem,\n            mid_channels_list=mid_channels_list[::-1],\n            bias=bias,\n            norm_cfg=norm_cfg)\n\n        self.decoder = Decoder(\n            join_type=join_type,\n            up_mode=up_mode,\n            mid_channels_list=mid_channels_list,\n            batchnorm=norm_cfg)\n\n        self.feature_fuse = ConvModule(\n            mid_channels_list[3] * num_input_frames,\n            mid_channels_list[3],\n            kernel_size=1,\n            stride=1,\n            bias=False,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2, inplace=True))\n\n        out_channels = 3 * num_output_frames\n        self.conv_last = nn.Sequential(\n            nn.ReflectionPad2d(3),\n            nn.Conv2d(\n                mid_channels_list[3],\n                out_channels=out_channels,\n                kernel_size=7,\n                stride=1,\n                padding=0))\n\n    def forward(self, images: torch.Tensor):\n        \"\"\"Forward function.\n\n        Args:\n            images (Tensor): Input frames tensor with shape (N, T, C, H, W).\n\n        Returns:\n            out (Tensor): Output tensor.\n        \"\"\"\n\n        # from [b, t, c, h, w] to [b, c, d, h, w], where t==d\n        images = images.permute((0, 2, 1, 3, 4))\n\n        # Batch mean normalization works slightly better than global mean\n        # normalization, Refer to https://github.com/myungsub/CAIN\n        mean_ = images.mean((2, 3, 4), keepdim=True)\n        images = images - mean_\n\n        xs = self.encoder(images)\n\n        dx_out = self.decoder(xs)\n\n        out = self.feature_fuse(dx_out)\n        out = self.conv_last(out)\n        # b, t*c, h, w\n\n        b, c_all, h, w = out.shape\n        t = c_all // 3\n        mean_ = mean_.view(b, 1, 3, 1, 1)\n        out = out.view(b, t, 3, h, w)\n        out = out + mean_\n\n        # if t==1, which means the output only contains one frame.\n        out = out.squeeze(1)\n\n        return out\n\n\nclass Encoder(nn.Module):\n    \"\"\"Encoder of FLAVR.\n\n    Args:\n        block (nn.Module): Basic block of encoder.\n        layers (str): List of layers in encoder.\n        stem_layer (nn.Module): stem layer (conv first).\n        mid_channels_list (list[int]): List of mid channels.\n        norm_cfg (dict | None): Config dict for normalization layer.\n            Default: None\n        bias (bool): If ``True``, adds a learnable bias to the conv layers.\n            Default: ``True``\n    \"\"\"\n\n    def __init__(self, block, layers, stem_layer, mid_channels_list, norm_cfg,\n                 bias):\n        super().__init__()\n\n        self.in_channels = mid_channels_list[0]\n        self.bias = bias\n\n        self.stem_layer = stem_layer(mid_channels_list[0], bias, norm_cfg)\n\n        self.layer1 = self._make_layer(\n            block,\n            mid_channels_list[0],\n            layers[0],\n            norm_cfg=norm_cfg,\n            stride=1)\n        self.layer2 = self._make_layer(\n            block,\n            mid_channels_list[1],\n            layers[1],\n            norm_cfg=norm_cfg,\n            stride=2,\n            temporal_stride=1)\n        self.layer3 = self._make_layer(\n            block,\n            mid_channels_list[2],\n            layers[2],\n            norm_cfg=norm_cfg,\n            stride=2,\n            temporal_stride=1)\n        self.layer4 = self._make_layer(\n            block,\n            mid_channels_list[3],\n            layers[3],\n            norm_cfg=norm_cfg,\n            stride=1,\n            temporal_stride=1)\n\n        # init weights\n        self._initialize_weights()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor).\n\n        Returns:\n            tuple(Tensor): Output tensors.\n        \"\"\"\n\n        x_0 = self.stem_layer(x)\n        x_1 = self.layer1(x_0)\n        x_2 = self.layer2(x_1)\n        x_3 = self.layer3(x_2)\n        x_4 = self.layer4(x_3)\n\n        return x_0, x_1, x_2, x_3, x_4\n\n    def _make_layer(self,\n                    block,\n                    mid_channels,\n                    num_blocks,\n                    norm_cfg,\n                    stride=1,\n                    temporal_stride=None):\n        \"\"\"Make layers by stacking the blocks.\"\"\"\n        downsample = None\n\n        if stride != 1 or self.in_channels != mid_channels * block.expansion:\n            if temporal_stride:\n                ds_stride = (temporal_stride, stride, stride)\n            else:\n                ds_stride = (stride, stride, stride)\n            downsample = ConvModule(\n                self.in_channels,\n                mid_channels * block.expansion,\n                kernel_size=1,\n                stride=ds_stride,\n                bias=False,\n                conv_cfg=dict(type='Conv3d'),\n                norm_cfg=norm_cfg,\n                act_cfg=None)\n            stride = ds_stride\n\n        layers = []\n        layers.append(\n            block(\n                self.in_channels,\n                mid_channels,\n                norm_cfg=norm_cfg,\n                stride=stride,\n                bias=self.bias,\n                downsample=downsample))\n\n        self.in_channels = mid_channels * block.expansion\n        for _ in range(1, num_blocks):\n            layers.append(\n                block(\n                    self.in_channels,\n                    mid_channels,\n                    norm_cfg=norm_cfg,\n                    bias=self.bias))\n\n        return nn.Sequential(*layers)\n\n    def _initialize_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n        for m in self.modules():\n            if isinstance(m, nn.Conv3d):\n                nn.init.kaiming_normal_(\n                    m.weight, mode='fan_out', nonlinearity='relu')\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.BatchNorm3d):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight, 0, 0.01)\n                nn.init.constant_(m.bias, 0)\n\n\nclass Decoder(nn.Module):\n    \"\"\"Decoder of FLAVR.\n\n    Args:\n        join_type (str): Join type of tensors from decoder and encoder.\n            Candidates are ``concat`` and ``add``. Default: ``concat``\n        up_mode (str): Up-mode UpConv3d, candidates are ``transpose`` and\n            ``trilinear``. Default: ``transpose``\n        mid_channels_list (list[int]): List of mid channels.\n            Default: [512, 256, 128, 64]\n        batchnorm (bool): Whether contains BatchNorm3d. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 join_type,\n                 up_mode,\n                 mid_channels_list=[512, 256, 128, 64],\n                 batchnorm=False):\n        super().__init__()\n\n        growth = 2 if join_type == 'concat' else 1\n        self.join_type = join_type\n        self.lrelu = nn.LeakyReLU(0.2, True)\n\n        self.layer0 = Conv3d(\n            mid_channels_list[0],\n            mid_channels_list[1],\n            kernel_size=3,\n            padding=1,\n            bias=True,\n            batchnorm=batchnorm)\n        self.layer1 = UpConv3d(\n            mid_channels_list[1] * growth,\n            mid_channels_list[2],\n            kernel_size=(3, 4, 4),\n            stride=(1, 2, 2),\n            padding=(1, 1, 1),\n            up_mode=up_mode,\n            batchnorm=batchnorm)\n        self.layer2 = UpConv3d(\n            mid_channels_list[2] * growth,\n            mid_channels_list[3],\n            kernel_size=(3, 4, 4),\n            stride=(1, 2, 2),\n            padding=(1, 1, 1),\n            up_mode=up_mode,\n            batchnorm=batchnorm)\n        self.layer3 = Conv3d(\n            mid_channels_list[3] * growth,\n            mid_channels_list[3],\n            kernel_size=3,\n            padding=1,\n            bias=True,\n            batchnorm=batchnorm)\n        self.layer4 = UpConv3d(\n            mid_channels_list[3] * growth,\n            mid_channels_list[3],\n            kernel_size=(3, 4, 4),\n            stride=(1, 2, 2),\n            padding=(1, 1, 1),\n            up_mode=up_mode,\n            batchnorm=batchnorm)\n\n    def forward(self, xs):\n        \"\"\"Forward function.\n\n        Args:\n            xs (Tensor): Input tensor).\n\n        Returns:\n            dx_out (Tensor): Output tensor.\n        \"\"\"\n\n        dx_3 = self.lrelu(self.layer0(xs[4]))\n        dx_3 = self._join_tensors(dx_3, xs[3])\n\n        dx_2 = self.lrelu(self.layer1(dx_3))\n        dx_2 = self._join_tensors(dx_2, xs[2])\n\n        dx_1 = self.lrelu(self.layer2(dx_2))\n        dx_1 = self._join_tensors(dx_1, xs[1])\n\n        dx_0 = self.lrelu(self.layer3(dx_1))\n        dx_0 = self._join_tensors(dx_0, xs[0])\n\n        dx_out = self.lrelu(self.layer4(dx_0))\n        dx_out = torch.cat(torch.unbind(dx_out, 2), 1)\n\n        return dx_out\n\n    def _join_tensors(self, x1, x2):\n        \"\"\"Concat or Add two tensors.\n\n        Args:\n            x1 (Tensor): The first input tensor.\n            x2 (Tensor): The second input tensor.\n        \"\"\"\n\n        if self.join_type == 'concat':\n            return torch.cat([x1, x2], dim=1)\n        else:\n            return x1 + x2\n\n\nclass UpConv3d(nn.Module):\n    \"\"\"A conv block that bundles conv/SEGating/norm layers.\n\n    Args:\n        in_channels (int): Number of channels in the input feature map.\n            Same as that in ``nn._ConvNd``.\n        out_channels (int): Number of channels produced by the convolution.\n            Same as that in ``nn._ConvNd``.\n        kernel_size (int | tuple[int]): Size of the convolving kernel.\n            Same as that in ``nn._ConvNd``.\n        stride (int | tuple[int]): Stride of the convolution.\n            Same as that in ``nn._ConvNd``.\n        padding (int | tuple[int]): Zero-padding added to both sides of\n            the input. Same as that in ``nn._ConvNd``.\n        up_mode (str): Up-mode UpConv3d, candidates are ``transpose`` and\n            ``trilinear``. Default: ``transpose``.\n        batchnorm (bool): Whether contains BatchNorm3d. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 stride,\n                 padding,\n                 up_mode='transpose',\n                 batchnorm=False):\n\n        super().__init__()\n\n        self.up_mode = up_mode\n\n        if self.up_mode == 'transpose':\n            self.upconv = nn.ModuleList([\n                nn.ConvTranspose3d(\n                    in_channels,\n                    out_channels,\n                    kernel_size=kernel_size,\n                    stride=stride,\n                    padding=padding),\n                SEGating(out_channels)\n            ])\n\n        else:\n            self.upconv = nn.ModuleList([\n                nn.Upsample(\n                    mode='trilinear',\n                    scale_factor=(1, 2, 2),\n                    align_corners=False),\n                nn.Conv3d(in_channels, out_channels, kernel_size=1, stride=1),\n                SEGating(out_channels)\n            ])\n\n        if batchnorm:\n            self.upconv += [nn.BatchNorm3d(out_channels)]\n\n        self.upconv = nn.Sequential(*self.upconv)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        return self.upconv(x)\n\n\nclass Conv3d(nn.Module):\n    \"\"\"A conv block that bundles conv/SEGating/norm layers.\n\n    Args:\n        in_channels (int): Number of channels in the input feature map.\n            Same as that in ``nn._ConvNd``.\n        out_channels (int): Number of channels produced by the convolution.\n            Same as that in ``nn._ConvNd``.\n        kernel_size (int | tuple[int]): Size of the convolving kernel.\n            Same as that in ``nn._ConvNd``.\n        stride (int | tuple[int]): Stride of the convolution.\n            Same as that in ``nn._ConvNd``. Default: 1.\n        padding (int | tuple[int]): Zero-padding added to both sides of\n            the input. Same as that in ``nn._ConvNd``.\n        bias (bool): If ``True``, adds a learnable bias to the conv layer.\n            Default: ``True``\n        batchnorm (bool): Whether contains BatchNorm3d. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 stride=1,\n                 padding=0,\n                 bias=True,\n                 batchnorm=False):\n\n        super().__init__()\n        self.conv = [\n            nn.Conv3d(\n                in_channels,\n                out_channels,\n                kernel_size=kernel_size,\n                stride=stride,\n                padding=padding,\n                bias=bias),\n            SEGating(out_channels)\n        ]\n\n        if batchnorm:\n            self.conv += [nn.BatchNorm3d(out_channels)]\n\n        self.conv = nn.Sequential(*self.conv)\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        return self.conv(x)\n\n\nclass BasicStem(ConvModule):\n    \"\"\"The default conv-batchnorm-relu stem of FLAVR.\n\n    Args:\n        out_channels (int): Number of output channels. Default: 64\n        bias (bool): If ``True``, adds a learnable bias to the conv layer.\n            Default: ``False``\n        norm_cfg (dict | None): Config dict for normalization layer.\n            Default: None.\n    \"\"\"\n\n    def __init__(self, out_channels=64, bias=False, norm_cfg=None):\n        super().__init__(\n            3,\n            out_channels,\n            kernel_size=(3, 7, 7),\n            stride=(1, 2, 2),\n            padding=(1, 3, 3),\n            bias=bias,\n            conv_cfg=dict(type='Conv3d'),\n            norm_cfg=norm_cfg,\n            inplace=False)\n\n\nclass BasicBlock(nn.Module):\n    \"\"\"Basic block of encoder in FLAVR.\n\n    Args:\n        in_channels (int): Number of channels in the input feature map.\n        mid_channels (int):  Number of middle channels.\n        stride (int | tuple[int]): Stride of the first convolution.\n            Default: 1.\n        norm_cfg (dict | None): Config dict for normalization layer.\n            Default: None.\n        bias (bool): If ``True``, adds a learnable bias to the conv layers.\n            Default: ``True``\n        downsample (None | torch.nn.Module): Down-sample layer.\n            Default: None.\n    \"\"\"\n\n    expansion = 1\n\n    def __init__(\n        self,\n        in_channels,\n        mid_channels,\n        stride=1,\n        norm_cfg=None,\n        bias=False,\n        downsample=None,\n    ):\n        super().__init__()\n\n        self.conv1 = ConvModule(\n            in_channels,\n            mid_channels,\n            kernel_size=(3, 3, 3),\n            stride=stride,\n            padding=(1, 1, 1),\n            bias=bias,\n            conv_cfg=dict(type='Conv3d'),\n            norm_cfg=norm_cfg)\n        self.conv2 = ConvModule(\n            mid_channels,\n            mid_channels,\n            kernel_size=(3, 3, 3),\n            stride=(1, 1, 1),\n            padding=(1, 1, 1),\n            bias=bias,\n            conv_cfg=dict(type='Conv3d'),\n            norm_cfg=norm_cfg,\n            act_cfg=None)\n        self.fg = SEGating(mid_channels)  # Feature Gating\n        self.relu = nn.ReLU(inplace=True)\n        self.downsample = downsample\n        self.stride = stride\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            xs (Tensor): Input tensor).\n\n        Returns:\n            out (Tensor): Output tensor.\n        \"\"\"\n\n        residual = x\n        out = self.conv1(x)\n        out = self.conv2(out)\n        out = self.fg(out)\n        if self.downsample is not None:\n            residual = self.downsample(x)\n\n        out += residual\n        out = self.relu(out)\n\n        return out\n\n\nclass SEGating(nn.Module):\n    \"\"\"Gating of SE attention.\n\n    Args:\n        in_channels (int): Number of channels in the input feature map.\n    \"\"\"\n\n    def __init__(self, in_channels):\n\n        super().__init__()\n\n        self.pool = nn.AdaptiveAvgPool3d(1)\n        self.attn_layer = nn.Sequential(\n            nn.Conv3d(\n                in_channels, in_channels, kernel_size=1, stride=1, bias=True),\n            nn.Sigmoid())\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor).\n\n        Returns:\n            Tensor: Output tensors.\n        \"\"\"\n\n        out = self.pool(x)\n        y = self.attn_layer(out)\n        return x * y\n"
  },
  {
    "path": "mmagic/models/editors/gca/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .gca import GCA\nfrom .gca_module import GCAModule\nfrom .resgca_dec import ResGCADecoder, ResNetDec, ResShortcutDec\nfrom .resgca_enc import ResGCAEncoder, ResNetEnc, ResShortcutEnc\n\n__all__ = [\n    'GCA', 'GCAModule', 'ResNetEnc', 'ResShortcutEnc', 'ResGCAEncoder',\n    'ResNetDec', 'ResShortcutDec', 'ResGCADecoder'\n]\n"
  },
  {
    "path": "mmagic/models/editors/gca/gca.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nfrom mmagic.models.base_models import BaseMattor\nfrom mmagic.models.utils import get_unknown_tensor\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GCA(BaseMattor):\n    \"\"\"Guided Contextual Attention image matting model.\n\n    https://arxiv.org/abs/2001.04069\n\n    Args:\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        backbone (dict): Config of backbone.\n        loss_alpha (dict): Config of the alpha prediction loss. Default: None.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n        train_cfg (dict): Config of training. In ``train_cfg``,\n            ``train_backbone`` should be specified. If the model has a refiner,\n            ``train_refiner`` should be specified.\n        test_cfg (dict): Config of testing. In ``test_cfg``, If the model has a\n            refiner, ``train_refiner`` should be specified.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor,\n                 backbone,\n                 loss_alpha=None,\n                 init_cfg: Optional[dict] = None,\n                 train_cfg=None,\n                 test_cfg=None):\n        super().__init__(\n            backbone=backbone,\n            data_preprocessor=data_preprocessor,\n            init_cfg=init_cfg,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg)\n\n        self.loss_alpha = MODELS.build(loss_alpha)\n\n    def _forward(self, inputs):\n        \"\"\"Forward function.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        raw_alpha = self.backbone(inputs)\n        pred_alpha = (raw_alpha.tanh() + 1.0) / 2.0\n        return pred_alpha\n\n    def _forward_test(self, inputs):\n        \"\"\"Forward function for testing GCA model.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor.\n\n        Returns:\n            Tensor: Output tensor of model.\n        \"\"\"\n        return self._forward(inputs)\n\n    def _forward_train(self, inputs, data_samples):\n        \"\"\"Forward function for training GCA model.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement]): data samples collated by\n                :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Contains the loss items and batch information.\n        \"\"\"\n        trimap = inputs[:, 3:, :, :]\n        gt_alpha = data_samples.gt_alpha\n        pred_alpha = self._forward(inputs)\n\n        # FormatTrimap(to_onehot=False) will change unknown_value to 1\n        # FormatTrimap(to_onehot=True) will shift to 3 dim,\n        # get_unknown_tensor can handle that directly without knowing\n        # unknown_value.\n        weight = get_unknown_tensor(trimap, unknown_value=1)\n\n        losses = {'loss': self.loss_alpha(pred_alpha, gt_alpha, weight)}\n        return losses\n"
  },
  {
    "path": "mmagic/models/editors/gca/gca_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model.weight_init import constant_init, xavier_init\nfrom torch.nn import functional as F\n\n\nclass GCAModule(nn.Module):\n    \"\"\"Guided Contextual Attention Module.\n\n    From https://arxiv.org/pdf/2001.04069.pdf.\n    Based on https://github.com/nbei/Deep-Flow-Guided-Video-Inpainting.\n    This module use image feature map to augment the alpha feature map with\n    guided contextual attention score.\n\n    Image feature and alpha feature are unfolded to small patches and later\n    used as conv kernel. Thus, we refer the unfolding size as kernel size.\n    Image feature patches have a default kernel size 3 while the kernel size of\n    alpha feature patches could be specified by `rate` (see `rate` below). The\n    image feature patches are used to convolve with the image feature itself\n    to calculate the contextual attention. Then the attention feature map is\n    convolved by alpha feature patches to obtain the attention alpha feature.\n    At last, the attention alpha feature is added to the input alpha feature.\n\n    Args:\n        in_channels (int): Input channels of the guided contextual attention\n            module.\n        out_channels (int): Output channels of the guided contextual attention\n            module.\n        kernel_size (int): Kernel size of image feature patches. Default 3.\n        stride (int): Stride when unfolding the image feature. Default 1.\n        rate (int): The downsample rate of image feature map. The corresponding\n            kernel size and stride of alpha feature patches will be `rate x 2`\n            and `rate`. It could be regarded as the granularity of the gca\n            module. Default: 2.\n        pad_args (dict): Parameters of padding when convolve image feature with\n            image feature patches or alpha feature patches. Allowed keys are\n            `mode` and `value`. See torch.nn.functional.pad() for more\n            information. Default: dict(mode='reflect').\n        interpolation (str): Interpolation method in upsampling and\n            downsampling.\n        penalty (float): Punishment hyperparameter to avoid a large correlation\n            between each unknown patch and itself. Default: -1e4.\n        eps (float): A small number to avoid dividing by 0 when calculating\n            the normed image feature patch. Default: 1e-4.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size=3,\n                 stride=1,\n                 rate=2,\n                 pad_args=dict(mode='reflect'),\n                 interpolation='nearest',\n                 penalty=-1e4,\n                 eps=1e-4):\n        super().__init__()\n        self.kernel_size = kernel_size\n        self.stride = stride\n        self.rate = rate\n        self.pad_args = pad_args\n        self.interpolation = interpolation\n        self.penalty = penalty\n        self.eps = eps\n\n        # reduced the channels of input image feature.\n        self.guidance_conv = nn.Conv2d(in_channels, in_channels // 2, 1)\n\n        # convolution after the attention alpha feature\n        self.out_conv = ConvModule(\n            out_channels,\n            out_channels,\n            1,\n            norm_cfg=dict(type='BN'),\n            act_cfg=None)\n\n        self.init_weights()\n\n    def init_weights(self):\n        \"\"\"Init weights for the model.\"\"\"\n        xavier_init(self.guidance_conv, distribution='uniform')\n        xavier_init(self.out_conv.conv, distribution='uniform')\n        constant_init(self.out_conv.norm, 1e-3)\n\n    def forward(self, img_feat, alpha_feat, unknown=None, softmax_scale=1.):\n        \"\"\"Forward function of GCAModule.\n\n        Args:\n            img_feat (Tensor): Image feature map of shape\n                (N, ori_c, ori_h, ori_w).\n            alpha_feat (Tensor): Alpha feature map of shape\n                (N, alpha_c, ori_h, ori_w).\n            unknown (Tensor, optional): Unknown area map generated by trimap.\n                If specified, this tensor should have shape\n                (N, 1, ori_h, ori_w).\n            softmax_scale (float, optional): The softmax scale of the attention\n                if unknown area is not provided in forward. Default: 1.\n\n        Returns:\n            Tensor: The augmented alpha feature.\n        \"\"\"\n\n        if alpha_feat.shape[2:4] != img_feat.shape[2:4]:\n            raise ValueError(\n                'image feature size does not align with alpha feature size: '\n                f'image feature size {img_feat.shape[2:4]}, '\n                f'alpha feature size {alpha_feat.shape[2:4]}')\n\n        if unknown is not None and unknown.shape[2:4] != img_feat.shape[2:4]:\n            raise ValueError(\n                'image feature size does not align with unknown mask size: '\n                f'image feature size {img_feat.shape[2:4]}, '\n                f'unknown mask size {unknown.shape[2:4]}')\n\n        # preprocess image feature\n        img_feat = self.guidance_conv(img_feat)\n        img_feat = F.interpolate(\n            img_feat, scale_factor=1 / self.rate, mode=self.interpolation)\n\n        # preprocess unknown mask\n        unknown, softmax_scale = self.process_unknown_mask(\n            unknown, img_feat, softmax_scale)\n\n        img_ps, alpha_ps, unknown_ps = self.extract_feature_maps_patches(\n            img_feat, alpha_feat, unknown)\n\n        # create self correlation mask with shape:\n        # (N, img_h*img_w, img_h, img_w)\n        self_mask = self.get_self_correlation_mask(img_feat)\n\n        # split tensors by batch dimension; tuple is returned\n        img_groups = torch.split(img_feat, 1, dim=0)\n        img_ps_groups = torch.split(img_ps, 1, dim=0)\n        alpha_ps_groups = torch.split(alpha_ps, 1, dim=0)\n        unknown_ps_groups = torch.split(unknown_ps, 1, dim=0)\n        scale_groups = torch.split(softmax_scale, 1, dim=0)\n        groups = (img_groups, img_ps_groups, alpha_ps_groups,\n                  unknown_ps_groups, scale_groups)\n\n        out = []\n        # i is the virtual index of the sample in the current batch\n        for img_i, img_ps_i, alpha_ps_i, unknown_ps_i, scale_i in zip(*groups):\n            similarity_map = self.compute_similarity_map(img_i, img_ps_i)\n\n            gca_score = self.compute_guided_attention_score(\n                similarity_map, unknown_ps_i, scale_i, self_mask)\n\n            out_i = self.propagate_alpha_feature(gca_score, alpha_ps_i)\n\n            out.append(out_i)\n\n        out = torch.cat(out, dim=0)\n        out.reshape_as(alpha_feat)\n\n        out = self.out_conv(out) + alpha_feat\n        return out\n\n    def extract_feature_maps_patches(self, img_feat, alpha_feat, unknown):\n        \"\"\"Extract image feature, alpha feature unknown patches.\n\n        Args:\n            img_feat (Tensor): Image feature map of shape\n                (N, img_c, img_h, img_w).\n            alpha_feat (Tensor): Alpha feature map of shape\n                (N, alpha_c, ori_h, ori_w).\n            unknown (Tensor, optional): Unknown area map generated by trimap of\n                shape (N, 1, img_h, img_w).\n\n        Returns:\n            tuple: 3-tuple of\n\n                ``Tensor``: Image feature patches of shape \\\n                    (N, img_h*img_w, img_c, img_ks, img_ks).\n\n                ``Tensor``: Guided contextual attention alpha feature map. \\\n                    (N, img_h*img_w, alpha_c, alpha_ks, alpha_ks).\n\n                ``Tensor``: Unknown mask of shape (N, img_h*img_w, 1, 1).\n        \"\"\"\n        # extract image feature patches with shape:\n        # (N, img_h*img_w, img_c, img_ks, img_ks)\n        img_ks = self.kernel_size\n        img_ps = self.extract_patches(img_feat, img_ks, self.stride)\n\n        # extract alpha feature patches with shape:\n        # (N, img_h*img_w, alpha_c, alpha_ks, alpha_ks)\n        alpha_ps = self.extract_patches(alpha_feat, self.rate * 2, self.rate)\n\n        # extract unknown mask patches with shape: (N, img_h*img_w, 1, 1)\n        unknown_ps = self.extract_patches(unknown, img_ks, self.stride)\n        unknown_ps = unknown_ps.squeeze(dim=2)  # squeeze channel dimension\n        unknown_ps = unknown_ps.mean(dim=[2, 3], keepdim=True)\n\n        return img_ps, alpha_ps, unknown_ps\n\n    def compute_similarity_map(self, img_feat, img_ps):\n        \"\"\"Compute similarity between image feature patches.\n\n        Args:\n            img_feat (Tensor): Image feature map of shape\n                (1, img_c, img_h, img_w).\n            img_ps (Tensor): Image feature patches tensor of shape\n                (1, img_h*img_w, img_c, img_ks, img_ks).\n\n        Returns:\n            Tensor: Similarity map between image feature patches with shape \\\n                (1, img_h*img_w, img_h, img_w).\n        \"\"\"\n        img_ps = img_ps[0]  # squeeze dim 0\n        # convolve the feature to get correlation (similarity) map\n        escape_NaN = torch.FloatTensor([self.eps]).to(img_feat)\n        img_ps_normed = img_ps / torch.max(self.l2_norm(img_ps), escape_NaN)\n        img_feat = self.pad(img_feat, self.kernel_size, self.stride)\n        similarity_map = F.conv2d(img_feat, img_ps_normed)\n\n        return similarity_map\n\n    def compute_guided_attention_score(self, similarity_map, unknown_ps, scale,\n                                       self_mask):\n        \"\"\"Compute guided attention score.\n\n        Args:\n            similarity_map (Tensor): Similarity map of image feature with shape\n                (1, img_h*img_w, img_h, img_w).\n            unknown_ps (Tensor): Unknown area patches tensor of shape\n                (1, img_h*img_w, 1, 1).\n            scale (Tensor): Softmax scale of known and unknown area:\n                [unknown_scale, known_scale].\n            self_mask (Tensor): Self correlation mask of shape\n                (1, img_h*img_w, img_h, img_w). At (1, i*i, i, i) mask value\n                equals -1e4 for i in [1, img_h*img_w] and other area is all\n                zero.\n\n        Returns:\n            Tensor: Similarity map between image feature patches with shape \\\n                (1, img_h*img_w, img_h, img_w).\n        \"\"\"\n        # scale the correlation with predicted scale factor for known and\n        # unknown area\n        unknown_scale, known_scale = scale[0]\n        out = similarity_map * (\n            unknown_scale * unknown_ps.gt(0.).float() +\n            known_scale * unknown_ps.le(0.).float())\n        # mask itself, self-mask only applied to unknown area\n        out = out + self_mask * unknown_ps\n        gca_score = F.softmax(out, dim=1)\n\n        return gca_score\n\n    def propagate_alpha_feature(self, gca_score, alpha_ps):\n        \"\"\"Propagate alpha feature based on guided attention score.\n\n        Args:\n            gca_score (Tensor): Guided attention score map of shape\n                (1, img_h*img_w, img_h, img_w).\n            alpha_ps (Tensor): Alpha feature patches tensor of shape\n                (1, img_h*img_w, alpha_c, alpha_ks, alpha_ks).\n\n        Returns:\n            Tensor: Propagated alpha feature map of shape \\\n                (1, alpha_c, alpha_h, alpha_w).\n        \"\"\"\n        alpha_ps = alpha_ps[0]  # squeeze dim 0\n        if self.rate == 1:\n            gca_score = self.pad(gca_score, kernel_size=2, stride=1)\n            alpha_ps = alpha_ps.permute(1, 0, 2, 3)\n            out = F.conv2d(gca_score, alpha_ps) / 4.\n        else:\n            out = F.conv_transpose2d(\n                gca_score, alpha_ps, stride=self.rate, padding=1) / 4.\n\n        return out\n\n    def process_unknown_mask(self, unknown, img_feat, softmax_scale):\n        \"\"\"Process unknown mask.\n\n        Args:\n            unknown (Tensor, optional): Unknown area map generated by trimap of\n                shape (N, 1, ori_h, ori_w)\n            img_feat (Tensor): The interpolated image feature map of shape\n                (N, img_c, img_h, img_w).\n            softmax_scale (float, optional): The softmax scale of the attention\n                if unknown area is not provided in forward. Default: 1.\n\n        Returns:\n            tuple: 2-tuple of\n\n                ``Tensor``: Interpolated unknown area map of shape \\\n                    (N, img_h*img_w, img_h, img_w).\n\n                ``Tensor``: Softmax scale tensor of known and unknown area of \\\n                    shape (N, 2).\n        \"\"\"\n        n, _, h, w = img_feat.shape\n\n        if unknown is not None:\n            unknown = unknown.clone()\n            unknown = F.interpolate(\n                unknown, scale_factor=1 / self.rate, mode=self.interpolation)\n            unknown_mean = unknown.mean(dim=[2, 3])\n            known_mean = 1 - unknown_mean\n            unknown_scale = torch.clamp(\n                torch.sqrt(unknown_mean / known_mean), 0.1, 10).to(img_feat)\n            known_scale = torch.clamp(\n                torch.sqrt(known_mean / unknown_mean), 0.1, 10).to(img_feat)\n            softmax_scale = torch.cat([unknown_scale, known_scale], dim=1)\n        else:\n            unknown = torch.ones((n, 1, h, w)).to(img_feat)\n            softmax_scale = torch.FloatTensor(\n                [softmax_scale,\n                 softmax_scale]).view(1, 2).repeat(n, 1).to(img_feat)\n\n        return unknown, softmax_scale\n\n    def extract_patches(self, x, kernel_size, stride):\n        \"\"\"Extract feature patches.\n\n        The feature map will be padded automatically to make sure the number of\n        patches is equal to `(H / stride) * (W / stride)`.\n\n        Args:\n            x (Tensor): Feature map of shape (N, C, H, W).\n            kernel_size (int): Size of each patches.\n            stride (int): Stride between patches.\n\n        Returns:\n            Tensor: Extracted patches of shape \\\n                (N, (H / stride) * (W / stride) , C, kernel_size, kernel_size).\n        \"\"\"\n        n, c, _, _ = x.shape\n        x = self.pad(x, kernel_size, stride)\n        x = F.unfold(x, (kernel_size, kernel_size), stride=(stride, stride))\n        x = x.permute(0, 2, 1)\n        x = x.reshape(n, -1, c, kernel_size, kernel_size)\n        return x\n\n    def pad(self, x, kernel_size, stride):\n        \"\"\"Pad input tensor.\n\n        Args:\n            x (Tensor): Input tensor.\n            kernel_size (int): Kernel size of conv layer.\n            stride (int): Stride of conv layer.\n\n        Returns:\n            Tensor: Padded tensor\n        \"\"\"\n        left = (kernel_size - stride + 1) // 2\n        right = (kernel_size - stride) // 2\n        pad = (left, right, left, right)\n        return F.pad(x, pad, **self.pad_args)\n\n    def get_self_correlation_mask(self, img_feat):\n        \"\"\"Create self correlation mask.\n\n        Args:\n            img_feat (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Mask tensor.\n        \"\"\"\n        _, _, h, w = img_feat.shape\n        # As ONNX does not support dynamic num_classes, we have to convert it\n        # into an integer\n        self_mask = F.one_hot(\n            torch.arange(h * w).view(h, w), num_classes=int(h * w))\n        self_mask = self_mask.permute(2, 0, 1).view(1, h * w, h, w)\n        # use large negative value to mask out self-correlation before softmax\n        self_mask = self_mask * self.penalty\n        return self_mask.to(img_feat)\n\n    @staticmethod\n    def l2_norm(x):\n        \"\"\"L2 normalization function.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: L2 normalized output tensor.\n        \"\"\"\n\n        x = x**2\n        x = x.sum(dim=[1, 2, 3], keepdim=True)\n        return torch.sqrt(x)\n"
  },
  {
    "path": "mmagic/models/editors/gca/resgca_dec.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init\n\nfrom mmagic.registry import MODELS\nfrom .gca_module import GCAModule\nfrom .resgca_enc import BasicBlock\n\n\nclass BasicBlockDec(BasicBlock):\n    \"\"\"Basic residual block for decoder.\n\n    For decoder, we use ConvTranspose2d with kernel_size 4 and padding 1 for\n    conv1. And the output channel of conv1 is modified from `out_channels` to\n    `in_channels`.\n    \"\"\"\n\n    def build_conv1(self, in_channels, out_channels, kernel_size, stride,\n                    conv_cfg, norm_cfg, act_cfg, with_spectral_norm):\n        \"\"\"Build conv1 of the block.\n\n        Args:\n            in_channels (int): The input channels of the ConvModule.\n            out_channels (int): The output channels of the ConvModule.\n            kernel_size (int): The kernel size of the ConvModule.\n            stride (int): The stride of the ConvModule. If stride is set to 2,\n                then ``conv_cfg`` will be overwritten as\n                ``dict(type='Deconv')`` and ``kernel_size`` will be overwritten\n                as 4.\n            conv_cfg (dict): The conv config of the ConvModule.\n            norm_cfg (dict): The norm config of the ConvModule.\n            act_cfg (dict): The activation config of the ConvModule.\n            with_spectral_norm (bool): Whether use spectral norm.\n\n        Returns:\n            nn.Module: The built ConvModule.\n        \"\"\"\n        if stride == 2:\n            conv_cfg = dict(type='Deconv')\n            kernel_size = 4\n            padding = 1\n        else:\n            padding = kernel_size // 2\n\n        return ConvModule(\n            in_channels,\n            in_channels,\n            kernel_size,\n            stride=stride,\n            padding=padding,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n\n    def build_conv2(self, in_channels, out_channels, kernel_size, conv_cfg,\n                    norm_cfg, with_spectral_norm):\n        \"\"\"Build conv2 of the block.\n\n        Args:\n            in_channels (int): The input channels of the ConvModule.\n            out_channels (int): The output channels of the ConvModule.\n            kernel_size (int): The kernel size of the ConvModule.\n            conv_cfg (dict): The conv config of the ConvModule.\n            norm_cfg (dict): The norm config of the ConvModule.\n            with_spectral_norm (bool): Whether use spectral norm.\n\n        Returns:\n            nn.Module: The built ConvModule.\n        \"\"\"\n        return ConvModule(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride=1,\n            padding=kernel_size // 2,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm)\n\n\n@MODELS.register_module()\nclass ResNetDec(BaseModule):\n    \"\"\"ResNet decoder for image matting.\n\n    This class is adopted from https://github.com/Yaoyi-Li/GCA-Matting.\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlockDec` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Channel num of input features.\n        kernel_size (int): Kernel size of the conv layers in the decoder.\n        conv_cfg (dict): dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        with_spectral_norm (bool): Whether use spectral norm after conv.\n            Default: False.\n        late_downsample (bool): Whether to adopt late downsample strategy,\n            Default: False.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 block,\n                 layers,\n                 in_channels,\n                 kernel_size=3,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(\n                     type='LeakyReLU', negative_slope=0.2, inplace=True),\n                 with_spectral_norm=False,\n                 late_downsample=False,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n        if block == 'BasicBlockDec':\n            block = BasicBlockDec\n        else:\n            raise NotImplementedError(f'{block} is not implemented.')\n\n        self.kernel_size = kernel_size\n        self.inplanes = in_channels\n        self.midplanes = 64 if late_downsample else 32\n\n        self.layer1 = self._make_layer(block, 256, layers[0], conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n        self.layer2 = self._make_layer(block, 128, layers[1], conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n        self.layer3 = self._make_layer(block, 64, layers[2], conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n        self.layer4 = self._make_layer(block, self.midplanes, layers[3],\n                                       conv_cfg, norm_cfg, act_cfg,\n                                       with_spectral_norm)\n\n        self.conv1 = ConvModule(\n            self.midplanes,\n            32,\n            4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='Deconv'),\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n\n        self.conv2 = ConvModule(\n            32,\n            1,\n            self.kernel_size,\n            padding=self.kernel_size // 2,\n            act_cfg=None)\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            for m in self.modules():\n                if isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):\n                    constant_init(m.weight, 1)\n                    constant_init(m.bias, 0)\n\n        # Zero-initialize the last BN in each residual branch, so that the\n        # residual branch starts with zeros, and each residual block behaves\n        # like an identity. This improves the model by 0.2~0.3% according to\n        # https://arxiv.org/abs/1706.02677\n        for m in self.modules():\n            if isinstance(m, BasicBlockDec):\n                constant_init(m.conv2.bn.weight, 0)\n\n    def _make_layer(self, block, planes, num_blocks, conv_cfg, norm_cfg,\n                    act_cfg, with_spectral_norm):\n        upsample = nn.Sequential(\n            nn.UpsamplingNearest2d(scale_factor=2),\n            ConvModule(\n                self.inplanes,\n                planes * block.expansion,\n                1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm))\n\n        layers = [\n            block(\n                self.inplanes,\n                planes,\n                kernel_size=self.kernel_size,\n                stride=2,\n                interpolation=upsample,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg,\n                with_spectral_norm=with_spectral_norm)\n        ]\n        self.inplanes = planes * block.expansion\n        for _ in range(1, num_blocks):\n            layers.append(\n                block(\n                    self.inplanes,\n                    planes,\n                    kernel_size=self.kernel_size,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    with_spectral_norm=with_spectral_norm))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n        x = self.conv1(x)\n        x = self.conv2(x)\n\n        return x\n\n\n@MODELS.register_module()\nclass ResShortcutDec(ResNetDec):\n    \"\"\"ResNet decoder for image matting with shortcut connection.\n\n    ::\n\n        feat1 --------------------------- conv2 --- out\n                                       |\n        feat2 ---------------------- conv1\n                                  |\n        feat3 ----------------- layer4\n                             |\n        feat4 ------------ layer3\n                        |\n        feat5 ------- layer2\n                   |\n        out ---  layer1\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlockDec` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Channel number of input features.\n        kernel_size (int): Kernel size of the conv layers in the decoder.\n        conv_cfg (dict): Dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        late_downsample (bool): Whether to adopt late downsample strategy,\n            Default: False.\n    \"\"\"\n\n    def forward(self, inputs):\n        \"\"\"Forward function of resnet shortcut decoder.\n\n        Args:\n            inputs (dict): Output dictionary of the ResNetEnc containing:\n\n              - out (Tensor): Output of the ResNetEnc.\n              - feat1 (Tensor): Shortcut connection from input image.\n              - feat2 (Tensor): Shortcut connection from conv2 of ResNetEnc.\n              - feat3 (Tensor): Shortcut connection from layer1 of ResNetEnc.\n              - feat4 (Tensor): Shortcut connection from layer2 of ResNetEnc.\n              - feat5 (Tensor): Shortcut connection from layer3 of ResNetEnc.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        feat1 = inputs['feat1']\n        feat2 = inputs['feat2']\n        feat3 = inputs['feat3']\n        feat4 = inputs['feat4']\n        feat5 = inputs['feat5']\n        x = inputs['out']\n\n        x = self.layer1(x) + feat5\n        x = self.layer2(x) + feat4\n        x = self.layer3(x) + feat3\n        x = self.layer4(x) + feat2\n        x = self.conv1(x) + feat1\n        x = self.conv2(x)\n\n        return x\n\n\n@MODELS.register_module()\nclass ResGCADecoder(ResShortcutDec):\n    \"\"\"ResNet decoder with shortcut connection and gca module.\n\n    ::\n\n        feat1 ---------------------------------------- conv2 --- out\n                                                    |\n        feat2 ----------------------------------- conv1\n                                               |\n        feat3 ------------------------------ layer4\n                                          |\n        feat4, img_feat -- gca_module - layer3\n                        |\n        feat5 ------- layer2\n                   |\n        out ---  layer1\n\n    * gca module also requires unknown tensor generated by trimap which is \\\n    ignored in the above graph.\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlockDec` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Channel number of input features.\n        kernel_size (int): Kernel size of the conv layers in the decoder.\n        conv_cfg (dict): Dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        with_spectral_norm (bool): Whether use spectral norm. Default: False.\n        late_downsample (bool): Whether to adopt late downsample strategy,\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 block,\n                 layers,\n                 in_channels,\n                 kernel_size=3,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(\n                     type='LeakyReLU', negative_slope=0.2, inplace=True),\n                 with_spectral_norm=False,\n                 late_downsample=False):\n        super().__init__(block, layers, in_channels, kernel_size, conv_cfg,\n                         norm_cfg, act_cfg, with_spectral_norm,\n                         late_downsample)\n        self.gca = GCAModule(128, 128)\n\n    def forward(self, inputs):\n        \"\"\"Forward function of resnet shortcut decoder.\n\n        Args:\n            inputs (dict): Output dictionary of the ResGCAEncoder containing:\n\n              - out (Tensor): Output of the ResGCAEncoder.\n              - feat1 (Tensor): Shortcut connection from input image.\n              - feat2 (Tensor): Shortcut connection from conv2 of \\\n                    ResGCAEncoder.\n              - feat3 (Tensor): Shortcut connection from layer1 of \\\n                    ResGCAEncoder.\n              - feat4 (Tensor): Shortcut connection from layer2 of \\\n                    ResGCAEncoder.\n              - feat5 (Tensor): Shortcut connection from layer3 of \\\n                    ResGCAEncoder.\n              - img_feat (Tensor): Image feature extracted by guidance head.\n              - unknown (Tensor): Unknown tensor generated by trimap.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        img_feat = inputs['img_feat']\n        unknown = inputs['unknown']\n        feat1 = inputs['feat1']\n        feat2 = inputs['feat2']\n        feat3 = inputs['feat3']\n        feat4 = inputs['feat4']\n        feat5 = inputs['feat5']\n        x = inputs['out']\n\n        x = self.layer1(x) + feat5\n        x = self.layer2(x) + feat4\n        x = self.gca(img_feat, x, unknown)\n        x = self.layer3(x) + feat3\n        x = self.layer4(x) + feat2\n        x = self.conv1(x) + feat1\n        x = self.conv2(x)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/gca/resgca_enc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule, build_activation_layer\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init\n\nfrom mmagic.registry import MODELS\nfrom .gca_module import GCAModule\n\n\nclass BasicBlock(nn.Module):\n    \"\"\"Basic residual block.\n\n    Args:\n        in_channels (int): Input channels of the block.\n        out_channels (int): Output channels of the block.\n        kernel_size (int): Kernel size of the convolution layers. Default: 3.\n        stride (int): Stride of the first conv of the block. Default: 1.\n        interpolation (nn.Module, optional): Interpolation module for skip\n            connection. Default: None.\n        conv_cfg (dict): dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        with_spectral_norm (bool): Whether use spectral norm after conv.\n            Default: False.\n    \"\"\"\n    expansion = 1\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size=3,\n                 stride=1,\n                 interpolation=None,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=False):\n        super().__init__()\n        assert stride in (1, 2), (\n            f'stride other than 1 and 2 is not implemented, got {stride}')\n\n        assert stride != 2 or interpolation is not None, (\n            'if stride is 2, interpolation should be specified')\n\n        self.conv1 = self.build_conv1(in_channels, out_channels, kernel_size,\n                                      stride, conv_cfg, norm_cfg, act_cfg,\n                                      with_spectral_norm)\n        self.conv2 = self.build_conv2(in_channels, out_channels, kernel_size,\n                                      conv_cfg, norm_cfg, with_spectral_norm)\n\n        self.interpolation = interpolation\n        self.activation = build_activation_layer(act_cfg)\n        self.stride = stride\n\n    def build_conv1(self, in_channels, out_channels, kernel_size, stride,\n                    conv_cfg, norm_cfg, act_cfg, with_spectral_norm):\n        \"\"\"Build conv1 of the block.\n\n        Args:\n            in_channels (int): The input channels of the ConvModule.\n            out_channels (int): The output channels of the ConvModule.\n            kernel_size (int): The kernel size of the ConvModule.\n            stride (int): The stride of the ConvModule. If stride is set to 2,\n                then ``conv_cfg`` will be overwritten as\n                ``dict(type='Deconv')`` and ``kernel_size`` will be overwritten\n                as 4.\n            conv_cfg (dict): The conv config of the ConvModule.\n            norm_cfg (dict): The norm config of the ConvModule.\n            act_cfg (dict): The activation config of the ConvModule.\n            with_spectral_norm (bool): Whether use spectral norm.\n\n        Returns:\n            nn.Module: The built ConvModule.\n        \"\"\"\n        return ConvModule(\n            in_channels,\n            out_channels,\n            kernel_size,\n            stride=stride,\n            padding=kernel_size // 2,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n\n    def build_conv2(self, in_channels, out_channels, kernel_size, conv_cfg,\n                    norm_cfg, with_spectral_norm):\n        \"\"\"Build conv2 of the block.\n\n        Args:\n            in_channels (int): The input channels of the ConvModule.\n            out_channels (int): The output channels of the ConvModule.\n            kernel_size (int): The kernel size of the ConvModule.\n            stride (int): The stride of the ConvModule. If stride is set to 2,\n                then ``conv_cfg`` will be overwritten as\n                ``dict(type='Deconv')`` and ``kernel_size`` will be overwritten\n                as 4.\n            conv_cfg (dict): The conv config of the ConvModule.\n            norm_cfg (dict): The norm config of the ConvModule.\n            act_cfg (dict): The activation config of the ConvModule.\n            with_spectral_norm (bool): Whether use spectral norm.\n\n        Returns:\n            nn.Module: The built ConvModule.\n        \"\"\"\n        return ConvModule(\n            out_channels,\n            out_channels,\n            kernel_size,\n            stride=1,\n            padding=kernel_size // 2,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        identity = x\n\n        out = self.conv1(x)\n        out = self.conv2(out)\n\n        if self.interpolation is not None:\n            identity = self.interpolation(x)\n\n        out += identity\n        out = self.activation(out)\n\n        return out\n\n\n@MODELS.register_module()\nclass ResNetEnc(BaseModule):\n    \"\"\"ResNet encoder for image matting.\n\n    This class is adopted from https://github.com/Yaoyi-Li/GCA-Matting.\n    Implement and pre-train on ImageNet with the tricks from\n    https://arxiv.org/abs/1812.01187\n    without the mix-up part.\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlock` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Number of input channels.\n        conv_cfg (dict): dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        with_spectral_norm (bool): Whether use spectral norm after conv.\n            Default: False.\n        late_downsample (bool): Whether to adopt late downsample strategy,\n            Default: False.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 block,\n                 layers,\n                 in_channels,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=False,\n                 late_downsample=False,\n                 init_cfg: Optional[dict] = None):\n\n        super().__init__(init_cfg=init_cfg)\n\n        if block == 'BasicBlock':\n            block = BasicBlock\n        else:\n            raise NotImplementedError(f'{block} is not implemented.')\n\n        self.inplanes = 64\n        self.midplanes = 64 if late_downsample else 32\n\n        start_stride = [1, 2, 1, 2] if late_downsample else [2, 1, 2, 1]\n        self.conv1 = ConvModule(\n            in_channels,\n            32,\n            3,\n            stride=start_stride[0],\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n        self.conv2 = ConvModule(\n            32,\n            self.midplanes,\n            3,\n            stride=start_stride[1],\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n        self.conv3 = ConvModule(\n            self.midplanes,\n            self.inplanes,\n            3,\n            stride=start_stride[2],\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            with_spectral_norm=with_spectral_norm)\n\n        self.layer1 = self._make_layer(block, 64, layers[0], start_stride[3],\n                                       conv_cfg, norm_cfg, act_cfg,\n                                       with_spectral_norm)\n        self.layer2 = self._make_layer(block, 128, layers[1], 2, conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n        self.layer3 = self._make_layer(block, 256, layers[2], 2, conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n        self.layer4 = self._make_layer(block, 512, layers[3], 2, conv_cfg,\n                                       norm_cfg, act_cfg, with_spectral_norm)\n\n        self.out_channels = 512\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n            if self.init_cfg['type'] == 'Pretrained':\n                # if pretrained weight is trained on 3-channel images,\n                # initialize other channels with zeros\n                self.conv1.conv.weight.data[:, 3:, :, :] = 0\n        else:\n            for m in self.modules():\n                if isinstance(m, (nn.BatchNorm2d, nn.GroupNorm)):\n                    constant_init(m.weight, 1)\n                    constant_init(m.bias, 0)\n\n            # Zero-initialize the last BN in each residual branch, so that the\n            # residual branch starts with zeros, and each residual block\n            # behaves like an identity. This improves the model by 0.2~0.3%\n            # according to https://arxiv.org/abs/1706.02677\n            for m in self.modules():\n                if isinstance(m, BasicBlock):\n                    constant_init(m.conv2.bn.weight, 0)\n\n    def _make_layer(self, block, planes, num_blocks, stride, conv_cfg,\n                    norm_cfg, act_cfg, with_spectral_norm):\n        downsample = None\n        if stride != 1:\n            downsample = nn.Sequential(\n                nn.AvgPool2d(2, stride),\n                ConvModule(\n                    self.inplanes,\n                    planes * block.expansion,\n                    1,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=None,\n                    with_spectral_norm=with_spectral_norm))\n\n        layers = [\n            block(\n                self.inplanes,\n                planes,\n                stride=stride,\n                interpolation=downsample,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg,\n                with_spectral_norm=with_spectral_norm)\n        ]\n        self.inplanes = planes * block.expansion\n        for _ in range(1, num_blocks):\n            layers.append(\n                block(\n                    self.inplanes,\n                    planes,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    with_spectral_norm=with_spectral_norm))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.conv3(x)\n\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n\n        return x\n\n\n@MODELS.register_module()\nclass ResShortcutEnc(ResNetEnc):\n    \"\"\"ResNet backbone for image matting with shortcut connection.\n\n    ::\n\n        image ---------------- shortcut[0] --- feat1\n          |\n        conv1-conv2 ---------- shortcut[1] --- feat2\n               |\n              conv3-layer1 --- shortcut[2] --- feat3\n                      |\n                     layer2 -- shortcut[4] --- feat4\n                       |\n                      layer3 - shortcut[5] --- feat5\n                        |\n                       layer4 ---------------- out\n\n    Baseline model of Natural Image Matting via Guided Contextual Attention\n    https://arxiv.org/pdf/2001.04069.pdf.\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlock` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Number of input channels.\n        conv_cfg (dict): Dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        with_spectral_norm (bool): Whether use spectral norm after conv.\n            Default: False.\n        late_downsample (bool): Whether to adopt late downsample strategy.\n            Default: False.\n        order (tuple[str]): Order of `conv`, `norm` and `act` layer in shortcut\n            convolution module. Default: ('conv', 'act', 'norm').\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 block,\n                 layers,\n                 in_channels,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=False,\n                 late_downsample=False,\n                 order=('conv', 'act', 'norm'),\n                 init_cfg: Optional[dict] = None):\n        super().__init__(\n            block,\n            layers,\n            in_channels,\n            conv_cfg,\n            norm_cfg,\n            act_cfg,\n            with_spectral_norm,\n            late_downsample,\n            init_cfg=init_cfg)\n\n        # TODO: rename self.midplanes to self.mid_channels in ResNetEnc\n        self.shortcut_in_channels = [in_channels, self.midplanes, 64, 128, 256]\n        self.shortcut_out_channels = [32, self.midplanes, 64, 128, 256]\n\n        self.shortcut = nn.ModuleList()\n        for in_channel, out_channel in zip(self.shortcut_in_channels,\n                                           self.shortcut_out_channels):\n            self.shortcut.append(\n                self._make_shortcut(in_channel, out_channel, conv_cfg,\n                                    norm_cfg, act_cfg, order,\n                                    with_spectral_norm))\n\n    def _make_shortcut(self, in_channels, out_channels, conv_cfg, norm_cfg,\n                       act_cfg, order, with_spectral_norm):\n        return nn.Sequential(\n            ConvModule(\n                in_channels,\n                out_channels,\n                3,\n                padding=1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg,\n                with_spectral_norm=with_spectral_norm,\n                order=order),\n            ConvModule(\n                out_channels,\n                out_channels,\n                3,\n                padding=1,\n                conv_cfg=conv_cfg,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg,\n                with_spectral_norm=with_spectral_norm,\n                order=order))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            dict: Contains the output tensor and shortcut feature.\n        \"\"\"\n        out = self.conv1(x)\n        x1 = self.conv2(out)\n        out = self.conv3(x1)\n\n        x2 = self.layer1(out)\n        x3 = self.layer2(x2)\n        x4 = self.layer3(x3)\n        out = self.layer4(x4)\n\n        feat1 = self.shortcut[0](x)\n        feat2 = self.shortcut[1](x1)\n        feat3 = self.shortcut[2](x2)\n        feat4 = self.shortcut[3](x3)\n        feat5 = self.shortcut[4](x4)\n\n        return {\n            'out': out,\n            'feat1': feat1,\n            'feat2': feat2,\n            'feat3': feat3,\n            'feat4': feat4,\n            'feat5': feat5,\n        }\n\n\n@MODELS.register_module()\nclass ResGCAEncoder(ResShortcutEnc):\n    \"\"\"ResNet backbone with shortcut connection and gca module.\n\n    ::\n\n        image ---------------- shortcut[0] -------------- feat1\n         |\n        conv1-conv2 ---------- shortcut[1] -------------- feat2\n               |\n             conv3-layer1 ---- shortcut[2] -------------- feat3\n                     |\n                     | image - guidance_conv ------------ img_feat\n                     |             |\n                    layer2 --- gca_module - shortcut[4] - feat4\n                                    |\n                                  layer3 -- shortcut[5] - feat5\n                                     |\n                                   layer4 --------------- out\n\n    * gca module also requires unknown tensor generated by trimap which is \\\n    ignored in the above graph.\n\n    Implementation of Natural Image Matting via Guided Contextual Attention\n    https://arxiv.org/pdf/2001.04069.pdf.\n\n    Args:\n        block (str): Type of residual block. Currently only `BasicBlock` is\n            implemented.\n        layers (list[int]): Number of layers in each block.\n        in_channels (int): Number of input channels.\n        conv_cfg (dict): Dictionary to construct convolution layer. If it is\n            None, 2d convolution will be applied. Default: None.\n        norm_cfg (dict): Config dict for normalization layer. \"BN\" by default.\n        act_cfg (dict): Config dict for activation layer, \"ReLU\" by default.\n        late_downsample (bool): Whether to adopt late downsample strategy.\n            Default: False.\n        order (tuple[str]): Order of `conv`, `norm` and `act` layer in shortcut\n            convolution module. Default: ('conv', 'act', 'norm').\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 block,\n                 layers,\n                 in_channels,\n                 conv_cfg=None,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=False,\n                 late_downsample=False,\n                 order=('conv', 'act', 'norm'),\n                 init_cfg: Optional[dict] = None):\n        super().__init__(\n            block,\n            layers,\n            in_channels,\n            conv_cfg,\n            norm_cfg,\n            act_cfg,\n            with_spectral_norm,\n            late_downsample,\n            order,\n            init_cfg=init_cfg)\n\n        assert in_channels in (4, 6), (\n            f'in_channels must be 4 or 6, but got {in_channels}')\n\n        self.trimap_channels = in_channels - 3\n\n        guidance_in_channels = [3, 16, 32]\n        guidance_out_channels = [16, 32, 128]\n\n        guidance_head = []\n        for in_channel, out_channel in zip(guidance_in_channels,\n                                           guidance_out_channels):\n            guidance_head += [\n                ConvModule(\n                    in_channel,\n                    out_channel,\n                    3,\n                    stride=2,\n                    padding=1,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    with_spectral_norm=with_spectral_norm,\n                    padding_mode='reflect',\n                    order=order)\n            ]\n        self.guidance_head = nn.Sequential(*guidance_head)\n\n        self.gca = GCAModule(128, 128)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (N, C, H, W).\n\n        Returns:\n            dict: Contains the output tensor, shortcut feature and \\\n                intermediate feature.\n        \"\"\"\n        out = self.conv1(x)\n        x1 = self.conv2(out)\n        out = self.conv3(x1)\n\n        img_feat = self.guidance_head(x[:, :3, ...])\n        if self.trimap_channels == 3:\n            unknown = x[:, 4:5, ...]\n        else:\n            unknown = x[:, 3:, ...].eq(1).float()\n        # same as img_feat, downsample to 1/8\n        unknown = F.interpolate(unknown, scale_factor=1 / 8, mode='nearest')\n\n        x2 = self.layer1(out)\n        x3 = self.layer2(x2)\n        x3 = self.gca(img_feat, x3, unknown)\n        x4 = self.layer3(x3)\n        out = self.layer4(x4)\n\n        # shortcut block\n        feat1 = self.shortcut[0](x)\n        feat2 = self.shortcut[1](x1)\n        feat3 = self.shortcut[2](x2)\n        feat4 = self.shortcut[3](x3)\n        feat5 = self.shortcut[4](x4)\n\n        return {\n            'out': out,\n            'feat1': feat1,\n            'feat2': feat2,\n            'feat3': feat3,\n            'feat4': feat4,\n            'feat5': feat5,\n            'img_feat': img_feat,\n            'unknown': unknown\n        }\n"
  },
  {
    "path": "mmagic/models/editors/ggan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .ggan import GGAN\n\n__all__ = ['GGAN']\n"
  },
  {
    "path": "mmagic/models/editors/ggan/ggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseGAN\n\n\n@MODELS.register_module()\nclass GGAN(BaseGAN):\n    \"\"\"Implementation of `Geometric GAN`.\n\n    <https://arxiv.org/abs/1705.02894>`_(GGAN).\n    \"\"\"\n\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. GGAN use hinge loss to train\n        the discriminator.\n\n        .. math:\n            L_{D} = -\\mathbb{E}_{\\left(x, y\\right)\\sim{p}_{data}}\n                \\left[\\min\\left(0, -1 + D\\left(x, y\\right)\\right)\\right]\n                -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\\left[\\min\n                \\left(0, -1 - D\\left(G\\left(z\\right), y\\right)\\right)\\right]\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.relu(1 + disc_pred_fake).mean()\n        losses_dict['loss_disc_real'] = F.relu(1 - disc_pred_real).mean()\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake):\n        r\"\"\"Get disc loss. GGAN use hinge loss to train\n        the generator.\n\n        .. math:\n            L_{G} = -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\n                D\\left(G\\left(z\\right), y\\right)\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: List[DataSample],\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/glean/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .glean_styleganv2 import GLEANStyleGANv2\n\n__all__ = ['GLEANStyleGANv2']\n"
  },
  {
    "path": "mmagic/models/editors/glean/glean_styleganv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import PixelShufflePack\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\nfrom ..esrgan.rrdb_net import RRDB\n\n\n@MODELS.register_module()\nclass GLEANStyleGANv2(BaseModule):\n    r\"\"\"GLEAN (using StyleGANv2) architecture for super-resolution.\n\n    Paper:\n        GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution,\n        CVPR, 2021\n\n    This method makes use of StyleGAN2 and hence the arguments mostly follow\n    that in 'StyleGAN2v2Generator'.\n\n    In StyleGAN2, we use a static architecture composing of a style mapping\n    module and number of convolutional style blocks. More details can be found\n    in: Analyzing and Improving the Image Quality of StyleGAN CVPR2020.\n\n    You can load pretrained model through passing information into\n    ``pretrained`` argument. We have already offered official weights as\n    follows:\n\n    - stylegan2-ffhq-config-f: http://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth  # noqa\n    - stylegan2-horse-config-f: http://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-horse-config-f-official_20210327_173203-ef3e69ca.pth  # noqa\n    - stylegan2-car-config-f: http://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-car-config-f-official_20210327_172340-8cfe053c.pth  # noqa\n    - stylegan2-cat-config-f: http://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-cat-config-f-official_20210327_172444-15bc485b.pth  # noqa\n    - stylegan2-church-config-f: http://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-church-config-f-official_20210327_172657-1d42b7d1.pth  # noqa\n\n    If you want to load the ema model, you can just use following codes:\n\n    .. code-block:: python\n\n        # ckpt_http is one of the valid path from http source\n        generator = StyleGANv2Generator(1024, 512,\n                                        pretrained=dict(\n                                            ckpt_path=ckpt_http,\n                                            prefix='generator_ema'))\n\n    Of course, you can also download the checkpoint in advance and set\n    ``ckpt_path`` with local path. If you just want to load the original\n    generator (not the ema model), please set the prefix with 'generator'.\n\n    Note that our implementation allows to generate BGR image, while the\n    original StyleGAN2 outputs RGB images by default. Thus, we provide\n    ``bgr2rgb`` argument to convert the image space.\n\n    Args:\n        in_size (int): The size of the input image.\n        out_size (int): The output size of the StyleGAN2 generator.\n        img_channels (int): Number of channels of the input images. 3 for RGB\n            image and 1 for grayscale image. Default: 3.\n        rrdb_channels (int): Number of channels of the RRDB features.\n            Default: 64.\n        num_rrdbs (int): Number of RRDB blocks in the encoder. Default: 23.\n        style_channels (int): The number of channels for style code.\n            Default: 512.\n        num_mlps (int, optional): The number of MLP layers. Defaults to 8.\n        channel_multiplier (int, optional): The multiplier factor for the\n            channel number. Defaults to 2.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 3, 3, 1].\n        lr_mlp (float, optional): The learning rate for the style mapping\n            layer. Defaults to 0.01.\n        default_style_mode (str, optional): The default mode of style mixing.\n            In training, we adopt mixing style mode in default. However, in the\n            evaluation, we use 'single' style mode. `['mix', 'single']` are\n            currently supported. Defaults to 'mix'.\n        eval_style_mode (str, optional): The evaluation mode of style mixing.\n            Defaults to 'single'.\n        mix_prob (float, optional): Mixing probability. The value should be\n            in range of [0, 1]. Defaults to 0.9.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        bgr2rgb (bool, optional): Whether to flip the image channel dimension.\n            Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_size,\n                 out_size,\n                 img_channels=3,\n                 rrdb_channels=64,\n                 num_rrdbs=23,\n                 style_channels=512,\n                 num_mlps=8,\n                 channel_multiplier=2,\n                 blur_kernel=[1, 3, 3, 1],\n                 lr_mlp=0.01,\n                 default_style_mode='mix',\n                 eval_style_mode='single',\n                 mix_prob=0.9,\n                 init_cfg=None,\n                 fp16_enabled=False,\n                 bgr2rgb=False):\n\n        super().__init__(init_cfg=init_cfg)\n\n        # input size must be strictly smaller than output size\n        if in_size >= out_size:\n            raise ValueError('in_size must be smaller than out_size, but got '\n                             f'{in_size} and {out_size}.')\n\n        # latent bank (StyleGANv2), with weights being fixed\n        self.generator = MODELS.build(\n            dict(\n                type='StyleGANv2Generator',\n                out_size=out_size,\n                style_channels=style_channels,\n                num_mlps=num_mlps,\n                channel_multiplier=channel_multiplier,\n                blur_kernel=blur_kernel,\n                lr_mlp=lr_mlp,\n                default_style_mode=default_style_mode,\n                eval_style_mode=eval_style_mode,\n                mix_prob=mix_prob,\n                fp16_enabled=fp16_enabled,\n                bgr2rgb=bgr2rgb))\n        self.generator.requires_grad_(False)\n\n        self.in_size = in_size\n        self.style_channels = style_channels\n        channels = self.generator.channels\n\n        # encoder\n        num_styles = int(np.log2(out_size)) * 2 - 2\n        encoder_res = [2**i for i in range(int(np.log2(in_size)), 1, -1)]\n        self.encoder = nn.ModuleList()\n        self.encoder.append(\n            nn.Sequential(\n                RRDBFeatureExtractor(\n                    img_channels, rrdb_channels, num_blocks=num_rrdbs),\n                nn.Conv2d(\n                    rrdb_channels, channels[in_size], 3, 1, 1, bias=True),\n                nn.LeakyReLU(negative_slope=0.2, inplace=True)))\n        for res in encoder_res:\n            in_channels = channels[res]\n            if res > 4:\n                out_channels = channels[res // 2]\n                block = nn.Sequential(\n                    nn.Conv2d(in_channels, out_channels, 3, 2, 1, bias=True),\n                    nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                    nn.Conv2d(out_channels, out_channels, 3, 1, 1, bias=True),\n                    nn.LeakyReLU(negative_slope=0.2, inplace=True))\n            else:\n                block = nn.Sequential(\n                    nn.Conv2d(in_channels, in_channels, 3, 1, 1, bias=True),\n                    nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                    nn.Flatten(),\n                    nn.Linear(16 * in_channels, num_styles * style_channels))\n            self.encoder.append(block)\n\n        # additional modules for StyleGANv2\n        self.fusion_out = nn.ModuleList()\n        self.fusion_skip = nn.ModuleList()\n        for res in encoder_res[::-1]:\n            num_channels = channels[res]\n            self.fusion_out.append(\n                nn.Conv2d(num_channels * 2, num_channels, 3, 1, 1, bias=True))\n            self.fusion_skip.append(\n                nn.Conv2d(num_channels + 3, 3, 3, 1, 1, bias=True))\n\n        # decoder\n        decoder_res = [\n            2**i\n            for i in range(int(np.log2(in_size)), int(np.log2(out_size) + 1))\n        ]\n        self.decoder = nn.ModuleList()\n        for res in decoder_res:\n            if res == in_size:\n                in_channels = channels[res]\n            else:\n                in_channels = 2 * channels[res]\n\n            if res < out_size:\n                out_channels = channels[res * 2]\n                self.decoder.append(\n                    PixelShufflePack(\n                        in_channels, out_channels, 2, upsample_kernel=3))\n            else:\n                self.decoder.append(\n                    nn.Sequential(\n                        nn.Conv2d(in_channels, 64, 3, 1, 1),\n                        nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                        nn.Conv2d(64, img_channels, 3, 1, 1)))\n\n    def forward(self, lq):\n        \"\"\"Forward function.\n\n        Args:\n            lq (Tensor): Input LR image with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Output HR image.\n        \"\"\"\n\n        h, w = lq.shape[2:]\n        if h != self.in_size or w != self.in_size:\n            raise AssertionError(\n                f'Spatial resolution must equal in_size ({self.in_size}).'\n                f' Got ({h}, {w}).')\n\n        # encoder\n        feat = lq\n        encoder_features = []\n        for block in self.encoder:\n            feat = block(feat)\n            encoder_features.append(feat)\n        encoder_features = encoder_features[::-1]\n\n        latent = encoder_features[0].view(lq.size(0), -1, self.style_channels)\n        encoder_features = encoder_features[1:]\n\n        # generator\n        injected_noise = [\n            getattr(self.generator, f'injected_noise_{i}')\n            for i in range(self.generator.num_injected_noises)\n        ]\n        # 4x4 stage\n        out = self.generator.constant_input(latent)\n        out = self.generator.conv1(out, latent[:, 0], noise=injected_noise[0])\n        skip = self.generator.to_rgb1(out, latent[:, 1])\n\n        _index = 1\n\n        # 8x8 ---> higher res\n        generator_features = []\n        for up_conv, conv, noise1, noise2, to_rgb in zip(\n                self.generator.convs[::2], self.generator.convs[1::2],\n                injected_noise[1::2], injected_noise[2::2],\n                self.generator.to_rgbs):\n\n            # feature fusion by channel-wise concatenation\n            if out.size(2) <= self.in_size:\n                fusion_index = (_index - 1) // 2\n                feat = encoder_features[fusion_index]\n\n                out = torch.cat([out, feat], dim=1)\n                out = self.fusion_out[fusion_index](out)\n\n                skip = torch.cat([skip, feat], dim=1)\n                skip = self.fusion_skip[fusion_index](skip)\n\n            # original StyleGAN operations\n            out = up_conv(out, latent[:, _index], noise=noise1)\n            out = conv(out, latent[:, _index + 1], noise=noise2)\n            skip = to_rgb(out, latent[:, _index + 2], skip)\n\n            # store features for decoder\n            if out.size(2) > self.in_size:\n                generator_features.append(out)\n\n            _index += 2\n\n        # decoder\n        hr = encoder_features[-1]\n        for i, block in enumerate(self.decoder):\n            if i > 0:\n                hr = torch.cat([hr, generator_features[i - 1]], dim=1)\n            hr = block(hr)\n\n        return hr\n\n\nclass RRDBFeatureExtractor(nn.Module):\n    \"\"\"Feature extractor composed of Residual-in-Residual Dense Blocks (RRDBs).\n\n    It is equivalent to ESRGAN with the upsampling module removed.\n\n    Args:\n        in_channels (int): Channel number of inputs. Default: 3.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64\n        num_blocks (int): Block number in the trunk network. Default: 23.\n        growth_channels (int): Channels for each growth. Default: 32.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=3,\n                 mid_channels=64,\n                 num_blocks=23,\n                 growth_channels=32):\n\n        super().__init__()\n\n        self.conv_first = nn.Conv2d(in_channels, mid_channels, 3, 1, 1)\n        self.body = make_layer(\n            RRDB,\n            num_blocks,\n            mid_channels=mid_channels,\n            growth_channels=growth_channels)\n        self.conv_body = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        feat = self.conv_first(x)\n        return feat + self.conv_body(self.body(feat))\n"
  },
  {
    "path": "mmagic/models/editors/global_local/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .gl_decoder import GLDecoder\nfrom .gl_dilation import GLDilationNeck\nfrom .gl_disc import GLDiscs\nfrom .gl_encoder import GLEncoder\nfrom .gl_encoder_decoder import GLEncoderDecoder\nfrom .gl_inpaintor import GLInpaintor\n\n__all__ = [\n    'GLEncoder', 'GLDecoder', 'GLEncoderDecoder', 'GLDilationNeck',\n    'GLInpaintor', 'GLDiscs'\n]\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\n\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GLDecoder(BaseModule):\n    \"\"\"Decoder used in Global&Local model.\n\n    This implementation follows:\n    Globally and locally Consistent Image Completion\n\n    Args:\n        in_channels (int): Channel number of input feature.\n        norm_cfg (dict): Config dict to build norm layer.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n        out_act (str): Output activation type, \"clip\" by default. Noted that\n            in our implementation, we clip the output with range [-1, 1].\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=256,\n                 norm_cfg=None,\n                 act_cfg=dict(type='ReLU'),\n                 out_act='clip'):\n        super().__init__()\n        self.dec1 = ConvModule(\n            in_channels,\n            256,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec2 = ConvModule(\n            256,\n            256,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec3 = ConvModule(\n            256,\n            128,\n            kernel_size=4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='Deconv'),\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec4 = ConvModule(\n            128,\n            128,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec5 = ConvModule(\n            128,\n            64,\n            kernel_size=4,\n            stride=2,\n            padding=1,\n            conv_cfg=dict(type='Deconv'),\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec6 = ConvModule(\n            64,\n            32,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg)\n        self.dec7 = ConvModule(\n            32,\n            3,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=None,\n            act_cfg=None)\n\n        if out_act == 'sigmoid':\n            self.output_act = nn.Sigmoid()\n        elif out_act == 'clip':\n            self.output_act = partial(torch.clamp, min=-1, max=1.)\n        else:\n            raise ValueError(\n                f'{out_act} activation for output has not be supported.')\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        for i in range(7):\n            x = getattr(self, f'dec{i + 1}')(x)\n        x = self.output_act(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_dilation.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GLDilationNeck(BaseModule):\n    \"\"\"Dilation Backbone used in Global&Local model.\n\n    This implementation follows:\n    Globally and locally Consistent Image Completion\n\n    Args:\n        in_channels (int): Channel number of input feature.\n        conv_type (str): The type of conv module. In DeepFillv1 model, the\n            `conv_type` should be 'conv'. In DeepFillv2 model, the `conv_type`\n            should be 'gated_conv'.\n        norm_cfg (dict): Config dict to build norm layer.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n        kwargs (keyword arguments).\n    \"\"\"\n    _conv_type = dict(conv=ConvModule, gated_conv=SimpleGatedConvModule)\n\n    def __init__(self,\n                 in_channels=256,\n                 conv_type='conv',\n                 norm_cfg=None,\n                 act_cfg=dict(type='ReLU'),\n                 **kwargs):\n        super().__init__()\n        conv_module = self._conv_type[conv_type]\n        dilation_convs_ = []\n        for i in range(4):\n            dilation_ = int(2**(i + 1))\n            dilation_convs_.append(\n                conv_module(\n                    in_channels,\n                    in_channels,\n                    kernel_size=3,\n                    padding=dilation_,\n                    dilation=dilation_,\n                    stride=1,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg,\n                    **kwargs))\n        self.dilation_convs = nn.Sequential(*dilation_convs_)\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        x = self.dilation_convs(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import MultiLayerDiscriminator\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GLDiscs(BaseModule):\n    \"\"\"Discriminators in Global&Local.\n\n    This discriminator contains a local discriminator and a global\n    discriminator as described in the original paper:\n    Globally and locally Consistent Image Completion\n\n    Args:\n        global_disc_cfg (dict): Config dict to build global discriminator.\n        local_disc_cfg (dict): Config dict to build local discriminator.\n    \"\"\"\n\n    def __init__(self, global_disc_cfg, local_disc_cfg):\n        super().__init__()\n        self.global_disc = MultiLayerDiscriminator(**global_disc_cfg)\n        self.local_disc = MultiLayerDiscriminator(**local_disc_cfg)\n\n        self.fc = nn.Linear(2048, 1, bias=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (tuple[torch.Tensor]): Contains global image and the local image\n                patch.\n\n        Returns:\n            tuple[torch.Tensor]: Contains the prediction from discriminators \\\n                in global image and local image patch.\n        \"\"\"\n        g_img, l_img = x\n        g_pred = self.global_disc(g_img)\n        l_pred = self.local_disc(l_img)\n\n        pred = self.fc(torch.cat([g_pred, l_pred], dim=1))\n\n        return pred\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n\n        for m in self.modules():\n            # Here, we only initialize the module with fc layer since the\n            # conv and norm layers has been initialized in `ConvModule`.\n            if isinstance(m, nn.Linear):\n                nn.init.normal_(m.weight.data, 0.0, 0.02)\n                nn.init.constant_(m.bias.data, 0.0)\n\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GLEncoder(BaseModule):\n    \"\"\"Encoder used in Global&Local model.\n\n    This implementation follows:\n    Globally and locally Consistent Image Completion\n\n    Args:\n        norm_cfg (dict): Config dict to build norm layer.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n    \"\"\"\n\n    def __init__(self, norm_cfg=None, act_cfg=dict(type='ReLU')):\n        super().__init__()\n\n        channel_list = [64, 128, 128, 256, 256, 256]\n        kernel_size_list = [5, 3, 3, 3, 3, 3]\n        stride_list = [1, 2, 1, 2, 1, 1]\n        in_channels = 4\n        for i in range(6):\n            ks = kernel_size_list[i]\n            padding = (ks - 1) // 2\n            self.add_module(\n                f'enc{i + 1}',\n                ConvModule(\n                    in_channels,\n                    channel_list[i],\n                    kernel_size=ks,\n                    stride=stride_list[i],\n                    padding=padding,\n                    norm_cfg=norm_cfg,\n                    act_cfg=act_cfg))\n            in_channels = channel_list[i]\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        for i in range(6):\n            x = getattr(self, f'enc{i + 1}')(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GLEncoderDecoder(BaseModule):\n    \"\"\"Encoder-Decoder used in Global&Local model.\n\n    This implementation follows:\n    Globally and locally Consistent Image Completion\n\n    The architecture of the encoder-decoder is:\\\n        (conv2d x 6) --> (dilated conv2d x 4) --> (conv2d or deconv2d x 7)\n\n    Args:\n        encoder (dict): Config dict to encoder.\n        decoder (dict): Config dict to build decoder.\n        dilation_neck (dict): Config dict to build dilation neck.\n    \"\"\"\n\n    def __init__(self,\n                 encoder=dict(type='GLEncoder'),\n                 decoder=dict(type='GLDecoder'),\n                 dilation_neck=dict(type='GLDilationNeck')):\n        super().__init__()\n        self.encoder = MODELS.build(encoder)\n        self.decoder = MODELS.build(decoder)\n        self.dilation_neck = MODELS.build(dilation_neck)\n\n        # support fp16\n        self.fp16_enabled = False\n\n    def forward(self, x):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        x = self.encoder(x)\n        if isinstance(x, dict):\n            x = x['out']\n        x = self.dilation_neck(x)\n        x = self.decoder(x)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/global_local/gl_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional\n\nimport torch\n\nfrom mmagic.models.base_models import OneStageInpaintor\nfrom mmagic.models.utils import extract_around_bbox, extract_bbox_patch\nfrom mmagic.registry import MODELS\nfrom ...utils import set_requires_grad\n\n\n@MODELS.register_module()\nclass GLInpaintor(OneStageInpaintor):\n    \"\"\"Inpaintor for global&local method.\n\n    This inpaintor is implemented according to the paper:\n    Globally and Locally Consistent Image Completion\n\n    Importantly, this inpaintor is an example for using custom training\n    schedule based on `OneStageInpaintor`.\n\n    The training pipeline of global&local is as following:\n\n    .. code-block:: python\n\n        if cur_iter < iter_tc:\n            update generator with only l1 loss\n        else:\n            update discriminator\n            if cur_iter > iter_td:\n                update generator with l1 loss and adversarial loss\n\n    The new attribute `cur_iter` is added for recording current number of\n    iteration. The `train_cfg` contains the setting of the training schedule:\n\n    .. code-block:: python\n\n        train_cfg = dict(\n            start_iter=0,\n            disc_step=1,\n            iter_tc=90000,\n            iter_td=100000\n        )\n\n    `iter_tc` and `iter_td` correspond to the notation :math:`T_C` and\n    :math:`T_D` of the original paper.\n\n    Args:\n        generator (dict): Config for encoder-decoder style generator.\n        disc (dict): Config for discriminator.\n        loss_gan (dict): Config for adversarial loss.\n        loss_gp (dict): Config for gradient penalty loss.\n        loss_disc_shift (dict): Config for discriminator shift loss.\n        loss_composed_percep (dict): Config for perceptural and style loss with\n            composed image as input.\n        loss_out_percep (dict): Config for perceptual and style loss with\n            direct output as input.\n        loss_l1_hole (dict): Config for l1 loss in the hole.\n        loss_l1_valid (dict): Config for l1 loss in the valid region.\n        loss_tv (dict): Config for total variation loss.\n        train_cfg (dict): Configs for training scheduler. `disc_step` must be\n            contained for indicates the discriminator updating steps in each\n            training step.\n        test_cfg (dict): Configs for testing scheduler.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor: dict,\n                 encdec: dict,\n                 disc=None,\n                 loss_gan=None,\n                 loss_gp=None,\n                 loss_disc_shift=None,\n                 loss_composed_percep=None,\n                 loss_out_percep=False,\n                 loss_l1_hole=None,\n                 loss_l1_valid=None,\n                 loss_tv=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(\n            data_preprocessor=data_preprocessor,\n            encdec=encdec,\n            disc=disc,\n            loss_gan=loss_gan,\n            loss_gp=loss_gp,\n            loss_disc_shift=loss_disc_shift,\n            loss_composed_percep=loss_composed_percep,\n            loss_out_percep=loss_out_percep,\n            loss_l1_hole=loss_l1_hole,\n            loss_l1_valid=loss_l1_valid,\n            loss_tv=loss_tv,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg)\n\n        if self.train_cfg is not None:\n            self.cur_iter = self.train_cfg.start_iter\n\n    def generator_loss(self, fake_res, fake_img, fake_local, gt, mask,\n                       masked_img):\n        \"\"\"Forward function in generator training step.\n\n        In this function, we mainly compute the loss items for generator with\n        the given (fake_res, fake_img). In general, the `fake_res` is the\n        direct output of the generator and the `fake_img` is the composition of\n        direct output and ground-truth image.\n\n        Args:\n            fake_res (torch.Tensor): Direct output of the generator.\n            fake_img (torch.Tensor): Composition of `fake_res` and\n                ground-truth image.\n            fake_local (torch.Tensor): Local image.\n            gt (torch.Tensor): Ground-truth image.\n            mask (torch.Tensor): Mask image.\n            masked_img (torch.Tensor): Composition of mask image and\n                ground-truth image.\n        Returns:\n            tuple[dict]: A tuple containing two dictionaries. The first one \\\n                is the result dict, which contains the results computed \\\n                within this function for visualization. The second one is the \\\n                loss dict, containing loss items computed in this function.\n        \"\"\"\n        loss = dict()\n\n        # if cur_iter <= iter_td, do not calculate adversarial loss\n        if self.with_gan and self.cur_iter > self.train_cfg.iter_td:\n            g_fake_pred = self.disc((fake_img, fake_local))\n            loss_g_fake = self.loss_gan(g_fake_pred, True, False)\n            loss['loss_g_fake'] = loss_g_fake\n\n        if self.with_l1_hole_loss:\n            loss_l1_hole = self.loss_l1_hole(fake_res, gt, weight=mask)\n            loss['loss_l1_hole'] = loss_l1_hole\n\n        if self.with_l1_valid_loss:\n            loss_l1_valid = self.loss_l1_valid(fake_res, gt, weight=1. - mask)\n            loss['loss_l1_valid'] = loss_l1_valid\n\n        res = dict(\n            gt_img=gt.cpu(),\n            masked_img=masked_img.cpu(),\n            fake_res=fake_res.cpu(),\n            fake_img=fake_img.cpu())\n\n        return res, loss\n\n    def train_step(self, data: List[dict], optim_wrapper):\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n\n        1. get fake res/image\n        2. optimize discriminator (if in current schedule)\n        3. optimize generator (if in current schedule)\n\n        If ``self.train_cfg.disc_step > 1``, the train step will contain\n        multiple iterations for optimizing discriminator with different input\n        data and sonly one iteration for optimizing generator after `disc_step`\n        iterations for discriminator.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of \\\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        masked_img = batch_inputs  # float\n        gt_img = data_samples.gt_img\n        mask = data_samples.mask\n        mask = mask.float()\n\n        # PyTorch 2.0 could not compile 'data_samples.mask_bbox'\n        # bbox_tensor = torch.LongTensor(data_samples.mask_bbox)\n        bbox_tensor = torch.LongTensor(data_samples.metainfo['mask_bbox'])\n\n        input_x = torch.cat([masked_img, mask], dim=1)\n        fake_res = self.generator(input_x)\n        fake_img = gt_img * (1. - mask) + fake_res * mask\n\n        fake_local, bbox_new = extract_around_bbox(fake_img, bbox_tensor,\n                                                   self.train_cfg.local_size)\n        gt_local = extract_bbox_patch(bbox_new, gt_img)\n        fake_gt_local = torch.cat([fake_local, gt_local], dim=2)\n\n        # if cur_iter > iter_tc, update discriminator\n        if (self.train_cfg.disc_step > 0\n                and self.cur_iter > self.train_cfg.iter_tc):\n            # set discriminator requires_grad as True\n            set_requires_grad(self.disc, True)\n\n            fake_data = (fake_img.detach(), fake_local.detach())\n            real_data = (gt_img, gt_local)\n            disc_losses = self.forward_train_d(fake_data, False, True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].zero_grad()\n            optim_wrapper['disc'].backward(loss_disc)\n\n            disc_losses = self.forward_train_d(real_data, True, True)\n            loss_disc, log_vars_d = self.parse_losses(disc_losses)\n            log_vars.update(log_vars_d)\n            optim_wrapper['disc'].backward(loss_disc)\n            optim_wrapper['disc'].step()\n            self.disc_step_count = (self.disc_step_count +\n                                    1) % self.train_cfg.disc_step\n\n            # if cur_iter <= iter_td, do not update generator\n            if (self.disc_step_count != 0\n                    or self.cur_iter <= self.train_cfg.iter_td):\n                results = dict(\n                    gt_img=gt_img.cpu(),\n                    masked_img=masked_img.cpu(),\n                    fake_res=fake_res.cpu(),\n                    fake_img=fake_img.cpu(),\n                    fake_gt_local=fake_gt_local.cpu())\n                # outputs = dict(**log_vars,**results)\n\n                self.cur_iter += 1\n                return log_vars\n\n        # set discriminators requires_grad as False to avoid extra computation.\n        set_requires_grad(self.disc, False)\n        # update generator\n        if (self.cur_iter <= self.train_cfg.iter_tc\n                or self.cur_iter > self.train_cfg.iter_td):\n            results, g_losses = self.generator_loss(fake_res, fake_img,\n                                                    fake_local, gt_img, mask,\n                                                    masked_img)\n            loss_g, log_vars_g = self.parse_losses(g_losses)\n            log_vars.update(log_vars_g)\n            optim_wrapper['generator'].zero_grad()\n            optim_wrapper['generator'].backward(loss_g)\n            optim_wrapper['generator'].step()\n\n            results.update(fake_gt_local=fake_gt_local.cpu())\n            # outputs = dict(**log_vars,**results)\n\n        self.cur_iter += 1\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/guided_diffusion/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .adm import AblatedDiffusionModel\nfrom .classifier import EncoderUNetModel\n\n__all__ = ['AblatedDiffusionModel', 'EncoderUNetModel']\n"
  },
  {
    "path": "mmagic/models/editors/guided_diffusion/adm.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import List, Optional\n\nimport mmengine\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\nfrom mmengine.model import BaseModel, is_model_wrapper\nfrom mmengine.optim import OptimWrapperDict\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom tqdm import tqdm\n\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, SampleList\n\n\ndef classifier_grad(classifier, x, t, y=None, classifier_scale=1.0):\n    \"\"\"compute classification gradient to x.\"\"\"\n    assert y is not None\n    with torch.enable_grad():\n        x_in = x.detach().requires_grad_(True)\n        timesteps = torch.ones_like(y) * t\n        logits = classifier(x_in, timesteps)\n        log_probs = F.log_softmax(logits, dim=-1)\n        selected = log_probs[range(len(logits)), y.view(-1)]\n        return torch.autograd.grad(selected.sum(), x_in)[0] * classifier_scale\n\n\n@MODELS.register_module('ADM')\n@MODELS.register_module('GuidedDiffusion')\n@MODELS.register_module()\nclass AblatedDiffusionModel(BaseModel):\n    \"\"\"Guided diffusion Model.\n\n    Args:\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        unet (ModelType): Config of denoising Unet.\n        diffusion_scheduler (ModelType): Config of diffusion_scheduler\n            scheduler.\n        use_fp16 (bool): Whether to use fp16 for unet model. Defaults to False.\n        classifier (ModelType): Config of classifier. Defaults to None.\n        pretrained_cfgs (dict): Path Config for pretrained weights. Usually\n            this is a dict contains module name and the corresponding ckpt\n            path.Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor,\n                 unet,\n                 diffusion_scheduler,\n                 use_fp16=False,\n                 classifier=None,\n                 classifier_scale=1.0,\n                 rgb2bgr=False,\n                 pretrained_cfgs=None):\n\n        super().__init__(data_preprocessor=data_preprocessor)\n        self.unet = MODELS.build(unet)\n        self.diffusion_scheduler = DIFFUSION_SCHEDULERS.build(\n            diffusion_scheduler)\n        if classifier:\n            self.classifier = MODELS.build(classifier)\n        else:\n            self.classifier = None\n        self.classifier_scale = classifier_scale\n\n        if pretrained_cfgs:\n            self.load_pretrained_models(pretrained_cfgs)\n        if use_fp16:\n            mmengine.print_log('Convert unet modules to floatpoint16')\n            self.unet.convert_to_fp16()\n        self.rgb2bgr = rgb2bgr\n\n    def load_pretrained_models(self, pretrained_cfgs):\n        \"\"\"_summary_\n\n        Args:\n            pretrained_cfgs (_type_): _description_\n        \"\"\"\n        for key, ckpt_cfg in pretrained_cfgs.items():\n            prefix = ckpt_cfg.get('prefix', '')\n            map_location = ckpt_cfg.get('map_location', 'cpu')\n            strict = ckpt_cfg.get('strict', True)\n            ckpt_path = ckpt_cfg.get('ckpt_path')\n            if prefix == '':\n                state_dict = torch.load(ckpt_path, map_location=map_location)\n            else:\n                state_dict = _load_checkpoint_with_prefix(\n                    prefix, ckpt_path, map_location)\n            getattr(self, key).load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained {key} from {ckpt_path}')\n\n    @property\n    def device(self):\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    @torch.no_grad()\n    def infer(self,\n              scheduler_kwargs=None,\n              init_image=None,\n              batch_size=1,\n              num_inference_steps=1000,\n              labels=None,\n              classifier_scale=0.0,\n              show_progress=False):\n        \"\"\"_summary_\n\n        Args:\n            init_image (_type_, optional): _description_. Defaults to None.\n            batch_size (int, optional): _description_. Defaults to 1.\n            num_inference_steps (int, optional): _description_.\n                Defaults to 1000.\n            labels (_type_, optional): _description_. Defaults to None.\n            show_progress (bool, optional): _description_. Defaults to False.\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        if scheduler_kwargs is not None:\n            mmengine.print_log('Switch to infer diffusion scheduler!',\n                               'current')\n            infer_scheduler = DIFFUSION_SCHEDULERS.build(scheduler_kwargs)\n        else:\n            infer_scheduler = self.diffusion_scheduler\n\n        # Sample gaussian noise to begin loop\n        if init_image is None:\n            image = torch.randn(\n                (batch_size, self.get_module(self.unet, 'in_channels'),\n                 self.get_module(self.unet, 'image_size'),\n                 self.get_module(self.unet, 'image_size')))\n        else:\n            image = init_image\n        image = image.to(self.device)\n\n        if isinstance(labels, int):\n            labels = torch.tensor(labels).repeat(batch_size)\n        elif labels is None:\n            labels = torch.randint(\n                low=0,\n                high=self.get_module(self.unet, 'num_classes'),\n                size=(batch_size, ),\n                device=self.device)\n        labels = labels.to(self.device)\n\n        # set step values\n        if num_inference_steps > 0:\n            infer_scheduler.set_timesteps(num_inference_steps)\n\n        timesteps = infer_scheduler.timesteps\n\n        if show_progress and mmengine.dist.is_main_process():\n            timesteps = tqdm(timesteps)\n        for t in timesteps:\n            # 1. predicted model_output\n            model_output = self.unet(image, t, label=labels)['sample']\n\n            # 2. compute previous image: x_t -> x_t-1\n            if classifier_scale > 0 and self.classifier is not None:\n                cond_fn = classifier_grad\n                cond_kwargs = dict(\n                    y=labels,\n                    classifier=self.classifier,\n                    classifier_scale=classifier_scale)\n            else:\n                cond_fn = None\n                cond_kwargs = {}\n            diffusion_scheduler_output = infer_scheduler.step(\n                model_output,\n                t,\n                image,\n                cond_fn=cond_fn,\n                cond_kwargs=cond_kwargs)\n            image = diffusion_scheduler_output['prev_sample']\n\n        if self.rgb2bgr:\n            image = image[:, [2, 1, 0], ...]\n\n        return {'samples': image}\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        \"\"\"_summary_\n\n        Args:\n            inputs (ForwardInputs): _description_\n            data_samples (Optional[list], optional): _description_.\n                Defaults to None.\n            mode (Optional[str], optional): _description_. Defaults to None.\n\n        Returns:\n            List[DataSample]: _description_\n        \"\"\"\n        init_image = inputs.get('init_image', None)\n        batch_size = inputs.get('num_batches', 1)\n        sample_kwargs = inputs.get('sample_kwargs', dict())\n\n        labels = sample_kwargs.get('labels', None)\n        num_inference_steps = sample_kwargs.get(\n            'num_inference_steps',\n            self.diffusion_scheduler.num_train_timesteps)\n        show_progress = sample_kwargs.get('show_progress', False)\n        classifier_scale = sample_kwargs.get('classifier_scale',\n                                             self.classifier_scale)\n\n        outputs = self.infer(\n            init_image=init_image,\n            batch_size=batch_size,\n            num_inference_steps=num_inference_steps,\n            show_progress=show_progress,\n            classifier_scale=classifier_scale)\n\n        batch_sample_list = []\n        for idx in range(batch_size):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n            if isinstance(outputs, dict):\n                gen_sample.fake_img = outputs['samples'][idx]\n                gen_sample.set_gt_label(labels[idx])\n\n            # Append input condition (noise and sample_kwargs) to\n            # batch_sample_list\n            if init_image is not None:\n                gen_sample.noise = init_image[idx]\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data.\n\n        Calls ``self.data_preprocessor(data)`` and\n        ``self(inputs, data_sample, mode=None)`` in order. Return the\n        generated results which will be passed to evaluator.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            List[DataSample]: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    def train_step(self, data: dict, optim_wrapper: OptimWrapperDict):\n        \"\"\"_summary_\n\n        Args:\n            data (dict): _description_\n            optim_wrapper (OptimWrapperDict): _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n\n        # sampling x0 and timestep\n        data = self.data_preprocessor(data)\n        real_imgs = data['inputs']\n        timestep = self.diffusion_scheduler.sample_timestep()\n\n        # calculating loss\n        loss_dict = self.diffusion_scheduler.training_loss(\n            self.unet, real_imgs, timestep)\n        loss, log_vars = self._parse_losses(loss_dict)\n        optim_wrapper['denoising'].update_params(loss)\n\n        # update EMA\n        if self.with_ema_denoising and (curr_iter + 1) >= self.ema_start:\n            self.denoising_ema.update_parameters(\n                self.denoising_ema.\n                module if is_model_wrapper(self.denoising) else self.denoising)\n            # if not update buffer, copy buffer from orig model\n            if not self.denoising_ema.update_buffers:\n                self.denoising_ema.sync_buffers(\n                    self.denoising.module\n                    if is_model_wrapper(self.denoising) else self.denoising)\n        elif self.with_ema_denoising:\n            # before ema, copy weights from orig\n            self.denoising_ema.sync_parameters(\n                self.denoising.\n                module if is_model_wrapper(self.denoising) else self.denoising)\n\n        return log_vars\n\n    def get_module(self, model: nn.Module, module_name: str) -> nn.Module:\n        \"\"\"Get an inner module from model.\n\n        Since we will wrapper DDP for some model, we have to judge whether the\n        module can be indexed directly.\n\n        Args:\n            model (nn.Module): This model may wrapped with DDP or not.\n            module_name (str): The name of specific module.\n\n        Return:\n            nn.Module: Returned sub module.\n        \"\"\"\n        module = model.module if hasattr(model, 'module') else model\n        return getattr(module, module_name)\n"
  },
  {
    "path": "mmagic/models/editors/guided_diffusion/classifier.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom abc import abstractmethod\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.models.editors.ddpm.denoising_unet import (QKVAttention,\n                                                       QKVAttentionLegacy,\n                                                       convert_module_to_f16,\n                                                       convert_module_to_f32)\nfrom mmagic.registry import MODELS\n\n\ndef checkpoint(func, inputs, params, flag):\n    \"\"\"Evaluate a function without caching intermediate activations, allowing\n    for reduced memory at the expense of extra compute in the backward pass.\n\n    :param func: the function to evaluate.\n    :param inputs: the argument sequence to pass to `func`.\n    :param params: a sequence of parameters `func` depends on but does not\n                   explicitly take as arguments.\n    :param flag: if False, disable gradient checkpointing.\n    \"\"\"\n    if flag:\n        args = tuple(inputs) + tuple(params)\n        return CheckpointFunction.apply(func, len(inputs), *args)\n    else:\n        return func(*inputs)\n\n\nclass CheckpointFunction(torch.autograd.Function):\n\n    @staticmethod\n    def forward(ctx, run_function, length, *args):\n        ctx.run_function = run_function\n        ctx.input_tensors = list(args[:length])\n        ctx.input_params = list(args[length:])\n        with torch.no_grad():\n            output_tensors = ctx.run_function(*ctx.input_tensors)\n        return output_tensors\n\n    @staticmethod\n    def backward(ctx, *output_grads):\n        ctx.input_tensors = [\n            x.detach().requires_grad_(True) for x in ctx.input_tensors\n        ]\n        with torch.enable_grad():\n            # Fixes a bug where the first op in run_function modifies the\n            # Tensor storage in place, which is not allowed for detach()'d\n            # Tensors.\n            shallow_copies = [x.view_as(x) for x in ctx.input_tensors]\n            output_tensors = ctx.run_function(*shallow_copies)\n        input_grads = torch.autograd.grad(\n            output_tensors,\n            ctx.input_tensors + ctx.input_params,\n            output_grads,\n            allow_unused=True,\n        )\n        del ctx.input_tensors\n        del ctx.input_params\n        del output_tensors\n        return (None, None) + input_grads\n\n\ndef timestep_embedding(timesteps, dim, max_period=10000):\n    \"\"\"Create sinusoidal timestep embeddings.\n\n    :param timesteps: a 1-D Tensor of N indices, one per batch element.\n                      These may be fractional.\n    :param dim: the dimension of the output.\n    :param max_period: controls the minimum frequency of the embeddings.\n    :return: an [N x dim] Tensor of positional embeddings.\n    \"\"\"\n    half = dim // 2\n    freqs = torch.exp(-math.log(max_period) *\n                      torch.arange(start=0, end=half, dtype=torch.float32) /\n                      half).to(device=timesteps.device)\n    args = timesteps[:, None].float() * freqs[None]\n    embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1)\n    if dim % 2:\n        embedding = torch.cat([embedding,\n                               torch.zeros_like(embedding[:, :1])],\n                              dim=-1)\n    return embedding\n\n\ndef zero_module(module):\n    \"\"\"Zero out the parameters of a module and return it.\"\"\"\n    for p in module.parameters():\n        p.detach().zero_()\n    return module\n\n\nclass Upsample(nn.Module):\n    \"\"\"An upsampling layer with an optional convolution.\n\n    :param channels: channels in the inputs and outputs.\n    :param use_conv: a bool determining if a convolution is applied.\n    :param dims: determines if the signal is 1D, 2D, or 3D. If 3D, then\n                 upsampling occurs in the inner-two dimensions.\n    \"\"\"\n\n    def __init__(self, channels, use_conv, dims=2, out_channels=None):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.dims = dims\n        if use_conv:\n            self.conv = nn.Conv2d(\n                self.channels, self.out_channels, 3, padding=1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): The tensor to upsample.\n\n        Returns:\n            torch.Tensor: The upsample results.\n        \"\"\"\n        assert x.shape[1] == self.channels\n        if self.dims == 3:\n            x = F.interpolate(\n                x, (x.shape[2], x.shape[3] * 2, x.shape[4] * 2),\n                mode='nearest')\n        else:\n            x = F.interpolate(x, scale_factor=2, mode='nearest')\n        if self.use_conv:\n            x = self.conv(x)\n        return x\n\n\nclass TimestepBlock(nn.Module):\n    \"\"\"Any module where forward() takes timestep embeddings as a second\n    argument.\"\"\"\n\n    @abstractmethod\n    def forward(self, x, emb):\n        \"\"\"Apply the module to `x` given `emb` timestep embeddings.\"\"\"\n\n\nclass AttentionBlock(nn.Module):\n    \"\"\"An attention block that allows spatial positions to attend to each\n    other.\n\n    Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        num_heads=1,\n        num_head_channels=-1,\n        use_checkpoint=False,\n        use_new_attention_order=False,\n    ):\n        super().__init__()\n        self.channels = channels\n        if num_head_channels == -1:\n            self.num_heads = num_heads\n        else:\n            assert (\n                channels %\n                num_head_channels == 0), f'q,k,v channels {channels} is not '\n            'divisible by num_head_channels {num_head_channels}'\n            self.num_heads = channels // num_head_channels\n        self.use_checkpoint = use_checkpoint\n        self.norm = normalization(channels)\n        self.qkv = nn.Conv1d(channels, channels * 3, 1)\n        if use_new_attention_order:\n            # split qkv before split heads\n            self.attention = QKVAttention(self.num_heads)\n        else:\n            # split heads before split qkv\n            self.attention = QKVAttentionLegacy(self.num_heads)\n\n        self.proj_out = zero_module(nn.Conv1d(channels, channels, 1))\n\n    def forward(self, x):\n        \"\"\"Forward function. This function support gradient checkpoint to save\n        memory.\n\n        Args:\n            x (torch.Tensor): The input tensor for attention.\n\n        Returns:\n            torch.Tensor: The attention results\n        \"\"\"\n        return checkpoint(self._forward, (x, ), self.parameters(), True)\n\n    def _forward(self, x):\n        \"\"\"Forward function of attention block.\n\n        Args:\n            x (torch.Tensor): The input tensor for attention.\n\n        Returns:\n            torch.Tensor: The attention results\n        \"\"\"\n        b, c, *spatial = x.shape\n        x = x.reshape(b, c, -1)\n        qkv = self.qkv(self.norm(x))\n        h = self.attention(qkv)\n        h = self.proj_out(h)\n        return (x + h).reshape(b, c, *spatial)\n\n\nclass TimestepEmbedSequential(nn.Sequential, TimestepBlock):\n    \"\"\"A sequential module that passes timestep embeddings to the children that\n    support it as an extra input.\"\"\"\n\n    def forward(self, x, emb):\n        \"\"\"Forward function. This function support sequential forward with\n        embedding input.\n\n        Args:\n            x (torch.Tensor): Input tensor to forward.\n            emb (torch.Tensor): Input timestep embedding.\n\n        Returns:\n            torch.Tensor: The forward results.\n        \"\"\"\n        for layer in self:\n            if isinstance(layer, TimestepBlock):\n                x = layer(x, emb)\n            else:\n                x = layer(x)\n        return x\n\n\nclass GroupNorm32(nn.GroupNorm):\n\n    def forward(self, x):\n        \"\"\"Forward group normalization.\n\n        Args:\n            x (torch.Tensor): The input tensor.\n\n        Returns:\n            torch.Tensor: Tensor after group norm.\n        \"\"\"\n        return super().forward(x.float()).type(x.dtype)\n\n\ndef normalization(channels):\n    \"\"\"Make a standard normalization layer.\n\n    :param channels: number of input channels.\n    :return: an nn.Module for normalization.\n    \"\"\"\n    return GroupNorm32(32, channels)\n\n\nclass Downsample(nn.Module):\n    \"\"\"A downsampling layer with an optional convolution.\n\n    :param channels: channels in the inputs and outputs.\n    :param use_conv: a bool determining if a convolution is applied.\n    :param dims: determines if the signal is 1D, 2D, or 3D. If 3D, then\n                 downsampling occurs in the inner-two dimensions.\n    \"\"\"\n\n    def __init__(self, channels, use_conv, dims=2, out_channels=None):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.dims = dims\n        stride = 2 if dims != 3 else (1, 2, 2)\n        if use_conv:\n            self.op = nn.Conv2d(\n                self.channels, self.out_channels, 3, stride=stride, padding=1)\n        else:\n            assert self.channels == self.out_channels\n            self.op = nn.AvgPool2d(kernel_size=stride, stride=stride)\n\n    def forward(self, x):\n        \"\"\"Forward function for downsample.\n\n        Args:\n            x (torch.Tensor): The input tensor.\n\n        Returns:\n            torch.Tenor: Results after downsample.\n        \"\"\"\n        assert x.shape[1] == self.channels\n        return self.op(x)\n\n\nclass ResBlock(TimestepBlock):\n    \"\"\"A residual block that can optionally change the number of channels.\n\n    :param channels: the number of input channels.\n    :param emb_channels: the number of timestep embedding channels.\n    :param dropout: the rate of dropout.\n    :param out_channels: if specified, the number of out channels.\n    :param use_conv: if True and out_channels is specified, use a spatial\n        convolution instead of a smaller 1x1 convolution to change the\n        channels in the skip connection.\n    :param dims: determines if the signal is 1D, 2D, or 3D.\n    :param use_checkpoint: if True, use gradient checkpointing on this module.\n    :param up: if True, use this block for upsampling.\n    :param down: if True, use this block for downsampling.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels,\n        emb_channels,\n        dropout,\n        out_channels=None,\n        use_conv=False,\n        use_scale_shift_norm=False,\n        dims=2,\n        use_checkpoint=False,\n        up=False,\n        down=False,\n    ):\n        super().__init__()\n        self.channels = channels\n        self.emb_channels = emb_channels\n        self.dropout = dropout\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_checkpoint = use_checkpoint\n        self.use_scale_shift_norm = use_scale_shift_norm\n\n        self.in_layers = nn.Sequential(\n            normalization(channels),\n            nn.SiLU(),\n            nn.Conv2d(channels, self.out_channels, 3, padding=1),\n        )\n\n        self.updown = up or down\n\n        if up:\n            self.h_upd = Upsample(channels, False, dims)\n            self.x_upd = Upsample(channels, False, dims)\n        elif down:\n            self.h_upd = Downsample(channels, False, dims)\n            self.x_upd = Downsample(channels, False, dims)\n        else:\n            self.h_upd = self.x_upd = nn.Identity()\n\n        self.emb_layers = nn.Sequential(\n            nn.SiLU(),\n            nn.Linear(\n                emb_channels,\n                2 * self.out_channels\n                if use_scale_shift_norm else self.out_channels,\n            ),\n        )\n        self.out_layers = nn.Sequential(\n            normalization(self.out_channels),\n            nn.SiLU(),\n            nn.Dropout(p=dropout),\n            zero_module(\n                nn.Conv2d(self.out_channels, self.out_channels, 3, padding=1)),\n        )\n\n        if self.out_channels == channels:\n            self.skip_connection = nn.Identity()\n        elif use_conv:\n            self.skip_connection = nn.Conv2d(\n                channels, self.out_channels, 3, padding=1)\n        else:\n            self.skip_connection = nn.Conv2d(channels, self.out_channels, 1)\n\n    def forward(self, x, emb):\n        \"\"\"Apply the block to a Tensor, conditioned on a timestep embedding.\n\n        :param x: an [N x C x ...] Tensor of features.\n        :param emb: an [N x emb_channels] Tensor of timestep embeddings.\n        :return: an [N x C x ...] Tensor of outputs.\n        \"\"\"\n        return checkpoint(self._forward, (x, emb), self.parameters(),\n                          self.use_checkpoint)\n\n    def _forward(self, x, emb):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature tensor to forward.\n            emb (torch.Tensor): The timesteps embedding to forward.\n\n        Returns:\n            torch.Tensor: The forward results.\n        \"\"\"\n        if self.updown:\n            in_rest, in_conv = self.in_layers[:-1], self.in_layers[-1]\n            h = in_rest(x)\n            h = self.h_upd(h)\n            x = self.x_upd(x)\n            h = in_conv(h)\n        else:\n            h = self.in_layers(x)\n        emb_out = self.emb_layers(emb).type(h.dtype)\n        while len(emb_out.shape) < len(h.shape):\n            emb_out = emb_out[..., None]\n        if self.use_scale_shift_norm:\n            out_norm, out_rest = self.out_layers[0], self.out_layers[1:]\n            scale, shift = torch.chunk(emb_out, 2, dim=1)\n            h = out_norm(h) * (1 + scale) + shift\n            h = out_rest(h)\n        else:\n            h = h + emb_out\n            h = self.out_layers(h)\n        return self.skip_connection(x) + h\n\n\nclass AttentionPool2d(nn.Module):\n    \"\"\"Adapted from CLIP:\n\n    https://github.com/openai/CLIP/blob/main/clip/model.py.\n    \"\"\"\n\n    def __init__(\n        self,\n        spacial_dim: int,\n        embed_dim: int,\n        num_heads_channels: int,\n        output_dim: int = None,\n    ):\n        super().__init__()\n        self.positional_embedding = nn.Parameter(\n            torch.randn(embed_dim, spacial_dim**2 + 1) / embed_dim**0.5)\n        self.qkv_proj = nn.Conv1d(embed_dim, 3 * embed_dim, 1)\n        self.c_proj = nn.Conv1d(embed_dim, output_dim or embed_dim, 1)\n        self.num_heads = embed_dim // num_heads_channels\n        self.attention = QKVAttention(self.num_heads)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input feature tensor to forward.\n\n        Returns:\n            torch.Tensor: The forward results.\n        \"\"\"\n        b, c, *_spatial = x.shape\n        x = x.reshape(b, c, -1)  # NC(HW)\n        x = torch.cat([x.mean(dim=-1, keepdim=True), x], dim=-1)  # NC(HW+1)\n        x = x + self.positional_embedding[None, :, :].to(x.dtype)  # NC(HW+1)\n        x = self.qkv_proj(x)\n        x = self.attention(x)\n        x = self.c_proj(x)\n        return x[:, :, 0]\n\n\n@MODELS.register_module()\nclass EncoderUNetModel(nn.Module):\n    \"\"\"The half UNet model with attention and timestep embedding.\n\n    For usage, see UNet.\n    \"\"\"\n\n    def __init__(\n        self,\n        image_size,\n        in_channels,\n        model_channels,\n        out_channels,\n        num_res_blocks,\n        attention_resolutions,\n        dropout=0,\n        channel_mult=(1, 2, 4, 8),\n        conv_resample=True,\n        dims=2,\n        use_checkpoint=False,\n        use_fp16=False,\n        num_heads=1,\n        num_head_channels=-1,\n        num_heads_upsample=-1,\n        use_scale_shift_norm=False,\n        resblock_updown=False,\n        use_new_attention_order=False,\n        pool='adaptive',\n    ):\n        super().__init__()\n\n        if num_heads_upsample == -1:\n            num_heads_upsample = num_heads\n\n        self.in_channels = in_channels\n        self.model_channels = model_channels\n        self.out_channels = out_channels\n        self.num_res_blocks = num_res_blocks\n        self.attention_resolutions = attention_resolutions\n        self.dropout = dropout\n        self.channel_mult = channel_mult\n        self.conv_resample = conv_resample\n        self.use_checkpoint = use_checkpoint\n        self.dtype = torch.float16 if use_fp16 else torch.float32\n        self.num_heads = num_heads\n        self.num_head_channels = num_head_channels\n        self.num_heads_upsample = num_heads_upsample\n\n        time_embed_dim = model_channels * 4\n        self.time_embed = nn.Sequential(\n            nn.Linear(model_channels, time_embed_dim),\n            nn.SiLU(),\n            nn.Linear(time_embed_dim, time_embed_dim),\n        )\n\n        ch = int(channel_mult[0] * model_channels)\n        self.input_blocks = nn.ModuleList([\n            TimestepEmbedSequential(nn.Conv2d(in_channels, ch, 3, padding=1))\n        ])\n        self._feature_size = ch\n        input_block_chans = [ch]\n        ds = 1\n        for level, mult in enumerate(channel_mult):\n            for _ in range(num_res_blocks):\n                layers = [\n                    ResBlock(\n                        ch,\n                        time_embed_dim,\n                        dropout,\n                        out_channels=int(mult * model_channels),\n                        dims=dims,\n                        use_checkpoint=use_checkpoint,\n                        use_scale_shift_norm=use_scale_shift_norm,\n                    )\n                ]\n                ch = int(mult * model_channels)\n                if ds in attention_resolutions:\n                    layers.append(\n                        AttentionBlock(\n                            ch,\n                            use_checkpoint=use_checkpoint,\n                            num_heads=num_heads,\n                            num_head_channels=num_head_channels,\n                            use_new_attention_order=use_new_attention_order,\n                        ))\n                self.input_blocks.append(TimestepEmbedSequential(*layers))\n                self._feature_size += ch\n                input_block_chans.append(ch)\n            if level != len(channel_mult) - 1:\n                out_ch = ch\n                self.input_blocks.append(\n                    TimestepEmbedSequential(\n                        ResBlock(\n                            ch,\n                            time_embed_dim,\n                            dropout,\n                            out_channels=out_ch,\n                            dims=dims,\n                            use_checkpoint=use_checkpoint,\n                            use_scale_shift_norm=use_scale_shift_norm,\n                            down=True,\n                        ) if resblock_updown else Downsample(\n                            ch, conv_resample, dims=dims, out_channels=out_ch))\n                )\n                ch = out_ch\n                input_block_chans.append(ch)\n                ds *= 2\n                self._feature_size += ch\n\n        self.middle_block = TimestepEmbedSequential(\n            ResBlock(\n                ch,\n                time_embed_dim,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n            ),\n            AttentionBlock(\n                ch,\n                use_checkpoint=use_checkpoint,\n                num_heads=num_heads,\n                num_head_channels=num_head_channels,\n                use_new_attention_order=use_new_attention_order,\n            ),\n            ResBlock(\n                ch,\n                time_embed_dim,\n                dropout,\n                dims=dims,\n                use_checkpoint=use_checkpoint,\n                use_scale_shift_norm=use_scale_shift_norm,\n            ),\n        )\n        self._feature_size += ch\n        self.pool = pool\n        if pool == 'adaptive':\n            self.out = nn.Sequential(\n                normalization(ch),\n                nn.SiLU(),\n                nn.AdaptiveAvgPool2d((1, 1)),\n                zero_module(nn.Conv2d(ch, out_channels, 1)),\n                nn.Flatten(),\n            )\n        elif pool == 'attention':\n            assert num_head_channels != -1\n            self.out = nn.Sequential(\n                normalization(ch),\n                nn.SiLU(),\n                AttentionPool2d((image_size // ds), ch, num_head_channels,\n                                out_channels),\n            )\n        elif pool == 'spatial':\n            self.out = nn.Sequential(\n                nn.Linear(self._feature_size, 2048),\n                nn.ReLU(),\n                nn.Linear(2048, self.out_channels),\n            )\n        elif pool == 'spatial_v2':\n            self.out = nn.Sequential(\n                nn.Linear(self._feature_size, 2048),\n                normalization(2048),\n                nn.SiLU(),\n                nn.Linear(2048, self.out_channels),\n            )\n        else:\n            raise NotImplementedError(f'Unexpected {pool} pooling')\n\n    def convert_to_fp16(self):\n        \"\"\"Convert the torso of the model to float16.\"\"\"\n        self.input_blocks.apply(convert_module_to_f16)\n        self.middle_block.apply(convert_module_to_f16)\n\n    def convert_to_fp32(self):\n        \"\"\"Convert the torso of the model to float32.\"\"\"\n        self.input_blocks.apply(convert_module_to_f32)\n        self.middle_block.apply(convert_module_to_f32)\n\n    def forward(self, x, timesteps):\n        \"\"\"Apply the model to an input batch.\n\n        :param x: an [N x C x ...] Tensor of inputs.\n        :param timesteps: a 1-D batch of timesteps.\n        :return: an [N x K] Tensor of outputs.\n        \"\"\"\n        emb = self.time_embed(\n            timestep_embedding(timesteps, self.model_channels))\n\n        results = []\n        h = x.type(self.dtype)\n        for module in self.input_blocks:\n            h = module(h, emb)\n            if self.pool.startswith('spatial'):\n                results.append(h.type(x.dtype).mean(dim=(2, 3)))\n        h = self.middle_block(h, emb)\n        if self.pool.startswith('spatial'):\n            results.append(h.type(x.dtype).mean(dim=(2, 3)))\n            h = torch.cat(results, axis=-1)\n            return self.out(h)\n        else:\n            h = h.type(x.dtype)\n            return self.out(h)\n"
  },
  {
    "path": "mmagic/models/editors/iconvsr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .iconvsr_net import IconVSRNet\n\n__all__ = ['IconVSRNet']\n"
  },
  {
    "path": "mmagic/models/editors/iconvsr/iconvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom logging import WARNING\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine import MMLogger, print_log\nfrom mmengine.model import BaseModule\nfrom mmengine.runner import load_checkpoint\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import flow_warp, make_layer\nfrom mmagic.registry import MODELS\nfrom ..basicvsr.basicvsr_net import ResidualBlocksWithInputConv, SPyNet\nfrom ..edvr.edvr_net import PCDAlignment, TSAFusion\n\n\n@MODELS.register_module()\nclass IconVSRNet(BaseModule):\n    \"\"\"IconVSR network structure for video super-resolution.\n\n    Support only x4 upsampling.\n\n    Paper:\n        BasicVSR: The Search for Essential Components in Video Super-Resolution\n        and Beyond, CVPR, 2021\n\n    Args:\n        mid_channels (int): Channel number of the intermediate features.\n            Default: 64.\n        num_blocks (int): Number of residual blocks in each propagation branch.\n            Default: 30.\n        keyframe_stride (int): Number determining the keyframes. If stride=5,\n            then the (0, 5, 10, 15, ...)-th frame will be the keyframes.\n            Default: 5.\n        padding (int): Number of frames to be padded at two ends of the\n            sequence. 2 for REDS and 3 for Vimeo-90K. Default: 2.\n        spynet_pretrained (str): Pre-trained model path of SPyNet.\n            Default: None.\n        edvr_pretrained (str): Pre-trained model path of EDVR (for refill).\n            Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels=64,\n                 num_blocks=30,\n                 keyframe_stride=5,\n                 padding=2,\n                 spynet_pretrained=None,\n                 edvr_pretrained=None):\n\n        super().__init__()\n\n        self.mid_channels = mid_channels\n        self.padding = padding\n        self.keyframe_stride = keyframe_stride\n\n        # optical flow network for alignment\n        self.spynet = SPyNet(pretrained=spynet_pretrained)\n\n        # information-refill\n        self.edvr = EDVRFeatureExtractor(\n            num_frames=padding * 2 + 1,\n            center_frame_idx=padding,\n            pretrained=edvr_pretrained)\n        self.backward_fusion = nn.Conv2d(\n            2 * mid_channels, mid_channels, 3, 1, 1, bias=True)\n        self.forward_fusion = nn.Conv2d(\n            2 * mid_channels, mid_channels, 3, 1, 1, bias=True)\n\n        # propagation branches\n        self.backward_resblocks = ResidualBlocksWithInputConv(\n            mid_channels + 3, mid_channels, num_blocks)\n        self.forward_resblocks = ResidualBlocksWithInputConv(\n            2 * mid_channels + 3, mid_channels, num_blocks)\n\n        # upsample\n        self.upsample1 = PixelShufflePack(\n            mid_channels, mid_channels, 2, upsample_kernel=3)\n        self.upsample2 = PixelShufflePack(\n            mid_channels, 64, 2, upsample_kernel=3)\n        self.conv_hr = nn.Conv2d(64, 64, 3, 1, 1)\n        self.conv_last = nn.Conv2d(64, 3, 3, 1, 1)\n        self.img_upsample = nn.Upsample(\n            scale_factor=4, mode='bilinear', align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        self._raised_warning = False\n\n    def spatial_padding(self, lrs):\n        \"\"\"Apply padding spatially.\n\n        Since the PCD module in EDVR requires that the resolution is a multiple\n        of 4, we apply padding to the input LR images if their resolution is\n        not divisible by 4.\n\n        Args:\n            lrs (Tensor): Input LR sequence with shape (n, t, c, h, w).\n\n        Returns:\n            Tensor: Padded LR sequence with shape (n, t, c, h_pad, w_pad).\n        \"\"\"\n        n, t, c, h, w = lrs.size()\n\n        pad_h = (4 - h % 4) % 4\n        pad_w = (4 - w % 4) % 4\n\n        # padding\n        lrs = lrs.view(-1, c, h, w)\n        lrs = F.pad(lrs, [0, pad_w, 0, pad_h], mode='reflect')\n\n        return lrs.view(n, t, c, h + pad_h, w + pad_w)\n\n    def check_if_mirror_extended(self, lrs):\n        \"\"\"Check whether the input is a mirror-extended sequence.\n\n        If mirror-extended, the i-th (i=0, ..., t-1) frame is equal to the\n        (t-1-i)-th frame.\n\n        Args:\n            lrs (tensor): Input LR images with shape (n, t, c, h, w)\n        \"\"\"\n\n        self.is_mirror_extended = False\n        if lrs.size(1) % 2 == 0:\n            lrs_1, lrs_2 = torch.chunk(lrs, 2, dim=1)\n            if torch.norm(lrs_1 - lrs_2.flip(1)) == 0:\n                self.is_mirror_extended = True\n\n    def compute_refill_features(self, lrs, keyframe_idx):\n        \"\"\"Compute keyframe features for information-refill.\n\n        Since EDVR-M is used, padding is performed before feature computation.\n        Args:\n            lrs (Tensor): Input LR images with shape (n, t, c, h, w)\n            keyframe_idx (list(int)): The indices specifying the keyframes.\n        Return:\n            dict(Tensor): The keyframe features. Each key corresponds to the\n                indices in keyframe_idx.\n        \"\"\"\n\n        if self.padding == 2:\n            lrs = [lrs[:, [4, 3]], lrs, lrs[:, [-4, -5]]]  # padding\n        elif self.padding == 3:\n            lrs = [lrs[:, [6, 5, 4]], lrs, lrs[:, [-5, -6, -7]]]  # padding\n        lrs = torch.cat(lrs, dim=1)\n\n        num_frames = 2 * self.padding + 1\n        feats_refill = {}\n        for i in keyframe_idx:\n            feats_refill[i] = self.edvr(lrs[:, i:i + num_frames].contiguous())\n        return feats_refill\n\n    def compute_flow(self, lrs):\n        \"\"\"Compute optical flow using SPyNet for feature warping.\n\n        Note that if the input is an mirror-extended sequence, 'flows_forward'\n        is not needed, since it is equal to 'flows_backward.flip(1)'.\n\n        Args:\n            lrs (tensor): Input LR images with shape (n, t, c, h, w)\n\n        Return:\n            tuple(Tensor): Optical flow. 'flows_forward' corresponds to the\n                flows used for forward-time propagation (current to previous).\n                'flows_backward' corresponds to the flows used for\n                backward-time propagation (current to next).\n        \"\"\"\n\n        n, t, c, h, w = lrs.size()\n        lrs_1 = lrs[:, :-1, :, :, :].reshape(-1, c, h, w)\n        lrs_2 = lrs[:, 1:, :, :, :].reshape(-1, c, h, w)\n\n        flows_backward = self.spynet(lrs_1, lrs_2).view(n, t - 1, 2, h, w)\n\n        if self.is_mirror_extended:  # flows_forward = flows_backward.flip(1)\n            flows_forward = None\n        else:\n            flows_forward = self.spynet(lrs_2, lrs_1).view(n, t - 1, 2, h, w)\n\n        return flows_forward, flows_backward\n\n    def forward(self, lrs):\n        \"\"\"Forward function for IconVSR.\n\n        Args:\n            lrs (Tensor): Input LR tensor with shape (n, t, c, h, w).\n        Returns:\n            Tensor: Output HR tensor with shape (n, t, c, 4h, 4w).\n        \"\"\"\n\n        n, t, c, h_input, w_input = lrs.size()\n        if (h_input < 64 or w_input < 64) and not self._raised_warning:\n            print_log(\n                f'{self.__class__.__name__} is designed for input '\n                'larger than 64x64, but the resolution of current image '\n                f'is {h_input}x{w_input}. We recommend you to check your '\n                'input.', 'current', WARNING)\n            self._raised_warning = True\n\n        # check whether the input is an extended sequence\n        self.check_if_mirror_extended(lrs)\n\n        lrs = self.spatial_padding(lrs)\n        h, w = lrs.size(3), lrs.size(4)\n\n        # get the keyframe indices for information-refill\n        keyframe_idx = list(range(0, t, self.keyframe_stride))\n        if keyframe_idx[-1] != t - 1:\n            keyframe_idx.append(t - 1)  # the last frame must be a keyframe\n\n        # compute optical flow and compute features for information-refill\n        flows_forward, flows_backward = self.compute_flow(lrs)\n        feats_refill = self.compute_refill_features(lrs, keyframe_idx)\n\n        # backward-time propagation\n        outputs = []\n        feat_prop = lrs.new_zeros(n, self.mid_channels, h, w)\n        for i in range(t - 1, -1, -1):\n            lr_curr = lrs[:, i, :, :, :]\n            if i < t - 1:  # no warping for the last timestep\n                flow = flows_backward[:, i, :, :, :]\n                feat_prop = flow_warp(feat_prop, flow.permute(0, 2, 3, 1))\n            if i in keyframe_idx:\n                feat_prop = torch.cat([feat_prop, feats_refill[i]], dim=1)\n                feat_prop = self.backward_fusion(feat_prop)\n            feat_prop = torch.cat([lr_curr, feat_prop], dim=1)\n            feat_prop = self.backward_resblocks(feat_prop)\n\n            outputs.append(feat_prop)\n        outputs = outputs[::-1]\n\n        # forward-time propagation and upsampling\n        feat_prop = torch.zeros_like(feat_prop)\n        for i in range(0, t):\n            lr_curr = lrs[:, i, :, :, :]\n            if i > 0:  # no warping for the first timestep\n                if flows_forward is not None:\n                    flow = flows_forward[:, i - 1, :, :, :]\n                else:\n                    flow = flows_backward[:, -i, :, :, :]\n                feat_prop = flow_warp(feat_prop, flow.permute(0, 2, 3, 1))\n\n            if i in keyframe_idx:  # information-refill\n                feat_prop = torch.cat([feat_prop, feats_refill[i]], dim=1)\n                feat_prop = self.forward_fusion(feat_prop)\n\n            feat_prop = torch.cat([lr_curr, outputs[i], feat_prop], dim=1)\n            feat_prop = self.forward_resblocks(feat_prop)\n\n            out = self.lrelu(self.upsample1(feat_prop))\n            out = self.lrelu(self.upsample2(out))\n            out = self.lrelu(self.conv_hr(out))\n            out = self.conv_last(out)\n            base = self.img_upsample(lr_curr)\n            out += base\n            outputs[i] = out\n\n        return torch.stack(outputs, dim=1)[:, :, :, :4 * h_input, :4 * w_input]\n\n\nclass EDVRFeatureExtractor(BaseModule):\n    \"\"\"EDVR feature extractor for information-refill in IconVSR.\n\n    We use EDVR-M in IconVSR. To adopt pretrained models, please\n    specify \"pretrained\".\n\n    Paper:\n    EDVR: Video Restoration with Enhanced Deformable Convolutional Networks.\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_frames (int): Number of input frames. Default: 5.\n        deform_groups (int): Deformable groups. Defaults: 8.\n        num_blocks_extraction (int): Number of blocks for feature extraction.\n            Default: 5.\n        num_blocks_reconstruction (int): Number of blocks for reconstruction.\n            Default: 10.\n        center_frame_idx (int): The index of center frame. Frame counting from\n            0. Default: 2.\n        with_tsa (bool): Whether to use TSA module. Default: True.\n        pretrained (str): The pretrained model path. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=3,\n                 out_channel=3,\n                 mid_channels=64,\n                 num_frames=5,\n                 deform_groups=8,\n                 num_blocks_extraction=5,\n                 num_blocks_reconstruction=10,\n                 center_frame_idx=2,\n                 with_tsa=True,\n                 pretrained=None):\n\n        super().__init__()\n\n        self.center_frame_idx = center_frame_idx\n        self.with_tsa = with_tsa\n        act_cfg = dict(type='LeakyReLU', negative_slope=0.1)\n\n        self.conv_first = nn.Conv2d(in_channels, mid_channels, 3, 1, 1)\n        self.feature_extraction = make_layer(\n            ResidualBlockNoBN,\n            num_blocks_extraction,\n            mid_channels=mid_channels)\n\n        # generate pyramid features\n        self.feat_l2_conv1 = ConvModule(\n            mid_channels, mid_channels, 3, 2, 1, act_cfg=act_cfg)\n        self.feat_l2_conv2 = ConvModule(\n            mid_channels, mid_channels, 3, 1, 1, act_cfg=act_cfg)\n        self.feat_l3_conv1 = ConvModule(\n            mid_channels, mid_channels, 3, 2, 1, act_cfg=act_cfg)\n        self.feat_l3_conv2 = ConvModule(\n            mid_channels, mid_channels, 3, 1, 1, act_cfg=act_cfg)\n        # pcd alignment\n        self.pcd_alignment = PCDAlignment(\n            mid_channels=mid_channels, deform_groups=deform_groups)\n        # fusion\n        if self.with_tsa:\n            self.fusion = TSAFusion(\n                mid_channels=mid_channels,\n                num_frames=num_frames,\n                center_frame_idx=self.center_frame_idx)\n        else:\n            self.fusion = nn.Conv2d(num_frames * mid_channels, mid_channels, 1,\n                                    1)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=True, logger=logger)\n        elif pretrained is not None:\n            raise TypeError(f'\"pretrained\" must be a str or None. '\n                            f'But received {type(pretrained)}.')\n\n    def forward(self, x):\n        \"\"\"Forward function for EDVRFeatureExtractor.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, t, 3, h, w).\n        Returns:\n            Tensor: Intermediate feature with shape (n, mid_channels, h, w).\n        \"\"\"\n\n        n, t, c, h, w = x.size()\n\n        # extract LR features\n        # L1\n        l1_feat = self.lrelu(self.conv_first(x.view(-1, c, h, w)))\n        l1_feat = self.feature_extraction(l1_feat)\n        # L2\n        l2_feat = self.feat_l2_conv2(self.feat_l2_conv1(l1_feat))\n        # L3\n        l3_feat = self.feat_l3_conv2(self.feat_l3_conv1(l2_feat))\n\n        l1_feat = l1_feat.view(n, t, -1, h, w)\n        l2_feat = l2_feat.view(n, t, -1, h // 2, w // 2)\n        l3_feat = l3_feat.view(n, t, -1, h // 4, w // 4)\n\n        # pcd alignment\n        ref_feats = [  # reference feature list\n            l1_feat[:, self.center_frame_idx, :, :, :].clone(),\n            l2_feat[:, self.center_frame_idx, :, :, :].clone(),\n            l3_feat[:, self.center_frame_idx, :, :, :].clone()\n        ]\n        aligned_feat = []\n        for i in range(t):\n            neighbor_feats = [\n                l1_feat[:, i, :, :, :].clone(), l2_feat[:, i, :, :, :].clone(),\n                l3_feat[:, i, :, :, :].clone()\n            ]\n            aligned_feat.append(self.pcd_alignment(neighbor_feats, ref_feats))\n        aligned_feat = torch.stack(aligned_feat, dim=1)  # (n, t, c, h, w)\n\n        if self.with_tsa:\n            feat = self.fusion(aligned_feat)\n        else:\n            aligned_feat = aligned_feat.view(n, -1, h, w)\n            feat = self.fusion(aligned_feat)\n\n        return feat\n"
  },
  {
    "path": "mmagic/models/editors/indexnet/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .indexnet import IndexNet\nfrom .indexnet_decoder import IndexedUpsample, IndexNetDecoder\nfrom .indexnet_encoder import (DepthwiseIndexBlock, HolisticIndexBlock,\n                               IndexNetEncoder)\n\n__all__ = [\n    'IndexNet', 'IndexedUpsample', 'IndexNetEncoder', 'IndexNetDecoder',\n    'DepthwiseIndexBlock', 'HolisticIndexBlock'\n]\n"
  },
  {
    "path": "mmagic/models/editors/indexnet/indexnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models.base_models import BaseMattor\nfrom mmagic.models.utils import get_unknown_tensor\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass IndexNet(BaseMattor):\n    \"\"\"IndexNet matting model.\n\n    This implementation follows:\n    Indices Matter: Learning to Index for Deep Image Matting\n\n    Args:\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        backbone (dict): Config of backbone.\n        train_cfg (dict): Config of training. In 'train_cfg', 'train_backbone'\n            should be specified.\n        test_cfg (dict): Config of testing.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        loss_alpha (dict): Config of the alpha prediction loss. Default: None.\n        loss_comp (dict): Config of the composition loss. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor,\n                 backbone,\n                 loss_alpha=None,\n                 loss_comp=None,\n                 init_cfg=None,\n                 train_cfg=None,\n                 test_cfg=None):\n        super().__init__(\n            backbone=backbone,\n            data_preprocessor=data_preprocessor,\n            init_cfg=init_cfg,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg)\n\n        self.loss_alpha = (\n            MODELS.build(loss_alpha) if loss_alpha is not None else None)\n        self.loss_comp = (\n            MODELS.build(loss_comp) if loss_comp is not None else None)\n\n    def _forward(self, inputs):\n        \"\"\"Forward function.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        pred_alpha = self.backbone(inputs)\n        return pred_alpha\n\n    def _forward_test(self, inputs):\n        \"\"\"Forward function for testing IndexNet model.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor.\n\n        Returns:\n            Tensor: Output tensor of model.\n        \"\"\"\n        return self._forward(inputs)\n\n    def _forward_train(self, inputs, data_samples):\n        \"\"\"Forward function for training IndexNet model.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement]): data samples collated by\n                :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Contains the loss items and batch information.\n        \"\"\"\n        trimap = inputs[:, 3:, :, :]\n        gt_alpha = data_samples.gt_alpha\n        gt_fg = data_samples.gt_fg\n        gt_bg = data_samples.gt_bg\n        gt_merged = data_samples.gt_merged\n\n        pred_alpha = self.backbone(inputs)\n\n        weight = get_unknown_tensor(trimap, unknown_value=128 / 255)\n\n        losses = dict()\n\n        if self.loss_alpha is not None:\n            losses['loss_alpha'] = self.loss_alpha(pred_alpha, gt_alpha,\n                                                   weight)\n        if self.loss_comp is not None:\n            losses['loss_comp'] = self.loss_comp(pred_alpha, gt_fg, gt_bg,\n                                                 gt_merged, weight)\n\n        return losses\n"
  },
  {
    "path": "mmagic/models/editors/indexnet/indexnet_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import kaiming_init, normal_init\n\nfrom mmagic.models.archs import DepthwiseSeparableConvModule\nfrom mmagic.registry import MODELS\n\n\nclass IndexedUpsample(BaseModule):\n    \"\"\"Indexed upsample module.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int, optional): Kernel size of the convolution layer.\n            Defaults to 5.\n        norm_cfg (dict, optional): Config dict for normalization layer.\n            Defaults to dict(type='BN').\n        conv_module (ConvModule | DepthwiseSeparableConvModule, optional):\n            Conv module. Defaults to ConvModule.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size=5,\n                 norm_cfg=dict(type='BN'),\n                 conv_module=ConvModule,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.conv = conv_module(\n            in_channels,\n            out_channels,\n            kernel_size,\n            padding=(kernel_size - 1) // 2,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='ReLU6'))\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    kaiming_init(m, mode='fan_in', nonlinearity='leaky_relu')\n\n    def forward(self, x, shortcut, dec_idx_feat=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape (N, C, H, W).\n            shortcut (Tensor): The shortcut connection with shape\n                (N, C, H', W').\n            dec_idx_feat (Tensor, optional): The decode index feature map with\n                shape (N, C, H', W'). Defaults to None.\n\n        Returns:\n            Tensor: Output tensor with shape (N, C, H', W').\n        \"\"\"\n        if dec_idx_feat is not None:\n            assert shortcut.dim() == 4, (\n                'shortcut must be tensor with 4 dimensions')\n            x = dec_idx_feat * F.interpolate(x, size=shortcut.shape[2:])\n        out = torch.cat((x, shortcut), dim=1)\n        return self.conv(out)\n\n\n@MODELS.register_module()\nclass IndexNetDecoder(BaseModule):\n    \"\"\"Decoder for IndexNet.\n\n    Please refer to https://arxiv.org/abs/1908.00672.\n\n    Args:\n        in_channels (int): Input channels of the decoder.\n        kernel_size (int, optional): Kernel size of the convolution layer.\n            Defaults to 5.\n        norm_cfg (None | dict, optional): Config dict for normalization\n            layer. Defaults to dict(type='BN').\n        separable_conv (bool): Whether to use separable conv. Default: False.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 kernel_size=5,\n                 norm_cfg=dict(type='BN'),\n                 separable_conv=False,\n                 init_cfg: Optional[dict] = None):\n        # TODO: remove in_channels argument\n        super().__init__(init_cfg=init_cfg)\n\n        if separable_conv:\n            conv_module = DepthwiseSeparableConvModule\n        else:\n            conv_module = ConvModule\n\n        blocks_in_channels = [\n            in_channels * 2, 96 * 2, 64 * 2, 32 * 2, 24 * 2, 16 * 2, 32 * 2\n        ]\n        blocks_out_channels = [96, 64, 32, 24, 16, 32, 32]\n\n        self.decoder_layers = nn.ModuleList()\n        for in_channel, out_channel in zip(blocks_in_channels,\n                                           blocks_out_channels):\n            self.decoder_layers.append(\n                IndexedUpsample(in_channel, out_channel, kernel_size, norm_cfg,\n                                conv_module))\n\n        self.pred = nn.Sequential(\n            conv_module(\n                32,\n                1,\n                kernel_size,\n                padding=(kernel_size - 1) // 2,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU6')),\n            nn.Conv2d(\n                1, 1, kernel_size, padding=(kernel_size - 1) // 2, bias=False))\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    std = math.sqrt(2. /\n                                    (m.out_channels * m.kernel_size[0]**2))\n                    normal_init(m, mean=0, std=std)\n\n    def forward(self, inputs):\n        \"\"\"Forward function.\n\n        Args:\n            inputs (dict): Output dict of IndexNetEncoder.\n\n        Returns:\n            Tensor: Predicted alpha matte of the current batch.\n        \"\"\"\n        shortcuts = reversed(inputs['shortcuts'])\n        dec_idx_feat_list = reversed(inputs['dec_idx_feat_list'])\n        out = inputs['out']\n\n        group = (self.decoder_layers, shortcuts, dec_idx_feat_list)\n        for decode_layer, shortcut, dec_idx_feat in zip(*group):\n            out = decode_layer(out, shortcut, dec_idx_feat)\n\n        out = self.pred(out)\n\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/indexnet/indexnet_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init, xavier_init\nfrom mmengine.utils.dl_utils.parrots_wrapper import SyncBatchNorm\n\nfrom mmagic.models.archs import ASPP, DepthwiseSeparableConvModule\nfrom mmagic.registry import MODELS\n\n\ndef build_index_block(in_channels,\n                      out_channels,\n                      kernel_size,\n                      stride=2,\n                      padding=0,\n                      groups=1,\n                      norm_cfg=dict(type='BN'),\n                      use_nonlinear=False,\n                      expansion=1):\n    \"\"\"Build an conv block for IndexBlock.\n\n    Args:\n        in_channels (int): The input channels of the block.\n        out_channels (int): The output channels of the block.\n        kernel_size (int): The kernel size of the block.\n        stride (int, optional): The stride of the block. Defaults to 2.\n        padding (int, optional): The padding of the block. Defaults to 0.\n        groups (int, optional): The groups of the block. Defaults to 1.\n        norm_cfg (dict, optional): The norm config of the block.\n            Defaults to dict(type='BN').\n        use_nonlinear (bool, optional): Whether use nonlinearity in the block.\n            If true, a ConvModule with kernel size 1 will be appended and an\n            ``ReLU6`` nonlinearity will be added to the origin ConvModule.\n            Defaults to False.\n        expansion (int, optional): Expansion ratio of the middle channels.\n            Effective when ``use_nonlinear`` is true. Defaults to 1.\n\n    Returns:\n        nn.Module: The built conv block.\n    \"\"\"\n    if use_nonlinear:\n        return nn.Sequential(\n            ConvModule(\n                in_channels,\n                in_channels * expansion,\n                kernel_size,\n                stride=stride,\n                padding=padding,\n                groups=groups,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU6')),\n            ConvModule(\n                in_channels * expansion,\n                out_channels,\n                1,\n                stride=1,\n                padding=0,\n                groups=groups,\n                bias=False,\n                norm_cfg=None,\n                act_cfg=None))\n\n    return ConvModule(\n        in_channels,\n        out_channels,\n        kernel_size,\n        stride=stride,\n        padding=padding,\n        groups=groups,\n        bias=False,\n        norm_cfg=None,\n        act_cfg=None)\n\n\nclass HolisticIndexBlock(BaseModule):\n    \"\"\"Holistic Index Block.\n\n    From https://arxiv.org/abs/1908.00672.\n\n    Args:\n        in_channels (int): Input channels of the holistic index block.\n        norm_cfg (dict): Config dict for normalization layer.\n            Default: dict(type='BN').\n        use_context (bool, optional): Whether use larger kernel size in index\n            block. Refer to the paper for more information. Defaults to False.\n        use_nonlinear (bool): Whether add a non-linear conv layer in the index\n            block. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 norm_cfg=dict(type='BN'),\n                 use_context=False,\n                 use_nonlinear=False):\n        super().__init__()\n\n        if use_context:\n            kernel_size, padding = 4, 1\n        else:\n            kernel_size, padding = 2, 0\n\n        self.index_block = build_index_block(\n            in_channels,\n            4,\n            kernel_size,\n            stride=2,\n            padding=padding,\n            groups=1,\n            norm_cfg=norm_cfg,\n            use_nonlinear=use_nonlinear,\n            expansion=2)\n\n        self.sigmoid = nn.Sigmoid()\n        self.softmax = nn.Softmax(dim=1)\n        self.pixel_shuffle = nn.PixelShuffle(2)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape (N, C, H, W).\n\n        Returns:\n            tuple(Tensor): Encoder index feature and decoder index feature.\n        \"\"\"\n        x = self.index_block(x)\n\n        # normalization\n        y = self.sigmoid(x)\n        z = self.softmax(y)\n        # pixel shuffling\n        enc_idx_feat = self.pixel_shuffle(z)\n        dec_idx_feat = self.pixel_shuffle(y)\n\n        return enc_idx_feat, dec_idx_feat\n\n\nclass DepthwiseIndexBlock(BaseModule):\n    \"\"\"Depthwise index block.\n\n    From https://arxiv.org/abs/1908.00672.\n\n    Args:\n        in_channels (int): Input channels of the holistic index block.\n        norm_cfg (dict): Config dict for normalization layer.\n            Default: dict(type='BN').\n        use_context (bool, optional): Whether use larger kernel size in index\n            block. Refer to the paper for more information. Defaults to False.\n        use_nonlinear (bool): Whether add a non-linear conv layer in the index\n            blocks. Default: False.\n        mode (str): Mode of index block. Should be 'o2o' or 'm2o'. In 'o2o'\n            mode, the group of the conv layers is 1; In 'm2o' mode, the group\n            of the conv layer is `in_channels`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 norm_cfg=dict(type='BN'),\n                 use_context=False,\n                 use_nonlinear=False,\n                 mode='o2o'):\n        super().__init__()\n\n        groups = in_channels if mode == 'o2o' else 1\n\n        if use_context:\n            kernel_size, padding = 4, 1\n        else:\n            kernel_size, padding = 2, 0\n\n        self.index_blocks = nn.ModuleList()\n        for _ in range(4):\n            self.index_blocks.append(\n                build_index_block(\n                    in_channels,\n                    in_channels,\n                    kernel_size,\n                    stride=2,\n                    padding=padding,\n                    groups=groups,\n                    norm_cfg=norm_cfg,\n                    use_nonlinear=use_nonlinear))\n\n        self.sigmoid = nn.Sigmoid()\n        self.softmax = nn.Softmax(dim=2)\n        self.pixel_shuffle = nn.PixelShuffle(2)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape (N, C, H, W).\n\n        Returns:\n            tuple(Tensor): Encoder index feature and decoder index feature.\n        \"\"\"\n        n, c, h, w = x.shape\n\n        feature_list = [\n            _index_block(x).unsqueeze(2) for _index_block in self.index_blocks\n        ]\n        x = torch.cat(feature_list, dim=2)\n\n        # normalization\n        y = self.sigmoid(x)\n        z = self.softmax(y)\n        # pixel shuffling\n        y = y.view(n, c * 4, h // 2, w // 2)\n        z = z.view(n, c * 4, h // 2, w // 2)\n        enc_idx_feat = self.pixel_shuffle(z)\n        dec_idx_feat = self.pixel_shuffle(y)\n\n        return enc_idx_feat, dec_idx_feat\n\n\nclass InvertedResidual(BaseModule):\n    \"\"\"Inverted residual layer for indexnet encoder.\n\n    It basically is a depthwise separable conv module. If `expand_ratio` is not\n    one, then a conv module of kernel_size 1 will be inserted to change the\n    input channels to `in_channels * expand_ratio`.\n\n    Args:\n        in_channels (int): Input channels of the layer.\n        out_channels (int): Output channels of the layer.\n        stride (int): Stride of the depthwise separable conv module.\n        dilation (int): Dilation of the depthwise separable conv module.\n        expand_ratio (float): Expand ratio of the input channels of the\n            depthwise separable conv module.\n        norm_cfg (dict | None): Config dict for normalization layer.\n        use_res_connect (bool, optional): Whether use shortcut connection.\n            Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 stride,\n                 dilation,\n                 expand_ratio,\n                 norm_cfg,\n                 use_res_connect=False):\n        super().__init__()\n        assert stride in [1, 2], 'stride must 1 or 2'\n\n        self.use_res_connect = use_res_connect\n        self.kernel_size = 3\n        self.dilation = dilation\n\n        if expand_ratio == 1:\n            self.conv = DepthwiseSeparableConvModule(\n                in_channels,\n                out_channels,\n                3,\n                stride=stride,\n                dilation=dilation,\n                norm_cfg=norm_cfg,\n                dw_act_cfg=dict(type='ReLU6'),\n                pw_act_cfg=None)\n        else:\n            hidden_dim = round(in_channels * expand_ratio)\n            self.conv = nn.Sequential(\n                ConvModule(\n                    in_channels,\n                    hidden_dim,\n                    1,\n                    norm_cfg=norm_cfg,\n                    act_cfg=dict(type='ReLU6')),\n                DepthwiseSeparableConvModule(\n                    hidden_dim,\n                    out_channels,\n                    3,\n                    stride=stride,\n                    dilation=dilation,\n                    norm_cfg=norm_cfg,\n                    dw_act_cfg=dict(type='ReLU6'),\n                    pw_act_cfg=None))\n\n    def pad(self, inputs, kernel_size, dilation):\n        \"\"\"Pad input tensor.\n\n        Args:\n            inputs (Tensor): Input tensor.\n            kernel_size (int): Kernel size of conv layer.\n            dilation (int): Dilation of conv layer.\n\n        Returns:\n            Tensor: Padded tensor\n        \"\"\"\n        effective_ksize = kernel_size + (kernel_size - 1) * (dilation - 1)\n        left = (effective_ksize - 1) // 2\n        right = effective_ksize // 2\n        return F.pad(inputs, (left, right, left, right))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        out = self.conv(self.pad(x, self.kernel_size, self.dilation))\n\n        if self.use_res_connect:\n            out = out + x\n\n        return out\n\n\n@MODELS.register_module()\nclass IndexNetEncoder(BaseModule):\n    \"\"\"Encoder for IndexNet.\n\n    Please refer to https://arxiv.org/abs/1908.00672.\n\n    Args:\n        in_channels (int, optional): Input channels of the encoder.\n        out_stride (int, optional): Output stride of the encoder. For\n            example, if `out_stride` is 32, the input feature map or image\n            will be downsample to the 1/32 of original size.\n            Defaults to 32.\n        width_mult (int, optional): Width multiplication factor of channel\n            dimension in MobileNetV2. Defaults to 1.\n        index_mode (str, optional): Index mode of the index network. It\n            must be one of {'holistic', 'o2o', 'm2o'}. If it is set to\n            'holistic', then Holistic index network will be used as the\n            index network. If it is set to 'o2o' (or 'm2o'), when O2O\n            (or M2O) Depthwise index network will be used as the index\n            network. Defaults to 'm2o'.\n        aspp (bool, optional): Whether use ASPP module to augment output\n            feature. Defaults to True.\n        norm_cfg (None | dict, optional): Config dict for normalization\n            layer. Defaults to dict(type='BN').\n        freeze_bn (bool, optional): Whether freeze batch norm layer.\n            Defaults to False.\n        use_nonlinear (bool, optional): Whether use nonlinearity in index\n            network. Refer to the paper for more information.\n            Defaults to True.\n        use_context (bool, optional): Whether use larger kernel size in\n            index network. Refer to the paper for more information.\n            Defaults to True.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n\n    Raises:\n        ValueError: out_stride must 16 or 32.\n        NameError: Supported index_mode are {'holistic', 'o2o', 'm2o'}.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_stride=32,\n                 width_mult=1,\n                 index_mode='m2o',\n                 aspp=True,\n                 norm_cfg=dict(type='BN'),\n                 freeze_bn=False,\n                 use_nonlinear=True,\n                 use_context=True,\n                 init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n        if out_stride not in [16, 32]:\n            raise ValueError(f'out_stride must 16 or 32, got {out_stride}')\n\n        self.out_stride = out_stride\n        self.width_mult = width_mult\n\n        # we name the index network in the paper index_block\n        if index_mode == 'holistic':\n            index_block = HolisticIndexBlock\n        elif index_mode in ('o2o', 'm2o'):\n            index_block = partial(DepthwiseIndexBlock, mode=index_mode)\n        else:\n            raise NameError('Unknown index block mode {}'.format(index_mode))\n\n        # default setting\n        initial_channels = 32\n        inverted_residual_setting = [\n            # expand_ratio, input_chn, output_chn, num_blocks, stride, dilation\n            [1, initial_channels, 16, 1, 1, 1],\n            [6, 16, 24, 2, 2, 1],\n            [6, 24, 32, 3, 2, 1],\n            [6, 32, 64, 4, 2, 1],\n            [6, 64, 96, 3, 1, 1],\n            [6, 96, 160, 3, 2, 1],\n            [6, 160, 320, 1, 1, 1],\n        ]\n\n        # update layer setting according to width_mult\n        initial_channels = int(initial_channels * width_mult)\n        for layer_setting in inverted_residual_setting:\n            # update in_channels and out_channels\n            layer_setting[1] = int(layer_setting[1] * self.width_mult)\n            layer_setting[2] = int(layer_setting[2] * self.width_mult)\n\n        if out_stride == 32:\n            # It should be noted that layers 0 is not an InvertedResidual layer\n            # but a ConvModule. Thus, the index of InvertedResidual layer in\n            # downsampled_layers starts at 1.\n            self.downsampled_layers = [0, 2, 3, 4, 6]\n        else:  # out_stride is 16\n            self.downsampled_layers = [0, 2, 3, 4]\n            # if out_stride is 16, then increase the dilation of the last two\n            # InvertedResidual layer to increase the receptive field\n            inverted_residual_setting[5][5] = 2\n            inverted_residual_setting[6][5] = 2\n\n        # build the first layer\n        self.layers = nn.ModuleList([\n            ConvModule(\n                in_channels,\n                initial_channels,\n                3,\n                padding=1,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU6'))\n        ])\n        # build bottleneck layers\n        for layer_setting in inverted_residual_setting:\n            self.layers.append(self._make_layer(layer_setting, norm_cfg))\n\n        # freeze encoder batch norm layers\n        self.freeze_bn = freeze_bn\n\n        # build index blocks\n        self.index_layers = nn.ModuleList()\n        for layer in self.downsampled_layers:\n            # inverted_residual_setting begins at layer1, the in_channels\n            # of layer1 is the out_channels of layer0\n            self.index_layers.append(\n                index_block(inverted_residual_setting[layer][1], norm_cfg,\n                            use_context, use_nonlinear))\n        self.avg_pool = nn.AvgPool2d(2, stride=2)\n\n        if aspp:\n            dilation = (2, 4, 8) if out_stride == 32 else (6, 12, 18)\n            self.dconv = ASPP(\n                320 * self.width_mult,\n                160,\n                mid_channels=int(256 * self.width_mult),\n                dilations=dilation,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU6'),\n                separable_conv=True)\n        else:\n            self.dconv = ConvModule(\n                320 * self.width_mult,\n                160,\n                1,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU6'))\n\n        self.out_channels = 160\n\n    def _make_layer(self, layer_setting, norm_cfg):\n        # expand_ratio, in_channels, out_channels, num_blocks, stride, dilation\n        (expand_ratio, in_channels, out_channels, num_blocks, stride,\n         dilation) = layer_setting\n\n        # downsample is now implemented by index block. In those layers that\n        # have downsampling originally, use stride of 1 in the first block and\n        # decrease the dilation accordingly.\n        dilation0 = max(dilation // 2, 1) if stride == 2 else dilation\n        layers = [\n            InvertedResidual(in_channels, out_channels, 1, dilation0,\n                             expand_ratio, norm_cfg)\n        ]\n\n        in_channels = out_channels\n        for _ in range(1, num_blocks):\n            layers.append(\n                InvertedResidual(\n                    in_channels,\n                    out_channels,\n                    1,\n                    dilation,\n                    expand_ratio,\n                    norm_cfg,\n                    use_res_connect=True))\n        return nn.Sequential(*layers)\n\n    def train(self, mode=True):\n        \"\"\"Set BatchNorm modules in the model to evaluation mode.\"\"\"\n        super().train(mode)\n        if mode and self.freeze_bn:\n            for m in self.modules():\n                if isinstance(m, (nn.BatchNorm2d, SyncBatchNorm)):\n                    m.eval()\n\n    def init_weights(self):\n        \"\"\"Init weights for the model.\n\n        Initialization is based on self._init_cfg\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n        \"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            # Default initialization\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    xavier_init(m)\n                elif isinstance(m, nn.BatchNorm2d):\n                    constant_init(m, 1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape (N, C, H, W).\n\n        Returns:\n            dict: Output tensor, shortcut feature and decoder index feature.\n        \"\"\"\n        dec_idx_feat_list = list()\n        shortcuts = list()\n        for i, layer in enumerate(self.layers):\n            x = layer(x)\n            if i in self.downsampled_layers:\n                enc_idx_feat, dec_idx_feat = self.index_layers[\n                    self.downsampled_layers.index(i)](\n                        x)\n                x = enc_idx_feat * x\n                shortcuts.append(x)\n                dec_idx_feat_list.append(dec_idx_feat)\n                x = 4 * self.avg_pool(x)\n            elif i != 7:\n                shortcuts.append(x)\n                dec_idx_feat_list.append(None)\n\n        x = self.dconv(x)\n\n        return {\n            'out': x,\n            'shortcuts': shortcuts,\n            'dec_idx_feat_list': dec_idx_feat_list\n        }\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .colorization_net import ColorizationNet\nfrom .fusion_net import FusionNet\nfrom .inst_colorization import InstColorization\n\n__all__ = [\n    'InstColorization',\n    'ColorizationNet',\n    'FusionNet',\n]\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/color_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\n\ndef xyz2rgb(xyz):\n    \"\"\"Conversion images from xyz to rgb.\n\n    Args:\n        xyz (tensor): The images to be conversion\n\n    Returns:\n        out (tensor): The converted image\n    \"\"\"\n    r = 3.24048134 * xyz[:, 0, :, :] - 1.53715152 * xyz[:, 1, :, :] \\\n        - 0.49853633 * xyz[:, 2, :, :]\n    g = -0.96925495 * xyz[:, 0, :, :] + 1.87599 * xyz[:, 1, :, :] \\\n        + .04155593 * xyz[:, 2, :, :]\n    b = .05564664 * xyz[:, 0, :, :] - .20404134 * xyz[:, 1, :, :] \\\n        + 1.05731107 * xyz[:, 2, :, :]\n\n    # sometimes reaches a small negative number, which causes NaNs\n    rgb = torch.cat((r[:, None, :, :], g[:, None, :, :], b[:, None, :, :]),\n                    dim=1)\n    rgb = torch.max(rgb, torch.zeros_like(rgb))\n\n    mask = (rgb > .0031308).type(torch.FloatTensor)\n    if rgb.is_cuda:\n        mask = mask.cuda()\n\n    rgb = (1.055 * (rgb**(1. / 2.4)) - 0.055) * mask + 12.92 * rgb * (1 - mask)\n    return rgb\n\n\ndef lab2xyz(lab):\n    \"\"\"Conversion images from lab to xyz.\n\n    Args:\n        lab (tensor): The images to be conversion\n\n    Returns:\n        out (tensor): The converted image\n    \"\"\"\n    y_int = (lab[:, 0, :, :] + 16.) / 116.\n    x_int = (lab[:, 1, :, :] / 500.) + y_int\n    z_int = y_int - (lab[:, 2, :, :] / 200.)\n    if (z_int.is_cuda):\n        z_int = torch.max(torch.Tensor((0, )).cuda(), z_int)\n    else:\n        z_int = torch.max(torch.Tensor((0, )), z_int)\n\n    out = torch.cat(\n        (x_int[:, None, :, :], y_int[:, None, :, :], z_int[:, None, :, :]),\n        dim=1)\n    mask = (out > .2068966).type(torch.FloatTensor)\n    if (out.is_cuda):\n        mask = mask.cuda()\n\n    out = (out**3.) * mask + (out - 16. / 116.) / 7.787 * (1 - mask)\n\n    sc = torch.Tensor((0.95047, 1., 1.08883))[None, :, None, None]\n    sc = sc.to(out.device)\n\n    out = out * sc\n    return out\n\n\ndef lab2rgb(lab_rs, color_data_opt):\n    \"\"\"Conversion images from lab to rgb.\n\n    Args:\n        lab_rs (tensor): The images to be conversion\n        color_data_opt (dict): Config for image colorspace transformation.\n            Include: l_norm, ab_norm, l_cent\n\n    Returns:\n        out (tensor): The converted image\n    \"\"\"\n    L = lab_rs[:,\n               [0], :, :] * color_data_opt['l_norm'] + color_data_opt['l_cent']\n    AB = lab_rs[:, 1:, :, :] * color_data_opt['ab_norm']\n    lab = torch.cat((L, AB), dim=1)\n    out = xyz2rgb(lab2xyz(lab))\n    return out\n\n\ndef encode_ab_ind(data_ab, color_data_opt):\n    \"\"\"Encode ab value into an index.\n\n    Args:\n        data_ab: Nx2xHxW from [-1,1]\n        color_data_opt: Config for image colorspace transformation.\n            ab_max, ab_quant, ab_norm, ab_quant\n    Returns:\n            Nx1xHxW from [0,Q)\n    \"\"\"\n    A = 2 * color_data_opt['ab_max'] / color_data_opt['ab_quant'] + 1\n    data_ab_rs = torch.round(\n        (data_ab * color_data_opt['ab_norm'] + color_data_opt['ab_max']) /\n        color_data_opt['ab_quant'])  # normalized bin number\n    data_q = data_ab_rs[:, [0], :, :] * A + data_ab_rs[:, [1], :, :]\n    return data_q\n\n\ndef rgb2xyz(rgb):\n    \"\"\"Conversion images from rgb to xyz\n    rgb from [0,1]\n    xyz_from_rgb = np.array([[0.412453, 0.357580, 0.180423],\n                             [0.212671, 0.715160, 0.072169],\n                             [0.019334, 0.119193, 0.950227]])\n    Args:\n        rgb (Tensor): image in rgb colorspace\n\n    Returns:\n         xyz (Tensor): image in xyz colorspace\n\n    \"\"\"\n    mask = (rgb > .04045).type(torch.FloatTensor)\n    if (rgb.is_cuda):\n        mask = mask.cuda()\n\n    rgb = (((rgb + .055) / 1.055)**2.4) * mask + rgb / 12.92 * (1 - mask)\n\n    x = .412453 * rgb[:, 0, :, :] + .357580 * rgb[:, 1, :, :] \\\n        + .180423 * rgb[:, 2, :, :]\n    y = .212671 * rgb[:, 0, :, :] + .715160 * rgb[:, 1, :, :] \\\n        + .072169 * rgb[:, 2, :, :]\n    z = .019334 * rgb[:, 0, :, :] + .119193 * rgb[:, 1, :, :] \\\n        + .950227 * rgb[:, 2, :, :]\n    out = torch.cat((x[:, None, :, :], y[:, None, :, :], z[:, None, :, :]),\n                    dim=1)\n\n    return out\n\n\ndef xyz2lab(xyz):\n    \"\"\"Conversion images from xyz to lab\n    xyz from [0,1]\n    factors: 0.95047, 1., 1.08883\n\n    Args:\n        xyz (Tensor): image in xyz colorspace\n\n    Returns:\n         out (Tensor): Image in lab colorspace\n    \"\"\"\n    sc = torch.Tensor((0.95047, 1., 1.08883))[None, :, None, None]\n    if (xyz.is_cuda):\n        sc = sc.cuda()\n\n    xyz_scale = xyz / sc\n\n    mask = (xyz_scale > .008856).type(torch.FloatTensor)\n    if (xyz_scale.is_cuda):\n        mask = mask.cuda()\n\n    xyz_int = xyz_scale**(1 / 3.) * mask + (7.787 * xyz_scale +\n                                            16. / 116.) * (1 - mask)\n\n    L = 116. * xyz_int[:, 1, :, :] - 16.\n    a = 500. * (xyz_int[:, 0, :, :] - xyz_int[:, 1, :, :])\n    b = 200. * (xyz_int[:, 1, :, :] - xyz_int[:, 2, :, :])\n    out = torch.cat((L[:, None, :, :], a[:, None, :, :], b[:, None, :, :]),\n                    dim=1)\n\n    return out\n\n\ndef rgb2lab(rgb, color_opt):\n    \"\"\"Conversion images from rgb to lab.\n\n    Args:\n        data_raw (tensor): The images to be conversion\n        color_opt (dict): Config for image colorspace transformation.\n            Include: ab_thresh, ab_norm, sample_PS, mask_cent\n\n    Returns:\n        out (tensor): The converted image\n    \"\"\"\n    lab = xyz2lab(rgb2xyz(rgb))\n    l_rs = (lab[:, [0], :, :] - color_opt['l_cent']) / color_opt['l_norm']\n    ab_rs = lab[:, 1:, :, :] / color_opt['ab_norm']\n    out = torch.cat((l_rs, ab_rs), dim=1)\n    return out\n\n\ndef get_colorization_data(data_raw, color_opt, num_points=None):\n    \"\"\"Conversion images from rgb to lab.\n\n    Args:\n        data_raw (tensor): The images to be conversion\n        color_opt (dict): Config for image colorspace transformation.\n            Include: ab_thresh, ab_norm, sample_PS, mask_cent\n\n    Returns:\n        results (dict): Output in add_color_patches_rand_gt\n    \"\"\"\n    if len(data_raw.shape) == 3:\n        data_raw = data_raw.unsqueeze(0)\n    data = {}\n    data_lab = rgb2lab(data_raw, color_opt)\n    data['A'] = data_lab[:, [\n        0,\n    ], :, :]\n    data['B'] = data_lab[:, 1:, :, :]\n\n    # mask out grayscale images\n    if color_opt['ab_thresh'] > 0:\n        thresh = 1. * color_opt['ab_thresh'] / color_opt['ab_norm']\n        mask = torch.sum(\n            torch.abs(\n                torch.max(torch.max(data['B'], dim=3)[0], dim=2)[0] -\n                torch.min(torch.min(data['B'], dim=3)[0], dim=2)[0]),\n            dim=1) >= thresh\n        data['A'] = data['A'][mask, :, :, :]\n        data['B'] = data['B'][mask, :, :, :]\n        if torch.sum(mask) == 0:\n            return None\n\n    return add_color_patches_rand_gt(\n        data, color_opt, p=color_opt['p'], num_points=num_points)\n\n\ndef add_color_patches_rand_gt(data,\n                              color_opt,\n                              p=.125,\n                              num_points=None,\n                              use_avg=True,\n                              samp='normal'):\n    \"\"\"Add random color points sampled from ground truth based on: Number of\n    points.\n\n    - if num_points is 0, then sample from geometric distribution,\n        drawn from probability p\n    - if num_points > 0, then sample that number of points\n    Location of points\n    - if samp is 'normal', draw from N(0.5, 0.25) of image\n    - otherwise, draw from U[0, 1] of image\n\n    Args:\n        data (tensor): The images to be conversion\n        color_opt (dict): Config for image colorspace transformation\n            Include: ab_thresh, ab_norm, sample_PS, mask_cent\n        p (float): Sampling geometric distribution, 1.0 means no hints\n        num_points (int): Certain number of points\n        use_avg (bool): Whether to use the mean when add color point\n            Default: True.\n        samp (str): Geometric distribution or uniform distribution when\n            sample location. Default: normal.\n\n    Returns:\n        results (dict): Result dict from :obj:``mmcv.BaseDataset``.\n    \"\"\"\n    N, C, H, W = data['B'].shape\n\n    data['hint_B'] = torch.zeros_like(data['B'])\n    data['mask_B'] = torch.zeros_like(data['A'])\n\n    for nn in range(N):\n        pp = 0\n        cont_cond = True\n        while cont_cond:\n            # draw from geometric\n            if num_points is None:\n                cont_cond = np.random.rand() < (1 - p)\n            else:\n                # add certain number of points\n                cont_cond = pp < num_points\n            # skip out of loop if condition not met\n            if not cont_cond:\n                continue\n\n            # patch size\n            P = np.random.choice(color_opt['sample_PS'])\n            # sample location: geometric distribution\n            if samp == 'normal':\n                h = int(\n                    np.clip(\n                        np.random.normal((H - P + 1) / 2., (H - P + 1) / 4.),\n                        0, H - P))\n                w = int(\n                    np.clip(\n                        np.random.normal((W - P + 1) / 2., (W - P + 1) / 4.),\n                        0, W - P))\n            else:  # uniform distribution\n                h = np.random.randint(H - P + 1)\n                w = np.random.randint(W - P + 1)\n\n            # add color point\n            if use_avg:\n                data['hint_B'][nn, :, h:h + P, w:w + P] = torch.mean(\n                    torch.mean(\n                        data['B'][nn, :, h:h + P, w:w + P],\n                        dim=2,\n                        keepdim=True),\n                    dim=1,\n                    keepdim=True).view(1, C, 1, 1)\n            else:\n                data['hint_B'][nn, :, h:h + P, w:w + P] = \\\n                    data['B'][nn, :, h:h + P, w:w + P]\n\n            data['mask_B'][nn, :, h:h + P, w:w + P] = 1\n\n            # increment counter\n            pp += 1\n\n    data['mask_B'] -= color_opt['mask_cent']\n\n    return data\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/colorization_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .weight_layer import get_norm_layer\n\n\n@MODELS.register_module()\nclass ColorizationNet(BaseModule):\n    \"\"\"Real-Time User-Guided Image Colorization with Learned Deep Priors. The\n    backbone used for.\n\n    https://arxiv.org/abs/1705.02999\n\n    Codes adapted from 'https://github.com/ericsujw/InstColorization.git'\n    'InstColorization/blob/master/models/networks.py#L108'\n\n    Args:\n        input_nc (int): input image channels\n        output_nc (int): output image channels\n        norm_type (str): instance normalization or batch normalization\n        use_tanh (bool): Whether to use nn.Tanh() Default: True.\n        classification (bool): backprop trunk using classification,\n            otherwise use regression. Default: True\n    \"\"\"\n\n    def __init__(self,\n                 input_nc,\n                 output_nc,\n                 norm_type,\n                 use_tanh=True,\n                 classification=True):\n        super().__init__()\n        self.input_nc = input_nc\n        self.output_nc = output_nc\n        self.classification = classification\n\n        norm_layer = get_norm_layer(norm_type)\n\n        use_bias = True\n\n        # Conv1\n        self.model1 = nn.Sequential(\n            nn.Conv2d(\n                input_nc,\n                64,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                64, 64, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(64),\n        )\n\n        # Conv2\n        self.model2 = nn.Sequential(\n            nn.Conv2d(\n                64, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(128),\n        )\n\n        # Conv3\n        self.model3 = nn.Sequential(\n            nn.Conv2d(\n                128, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(256),\n        )\n\n        # Conv4\n        self.model4 = nn.Sequential(\n            nn.Conv2d(\n                256, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        # Conv5\n        self.model5 = nn.Sequential(\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        # Conv6\n        self.model6 = nn.Sequential(\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        # Conv7\n        self.model7 = nn.Sequential(\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        # Conv8\n        self.model8up = nn.ConvTranspose2d(\n            512, 256, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model3short8 = nn.Conv2d(\n            256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias)\n\n        self.model8 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(256),\n        )\n\n        # Conv9\n        self.model9up = nn.ConvTranspose2d(\n            256, 128, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model2short9 = nn.Conv2d(\n            128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias)\n        self.model9 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(128),\n        )\n\n        # Conv10\n        self.model10up = nn.ConvTranspose2d(\n            128, 128, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model1short10 = nn.Conv2d(\n            64, 128, kernel_size=3, stride=1, padding=1, bias=use_bias)\n\n        self.model10 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                128,\n                128,\n                kernel_size=3,\n                dilation=1,\n                stride=1,\n                padding=1,\n                bias=use_bias),\n            nn.LeakyReLU(negative_slope=.2),\n        )\n\n        # classification output\n        self.model_class = nn.Conv2d(\n            256,\n            529,\n            kernel_size=1,\n            padding=0,\n            dilation=1,\n            stride=1,\n            bias=use_bias)\n\n        # regression output\n        model_out = [\n            nn.Conv2d(\n                128,\n                2,\n                kernel_size=1,\n                padding=0,\n                dilation=1,\n                stride=1,\n                bias=use_bias),\n        ]\n        if (use_tanh):\n            model_out += [nn.Tanh()]\n        self.model_out = nn.Sequential(*model_out)\n\n        self.upsample4 = nn.Upsample(scale_factor=4, mode='nearest')\n        self.softmax = nn.Softmax(dim=1)\n\n    def forward(self, input_A, input_B, mask_B):\n        \"\"\"Forward function.\n\n        Args:\n            input_A (tensor): Channel of the image in lab color space\n            input_B (tensor): Color patch\n            mask_B (tensor): Color patch mask\n\n        Returns:\n            out_class (tensor): Classification output\n            out_reg (tensor): Regression output\n            feature_map (dict): The full-image feature\n        \"\"\"\n        conv1_2 = self.model1(torch.cat((input_A, input_B, mask_B), dim=1))\n        conv2_2 = self.model2(conv1_2[:, :, ::2, ::2])\n        conv3_3 = self.model3(conv2_2[:, :, ::2, ::2])\n        conv4_3 = self.model4(conv3_3[:, :, ::2, ::2])\n        conv5_3 = self.model5(conv4_3)\n        conv6_3 = self.model6(conv5_3)\n        conv7_3 = self.model7(conv6_3)\n        conv8_up = self.model8up(conv7_3) + self.model3short8(conv3_3)\n        conv8_3 = self.model8(conv8_up)\n\n        if (self.classification):\n            out_class = self.model_class(conv8_3)\n            conv9_up = self.model9up(conv8_3.detach()) + self.model2short9(\n                conv2_2.detach())\n            conv9_3 = self.model9(conv9_up)\n            conv10_up = self.model10up(conv9_3) + self.model1short10(\n                conv1_2.detach())\n        else:\n            out_class = self.model_class(conv8_3.detach())\n            conv9_up = self.model9up(conv8_3) + self.model2short9(conv2_2)\n            conv9_3 = self.model9(conv9_up)\n            conv10_up = self.model10up(conv9_3) + self.model1short10(conv1_2)\n\n        conv10_2 = self.model10(conv10_up)\n        out_reg = self.model_out(conv10_2)\n\n        feature_map = {}\n        feature_map['conv1_2'] = conv1_2\n        feature_map['conv2_2'] = conv2_2\n        feature_map['conv3_3'] = conv3_3\n        feature_map['conv4_3'] = conv4_3\n        feature_map['conv5_3'] = conv5_3\n        feature_map['conv6_3'] = conv6_3\n        feature_map['conv7_3'] = conv7_3\n        feature_map['conv8_up'] = conv8_up\n        feature_map['conv8_3'] = conv8_3\n        feature_map['conv9_up'] = conv9_up\n        feature_map['conv9_3'] = conv9_3\n        feature_map['conv10_up'] = conv10_up\n        feature_map['conv10_2'] = conv10_2\n        feature_map['out_reg'] = out_reg\n\n        return (out_class, out_reg, feature_map)\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/fusion_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .weight_layer import WeightLayer, get_norm_layer\n\n\n@MODELS.register_module()\nclass FusionNet(BaseModule):\n    \"\"\"Instance-aware Image Colorization.\n\n    https://arxiv.org/abs/2005.10825\n\n    Codes adapted from 'https://github.com/ericsujw/InstColorization.git'\n    'InstColorization/blob/master/models/networks.py#L314'\n    FusionNet: the full image model with weight layer for fusion.\n\n    Args:\n        input_nc (int): input image channels\n        output_nc (int): output image channels\n        norm_type (str): instance normalization or batch normalization\n        use_tanh (bool): Whether to use nn.Tanh() Default: True.\n        classification (bool): backprop trunk using classification,\n            otherwise use regression. Default: True\n    \"\"\"\n\n    def __init__(self,\n                 input_nc,\n                 output_nc,\n                 norm_type,\n                 use_tanh=True,\n                 classification=True):\n        super().__init__()\n        self.input_nc = input_nc\n        self.output_nc = output_nc\n        self.classification = classification\n\n        norm_layer = get_norm_layer(norm_type)\n        use_bias = True\n\n        # Conv1\n        self.model1 = nn.Sequential(\n            nn.Conv2d(\n                input_nc,\n                64,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                64, 64, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(64),\n        )\n\n        self.weight_layer = WeightLayer(64)\n\n        # Conv2\n        self.model2 = nn.Sequential(\n            nn.Conv2d(\n                64, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(128),\n        )\n\n        self.weight_layer2 = WeightLayer(128)\n\n        # Conv3\n        self.model3 = nn.Sequential(\n            nn.Conv2d(\n                128, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(256),\n        )\n\n        self.weight_layer3 = WeightLayer(256)\n\n        # Conv4\n        self.model4 = nn.Sequential(\n            nn.Conv2d(\n                256, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        self.weight_layer4 = WeightLayer(512)\n\n        # Conv5\n        self.model5 = nn.Sequential(\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        self.weight_layer5 = WeightLayer(512)\n\n        # Conv6\n        self.model6 = nn.Sequential(\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512,\n                512,\n                kernel_size=3,\n                dilation=2,\n                stride=1,\n                padding=2,\n                bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        self.weight_layer6 = WeightLayer(512)\n\n        # Conv7\n        self.model7 = nn.Sequential(\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                512, 512, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(512),\n        )\n\n        self.weight_layer7 = WeightLayer(512)\n\n        # Conv8\n        self.model8up = nn.ConvTranspose2d(\n            512, 256, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model3short8 = nn.Conv2d(\n            256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias)\n\n        self.weight_layer8_1 = WeightLayer(256)\n\n        self.model8 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            nn.Conv2d(\n                256, 256, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(256),\n        )\n\n        self.weight_layer8_2 = WeightLayer(256)\n\n        # Conv9\n        self.model9up = nn.ConvTranspose2d(\n            256, 128, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model2short9 = nn.Conv2d(\n            128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias)\n\n        self.weight_layer9_1 = WeightLayer(128)\n\n        self.model9 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                128, 128, kernel_size=3, stride=1, padding=1, bias=use_bias),\n            nn.ReLU(True),\n            norm_layer(128),\n        )\n\n        self.weight_layer9_2 = WeightLayer(128)\n\n        # Conv10\n        self.model10up = nn.ConvTranspose2d(\n            128, 128, kernel_size=4, stride=2, padding=1, bias=use_bias)\n\n        self.model1short10 = nn.Conv2d(\n            64, 128, kernel_size=3, stride=1, padding=1, bias=use_bias)\n\n        self.weight_layer10_1 = WeightLayer(128)\n\n        self.model10 = nn.Sequential(\n            nn.ReLU(True),\n            nn.Conv2d(\n                128,\n                128,\n                kernel_size=3,\n                dilation=1,\n                stride=1,\n                padding=1,\n                bias=use_bias),\n            nn.LeakyReLU(negative_slope=.2),\n        )\n\n        self.weight_layer10_2 = WeightLayer(128)\n\n        # classification output\n        self.model_class = nn.Conv2d(\n            256,\n            529,\n            kernel_size=1,\n            padding=0,\n            dilation=1,\n            stride=1,\n            bias=use_bias)\n\n        # regression output\n        model_out = [\n            nn.Conv2d(\n                128,\n                2,\n                kernel_size=1,\n                padding=0,\n                dilation=1,\n                stride=1,\n                bias=use_bias),\n        ]\n        if (use_tanh):\n            model_out += [nn.Tanh()]\n        self.model_out = nn.Sequential(*model_out)\n\n        self.weight_layerout = WeightLayer(2)\n\n        self.upsample4 = nn.Upsample(scale_factor=4, mode='nearest')\n        self.softmax = nn.Softmax(dim=1)\n\n    def forward(self, input_A, input_B, mask_B, instance_feature,\n                box_info_list):\n        \"\"\"Forward function.\n\n        Args:\n            input_A (tensor): Channel of the image in lab color space\n            input_B (tensor): Color patch\n            mask_B (tensor): Color patch mask\n            instance_feature (dict): A bunch of instance features\n            box_info_list (list): Bounding box information corresponding\n                to the instance\n\n        Returns:\n            out_reg (tensor): Regression output\n        \"\"\"\n        conv1_2 = self.model1(torch.cat((input_A, input_B, mask_B), dim=1))\n        conv1_2 = self.weight_layer(instance_feature['conv1_2'], conv1_2,\n                                    box_info_list[0])\n\n        conv2_2 = self.model2(conv1_2[:, :, ::2, ::2])\n        conv2_2 = self.weight_layer2(instance_feature['conv2_2'], conv2_2,\n                                     box_info_list[1])\n\n        conv3_3 = self.model3(conv2_2[:, :, ::2, ::2])\n        conv3_3 = self.weight_layer3(instance_feature['conv3_3'], conv3_3,\n                                     box_info_list[2])\n\n        conv4_3 = self.model4(conv3_3[:, :, ::2, ::2])\n        conv4_3 = self.weight_layer4(instance_feature['conv4_3'], conv4_3,\n                                     box_info_list[3])\n\n        conv5_3 = self.model5(conv4_3)\n        conv5_3 = self.weight_layer5(instance_feature['conv5_3'], conv5_3,\n                                     box_info_list[3])\n\n        conv6_3 = self.model6(conv5_3)\n        conv6_3 = self.weight_layer6(instance_feature['conv6_3'], conv6_3,\n                                     box_info_list[3])\n\n        conv7_3 = self.model7(conv6_3)\n        conv7_3 = self.weight_layer7(instance_feature['conv7_3'], conv7_3,\n                                     box_info_list[3])\n\n        conv8_up = self.model8up(conv7_3) + self.model3short8(conv3_3)\n        conv8_up = self.weight_layer8_1(instance_feature['conv8_up'], conv8_up,\n                                        box_info_list[2])\n\n        conv8_3 = self.model8(conv8_up)\n        conv8_3 = self.weight_layer8_2(instance_feature['conv8_3'], conv8_3,\n                                       box_info_list[2])\n\n        conv9_up = self.model9up(conv8_3) + self.model2short9(conv2_2)\n        conv9_up = self.weight_layer9_1(instance_feature['conv9_up'], conv9_up,\n                                        box_info_list[1])\n\n        conv9_3 = self.model9(conv9_up)\n        conv9_3 = self.weight_layer9_2(instance_feature['conv9_3'], conv9_3,\n                                       box_info_list[1])\n\n        conv10_up = self.model10up(conv9_3) + self.model1short10(conv1_2)\n        conv10_up = self.weight_layer10_1(instance_feature['conv10_up'],\n                                          conv10_up, box_info_list[0])\n\n        conv10_2 = self.model10(conv10_up)\n        conv10_2 = self.weight_layer10_2(instance_feature['conv10_2'],\n                                         conv10_2, box_info_list[0])\n\n        out_reg = self.model_out(conv10_2)\n        return out_reg\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/inst_colorization.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nfrom mmengine.config import Config\nfrom mmengine.model import BaseModel\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom .color_utils import get_colorization_data, lab2rgb\n\n\n@MODELS.register_module()\nclass InstColorization(BaseModel):\n    \"\"\"Colorization InstColorization  method.\n\n    This Colorization is implemented according to the paper:\n        Instance-aware Image Colorization, CVPR 2020\n\n    Adapted from 'https://github.com/ericsujw/InstColorization.git'\n    'InstColorization/models/train_model'\n    Copyright (c) 2020, Su, under MIT License.\n\n    Args:\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        image_model (dict): Config for single image model\n        instance_model (dict): Config for instance model\n        fusion_model (dict): Config for fusion model\n        color_data_opt (dict): Option for colorspace conversion\n        which_direction (str): AtoB or BtoA\n        loss (dict): Config for loss.\n        init_cfg  (str): Initialization config dict. Default: None.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 data_preprocessor: Union[dict, Config],\n                 image_model,\n                 instance_model,\n                 fusion_model,\n                 color_data_opt,\n                 which_direction='AtoB',\n                 loss=None,\n                 init_cfg=None,\n                 train_cfg=None,\n                 test_cfg=None):\n\n        super().__init__(\n            init_cfg=init_cfg, data_preprocessor=data_preprocessor)\n\n        # colorization networks\n        # image_model: used to colorize a single image\n        self.image_model = MODELS.build(image_model)\n\n        # instance model: used to colorize cropped instance\n        self.instance_model = MODELS.build(instance_model)\n\n        # fusion model: input a single image with related instance features\n        self.fusion_model = MODELS.build(fusion_model)\n\n        self.color_data_opt = color_data_opt\n        self.which_direction = which_direction\n\n        self.train_cfg = train_cfg\n        self.test_cfg = test_cfg\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[List[DataSample]] = None,\n                mode: str = 'tensor',\n                **kwargs):\n        \"\"\"Returns losses or predictions of training, validation, testing, and\n        simple inference process.\n\n        ``forward`` method of BaseModel is an abstract method, its subclasses\n        must implement this method.\n\n        Accepts ``inputs`` and ``data_samples`` processed by\n        :attr:`data_preprocessor`, and returns results according to mode\n        arguments.\n\n        During non-distributed training, validation, and testing process,\n        ``forward`` will be called by ``BaseModel.train_step``,\n        ``BaseModel.val_step`` and ``BaseModel.val_step`` directly.\n\n        During distributed data parallel training process,\n        ``MMSeparateDistributedDataParallel.train_step`` will first call\n        ``DistributedDataParallel.forward`` to enable automatic\n        gradient synchronization, and then call ``forward`` to get training\n        loss.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            mode (str): mode should be one of ``loss``, ``predict`` and\n                ``tensor``. Default: 'tensor'.\n\n                - ``loss``: Called by ``train_step`` and return loss ``dict``\n                  used for logging\n                - ``predict``: Called by ``val_step`` and ``test_step``\n                  and return list of ``BaseDataElement`` results used for\n                  computing metric.\n                - ``tensor``: Called by custom use to get ``Tensor`` type\n                  results.\n\n        Returns:\n            ForwardResults:\n\n                - If ``mode == loss``, return a ``dict`` of loss tensor used\n                  for backward and logging.\n                - If ``mode == predict``, return a ``list`` of\n                  :obj:`BaseDataElement` for computing metric\n                  and getting inference result.\n                - If ``mode == tensor``, return a tensor or ``tuple`` of tensor\n                  or ``dict`` or tensor for custom use.\n        \"\"\"\n\n        if mode == 'tensor':\n            return self.forward_tensor(inputs, data_samples, **kwargs)\n\n        elif mode == 'predict':\n            predictions = self.forward_inference(inputs, data_samples,\n                                                 **kwargs)\n            predictions = self.convert_to_datasample(data_samples, predictions)\n            return predictions\n\n        elif mode == 'loss':\n            return self.forward_train(inputs, data_samples, **kwargs)\n\n    def convert_to_datasample(self, inputs, data_samples):\n        \"\"\"Add predictions and destructed inputs (if passed) to data samples.\n\n        Args:\n            inputs (Optional[torch.Tensor]): The input of model. Defaults to\n                None.\n            data_samples (List[DataSample]): The data samples loaded from\n                dataloader.\n\n        Returns:\n            List[DataSample]: Modified data samples.\n        \"\"\"\n\n        for data_sample, output in zip(inputs, data_samples):\n            data_sample.output = output\n        return inputs\n\n    def forward_train(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward function for training.\"\"\"\n        raise NotImplementedError(\n            'Instance Colorization has not supported training.')\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step function.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n        Returns:\n            dict: Dict with loss, information for logger, the number of\n                samples and results for visualization.\n        \"\"\"\n        raise NotImplementedError(\n            'Instance Colorization has not supported training.')\n\n    def forward_inference(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward inference. Returns predictions of validation, testing.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[DataSample]: predictions.\n        \"\"\"\n        feats = self.forward_tensor(inputs, data_samples, **kwargs)\n        feats = self.data_preprocessor.destruct(feats, data_samples)\n        predictions = []\n        for idx in range(feats.shape[0]):\n            pred_img = feats[idx].to('cpu')\n            predictions.append(\n                DataSample(\n                    pred_img=pred_img, metainfo=data_samples[idx].metainfo))\n\n        return predictions\n\n    def forward_tensor(self, inputs, data_samples):\n        \"\"\"Forward function in tensor mode.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_sample (dict): Dict contains data sample.\n\n        Returns:\n            dict: Dict contains output results.\n        \"\"\"\n\n        #  prepare data\n\n        assert len(data_samples) == 1, \\\n            'fusion model supports only one image due to different numbers '\\\n            'of instances of different images'\n\n        full_img_data = get_colorization_data(inputs, self.color_data_opt)\n        AtoB = self.which_direction == 'AtoB'\n\n        # preprocess input for a single image\n        full_real_A = full_img_data['A' if AtoB else 'B']\n        full_hint_B = full_img_data['hint_B']\n        full_mask_B = full_img_data['mask_B']\n\n        if not data_samples.empty_box[0]:\n            # preprocess instance input\n            cropped_img = data_samples.cropped_img[0]\n            box_info_list = [\n                data_samples.box_info[0], data_samples.box_info_2x[0],\n                data_samples.box_info_4x[0], data_samples.box_info_8x[0]\n            ]\n            cropped_data = get_colorization_data(cropped_img,\n                                                 self.color_data_opt)\n\n            real_A = cropped_data['A' if AtoB else 'B']\n            hint_B = cropped_data['hint_B']\n            mask_B = cropped_data['mask_B']\n\n            # network forward\n            _, output, feature_map = self.instance_model(\n                real_A, hint_B, mask_B)\n            output = self.fusion_model(full_real_A, full_hint_B, full_mask_B,\n                                       feature_map, box_info_list)\n\n        else:\n            _, output, _ = self.image_model(full_real_A, full_hint_B,\n                                            full_mask_B)\n\n        output = [\n            full_real_A.type(torch.cuda.FloatTensor),\n            output.type(torch.cuda.FloatTensor)\n        ]\n        output = torch.cat(output, dim=1)\n        output = torch.clamp(lab2rgb(output, self.color_data_opt), 0.0, 1.0)\n        return output\n"
  },
  {
    "path": "mmagic/models/editors/inst_colorization/weight_layer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport functools\n\nimport torch\nfrom mmengine.model import BaseModule\nfrom torch import nn\n\nfrom mmagic.registry import MODELS\n\n\ndef get_norm_layer(norm_type='instance'):\n    \"\"\"Gets the normalization layer.\n\n    Args:\n        norm_type (str): Type of the normalization layer.\n\n    Returns:\n        norm_layer (BatchNorm2d or InstanceNorm2d or None):\n            normalization layer. Default: instance\n    \"\"\"\n    if norm_type == 'batch':\n        norm_layer = functools.partial(nn.BatchNorm2d, affine=True)\n    elif norm_type == 'instance':\n        norm_layer = functools.partial(nn.InstanceNorm2d, affine=False)\n    elif norm_type == 'none':\n        norm_layer = None\n    else:\n        raise NotImplementedError('normalization layer [%s] is not found' %\n                                  norm_type)\n    return norm_layer\n\n\n@MODELS.register_module()\nclass WeightLayer(BaseModule):\n    \"\"\"Weight layer of the fusion_net. A small neural network with three\n    convolutional layers to predict full-image weight map and perinstance\n    weight map.\n\n    Args:\n        input_ch (int): Number of channels in the input image.\n        inner_ch (int): Number of channels produced by the convolution.\n            Default: True\n    \"\"\"\n\n    def __init__(self, input_ch, inner_ch=16):\n        super().__init__()\n        self.simple_instance_conv = nn.Sequential(\n            nn.Conv2d(input_ch, inner_ch, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n            nn.Conv2d(inner_ch, inner_ch, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n            nn.Conv2d(inner_ch, 1, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n        )\n\n        self.simple_bg_conv = nn.Sequential(\n            nn.Conv2d(input_ch, inner_ch, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n            nn.Conv2d(inner_ch, inner_ch, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n            nn.Conv2d(inner_ch, 1, kernel_size=3, stride=1, padding=1),\n            nn.ReLU(True),\n        )\n\n        self.normalize = nn.Softmax(1)\n\n    def resize_and_pad(self, feauture_maps, info_array):\n        \"\"\"Resize the instance feature as well as the weight map to match the\n        size of full-image and do zero padding on both of them.\n\n        Args:\n            feauture_maps (tensor): Feature map\n            info_array (tensor): The bounding box\n\n        Returns:\n            feauture_maps (tensor): Feature maps after resize and padding\n        \"\"\"\n        feauture_maps = torch.nn.functional.interpolate(\n            feauture_maps,\n            size=(info_array[5], info_array[4]),\n            mode='bilinear')\n        feauture_maps = torch.nn.functional.pad(feauture_maps,\n                                                (info_array[0], info_array[1],\n                                                 info_array[2], info_array[3]),\n                                                'constant', 0)\n        return feauture_maps\n\n    def forward(self, instance_feature, bg_feature, box_info):\n        \"\"\"Forward function.\n\n        Args:\n            instance_feature (tensor): Instance feature obtained from the\n                colorization_net\n            bg_feature (tensor):  full-image feature\n            box_info (tensor): The bounding box corresponding to the instance\n\n        Returns:\n            out (tensor): Fused feature\n        \"\"\"\n        mask_list = []\n        featur_map_list = []\n        mask_sum_for_pred = torch.zeros_like(bg_feature)[:1, :1]\n        for i in range(instance_feature.shape[0]):\n            tmp_crop = torch.unsqueeze(instance_feature[i], 0)\n            conv_tmp_crop = self.simple_instance_conv(tmp_crop)\n            pred_mask = self.resize_and_pad(conv_tmp_crop, box_info[i])\n\n            tmp_crop = self.resize_and_pad(tmp_crop, box_info[i])\n\n            mask = torch.zeros_like(bg_feature)[:1, :1]\n            mask[0, 0, box_info[i][2]:box_info[i][2] + box_info[i][5],\n                 box_info[i][0]:box_info[i][0] + box_info[i][4]] = 1.0\n            device = mask.device\n            mask = mask.type(torch.FloatTensor).to(device)\n\n            mask_sum_for_pred = torch.clamp(mask_sum_for_pred + mask, 0.0, 1.0)\n\n            mask_list.append(pred_mask)\n            featur_map_list.append(tmp_crop)\n\n        pred_bg_mask = self.simple_bg_conv(bg_feature)\n        mask_list.append(pred_bg_mask + (1 - mask_sum_for_pred) * 100000.0)\n        mask_list = self.normalize(torch.cat(mask_list, 1))\n\n        mask_list_maskout = mask_list.clone()\n\n        featur_map_list.append(bg_feature)\n        featur_map_list = torch.cat(featur_map_list, 0)\n        mask_list_maskout = mask_list_maskout.permute(1, 0, 2, 3).contiguous()\n        out = featur_map_list * mask_list_maskout\n        out = torch.sum(out, 0, keepdim=True)\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/liif/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .liif import LIIF\nfrom .liif_net import LIIFEDSRNet, LIIFRDNNet\nfrom .mlp_refiner import MLPRefiner\n\n__all__ = [\n    'LIIF',\n    'LIIFEDSRNet',\n    'LIIFRDNNet',\n    'MLPRefiner',\n]\n"
  },
  {
    "path": "mmagic/models/editors/liif/liif.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport torch\n\nfrom mmagic.models.base_models import BaseEditModel\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass LIIF(BaseEditModel):\n    \"\"\"LIIF model for single image super-resolution.\n\n    Paper: Learning Continuous Image Representation with\n           Local Implicit Image Function\n\n    Args:\n        generator (dict): Config for the generator.\n        pixel_loss (dict): Config for the pixel loss.\n        pretrained (str): Path for pretrained model. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n    \"\"\"\n\n    def forward_tensor(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        coord = torch.stack(data_samples.metainfo['coord']).to(inputs)\n        cell = torch.stack(data_samples.metainfo['cell']).to(inputs)\n\n        feats = self.generator(inputs, coord, cell, **kwargs)\n\n        return feats\n\n    def forward_inference(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward inference. Returns predictions of validation, testing, and\n        simple inference.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (BaseDataElement, optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            List[DataSample]: predictions.\n        \"\"\"\n        # NOTE: feats: shape [bz, N, 3]\n        feats = self.forward_tensor(inputs, data_samples, test_mode=True)\n\n        # reshape for eval, [bz, N, 3] -> [bz, 3, H, W]\n        ih, iw = inputs.shape[-2:]\n        # metainfo in stacked data sample is a list, fetch by indexing\n        coord_count = data_samples.metainfo['coord'][0].shape[0]\n        s = math.sqrt(coord_count / (ih * iw))\n        shape = [len(data_samples), round(ih * s), round(iw * s), 3]\n        feats = feats.view(shape).permute(0, 3, 1, 2).contiguous()\n\n        feats = self.data_preprocessor.destruct(feats, data_samples)\n\n        predictions = DataSample(pred_img=feats.cpu())\n\n        return predictions\n"
  },
  {
    "path": "mmagic/models/editors/liif/liif_net.py",
    "content": "from abc import abstractmethod\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import make_coord\n\n\nclass LIIFNet(BaseModule):\n    \"\"\"LIIF net for single image super-resolution, CVPR, 2021.\n\n    Paper: Learning Continuous Image Representation with\n           Local Implicit Image Function\n\n    The subclasses should define `generator` with `encoder` and `imnet`,\n        and overwrite the function `gen_feature`.\n    If `encoder` does not contain `mid_channels`, `__init__` should be\n        overwrite.\n\n    Args:\n        encoder (dict): Config for the generator.\n        imnet (dict): Config for the imnet.\n        local_ensemble (bool): Whether to use local ensemble. Default: True.\n        feat_unfold (bool): Whether to use feature unfold. Default: True.\n        cell_decode (bool): Whether to use cell decode. Default: True.\n        eval_bsize (int): Size of batched predict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 encoder,\n                 imnet,\n                 local_ensemble=True,\n                 feat_unfold=True,\n                 cell_decode=True,\n                 eval_bsize=None):\n        super().__init__()\n\n        self.local_ensemble = local_ensemble\n        self.feat_unfold = feat_unfold\n        self.cell_decode = cell_decode\n        self.eval_bsize = eval_bsize\n\n        # model\n        self.encoder = MODELS.build(encoder)\n        imnet_in_dim = self.encoder.mid_channels\n        if self.feat_unfold:\n            imnet_in_dim *= 9\n        imnet_in_dim += 2  # attach coordinates\n        if self.cell_decode:\n            imnet_in_dim += 2\n        imnet['in_dim'] = imnet_in_dim\n        self.imnet = MODELS.build(imnet)\n\n    def forward(self, x, coord, cell, test_mode=False):\n        \"\"\"Forward function.\n\n        Args:\n            x: input tensor.\n            coord (Tensor): coordinates tensor.\n            cell (Tensor): cell tensor.\n            test_mode (bool): Whether in test mode or not. Default: False.\n\n        Returns:\n            pred (Tensor): output of model.\n        \"\"\"\n\n        feature = self.gen_feature(x)\n        if self.eval_bsize is None or not test_mode:\n            pred = self.query_rgb(feature, coord, cell)\n        else:\n            pred = self.batched_predict(feature, coord, cell)\n\n        return pred\n\n    def query_rgb(self, feature, coord, cell=None):\n        \"\"\"Query RGB value of GT.\n\n        Adapted from 'https://github.com/yinboc/liif.git'\n        'liif/models/liif.py'\n        Copyright (c) 2020, Yinbo Chen, under BSD 3-Clause License.\n\n        Args:\n            feature (Tensor): encoded feature.\n            coord (Tensor): coord tensor, shape (BHW, 2).\n            cell (Tensor | None): cell tensor. Default: None.\n\n        Returns:\n            result (Tensor): (part of) output.\n        \"\"\"\n\n        if self.imnet is None:\n            coord = coord.type(feature.type())\n            result = F.grid_sample(\n                feature,\n                coord.flip(-1).unsqueeze(1),\n                mode='nearest',\n                align_corners=False)\n            result = result[:, :, 0, :].permute(0, 2, 1)\n            return result\n\n        if self.feat_unfold:\n            feature = F.unfold(\n                feature, 3,\n                padding=1).view(feature.shape[0], feature.shape[1] * 9,\n                                feature.shape[2], feature.shape[3])\n\n        if self.local_ensemble:\n            vx_lst = [-1, 1]\n            vy_lst = [-1, 1]\n            eps_shift = 1e-6\n        else:\n            vx_lst, vy_lst, eps_shift = [0], [0], 0\n\n        # field radius (global: [-1, 1])\n        radius_x = 2 / feature.shape[-2] / 2\n        radius_y = 2 / feature.shape[-1] / 2\n\n        feat_coord = make_coord(feature.shape[-2:], flatten=False) \\\n            .permute(2, 0, 1) \\\n            .unsqueeze(0).expand(feature.shape[0], 2, *feature.shape[-2:])\n        feat_coord = feat_coord.to(coord)\n\n        preds = []\n        areas = []\n        for vx in vx_lst:\n            for vy in vy_lst:\n                coord_ = coord.clone()\n                coord_[:, :, 0] += vx * radius_x + eps_shift\n                coord_[:, :, 1] += vy * radius_y + eps_shift\n                coord_.clamp_(-1 + 1e-6, 1 - 1e-6)\n\n                coord_ = coord_.type(feature.type())\n                query_feat = F.grid_sample(\n                    feature, coord_.flip(-1).unsqueeze(1),\n                    mode='nearest', align_corners=False)[:, :, 0, :] \\\n                    .permute(0, 2, 1)\n\n                feat_coord = feat_coord.type(coord_.type())\n                query_coord = F.grid_sample(\n                    feat_coord, coord_.flip(-1).unsqueeze(1),\n                    mode='nearest', align_corners=False)[:, :, 0, :] \\\n                    .permute(0, 2, 1)\n                rel_coord = coord - query_coord\n                rel_coord[:, :, 0] *= feature.shape[-2]\n                rel_coord[:, :, 1] *= feature.shape[-1]\n                mid_tensor = torch.cat([query_feat, rel_coord], dim=-1)\n\n                if self.cell_decode:\n                    rel_cell = cell.clone()\n                    rel_cell[:, :, 0] *= feature.shape[-2]\n                    rel_cell[:, :, 1] *= feature.shape[-1]\n                    mid_tensor = torch.cat([mid_tensor, rel_cell], dim=-1)\n\n                bs, q = coord.shape[:2]\n                pred = self.imnet(mid_tensor.view(bs * q, -1)).view(bs, q, -1)\n                preds.append(pred)\n\n                area = torch.abs(rel_coord[:, :, 0] * rel_coord[:, :, 1])\n                areas.append(area + 1e-9)\n\n        total_area = torch.stack(areas).sum(dim=0)\n        if self.local_ensemble:\n            areas = areas[::-1]\n        result = 0\n        for pred, area in zip(preds, areas):\n            result = result + pred * (area / total_area).unsqueeze(-1)\n\n        return result\n\n    def batched_predict(self, x, coord, cell):\n        \"\"\"Batched predict.\n\n        Args:\n            x (Tensor): Input tensor.\n            coord (Tensor): coord tensor.\n            cell (Tensor): cell tensor.\n\n        Returns:\n            pred (Tensor): output of model.\n        \"\"\"\n        with torch.no_grad():\n            n = coord.shape[1]\n            left = 0\n            preds = []\n            while left < n:\n                right = min(left + self.eval_bsize, n)\n                pred = self.query_rgb(x, coord[:, left:right, :],\n                                      cell[:, left:right, :])\n                preds.append(pred)\n                left = right\n            pred = torch.cat(preds, dim=1)\n        return pred\n\n    @abstractmethod\n    def gen_feature(self, x):\n        \"\"\"Generate feature.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n\n@MODELS.register_module()\nclass LIIFEDSRNet(LIIFNet):\n    \"\"\"LIIF net based on EDSR.\n\n    Paper: Learning Continuous Image Representation with\n           Local Implicit Image Function\n\n    Args:\n        encoder (dict): Config for the generator.\n        imnet (dict): Config for the imnet.\n        local_ensemble (bool): Whether to use local ensemble. Default: True.\n        feat_unfold (bool): Whether to use feature unfold. Default: True.\n        cell_decode (bool): Whether to use cell decode. Default: True.\n        eval_bsize (int): Size of batched predict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 encoder,\n                 imnet,\n                 local_ensemble=True,\n                 feat_unfold=True,\n                 cell_decode=True,\n                 eval_bsize=None):\n        super().__init__(\n            encoder=encoder,\n            imnet=imnet,\n            local_ensemble=local_ensemble,\n            feat_unfold=feat_unfold,\n            cell_decode=cell_decode,\n            eval_bsize=eval_bsize)\n\n        self.conv_first = self.encoder.conv_first\n        self.body = self.encoder.body\n        self.conv_after_body = self.encoder.conv_after_body\n        del self.encoder\n\n    def gen_feature(self, x):\n        \"\"\"Generate feature.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x = self.conv_first(x)\n        res = self.body(x)\n        res = self.conv_after_body(res)\n        res += x\n\n        return res\n\n\n@MODELS.register_module()\nclass LIIFRDNNet(LIIFNet):\n    \"\"\"LIIF net based on RDN.\n\n    Paper: Learning Continuous Image Representation with\n           Local Implicit Image Function\n\n    Args:\n        encoder (dict): Config for the generator.\n        imnet (dict): Config for the imnet.\n        local_ensemble (bool): Whether to use local ensemble. Default: True.\n        feat_unfold (bool): Whether to use feat unfold. Default: True.\n        cell_decode (bool): Whether to use cell decode. Default: True.\n        eval_bsize (int): Size of batched predict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 encoder,\n                 imnet,\n                 local_ensemble=True,\n                 feat_unfold=True,\n                 cell_decode=True,\n                 eval_bsize=None):\n        super().__init__(\n            encoder=encoder,\n            imnet=imnet,\n            local_ensemble=local_ensemble,\n            feat_unfold=feat_unfold,\n            cell_decode=cell_decode,\n            eval_bsize=eval_bsize)\n\n        self.sfe1 = self.encoder.sfe1\n        self.sfe2 = self.encoder.sfe2\n        self.rdbs = self.encoder.rdbs\n        self.gff = self.encoder.gff\n        self.num_blocks = self.encoder.num_blocks\n        del self.encoder\n\n    def gen_feature(self, x):\n        \"\"\"Generate feature.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        sfe1 = self.sfe1(x)\n        sfe2 = self.sfe2(sfe1)\n\n        x = sfe2\n        local_features = []\n        for i in range(self.num_blocks):\n            x = self.rdbs[i](x)\n            local_features.append(x)\n\n        x = self.gff(torch.cat(local_features, 1)) + sfe1\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/liif/mlp_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass MLPRefiner(BaseModule):\n    \"\"\"Multilayer perceptrons (MLPs), refiner used in LIIF.\n\n    Args:\n        in_dim (int): Input dimension.\n        out_dim (int): Output dimension.\n        hidden_list (list[int]): List of hidden dimensions.\n    \"\"\"\n\n    def __init__(self, in_dim, out_dim, hidden_list):\n        super().__init__()\n\n        layers = []\n        last_channels = in_dim\n        for hidden in hidden_list:\n            layers.append(nn.Linear(last_channels, hidden))\n            layers.append(nn.ReLU())\n            last_channels = hidden\n        layers.append(nn.Linear(last_channels, out_dim))\n        self.layers = nn.Sequential(*layers)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): The input of MLP.\n\n        Returns:\n            Tensor: The output of MLP.\n        \"\"\"\n\n        shape = x.shape[:-1]\n        x = self.layers(x.view(-1, x.shape[-1]))\n\n        return x.view(*shape, -1)\n"
  },
  {
    "path": "mmagic/models/editors/lsgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .lsgan import LSGAN\nfrom .lsgan_discriminator import LSGANDiscriminator\nfrom .lsgan_generator import LSGANGenerator\n\n__all__ = ['LSGAN', 'LSGANDiscriminator', 'LSGANGenerator']\n"
  },
  {
    "path": "mmagic/models/editors/lsgan/lsgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Tuple\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseGAN\n\n\n@MODELS.register_module()\nclass LSGAN(BaseGAN):\n    \"\"\"Implementation of `Least Squares Generative Adversarial Networks`.\n\n    Paper link: https://arxiv.org/pdf/1611.04076.pdf\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.lsgan.LSGANGenerator`\n    and\n    :class:`~mmagic.models.editors.lsgan.LSGANDiscriminator`\n    \"\"\"\n\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. LSGAN use the least squares loss to train\n        the discriminator.\n\n        .. math::\n            L_{D}=\\left(D\\left(X_{\\text {data }}\\right)-1\\right)^{2}\n                +(D(G(z)))^{2}\n\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.mse_loss(\n            disc_pred_fake, 0. * torch.ones_like(disc_pred_fake))\n        losses_dict['loss_disc_real'] = F.mse_loss(\n            disc_pred_real, 1. * torch.ones_like(disc_pred_real))\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple:\n        \"\"\"Get gen loss. LSGAN use the least squares loss to train the\n        generator.\n\n        .. math::\n            L_{G}=(D(G(z))-1)^{2}\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = F.mse_loss(\n            disc_pred_fake, 1. * torch.ones_like(disc_pred_fake))\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/lsgan/lsgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass LSGANDiscriminator(BaseModule):\n    \"\"\"Discriminator for LSGAN.\n\n    Implementation Details for LSGAN architecture:\n\n    #. Adopt convolution in the discriminator;\n    #. Use batchnorm in the discriminator except for the input and final \\\n       output layer;\n    #. Use LeakyReLU in the discriminator in addition to the output layer;\n    #. Use fully connected layer in the output layer;\n    #. Use 5x5 conv rather than 4x4 conv in DCGAN.\n\n    Args:\n        input_scale (int, optional): The scale of the input image. Defaults to\n            128.\n        output_scale (int, optional): The final scale of the convolutional\n            feature. Defaults to 8.\n        out_channels (int, optional): The channel number of the final output\n            layer. Defaults to 1.\n        in_channels (int, optional): The channel number of the input image.\n            Defaults to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Defaults to 128.\n        conv_cfg (dict, optional): Config for the convolution module used in\n            this discriminator. Defaults to dict(type='Conv2d').\n        default_norm_cfg (dict, optional): Norm config for all of layers\n            except for the final output layer. Defaults to ``dict(type='BN')``.\n        default_act_cfg (dict, optional): Activation config for all of layers\n            except for the final output layer. Defaults to\n            ``dict(type='LeakyReLU', negative_slope=0.2)``.\n        out_act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to ``dict(type='Tanh')``.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 input_scale=128,\n                 output_scale=8,\n                 out_channels=1,\n                 in_channels=3,\n                 base_channels=64,\n                 conv_cfg=dict(type='Conv2d'),\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                 out_act_cfg=None,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        assert input_scale % output_scale == 0\n        assert input_scale // output_scale >= 2\n\n        self.input_scale = input_scale\n        self.output_scale = output_scale\n        self.out_channels = out_channels\n        self.base_channels = base_channels\n        self.with_out_activation = out_act_cfg is not None\n\n        self.conv_blocks = nn.ModuleList()\n        self.conv_blocks.append(\n            ConvModule(\n                in_channels,\n                base_channels,\n                kernel_size=5,\n                stride=2,\n                padding=2,\n                conv_cfg=conv_cfg,\n                norm_cfg=None,\n                act_cfg=default_act_cfg))\n\n        # the number of times for downsampling\n        self.num_downsamples = int(np.log2(input_scale // output_scale)) - 1\n\n        # build up downsampling backbone (excluding the output layer)\n        curr_channels = base_channels\n        for _ in range(self.num_downsamples):\n            self.conv_blocks.append(\n                ConvModule(\n                    curr_channels,\n                    curr_channels * 2,\n                    kernel_size=5,\n                    stride=2,\n                    padding=2,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n            curr_channels = curr_channels * 2\n\n        # output layer\n        self.decision = nn.Sequential(\n            nn.Linear(output_scale * output_scale * curr_channels,\n                      out_channels))\n        if self.with_out_activation:\n            self.out_activation = MODELS.build(out_act_cfg)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image.\n        \"\"\"\n        n = x.shape[0]\n\n        for conv in self.conv_blocks:\n            x = conv(x)\n\n        x = x.reshape(n, -1)\n        x = self.decision(x)\n\n        if self.with_out_activation:\n            x = self.out_activation(x)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/lsgan/lsgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\n\n\n@MODELS.register_module()\nclass LSGANGenerator(BaseModule):\n    \"\"\"Generator for LSGAN.\n\n    Implementation Details for LSGAN architecture:\n\n    #. Adopt transposed convolution in the generator;\n    #. Use batchnorm in the generator except for the final output layer;\n    #. Use ReLU in the generator in addition to the final output layer;\n    #. Keep channels of feature maps unchanged in the convolution backbone;\n    #. Use one more 3x3 conv every upsampling in the convolution backbone.\n\n    We follow the implementation details of the origin paper:\n    Least Squares Generative Adversarial Networks\n    https://arxiv.org/pdf/1611.04076.pdf\n\n    Args:\n        output_scale (int, optional): Output scale for the generated image.\n            Defaults to 128.\n        out_channels (int, optional): The channel number of the output feature.\n            Defaults to 3.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Defaults to 256.\n        input_scale (int, optional): The scale of the input 2D feature map.\n            Defaults to 8.\n        noise_size (int, optional): Size of the input noise\n            vector. Defaults to 1024.\n        conv_cfg (dict, optional): Config for the convolution module used in\n            this generator. Defaults to dict(type='ConvTranspose2d').\n        default_norm_cfg (dict, optional): Norm config for all of layers\n            except for the final output layer. Defaults to dict(type='BN').\n        default_act_cfg (dict, optional): Activation config for all of layers\n            except for the final output layer. Defaults to dict(type='ReLU').\n        out_act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to dict(type='Tanh').\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 output_scale=128,\n                 out_channels=3,\n                 base_channels=256,\n                 input_scale=8,\n                 noise_size=1024,\n                 conv_cfg=dict(type='ConvTranspose2d'),\n                 default_norm_cfg=dict(type='BN'),\n                 default_act_cfg=dict(type='ReLU'),\n                 out_act_cfg=dict(type='Tanh'),\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        assert output_scale % input_scale == 0\n        assert output_scale // input_scale >= 4\n\n        self.output_scale = output_scale\n        self.base_channels = base_channels\n        self.input_scale = input_scale\n        self.noise_size = noise_size\n\n        self.noise2feat_head = nn.Sequential(\n            nn.Linear(noise_size, input_scale * input_scale * base_channels))\n        self.noise2feat_tail = nn.Sequential(nn.BatchNorm2d(base_channels))\n        if default_act_cfg is not None:\n            self.noise2feat_tail.add_module('act',\n                                            MODELS.build(default_act_cfg))\n\n        # the number of times for upsampling\n        self.num_upsamples = int(np.log2(output_scale // input_scale)) - 2\n\n        # build up convolution backbone (excluding the output layer)\n        self.conv_blocks = nn.ModuleList()\n        for _ in range(self.num_upsamples):\n            self.conv_blocks.append(\n                ConvModule(\n                    base_channels,\n                    base_channels,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=dict(conv_cfg, output_padding=1),\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n            self.conv_blocks.append(\n                ConvModule(\n                    base_channels,\n                    base_channels,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=default_norm_cfg,\n                    act_cfg=default_act_cfg))\n\n        # output blocks\n        self.conv_blocks.append(\n            ConvModule(\n                base_channels,\n                int(base_channels // 2),\n                kernel_size=3,\n                stride=2,\n                padding=1,\n                conv_cfg=dict(conv_cfg, output_padding=1),\n                norm_cfg=default_norm_cfg,\n                act_cfg=default_act_cfg))\n        self.conv_blocks.append(\n            ConvModule(\n                int(base_channels // 2),\n                int(base_channels // 4),\n                kernel_size=3,\n                stride=2,\n                padding=1,\n                conv_cfg=dict(conv_cfg, output_padding=1),\n                norm_cfg=default_norm_cfg,\n                act_cfg=default_act_cfg))\n        self.conv_blocks.append(\n            ConvModule(\n                int(base_channels // 4),\n                out_channels,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                conv_cfg=conv_cfg,\n                norm_cfg=None,\n                act_cfg=out_act_cfg))\n\n    def forward(self, noise, num_batches=0, return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img`` and\n                ``noise_batch`` will be returned.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            if noise.ndim == 2:\n                noise_batch = noise\n            else:\n                raise ValueError('The noise should be in shape of (n, c)'\n                                 f'but got {noise.shape}')\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n        # noise2feat\n        x = self.noise2feat_head(noise_batch)\n        x = x.reshape(\n            (-1, self.base_channels, self.input_scale, self.input_scale))\n        x = self.noise2feat_tail(x)\n        # conv module\n        for conv in self.conv_blocks:\n            x = conv(x)\n\n        if return_noise:\n            return dict(fake_img=x, noise_batch=noise_batch)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/mspie/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .mspie_stylegan2 import MSPIEStyleGAN2\nfrom .mspie_stylegan2_discriminator import MSStyleGAN2Discriminator\nfrom .mspie_stylegan2_generator import MSStyleGANv2Generator\nfrom .pe_singan import PESinGAN\nfrom .pe_singan_generator import SinGANMSGeneratorPE\nfrom .positional_encoding import CatersianGrid, SinusoidalPositionalEmbedding\n\n__all__ = [\n    'MSPIEStyleGAN2', 'MSStyleGAN2Discriminator', 'MSStyleGANv2Generator',\n    'PESinGAN', 'SinGANMSGeneratorPE', 'CatersianGrid',\n    'SinusoidalPositionalEmbedding'\n]\n"
  },
  {
    "path": "mmagic/models/editors/mspie/mspie_stylegan2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict, Union\n\nimport numpy as np\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...utils import set_requires_grad\nfrom ..stylegan2 import StyleGAN2\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module()\nclass MSPIEStyleGAN2(StyleGAN2):\n    \"\"\"MS-PIE StyleGAN2.\n\n    In this GAN, we adopt the MS-PIE training schedule so that multi-scale\n    images can be generated with a single generator. Details can be found in:\n    Positional Encoding as Spatial Inductive Bias in GANs, CVPR2021.\n\n    Args:\n        train_settings (dict): Config for training settings.\n            Defaults to `dict()`.\n    \"\"\"\n\n    def __init__(self, *args, train_settings=dict(), **kwargs):\n        super().__init__(*args, **kwargs)\n        self.train_settings = deepcopy(train_settings)\n        # set the number of upsampling blocks. This value will be used to\n        # calculate the current result size according to the size of the input\n        # feature map, e.g., positional encoding map\n        self.num_upblocks = self.train_settings.get('num_upblocks', 6)\n\n        # multiple input scales (a list of int) that will be added to the\n        # original starting scale.\n        self.multi_input_scales = self.train_settings.get('multi_input_scales')\n        self.multi_scale_probability = self.train_settings.get(\n            'multi_scale_probability')\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        \"\"\"Train GAN model. In the training of GAN models, generator and\n        discriminator are updated alternatively. In MMagic's design,\n        `self.train_step` is called with data input. Therefore we always update\n        discriminator, whose updating is relay on real data, and then determine\n        if the generator needs to be updated based on the current number of\n        iterations. More details about whether to update generator can be found\n        in :meth:`should_gen_update`.\n\n        Args:\n            data (dict): Data sampled from dataloader.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            log_vars = self.train_discriminator(\n                **data, optimizer_wrapper=disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    log_vars_gen = self.train_generator(\n                        **data, optimizer_wrapper=gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = self.gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n                # if not update buffer, copy buffer from orig model\n                if not self.generator_ema.update_buffers:\n                    self.generator_ema.sync_buffers(\n                        self.generator.module if is_model_wrapper(\n                            self.generator) else self.generator)\n            elif self.with_ema_gen:\n                # before ema, copy weights from orig\n                self.generator_ema.sync_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (TrainInput): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(\n            noise, return_noise=False, chosen_scale=self.chosen_scale)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake, num_batches)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (TrainInput): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        if dist.is_initialized():\n            # randomly sample a scale for current training iteration\n            chosen_scale = np.random.choice(self.multi_input_scales, 1,\n                                            self.multi_scale_probability)[0]\n\n            chosen_scale = torch.tensor(chosen_scale, dtype=torch.int).cuda()\n            dist.broadcast(chosen_scale, 0)\n            chosen_scale = int(chosen_scale.item())\n\n        else:\n            logger = MMLogger.get_current_instance()\n            logger.info(\n                'Distributed training has not been initialized. Degrade to '\n                'the standard stylegan2')\n            chosen_scale = 0\n\n        curr_size = (4 + chosen_scale) * (2**self.num_upblocks)\n        # adjust the shape of images\n        if real_imgs.shape[-2:] != (curr_size, curr_size):\n            real_imgs = F.interpolate(\n                real_imgs,\n                size=(curr_size, curr_size),\n                mode='bilinear',\n                align_corners=True)\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise_batch, return_noise=False, chosen_scale=chosen_scale)\n        # store chosen scale for training generator\n        setattr(self, 'chosen_scale', chosen_scale)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real, real_imgs)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/mspie/mspie_stylegan2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ..stylegan1 import EqualLinearActModule\nfrom ..stylegan2 import ConvDownLayer, ModMBStddevLayer, ResBlock\n\n\n@MODELS.register_module()\nclass MSStyleGAN2Discriminator(BaseModule):\n    \"\"\"StyleGAN2 Discriminator.\n\n    The architecture of this discriminator is proposed in StyleGAN2. More\n    details can be found in: Analyzing and Improving the Image Quality of\n    StyleGAN CVPR2020.\n\n    Args:\n        in_size (int): The input size of images.\n        channel_multiplier (int, optional): The multiplier factor for the\n            channel number. Defaults to 2.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 3, 3, 1].\n        mbstd_cfg (dict, optional): Configs for minibatch-stddev layer.\n            Defaults to dict(group_size=4, channel_groups=1).\n    \"\"\"\n\n    def __init__(self,\n                 in_size,\n                 channel_multiplier=2,\n                 blur_kernel=[1, 3, 3, 1],\n                 mbstd_cfg=dict(group_size=4, channel_groups=1),\n                 with_adaptive_pool=False,\n                 pool_size=(2, 2)):\n        super().__init__()\n        self.with_adaptive_pool = with_adaptive_pool\n        self.pool_size = pool_size\n\n        channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256 * channel_multiplier,\n            128: 128 * channel_multiplier,\n            256: 64 * channel_multiplier,\n            512: 32 * channel_multiplier,\n            1024: 16 * channel_multiplier,\n        }\n\n        log_size = int(np.log2(in_size))\n        in_channels = channels[in_size]\n        convs = [ConvDownLayer(3, channels[in_size], 1)]\n\n        for i in range(log_size, 2, -1):\n            out_channel = channels[2**(i - 1)]\n            convs.append(ResBlock(in_channels, out_channel, blur_kernel))\n\n            in_channels = out_channel\n\n        self.convs = nn.Sequential(*convs)\n        self.mbstd_layer = ModMBStddevLayer(**mbstd_cfg)\n\n        self.final_conv = ConvDownLayer(in_channels + 1, channels[4], 3)\n\n        if self.with_adaptive_pool:\n            self.adaptive_pool = nn.AdaptiveAvgPool2d(pool_size)\n            linear_in_channels = channels[4] * pool_size[0] * pool_size[1]\n        else:\n            linear_in_channels = channels[4] * 4 * 4\n\n        self.final_linear = nn.Sequential(\n            EqualLinearActModule(\n                linear_in_channels,\n                channels[4],\n                act_cfg=dict(type='fused_bias')),\n            EqualLinearActModule(channels[4], 1),\n        )\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input image tensor.\n\n        Returns:\n            torch.Tensor: Predict score for the input image.\n        \"\"\"\n        x = self.convs(x)\n\n        x = self.mbstd_layer(x)\n        x = self.final_conv(x)\n        if self.with_adaptive_pool:\n            x = self.adaptive_pool(x)\n        x = x.view(x.shape[0], -1)\n        x = self.final_linear(x)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/mspie/mspie_stylegan2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\nfrom copy import deepcopy\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom ..pggan import PixelNorm\nfrom ..stylegan1 import (ConstantInput, EqualLinearActModule, get_mean_latent,\n                         style_mixing)\nfrom ..stylegan2 import ModulatedToRGB\nfrom .mspie_stylegan2_modules import ModulatedPEStyleConv\n\n\n@MODELS.register_module()\nclass MSStyleGANv2Generator(BaseModule):\n    \"\"\"StyleGAN2 Generator.\n\n    In StyleGAN2, we use a static architecture composing of a style mapping\n    module and number of convolutional style blocks. More details can be found\n    in: Analyzing and Improving the Image Quality of StyleGAN CVPR2020.\n\n    Args:\n        out_size (int): The output size of the StyleGAN2 generator.\n        style_channels (int): The number of channels for style code.\n        num_mlps (int, optional): The number of MLP layers. Defaults to 8.\n        channel_multiplier (int, optional): The multiplier factor for the\n            channel number. Defaults to 2.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 3, 3, 1].\n        lr_mlp (float, optional): The learning rate for the style mapping\n            layer. Defaults to 0.01.\n        default_style_mode (str, optional): The default mode of style mixing.\n            In training, we adopt mixing style mode in default. However, in the\n            evaluation, we use 'single' style mode. `['mix', 'single']` are\n            currently supported. Defaults to 'mix'.\n        eval_style_mode (str, optional): The evaluation mode of style mixing.\n            Defaults to 'single'.\n        mix_prob (float, optional): Mixing probability. The value should be\n            in range of [0, 1]. Defaults to 0.9.\n    \"\"\"\n\n    def __init__(self,\n                 out_size,\n                 style_channels,\n                 num_mlps=8,\n                 channel_multiplier=2,\n                 blur_kernel=[1, 3, 3, 1],\n                 lr_mlp=0.01,\n                 default_style_mode='mix',\n                 eval_style_mode='single',\n                 mix_prob=0.9,\n                 no_pad=False,\n                 deconv2conv=False,\n                 interp_pad=None,\n                 up_config=dict(scale_factor=2, mode='nearest'),\n                 up_after_conv=False,\n                 head_pos_encoding=None,\n                 head_pos_size=(4, 4),\n                 interp_head=False):\n        super().__init__()\n        self.out_size = out_size\n        self.style_channels = style_channels\n        self.num_mlps = num_mlps\n        self.channel_multiplier = channel_multiplier\n        self.lr_mlp = lr_mlp\n        self._default_style_mode = default_style_mode\n        self.default_style_mode = default_style_mode\n        self.eval_style_mode = eval_style_mode\n        self.mix_prob = mix_prob\n        self.no_pad = no_pad\n        self.deconv2conv = deconv2conv\n        self.interp_pad = interp_pad\n        self.with_interp_pad = interp_pad is not None\n        self.up_config = deepcopy(up_config)\n        self.up_after_conv = up_after_conv\n        self.head_pos_encoding = head_pos_encoding\n        self.head_pos_size = head_pos_size\n        self.interp_head = interp_head\n\n        # define style mapping layers\n        mapping_layers = [PixelNorm()]\n\n        for _ in range(num_mlps):\n            mapping_layers.append(\n                EqualLinearActModule(\n                    style_channels,\n                    style_channels,\n                    equalized_lr_cfg=dict(lr_mul=lr_mlp, gain=1.),\n                    act_cfg=dict(type='fused_bias')))\n\n        self.style_mapping = nn.Sequential(*mapping_layers)\n\n        self.channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256 * channel_multiplier,\n            128: 128 * channel_multiplier,\n            256: 64 * channel_multiplier,\n            512: 32 * channel_multiplier,\n            1024: 16 * channel_multiplier,\n        }\n\n        in_ch = self.channels[4]\n        # constant input layer\n        if self.head_pos_encoding:\n            if self.head_pos_encoding['type'] in [\n                    'CatersianGrid', 'CSG', 'CSG2d'\n            ]:\n                in_ch = 2\n            self.head_pos_enc = MODELS.build(self.head_pos_encoding)\n        else:\n            size_ = 4\n            if self.no_pad:\n                size_ += 2\n            self.constant_input = ConstantInput(self.channels[4], size=size_)\n\n        # 4x4 stage\n        self.conv1 = ModulatedPEStyleConv(\n            in_ch,\n            self.channels[4],\n            kernel_size=3,\n            style_channels=style_channels,\n            blur_kernel=blur_kernel,\n            deconv2conv=self.deconv2conv,\n            no_pad=self.no_pad,\n            up_config=self.up_config,\n            interp_pad=self.interp_pad)\n        self.to_rgb1 = ModulatedToRGB(\n            self.channels[4], style_channels, upsample=False)\n\n        # generator backbone (8x8 --> higher resolutions)\n        self.log_size = int(np.log2(self.out_size))\n\n        self.convs = nn.ModuleList()\n        self.upsamples = nn.ModuleList()\n        self.to_rgbs = nn.ModuleList()\n\n        in_channels_ = self.channels[4]\n\n        for i in range(3, self.log_size + 1):\n            out_channels_ = self.channels[2**i]\n\n            self.convs.append(\n                ModulatedPEStyleConv(\n                    in_channels_,\n                    out_channels_,\n                    3,\n                    style_channels,\n                    upsample=True,\n                    blur_kernel=blur_kernel,\n                    deconv2conv=self.deconv2conv,\n                    no_pad=self.no_pad,\n                    up_config=self.up_config,\n                    interp_pad=self.interp_pad,\n                    up_after_conv=self.up_after_conv))\n            self.convs.append(\n                ModulatedPEStyleConv(\n                    out_channels_,\n                    out_channels_,\n                    3,\n                    style_channels,\n                    upsample=False,\n                    blur_kernel=blur_kernel,\n                    deconv2conv=self.deconv2conv,\n                    no_pad=self.no_pad,\n                    up_config=self.up_config,\n                    interp_pad=self.interp_pad,\n                    up_after_conv=self.up_after_conv))\n            self.to_rgbs.append(\n                ModulatedToRGB(out_channels_, style_channels, upsample=True))\n\n            in_channels_ = out_channels_\n\n        self.num_latents = self.log_size * 2 - 2\n        self.num_injected_noises = self.num_latents - 1\n\n        # register buffer for injected noises\n        noises = self.make_injected_noise()\n        for layer_idx in range(self.num_injected_noises):\n            self.register_buffer(f'injected_noise_{layer_idx}',\n                                 noises[layer_idx])\n\n    def train(self, mode=True):\n        \"\"\"Set train/eval mode.\n\n        Args:\n            mode (bool, optional): Whether set train mode. Defaults to True.\n        \"\"\"\n        if mode:\n            if self.default_style_mode != self._default_style_mode:\n                mmengine.print_log(\n                    f'Switch to train style mode: {self._default_style_mode}')\n            self.default_style_mode = self._default_style_mode\n\n        else:\n            if self.default_style_mode != self.eval_style_mode:\n                mmengine.print_log(\n                    f'Switch to evaluation style mode: {self.eval_style_mode}')\n            self.default_style_mode = self.eval_style_mode\n\n        return super(MSStyleGANv2Generator, self).train(mode)\n\n    def make_injected_noise(self, chosen_scale=0):\n        \"\"\"make noises that will be injected into feature maps.\n\n        Args:\n            chosen_scale (int, optional): Chosen scale. Defaults to 0.\n\n        Returns:\n            list[Tensor]: List of layer-wise noise tensor.\n        \"\"\"\n        device = get_module_device(self)\n\n        base_scale = 2**2 + chosen_scale\n\n        noises = [torch.randn(1, 1, base_scale, base_scale, device=device)]\n\n        for i in range(3, self.log_size + 1):\n            for n in range(2):\n                _pad = 0\n                if self.no_pad and not self.up_after_conv and n == 0:\n                    _pad = 2\n                noises.append(\n                    torch.randn(\n                        1,\n                        1,\n                        base_scale * 2**(i - 2) + _pad,\n                        base_scale * 2**(i - 2) + _pad,\n                        device=device))\n\n        return noises\n\n    def get_mean_latent(self, num_samples=4096, **kwargs):\n        \"\"\"Get mean latent of W space in this generator.\n\n        Args:\n            num_samples (int, optional): Number of sample times. Defaults\n                to 4096.\n\n        Returns:\n            Tensor: Mean latent of this generator.\n        \"\"\"\n        return get_mean_latent(self, num_samples, **kwargs)\n\n    def style_mixing(self,\n                     n_source,\n                     n_target,\n                     inject_index=1,\n                     truncation_latent=None,\n                     truncation=0.7,\n                     chosen_scale=0):\n        \"\"\"Generating style mixing images.\n\n        Args:\n            n_source (int): Number of source images.\n            n_target (int): Number of target images.\n            inject_index (int, optional): Index from which replace with source\n                latent. Defaults to 1.\n            truncation_latent (torch.Tensor, optional): Mean truncation latent.\n                Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            curr_scale (int): Current image scale. Defaults to -1.\n            transition_weight (float, optional): The weight used in resolution\n                transition. Defaults to 1.0.\n            chosen_scale (int, optional): Chosen scale. Defaults to 0.\n        Returns:\n            torch.Tensor: Table of style-mixing images.\n        \"\"\"\n        return style_mixing(\n            self,\n            n_source=n_source,\n            n_target=n_target,\n            inject_index=inject_index,\n            truncation_latent=truncation_latent,\n            truncation=truncation,\n            style_channels=self.style_channels,\n            chosen_scale=chosen_scale)\n\n    def forward(self,\n                styles,\n                num_batches=-1,\n                return_noise=False,\n                return_latents=False,\n                inject_index=None,\n                truncation=1,\n                truncation_latent=None,\n                input_is_latent=False,\n                injected_noise=None,\n                randomize_noise=True,\n                chosen_scale=0):\n        \"\"\"Forward function.\n\n        This function has been integrated with the truncation trick. Please\n        refer to the usage of `truncation` and `truncation_latent`.\n\n        Args:\n            styles (torch.Tensor | list[torch.Tensor] | callable | None): In\n                StyleGAN2, you can provide noise tensor or latent tensor. Given\n                a list containing more than one noise or latent tensors, style\n                mixing trick will be used in training. Of course, You can\n                directly give a batch of noise through a ``torch.Tensor`` or\n                offer a callable function to sample a batch of noise data.\n                Otherwise, the ``None`` indicates to use the default noise\n                sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            return_latents (bool, optional): If True, ``latent`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            inject_index (int | None, optional): The index number for mixing\n                style codes. Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            truncation_latent (torch.Tensor, optional): Mean truncation latent.\n                Defaults to None.\n            input_is_latent (bool, optional): If `True`, the input tensor is\n                the latent tensor. Defaults to False.\n            injected_noise (torch.Tensor | None, optional): Given a tensor, the\n                random noise will be fixed as this input injected noise.\n                Defaults to None.\n            randomize_noise (bool, optional): If `False`, images are sampled\n                with the buffered noise tensor injected to the style conv\n                block. Defaults to True.\n\n        Returns:\n            torch.Tensor | dict: Generated image tensor or dictionary \\\n                containing more data.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(styles, torch.Tensor):\n            assert styles.shape[1] == self.style_channels\n            styles = [styles]\n        elif mmengine.is_seq_of(styles, torch.Tensor):\n            for t in styles:\n                assert t.shape[-1] == self.style_channels\n        # receive a noise generator and sample noise.\n        elif callable(styles):\n            device = get_module_device(self)\n            noise_generator = styles\n            assert num_batches > 0\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    noise_generator((num_batches, self.style_channels))\n                    for _ in range(2)\n                ]\n            else:\n                styles = [noise_generator((num_batches, self.style_channels))]\n            styles = [s.to(device) for s in styles]\n        # otherwise, we will adopt default noise sampler.\n        else:\n            device = get_module_device(self)\n            assert num_batches > 0 and not input_is_latent\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    torch.randn((num_batches, self.style_channels))\n                    for _ in range(2)\n                ]\n            else:\n                styles = [torch.randn((num_batches, self.style_channels))]\n            styles = [s.to(device) for s in styles]\n\n        if not input_is_latent:\n            noise_batch = styles\n            styles = [self.style_mapping(s) for s in styles]\n        else:\n            noise_batch = None\n\n        if injected_noise is None:\n            if randomize_noise:\n                injected_noise = [None] * self.num_injected_noises\n            elif chosen_scale > 0:\n                if not hasattr(self, f'injected_noise_{chosen_scale}_0'):\n                    noises_ = self.make_injected_noise(chosen_scale)\n                    for i in range(self.num_injected_noises):\n                        setattr(self, f'injected_noise_{chosen_scale}_{i}',\n                                noises_[i])\n                injected_noise = [\n                    getattr(self, f'injected_noise_{chosen_scale}_{i}')\n                    for i in range(self.num_injected_noises)\n                ]\n            else:\n                injected_noise = [\n                    getattr(self, f'injected_noise_{i}')\n                    for i in range(self.num_injected_noises)\n                ]\n        # use truncation trick\n        if truncation < 1:\n            style_t = []\n            # calculate truncation latent on the fly\n            if truncation_latent is None and not hasattr(\n                    self, 'truncation_latent'):\n                self.truncation_latent = self.get_mean_latent()\n                truncation_latent = self.truncation_latent\n            elif truncation_latent is None and hasattr(self,\n                                                       'truncation_latent'):\n                truncation_latent = self.truncation_latent\n\n            for style in styles:\n                style_t.append(truncation_latent + truncation *\n                               (style - truncation_latent))\n\n            styles = style_t\n        # no style mixing\n        if len(styles) < 2:\n            inject_index = self.num_latents\n\n            if styles[0].ndim < 3:\n                latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n\n            else:\n                latent = styles[0]\n        # style mixing\n        else:\n            if inject_index is None:\n                inject_index = random.randint(1, self.num_latents - 1)\n\n            latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n            latent2 = styles[1].unsqueeze(1).repeat(\n                1, self.num_latents - inject_index, 1)\n\n            latent = torch.cat([latent, latent2], 1)\n\n        if isinstance(chosen_scale, int):\n            chosen_scale = (chosen_scale, chosen_scale)\n\n        # 4x4 stage\n        if self.head_pos_encoding:\n            if self.interp_head:\n                out = self.head_pos_enc.make_grid2d(self.head_pos_size[0],\n                                                    self.head_pos_size[1],\n                                                    latent.size(0))\n                h_in = self.head_pos_size[0] + chosen_scale[0]\n                w_in = self.head_pos_size[1] + chosen_scale[1]\n                out = F.interpolate(\n                    out,\n                    size=(h_in, w_in),\n                    mode='bilinear',\n                    align_corners=True)\n            else:\n                out = self.head_pos_enc.make_grid2d(\n                    self.head_pos_size[0] + chosen_scale[0],\n                    self.head_pos_size[1] + chosen_scale[1], latent.size(0))\n            out = out.to(latent)\n        else:\n            out = self.constant_input(latent)\n            if chosen_scale[0] != 0 or chosen_scale[1] != 0:\n                out = F.interpolate(\n                    out,\n                    size=(out.shape[2] + chosen_scale[0],\n                          out.shape[3] + chosen_scale[1]),\n                    mode='bilinear',\n                    align_corners=True)\n\n        out = self.conv1(out, latent[:, 0], noise=injected_noise[0])\n        skip = self.to_rgb1(out, latent[:, 1])\n\n        _index = 1\n\n        # 8x8 ---> higher resolutions\n        for up_conv, conv, noise1, noise2, to_rgb in zip(\n                self.convs[::2], self.convs[1::2], injected_noise[1::2],\n                injected_noise[2::2], self.to_rgbs):\n            out = up_conv(out, latent[:, _index], noise=noise1)\n            out = conv(out, latent[:, _index + 1], noise=noise2)\n            skip = to_rgb(out, latent[:, _index + 2], skip)\n\n            _index += 2\n\n        img = skip\n\n        if return_latents or return_noise:\n            output_dict = dict(\n                fake_img=img,\n                latent=latent,\n                inject_index=inject_index,\n                noise_batch=noise_batch,\n                injected_noise=injected_noise)\n            return output_dict\n\n        return img\n"
  },
  {
    "path": "mmagic/models/editors/mspie/mspie_stylegan2_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\ntry:\n    from mmcv.ops import conv2d, conv_transpose2d\nexcept ImportError:\n    conv2d = None\n    conv_transpose2d = None\n    print('Warning: mmcv.ops.conv2d, mmcv.ops.conv_transpose2d'\n          'are not available.')\n\nfrom ..pggan import equalized_lr\nfrom ..stylegan1 import Blur, EqualLinearActModule, NoiseInjection\nfrom ..stylegan2.stylegan2_modules import _FusedBiasLeakyReLU\n\n\nclass ModulatedPEConv2d(BaseModule):\n    r\"\"\"Modulated Conv2d in StyleGANv2 with Positional Encoding (PE).\n\n    This module is modified from the ``ModulatedConv2d`` in StyleGAN2 to\n    support the experiments in: Positional Encoding as Spatial Inductive Bias\n    in GANs, CVPR'2021.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        style_channels (int): Channels for the style codes.\n        demodulate (bool, optional): Whether to adopt demodulation.\n            Defaults to True.\n        upsample (bool, optional): Whether to adopt upsampling in features.\n            Defaults to False.\n        downsample (bool, optional): Whether to adopt downsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        equalized_lr_cfg (dict | None, optional): Configs for equalized lr.\n            Defaults to dict(mode='fan_in', lr_mul=1., gain=1.).\n        style_mod_cfg (dict, optional): Configs for style modulation module.\n            Defaults to dict(bias_init=1.).\n        style_bias (float, optional): Bias value for style code.\n            Defaults to 0..\n        eps (float, optional): Epsilon value to avoid computation error.\n            Defaults to 1e-8.\n        no_pad (bool, optional): Whether to removing the padding in\n            convolution. Defaults to False.\n        deconv2conv (bool, optional): Whether to substitute the transposed conv\n            with (conv2d, upsampling). Defaults to False.\n        interp_pad (int | None, optional): The padding number of interpolation\n            pad. Defaults to None.\n        up_config (dict, optional): Upsampling config.\n            Defaults to dict(scale_factor=2, mode='nearest').\n        up_after_conv (bool, optional): Whether to adopt upsampling after\n            convolution. Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 style_channels,\n                 demodulate=True,\n                 upsample=False,\n                 downsample=False,\n                 blur_kernel=[1, 3, 3, 1],\n                 equalized_lr_cfg=dict(mode='fan_in', lr_mul=1., gain=1.),\n                 style_mod_cfg=dict(bias_init=1.),\n                 style_bias=0.,\n                 eps=1e-8,\n                 no_pad=False,\n                 deconv2conv=False,\n                 interp_pad=None,\n                 up_config=dict(scale_factor=2, mode='nearest'),\n                 up_after_conv=False):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.style_channels = style_channels\n        self.demodulate = demodulate\n        # sanity check for kernel size\n        assert isinstance(self.kernel_size,\n                          int) and (self.kernel_size >= 1\n                                    and self.kernel_size % 2 == 1)\n        self.upsample = upsample\n        self.downsample = downsample\n        self.style_bias = style_bias\n        self.eps = eps\n        self.no_pad = no_pad\n        self.deconv2conv = deconv2conv\n        self.interp_pad = interp_pad\n        self.with_interp_pad = interp_pad is not None\n        self.up_config = deepcopy(up_config)\n        self.up_after_conv = up_after_conv\n\n        # build style modulation module\n        style_mod_cfg = dict() if style_mod_cfg is None else style_mod_cfg\n\n        self.style_modulation = EqualLinearActModule(style_channels,\n                                                     in_channels,\n                                                     **style_mod_cfg)\n        # set lr_mul for conv weight\n        lr_mul_ = 1.\n        if equalized_lr_cfg is not None:\n            lr_mul_ = equalized_lr_cfg.get('lr_mul', 1.)\n        self.weight = nn.Parameter(\n            torch.randn(1, out_channels, in_channels, kernel_size,\n                        kernel_size).div_(lr_mul_))\n\n        # build blurry layer for upsampling\n        if upsample and not self.deconv2conv:\n            factor = 2\n            p = (len(blur_kernel) - factor) - (kernel_size - 1)\n            pad0 = (p + 1) // 2 + factor - 1\n            pad1 = p // 2 + 1\n            self.blur = Blur(blur_kernel, (pad0, pad1), upsample_factor=factor)\n\n        # build blurry layer for downsampling\n        if downsample:\n            factor = 2\n            p = (len(blur_kernel) - factor) + (kernel_size - 1)\n            pad0 = (p + 1) // 2\n            pad1 = p // 2\n            self.blur = Blur(blur_kernel, pad=(pad0, pad1))\n\n        # add equalized_lr hook for conv weight\n        if equalized_lr_cfg is not None:\n            equalized_lr(self, **equalized_lr_cfg)\n\n        # if `no_pad`, remove all of the padding in conv\n        self.padding = kernel_size // 2 if not no_pad else 0\n\n    def forward(self, x, style):\n        \"\"\"Forward function.\n\n        Args:\n            x ([Tensor): Input features with shape of (N, C, H, W).\n            style (Tensor): Style latent with shape of (N, C).\n\n        Returns:\n            Tensor: Output feature with shape of (N, C, H, W).\n        \"\"\"\n        n, c, h, w = x.shape\n        # process style code\n        style = self.style_modulation(style).view(n, 1, c, 1,\n                                                  1) + self.style_bias\n\n        # combine weight and style\n        weight = self.weight * style\n        if self.demodulate:\n            demod = torch.rsqrt(weight.pow(2).sum([2, 3, 4]) + self.eps)\n            weight = weight * demod.view(n, self.out_channels, 1, 1, 1)\n\n        weight = weight.view(n * self.out_channels, c, self.kernel_size,\n                             self.kernel_size)\n\n        if self.upsample and not self.deconv2conv:\n            x = x.reshape(1, n * c, h, w)\n            weight = weight.view(n, self.out_channels, c, self.kernel_size,\n                                 self.kernel_size)\n            weight = weight.transpose(1, 2).reshape(n * c, self.out_channels,\n                                                    self.kernel_size,\n                                                    self.kernel_size)\n            x = conv_transpose2d(x, weight, padding=0, stride=2, groups=n)\n            x = x.reshape(n, self.out_channels, *x.shape[-2:])\n            x = self.blur(x)\n        elif self.upsample and self.deconv2conv:\n            if self.up_after_conv:\n                x = x.reshape(1, n * c, h, w)\n                x = conv2d(x, weight, padding=self.padding, groups=n)\n                x = x.view(n, self.out_channels, *x.shape[2:4])\n\n            if self.with_interp_pad:\n                h_, w_ = x.shape[-2:]\n                up_cfg_ = deepcopy(self.up_config)\n                up_scale = up_cfg_.pop('scale_factor')\n                size_ = (h_ * up_scale + self.interp_pad,\n                         w_ * up_scale + self.interp_pad)\n                x = F.interpolate(x, size=size_, **up_cfg_)\n            else:\n                x = F.interpolate(x, **self.up_config)\n\n            if not self.up_after_conv:\n                h_, w_ = x.shape[-2:]\n                x = x.view(1, n * c, h_, w_)\n                x = conv2d(x, weight, padding=self.padding, groups=n)\n                x = x.view(n, self.out_channels, *x.shape[2:4])\n\n        elif self.downsample:\n            x = self.blur(x)\n            x = x.view(1, n * self.in_channels, *x.shape[-2:])\n            x = conv2d(x, weight, stride=2, padding=0, groups=n)\n            x = x.view(n, self.out_channels, *x.shape[-2:])\n        else:\n            x = x.view(1, n * c, h, w)\n            x = conv2d(x, weight, stride=1, padding=self.padding, groups=n)\n            x = x.view(n, self.out_channels, *x.shape[-2:])\n\n        return x\n\n\nclass ModulatedPEStyleConv(BaseModule):\n    \"\"\"Modulated Style Convolution with Positional Encoding.\n\n    This module is modified from the ``ModulatedStyleConv`` in StyleGAN2 to\n    support the experiments in: Positional Encoding as Spatial Inductive Bias\n    in GANs, CVPR'2021.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        style_channels (int): Channels for the style codes.\n        demodulate (bool, optional): Whether to adopt demodulation.\n            Defaults to True.\n        upsample (bool, optional): Whether to adopt upsampling in features.\n            Defaults to False.\n        downsample (bool, optional): Whether to adopt downsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        equalized_lr_cfg (dict | None, optional): Configs for equalized lr.\n            Defaults to dict(mode='fan_in', lr_mul=1., gain=1.).\n        style_mod_cfg (dict, optional): Configs for style modulation module.\n            Defaults to dict(bias_init=1.).\n        style_bias (float, optional): Bias value for style code.\n            Defaults to 0..\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 style_channels,\n                 upsample=False,\n                 blur_kernel=[1, 3, 3, 1],\n                 demodulate=True,\n                 style_mod_cfg=dict(bias_init=1.),\n                 style_bias=0.,\n                 **kwargs):\n        super().__init__()\n\n        self.conv = ModulatedPEConv2d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            style_channels,\n            demodulate=demodulate,\n            upsample=upsample,\n            blur_kernel=blur_kernel,\n            style_mod_cfg=style_mod_cfg,\n            style_bias=style_bias,\n            **kwargs)\n\n        self.noise_injector = NoiseInjection()\n        self.activate = _FusedBiasLeakyReLU(out_channels)\n\n    def forward(self, x, style, noise=None, return_noise=False):\n        \"\"\"Forward Function.\n\n        Args:\n            x ([Tensor): Input features with shape of (N, C, H, W).\n            style (Tensor): Style latent with shape of (N, C).\n            noise (Tensor, optional): Noise for injection. Defaults to None.\n            return_noise (bool, optional): Whether to return noise tensors.\n                Defaults to False.\n\n        Returns:\n            Tensor: Output features with shape of (N, C, H, W)\n        \"\"\"\n        out = self.conv(x, style)\n        if return_noise:\n            out, noise = self.noise_injector(\n                out, noise=noise, return_noise=return_noise)\n        else:\n            out = self.noise_injector(\n                out, noise=noise, return_noise=return_noise)\n\n        out = self.activate(out)\n\n        if return_noise:\n            return out, noise\n\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/mspie/pe_singan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import Config\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom ..singan import SinGAN\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module()\nclass PESinGAN(SinGAN):\n    \"\"\"Positional Encoding in SinGAN.\n\n    This modified SinGAN is used to reimplement the experiments in: Positional\n    Encoding as Spatial Inductive Bias in GANs, CVPR2021.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType],\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 num_scales: Optional[int] = None,\n                 fixed_noise_with_pad: bool = False,\n                 first_fixed_noises_ch: int = 1,\n                 iters_per_scale: int = 200,\n                 noise_weight_init: int = 0.1,\n                 lr_scheduler_args: Optional[dict] = None,\n                 test_pkl_data: Optional[str] = None,\n                 ema_confg: Optional[dict] = None):\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, num_scales,\n                         iters_per_scale, noise_weight_init, lr_scheduler_args,\n                         test_pkl_data, ema_confg)\n        self.fixed_noise_with_pad = fixed_noise_with_pad\n        self.first_fixed_noises_ch = first_fixed_noises_ch\n\n    def construct_fixed_noises(self):\n        \"\"\"Construct the fixed noises list used in SinGAN.\"\"\"\n        for i, real in enumerate(self.reals):\n            h, w = real.shape[-2:]\n            if self.fixed_noise_with_pad:\n                pad_ = self.get_module(self.generator, 'pad_head')\n                h += 2 * pad_\n                w += 2 * pad_\n            if i == 0:\n                noise = torch.randn(1, self.first_fixed_noises_ch, h,\n                                    w).to(real)\n                self.fixed_noises.append(noise)\n            else:\n                noise = torch.zeros((1, 1, h, w)).to(real)\n                self.fixed_noises.append(noise)\n"
  },
  {
    "path": "mmagic/models/editors/mspie/pe_singan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\nfrom ..singan.singan_generator import SinGANMultiScaleGenerator\nfrom ..singan.singan_modules import GeneratorBlock\n\n\n@MODELS.register_module()\nclass SinGANMSGeneratorPE(SinGANMultiScaleGenerator):\n    \"\"\"Multi-Scale Generator used in SinGAN with positional encoding.\n\n    More details can be found in: Positional Encoding as Spatial Inductive Bias\n    in GANs, CVPR'2021.\n\n    Notes:\n\n    - In this version, we adopt the interpolation function from the official\n      PyTorch APIs, which is different from the original implementation by the\n      authors. However, in our experiments, this influence can be ignored.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        num_scales (int): The number of scales/stages in generator. Note\n            that this number is counted from zero, which is the same as the\n            original paper.\n        kernel_size (int, optional): Kernel size, same as :obj:`nn.Conv2d`.\n            Defaults to 3.\n        padding (int, optional): Padding for the convolutional layer, same as\n            :obj:`nn.Conv2d`. Defaults to 0.\n        num_layers (int, optional): The number of convolutional layers in each\n            generator block. Defaults to 5.\n        base_channels (int, optional): The basic channels for convolutional\n            layers in the generator block. Defaults to 32.\n        min_feat_channels (int, optional): Minimum channels for the feature\n            maps in the generator block. Defaults to 32.\n        out_act_cfg (dict | None, optional): Configs for output activation\n            layer. Defaults to dict(type='Tanh').\n        padding_mode (str, optional): The mode of convolutional padding, same\n            as :obj:`nn.Conv2d`. Defaults to 'zero'.\n        pad_at_head (bool, optional): Whether to add padding at head.\n            Defaults to True.\n        interp_pad (bool, optional): The padding value of interpolating feature\n            maps. Defaults to False.\n        noise_with_pad (bool, optional): Whether the input fixed noises are\n            with explicit padding. Defaults to False.\n        positional_encoding (dict | None, optional): Configs for the positional\n            encoding. Defaults to None.\n        first_stage_in_channels (int | None, optional): The input channel of\n            the first generator block. If None, the first stage will adopt the\n            same input channels as other stages. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 num_scales,\n                 kernel_size=3,\n                 padding=0,\n                 num_layers=5,\n                 base_channels=32,\n                 min_feat_channels=32,\n                 out_act_cfg=dict(type='Tanh'),\n                 padding_mode='zero',\n                 pad_at_head=True,\n                 interp_pad=False,\n                 noise_with_pad=False,\n                 positional_encoding=None,\n                 first_stage_in_channels=None,\n                 **kwargs):\n        super(SinGANMultiScaleGenerator, self).__init__()\n\n        self.pad_at_head = pad_at_head\n        self.interp_pad = interp_pad\n        self.noise_with_pad = noise_with_pad\n\n        self.with_positional_encode = positional_encoding is not None\n        if self.with_positional_encode:\n            self.head_position_encode = MODELS.build(positional_encoding)\n\n        self.pad_head = int((kernel_size - 1) / 2 * num_layers)\n        self.blocks = nn.ModuleList()\n\n        self.upsample = partial(\n            F.interpolate, mode='bicubic', align_corners=True)\n\n        for scale in range(num_scales + 1):\n            base_ch = min(base_channels * pow(2, int(np.floor(scale / 4))),\n                          128)\n            min_feat_ch = min(\n                min_feat_channels * pow(2, int(np.floor(scale / 4))), 128)\n\n            if scale == 0:\n                in_ch = (\n                    first_stage_in_channels\n                    if first_stage_in_channels else in_channels)\n            else:\n                in_ch = in_channels\n\n            self.blocks.append(\n                GeneratorBlock(\n                    in_channels=in_ch,\n                    out_channels=out_channels,\n                    kernel_size=kernel_size,\n                    padding=padding,\n                    num_layers=num_layers,\n                    base_channels=base_ch,\n                    min_feat_channels=min_feat_ch,\n                    out_act_cfg=out_act_cfg,\n                    padding_mode=padding_mode,\n                    **kwargs))\n\n        if padding_mode == 'zero':\n            self.noise_padding_layer = nn.ZeroPad2d(self.pad_head)\n            self.img_padding_layer = nn.ZeroPad2d(self.pad_head)\n            self.mask_padding_layer = nn.ReflectionPad2d(self.pad_head)\n        elif padding_mode == 'reflect':\n            self.noise_padding_layer = nn.ReflectionPad2d(self.pad_head)\n            self.img_padding_layer = nn.ReflectionPad2d(self.pad_head)\n            self.mask_padding_layer = nn.ReflectionPad2d(self.pad_head)\n            mmengine.print_log('Using Reflection padding', 'current')\n        else:\n            raise NotImplementedError(\n                f'Padding mode {padding_mode} is not supported')\n\n    def forward(self,\n                input_sample,\n                fixed_noises,\n                noise_weights,\n                rand_mode,\n                curr_scale,\n                num_batches=1,\n                get_prev_res=False,\n                return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            input_sample (Tensor | None): The input for generator. In the\n                original implementation, a tensor filled with zeros is adopted.\n                If None is given, we will construct it from the first fixed\n                noises.\n            fixed_noises (list[Tensor]): List of the fixed noises in SinGAN.\n            noise_weights (list[float]): List of the weights for random noises.\n            rand_mode (str): Choices from ['rand', 'recon']. In ``rand`` mode,\n                it will sample from random noises. Otherwise, the\n                reconstruction for the single image will be returned.\n            curr_scale (int): The scale for the current inference or training.\n            num_batches (int, optional): The number of batches. Defaults to 1.\n            get_prev_res (bool, optional): Whether to return results from\n                previous stages. Defaults to False.\n            return_noise (bool, optional): Whether to return noises tensor.\n                Defaults to False.\n\n        Returns:\n            Tensor | dict: Generated image tensor or dictionary containing \\\n                more data.\n        \"\"\"\n        if get_prev_res or return_noise:\n            prev_res_list = []\n            noise_list = []\n\n        if input_sample is None:\n            h, w = fixed_noises[0].shape[-2:]\n            if self.noise_with_pad:\n                h -= 2 * self.pad_head\n                w -= 2 * self.pad_head\n            input_sample = torch.zeros(\n                (num_batches, 3, h, w)).to(fixed_noises[0])\n\n        g_res = input_sample\n\n        for stage in range(curr_scale + 1):\n            if rand_mode == 'recon':\n                noise_ = fixed_noises[stage]\n            else:\n                noise_ = torch.randn(num_batches,\n                                     *fixed_noises[stage].shape[1:]).to(g_res)\n            if return_noise:\n                noise_list.append(noise_)\n\n            if self.with_positional_encode and stage == 0:\n                head_grid = self.head_position_encode(fixed_noises[0])\n                noise_ = noise_ + head_grid\n\n            # add padding at head\n            if self.pad_at_head:\n                if self.interp_pad:\n                    if self.noise_with_pad:\n                        size = noise_.shape[-2:]\n                    else:\n                        size = (noise_.size(2) + 2 * self.pad_head,\n                                noise_.size(3) + 2 * self.pad_head)\n                        noise_ = self.upsample(noise_, size)\n                    g_res_pad = self.upsample(g_res, size)\n                else:\n                    if not self.noise_with_pad:\n                        noise_ = self.noise_padding_layer(noise_)\n                    g_res_pad = self.img_padding_layer(g_res)\n            else:\n                g_res_pad = g_res\n\n            if stage == 0 and self.with_positional_encode:\n                noise = noise_ * noise_weights[stage]\n            else:\n                noise = noise_ * noise_weights[stage] + g_res_pad\n            g_res = self.blocks[stage](noise.detach(), g_res)\n\n            if get_prev_res and stage != curr_scale:\n                prev_res_list.append(g_res)\n\n            # upsample, here we use interpolation from PyTorch\n            if stage != curr_scale:\n                h_next, w_next = fixed_noises[stage + 1].shape[-2:]\n                if self.noise_with_pad:\n                    # remove the additional padding if noise with pad\n                    h_next -= 2 * self.pad_head\n                    w_next -= 2 * self.pad_head\n                g_res = self.upsample(g_res, (h_next, w_next))\n\n        if get_prev_res or return_noise:\n            output_dict = dict(\n                fake_img=g_res,\n                prev_res_list=prev_res_list,\n                noise_batch=noise_list)\n            return output_dict\n\n        return g_res\n"
  },
  {
    "path": "mmagic/models/editors/mspie/positional_encoding.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module('SPE')\n@MODELS.register_module('SPE2d')\nclass SinusoidalPositionalEmbedding(BaseModule):\n    \"\"\"Sinusoidal Positional Embedding 1D or 2D (SPE/SPE2d).\n\n    This module is a modified from:\n    https://github.com/pytorch/fairseq/blob/master/fairseq/modules/sinusoidal_positional_embedding.py # noqa\n\n    Based on the original SPE in single dimension, we implement a 2D sinusoidal\n    positional encoding (SPE2d), as introduced in Positional Encoding as\n    Spatial Inductive Bias in GANs, CVPR'2021.\n\n    Args:\n        embedding_dim (int): The number of dimensions for the positional\n            encoding.\n        padding_idx (int | list[int]): The index for the padding contents. The\n            padding positions will obtain an encoding vector filling in zeros.\n        init_size (int, optional): The initial size of the positional buffer.\n            Defaults to 1024.\n        div_half_dim (bool, optional): If true, the embedding will be divided\n            by :math:`d/2`. Otherwise, it will be divided by\n            :math:`(d/2 -1)`. Defaults to False.\n        center_shift (int | None, optional): Shift the center point to some\n            index. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 embedding_dim,\n                 padding_idx,\n                 init_size=1024,\n                 div_half_dim=False,\n                 center_shift=None):\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.padding_idx = padding_idx\n        self.div_half_dim = div_half_dim\n        self.center_shift = center_shift\n\n        self.weights = SinusoidalPositionalEmbedding.get_embedding(\n            init_size, embedding_dim, padding_idx, self.div_half_dim)\n\n        self.register_buffer('_float_tensor', torch.FloatTensor(1))\n\n        self.max_positions = int(1e5)\n\n    @staticmethod\n    def get_embedding(num_embeddings,\n                      embedding_dim,\n                      padding_idx=None,\n                      div_half_dim=False):\n        \"\"\"Build sinusoidal embeddings.\n\n        This matches the implementation in tensor2tensor, but differs slightly\n        from the description in Section 3.5 of \"Attention Is All You Need\".\n        \"\"\"\n        assert embedding_dim % 2 == 0, (\n            'In this version, we request '\n            f'embedding_dim divisible by 2 but got {embedding_dim}')\n\n        # there is a little difference from the original paper.\n        half_dim = embedding_dim // 2\n        if not div_half_dim:\n            emb = np.log(10000) / (half_dim - 1)\n        else:\n            emb = np.log(1e4) / half_dim\n        # compute exp(-log10000 / d * i)\n        emb = torch.exp(torch.arange(half_dim, dtype=torch.float) * -emb)\n        emb = torch.arange(\n            num_embeddings, dtype=torch.float).unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat([torch.sin(emb), torch.cos(emb)],\n                        dim=1).view(num_embeddings, -1)\n        if padding_idx is not None:\n            emb[padding_idx, :] = 0\n\n        return emb\n\n    def forward(self, input, **kwargs):\n        \"\"\"Input is expected to be of size [bsz x seqlen].\n\n        Returned tensor is expected to be of size  [bsz x seq_len x emb_dim]\n        \"\"\"\n        assert input.dim() == 2 or input.dim(\n        ) == 4, 'Input dimension should be 2 (1D) or 4(2D)'\n\n        if input.dim() == 4:\n            return self.make_grid2d_like(input, **kwargs)\n\n        b, seq_len = input.shape\n        max_pos = self.padding_idx + 1 + seq_len\n\n        if self.weights is None or max_pos > self.weights.size(0):\n            # recompute/expand embedding if needed\n            self.weights = SinusoidalPositionalEmbedding.get_embedding(\n                max_pos, self.embedding_dim, self.padding_idx)\n        self.weights = self.weights.to(self._float_tensor)\n\n        positions = self.make_positions(input, self.padding_idx).to(\n            self._float_tensor.device)\n\n        return self.weights.index_select(0, positions.view(-1)).view(\n            b, seq_len, self.embedding_dim).detach()\n\n    def make_positions(self, input, padding_idx):\n        \"\"\"Make position tensors.\n\n        Args:\n            input (tensor): Input tensor.\n            padding_idx (int | list[int]): The index for the padding contents.\n            The padding positions will obtain an encoding vector filling\n            in zeros.\n\n        Returns:\n            tensor: Position tensors.\n        \"\"\"\n        mask = input.ne(padding_idx).int()\n        return (torch.cumsum(mask, dim=1).type_as(mask) *\n                mask).long() + padding_idx\n\n    def make_grid2d(self, height, width, num_batches=1, center_shift=None):\n        \"\"\"Make 2-d grid mask.\n\n        Args:\n            height (int): Height of the grid.\n            width (int): Width of the grid.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 1.\n            center_shift (int | None, optional): Shift the center point to some\n                index. Defaults to None.\n\n        Returns:\n            Tensor: 2-d Grid mask.\n        \"\"\"\n        h, w = height, width\n        # if `center_shift` is not given from the outside, use\n        # `self.center_shift`\n        if center_shift is None:\n            center_shift = self.center_shift\n\n        h_shift = 0\n        w_shift = 0\n        # center shift to the input grid\n        if center_shift is not None:\n            # if h/w is even, the left center should be aligned with\n            # center shift\n            if h % 2 == 0:\n                h_left_center = h // 2\n                h_shift = center_shift - h_left_center\n            else:\n                h_center = h // 2 + 1\n                h_shift = center_shift - h_center\n\n            if w % 2 == 0:\n                w_left_center = w // 2\n                w_shift = center_shift - w_left_center\n            else:\n                w_center = w // 2 + 1\n                w_shift = center_shift - w_center\n\n        # Note that the index is started from 1 since zero will be padding idx.\n        # axis -- (b, h or w)\n        x_axis = torch.arange(1, w + 1).unsqueeze(0).repeat(num_batches,\n                                                            1) + w_shift\n        y_axis = torch.arange(1, h + 1).unsqueeze(0).repeat(num_batches,\n                                                            1) + h_shift\n\n        # emb -- (b, emb_dim, h or w)\n        x_emb = self(x_axis).transpose(1, 2)\n        y_emb = self(y_axis).transpose(1, 2)\n\n        # make grid for x/y axis\n        # Note that repeat will copy data. If use learned emb, expand may be\n        # better.\n        x_grid = x_emb.unsqueeze(2).repeat(1, 1, h, 1)\n        y_grid = y_emb.unsqueeze(3).repeat(1, 1, 1, w)\n\n        # cat grid -- (b, 2 x emb_dim, h, w)\n        grid = torch.cat([x_grid, y_grid], dim=1)\n        return grid.detach()\n\n    def make_grid2d_like(self, x, center_shift=None):\n        \"\"\"Input tensor with shape of (b, ..., h, w) Return tensor with shape\n        of (b, 2 x emb_dim, h, w)\n\n        Note that the positional embedding highly depends on the the function,\n        ``make_positions``.\n        \"\"\"\n        h, w = x.shape[-2:]\n\n        grid = self.make_grid2d(h, w, x.size(0), center_shift)\n\n        return grid.to(x)\n\n\n@MODELS.register_module('CSG2d')\n@MODELS.register_module('CSG')\n@MODELS.register_module()\nclass CatersianGrid(BaseModule):\n    \"\"\"Catersian Grid for 2d tensor.\n\n    The Catersian Grid is a common-used positional encoding in deep learning.\n    In this implementation, we follow the convention of ``grid_sample`` in\n    PyTorch. In other words, ``[-1, -1]`` denotes the left-top corner while\n    ``[1, 1]`` denotes the right-bottom corner.\n    \"\"\"\n\n    def forward(self, x, **kwargs):\n        assert x.dim() == 4\n        return self.make_grid2d_like(x, **kwargs)\n\n    def make_grid2d(self, height, width, num_batches=1, requires_grad=False):\n        h, w = height, width\n        grid_y, grid_x = torch.meshgrid(torch.arange(0, h), torch.arange(0, w))\n        grid_x = 2 * grid_x / max(float(w) - 1., 1.) - 1.\n        grid_y = 2 * grid_y / max(float(h) - 1., 1.) - 1.\n        grid = torch.stack((grid_x, grid_y), 0)\n        grid.requires_grad = requires_grad\n\n        grid = torch.unsqueeze(grid, 0)\n        grid = grid.repeat(num_batches, 1, 1, 1)\n\n        return grid\n\n    def make_grid2d_like(self, x, requires_grad=False):\n        \"\"\"Input tensor with shape of (b, ..., h, w) Return tensor with shape\n        of (b, 2 x emb_dim, h, w)\n\n        Note that the positional embedding highly depends on the the function,\n        ``make_grid2d``.\n        \"\"\"\n        h, w = x.shape[-2:]\n        grid = self.make_grid2d(h, w, x.size(0), requires_grad=requires_grad)\n\n        return grid.to(x)\n"
  },
  {
    "path": "mmagic/models/editors/nafnet/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .nafbaseline_net import NAFBaseline, NAFBaselineLocal\nfrom .nafnet_net import NAFNet, NAFNetLocal\n\n__all__ = [\n    'NAFNet',\n    'NAFNetLocal',\n    'NAFBaseline',\n    'NAFBaselineLocal',\n]\n"
  },
  {
    "path": "mmagic/models/editors/nafnet/naf_avgpool2d.py",
    "content": "# Copyright (c) 2022 megvii-model. All Rights Reserved.\n# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\n\nclass NAFAvgPool2d(BaseModule):\n    \"\"\"Average Pooling 2D used in NAFNet.\n\n    Note: this is different from the normal AvgPool2d in pytorch.\n    According to:\n    Improving Image Restoration by Revisiting Global Information Aggregation\n    statistics are aggregated in a local region for each pixel\n    rather than the global average pooling.\n    \"\"\"\n\n    def __init__(self,\n                 kernel_size=None,\n                 base_size=None,\n                 auto_pad=True,\n                 fast_imp=False,\n                 train_size=None):\n        super().__init__()\n        self.kernel_size = kernel_size\n        self.base_size = base_size\n        self.auto_pad = auto_pad\n\n        # only used for fast implementation\n        self.fast_imp = fast_imp\n        self.rs = [5, 4, 3, 2, 1]\n        self.max_r1 = self.rs[0]\n        self.max_r2 = self.rs[0]\n        self.train_size = train_size\n\n    def extra_repr(self) -> str:\n        return 'kernel_size={}, base_size={}, stride={}, fast_imp={}'.format(\n            self.kernel_size, self.base_size, self.kernel_size, self.fast_imp)\n\n    def forward(self, x):\n        if self.kernel_size is None and self.base_size:\n            train_size = self.train_size\n            if isinstance(self.base_size, int):\n                self.base_size = (self.base_size, self.base_size)\n            self.kernel_size = list(self.base_size)\n            self.kernel_size[\n                0] = x.shape[2] * self.base_size[0] // train_size[-2]\n            self.kernel_size[\n                1] = x.shape[3] * self.base_size[1] // train_size[-1]\n\n            # only used for fast implementation\n            self.max_r1 = max(1, self.rs[0] * x.shape[2] // train_size[-2])\n            self.max_r2 = max(1, self.rs[0] * x.shape[3] // train_size[-1])\n\n        if self.kernel_size[0] >= x.size(-2) and self.kernel_size[1] >= x.size(\n                -1):\n            return F.adaptive_avg_pool2d(x, 1)\n\n        if self.fast_imp:  # Non-equivalent implementation but faster\n            h, w = x.shape[2:]\n            if self.kernel_size[0] >= h and self.kernel_size[1] >= w:\n                out = F.adaptive_avg_pool2d(x, 1)\n            else:\n                r1 = [r for r in self.rs if h % r == 0][0]\n                r2 = [r for r in self.rs if w % r == 0][0]\n                # reduction_constraint\n                r1 = min(self.max_r1, r1)\n                r2 = min(self.max_r2, r2)\n                s = x[:, :, ::r1, ::r2].cumsum(dim=-1).cumsum(dim=-2)\n                n, c, h, w = s.shape\n                k1, k2 = min(h - 1, self.kernel_size[0] //\n                             r1), min(w - 1, self.kernel_size[1] // r2)\n                out = (s[:, :, :-k1, :-k2] - s[:, :, :-k1, k2:] -\n                       s[:, :, k1:, :-k2] + s[:, :, k1:, k2:]) / (\n                           k1 * k2)\n                out = torch.nn.functional.interpolate(\n                    out, scale_factor=(r1, r2))\n        else:\n            n, c, h, w = x.shape\n            s = x.cumsum(dim=-1).cumsum_(dim=-2)\n            s = torch.nn.functional.pad(s,\n                                        (1, 0, 1, 0))  # pad 0 for convenience\n            k1, k2 = min(h, self.kernel_size[0]), min(w, self.kernel_size[1])\n            s1, s2, s3, s4 = s[:, :, :-k1, :-k2], s[:, :, :-k1,\n                                                    k2:], s[:, :,\n                                                            k1:, :-k2], s[:, :,\n                                                                          k1:,\n                                                                          k2:]\n            out = s4 + s1 - s2 - s3\n            out = out / (k1 * k2)\n\n        if self.auto_pad:\n            n, c, h, w = x.shape\n            _h, _w = out.shape[2:]\n            pad2d = ((w - _w) // 2, (w - _w + 1) // 2, (h - _h) // 2,\n                     (h - _h + 1) // 2)\n            out = torch.nn.functional.pad(out, pad2d, mode='replicate')\n\n        return out\n\n\ndef replace_layers(model, base_size, train_size, fast_imp, **kwargs):\n    \"\"\"Replace all layers with AvgPool2d.\"\"\"\n    for n, m in model.named_children():\n        if len(list(m.children())) > 0:\n            # compound module, go inside it\n            replace_layers(m, base_size, train_size, fast_imp, **kwargs)\n\n        if isinstance(m, nn.AdaptiveAvgPool2d):\n            pool = NAFAvgPool2d(\n                base_size=base_size, fast_imp=fast_imp, train_size=train_size)\n            assert m.output_size == 1\n            setattr(model, n, pool)\n\n\nclass Local_Base():\n    \"\"\"Local Base class to use global average pooling.\n\n    args:\n        train_size: training image size\n    \"\"\"\n\n    def convert(self, *args, train_size, **kwargs):\n        replace_layers(self, *args, train_size=train_size, **kwargs)\n        imgs = torch.rand(train_size)\n        with torch.no_grad():\n            self.forward(imgs)\n"
  },
  {
    "path": "mmagic/models/editors/nafnet/naf_layerNorm2d.py",
    "content": "# Copyright (c) 2022 megvii-model. All Rights Reserved.\n# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom torch import nn as nn\n\n\nclass LayerNormFunction(torch.autograd.Function):\n    \"\"\"Layer normalization.\"\"\"\n\n    @staticmethod\n    def forward(ctx, x, weight, bias, eps):\n        ctx.eps = eps\n        N, C, H, W = x.size()\n        mu = x.mean(1, keepdim=True)\n        var = (x - mu).pow(2).mean(1, keepdim=True)\n        y = (x - mu) / (var + eps).sqrt()\n        ctx.save_for_backward(y, var, weight)\n        y = weight.view(1, C, 1, 1) * y + bias.view(1, C, 1, 1)\n        return y\n\n    @staticmethod\n    def backward(ctx, grad_output):\n        eps = ctx.eps\n\n        N, C, H, W = grad_output.size()\n        y, var, weight = ctx.saved_variables\n        g = grad_output * weight.view(1, C, 1, 1)\n        mean_g = g.mean(dim=1, keepdim=True)\n\n        mean_gy = (g * y).mean(dim=1, keepdim=True)\n        gx = 1. / torch.sqrt(var + eps) * (g - y * mean_gy - mean_g)\n        return gx, (grad_output * y).sum(dim=3).sum(dim=2).sum(\n            dim=0), grad_output.sum(dim=3).sum(dim=2).sum(dim=0), None\n\n\nclass LayerNorm2d(nn.Module):\n    \"\"\"Layer normalization module.\n\n    Note: This is different from the layernorm2d in pytorch.\n        The layer norm here will handle different channels respectively.\n        For more information, please refer to the issue:\n        https://github.com/megvii-research/NAFNet/issues/35\n    \"\"\"\n\n    def __init__(self, channels, eps=1e-6):\n        super(LayerNorm2d, self).__init__()\n        self.register_parameter('weight', nn.Parameter(torch.ones(channels)))\n        self.register_parameter('bias', nn.Parameter(torch.zeros(channels)))\n        self.eps = eps\n\n    def forward(self, x):\n        return LayerNormFunction.apply(x, self.weight, self.bias, self.eps)\n"
  },
  {
    "path": "mmagic/models/editors/nafnet/nafbaseline_net.py",
    "content": "# Copyright (c) 2022 megvii-model. All Rights Reserved.\n# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .naf_avgpool2d import Local_Base\nfrom .naf_layerNorm2d import LayerNorm2d\n\n\n@MODELS.register_module()\nclass NAFBaseline(BaseModule):\n    \"\"\"The original version of Baseline model in \"Simple Baseline for Image\n    Restoration\".\n\n    Args:\n        img_channels (int): Channel number of inputs.\n        mid_channels (int): Channel number of intermediate features.\n        middle_blk_num (int): Number of middle blocks.\n        enc_blk_nums (List of int): Number of blocks for each encoder.\n        dec_blk_nums (List of int): Number of blocks for each decoder.\n    \"\"\"\n\n    def __init__(self,\n                 img_channel=3,\n                 mid_channels=16,\n                 middle_blk_num=1,\n                 enc_blk_nums=[1, 1, 1, 28],\n                 dec_blk_nums=[1, 1, 1, 1],\n                 dw_expand=1,\n                 ffn_expand=2):\n        super().__init__()\n\n        self.intro = nn.Conv2d(\n            in_channels=img_channel,\n            out_channels=mid_channels,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.ending = nn.Conv2d(\n            in_channels=mid_channels,\n            out_channels=img_channel,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        self.encoders = nn.ModuleList()\n        self.decoders = nn.ModuleList()\n        self.middle_blks = nn.ModuleList()\n        self.ups = nn.ModuleList()\n        self.downs = nn.ModuleList()\n\n        chan = mid_channels\n        for num in enc_blk_nums:\n            self.encoders.append(\n                nn.Sequential(*[\n                    BaselineBlock(chan, dw_expand, ffn_expand)\n                    for _ in range(num)\n                ]))\n            self.downs.append(nn.Conv2d(chan, 2 * chan, 2, 2))\n            chan = chan * 2\n\n        self.middle_blks = \\\n            nn.Sequential(\n                *[BaselineBlock(chan, dw_expand, ffn_expand)\n                    for _ in range(middle_blk_num)]\n            )\n\n        for num in dec_blk_nums:\n            self.ups.append(\n                nn.Sequential(\n                    nn.Conv2d(chan, chan * 2, 1, bias=False),\n                    nn.PixelShuffle(2)))\n            chan = chan // 2\n            self.decoders.append(\n                nn.Sequential(*[\n                    BaselineBlock(chan, dw_expand, ffn_expand)\n                    for _ in range(num)\n                ]))\n\n        self.padder_size = 2**len(self.encoders)\n\n    def forward(self, inp):\n        \"\"\"Forward function.\n\n        args:\n            inp: input tensor image with (B, C, H, W) shape\n        \"\"\"\n        B, C, H, W = inp.shape\n        inp = self.check_image_size(inp)\n\n        x = self.intro(inp)\n\n        encs = []\n\n        for encoder, down in zip(self.encoders, self.downs):\n            x = encoder(x)\n            encs.append(x)\n            x = down(x)\n\n        x = self.middle_blks(x)\n\n        for decoder, up, enc_skip in zip(self.decoders, self.ups, encs[::-1]):\n            x = up(x)\n            x = x + enc_skip\n            x = decoder(x)\n\n        x = self.ending(x)\n        x = x + inp\n\n        return x[:, :, :H, :W]\n\n    def check_image_size(self, x):\n        \"\"\"Check image size and pad images so that it has enough dimension do\n        downsample.\n\n        args:\n            x: input tensor image with (B, C, H, W) shape.\n        \"\"\"\n        _, _, h, w = x.size()\n        mod_pad_h = (self.padder_size -\n                     h % self.padder_size) % self.padder_size\n        mod_pad_w = (self.padder_size -\n                     w % self.padder_size) % self.padder_size\n        x = F.pad(x, (0, mod_pad_w, 0, mod_pad_h))\n        return x\n\n\n@MODELS.register_module()\nclass NAFBaselineLocal(Local_Base, NAFBaseline):\n    \"\"\"The original version of Baseline model in \"Simple Baseline for Image\n    Restoration\".\n\n    Args:\n        img_channels (int): Channel number of inputs.\n        mid_channels (int): Channel number of intermediate features.\n        middle_blk_num (int): Number of middle blocks.\n        enc_blk_nums (List of int): Number of blocks for each encoder.\n        dec_blk_nums (L`ist of int): Number of blocks for each decoder.\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 train_size=(1, 3, 256, 256),\n                 fast_imp=False,\n                 **kwargs):\n        Local_Base.__init__(self)\n        NAFBaseline.__init__(self, *args, **kwargs)\n\n        N, C, H, W = train_size\n        base_size = (int(H * 1.5), int(W * 1.5))\n\n        self.eval()\n        with torch.no_grad():\n            self.convert(\n                base_size=base_size, train_size=train_size, fast_imp=fast_imp)\n\n\n# Components for Baseline\nclass BaselineBlock(BaseModule):\n    \"\"\"Baseline's Block in paper.\n\n    Args:\n        in_channels (int): number of channels\n        DW_Expand (int): channel expansion factor for part 1\n        FFN_Expand (int): channel expansion factor for part 2\n        drop_out_rate (float): drop out ratio\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 DW_Expand=1,\n                 FFN_Expand=2,\n                 drop_out_rate=0.):\n        super().__init__()\n        dw_channel = in_channels * DW_Expand\n        self.conv1 = nn.Conv2d(\n            in_channels=in_channels,\n            out_channels=dw_channel,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.conv2 = nn.Conv2d(\n            in_channels=dw_channel,\n            out_channels=dw_channel,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=dw_channel,\n            bias=True)\n        self.conv3 = nn.Conv2d(\n            in_channels=dw_channel,\n            out_channels=in_channels,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        # Channel Attention\n        self.se = nn.Sequential(\n            nn.AdaptiveAvgPool2d(1),\n            nn.Conv2d(\n                in_channels=dw_channel,\n                out_channels=dw_channel // 2,\n                kernel_size=1,\n                padding=0,\n                stride=1,\n                groups=1,\n                bias=True), nn.ReLU(inplace=True),\n            nn.Conv2d(\n                in_channels=dw_channel // 2,\n                out_channels=dw_channel,\n                kernel_size=1,\n                padding=0,\n                stride=1,\n                groups=1,\n                bias=True), nn.Sigmoid())\n\n        # GELU\n        self.gelu = nn.GELU()\n\n        ffn_channel = FFN_Expand * in_channels\n        self.conv4 = nn.Conv2d(\n            in_channels=in_channels,\n            out_channels=ffn_channel,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.conv5 = nn.Conv2d(\n            in_channels=ffn_channel,\n            out_channels=in_channels,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        self.norm1 = LayerNorm2d(in_channels)\n        self.norm2 = LayerNorm2d(in_channels)\n\n        self.dropout1 = nn.Dropout(\n            drop_out_rate) if drop_out_rate > 0. else nn.Identity()\n        self.dropout2 = nn.Dropout(\n            drop_out_rate) if drop_out_rate > 0. else nn.Identity()\n\n        self.beta = nn.Parameter(\n            torch.zeros((1, in_channels, 1, 1)), requires_grad=True)\n        self.gamma = nn.Parameter(\n            torch.zeros((1, in_channels, 1, 1)), requires_grad=True)\n\n    def forward(self, inp):\n        \"\"\"Forward Function.\n\n        Args:\n            inp: input tensor image\n        \"\"\"\n        x = inp\n\n        x = self.norm1(x)\n\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.gelu(x)\n        x = x * self.se(x)\n        x = self.conv3(x)\n\n        x = self.dropout1(x)\n\n        y = inp + x * self.beta\n\n        x = self.conv4(self.norm2(y))\n        x = self.gelu(x)\n        x = self.conv5(x)\n\n        x = self.dropout2(x)\n\n        return y + x * self.gamma\n"
  },
  {
    "path": "mmagic/models/editors/nafnet/nafnet_net.py",
    "content": "# Copyright (c) 2022 megvii-model. All Rights Reserved.\n# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .naf_avgpool2d import Local_Base\nfrom .naf_layerNorm2d import LayerNorm2d\n\n\n@MODELS.register_module()\nclass NAFNet(BaseModule):\n    \"\"\"NAFNet.\n\n    The original version of NAFNet in \"Simple Baseline for Image Restoration\".\n\n    Args:\n        img_channels (int): Channel number of inputs.\n        mid_channels (int): Channel number of intermediate features.\n        middle_blk_num (int): Number of middle blocks.\n        enc_blk_nums (List of int): Number of blocks for each encoder.\n        dec_blk_nums (List of int): Number of blocks for each decoder.\n    \"\"\"\n\n    def __init__(self,\n                 img_channels=3,\n                 mid_channels=16,\n                 middle_blk_num=1,\n                 enc_blk_nums=[],\n                 dec_blk_nums=[]):\n        super().__init__()\n\n        self.intro = nn.Conv2d(\n            in_channels=img_channels,\n            out_channels=mid_channels,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.ending = nn.Conv2d(\n            in_channels=mid_channels,\n            out_channels=img_channels,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        self.encoders = nn.ModuleList()\n        self.decoders = nn.ModuleList()\n        self.middle_blks = nn.ModuleList()\n        self.ups = nn.ModuleList()\n        self.downs = nn.ModuleList()\n\n        chan = mid_channels\n        for num in enc_blk_nums:\n            self.encoders.append(\n                nn.Sequential(*[NAFBlock(chan) for _ in range(num)]))\n            self.downs.append(nn.Conv2d(chan, 2 * chan, 2, 2))\n            chan = chan * 2\n\n        self.middle_blks = \\\n            nn.Sequential(\n                *[NAFBlock(chan) for _ in range(middle_blk_num)]\n            )\n\n        for num in dec_blk_nums:\n            self.ups.append(\n                nn.Sequential(\n                    nn.Conv2d(chan, chan * 2, 1, bias=False),\n                    nn.PixelShuffle(2)))\n            chan = chan // 2\n            self.decoders.append(\n                nn.Sequential(*[NAFBlock(chan) for _ in range(num)]))\n\n        self.padder_size = 2**len(self.encoders)\n\n    def forward(self, inp):\n        \"\"\"Forward function.\n\n        args:\n            inp: input tensor image with (B, C, H, W) shape\n        \"\"\"\n        B, C, H, W = inp.shape\n        inp = self.check_image_size(inp)\n\n        x = self.intro(inp)\n\n        encs = []\n\n        for encoder, down in zip(self.encoders, self.downs):\n            x = encoder(x)\n            encs.append(x)\n            x = down(x)\n\n        x = self.middle_blks(x)\n\n        for decoder, up, enc_skip in zip(self.decoders, self.ups, encs[::-1]):\n            x = up(x)\n            x = x + enc_skip\n            x = decoder(x)\n\n        x = self.ending(x)\n        x = x + inp\n\n        return x[:, :, :H, :W]\n\n    def check_image_size(self, x):\n        \"\"\"Check image size and pad images so that it has enough dimension do\n        downsample.\n\n        args:\n            x: input tensor image with (B, C, H, W) shape.\n        \"\"\"\n        _, _, h, w = x.size()\n        mod_pad_h = (self.padder_size -\n                     h % self.padder_size) % self.padder_size\n        mod_pad_w = (self.padder_size -\n                     w % self.padder_size) % self.padder_size\n        x = F.pad(x, (0, mod_pad_w, 0, mod_pad_h))\n        return x\n\n\n@MODELS.register_module()\nclass NAFNetLocal(Local_Base, NAFNet):\n    \"\"\"The original version of NAFNetLocal in \"Simple Baseline for Image\n    Restoration\".\n\n    NAFNetLocal uses local average pooling modules than NAFNet.\n\n    Args:\n        img_channels (int): Channel number of inputs.\n        mid_channels (int): Channel number of intermediate features.\n        middle_blk_num (int): Number of middle blocks.\n        enc_blk_nums (List of int): Number of blocks for each encoder.\n        dec_blk_nums (List of int): Number of blocks for each decoder.\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 train_size=(1, 3, 256, 256),\n                 fast_imp=False,\n                 **kwargs):\n        Local_Base.__init__(self)\n        NAFNet.__init__(self, *args, **kwargs)\n\n        N, C, H, W = train_size\n        base_size = (int(H * 1.5), int(W * 1.5))\n\n        self.eval()\n        with torch.no_grad():\n            self.convert(\n                base_size=base_size, train_size=train_size, fast_imp=fast_imp)\n\n\n# Components for NAFNet\n\n\nclass NAFBlock(BaseModule):\n    \"\"\"NAFNet's Block in paper.\n\n    Simple gate will shrink the channel to a half.\n    To keep the number of channels,\n    it expands the channels first.\n\n    Args:\n        in_channels (int): number of channels\n        DW_Expand (int): channel expansion factor for part 1\n        FFN_Expand (int): channel expansion factor for part 2\n        drop_out_rate (float): drop out ratio\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 DW_Expand=2,\n                 FFN_Expand=2,\n                 drop_out_rate=0.):\n        super().__init__()\n\n        # Part 1\n\n        dw_channel = in_channels * DW_Expand\n        self.conv1 = nn.Conv2d(\n            in_channels=in_channels,\n            out_channels=dw_channel,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.conv2 = nn.Conv2d(\n            in_channels=dw_channel,\n            out_channels=dw_channel,\n            kernel_size=3,\n            padding=1,\n            stride=1,\n            groups=dw_channel,\n            bias=True)\n\n        # Simplified Channel Attention\n        self.sca = nn.Sequential(\n            nn.AdaptiveAvgPool2d(1),\n            nn.Conv2d(\n                in_channels=dw_channel // 2,\n                out_channels=dw_channel // 2,\n                kernel_size=1,\n                padding=0,\n                stride=1,\n                groups=1,\n                bias=True),\n        )\n\n        self.conv3 = nn.Conv2d(\n            in_channels=dw_channel // 2,\n            out_channels=in_channels,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        # Part 2\n\n        ffn_channel = FFN_Expand * in_channels\n        self.conv4 = nn.Conv2d(\n            in_channels=in_channels,\n            out_channels=ffn_channel,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n        self.conv5 = nn.Conv2d(\n            in_channels=ffn_channel // 2,\n            out_channels=in_channels,\n            kernel_size=1,\n            padding=0,\n            stride=1,\n            groups=1,\n            bias=True)\n\n        # Simple Gate\n        self.sg = SimpleGate()\n\n        # Layer Normalization\n        self.norm1 = LayerNorm2d(in_channels)\n        self.norm2 = LayerNorm2d(in_channels)\n\n        # Dropout\n        self.dropout1 = nn.Dropout(\n            drop_out_rate) if drop_out_rate > 0. else nn.Identity()\n        self.dropout2 = nn.Dropout(\n            drop_out_rate) if drop_out_rate > 0. else nn.Identity()\n\n        # Feature weight ratio\n        self.beta = nn.Parameter(\n            torch.zeros((1, in_channels, 1, 1)), requires_grad=True)\n        self.gamma = nn.Parameter(\n            torch.zeros((1, in_channels, 1, 1)), requires_grad=True)\n\n    def forward(self, inp):\n        \"\"\"Forward Function.\n\n        Args:\n            inp: input tensor image\n        \"\"\"\n        x = inp\n        # part 1\n        x = self.norm1(x)\n        x = self.conv1(x)\n        x = self.conv2(x)\n        x = self.sg(x)\n        x = x * self.sca(x)\n        x = self.conv3(x)\n\n        x = self.dropout1(x)\n        y = inp + x * self.beta\n\n        # part 2\n        x = self.norm2(y)\n        x = self.conv4(x)\n        x = self.sg(x)\n        x = self.conv5(x)\n\n        x = self.dropout2(x)\n        out = y + x * self.gamma\n\n        return out\n\n\nclass SimpleGate(BaseModule):\n    \"\"\"The Simple Gate in \"Simple Baseline for Image Restoration\".\n\n    Args:\n        x: input tensor feature map with (B, 2 * C, H, W)\n\n    Return:\n        x1 * x2\n        (where x1, x2 are two separate parts by simple split x to [B, C, H, W])\n    \"\"\"\n\n    def forward(self, x):\n        x1, x2 = x.chunk(2, dim=1)\n        return x1 * x2\n"
  },
  {
    "path": "mmagic/models/editors/pconv/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .mask_conv_module import MaskConvModule\nfrom .partial_conv import PartialConv2d\nfrom .pconv_decoder import PConvDecoder\nfrom .pconv_encoder import PConvEncoder\nfrom .pconv_encoder_decoder import PConvEncoderDecoder\nfrom .pconv_inpaintor import PConvInpaintor\n\n__all__ = [\n    'PConvEncoder', 'PConvDecoder', 'PConvEncoderDecoder', 'PConvInpaintor',\n    'MaskConvModule', 'PartialConv2d', 'MaskConvModule'\n]\n"
  },
  {
    "path": "mmagic/models/editors/pconv/mask_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmcv.cnn import ConvModule\n\n\nclass MaskConvModule(ConvModule):\n    \"\"\"Mask convolution module.\n\n    This is a simple wrapper for mask convolution like: 'partial conv'.\n    Convolutions in this module always need a mask as extra input.\n\n    Args:\n        in_channels (int): Same as nn.Conv2d.\n        out_channels (int): Same as nn.Conv2d.\n        kernel_size (int or tuple[int]): Same as nn.Conv2d.\n        stride (int or tuple[int]): Same as nn.Conv2d.\n        padding (int or tuple[int]): Same as nn.Conv2d.\n        dilation (int or tuple[int]): Same as nn.Conv2d.\n        groups (int): Same as nn.Conv2d.\n        bias (bool or str): If specified as `auto`, it will be decided by the\n            norm_cfg. Bias will be set as True if norm_cfg is None, otherwise\n            False.\n        conv_cfg (dict): Config dict for convolution layer.\n        norm_cfg (dict): Config dict for normalization layer.\n        act_cfg (dict): Config dict for activation layer, \"relu\" by default.\n        inplace (bool): Whether to use inplace mode for activation.\n        with_spectral_norm (bool): Whether use spectral norm in conv module.\n        padding_mode (str): If the `padding_mode` has not been supported by\n            current `Conv2d` in Pytorch, we will use our own padding layer\n            instead. Currently, we support ['zeros', 'circular'] with official\n            implementation and ['reflect'] with our own implementation.\n            Default: 'zeros'.\n        order (tuple[str]): The order of conv/norm/activation layers. It is a\n            sequence of \"conv\", \"norm\" and \"act\". Examples are\n            (\"conv\", \"norm\", \"act\") and (\"act\", \"conv\", \"norm\").\n    \"\"\"\n    supported_conv_list = ['PConv']\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        assert self.conv_cfg['type'] in self.supported_conv_list\n\n        self.init_weights()\n\n    def forward(self,\n                x,\n                mask=None,\n                activate=True,\n                norm=True,\n                return_mask=True):\n        \"\"\"Forward function for partial conv2d.\n\n        Args:\n            x (torch.Tensor): Tensor with shape of (n, c, h, w).\n            mask (torch.Tensor): Tensor with shape of (n, c, h, w) or\n                (n, 1, h, w). If mask is not given, the function will\n                work as standard conv2d. Default: None.\n            activate (bool): Whether use activation layer.\n            norm (bool): Whether use norm layer.\n            return_mask (bool): If True and mask is not None, the updated\n                mask will be returned. Default: True.\n\n        Returns:\n            Tensor or tuple: Result Tensor or 2-tuple of\n\n                ``Tensor``: Results after partial conv.\n\n                ``Tensor``: Updated mask will be returned if mask is given \\\n                    and `return_mask` is True.\n        \"\"\"\n        for layer in self.order:\n            if layer == 'conv':\n                if self.with_explicit_padding:\n                    x = self.padding_layer(x)\n                    mask = self.padding_layer(mask)\n                if return_mask:\n                    x, updated_mask = self.conv(\n                        x, mask, return_mask=return_mask)\n                else:\n                    x = self.conv(x, mask, return_mask=False)\n            elif layer == 'norm' and norm and self.with_norm:\n                x = self.norm(x)\n            elif layer == 'act' and activate and self.with_activation:\n                x = self.activate(x)\n\n        if return_mask:\n            return x, updated_mask\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/pconv/partial_conv.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module(name='PConv')\nclass PartialConv2d(nn.Conv2d):\n    \"\"\"Implementation for partial convolution.\n\n    Image Inpainting for Irregular Holes Using Partial Convolutions\n    [https://arxiv.org/abs/1804.07723]\n\n    Args:\n        multi_channel (bool): If True, the mask is multi-channel. Otherwise,\n            the mask is single-channel.\n        eps (float): Need to be changed for mixed precision training.\n            For mixed precision training, you need change 1e-8 to 1e-6.\n    \"\"\"\n\n    def __init__(self, *args, multi_channel=False, eps=1e-8, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        # whether the mask is multi-channel or not\n        self.multi_channel = multi_channel\n        self.eps = eps\n\n        if self.multi_channel:\n            out_channels, in_channels = self.out_channels, self.in_channels\n        else:\n            out_channels, in_channels = 1, 1\n\n        self.register_buffer(\n            'weight_mask_updater',\n            torch.ones(out_channels, in_channels, self.kernel_size[0],\n                       self.kernel_size[1]))\n\n        self.mask_kernel_numel = np.prod(self.weight_mask_updater.shape[1:4])\n        self.mask_kernel_numel = (self.mask_kernel_numel).item()\n\n    def forward(self, input, mask=None, return_mask=True):\n        \"\"\"Forward function for partial conv2d.\n\n        Args:\n            input (torch.Tensor): Tensor with shape of (n, c, h, w).\n            mask (torch.Tensor): Tensor with shape of (n, c, h, w) or\n                (n, 1, h, w). If mask is not given, the function will\n                work as standard conv2d. Default: None.\n            return_mask (bool): If True and mask is not None, the updated\n                mask will be returned. Default: True.\n\n        Returns:\n            torch.Tensor : Results after partial conv.\\\n            torch.Tensor : Updated mask will be returned if mask is given and \\\n                ``return_mask`` is True.\n        \"\"\"\n        assert input.dim() == 4\n        if mask is not None:\n            assert mask.dim() == 4\n            if self.multi_channel:\n                assert mask.shape[1] == input.shape[1]\n            else:\n                assert mask.shape[1] == 1\n\n        # update mask and compute mask ratio\n        if mask is not None:\n            with torch.no_grad():\n\n                updated_mask = F.conv2d(\n                    mask,\n                    self.weight_mask_updater,\n                    bias=None,\n                    stride=self.stride,\n                    padding=self.padding,\n                    dilation=self.dilation)\n                mask_ratio = self.mask_kernel_numel / (updated_mask + self.eps)\n\n                updated_mask = torch.clamp(updated_mask, 0, 1)\n                mask_ratio = mask_ratio * updated_mask\n\n        # standard conv2d\n        if mask is not None:\n            input = input * mask\n        raw_out = super().forward(input)\n\n        if mask is not None:\n            if self.bias is None:\n                output = raw_out * mask_ratio\n            else:\n                # compute new bias when mask is given\n                bias_view = self.bias.view(1, self.out_channels, 1, 1)\n                output = (raw_out - bias_view) * mask_ratio + bias_view\n                output = output * updated_mask\n        else:\n            output = raw_out\n\n        if return_mask and mask is not None:\n            return output, updated_mask\n\n        return output\n"
  },
  {
    "path": "mmagic/models/editors/pconv/pconv_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .mask_conv_module import MaskConvModule\n\n\n@MODELS.register_module()\nclass PConvDecoder(BaseModule):\n    \"\"\"Decoder with partial conv.\n\n    About the details for this architecture, pls see:\n    Image Inpainting for Irregular Holes Using Partial Convolutions\n\n    Args:\n        num_layers (int): The number of convolutional layers. Default: 7.\n        interpolation (str): The upsample mode. Default: 'nearest'.\n        conv_cfg (dict): Config for convolution module. Default:\n            {'type': 'PConv', 'multi_channel': True}.\n        norm_cfg (dict): Config for norm layer. Default:\n            {'type': 'BN'}.\n    \"\"\"\n\n    def __init__(self,\n                 num_layers=7,\n                 interpolation='nearest',\n                 conv_cfg=dict(type='PConv', multi_channel=True),\n                 norm_cfg=dict(type='BN')):\n        super().__init__()\n        self.num_layers = num_layers\n        self.interpolation = interpolation\n\n        for i in range(4, num_layers):\n            name = f'dec{i+1}'\n            self.add_module(\n                name,\n                MaskConvModule(\n                    512 + 512,\n                    512,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2)))\n\n        self.dec4 = MaskConvModule(\n            512 + 256,\n            256,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n\n        self.dec3 = MaskConvModule(\n            256 + 128,\n            128,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n\n        self.dec2 = MaskConvModule(\n            128 + 64,\n            64,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n\n        self.dec1 = MaskConvModule(\n            64 + 3,\n            3,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=None,\n            act_cfg=None)\n\n    def forward(self, input_dict):\n        \"\"\"Forward Function.\n\n        Args:\n            input_dict (dict | torch.Tensor): Input dict with middle features\n                or torch.Tensor.\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h, w).\n        \"\"\"\n        hidden_feats = input_dict['hidden_feats']\n        hidden_masks = input_dict['hidden_masks']\n        h_key = 'h{:d}'.format(self.num_layers)\n        h, h_mask = hidden_feats[h_key], hidden_masks[h_key]\n\n        for i in range(self.num_layers, 0, -1):\n            enc_h_key = f'h{i-1}'\n            dec_l_key = f'dec{i}'\n\n            h = F.interpolate(h, scale_factor=2, mode=self.interpolation)\n            h_mask = F.interpolate(\n                h_mask, scale_factor=2, mode=self.interpolation)\n\n            h = torch.cat([h, hidden_feats[enc_h_key]], dim=1)\n            h_mask = torch.cat([h_mask, hidden_masks[enc_h_key]], dim=1)\n\n            h, h_mask = getattr(self, dec_l_key)(h, h_mask)\n\n        return h, h_mask\n"
  },
  {
    "path": "mmagic/models/editors/pconv/pconv_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import BaseModule\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.models.editors.pconv.mask_conv_module import MaskConvModule\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass PConvEncoder(BaseModule):\n    \"\"\"Encoder with partial conv.\n\n    About the details for this architecture, pls see:\n    Image Inpainting for Irregular Holes Using Partial Convolutions\n\n    Args:\n        in_channels (int): The number of input channels. Default: 3.\n        num_layers (int): The number of convolutional layers. Default: 7.\n        conv_cfg (dict): Config for convolution module. Default:\n            {'type': 'PConv', 'multi_channel': True}.\n        norm_cfg (dict): Config for norm layer. Default:\n            {'type': 'BN'}.\n        norm_eval (bool): Whether to set norm layers to eval mode, namely,\n            freeze running stats (mean and var). Note: Effective on Batch Norm\n            and its variants only. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=3,\n                 num_layers=7,\n                 conv_cfg=dict(type='PConv', multi_channel=True),\n                 norm_cfg=dict(type='BN', requires_grad=True),\n                 norm_eval=False):\n        super().__init__()\n        self.num_layers = num_layers\n        self.norm_eval = norm_eval\n\n        self.enc1 = MaskConvModule(\n            in_channels,\n            64,\n            kernel_size=7,\n            stride=2,\n            padding=3,\n            conv_cfg=conv_cfg,\n            norm_cfg=None,\n            act_cfg=dict(type='ReLU'))\n\n        self.enc2 = MaskConvModule(\n            64,\n            128,\n            kernel_size=5,\n            stride=2,\n            padding=2,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='ReLU'))\n\n        self.enc3 = MaskConvModule(\n            128,\n            256,\n            kernel_size=5,\n            stride=2,\n            padding=2,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='ReLU'))\n\n        self.enc4 = MaskConvModule(\n            256,\n            512,\n            kernel_size=3,\n            stride=2,\n            padding=1,\n            conv_cfg=conv_cfg,\n            norm_cfg=norm_cfg,\n            act_cfg=dict(type='ReLU'))\n\n        for i in range(4, num_layers):\n            name = f'enc{i+1}'\n            self.add_module(\n                name,\n                MaskConvModule(\n                    512,\n                    512,\n                    kernel_size=3,\n                    stride=2,\n                    padding=1,\n                    conv_cfg=conv_cfg,\n                    norm_cfg=norm_cfg,\n                    act_cfg=dict(type='ReLU')))\n\n    def train(self, mode=True):\n        \"\"\"Set BatchNorm modules in the model to evaluation mode.\"\"\"\n        super().train(mode)\n        if mode and self.norm_eval:\n            for m in self.modules():\n                # trick: eval have effect on BatchNorm only\n                if isinstance(m, _BatchNorm):\n                    m.eval()\n\n    def forward(self, x, mask):\n        \"\"\"Forward function for partial conv encoder.\n\n        Args:\n            x (torch.Tensor): Masked image with shape (n, c, h, w).\n            mask (torch.Tensor): Mask tensor with shape (n, c, h, w).\n\n        Returns:\n            dict: Contains the results and middle level features in this \\\n                module. `hidden_feats` contain the middle feature maps and \\\n                `hidden_masks` store updated masks.\n        \"\"\"\n        # dict for hidden layers of main information flow\n        hidden_feats = {}\n        # dict for hidden layers of mask information flow\n        hidden_masks = {}\n\n        hidden_feats['h0'], hidden_masks['h0'] = x, mask\n        h_key_prev = 'h0'\n\n        for i in range(1, self.num_layers + 1):\n            l_key = f'enc{i}'\n            h_key = f'h{i}'\n            hidden_feats[h_key], hidden_masks[h_key] = getattr(self, l_key)(\n                hidden_feats[h_key_prev], hidden_masks[h_key_prev])\n            h_key_prev = h_key\n        outputs = dict(\n            out=hidden_feats[f'h{self.num_layers}'],\n            hidden_feats=hidden_feats,\n            hidden_masks=hidden_masks)\n\n        return outputs\n"
  },
  {
    "path": "mmagic/models/editors/pconv/pconv_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass PConvEncoderDecoder(BaseModule):\n    \"\"\"Encoder-Decoder with partial conv module.\n\n    Args:\n        encoder (dict): Config of the encoder.\n        decoder (dict): Config of the decoder.\n    \"\"\"\n\n    def __init__(self, encoder, decoder):\n        super().__init__()\n        self.encoder = MODELS.build(encoder)\n        self.decoder = MODELS.build(decoder)\n\n        # support fp16\n        self.fp16_enabled = False\n\n    def forward(self, x, mask_in):\n        \"\"\"Forward Function.\n\n        Args:\n            x (torch.Tensor): Input tensor with shape of (n, c, h, w).\n            mask_in (torch.Tensor): Input tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Output tensor with shape of (n, c, h', w').\n        \"\"\"\n        enc_outputs = self.encoder(x, mask_in)\n        x, final_mask = self.decoder(enc_outputs)\n\n        return x, final_mask\n"
  },
  {
    "path": "mmagic/models/editors/pconv/pconv_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List\n\nfrom mmagic.models.base_models import OneStageInpaintor\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass PConvInpaintor(OneStageInpaintor):\n    \"\"\"Inpaintor for Partial Convolution method.\n\n    This inpaintor is implemented according to the paper: Image inpainting for\n    irregular holes using partial convolutions\n    \"\"\"\n\n    def forward_tensor(self, inputs, data_samples):\n        \"\"\"Forward function in tensor mode.\n\n        Args:\n            inputs (torch.Tensor): Input tensor.\n            data_sample (dict): Dict contains data sample.\n\n        Returns:\n            dict: Dict contains output results.\n        \"\"\"\n\n        masked_img = inputs  # N,3,H,W\n        masks = data_samples.mask\n        masks = 1. - masks\n        masks = masks.repeat(1, 3, 1, 1)\n        fake_reses, _ = self.generator(masked_img, masks)\n        fake_imgs = fake_reses * (1. - masks) + masked_img * masks\n        return fake_reses, fake_imgs\n\n    def train_step(self, data: List[dict], optim_wrapper):\n        \"\"\"Train step function.\n\n        In this function, the inpaintor will finish the train step following\n        the pipeline:\n\n            1. get fake res/image\n            2. optimize discriminator (if have)\n            3. optimize generator\n\n        If `self.train_cfg.disc_step > 1`, the train step will contain multiple\n        iterations for optimizing discriminator with different input data and\n        only one iteration for optimizing generator after `disc_step`\n        iterations for discriminator.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (dict[torch.optim.Optimizer]): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of \\\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data, True)\n        batch_inputs, data_samples = data['inputs'], data['data_samples']\n        log_vars = {}\n\n        masked_img = batch_inputs  # float\n        gt_img = data_samples.gt_img\n        mask = data_samples.mask\n        mask = mask.float()\n\n        mask_input = mask.expand_as(gt_img)\n        mask_input = 1. - mask_input\n\n        fake_res, final_mask = self.generator(masked_img, mask_input)\n        fake_img = gt_img * (1. - mask) + fake_res * mask\n\n        results, g_losses = self.generator_loss(fake_res, fake_img, gt_img,\n                                                mask, masked_img)\n        loss_g_, log_vars_g = self.parse_losses(g_losses)\n        log_vars.update(log_vars_g)\n        optim_wrapper.zero_grad()\n        optim_wrapper.backward(loss_g_)\n        optim_wrapper.step()\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/pggan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .pggan import ProgressiveGrowingGAN\nfrom .pggan_discriminator import PGGANDiscriminator\nfrom .pggan_generator import PGGANGenerator\nfrom .pggan_modules import (EqualizedLR, EqualizedLRConvDownModule,\n                            EqualizedLRConvModule, EqualizedLRConvUpModule,\n                            EqualizedLRLinearModule, MiniBatchStddevLayer,\n                            PGGANNoiseTo2DFeat, PixelNorm, equalized_lr)\n\n__all__ = [\n    'ProgressiveGrowingGAN', 'EqualizedLR', 'equalized_lr',\n    'EqualizedLRConvModule', 'EqualizedLRLinearModule',\n    'EqualizedLRConvUpModule', 'EqualizedLRConvDownModule', 'PixelNorm',\n    'MiniBatchStddevLayer', 'PGGANNoiseTo2DFeat', 'PGGANGenerator',\n    'PGGANDiscriminator'\n]\n"
  },
  {
    "path": "mmagic/models/editors/pggan/pggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.autograd as autograd\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\nfrom mmengine.dist import get_world_size\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, SampleList\nfrom ...base_models import BaseGAN\nfrom ...utils import get_valid_num_batches, set_requires_grad\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module('PGGAN')\n@MODELS.register_module()\nclass ProgressiveGrowingGAN(BaseGAN):\n    \"\"\"Progressive Growing Unconditional GAN.\n\n    In this GAN model, we implement progressive growing training schedule,\n    which is proposed in Progressive Growing of GANs for improved Quality,\n    Stability and Variation, ICLR 2018.\n\n    We highly recommend to use ``GrowScaleImgDataset`` for saving computational\n    load in data pre-processing.\n\n    Notes for **using PGGAN**:\n\n    #. In official implementation, Tero uses gradient penalty with\n       ``norm_mode=\"HWC\"``\n    #. We do not implement ``minibatch_repeats`` where has been used in\n       official Tensorflow implementation.\n\n    Notes for resuming progressive growing GANs:\n    Users should specify the ``prev_stage`` in ``train_cfg``. Otherwise, the\n    model is possible to reset the optimizer status, which will bring\n    inferior performance. For example, if your model is resumed from the\n    `256` stage, you should set ``train_cfg=dict(prev_stage=256)``.\n\n    Args:\n        generator (dict): Config for generator.\n        discriminator (dict): Config for discriminator.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 discriminator,\n                 data_preprocessor,\n                 nkimgs_per_scale,\n                 noise_size=None,\n                 interp_real=None,\n                 transition_kimgs: int = 600,\n                 prev_stage: int = 0,\n                 ema_config: Optional[Dict] = None):\n        super().__init__(generator, discriminator, data_preprocessor, 1, 1,\n                         noise_size, ema_config)\n\n        # register necessary training status\n        self.register_buffer('shown_nkimg', torch.tensor(0.))\n        self.register_buffer('_curr_transition_weight', torch.tensor(1.))\n\n        if interp_real is None:\n            interp_real = dict(mode='bilinear', align_corners=True)\n        self.interp_real_to = partial(F.interpolate, **interp_real)\n\n        self.scales, self.nkimgs = [], []\n        for k, v in nkimgs_per_scale.items():\n            # support for different data types\n            if isinstance(k, str):\n                k = (int(k), int(k))\n            elif isinstance(k, int):\n                k = (k, k)\n            else:\n                assert mmengine.is_tuple_of(k, int)\n\n            # sanity check for the order of scales\n            assert len(self.scales) == 0 or k[0] > self.scales[-1][0]\n            self.scales.append(k)\n            self.nkimgs.append(v)\n\n        self.cum_nkimgs = np.cumsum(self.nkimgs)\n        self.curr_stage = 0\n        # dirty workaround for avoiding optimizer bug in resuming\n        self.prev_stage = prev_stage\n        # actually nkimgs shown at the end of per training stage\n        self._actual_nkimgs = []\n        # In each scale, transit from previous torgb layer to newer torgb layer\n        # with `transition_kimgs` imgs\n        self.transition_kimgs = transition_kimgs\n\n        # this buffer is used to resume model easily\n        self.register_buffer(\n            '_next_scale_int',\n            torch.tensor(self.scales[0][0], dtype=torch.int32))\n        # TODO: init it with the same value as `_next_scale_int`\n        # a dirty workaround for testing\n        self.register_buffer(\n            '_curr_scale_int',\n            torch.tensor(self.scales[-1][0], dtype=torch.int32))\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> SampleList:\n        \"\"\"Sample images from noises by using the generator.\n\n        Args:\n            batch_inputs (ForwardInputs): Dict containing the necessary\n                information (e.g. noise, num_batches, mode) to generate image.\n            data_samples (Optional[list]): Data samples collated by\n                :attr:`data_preprocessor`. Defaults to None.\n            mode (Optional[str]): `mode` is not used in\n                :class:`ProgressiveGrowingGAN`. Defaults to None.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        if isinstance(inputs, Tensor):\n            noise = inputs\n            curr_scale = transition_weight = None\n        else:\n            noise = inputs.get('noise', None)\n            num_batches = get_valid_num_batches(inputs, data_samples)\n            noise = self.noise_fn(noise, num_batches=num_batches)\n\n            curr_scale = inputs.get('curr_scale', None)\n            transition_weight = inputs.get('transition_weight', None)\n        num_batches = noise.shape[0]\n\n        # use `self.curr_scale` if curr_scale is None\n        if curr_scale is None:\n            # in training, 'curr_scale' will be set as attribute\n            if hasattr(self, 'curr_scale'):\n                curr_scale = self.curr_scale[0]\n            # in testing, adopt '_curr_scale_int' from buffer as testing scale\n            else:\n                curr_scale = self._curr_scale_int.item()\n\n        # use `self._curr_transition_weight` if `transition_weight` is None\n        if transition_weight is None:\n            transition_weight = self._curr_transition_weight.item()\n\n        sample_model = self._get_valid_model(inputs)\n        batch_sample_list = []\n        if sample_model in ['ema', 'orig']:\n            if sample_model == 'ema':\n                generator = self.generator_ema\n            else:\n                generator = self.generator\n            outputs = generator(\n                noise,\n                curr_scale=curr_scale,\n                transition_weight=transition_weight)\n            outputs = self.data_preprocessor.destruct(outputs, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.fake_img = outputs\n            gen_sample.sample_model = sample_model\n            gen_sample.noise = noise\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        else:  # sample model is 'ema/orig'\n            outputs_orig = self.generator(\n                noise,\n                curr_scale=curr_scale,\n                transition_weight=transition_weight)\n            outputs_ema = self.generator_ema(\n                noise,\n                curr_scale=curr_scale,\n                transition_weight=transition_weight)\n            outputs_orig = self.data_preprocessor.destruct(\n                outputs_orig, data_samples)\n            outputs_ema = self.data_preprocessor.destruct(\n                outputs_ema, data_samples)\n\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples)\n            if isinstance(inputs, dict) and 'img' in inputs:\n                gen_sample.gt_img = inputs['img']\n            gen_sample.ema = DataSample(fake_img=outputs_ema)\n            gen_sample.orig = DataSample(fake_img=outputs_orig)\n            gen_sample.noise = noise\n            gen_sample.sample_model = 'ema/orig'\n            batch_sample_list = gen_sample.split(allow_nonseq_value=True)\n\n        return batch_sample_list\n\n    def train_discriminator(self, inputs: Tensor,\n                            data_samples: List[DataSample],\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (Tensor): Inputs from current resolution training.\n            data_samples (List[DataSample]): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = inputs\n        num_batches = len(data_samples)\n        noise_batch = self.noise_fn(num_batches=num_batches)\n\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise_batch,\n                curr_scale=self.curr_scale[0],\n                transition_weight=self._curr_transition_weight,\n                return_noise=False)\n\n        disc_pred_fake = self.discriminator(\n            fake_imgs,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n        disc_pred_real = self.discriminator(\n            real_imgs,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n\n        parsed_loss, log_vars = self.disc_loss(disc_pred_fake, disc_pred_real,\n                                               fake_imgs, real_imgs)\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def disc_loss(self, disc_pred_fake: Tensor, disc_pred_real: Tensor,\n                  fake_data: Tensor, real_data: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Get disc loss. PGGAN use WGAN-GP's loss and discriminator shift\n        loss to train the discriminator.\n\n        .. math:\n            L_{D} = \\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                - \\mathbb{E}_{x\\sim{p_{data}}}D\\left\\(x\\right\\) + L_{GP} \\\\\n            L_{GP} = \\lambda\\mathbb{E}(\\Vert\\nabla_{\\tilde{x}}D(\\tilde{x})\n                \\Vert_2-1)^2 \\\\\n            \\tilde{x} = \\epsilon x + (1-\\epsilon)G(z)\n            L_{shift} =\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n            fake_data (Tensor): Generated images, used to calculate gradient\n                penalty.\n            real_data (Tensor): Real images, used to calculate gradient\n                penalty.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = disc_pred_fake.mean()\n        losses_dict['loss_disc_real'] = -disc_pred_real.mean()\n\n        # gradient penalty\n        batch_size = real_data.size(0)\n        alpha = torch.rand(batch_size, 1, 1, 1).to(real_data)\n\n        # interpolate between real_data and fake_data\n        interpolates = alpha * real_data + (1. - alpha) * fake_data\n        interpolates = autograd.Variable(interpolates, requires_grad=True)\n\n        disc_interpolates = self.discriminator(\n            interpolates,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n        gradients = autograd.grad(\n            outputs=disc_interpolates,\n            inputs=interpolates,\n            grad_outputs=torch.ones_like(disc_interpolates),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n        # norm_mode is 'HWC'\n        gradients_penalty = ((\n            gradients.reshape(batch_size, -1).norm(2, dim=1) - 1)**2).mean()\n        losses_dict['loss_gp'] = 10 * gradients_penalty\n        losses_dict['loss_disc_shift'] = 0.001 * 0.5 * (\n            disc_pred_fake**2 + disc_pred_real**2)\n\n        parsed_loss, log_vars = self.parse_losses(losses_dict)\n        return parsed_loss, log_vars\n\n    def train_generator(self, inputs: Tensor, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (Tensor): Inputs from current resolution training.\n            data_samples (List[DataSample]): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        num_batches = len(data_samples)\n        noise_batch = self.noise_fn(num_batches=num_batches)\n\n        fake_imgs = self.generator(\n            noise_batch,\n            num_batches=num_batches,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n        disc_pred_fake_g = self.discriminator(\n            fake_imgs,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake_g)\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Generator loss for PGGAN. PGGAN use WGAN's loss to train the\n        generator.\n\n        .. math:\n            L_{G} = -\\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                + L_{MSE}\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            recon_imgs (Tensor): Reconstructive images.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_vars = self.parse_losses(losses_dict)\n        return loss, log_vars\n\n    def train_step(self, data: dict, optim_wrapper: OptimWrapperDict):\n        \"\"\"Train step function.\n\n        This function implements the standard training iteration for\n        asynchronous adversarial training. Namely, in each iteration, we first\n        update discriminator and then compute loss for generator with the newly\n        updated discriminator.\n\n        As for distributed training, we use the ``reducer`` from ddp to\n        synchronize the necessary params in current computational graph.\n\n        Args:\n            data_batch (dict): Input data from dataloader.\n            optimizer (dict): Dict contains optimizer for generator and\n                discriminator.\n            ddp_reducer (:obj:`Reducer` | None, optional): Reducer from ddp.\n                It is used to prepare for ``backward()`` in ddp. Defaults to\n                None.\n            running_status (dict | None, optional): Contains necessary basic\n                information for training, e.g., iteration number. Defaults to\n                None.\n\n        Returns:\n            dict: Contains 'log_vars', 'num_samples', and 'results'.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n\n        # update current stage\n        self.curr_stage = int(\n            min(\n                sum(self.cum_nkimgs <= self.shown_nkimg.item()),\n                len(self.scales) - 1))\n        self.curr_scale = self.scales[self.curr_stage]\n        self._curr_scale_int = self._next_scale_int.clone()\n\n        if self.curr_stage != self.prev_stage:\n            self.prev_stage = self.curr_stage\n            self._actual_nkimgs.append(self.shown_nkimg.item())\n\n        data = self.data_preprocessor(data, True)\n        data_sample = data['data_samples']\n        real_imgs = data_sample.gt_img\n\n        curr_scale = str(self.curr_scale[0])\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper[\n            f'discriminator_{curr_scale}']\n        gen_optimizer_wrapper: OptimWrapper = optim_wrapper[\n            f'generator_{curr_scale}']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        # update training configs, like transition weight for torgb layers.\n        # get current transition weight for interpolating two torgb layers\n        if self.curr_stage == 0:\n            transition_weight = 1.\n        else:\n            transition_weight = (\n                self.shown_nkimg.item() -\n                self._actual_nkimgs[-1]) / self.transition_kimgs\n            # clip to [0, 1]\n            transition_weight = min(max(transition_weight, 0.), 1.)\n        self._curr_transition_weight = torch.tensor(transition_weight).to(\n            self._curr_transition_weight)\n\n        if real_imgs.shape[2:] == self.curr_scale:\n            pass\n        elif real_imgs.shape[2] >= self.curr_scale[0] and real_imgs.shape[\n                3] >= self.curr_scale[1]:\n            real_imgs = self.interp_real_to(real_imgs, size=self.curr_scale)\n        else:\n            raise RuntimeError(\n                f'The scale of real image {real_imgs.shape[2:]} is smaller '\n                f'than current scale {self.curr_scale}.')\n\n        # normal gan training process\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            log_vars = self.train_discriminator(real_imgs, data_sample,\n                                                disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    log_vars_gen = self.train_generator(\n                        real_imgs, data_sample, gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = self.gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n                # if not update buffer, copy buffer from orig model\n                if not self.generator_ema.update_buffers:\n                    self.generator_ema.sync_buffers(\n                        self.generator.module if is_model_wrapper(\n                            self.generator) else self.generator)\n            elif self.with_ema_gen:\n                # before ema, copy weights from orig\n                self.generator_ema.sync_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        # add batch size info to log_vars\n        _batch_size = real_imgs.shape[0] * get_world_size()\n        self.shown_nkimg += (_batch_size / 1000.)\n\n        log_vars.update(\n            dict(\n                shown_nkimg=self.shown_nkimg.item(),\n                curr_scale=self.curr_scale[0],\n                transition_weight=transition_weight))\n\n        # check if a new scale will be added in the next iteration\n        _curr_stage = int(\n            min(\n                sum(self.cum_nkimgs <= self.shown_nkimg.item()),\n                len(self.scales) - 1))\n        # in the next iteration, we will switch to a new scale\n        if _curr_stage != self.curr_stage:\n            # `self._next_scale_int` is updated at the end of `train_step`\n            self._next_scale_int = self._next_scale_int * 2\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/pggan/pggan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom functools import partial\n\nimport numpy as np\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .pggan_modules import (EqualizedLRConvDownModule, EqualizedLRConvModule,\n                            MiniBatchStddevLayer, PGGANDecisionHead)\n\n\n@MODELS.register_module()\nclass PGGANDiscriminator(BaseModule):\n    \"\"\"Discriminator for PGGAN.\n\n    Args:\n        in_scale (int): The scale of the input image.\n        label_size (int, optional): Size of the label vector. Defaults to\n            0.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this\n            number. Defaults to 8192.\n        max_channels (int, optional): Maximum channels for the feature\n            maps in the discriminator block. Defaults to 512.\n        in_channels (int, optional): Number of channels in input images.\n            Defaults to 3.\n        channel_decay (float, optional): Decay for channels of feature\n            maps. Defaults to 1.0.\n        mbstd_cfg (dict, optional): Configs for minibatch-stddev layer.\n            Defaults to dict(group_size=4).\n        fused_convdown (bool, optional): Whether use fused downconv.\n            Defaults to True.\n        conv_module_cfg (dict, optional): Config for the convolution\n            module used in this generator. Defaults to None.\n        fused_convdown_cfg (dict, optional): Config for the fused downconv\n            module used in this discriminator. Defaults to None.\n        fromrgb_layer_cfg (dict, optional): Config for the fromrgb layer.\n            Defaults to None.\n        downsample_cfg (dict, optional): Config for the downsampling\n            operation. Defaults to None.\n    \"\"\"\n    _default_fromrgb_cfg = dict(\n        conv_cfg=None,\n        kernel_size=1,\n        stride=1,\n        padding=0,\n        bias=True,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        norm_cfg=None,\n        order=('conv', 'act', 'norm'))\n\n    _default_conv_module_cfg = dict(\n        kernel_size=3,\n        padding=1,\n        stride=1,\n        norm_cfg=None,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n\n    _default_convdown_cfg = dict(\n        kernel_size=3,\n        padding=1,\n        stride=2,\n        norm_cfg=None,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n\n    def __init__(self,\n                 in_scale,\n                 label_size=0,\n                 base_channels=8192,\n                 max_channels=512,\n                 in_channels=3,\n                 channel_decay=1.0,\n                 mbstd_cfg=dict(group_size=4),\n                 fused_convdown=True,\n                 conv_module_cfg=None,\n                 fused_convdown_cfg=None,\n                 fromrgb_layer_cfg=None,\n                 downsample_cfg=None):\n        super().__init__()\n        self.in_scale = in_scale\n        self.in_log2_scale = int(np.log2(self.in_scale))\n        self.label_size = label_size\n        self.base_channels = base_channels\n        self.max_channels = max_channels\n        self.in_channels = in_channels\n        self.channel_decay = channel_decay\n        self.with_mbstd = mbstd_cfg is not None\n\n        self.fused_convdown = fused_convdown\n\n        self.conv_module_cfg = deepcopy(self._default_conv_module_cfg)\n        if conv_module_cfg is not None:\n            self.conv_module_cfg.update(conv_module_cfg)\n\n        if self.fused_convdown:\n            self.fused_convdown_cfg = deepcopy(self._default_convdown_cfg)\n            if fused_convdown_cfg is not None:\n                self.fused_convdown_cfg.update(fused_convdown_cfg)\n\n        self.fromrgb_layer_cfg = deepcopy(self._default_fromrgb_cfg)\n        if fromrgb_layer_cfg:\n            self.fromrgb_layer_cfg.update(fromrgb_layer_cfg)\n\n        # setup conv blocks\n        self.conv_blocks = nn.ModuleList()\n        self.fromrgb_layers = nn.ModuleList()\n\n        for s in range(2, self.in_log2_scale + 1):\n            self.fromrgb_layers.append(\n                self._get_fromrgb_layer(self.in_channels, s))\n\n            self.conv_blocks.extend(\n                self._get_convdown_block(self._num_out_channels(s - 1), s))\n\n        # setup downsample layer\n        self.downsample_cfg = deepcopy(downsample_cfg)\n        if self.downsample_cfg is None or self.downsample_cfg.get(\n                'type', None) == 'avgpool':\n            self.downsample = nn.AvgPool2d(kernel_size=2, stride=2)\n        elif self.downsample_cfg.get('type', None) in ['nearest', 'bilinear']:\n            self.downsample = partial(\n                F.interpolate,\n                mode=self.downsample_cfg.pop('type'),\n                **self.downsample_cfg)\n        else:\n            raise NotImplementedError(\n                'We have not supported the downsampling with type'\n                f' {downsample_cfg}.')\n\n        # setup minibatch stddev layer\n        if self.with_mbstd:\n            self.mbstd_layer = MiniBatchStddevLayer(**mbstd_cfg)\n            # minibatch stddev layer will concatenate an additional feature map\n            # in channel dimension.\n            decision_in_channels = self._num_out_channels(1) * 16 + 16\n        else:\n            decision_in_channels = self._num_out_channels(1) * 16\n\n        # setup decision layer\n        self.decision = PGGANDecisionHead(decision_in_channels,\n                                          self._num_out_channels(0),\n                                          1 + self.label_size)\n\n    def _num_out_channels(self, log_scale: int) -> int:\n        \"\"\"Calculate the number of output channels of the current network from\n        logarithm of current scale.\n\n        Args:\n            log_scale (int): The logarithm of the current scale.\n\n        Returns:\n            int: The number of output channels.\n        \"\"\"\n        return min(\n            int(self.base_channels / (2.0**(log_scale * self.channel_decay))),\n            self.max_channels)\n\n    def _get_fromrgb_layer(self, in_channels: int,\n                           log2_scale: int) -> nn.Module:\n        \"\"\"Get the 'fromrgb' layer from logarithm of current scale.\n\n        Args:\n            in_channels (int): The number of input channels.\n            log2_scale (int): The logarithm of the current scale.\n\n        Returns:\n            nn.Module: The built from-rgb layer.\n        \"\"\"\n        return EqualizedLRConvModule(in_channels,\n                                     self._num_out_channels(log2_scale - 1),\n                                     **self.fromrgb_layer_cfg)\n\n    def _get_convdown_block(self, in_channels: int,\n                            log2_scale: int) -> nn.Module:\n        \"\"\"Get the downsample layer from logarithm of current scale.\n\n        Args:\n            in_channels (int): The number of input channels.\n            log2_scale (int): The logarithm of the current scale.\n\n        Returns:\n            nn.Module: The built Conv layer.\n        \"\"\"\n        modules = []\n        if log2_scale == 2:\n            modules.append(\n                EqualizedLRConvModule(in_channels,\n                                      self._num_out_channels(log2_scale - 1),\n                                      **self.conv_module_cfg))\n        else:\n            modules.append(\n                EqualizedLRConvModule(in_channels,\n                                      self._num_out_channels(log2_scale - 1),\n                                      **self.conv_module_cfg))\n\n            if self.fused_convdown:\n                cfg_ = dict(downsample=dict(type='fused_pool'))\n                cfg_.update(self.fused_convdown_cfg)\n            else:\n                cfg_ = dict(downsample=self.downsample)\n                cfg_.update(self.conv_module_cfg)\n            modules.append(\n                EqualizedLRConvDownModule(\n                    self._num_out_channels(log2_scale - 1),\n                    self._num_out_channels(log2_scale - 2), **cfg_))\n        return modules\n\n    def forward(self, x, transition_weight=1., curr_scale=-1):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input image tensor.\n            transition_weight (float, optional): The weight used in resolution\n                transition. Defaults to 1.0.\n            curr_scale (int, optional): The scale for the current inference or\n                training. Defaults to -1.\n\n        Returns:\n            Tensor: Predict score for the input image.\n        \"\"\"\n        curr_log2_scale = self.in_log2_scale if curr_scale < 4 else int(\n            np.log2(curr_scale))\n\n        original_img = x\n\n        x = self.fromrgb_layers[curr_log2_scale - 2](x)\n\n        for s in range(curr_log2_scale, 2, -1):\n            x = self.conv_blocks[2 * s - 5](x)\n            x = self.conv_blocks[2 * s - 4](x)\n            if s == curr_log2_scale:\n                img_down = self.downsample(original_img)\n                y = self.fromrgb_layers[curr_log2_scale - 3](img_down)\n                x = y + transition_weight * (x - y)\n\n        if self.with_mbstd:\n            x = self.mbstd_layer(x)\n\n        x = self.decision(x)\n\n        if self.label_size > 0:\n            return x[:, :1], x[:, 1:]\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/pggan/pggan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom .pggan_modules import (EqualizedLRConvModule, EqualizedLRConvUpModule,\n                            PGGANNoiseTo2DFeat)\n\n\n@MODELS.register_module()\nclass PGGANGenerator(BaseModule):\n    \"\"\"Generator for PGGAN.\n\n    Args:\n        noise_size (int): Size of the input noise vector.\n        out_scale (int): Output scale for the generated image.\n        label_size (int, optional): Size of the label vector.\n            Defaults to 0.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this\n            number. Defaults to 8192.\n        channel_decay (float, optional): Decay for channels of feature maps.\n            Defaults to 1.0.\n        max_channels (int, optional): Maximum channels for the feature\n            maps in the generator block. Defaults to 512.\n        fused_upconv (bool, optional): Whether use fused upconv.\n            Defaults to True.\n        conv_module_cfg (dict, optional): Config for the convolution\n            module used in this generator. Defaults to None.\n        fused_upconv_cfg (dict, optional): Config for the fused upconv\n            module used in this generator. Defaults to None.\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to None.\n    \"\"\"\n    _default_fused_upconv_cfg = dict(\n        conv_cfg=dict(type='deconv'),\n        kernel_size=3,\n        stride=2,\n        padding=1,\n        bias=True,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        norm_cfg=dict(type='PixelNorm'),\n        order=('conv', 'act', 'norm'))\n    _default_conv_module_cfg = dict(\n        conv_cfg=None,\n        kernel_size=3,\n        stride=1,\n        padding=1,\n        bias=True,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        norm_cfg=dict(type='PixelNorm'),\n        order=('conv', 'act', 'norm'))\n\n    _default_upsample_cfg = dict(type='nearest', scale_factor=2)\n\n    def __init__(self,\n                 noise_size,\n                 out_scale,\n                 label_size=0,\n                 base_channels=8192,\n                 channel_decay=1.,\n                 max_channels=512,\n                 fused_upconv=True,\n                 conv_module_cfg=None,\n                 fused_upconv_cfg=None,\n                 upsample_cfg=None):\n        super().__init__()\n        self.noise_size = noise_size if noise_size else min(\n            base_channels, max_channels)\n        self.out_scale = out_scale\n        self.out_log2_scale = int(np.log2(out_scale))\n        # sanity check for the output scale\n        assert out_scale == 2**self.out_log2_scale and out_scale >= 4\n        self.label_size = label_size\n        self.base_channels = base_channels\n        self.channel_decay = channel_decay\n        self.max_channels = max_channels\n        self.fused_upconv = fused_upconv\n\n        # set conv cfg\n        self.conv_module_cfg = deepcopy(self._default_conv_module_cfg)\n        # update with customized config\n        if conv_module_cfg:\n            self.conv_module_cfg.update(conv_module_cfg)\n\n        if self.fused_upconv:\n            self.fused_upconv_cfg = deepcopy(self._default_fused_upconv_cfg)\n            # update with customized config\n            if fused_upconv_cfg:\n                self.fused_upconv_cfg.update(fused_upconv_cfg)\n\n        self.upsample_cfg = deepcopy(self._default_upsample_cfg)\n        if upsample_cfg is not None:\n            self.upsample_cfg.update(upsample_cfg)\n\n        self.noise2feat = PGGANNoiseTo2DFeat(noise_size + label_size,\n                                             self._num_out_channels(1))\n\n        self.torgb_layers = nn.ModuleList()\n        self.conv_blocks = nn.ModuleList()\n        for s in range(2, self.out_log2_scale + 1):\n            in_ch = self._num_out_channels(\n                s - 1) if s == 2 else self._num_out_channels(s - 2)\n            # setup torgb layers\n            self.torgb_layers.append(\n                self._get_torgb_layer(self._num_out_channels(s - 1)))\n            # setup upconv or conv blocks\n            self.conv_blocks.extend(self._get_upconv_block(in_ch, s))\n\n        # build upsample layer for residual path\n        self.upsample_layer = MODELS.build(self.upsample_cfg)\n\n    def _get_torgb_layer(self, in_channels: int):\n        \"\"\"Get the to-rgb layer based on `in_channels`.\n\n        Args:\n            in_channels (int): Number of input channels.\n\n        Returns:\n            nn.Module: To-rgb layer.\n        \"\"\"\n        return EqualizedLRConvModule(\n            in_channels,\n            3,\n            kernel_size=1,\n            stride=1,\n            equalized_lr_cfg=dict(gain=1),\n            bias=True,\n            norm_cfg=None,\n            act_cfg=None)\n\n    def _num_out_channels(self, log_scale: int):\n        \"\"\"Calculate the number of output channels based on logarithm of\n        current scale.\n\n        Args:\n            log_scale (int): The logarithm of the current scale.\n\n        Returns:\n            int: The current number of output channels.\n        \"\"\"\n        return min(\n            int(self.base_channels / (2.0**(log_scale * self.channel_decay))),\n            self.max_channels)\n\n    def _get_upconv_block(self, in_channels, log_scale):\n        \"\"\"Get the conv block for upsampling.\n\n        Args:\n            in_channels (int): The number of input channels.\n            log_scale (int): The logarithmic of the current scale.\n\n        Returns:\n            nn.Module: The conv block for upsampling.\n        \"\"\"\n        modules = []\n        # start 4x4 scale\n        if log_scale == 2:\n            modules.append(\n                EqualizedLRConvModule(in_channels,\n                                      self._num_out_channels(log_scale - 1),\n                                      **self.conv_module_cfg))\n        # 8x8 --> 1024x1024 scales\n        else:\n            if self.fused_upconv:\n                cfg_ = dict(upsample=dict(type='fused_nn'))\n                cfg_.update(self.fused_upconv_cfg)\n            else:\n                cfg_ = dict(upsample=self.upsample_cfg)\n                cfg_.update(self.conv_module_cfg)\n            # up + conv\n            modules.append(\n                EqualizedLRConvUpModule(in_channels,\n                                        self._num_out_channels(log_scale - 1),\n                                        **cfg_))\n            # refine conv\n            modules.append(\n                EqualizedLRConvModule(\n                    self._num_out_channels(log_scale - 1),\n                    self._num_out_channels(log_scale - 1),\n                    **self.conv_module_cfg))\n\n        return modules\n\n    def forward(self,\n                noise,\n                label=None,\n                num_batches=0,\n                return_noise=False,\n                transition_weight=1.,\n                curr_scale=-1):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            label (Tensor, optional): Label vector with shape [N, C]. Defaults\n                to None.\n            num_batches (int, optional): The number of batch size. Defaults to\n                0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            transition_weight (float, optional): The weight used in resolution\n                transition. Defaults to 1.0.\n            curr_scale (int, optional): The scale for the current inference or\n                training. Defaults to -1.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img`` and\n                ``noise_batch`` will be returned.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            # TODO: check pggan default noise type\n            noise_batch = torch.randn((num_batches, self.noise_size))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n\n        if label is not None:\n            noise_batch = torch.cat([noise_batch,\n                                     label.to(noise_batch)],\n                                    dim=1)\n\n        # noise vector to 2D feature\n        x = self.noise2feat(noise_batch)\n\n        # build current computational graph\n        curr_log2_scale = self.out_log2_scale if curr_scale < 0 else int(\n            np.log2(curr_scale))\n\n        # 4x4 scale\n        x = self.conv_blocks[0](x)\n        if curr_log2_scale <= 3:\n            out_img = last_img = self.torgb_layers[0](x)\n\n        # 8x8 and larger scales\n        for s in range(3, curr_log2_scale + 1):\n            x = self.conv_blocks[2 * s - 5](x)\n            x = self.conv_blocks[2 * s - 4](x)\n            if s + 1 == curr_log2_scale:\n                last_img = self.torgb_layers[s - 2](x)\n            elif s == curr_log2_scale:\n                out_img = self.torgb_layers[s - 2](x)\n                residual_img = self.upsample_layer(last_img)\n                out_img = residual_img + transition_weight * (\n                    out_img - residual_img)\n\n        if return_noise:\n            output = dict(\n                fake_img=out_img, noise_batch=noise_batch, label=label)\n            return output\n\n        return out_img\n"
  },
  {
    "path": "mmagic/models/editors/pggan/pggan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn.bricks import ConvModule, build_norm_layer\nfrom mmengine.model import BaseModule, normal_init\nfrom torch.nn.init import _calculate_correct_fan\n\nfrom mmagic.models.archs import AllGatherLayer\nfrom mmagic.registry import MODELS\n\n\nclass EqualizedLR:\n    r\"\"\"Equalized Learning Rate.\n\n    This trick is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    The general idea is to dynamically rescale the weight in training instead\n    of in initializing so that the variance of the responses in each layer is\n    guaranteed with some statistical properties.\n\n    Note that this function is always combined with a convolution module which\n    is initialized with :math:`\\mathcal{N}(0, 1)`.\n\n    Args:\n        name (str | optional): The name of weights. Defaults to 'weight'.\n        mode (str, optional): The mode of computing ``fan`` which is the\n            same as ``kaiming_init`` in pytorch. You can choose one from\n            ['fan_in', 'fan_out']. Defaults to 'fan_in'.\n    \"\"\"\n\n    def __init__(self, name='weight', gain=2**0.5, mode='fan_in', lr_mul=1.0):\n        self.name = name\n        self.mode = mode\n        self.gain = gain\n        self.lr_mul = lr_mul\n\n    def compute_weight(self, module):\n        \"\"\"Compute weight with equalized learning rate.\n\n        Args:\n            module (nn.Module): A module that is wrapped with equalized lr.\n\n        Returns:\n            torch.Tensor: Updated weight.\n        \"\"\"\n        weight = getattr(module, self.name + '_orig')\n        if weight.ndim == 5:\n            # weight in shape of [b, out, in, k, k]\n            fan = _calculate_correct_fan(weight[0], self.mode)\n        else:\n            assert weight.ndim <= 4\n            fan = _calculate_correct_fan(weight, self.mode)\n        weight = weight * torch.tensor(\n            self.gain, device=weight.device) * torch.sqrt(\n                torch.tensor(1. / fan, device=weight.device)) * self.lr_mul\n\n        return weight\n\n    def __call__(self, module, inputs):\n        \"\"\"Standard interface for forward pre hooks.\"\"\"\n        setattr(module, self.name, self.compute_weight(module))\n\n    @staticmethod\n    def apply(module, name, gain=2**0.5, mode='fan_in', lr_mul=1.):\n        \"\"\"Apply function.\n\n        This function is to register an equalized learning rate hook in an\n        ``nn.Module``.\n\n        Args:\n            module (nn.Module): Module to be wrapped.\n            name (str | optional): The name of weights. Defaults to 'weight'.\n            mode (str, optional): The mode of computing ``fan`` which is the\n                same as ``kaiming_init`` in pytorch. You can choose one from\n                ['fan_in', 'fan_out']. Defaults to 'fan_in'.\n\n        Returns:\n            nn.Module: Module that is registered with equalized lr hook.\n        \"\"\"\n        # sanity check for duplicated hooks.\n        for _, hook in module._forward_pre_hooks.items():\n            if isinstance(hook, EqualizedLR):\n                raise RuntimeError(\n                    'Cannot register two equalized_lr hooks on the same '\n                    f'parameter {name} in {module} module.')\n\n        fn = EqualizedLR(name, gain=gain, mode=mode, lr_mul=lr_mul)\n        weight = module._parameters[name]\n\n        delattr(module, name)\n        module.register_parameter(name + '_orig', weight)\n\n        # We still need to assign weight back as fn.name because all sorts of\n        # things may assume that it exists, e.g., when initializing weights.\n        # However, we can't directly assign as it could be an nn.Parameter and\n        # gets added as a parameter. Instead, we register weight.data as a\n        # plain attribute.\n\n        setattr(module, name, weight.data)\n        module.register_forward_pre_hook(fn)\n\n        # TODO: register load state dict hook\n\n        return fn\n\n\ndef equalized_lr(module, name='weight', gain=2**0.5, mode='fan_in', lr_mul=1.):\n    r\"\"\"Equalized Learning Rate.\n\n    This trick is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    The general idea is to dynamically rescale the weight in training instead\n    of in initializing so that the variance of the responses in each layer is\n    guaranteed with some statistical properties.\n\n    Note that this function is always combined with a convolution module which\n    is initialized with :math:`\\mathcal{N}(0, 1)`.\n\n    Args:\n        module (nn.Module): Module to be wrapped.\n        name (str | optional): The name of weights. Defaults to 'weight'.\n        mode (str, optional): The mode of computing ``fan`` which is the\n            same as ``kaiming_init`` in pytorch. You can choose one from\n            ['fan_in', 'fan_out']. Defaults to 'fan_in'.\n\n    Returns:\n        nn.Module: Module that is registered with equalized lr hook.\n    \"\"\"\n    EqualizedLR.apply(module, name, gain=gain, mode=mode, lr_mul=lr_mul)\n\n    return module\n\n\ndef pixel_norm(x, eps=1e-6):\n    \"\"\"Pixel Normalization.\n\n    This normalization is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    Args:\n        x (torch.Tensor): Tensor to be normalized.\n        eps (float, optional): Epsilon to avoid dividing zero.\n            Defaults to 1e-6.\n\n    Returns:\n        torch.Tensor: Normalized tensor.\n    \"\"\"\n    if torch.__version__ >= '1.7.0':\n        norm = torch.linalg.norm(x, ord=2, dim=1, keepdim=True)\n    # support older pytorch version\n    else:\n        norm = torch.norm(x, p=2, dim=1, keepdim=True)\n    norm = norm / torch.sqrt(torch.tensor(x.shape[1]).to(x))\n\n    return x / (norm + eps)\n\n\n@MODELS.register_module()\nclass PixelNorm(BaseModule):\n    \"\"\"Pixel Normalization.\n\n    This module is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    Args:\n        eps (float, optional): Epsilon value. Defaults to 1e-6.\n    \"\"\"\n\n    _abbr_ = 'pn'\n\n    def __init__(self, in_channels=None, eps=1e-6):\n        super().__init__()\n        self.eps = eps\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Tensor to be normalized.\n\n        Returns:\n            torch.Tensor: Normalized tensor.\n        \"\"\"\n        return pixel_norm(x, self.eps)\n\n\n@MODELS.register_module()\nclass EqualizedLRConvModule(ConvModule):\n    r\"\"\"Equalized LR ConvModule.\n\n    In this module, we inherit default ``mmcv.cnn.ConvModule`` and adopt\n    equalized lr in convolution. The equalized learning rate is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    Note that, the initialization of ``self.conv`` will be overwritten as\n    :math:`\\mathcal{N}(0, 1)`.\n\n    Args:\n        equalized_lr_cfg (dict | None, optional): Config for ``EqualizedLR``.\n            If ``None``, equalized learning rate is ignored. Defaults to\n            dict(mode='fan_in').\n    \"\"\"\n\n    def __init__(self, *args, equalized_lr_cfg=dict(mode='fan_in'), **kwargs):\n        super().__init__(*args, **kwargs)\n        self.with_equalized_lr = equalized_lr_cfg is not None\n        if self.with_equalized_lr:\n            self.conv = equalized_lr(self.conv, **equalized_lr_cfg)\n            # initialize the conv weight with standard Gaussian noise.\n            self._init_conv_weights()\n\n    def _init_conv_weights(self):\n        \"\"\"Initialize conv weights as described in PGGAN.\"\"\"\n        normal_init(self.conv)\n\n\n@MODELS.register_module()\nclass EqualizedLRConvUpModule(EqualizedLRConvModule):\n    r\"\"\"Equalized LR (Upsample + Conv) Module.\n\n    In this module, we inherit ``EqualizedLRConvModule`` and adopt\n    upsampling before convolution. As for upsampling, in addition to the\n    sampling layer in MMCV, we also offer the \"fused_nn\" type. \"fused_nn\"\n    denotes fusing upsampling and convolution. The fusion is modified from\n    the official Tensorflow implementation in:\n    https://github.com/tkarras/progressive_growing_of_gans/blob/master/networks.py#L86\n\n    Args:\n        upsample (dict | None, optional): Config for upsampling operation. If\n        ``None``, upsampling is ignored. If you need a faster fused version as\n        the official PGGAN in Tensorflow, you should set it as\n        ``dict(type='fused_nn')``. Defaults to\n        ``dict(type='nearest', scale_factor=2)``.\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 upsample=dict(type='nearest', scale_factor=2),\n                 **kwargs):\n        super().__init__(*args, **kwargs)\n        self.with_upsample = upsample is not None\n        if self.with_upsample:\n            if upsample.get('type') == 'fused_nn':\n                assert isinstance(self.conv, nn.ConvTranspose2d)\n                self.conv.register_forward_pre_hook(\n                    EqualizedLRConvUpModule.fused_nn_hook)\n            else:\n                self.upsample_layer = MODELS.build(upsample)\n\n    def forward(self, x, **kwargs):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        if hasattr(self, 'upsample_layer'):\n            x = self.upsample_layer(x)\n        return super().forward(x, **kwargs)\n\n    @staticmethod\n    def fused_nn_hook(module, inputs):\n        \"\"\"Standard interface for forward pre hooks.\"\"\"\n        weight = module.weight\n        # pad the last two dimensions\n        weight = F.pad(weight, (1, 1, 1, 1))\n        weight = weight[..., 1:, 1:] + weight[..., 1:, :-1] + weight[\n            ..., :-1, 1:] + weight[..., :-1, :-1]\n        module.weight = weight\n\n\n@MODELS.register_module()\nclass EqualizedLRConvDownModule(EqualizedLRConvModule):\n    r\"\"\"Equalized LR (Conv + Downsample)  Module.\n\n    In this module, we inherit ``EqualizedLRConvModule`` and adopt\n    downsampling after convolution. As for downsampling, we provide two modes\n    of \"avgpool\" and \"fused_pool\". \"avgpool\" denotes the commonly used average\n    pooling operation, while \"fused_pool\" represents fusing downsampling and\n    convolution. The fusion is modified from the official Tensorflow\n    implementation in:\n    https://github.com/tkarras/progressive_growing_of_gans/blob/master/networks.py#L109\n\n\n    Args:\n        downsample (dict | None, optional): Config for downsampling operation.\n            If ``None``, downsampling is ignored. Currently, we support the\n            types of [\"avgpool\", \"fused_pool\"]. Defaults to\n            dict(type='fused_pool').\n    \"\"\"\n\n    def __init__(self, *args, downsample=dict(type='fused_pool'), **kwargs):\n        super().__init__(*args, **kwargs)\n        downsample_cfg = deepcopy(downsample)\n        self.with_downsample = downsample is not None\n        if self.with_downsample:\n            type_ = downsample_cfg.pop('type')\n            if type_ == 'avgpool':\n                self.downsample = nn.AvgPool2d(2, 2)\n            elif type_ == 'fused_pool':\n                self.conv.register_forward_pre_hook(\n                    EqualizedLRConvDownModule.fused_avgpool_hook)\n            elif callable(downsample):\n                self.downsample = downsample\n            else:\n                raise NotImplementedError(\n                    'Currently, we only support [\"avgpool\", \"fused_pool\"] as '\n                    f'the type of downsample, but got {type_} instead.')\n\n    def forward(self, x, **kwargs):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Normalized tensor.\n        \"\"\"\n        x = super().forward(x, **kwargs)\n        if hasattr(self, 'downsample'):\n            x = self.downsample(x)\n        return x\n\n    @staticmethod\n    def fused_avgpool_hook(module, inputs):\n        \"\"\"Standard interface for forward pre hooks.\"\"\"\n        weight = module.weight\n        # pad the last two dimensions\n        weight = F.pad(weight, (1, 1, 1, 1))\n        weight = (weight[..., 1:, 1:] + weight[..., 1:, :-1] +\n                  weight[..., :-1, 1:] + weight[..., :-1, :-1]) * 0.25\n        module.weight = weight\n\n\n@MODELS.register_module()\nclass EqualizedLRLinearModule(nn.Linear):\n    r\"\"\"Equalized LR LinearModule.\n\n    In this module, we adopt equalized lr in ``nn.Linear``. The equalized\n    learning rate is proposed in:\n    Progressive Growing of GANs for Improved Quality, Stability, and Variation\n\n    Note that, the initialization of ``self.weight`` will be overwritten as\n    :math:`\\mathcal{N}(0, 1)`.\n\n    Args:\n        equalized_lr_cfg (dict | None, optional): Config for ``EqualizedLR``.\n            If ``None``, equalized learning rate is ignored. Defaults to\n            dict(mode='fan_in').\n    \"\"\"\n\n    def __init__(self, *args, equalized_lr_cfg=dict(mode='fan_in'), **kwargs):\n        super().__init__(*args, **kwargs)\n        self.with_equalized_lr = equalized_lr_cfg is not None\n        if self.with_equalized_lr:\n            self.lr_mul = equalized_lr_cfg.get('lr_mul', 1.)\n        else:\n            # In fact, lr_mul will only be used in EqualizedLR for\n            # initialization\n            self.lr_mul = 1.\n        if self.with_equalized_lr:\n            equalized_lr(self, **equalized_lr_cfg)\n            self._init_linear_weights()\n\n    def _init_linear_weights(self):\n        \"\"\"Initialize linear weights as described in PGGAN.\"\"\"\n        nn.init.normal_(self.weight, 0, 1. / self.lr_mul)\n        if self.bias is not None:\n            nn.init.constant_(self.bias, 0.)\n\n\n@MODELS.register_module()\nclass PGGANNoiseTo2DFeat(BaseModule):\n\n    def __init__(self,\n                 noise_size,\n                 out_channels,\n                 act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                 norm_cfg=dict(type='PixelNorm'),\n                 normalize_latent=True,\n                 order=('linear', 'act', 'norm')):\n        super().__init__()\n        self.noise_size = noise_size\n        self.out_channels = out_channels\n        self.normalize_latent = normalize_latent\n        self.with_activation = act_cfg is not None\n        self.with_norm = norm_cfg is not None\n        self.order = order\n        assert len(order) == 3 and set(order) == set(['linear', 'act', 'norm'])\n\n        # w/o bias, because the bias is added after reshaping the tensor to\n        # 2D feature\n        self.linear = EqualizedLRLinearModule(\n            noise_size,\n            out_channels * 16,\n            equalized_lr_cfg=dict(gain=np.sqrt(2) / 4),\n            bias=False)\n\n        if self.with_activation:\n            self.activation = MODELS.build(act_cfg)\n\n        # add bias for reshaped 2D feature.\n        self.register_parameter(\n            'bias', nn.Parameter(torch.zeros(1, out_channels, 1, 1)))\n\n        if self.with_norm:\n            _, self.norm = build_norm_layer(norm_cfg, out_channels)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input noise tensor with shape (n, c).\n\n        Returns:\n            Tensor: Forward results with shape (n, c, 4, 4).\n        \"\"\"\n        assert x.ndim == 2\n        if self.normalize_latent:\n            x = pixel_norm(x)\n        for order in self.order:\n            if order == 'linear':\n                x = self.linear(x)\n                # [n, c, 4, 4]\n                x = torch.reshape(x, (-1, self.out_channels, 4, 4))\n                x = x + self.bias\n            elif order == 'act' and self.with_activation:\n                x = self.activation(x)\n            elif order == 'norm' and self.with_norm:\n                x = self.norm(x)\n\n        return x\n\n\nclass PGGANDecisionHead(BaseModule):\n\n    def __init__(self,\n                 in_channels,\n                 mid_channels,\n                 out_channels,\n                 bias=True,\n                 equalized_lr_cfg=dict(gain=1),\n                 act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                 out_act=None):\n        super().__init__()\n        self.in_channels = in_channels\n        self.mid_channels = mid_channels\n        self.out_channels = out_channels\n        self.with_activation = act_cfg is not None\n        self.with_out_activation = out_act is not None\n\n        # setup linear layers\n        # dirty code for supporting default mode in PGGAN\n        if equalized_lr_cfg:\n            equalized_lr_cfg_ = dict(gain=2**0.5)\n        else:\n            equalized_lr_cfg_ = None\n        self.linear0 = EqualizedLRLinearModule(\n            self.in_channels,\n            self.mid_channels,\n            bias=bias,\n            equalized_lr_cfg=equalized_lr_cfg_)\n        self.linear1 = EqualizedLRLinearModule(\n            self.mid_channels,\n            self.out_channels,\n            bias=bias,\n            equalized_lr_cfg=equalized_lr_cfg)\n\n        # setup activation layers\n        if self.with_activation:\n            self.activation = MODELS.build(act_cfg)\n\n        if self.with_out_activation:\n            self.out_activation = MODELS.build(out_act)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        if x.ndim > 2:\n            x = torch.reshape(x, (x.shape[0], -1))\n\n        x = self.linear0(x)\n        if self.with_activation:\n            x = self.activation(x)\n\n        x = self.linear1(x)\n        if self.with_out_activation:\n            x = self.out_activation(x)\n\n        return x\n\n\n@MODELS.register_module()\nclass MiniBatchStddevLayer(BaseModule):\n    \"\"\"Minibatch standard deviation.\n\n    Args:\n        group_size (int, optional): The size of groups in batch dimension.\n            Defaults to 4.\n        eps (float, optional):  Epsilon value to avoid computation error.\n            Defaults to 1e-8.\n        gather_all_batch (bool, optional): Whether gather batch from all GPUs.\n            Defaults to False.\n    \"\"\"\n\n    def __init__(self, group_size=4, eps=1e-8, gather_all_batch=False):\n        super().__init__()\n        self.group_size = group_size\n        self.eps = eps\n        self.gather_all_batch = gather_all_batch\n        if self.gather_all_batch:\n            assert torch.distributed.is_initialized(\n            ), 'Only in distributed training can the tensors be all gathered.'\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        if self.gather_all_batch:\n            x = torch.cat(AllGatherLayer.apply(x), dim=0)\n\n        # batch size should be smaller than or equal to group size. Otherwise,\n        # batch size should be divisible by the group size.\n        assert x.shape[\n            0] <= self.group_size or x.shape[0] % self.group_size == 0, (\n                'Batch size be smaller than or equal '\n                'to group size. Otherwise,'\n                ' batch size should be divisible by the group size.'\n                f'But got batch size {x.shape[0]},'\n                f' group size {self.group_size}')\n        n, c, h, w = x.shape\n        group_size = min(n, self.group_size)\n        # [G, M, C, H, W]\n        y = torch.reshape(x, (group_size, -1, c, h, w))\n        # [G, M, C, H, W]\n        y = y - y.mean(dim=0, keepdim=True)\n        # In pt>=1.7, you can just use `.square()` function.\n        # [M, C, H, W]\n        y = y.pow(2).mean(dim=0, keepdim=False)\n        y = torch.sqrt(y + self.eps)\n        # [M, 1, 1, 1]\n        y = y.mean(dim=(1, 2, 3), keepdim=True)\n        y = y.repeat(group_size, 1, h, w)\n        return torch.cat([x, y], dim=1)\n"
  },
  {
    "path": "mmagic/models/editors/pix2pix/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .pix2pix import Pix2Pix\nfrom .pix2pix_generator import UnetGenerator\n\n__all__ = ['Pix2Pix', 'UnetGenerator']\n"
  },
  {
    "path": "mmagic/models/editors/pix2pix/pix2pix.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ...base_models import BaseTranslationModel\nfrom ...utils import set_requires_grad\n\n\n@MODELS.register_module()\nclass Pix2Pix(BaseTranslationModel):\n    \"\"\"Pix2Pix model for paired image-to-image translation.\n\n    Ref:\n     Image-to-Image Translation with Conditional Adversarial Networks\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.pixel_loss_weight = self.loss_config.get('pixel_loss_weight', 100)\n\n    def forward_test(self, img, target_domain, **kwargs):\n        \"\"\"Forward function for testing.\n\n        Args:\n            img (tensor): Input image tensor.\n            target_domain (str): Target domain of output image.\n            kwargs (dict): Other arguments.\n\n        Returns:\n            dict: Forward results.\n        \"\"\"\n        # This is a trick for Pix2Pix\n        # ref: https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/blob/e1bdf46198662b0f4d0b318e24568205ec4d7aee/test.py#L54  # noqa\n        self.train()\n        target = self.translation(img, target_domain=target_domain, **kwargs)\n        results = dict(source=img, target=target)\n        return results\n\n    def _get_disc_loss(self, outputs):\n        \"\"\"Get the loss of discriminator.\n\n        Args:\n            outputs (dict): A dict of output.\n\n        Returns:\n            Tuple: Loss and a dict of log of loss terms.\n        \"\"\"\n        # GAN loss for the discriminator\n        losses = dict()\n\n        discriminators = self.get_module(self.discriminators)\n        target_domain = self._default_domain\n        source_domain = self.get_other_domains(target_domain)[0]\n        fake_ab = torch.cat((outputs[f'real_{source_domain}'],\n                             outputs[f'fake_{target_domain}']), 1)\n        fake_pred = discriminators[target_domain](fake_ab.detach())\n        losses['loss_gan_d_fake'] = F.binary_cross_entropy_with_logits(\n            fake_pred, 0. * torch.ones_like(fake_pred))\n        real_ab = torch.cat((outputs[f'real_{source_domain}'],\n                             outputs[f'real_{target_domain}']), 1)\n        real_pred = discriminators[target_domain](real_ab)\n        losses['loss_gan_d_real'] = F.binary_cross_entropy_with_logits(\n            real_pred, 1. * torch.ones_like(real_pred))\n\n        loss_d, log_vars_d = self.parse_losses(losses)\n        loss_d *= 0.5\n\n        return loss_d, log_vars_d\n\n    def _get_gen_loss(self, outputs):\n        \"\"\"Get the loss of generator.\n\n        Args:\n            outputs (dict): A dict of output.\n\n        Returns:\n            Tuple: Loss and a dict of log of loss terms.\n        \"\"\"\n\n        target_domain = self._default_domain\n        source_domain = self.get_other_domains(target_domain)[0]\n        losses = dict()\n\n        discriminators = self.get_module(self.discriminators)\n        # GAN loss for the generator\n        fake_ab = torch.cat((outputs[f'real_{source_domain}'],\n                             outputs[f'fake_{target_domain}']), 1)\n        fake_pred = discriminators[target_domain](fake_ab)\n        losses['loss_gan_g'] = F.binary_cross_entropy_with_logits(\n            fake_pred, 1. * torch.ones_like(fake_pred))\n\n        # L1 loss for generator\n        losses['loss_pixel'] = self.pixel_loss_weight * F.l1_loss(\n            outputs[f'real_{target_domain}'],\n            outputs[f'fake_{target_domain}'],\n            reduce='mean')\n\n        loss_g, log_vars_g = self.parse_losses(losses)\n        return loss_g, log_vars_g\n\n    def train_step(self, data, optim_wrapper=None):\n        \"\"\"Training step function.\n\n        Args:\n            data_batch (dict): Dict of the input data batch.\n            optimizer (dict[torch.optim.Optimizer]): Dict of optimizers for\n                the generator and discriminator.\n            ddp_reducer (:obj:`Reducer` | None, optional): Reducer from ddp.\n                It is used to prepare for ``backward()`` in ddp. Defaults to\n                None.\n            running_status (dict | None, optional): Contains necessary basic\n                information for training, e.g., iteration number. Defaults to\n                None.\n\n        Returns:\n            dict: Dict of loss, information for logger, the number of samples\\\n                and results for visualization.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n        inputs_dict = data['inputs']\n\n        disc_optimizer_wrapper = optim_wrapper['discriminators']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        target_domain = self._default_domain\n        source_domain = self.get_other_domains(self._default_domain)[0]\n        source_image = inputs_dict[f'img_{source_domain}']\n        target_image = inputs_dict[f'img_{target_domain}']\n\n        # forward generator\n        outputs = dict()\n        with disc_optimizer_wrapper.optim_context(self.discriminators):\n            results = self(\n                source_image,\n                target_domain=self._default_domain,\n                test_mode=False)\n            outputs[f'real_{source_domain}'] = results['source']\n            outputs[f'fake_{target_domain}'] = results['target']\n            outputs[f'real_{target_domain}'] = target_image\n            log_vars = dict()\n\n            # discriminator\n            set_requires_grad(self.discriminators, True)\n            # optimize\n            loss_d, log_vars_d = self._get_disc_loss(outputs)\n            disc_optimizer_wrapper.update_params(loss_d)\n            log_vars.update(log_vars_d)\n\n        # generator, no updates to discriminator parameters.\n        gen_optimizer_wrapper = optim_wrapper['generators']\n        if ((curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0\n                and curr_iter >= self.disc_init_steps):\n            set_requires_grad(self.discriminators, False)\n            # optimize\n            with gen_optimizer_wrapper.optim_context(self.generators):\n                loss_g, log_vars_g = self._get_gen_loss(outputs)\n                gen_optimizer_wrapper.update_params(loss_g)\n                log_vars.update(log_vars_g)\n\n        return log_vars\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            List[DataSample]: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n        target_domain = self._reachable_domains[0]\n        source_domain = self.get_other_domains(target_domain)[0]\n        outputs = self.forward_test(\n            inputs_dict[f'img_{source_domain}'], target_domain=target_domain)\n\n        batch_sample_list = []\n        num_batches = next(iter(outputs.values())).shape[0]\n        for idx in range(num_batches):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n            target = outputs['target'][idx]\n            target = self.data_preprocessor.destruct(target, data_samples[idx],\n                                                     f'img_{target_domain}')\n            setattr(gen_sample, f'fake_{target_domain}', target)\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            List[DataSample]: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n        target_domain = self._reachable_domains[0]\n        source_domain = self.get_other_domains(target_domain)[0]\n        outputs = self.forward_test(\n            inputs_dict[f'img_{source_domain}'], target_domain=target_domain)\n\n        batch_sample_list = []\n        if data_samples:\n            data_samples = data_samples.split()\n        num_batches = next(iter(outputs.values())).shape[0]\n        for idx in range(num_batches):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n            target = outputs['target'][idx]\n            target = self.data_preprocessor.destruct(target, data_samples[idx],\n                                                     f'img_{target_domain}')\n            gen_sample.set_tensor_data({f'fake_{target_domain}': target})\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n"
  },
  {
    "path": "mmagic/models/editors/pix2pix/pix2pix_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ...utils import generation_init_weights\nfrom .pix2pix_modules import UnetSkipConnectionBlock\n\n\n@MODELS.register_module()\nclass UnetGenerator(BaseModule):\n    \"\"\"Construct the Unet-based generator from the innermost layer to the\n    outermost layer, which is a recursive process.\n\n    Args:\n        in_channels (int): Number of channels in input images.\n        out_channels (int): Number of channels in output images.\n        num_down (int): Number of downsamplings in Unet. If `num_down` is 8,\n            the image with size 256x256 will become 1x1 at the bottleneck.\n            Default: 8.\n        base_channels (int): Number of channels at the last conv layer.\n            Default: 64.\n        norm_cfg (dict): Config dict to build norm layer. Default:\n            `dict(type='BN')`.\n        use_dropout (bool): Whether to use dropout layers. Default: False.\n        init_cfg (dict): Config dict for initialization.\n            `type`: The name of our initialization method. Default: 'normal'.\n            `gain`: Scaling factor for normal, xavier and orthogonal.\n            Default: 0.02.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 num_down=8,\n                 base_channels=64,\n                 norm_cfg=dict(type='BN'),\n                 use_dropout=False,\n                 init_cfg=dict(type='normal', gain=0.02)):\n        super().__init__(init_cfg=init_cfg)\n        # We use norm layers in the unet generator.\n        assert isinstance(norm_cfg, dict), (\"'norm_cfg' should be dict, but\"\n                                            f'got {type(norm_cfg)}')\n        assert 'type' in norm_cfg, \"'norm_cfg' must have key 'type'\"\n\n        # add the innermost layer\n        unet_block = UnetSkipConnectionBlock(\n            base_channels * 8,\n            base_channels * 8,\n            in_channels=None,\n            submodule=None,\n            norm_cfg=norm_cfg,\n            is_innermost=True)\n        # add intermediate layers with base_channels * 8 filters\n        for _ in range(num_down - 5):\n            unet_block = UnetSkipConnectionBlock(\n                base_channels * 8,\n                base_channels * 8,\n                in_channels=None,\n                submodule=unet_block,\n                norm_cfg=norm_cfg,\n                use_dropout=use_dropout)\n        # gradually reduce the number of filters\n        # from base_channels * 8 to base_channels\n        unet_block = UnetSkipConnectionBlock(\n            base_channels * 4,\n            base_channels * 8,\n            in_channels=None,\n            submodule=unet_block,\n            norm_cfg=norm_cfg)\n        unet_block = UnetSkipConnectionBlock(\n            base_channels * 2,\n            base_channels * 4,\n            in_channels=None,\n            submodule=unet_block,\n            norm_cfg=norm_cfg)\n        unet_block = UnetSkipConnectionBlock(\n            base_channels,\n            base_channels * 2,\n            in_channels=None,\n            submodule=unet_block,\n            norm_cfg=norm_cfg)\n        # add the outermost layer\n        self.model = UnetSkipConnectionBlock(\n            out_channels,\n            base_channels,\n            in_channels=in_channels,\n            submodule=unet_block,\n            is_outermost=True,\n            norm_cfg=norm_cfg)\n\n        self.init_type = 'normal' if init_cfg is None else init_cfg.get(\n            'type', 'normal')\n        self.init_gain = 0.02 if init_cfg is None else init_cfg.get(\n            'gain', 0.02)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.model(x)\n\n    def init_weights(self):\n        \"\"\"Initialize weights for the model.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Default: None.\n            strict (bool, optional): Whether to allow different params for the\n                model and checkpoint. Default: True.\n        \"\"\"\n        if self.init_cfg is not None and self.init_cfg['type'] == 'Pretrained':\n            super().init_weights()\n            return\n        generation_init_weights(\n            self, init_type=self.init_type, init_gain=self.init_gain)\n        self._is_init = True\n"
  },
  {
    "path": "mmagic/models/editors/pix2pix/pix2pix_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\n\n\nclass UnetSkipConnectionBlock(nn.Module):\n    \"\"\"Construct a Unet submodule with skip connections, with the following.\n\n    structure: downsampling - `submodule` - upsampling.\n\n    Args:\n        outer_channels (int): Number of channels at the outer conv layer.\n        inner_channels (int): Number of channels at the inner conv layer.\n        in_channels (int): Number of channels in input images/features. If is\n            None, equals to `outer_channels`. Default: None.\n        submodule (UnetSkipConnectionBlock): Previously constructed submodule.\n            Default: None.\n        is_outermost (bool): Whether this module is the outermost module.\n            Default: False.\n        is_innermost (bool): Whether this module is the innermost module.\n            Default: False.\n        norm_cfg (dict): Config dict to build norm layer. Default:\n            `dict(type='BN')`.\n        use_dropout (bool): Whether to use dropout layers. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 outer_channels,\n                 inner_channels,\n                 in_channels=None,\n                 submodule=None,\n                 is_outermost=False,\n                 is_innermost=False,\n                 norm_cfg=dict(type='BN'),\n                 use_dropout=False):\n        super().__init__()\n        # cannot be both outermost and innermost\n        assert not (is_outermost and is_innermost), (\n            \"'is_outermost' and 'is_innermost' cannot be True\"\n            'at the same time.')\n        self.is_outermost = is_outermost\n        assert isinstance(norm_cfg, dict), (\"'norm_cfg' should be dict, but\"\n                                            f'got {type(norm_cfg)}')\n        assert 'type' in norm_cfg, \"'norm_cfg' must have key 'type'\"\n        # We use norm layers in the unet skip connection block.\n        # Only for IN, use bias since it does not have affine parameters.\n        use_bias = norm_cfg['type'] == 'IN'\n\n        kernel_size = 4\n        stride = 2\n        padding = 1\n        if in_channels is None:\n            in_channels = outer_channels\n        down_conv_cfg = dict(type='Conv2d')\n        down_norm_cfg = norm_cfg\n        down_act_cfg = dict(type='LeakyReLU', negative_slope=0.2)\n        up_conv_cfg = dict(type='Deconv')\n        up_norm_cfg = norm_cfg\n        up_act_cfg = dict(type='ReLU')\n        up_in_channels = inner_channels * 2\n        up_bias = use_bias\n        middle = [submodule]\n        upper = []\n\n        if is_outermost:\n            down_act_cfg = None\n            down_norm_cfg = None\n            up_bias = True\n            up_norm_cfg = None\n            upper = [nn.Tanh()]\n        elif is_innermost:\n            down_norm_cfg = None\n            up_in_channels = inner_channels\n            middle = []\n        else:\n            upper = [nn.Dropout(0.5)] if use_dropout else []\n\n        down = [\n            ConvModule(\n                in_channels=in_channels,\n                out_channels=inner_channels,\n                kernel_size=kernel_size,\n                stride=stride,\n                padding=padding,\n                bias=use_bias,\n                conv_cfg=down_conv_cfg,\n                norm_cfg=down_norm_cfg,\n                act_cfg=down_act_cfg,\n                order=('act', 'conv', 'norm'))\n        ]\n        up = [\n            ConvModule(\n                in_channels=up_in_channels,\n                out_channels=outer_channels,\n                kernel_size=kernel_size,\n                stride=stride,\n                padding=padding,\n                bias=up_bias,\n                conv_cfg=up_conv_cfg,\n                norm_cfg=up_norm_cfg,\n                act_cfg=up_act_cfg,\n                order=('act', 'conv', 'norm'))\n        ]\n\n        model = down + middle + up + upper\n\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        if self.is_outermost:\n            return self.model(x)\n\n        # add skip connections\n        return torch.cat([x, self.model(x)], 1)\n"
  },
  {
    "path": "mmagic/models/editors/plain/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .plain_decoder import PlainDecoder\nfrom .plain_refiner import PlainRefiner\n\n__all__ = ['PlainRefiner', 'PlainDecoder']\n"
  },
  {
    "path": "mmagic/models/editors/plain/plain_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import xavier_init\nfrom torch.autograd import Function\nfrom torch.nn.modules.pooling import _MaxUnpoolNd\nfrom torch.nn.modules.utils import _pair\n\nfrom mmagic.registry import MODELS\n\n\nclass MaxUnpool2dop(Function):\n    \"\"\"We warp the `torch.nn.functional.max_unpool2d` with an extra `symbolic`\n    method, which is needed while exporting to ONNX.\n\n    Users should not call this function directly.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, input, indices, kernel_size, stride, padding,\n                output_size):\n        \"\"\"Forward function of MaxUnpool2dop.\n\n        Args:\n            input (Tensor): Tensor needed to upsample.\n            indices (Tensor): Indices output of the previous MaxPool.\n            kernel_size (Tuple): Size of the max pooling window.\n            stride (Tuple): Stride of the max pooling window.\n            padding (Tuple): Padding that was added to the input.\n            output_size (List or Tuple): The shape of output tensor.\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        return F.max_unpool2d(input, indices, kernel_size, stride, padding,\n                              output_size)\n\n    @staticmethod\n    def symbolic(g, input, indices, kernel_size, stride, padding, output_size):\n        \"\"\"This is the function to define the module of MaxUnpool.\n\n        Args:\n            g (_type_): _description_\n            input (Tensor): Tensor needed to upsample.\n            indices (Tensor): Indices output of the previous MaxPool.\n            kernel_size (int): Size of the max pooling window.\n            stride (Tuple): Stride of the max pooling window.\n            padding (Tuple): Padding that was added to the input.\n            output_size (List or Tuple): The shape of output tensor.\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        # get shape\n        input_shape = g.op('Shape', input)\n        const_0 = g.op('Constant', value_t=torch.tensor(0))\n        const_1 = g.op('Constant', value_t=torch.tensor(1))\n        batch_size = g.op('Gather', input_shape, const_0, axis_i=0)\n        channel = g.op('Gather', input_shape, const_1, axis_i=0)\n\n        # height = (height - 1) * stride + kernel_size\n        height = g.op(\n            'Gather',\n            input_shape,\n            g.op('Constant', value_t=torch.tensor(2)),\n            axis_i=0)\n        height = g.op('Sub', height, const_1)\n        height = g.op('Mul', height,\n                      g.op('Constant', value_t=torch.tensor(stride[1])))\n        height = g.op('Add', height,\n                      g.op('Constant', value_t=torch.tensor(kernel_size[1])))\n\n        # width = (width - 1) * stride + kernel_size\n        width = g.op(\n            'Gather',\n            input_shape,\n            g.op('Constant', value_t=torch.tensor(3)),\n            axis_i=0)\n        width = g.op('Sub', width, const_1)\n        width = g.op('Mul', width,\n                     g.op('Constant', value_t=torch.tensor(stride[0])))\n        width = g.op('Add', width,\n                     g.op('Constant', value_t=torch.tensor(kernel_size[0])))\n\n        # step of channel\n        channel_step = g.op('Mul', height, width)\n        # step of batch\n        batch_step = g.op('Mul', channel_step, channel)\n\n        # channel offset\n        range_channel = g.op('Range', const_0, channel, const_1)\n        range_channel = g.op(\n            'Reshape', range_channel,\n            g.op('Constant', value_t=torch.tensor([1, -1, 1, 1])))\n        range_channel = g.op('Mul', range_channel, channel_step)\n        range_channel = g.op('Cast', range_channel, to_i=7)  # 7 is int64\n\n        # batch offset\n        range_batch = g.op('Range', const_0, batch_size, const_1)\n        range_batch = g.op(\n            'Reshape', range_batch,\n            g.op('Constant', value_t=torch.tensor([-1, 1, 1, 1])))\n        range_batch = g.op('Mul', range_batch, batch_step)\n        range_batch = g.op('Cast', range_batch, to_i=7)  # 7 is int64\n\n        # update indices\n        indices = g.op('Add', indices, range_channel)\n        indices = g.op('Add', indices, range_batch)\n\n        return g.op(\n            'MaxUnpool',\n            input,\n            indices,\n            kernel_shape_i=kernel_size,\n            strides_i=stride)\n\n\nclass MaxUnpool2d(_MaxUnpoolNd):\n    \"\"\"This module is modified from Pytorch `MaxUnpool2d` module.\n\n    Args:\n      kernel_size (int or tuple): Size of the max pooling window.\n      stride (int or tuple): Stride of the max pooling window.\n          Default: None (It is set to `kernel_size` by default).\n      padding (int or tuple): Padding that is added to the input.\n          Default: 0.\n    \"\"\"\n\n    def __init__(self, kernel_size, stride=None, padding=0):\n        super(MaxUnpool2d, self).__init__()\n        self.kernel_size = _pair(kernel_size)\n        self.stride = _pair(stride or kernel_size)\n        self.padding = _pair(padding)\n\n    def forward(self, input, indices, output_size=None):\n        \"\"\"Forward function of MaxUnpool2d.\n\n        Args:\n            input (Tensor): Tensor needed to upsample.\n            indices (Tensor): Indices output of the previous MaxPool.\n            output_size (List or Tuple): The shape of output tensor.\n                Default: None.\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        return MaxUnpool2dop.apply(input, indices, self.kernel_size,\n                                   self.stride, self.padding, output_size)\n\n\n@MODELS.register_module()\nclass PlainDecoder(BaseModule):\n    \"\"\"Simple decoder from Deep Image Matting.\n\n    Args:\n        in_channels (int): Channel num of input features.\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self, in_channels, init_cfg: Optional[dict] = None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.deconv6_1 = nn.Conv2d(in_channels, 512, kernel_size=1)\n        self.deconv5_1 = nn.Conv2d(512, 512, kernel_size=5, padding=2)\n        self.deconv4_1 = nn.Conv2d(512, 256, kernel_size=5, padding=2)\n        self.deconv3_1 = nn.Conv2d(256, 128, kernel_size=5, padding=2)\n        self.deconv2_1 = nn.Conv2d(128, 64, kernel_size=5, padding=2)\n        self.deconv1_1 = nn.Conv2d(64, 64, kernel_size=5, padding=2)\n\n        self.deconv1 = nn.Conv2d(64, 1, kernel_size=5, padding=2)\n\n        self.relu = nn.ReLU(inplace=True)\n        self.max_unpool2d_for_onnx = MaxUnpool2d(kernel_size=2, stride=2)\n        self.max_unpool2d = nn.MaxUnpool2d(kernel_size=2, stride=2)\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        if self.init_cfg is not None:\n            super().init_weights()\n        else:\n            # Default initialization\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    xavier_init(m)\n\n    def forward(self, inputs):\n        \"\"\"Forward function of PlainDecoder.\n\n        Args:\n            inputs (dict): Output dictionary of the VGG encoder containing:\n\n              - out (Tensor): Output of the VGG encoder.\n              - max_idx_1 (Tensor): Index of the first maxpooling layer in the\n                VGG encoder.\n              - max_idx_2 (Tensor): Index of the second maxpooling layer in the\n                VGG encoder.\n              - max_idx_3 (Tensor): Index of the third maxpooling layer in the\n                VGG encoder.\n              - max_idx_4 (Tensor): Index of the fourth maxpooling layer in the\n                VGG encoder.\n              - max_idx_5 (Tensor): Index of the fifth maxpooling layer in the\n                VGG encoder.\n\n        Returns:\n            Tensor: Output tensor.\n        \"\"\"\n        max_idx_1 = inputs['max_idx_1']\n        max_idx_2 = inputs['max_idx_2']\n        max_idx_3 = inputs['max_idx_3']\n        max_idx_4 = inputs['max_idx_4']\n        max_idx_5 = inputs['max_idx_5']\n        x = inputs['out']\n\n        max_unpool2d = self.max_unpool2d\n        if torch.onnx.is_in_onnx_export():\n            max_unpool2d = self.max_unpool2d_for_onnx\n\n        out = self.relu(self.deconv6_1(x))\n        out = max_unpool2d(out, max_idx_5)\n\n        out = self.relu(self.deconv5_1(out))\n        out = max_unpool2d(out, max_idx_4)\n\n        out = self.relu(self.deconv4_1(out))\n        out = max_unpool2d(out, max_idx_3)\n\n        out = self.relu(self.deconv3_1(out))\n        out = max_unpool2d(out, max_idx_2)\n\n        out = self.relu(self.deconv2_1(out))\n        out = max_unpool2d(out, max_idx_1)\n\n        out = self.relu(self.deconv1_1(out))\n        raw_alpha = self.deconv1(out)\n        return raw_alpha\n"
  },
  {
    "path": "mmagic/models/editors/plain/plain_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import xavier_init\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass PlainRefiner(BaseModule):\n    \"\"\"Simple refiner from Deep Image Matting.\n\n    Args:\n        conv_channels (int): Number of channels produced by the three main\n            convolutional layer. Default: 64.\n        pretrained (str): Name of pretrained model. Default: None.\n    \"\"\"\n\n    def __init__(self, conv_channels=64, init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        # assert pretrained is None, 'pretrained not supported yet'\n\n        self.refine_conv1 = nn.Conv2d(\n            4, conv_channels, kernel_size=3, padding=1)\n        self.refine_conv2 = nn.Conv2d(\n            conv_channels, conv_channels, kernel_size=3, padding=1)\n        self.refine_conv3 = nn.Conv2d(\n            conv_channels, conv_channels, kernel_size=3, padding=1)\n        self.refine_pred = nn.Conv2d(\n            conv_channels, 1, kernel_size=3, padding=1)\n\n        self.relu = nn.ReLU(inplace=True)\n\n    def init_weights(self):\n        \"\"\"Init weights for the module.\"\"\"\n        for m in self.modules():\n            if isinstance(m, nn.Conv2d):\n                xavier_init(m)\n\n    def forward(self, x, raw_alpha):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): The input feature map of refiner.\n            raw_alpha (Tensor): The raw predicted alpha matte.\n\n        Returns:\n            Tensor: The refined alpha matte.\n        \"\"\"\n        out = self.relu(self.refine_conv1(x))\n        out = self.relu(self.refine_conv2(out))\n        out = self.relu(self.refine_conv3(out))\n        raw_refine = self.refine_pred(out)\n        pred_refine = torch.sigmoid(raw_alpha + raw_refine)\n        return pred_refine\n"
  },
  {
    "path": "mmagic/models/editors/rdn/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .rdn_net import RDB, RDNNet\n\n__all__ = ['RDB', 'RDNNet']\n"
  },
  {
    "path": "mmagic/models/editors/rdn/rdn_net.py",
    "content": "import torch\nfrom mmengine.model import BaseModule\nfrom torch import nn\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass RDNNet(BaseModule):\n    \"\"\"RDN model for single image super-resolution.\n\n    Paper: Residual Dense Network for Image Super-Resolution\n\n    Adapted from 'https://github.com/yjn870/RDN-pytorch.git'\n    'RDN-pytorch/blob/master/models.py'\n    Copyright (c) 2021, JaeYun Yeo, under MIT License.\n\n    Most of the implementation follows the implementation in:\n    'https://github.com/sanghyun-son/EDSR-PyTorch.git'\n    'EDSR-PyTorch/blob/master/src/model/rdn.py'\n    Copyright (c) 2017, sanghyun-son, under MIT license.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_blocks (int): Block number in the trunk network. Default: 16.\n        upscale_factor (int): Upsampling factor. Support 2^n and 3.\n            Default: 4.\n        num_layer (int): Layer number in the Residual Dense Block.\n            Default: 8.\n        channel_growth(int): Channels growth in each layer of RDB.\n            Default: 64.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=16,\n                 upscale_factor=4,\n                 num_layers=8,\n                 channel_growth=64):\n\n        super().__init__()\n        self.mid_channels = mid_channels\n        self.channel_growth = channel_growth\n        self.num_blocks = num_blocks\n        self.num_layers = num_layers\n\n        # shallow feature extraction\n        self.sfe1 = nn.Conv2d(\n            in_channels, mid_channels, kernel_size=3, padding=3 // 2)\n        self.sfe2 = nn.Conv2d(\n            mid_channels, mid_channels, kernel_size=3, padding=3 // 2)\n\n        # residual dense blocks\n        self.rdbs = nn.ModuleList()\n        for _ in range(self.num_blocks):\n            self.rdbs.append(\n                RDB(self.mid_channels, self.channel_growth, self.num_layers))\n\n        # global feature fusion\n        self.gff = nn.Sequential(\n            nn.Conv2d(\n                self.mid_channels * self.num_blocks,\n                self.mid_channels,\n                kernel_size=1),\n            nn.Conv2d(\n                self.mid_channels,\n                self.mid_channels,\n                kernel_size=3,\n                padding=3 // 2))\n\n        # up-sampling\n        assert 2 <= upscale_factor <= 4\n        if upscale_factor == 2 or upscale_factor == 4:\n            self.upscale = []\n            for _ in range(upscale_factor // 2):\n                self.upscale.extend([\n                    nn.Conv2d(\n                        self.mid_channels,\n                        self.mid_channels * (2**2),\n                        kernel_size=3,\n                        padding=3 // 2),\n                    nn.PixelShuffle(2)\n                ])\n            self.upscale = nn.Sequential(*self.upscale)\n        else:\n            self.upscale = nn.Sequential(\n                nn.Conv2d(\n                    self.mid_channels,\n                    self.mid_channels * (upscale_factor**2),\n                    kernel_size=3,\n                    padding=3 // 2), nn.PixelShuffle(upscale_factor))\n\n        self.output = nn.Conv2d(\n            self.mid_channels, out_channels, kernel_size=3, padding=3 // 2)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        sfe1 = self.sfe1(x)\n        sfe2 = self.sfe2(sfe1)\n\n        x = sfe2\n        local_features = []\n        for i in range(self.num_blocks):\n            x = self.rdbs[i](x)\n            local_features.append(x)\n\n        x = self.gff(torch.cat(local_features, 1)) + sfe1\n        # global residual learning\n        x = self.upscale(x)\n        x = self.output(x)\n        return x\n\n\nclass DenseLayer(BaseModule):\n    \"\"\"Dense layer.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n    \"\"\"\n\n    def __init__(self, in_channels, out_channels):\n        super().__init__()\n        self.conv = nn.Conv2d(\n            in_channels, out_channels, kernel_size=3, padding=3 // 2)\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c_in, h, w).\n\n        Returns:\n            Tensor: Forward results, tensor with shape (n, c_in+c_out, h, w).\n        \"\"\"\n        return torch.cat([x, self.relu(self.conv(x))], 1)\n\n\nclass RDB(BaseModule):\n    \"\"\"Residual Dense Block of Residual Dense Network.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        channel_growth (int): Channels growth in each layer.\n        num_layers (int): Layer number in the Residual Dense Block.\n    \"\"\"\n\n    def __init__(self, in_channels, channel_growth, num_layers):\n        super().__init__()\n        self.layers = nn.Sequential(*[\n            DenseLayer(in_channels + channel_growth * i, channel_growth)\n            for i in range(num_layers)\n        ])\n\n        # local feature fusion\n        self.lff = nn.Conv2d(\n            in_channels + channel_growth * num_layers,\n            in_channels,\n            kernel_size=1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return x + self.lff(self.layers(x))  # local residual learning\n"
  },
  {
    "path": "mmagic/models/editors/real_basicvsr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .real_basicvsr import RealBasicVSR\nfrom .real_basicvsr_net import RealBasicVSRNet\n\n__all__ = ['RealBasicVSR', 'RealBasicVSRNet']\n"
  },
  {
    "path": "mmagic/models/editors/real_basicvsr/real_basicvsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.models.utils import set_requires_grad\nfrom mmagic.registry import MODELS\nfrom ..real_esrgan import RealESRGAN\n\n\n@MODELS.register_module()\nclass RealBasicVSR(RealESRGAN):\n    \"\"\"RealBasicVSR model for real-world video super-resolution.\n\n    Ref:\n    Investigating Tradeoffs in Real-World Video Super-Resolution, arXiv\n\n    Args:\n        generator (dict): Config for the generator.\n        discriminator (dict, optional): Config for the discriminator.\n            Default: None.\n        gan_loss (dict, optional): Config for the gan loss.\n            Note that the loss weight in gan loss is only for the generator.\n        pixel_loss (dict, optional): Config for the pixel loss. Default: None.\n        cleaning_loss (dict, optional): Config for the image cleaning loss.\n            Default: None.\n        perceptual_loss (dict, optional): Config for the perceptual loss.\n            Default: None.\n        is_use_sharpened_gt_in_pixel (bool, optional): Whether to use the image\n            sharpened by unsharp masking as the GT for pixel loss.\n            Default: False.\n        is_use_sharpened_gt_in_percep (bool, optional): Whether to use the\n            image sharpened by unsharp masking as the GT for perceptual loss.\n            Default: False.\n        is_use_sharpened_gt_in_gan (bool, optional): Whether to use the\n            image sharpened by unsharp masking as the GT for adversarial loss.\n            Default: False.\n        train_cfg (dict): Config for training. Default: None.\n            You may change the training of gan by setting:\n            `disc_steps`: how many discriminator updates after one generate\n            update;\n            `disc_init_steps`: how many discriminator updates at the start of\n            the training.\n            These two keys are useful when training with WGAN.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 discriminator=None,\n                 gan_loss=None,\n                 pixel_loss=None,\n                 cleaning_loss=None,\n                 perceptual_loss=None,\n                 is_use_sharpened_gt_in_pixel=False,\n                 is_use_sharpened_gt_in_percep=False,\n                 is_use_sharpened_gt_in_gan=False,\n                 is_use_ema=False,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            discriminator=discriminator,\n            gan_loss=gan_loss,\n            pixel_loss=pixel_loss,\n            perceptual_loss=perceptual_loss,\n            is_use_sharpened_gt_in_pixel=is_use_sharpened_gt_in_pixel,\n            is_use_sharpened_gt_in_percep=is_use_sharpened_gt_in_percep,\n            is_use_sharpened_gt_in_gan=is_use_sharpened_gt_in_gan,\n            is_use_ema=is_use_ema,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.cleaning_loss = MODELS.build(\n            cleaning_loss) if cleaning_loss else None\n\n    def extract_gt_data(self, data_samples):\n        \"\"\"extract gt data from data samples.\n\n        Args:\n            data_samples (list): List of DataSample.\n\n        Returns:\n            Tensor: Extract gt data.\n        \"\"\"\n\n        gt_pixel, gt_percep, gt_gan = super().extract_gt_data(data_samples)\n        n, t, c, h, w = gt_pixel.size()\n        gt_pixel = gt_pixel.view(-1, c, h, w)\n        gt_percep = gt_percep.view(-1, c, h, w)\n        gt_gan = gt_gan.view(-1, c, h, w)\n\n        if self.cleaning_loss:\n            gt_clean = gt_pixel.view(-1, c, h, w)\n            gt_clean = F.interpolate(\n                gt_clean,\n                scale_factor=0.25,\n                mode='area',\n                recompute_scale_factor=False)\n            gt_clean = gt_clean.view(n, t, c, h // 4, w // 4)\n        else:\n            gt_clean = None\n\n        return gt_pixel, gt_percep, gt_gan, gt_clean\n\n    def g_step(self, batch_outputs, batch_gt_data):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tuple[Tensor]): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        gt_pixel, gt_percep, gt_gan, gt_clean = batch_gt_data\n        fake_g_output, fake_g_lq = batch_outputs\n        fake_g_output = fake_g_output.view(gt_pixel.shape)\n\n        losses = super().g_step(\n            batch_outputs=fake_g_output,\n            batch_gt_data=(gt_pixel, gt_percep, gt_gan))\n\n        if self.cleaning_loss:\n            losses['loss_clean'] = self.cleaning_loss(fake_g_lq, gt_clean)\n\n        return losses\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step of GAN-based method.\n\n        Args:\n            data (List[dict]): Data sampled from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance\n                used to update model parameters.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n\n        data = self.data_preprocessor(data, True)\n        batch_inputs = data['inputs']\n        data_samples = data['data_samples']\n        batch_gt_data = self.extract_gt_data(data_samples)\n\n        log_vars = dict()\n\n        with g_optim_wrapper.optim_context(self):\n            batch_outputs = self.forward_train(batch_inputs, data_samples)\n\n        if self.if_run_g():\n            set_requires_grad(self.discriminator, False)\n\n            log_vars_d = self.g_step_with_optim(\n                batch_outputs=batch_outputs,\n                batch_gt_data=batch_gt_data,\n                optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if self.if_run_d():\n            set_requires_grad(self.discriminator, True)\n\n            gt_pixel, gt_percep, gt_gan, gt_clean = batch_gt_data\n            fake_g_output, fake_g_lq = batch_outputs\n            fake_g_output = fake_g_output.view(gt_pixel.shape)\n\n            for _ in range(self.disc_repeat):\n                # detach before function call to resolve PyTorch2.0 compile bug\n                log_vars_d = self.d_step_with_optim(\n                    batch_outputs=fake_g_output.detach(),\n                    batch_gt_data=(gt_pixel, gt_percep, gt_gan),\n                    optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if 'loss' in log_vars:\n            log_vars.pop('loss')\n\n        self.step_counter += 1\n\n        return log_vars\n\n    def forward_train(self, batch_inputs, data_samples=None):\n        \"\"\"Forward Train.\n\n        Run forward of generator with ``return_lqs=True``\n\n        Args:\n            batch_inputs (Tensor): Batch inputs.\n            data_samples (List[DataSample]): Data samples of Editing.\n                Default:None\n\n        Returns:\n            Tuple[Tensor]: Result of generator.\n                (outputs, lqs)\n        \"\"\"\n\n        return self.generator(batch_inputs, return_lqs=True)\n"
  },
  {
    "path": "mmagic/models/editors/real_basicvsr/real_basicvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ..basicvsr.basicvsr_net import BasicVSRNet, ResidualBlocksWithInputConv\n\n\n@MODELS.register_module()\nclass RealBasicVSRNet(BaseModule):\n    \"\"\"RealBasicVSR network structure for real-world video super-resolution.\n\n    Support only x4 upsampling.\n\n    Paper:\n        Investigating Tradeoffs in Real-World Video Super-Resolution, arXiv\n\n    Args:\n        mid_channels (int, optional): Channel number of the intermediate\n            features. Default: 64.\n        num_propagation_blocks (int, optional): Number of residual blocks in\n            each propagation branch. Default: 20.\n        num_cleaning_blocks (int, optional): Number of residual blocks in the\n            image cleaning module. Default: 20.\n        dynamic_refine_thres (int, optional): Stop cleaning the images when\n            the residue is smaller than this value. Default: 255.\n        spynet_pretrained (str, optional): Pre-trained model path of SPyNet.\n            Default: None.\n        is_fix_cleaning (bool, optional): Whether to fix the weights of\n            the image cleaning module during training. Default: False.\n        is_sequential_cleaning (bool, optional): Whether to clean the images\n            sequentially. This is used to save GPU memory, but the speed is\n            slightly slower. Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 mid_channels=64,\n                 num_propagation_blocks=20,\n                 num_cleaning_blocks=20,\n                 dynamic_refine_thres=255,\n                 spynet_pretrained=None,\n                 is_fix_cleaning=False,\n                 is_sequential_cleaning=False):\n\n        super().__init__()\n\n        self.dynamic_refine_thres = dynamic_refine_thres / 255.\n        self.is_sequential_cleaning = is_sequential_cleaning\n\n        # image cleaning module\n        self.image_cleaning = nn.Sequential(\n            ResidualBlocksWithInputConv(3, mid_channels, num_cleaning_blocks),\n            nn.Conv2d(mid_channels, 3, 3, 1, 1, bias=True),\n        )\n\n        if is_fix_cleaning:  # keep the weights of the cleaning module fixed\n            self.image_cleaning.requires_grad_(False)\n\n        # BasicVSR\n        self.basicvsr = BasicVSRNet(mid_channels, num_propagation_blocks,\n                                    spynet_pretrained)\n        self.basicvsr.spynet.requires_grad_(False)\n\n    def forward(self, lqs, return_lqs=False):\n        \"\"\"Forward function for BasicVSR++.\n\n        Args:\n            lqs (tensor): Input low quality (LQ) sequence with\n                shape (n, t, c, h, w).\n            return_lqs (bool): Whether to return LQ sequence. Default: False.\n\n        Returns:\n            Tensor: Output HR sequence.\n        \"\"\"\n        n, t, c, h, w = lqs.size()\n\n        for _ in range(0, 3):  # at most 3 cleaning, determined empirically\n            if self.is_sequential_cleaning:\n                residues = []\n                for i in range(0, t):\n                    residue_i = self.image_cleaning(lqs[:, i, :, :, :])\n                    lqs[:, i, :, :, :] += residue_i\n                    residues.append(residue_i)\n                residues = torch.stack(residues, dim=1)\n            else:  # time -> batch, then apply cleaning at once\n                lqs = lqs.view(-1, c, h, w)\n                residues = self.image_cleaning(lqs)\n                lqs = (lqs + residues).view(n, t, c, h, w)\n\n            # determine whether to continue cleaning\n            if torch.mean(torch.abs(residues)) < self.dynamic_refine_thres:\n                break\n\n        # Super-resolution (BasicVSR)\n        outputs = self.basicvsr(lqs)\n\n        if return_lqs:\n            return outputs, lqs\n        else:\n            return outputs\n"
  },
  {
    "path": "mmagic/models/editors/real_esrgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .real_esrgan import RealESRGAN\nfrom .unet_disc import UNetDiscriminatorWithSpectralNorm\n\n__all__ = [\n    'RealESRGAN',\n    'UNetDiscriminatorWithSpectralNorm',\n]\n"
  },
  {
    "path": "mmagic/models/editors/real_esrgan/real_esrgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom ..srgan import SRGAN\n\n\n@MODELS.register_module()\nclass RealESRGAN(SRGAN):\n    \"\"\"Real-ESRGAN model for single image super-resolution.\n\n    Ref:\n    Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure\n    Synthetic Data, 2021.\n\n    Note: generator_ema is realized in EMA_HOOK\n\n    Args:\n        generator (dict): Config for the generator.\n        discriminator (dict, optional): Config for the discriminator.\n            Default: None.\n        gan_loss (dict, optional): Config for the gan loss.\n            Note that the loss weight in gan loss is only for the generator.\n        pixel_loss (dict, optional): Config for the pixel loss. Default: None.\n        perceptual_loss (dict, optional): Config for the perceptual loss.\n            Default: None.\n        is_use_sharpened_gt_in_pixel (bool, optional): Whether to use the image\n            sharpened by unsharp masking as the GT for pixel loss.\n            Default: False.\n        is_use_sharpened_gt_in_percep (bool, optional): Whether to use the\n            image sharpened by unsharp masking as the GT for perceptual loss.\n            Default: False.\n        is_use_sharpened_gt_in_gan (bool, optional): Whether to use the\n            image sharpened by unsharp masking as the GT for adversarial loss.\n            Default: False.\n        is_use_ema (bool, optional): When to apply exponential moving average\n            on the network weights. Default: True.\n        train_cfg (dict): Config for training. Default: None.\n            You may change the training of gan by setting:\n            `disc_steps`: how many discriminator updates after one generate\n            update;\n            `disc_init_steps`: how many discriminator updates at the start of\n            the training.\n            These two keys are useful when training with WGAN.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 discriminator=None,\n                 gan_loss=None,\n                 pixel_loss=None,\n                 perceptual_loss=None,\n                 is_use_sharpened_gt_in_pixel=False,\n                 is_use_sharpened_gt_in_percep=False,\n                 is_use_sharpened_gt_in_gan=False,\n                 is_use_ema=True,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            discriminator=discriminator,\n            gan_loss=gan_loss,\n            pixel_loss=pixel_loss,\n            perceptual_loss=perceptual_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.is_use_sharpened_gt_in_pixel = is_use_sharpened_gt_in_pixel\n        self.is_use_sharpened_gt_in_percep = is_use_sharpened_gt_in_percep\n        self.is_use_sharpened_gt_in_gan = is_use_sharpened_gt_in_gan\n        self.is_use_ema = is_use_ema\n\n        if is_use_ema:\n            self.generator_ema = deepcopy(self.generator)\n        else:\n            self.generator_ema = None\n\n        if train_cfg is not None:  # used for initializing from ema model\n            self.start_iter = train_cfg.get('start_iter', -1)\n        else:\n            self.start_iter = -1\n\n    def forward_tensor(self, inputs, data_samples=None, training=False):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            training (bool): Whether is training. Default: False.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        if training or not self.is_use_ema:\n            feats = self.generator(inputs)\n        else:\n            feats = self.generator_ema(inputs)\n\n        return feats\n\n    def g_step(self, batch_outputs, batch_gt_data):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tuple[Tensor]): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        gt_pixel, gt_percep, _ = batch_gt_data\n        losses = dict()\n\n        # pix loss\n        if self.pixel_loss:\n            losses['loss_pix'] = self.pixel_loss(batch_outputs, gt_pixel)\n\n        # perceptual loss\n        if self.perceptual_loss:\n            loss_percep, loss_style = self.perceptual_loss(\n                batch_outputs, gt_percep)\n            if loss_percep is not None:\n                losses['loss_perceptual'] = loss_percep\n            if loss_style is not None:\n                losses['loss_style'] = loss_style\n\n        # gan loss for generator\n        if self.gan_loss and self.discriminator:\n            fake_g_pred = self.discriminator(batch_outputs)\n            losses['loss_gan'] = self.gan_loss(\n                fake_g_pred, target_is_real=True, is_disc=False)\n\n        return losses\n\n    def d_step_real(self, batch_outputs, batch_gt_data: torch.Tensor):\n        \"\"\"Real part of D step.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tuple[Tensor]): Batch GT data.\n\n        Returns:\n            Tensor: Real part of gan_loss for discriminator.\n        \"\"\"\n\n        _, _, gt_gan = batch_gt_data\n\n        # real\n        real_d_pred = self.discriminator(gt_gan)\n        loss_d_real = self.gan_loss(\n            real_d_pred, target_is_real=True, is_disc=True)\n\n        return loss_d_real\n\n    def d_step_fake(self, batch_outputs, batch_gt_data):\n        \"\"\"Fake part of D step.\n\n        Args:\n            batch_outputs (Tensor): Output of generator.\n            batch_gt_data (Tuple[Tensor]): Batch GT data.\n\n        Returns:\n            Tensor: Fake part of gan_loss for discriminator.\n        \"\"\"\n\n        # fake\n        fake_d_pred = self.discriminator(batch_outputs.detach())\n        loss_d_fake = self.gan_loss(\n            fake_d_pred, target_is_real=False, is_disc=True)\n\n        return loss_d_fake\n\n    def extract_gt_data(self, data_samples):\n        \"\"\"extract gt data from data samples.\n\n        Args:\n            data_samples (list): List of DataSample.\n\n        Returns:\n            Tensor: Extract gt data.\n        \"\"\"\n\n        gt = data_samples.gt_img\n        gt_unsharp = data_samples.gt_unsharp / 255.\n\n        gt_pixel, gt_percep, gt_gan = gt.clone(), gt.clone(), gt.clone()\n        if self.is_use_sharpened_gt_in_pixel:\n            gt_pixel = gt_unsharp.clone()\n        if self.is_use_sharpened_gt_in_percep:\n            gt_percep = gt_unsharp.clone()\n        if self.is_use_sharpened_gt_in_gan:\n            gt_gan = gt_unsharp.clone()\n\n        return gt_pixel, gt_percep, gt_gan\n"
  },
  {
    "path": "mmagic/models/editors/real_esrgan/unet_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass UNetDiscriminatorWithSpectralNorm(BaseModule):\n    \"\"\"A U-Net discriminator with spectral normalization.\n\n    Args:\n        in_channels (int): Channel number of the input.\n        mid_channels (int, optional): Channel number of the intermediate\n            features. Default: 64.\n        skip_connection (bool, optional): Whether to use skip connection.\n            Default: True.\n    \"\"\"\n\n    def __init__(self, in_channels, mid_channels=64, skip_connection=True):\n\n        super().__init__()\n\n        self.skip_connection = skip_connection\n\n        self.conv_0 = nn.Conv2d(\n            in_channels, mid_channels, kernel_size=3, stride=1, padding=1)\n\n        # downsample\n        self.conv_1 = spectral_norm(\n            nn.Conv2d(mid_channels, mid_channels * 2, 4, 2, 1, bias=False))\n        self.conv_2 = spectral_norm(\n            nn.Conv2d(mid_channels * 2, mid_channels * 4, 4, 2, 1, bias=False))\n        self.conv_3 = spectral_norm(\n            nn.Conv2d(mid_channels * 4, mid_channels * 8, 4, 2, 1, bias=False))\n\n        # upsample\n        self.conv_4 = spectral_norm(\n            nn.Conv2d(mid_channels * 8, mid_channels * 4, 3, 1, 1, bias=False))\n        self.conv_5 = spectral_norm(\n            nn.Conv2d(mid_channels * 4, mid_channels * 2, 3, 1, 1, bias=False))\n        self.conv_6 = spectral_norm(\n            nn.Conv2d(mid_channels * 2, mid_channels, 3, 1, 1, bias=False))\n\n        # final layers\n        self.conv_7 = spectral_norm(\n            nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=False))\n        self.conv_8 = spectral_norm(\n            nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=False))\n        self.conv_9 = nn.Conv2d(mid_channels, 1, 3, 1, 1)\n\n        self.upsample = nn.Upsample(\n            scale_factor=2, mode='bilinear', align_corners=False)\n        self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)\n\n    def forward(self, img):\n        \"\"\"Forward function.\n\n        Args:\n            img (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        feat_0 = self.lrelu(self.conv_0(img))\n\n        # downsample\n        feat_1 = self.lrelu(self.conv_1(feat_0))\n        feat_2 = self.lrelu(self.conv_2(feat_1))\n        feat_3 = self.lrelu(self.conv_3(feat_2))\n\n        # upsample\n        feat_3 = self.upsample(feat_3)\n        feat_4 = self.lrelu(self.conv_4(feat_3))\n        if self.skip_connection:\n            feat_4 = feat_4 + feat_2\n\n        feat_4 = self.upsample(feat_4)\n        feat_5 = self.lrelu(self.conv_5(feat_4))\n        if self.skip_connection:\n            feat_5 = feat_5 + feat_1\n\n        feat_5 = self.upsample(feat_5)\n        feat_6 = self.lrelu(self.conv_6(feat_5))\n        if self.skip_connection:\n            feat_6 = feat_6 + feat_0\n\n        # final layers\n        out = self.lrelu(self.conv_7(feat_6))\n        out = self.lrelu(self.conv_8(out))\n\n        return self.conv_9(out)\n"
  },
  {
    "path": "mmagic/models/editors/restormer/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .restormer_net import Restormer\n\n__all__ = ['Restormer']\n"
  },
  {
    "path": "mmagic/models/editors/restormer/restormer_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport numbers\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\ndef to_3d(x):\n    \"\"\"Reshape input tensor.\"\"\"\n    return rearrange(x, 'b c h w -> b (h w) c')\n\n\ndef to_4d(x, h, w):\n    \"\"\"Reshape input tensor.\"\"\"\n    return rearrange(x, 'b (h w) c -> b c h w', h=h, w=w)\n\n\nclass BiasFree_LayerNorm(BaseModule):\n    \"\"\"Layer normalization without bias.\n\n    Args:\n        normalized_shape (tuple): The shape of inputs.\n    \"\"\"\n\n    def __init__(self, normalized_shape):\n        super(BiasFree_LayerNorm, self).__init__()\n        if isinstance(normalized_shape, numbers.Integral):\n            normalized_shape = (normalized_shape, )\n        normalized_shape = torch.Size(normalized_shape)\n\n        assert len(normalized_shape) == 1\n\n        self.weight = nn.Parameter(torch.ones(normalized_shape))\n        self.normalized_shape = normalized_shape\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        sigma = x.var(-1, keepdim=True, unbiased=False)\n        return x / torch.sqrt(sigma + 1e-5) * self.weight\n\n\nclass WithBias_LayerNorm(BaseModule):\n    \"\"\"Layer normalization with bias. The bias can be learned.\n\n    Args:\n        normalized_shape (tuple): The shape of inputs.\n    \"\"\"\n\n    def __init__(self, normalized_shape):\n        super(WithBias_LayerNorm, self).__init__()\n        if isinstance(normalized_shape, numbers.Integral):\n            normalized_shape = (normalized_shape, )\n        normalized_shape = torch.Size(normalized_shape)\n\n        assert len(normalized_shape) == 1\n\n        self.weight = nn.Parameter(torch.ones(normalized_shape))\n        self.bias = nn.Parameter(torch.zeros(normalized_shape))\n        self.normalized_shape = normalized_shape\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        mu = x.mean(-1, keepdim=True)\n        sigma = x.var(-1, keepdim=True, unbiased=False)\n        return (x - mu) / torch.sqrt(sigma + 1e-5) * self.weight + self.bias\n\n\nclass LayerNorm(BaseModule):\n    \"\"\"Layer normalization module.\n\n    Note: This is different from the layernorm2d in pytorch.\n        The layer norm here can select Layer Normalization type.\n    Args:\n        dim (int): Channel number of inputs.\n        LayerNorm_type (str): Layer Normalization type.\n    \"\"\"\n\n    def __init__(self, dim, LayerNorm_type):\n        super(LayerNorm, self).__init__()\n        if LayerNorm_type == 'BiasFree':\n            self.body = BiasFree_LayerNorm(dim)\n        else:\n            self.body = WithBias_LayerNorm(dim)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        h, w = x.shape[-2:]\n        return to_4d(self.body(to_3d(x)), h, w)\n\n\nclass FeedForward(BaseModule):\n    \"\"\"Gated-Dconv Feed-Forward Network (GDFN)\n\n    The original version of GDFN in\n    \"Restormer: Efficient Transformer for High-Resolution Image Restoration\".\n\n    Args:\n        dim (int): Channel number of inputs.\n        ffn_expansion_factor (float): channel expansion factor. Default: 2.66\n        bias (bool): The bias of convolution.\n    \"\"\"\n\n    def __init__(self, dim, ffn_expansion_factor, bias):\n        super(FeedForward, self).__init__()\n\n        hidden_features = int(dim * ffn_expansion_factor)\n\n        self.project_in = nn.Conv2d(\n            dim, hidden_features * 2, kernel_size=1, bias=bias)\n\n        self.dwconv = nn.Conv2d(\n            hidden_features * 2,\n            hidden_features * 2,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            groups=hidden_features * 2,\n            bias=bias)\n\n        self.project_out = nn.Conv2d(\n            hidden_features, dim, kernel_size=1, bias=bias)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.project_in(x)\n        x1, x2 = self.dwconv(x).chunk(2, dim=1)\n        x = F.gelu(x1) * x2\n        x = self.project_out(x)\n        return x\n\n\nclass Attention(BaseModule):\n    \"\"\"Multi-DConv Head Transposed Self-Attention (MDTA)\n\n    The original version of MDTA in\n    \"Restormer: Efficient Transformer for High-Resolution Image Restoration\".\n\n    Args:\n        dim (int): Channel number of inputs.\n        num_heads (int): Number of attention heads.\n        bias (bool): The bias of convolution.\n    \"\"\"\n\n    def __init__(self, dim, num_heads, bias):\n        super(Attention, self).__init__()\n        self.num_heads = num_heads\n        self.temperature = nn.Parameter(torch.ones(num_heads, 1, 1))\n\n        self.qkv = nn.Conv2d(dim, dim * 3, kernel_size=1, bias=bias)\n        self.qkv_dwconv = nn.Conv2d(\n            dim * 3,\n            dim * 3,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            groups=dim * 3,\n            bias=bias)\n        self.project_out = nn.Conv2d(dim, dim, kernel_size=1, bias=bias)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        b, c, h, w = x.shape\n\n        qkv = self.qkv_dwconv(self.qkv(x))\n        q, k, v = qkv.chunk(3, dim=1)\n\n        q = rearrange(\n            q, 'b (head c) h w -> b head c (h w)', head=self.num_heads)\n        k = rearrange(\n            k, 'b (head c) h w -> b head c (h w)', head=self.num_heads)\n        v = rearrange(\n            v, 'b (head c) h w -> b head c (h w)', head=self.num_heads)\n\n        q = torch.nn.functional.normalize(q, dim=-1)\n        k = torch.nn.functional.normalize(k, dim=-1)\n\n        attn = (q @ k.transpose(-2, -1)) * self.temperature\n        attn = attn.softmax(dim=-1)\n\n        out = (attn @ v)\n\n        out = rearrange(\n            out,\n            'b head c (h w) -> b (head c) h w',\n            head=self.num_heads,\n            h=h,\n            w=w)\n\n        out = self.project_out(out)\n        return out\n\n\nclass TransformerBlock(BaseModule):\n    \"\"\"Transformer Block.\n\n    The original version of Transformer Block in \"Restormer: Efficient\\\n        Transformer for High-Resolution Image Restoration\".\n\n    Args:\n        dim (int): Channel number of inputs.\n        num_heads (int): Number of attention heads.\n        ffn_expansion_factor (float): channel expansion factor. Default: 2.66\n        bias (bool): The bias of convolution.\n        LayerNorm_type (str): Layer Normalization type.\n    \"\"\"\n\n    def __init__(self, dim, num_heads, ffn_expansion_factor, bias,\n                 LayerNorm_type):\n        super(TransformerBlock, self).__init__()\n\n        self.norm1 = LayerNorm(dim, LayerNorm_type)\n        self.attn = Attention(dim, num_heads, bias)\n        self.norm2 = LayerNorm(dim, LayerNorm_type)\n        self.ffn = FeedForward(dim, ffn_expansion_factor, bias)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = x + self.attn(self.norm1(x))\n        x = x + self.ffn(self.norm2(x))\n\n        return x\n\n\nclass OverlapPatchEmbed(BaseModule):\n    \"\"\"Overlapped image patch embedding with 3x3 Conv.\n\n    Args:\n        in_c (int, optional): Channel number of inputs. Default: 3\n        embed_dim (int, optional): embedding dimension. Default: 48\n        bias (bool, optional): The bias of convolution. Default: False\n    \"\"\"\n\n    def __init__(self, in_c=3, embed_dim=48, bias=False):\n        super(OverlapPatchEmbed, self).__init__()\n\n        self.proj = nn.Conv2d(\n            in_c, embed_dim, kernel_size=3, stride=1, padding=1, bias=bias)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.proj(x)\n\n        return x\n\n\nclass Downsample(BaseModule):\n    \"\"\"Downsample modules.\n\n    Args:\n        n_feat(int): Channel number of features.\n    \"\"\"\n\n    def __init__(self, n_feat):\n        super(Downsample, self).__init__()\n\n        self.body = nn.Sequential(\n            nn.Conv2d(\n                n_feat,\n                n_feat // 2,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=False), nn.PixelUnshuffle(2))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.body(x)\n\n\nclass Upsample(BaseModule):\n    \"\"\"Upsample modules.\n\n    Args:\n        n_feat(int): Channel number of features.\n    \"\"\"\n\n    def __init__(self, n_feat):\n        super(Upsample, self).__init__()\n\n        self.body = nn.Sequential(\n            nn.Conv2d(\n                n_feat,\n                n_feat * 2,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=False), nn.PixelShuffle(2))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.body(x)\n\n\n@MODELS.register_module()\nclass Restormer(BaseModule):\n    \"\"\"Restormer A PyTorch impl of: `Restormer: Efficient Transformer for High-\n    Resolution Image Restoration`. Ref repo:\n    https://github.com/swz30/Restormer.\n\n    Args:\n        inp_channels (int): Number of input image channels. Default: 3.\n        out_channels (int): Number of output image channels: 3.\n        dim (int): Number of feature dimension. Default: 48.\n        num_blocks (List(int)): Depth of each Transformer layer.\n            Default: [4, 6, 6, 8].\n        num_refinement_blocks (int): Number of refinement blocks.\n            Default: 4.\n        heads (List(int)): Number of attention heads in different layers.\n            Default: 7.\n        ffn_expansion_factor (float): Ratio of feed forward network expansion.\n            Default: 2.66.\n        bias (bool): The bias of convolution. Default: False\n        LayerNorm_type (str|optional): Select layer Normalization type.\n            Optional: 'WithBias','BiasFree'\n            Default: 'WithBias'.\n        dual_pixel_task (bool): True for dual-pixel defocus deblurring only.\n            Also set inp_channels=6. Default: False.\n        dual_keys (List): Keys of dual images in inputs.\n            Default: ['imgL', 'imgR'].\n    \"\"\"\n\n    def __init__(self,\n                 inp_channels=3,\n                 out_channels=3,\n                 dim=48,\n                 num_blocks=[4, 6, 6, 8],\n                 num_refinement_blocks=4,\n                 heads=[1, 2, 4, 8],\n                 ffn_expansion_factor=2.66,\n                 bias=False,\n                 LayerNorm_type='WithBias',\n                 dual_pixel_task=False,\n                 dual_keys=['imgL', 'imgR']):\n\n        super(Restormer, self).__init__()\n\n        self.patch_embed = OverlapPatchEmbed(inp_channels, dim)\n\n        self.encoder_level1 = nn.Sequential(*[\n            TransformerBlock(\n                dim=dim,\n                num_heads=heads[0],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[0])\n        ])\n\n        self.down1_2 = Downsample(dim)\n        self.encoder_level2 = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**1),\n                num_heads=heads[1],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[1])\n        ])\n\n        self.down2_3 = Downsample(int(dim * 2**1))\n        self.encoder_level3 = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**2),\n                num_heads=heads[2],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[2])\n        ])\n\n        self.down3_4 = Downsample(int(dim * 2**2))\n        self.latent = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**3),\n                num_heads=heads[3],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[3])\n        ])\n\n        self.up4_3 = Upsample(int(dim * 2**3))\n        self.reduce_chan_level3 = nn.Conv2d(\n            int(dim * 2**3), int(dim * 2**2), kernel_size=1, bias=bias)\n        self.decoder_level3 = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**2),\n                num_heads=heads[2],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[2])\n        ])\n\n        self.up3_2 = Upsample(int(dim * 2**2))\n        self.reduce_chan_level2 = nn.Conv2d(\n            int(dim * 2**2), int(dim * 2**1), kernel_size=1, bias=bias)\n        self.decoder_level2 = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**1),\n                num_heads=heads[1],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[1])\n        ])\n\n        self.up2_1 = Upsample(int(dim * 2**1))\n\n        self.decoder_level1 = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**1),\n                num_heads=heads[0],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type) for i in range(num_blocks[0])\n        ])\n\n        self.refinement = nn.Sequential(*[\n            TransformerBlock(\n                dim=int(dim * 2**1),\n                num_heads=heads[0],\n                ffn_expansion_factor=ffn_expansion_factor,\n                bias=bias,\n                LayerNorm_type=LayerNorm_type)\n            for i in range(num_refinement_blocks)\n        ])\n\n        self.dual_pixel_task = dual_pixel_task\n        self.dual_keys = dual_keys\n        if self.dual_pixel_task:\n            self.skip_conv = nn.Conv2d(\n                dim, int(dim * 2**1), kernel_size=1, bias=bias)\n\n        self.output = nn.Conv2d(\n            int(dim * 2**1),\n            out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            bias=bias)\n\n    def forward(self, inp_img):\n        \"\"\"Forward function.\n\n        Args:\n            inp_img (Tensor): Input tensor with shape (B, C, H, W).\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.dual_pixel_task:\n            dual_images = [inp_img[key] for key in self.dual_keys]\n            inp_img = torch.cat(dual_images, dim=1)\n\n        _, _, h, w = inp_img.shape\n        if h % 8 == 0:\n            padding_h = 0\n        else:\n            padding_h = 8 - h % 8\n        if w % 8 == 0:\n            padding_w = 0\n        else:\n            padding_w = 8 - w % 8\n\n        inp_img = F.pad(inp_img, (0, padding_w, 0, padding_h), 'reflect')\n        inp_enc_level1 = self.patch_embed(inp_img)\n        out_enc_level1 = self.encoder_level1(inp_enc_level1)\n\n        inp_enc_level2 = self.down1_2(out_enc_level1)\n        out_enc_level2 = self.encoder_level2(inp_enc_level2)\n\n        inp_enc_level3 = self.down2_3(out_enc_level2)\n        out_enc_level3 = self.encoder_level3(inp_enc_level3)\n\n        inp_enc_level4 = self.down3_4(out_enc_level3)\n        latent = self.latent(inp_enc_level4)\n\n        inp_dec_level3 = self.up4_3(latent)\n        inp_dec_level3 = torch.cat([inp_dec_level3, out_enc_level3], 1)\n        inp_dec_level3 = self.reduce_chan_level3(inp_dec_level3)\n        out_dec_level3 = self.decoder_level3(inp_dec_level3)\n\n        inp_dec_level2 = self.up3_2(out_dec_level3)\n        inp_dec_level2 = torch.cat([inp_dec_level2, out_enc_level2], 1)\n        inp_dec_level2 = self.reduce_chan_level2(inp_dec_level2)\n        out_dec_level2 = self.decoder_level2(inp_dec_level2)\n\n        inp_dec_level1 = self.up2_1(out_dec_level2)\n        inp_dec_level1 = torch.cat([inp_dec_level1, out_enc_level1], 1)\n        out_dec_level1 = self.decoder_level1(inp_dec_level1)\n\n        out_dec_level1 = self.refinement(out_dec_level1)\n\n        if self.dual_pixel_task:\n            out_dec_level1 = out_dec_level1 + self.skip_conv(inp_enc_level1)\n            out_dec_level1 = self.output(out_dec_level1)\n        else:\n            out_dec_level1 = self.output(out_dec_level1) + inp_img\n\n        return out_dec_level1[:, :, :h, :w]\n"
  },
  {
    "path": "mmagic/models/editors/sagan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .sagan import SAGAN\nfrom .sagan_discriminator import ProjDiscriminator\nfrom .sagan_generator import SNGANGenerator\nfrom .sagan_modules import (SNGANDiscHeadResBlock, SNGANDiscResBlock,\n                            SNGANGenResBlock)\n\n__all__ = [\n    'SAGAN', 'SNGANGenerator', 'ProjDiscriminator', 'SNGANDiscHeadResBlock',\n    'SNGANDiscResBlock', 'SNGANGenResBlock'\n]\n"
  },
  {
    "path": "mmagic/models/editors/sagan/sagan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseConditionalGAN\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module('SNGAN')\n@MODELS.register_module()\nclass SAGAN(BaseConditionalGAN):\n    \"\"\"Implementation of `Self-Attention Generative Adversarial Networks`.\n\n    <https://arxiv.org/abs/1805.08318>`_ (SAGAN), `Spectral Normalization for\n    Generative Adversarial Networks <https://arxiv.org/abs/1802.05957>`_\n    (SNGAN), and `cGANs with Projection Discriminator\n    <https://arxiv.org/abs/1802.05637>`_ (Proj-GAN).\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.sagan.SNGANGenerator`\n    and\n    :class:`~mmagic.models.editors.sagan.ProjDiscriminator`\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): Number of times the generator was completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): Number of times the discriminator was\n            completely updated before the generator is updated. Defaults to 1.\n        noise_size (Optional[int]): Size of the input noise vector.\n            Default to 128.\n        num_classes (Optional[int]): The number classes you would like to\n            generate. Defaults to None.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 noise_size: Optional[int] = 128,\n                 num_classes: Optional[int] = None,\n                 ema_config: Optional[Dict] = None):\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, noise_size,\n                         num_classes, ema_config)\n\n    def disc_loss(self, disc_pred_fake: Tensor,\n                  disc_pred_real: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Get disc loss. SAGAN, SNGAN and Proj-GAN use hinge loss to train\n        the discriminator.\n\n        .. math:\n            L_{D} = -\\mathbb{E}_{\\left(x, y\\right)\\sim{p}_{data}}\n                \\left[\\min\\left(0, -1 + D\\left(x, y\\right)\\right)\\right]\n                -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\\left[\\min\n                \\left(0, -1 - D\\left(G\\left(z\\right), y\\right)\\right)\\right]\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.relu(1 + disc_pred_fake).mean()\n        losses_dict['loss_disc_real'] = F.relu(1 - disc_pred_real).mean()\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Get disc loss. SAGAN, SNGAN and Proj-GAN use hinge loss to train\n        the generator.\n\n        .. math:\n            L_{G} = -\\mathbb{E}_{z\\sim{p_{z}}, y\\sim{p_{data}}}\n                D\\left(G\\left(z\\right), y\\right)\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n        real_labels = self.data_sample_to_label(data_samples)\n        assert real_labels is not None, (\n            'Cannot found \\'gt_label\\' in \\'data_sample\\'.')\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise=noise_batch, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n        disc_pred_real = self.discriminator(real_imgs, label=real_labels)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_labels = self.label_fn(num_batches=num_batches)\n        fake_imgs = self.generator(\n            noise=noise, label=fake_labels, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs, label=fake_labels)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/sagan/sagan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModule, xavier_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom torch.nn.init import xavier_uniform_\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module('SAGANDiscriminator')\n@MODELS.register_module()\nclass ProjDiscriminator(BaseModule):\n    r\"\"\"Discriminator for SNGAN / Proj-GAN. The implementation is refer to\n    https://github.com/pfnet-research/sngan_projection/tree/master/dis_models\n\n    The overall structure of the projection discriminator can be split into a\n    ``from_rgb`` layer, a group of ResBlocks, a linear decision layer, and a\n    projection layer. To support defining custom layers, we introduce\n    ``from_rgb_cfg`` and ``blocks_cfg``.\n\n    The design of the model structure is highly corresponding to the output\n    resolution. Therefore, we provide `channels_cfg` and `downsample_cfg` to\n    control the input channels and the downsample behavior of the intermediate\n    blocks.\n\n    ``downsample_cfg``: In default config of SNGAN / Proj-GAN, whether to apply\n        downsample in each intermediate blocks is quite flexible and\n        corresponding to the resolution of the output image. Therefore, we\n        support user to define the ``downsample_cfg`` by themselves, and to\n        control the structure of the discriminator.\n\n    ``channels_cfg``: In default config of SNGAN / Proj-GAN, the number of\n        ResBlocks and the channels of those blocks are corresponding to the\n        resolution of the output image. Therefore, we allow user to define\n        `channels_cfg` for try their own models.  We also provide a default\n        config to allow users to build the model only from the output\n        resolution.\n\n    Args:\n        input_scale (int): The scale of the input image.\n        num_classes (int, optional): The number classes you would like to\n            generate. If num_classes=0, no label projection would be used.\n            Default to 0.\n        base_channels (int, optional): The basic channel number of the\n            discriminator. The other layers contains channels based on this\n            number.  Defaults to 128.\n        input_channels (int, optional): Channels of the input image.\n            Defaults to 3.\n        attention_cfg (dict, optional): Config for the self-attention block.\n            Default to ``dict(type='SelfAttentionBlock')``.\n        attention_after_nth_block (int | list[int], optional): Self-attention\n            block would be added after which *ConvBlock* (including the head\n            block). If ``int`` is passed, only one attention block would be\n            added. If ``list`` is passed, self-attention blocks would be added\n            after multiple ConvBlocks. To be noted that if the input is\n            smaller than ``1``, self-attention corresponding to this index\n            would be ignored. Default to 0.\n        channels_cfg (list | dict[list], optional): Config for input channels\n            of the intermediate blocks. If list is passed, each element of the\n            list means the input channels of current block is how many times\n            compared to the ``base_channels``. For block ``i``, the input and\n            output channels should be ``channels_cfg[i]`` and\n            ``channels_cfg[i+1]`` If dict is provided, the key of the dict\n            should be the output scale and corresponding value should be a list\n            to define channels.  Default: Please refer to\n            ``_defualt_channels_cfg``.\n        downsample_cfg (list[bool] | dict[list], optional): Config for\n            downsample behavior of the intermediate layers. If a list is\n            passed, ``downsample_cfg[idx] == True`` means apply downsample in\n            idx-th block, and vice versa. If dict is provided, the key dict\n            should be the input scale of the image and corresponding value\n            should be a list ti define the downsample behavior. Default: Please\n            refer to ``_default_downsample_cfg``.\n        from_rgb_cfg (dict, optional): Config for the first layer to convert\n            rgb image to feature map. Defaults to\n            ``dict(type='SNGANDiscHeadResBlock')``.\n        blocks_cfg (dict, optional): Config for the intermediate blocks.\n            Defaults to ``dict(type='SNGANDiscResBlock')``\n        act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to ``dict(type='ReLU')``.\n        with_spectral_norm (bool, optional): Whether use spectral norm for\n            all conv blocks or not. Default to True.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Defaults to `1e-12`.\n        init_cfg (dict, optional): Config for weight initialization.\n            Default to ``dict(type='BigGAN')``.\n        pretrained (str | dict , optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict.  Defaults to None.\n    \"\"\"\n\n    # default channel factors\n    _defualt_channels_cfg = {\n        32: [1, 1, 1],\n        64: [2, 4, 8, 16],\n        128: [2, 4, 8, 16, 16],\n    }\n\n    # default downsample behavior\n    _defualt_downsample_cfg = {\n        32: [True, False, False],\n        64: [True, True, True, True],\n        128: [True, True, True, True, False]\n    }\n\n    def __init__(self,\n                 input_scale,\n                 num_classes=0,\n                 base_channels=128,\n                 input_channels=3,\n                 attention_cfg=dict(type='SelfAttentionBlock'),\n                 attention_after_nth_block=-1,\n                 channels_cfg=None,\n                 downsample_cfg=None,\n                 from_rgb_cfg=dict(type='SNGANDiscHeadResBlock'),\n                 blocks_cfg=dict(type='SNGANDiscResBlock'),\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=True,\n                 sn_style='torch',\n                 sn_eps=1e-12,\n                 init_cfg=dict(type='BigGAN'),\n                 pretrained=None):\n\n        super().__init__()\n\n        self.init_type = init_cfg.get('type', None)\n\n        # add SN options and activation function options to cfg\n        self.from_rgb_cfg = deepcopy(from_rgb_cfg)\n        self.from_rgb_cfg.setdefault('act_cfg', act_cfg)\n        self.from_rgb_cfg.setdefault('with_spectral_norm', with_spectral_norm)\n        self.from_rgb_cfg.setdefault('sn_style', sn_style)\n        self.from_rgb_cfg.setdefault('init_cfg', init_cfg)\n\n        # add SN options and activation function options to cfg\n        self.blocks_cfg = deepcopy(blocks_cfg)\n        self.blocks_cfg.setdefault('act_cfg', act_cfg)\n        self.blocks_cfg.setdefault('with_spectral_norm', with_spectral_norm)\n        self.blocks_cfg.setdefault('sn_style', sn_style)\n        self.blocks_cfg.setdefault('sn_eps', sn_eps)\n        self.blocks_cfg.setdefault('init_cfg', init_cfg)\n\n        channels_cfg = deepcopy(self._defualt_channels_cfg) \\\n            if channels_cfg is None else deepcopy(channels_cfg)\n        if isinstance(channels_cfg, dict):\n            if input_scale not in channels_cfg:\n                raise KeyError(f'`input_scale={input_scale} is not found in '\n                               '`channel_cfg`, only support configs for '\n                               f'{[chn for chn in channels_cfg.keys()]}')\n            self.channel_factor_list = channels_cfg[input_scale]\n        elif isinstance(channels_cfg, list):\n            self.channel_factor_list = channels_cfg\n        else:\n            raise ValueError('Only support list or dict for `channel_cfg`, '\n                             f'receive {type(channels_cfg)}')\n\n        downsample_cfg = deepcopy(self._defualt_downsample_cfg) \\\n            if downsample_cfg is None else deepcopy(downsample_cfg)\n        if isinstance(downsample_cfg, dict):\n            if input_scale not in downsample_cfg:\n                raise KeyError(f'`output_scale={input_scale} is not found in '\n                               '`downsample_cfg`, only support configs for '\n                               f'{[chn for chn in downsample_cfg.keys()]}')\n            self.downsample_list = downsample_cfg[input_scale]\n        elif isinstance(downsample_cfg, list):\n            self.downsample_list = downsample_cfg\n        else:\n            raise ValueError('Only support list or dict for `channel_cfg`, '\n                             f'receive {type(downsample_cfg)}')\n\n        if len(self.downsample_list) != len(self.channel_factor_list):\n            raise ValueError('`downsample_cfg` should have same length with '\n                             '`channels_cfg`, but receive '\n                             f'{len(self.downsample_list)} and '\n                             f'{len(self.channel_factor_list)}.')\n\n        # check `attention_after_nth_block`\n        if not isinstance(attention_after_nth_block, list):\n            attention_after_nth_block = [attention_after_nth_block]\n        if not all([isinstance(idx, int)\n                    for idx in attention_after_nth_block]):\n            raise ValueError('`attention_after_nth_block` only support int or '\n                             'a list of int. Please check your input type.')\n\n        self.from_rgb = MODELS.build(\n            self.from_rgb_cfg,\n            default_args=dict(\n                in_channels=input_channels, out_channels=base_channels))\n\n        self.conv_blocks = nn.ModuleList()\n        # add self-attention block after the first block\n        if 1 in attention_after_nth_block:\n            attn_cfg_ = deepcopy(attention_cfg)\n            attn_cfg_['in_channels'] = base_channels\n            attn_cfg_['sn_style'] = sn_style\n            self.conv_blocks.append(MODELS.build(attn_cfg_))\n\n        for idx in range(len(self.downsample_list)):\n            factor_input = 1 if idx == 0 else self.channel_factor_list[idx - 1]\n            factor_output = self.channel_factor_list[idx]\n\n            # get block-specific config\n            block_cfg_ = deepcopy(self.blocks_cfg)\n            block_cfg_['downsample'] = self.downsample_list[idx]\n            block_cfg_['in_channels'] = factor_input * base_channels\n            block_cfg_['out_channels'] = factor_output * base_channels\n            self.conv_blocks.append(MODELS.build(block_cfg_))\n\n            # build self-attention block\n            # the first ConvBlock is `from_rgb` block,\n            # add 2 to get the index of the ConvBlocks\n            if idx + 2 in attention_after_nth_block:\n                attn_cfg_ = deepcopy(attention_cfg)\n                attn_cfg_['in_channels'] = factor_output * base_channels\n                self.conv_blocks.append(MODELS.build(attn_cfg_))\n\n        self.decision = nn.Linear(factor_output * base_channels, 1)\n\n        if with_spectral_norm:\n            self.decision = spectral_norm(self.decision)\n\n        self.num_classes = num_classes\n\n        # In this case, discriminator is designed for conditional synthesis.\n        if num_classes > 0:\n            self.proj_y = nn.Embedding(num_classes,\n                                       factor_output * base_channels)\n            if with_spectral_norm:\n                self.proj_y = spectral_norm(self.proj_y)\n\n        self.activate = MODELS.build(act_cfg)\n        self.init_weights(pretrained)\n\n    def forward(self, x, label=None):\n        \"\"\"Forward function. If `self.num_classes` is larger than 0, label\n        projection would be used.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n            label (torch.Tensor, options): Label correspond to the input image.\n                Noted that, if `self.num_classed` is larger than 0,\n                `label` should not be None.  Default to None.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image.\n        \"\"\"\n        h = self.from_rgb(x)\n        for conv_block in self.conv_blocks:\n            h = conv_block(h)\n        h = self.activate(h)\n        h = torch.sum(h, dim=[2, 3])\n        out = self.decision(h)\n\n        if self.num_classes > 0:\n            w_y = self.proj_y(label)\n            out = out + torch.sum(w_y * h, dim=1, keepdim=True)\n        return out.view(out.size(0), -1)\n\n    def init_weights(self, pretrained=None, strict=True):\n        \"\"\"Init weights for SNGAN-Proj and SAGAN. If ``pretrained=None`` and\n        weight initialization would follow the ``INIT_TYPE`` in\n        ``init_cfg=dict(type=INIT_TYPE)``.\n\n        For SNGAN-Proj\n        (``INIT_TYPE.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']``),\n        we follow the initialization method in the official Chainer's\n        implementation (https://github.com/pfnet-research/sngan_projection).\n\n        For SAGAN (``INIT_TYPE.upper() == 'SAGAN'``), we follow the\n        initialization method in official tensorflow's implementation\n        (https://github.com/brain-research/self-attention-gan).\n\n        Besides the reimplementation of the official code's initialization, we\n        provide BigGAN's and Pytorch-StudioGAN's style initialization\n        (``INIT_TYPE.upper() == BIGGAN`` and ``INIT_TYPE.upper() == STUDIO``).\n        Please refer to https://github.com/ajbrock/BigGAN-PyTorch and\n        https://github.com/POSTECH-CVLab/PyTorch-StudioGAN.\n\n        Args:\n            pretrained (str | dict, optional): Path for the pretrained model or\n                dict containing information for pretrained models whose\n                necessary key is 'ckpt_path'. Besides, you can also provide\n                'prefix' to load the generator part from the whole state dict.\n                Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=strict, logger=logger)\n        elif isinstance(pretrained, dict):\n            ckpt_path = pretrained.get('ckpt_path', None)\n            assert ckpt_path is not None\n            prefix = pretrained.get('prefix', '')\n            map_location = pretrained.get('map_location', 'cpu')\n            strict = pretrained.get('strict', True)\n            state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                      map_location)\n            self.load_state_dict(state_dict, strict=strict)\n        elif pretrained is None:\n            if self.init_type.upper() == 'STUDIO':\n                # initialization method from Pytorch-StudioGAN\n                #   * weight: orthogonal_init gain=1\n                #   * bias  : 0\n                for m in self.modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                        nn.init.orthogonal_(m.weight, gain=1)\n                        if hasattr(m, 'bias') and m.bias is not None:\n                            m.bias.data.fill_(0.)\n            elif self.init_type.upper() == 'BIGGAN':\n                # initialization method from BigGAN-pytorch\n                #   * weight: xavier_init gain=1\n                #   * bias  : default\n                for m in self.modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                        xavier_uniform_(m.weight, gain=1)\n            elif self.init_type.upper() == 'SAGAN':\n                # initialization method from official tensorflow code\n                #   * weight: xavier_init gain=1\n                #   * bias  : 0\n                for m in self.modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                        xavier_init(m, gain=1, distribution='uniform')\n            elif self.init_type.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']:\n                # initialization method from the official chainer code\n                #   * embedding.weight: xavier_init gain=1\n                #   * conv.weight     : xavier_init gain=sqrt(2)\n                #   * shortcut.weight : xavier_init gain=1\n                #   * bias            : 0\n                for n, m in self.named_modules():\n                    if isinstance(m, nn.Conv2d):\n                        if 'shortcut' in n:\n                            xavier_init(m, gain=1, distribution='uniform')\n                        else:\n                            xavier_init(\n                                m, gain=np.sqrt(2), distribution='uniform')\n                    if isinstance(m, (nn.Linear, nn.Embedding)):\n                        xavier_init(m, gain=1, distribution='uniform')\n            else:\n                raise NotImplementedError('Unknown initialization method: '\n                                          f'\\'{self.init_type}\\'')\n        else:\n            raise TypeError(\"'pretrained' must by a str or None. \"\n                            f'But receive {type(pretrained)}.')\n"
  },
  {
    "path": "mmagic/models/editors/sagan/sagan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine import is_list_of\nfrom mmengine.dist import is_distributed\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModule, constant_init, xavier_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom torch.nn.init import xavier_uniform_\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.models.utils import get_module_device\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module('SAGANGenerator')\n@MODELS.register_module()\nclass SNGANGenerator(BaseModule):\n    r\"\"\"Generator for SNGAN / Proj-GAN. The implementation refers to\n    https://github.com/pfnet-research/sngan_projection/tree/master/gen_models\n\n    In our implementation, we have two notable design. Namely,\n    ``channels_cfg`` and ``blocks_cfg``.\n\n    ``channels_cfg``: In default config of SNGAN / Proj-GAN, the number of\n        ResBlocks and the channels of those blocks are corresponding to the\n        resolution of the output image. Therefore, we allow user to define\n        ``channels_cfg`` to try their own models. We also provide a default\n        config to allow users to build the model only from the output\n        resolution.\n\n    ``block_cfg``: In reference code, the generator consists of a group of\n        ResBlock. However, in our implementation, to make this model more\n        generalize, we support defining ``blocks_cfg`` by users and loading\n        the blocks by calling the build_module method.\n\n    Args:\n        output_scale (int): Output scale for the generated image.\n        num_classes (int, optional): The number classes you would like to\n            generate. This arguments would influence the structure of the\n            intermediate blocks and label sampling operation in ``forward``\n            (e.g. If num_classes=0, ConditionalNormalization layers would\n            degrade to unconditional ones.). This arguments would be passed\n            to intermediate blocks by overwrite their config. Defaults to 0.\n        base_channels (int, optional): The basic channel number of the\n            generator. The other layers contains channels based on this number.\n            Default to 64.\n        out_channels (int, optional): Channels of the output images.\n            Default to 3.\n        input_scale (int, optional): Input scale for the features.\n            Defaults to 4.\n        noise_size (int, optional): Size of the input noise vector.\n            Default to 128.\n        attention_cfg (dict, optional): Config for the self-attention block.\n            Default to ``dict(type='SelfAttentionBlock')``.\n        attention_after_nth_block (int | list[int], optional): Self attention\n            block would be added after which *ConvBlock*. If ``int`` is passed,\n            only one attention block would be added. If ``list`` is passed,\n            self-attention blocks would be added after multiple ConvBlocks.\n            To be noted that if the input is smaller than ``1``,\n            self-attention corresponding to this index would be ignored.\n            Default to 0.\n        channels_cfg (list | dict[list], optional): Config for input channels\n            of the intermediate blocks. If list is passed, each element of the\n            list means the input channels of current block is how many times\n            compared to the ``base_channels``. For block ``i``, the input and\n            output channels should be ``channels_cfg[i]`` and\n            ``channels_cfg[i+1]`` If dict is provided, the key of the dict\n            should be the output scale and corresponding value should be a list\n            to define channels.  Default: Please refer to\n            ``_defualt_channels_cfg``.\n        blocks_cfg (dict, optional): Config for the intermediate blocks.\n            Defaults to ``dict(type='SNGANGenResBlock')``\n        act_cfg (dict, optional): Activation config for the final output\n            layer. Defaults to ``dict(type='ReLU')``.\n        use_cbn (bool, optional): Whether use conditional normalization. This\n            argument would pass to norm layers. Defaults to True.\n        auto_sync_bn (bool, optional): Whether convert Batch Norm to\n            Synchronized ones when Distributed training is on. Defaults to\n            True.\n        with_spectral_norm (bool, optional): Whether use spectral norm for\n            conv blocks or not. Default to False.\n        with_embedding_spectral_norm (bool, optional): Whether use spectral\n            norm for embedding layers in normalization blocks or not. If not\n            specified (set as ``None``), ``with_embedding_spectral_norm`` would\n            be set as the same value as ``with_spectral_norm``.\n            Defaults to None.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        norm_eps (float, optional): eps for Normalization layers (both\n            conditional and non-conditional ones). Default to `1e-4`.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Defaults to `1e-12`.\n        init_cfg (string, optional): Config for weight initialization.\n            Defaults to ``dict(type='BigGAN')``.\n        pretrained (str | dict, optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict.  Defaults to None.\n        rgb_to_bgr (bool, optional): Whether to reformat the output channels\n                with order `bgr`. We provide several pre-trained BigGAN\n                weights whose output channels order is `rgb`. You can set\n                this argument to True to use the weights.\n    \"\"\"\n\n    # default channel factors\n    _default_channels_cfg = {\n        32: [1, 1, 1],\n        64: [16, 8, 4, 2],\n        128: [16, 16, 8, 4, 2]\n    }\n\n    def __init__(self,\n                 output_scale,\n                 num_classes=0,\n                 base_channels=64,\n                 out_channels=3,\n                 input_scale=4,\n                 noise_size=128,\n                 attention_cfg=dict(type='SelfAttentionBlock'),\n                 attention_after_nth_block=0,\n                 channels_cfg=None,\n                 blocks_cfg=dict(type='SNGANGenResBlock'),\n                 act_cfg=dict(type='ReLU'),\n                 use_cbn=True,\n                 auto_sync_bn=True,\n                 with_spectral_norm=False,\n                 with_embedding_spectral_norm=None,\n                 sn_style='torch',\n                 norm_eps=1e-4,\n                 sn_eps=1e-12,\n                 init_cfg=dict(type='BigGAN'),\n                 pretrained=None,\n                 rgb_to_bgr=False):\n\n        super().__init__()\n\n        self.input_scale = input_scale\n        self.output_scale = output_scale\n        self.noise_size = noise_size\n        self.num_classes = num_classes\n        self.init_type = init_cfg.get('type', None)\n        self.rgb_to_bgr = rgb_to_bgr\n\n        self.blocks_cfg = deepcopy(blocks_cfg)\n\n        self.blocks_cfg.setdefault('num_classes', num_classes)\n        self.blocks_cfg.setdefault('act_cfg', act_cfg)\n        self.blocks_cfg.setdefault('use_cbn', use_cbn)\n        self.blocks_cfg.setdefault('auto_sync_bn', auto_sync_bn)\n        self.blocks_cfg.setdefault('with_spectral_norm', with_spectral_norm)\n\n        # set `norm_spectral_norm` as `with_spectral_norm` if not defined\n        with_embedding_spectral_norm = with_embedding_spectral_norm \\\n            if with_embedding_spectral_norm is not None else with_spectral_norm\n        self.blocks_cfg.setdefault('with_embedding_spectral_norm',\n                                   with_embedding_spectral_norm)\n        self.blocks_cfg.setdefault('init_cfg', init_cfg)\n        self.blocks_cfg.setdefault('sn_style', sn_style)\n        self.blocks_cfg.setdefault('norm_eps', norm_eps)\n        self.blocks_cfg.setdefault('sn_eps', sn_eps)\n\n        channels_cfg = deepcopy(self._default_channels_cfg) \\\n            if channels_cfg is None else deepcopy(channels_cfg)\n        if isinstance(channels_cfg, dict):\n            if output_scale not in channels_cfg:\n                raise KeyError(f'`output_scale={output_scale} is not found in '\n                               '`channel_cfg`, only support configs for '\n                               f'{[chn for chn in channels_cfg.keys()]}')\n            self.channel_factor_list = channels_cfg[output_scale]\n        elif isinstance(channels_cfg, list):\n            self.channel_factor_list = channels_cfg\n        else:\n            raise ValueError('Only support list or dict for `channel_cfg`, '\n                             f'receive {type(channels_cfg)}')\n\n        self.noise2feat = nn.Linear(\n            noise_size,\n            input_scale**2 * base_channels * self.channel_factor_list[0])\n        if with_spectral_norm:\n            self.noise2feat = spectral_norm(self.noise2feat)\n\n        # check `attention_after_nth_block`\n        if not isinstance(attention_after_nth_block, list):\n            attention_after_nth_block = [attention_after_nth_block]\n        if not is_list_of(attention_after_nth_block, int):\n            raise ValueError('`attention_after_nth_block` only support int or '\n                             'a list of int. Please check your input type.')\n\n        self.conv_blocks = nn.ModuleList()\n        self.attention_block_idx = []\n        for idx in range(len(self.channel_factor_list)):\n            factor_input = self.channel_factor_list[idx]\n            factor_output = self.channel_factor_list[idx+1] \\\n                if idx < len(self.channel_factor_list)-1 else 1\n\n            # get block-specific config\n            block_cfg_ = deepcopy(self.blocks_cfg)\n            block_cfg_['in_channels'] = factor_input * base_channels\n            block_cfg_['out_channels'] = factor_output * base_channels\n            self.conv_blocks.append(MODELS.build(block_cfg_))\n\n            # build self-attention block\n            # `idx` is start from 0, add 1 to get the index\n            if idx + 1 in attention_after_nth_block:\n                self.attention_block_idx.append(len(self.conv_blocks))\n                attn_cfg_ = deepcopy(attention_cfg)\n                attn_cfg_['in_channels'] = factor_output * base_channels\n                attn_cfg_['sn_style'] = sn_style\n                self.conv_blocks.append(MODELS.build(attn_cfg_))\n\n        to_rgb_norm_cfg = dict(type='BN', eps=norm_eps)\n        if is_distributed() and auto_sync_bn:\n            to_rgb_norm_cfg['type'] = 'SyncBN'\n\n        self.to_rgb = ConvModule(\n            factor_output * base_channels,\n            out_channels,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            bias=True,\n            norm_cfg=to_rgb_norm_cfg,\n            act_cfg=act_cfg,\n            order=('norm', 'act', 'conv'),\n            with_spectral_norm=with_spectral_norm)\n        self.final_act = MODELS.build(dict(type='Tanh'))\n\n        self.init_weights(pretrained)\n\n    def forward(self, noise, num_batches=0, label=None, return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            label (torch.Tensor | callable | None): You can directly give a\n                batch of label through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of label data. Otherwise, the\n                ``None`` indicates to use the default label sampler.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output\n                image will be returned. Otherwise, a dict contains\n                ``fake_image``, ``noise_batch`` and ``label_batch``\n                would be returned.\n        \"\"\"\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size))\n\n        if isinstance(label, torch.Tensor):\n            if label.ndim != 1:\n                assert all([s == 1 for s in label.shape[1:]])\n                label = label.view(-1)\n            assert label.ndim == 1, ('The label should be in shape of (n, )'\n                                     f'but got {label.shape}.')\n            label_batch = label\n        elif callable(label):\n            label_generator = label\n            assert num_batches > 0\n            label_batch = label_generator(num_batches)\n        elif self.num_classes == 0:\n            label_batch = None\n        else:\n            assert num_batches > 0\n            label_batch = torch.randint(0, self.num_classes, (num_batches, ))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n        if label_batch is not None:\n            label_batch = label_batch.to(get_module_device(self))\n\n        x = self.noise2feat(noise_batch)\n        x = x.reshape(x.size(0), -1, self.input_scale, self.input_scale)\n\n        for idx, conv_block in enumerate(self.conv_blocks):\n            if idx in self.attention_block_idx:\n                x = conv_block(x)\n            else:\n                x = conv_block(x, label_batch)\n\n        out_feat = self.to_rgb(x)\n        out_img = self.final_act(out_feat)\n\n        if self.rgb_to_bgr:\n            out_img = out_img[:, [2, 1, 0], ...]\n\n        if return_noise:\n            return dict(\n                fake_img=out_img, noise_batch=noise_batch, label=label_batch)\n        return out_img\n\n    def init_weights(self, pretrained=None, strict=True):\n        \"\"\"Init weights for SNGAN-Proj and SAGAN. If ``pretrained=None``,\n        weight initialization would follow the ``INIT_TYPE`` in\n        ``init_cfg=dict(type=INIT_TYPE)``.\n\n        For SNGAN-Proj,\n        (``INIT_TYPE.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']``),\n        we follow the initialization method in the official Chainer's\n        implementation (https://github.com/pfnet-research/sngan_projection).\n\n        For SAGAN (``INIT_TYPE.upper() == 'SAGAN'``), we follow the\n        initialization method in official tensorflow's implementation\n        (https://github.com/brain-research/self-attention-gan).\n\n        Besides the reimplementation of the official code's initialization, we\n        provide BigGAN's and Pytorch-StudioGAN's style initialization\n        (``INIT_TYPE.upper() == BIGGAN`` and ``INIT_TYPE.upper() == STUDIO``).\n        Please refer to https://github.com/ajbrock/BigGAN-PyTorch and\n        https://github.com/POSTECH-CVLab/PyTorch-StudioGAN.\n\n        Args:\n            pretrained (str | dict, optional): Path for the pretrained model or\n                dict containing information for pretrained models whose\n                necessary key is 'ckpt_path'. Besides, you can also provide\n                'prefix' to load the generator part from the whole state dict.\n                Defaults to None.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=strict, logger=logger)\n        elif isinstance(pretrained, dict):\n            ckpt_path = pretrained.get('ckpt_path', None)\n            assert ckpt_path is not None\n            prefix = pretrained.get('prefix', '')\n            map_location = pretrained.get('map_location', 'cpu')\n            strict = pretrained.get('strict', True)\n            state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                      map_location)\n            self.load_state_dict(state_dict, strict=strict)\n        elif pretrained is None:\n            if self.init_type.upper() in 'STUDIO':\n                # initialization method from Pytorch-StudioGAN\n                #   * weight: orthogonal_init gain=1\n                #   * bias  : 0\n                for m in self.modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                        nn.init.orthogonal_(m.weight)\n                        if hasattr(m, 'bias') and m.bias is not None:\n                            m.bias.data.fill_(0.)\n            elif self.init_type.upper() == 'BIGGAN':\n                # initialization method from BigGAN-pytorch\n                #   * weight: xavier_init gain=1\n                #   * bias  : default\n                for n, m in self.named_modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear, nn.Embedding)):\n                        xavier_uniform_(m.weight, gain=1)\n            elif self.init_type.upper() == 'SAGAN':\n                # initialization method from official tensorflow code\n                #   * weight          : xavier_init gain=1\n                #   * bias            : 0\n                #   * weight_embedding: 1\n                #   * bias_embedding  : 0\n                for n, m in self.named_modules():\n                    if isinstance(m, (nn.Conv2d, nn.Linear)):\n                        xavier_init(m, gain=1, distribution='uniform')\n                    if isinstance(m, nn.Embedding):\n                        # To be noted that here we initialize the embedding\n                        # layer in cBN with specific prefix. If you implement\n                        # your own cBN and want to use this initialization\n                        # method, please make sure the embedding layers in\n                        # your implementation have the same prefix as ours.\n                        if 'weight' in n:\n                            constant_init(m, 1)\n                        if 'bias' in n:\n                            constant_init(m, 0)\n            elif self.init_type.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']:\n                # initialization method from the official chainer code\n                #   * conv.weight     : xavier_init gain=sqrt(2)\n                #   * shortcut.weight : xavier_init gain=1\n                #   * bias            : 0\n                #   * weight_embedding: 1\n                #   * bias_embedding  : 0\n                for n, m in self.named_modules():\n                    if isinstance(m, nn.Conv2d):\n                        if 'shortcut' in n or 'to_rgb' in n:\n                            xavier_init(m, gain=1, distribution='uniform')\n                        else:\n                            xavier_init(\n                                m, gain=np.sqrt(2), distribution='uniform')\n                    if isinstance(m, nn.Linear):\n                        xavier_init(m, gain=1, distribution='uniform')\n                    if isinstance(m, nn.Embedding):\n                        # To be noted that here we initialize the embedding\n                        # layer in cBN with specific prefix. If you implement\n                        # your own cBN and want to use this initialization\n                        # method, please make sure the embedding layers in\n                        # your implementation have the same prefix as ours.\n                        if 'weight' in n:\n                            constant_init(m, 1)\n                        if 'bias' in n:\n                            constant_init(m, 0)\n            else:\n                raise NotImplementedError('Unknown initialization method: '\n                                          f'\\'{self.init_type}\\'')\n\n        else:\n            raise TypeError(\"'pretrained' must be a str or None. \"\n                            f'But receive {type(pretrained)}.')\n"
  },
  {
    "path": "mmagic/models/editors/sagan/sagan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch.nn as nn\nfrom mmcv.cnn import build_norm_layer\nfrom mmengine.dist import is_distributed\nfrom mmengine.model import BaseModule, constant_init, xavier_init\nfrom torch import Tensor\nfrom torch.nn.init import xavier_uniform_\nfrom torch.nn.utils import spectral_norm\n\nfrom mmagic.models.editors.biggan.biggan_modules import SNConvModule\nfrom mmagic.models.editors.biggan.biggan_snmodule import SNEmbedding\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SNGANGenResBlock(BaseModule):\n    \"\"\"ResBlock used in Generator of SNGAN / Proj-GAN.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        hidden_channels (int, optional): Input channels of the second Conv\n            layer of the block. If ``None`` is given, would be set as\n            ``out_channels``. Default to None.\n        num_classes (int, optional): Number of classes would like to generate.\n            This argument would pass to norm layers and influence the structure\n            and behavior of the normalization process. Default to 0.\n        use_cbn (bool, optional): Whether use conditional normalization. This\n            argument would pass to norm layers. Default to True.\n        use_norm_affine (bool, optional): Whether use learnable affine\n            parameters in norm operation when cbn is off. Default False.\n        act_cfg (dict, optional): Config for activate function. Default\n            to ``dict(type='ReLU')``.\n        upsample_cfg (dict, optional): Config for the upsample method.\n            Default to ``dict(type='nearest', scale_factor=2)``.\n        upsample (bool, optional): Whether apply upsample operation in this\n            module. Default to True.\n        auto_sync_bn (bool, optional): Whether convert Batch Norm to\n            Synchronized ones when Distributed training is on. Default to True.\n        conv_cfg (dict | None): Config for conv blocks of this module. If pass\n            ``None``, would use ``_default_conv_cfg``. Default to ``None``.\n        with_spectral_norm (bool, optional): Whether use spectral norm for\n            conv blocks and norm layers. Default to True.\n        with_embedding_spectral_norm (bool, optional): Whether use spectral\n            norm for embedding layers in normalization blocks or not. If not\n            specified (set as ``None``), ``with_embedding_spectral_norm`` would\n            be set as the same value as ``with_spectral_norm``.\n            Default to None.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        norm_eps (float, optional): eps for Normalization layers (both\n            conditional and non-conditional ones). Default to `1e-4`.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Default to `1e-12`.\n        init_cfg (dict, optional): Config for weight initialization.\n            Default to ``dict(type='BigGAN')``.\n    \"\"\"\n\n    _default_conv_cfg = dict(kernel_size=3, stride=1, padding=1, act_cfg=None)\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 hidden_channels=None,\n                 num_classes=0,\n                 use_cbn=True,\n                 use_norm_affine=False,\n                 act_cfg=dict(type='ReLU'),\n                 norm_cfg=dict(type='BN'),\n                 upsample_cfg=dict(type='nearest', scale_factor=2),\n                 upsample=True,\n                 auto_sync_bn=True,\n                 conv_cfg=None,\n                 with_spectral_norm=False,\n                 with_embedding_spectral_norm=None,\n                 sn_style='torch',\n                 norm_eps=1e-4,\n                 sn_eps=1e-12,\n                 init_cfg=dict(type='BigGAN')):\n\n        super().__init__()\n        self.learnable_sc = in_channels != out_channels or upsample\n        self.with_upsample = upsample\n        self.init_type = init_cfg.get('type', None)\n\n        self.activate = MODELS.build(act_cfg)\n        hidden_channels = out_channels if hidden_channels is None \\\n            else hidden_channels\n\n        if self.with_upsample:\n            self.upsample = MODELS.build(upsample_cfg)\n\n        self.conv_cfg = deepcopy(self._default_conv_cfg)\n        if conv_cfg is not None:\n            self.conv_cfg.update(conv_cfg)\n\n        # set `norm_spectral_norm` as `with_spectral_norm` if not defined\n        with_embedding_spectral_norm = with_embedding_spectral_norm \\\n            if with_embedding_spectral_norm is not None else with_spectral_norm\n\n        sn_cfg = dict(eps=sn_eps, sn_style=sn_style)\n        self.conv_1 = SNConvModule(\n            in_channels,\n            hidden_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n        self.conv_2 = SNConvModule(\n            hidden_channels,\n            out_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n\n        self.norm_1 = SNConditionNorm(in_channels, num_classes, use_cbn,\n                                      norm_cfg, use_norm_affine, auto_sync_bn,\n                                      with_embedding_spectral_norm, sn_style,\n                                      norm_eps, sn_eps, init_cfg)\n        self.norm_2 = SNConditionNorm(hidden_channels, num_classes, use_cbn,\n                                      norm_cfg, use_norm_affine, auto_sync_bn,\n                                      with_embedding_spectral_norm, sn_style,\n                                      norm_eps, sn_eps, init_cfg)\n\n        if self.learnable_sc:\n            # use hyperparameters-fixed shortcut here\n            self.shortcut = SNConvModule(\n                in_channels,\n                out_channels,\n                kernel_size=1,\n                stride=1,\n                padding=0,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm,\n                spectral_norm_cfg=sn_cfg)\n        self.init_weights()\n\n    def forward(self, x, y=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n            y (Tensor): Input label with shape (n, ).\n                Default None.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        out = self.norm_1(x, y)\n        out = self.activate(out)\n        if self.with_upsample:\n            out = self.upsample(out)\n        out = self.conv_1(out)\n\n        out = self.norm_2(out, y)\n        out = self.activate(out)\n        out = self.conv_2(out)\n\n        shortcut = self.forward_shortcut(x)\n        return out + shortcut\n\n    def forward_shortcut(self, x):\n        \"\"\"Forward the shortcut branch.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = x\n        if self.learnable_sc:\n            if self.with_upsample:\n                out = self.upsample(out)\n            out = self.shortcut(out)\n        return out\n\n    def init_weights(self):\n        \"\"\"Initialize weights for the model.\"\"\"\n        if self.init_type.upper() == 'STUDIO':\n            nn.init.orthogonal_(self.conv_1.conv.weight)\n            nn.init.orthogonal_(self.conv_2.conv.weight)\n            self.conv_1.conv.bias.data.fill_(0.)\n            self.conv_2.conv.bias.data.fill_(0.)\n            if self.learnable_sc:\n                nn.init.orthogonal_(self.shortcut.conv.weight)\n                self.shortcut.conv.bias.data.fill_(0.)\n        elif self.init_type.upper() == 'BIGGAN':\n            xavier_uniform_(self.conv_1.conv.weight, gain=1)\n            xavier_uniform_(self.conv_2.conv.weight, gain=1)\n            if self.learnable_sc:\n                xavier_uniform_(self.shortcut.conv.weight, gain=1)\n        elif self.init_type.upper() == 'SAGAN':\n            xavier_init(self.conv_1, gain=1, distribution='uniform')\n            xavier_init(self.conv_2, gain=1, distribution='uniform')\n            if self.learnable_sc:\n                xavier_init(self.shortcut, gain=1, distribution='uniform')\n        elif self.init_type.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']:\n            xavier_init(self.conv_1, gain=np.sqrt(2), distribution='uniform')\n            xavier_init(self.conv_2, gain=np.sqrt(2), distribution='uniform')\n            if self.learnable_sc:\n                xavier_init(self.shortcut, gain=1, distribution='uniform')\n        else:\n            raise NotImplementedError('Unknown initialization method: '\n                                      f'\\'{self.init_type}\\'')\n\n\n@MODELS.register_module()\nclass SNGANDiscResBlock(BaseModule):\n    \"\"\"resblock used in discriminator of sngan / proj-gan.\n\n    args:\n        in_channels (int): input channels.\n        out_channels (int): output channels.\n        hidden_channels (int, optional): input channels of the second conv\n            layer of the block. if ``none`` is given, would be set as\n            ``out_channels``. Defaults to none.\n        downsample (bool, optional): whether apply downsample operation in this\n            module.  Defaults to false.\n        act_cfg (dict, optional): config for activate function. default\n            to ``dict(type='relu')``.\n        conv_cfg (dict | none): config for conv blocks of this module. if pass\n            ``none``, would use ``_default_conv_cfg``. default to ``none``.\n        with_spectral_norm (bool, optional): whether use spectral norm for\n            conv blocks and norm layers. Defaults to true.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Default to `1e-12`.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        init_cfg (dict, optional): Config for weight initialization.\n            Defaults to ``dict(type='BigGAN')``.\n    \"\"\"\n\n    _default_conv_cfg = dict(kernel_size=3, stride=1, padding=1, act_cfg=None)\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 hidden_channels=None,\n                 downsample=False,\n                 act_cfg=dict(type='ReLU'),\n                 conv_cfg=None,\n                 with_spectral_norm=True,\n                 sn_style='torch',\n                 sn_eps=1e-12,\n                 init_cfg=dict(type='BigGAN')):\n\n        super().__init__()\n        hidden_channels = out_channels if hidden_channels is None \\\n            else hidden_channels\n        self.with_downsample = downsample\n        self.init_type = init_cfg.get('type', None)\n\n        self.conv_cfg = deepcopy(self._default_conv_cfg)\n        if conv_cfg is not None:\n            self.conv_cfg.update(conv_cfg)\n\n        self.activate = MODELS.build(act_cfg)\n\n        sn_cfg = dict(eps=sn_eps, sn_style=sn_style)\n        self.conv_1 = SNConvModule(\n            in_channels,\n            hidden_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n        self.conv_2 = SNConvModule(\n            hidden_channels,\n            out_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n\n        if self.with_downsample:\n            self.downsample = nn.AvgPool2d(2, 2)\n\n        self.learnable_sc = in_channels != out_channels or downsample\n        if self.learnable_sc:\n            # use hyperparameters-fixed shortcut here\n            self.shortcut = SNConvModule(\n                in_channels,\n                out_channels,\n                kernel_size=1,\n                stride=1,\n                padding=0,\n                act_cfg=None,\n                with_spectral_norm=with_spectral_norm,\n                spectral_norm_cfg=sn_cfg)\n        self.init_weights()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        out = self.activate(x)\n        out = self.conv_1(out)\n        out = self.activate(out)\n        out = self.conv_2(out)\n        if self.with_downsample:\n            out = self.downsample(out)\n\n        shortcut = self.forward_shortcut(x)\n        return out + shortcut\n\n    def forward_shortcut(self, x: Tensor) -> Tensor:\n        \"\"\"Forward the shortcut branch.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = x\n        if self.learnable_sc:\n            out = self.shortcut(out)\n            if self.with_downsample:\n                out = self.downsample(out)\n        return out\n\n    def init_weights(self):\n        \"\"\"Initialize weights.\"\"\"\n        if self.init_type.upper() == 'STUDIO':\n            nn.init.orthogonal_(self.conv_1.conv.weight)\n            nn.init.orthogonal_(self.conv_2.conv.weight)\n            self.conv_1.conv.bias.data.fill_(0.)\n            self.conv_2.conv.bias.data.fill_(0.)\n            if self.learnable_sc:\n                nn.init.orthogonal_(self.shortcut.conv.weight)\n                self.shortcut.conv.bias.data.fill_(0.)\n        elif self.init_type.upper() == 'BIGGAN':\n            xavier_uniform_(self.conv_1.conv.weight, gain=1)\n            xavier_uniform_(self.conv_2.conv.weight, gain=1)\n            if self.learnable_sc:\n                xavier_uniform_(self.shortcut.conv.weight, gain=1)\n        elif self.init_type.upper() == 'SAGAN':\n            xavier_init(self.conv_1, gain=1, distribution='uniform')\n            xavier_init(self.conv_2, gain=1, distribution='uniform')\n            if self.learnable_sc:\n                xavier_init(self.shortcut, gain=1, distribution='uniform')\n        elif self.init_type.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']:\n            xavier_init(self.conv_1, gain=np.sqrt(2), distribution='uniform')\n            xavier_init(self.conv_2, gain=np.sqrt(2), distribution='uniform')\n            if self.learnable_sc:\n                xavier_init(self.shortcut, gain=1, distribution='uniform')\n        else:\n            raise NotImplementedError('Unknown initialization method: '\n                                      f'\\'{self.init_type}\\'')\n\n\n@MODELS.register_module()\nclass SNGANDiscHeadResBlock(BaseModule):\n    \"\"\"The first ResBlock used in discriminator of sngan / proj-gan. Compared\n    to ``SNGANDisResBlock``, this module has a different forward order.\n\n    args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        downsample (bool, optional): whether apply downsample operation in this\n            module.  default to false.\n        conv_cfg (dict | none): config for conv blocks of this module. if pass\n            ``none``, would use ``_default_conv_cfg``. default to ``none``.\n        act_cfg (dict, optional): config for activate function. default\n            to ``dict(type='relu')``.\n        with_spectral_norm (bool, optional): whether use spectral norm for\n            conv blocks and norm layers. default to true.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Default to `1e-12`.\n        init_cfg (dict, optional): Config for weight initialization.\n            Default to ``dict(type='BigGAN')``.\n    \"\"\"\n\n    _default_conv_cfg = dict(kernel_size=3, stride=1, padding=1, act_cfg=None)\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 conv_cfg=None,\n                 act_cfg=dict(type='ReLU'),\n                 with_spectral_norm=True,\n                 sn_eps=1e-12,\n                 sn_style='torch',\n                 init_cfg=dict(type='BigGAN')):\n\n        super().__init__()\n\n        self.init_type = init_cfg.get('type', None)\n        self.conv_cfg = deepcopy(self._default_conv_cfg)\n        if conv_cfg is not None:\n            self.conv_cfg.update(conv_cfg)\n\n        self.activate = MODELS.build(act_cfg)\n\n        sn_cfg = dict(eps=sn_eps, sn_style=sn_style)\n        self.conv_1 = SNConvModule(\n            in_channels,\n            out_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n        self.conv_2 = SNConvModule(\n            out_channels,\n            out_channels,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg,\n            **self.conv_cfg)\n\n        self.downsample = nn.AvgPool2d(2, 2)\n\n        # use hyperparameters-fixed shortcut here\n        self.shortcut = SNConvModule(\n            in_channels,\n            out_channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            act_cfg=None,\n            with_spectral_norm=with_spectral_norm,\n            spectral_norm_cfg=sn_cfg)\n        self.init_weights()\n\n    def forward(self, x: Tensor) -> Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = self.conv_1(x)\n        out = self.activate(out)\n        out = self.conv_2(out)\n        out = self.downsample(out)\n\n        shortcut = self.forward_shortcut(x)\n        return out + shortcut\n\n    def forward_shortcut(self, x: Tensor) -> Tensor:\n        \"\"\"Forward the shortcut branch.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        out = self.downsample(x)\n        out = self.shortcut(out)\n        return out\n\n    def init_weights(self):\n        \"\"\"Initialize weights.\"\"\"\n        if self.init_type.upper() == 'STUDIO':\n            for m in [self.conv_1, self.conv_2, self.shortcut]:\n                nn.init.orthogonal_(m.conv.weight)\n                m.conv.bias.data.fill_(0.)\n        elif self.init_type.upper() == 'BIGGAN':\n            xavier_uniform_(self.conv_1.conv.weight, gain=1)\n            xavier_uniform_(self.conv_2.conv.weight, gain=1)\n            xavier_uniform_(self.shortcut.conv.weight, gain=1)\n        elif self.init_type.upper() == 'SAGAN':\n            xavier_init(self.conv_1, gain=1, distribution='uniform')\n            xavier_init(self.conv_2, gain=1, distribution='uniform')\n            xavier_init(self.shortcut, gain=1, distribution='uniform')\n        elif self.init_type.upper() in ['SNGAN', 'SNGAN-PROJ', 'GAN-PROJ']:\n            xavier_init(self.conv_1, gain=np.sqrt(2), distribution='uniform')\n            xavier_init(self.conv_2, gain=np.sqrt(2), distribution='uniform')\n            xavier_init(self.shortcut, gain=1, distribution='uniform')\n        else:\n            raise NotImplementedError('Unknown initialization method: '\n                                      f'\\'{self.init_type}\\'')\n\n\n@MODELS.register_module()\nclass SNConditionNorm(BaseModule):\n    \"\"\"Conditional Normalization for SNGAN / Proj-GAN. The implementation\n    refers to.\n\n    https://github.com/pfnet-research/sngan_projection/blob/master/source/links/conditional_batch_normalization.py  # noda\n\n    and\n\n    https://github.com/POSTECH-CVLab/PyTorch-StudioGAN/blob/master/src/utils/model_ops.py  # noqa\n\n    Args:\n        in_channels (int): Number of the channels of the input feature map.\n        num_classes (int): Number of the classes in the dataset. If ``use_cbn``\n            is True, ``num_classes`` must larger than 0.\n        use_cbn (bool, optional): Whether use conditional normalization. If\n            ``use_cbn`` is True, two embedding layers would be used to mapping\n            label to weight and bias used in normalization process.\n        norm_cfg (dict, optional): Config for normalization method. Defaults\n            to ``dict(type='BN')``.\n        cbn_norm_affine (bool):  Whether set ``affine=True`` when use conditional batch norm.\n            This argument only work when ``use_cbn`` is True. Defaults to False.\n        auto_sync_bn (bool, optional): Whether convert Batch Norm to\n            Synchronized ones when Distributed training is on. Defaults to True.\n        with_spectral_norm (bool, optional): whether use spectral norm for\n            conv blocks and norm layers. Defaults to true.\n        norm_eps (float, optional): eps for Normalization layers (both\n            conditional and non-conditional ones). Defaults to `1e-4`.\n        sn_style (str, optional): The style of spectral normalization.\n            If set to `ajbrock`, implementation by\n            ajbrock(https://github.com/ajbrock/BigGAN-PyTorch/blob/master/layers.py)\n            will be adopted.\n            If set to `torch`, implementation by `PyTorch` will be adopted.\n            Defaults to `torch`.\n        sn_eps (float, optional): eps for spectral normalization operation.\n            Defaults to `1e-12`.\n        init_cfg (dict, optional): Config for weight initialization.\n            Defaults to ``dict(type='BigGAN')``.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 num_classes,\n                 use_cbn=True,\n                 norm_cfg=dict(type='BN'),\n                 cbn_norm_affine=False,\n                 auto_sync_bn=True,\n                 with_spectral_norm=False,\n                 sn_style='torch',\n                 norm_eps=1e-4,\n                 sn_eps=1e-12,\n                 init_cfg=dict(type='BigGAN')):\n        super().__init__()\n        self.use_cbn = use_cbn\n        self.init_type = init_cfg.get('type', None)\n\n        norm_cfg = deepcopy(norm_cfg)\n        norm_type = norm_cfg['type']\n\n        if norm_type not in ['IN', 'BN', 'SyncBN']:\n            raise ValueError('Only support `IN` (InstanceNorm), '\n                             '`BN` (BatcnNorm) and `SyncBN` for '\n                             'Class-conditional bn. '\n                             f'Receive norm_type: {norm_type}')\n\n        if self.use_cbn:\n            norm_cfg.setdefault('affine', cbn_norm_affine)\n        norm_cfg.setdefault('eps', norm_eps)\n        if is_distributed() and auto_sync_bn and norm_type == 'BN':\n            norm_cfg['type'] = 'SyncBN'\n\n        _, self.norm = build_norm_layer(norm_cfg, in_channels)\n\n        if self.use_cbn:\n            if num_classes <= 0:\n                raise ValueError('`num_classes` must be larger '\n                                 'than 0 with `use_cbn=True`')\n            self.reweight_embedding = (\n                self.init_type.upper() == 'BIGGAN'\n                or self.init_type.upper() == 'STUDIO')\n            if with_spectral_norm:\n                if sn_style == 'torch':\n                    self.weight_embedding = spectral_norm(\n                        nn.Embedding(num_classes, in_channels), eps=sn_eps)\n                    self.bias_embedding = spectral_norm(\n                        nn.Embedding(num_classes, in_channels), eps=sn_eps)\n                elif sn_style == 'ajbrock':\n                    self.weight_embedding = SNEmbedding(\n                        num_classes, in_channels, eps=sn_eps)\n                    self.bias_embedding = SNEmbedding(\n                        num_classes, in_channels, eps=sn_eps)\n                else:\n                    raise NotImplementedError(\n                        f'{sn_style} style spectral Norm is not '\n                        'supported yet')\n            else:\n                self.weight_embedding = nn.Embedding(num_classes, in_channels)\n                self.bias_embedding = nn.Embedding(num_classes, in_channels)\n\n        self.init_weights()\n\n    def forward(self, x, y=None):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n            y (Tensor, optional): Input label with shape (n, ).\n                Default None.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        out = self.norm(x)\n        if self.use_cbn:\n            weight = self.weight_embedding(y)[:, :, None, None]\n            bias = self.bias_embedding(y)[:, :, None, None]\n            if self.reweight_embedding:\n                # print('reweight_called --> correct')\n                weight = weight + 1.\n            out = out * weight + bias\n        return out\n\n    def init_weights(self):\n        \"\"\"Initialize weights.\"\"\"\n        if self.use_cbn:\n            if self.init_type.upper() == 'STUDIO':\n                nn.init.orthogonal_(self.weight_embedding.weight)\n                nn.init.orthogonal_(self.bias_embedding.weight)\n            elif self.init_type.upper() == 'BIGGAN':\n                xavier_uniform_(self.weight_embedding.weight, gain=1)\n                xavier_uniform_(self.bias_embedding.weight, gain=1)\n            elif self.init_type.upper() in [\n                    'SNGAN', 'SNGAN-PROJ', 'GAN-PROJ', 'SAGAN'\n            ]:\n                constant_init(self.weight_embedding, 1)\n                constant_init(self.bias_embedding, 0)\n            else:\n                raise NotImplementedError('Unknown initialization method: '\n                                          f'\\'{self.init_type}\\'')\n"
  },
  {
    "path": "mmagic/models/editors/singan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .singan import SinGAN\nfrom .singan_discriminator import SinGANMultiScaleDiscriminator\nfrom .singan_generator import SinGANMultiScaleGenerator\n\n__all__ = [\n    'SinGAN', 'SinGANMultiScaleDiscriminator', 'SinGANMultiScaleGenerator'\n]\n"
  },
  {
    "path": "mmagic/models/editors/singan/singan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pickle\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.autograd as autograd\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import Config, MessageHub, print_log\nfrom mmengine.model import is_model_wrapper\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch import Tensor\n\nfrom mmagic.models.utils import get_module_device\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import ForwardInputs, SampleList\nfrom ...base_models import BaseGAN\nfrom ...utils import set_requires_grad\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module()\nclass SinGAN(BaseGAN):\n    \"\"\"SinGAN.\n\n    This model implement the single image generative adversarial model proposed\n    in: Singan: Learning a Generative Model from a Single Natural Image,\n    ICCV'19.\n\n    Notes for training:\n\n    - This model should be trained with our dataset ``SinGANDataset``.\n    - In training, the ``total_iters`` arguments is related to the number of\n      scales in the image pyramid and ``iters_per_scale`` in the ``train_cfg``.\n      You should set it carefully in the training config file.\n\n    Notes for model architectures:\n\n    - The generator and discriminator need ``num_scales`` in initialization.\n      However, this arguments is generated by ``create_real_pyramid`` function\n      from the ``singan_dataset.py``. The last element in the returned list\n      (``stop_scale``) is the value for ``num_scales``. Pay attention that this\n      scale is counted from zero. Please see our tutorial for SinGAN to obtain\n      more details or our standard config for reference.\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): The number of times the generator is completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): The number of times the discriminator is\n            completely updated before the generator is updated. Defaults to 1.\n        num_scales (int): The number of scales/stages in generator/\n            discriminator. Note that this number is counted from zero, which\n            is the same as the original paper. Defaults to None.\n        iters_per_scale (int): The training iteration for each resolution\n            scale. Defaults to 2000.\n        noise_weight_init (float): The initialize weight of fixed noise.\n            Defaults to 0.1\n        lr_scheduler_args (Optional[dict]): Arguments for learning schedulers.\n            Note that in SinGAN, we use MultiStepLR, which is the same as the\n            original paper. If not passed, no learning schedule will be used.\n            Defaults to None.\n        test_pkl_data (Optional[str]): The path of pickle file which contains\n            fixed noise and noise weight. This is must for test. Defaults to\n            None.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 num_scales: Optional[int] = None,\n                 iters_per_scale: int = 2000,\n                 noise_weight_init: int = 0.1,\n                 lr_scheduler_args: Optional[dict] = None,\n                 test_pkl_data: Optional[str] = None,\n                 ema_confg: Optional[dict] = None):\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, None, ema_confg)\n        self.iters_per_scale = iters_per_scale\n        self.noise_weight_init = noise_weight_init\n        if lr_scheduler_args:\n            self.lr_scheduler_args = deepcopy(lr_scheduler_args)\n        else:\n            self.lr_scheduler_args = None\n\n        # related to train\n        self.num_scales = num_scales\n        self.curr_stage = -1\n        self.noise_weights = [1]\n        self.fixed_noises = []\n        self.reals = []\n\n        # related to test\n        self.loaded_test_pkl = False\n        self.pkl_data = test_pkl_data\n\n    def load_test_pkl(self):\n        \"\"\"Load pickle for test.\"\"\"\n        if self.pkl_data is not None:\n            with open(self.pkl_data, 'rb') as f:\n                data = pickle.load(f)\n                self.fixed_noises = self._from_numpy(data['fixed_noises'])\n                self.noise_weights = self._from_numpy(data['noise_weights'])\n                self.curr_stage = data['curr_stage']\n            print_log(f'Load pkl data from {self.pkl_data}', 'current')\n            self.pkl_data = self.pkl_data\n            self.loaded_test_pkl = True\n\n    def _from_numpy(self,\n                    data: Tuple[list,\n                                np.ndarray]) -> Tuple[Tensor, List[Tensor]]:\n        \"\"\"Convert input numpy array or list of numpy array to Tensor or list\n        of Tensor.\n\n        Args:\n            data (Tuple[list, np.ndarray]): Input data to convert.\n\n        Returns:\n            Tuple[Tensor, List[Tensor]]: Converted Tensor or list of tensor.\n        \"\"\"\n        if isinstance(data, list):\n            return [self._from_numpy(x) for x in data]\n\n        if isinstance(data, np.ndarray):\n            data = torch.from_numpy(data)\n            device = get_module_device(self.generator)\n            data = data.to(device)\n            return data\n\n        return data\n\n    def get_module(self, model: nn.Module, module_name: str) -> nn.Module:\n        \"\"\"Get an inner module from model.\n\n        Since we will wrapper DDP for some model, we have to judge whether the\n        module can be indexed directly.\n\n        Args:\n            model (nn.Module): This model may wrapped with DDP or not.\n            module_name (str): The name of specific module.\n\n        Return:\n            nn.Module: Returned sub module.\n        \"\"\"\n        module = model.module if hasattr(model, 'module') else model\n        return getattr(module, module_name)\n\n    def construct_fixed_noises(self):\n        \"\"\"Construct the fixed noises list used in SinGAN.\"\"\"\n        for i, real in enumerate(self.reals):\n            h, w = real.shape[-2:]\n            if i == 0:\n                noise = torch.randn(1, 1, h, w).to(real)\n                self.fixed_noises.append(noise)\n            else:\n                noise = torch.zeros_like(real)\n                self.fixed_noises.append(noise)\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode=None) -> List[DataSample]:\n        \"\"\"Forward function for SinGAN. For SinGAN, `inputs` should be a dict\n        contains 'num_batches', 'mode' and other input arguments for the\n        generator.\n\n        Args:\n            inputs (dict): Dict containing the necessary information\n                (e.g., noise, num_batches, mode) to generate image.\n            data_samples (Optional[list]): Data samples collated by\n                :attr:`data_preprocessor`. Defaults to None.\n            mode (Optional[str]): `mode` is not used in\n                :class:`BaseConditionalGAN`. Defaults to None.\n        \"\"\"\n\n        # handle batch_inputs\n        assert isinstance(inputs, dict), (\n            'SinGAN only support dict type inputs in forward function.')\n        gen_kwargs = deepcopy(inputs)\n        num_batches = gen_kwargs.pop('num_batches', 1)\n        assert num_batches == 1, (\n            'SinGAN only support \\'num_batches\\' as 1, but receive '\n            f'{num_batches}.')\n        sample_model = self._get_valid_model(inputs)\n        gen_kwargs.pop('sample_model', None)  # remove sample_model\n\n        mode = gen_kwargs.pop('mode', mode)\n        mode = 'rand' if mode is None else mode\n        curr_scale = gen_kwargs.pop('curr_scale', self.curr_stage)\n\n        self.fixed_noises = [\n            x.to(self.data_preprocessor.device) for x in self.fixed_noises\n        ]\n\n        batch_sample_list = []\n        if sample_model in ['ema', 'orig']:\n            if sample_model == 'ema':\n                generator = self.generator_ema\n            else:\n                generator = self.generator\n\n            outputs = generator(\n                None,\n                fixed_noises=self.fixed_noises,\n                noise_weights=self.noise_weights,\n                rand_mode=mode,\n                num_batches=1,\n                curr_scale=curr_scale,\n                **gen_kwargs)\n\n            gen_sample = DataSample()\n            # destruct\n            if isinstance(outputs, dict):\n                outputs['fake_img'] = self.data_preprocessor.destruct(\n                    outputs['fake_img'], data_samples)\n                outputs['prev_res_list'] = [\n                    self.data_preprocessor.destruct(r, data_samples)\n                    for r in outputs['prev_res_list']\n                ]\n                gen_sample.fake_img = self.data_preprocessor.destruct(\n                    outputs['fake_img'], data_samples)\n                # gen_sample.prev_res_list = self.data_preprocessor.destruct(\n                #     outputs['fake_img'], data_samples)\n            else:\n                outputs = self.data_preprocessor.destruct(\n                    outputs, data_samples)\n\n            # save to data sample\n            for idx in range(num_batches):\n                gen_sample = DataSample()\n                # save inputs to data sample\n                if data_samples:\n                    gen_sample.update(data_samples[idx])\n                if isinstance(outputs, dict):\n                    gen_sample.fake_img = outputs['fake_img'][idx]\n                    gen_sample.prev_res_list = [\n                        r[idx] for r in outputs['prev_res_list']\n                    ]\n                else:\n                    gen_sample.fake_img = outputs[idx]\n\n                gen_sample.sample_model = sample_model\n                batch_sample_list.append(gen_sample)\n\n        else:  # sample model is 'ema/orig'\n\n            outputs_orig = self.generator(\n                None,\n                fixed_noises=self.fixed_noises,\n                noise_weights=self.noise_weights,\n                rand_mode=mode,\n                num_batches=1,\n                curr_scale=curr_scale,\n                **gen_kwargs)\n            outputs_ema = self.generator_ema(\n                None,\n                fixed_noises=self.fixed_noises,\n                noise_weights=self.noise_weights,\n                rand_mode=mode,\n                num_batches=1,\n                curr_scale=curr_scale,\n                **gen_kwargs)\n\n            # destruct\n            if isinstance(outputs_orig, dict):\n                outputs_orig['fake_img'] = self.data_preprocessor.destruct(\n                    outputs_orig['fake_img'], data_samples)\n                outputs_orig['prev_res_list'] = [\n                    self.data_preprocessor.destruct(r, data_samples)\n                    for r in outputs_orig['prev_res_list']\n                ]\n                outputs_ema['fake_img'] = self.data_preprocessor.destruct(\n                    outputs_ema['fake_img'], data_samples)\n                outputs_ema['prev_res_list'] = [\n                    self.data_preprocessor.destruct(r, data_samples)\n                    for r in outputs_ema['prev_res_list']\n                ]\n            else:\n                outputs_orig = self.data_preprocessor.destruct(\n                    outputs_orig, data_samples)\n                outputs_ema = self.data_preprocessor.destruct(\n                    outputs_ema, data_samples)\n\n            # save to data sample\n            for idx in range(num_batches):\n                gen_sample = DataSample()\n                gen_sample.ema = DataSample()\n                gen_sample.orig = DataSample()\n                # save inputs to data sample\n                if data_samples:\n                    gen_sample.update(data_samples[idx])\n                if isinstance(outputs_orig, dict):\n                    gen_sample.ema.fake_img = outputs_ema['fake_img'][idx]\n                    gen_sample.ema.prev_res_list = [\n                        r[idx] for r in outputs_ema['prev_res_list']\n                    ]\n                    gen_sample.orig.fake_img = outputs_orig['fake_img'][idx]\n                    gen_sample.orig.prev_res_list = [\n                        r[idx] for r in outputs_orig['prev_res_list']\n                    ]\n                else:\n                    gen_sample.ema.fake_img = outputs_ema[idx]\n                    gen_sample.orig.fake_img = outputs_orig[idx]\n                gen_sample.sample_model = sample_model\n\n                batch_sample_list.append(gen_sample)\n        return batch_sample_list\n\n    def gen_loss(self, disc_pred_fake: Tensor,\n                 recon_imgs: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Generator loss for SinGAN. SinGAN use WGAN's loss and MSE loss to\n        train the generator.\n\n        .. math:\n            L_{D} = -\\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                + L_{MSE}\n            L_{MSE} = \\text{mean} \\Vert x - G(z) \\Vert_2\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            recon_imgs (Tensor): Reconstructive images.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        losses_dict['loss_mse'] = 10 * F.mse_loss(recon_imgs,\n                                                  self.reals[self.curr_stage])\n        loss, log_vars = self.parse_losses(losses_dict)\n        return loss, log_vars\n\n    def disc_loss(self, disc_pred_fake: Tensor, disc_pred_real: Tensor,\n                  fake_data: Tensor, real_data: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Get disc loss. SAGAN, SNGAN and Proj-GAN use hinge loss to train\n        the generator.\n\n        .. math:\n            L_{D} = \\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                - \\mathbb{E}_{x\\sim{p_{data}}}D\\left\\(x\\right\\) + L_{GP} \\\\\n            L_{GP} = \\lambda\\mathbb{E}(\\Vert\\nabla_{\\tilde{x}}D(\\tilde{x})\n                \\Vert_2-1)^2 \\\\\n            \\tilde{x} = \\epsilon x + (1-\\epsilon)G(z)\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n            fake_data (Tensor): Generated images, used to calculate gradient\n                penalty.\n            real_data (Tensor): Real images, used to calculate gradient\n                penalty.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = disc_pred_fake.mean()\n        losses_dict['loss_disc_real'] = -disc_pred_real.mean()\n\n        # gradient penalty\n        batch_size = real_data.size(0)\n        alpha = torch.rand(batch_size, 1, 1, 1).to(real_data)\n\n        # interpolate between real_data and fake_data\n        interpolates = alpha * real_data + (1. - alpha) * fake_data\n        interpolates = autograd.Variable(interpolates, requires_grad=True)\n\n        disc_interpolates = self.discriminator(\n            interpolates, curr_scale=self.curr_stage)\n        gradients = autograd.grad(\n            outputs=disc_interpolates,\n            inputs=interpolates,\n            grad_outputs=torch.ones_like(disc_interpolates),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n        # norm_mode is 'pixel'\n        gradients_penalty = ((gradients.norm(2, dim=1) - 1)**2).mean()\n        losses_dict['loss_gp'] = 0.1 * gradients_penalty\n\n        parsed_loss, log_vars = self.parse_losses(losses_dict)\n        return parsed_loss, log_vars\n\n    def train_generator(self, inputs: dict, data_samples: List[DataSample],\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        fake_imgs = self.generator(\n            inputs['input_sample'],\n            self.fixed_noises,\n            self.noise_weights,\n            rand_mode='rand',\n            curr_scale=self.curr_stage)\n        disc_pred_fake_g = self.discriminator(\n            fake_imgs, curr_scale=self.curr_stage)\n\n        recon_imgs = self.generator(\n            inputs['input_sample'],\n            self.fixed_noises,\n            self.noise_weights,\n            rand_mode='recon',\n            curr_scale=self.curr_stage)\n\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake_g, recon_imgs)\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def train_discriminator(self, inputs: dict, data_samples: List[DataSample],\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (List[DataSample]): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        input_sample = inputs['input_sample']\n        fake_imgs = self.generator(\n            input_sample,\n            self.fixed_noises,\n            self.noise_weights,\n            rand_mode='rand',\n            curr_scale=self.curr_stage)\n\n        # disc pred for fake imgs and real_imgs\n        real_imgs = self.reals[self.curr_stage]\n        disc_pred_fake = self.discriminator(fake_imgs.detach(),\n                                            self.curr_stage)\n        disc_pred_real = self.discriminator(real_imgs, self.curr_stage)\n        parsed_loss, log_vars = self.disc_loss(disc_pred_fake, disc_pred_real,\n                                               fake_imgs, real_imgs)\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def train_gan(self, inputs_dict: dict, data_sample: List[DataSample],\n                  optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train GAN model. In the training of GAN models, generator and\n        discriminator are updated alternatively. In MMagic's design,\n        `self.train_step` is called with data input. Therefore we always update\n        discriminator, whose updating is relay on real data, and then determine\n        if the generator needs to be updated based on the current number of\n        iterations. More details about whether to update generator can be found\n        in :meth:`should_gen_update`.\n\n        Args:\n            data (dict): Data sampled from dataloader.\n            data_sample (List[DataSample]): List of data sample contains GT\n                and meta information.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        with disc_optimizer_wrapper.optim_context(self.discriminator):\n            log_vars = self.train_discriminator(inputs_dict, data_sample,\n                                                disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            for _ in range(self.generator_steps * gen_accu_iters):\n                with gen_optimizer_wrapper.optim_context(self.generator):\n                    log_vars_gen = self.train_generator(\n                        inputs_dict, data_sample, gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = self.gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n                # if not update buffer, copy buffer from orig model\n                if not self.generator_ema.update_buffers:\n                    self.generator_ema.sync_buffers(\n                        self.generator.module if is_model_wrapper(\n                            self.generator) else self.generator)\n            elif self.with_ema_gen:\n                # before ema, copy weights from orig\n                self.generator_ema.sync_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n        return log_vars\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        \"\"\"Train step for SinGAN model. SinGAN is trained with multi-resolution\n        images, and each resolution is trained for `:attr:self.iters_per_scale`\n        times.\n\n        We initialize the weight and learning rate scheduler of the\n        corresponding module at the start of each resolution's training. At\n        the end of each resolution's training, we update the weight of the\n        noise of current resolution by mse loss between reconstructed image and\n        real image.\n\n        Args:\n            data (dict): Data sampled from dataloader.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n\n        if curr_iter % (self.iters_per_scale * self.discriminator_steps) == 0:\n            self.curr_stage += 1\n            # load weights from prev scale\n            self.get_module(self.generator, 'check_and_load_prev_weight')(\n                self.curr_stage)\n            self.get_module(self.discriminator, 'check_and_load_prev_weight')(\n                self.curr_stage)\n\n            # assert grad_accumulation step is 1\n            curr_gen_optim = optim_wrapper[f'generator_{self.curr_stage}']\n            curr_disc_optim = optim_wrapper[f'discriminator_{self.curr_stage}']\n            _warning_msg = ('SinGAN do set batch size as 1 during training '\n                            'and do not support gradient accumulation.')\n            assert curr_gen_optim._accumulative_counts == 1, _warning_msg\n            assert curr_disc_optim._accumulative_counts == 1, _warning_msg\n\n            # build parameters scheduler manually, because parameters_schedule\n            # hook update all scheduler at the same\n            if self.lr_scheduler_args:\n                self.gen_scheduler = torch.optim.lr_scheduler.MultiStepLR(\n                    curr_gen_optim.optimizer, **self.lr_scheduler_args)\n                self.disc_scheduler = torch.optim.lr_scheduler.MultiStepLR(\n                    curr_disc_optim.optimizer, **self.lr_scheduler_args)\n\n        # get current optimizer_wrapper\n        curr_optimizer_wrapper = OptimWrapperDict(\n            generator=optim_wrapper[f'generator_{self.curr_stage}'],\n            discriminator=optim_wrapper[f'discriminator_{self.curr_stage}'])\n\n        # handle inputs\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n        # setup fixed noises and reals pyramid\n        if curr_iter == 0 or len(self.reals) == 0:\n            keys = [k for k in inputs_dict.keys() if 'real_scale' in k]\n            scales = len(keys)\n            self.reals = [inputs_dict[f'real_scale{s}'] for s in range(scales)]\n\n            # here we do not padding fixed noises\n            self.construct_fixed_noises()\n\n        # standard train step\n        log_vars = self.train_gan(inputs_dict, data_samples,\n                                  curr_optimizer_wrapper)\n        log_vars['curr_stage'] = self.curr_stage\n\n        # update noise weight\n        if ((curr_iter + 1) % (self.iters_per_scale * self.discriminator_steps)\n                == 0) and (self.curr_stage < len(self.reals) - 1):\n            with torch.no_grad():\n                g_recon = self.generator(\n                    inputs_dict['input_sample'],\n                    self.fixed_noises,\n                    self.noise_weights,\n                    rand_mode='recon',\n                    curr_scale=self.curr_stage)\n                if isinstance(g_recon, dict):\n                    g_recon = g_recon['fake_img']\n                g_recon = F.interpolate(\n                    g_recon, self.reals[self.curr_stage + 1].shape[-2:])\n\n            mse = F.mse_loss(g_recon.detach(), self.reals[self.curr_stage + 1])\n            rmse = torch.sqrt(mse)\n            self.noise_weights.append(self.noise_weight_init * rmse.item())\n\n        # call scheduler when all submodules are fully updated.\n        if (curr_iter + 1) % self.discriminator_steps == 0:\n            if self.lr_scheduler_args:\n                self.disc_scheduler.step()\n                self.gen_scheduler.step()\n\n        return log_vars\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data in test progress. Before\n        generate images, we call `:meth:self.load_test_pkl` to load the fixed\n        noise and current stage of the model from the pickle file.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        if not self.loaded_test_pkl:\n            self.load_test_pkl()\n        return super().test_step(data)\n"
  },
  {
    "path": "mmagic/models/editors/singan/singan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\nfrom mmengine import print_log\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .singan_modules import DiscriminatorBlock\n\n\n@MODELS.register_module()\nclass SinGANMultiScaleDiscriminator(BaseModule):\n    \"\"\"Multi-Scale Discriminator used in SinGAN.\n\n    More details can be found in: Singan: Learning a Generative Model from a\n    Single Natural Image, ICCV'19.\n\n    Args:\n        in_channels (int): Input channels.\n        num_scales (int): The number of scales/stages in generator. Note\n            that this number is counted from zero, which is the same as the\n            original paper.\n        kernel_size (int, optional): Kernel size, same as :obj:`nn.Conv2d`.\n            Defaults to 3.\n        padding (int, optional): Padding for the convolutional layer, same as\n            :obj:`nn.Conv2d`. Defaults to 0.\n        num_layers (int, optional): The number of convolutional layers in each\n            generator block. Defaults to 5.\n        base_channels (int, optional): The basic channels for convolutional\n            layers in the generator block. Defaults to 32.\n        min_feat_channels (int, optional): Minimum channels for the feature\n            maps in the generator block. Defaults to 32.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 num_scales,\n                 kernel_size=3,\n                 padding=0,\n                 num_layers=5,\n                 base_channels=32,\n                 min_feat_channels=32,\n                 init_cfg=None,\n                 **kwargs):\n        super().__init__(init_cfg=init_cfg)\n        self.blocks = nn.ModuleList()\n        for scale in range(num_scales + 1):\n            base_ch = min(base_channels * pow(2, int(np.floor(scale / 4))),\n                          128)\n            min_feat_ch = min(\n                min_feat_channels * pow(2, int(np.floor(scale / 4))), 128)\n            self.blocks.append(\n                DiscriminatorBlock(\n                    in_channels=in_channels,\n                    kernel_size=kernel_size,\n                    padding=padding,\n                    num_layers=num_layers,\n                    base_channels=base_ch,\n                    min_feat_channels=min_feat_ch,\n                    **kwargs))\n\n    def forward(self, x, curr_scale):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map.\n            curr_scale (int): Current scale for discriminator. If in testing,\n                you need to set it to the last scale.\n\n        Returns:\n            Tensor: Discriminative results.\n        \"\"\"\n        out = self.blocks[curr_scale](x)\n        return out\n\n    def check_and_load_prev_weight(self, curr_scale):\n        if curr_scale == 0:\n            return\n        prev_ch = self.blocks[curr_scale - 1].base_channels\n        curr_ch = self.blocks[curr_scale].base_channels\n        if prev_ch == curr_ch:\n            self.blocks[curr_scale].load_state_dict(\n                self.blocks[curr_scale - 1].state_dict())\n            print_log('Successfully load pretrained model from last scale.')\n        else:\n            print_log('Cannot load pretrained model from last scale since'\n                      f' prev_ch({prev_ch}) != curr_ch({curr_ch})')\n"
  },
  {
    "path": "mmagic/models/editors/singan/singan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModule\nfrom mmengine.runner import load_state_dict\n\nfrom mmagic.registry import MODELS\nfrom .singan_modules import GeneratorBlock\n\n\n@MODELS.register_module()\nclass SinGANMultiScaleGenerator(BaseModule):\n    \"\"\"Multi-Scale Generator used in SinGAN.\n\n    More details can be found in: Singan: Learning a Generative Model from a\n    Single Natural Image, ICCV'19.\n\n    Notes:\n\n    - In this version, we adopt the interpolation function from the official\n      PyTorch APIs, which is different from the original implementation by the\n      authors. However, in our experiments, this influence can be ignored.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        num_scales (int): The number of scales/stages in generator. Note\n            that this number is counted from zero, which is the same as the\n            original paper.\n        kernel_size (int, optional): Kernel size, same as :obj:`nn.Conv2d`.\n            Defaults to 3.\n        padding (int, optional): Padding for the convolutional layer, same as\n            :obj:`nn.Conv2d`. Defaults to 0.\n        num_layers (int, optional): The number of convolutional layers in each\n            generator block. Defaults to 5.\n        base_channels (int, optional): The basic channels for convolutional\n            layers in the generator block. Defaults to 32.\n        min_feat_channels (int, optional): Minimum channels for the feature\n            maps in the generator block. Defaults to 32.\n        out_act_cfg (dict | None, optional): Configs for output activation\n            layer. Defaults to dict(type='Tanh').\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 num_scales,\n                 kernel_size=3,\n                 padding=0,\n                 num_layers=5,\n                 base_channels=32,\n                 min_feat_channels=32,\n                 out_act_cfg=dict(type='Tanh'),\n                 init_cfg=None,\n                 **kwargs):\n        super().__init__(init_cfg=init_cfg)\n\n        self.pad_head = int((kernel_size - 1) / 2 * num_layers)\n        self.blocks = nn.ModuleList()\n\n        self.upsample = partial(\n            F.interpolate, mode='bicubic', align_corners=True)\n\n        for scale in range(num_scales + 1):\n            base_ch = min(base_channels * pow(2, int(np.floor(scale / 4))),\n                          128)\n            min_feat_ch = min(\n                min_feat_channels * pow(2, int(np.floor(scale / 4))), 128)\n\n            self.blocks.append(\n                GeneratorBlock(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    kernel_size=kernel_size,\n                    padding=padding,\n                    num_layers=num_layers,\n                    base_channels=base_ch,\n                    min_feat_channels=min_feat_ch,\n                    out_act_cfg=out_act_cfg,\n                    **kwargs))\n\n        self.noise_padding_layer = nn.ZeroPad2d(self.pad_head)\n        self.img_padding_layer = nn.ZeroPad2d(self.pad_head)\n\n    def forward(self,\n                input_sample,\n                fixed_noises,\n                noise_weights,\n                rand_mode,\n                curr_scale,\n                num_batches=1,\n                get_prev_res=False,\n                return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            input_sample (Tensor | None): The input for generator. In the\n                original implementation, a tensor filled with zeros is adopted.\n                If None is given, we will construct it from the first fixed\n                noises.\n            fixed_noises (list[Tensor]): List of the fixed noises in SinGAN.\n            noise_weights (list[float]): List of the weights for random noises.\n            rand_mode (str): Choices from ['rand', 'recon']. In ``rand`` mode,\n                it will sample from random noises. Otherwise, the\n                reconstruction for the single image will be returned.\n            curr_scale (int): The scale for the current inference or training.\n            num_batches (int, optional): The number of batches. Defaults to 1.\n            get_prev_res (bool, optional): Whether to return results from\n                previous stages. Defaults to False.\n            return_noise (bool, optional): Whether to return noises tensor.\n                Defaults to False.\n\n        Returns:\n            Tensor | dict: Generated image tensor or dictionary containing \\\n                more data.\n        \"\"\"\n        if get_prev_res or return_noise:\n            prev_res_list = []\n            noise_list = []\n\n        if input_sample is None:\n            input_sample = torch.zeros(\n                (num_batches, 3, fixed_noises[0].shape[-2],\n                 fixed_noises[0].shape[-1])).to(fixed_noises[0])\n\n        g_res = input_sample\n\n        for stage in range(curr_scale + 1):\n            if rand_mode == 'recon':\n                noise_ = fixed_noises[stage]\n            else:\n                noise_ = torch.randn(num_batches,\n                                     *fixed_noises[stage].shape[1:]).to(g_res)\n            if return_noise:\n                noise_list.append(noise_)\n\n            # add padding at head\n            pad_ = (self.pad_head, ) * 4\n            noise_ = F.pad(noise_, pad_)\n            g_res_pad = F.pad(g_res, pad_)\n            noise = noise_ * noise_weights[stage] + g_res_pad\n\n            g_res = self.blocks[stage](noise.detach(), g_res)\n\n            if get_prev_res and stage != curr_scale:\n                prev_res_list.append(g_res)\n\n            # upsample, here we use interpolation from PyTorch\n            if stage != curr_scale:\n                h_next, w_next = fixed_noises[stage + 1].shape[-2:]\n                g_res = self.upsample(g_res, (h_next, w_next))\n\n        if get_prev_res or return_noise:\n            output_dict = dict(\n                fake_img=g_res,\n                prev_res_list=prev_res_list,\n                # noise_batch=noise_list\n            )\n            return output_dict\n\n        return g_res\n\n    def check_and_load_prev_weight(self, curr_scale):\n        logger = MMLogger.get_current_instance()\n        if curr_scale == 0:\n            return\n        prev_ch = self.blocks[curr_scale - 1].base_channels\n        curr_ch = self.blocks[curr_scale].base_channels\n\n        prev_in_ch = self.blocks[curr_scale - 1].in_channels\n        curr_in_ch = self.blocks[curr_scale].in_channels\n        if prev_ch == curr_ch and prev_in_ch == curr_in_ch:\n            load_state_dict(\n                self.blocks[curr_scale],\n                self.blocks[curr_scale - 1].state_dict(),\n                logger=MMLogger.get_current_instance())\n            logger.info('Successfully load pretrained model from last scale.')\n        else:\n            logger.info(\n                'Cannot load pretrained model from last scale since'\n                f' prev_ch({prev_ch}) != curr_ch({curr_ch})'\n                f' or prev_in_ch({prev_in_ch}) != curr_in_ch({curr_in_ch})')\n"
  },
  {
    "path": "mmagic/models/editors/singan/singan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import constant_init, normal_init\nfrom mmengine.runner import load_checkpoint\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\n\nclass GeneratorBlock(nn.Module):\n    \"\"\"Generator block used in SinGAN.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        num_scales (int): The number of scales/stages in generator. Note\n            that this number is counted from zero, which is the same as the\n            original paper.\n        kernel_size (int, optional): Kernel size, same as :obj:`nn.Conv2d`.\n            Defaults to 3.\n        padding (int, optional): Padding for the convolutional layer, same as\n            :obj:`nn.Conv2d`. Defaults to 0.\n        num_layers (int, optional): The number of convolutional layers in each\n            generator block. Defaults to 5.\n        base_channels (int, optional): The basic channels for convolutional\n            layers in the generator block. Defaults to 32.\n        min_feat_channels (int, optional): Minimum channels for the feature\n            maps in the generator block. Defaults to 32.\n        out_act_cfg (dict | None, optional): Configs for output activation\n            layer. Defaults to dict(type='Tanh').\n        stride (int, optional): Same as :obj:`nn.Conv2d`. Defaults to 1.\n        allow_no_residual (bool, optional): Whether to allow no residual link\n            in this block. Defaults to False.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 padding,\n                 num_layers,\n                 base_channels,\n                 min_feat_channels,\n                 out_act_cfg=dict(type='Tanh'),\n                 stride=1,\n                 allow_no_residual=False,\n                 **kwargs):\n        super().__init__()\n        self.in_channels = in_channels\n\n        self.base_channels = base_channels\n\n        self.kernel_size = kernel_size\n        self.num_layers = num_layers\n        self.allow_no_residual = allow_no_residual\n\n        self.head = ConvModule(\n            in_channels=in_channels,\n            out_channels=base_channels,\n            kernel_size=kernel_size,\n            padding=padding,\n            stride=1,\n            norm_cfg=dict(type='BN'),\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n            **kwargs)\n\n        self.body = nn.Sequential()\n\n        for i in range(num_layers - 2):\n            feat_channels_ = int(base_channels / pow(2, (i + 1)))\n            block = ConvModule(\n                max(2 * feat_channels_, min_feat_channels),\n                max(feat_channels_, min_feat_channels),\n                kernel_size=kernel_size,\n                padding=padding,\n                stride=stride,\n                norm_cfg=dict(type='BN'),\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                **kwargs)\n            self.body.add_module(f'block{i+1}', block)\n\n        self.tail = ConvModule(\n            max(feat_channels_, min_feat_channels),\n            out_channels,\n            kernel_size=kernel_size,\n            padding=padding,\n            stride=1,\n            norm_cfg=None,\n            act_cfg=out_act_cfg,\n            **kwargs)\n\n        self.init_weights()\n\n    def forward(self, x, prev):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map.\n            prev (Tensor): Previous feature map.\n\n        Returns:\n            Tensor: Output feature map with the shape of (N, C, H, W).\n        \"\"\"\n        x = self.head(x)\n        x = self.body(x)\n        x = self.tail(x)\n\n        # if prev and x are not in the same shape at the channel dimension\n        if self.allow_no_residual and x.shape[1] != prev.shape[1]:\n            return x\n\n        return x + prev\n\n    def init_weights(self, pretrained=None):\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    normal_init(m, 0, 0.02)\n                elif isinstance(m, (_BatchNorm, nn.InstanceNorm2d)):\n                    constant_init(m, 1)\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n\n\nclass DiscriminatorBlock(nn.Module):\n    \"\"\"Discriminator Block used in SinGAN.\n\n    Args:\n        in_channels (int): Input channels.\n        base_channels (int): Base channels for this block.\n        min_feat_channels (int): The minimum channels for feature map.\n        kernel_size (int): Size of convolutional kernel, same as\n            :obj:`nn.Conv2d`.\n        padding (int): Padding for convolutional layer, same as\n            :obj:`nn.Conv2d`.\n        num_layers (int): The number of convolutional layers in this block.\n        norm_cfg (dict | None, optional): Config for the normalization layer.\n            Defaults to dict(type='BN').\n        act_cfg (dict | None, optional): Config for the activation layer.\n            Defaults to dict(type='LeakyReLU', negative_slope=0.2).\n        stride (int, optional): The stride for the convolutional layer, same as\n            :obj:`nn.Conv2d`. Defaults to 1.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 base_channels,\n                 min_feat_channels,\n                 kernel_size,\n                 padding,\n                 num_layers,\n                 norm_cfg=dict(type='BN'),\n                 act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                 stride=1,\n                 **kwargs):\n        super().__init__()\n\n        self.base_channels = base_channels\n        self.stride = stride\n        self.head = ConvModule(\n            in_channels,\n            base_channels,\n            kernel_size=kernel_size,\n            padding=padding,\n            stride=1,\n            norm_cfg=norm_cfg,\n            act_cfg=act_cfg,\n            **kwargs)\n\n        self.body = nn.Sequential()\n\n        for i in range(num_layers - 2):\n            feat_channels_ = int(base_channels / pow(2, (i + 1)))\n            block = ConvModule(\n                max(2 * feat_channels_, min_feat_channels),\n                max(feat_channels_, min_feat_channels),\n                kernel_size=kernel_size,\n                padding=padding,\n                stride=stride,\n                conv_cfg=None,\n                norm_cfg=norm_cfg,\n                act_cfg=act_cfg,\n                **kwargs)\n            self.body.add_module(f'block{i+1}', block)\n\n        self.tail = ConvModule(\n            max(feat_channels_, min_feat_channels),\n            1,\n            kernel_size=kernel_size,\n            padding=padding,\n            stride=1,\n            norm_cfg=None,\n            act_cfg=None,\n            **kwargs)\n\n        self.init_weights()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        x = self.head(x)\n        x = self.body(x)\n        x = self.tail(x)\n\n        return x\n\n    # TODO: study the effects of init functions\n    def init_weights(self, pretrained=None):\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=False, logger=logger)\n        elif pretrained is None:\n            for m in self.modules():\n                if isinstance(m, nn.Conv2d):\n                    normal_init(m, 0, 0.02)\n                elif isinstance(m, (_BatchNorm, nn.InstanceNorm2d)):\n                    constant_init(m, 1)\n        else:\n            raise TypeError('pretrained must be a str or None but'\n                            f' got {type(pretrained)} instead.')\n"
  },
  {
    "path": "mmagic/models/editors/srcnn/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .srcnn_net import SRCNNNet\n\n__all__ = ['SRCNNNet']\n"
  },
  {
    "path": "mmagic/models/editors/srcnn/srcnn_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SRCNNNet(BaseModule):\n    \"\"\"SRCNN network structure for image super resolution.\n\n    SRCNN has three conv layers. For each layer, we can define the\n    `in_channels`, `out_channels` and `kernel_size`.\n    The input image will first be upsampled with a bicubic upsampler, and then\n    super-resolved in the HR spatial size.\n\n    Paper: Learning a Deep Convolutional Network for Image Super-Resolution.\n\n    Args:\n        channels (tuple[int]): A tuple of channel numbers for each layer\n            including channels of input and output . Default: (3, 64, 32, 3).\n        kernel_sizes (tuple[int]): A tuple of kernel sizes for each conv layer.\n            Default: (9, 1, 5).\n        upscale_factor (int): Upsampling factor. Default: 4.\n    \"\"\"\n\n    def __init__(self,\n                 channels=(3, 64, 32, 3),\n                 kernel_sizes=(9, 1, 5),\n                 upscale_factor=4):\n        super().__init__()\n        assert len(channels) == 4, ('The length of channel tuple should be 4, '\n                                    f'but got {len(channels)}')\n        assert len(kernel_sizes) == 3, (\n            'The length of kernel tuple should be 3, '\n            f'but got {len(kernel_sizes)}')\n        self.upscale_factor = upscale_factor\n        self.img_upsampler = nn.Upsample(\n            scale_factor=self.upscale_factor,\n            mode='bicubic',\n            align_corners=False)\n\n        self.conv1 = nn.Conv2d(\n            channels[0],\n            channels[1],\n            kernel_size=kernel_sizes[0],\n            padding=kernel_sizes[0] // 2)\n        self.conv2 = nn.Conv2d(\n            channels[1],\n            channels[2],\n            kernel_size=kernel_sizes[1],\n            padding=kernel_sizes[1] // 2)\n        self.conv3 = nn.Conv2d(\n            channels[2],\n            channels[3],\n            kernel_size=kernel_sizes[2],\n            padding=kernel_sizes[2] // 2)\n\n        self.relu = nn.ReLU()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x = self.img_upsampler(x)\n        out = self.relu(self.conv1(x))\n        out = self.relu(self.conv2(out))\n        out = self.conv3(out)\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/srgan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .modified_vgg import ModifiedVGG\nfrom .sr_resnet import MSRResNet\nfrom .srgan import SRGAN\n\n__all__ = [\n    'ModifiedVGG',\n    'MSRResNet',\n    'SRGAN',\n]\n"
  },
  {
    "path": "mmagic/models/editors/srgan/modified_vgg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass ModifiedVGG(BaseModule):\n    \"\"\"A modified VGG discriminator with input size 128 x 128.\n\n    It is used to train SRGAN and ESRGAN.\n\n    Args:\n        in_channels (int): Channel number of inputs. Default: 3.\n        mid_channels (int): Channel number of base intermediate features.\n            Default: 64.\n    \"\"\"\n\n    def __init__(self, in_channels, mid_channels):\n        super().__init__()\n\n        self.conv0_0 = nn.Conv2d(in_channels, mid_channels, 3, 1, 1, bias=True)\n        self.conv0_1 = nn.Conv2d(\n            mid_channels, mid_channels, 4, 2, 1, bias=False)\n        self.bn0_1 = nn.BatchNorm2d(mid_channels, affine=True)\n\n        self.conv1_0 = nn.Conv2d(\n            mid_channels, mid_channels * 2, 3, 1, 1, bias=False)\n        self.bn1_0 = nn.BatchNorm2d(mid_channels * 2, affine=True)\n        self.conv1_1 = nn.Conv2d(\n            mid_channels * 2, mid_channels * 2, 4, 2, 1, bias=False)\n        self.bn1_1 = nn.BatchNorm2d(mid_channels * 2, affine=True)\n\n        self.conv2_0 = nn.Conv2d(\n            mid_channels * 2, mid_channels * 4, 3, 1, 1, bias=False)\n        self.bn2_0 = nn.BatchNorm2d(mid_channels * 4, affine=True)\n        self.conv2_1 = nn.Conv2d(\n            mid_channels * 4, mid_channels * 4, 4, 2, 1, bias=False)\n        self.bn2_1 = nn.BatchNorm2d(mid_channels * 4, affine=True)\n\n        self.conv3_0 = nn.Conv2d(\n            mid_channels * 4, mid_channels * 8, 3, 1, 1, bias=False)\n        self.bn3_0 = nn.BatchNorm2d(mid_channels * 8, affine=True)\n        self.conv3_1 = nn.Conv2d(\n            mid_channels * 8, mid_channels * 8, 4, 2, 1, bias=False)\n        self.bn3_1 = nn.BatchNorm2d(mid_channels * 8, affine=True)\n\n        self.conv4_0 = nn.Conv2d(\n            mid_channels * 8, mid_channels * 8, 3, 1, 1, bias=False)\n        self.bn4_0 = nn.BatchNorm2d(mid_channels * 8, affine=True)\n        self.conv4_1 = nn.Conv2d(\n            mid_channels * 8, mid_channels * 8, 4, 2, 1, bias=False)\n        self.bn4_1 = nn.BatchNorm2d(mid_channels * 8, affine=True)\n\n        self.linear1 = nn.Linear(mid_channels * 8 * 4 * 4, 100)\n        self.linear2 = nn.Linear(100, 1)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        assert x.size(2) == 128 and x.size(3) == 128, (\n            f'Input spatial size must be 128x128, '\n            f'but received {x.size()}.')\n\n        feat = self.lrelu(self.conv0_0(x))\n        feat = self.lrelu(self.bn0_1(\n            self.conv0_1(feat)))  # output spatial size: (64, 64)\n\n        feat = self.lrelu(self.bn1_0(self.conv1_0(feat)))\n        feat = self.lrelu(self.bn1_1(\n            self.conv1_1(feat)))  # output spatial size: (32, 32)\n\n        feat = self.lrelu(self.bn2_0(self.conv2_0(feat)))\n        feat = self.lrelu(self.bn2_1(\n            self.conv2_1(feat)))  # output spatial size: (16, 16)\n\n        feat = self.lrelu(self.bn3_0(self.conv3_0(feat)))\n        feat = self.lrelu(self.bn3_1(\n            self.conv3_1(feat)))  # output spatial size: (8, 8)\n\n        feat = self.lrelu(self.bn4_0(self.conv4_0(feat)))\n        feat = self.lrelu(self.bn4_1(\n            self.conv4_1(feat)))  # output spatial size: (4, 4)\n\n        feat = feat.view(feat.size(0), -1)\n        feat = self.lrelu(self.linear1(feat))\n        out = self.linear2(feat)\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/srgan/sr_resnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import default_init_weights, make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass MSRResNet(BaseModule):\n    \"\"\"Modified SRResNet.\n\n    A compacted version modified from SRResNet in \"Photo-Realistic Single\n    Image Super-Resolution Using a Generative Adversarial Network\".\n\n    It uses residual blocks without BN, similar to EDSR.\n    Currently, it supports x2, x3 and x4 upsampling scale factor.\n\n    Args:\n        in_channels (int): Channel number of inputs.\n        out_channels (int): Channel number of outputs.\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64.\n        num_blocks (int): Block number in the trunk network. Default: 16.\n        upscale_factor (int): Upsampling factor. Support x2, x3 and x4.\n            Default: 4.\n    \"\"\"\n    _supported_upscale_factors = [2, 3, 4]\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 num_blocks=16,\n                 upscale_factor=4):\n\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.mid_channels = mid_channels\n        self.num_blocks = num_blocks\n        self.upscale_factor = upscale_factor\n\n        self.conv_first = nn.Conv2d(\n            in_channels, mid_channels, 3, 1, 1, bias=True)\n        self.trunk_net = make_layer(\n            ResidualBlockNoBN, num_blocks, mid_channels=mid_channels)\n\n        # upsampling\n        if self.upscale_factor in [2, 3]:\n            self.upsample1 = PixelShufflePack(\n                mid_channels,\n                mid_channels,\n                self.upscale_factor,\n                upsample_kernel=3)\n        elif self.upscale_factor == 4:\n            self.upsample1 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n            self.upsample2 = PixelShufflePack(\n                mid_channels, mid_channels, 2, upsample_kernel=3)\n        else:\n            raise ValueError(\n                f'Unsupported scale factor {self.upscale_factor}. '\n                f'Currently supported ones are '\n                f'{self._supported_upscale_factors}.')\n\n        self.conv_hr = nn.Conv2d(\n            mid_channels, mid_channels, 3, 1, 1, bias=True)\n        self.conv_last = nn.Conv2d(\n            mid_channels, out_channels, 3, 1, 1, bias=True)\n\n        self.img_upsampler = nn.Upsample(\n            scale_factor=self.upscale_factor,\n            mode='bilinear',\n            align_corners=False)\n\n        # activation function\n        self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True)\n\n        self.init_weights()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        feat = self.lrelu(self.conv_first(x))\n        out = self.trunk_net(feat)\n\n        if self.upscale_factor in [2, 3]:\n            out = self.upsample1(out)\n        elif self.upscale_factor == 4:\n            out = self.upsample1(out)\n            out = self.upsample2(out)\n\n        out = self.conv_last(self.lrelu(self.conv_hr(out)))\n        upsampled_img = self.img_upsampler(x)\n        out += upsampled_img\n        return out\n\n    def init_weights(self):\n        \"\"\"Init weights for models.\"\"\"\n        for m in [self.conv_first, self.conv_hr, self.conv_last]:\n            default_init_weights(m, 0.1)\n"
  },
  {
    "path": "mmagic/models/editors/srgan/srgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List\n\nimport torch\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.models.base_models import BaseEditModel\nfrom mmagic.models.utils import set_requires_grad\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SRGAN(BaseEditModel):\n    \"\"\"SRGAN model for single image super-resolution.\n\n    Ref:\n    Photo-Realistic Single Image Super-Resolution Using a Generative\n    Adversarial Network.\n\n    Args:\n        generator (dict): Config for the generator.\n        discriminator (dict): Config for the discriminator. Default: None.\n        gan_loss (dict): Config for the gan loss.\n            Note that the loss weight in gan loss is only for the generator.\n        pixel_loss (dict): Config for the pixel loss. Default: None.\n        perceptual_loss (dict): Config for the perceptual loss. Default: None.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 discriminator=None,\n                 gan_loss=None,\n                 pixel_loss=None,\n                 perceptual_loss=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        # discriminator\n        self.discriminator = MODELS.build(\n            discriminator) if discriminator else None\n\n        # loss\n        self.gan_loss = MODELS.build(gan_loss) if gan_loss else None\n        self.perceptual_loss = MODELS.build(\n            perceptual_loss) if perceptual_loss else None\n\n        self.disc_steps = 1 if self.train_cfg is None else self.train_cfg.get(\n            'disc_steps', 1)\n        self.disc_repeat = 1 if self.train_cfg is None else self.train_cfg.get(\n            'disc_repeat', 1)\n        self.disc_init_steps = (0 if self.train_cfg is None else\n                                self.train_cfg.get('disc_init_steps', 0))\n\n        self.register_buffer('step_counter', torch.tensor(0), False)\n\n        if self.discriminator is None or self.gan_loss is None:\n            # No GAN model or loss.\n            self.disc_repeat = 0\n\n    def forward_train(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training. Losses of training is calculated in train_step.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            Tensor: Result of ``forward_tensor`` with ``training=True``.\n        \"\"\"\n\n        return self.forward_tensor(\n            inputs, data_samples, training=True, **kwargs)\n\n    def forward_tensor(self, inputs, data_samples=None, training=False):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            training (bool): Whether is training. Default: False.\n\n        Returns:\n            Tensor: result of simple forward.\n        \"\"\"\n\n        feats = self.generator(inputs)\n\n        return feats\n\n    def if_run_g(self):\n        \"\"\"Calculates whether need to run the generator step.\"\"\"\n\n        return (self.step_counter % self.disc_steps == 0\n                and self.step_counter >= self.disc_init_steps)\n\n    def if_run_d(self):\n        \"\"\"Calculates whether need to run the discriminator step.\"\"\"\n\n        return self.discriminator and self.gan_loss\n\n    def g_step(self, batch_outputs: torch.Tensor, batch_gt_data: torch.Tensor):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        losses = dict()\n\n        # pix loss\n        if self.pixel_loss:\n            losses['loss_pix'] = self.pixel_loss(batch_outputs, batch_gt_data)\n\n        # perceptual loss\n        if self.perceptual_loss:\n            loss_percep, loss_style = self.perceptual_loss(\n                batch_outputs, batch_gt_data)\n            if loss_percep is not None:\n                losses['loss_perceptual'] = loss_percep\n            if loss_style is not None:\n                losses['loss_style'] = loss_style\n\n        # gan loss for generator\n        if self.gan_loss and self.discriminator:\n            fake_g_pred = self.discriminator(batch_outputs)\n            losses['loss_gan'] = self.gan_loss(\n                fake_g_pred, target_is_real=True, is_disc=False)\n\n        return losses\n\n    def d_step_real(self, batch_outputs, batch_gt_data: torch.Tensor):\n        \"\"\"Real part of D step.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            Tensor: Real part of gan_loss for discriminator.\n        \"\"\"\n\n        # real\n        real_d_pred = self.discriminator(batch_gt_data)\n        loss_d_real = self.gan_loss(\n            real_d_pred, target_is_real=True, is_disc=True)\n\n        return loss_d_real\n\n    def d_step_fake(self, batch_outputs: torch.Tensor, batch_gt_data):\n        \"\"\"Fake part of D step.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            Tensor: Fake part of gan_loss for discriminator.\n        \"\"\"\n\n        # fake\n        fake_d_pred = self.discriminator(batch_outputs.detach())\n        loss_d_fake = self.gan_loss(\n            fake_d_pred, target_is_real=False, is_disc=True)\n\n        return loss_d_fake\n\n    def g_step_with_optim(self, batch_outputs: torch.Tensor,\n                          batch_gt_data: torch.Tensor,\n                          optim_wrapper: OptimWrapperDict):\n        \"\"\"G step with optim of GAN: Calculate losses of generator and run\n        optim.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n            optim_wrapper (OptimWrapperDict): Optim wrapper dict.\n\n        Returns:\n            dict: Dict of parsed losses.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n\n        with g_optim_wrapper.optim_context(self):\n            losses_g = self.g_step(batch_outputs, batch_gt_data)\n\n        parsed_losses_g, log_vars_g = self.parse_losses(losses_g)\n        g_optim_wrapper.update_params(parsed_losses_g)\n\n        return log_vars_g\n\n    def d_step_with_optim(self, batch_outputs: torch.Tensor,\n                          batch_gt_data: torch.Tensor,\n                          optim_wrapper: OptimWrapperDict):\n        \"\"\"D step with optim of GAN: Calculate losses of discriminator and run\n        optim.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n            optim_wrapper (OptimWrapperDict): Optim wrapper dict.\n\n        Returns:\n            dict: Dict of parsed losses.\n        \"\"\"\n\n        log_vars = dict()\n        d_optim_wrapper = optim_wrapper['discriminator']\n\n        with d_optim_wrapper.optim_context(self):\n            loss_d_real = self.d_step_real(batch_outputs, batch_gt_data)\n\n        parsed_losses_dr, log_vars_dr = self.parse_losses(\n            dict(loss_d_real=loss_d_real))\n        log_vars.update(log_vars_dr)\n        loss_dr = d_optim_wrapper.scale_loss(parsed_losses_dr)\n        d_optim_wrapper.backward(loss_dr)\n\n        with d_optim_wrapper.optim_context(self):\n            loss_d_fake = self.d_step_fake(batch_outputs, batch_gt_data)\n\n        parsed_losses_df, log_vars_df = self.parse_losses(\n            dict(loss_d_fake=loss_d_fake))\n        log_vars.update(log_vars_df)\n        loss_df = d_optim_wrapper.scale_loss(parsed_losses_df)\n        d_optim_wrapper.backward(loss_df)\n\n        if d_optim_wrapper.should_update():\n            d_optim_wrapper.step()\n            d_optim_wrapper.zero_grad()\n\n        return log_vars\n\n    def extract_gt_data(self, data_samples):\n        \"\"\"extract gt data from data samples.\n\n        Args:\n            data_samples (list): List of DataSample.\n\n        Returns:\n            Tensor: Extract gt data.\n        \"\"\"\n\n        batch_gt_data = data_samples.gt_img\n\n        return batch_gt_data\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step of GAN-based method.\n\n        Args:\n            data (List[dict]): Data sampled from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance\n                used to update model parameters.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n\n        data = self.data_preprocessor(data, True)\n        batch_inputs = data['inputs']\n        data_samples = data['data_samples']\n        batch_gt_data = self.extract_gt_data(data_samples)\n\n        log_vars = dict()\n\n        with g_optim_wrapper.optim_context(self):\n            batch_outputs = self.forward_train(batch_inputs, data_samples)\n\n        if self.if_run_g():\n            set_requires_grad(self.discriminator, False)\n\n            log_vars_d = self.g_step_with_optim(\n                batch_outputs=batch_outputs,\n                batch_gt_data=batch_gt_data,\n                optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if self.if_run_d():\n            set_requires_grad(self.discriminator, True)\n\n            for _ in range(self.disc_repeat):\n                # detach before function call to resolve PyTorch2.0 compile bug\n                log_vars_d = self.d_step_with_optim(\n                    batch_outputs=batch_outputs.detach(),\n                    batch_gt_data=batch_gt_data,\n                    optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if 'loss' in log_vars:\n            log_vars.pop('loss')\n\n        self.step_counter += 1\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .stable_diffusion import StableDiffusion\nfrom .stable_diffusion_inpaint import StableDiffusionInpaint\nfrom .vae import AutoencoderKL\n\n__all__ = ['StableDiffusion', 'AutoencoderKL', 'StableDiffusionInpaint']\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion/clip_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.logging import MMLogger\n\nfrom mmagic.utils import try_import\n\ntransformers = try_import('transformers')\n\nif transformers is not None:\n    from transformers import CLIPConfig, CLIPVisionModel, PreTrainedModel\n    from transformers.models.clip.feature_extraction_clip import \\\n        CLIPFeatureExtractor  # noqa\n    from transformers.models.clip.modeling_clip import CLIPTextModel\n    from transformers.models.clip.tokenization_clip import CLIPTokenizer\n\n    logger = MMLogger.get_current_instance()\n\n    def cosine_distance(image_embeds, text_embeds):\n        \"\"\"compute the cosine distance of image embeddings and text\n        embeddings.\"\"\"\n        normalized_image_embeds = nn.functional.normalize(image_embeds)\n        normalized_text_embeds = nn.functional.normalize(text_embeds)\n        return torch.mm(normalized_image_embeds, normalized_text_embeds.t())\n\n    class StableDiffusionSafetyChecker(PreTrainedModel):\n        config_class = CLIPConfig\n        _no_split_modules = ['CLIPEncoderLayer']\n\n        def __init__(self, config: CLIPConfig):\n            \"\"\"check result image for stable diffusion to prevent NSFW content\n            generated.\n\n            Args:\n                config(CLIPConfig): config for transformers clip.\n            \"\"\"\n\n            super().__init__(config)\n\n            self.vision_model = CLIPVisionModel(config.vision_config)\n            self.visual_projection = nn.Linear(\n                config.vision_config.hidden_size,\n                config.projection_dim,\n                bias=False)\n\n            self.concept_embeds = nn.Parameter(\n                torch.ones(17, config.projection_dim), requires_grad=False)\n            self.special_care_embeds = nn.Parameter(\n                torch.ones(3, config.projection_dim), requires_grad=False)\n\n            self.concept_embeds_weights = nn.Parameter(\n                torch.ones(17), requires_grad=False)\n            self.special_care_embeds_weights = nn.Parameter(\n                torch.ones(3), requires_grad=False)\n\n        @torch.no_grad()\n        def forward(self, clip_input, images):\n            \"\"\"return black image if input image has nsfw content.\n\n            Args:\n                clip_input(torch.Tensor):\n                    image feature extracted by clip feature extractor.\n                images(torch.Tensor):\n                    image generated by stable diffusion.\n\n            Returns:\n                images(torch.Tensor):\n                    black images if input images have nsfw content,\n                    otherwise return input images.\n                has_nsfw_concepts(list[bool]):\n                    flag list to indicate whether input images have\n                    nsfw content.\n            \"\"\"\n            pooled_output = self.vision_model(clip_input)[1]\n            image_embeds = self.visual_projection(pooled_output)\n\n            # we always cast to float32 as this does not cause\n            # significant overhead and is compatible with bfloa16\n            special_cos_dist = cosine_distance(\n                image_embeds, self.special_care_embeds).cpu().float().numpy()\n            cos_dist = cosine_distance(\n                image_embeds, self.concept_embeds).cpu().float().numpy()\n\n            result = []\n            batch_size = image_embeds.shape[0]\n            for i in range(batch_size):\n                result_img = {\n                    'special_scores': {},\n                    'special_care': [],\n                    'concept_scores': {},\n                    'bad_concepts': []\n                }\n\n                # increase this value to create a stronger `nfsw` filter\n                # at the cost of increasing the possibility of\n                # filtering benign images\n                adjustment = 0.0\n\n                for concept_idx in range(len(special_cos_dist[0])):\n                    concept_cos = special_cos_dist[i][concept_idx]\n                    concept_threshold = self.special_care_embeds_weights[\n                        concept_idx].item()\n                    result_img['special_scores'][concept_idx] = round(\n                        concept_cos - concept_threshold + adjustment, 3)\n                    if result_img['special_scores'][concept_idx] > 0:\n                        result_img['special_care'].append({\n                            concept_idx,\n                            result_img['special_scores'][concept_idx]\n                        })\n                        adjustment = 0.01\n\n                for concept_idx in range(len(cos_dist[0])):\n                    concept_cos = cos_dist[i][concept_idx]\n                    concept_threshold = self.concept_embeds_weights[\n                        concept_idx].item()\n                    result_img['concept_scores'][concept_idx] = round(\n                        concept_cos - concept_threshold + adjustment, 3)\n                    if result_img['concept_scores'][concept_idx] > 0:\n                        result_img['bad_concepts'].append(concept_idx)\n\n                result.append(result_img)\n\n            has_nsfw_concepts = [\n                len(res['bad_concepts']) > 0 for res in result\n            ]\n\n            for idx, has_nsfw_concept in enumerate(has_nsfw_concepts):\n                if has_nsfw_concept:\n                    images[idx] = torch.zeros(images[idx].shape)  # black image\n\n            if any(has_nsfw_concepts):\n                logger.warning(\n                    'NSFW content was detected in one or more images.'\n                    ' A black image will be returned instead.'\n                    ' Try again with a different prompt and/or seed.')\n\n            return images, has_nsfw_concepts\n\n    def load_clip_submodels(init_cfg, submodels, requires_safety_checker):\n        \"\"\"\n        Args:\n            init_cfg (dict):\n                ckpt path of clip models.\n            submodels (List):\n                list of stable diffusion submodels.\n            requires_safety_checker (bool):\n                whether to load safety checker\n\n        Returns:\n            tokenizer(CLIPTokenizer):\n                tokenizer with ckpt loaded.\n            feature_extractor(CLIPFeatureExtractor):\n                feature_extractor with ckpt loaded.\n            text_encoder(CLIPTextModel):\n                text_encoder with ckpt loaded.\n            safety_checker(StableDiffusionSafetyChecker):\n                safety_checker with ckpt loaded.\n\n        \"\"\"\n        pretrained_model_path = init_cfg.get('pretrained_model_path', None)\n\n        tokenizer, feature_extractor, text_encoder, safety_checker = \\\n            None, None, None, None\n        if pretrained_model_path:\n            tokenizer = CLIPTokenizer.from_pretrained(\n                os.path.join(pretrained_model_path, 'tokenizer'))\n\n            feature_extractor = CLIPFeatureExtractor.from_pretrained(\n                os.path.join(pretrained_model_path, 'feature_extractor'))\n\n            text_encoder = CLIPTextModel.from_pretrained(\n                os.path.join(pretrained_model_path, 'text_encoder'))\n\n            if requires_safety_checker:\n                submodels.append('safety_checker')\n                safety_checker = StableDiffusionSafetyChecker.from_pretrained(\n                    os.path.join(pretrained_model_path, 'safety_checker'))\n\n        return tokenizer, feature_extractor, text_encoder, safety_checker\n\nelse:\n\n    def load_clip_submodels(init_cfg, submodels, requires_safety_checker):\n        raise ImportError('Please install transformers via '\n                          '\\'pip install transformers\\'')\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion/stable_diffusion.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport inspect\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModel\nfrom mmengine.runner import set_random_seed\nfrom PIL import Image\nfrom tqdm.auto import tqdm\n\nfrom mmagic.models.archs import TokenizerWrapper\nfrom mmagic.models.utils import build_module, set_tomesd, set_xformers\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\n\nlogger = MMLogger.get_current_instance()\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module('sd')\n@MODELS.register_module()\nclass StableDiffusion(BaseModel):\n    \"\"\"Class for Stable Diffusion. Refers to https://github.com/Stability-\n    AI/stablediffusion and https://github.com/huggingface/diffusers/blob/main/s\n    rc/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_attend_an\n    d_excite.py  # noqa.\n\n    Args:\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        dtype (str, optional): The dtype for the model This argument will not work\n            when dtype is defined for submodels. Defaults to None.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise\n            Defaults to 0.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n    \"\"\"\n\n    def __init__(self,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 dtype: Optional[str] = None,\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None):\n\n        # TODO: support `from_pretrained` for this class\n        super().__init__(data_preprocessor, init_cfg)\n\n        default_args = dict()\n        if dtype is not None:\n            default_args['dtype'] = dtype\n\n        self.dtype = torch.float32\n        if dtype in ['float16', 'fp16', 'half']:\n            self.dtype = torch.float16\n        elif dtype == 'bf16':\n            self.dtype = torch.bfloat16\n        else:\n            assert dtype in [\n                'fp32', None\n            ], ('dtype must be one of \\'fp32\\', \\'fp16\\', \\'bf16\\' or None.')\n\n        self.vae = build_module(vae, MODELS, default_args=default_args)\n        self.unet = build_module(unet, MODELS)  # NOTE: initialize unet as fp32\n        self._unet_ori_dtype = next(self.unet.parameters()).dtype\n        print_log(f'Set UNet dtype to \\'{self._unet_ori_dtype}\\'.', 'current')\n        self.scheduler = build_module(scheduler, DIFFUSION_SCHEDULERS)\n        if test_scheduler is None:\n            self.test_scheduler = deepcopy(self.scheduler)\n        else:\n            self.test_scheduler = build_module(test_scheduler,\n                                               DIFFUSION_SCHEDULERS)\n        self.text_encoder = build_module(text_encoder, MODELS)\n        if not isinstance(tokenizer, str):\n            self.tokenizer = tokenizer\n        else:\n            # NOTE: here we assume tokenizer is an string\n            self.tokenizer = TokenizerWrapper(tokenizer, subfolder='tokenizer')\n\n        self.unet_sample_size = self.unet.sample_size\n        self.vae_scale_factor = 2**(len(self.vae.block_out_channels) - 1)\n\n        self.enable_noise_offset = noise_offset_weight > 0\n        self.noise_offset_weight = noise_offset_weight\n\n        self.enable_xformers = enable_xformers\n        self.set_xformers()\n\n        self.tomesd_cfg = tomesd_cfg\n        self.set_tomesd()\n\n    def set_xformers(self, module: Optional[nn.Module] = None) -> nn.Module:\n        \"\"\"Set xformers for the model.\n\n        Returns:\n            nn.Module: The model with xformers.\n        \"\"\"\n        if self.enable_xformers:\n            if module is None:\n                set_xformers(self)\n            else:\n                set_xformers(module)\n\n    def set_tomesd(self) -> nn.Module:\n        \"\"\"Set ToMe for the stable diffusion model.\n\n        Returns:\n            nn.Module: The model with ToMe.\n        \"\"\"\n        if self.tomesd_cfg is not None:\n            set_tomesd(self, **self.tomesd_cfg)\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    def train(self, mode: bool = True):\n        \"\"\"Set train/eval mode.\n\n        Args:\n            mode (bool, optional): Whether set train mode. Defaults to True.\n        \"\"\"\n        if mode:\n            if next(self.unet.parameters()).dtype != self._unet_ori_dtype:\n                print_log(\n                    f'Set UNet dtype to \\'{self._unet_ori_dtype}\\' '\n                    'in the train mode.', 'current')\n            self.unet.to(self._unet_ori_dtype)\n        else:\n            self.unet.to(self.dtype)\n            print_log(f'Set UNet dtype to \\'{self.dtype}\\' in the eval mode.',\n                      'current')\n        return super().train(mode)\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[torch.Generator] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              show_progress=True,\n              seed=1,\n              return_type='image'):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`):\n                The prompt or prompts to guide the image generation.\n            height (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image.\n            width (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps.\n                More denoising steps usually lead to a higher\n                quality image at the expense of slower inference.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in\n                [Classifier-Free Diffusion Guidance]\n                (https://arxiv.org/abs/2207.12598).\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                Ignored when not using guidance (i.e., ignored\n                if `guidance_scale` is less than `1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator`, *optional*):\n                A [torch generator] to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents,\n                sampled from a Gaussian distribution,\n                to be used as inputs for image generation.\n                Can be used to tweak the same generation\n                with different prompts.\n                If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n        set_random_seed(seed=seed)\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n\n        img_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n        latent_dtype = next(self.unet.parameters()).dtype\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        text_embeddings = self._encode_prompt(prompt, device,\n                                              num_images_per_prompt,\n                                              do_classifier_free_guidance,\n                                              negative_prompt)\n\n        # 4. Prepare timesteps\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare latent variables\n        if hasattr(self.unet, 'module'):\n            num_channels_latents = self.unet.module.in_channels\n        else:\n            num_channels_latents = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        # 6. Prepare extra step kwargs.\n        # TODO: Logic should ideally just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            latent_model_input = latent_model_input.to(latent_dtype)\n            text_embeddings = text_embeddings.to(latent_dtype)\n            # predict the noise residual\n            noise_pred = self.unet(\n                latent_model_input, t,\n                encoder_hidden_states=text_embeddings)['sample']\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n            # compute the previous noisy sample x_t -> x_t-1\n            latents = self.test_scheduler.step(\n                noise_pred, t, latents, **extra_step_kwargs)['prev_sample']\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image}\n\n    def output_to_pil(self, image) -> List[Image.Image]:\n        \"\"\"Convert output tensor to PIL image. Output tensor will be de-normed\n        to [0, 255] by `DataPreprocessor.destruct`. Due to no `data_samples` is\n        passed, color order conversion will not be performed.\n\n        Args:\n            image (torch.Tensor): The output tensor of the decoder.\n\n        Returns:\n            List[Image.Image]: The list of processed PIL images.\n        \"\"\"\n        image = self.data_preprocessor.destruct(image)\n        image = image.permute(0, 2, 3, 1).to(torch.uint8).cpu().numpy()\n        image = [Image.fromarray(img) for img in image]\n        return image\n\n    def _encode_prompt(self, prompt, device, num_images_per_prompt,\n                       do_classifier_free_guidance, negative_prompt):\n        \"\"\"Encodes the prompt into text encoder hidden states.\n\n        Args:\n            prompt (str or list(int)): prompt to be encoded.\n            device: (torch.device): torch device.\n            num_images_per_prompt (int): number of images that should be\n                generated per prompt.\n            do_classifier_free_guidance (`bool`): whether to use classifier\n                free guidance or not.\n            negative_prompt (str or List[str]): The prompt or prompts not\n                to guide the image generation. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is less than `1`).\n\n        Returns:\n            text_embeddings (torch.Tensor): text embeddings generated by\n                clip text encoder.\n        \"\"\"\n        batch_size = len(prompt) if isinstance(prompt, list) else 1\n\n        text_inputs = self.tokenizer(\n            prompt,\n            padding='max_length',\n            max_length=self.tokenizer.model_max_length,\n            truncation=True,\n            return_tensors='pt',\n        )\n        text_input_ids = text_inputs.input_ids\n        untruncated_ids = self.tokenizer(\n            prompt, padding='max_length', return_tensors='pt').input_ids\n\n        if not torch.equal(text_input_ids, untruncated_ids):\n            removed_text = self.tokenizer.batch_decode(\n                untruncated_ids[:, self.tokenizer.model_max_length - 1:-1])\n            logger.warning(\n                'The following part of your input was truncated because CLIP'\n                ' can only handle sequences up to'\n                f' {self.tokenizer.model_max_length} tokens: {removed_text}')\n\n        text_encoder = self.text_encoder.module if hasattr(\n            self.text_encoder, 'module') else self.text_encoder\n        if hasattr(text_encoder.config, 'use_attention_mask'\n                   ) and text_encoder.config.use_attention_mask:\n            attention_mask = text_inputs.attention_mask.to(device)\n        else:\n            attention_mask = None\n\n        text_embeddings = text_encoder(\n            text_input_ids.to(device),\n            attention_mask=attention_mask,\n        )\n        text_embeddings = text_embeddings[0]\n\n        # duplicate text embeddings for each generation per prompt,\n        bs_embed, seq_len, _ = text_embeddings.shape\n        text_embeddings = text_embeddings.repeat(1, num_images_per_prompt, 1)\n        text_embeddings = text_embeddings.view(\n            bs_embed * num_images_per_prompt, seq_len, -1)\n\n        # get unconditional embeddings for classifier free guidance\n        if do_classifier_free_guidance:\n            uncond_tokens: List[str]\n            if negative_prompt is None:\n                uncond_tokens = [''] * batch_size\n            elif type(prompt) is not type(negative_prompt):\n                raise TypeError(\n                    f'`negative_prompt` should be the same type to `prompt`,'\n                    f'but got {type(negative_prompt)} !='\n                    f' {type(prompt)}.')\n            elif isinstance(negative_prompt, str):\n                uncond_tokens = [negative_prompt]\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f'`negative_prompt`: {negative_prompt} has '\n                    f'batch size {len(negative_prompt)}, but `prompt`:'\n                    f' {prompt} has batch size {batch_size}.'\n                    f' Please make sure that passed `negative_prompt` matches'\n                    ' the batch size of `prompt`.')\n            else:\n                uncond_tokens = negative_prompt\n\n            max_length = text_input_ids.shape[-1]\n            uncond_input = self.tokenizer(\n                uncond_tokens,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n\n            if hasattr(text_encoder.config, 'use_attention_mask'\n                       ) and text_encoder.config.use_attention_mask:\n                attention_mask = uncond_input.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            uncond_embeddings = text_encoder(\n                uncond_input.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            uncond_embeddings = uncond_embeddings[0]\n\n            # duplicate unconditional embeddings for\n            # each generation per prompt, using mps friendly method\n            seq_len = uncond_embeddings.shape[1]\n            uncond_embeddings = uncond_embeddings.repeat(\n                1, num_images_per_prompt, 1)\n            uncond_embeddings = uncond_embeddings.view(\n                batch_size * num_images_per_prompt, seq_len, -1)\n\n            # For classifier free guidance, we need to do two forward passes.\n            # Here we concatenate the unconditional\n            # and text embeddings into a single batch\n            # to avoid doing two forward passes\n            text_embeddings = torch.cat([uncond_embeddings, text_embeddings])\n\n        return text_embeddings\n\n    def decode_latents(self, latents):\n        \"\"\"use vae to decode latents.\n\n        Args:\n            latents (torch.Tensor): latents to decode.\n\n        Returns:\n            image (torch.Tensor): image result.\n        \"\"\"\n        latents = 1 / 0.18215 * latents\n        if hasattr(self.vae, 'module'):\n            image = self.vae.module.decode(latents)['sample']\n        else:\n            image = self.vae.decode(latents)['sample']\n        # we always cast to float32 as this does not cause\n        # significant overhead and is compatible with bfloa16\n        return image.float()\n\n    def prepare_extra_step_kwargs(self, generator, eta):\n        \"\"\"prepare extra kwargs for the scheduler step.\n\n        Args:\n            generator (torch.Generator):\n                generator for random functions.\n            eta (float):\n                eta (η) is only used with the DDIMScheduler,\n                it will be ignored for other schedulers.\n                eta corresponds to η in DDIM paper:\n                https://arxiv.org/abs/2010.02502\n                and should be between [0, 1]\n\n        Return:\n            extra_step_kwargs (dict):\n                dict contains 'generator' and 'eta'\n        \"\"\"\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def prepare_test_scheduler_extra_step_kwargs(self, generator, eta):\n        \"\"\"prepare extra kwargs for the scheduler step.\n\n        Args:\n            generator (torch.Generator):\n                generator for random functions.\n            eta (float):\n                eta (η) is only used with the DDIMScheduler,\n                it will be ignored for other schedulers.\n                eta corresponds to η in DDIM paper:\n                https://arxiv.org/abs/2010.02502\n                and should be between [0, 1]\n\n        Return:\n            extra_step_kwargs (dict):\n                dict contains 'generator' and 'eta'\n        \"\"\"\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.test_scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.test_scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def check_inputs(self, prompt, height, width):\n        \"\"\"check whether inputs are in suitable format or not.\"\"\"\n\n        if not isinstance(prompt, str) and not isinstance(prompt, list):\n            raise ValueError(f'`prompt` has to be of '\n                             f'type `str` or `list` but is {type(prompt)}')\n\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError(f'`height` and `width` have to be divisible '\n                             f'by 8 but are {height} and {width}.')\n\n    def prepare_latents(self,\n                        batch_size,\n                        num_channels_latents,\n                        height,\n                        width,\n                        dtype,\n                        device,\n                        generator,\n                        latents=None):\n        \"\"\"prepare latents for diffusion to run in latent space.\n\n        Args:\n            batch_size (int): batch size.\n            num_channels_latents (int): latent channel nums.\n            height (int): image height.\n            width (int): image width.\n            dtype (torch.dtype): float type.\n            device (torch.device): torch device.\n            generator (torch.Generator):\n                generator for random functions, defaults to None.\n            latents (torch.Tensor):\n                Pre-generated noisy latents, defaults to None.\n\n        Return:\n            latents (torch.Tensor): prepared latents.\n        \"\"\"\n        shape = (batch_size, num_channels_latents,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        if latents is None:\n            latents = torch.randn(\n                shape, generator=generator, device=device, dtype=dtype)\n        else:\n            if latents.shape != shape:\n                raise ValueError(f'Unexpected latents shape, '\n                                 f'got {latents.shape}, expected {shape}')\n            latents = latents.to(device)\n\n        # scale the initial noise by the standard\n        # deviation required by the scheduler\n        latents = latents * self.scheduler.init_noise_sigma\n        return latents\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        data_samples = data['data_samples']\n        prompt = data_samples.prompt\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n        gt_img = self.data_preprocessor.destruct(data['inputs'], data_samples)\n\n        out_data_sample = DataSample(\n            fake_img=samples, gt_img=gt_img, prompt=prompt)\n\n        # out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        data = self.data_preprocessor(data)\n        data_samples = data['data_samples']\n        prompt = data_samples.prompt\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n        gt_img = self.data_preprocessor.destruct(data['inputs'], data_samples)\n\n        out_data_sample = DataSample(\n            fake_img=samples, gt_img=gt_img, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    def train_step(self, data, optim_wrapper_dict):\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n\n        vae = self.vae.module if hasattr(self.vae, 'module') else self.vae\n\n        optim_wrapper = optim_wrapper_dict['unet']\n        with optim_wrapper.optim_context(self.unet):\n            image = inputs\n            prompt = data_samples.prompt\n            num_batches = image.shape[0]\n\n            image = image.to(self.dtype)\n            latents = vae.encode(image).latent_dist.sample()\n            latents = latents * vae.config.scaling_factor\n\n            noise = torch.randn_like(latents)\n\n            if self.enable_noise_offset:\n                noise = noise + self.noise_offset_weight * torch.randn(\n                    latents.shape[0],\n                    latents.shape[1],\n                    1,\n                    1,\n                    device=noise.device)\n\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n\n            noisy_latents = self.scheduler.add_noise(latents, noise, timesteps)\n\n            input_ids = self.tokenizer(\n                prompt,\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n\n            encoder_hidden_states = self.text_encoder(input_ids)[0]\n\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            # NOTE: we train unet in fp32, convert to float manually\n            model_output = self.unet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float())\n            model_pred = model_output['sample']\n\n            loss_dict = dict()\n            # calculate loss in FP32\n            loss_mse = F.mse_loss(model_pred.float(), gt.float())\n            loss_dict['loss_mse'] = loss_mse\n\n            parsed_loss, log_vars = self.parse_losses(loss_dict)\n            optim_wrapper.update_params(parsed_loss)\n\n        return log_vars\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[list] = None,\n                mode: str = 'tensor') -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion/stable_diffusion_inpaint.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# Copyright 2023 The HuggingFace Team. All rights reserved.\nfrom typing import Dict, List, Optional, Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.logging import MMLogger\nfrom mmengine.runner import set_random_seed\nfrom PIL import Image\nfrom tqdm.auto import tqdm\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils.typing import SampleList\nfrom .stable_diffusion import StableDiffusion\n\nlogger = MMLogger.get_current_instance()\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module('sd-inpaint')\n@MODELS.register_module()\nclass StableDiffusionInpaint(StableDiffusion):\n\n    def __init__(self, *args, **kwargs):\n        \"\"\"Initializes the current class using the same parameters as its\n        parent, StableDiffusion.\n\n        This constructor is primarily a pass-through to the parent class's\n        constructor. All arguments and keyword arguments provided are directly\n        passed to the parent class, StableDiffusion.\n        \"\"\"\n        super().__init__(*args, **kwargs)\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              image: Union[torch.FloatTensor, Image.Image] = None,\n              mask_image: Union[torch.FloatTensor, Image.Image] = None,\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[torch.Generator] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              show_progress=True,\n              seed=1,\n              return_type='image'):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`):\n                The prompt or prompts to guide the image generation.\n            image (`Union[torch.FloatTensor, Image.Image]`):\n                The image to inpaint.\n            mask_image (`Union[torch.FloatTensor, Image.Image]`):\n                The mask to apply to the image, i.e. regions to inpaint.\n            height (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image.\n            width (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps.\n                More denoising steps usually lead to a higher\n                quality image at the expense of slower inference.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in\n                [Classifier-Free Diffusion Guidance]\n                (https://arxiv.org/abs/2207.12598).\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                Ignored when not using guidance (i.e., ignored\n                if `guidance_scale` is less than `1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator`, *optional*):\n                A [torch generator] to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents,\n                sampled from a Gaussian distribution,\n                to be used as inputs for image generation.\n                Can be used to tweak the same generation\n                with different prompts.\n                If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n        set_random_seed(seed=seed)\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n\n        img_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n        latent_dtype = next(self.unet.parameters()).dtype\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        text_embeddings = self._encode_prompt(prompt, device,\n                                              num_images_per_prompt,\n                                              do_classifier_free_guidance,\n                                              negative_prompt)\n\n        # 4. Prepare timesteps\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare mask and image\n        mask, masked_image = prepare_mask_and_masked_image(\n            image, mask_image, height, width)\n\n        # 6. Prepare latent variables\n        if hasattr(self.unet, 'module'):\n            num_channels_latents = self.vae.module.latent_channels\n            num_channels_unet = self.unet.module.in_channels\n        else:\n            num_channels_latents = self.vae.latent_channels\n            num_channels_unet = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        # 7. Prepare masked image latents\n        mask, masked_image_latents = self.prepare_mask_latents(\n            mask,\n            masked_image,\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            do_classifier_free_guidance,\n        )\n\n        # 8. Check that sizes of mask, masked image and latents match\n        if num_channels_unet == 9:\n            # default case for runwayml/stable-diffusion-inpainting\n            num_channels_mask = mask.shape[1]\n            num_channels_masked_image = masked_image_latents.shape[1]\n            total_channels = num_channels_latents + \\\n                num_channels_masked_image + num_channels_mask\n            if total_channels != self.unet.in_channels:\n                raise ValueError(\n                    'Incorrect configuration settings! The config of '\n                    f'`pipeline.unet`: {self.unet.config} expects'\n                    f' {self.unet.in_channels} but received '\n                    f'`num_channels_latents`: {num_channels_latents} +'\n                    f' `num_channels_mask`: {num_channels_mask} + '\n                    '`num_channels_masked_image`: '\n                    f'{num_channels_masked_image} = {total_channels}.'\n                    'Please verify the config of `pipeline.unet` '\n                    'or your `mask_image` or `image` input.')\n        elif num_channels_unet != 4:\n            raise ValueError(\n                f'The unet {self.unet.__class__} should have either 4 or 9 '\n                f'input channels, not {self.unet.config.in_channels}.')\n\n        # 9. Prepare extra step kwargs.\n        # TODO: Logic should ideally just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 10. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            # concat latents with mask\n            if num_channels_unet == 9:\n                latent_model_input = torch.cat(\n                    [latent_model_input, mask, masked_image_latents], dim=1)\n            latent_model_input = latent_model_input.to(latent_dtype)\n            text_embeddings = text_embeddings.to(latent_dtype)\n            # predict the noise residual\n            noise_pred = self.unet(\n                latent_model_input, t,\n                encoder_hidden_states=text_embeddings)['sample']\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n            # compute the previous noisy sample x_t -> x_t-1\n            latents = self.test_scheduler.step(\n                noise_pred, t, latents, **extra_step_kwargs)['prev_sample']\n\n            if num_channels_unet == 4:\n                assert NotImplementedError\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image}\n\n    def prepare_mask_latents(self, mask, masked_image, batch_size,\n                             num_channels_latents, height, width, dtype,\n                             device, generator, do_classifier_free_guidance):\n        \"\"\"prepare latents for diffusion to run in latent space.\n\n        Args:\n            mask (torch.Tensor): The mask to apply to the image, i.e. regions\n                to inpaint.\n            image (torch.Tensor): The image to be masked.\n            batch_size (int): batch size.\n            num_channels_latents (int): latent channel nums.\n            height (int): image height.\n            width (int): image width.\n            dtype (torch.dtype): float type.\n            device (torch.device): torch device.\n            generator (torch.Generator):\n                generator for random functions, defaults to None.\n            latents (torch.Tensor):\n                Pre-generated noisy latents, defaults to None.\n            do_classifier_free_guidance (bool): Whether to apply\n                classifier-free guidance.\n\n        Return:\n            latents (torch.Tensor): prepared latents.\n        \"\"\"\n        shape = (batch_size, num_channels_latents,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        mask = F.interpolate(\n            mask, size=shape[2:]).to(\n                device=device, dtype=dtype)\n        masked_image = masked_image.to(device=device, dtype=dtype)\n\n        masked_image_latents = self.vae.encode(\n            masked_image).latent_dist.sample(generator)\n        masked_image_latents = self.vae.config.scaling_factor * \\\n            masked_image_latents\n\n        # duplicate mask and masked_image_latents for each generation per\n        # prompt, using mps friendly method\n        if mask.shape[0] < batch_size:\n            if not batch_size % mask.shape[0] == 0:\n                raise ValueError(\n                    \"The passed mask and the required batch size don't match.\"\n                    'Masks are supposed to be duplicated to a total batch'\n                    f' size of {batch_size}, but {mask.shape[0]} masks were '\n                    'passed. Make sure the number of masks that you pass'\n                    ' is divisible by the total requested batch size.')\n            mask = mask.repeat(batch_size // mask.shape[0], 1, 1, 1)\n        if masked_image_latents.shape[0] < batch_size:\n            if not batch_size % masked_image_latents.shape[0] == 0:\n                raise ValueError(\n                    \"The passed images and the required batch size don't \"\n                    'match. Images are supposed to be duplicated to a total'\n                    f' batch size of {batch_size}, but '\n                    f'{masked_image_latents.shape[0]} images were passed.'\n                    ' Make sure the number of images that you pass is'\n                    'divisible by the total requested batch size.')\n            masked_image_latents = masked_image_latents.repeat(\n                batch_size // masked_image_latents.shape[0], 1, 1, 1)\n\n        mask = torch.cat([mask] * 2) if do_classifier_free_guidance else mask\n        masked_image_latents = (\n            torch.cat([masked_image_latents] * 2)\n            if do_classifier_free_guidance else masked_image_latents)\n\n        # aligning device to prevent device errors when concatenating it with\n        # the latent model input\n        masked_image_latents = masked_image_latents.to(\n            device=device, dtype=dtype)\n        return mask, masked_image_latents\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Performs a validation step on the provided data.\n\n        This method is decorated with `torch.no_grad()` which indicates no\n        gradients will be computed during the operations. This ensures\n        efficient memory usage during testing.\n\n        Args:\n            data (dict): Dictionary containing input data for testing.\n\n        Returns:\n            SampleList: List of samples processed during the testing step.\n\n        Raises:\n            NotImplementedError: This method has not been implemented.\n        \"\"\"\n        raise NotImplementedError\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Performs a testing step on the provided data.\n\n        This method is decorated with `torch.no_grad()` which indicates no\n        gradients will be computed during the operations. This ensures\n        efficient memory usage during testing.\n\n        Args:\n            data (dict): Dictionary containing input data for testing.\n\n        Returns:\n            SampleList: List of samples processed during the testing step.\n\n        Raises:\n            NotImplementedError: This method has not been implemented.\n        \"\"\"\n        raise NotImplementedError\n\n    def train_step(self, data, optim_wrapper_dict):\n        \"\"\"Performs a training step on the provided data.\n\n        Args:\n            data: Input data for training.\n            optim_wrapper_dict: Dictionary containing optimizer wrappers\n                which may contain optimizers, schedulers, etc. required\n                for the training step.\n\n        Raises:\n            NotImplementedError: This method has not been implemented.\n        \"\"\"\n        raise NotImplementedError\n\n\ndef prepare_mask_and_masked_image(image: torch.Tensor,\n                                  mask: torch.Tensor,\n                                  height: int = 512,\n                                  width: int = 512,\n                                  return_image: bool = False):\n    \"\"\"Prepare latents for diffusion to run in latent space.\n\n    Args:\n        image (torch.Tensor): The image to be masked.\n        mask (torch.Tensor): The mask to apply to the image, i.e. regions\n            to inpaint.\n        height (int): Image height.\n        width (int): Image width.\n        return_image (bool): Whether to return the original image.\n            Default to `False`.\n\n    Returns:\n        mask (torch.Tensor): A binary mask image.\n        masked_image (torch.Tensor): An image that applied mask.\n    \"\"\"\n\n    if image is None:\n        raise ValueError('`image` input cannot be undefined.')\n\n    if mask is None:\n        raise ValueError('`mask_image` input cannot be undefined.')\n\n    if isinstance(image, torch.Tensor):\n        if not isinstance(mask, torch.Tensor):\n            raise TypeError('`image` is a torch.Tensor but `mask` (type: '\n                            f'{type(mask)} is not')\n\n        # Batch single image\n        if image.ndim == 3:\n            assert image.shape[\n                0] == 3, 'Image outside a batch should be of shape (3, H, W)'\n            image = image.unsqueeze(0)\n\n        # Batch and add channel dim for single mask\n        if mask.ndim == 2:\n            mask = mask.unsqueeze(0).unsqueeze(0)\n\n        # Batch single mask or add channel dim\n        if mask.ndim == 3:\n            # Single batched mask, no channel dim or single mask\n            # not batched but channel dim\n            if mask.shape[0] == 1:\n                mask = mask.unsqueeze(0)\n\n            # Batched masks no channel dim\n            else:\n                mask = mask.unsqueeze(1)\n\n        assert (image.ndim == 4\n                and mask.ndim == 4), 'Image and Mask must have 4 dimensions'\n        assert image.shape[-2:] == mask.shape[\n            -2:], 'Image and Mask must have the same spatial dimensions'\n        assert image.shape[0] == mask.shape[\n            0], 'Image and Mask must have the same batch size'\n\n        # Check image is in [-1, 1]\n        if image.min() < -1 or image.max() > 1:\n            raise ValueError('Image should be in [-1, 1] range')\n\n        # Check mask is in [0, 1]\n        if mask.min() < 0 or mask.max() > 1:\n            raise ValueError('Mask should be in [0, 1] range')\n\n        # Binarize mask\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n\n        # Image as float32\n        image = image.to(dtype=torch.float32)\n    elif isinstance(mask, torch.Tensor):\n        raise TypeError(\n            f'`mask` is a torch.Tensor but `image` (type: {type(image)} is not'\n        )\n    else:\n        # preprocess image\n        if isinstance(image, (Image.Image, np.ndarray)):\n            image = [image]\n        if isinstance(image, list) and isinstance(image[0], Image.Image):\n            # resize all images w.r.t passed height an width\n            image = [\n                i.resize((width, height), resample=Image.LANCZOS)\n                for i in image\n            ]\n            image = [np.array(i.convert('RGB'))[None, :] for i in image]\n            image = np.concatenate(image, axis=0)\n        elif isinstance(image, list) and isinstance(image[0], np.ndarray):\n            image = np.concatenate([i[None, :] for i in image], axis=0)\n\n        image = image.transpose(0, 3, 1, 2)\n        image = torch.from_numpy(image).to(dtype=torch.float32) / 127.5 - 1.0\n\n        # preprocess mask\n        if isinstance(mask, (Image.Image, np.ndarray)):\n            mask = [mask]\n\n        if isinstance(mask, list) and isinstance(mask[0], Image.Image):\n            mask = [\n                i.resize((width, height), resample=Image.LANCZOS) for i in mask\n            ]\n            mask = np.concatenate(\n                [np.array(m.convert('L'))[None, None, :] for m in mask],\n                axis=0)\n            mask = mask.astype(np.float32) / 255.0\n        elif isinstance(mask, list) and isinstance(mask[0], np.ndarray):\n            mask = np.concatenate([m[None, None, :] for m in mask], axis=0)\n\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n        mask = torch.from_numpy(mask)\n\n    masked_image = image * (mask < 0.5)\n\n    # n.b. ensure backwards compatibility as old function does not return image\n    if return_image:\n        return mask, masked_image, image\n\n    return mask, masked_image\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion/vae.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import Optional, Tuple, Union\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom addict import Dict\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\nfrom mmagic.registry import MODELS\n\n\nclass Downsample2D(nn.Module):\n    \"\"\"A downsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        out_channels (int): output channels\n        padding (int): padding num\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 out_channels=None,\n                 padding=1,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.padding = padding\n        stride = 2\n        self.name = name\n\n        if use_conv:\n            conv = nn.Conv2d(\n                self.channels,\n                self.out_channels,\n                3,\n                stride=stride,\n                padding=padding)\n        else:\n            assert self.channels == self.out_channels\n            conv = nn.AvgPool2d(kernel_size=stride, stride=stride)\n\n        self.conv = conv\n\n    def forward(self, hidden_states):\n        \"\"\"forward hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n        if self.use_conv and self.padding == 0:\n            pad = (0, 1, 0, 1)\n            hidden_states = F.pad(hidden_states, pad, mode='constant', value=0)\n\n        assert hidden_states.shape[1] == self.channels\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n\n\nclass Upsample2D(nn.Module):\n    \"\"\"An upsampling layer with an optional convolution.\n\n    Args:\n        channels (int): channels in the inputs and outputs.\n        use_conv (bool): a bool determining if a convolution is applied.\n        use_conv_transpose (bool): whether to use conv transpose.\n        out_channels (int): output channels.\n    \"\"\"\n\n    def __init__(self,\n                 channels,\n                 use_conv=False,\n                 use_conv_transpose=False,\n                 out_channels=None,\n                 name='conv'):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels or channels\n        self.use_conv = use_conv\n        self.use_conv_transpose = use_conv_transpose\n        self.name = name\n\n        conv = None\n        if use_conv:\n            conv = nn.Conv2d(self.channels, self.out_channels, 3, padding=1)\n        else:\n            conv = nn.ConvTranspose2d(channels, self.out_channels, 4, 2, 1)\n\n        self.conv = conv\n\n    def forward(self, hidden_states, output_size=None):\n        \"\"\"forward with hidden states.\"\"\"\n        assert hidden_states.shape[1] == self.channels\n\n        if self.use_conv_transpose:\n            return self.conv(hidden_states)\n\n        # if `output_size` is passed we force the interpolation output\n        # size and do not make use of `scale_factor=2`\n        if output_size is None:\n            hidden_states = F.interpolate(\n                hidden_states, scale_factor=2.0, mode='nearest')\n        else:\n            hidden_states = F.interpolate(\n                hidden_states, size=output_size, mode='nearest')\n\n        # TODO(Suraj, Patrick)\n        #  - clean up after weight dicts are correctly renamed\n        hidden_states = self.conv(hidden_states)\n\n        return hidden_states\n\n\nclass ResnetBlock2D(nn.Module):\n    \"\"\"resnet block support down sample and up sample.\n\n    Args:\n        in_channels (int): input channels.\n        out_channels (int): output channels.\n        conv_shortcut (bool): whether to use conv shortcut.\n        dropout (float): dropout rate.\n        temb_channels (int): time embedding channels.\n        groups (int): conv groups.\n        groups_out (int): conv out groups.\n        pre_norm (bool): whether to norm before conv. Todo: remove.\n        eps (float): eps for groupnorm.\n        non_linearity (str): non linearity type.\n        time_embedding_norm (str): time embedding norm type.\n        output_scale_factor (float): factor to scale input and output.\n        use_in_shortcut (bool): whether to use conv in shortcut.\n        up (bool): whether to upsample.\n        down (bool): whether to downsample.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels,\n        out_channels=None,\n        conv_shortcut=False,\n        dropout=0.0,\n        temb_channels=512,\n        groups=32,\n        groups_out=None,\n        pre_norm=True,\n        eps=1e-6,\n        non_linearity='silu',\n        time_embedding_norm='default',\n        kernel=None,\n        output_scale_factor=1.0,\n        use_in_shortcut=None,\n        up=False,\n        down=False,\n    ):\n        super().__init__()\n        self.pre_norm = pre_norm\n        self.pre_norm = True\n        self.in_channels = in_channels\n        out_channels = in_channels if out_channels is None else out_channels\n        self.out_channels = out_channels\n        self.use_conv_shortcut = conv_shortcut\n        self.time_embedding_norm = time_embedding_norm\n        self.up = up\n        self.down = down\n        self.output_scale_factor = output_scale_factor\n\n        if groups_out is None:\n            groups_out = groups\n\n        self.norm1 = torch.nn.GroupNorm(\n            num_groups=groups, num_channels=in_channels, eps=eps, affine=True)\n\n        self.conv1 = torch.nn.Conv2d(\n            in_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if temb_channels is not None:\n            self.time_emb_proj = torch.nn.Linear(temb_channels, out_channels)\n        else:\n            self.time_emb_proj = None\n\n        self.norm2 = torch.nn.GroupNorm(\n            num_groups=groups_out,\n            num_channels=out_channels,\n            eps=eps,\n            affine=True)\n        self.dropout = torch.nn.Dropout(dropout)\n        self.conv2 = torch.nn.Conv2d(\n            out_channels, out_channels, kernel_size=3, stride=1, padding=1)\n\n        if non_linearity == 'silu' and \\\n                digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n            self.nonlinearity = nn.SiLU()\n        else:\n            mmengine.print_log('\\'SiLU\\' is not supported for '\n                               f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                               'Use ReLu instead but result maybe wrong')\n            self.nonlinearity = nn.ReLU()\n\n        self.upsample = self.downsample = None\n        if self.up:\n            self.upsample = Upsample2D(in_channels, use_conv=False)\n        elif self.down:\n            self.downsample = \\\n                Downsample2D(\n                    in_channels, use_conv=False, padding=1, name='op')\n\n        self.use_in_shortcut = self.in_channels != self.out_channels if use_in_shortcut is None else use_in_shortcut  # noqa\n\n        self.conv_shortcut = None\n        if self.use_in_shortcut:\n            self.conv_shortcut = torch.nn.Conv2d(\n                in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n\n    def forward(self, input_tensor, temb):\n        \"\"\"forward with hidden states and time embeddings.\"\"\"\n        hidden_states = input_tensor\n\n        hidden_states = self.norm1(hidden_states)\n        hidden_states = self.nonlinearity(hidden_states)\n\n        if self.upsample is not None:\n            # upsample_nearest_nhwc fails with large batch sizes.\n            # see https://github.com/huggingface/diffusers/issues/984\n            if hidden_states.shape[0] >= 64:\n                input_tensor = input_tensor.contiguous()\n                hidden_states = hidden_states.contiguous()\n            input_tensor = self.upsample(input_tensor)\n            hidden_states = self.upsample(hidden_states)\n        elif self.downsample is not None:\n            input_tensor = self.downsample(input_tensor)\n            hidden_states = self.downsample(hidden_states)\n\n        hidden_states = self.conv1(hidden_states)\n\n        if temb is not None:\n            temb = \\\n                self.time_emb_proj(self.nonlinearity(temb))[:, :, None, None]\n            hidden_states = hidden_states + temb\n\n        hidden_states = self.norm2(hidden_states)\n        hidden_states = self.nonlinearity(hidden_states)\n\n        hidden_states = self.dropout(hidden_states)\n        hidden_states = self.conv2(hidden_states)\n\n        if self.conv_shortcut is not None:\n            input_tensor = self.conv_shortcut(input_tensor)\n\n        output_tensor = \\\n            (input_tensor + hidden_states) / self.output_scale_factor\n\n        return output_tensor\n\n\nclass AttentionBlock(nn.Module):\n    \"\"\"An attention block that allows spatial positions to attend to each\n    other. Originally ported from here, but adapted to the N-d case.\n    https://github.com/hojonathanho/diffusion/blob/\n    1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/models/unet.py#L66.\n    Uses three q, k, v linear layers to compute attention.\n\n    Args:\n        channels (int): The number of channels in the input and output.\n        num_head_channels (int, *optional*):\n            The number of channels in each head. If None, then `num_heads` = 1.\n        norm_num_groups (int, *optional*, defaults to 32):\n            The number of groups to use for group norm.\n        rescale_output_factor (float, *optional*, defaults to 1.0):\n            The factor to rescale the output by.\n        eps (float, *optional*, defaults to 1e-5):\n            The epsilon value to use for group norm.\n    \"\"\"\n\n    def __init__(\n        self,\n        channels: int,\n        num_head_channels: Optional[int] = None,\n        norm_num_groups: int = 32,\n        rescale_output_factor: float = 1.0,\n        eps: float = 1e-5,\n    ):\n        super().__init__()\n        self.channels = channels\n\n        self.num_heads = channels // num_head_channels if num_head_channels is not None else 1  # noqa\n        self.num_head_size = num_head_channels\n        self.group_norm = nn.GroupNorm(\n            num_channels=channels,\n            num_groups=norm_num_groups,\n            eps=eps,\n            affine=True)\n\n        # define q,k,v as linear layers\n        self.query = nn.Linear(channels, channels)\n        self.key = nn.Linear(channels, channels)\n        self.value = nn.Linear(channels, channels)\n\n        self.rescale_output_factor = rescale_output_factor\n        self.proj_attn = nn.Linear(channels, channels, 1)\n\n    def transpose_for_scores(self, projection: torch.Tensor) -> torch.Tensor:\n        \"\"\"transpose projection.\"\"\"\n        new_projection_shape = projection.size()[:-1] + (self.num_heads, -1)\n        # move heads to 2nd position (B, T, H * D)\n        #  -> (B, T, H, D) -> (B, H, T, D)\n        new_projection = \\\n            projection.view(new_projection_shape).permute(0, 2, 1, 3)\n        return new_projection\n\n    def forward(self, hidden_states):\n        \"\"\"forward hidden states.\"\"\"\n        residual = hidden_states\n        batch, channel, height, width = hidden_states.shape\n\n        # norm\n        hidden_states = self.group_norm(hidden_states)\n\n        hidden_states = hidden_states.view(batch, channel,\n                                           height * width).transpose(1, 2)\n\n        # proj to q, k, v\n        query_proj = self.query(hidden_states)\n        key_proj = self.key(hidden_states)\n        value_proj = self.value(hidden_states)\n\n        scale = 1 / math.sqrt(self.channels / self.num_heads)\n\n        # get scores\n        if self.num_heads > 1:\n            query_states = self.transpose_for_scores(query_proj)\n            key_states = self.transpose_for_scores(key_proj)\n            value_states = self.transpose_for_scores(value_proj)\n\n            attention_scores = torch.matmul(\n                query_states, key_states.transpose(-1, -2)) * scale\n        else:\n            query_states, key_states, value_states = \\\n                query_proj, key_proj, value_proj\n\n            attention_scores = torch.baddbmm(\n                torch.empty(\n                    query_states.shape[0],\n                    query_states.shape[1],\n                    key_states.shape[1],\n                    dtype=query_states.dtype,\n                    device=query_states.device,\n                ),\n                query_states,\n                key_states.transpose(-1, -2),\n                beta=0,\n                alpha=scale,\n            )\n\n        attention_probs = torch.softmax(\n            attention_scores.float(), dim=-1).type(attention_scores.dtype)\n\n        # compute attention output\n        if self.num_heads > 1:\n            hidden_states = torch.matmul(attention_probs, value_states)\n            hidden_states = hidden_states.permute(0, 2, 1, 3).contiguous()\n            new_hidden_states_shape = \\\n                hidden_states.size()[:-2] + (self.channels,)\n            hidden_states = hidden_states.view(new_hidden_states_shape)\n        else:\n            hidden_states = torch.bmm(attention_probs, value_states)\n\n        # compute next hidden_states\n        hidden_states = self.proj_attn(hidden_states)\n        hidden_states = hidden_states.transpose(-1, -2).reshape(\n            batch, channel, height, width)\n\n        # res connect and rescale\n        hidden_states = \\\n            (hidden_states + residual) / self.rescale_output_factor\n        return hidden_states\n\n\nclass UNetMidBlock2D(nn.Module):\n    \"\"\"middle block in unet.\n\n    Args:\n        in_channels (int): input channels.\n        temb_channels (int): time embedding channels.\n        dropout (float): dropout rate, defaults to 0.0.\n        num_layers (int): layer num.\n        resnet_eps (float): resnet eps, defaults to 1e-6.\n        resnet_time_scale_shift (str):\n            time scale shift, defaults to 'default'.\n        resnet_act_fn (str):\n            act function in resnet, defaults to 'silu'.\n        resnet_groups (int):\n            conv groups in resnet, defaults to 32.\n        resnet_pre_norm (bool):\n            pre norm in resnet, defaults to True.\n        attn_num_head_channels (int):\n            attention head channels, defaults to 1.\n        attention_type (str):\n            attention type ,defaults to 'default'.\n        output_scale_factor (float):\n            output scale factor, defaults to 1.0.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        temb_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'silu',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        attn_num_head_channels=1,\n        attention_type='default',\n        output_scale_factor=1.0,\n    ):\n        super().__init__()\n\n        self.attention_type = attention_type\n        resnet_groups = resnet_groups if resnet_groups is not None else min(\n            in_channels // 4, 32)  # noqa\n\n        # there is always at least one resnet\n        resnets = [\n            ResnetBlock2D(\n                in_channels=in_channels,\n                out_channels=in_channels,\n                temb_channels=temb_channels,\n                eps=resnet_eps,\n                groups=resnet_groups,\n                dropout=dropout,\n                time_embedding_norm=resnet_time_scale_shift,\n                non_linearity=resnet_act_fn,\n                output_scale_factor=output_scale_factor,\n                pre_norm=resnet_pre_norm,\n            )\n        ]\n        attentions = []\n\n        for _ in range(num_layers):\n            attentions.append(\n                AttentionBlock(\n                    in_channels,\n                    num_head_channels=attn_num_head_channels,\n                    rescale_output_factor=output_scale_factor,\n                    eps=resnet_eps,\n                    norm_num_groups=resnet_groups,\n                ))\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=in_channels,\n                    out_channels=in_channels,\n                    temb_channels=temb_channels,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.attentions = nn.ModuleList(attentions)\n        self.resnets = nn.ModuleList(resnets)\n\n    def forward(self, hidden_states, temb=None, encoder_states=None):\n        \"\"\"forward with hidden states, time embedding and encoder states.\"\"\"\n        hidden_states = self.resnets[0](hidden_states, temb)\n        for attn, resnet in zip(self.attentions, self.resnets[1:]):\n            if self.attention_type == 'default':\n                hidden_states = attn(hidden_states)\n            else:\n                hidden_states = attn(hidden_states, encoder_states)\n            hidden_states = resnet(hidden_states, temb)\n\n        return hidden_states\n\n\nclass DownEncoderBlock2D(nn.Module):\n    \"\"\"Down encoder block in vae.\n\n    Args:\n        in_channels (int): input channels.\n        out_channels (int): output channels.\n        dropout (float): dropout rate, defaults to 0.0.\n        num_layers (int): layer nums, defaults to 1.\n        resnet_eps (float): resnet eps, defaults to 1e-6.\n        resnet_time_scale_shift (str):\n            time scale shift in resnet, defaults to 'default'.\n        resnet_act_fn (str):\n            act function in resnet, defaults to 'silu'.\n        resnet_groups (int):\n            group num in resnet, defaults to 32.\n        resnet_pre_norm (bool):\n            whether to pre norm in resnet, defaults to True.\n        output_scale_factor (float):\n            output scale factor, defaults to 1.0.\n        add_downsample (bool):\n            whether to add downsample, defaults to True,\n        downsample_padding (int):\n            downsample padding num, defaults to 1.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'silu',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_downsample=True,\n        downsample_padding=1,\n    ):\n        super().__init__()\n        resnets = []\n\n        for i in range(num_layers):\n            in_channels = in_channels if i == 0 else out_channels\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=in_channels,\n                    out_channels=out_channels,\n                    temb_channels=None,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_downsample:\n            self.downsamplers = nn.ModuleList([\n                Downsample2D(\n                    out_channels,\n                    use_conv=True,\n                    out_channels=out_channels,\n                    padding=downsample_padding,\n                    name='op')\n            ])\n        else:\n            self.downsamplers = None\n\n    def forward(self, hidden_states):\n        \"\"\"forward with hidden states.\"\"\"\n        for resnet in self.resnets:\n            hidden_states = resnet(hidden_states, temb=None)\n\n        if self.downsamplers is not None:\n            for downsampler in self.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n        return hidden_states\n\n\nclass Encoder(nn.Module):\n    \"\"\"construct encoder in vae.\"\"\"\n\n    def __init__(\n        self,\n        in_channels=3,\n        out_channels=3,\n        down_block_types=('DownEncoderBlock2D', ),\n        block_out_channels=(64, ),\n        layers_per_block=2,\n        norm_num_groups=32,\n        act_fn='silu',\n        double_z=True,\n    ):\n        super().__init__()\n        self.layers_per_block = layers_per_block\n\n        self.conv_in = torch.nn.Conv2d(\n            in_channels,\n            block_out_channels[0],\n            kernel_size=3,\n            stride=1,\n            padding=1)\n\n        self.mid_block = None\n        self.down_blocks = nn.ModuleList([])\n\n        # down\n        output_channel = block_out_channels[0]\n        for i, down_block_type in enumerate(down_block_types):\n            input_channel = output_channel\n            output_channel = block_out_channels[i]\n            is_final_block = i == len(block_out_channels) - 1\n\n            down_block = DownEncoderBlock2D(\n                num_layers=self.layers_per_block,\n                in_channels=input_channel,\n                out_channels=output_channel,\n                add_downsample=not is_final_block,\n                resnet_eps=1e-6,\n                resnet_act_fn=act_fn,\n                resnet_groups=norm_num_groups,\n                downsample_padding=0,\n            )\n            self.down_blocks.append(down_block)\n\n        # mid\n        self.mid_block = UNetMidBlock2D(\n            in_channels=block_out_channels[-1],\n            resnet_eps=1e-6,\n            resnet_act_fn=act_fn,\n            output_scale_factor=1,\n            resnet_time_scale_shift='default',\n            attn_num_head_channels=None,\n            resnet_groups=norm_num_groups,\n            temb_channels=None,\n        )\n\n        # out\n        self.conv_norm_out = nn.GroupNorm(\n            num_channels=block_out_channels[-1],\n            num_groups=norm_num_groups,\n            eps=1e-6)\n        if digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n            self.conv_act = nn.SiLU()\n        else:\n            mmengine.print_log('\\'SiLU\\' is not supported for '\n                               f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                               'Use ReLu instead but result maybe wrong')\n            self.conv_act = nn.ReLU()\n\n        conv_out_channels = 2 * out_channels if double_z else out_channels\n        self.conv_out = nn.Conv2d(\n            block_out_channels[-1], conv_out_channels, 3, padding=1)\n\n    def forward(self, x):\n        \"\"\"encoder forward.\"\"\"\n        sample = x\n        sample = self.conv_in(sample)\n\n        # down\n        for down_block in self.down_blocks:\n            sample = down_block(sample)\n\n        # middle\n        sample = self.mid_block(sample)\n\n        # post-process\n        sample = self.conv_norm_out(sample)\n        sample = self.conv_act(sample)\n        sample = self.conv_out(sample)\n\n        return sample\n\n\nclass UpDecoderBlock2D(nn.Module):\n    \"\"\"construct up decoder block.\"\"\"\n\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        dropout: float = 0.0,\n        num_layers: int = 1,\n        resnet_eps: float = 1e-6,\n        resnet_time_scale_shift: str = 'default',\n        resnet_act_fn: str = 'swish',\n        resnet_groups: int = 32,\n        resnet_pre_norm: bool = True,\n        output_scale_factor=1.0,\n        add_upsample=True,\n    ):\n        super().__init__()\n        resnets = []\n\n        for i in range(num_layers):\n            input_channels = in_channels if i == 0 else out_channels\n\n            resnets.append(\n                ResnetBlock2D(\n                    in_channels=input_channels,\n                    out_channels=out_channels,\n                    temb_channels=None,\n                    eps=resnet_eps,\n                    groups=resnet_groups,\n                    dropout=dropout,\n                    time_embedding_norm=resnet_time_scale_shift,\n                    non_linearity=resnet_act_fn,\n                    output_scale_factor=output_scale_factor,\n                    pre_norm=resnet_pre_norm,\n                ))\n\n        self.resnets = nn.ModuleList(resnets)\n\n        if add_upsample:\n            self.upsamplers = nn.ModuleList([\n                Upsample2D(\n                    out_channels, use_conv=True, out_channels=out_channels)\n            ])\n        else:\n            self.upsamplers = None\n\n    def forward(self, hidden_states):\n        \"\"\"forward hidden states.\"\"\"\n        for resnet in self.resnets:\n            hidden_states = resnet(hidden_states, temb=None)\n\n        if self.upsamplers is not None:\n            for upsampler in self.upsamplers:\n                hidden_states = upsampler(hidden_states)\n\n        return hidden_states\n\n\nclass Decoder(nn.Module):\n    \"\"\"construct decoder in vae.\"\"\"\n\n    def __init__(\n        self,\n        in_channels=3,\n        out_channels=3,\n        up_block_types=('UpDecoderBlock2D', ),\n        block_out_channels=(64, ),\n        layers_per_block=2,\n        norm_num_groups=32,\n        act_fn='silu',\n    ):\n        super().__init__()\n        self.layers_per_block = layers_per_block\n\n        self.conv_in = nn.Conv2d(\n            in_channels,\n            block_out_channels[-1],\n            kernel_size=3,\n            stride=1,\n            padding=1)\n\n        self.mid_block = None\n        self.up_blocks = nn.ModuleList([])\n\n        # mid\n        self.mid_block = UNetMidBlock2D(\n            in_channels=block_out_channels[-1],\n            resnet_eps=1e-6,\n            resnet_act_fn=act_fn,\n            output_scale_factor=1,\n            resnet_time_scale_shift='default',\n            attn_num_head_channels=None,\n            resnet_groups=norm_num_groups,\n            temb_channels=None,\n        )\n\n        # up\n        reversed_block_out_channels = list(reversed(block_out_channels))\n        output_channel = reversed_block_out_channels[0]\n        for i, up_block_type in enumerate(up_block_types):\n            prev_output_channel = output_channel\n            output_channel = reversed_block_out_channels[i]\n\n            is_final_block = i == len(block_out_channels) - 1\n\n            up_block = UpDecoderBlock2D(\n                num_layers=self.layers_per_block + 1,\n                in_channels=prev_output_channel,\n                out_channels=output_channel,\n                add_upsample=not is_final_block,\n                resnet_eps=1e-6,\n                resnet_act_fn=act_fn,\n                resnet_groups=norm_num_groups,\n            )\n            self.up_blocks.append(up_block)\n            prev_output_channel = output_channel\n\n        # out\n        self.conv_norm_out = nn.GroupNorm(\n            num_channels=block_out_channels[0],\n            num_groups=norm_num_groups,\n            eps=1e-6)\n        if digit_version(TORCH_VERSION) > digit_version('1.6.0'):\n            self.conv_act = nn.SiLU()\n        else:\n            mmengine.print_log('\\'SiLU\\' is not supported for '\n                               f'torch < 1.6.0, found \\'{torch.version}\\'.'\n                               'Use ReLu instead but result maybe wrong')\n            self.conv_act = nn.ReLU()\n        self.conv_out = nn.Conv2d(\n            block_out_channels[0], out_channels, 3, padding=1)\n\n    def forward(self, z):\n        \"\"\"decoder forward.\"\"\"\n        sample = z\n        sample = self.conv_in(sample)\n\n        # middle\n        sample = self.mid_block(sample)\n\n        # up\n        for up_block in self.up_blocks:\n            sample = up_block(sample)\n\n        # post-process\n        sample = self.conv_norm_out(sample)\n        sample = self.conv_act(sample)\n        sample = self.conv_out(sample)\n\n        return sample\n\n\nclass DiagonalGaussianDistribution(object):\n    \"\"\"Calculate diagonal gaussian distribution.\"\"\"\n\n    def __init__(self, parameters, deterministic=False):\n        self.parameters = parameters\n        self.mean, self.logvar = torch.chunk(parameters, 2, dim=1)\n        self.logvar = torch.clamp(self.logvar, -30.0, 20.0)\n        self.deterministic = deterministic\n        self.std = torch.exp(0.5 * self.logvar)\n        self.var = torch.exp(self.logvar)\n        if self.deterministic:\n            self.var = self.std = torch.zeros_like(\n                self.mean,\n                device=self.parameters.device,\n                dtype=self.parameters.dtype)\n\n    def sample(self, generator: Optional[torch.Generator] = None) \\\n            -> torch.FloatTensor:\n        \"\"\"sample function.\"\"\"\n        device = self.parameters.device\n        sample_device = device\n        sample = torch.randn(\n            self.mean.shape, generator=generator, device=sample_device)\n        # make sure sample is on the same device\n        # as the parameters and has same dtype\n        sample = sample.to(device=device, dtype=self.parameters.dtype)\n        x = self.mean + self.std * sample\n        return x\n\n    def kl(self, other=None):\n        \"\"\"calculate kl divergence.\"\"\"\n        if self.deterministic:\n            return torch.Tensor([0.0])\n        else:\n            if other is None:\n                return 0.5 * torch.sum(\n                    torch.pow(self.mean, 2) + self.var - 1.0 - self.logvar,\n                    dim=[1, 2, 3])\n            else:\n                return 0.5 * torch.sum(\n                    torch.pow(self.mean - other.mean, 2) / other.var +\n                    self.var / other.var - 1.0 - self.logvar + other.logvar,\n                    dim=[1, 2, 3],\n                )\n\n    def nll(self, sample, dims=[1, 2, 3]):\n        \"\"\"calculate negative log likelihood.\"\"\"\n        if self.deterministic:\n            return torch.Tensor([0.0])\n        logtwopi = np.log(2.0 * np.pi)\n        return 0.5 * torch.sum(\n            logtwopi + self.logvar +\n            torch.pow(sample - self.mean, 2) / self.var,\n            dim=dims)  # noqa\n\n    def mode(self):\n        \"\"\"return self.mean.\"\"\"\n        return self.mean\n\n\n@MODELS.register_module('EditAutoencoderKL')\nclass AutoencoderKL(nn.Module):\n    r\"\"\"Variational Autoencoder (VAE) model with KL loss\n    from the paper Auto-Encoding Variational Bayes by Diederik P. Kingma\n    and Max Welling.\n\n    Args:\n        in_channels (int, *optional*, defaults to 3):\n            Number of channels in the input image.\n        out_channels (int,  *optional*, defaults to 3):\n            Number of channels in the output.\n        down_block_types (`Tuple[str]`, *optional*, defaults to :\n            obj:`(\"DownEncoderBlock2D\",)`):\n            Tuple of downsample block types.\n        up_block_types (`Tuple[str]`, *optional*, defaults to :\n            obj:`(\"UpDecoderBlock2D\",)`): Tuple of upsample block types.\n        block_out_channels (`Tuple[int]`, *optional*, defaults to :\n            obj:`(64,)`): Tuple of block output channels.\n        act_fn (`str`, *optional*, defaults to `\"silu\"`):\n            The activation function to use.\n        latent_channels (`int`, *optional*, defaults to `4`):\n            Number of channels in the latent space.\n        sample_size (`int`, *optional*, defaults to `32`):\n            sample size is now not supported.\n    \"\"\"\n\n    def __init__(\n        self,\n        in_channels: int = 3,\n        out_channels: int = 3,\n        down_block_types: Tuple[str] = ('DownEncoderBlock2D', ),\n        up_block_types: Tuple[str] = ('UpDecoderBlock2D', ),\n        block_out_channels: Tuple[int] = (64, ),\n        layers_per_block: int = 1,\n        act_fn: str = 'silu',\n        latent_channels: int = 4,\n        norm_num_groups: int = 32,\n        sample_size: int = 32,\n    ):\n        super().__init__()\n\n        self.block_out_channels = block_out_channels\n        self.latent_channels = latent_channels\n\n        # pass init params to Encoder\n        self.encoder = Encoder(\n            in_channels=in_channels,\n            out_channels=latent_channels,\n            down_block_types=down_block_types,\n            block_out_channels=block_out_channels,\n            layers_per_block=layers_per_block,\n            act_fn=act_fn,\n            norm_num_groups=norm_num_groups,\n            double_z=True,\n        )\n\n        # pass init params to Decoder\n        self.decoder = Decoder(\n            in_channels=latent_channels,\n            out_channels=out_channels,\n            up_block_types=up_block_types,\n            block_out_channels=block_out_channels,\n            layers_per_block=layers_per_block,\n            norm_num_groups=norm_num_groups,\n            act_fn=act_fn,\n        )\n\n        self.quant_conv = torch.nn.Conv2d(2 * latent_channels,\n                                          2 * latent_channels, 1)\n        self.post_quant_conv = torch.nn.Conv2d(latent_channels,\n                                               latent_channels, 1)\n\n    @property\n    def dtype(self):\n        \"\"\"The data type of the parameters of VAE.\"\"\"\n        return next(self.parameters()).dtype\n\n    def encode(self, x: torch.FloatTensor, return_dict: bool = True) -> Dict:\n        \"\"\"encode input.\"\"\"\n        h = self.encoder(x)\n        moments = self.quant_conv(h)\n        posterior = DiagonalGaussianDistribution(moments)\n\n        if not return_dict:\n            return (posterior, )\n\n        return Dict(latent_dist=posterior)\n\n    def decode(self, z: torch.FloatTensor, return_dict: bool = True) \\\n            -> Union[Dict, torch.FloatTensor]:\n        \"\"\"decode z.\"\"\"\n        z = self.post_quant_conv(z)\n        dec = self.decoder(z)\n\n        if not return_dict:\n            return (dec, )\n\n        return Dict(sample=dec)\n\n    def forward(\n        self,\n        sample: torch.FloatTensor,\n        sample_posterior: bool = False,\n        return_dict: bool = True,\n        generator: Optional[torch.Generator] = None,\n    ) -> Union[Dict, torch.FloatTensor]:\n        \"\"\"\n        Args:\n            sample (torch.FloatTensor): Input sample.\n            sample_posterior (bool):\n                Whether to sample from the posterior.\n                defaults to `False`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a [`Dict`] instead of a plain tuple.\n        Returns:\n            Dict(sample=dec): decode results.\n        \"\"\"\n        x = sample\n        posterior = self.encode(x).latent_dist\n        if sample_posterior:\n            z = posterior.sample(generator=generator)\n        else:\n            z = posterior.mode()\n        dec = self.decode(z).sample\n\n        if not return_dict:\n            return (dec, )\n\n        return Dict(sample=dec)\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion_xl/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .stable_diffusion_xl import StableDiffusionXL\n\n__all__ = ['StableDiffusionXL']\n"
  },
  {
    "path": "mmagic/models/editors/stable_diffusion_xl/stable_diffusion_xl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport inspect\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import print_log\nfrom mmengine.logging import MMLogger\nfrom mmengine.model import BaseModel\nfrom mmengine.optim import OptimWrapperDict\nfrom mmengine.runner import set_random_seed\nfrom PIL import Image\nfrom tqdm.auto import tqdm\n\nfrom mmagic.models.archs import TokenizerWrapper, set_lora\nfrom mmagic.models.utils import build_module, set_tomesd, set_xformers\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\n\nlogger = MMLogger.get_current_instance()\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module('sdxl')\n@MODELS.register_module()\nclass StableDiffusionXL(BaseModel):\n    \"\"\"Class for Stable Diffusion XL. Refers to https://github.com/Stability-\n    AI.\n\n    /generative-models and https://github.com/huggingface/diffusers/blob/main/\n    src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py\n\n    Args:\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        text_encoder_one (Union[dict, nn.Module]): The config or module for\n            text encoder.\n        tokenizer_one (str): The **name** for CLIP tokenizer.\n        text_encoder_two (Union[dict, nn.Module]): The config or module for\n            text encoder.\n        tokenizer_two (str): The **name** for CLIP tokenizer.\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        dtype (str, optional): The dtype for the model This argument will not\n            work when dtype is defined for submodels. Defaults to None.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in\n            https://www.crosslabs.org/blog/diffusion-with-offset-noise\n            Defaults to 0.\n        tomesd_cfg (dict, optional): The config for TOMESD. Please refers to\n            https://github.com/dbolya/tomesd and\n            https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/utils/tome_utils.py for detail.  # noqa\n            Defaults to None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n        lora_config (dict, optional): The config for LoRA finetuning. Defaults\n            to None.\n        val_prompts (Union[str, List[str]], optional): The prompts for\n            validation. Defaults to None.\n        finetune_text_encoder (bool, optional): Whether to fine-tune text\n            encoder. Defaults to False.\n        force_zeros_for_empty_prompt (bool): Whether the negative prompt\n            embeddings shall be forced to always be set to 0.\n            Defaults to True.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n    \"\"\"\n\n    def __init__(self,\n                 vae: ModelType,\n                 text_encoder_one: ModelType,\n                 tokenizer_one: str,\n                 text_encoder_two: ModelType,\n                 tokenizer_two: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 dtype: Optional[str] = None,\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 lora_config: Optional[dict] = None,\n                 val_prompts: Union[str, List[str]] = None,\n                 finetune_text_encoder: bool = False,\n                 force_zeros_for_empty_prompt: bool = True,\n                 init_cfg: Optional[dict] = None):\n\n        # TODO: support `from_pretrained` for this class\n        super().__init__(data_preprocessor, init_cfg)\n\n        default_args = dict()\n        if dtype is not None:\n            default_args['dtype'] = dtype\n\n        self.dtype = torch.float32\n        if dtype in ['float16', 'fp16', 'half']:\n            self.dtype = torch.float16\n        elif dtype == 'bf16':\n            self.dtype = torch.bfloat16\n        else:\n            assert dtype in [\n                'fp32', None\n            ], ('dtype must be one of \\'fp32\\', \\'fp16\\', \\'bf16\\' or None.')\n\n        self.vae = build_module(vae, MODELS, default_args=default_args)\n        self.unet = build_module(unet, MODELS)  # NOTE: initialize unet as fp32\n        self._unet_ori_dtype = next(self.unet.parameters()).dtype\n        print_log(f'Set UNet dtype to \\'{self._unet_ori_dtype}\\'.', 'current')\n        self.scheduler = build_module(scheduler, DIFFUSION_SCHEDULERS)\n        if test_scheduler is None:\n            self.test_scheduler = deepcopy(self.scheduler)\n        else:\n            self.test_scheduler = build_module(test_scheduler,\n                                               DIFFUSION_SCHEDULERS)\n        self.text_encoder_one = build_module(text_encoder_one, MODELS)\n        if not isinstance(tokenizer_one, str):\n            self.tokenizer_one = tokenizer_one\n        else:\n            # NOTE: here we assume tokenizer is an string\n            self.tokenizer_one = TokenizerWrapper(\n                tokenizer_one, subfolder='tokenizer')\n\n        self.text_encoder_two = build_module(text_encoder_two, MODELS)\n        if not isinstance(tokenizer_two, str):\n            self.tokenizer_two = tokenizer_two\n        else:\n            # NOTE: here we assume tokenizer is an string\n            self.tokenizer_two = TokenizerWrapper(\n                tokenizer_two, subfolder='tokenizer_2')\n\n        self.unet_sample_size = self.unet.sample_size\n        self.vae_scale_factor = 2**(len(self.vae.block_out_channels) - 1)\n\n        self.enable_noise_offset = noise_offset_weight > 0\n        self.noise_offset_weight = noise_offset_weight\n\n        self.finetune_text_encoder = finetune_text_encoder\n        self.val_prompts = val_prompts\n        self.lora_config = deepcopy(lora_config)\n        self.force_zeros_for_empty_prompt = force_zeros_for_empty_prompt\n\n        self.prepare_model()\n        self.set_lora()\n\n        self.enable_xformers = enable_xformers\n        self.set_xformers()\n\n        self.tomesd_cfg = tomesd_cfg\n        self.set_tomesd()\n\n    def prepare_model(self):\n        \"\"\"Prepare model for training.\n\n        Move model to target dtype and disable gradient for some models.\n        \"\"\"\n        self.vae.requires_grad_(False)\n        print_log('Set VAE untrainable.', 'current')\n        self.vae.to(self.dtype)\n        print_log(f'Move VAE to {self.dtype}.', 'current')\n        if not self.finetune_text_encoder or self.lora_config:\n            self.text_encoder_one.requires_grad_(False)\n            self.text_encoder_two.requires_grad_(False)\n            print_log('Set Text Encoder untrainable.', 'current')\n            self.text_encoder_one.to(self.dtype)\n            self.text_encoder_two.to(self.dtype)\n            print_log(f'Move Text Encoder to {self.dtype}.', 'current')\n        if self.lora_config:\n            self.unet.requires_grad_(False)\n            print_log('Set Unet untrainable.', 'current')\n\n    def set_lora(self):\n        \"\"\"Set LORA for model.\"\"\"\n        if self.lora_config:\n            set_lora(self.unet, self.lora_config)\n\n    def set_xformers(self, module: Optional[nn.Module] = None) -> nn.Module:\n        \"\"\"Set xformers for the model.\n\n        Returns:\n            nn.Module: The model with xformers.\n        \"\"\"\n        if self.enable_xformers:\n            if module is None:\n                set_xformers(self)\n            else:\n                set_xformers(module)\n\n    def set_tomesd(self) -> nn.Module:\n        \"\"\"Set ToMe for the stable diffusion model.\n\n        Returns:\n            nn.Module: The model with ToMe.\n        \"\"\"\n        if self.tomesd_cfg is not None:\n            set_tomesd(self, **self.tomesd_cfg)\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    def train(self, mode: bool = True):\n        \"\"\"Set train/eval mode.\n\n        Args:\n            mode (bool, optional): Whether set train mode. Defaults to True.\n        \"\"\"\n        if mode:\n            if next(self.unet.parameters()).dtype != self._unet_ori_dtype:\n                print_log(\n                    f'Set UNet dtype to \\'{self._unet_ori_dtype}\\' '\n                    'in the train mode.', 'current')\n            self.unet.to(self._unet_ori_dtype)\n        else:\n            self.unet.to(self.dtype)\n            print_log(f'Set UNet dtype to \\'{self.dtype}\\' in the eval mode.',\n                      'current')\n        return super().train(mode)\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              prompt_2: Optional[Union[str, List[str]]] = None,\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              denoising_end: Optional[float] = None,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              negative_prompt_2: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[torch.Generator] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              show_progress: bool = True,\n              seed: int = 1,\n              original_size: Optional[Tuple[int, int]] = None,\n              crops_coords_top_left: Tuple[int, int] = (0, 0),\n              target_size: Optional[Tuple[int, int]] = None,\n              negative_original_size: Optional[Tuple[int, int]] = None,\n              negative_crops_coords_top_left: Tuple[int, int] = (0, 0),\n              negative_target_size: Optional[Tuple[int, int]] = None,\n              return_type='image'):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`):\n                The prompt or prompts to guide the image generation.\n            prompt2 (`str` or `List[str]`, *optional*):\n                The prompt or prompts to be sent to the `tokenizer_two` and\n                `text_encoder_two`. If not defined, `prompt` is used in both\n                text-encoders. Defaults to None.\n            height (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image.\n            width (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps.\n                More denoising steps usually lead to a higher\n                quality image at the expense of slower inference.\n            denoising_end (`float`, *optional*):\n                When specified, determines the fraction (between 0.0 and 1.0)\n                of the total denoising process to be completed before it is\n                intentionally prematurely terminated. As a result, the returned\n                sample will still retain a substantial amount of noise as\n                determined by the discrete timesteps selected by the scheduler.\n                The denoising_end parameter should ideally be utilized when\n                this pipeline forms a part of a \"Mixture of Denoisers\"\n                multi-pipeline setup, as elaborated in\n                [**Refining the Image Output**](\n                https://huggingface.co/docs/diffusers/api/pipelines/\n                stable_diffusion/stable_diffusion_xl#refining-the-image-output)\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in\n                [Classifier-Free Diffusion Guidance]\n                (https://arxiv.org/abs/2207.12598).\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                Ignored when not using guidance (i.e., ignored\n                if `guidance_scale` is less than `1`).\n            negative_prompt_2 (`str` or `List[str]`, *optional*)):\n                The `negative_prompt` to be sent to the `tokenizer_two` and\n                `text_encoder_two`. If not defined, `negative_prompt` is used\n                in both text-encoders. Defaults to None.\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator`, *optional*):\n                A [torch generator] to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents,\n                sampled from a Gaussian distribution,\n                to be used as inputs for image generation.\n                Can be used to tweak the same generation\n                with different prompts.\n                If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n            show_progress (bool): Whether to show progress.\n                Defaults to False.\n            seed (int): Seed to be used. Defaults to 1.\n            original_size (`Tuple[int]`, *optional*):\n                If `original_size` is not the same as `target_size` the image\n                will appear to be down- or upsampled. If `original_size` is\n                `(width, height)` if not specified.\n                Defaults to None.\n            crops_coords_top_left (`Tuple[int]`, *optional*):\n                `crops_coords_top_left` can be used to generate an image that\n                appears to be \"cropped\" from the position. Favorable,\n                well-centered images are usually achieved by setting\n                `crops_coords_top_left` to (0, 0).\n                Defaults to (0, 0).\n            target_size (`Tuple[int]`, *optional*):\n                For most cases, `target_size` should be set to the desired\n                height and width of the generated image. If not specified it\n                will be `(width, height)`. Defaults to None.\n            negative_original_size (`Tuple[int]`, *optional*):\n                To negatively condition the generation process based on a\n                specific image resolution. For more information, refer to this\n                issue thread:\n                https://github.com/huggingface/diffusers/issues/4208.\n                Defaults to None.\n            negative_crops_coords_top_left (`Tuple[int]`, *optional*):\n                To negatively condition the generation process based on a\n                specific crop coordinates. For more information, refer to this\n                issue thread:\n                https://github.com/huggingface/diffusers/issues/4208.\n                Defaults to (0, 0).\n            negative_target_size (`Tuple[int]`, *optional*):\n                To negatively condition the generation process based on a\n                target image resolution. It should be as same as the\n                `target_size` for most cases. For more information,\n                refer to this issue thread:\n                https://github.com/huggingface/diffusers/issues/4208.\n                Defaults to None.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n        set_random_seed(seed=seed)\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n\n        original_size = original_size or (height, width)\n        target_size = target_size or (height, width)\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n\n        img_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n        latent_dtype = next(self.unet.parameters()).dtype\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        (\n            prompt_embeds,\n            negative_prompt_embeds,\n            pooled_prompt_embeds,\n            negative_pooled_prompt_embeds,\n        ) = self._encode_prompt(prompt, prompt_2, device,\n                                num_images_per_prompt,\n                                do_classifier_free_guidance, negative_prompt,\n                                negative_prompt_2)\n\n        # 4. Prepare timesteps\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare latent variables\n        if hasattr(self.unet, 'module'):\n            num_channels_latents = self.unet.module.in_channels\n        else:\n            num_channels_latents = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        # 6. Prepare extra step kwargs.\n        # TODO: Logic should ideally just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Prepare added time ids & embeddings\n        add_text_embeds = pooled_prompt_embeds\n        add_time_ids = self._get_add_time_ids(\n            original_size,\n            crops_coords_top_left,\n            target_size,\n            dtype=prompt_embeds.dtype)\n        if (negative_original_size is not None) and (negative_target_size\n                                                     is not None):\n            negative_add_time_ids = self._get_add_time_ids(\n                negative_original_size,\n                negative_crops_coords_top_left,\n                negative_target_size,\n                dtype=prompt_embeds.dtype,\n            )\n        else:\n            negative_add_time_ids = add_time_ids\n\n        if do_classifier_free_guidance:\n            prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds],\n                                      dim=0)\n            add_text_embeds = torch.cat(\n                [negative_pooled_prompt_embeds, add_text_embeds], dim=0)\n            add_time_ids = torch.cat([negative_add_time_ids, add_time_ids],\n                                     dim=0)\n\n        prompt_embeds = prompt_embeds.to(device)\n        add_text_embeds = add_text_embeds.to(device)\n        add_time_ids = add_time_ids.to(device).repeat(\n            batch_size * num_images_per_prompt, 1)\n\n        # 9 Apply denoising_end\n        if denoising_end is not None and isinstance(\n                denoising_end,\n                float) and denoising_end > 0 and denoising_end < 1:\n            discrete_timestep_cutoff = int(\n                round(self.scheduler.config.num_train_timesteps -\n                      (denoising_end *\n                       self.scheduler.config.num_train_timesteps)))\n            num_inference_steps = len(\n                list(\n                    filter(lambda ts: ts >= discrete_timestep_cutoff,\n                           timesteps)))\n            timesteps = timesteps[:num_inference_steps]\n\n        # 10. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            # expand the latents if we are doing classifier free guidance\n            latent_model_input = torch.cat(\n                [latents] * 2) if do_classifier_free_guidance else latents\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latent_model_input, t)\n\n            latent_model_input = latent_model_input.to(latent_dtype)\n            prompt_embeds = prompt_embeds.to(latent_dtype)\n            # predict the noise residual\n            added_cond_kwargs = {\n                'text_embeds': add_text_embeds,\n                'time_ids': add_time_ids\n            }\n            noise_pred = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=prompt_embeds,\n                added_cond_kwargs=added_cond_kwargs,\n                return_dict=False,\n            )[0]\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n            # compute the previous noisy sample x_t -> x_t-1\n            latents = self.test_scheduler.step(\n                noise_pred, t, latents, **extra_step_kwargs)['prev_sample']\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image}\n\n    def _get_add_time_ids(self, original_size: Optional[Tuple[int, int]],\n                          crops_coords_top_left: Tuple[int, int],\n                          target_size: Optional[Tuple[int, int]], dtype):\n        \"\"\"Get `add_time_ids`.\n\n        Args:\n            original_size (`Tuple[int]`, *optional*):\n                If `original_size` is not the same as `target_size` the image\n                will appear to be down- or upsampled. If `original_size` is\n                `(width, height)` if not specified.\n                Defaults to None.\n            crops_coords_top_left (`Tuple[int]`, *optional*):\n                `crops_coords_top_left` can be used to generate an image that\n                appears to be \"cropped\" from the position. Favorable,\n                well-centered images are usually achieved by setting\n                `crops_coords_top_left` to (0, 0).\n                Defaults to (0, 0).\n            target_size (`Tuple[int]`, *optional*):\n                For most cases, `target_size` should be set to the desired\n                height and width of the generated image. If not specified it\n                will be `(width, height)`. Defaults to None.\n            dtype (str, optional): The dtype for the embeddings.\n\n        Returns:\n            add_time_ids (torch.Tensor): time ids for time embeddings layer.\n        \"\"\"\n        add_time_ids = list(original_size + crops_coords_top_left +\n                            target_size)\n\n        passed_add_embed_dim = (\n            self.unet.config.addition_time_embed_dim * len(add_time_ids) +\n            self.text_encoder_two.config.projection_dim)\n        expected_add_embed_dim = self.unet.add_embedding.linear_1.in_features\n\n        if expected_add_embed_dim != passed_add_embed_dim:\n            raise ValueError(\n                'Model expects an added time embedding vector of length '\n                f'{expected_add_embed_dim}, but a vector of '\n                f'{passed_add_embed_dim} was created. The model has an '\n                'incorrect config. Please check '\n                '`unet.config.time_embedding_type` and '\n                '`text_encoder_2.config.projection_dim`.')\n\n        add_time_ids = torch.tensor([add_time_ids], dtype=dtype)\n        return add_time_ids\n\n    def output_to_pil(self, image) -> List[Image.Image]:\n        \"\"\"Convert output tensor to PIL image. Output tensor will be de-normed\n        to [0, 255] by `DataPreprocessor.destruct`. Due to no `data_samples` is\n        passed, color order conversion will not be performed.\n\n        Args:\n            image (torch.Tensor): The output tensor of the decoder.\n\n        Returns:\n            List[Image.Image]: The list of processed PIL images.\n        \"\"\"\n        image = self.data_preprocessor.destruct(image)\n        image = image.permute(0, 2, 3, 1).to(torch.uint8).cpu().numpy()\n        image = [Image.fromarray(img) for img in image]\n        return image\n\n    def _encode_prompt(self, prompt, prompt_2, device, num_images_per_prompt,\n                       do_classifier_free_guidance, negative_prompt,\n                       negative_prompt_2):\n        \"\"\"Encodes the prompt into text encoder hidden states.\n\n        Args:\n            prompt (str or list(int)): prompt to be encoded.\n            prompt_2 (str or list(int)): prompt to be encoded. Send to the\n                `tokenizer_two` and `text_encoder_two`. If not defined,\n                `prompt` is used in both text-encoders.\n            device: (torch.device): torch device.\n            num_images_per_prompt (int): number of images that should be\n                generated per prompt.\n            do_classifier_free_guidance (`bool`): whether to use classifier\n                free guidance or not.\n            negative_prompt (str or List[str]): The prompt or prompts not\n                to guide the image generation. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is less than `1`).\n            negative_prompt_2 (str or List[str]): The prompt or prompts not\n                to guide the image generation. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is less than `1`).\n                Send to `tokenizer_two` and `text_encoder_two`. If not defined,\n                `negative_prompt` is used in both text-encoders\n\n        Returns:\n            text_embeddings (torch.Tensor): text embeddings generated by\n                clip text encoder.\n        \"\"\"\n        batch_size = len(prompt) if isinstance(prompt, list) else 1\n\n        prompt_2 = prompt_2 or prompt\n        tokenizers = [self.tokenizer_one, self.tokenizer_two]\n        text_encoders = [self.text_encoder_one, self.text_encoder_two]\n        prompts = [prompt, prompt_2]\n        prompt_embeds_list = []\n        for tokenizer, text_encoder, prompt in zip(tokenizers, text_encoders,\n                                                   prompts):\n            text_inputs = tokenizer(\n                prompt,\n                padding='max_length',\n                max_length=tokenizer.model_max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            text_input_ids = text_inputs.input_ids\n            untruncated_ids = tokenizer(\n                prompt, padding='max_length', return_tensors='pt').input_ids\n\n            if not torch.equal(text_input_ids, untruncated_ids):\n                removed_text = tokenizer.batch_decode(\n                    untruncated_ids[:, tokenizer.model_max_length - 1:-1])\n                logger.warning(\n                    'The following part of your input was truncated because '\n                    ' CLIP can only handle sequences up to'\n                    f' {tokenizer.model_max_length} tokens: {removed_text}')\n\n            text_encoder = text_encoder.module if hasattr(\n                text_encoder, 'module') else text_encoder\n            text_embeddings = text_encoder(\n                text_input_ids.to(device),\n                output_hidden_states=True,\n            )\n            pooled_prompt_embeds = text_embeddings.pooler_output\n            text_embeddings = text_embeddings.hidden_states[-2]\n\n            prompt_embeds_list.append(text_embeddings)\n\n        text_embeddings = torch.concat(prompt_embeds_list, dim=-1)\n\n        # duplicate text embeddings for each generation per prompt,\n        bs_embed, seq_len, _ = text_embeddings.shape\n        text_embeddings = text_embeddings.repeat(1, num_images_per_prompt, 1)\n        text_embeddings = text_embeddings.view(\n            bs_embed * num_images_per_prompt, seq_len, -1)\n\n        # get unconditional embeddings for classifier free guidance\n        if do_classifier_free_guidance and self.force_zeros_for_empty_prompt:\n            negative_prompt_embeds = torch.zeros_like(text_embeddings)\n            negative_pooled_prompt_embeds = torch.zeros_like(\n                pooled_prompt_embeds)\n        elif do_classifier_free_guidance:\n            negative_prompt = negative_prompt or ''\n            negative_prompt_2 = negative_prompt_2 or negative_prompt\n\n            uncond_tokens: List[str]\n            if prompt is not None and type(prompt) is not type(\n                    negative_prompt):\n                raise TypeError(\n                    '`negative_prompt` should be the same type to `prompt`, '\n                    f'but got {type(negative_prompt)} != {type(prompt)}.')\n            elif isinstance(negative_prompt, str):\n                uncond_tokens = [negative_prompt, negative_prompt_2]\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f'`negative_prompt`: {negative_prompt} has batch size '\n                    f'{len(negative_prompt)}, but `prompt`: {prompt} has batch'\n                    f' size {batch_size}. Please make sure that passed '\n                    '`negative_prompt` matches the batch size of `prompt`.')\n            else:\n                uncond_tokens = [negative_prompt, negative_prompt_2]\n\n            negative_prompt_embeds_list = []\n            for negative_prompt, tokenizer, text_encoder in zip(\n                    uncond_tokens, tokenizers, text_encoders):\n                max_length = text_embeddings.shape[1]\n                uncond_input = tokenizer(\n                    negative_prompt,\n                    padding='max_length',\n                    max_length=max_length,\n                    truncation=True,\n                    return_tensors='pt',\n                )\n\n                negative_prompt_embeds = text_encoder(\n                    uncond_input.input_ids.to(device),\n                    output_hidden_states=True,\n                )\n                # We are only ALWAYS interested in the pooled output of the\n                # final text encoder\n                negative_pooled_prompt_embeds = (\n                    negative_prompt_embeds.pooler_output)\n                negative_prompt_embeds = negative_prompt_embeds.hidden_states[\n                    -2]\n\n                negative_prompt_embeds_list.append(negative_prompt_embeds)\n\n            negative_prompt_embeds = torch.concat(\n                negative_prompt_embeds_list, dim=-1)\n\n        bs_embed, seq_len, _ = text_embeddings.shape\n        # duplicate text embeddings for each generation per prompt, using mps\n        # friendly method\n        text_embeddings = text_embeddings.repeat(1, num_images_per_prompt, 1)\n        text_embeddings = text_embeddings.view(\n            bs_embed * num_images_per_prompt, seq_len, -1)\n\n        if do_classifier_free_guidance:\n            # duplicate unconditional embeddings for each generation per prompt\n            # ,using mps friendly method\n            seq_len = negative_prompt_embeds.shape[1]\n            negative_prompt_embeds = negative_prompt_embeds.repeat(\n                1, num_images_per_prompt, 1)\n            negative_prompt_embeds = negative_prompt_embeds.view(\n                batch_size * num_images_per_prompt, seq_len, -1)\n\n        pooled_prompt_embeds = pooled_prompt_embeds.repeat(\n            1, num_images_per_prompt).view(bs_embed * num_images_per_prompt,\n                                           -1)\n        if do_classifier_free_guidance:\n            negative_pooled_prompt_embeds = (\n                negative_pooled_prompt_embeds.repeat(\n                    1, num_images_per_prompt).view(\n                        bs_embed * num_images_per_prompt, -1))\n\n        return (text_embeddings, negative_prompt_embeds, pooled_prompt_embeds,\n                negative_pooled_prompt_embeds)\n\n    def decode_latents(self, latents):\n        \"\"\"use vae to decode latents.\n\n        Args:\n            latents (torch.Tensor): latents to decode.\n\n        Returns:\n            image (torch.Tensor): image result.\n        \"\"\"\n        latents = 1 / 0.18215 * latents\n        if hasattr(self.vae, 'module'):\n            image = self.vae.module.decode(latents)['sample']\n        else:\n            image = self.vae.decode(latents)['sample']\n        # we always cast to float32 as this does not cause\n        # significant overhead and is compatible with bfloa16\n        return image.float()\n\n    def prepare_extra_step_kwargs(self, generator, eta):\n        \"\"\"prepare extra kwargs for the scheduler step.\n\n        Args:\n            generator (torch.Generator):\n                generator for random functions.\n            eta (float):\n                eta (η) is only used with the DDIMScheduler,\n                it will be ignored for other schedulers.\n                eta corresponds to η in DDIM paper:\n                https://arxiv.org/abs/2010.02502\n                and should be between [0, 1]\n\n        Return:\n            extra_step_kwargs (dict):\n                dict contains 'generator' and 'eta'\n        \"\"\"\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def prepare_test_scheduler_extra_step_kwargs(self, generator, eta):\n        \"\"\"prepare extra kwargs for the scheduler step.\n\n        Args:\n            generator (torch.Generator):\n                generator for random functions.\n            eta (float):\n                eta (η) is only used with the DDIMScheduler,\n                it will be ignored for other schedulers.\n                eta corresponds to η in DDIM paper:\n                https://arxiv.org/abs/2010.02502\n                and should be between [0, 1]\n\n        Return:\n            extra_step_kwargs (dict):\n                dict contains 'generator' and 'eta'\n        \"\"\"\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.test_scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.test_scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def check_inputs(self, prompt, height, width):\n        \"\"\"check whether inputs are in suitable format or not.\"\"\"\n\n        if not isinstance(prompt, str) and not isinstance(prompt, list):\n            raise ValueError(f'`prompt` has to be of '\n                             f'type `str` or `list` but is {type(prompt)}')\n\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError(f'`height` and `width` have to be divisible '\n                             f'by 8 but are {height} and {width}.')\n\n    def prepare_latents(self,\n                        batch_size,\n                        num_channels_latents,\n                        height,\n                        width,\n                        dtype,\n                        device,\n                        generator,\n                        latents=None):\n        \"\"\"prepare latents for diffusion to run in latent space.\n\n        Args:\n            batch_size (int): batch size.\n            num_channels_latents (int): latent channel nums.\n            height (int): image height.\n            width (int): image width.\n            dtype (torch.dtype): float type.\n            device (torch.device): torch device.\n            generator (torch.Generator):\n                generator for random functions, defaults to None.\n            latents (torch.Tensor):\n                Pre-generated noisy latents, defaults to None.\n\n        Return:\n            latents (torch.Tensor): prepared latents.\n        \"\"\"\n        shape = (batch_size, num_channels_latents,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        if latents is None:\n            latents = torch.randn(\n                shape, generator=generator, device=device, dtype=dtype)\n        else:\n            if latents.shape != shape:\n                raise ValueError(f'Unexpected latents shape, '\n                                 f'got {latents.shape}, expected {shape}')\n            latents = latents.to(device)\n\n        # scale the initial noise by the standard\n        # deviation required by the scheduler\n        latents = latents * self.scheduler.init_noise_sigma\n        return latents\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        if self.val_prompts is None:\n            data = self.data_preprocessor(data)\n            data_samples = data['data_samples']\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples = DataSample.stack(data['data_samples'] * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n        if self.val_prompts is None:\n            gt_img = self.data_preprocessor.destruct(data['inputs'],\n                                                     data_samples)\n\n            out_data_sample = DataSample(\n                fake_img=samples, gt_img=gt_img, prompt=prompt)\n        else:\n            out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        if self.val_prompts is None:\n            data = self.data_preprocessor(data)\n            data_samples = data['data_samples']\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples = DataSample.stack(data['data_samples'] * len(prompt))\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n        if self.val_prompts is None:\n            gt_img = self.data_preprocessor.destruct(data['inputs'],\n                                                     data_samples)\n\n            out_data_sample = DataSample(\n                fake_img=samples, gt_img=gt_img, prompt=prompt)\n        else:\n            out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    def encode_prompt_train(self, text_one, text_two):\n        \"\"\"Encode prompt for training.\n\n        Args:\n            text_one (torch.tensor): Input ids from tokenizer_one.\n            text_two (torch.tensor): Input ids from tokenizer_two.\n\n        Returns:\n            prompt_embeds (torch.tensor): Prompt embedings.\n            pooled_prompt_embeds (torch.tensor): Pooled prompt embeddings.\n        \"\"\"\n        prompt_embeds_list = []\n\n        text_encoders = [self.text_encoder_one, self.text_encoder_two]\n        texts = [text_one, text_two]\n        for text_encoder, text in zip(text_encoders, texts):\n\n            prompt_embeds = text_encoder(\n                text,\n                output_hidden_states=True,\n            )\n\n            # We are only ALWAYS interested in the pooled output of the\n            # final text encoder\n            pooled_prompt_embeds = prompt_embeds.pooler_output\n            prompt_embeds = prompt_embeds.hidden_states[-2]\n            bs_embed, seq_len, _ = prompt_embeds.shape\n            prompt_embeds = prompt_embeds.view(bs_embed, seq_len, -1)\n            prompt_embeds_list.append(prompt_embeds)\n\n        prompt_embeds = torch.concat(prompt_embeds_list, dim=-1)\n        pooled_prompt_embeds = pooled_prompt_embeds.view(bs_embed, -1)\n        return prompt_embeds, pooled_prompt_embeds\n\n    def train_step(self, data: List[dict], optim_wrapper: OptimWrapperDict):\n        \"\"\"Train step function.\n\n        Args:\n            data (List[dict]): Batch of data as input.\n            optim_wrapper (OptimWrapperDict): Dict with optimizers\n                for generator and discriminator (if have).\n\n        Returns:\n            dict: Dict with loss, information for logger, the number of \\\n                samples and results for visualization.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n\n        vae = self.vae.module if hasattr(self.vae, 'module') else self.vae\n\n        with optim_wrapper.optim_context(self.unet):\n            image = inputs\n            prompt = data_samples.prompt\n            num_batches = image.shape[0]\n\n            image = image.to(self.dtype)\n            latents = vae.encode(image).latent_dist.sample()\n            latents = latents * vae.config.scaling_factor\n\n            noise = torch.randn_like(latents)\n\n            if self.enable_noise_offset:\n                noise = noise + self.noise_offset_weight * torch.randn(\n                    latents.shape[0],\n                    latents.shape[1],\n                    1,\n                    1,\n                    device=noise.device)\n\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n\n            noisy_latents = self.scheduler.add_noise(latents, noise, timesteps)\n\n            input_ids_one = self.tokenizer_one(\n                prompt,\n                max_length=self.tokenizer_one.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n            input_ids_two = self.tokenizer_two(\n                prompt,\n                max_length=self.tokenizer_two.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n\n            (encoder_hidden_states,\n             pooled_prompt_embeds) = self.encode_prompt_train(\n                 input_ids_one, input_ids_two)\n            unet_added_conditions = {\n                'time_ids': data['time_ids'],\n                'text_embeds': pooled_prompt_embeds\n            }\n\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            # NOTE: we train unet in fp32, convert to float manually\n            model_output = self.unet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float(),\n                added_cond_kwargs=unet_added_conditions)\n            model_pred = model_output['sample']\n\n            loss_dict = dict()\n            # calculate loss in FP32\n            loss_mse = F.mse_loss(model_pred.float(), gt.float())\n            loss_dict['loss_mse'] = loss_mse\n\n            parsed_loss, log_vars = self.parse_losses(loss_dict)\n            optim_wrapper.update_params(parsed_loss)\n\n        return log_vars\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[list] = None,\n                mode: str = 'tensor') -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .stylegan1 import StyleGAN1\nfrom .stylegan1_discriminator import StyleGAN1Discriminator\nfrom .stylegan1_generator import StyleGAN1Generator\nfrom .stylegan1_modules import (Blur, ConstantInput, EqualLinearActModule,\n                                NoiseInjection, make_kernel)\nfrom .stylegan_utils import get_mean_latent, style_mixing\n\n__all__ = [\n    'Blur', 'ConstantInput', 'EqualLinearActModule', 'make_kernel',\n    'StyleGAN1', 'StyleGAN1Discriminator', 'StyleGAN1Generator',\n    'get_mean_latent', 'style_mixing', 'NoiseInjection'\n]\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/stylegan1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Tuple, Union\n\nimport torch\nimport torch.autograd as autograd\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import Config\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom ..pggan import ProgressiveGrowingGAN\n\nModelType = Union[Dict, nn.Module]\nTrainInput = Union[dict, Tensor]\n\n\n@MODELS.register_module('StyleGANV1')\n@MODELS.register_module('StyleGANv1')\n@MODELS.register_module()\nclass StyleGAN1(ProgressiveGrowingGAN):\n    \"\"\"Implementation of `A Style-Based Generator Architecture for Generative\n    Adversarial Networks`.\n\n    <https://openaccess.thecvf.com/content_CVPR_2019/html/Karras_A_Style-Based_Generator_Architecture_for_Generative_Adversarial_Networks_CVPR_2019_paper.html>`_  # noqa\n    (StyleGANv1). This class is inherited from\n    :class:`~ProgressiveGrowingGAN` to support progressive training.\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.stylegan1.StyleGAN1Generator`\n    and\n    :class:`~mmagic.models.editors.stylegan1.StyleGAN1Discriminator`\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        style_channels (int): The number of channels for style code. Defaults\n            to 128.\n        nkimgs_per_scale (dict): The number of images need for each\n            resolution's training. Defaults to `{}`.\n        intep_real (dict, optional): The config of interpolation method for\n            real images. If not passed, bilinear interpolation with\n            align_corners will be used. Defaults to None.\n        transition_kimgs (int, optional): The number of images during used to\n            transit from the previous torgb layer to newer torgb layer.\n            Defaults to 600.\n        prev_stage (int, optional): The resolution of previous stage. Used for\n            resume training. Defaults to 0.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 style_channels: int = 512,\n                 nkimgs_per_scale: dict = {},\n                 interp_real: Optional[dict] = None,\n                 transition_kimgs: int = 600,\n                 prev_stage: int = 0,\n                 ema_config: Optional[Dict] = None):\n\n        # get valid style_channels\n        if isinstance(generator, dict):\n            model_style_channels = generator.get('style_channels', None)\n        else:\n            model_style_channels = getattr(generator, 'style_channels', None)\n\n        if style_channels is not None and model_style_channels is not None:\n            assert style_channels == model_style_channels, (\n                'Input \\'style_channels\\' is inconsistent with '\n                f'\\'generator.style_channels\\'. Receive \\'{style_channels}\\' '\n                f'and \\'{model_style_channels}\\'.')\n        else:\n            style_channels = style_channels or model_style_channels\n\n        super().__init__(generator, discriminator, data_preprocessor,\n                         nkimgs_per_scale, None, interp_real, transition_kimgs,\n                         prev_stage, ema_config)\n\n        self.noise_size = style_channels\n\n    def disc_loss(self, disc_pred_fake: Tensor, disc_pred_real: Tensor,\n                  fake_data: Tensor, real_data: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Get disc loss. StyleGANv1 use non-saturating gan loss and R1\n        gradient penalty. loss to train the discriminator.\n\n        .. math:\n            L_{D} = \\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                - \\mathbb{E}_{x\\sim{p_{data}}}D\\left\\(x\\right\\) + L_{GP} \\\\\n            L_{GP} = \\lambda\\mathbb{E}(\\Vert\\nabla_{\\tilde{x}}D(\\tilde{x})\n                \\Vert_2-1)^2 \\\\\n            \\tilde{x} = \\epsilon x + (1-\\epsilon)G(z)\n            L_{shift} =\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n            fake_data (Tensor): Generated images, used to calculate gradient\n                penalty.\n            real_data (Tensor): Real images, used to calculate gradient\n                penalty.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = F.softplus(disc_pred_fake).mean()\n        losses_dict['loss_disc_real'] = F.softplus(-disc_pred_real).mean()\n\n        # R1 gradient penalty\n        batch_size = real_data.size(0)\n        real_data_ = real_data.clone().requires_grad_()\n        disc_pred = self.discriminator(\n            real_data_,\n            curr_scale=self.curr_scale[0],\n            transition_weight=self._curr_transition_weight)\n        gradients = autograd.grad(\n            outputs=disc_pred,\n            inputs=real_data_,\n            grad_outputs=torch.ones_like(disc_pred),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n        # norm_mode is 'HWC'\n        gradients_penalty = gradients.pow(2).reshape(batch_size,\n                                                     -1).sum(1).mean()\n        losses_dict['loss_r1_gp'] = 10 * gradients_penalty\n\n        parsed_loss, log_vars = self.parse_losses(losses_dict)\n        return parsed_loss, log_vars\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple[Tensor, dict]:\n        r\"\"\"Generator loss for PGGAN. PGGAN use WGAN's loss to train the\n        generator.\n\n        .. math:\n            L_{G} = -\\mathbb{E}_{z\\sim{p_{z}}}D\\left\\(G\\left\\(z\\right\\)\\right\\)\n                + L_{MSE}\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            Tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_vars = self.parse_losses(losses_dict)\n        return loss, log_vars\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/stylegan1_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ..pggan import (EqualizedLRConvDownModule, EqualizedLRConvModule,\n                     MiniBatchStddevLayer)\nfrom .stylegan1_modules import Blur, EqualLinearActModule\n\n\n@MODELS.register_module('StyleGANv1Discriminator')\n@MODELS.register_module()\nclass StyleGAN1Discriminator(BaseModule):\n    \"\"\"StyleGAN1 Discriminator.\n\n    The architecture of this discriminator is proposed in StyleGAN1. More\n    details can be found in: A Style-Based Generator Architecture for\n    Generative Adversarial Networks CVPR2019.\n\n    Args:\n        in_size (int): The input size of images.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 2, 1].\n        mbstd_cfg (dict, optional): Configs for minibatch-stddev layer.\n            Defaults to dict(group_size=4).\n    \"\"\"\n\n    def __init__(self,\n                 in_size,\n                 blur_kernel=[1, 2, 1],\n                 mbstd_cfg=dict(group_size=4)):\n        super().__init__()\n\n        self.with_mbstd = mbstd_cfg is not None\n        channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256,\n            128: 128,\n            256: 64,\n            512: 32,\n            1024: 16,\n        }\n\n        log_size = int(np.log2(in_size))\n        self.log_size = log_size\n        in_channels = channels[in_size]\n\n        self.convs = nn.ModuleList()\n        self.from_rgb = nn.ModuleList()\n\n        for i in range(log_size, 2, -1):\n            out_channel = channels[2**(i - 1)]\n            self.from_rgb.append(\n                EqualizedLRConvModule(\n                    3,\n                    in_channels,\n                    kernel_size=3,\n                    padding=1,\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2)))\n            self.convs.append(\n                nn.Sequential(\n                    EqualizedLRConvModule(\n                        in_channels,\n                        out_channel,\n                        kernel_size=3,\n                        padding=1,\n                        bias=True,\n                        norm_cfg=None,\n                        act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n                    Blur(blur_kernel, pad=(1, 1)),\n                    EqualizedLRConvDownModule(\n                        out_channel,\n                        out_channel,\n                        kernel_size=3,\n                        stride=2,\n                        padding=1,\n                        act_cfg=None),\n                    nn.LeakyReLU(negative_slope=0.2, inplace=True)))\n\n            in_channels = out_channel\n\n        self.from_rgb.append(\n            EqualizedLRConvModule(\n                3,\n                in_channels,\n                kernel_size=3,\n                padding=0,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2)))\n        self.convs.append(\n            nn.Sequential(\n                EqualizedLRConvModule(\n                    in_channels + 1,\n                    512,\n                    kernel_size=3,\n                    padding=1,\n                    bias=True,\n                    norm_cfg=None,\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n                EqualizedLRConvModule(\n                    512,\n                    512,\n                    kernel_size=4,\n                    padding=0,\n                    bias=True,\n                    norm_cfg=None,\n                    act_cfg=None),\n            ))\n\n        if self.with_mbstd:\n            self.mbstd_layer = MiniBatchStddevLayer(**mbstd_cfg)\n\n        self.final_linear = nn.Sequential(EqualLinearActModule(channels[4], 1))\n\n        self.n_layer = len(self.convs)\n\n    def forward(self, input, transition_weight=1., curr_scale=-1):\n        \"\"\"Forward function.\n\n        Args:\n            input (torch.Tensor): Input image tensor.\n            transition_weight (float, optional): The weight used in resolution\n                transition. Defaults to 1..\n            curr_scale (int, optional): The resolution scale of image tensor.\n                -1 means the max resolution scale of the StyleGAN1.\n                Defaults to -1.\n\n        Returns:\n            torch.Tensor: Predict score for the input image.\n        \"\"\"\n        curr_log_size = self.log_size if curr_scale < 0 else int(\n            np.log2(curr_scale))\n        step = curr_log_size - 2\n        for i in range(step, -1, -1):\n            index = self.n_layer - i - 1\n\n            if i == step:\n                out = self.from_rgb[index](input)\n\n            # minibatch standard deviation\n            if i == 0:\n                out = self.mbstd_layer(out)\n\n            out = self.convs[index](out)\n\n            if i > 0:\n                if i == step and 0 <= transition_weight < 1:\n                    skip_rgb = F.avg_pool2d(input, 2)\n                    skip_rgb = self.from_rgb[index + 1](skip_rgb)\n\n                    out = (1 - transition_weight\n                           ) * skip_rgb + transition_weight * out\n\n        out = out.view(out.shape[0], -1)\n        out = self.final_linear(out)\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/stylegan1_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom ..pggan import EqualizedLRConvModule, PixelNorm\nfrom .stylegan1_modules import EqualLinearActModule, StyleConv\nfrom .stylegan_utils import get_mean_latent, style_mixing\n\n\n@MODELS.register_module('StyleGANv1Generator')\n@MODELS.register_module()\nclass StyleGAN1Generator(BaseModule):\n    \"\"\"StyleGAN1 Generator.\n\n    In StyleGAN1, we use a progressive growing architecture composing of a\n    style mapping module and number of convolutional style blocks. More details\n    can be found in: A Style-Based Generator Architecture for Generative\n    Adversarial Networks CVPR2019.\n\n    Args:\n        out_size (int): The output size of the StyleGAN1 generator.\n        style_channels (int): The number of channels for style code.\n        num_mlps (int, optional): The number of MLP layers. Defaults to 8.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 2, 1].\n        lr_mlp (float, optional): The learning rate for the style mapping\n            layer. Defaults to 0.01.\n        default_style_mode (str, optional): The default mode of style mixing.\n            In training, we adopt mixing style mode in default. However, in the\n            evaluation, we use 'single' style mode. `['mix', 'single']` are\n            currently supported. Defaults to 'mix'.\n        eval_style_mode (str, optional): The evaluation mode of style mixing.\n            Defaults to 'single'.\n        mix_prob (float, optional): Mixing probability. The value should be\n            in range of [0, 1]. Defaults to 0.9.\n    \"\"\"\n\n    def __init__(self,\n                 out_size,\n                 style_channels,\n                 num_mlps=8,\n                 blur_kernel=[1, 2, 1],\n                 lr_mlp=0.01,\n                 default_style_mode='mix',\n                 eval_style_mode='single',\n                 mix_prob=0.9):\n        super().__init__()\n        self.out_size = out_size\n        self.style_channels = style_channels\n        self.num_mlps = num_mlps\n        self.lr_mlp = lr_mlp\n        self._default_style_mode = default_style_mode\n        self.default_style_mode = default_style_mode\n        self.eval_style_mode = eval_style_mode\n        self.mix_prob = mix_prob\n\n        # define style mapping layers\n        mapping_layers = [PixelNorm()]\n\n        for _ in range(num_mlps):\n            mapping_layers.append(\n                EqualLinearActModule(\n                    style_channels,\n                    style_channels,\n                    equalized_lr_cfg=dict(lr_mul=lr_mlp, gain=1.),\n                    act_cfg=dict(type='LeakyReLU', negative_slope=0.2)))\n\n        self.style_mapping = nn.Sequential(*mapping_layers)\n\n        self.channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256,\n            128: 128,\n            256: 64,\n            512: 32,\n            1024: 16,\n        }\n\n        # generator backbone (8x8 --> higher resolutions)\n        self.log_size = int(np.log2(self.out_size))\n\n        self.convs = nn.ModuleList()\n        self.to_rgbs = nn.ModuleList()\n\n        in_channels_ = self.channels[4]\n\n        for i in range(2, self.log_size + 1):\n            out_channels_ = self.channels[2**i]\n            self.convs.append(\n                StyleConv(\n                    in_channels_,\n                    out_channels_,\n                    3,\n                    style_channels,\n                    initial=(i == 2),\n                    upsample=True,\n                    fused=True))\n            self.to_rgbs.append(\n                EqualizedLRConvModule(out_channels_, 3, 1, act_cfg=None))\n\n            in_channels_ = out_channels_\n\n        self.num_latents = self.log_size * 2 - 2\n        self.num_injected_noises = self.num_latents\n\n        # register buffer for injected noises\n        for layer_idx in range(self.num_injected_noises):\n            res = (layer_idx + 4) // 2\n            shape = [1, 1, 2**res, 2**res]\n            self.register_buffer(f'injected_noise_{layer_idx}',\n                                 torch.randn(*shape))\n\n    def train(self, mode=True):\n        if mode:\n            if self.default_style_mode != self._default_style_mode:\n                mmengine.print_log(\n                    f'Switch to train style mode: {self._default_style_mode}')\n            self.default_style_mode = self._default_style_mode\n\n        else:\n            if self.default_style_mode != self.eval_style_mode:\n                mmengine.print_log(\n                    f'Switch to evaluation style mode: {self.eval_style_mode}')\n            self.default_style_mode = self.eval_style_mode\n\n        return super(StyleGAN1Generator, self).train(mode)\n\n    def make_injected_noise(self):\n        \"\"\"make noises that will be injected into feature maps.\n\n        Returns:\n            list[Tensor]: List of layer-wise noise tensor.\n        \"\"\"\n        device = get_module_device(self)\n\n        # noises = [torch.randn(1, 1, 2**2, 2**2, device=device)]\n        noises = []\n\n        for i in range(2, self.log_size + 1):\n            for _ in range(2):\n                noises.append(torch.randn(1, 1, 2**i, 2**i, device=device))\n\n        return noises\n\n    def get_mean_latent(self, num_samples=4096, **kwargs):\n        \"\"\"Get mean latent of W space in this generator.\n\n        Args:\n            num_samples (int, optional): Number of sample times. Defaults\n                to 4096.\n\n        Returns:\n            Tensor: Mean latent of this generator.\n        \"\"\"\n        return get_mean_latent(self, num_samples, **kwargs)\n\n    def style_mixing(self,\n                     n_source,\n                     n_target,\n                     inject_index=1,\n                     truncation_latent=None,\n                     truncation=0.7,\n                     curr_scale=-1,\n                     transition_weight=1):\n        return style_mixing(\n            self,\n            n_source=n_source,\n            n_target=n_target,\n            inject_index=inject_index,\n            truncation=truncation,\n            truncation_latent=truncation_latent,\n            style_channels=self.style_channels,\n            curr_scale=curr_scale,\n            transition_weight=transition_weight)\n\n    def forward(self,\n                styles,\n                num_batches=-1,\n                return_noise=False,\n                return_latents=False,\n                inject_index=None,\n                truncation=1,\n                truncation_latent=None,\n                input_is_latent=False,\n                injected_noise=None,\n                randomize_noise=True,\n                transition_weight=1.,\n                curr_scale=-1):\n        \"\"\"Forward function.\n\n        This function has been integrated with the truncation trick. Please\n        refer to the usage of `truncation` and `truncation_latent`.\n\n        Args:\n            styles (torch.Tensor | list[torch.Tensor] | callable | None): In\n                StyleGAN1, you can provide noise tensor or latent tensor. Given\n                a list containing more than one noise or latent tensors, style\n                mixing trick will be used in training. Of course, You can\n                directly give a batch of noise through a ``torch.Tensor`` or\n                offer a callable function to sample a batch of noise data.\n                Otherwise, the ``None`` indicates to use the default noise\n                sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            return_latents (bool, optional): If True, ``latent`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            inject_index (int | None, optional): The index number for mixing\n                style codes. Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            truncation_latent (torch.Tensor, optional): Mean truncation latent.\n                Defaults to None.\n            input_is_latent (bool, optional): If `True`, the input tensor is\n                the latent tensor. Defaults to False.\n            injected_noise (torch.Tensor | None, optional): Given a tensor, the\n                random noise will be fixed as this input injected noise.\n                Defaults to None.\n            randomize_noise (bool, optional): If `False`, images are sampled\n                with the buffered noise tensor injected to the style conv\n                block. Defaults to True.\n            transition_weight (float, optional): The weight used in resolution\n                transition. Defaults to 1..\n            curr_scale (int, optional): The resolution scale of generated image\n                tensor. -1 means the max resolution scale of the StyleGAN1.\n                Defaults to -1.\n\n        Returns:\n            torch.Tensor | dict: Generated image tensor or dictionary \\\n                containing more data.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(styles, torch.Tensor):\n            assert styles.shape[1] == self.style_channels\n            styles = [styles]\n        elif mmengine.is_seq_of(styles, torch.Tensor):\n            for t in styles:\n                assert t.shape[-1] == self.style_channels\n        # receive a noise generator and sample noise.\n        elif callable(styles):\n            device = get_module_device(self)\n            noise_generator = styles\n            assert num_batches > 0\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    noise_generator((num_batches, self.style_channels))\n                    for _ in range(2)\n                ]\n            else:\n                styles = [noise_generator((num_batches, self.style_channels))]\n            styles = [s.to(device) for s in styles]\n        # otherwise, we will adopt default noise sampler.\n        else:\n            device = get_module_device(self)\n            assert num_batches > 0 and not input_is_latent\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    torch.randn((num_batches, self.style_channels))\n                    for _ in range(2)\n                ]\n            else:\n                styles = [torch.randn((num_batches, self.style_channels))]\n            styles = [s.to(device) for s in styles]\n\n        if not input_is_latent:\n            noise_batch = styles\n            styles = [self.style_mapping(s) for s in styles]\n        else:\n            noise_batch = None\n\n        if injected_noise is None:\n            if randomize_noise:\n                injected_noise = [None] * self.num_injected_noises\n            else:\n                injected_noise = [\n                    getattr(self, f'injected_noise_{i}')\n                    for i in range(self.num_injected_noises)\n                ]\n        # use truncation trick\n        if truncation < 1:\n            style_t = []\n            # calculate truncation latent on the fly\n            if truncation_latent is None and not hasattr(\n                    self, 'truncation_latent'):\n                self.truncation_latent = self.get_mean_latent()\n                truncation_latent = self.truncation_latent\n            elif truncation_latent is None and hasattr(self,\n                                                       'truncation_latent'):\n                truncation_latent = self.truncation_latent\n\n            for style in styles:\n                style_t.append(truncation_latent + truncation *\n                               (style - truncation_latent))\n\n            styles = style_t\n        # no style mixing\n        if len(styles) < 2:\n            inject_index = self.num_latents\n\n            if styles[0].ndim < 3:\n                latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n\n            else:\n                latent = styles[0]\n        # style mixing\n        else:\n            if inject_index is None:\n                inject_index = random.randint(1, self.num_latents - 1)\n\n            latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n            latent2 = styles[1].unsqueeze(1).repeat(\n                1, self.num_latents - inject_index, 1)\n\n            latent = torch.cat([latent, latent2], 1)\n\n        curr_log_size = self.log_size if curr_scale < 0 else int(\n            np.log2(curr_scale))\n        step = curr_log_size - 2\n\n        _index = 0\n        out = latent\n        # 4x4 ---> higher resolutions\n        for i, (conv, to_rgb) in enumerate(zip(self.convs, self.to_rgbs)):\n            if i > 0 and step > 0:\n                out_prev = out\n            out = conv(\n                out,\n                latent[:, _index],\n                latent[:, _index + 1],\n                noise1=injected_noise[2 * i],\n                noise2=injected_noise[2 * i + 1])\n            if i == step:\n                out = to_rgb(out)\n\n                if i > 0 and 0 <= transition_weight < 1:\n                    skip_rgb = self.to_rgbs[i - 1](out_prev)\n                    skip_rgb = F.interpolate(\n                        skip_rgb, scale_factor=2, mode='nearest')\n                    out = (1 - transition_weight\n                           ) * skip_rgb + transition_weight * out\n                break\n\n            _index += 2\n\n        img = out\n\n        if return_latents or return_noise:\n            output_dict = dict(\n                fake_img=img,\n                latent=latent,\n                inject_index=inject_index,\n                noise_batch=noise_batch)\n            return output_dict\n\n        return img\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/stylegan1_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom functools import partial\n\nimport mmengine\nimport torch\nimport torch.nn as nn\nfrom mmcv.ops.fused_bias_leakyrelu import fused_bias_leakyrelu\nfrom mmcv.ops.upfirdn2d import upfirdn2d\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom ..pggan import (EqualizedLRConvModule, EqualizedLRConvUpModule,\n                     EqualizedLRLinearModule)\n\n\nclass EqualLinearActModule(BaseModule):\n    \"\"\"Equalized LR Linear Module with Activation Layer.\n\n    This module is modified from ``EqualizedLRLinearModule`` defined in PGGAN.\n    The major features updated in this module is adding support for activation\n    layers used in StyleGAN2.\n\n    Args:\n        equalized_lr_cfg (dict | None, optional): Config for equalized lr.\n            Defaults to dict(gain=1., lr_mul=1.).\n        bias (bool, optional): Whether to use bias item. Defaults to True.\n        bias_init (float, optional): The value for bias initialization.\n            Defaults to ``0.``.\n        act_cfg (dict | None, optional): Config for activation layer.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 *args,\n                 equalized_lr_cfg=dict(gain=1., lr_mul=1.),\n                 bias=True,\n                 bias_init=0.,\n                 act_cfg=None,\n                 **kwargs):\n        super().__init__()\n        self.with_activation = act_cfg is not None\n        # w/o bias in linear layer\n        self.linear = EqualizedLRLinearModule(\n            *args, bias=False, equalized_lr_cfg=equalized_lr_cfg, **kwargs)\n\n        if equalized_lr_cfg is not None:\n            self.lr_mul = equalized_lr_cfg.get('lr_mul', 1.)\n        else:\n            self.lr_mul = 1.\n\n        # define bias outside linear layer\n        if bias:\n            self.bias = nn.Parameter(\n                torch.zeros(self.linear.out_features).fill_(bias_init))\n        else:\n            self.bias = None\n\n        if self.with_activation:\n            act_cfg = deepcopy(act_cfg)\n            if act_cfg['type'] == 'fused_bias':\n                self.act_type = act_cfg.pop('type')\n                assert self.bias is not None\n                self.activate = partial(fused_bias_leakyrelu, **act_cfg)\n            else:\n                self.act_type = 'normal'\n                self.activate = MODELS.build(act_cfg)\n        else:\n            self.act_type = None\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, ...).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        if x.ndim >= 3:\n            x = x.reshape(x.size(0), -1)\n        x = self.linear(x)\n\n        if self.with_activation and self.act_type == 'fused_bias':\n            x = self.activate(x, self.bias * self.lr_mul)\n        elif self.bias is not None and self.with_activation:\n            x = self.activate(x + self.bias * self.lr_mul)\n        elif self.bias is not None:\n            x = x + self.bias * self.lr_mul\n        elif self.with_activation:\n            x = self.activate(x)\n\n        return x\n\n\nclass NoiseInjection(BaseModule):\n    \"\"\"Noise Injection Module.\n\n    In StyleGAN2, they adopt this module to inject spatial random noise map in\n    the generators.\n\n    Args:\n        noise_weight_init (float, optional): Initialization weight for noise\n            injection. Defaults to ``0.``.\n        fixed_noise (bool, optional): Whether to inject a fixed noise. Defaults\n        to ``False``.\n    \"\"\"\n\n    def __init__(self, noise_weight_init=0., fixed_noise=False):\n        super().__init__()\n        self.weight = nn.Parameter(torch.zeros(1).fill_(noise_weight_init))\n        self.fixed_noise = fixed_noise\n\n    def forward(self, image, noise=None, return_noise=False):\n        \"\"\"Forward Function.\n\n        Args:\n            image (Tensor): Spatial features with a shape of (N, C, H, W).\n            noise (Tensor, optional): Noises from the outside.\n                Defaults to None.\n            return_noise (bool, optional): Whether to return noise tensor.\n                Defaults to False.\n\n        Returns:\n            Tensor: Output features.\n        \"\"\"\n        if noise is None:\n            batch, _, height, width = image.shape\n            noise = image.new_empty(batch, 1, height, width).normal_()\n            if self.fixed_noise:\n                torch.manual_seed(1024)\n                noise = torch.randn(batch, 1, height, width).cuda()\n\n        noise = noise.to(image.dtype)\n        if return_noise:\n            return image + self.weight.to(image.dtype) * noise, noise\n\n        return image + self.weight.to(image.dtype) * noise\n\n\nclass ConstantInput(BaseModule):\n    \"\"\"Constant Input.\n\n    In StyleGAN2, they substitute the original head noise input with such a\n    constant input module.\n\n    Args:\n        channel (int): Channels for the constant input tensor.\n        size (int, optional): Spatial size for the constant input.\n            Defaults to 4.\n    \"\"\"\n\n    def __init__(self, channel, size=4):\n        super().__init__()\n        if isinstance(size, int):\n            size = [size, size]\n        elif mmengine.is_seq_of(size, int):\n            assert len(\n                size\n            ) == 2, f'The length of size should be 2 but got {len(size)}'\n        else:\n            raise ValueError(f'Got invalid value in size, {size}')\n\n        self.input = nn.Parameter(torch.randn(1, channel, *size))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, ...).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        batch = x.shape[0]\n        out = self.input.repeat(batch, 1, 1, 1)\n\n        return out\n\n\ndef make_kernel(k):\n    k = torch.tensor(k, dtype=torch.float32)\n    if k.ndim == 1:\n        k = k[None, :] * k[:, None]\n\n    k /= k.sum()\n\n    return k\n\n\nclass Blur(BaseModule):\n    \"\"\"Blur module.\n\n    This module is adopted rightly after upsampling operation in StyleGAN2.\n\n    Args:\n        kernel (Array): Blur kernel/filter used in UpFIRDn.\n        pad (list[int]): Padding for features.\n        upsample_factor (int, optional): Upsampling factor. Defaults to 1.\n    \"\"\"\n\n    def __init__(self, kernel, pad, upsample_factor=1):\n        super().__init__()\n        kernel = make_kernel(kernel)\n        if upsample_factor > 1:\n            kernel = kernel * (upsample_factor**2)\n\n        self.register_buffer('kernel', kernel)\n\n        self.pad = pad\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n\n        # In Tero's implementation, he uses fp32\n        return upfirdn2d(x, self.kernel.to(x.dtype), padding=self.pad)\n\n\nclass AdaptiveInstanceNorm(BaseModule):\n    r\"\"\"Adaptive Instance Normalization Module.\n\n    Ref: https://github.com/rosinality/style-based-gan-pytorch/blob/master/model.py  # noqa\n\n    Args:\n        in_channel (int): The number of input's channel.\n        style_dim (int): Style latent dimension.\n    \"\"\"\n\n    def __init__(self, in_channel, style_dim):\n        super().__init__()\n\n        self.norm = nn.InstanceNorm2d(in_channel)\n        self.affine = EqualizedLRLinearModule(style_dim, in_channel * 2)\n\n        self.affine.bias.data[:in_channel] = 1\n        self.affine.bias.data[in_channel:] = 0\n\n    def forward(self, input, style):\n        \"\"\"Forward function.\n\n        Args:\n            input (Tensor): Input tensor with shape (n, c, h, w).\n            style (Tensor): Input style tensor with shape (n, c).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        style = self.affine(style).unsqueeze(2).unsqueeze(3)\n        gamma, beta = style.chunk(2, 1)\n\n        out = self.norm(input)\n        out = gamma * out + beta\n\n        return out\n\n\nclass StyleConv(BaseModule):\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 style_channels,\n                 padding=1,\n                 initial=False,\n                 blur_kernel=[1, 2, 1],\n                 upsample=False,\n                 fused=False):\n        \"\"\"Convolutional style blocks composing of noise injector, AdaIN module\n        and convolution layers.\n\n        Args:\n            in_channels (int): The channel number of the input tensor.\n            out_channels (itn): The channel number of the output tensor.\n            kernel_size (int): The kernel size of convolution layers.\n            style_channels (int): The number of channels for style code.\n            padding (int, optional): Padding of convolution layers.\n                Defaults to 1.\n            initial (bool, optional): Whether this is the first StyleConv of\n                StyleGAN's generator. Defaults to False.\n            blur_kernel (list, optional): The blurry kernel.\n                Defaults to [1, 2, 1].\n            upsample (bool, optional): Whether perform upsampling.\n                Defaults to False.\n            fused (bool, optional): Whether use fused upconv.\n                Defaults to False.\n        \"\"\"\n        super().__init__()\n\n        if initial:\n            self.conv1 = ConstantInput(in_channels)\n        else:\n            if upsample:\n                if fused:\n                    self.conv1 = nn.Sequential(\n                        EqualizedLRConvUpModule(\n                            in_channels,\n                            out_channels,\n                            kernel_size,\n                            padding=padding,\n                            act_cfg=dict(type='LeakyReLU',\n                                         negative_slope=0.2)),\n                        Blur(blur_kernel, pad=(1, 1)),\n                    )\n                else:\n                    self.conv1 = nn.Sequential(\n                        nn.Upsample(scale_factor=2, mode='nearest'),\n                        EqualizedLRConvModule(\n                            in_channels,\n                            out_channels,\n                            kernel_size,\n                            padding=padding,\n                            act_cfg=None), Blur(blur_kernel, pad=(1, 1)))\n            else:\n                self.conv1 = EqualizedLRConvModule(\n                    in_channels,\n                    out_channels,\n                    kernel_size,\n                    padding=padding,\n                    act_cfg=None)\n\n        self.noise_injector1 = NoiseInjection()\n        self.activate1 = nn.LeakyReLU(0.2)\n        self.adain1 = AdaptiveInstanceNorm(out_channels, style_channels)\n\n        self.conv2 = EqualizedLRConvModule(\n            out_channels,\n            out_channels,\n            kernel_size,\n            padding=padding,\n            act_cfg=None)\n        self.noise_injector2 = NoiseInjection()\n        self.activate2 = nn.LeakyReLU(0.2)\n        self.adain2 = AdaptiveInstanceNorm(out_channels, style_channels)\n\n    def forward(self,\n                x,\n                style1,\n                style2,\n                noise1=None,\n                noise2=None,\n                return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor.\n            style1 (Tensor): Input style tensor with shape (n, c).\n            style2 (Tensor): Input style tensor with shape (n, c).\n            noise1 (Tensor, optional): Noise tensor with shape (n, c, h, w).\n                Defaults to None.\n            noise2 (Tensor, optional): Noise tensor with shape (n, c, h, w).\n                Defaults to None.\n            return_noise (bool, optional): If True, ``noise1`` and ``noise2``\n            will be returned with ``out``. Defaults to False.\n\n        Returns:\n            Tensor | tuple[Tensor]: Forward results.\n        \"\"\"\n        out = self.conv1(x)\n        if return_noise:\n            out, noise1 = self.noise_injector1(\n                out, noise=noise1, return_noise=return_noise)\n        else:\n            out = self.noise_injector1(\n                out, noise=noise1, return_noise=return_noise)\n        out = self.activate1(out)\n        out = self.adain1(out, style1)\n\n        out = self.conv2(out)\n        if return_noise:\n            out, noise2 = self.noise_injector2(\n                out, noise=noise2, return_noise=return_noise)\n        else:\n            out = self.noise_injector2(\n                out, noise=noise2, return_noise=return_noise)\n        out = self.activate2(out)\n        out = self.adain2(out, style2)\n\n        if return_noise:\n            return out, noise1, noise2\n\n        return out\n"
  },
  {
    "path": "mmagic/models/editors/stylegan1/stylegan_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom ...utils import get_module_device\n\n\n@torch.no_grad()\ndef get_mean_latent(generator, num_samples=4096, bs_per_repeat=1024):\n    \"\"\"Get mean latent of W space in Style-based GANs.\n\n    Args:\n        generator (BaseModule): Generator of a Style-based GAN.\n        num_samples (int, optional): Number of sample times. Defaults to 4096.\n        bs_per_repeat (int, optional): Batch size of noises per sample.\n            Defaults to 1024.\n\n    Returns:\n        Tensor: Mean latent of this generator.\n    \"\"\"\n    device = get_module_device(generator)\n    mean_style = None\n    n_repeat = num_samples // bs_per_repeat\n    assert n_repeat * bs_per_repeat == num_samples\n\n    for _ in range(n_repeat):\n        style = generator.style_mapping(\n            torch.randn(bs_per_repeat,\n                        generator.style_channels).to(device)).mean(\n                            0, keepdim=True)\n        if mean_style is None:\n            mean_style = style\n        else:\n            mean_style += style\n    mean_style /= float(n_repeat)\n\n    return mean_style\n\n\n@torch.no_grad()\ndef style_mixing(generator,\n                 n_source,\n                 n_target,\n                 inject_index=1,\n                 truncation_latent=None,\n                 truncation=0.7,\n                 style_channels=512,\n                 **kwargs):\n    device = get_module_device(generator)\n    source_code = torch.randn(n_source, style_channels).to(device)\n    target_code = torch.randn(n_target, style_channels).to(device)\n\n    source_image = generator(\n        source_code,\n        truncation_latent=truncation_latent,\n        truncation=truncation,\n        **kwargs)\n\n    h, w = source_image.shape[-2:]\n    images = [torch.ones(1, 3, h, w).to(device) * -1]\n\n    target_image = generator(\n        target_code,\n        truncation_latent=truncation_latent,\n        truncation=truncation,\n        **kwargs)\n\n    images.append(source_image)\n\n    for i in range(n_target):\n        image = generator(\n            [target_code[i].unsqueeze(0).repeat(n_source, 1), source_code],\n            truncation_latent=truncation_latent,\n            truncation=truncation,\n            inject_index=inject_index,\n            **kwargs)\n        images.append(target_image[i].unsqueeze(0))\n        images.append(image)\n\n    images = torch.cat(images, 0)\n\n    return images\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .stylegan2 import StyleGAN2\nfrom .stylegan2_discriminator import (ADAAug, ADAStyleGAN2Discriminator,\n                                      StyleGAN2Discriminator)\nfrom .stylegan2_generator import StyleGAN2Generator\nfrom .stylegan2_modules import (ConvDownLayer, ModMBStddevLayer,\n                                ModulatedToRGB, ResBlock)\n\n__all__ = [\n    'StyleGAN2', 'StyleGAN2Discriminator', 'StyleGAN2Generator',\n    'ADAStyleGAN2Discriminator', 'ADAAug', 'ConvDownLayer', 'ModMBStddevLayer',\n    'ModulatedToRGB', 'ResBlock'\n]\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/ada/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/ada/augment.py",
    "content": "# Copyright (c) 2021, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport numpy as np\nimport scipy.signal\nimport torch\n\ntry:\n    from mmcv.ops import conv2d\nexcept ImportError:\n    conv2d = None\n    print('Warning: mmcv.ops.conv2d are not available.')\n\nfrom . import grid_sample_gradfix, misc, upfirdn2d\n\n# ----------------------------------------------------------------------------\n# Coefficients of various wavelet decomposition low-pass filters.\n\nwavelets = {\n    'haar': [0.7071067811865476, 0.7071067811865476],\n    'db1': [0.7071067811865476, 0.7071067811865476],\n    'db2': [\n        -0.12940952255092145, 0.22414386804185735, 0.836516303737469,\n        0.48296291314469025\n    ],\n    'db3': [\n        0.035226291882100656, -0.08544127388224149, -0.13501102001039084,\n        0.4598775021193313, 0.8068915093133388, 0.3326705529509569\n    ],\n    'db4': [\n        -0.010597401784997278, 0.032883011666982945, 0.030841381835986965,\n        -0.18703481171888114, -0.02798376941698385, 0.6308807679295904,\n        0.7148465705525415, 0.23037781330885523\n    ],\n    'db5': [\n        0.003335725285001549, -0.012580751999015526, -0.006241490213011705,\n        0.07757149384006515, -0.03224486958502952, -0.24229488706619015,\n        0.13842814590110342, 0.7243085284385744, 0.6038292697974729,\n        0.160102397974125\n    ],\n    'db6': [\n        -0.00107730108499558, 0.004777257511010651, 0.0005538422009938016,\n        -0.031582039318031156, 0.02752286553001629, 0.09750160558707936,\n        -0.12976686756709563, -0.22626469396516913, 0.3152503517092432,\n        0.7511339080215775, 0.4946238903983854, 0.11154074335008017\n    ],\n    'db7': [\n        0.0003537138000010399, -0.0018016407039998328, 0.00042957797300470274,\n        0.012550998556013784, -0.01657454163101562, -0.03802993693503463,\n        0.0806126091510659, 0.07130921926705004, -0.22403618499416572,\n        -0.14390600392910627, 0.4697822874053586, 0.7291320908465551,\n        0.39653931948230575, 0.07785205408506236\n    ],\n    'db8': [\n        -0.00011747678400228192, 0.0006754494059985568, -0.0003917403729959771,\n        -0.00487035299301066, 0.008746094047015655, 0.013981027917015516,\n        -0.04408825393106472, -0.01736930100202211, 0.128747426620186,\n        0.00047248457399797254, -0.2840155429624281, -0.015829105256023893,\n        0.5853546836548691, 0.6756307362980128, 0.3128715909144659,\n        0.05441584224308161\n    ],\n    'sym2': [\n        -0.12940952255092145, 0.22414386804185735, 0.836516303737469,\n        0.48296291314469025\n    ],\n    'sym3': [\n        0.035226291882100656, -0.08544127388224149, -0.13501102001039084,\n        0.4598775021193313, 0.8068915093133388, 0.3326705529509569\n    ],\n    'sym4': [\n        -0.07576571478927333, -0.02963552764599851, 0.49761866763201545,\n        0.8037387518059161, 0.29785779560527736, -0.09921954357684722,\n        -0.012603967262037833, 0.0322231006040427\n    ],\n    'sym5': [\n        0.027333068345077982, 0.029519490925774643, -0.039134249302383094,\n        0.1993975339773936, 0.7234076904024206, 0.6339789634582119,\n        0.01660210576452232, -0.17532808990845047, -0.021101834024758855,\n        0.019538882735286728\n    ],\n    'sym6': [\n        0.015404109327027373, 0.0034907120842174702, -0.11799011114819057,\n        -0.048311742585633, 0.4910559419267466, 0.787641141030194,\n        0.3379294217276218, -0.07263752278646252, -0.021060292512300564,\n        0.04472490177066578, 0.0017677118642428036, -0.007800708325034148\n    ],\n    'sym7': [\n        0.002681814568257878, -0.0010473848886829163, -0.01263630340325193,\n        0.03051551316596357, 0.0678926935013727, -0.049552834937127255,\n        0.017441255086855827, 0.5361019170917628, 0.767764317003164,\n        0.2886296317515146, -0.14004724044296152, -0.10780823770381774,\n        0.004010244871533663, 0.010268176708511255\n    ],\n    'sym8': [\n        -0.0033824159510061256, -0.0005421323317911481, 0.03169508781149298,\n        0.007607487324917605, -0.1432942383508097, -0.061273359067658524,\n        0.4813596512583722, 0.7771857517005235, 0.3644418948353314,\n        -0.05194583810770904, -0.027219029917056003, 0.049137179673607506,\n        0.003808752013890615, -0.01495225833704823, -0.0003029205147213668,\n        0.0018899503327594609\n    ],\n}\n\n# ----------------------------------------------------------------------------\n# Helpers for constructing transformation matrices.\n\n\ndef matrix(*rows, device=None):\n    \"\"\"Constructing transformation matrices.\n\n    Args:\n        device (str|torch.device, optional): Matrix device. Defaults to None.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    assert all(len(row) == len(rows[0]) for row in rows)\n    elems = [x for row in rows for x in row]\n    ref = [x for x in elems if isinstance(x, torch.Tensor)]\n    if len(ref) == 0:\n        return misc.constant(np.asarray(rows), device=device)\n    assert device is None or device == ref[0].device\n    # change `x.float()` to support pt1.5\n    elems = [\n        x.float() if isinstance(x, torch.Tensor) else misc.constant(\n            x, shape=ref[0].shape, device=ref[0].device) for x in elems\n    ]\n    return torch.stack(elems, dim=-1).reshape(ref[0].shape + (len(rows), -1))\n\n\ndef translate2d(tx, ty, **kwargs):\n    \"\"\"Construct 2d translation matrix.\n\n    Args:\n        tx (float): X-direction translation amount.\n        ty (float): Y-direction translation amount.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return matrix([1, 0, tx], [0, 1, ty], [0, 0, 1], **kwargs)\n\n\ndef translate3d(tx, ty, tz, **kwargs):\n    \"\"\"Construct 3d translation matrix.\n\n    Args:\n        tx (float): X-direction translation amount.\n        ty (float): Y-direction translation amount.\n        tz (float): Z-direction translation amount.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return matrix([1, 0, 0, tx], [0, 1, 0, ty], [0, 0, 1, tz], [0, 0, 0, 1],\n                  **kwargs)\n\n\ndef scale2d(sx, sy, **kwargs):\n    \"\"\"Construct 2d scaling matrix.\n\n    Args:\n        sx (float): X-direction scaling coefficient.\n        sy (float): Y-direction scaling coefficient.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return matrix([sx, 0, 0], [0, sy, 0], [0, 0, 1], **kwargs)\n\n\ndef scale3d(sx, sy, sz, **kwargs):\n    \"\"\"Construct 3d scaling matrix.\n\n    Args:\n        sx (float): X-direction scaling coefficient.\n        sy (float): Y-direction scaling coefficient.\n        sz (float): Z-direction scaling coefficient.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return matrix([sx, 0, 0, 0], [0, sy, 0, 0], [0, 0, sz, 0], [0, 0, 0, 1],\n                  **kwargs)\n\n\ndef rotate2d(theta, **kwargs):\n    \"\"\"Construct 2d rotating matrix.\n\n    Args:\n        theta (float): Counter-clock wise rotation angle.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return matrix([torch.cos(theta), torch.sin(-theta), 0],\n                  [torch.sin(theta), torch.cos(theta), 0], [0, 0, 1], **kwargs)\n\n\ndef rotate3d(v, theta, **kwargs):\n    \"\"\"Constructing 3d rotating matrix.\n\n    Args:\n        v (torch.Tensor): Luma axis.\n        theta (float): Rotate theta counter-clock wise with ``v`` as the axis.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    vx = v[..., 0]\n    vy = v[..., 1]\n    vz = v[..., 2]\n    s = torch.sin(theta)\n    c = torch.cos(theta)\n    cc = 1 - c\n    return matrix(\n        [vx * vx * cc + c, vx * vy * cc - vz * s, vx * vz * cc + vy * s, 0],\n        [vy * vx * cc + vz * s, vy * vy * cc + c, vy * vz * cc - vx * s, 0],\n        [vz * vx * cc - vy * s, vz * vy * cc + vx * s, vz * vz * cc + c, 0],\n        [0, 0, 0, 1], **kwargs)\n\n\ndef translate2d_inv(tx, ty, **kwargs):\n    \"\"\"Construct inverse matrix of 2d translation matrix.\n\n    Args:\n        tx (float): X-direction translation amount.\n        ty (float): Y-direction translation amount.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return translate2d(-tx, -ty, **kwargs)\n\n\ndef scale2d_inv(sx, sy, **kwargs):\n    \"\"\"Construct inverse matrix of 2d scaling matrix.\n\n    Args:\n        sx (float): X-direction scaling coefficient.\n        sy (float): Y-direction scaling coefficient.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return scale2d(1 / sx, 1 / sy, **kwargs)\n\n\ndef rotate2d_inv(theta, **kwargs):\n    \"\"\"Construct inverse matrix of 2d rotating matrix.\n\n    Args:\n        theta (float): Counter-clock wise rotation angle.\n    Returns:\n        ndarry | Tensor : Transformation matrices in np.ndarry or torch.Tensor\n            format.\n    \"\"\"\n    return rotate2d(-theta, **kwargs)\n\n\n# ----------------------------------------------------------------------------\n# Versatile image augmentation pipeline from the paper\n# \"Training Generative Adversarial Networks with Limited Data\".\n#\n# All augmentations are disabled by default; individual augmentations can\n# be enabled by setting their probability multipliers to 1.\n\n\nclass AugmentPipe(torch.nn.Module):\n    \"\"\"Augmentation pipeline include multiple geometric and color\n    transformations.\n\n    Note: The meaning of arguments are written in the comments of\n    ``__init__`` function.\n    \"\"\"\n\n    def __init__(\n        self,\n        xflip=0,\n        rotate90=0,\n        xint=0,\n        xint_max=0.125,\n        scale=0,\n        rotate=0,\n        aniso=0,\n        xfrac=0,\n        scale_std=0.2,\n        rotate_max=1,\n        aniso_std=0.2,\n        xfrac_std=0.125,\n        brightness=0,\n        contrast=0,\n        lumaflip=0,\n        hue=0,\n        saturation=0,\n        brightness_std=0.2,\n        contrast_std=0.5,\n        hue_max=1,\n        saturation_std=1,\n        imgfilter=0,\n        imgfilter_bands=[1, 1, 1, 1],\n        imgfilter_std=1,\n        noise=0,\n        cutout=0,\n        noise_std=0.1,\n        cutout_size=0.5,\n    ):\n        super().__init__()\n        self.register_buffer('p', torch.ones(\n            []))  # Overall multiplier for augmentation probability.\n\n        # Pixel blitting.\n        self.xflip = float(xflip)  # Probability multiplier for x-flip.\n        self.rotate90 = float(\n            rotate90)  # Probability multiplier for 90 degree rotations.\n        self.xint = float(\n            xint)  # Probability multiplier for integer translation.\n        self.xint_max = float(\n            xint_max\n        )  # Range of integer translation, relative to image dimensions.\n\n        # General geometric transformations.\n        self.scale = float(\n            scale)  # Probability multiplier for isotropic scaling.\n        self.rotate = float(\n            rotate)  # Probability multiplier for arbitrary rotation.\n        self.aniso = float(\n            aniso)  # Probability multiplier for anisotropic scaling.\n        self.xfrac = float(\n            xfrac)  # Probability multiplier for fractional translation.\n        self.scale_std = float(\n            scale_std)  # Log2 standard deviation of isotropic scaling.\n        self.rotate_max = float(\n            rotate_max)  # Range of arbitrary rotation, 1 = full circle.\n        self.aniso_std = float(\n            aniso_std)  # Log2 standard deviation of anisotropic scaling.\n        self.xfrac_std = float(\n            xfrac_std\n        )  # Standard deviation of frational translation, relative to img dims.\n\n        # Color transformations.\n        self.brightness = float(\n            brightness)  # Probability multiplier for brightness.\n        self.contrast = float(contrast)  # Probability multiplier for contrast.\n        self.lumaflip = float(\n            lumaflip)  # Probability multiplier for luma flip.\n        self.hue = float(hue)  # Probability multiplier for hue rotation.\n        self.saturation = float(\n            saturation)  # Probability multiplier for saturation.\n        self.brightness_std = float(\n            brightness_std)  # Standard deviation of brightness.\n        self.contrast_std = float(\n            contrast_std)  # Log2 standard deviation of contrast.\n        self.hue_max = float(\n            hue_max)  # Range of hue rotation, 1 = full circle.\n        self.saturation_std = float(\n            saturation_std)  # Log2 standard deviation of saturation.\n\n        # Image-space filtering.\n        self.imgfilter = float(\n            imgfilter)  # Probability multiplier for image-space filtering.\n        self.imgfilter_bands = list(\n            imgfilter_bands\n        )  # Probability multipliers for individual frequency bands.\n        self.imgfilter_std = float(\n            imgfilter_std\n        )  # Log2 standard deviation of image-space filter amplification.\n\n        # Image-space corruptions.\n        self.noise = float(\n            noise)  # Probability multiplier for additive RGB noise.\n        self.cutout = float(cutout)  # Probability multiplier for cutout.\n        self.noise_std = float(\n            noise_std)  # Standard deviation of additive RGB noise.\n        self.cutout_size = float(\n            cutout_size\n        )  # Size of the cutout rectangle, relative to image dimensions.\n\n        # Setup orthogonal lowpass filter for geometric augmentations.\n        self.register_buffer('Hz_geom',\n                             upfirdn2d.setup_filter(wavelets['sym6']))\n\n        # Construct filter bank for image-space filtering.\n        Hz_lo = np.asarray(wavelets['sym2'])  # H(z)\n        Hz_hi = Hz_lo * ((-1)**np.arange(Hz_lo.size))  # H(-z)\n        Hz_lo2 = np.convolve(Hz_lo, Hz_lo[::-1]) / 2  # H(z) * H(z^-1) / 2\n        Hz_hi2 = np.convolve(Hz_hi, Hz_hi[::-1]) / 2  # H(-z) * H(-z^-1) / 2\n        Hz_fbank = np.eye(4, 1)  # Bandpass(H(z), b_i)\n        for i in range(1, Hz_fbank.shape[0]):\n            Hz_fbank = np.dstack([Hz_fbank, np.zeros_like(Hz_fbank)\n                                  ]).reshape(Hz_fbank.shape[0], -1)[:, :-1]\n            Hz_fbank = scipy.signal.convolve(Hz_fbank, [Hz_lo2])\n            Hz_fbank[i, (Hz_fbank.shape[1] - Hz_hi2.size) //\n                     2:(Hz_fbank.shape[1] + Hz_hi2.size) // 2] += Hz_hi2\n        self.register_buffer('Hz_fbank',\n                             torch.as_tensor(Hz_fbank, dtype=torch.float32))\n\n    def forward(self, images, debug_percentile=None):\n        assert isinstance(images, torch.Tensor) and images.ndim == 4\n        batch_size, num_channels, height, width = images.shape\n        device = images.device\n        if debug_percentile is not None:\n            debug_percentile = torch.as_tensor(\n                debug_percentile, dtype=torch.float32, device=device)\n\n        # -------------------------------------\n        # Select parameters for pixel blitting.\n        # -------------------------------------\n\n        # Initialize inverse homogeneous 2D transform:\n        # G_inv @ pixel_out ==> pixel_in\n        I_3 = torch.eye(3, device=device)\n        G_inv = I_3\n\n        # Apply x-flip with probability (xflip * strength).\n        if self.xflip > 0:\n            i = torch.floor(torch.rand([batch_size], device=device) * 2)\n            i = torch.where(\n                torch.rand([batch_size], device=device) < self.xflip * self.p,\n                i, torch.zeros_like(i))\n            if debug_percentile is not None:\n                i = torch.full_like(i, torch.floor(debug_percentile * 2))\n            G_inv = G_inv @ scale2d_inv(1 - 2 * i, 1)\n\n        # Apply 90 degree rotations with probability (rotate90 * strength).\n        if self.rotate90 > 0:\n            i = torch.floor(torch.rand([batch_size], device=device) * 4)\n            i = torch.where(\n                torch.rand([batch_size], device=device) <\n                self.rotate90 * self.p, i, torch.zeros_like(i))\n            if debug_percentile is not None:\n                i = torch.full_like(i, torch.floor(debug_percentile * 4))\n            G_inv = G_inv @ rotate2d_inv(-np.pi / 2 * i)\n\n        # Apply integer translation with probability (xint * strength).\n        if self.xint > 0:\n            t = (torch.rand([batch_size, 2], device=device) * 2 -\n                 1) * self.xint_max\n            t = torch.where(\n                torch.rand([batch_size, 1], device=device) <\n                self.xint * self.p, t, torch.zeros_like(t))\n            if debug_percentile is not None:\n                t = torch.full_like(t,\n                                    (debug_percentile * 2 - 1) * self.xint_max)\n            G_inv = G_inv @ translate2d_inv(\n                torch.round(t[:, 0] * width), torch.round(t[:, 1] * height))\n\n        # --------------------------------------------------------\n        # Select parameters for general geometric transformations.\n        # --------------------------------------------------------\n\n        # support for pt1.5 (pt1.5 does not contain exp2)\n        _scalor_log2 = torch.log(\n            torch.tensor(2., device=images.device, dtype=images.dtype))\n\n        # Apply isotropic scaling with probability (scale * strength).\n        if self.scale > 0:\n            s = torch.exp(\n                torch.randn([batch_size], device=device) * self.scale_std *\n                _scalor_log2)\n            s = torch.where(\n                torch.rand([batch_size], device=device) < self.scale * self.p,\n                s, torch.ones_like(s))\n            if debug_percentile is not None:\n                s = torch.full_like(\n                    s,\n                    torch.exp2(\n                        torch.erfinv(debug_percentile * 2 - 1) *\n                        self.scale_std))\n            G_inv = G_inv @ scale2d_inv(s, s)\n\n        # Apply pre-rotation with probability p_rot.\n        p_rot = 1 - torch.sqrt(\n            (1 - self.rotate * self.p).clamp(0, 1))  # P(pre OR post) = p\n        if self.rotate > 0:\n            theta = (torch.rand([batch_size], device=device) * 2 -\n                     1) * np.pi * self.rotate_max\n            theta = torch.where(\n                torch.rand([batch_size], device=device) < p_rot, theta,\n                torch.zeros_like(theta))\n            if debug_percentile is not None:\n                theta = torch.full_like(theta, (debug_percentile * 2 - 1) *\n                                        np.pi * self.rotate_max)\n            G_inv = G_inv @ rotate2d_inv(-theta)  # Before anisotropic scaling.\n\n        # Apply anisotropic scaling with probability (aniso * strength).\n        if self.aniso > 0:\n            s = torch.exp(\n                torch.randn([batch_size], device=device) * self.aniso_std *\n                _scalor_log2)\n            s = torch.where(\n                torch.rand([batch_size], device=device) < self.aniso * self.p,\n                s, torch.ones_like(s))\n            if debug_percentile is not None:\n                s = torch.full_like(\n                    s,\n                    torch.exp2(\n                        torch.erfinv(debug_percentile * 2 - 1) *\n                        self.aniso_std))\n            G_inv = G_inv @ scale2d_inv(s, 1 / s)\n\n        # Apply post-rotation with probability p_rot.\n        if self.rotate > 0:\n            theta = (torch.rand([batch_size], device=device) * 2 -\n                     1) * np.pi * self.rotate_max\n            theta = torch.where(\n                torch.rand([batch_size], device=device) < p_rot, theta,\n                torch.zeros_like(theta))\n            if debug_percentile is not None:\n                theta = torch.zeros_like(theta)\n            G_inv = G_inv @ rotate2d_inv(-theta)  # After anisotropic scaling.\n\n        # Apply fractional translation with probability (xfrac * strength).\n        if self.xfrac > 0:\n            t = torch.randn([batch_size, 2], device=device) * self.xfrac_std\n            t = torch.where(\n                torch.rand([batch_size, 1], device=device) <\n                self.xfrac * self.p, t, torch.zeros_like(t))\n            if debug_percentile is not None:\n                t = torch.full_like(\n                    t,\n                    torch.erfinv(debug_percentile * 2 - 1) * self.xfrac_std)\n            G_inv = G_inv @ translate2d_inv(t[:, 0] * width, t[:, 1] * height)\n\n        # ----------------------------------\n        # Execute geometric transformations.\n        # ----------------------------------\n\n        # Execute if the transform is not identity.\n        if G_inv is not I_3:\n\n            # Calculate padding.\n            cx = (width - 1) / 2\n            cy = (height - 1) / 2\n            cp = matrix([-cx, -cy, 1], [cx, -cy, 1], [cx, cy, 1], [-cx, cy, 1],\n                        device=device)  # [idx, xyz]\n            cp = G_inv @ cp.t()  # [batch, xyz, idx]\n            Hz_pad = self.Hz_geom.shape[0] // 4\n            margin = cp[:, :2, :].permute(1, 0,\n                                          2).flatten(1)  # [xy, batch * idx]\n            margin = torch.cat([-margin,\n                                margin]).max(dim=1).values  # [x0, y0, x1, y1]\n            margin = margin + misc.constant(\n                [Hz_pad * 2 - cx, Hz_pad * 2 - cy] * 2, device=device)\n            margin = margin.max(misc.constant([0, 0] * 2, device=device))\n            margin = margin.min(\n                misc.constant([width - 1, height - 1] * 2, device=device))\n            mx0, my0, mx1, my1 = margin.ceil().to(torch.int32)\n\n            # Pad image and adjust origin.\n            images = torch.nn.functional.pad(\n                input=images, pad=[mx0, mx1, my0, my1], mode='reflect')\n            G_inv = translate2d(\n                torch.true_divide(mx0 - mx1, 2), torch.true_divide(\n                    my0 - my1, 2)) @ G_inv\n\n            # Upsample.\n            images = upfirdn2d.upsample2d(x=images, f=self.Hz_geom, up=2)\n            G_inv = scale2d(\n                2, 2, device=device) @ G_inv @ scale2d_inv(\n                    2, 2, device=device)\n            G_inv = translate2d(\n                -0.5, -0.5, device=device) @ G_inv @ translate2d_inv(\n                    -0.5, -0.5, device=device)\n\n            # Execute transformation.\n            shape = [\n                batch_size, num_channels, (height + Hz_pad * 2) * 2,\n                (width + Hz_pad * 2) * 2\n            ]\n            G_inv = scale2d(\n                2 / images.shape[3], 2 / images.shape[2],\n                device=device) @ G_inv @ scale2d_inv(\n                    2 / shape[3], 2 / shape[2], device=device)\n            grid = torch.nn.functional.affine_grid(\n                theta=G_inv[:, :2, :], size=shape, align_corners=False)\n            images = grid_sample_gradfix.grid_sample(images, grid)\n\n            # Downsample and crop.\n            images = upfirdn2d.downsample2d(\n                x=images,\n                f=self.Hz_geom,\n                down=2,\n                padding=-Hz_pad * 2,\n                flip_filter=True)\n\n        # --------------------------------------------\n        # Select parameters for color transformations.\n        # --------------------------------------------\n\n        # Initialize homogeneous 3D transformation matrix:\n        # C @ color_in ==> color_out\n        I_4 = torch.eye(4, device=device)\n        C = I_4\n\n        # Apply brightness with probability (brightness * strength).\n        if self.brightness > 0:\n            b = torch.randn([batch_size], device=device) * self.brightness_std\n            b = torch.where(\n                torch.rand([batch_size], device=device) <\n                self.brightness * self.p, b, torch.zeros_like(b))\n            if debug_percentile is not None:\n                b = torch.full_like(\n                    b,\n                    torch.erfinv(debug_percentile * 2 - 1) *\n                    self.brightness_std)\n            C = translate3d(b, b, b) @ C\n\n        # Apply contrast with probability (contrast * strength).\n        if self.contrast > 0:\n            c = torch.exp(\n                torch.randn([batch_size], device=device) * self.contrast_std *\n                _scalor_log2)\n            c = torch.where(\n                torch.rand([batch_size], device=device) <\n                self.contrast * self.p, c, torch.ones_like(c))\n            if debug_percentile is not None:\n                c = torch.full_like(\n                    c,\n                    torch.exp2(\n                        torch.erfinv(debug_percentile * 2 - 1) *\n                        self.contrast_std))\n            C = scale3d(c, c, c) @ C\n\n        # Apply luma flip with probability (lumaflip * strength).\n        v = misc.constant(\n            np.asarray([1, 1, 1, 0]) / np.sqrt(3), device=device)  # Luma axis.\n        if self.lumaflip > 0:\n            i = torch.floor(torch.rand([batch_size, 1, 1], device=device) * 2)\n            i = torch.where(\n                torch.rand([batch_size, 1, 1], device=device) <\n                self.lumaflip * self.p, i, torch.zeros_like(i))\n            if debug_percentile is not None:\n                i = torch.full_like(i, torch.floor(debug_percentile * 2))\n            C = (I_4 - 2 * v.ger(v) * i) @ C  # Householder reflection.\n\n        # Apply hue rotation with probability (hue * strength).\n        if self.hue > 0 and num_channels > 1:\n            theta = (torch.rand([batch_size], device=device) * 2 -\n                     1) * np.pi * self.hue_max\n            theta = torch.where(\n                torch.rand([batch_size], device=device) < self.hue * self.p,\n                theta, torch.zeros_like(theta))\n            if debug_percentile is not None:\n                theta = torch.full_like(theta, (debug_percentile * 2 - 1) *\n                                        np.pi * self.hue_max)\n            C = rotate3d(v, theta) @ C  # Rotate around v.\n\n        # Apply saturation with probability (saturation * strength).\n        if self.saturation > 0 and num_channels > 1:\n            s = torch.exp(\n                torch.randn([batch_size, 1, 1], device=device) *\n                self.saturation_std * _scalor_log2)\n            s = torch.where(\n                torch.rand([batch_size, 1, 1], device=device) <\n                self.saturation * self.p, s, torch.ones_like(s))\n            if debug_percentile is not None:\n                s = torch.full_like(\n                    s,\n                    torch.exp2(\n                        torch.erfinv(debug_percentile * 2 - 1) *\n                        self.saturation_std))\n            C = (v.ger(v) + (I_4 - v.ger(v)) * s) @ C\n\n        # ------------------------------\n        # Execute color transformations.\n        # ------------------------------\n\n        # Execute if the transform is not identity.\n        if C is not I_4:\n            images = images.reshape([batch_size, num_channels, height * width])\n            if num_channels == 3:\n                images = C[:, :3, :3] @ images + C[:, :3, 3:]\n            elif num_channels == 1:\n                C = C[:, :3, :].mean(dim=1, keepdims=True)\n                images = images * C[:, :, :3].sum(\n                    dim=2, keepdims=True) + C[:, :, 3:]\n            else:\n                raise ValueError(\n                    'Image must be RGB (3 channels) or L (1 channel)')\n            images = images.reshape([batch_size, num_channels, height, width])\n\n        # ----------------------\n        # Image-space filtering.\n        # ----------------------\n\n        if self.imgfilter > 0:\n            num_bands = self.Hz_fbank.shape[0]\n            assert len(self.imgfilter_bands) == num_bands\n            expected_power = misc.constant(\n                np.array([10, 1, 1, 1]) / 13,\n                device=device)  # Expected power spectrum (1/f).\n\n            # Apply amplification for each band with probability\n            # (imgfilter * strength * band_strength).\n            g = torch.ones([batch_size, num_bands],\n                           device=device)  # Global gain vector (identity).\n            for i, band_strength in enumerate(self.imgfilter_bands):\n                t_i = torch.exp(\n                    torch.randn([batch_size], device=device) *\n                    self.imgfilter_std * _scalor_log2)\n                t_i = torch.where(\n                    torch.rand([batch_size], device=device) <\n                    self.imgfilter * self.p * band_strength, t_i,\n                    torch.ones_like(t_i))\n                if debug_percentile is not None:\n                    t_i = torch.full_like(\n                        t_i,\n                        torch.exp2(\n                            torch.erfinv(debug_percentile * 2 - 1) *\n                            self.imgfilter_std)\n                    ) if band_strength > 0 else torch.ones_like(t_i)\n                t = torch.ones([batch_size, num_bands],\n                               device=device)  # Temporary gain vector.\n                t[:, i] = t_i  # Replace i'th element.\n                t = t / (expected_power * t.square()).sum(\n                    dim=-1, keepdims=True).sqrt()  # Normalize power.\n                g = g * t  # Accumulate into global gain.\n\n            # Construct combined amplification filter.\n            Hz_prime = g @ self.Hz_fbank  # [batch, tap]\n            Hz_prime = Hz_prime.unsqueeze(1).repeat(\n                [1, num_channels, 1])  # [batch, channels, tap]\n            Hz_prime = Hz_prime.reshape([batch_size * num_channels, 1,\n                                         -1])  # [batch * channels, 1, tap]\n\n            # Apply filter.\n            p = self.Hz_fbank.shape[1] // 2\n            images = images.reshape(\n                [1, batch_size * num_channels, height, width])\n            images = torch.nn.functional.pad(\n                input=images, pad=[p, p, p, p], mode='reflect')\n            images = conv2d(\n                input=images,\n                weight=Hz_prime.unsqueeze(2),\n                groups=batch_size * num_channels)\n            images = conv2d(\n                input=images,\n                weight=Hz_prime.unsqueeze(3),\n                groups=batch_size * num_channels)\n            images = images.reshape([batch_size, num_channels, height, width])\n\n        # ------------------------\n        # Image-space corruptions.\n        # ------------------------\n\n        # Apply additive RGB noise with probability (noise * strength).\n        if self.noise > 0:\n            sigma = torch.randn([batch_size, 1, 1, 1],\n                                device=device).abs() * self.noise_std\n            sigma = torch.where(\n                torch.rand([batch_size, 1, 1, 1], device=device) <\n                self.noise * self.p, sigma, torch.zeros_like(sigma))\n            if debug_percentile is not None:\n                sigma = torch.full_like(\n                    sigma,\n                    torch.erfinv(debug_percentile) * self.noise_std)\n            images = images + torch.randn(\n                [batch_size, num_channels, height, width],\n                device=device) * sigma\n\n        # Apply cutout with probability (cutout * strength).\n        if self.cutout > 0:\n            size = torch.full([batch_size, 2, 1, 1, 1],\n                              self.cutout_size,\n                              device=device)\n            size = torch.where(\n                torch.rand([batch_size, 1, 1, 1, 1], device=device) <\n                self.cutout * self.p, size, torch.zeros_like(size))\n            center = torch.rand([batch_size, 2, 1, 1, 1], device=device)\n            if debug_percentile is not None:\n                size = torch.full_like(size, self.cutout_size)\n                center = torch.full_like(center, debug_percentile)\n            coord_x = torch.arange(width, device=device).reshape([1, 1, 1, -1])\n            coord_y = torch.arange(\n                height, device=device).reshape([1, 1, -1, 1])\n            mask_x = (((coord_x + 0.5) / width - center[:, 0]).abs() >=\n                      size[:, 0] / 2)\n            mask_y = (((coord_y + 0.5) / height - center[:, 1]).abs() >=\n                      size[:, 1] / 2)\n            mask = torch.logical_or(mask_x, mask_y).to(torch.float32)\n            images = images * mask\n\n        return images\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/ada/grid_sample_gradfix.py",
    "content": "# Copyright (c) 2021, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\"\"\"Custom replacement for `torch.nn.functional.grid_sample` that supports\narbitrarily high order gradients between the input and output.\n\nOnly works on 2D images and assumes `mode='bilinear'`, `padding_mode='zeros'`,\n`align_corners=False`.\n\"\"\"\n\nimport warnings\n\nimport torch\n\n# pylint: disable=redefined-builtin\n# pylint: disable=arguments-differ\n# pylint: disable=protected-access\n\n# ----------------------------------------------------------------------------\n\nenabled = True  # Enable the custom op by setting this to true.\n\n# ----------------------------------------------------------------------------\n\n\ndef grid_sample(input, grid):\n    if _should_use_custom_op():\n        return _GridSample2dForward.apply(input, grid)\n    return torch.nn.functional.grid_sample(\n        input=input,\n        grid=grid,\n        mode='bilinear',\n        padding_mode='zeros',\n        align_corners=False)\n\n\n# ----------------------------------------------------------------------------\n\n\ndef _should_use_custom_op():\n    if not enabled:\n        return False\n    if any(\n            torch.__version__.startswith(x)\n            for x in ['1.5.', '1.6.', '1.7.', '1.8.', '1.9.', '1.10.']):\n        return True\n    warnings.warn(\n        f'grid_sample_gradfix not supported on PyTorch {torch.__version__}.'\n        ' Falling back to torch.nn.functional.grid_sample().')\n    return False\n\n\n# ----------------------------------------------------------------------------\n\n\nclass _GridSample2dForward(torch.autograd.Function):\n\n    @staticmethod\n    def forward(ctx, input, grid):\n        assert input.ndim == 4\n        assert grid.ndim == 4\n        output = torch.nn.functional.grid_sample(\n            input=input,\n            grid=grid,\n            mode='bilinear',\n            padding_mode='zeros',\n            align_corners=False)\n        ctx.save_for_backward(input, grid)\n        return output\n\n    @staticmethod\n    def backward(ctx, grad_output):\n        input, grid = ctx.saved_tensors\n        grad_input, grad_grid = _GridSample2dBackward.apply(\n            grad_output, input, grid)\n        return grad_input, grad_grid\n\n\n# ----------------------------------------------------------------------------\n\n\nclass _GridSample2dBackward(torch.autograd.Function):\n\n    @staticmethod\n    def forward(ctx, grad_output, input, grid):\n        op = torch._C._jit_get_operation('aten::grid_sampler_2d_backward')\n        grad_input, grad_grid = op(grad_output, input, grid, 0, 0, False)\n        ctx.save_for_backward(grid)\n        return grad_input, grad_grid\n\n    @staticmethod\n    def backward(ctx, grad2_grad_input, grad2_grad_grid):\n        _ = grad2_grad_grid  # unused\n        grid, = ctx.saved_tensors\n        grad2_grad_output = None\n        grad2_input = None\n        grad2_grid = None\n\n        if ctx.needs_input_grad[0]:\n            grad2_grad_output = _GridSample2dForward.apply(\n                grad2_grad_input, grid)\n\n        assert not ctx.needs_input_grad[2]\n        return grad2_grad_output, grad2_input, grad2_grid\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/ada/misc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\n# Cached construction of constant tensors. Avoids CPU=>GPU copy when the\n# same constant is used multiple times.\n\n_constant_cache = dict()\n\n\ndef constant(value, shape=None, dtype=None, device=None, memory_format=None):\n    value = np.asarray(value)\n    if shape is not None:\n        shape = tuple(shape)\n    if dtype is None:\n        dtype = torch.get_default_dtype()\n    if device is None:\n        device = torch.device('cpu')\n    if memory_format is None:\n        memory_format = torch.contiguous_format\n\n    key = (value.shape, value.dtype, value.tobytes(), shape, dtype, device,\n           memory_format)\n    tensor = _constant_cache.get(key, None)\n    if tensor is None:\n        tensor = torch.as_tensor(value.copy(), dtype=dtype, device=device)\n        if shape is not None:\n            tensor, _ = torch.broadcast_tensors(tensor, torch.empty(shape))\n        tensor = tensor.contiguous(memory_format=memory_format)\n        _constant_cache[key] = tensor\n    return tensor\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/ada/upfirdn2d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\ntry:\n    from mmcv.ops import upfirdn2d\nexcept ImportError:\n    upfirdn2d = None\n    print('Warning: mmcv.ops.upfirdn2d is not available.')\n\n\ndef _parse_scaling(scaling):\n    if isinstance(scaling, int):\n        scaling = [scaling, scaling]\n    assert isinstance(scaling, (list, tuple))\n    assert all(isinstance(x, int) for x in scaling)\n    sx, sy = scaling\n    assert sx >= 1 and sy >= 1\n    return sx, sy\n\n\ndef _parse_padding(padding):\n    if isinstance(padding, int):\n        padding = [padding, padding]\n    assert isinstance(padding, (list, tuple))\n    assert all(isinstance(x, int) for x in padding)\n    if len(padding) == 2:\n        padx, pady = padding\n        padding = [padx, padx, pady, pady]\n    padx0, padx1, pady0, pady1 = padding\n    return padx0, padx1, pady0, pady1\n\n\ndef _get_filter_size(f):\n    if f is None:\n        return 1, 1\n    assert isinstance(f, torch.Tensor) and f.ndim in [1, 2]\n    fw = f.shape[-1]\n    fh = f.shape[0]\n    fw = int(fw)\n    fh = int(fh)\n    assert fw >= 1 and fh >= 1\n    return fw, fh\n\n\ndef upsample2d(x, f, up=2, padding=0, flip_filter=False, gain=1, impl='cuda'):\n    r\"\"\"Upsample a batch of 2D images using the given 2D FIR filter.\n    By default, the result is padded so that its shape is a multiple of the\n    input.\n    User-specified padding is applied on top of that, with negative values\n    indicating cropping. Pixels outside the image are assumed to be zero.\n    Args:\n        x:           Float32/float64/float16 input tensor of the shape\n                     `[batch_size, num_channels, in_height, in_width]`.\n        f:           Float32 FIR filter of the shape\n                     `[filter_height, filter_width]` (non-separable),\n                     `[filter_taps]` (separable), or\n                     `None` (identity).\n        up:          Integer upsampling factor. Can be a single int or a\n                     list/tuple\n                     `[x, y]` (default: 1).\n        padding:     Padding with respect to the output. Can be a single\n                     number or a\n                     list/tuple `[x, y]` or `[x_before, x_after, y_before,\n                     y_after]`\n                     (default: 0).\n        flip_filter: False = convolution, True = correlation (default: False).\n        gain:        Overall scaling factor for signal magnitude (default: 1).\n        impl:        Implementation to use. Can be `'ref'` or `'cuda'`\n                     (default: `'cuda'`).\n    Returns:\n        Tensor of the shape `[batch_size, num_channels, out_height, out_width]`\n    \"\"\"\n    upx, upy = _parse_scaling(up)\n    padx0, padx1, pady0, pady1 = _parse_padding(padding)\n    fw, fh = _get_filter_size(f)\n    p = [\n        padx0 + (fw + upx - 1) // 2,\n        padx1 + (fw - upx) // 2,\n        pady0 + (fh + upy - 1) // 2,\n        pady1 + (fh - upy) // 2,\n    ]\n\n    gain = gain * upx * upy\n    f = f * (gain**(f.ndim / 2))\n    if flip_filter:\n        f = f.flip(list(range(f.ndim)))\n    if f.ndim == 1:\n        x = upfirdn2d(\n            x, f.unsqueeze(0), up=(upx, 1), padding=(p[0], p[1], 0, 0))\n        x = upfirdn2d(\n            x, f.unsqueeze(1), up=(1, upy), padding=(0, 0, p[2], p[3]))\n    return x\n\n\ndef setup_filter(f,\n                 device=torch.device('cpu'),\n                 normalize=True,\n                 flip_filter=False,\n                 gain=1,\n                 separable=None):\n    r\"\"\"Convenience function to setup 2D FIR filter for `upfirdn2d()`.\n    Args:\n        f:           Torch tensor, numpy array, or python list of the shape\n                     `[filter_height, filter_width]` (non-separable),\n                     `[filter_taps]` (separable),\n                     `[]` (impulse), or\n                     `None` (identity).\n        device:      Result device (default: cpu).\n        normalize:   Normalize the filter so that it retains the magnitude\n                     for constant input signal (DC)? (default: True).\n        flip_filter: Flip the filter? (default: False).\n        gain:        Overall scaling factor for signal magnitude (default: 1).\n        separable:   Return a separable filter? (default: select automatically)\n    Returns:\n        Float32 tensor of the shape\n        `[filter_height, filter_width]` (non-separable) or\n        `[filter_taps]` (separable).\n    \"\"\"\n    # Validate.\n    if f is None:\n        f = 1\n    f = torch.as_tensor(f, dtype=torch.float32)\n    assert f.ndim in [0, 1, 2]\n    assert f.numel() > 0\n    if f.ndim == 0:\n        f = f[np.newaxis]\n\n    # Separable?\n    if separable is None:\n        separable = (f.ndim == 1 and f.numel() >= 8)\n    if f.ndim == 1 and not separable:\n        f = f.ger(f)\n    assert f.ndim == (1 if separable else 2)\n\n    # Apply normalize, flip, gain, and device.\n    if normalize:\n        f /= f.sum()\n    if flip_filter:\n        f = f.flip(list(range(f.ndim)))\n    f = f * (gain**(f.ndim / 2))\n    f = f.to(device=device)\n    return f\n\n\ndef downsample2d(x,\n                 f,\n                 down=2,\n                 padding=0,\n                 flip_filter=False,\n                 gain=1,\n                 impl='cuda'):\n    r\"\"\"Downsample a batch of 2D images using the given 2D FIR filter.\n    By default, the result is padded so that its shape is a fraction of the\n    input.\n    User-specified padding is applied on top of that, with negative values\n    indicating cropping. Pixels outside the image are assumed to be zero.\n    Args:\n        x:           Float32/float64/float16 input tensor of the shape\n                     `[batch_size, num_channels, in_height, in_width]`.\n        f:           Float32 FIR filter of the shape\n                     `[filter_height, filter_width]` (non-separable),\n                     `[filter_taps]` (separable), or\n                     `None` (identity).\n        down:        Integer downsampling factor. Can be a single int or a\n                     list/tuple\n                     `[x, y]` (default: 1).\n        padding:     Padding with respect to the input. Can be a single number\n                     or a\n                     list/tuple `[x, y]` or `[x_before, x_after, y_before,\n                     y_after]`\n                     (default: 0).\n        flip_filter: False = convolution, True = correlation (default: False).\n        gain:        Overall scaling factor for signal magnitude (default: 1).\n        impl:        Implementation to use. Can be `'ref'` or `'cuda'`\n                     (default: `'cuda'`).\n    Returns:\n        Tensor of the shape `[batch_size, num_channels, out_height, out_width]`\n    \"\"\"\n    downx, downy = _parse_scaling(down)\n    padx0, padx1, pady0, pady1 = _parse_padding(padding)\n    fw, fh = _get_filter_size(f)\n    p = [\n        padx0 + (fw - downx + 1) // 2,\n        padx1 + (fw - downx) // 2,\n        pady0 + (fh - downy + 1) // 2,\n        pady1 + (fh - downy) // 2,\n    ]\n    if flip_filter:\n        f = f.flip(list(range(f.ndim)))\n    if f.ndim == 1:\n        x = upfirdn2d(\n            x, f.unsqueeze(0), down=(downx, 1), padding=(p[0], p[1], 0, 0))\n        x = upfirdn2d(\n            x, f.unsqueeze(1), down=(1, downy), padding=(0, 0, p[2], p[3]))\n    return x\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/stylegan2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import Config, MessageHub\nfrom mmengine.model import BaseModel, is_model_wrapper\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ...base_models import BaseGAN\nfrom ...losses import gen_path_regularizer, r1_gradient_penalty_loss\nfrom ...utils import set_requires_grad\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass StyleGAN2(BaseGAN):\n    \"\"\"Implementation of `Analyzing and Improving the Image Quality of\n    Stylegan`. # noqa.\n\n    Paper link: https://openaccess.thecvf.com/content_CVPR_2020/html/Karras_Analyzing_and_Improving_the_Image_Quality_of_StyleGAN_CVPR_2020_paper.html. # noqa\n\n    :class:`~mmagic.models.editors.stylegan2.StyleGAN2Generator`\n    and\n    :class:`~mmagic.models.editors.stylegan2.StyleGAN2Discriminator`\n\n    Args:\n        generator (ModelType): The config or model of the generator.\n        discriminator (Optional[ModelType]): The config or model of the\n            discriminator. Defaults to None.\n        data_preprocessor (Optional[Union[dict, Config]]): The pre-process\n            config or :class:`~mmagic.models.DataPreprocessor`.\n        generator_steps (int): The number of times the generator is completely\n            updated before the discriminator is updated. Defaults to 1.\n        discriminator_steps (int): The number of times the discriminator is\n            completely updated before the generator is updated. Defaults to 1.\n        ema_config (Optional[Dict]): The config for generator's exponential\n            moving average setting. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 ema_config: Optional[Dict] = None,\n                 loss_config=dict()):\n        BaseModel.__init__(self, data_preprocessor=data_preprocessor)\n\n        # build generator\n        if isinstance(generator, dict):\n            self._gen_cfg = deepcopy(generator)\n            generator = MODELS.build(generator)\n        self.generator = generator\n\n        # get valid noise_size\n        self.noise_size = getattr(self.generator, 'style_channels', 512)\n\n        # build discriminator\n        if discriminator:\n            if isinstance(discriminator, dict):\n                self._disc_cfg = deepcopy(discriminator)\n                # build discriminator with default `num_classes`\n                disc_args = dict()\n                if hasattr(self, 'num_classes'):\n                    disc_args['num_classes'] = self.num_classes\n                discriminator = MODELS.build(\n                    discriminator, default_args=disc_args)\n        self.discriminator = discriminator\n\n        self._gen_steps = generator_steps\n        self._disc_steps = discriminator_steps\n\n        if ema_config is None:\n            self._ema_config = None\n            self._with_ema_gen = False\n        else:\n            self._ema_config = deepcopy(ema_config)\n            self._init_ema_model(self._ema_config)\n            self._with_ema_gen = True\n\n        # loss config\n        self.loss_config = deepcopy(loss_config)\n        # r1 settings\n        self.r1_loss_weight = self.loss_config.get('r1_loss_weight', 80.0)\n        self.r1_interval = self.loss_config.get('r1_interval', 16)\n        self.norm_mode = self.loss_config.get('norm_mode', 'pixel')\n        self.r1_use_apex_amp = self.loss_config.get('r1_use_apex_amp', False)\n        self.scale_r1_loss = self.loss_config.get('scale_r1_loss', False)\n        # gen path reg settings\n        self.g_reg_interval = self.loss_config.get('g_reg_interval', 4)\n        self.g_reg_weight = self.loss_config.get('g_reg_weight', 8.)\n        self.pl_batch_shrink = self.loss_config.get('pl_batch_shrink', 2)\n        self.g_reg_use_apex_amp = self.loss_config.get('g_reg_use_apex_amp',\n                                                       False)\n        self.register_buffer('mean_path_length', torch.tensor(0.))\n\n    def disc_loss(self, disc_pred_fake: Tensor, disc_pred_real: Tensor,\n                  real_imgs: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. StyleGANv2 use the non-saturating loss and R1\n            gradient penalty to train the discriminator.\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n            real_imgs (Tensor): Input real images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n\n        losses_dict = dict()\n        # no-saturating gan loss\n        losses_dict['loss_disc_fake'] = F.softplus(disc_pred_fake).mean()\n        losses_dict['loss_disc_real'] = F.softplus(-disc_pred_real).mean()\n        # R1 Gradient Penalty\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        if curr_iter % self.r1_interval == 0:\n            losses_dict[\n                'loss_r1_gp'] = self.r1_loss_weight * r1_gradient_penalty_loss(\n                    self.discriminator,\n                    real_imgs,\n                    norm_mode=self.norm_mode,\n                    use_apex_amp=self.r1_use_apex_amp)\n\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor, batch_size: int) -> Tuple:\n        \"\"\"Get gen loss. StyleGANv2 use the non-saturating loss and generator\n        path regularization to train the generator.\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            batch_size (int): Batch size for generating fake images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        # no-saturating gan loss\n        losses_dict['loss_gen'] = F.softplus(-disc_pred_fake).mean()\n\n        # Generator Path Regularizer\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        if curr_iter % self.g_reg_interval == 0:\n            path_penalty, self.mean_path_length, _ = gen_path_regularizer(\n                self.generator,\n                batch_size,\n                self.mean_path_length,\n                pl_batch_shrink=self.pl_batch_shrink,\n                use_apex_amp=self.g_reg_use_apex_amp)\n            losses_dict['loss_path_regular'] = self.g_reg_weight * path_penalty\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real, real_imgs)\n        optimizer_wrapper.update_params(parsed_losses)\n        # save ada info\n        message_hub = MessageHub.get_current_instance()\n        message_hub.update_info('disc_pred_real', disc_pred_real)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake, num_batches)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def train_step(self, data: dict,\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, Tensor]:\n        \"\"\"Train GAN model. In the training of GAN models, generator and\n        discriminator are updated alternatively. In MMagic's design,\n        `self.train_step` is called with data input. Therefore we always update\n        discriminator, whose updating is relay on real data, and then determine\n        if the generator needs to be updated based on the current number of\n        iterations. More details about whether to update generator can be found\n        in :meth:`should_gen_update`.\n\n        Args:\n            data (dict): Data sampled from dataloader.\n            optim_wrapper (OptimWrapperDict): OptimWrapperDict instance\n                contains OptimWrapper of generator and discriminator.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n        data = self.data_preprocessor(data, True)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n\n        disc_optimizer_wrapper: OptimWrapper = optim_wrapper['discriminator']\n        disc_accu_iters = disc_optimizer_wrapper._accumulative_counts\n\n        # NOTE: Do not use context manager of optim_wrapper. Because\n        # in mixed-precision training, StyleGAN2 only enable fp16 in\n        # specified blocks (refers to `:attr:enable_fp16` in\n        # :class:`~StyleGANv2Generator` and :class:`~StyleGAN2Discriminator`\n        # for more details), but in :func:`~AmpOptimWrapper.optim_context`,\n        # fp16 is applied to all modules. This may slow down gradient\n        # accumulation because `no_sycn` in\n        # :func:`~OptimWrapper.optim_context` will not be called any more.\n        log_vars = self.train_discriminator(inputs_dict, data_samples,\n                                            disc_optimizer_wrapper)\n\n        # add 1 to `curr_iter` because iter is updated in train loop.\n        # Whether to update the generator. We update generator with\n        # discriminator is fully updated for `self.n_discriminator_steps`\n        # iterations. And one full updating for discriminator contains\n        # `disc_accu_counts` times of grad accumulations.\n        if (curr_iter + 1) % (self.discriminator_steps * disc_accu_iters) == 0:\n            set_requires_grad(self.discriminator, False)\n            gen_optimizer_wrapper = optim_wrapper['generator']\n            gen_accu_iters = gen_optimizer_wrapper._accumulative_counts\n\n            log_vars_gen_list = []\n            # init optimizer wrapper status for generator manually\n            gen_optimizer_wrapper.initialize_count_status(\n                self.generator, 0, self.generator_steps * gen_accu_iters)\n            for _ in range(self.generator_steps * gen_accu_iters):\n                log_vars_gen = self.train_generator(inputs_dict, data_samples,\n                                                    gen_optimizer_wrapper)\n\n                log_vars_gen_list.append(log_vars_gen)\n            log_vars_gen = self.gather_log_vars(log_vars_gen_list)\n            log_vars_gen.pop('loss', None)  # remove 'loss' from gen logs\n\n            set_requires_grad(self.discriminator, True)\n\n            # only do ema after generator update\n            if self.with_ema_gen and (curr_iter + 1) >= (\n                    self.ema_start * self.discriminator_steps *\n                    disc_accu_iters):\n                self.generator_ema.update_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n                # if not update buffer, copy buffer from orig model\n                if not self.generator_ema.update_buffers:\n                    self.generator_ema.sync_buffers(\n                        self.generator.module if is_model_wrapper(\n                            self.generator) else self.generator)\n            elif self.with_ema_gen:\n                # before ema, copy weights from orig\n                self.generator_ema.sync_parameters(\n                    self.generator.module\n                    if is_model_wrapper(self.generator) else self.generator)\n\n            log_vars.update(log_vars_gen)\n\n        batch_size = len(data['data_samples'])\n        # update ada p\n        if hasattr(self.discriminator,\n                   'with_ada') and self.discriminator.with_ada:\n            self.discriminator.ada_aug.log_buffer[0] += batch_size\n            self.discriminator.ada_aug.log_buffer[1] += message_hub.get_info(\n                'disc_pred_real').sign().sum()\n\n            self.discriminator.ada_aug.update(\n                iteration=curr_iter, num_batches=batch_size)\n            log_vars['augment'] = (\n                self.discriminator.ada_aug.aug_pipeline.p.data.cpu())\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/stylegan2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.runner.amp import autocast\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom ..stylegan1 import EqualLinearActModule\nfrom ..stylegan3.stylegan3_modules import MappingNetwork\nfrom .ada.augment import AugmentPipe\nfrom .ada.misc import constant\nfrom .stylegan2_modules import ConvDownLayer, ModMBStddevLayer, ResBlock\n\n\n@MODELS.register_module('StyleGANv2Discriminator')\n@MODELS.register_module()\nclass StyleGAN2Discriminator(BaseModule):\n    \"\"\"StyleGAN2 Discriminator.\n\n    The architecture of this discriminator is proposed in StyleGAN2. More\n    details can be found in: Analyzing and Improving the Image Quality of\n    StyleGAN CVPR2020.\n\n    You can load pretrained model through passing information into\n    ``pretrained`` argument. We have already offered official weights as\n    follows:\n\n    - stylegan2-ffhq-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth  # noqa\n    - stylegan2-horse-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-horse-config-f-official_20210327_173203-ef3e69ca.pth  # noqa\n    - stylegan2-car-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-car-config-f-official_20210327_172340-8cfe053c.pth  # noqa\n    - stylegan2-cat-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-cat-config-f-official_20210327_172444-15bc485b.pth  # noqa\n    - stylegan2-church-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-church-config-f-official_20210327_172657-1d42b7d1.pth  # noqa\n\n    If you want to load the ema model, you can just use following codes:\n\n    .. code-block:: python\n\n        # ckpt_http is one of the valid path from http source\n        discriminator = StyleGAN2Discriminator(1024, 512,\n                                               pretrained=dict(\n                                                   ckpt_path=ckpt_http,\n                                                   prefix='discriminator'))\n\n    Of course, you can also download the checkpoint in advance and set\n    ``ckpt_path`` with local path.\n\n    Note that our implementation adopts BGR image as input, while the\n    original StyleGAN2 provides RGB images to the discriminator. Thus, we\n    provide ``bgr2rgb`` argument to convert the image space. If your images\n    follow the RGB order, please set it to ``True`` accordingly.\n\n    Args:\n        in_size (int): The input size of images.\n        img_channels (int): The number of channels of the input image. Defaults to 3.\n        channel_multiplier (int, optional): The multiplier factor for the\n            channel number. Defaults to 2.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 3, 3, 1].\n        mbstd_cfg (dict, optional): Configs for minibatch-stddev layer.\n            Defaults to dict(group_size=4, channel_groups=1).\n        cond_size (int, optional): The size of conditional input. If None or\n            less than 1, no conditional mapping will be applied. Defaults to None.\n        cond_mapping_channels (int, optional): The dimension of the output of\n            conditional mapping. Only work when :attr:`c_dim` is larger than 0.\n            If :attr:`c_dim` is larger than 0 and :attr:`cmap_dim` is None, will.\n            Defaults to None.\n        cond_mapping_layers (int, optional): The number of mapping layer used to\n            map conditional input. Only work when c_dim is larger than 0. If\n            :attr:`cmapping_layer` is None and :attr:`c_dim` is larger than 0,\n            cmapping_layer will set as 8. Defaults to None.\n        num_fp16_scales (int, optional): The number of resolutions to use auto\n            fp16 training. Defaults to 0.\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        out_fp32 (bool, optional): Whether to convert the output feature map to\n            `torch.float32`. Defaults to `True`.\n        convert_input_fp32 (bool, optional): Whether to convert input type to\n            fp32 if not `fp16_enabled`. This argument is designed to deal with\n            the cases where some modules are run in FP16 and others in FP32.\n            Defaults to True.\n        input_bgr2rgb (bool, optional): Whether to reformat the input channels\n            with order `rgb`. Since we provide several converted weights,\n            whose input order is `rgb`. You can set this argument to True if\n            you want to finetune on converted weights. Defaults to False.\n        pretrained (dict | None, optional): Information for pretrained models.\n            The necessary key is 'ckpt_path'. Besides, you can also provide\n            'prefix' to load the generator part from the whole state dict.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 in_size,\n                 img_channels=3,\n                 channel_multiplier=2,\n                 blur_kernel=[1, 3, 3, 1],\n                 mbstd_cfg=dict(group_size=4, channel_groups=1),\n                 cond_size=None,\n                 cond_mapping_channels=None,\n                 cond_mapping_layers=None,\n                 num_fp16_scales=0,\n                 fp16_enabled=False,\n                 out_fp32=True,\n                 convert_input_fp32=True,\n                 input_bgr2rgb=False,\n                 init_cfg=None,\n                 pretrained=None):\n        # TODO: pretrained can be deleted later\n        super().__init__(init_cfg=init_cfg)\n        self.num_fp16_scale = num_fp16_scales\n        self.fp16_enabled = fp16_enabled\n        self.convert_input_fp32 = convert_input_fp32\n        self.out_fp32 = out_fp32\n\n        channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256 * channel_multiplier,\n            128: 128 * channel_multiplier,\n            256: 64 * channel_multiplier,\n            512: 32 * channel_multiplier,\n            1024: 16 * channel_multiplier,\n        }\n\n        log_size = int(np.log2(in_size))\n\n        in_channels = channels[in_size]\n\n        _use_fp16 = num_fp16_scales > 0 or fp16_enabled\n        convs = [\n            ConvDownLayer(\n                img_channels, channels[in_size], 1, fp16_enabled=_use_fp16)\n        ]\n\n        for i in range(log_size, 2, -1):\n            out_channel = channels[2**(i - 1)]\n\n            # add fp16 training for higher resolutions\n            _use_fp16 = (log_size - i) < num_fp16_scales or fp16_enabled\n\n            convs.append(\n                ResBlock(\n                    in_channels,\n                    out_channel,\n                    blur_kernel,\n                    fp16_enabled=_use_fp16,\n                    convert_input_fp32=convert_input_fp32))\n\n            in_channels = out_channel\n\n        if cond_size is not None and cond_size > 0:\n            cond_mapping_channels = 512 if cond_mapping_channels is None \\\n                else cond_mapping_channels\n            cond_mapping_layers = 8 if cond_mapping_layers is None \\\n                else cond_mapping_layers\n            self.mapping = MappingNetwork(\n                noise_size=0,\n                style_channels=cond_mapping_channels,\n                cond_size=cond_size,\n                num_ws=None,\n                num_layers=cond_mapping_layers,\n                w_avg_beta=None)\n\n        self.convs = nn.Sequential(*convs)\n\n        self.mbstd_layer = ModMBStddevLayer(**mbstd_cfg)\n\n        self.final_conv = ConvDownLayer(\n            in_channels + 1, channels[4], 3, fp16_enabled=fp16_enabled)\n\n        if cond_size is None or cond_size <= 0:\n            final_linear_out_channels = 1\n        else:\n            final_linear_out_channels = cond_mapping_channels\n        self.final_linear = nn.Sequential(\n            EqualLinearActModule(\n                channels[4] * 4 * 4,\n                channels[4],\n                act_cfg=dict(type='fused_bias')),\n            EqualLinearActModule(channels[4], final_linear_out_channels),\n        )\n\n        self.input_bgr2rgb = input_bgr2rgb\n        if pretrained is not None:\n            self._load_pretrained_model(**pretrained)\n\n    def _load_pretrained_model(self,\n                               ckpt_path,\n                               prefix='',\n                               map_location='cpu',\n                               strict=True):\n        state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                  map_location)\n        self.load_state_dict(state_dict, strict=strict)\n        mmengine.print_log(f'Load pretrained model from {ckpt_path}')\n\n    def forward(self, x: Tensor, label: Optional[Tensor] = None):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Input image tensor.\n            label (torch.Tensor, optional): The conditional input feed to\n                mapping layer. Defaults to None.\n\n        Returns:\n            torch.Tensor: Predict score for the input image.\n        \"\"\"\n        # This setting was used to finetune on converted weights\n        if self.input_bgr2rgb:\n            x = x[:, [2, 1, 0], ...]\n\n        # convs has own fp-16 controller, do not wrap here\n        x = self.convs(x)\n\n        x = self.mbstd_layer(x)\n\n        fp16_enabled = (\n            self.final_conv.fp16_enabled or not self.convert_input_fp32)\n        with autocast(enabled=fp16_enabled):\n            if not fp16_enabled:\n                x = x.to(torch.float32)\n            x = self.final_conv(x)\n            x = x.view(x.shape[0], -1)\n            x = self.final_linear(x)\n\n            # conditioning\n            if label is not None:\n                assert self.mapping is not None, (\n                    '\\'self.mapping\\' must not be None when conditional input '\n                    'is passed.')\n                cmap = self.mapping(None, label)\n                x = (x * cmap).sum(\n                    dim=1, keepdim=True) * (1 / np.sqrt(cmap.shape[1]))\n\n        return x\n\n\n@MODELS.register_module()\nclass ADAStyleGAN2Discriminator(StyleGAN2Discriminator):\n\n    def __init__(self, in_size, *args, data_aug=None, **kwargs):\n        \"\"\"StyleGANv2 Discriminator with adaptive augmentation.\n\n        Args:\n            in_size (int): The input size of images.\n            data_aug (dict, optional): Config for data\n                augmentation. Defaults to None.\n        \"\"\"\n        super().__init__(in_size, *args, **kwargs)\n        self.with_ada = data_aug is not None and data_aug != dict()\n        if self.with_ada:\n            self.ada_aug = MODELS.build(data_aug)\n            self.ada_aug.requires_grad = False\n        self.log_size = int(np.log2(in_size))\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        if self.with_ada:\n            x = self.ada_aug.aug_pipeline(x)\n        return super().forward(x)\n\n\n@MODELS.register_module()\nclass ADAAug(BaseModule):\n    \"\"\"Data Augmentation Module for Adaptive Discriminator augmentation.\n\n    Args:\n        aug_pipeline (dict, optional): Config for augmentation pipeline.\n            Defaults to None.\n        update_interval (int, optional): Interval for updating\n            augmentation probability. Defaults to 4.\n        augment_initial_p (float, optional): Initial augmentation\n            probability. Defaults to 0..\n        ada_target (float, optional): ADA target. Defaults to 0.6.\n        ada_kimg (int, optional): ADA training duration. Defaults to 500.\n    \"\"\"\n\n    def __init__(self,\n                 aug_pipeline=None,\n                 update_interval=4,\n                 augment_initial_p=0.,\n                 ada_target=0.6,\n                 ada_kimg=500):\n        super().__init__()\n        aug_pipeline = dict() if aug_pipeline is None else aug_pipeline\n        self.aug_pipeline = AugmentPipe(**aug_pipeline)\n        self.update_interval = update_interval\n        self.ada_kimg = ada_kimg\n        self.ada_target = ada_target\n\n        self.aug_pipeline.p.copy_(torch.tensor(augment_initial_p))\n\n        # this log buffer stores two numbers: num_scalars, sum_scalars.\n        self.register_buffer('log_buffer', torch.zeros((2, )))\n\n    def update(self, iteration=0, num_batches=0):\n        \"\"\"Update Augment probability.\n\n        Args:\n            iteration (int, optional): Training iteration.\n                Defaults to 0.\n            num_batches (int, optional): The number of reals batches.\n                Defaults to 0.\n        \"\"\"\n\n        if (iteration + 1) % self.update_interval == 0:\n\n            adjust_step = float(num_batches * self.update_interval) / float(\n                self.ada_kimg * 1000.)\n\n            # get the mean value as the ada heuristic\n            ada_heuristic = self.log_buffer[1] / self.log_buffer[0]\n            adjust = np.sign(ada_heuristic.item() -\n                             self.ada_target) * adjust_step\n            # update the augment p\n            # Note that p may be bigger than 1.0\n            self.aug_pipeline.p.copy_(\n                (self.aug_pipeline.p +\n                 adjust).max(constant(0, device=self.log_buffer.device)))\n\n            self.log_buffer = self.log_buffer * 0.\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/stylegan2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\n\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\nfrom mmengine.runner.amp import autocast\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom ..pggan import PixelNorm\nfrom ..stylegan1 import (ConstantInput, EqualLinearActModule, get_mean_latent,\n                         style_mixing)\nfrom .stylegan2_modules import ModulatedStyleConv, ModulatedToRGB\n\n\n@MODELS.register_module('StyleGANv2Generator')\n@MODELS.register_module()\nclass StyleGAN2Generator(BaseModule):\n    r\"\"\"StyleGAN2 Generator.\n\n    In StyleGAN2, we use a static architecture composing of a style mapping\n    module and number of convolutional style blocks. More details can be found\n    in: Analyzing and Improving the Image Quality of StyleGAN CVPR2020.\n\n    You can load pretrained model through passing information into\n    ``pretrained`` argument. We have already offered official weights as\n    follows:\n\n    - stylegan2-ffhq-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-ffhq-config-f-official_20210327_171224-bce9310c.pth  # noqa\n    - stylegan2-horse-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-horse-config-f-official_20210327_173203-ef3e69ca.pth  # noqa\n    - stylegan2-car-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-car-config-f-official_20210327_172340-8cfe053c.pth  # noqa\n    - stylegan2-cat-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-cat-config-f-official_20210327_172444-15bc485b.pth  # noqa\n    - stylegan2-church-config-f: https://download.openmmlab.com/mmediting/stylegan2/official_weights/stylegan2-church-config-f-official_20210327_172657-1d42b7d1.pth  # noqa\n\n    If you want to load the ema model, you can just use following codes:\n\n    .. code-block:: python\n\n        # ckpt_http is one of the valid path from http source\n        generator = StyleGANv2Generator(1024, 512,\n                                        pretrained=dict(\n                                            ckpt_path=ckpt_http,\n                                            prefix='generator_ema'))\n\n    Of course, you can also download the checkpoint in advance and set\n    ``ckpt_path`` with local path. If you just want to load the original\n    generator (not the ema model), please set the prefix with 'generator'.\n\n    Note that our implementation allows to generate BGR image, while the\n    original StyleGAN2 outputs RGB images by default. Thus, we provide\n    ``bgr2rgb`` argument to convert the image space.\n\n    Args:\n        out_size (int): The output size of the StyleGAN2 generator.\n        style_channels (int): The number of channels for style code.\n        out_channels (int): The number of channels for output. Defaults to 3.\n        noise_size (int, optional): The size of (number of channels) the input\n            noise. If not passed, will be set the same value as\n            :attr:`style_channels`. Defaults to None.\n        cond_size (int, optional): The size of the conditional input. If not\n            passed or less than 1, no conditional embedding will be used.\n            Defaults to None.\n        cond_mapping_channels (int, optional): The channels of the\n            conditional mapping layers. If not passed, will use the same value\n            as :attr:`style_channels`. Defaults to None.\n        num_mlps (int, optional): The number of MLP layers. Defaults to 8.\n        channel_multiplier (int, optional): The multiplier factor for the\n            channel number. Defaults to 2.\n        blur_kernel (list, optional): The blurry kernel. Defaults\n            to [1, 3, 3, 1].\n        lr_mlp (float, optional): The learning rate for the style mapping\n            layer. Defaults to 0.01.\n        default_style_mode (str, optional): The default mode of style mixing.\n            In training, we adopt mixing style mode in default. However, in the\n            evaluation, we use 'single' style mode. `['mix', 'single']` are\n            currently supported. Defaults to 'mix'.\n        eval_style_mode (str, optional): The evaluation mode of style mixing.\n            Defaults to 'single'.\n        mix_prob (float, optional): Mixing probability. The value should be\n            in range of [0, 1]. Defaults to ``0.9``.\n        update_mean_latent_with_ema (bool, optional): Whether update mean\n            latent code (w) with EMA. Defaults to False.\n        w_avg_beta (float, optional): The value used for update `w_avg`.\n            Defaults to 0.998.\n        num_fp16_scales (int, optional): The number of resolutions to use auto\n            fp16 training. Different from ``fp16_enabled``, this argument\n            allows users to adopt FP16 training only in several blocks.\n            This behaviour is much more similar to the official implementation\n            by Tero. Defaults to 0.\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. If this flag is `True`, the whole module will be wrapped\n            with ``auto_fp16``. Defaults to False.\n        pretrained (dict | None, optional): Information for pretrained models.\n            The necessary key is 'ckpt_path'. Besides, you can also provide\n            'prefix' to load the generator part from the whole state dict.\n            Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 out_size,\n                 style_channels,\n                 out_channels=3,\n                 noise_size=None,\n                 cond_size=None,\n                 cond_mapping_channels=None,\n                 num_mlps=8,\n                 channel_multiplier=2,\n                 blur_kernel=[1, 3, 3, 1],\n                 lr_mlp=0.01,\n                 default_style_mode='mix',\n                 eval_style_mode='single',\n                 norm_eps=1e-6,\n                 mix_prob=0.9,\n                 update_mean_latent_with_ema=False,\n                 w_avg_beta=0.998,\n                 num_fp16_scales=0,\n                 fp16_enabled=False,\n                 bgr2rgb=False,\n                 pretrained=None,\n                 fixed_noise=False):\n        super().__init__()\n        self.out_size = out_size\n        self.style_channels = style_channels\n        self.out_channels = out_channels\n        self.num_mlps = num_mlps\n        self.channel_multiplier = channel_multiplier\n        self.lr_mlp = lr_mlp\n        self._default_style_mode = default_style_mode\n        self.default_style_mode = default_style_mode\n        self.eval_style_mode = eval_style_mode\n        self.mix_prob = mix_prob\n        self.num_fp16_scales = num_fp16_scales\n        self.fp16_enabled = fp16_enabled\n        self.bgr2rgb = bgr2rgb\n\n        self.noise_size = style_channels if noise_size is None else noise_size\n\n        self.cond_size = cond_size\n        if self.cond_size is not None and self.cond_size > 0:\n            cond_mapping_channels = style_channels \\\n                if cond_mapping_channels is None else cond_mapping_channels\n            self.embed = EqualLinearActModule(cond_size, cond_mapping_channels)\n            # NOTE: conditional input is passed, do 2nd moment norm for\n            # embedding and noise input respectively, therefore mapping layer\n            # start with FC layer\n            mapping_layers = []\n        else:\n            cond_mapping_channels = 0\n            # NOTE: conditional input is not passed, put 2nd moment norm at\n            # the start of mapping layers\n            mapping_layers = [PixelNorm(eps=norm_eps)]\n        in_feat = cond_mapping_channels + self.noise_size\n\n        # define pixel norm\n        self.pixel_norm = PixelNorm(eps=norm_eps)\n\n        # define style mapping layers\n        for idx in range(num_mlps):\n            mapping_layers.append(\n                EqualLinearActModule(\n                    in_feat if idx == 0 else style_channels,\n                    style_channels,\n                    equalized_lr_cfg=dict(lr_mul=lr_mlp, gain=1.),\n                    act_cfg=dict(type='fused_bias')))\n\n        self.style_mapping = nn.Sequential(*mapping_layers)\n\n        self.channels = {\n            4: 512,\n            8: 512,\n            16: 512,\n            32: 512,\n            64: 256 * channel_multiplier,\n            128: 128 * channel_multiplier,\n            256: 64 * channel_multiplier,\n            512: 32 * channel_multiplier,\n            1024: 16 * channel_multiplier,\n        }\n\n        # constant input layer\n        self.constant_input = ConstantInput(self.channels[4])\n        # 4x4 stage\n        self.conv1 = ModulatedStyleConv(\n            self.channels[4],\n            self.channels[4],\n            kernel_size=3,\n            style_channels=style_channels,\n            blur_kernel=blur_kernel,\n            fp16_enabled=fp16_enabled,\n            fixed_noise=fixed_noise)\n        self.to_rgb1 = ModulatedToRGB(\n            self.channels[4],\n            style_channels,\n            out_channels=out_channels,\n            upsample=False,\n            fp16_enabled=fp16_enabled)\n\n        # generator backbone (8x8 --> higher resolutions)\n        self.log_size = int(np.log2(self.out_size))\n\n        self.convs = nn.ModuleList()\n        self.upsamples = nn.ModuleList()\n        self.to_rgbs = nn.ModuleList()\n\n        blk_in_channels_ = self.channels[4]  # in channels of the conv blocks\n\n        for i in range(3, self.log_size + 1):\n            blk_out_channels_ = self.channels[2**i]\n\n            # If `fp16_enabled` is True, all of layers will be run in auto\n            # FP16. In the case of `num_fp16_scales` > 0, only partial\n            # layers will be run in fp16.\n            _use_fp16 = (self.log_size - i) < num_fp16_scales or fp16_enabled\n\n            self.convs.append(\n                ModulatedStyleConv(\n                    blk_in_channels_,\n                    blk_out_channels_,\n                    3,\n                    style_channels,\n                    upsample=True,\n                    blur_kernel=blur_kernel,\n                    fp16_enabled=_use_fp16))\n            self.convs.append(\n                ModulatedStyleConv(\n                    blk_out_channels_,\n                    blk_out_channels_,\n                    3,\n                    style_channels,\n                    upsample=False,\n                    blur_kernel=blur_kernel,\n                    fp16_enabled=_use_fp16))\n            self.to_rgbs.append(\n                ModulatedToRGB(\n                    blk_out_channels_,\n                    style_channels,\n                    out_channels=out_channels,\n                    upsample=True,\n                    fp16_enabled=_use_fp16))  # set to global fp16\n\n            blk_in_channels_ = blk_out_channels_\n\n        self.num_latents = self.log_size * 2 - 2\n        self.num_injected_noises = self.num_latents - 1\n\n        # register buffer for injected noises\n        for layer_idx in range(self.num_injected_noises):\n            res = (layer_idx + 5) // 2\n            shape = [1, 1, 2**res, 2**res]\n            self.register_buffer(f'injected_noise_{layer_idx}',\n                                 torch.randn(*shape))\n\n        if (self.cond_size is not None\n                and self.cond_size > 0) or update_mean_latent_with_ema:\n            # Due to `get_mean_latent` cannot handle conditional input,\n            # assign avg style code here and update with EMA.\n            self.register_buffer('w_avg', torch.zeros([style_channels]))\n            self.w_avg_beta = w_avg_beta\n            mmengine.print_log('Mean latent code (w) is updated with EMA.')\n\n        if pretrained is not None:\n            self._load_pretrained_model(**pretrained)\n\n    def _load_pretrained_model(self,\n                               ckpt_path,\n                               prefix='',\n                               map_location='cpu',\n                               strict=True):\n        state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                  map_location)\n        self.load_state_dict(state_dict, strict=strict)\n        mmengine.print_log(f'Load pretrained model from {ckpt_path}')\n\n    def train(self, mode=True):\n        if mode:\n            if self.default_style_mode != self._default_style_mode:\n                mmengine.print_log(\n                    f'Switch to train style mode: {self._default_style_mode}')\n            self.default_style_mode = self._default_style_mode\n\n        else:\n            if self.default_style_mode != self.eval_style_mode:\n                mmengine.print_log(\n                    f'Switch to evaluation style mode: {self.eval_style_mode}')\n            self.default_style_mode = self.eval_style_mode\n\n        return super(StyleGAN2Generator, self).train(mode)\n\n    def make_injected_noise(self):\n        \"\"\"make noises that will be injected into feature maps.\n\n        Returns:\n            list[Tensor]: List of layer-wise noise tensor.\n        \"\"\"\n        device = get_module_device(self)\n\n        noises = [torch.randn(1, 1, 2**2, 2**2, device=device)]\n\n        for i in range(3, self.log_size + 1):\n            for _ in range(2):\n                noises.append(torch.randn(1, 1, 2**i, 2**i, device=device))\n\n        return noises\n\n    def get_mean_latent(self, num_samples=4096, **kwargs):\n        \"\"\"Get mean latent of W space in this generator.\n\n        Args:\n            num_samples (int, optional): Number of sample times. Defaults\n                to 4096.\n\n        Returns:\n            Tensor: Mean latent of this generator.\n        \"\"\"\n        if hasattr(self, 'w_avg'):\n            mmengine.print_log('Get latent code (w) which is updated by EMA.')\n            return self.w_avg\n        return get_mean_latent(self, num_samples, **kwargs)\n\n    def style_mixing(self,\n                     n_source,\n                     n_target,\n                     inject_index=1,\n                     truncation_latent=None,\n                     truncation=0.7):\n        return style_mixing(\n            self,\n            n_source=n_source,\n            n_target=n_target,\n            inject_index=inject_index,\n            truncation=truncation,\n            truncation_latent=truncation_latent,\n            style_channels=self.style_channels)\n\n    # @auto_fp16()\n    def forward(self,\n                styles,\n                label=None,\n                num_batches=-1,\n                return_noise=False,\n                return_latents=False,\n                inject_index=None,\n                truncation=1,\n                truncation_latent=None,\n                input_is_latent=False,\n                injected_noise=None,\n                add_noise=True,\n                randomize_noise=True,\n                update_ws=False,\n                return_features=False,\n                feat_idx=5,\n                return_latent_only=False):\n        \"\"\"Forward function.\n\n        This function has been integrated with the truncation trick. Please\n        refer to the usage of `truncation` and `truncation_latent`.\n\n        Args:\n            styles (torch.Tensor | list[torch.Tensor] | callable | None): In\n                StyleGAN2, you can provide noise tensor or latent tensor. Given\n                a list containing more than one noise or latent tensors, style\n                mixing trick will be used in training. Of course, You can\n                directly give a batch of noise through a ``torch.Tensor`` or\n                offer a callable function to sample a batch of noise data.\n                Otherwise, the ``None`` indicates to use the default noise\n                sampler.\n            label (torch.Tensor, optional): Conditional inputs for the\n                generator. Defaults to None.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            return_latents (bool, optional): If True, ``latent`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            inject_index (int | None, optional): The index number for mixing\n                style codes. Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            truncation_latent (torch.Tensor, optional): Mean truncation latent.\n                Defaults to None.\n            input_is_latent (bool, optional): If `True`, the input tensor is\n                the latent tensor. Defaults to False.\n            injected_noise (torch.Tensor | None, optional): Given a tensor, the\n                random noise will be fixed as this input injected noise.\n                Defaults to None.\n            add_noise (bool): Whether apply noise injection. Defaults to True.\n            randomize_noise (bool, optional): If `False`, images are sampled\n                with the buffered noise tensor injected to the style conv\n                block. Defaults to True.\n            update_ws (bool): Whether update latent code with EMA. Only work\n                when `w_avg` is registered. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: Generated image tensor or dictionary \\\n                containing more data.\n        \"\"\"\n        # device = styles.device\n        input_dim = self.style_channels if input_is_latent else self.noise_size\n        # receive noise and conduct sanity check.\n        if isinstance(styles, torch.Tensor):\n            assert styles.shape[1] == input_dim\n            styles = [styles]\n        elif mmengine.is_seq_of(styles, torch.Tensor):\n            for t in styles:\n                assert t.shape[-1] == input_dim\n        # receive a noise generator and sample noise.\n        elif callable(styles):\n            device = get_module_device(self)\n            noise_generator = styles\n            assert num_batches > 0\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    noise_generator((num_batches, input_dim)) for _ in range(2)\n                ]\n            else:\n                styles = [noise_generator((num_batches, input_dim))]\n            styles = [s.to(device) for s in styles]\n        # otherwise, we will adopt default noise sampler.\n        else:\n            device = get_module_device(self)\n            assert num_batches > 0 and not input_is_latent\n            if self.default_style_mode == 'mix' and random.random(\n            ) < self.mix_prob:\n                styles = [\n                    torch.randn((num_batches, input_dim)) for _ in range(2)\n                ]\n            else:\n                styles = [torch.randn((num_batches, input_dim))]\n            styles = [s.to(device) for s in styles]\n\n        # no amp for style-mapping and condition-embedding\n        if not input_is_latent:\n            noise_batch = styles\n            if self.cond_size is not None and self.cond_size > 0:\n                assert label is not None, (\n                    '\\'cond_channels\\' is not None, \\'cond\\' must be passed.')\n                assert label.shape[1] == self.cond_size\n                embedding = self.embed(label)\n                # NOTE: If conditional input is passed, do norm for cond\n                # embedding and noise input respectively\n                # do pixel_norm (2nd_moment_norm) to cond embedding\n                embedding = self.pixel_norm(embedding)\n                # do pixel_norm (2nd_moment_norm) to noise input\n                styles = [self.pixel_norm(s) for s in styles]\n\n            styles_list = []\n            for s in styles:\n                if self.cond_size is not None and self.cond_size > 0:\n                    s = torch.cat([s, embedding], dim=1)\n                styles_list.append(self.style_mapping(s))\n\n            styles = styles_list\n        else:\n            noise_batch = None\n\n        # update w_avg during training, if need\n        if hasattr(self, 'w_avg') and self.training and update_ws:\n            # only update w_avg with the first style code\n            self.w_avg.copy_(styles[0].detach().mean(\n                dim=0).lerp(self.w_avg, self.w_avg_beta))\n\n        if injected_noise is None:\n            if randomize_noise:\n                injected_noise = [None] * self.num_injected_noises\n            else:\n                injected_noise = [\n                    getattr(self, f'injected_noise_{i}')\n                    for i in range(self.num_injected_noises)\n                ]\n        # use truncation trick\n        if truncation < 1:\n            style_t = []\n            # calculate truncation latent on the fly\n            if truncation_latent is None and not hasattr(\n                    self, 'truncation_latent'):\n                self.truncation_latent = self.get_mean_latent()\n                truncation_latent = self.truncation_latent\n            elif truncation_latent is None and hasattr(self,\n                                                       'truncation_latent'):\n                truncation_latent = self.truncation_latent\n\n            for style in styles:\n                style_t.append(truncation_latent + truncation *\n                               (style - truncation_latent))\n\n            styles = style_t\n        # no style mixing\n        if len(styles) < 2:\n            inject_index = self.num_latents\n\n            if styles[0].ndim < 3:\n                latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n\n            else:\n                latent = styles[0]\n        # style mixing\n        else:\n            if inject_index is None:\n                inject_index = random.randint(1, self.num_latents - 1)\n\n            latent = styles[0].unsqueeze(1).repeat(1, inject_index, 1)\n            latent2 = styles[1].unsqueeze(1).repeat(\n                1, self.num_latents - inject_index, 1)\n\n            latent = torch.cat([latent, latent2], 1)\n\n        if return_latent_only:\n            return latent\n\n        feats = []\n        with autocast(enabled=self.fp16_enabled):\n            # 4x4 stage\n            out = self.constant_input(latent)\n            if self.fp16_enabled:\n                out = out.to(torch.float16)\n            out = self.conv1(\n                out,\n                latent[:, 0],\n                noise=injected_noise[0],\n                add_noise=add_noise)\n            feats.append(out)\n            skip = self.to_rgb1(out, latent[:, 1])\n\n            _index = 1\n\n            # 8x8 ---> higher resolutions\n            for up_conv, conv, noise1, noise2, to_rgb in zip(\n                    self.convs[::2], self.convs[1::2], injected_noise[1::2],\n                    injected_noise[2::2], self.to_rgbs):\n                out = up_conv(\n                    out, latent[:, _index], noise=noise1, add_noise=add_noise)\n                out = conv(\n                    out,\n                    latent[:, _index + 1],\n                    noise=noise2,\n                    add_noise=add_noise)\n                feats.append(out)\n                skip = to_rgb(out, latent[:, _index + 2], skip)\n                _index += 2\n\n        # make sure the output image is torch.float32 to avoid RunTime Error\n        # in other modules\n        img = skip.to(torch.float32)\n        if self.bgr2rgb:\n            img = torch.flip(img, dims=[1])\n\n        if return_latents or return_noise:\n            if return_features:\n                output_dict = dict(\n                    fake_img=img,\n                    latent=latent,\n                    inject_index=inject_index,\n                    noise_batch=noise_batch,\n                    feats=feats[feat_idx])\n                return output_dict\n\n            output_dict = dict(\n                fake_img=img,\n                latent=latent,\n                inject_index=inject_index,\n                noise_batch=noise_batch)\n            return output_dict\n\n        return img\n"
  },
  {
    "path": "mmagic/models/editors/stylegan2/stylegan2_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmengine\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.ops.fused_bias_leakyrelu import (FusedBiasLeakyReLU,\n                                           fused_bias_leakyrelu)\nfrom mmcv.ops.upfirdn2d import upfirdn2d\nfrom mmengine.dist import get_dist_info\nfrom mmengine.model import BaseModule\nfrom mmengine.runner.amp import autocast\n\nfrom mmagic.models.archs import AllGatherLayer\nfrom ..pggan import EqualizedLRConvModule, equalized_lr\nfrom ..stylegan1 import Blur, EqualLinearActModule, NoiseInjection, make_kernel\n\ntry:\n    from mmcv.ops import conv2d, conv_transpose2d\nexcept ImportError:\n    import torch.nn.functional as F\n    conv2d = F.conv2d\n    conv_transpose2d = F.conv_transpose2d\n    print('Warning: mmcv.ops.conv2d, mmcv.ops.conv_transpose2d'\n          ' and mmcv.ops.upfirdn2d are not available.')\n\n\nclass _FusedBiasLeakyReLU(FusedBiasLeakyReLU):\n    \"\"\"Wrap FusedBiasLeakyReLU to support FP16 training.\"\"\"\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, ...).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        return fused_bias_leakyrelu(x, self.bias.to(x.dtype),\n                                    self.negative_slope, self.scale)\n\n\nclass UpsampleUpFIRDn(BaseModule):\n    \"\"\"UpFIRDn for Upsampling.\n\n    This module is used in the ``to_rgb`` layers in StyleGAN2 for upsampling\n    the images.\n\n    Args:\n        kernel (Array): Blur kernel/filter used in UpFIRDn.\n        factor (int, optional): Upsampling factor. Defaults to 2.\n    \"\"\"\n\n    def __init__(self, kernel, factor=2):\n        super().__init__()\n\n        self.factor = factor\n        kernel = make_kernel(kernel) * (factor**2)\n        self.register_buffer('kernel', kernel)\n\n        p = kernel.shape[0] - factor\n\n        pad0 = (p + 1) // 2 + factor - 1\n        pad1 = p // 2\n\n        self.pad = (pad0, pad1, pad0, pad1)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        out = upfirdn2d(\n            x,\n            self.kernel.to(x.dtype),\n            up=self.factor,\n            down=1,\n            padding=self.pad)\n\n        return out\n\n\nclass DownsampleUpFIRDn(BaseModule):\n    \"\"\"UpFIRDn for Downsampling.\n\n    This module is mentioned in StyleGAN2 for dowampling the feature maps.\n\n    Args:\n        kernel (Array): Blur kernel/filter used in UpFIRDn.\n        factor (int, optional): Downsampling factor. Defaults to 2.\n    \"\"\"\n\n    def __init__(self, kernel, factor=2):\n        super().__init__()\n\n        self.factor = factor\n        kernel = make_kernel(kernel)\n        self.register_buffer('kernel', kernel)\n\n        p = kernel.shape[0] - factor\n\n        pad0 = (p + 1) // 2\n        pad1 = p // 2\n\n        self.pad = (pad0, pad1)\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        out = upfirdn2d(\n            input,\n            self.kernel.to(input.dtype),\n            up=1,\n            down=self.factor,\n            padding=self.pad)\n\n        return out\n\n\nclass ModulatedConv2d(BaseModule):\n    r\"\"\"Modulated Conv2d in StyleGANv2.\n\n    This module implements the modulated convolution layers proposed in\n    StyleGAN2. Details can be found in Analyzing and Improving the Image\n    Quality of StyleGAN, CVPR2020.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        style_channels (int): Channels for the style codes.\n        demodulate (bool, optional): Whether to adopt demodulation.\n            Defaults to True.\n        upsample (bool, optional): Whether to adopt upsampling in features.\n            Defaults to False.\n        downsample (bool, optional): Whether to adopt downsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        equalized_lr_cfg (dict | None, optional): Configs for equalized lr.\n            Defaults to dict(mode='fan_in', lr_mul=1., gain=1.).\n        style_mod_cfg (dict, optional): Configs for style modulation module.\n            Defaults to dict(bias_init=1.).\n        style_bias (float, optional): Bias value for style code.\n            Defaults to 0..\n        eps (float, optional): Epsilon value to avoid computation error.\n            Defaults to 1e-8.\n    \"\"\"\n\n    def __init__(\n            self,\n            in_channels,\n            out_channels,\n            kernel_size,\n            style_channels,\n            demodulate=True,\n            upsample=False,\n            downsample=False,\n            blur_kernel=[1, 3, 3, 1],\n            equalized_lr_cfg=dict(mode='fan_in', lr_mul=1., gain=1.),\n            style_mod_cfg=dict(bias_init=1.),\n            style_bias=0.,\n            padding=None,  # self define padding\n            eps=1e-8,\n            fp16_enabled=False):\n        super().__init__()\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.kernel_size = kernel_size\n        self.style_channels = style_channels\n        self.demodulate = demodulate\n        self.fp16_enabled = fp16_enabled\n        # sanity check for kernel size\n        assert isinstance(self.kernel_size,\n                          int) and (self.kernel_size >= 1\n                                    and self.kernel_size % 2 == 1)\n        self.upsample = upsample\n        self.downsample = downsample\n        self.style_bias = style_bias\n        self.eps = eps\n\n        # build style modulation module\n        style_mod_cfg = dict() if style_mod_cfg is None else style_mod_cfg\n\n        self.style_modulation = EqualLinearActModule(style_channels,\n                                                     in_channels,\n                                                     **style_mod_cfg)\n        # set lr_mul for conv weight\n        lr_mul_ = 1.\n        if equalized_lr_cfg is not None:\n            lr_mul_ = equalized_lr_cfg.get('lr_mul', 1.)\n        self.weight = nn.Parameter(\n            torch.randn(1, out_channels, in_channels, kernel_size,\n                        kernel_size).div_(lr_mul_))\n\n        # build blurry layer for upsampling\n        if upsample:\n            factor = 2\n            p = (len(blur_kernel) - factor) - (kernel_size - 1)\n            pad0 = (p + 1) // 2 + factor - 1\n            pad1 = p // 2 + 1\n            self.blur = Blur(blur_kernel, (pad0, pad1), upsample_factor=factor)\n        # build blurry layer for downsampling\n        if downsample:\n            factor = 2\n            p = (len(blur_kernel) - factor) + (kernel_size - 1)\n            pad0 = (p + 1) // 2\n            pad1 = p // 2\n            self.blur = Blur(blur_kernel, pad=(pad0, pad1))\n\n        # add equalized_lr hook for conv weight\n        if equalized_lr_cfg is not None:\n            equalized_lr(self, **equalized_lr_cfg)\n\n        self.padding = padding if padding else (kernel_size // 2)\n\n    def forward(self, x, style, input_gain=None):\n        n, c, h, w = x.shape\n        weight = self.weight\n        # Pre-normalize inputs to avoid FP16 overflow.\n        # if x.dtype == torch.float16 and self.demodulate:\n        if self.fp16_enabled and self.demodulate:\n            weight = weight * (\n                1 / np.sqrt(\n                    self.in_channels * self.kernel_size * self.kernel_size) /\n                weight.norm(float('inf'), dim=[1, 2, 3], keepdim=True)\n            )  # max_Ikk\n            style = style / style.norm(\n                float('inf'), dim=1, keepdim=True)  # max_I\n        with autocast(enabled=self.fp16_enabled):\n            # process style code\n            style = self.style_modulation(style).view(n, 1, c, 1,\n                                                      1) + self.style_bias\n            # combine weight and style\n            weight = weight * style\n            if self.demodulate:\n                demod = torch.rsqrt(weight.pow(2).sum([2, 3, 4]) + self.eps)\n                weight = weight * demod.view(n, self.out_channels, 1, 1, 1)\n\n            if input_gain is not None:\n                # input_gain shape [batch, in_ch]\n                input_gain = input_gain.expand(n, self.in_channels)\n                # weight shape [batch, out_ch, in_ch, kernel_size, kernel_size]\n                weight = weight * input_gain.unsqueeze(1).unsqueeze(\n                    3).unsqueeze(4)\n\n            weight = weight.view(n * self.out_channels, c, self.kernel_size,\n                                 self.kernel_size)\n\n            if self.fp16_enabled:\n                weight = weight.to(torch.float16)\n                x = x.to(torch.float16)\n\n            if self.upsample:\n                x = x.reshape(1, n * c, h, w)\n                weight = weight.view(n, self.out_channels, c, self.kernel_size,\n                                     self.kernel_size)\n                weight = weight.transpose(1,\n                                          2).reshape(n * c, self.out_channels,\n                                                     self.kernel_size,\n                                                     self.kernel_size)\n                x = conv_transpose2d(x, weight, padding=0, stride=2, groups=n)\n                x = x.reshape(n, self.out_channels, *x.shape[-2:])\n                x = self.blur(x)\n\n            elif self.downsample:\n                x = self.blur(x)\n                x = x.view(1, n * self.in_channels, *x.shape[-2:])\n                x = conv2d(x, weight, stride=2, padding=0, groups=n)\n                x = x.view(n, self.out_channels, *x.shape[-2:])\n            else:\n                x = x.reshape(1, n * c, h, w)\n                x = conv2d(x, weight, stride=1, padding=self.padding, groups=n)\n                x = x.view(n, self.out_channels, *x.shape[-2:])\n        return x\n\n\nclass ModulatedStyleConv(BaseModule):\n    \"\"\"Modulated Style Convolution.\n\n    In this module, we integrate the modulated conv2d, noise injector and\n    activation layers into together.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        style_channels (int): Channels for the style codes.\n        demodulate (bool, optional): Whether to adopt demodulation.\n            Defaults to True.\n        upsample (bool, optional): Whether to adopt upsampling in features.\n            Defaults to False.\n        downsample (bool, optional): Whether to adopt downsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        equalized_lr_cfg (dict | None, optional): Configs for equalized lr.\n            Defaults to dict(mode='fan_in', lr_mul=1., gain=1.).\n        style_mod_cfg (dict, optional): Configs for style modulation module.\n            Defaults to dict(bias_init=1.).\n        style_bias (float, optional): Bias value for style code.\n            Defaults to ``0.``.\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        conv_clamp (float, optional): Clamp the convolutional layer results to\n            avoid gradient overflow. Defaults to `256.0`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 style_channels,\n                 upsample=False,\n                 blur_kernel=[1, 3, 3, 1],\n                 demodulate=True,\n                 style_mod_cfg=dict(bias_init=1.),\n                 style_bias=0.,\n                 fp16_enabled=False,\n                 conv_clamp=256,\n                 fixed_noise=False):\n        super().__init__()\n\n        # add support for fp16\n        self.fp16_enabled = fp16_enabled\n        self.conv_clamp = float(conv_clamp)\n\n        self.conv = ModulatedConv2d(\n            in_channels,\n            out_channels,\n            kernel_size,\n            style_channels,\n            demodulate=demodulate,\n            upsample=upsample,\n            blur_kernel=blur_kernel,\n            style_mod_cfg=style_mod_cfg,\n            style_bias=style_bias,\n            fp16_enabled=fp16_enabled)\n\n        self.noise_injector = NoiseInjection(fixed_noise=fixed_noise)\n        self.activate = _FusedBiasLeakyReLU(out_channels)\n\n    def forward(self,\n                x,\n                style,\n                noise=None,\n                add_noise=True,\n                return_noise=False):\n        \"\"\"Forward Function.\n\n        Args:\n            x ([Tensor): Input features with shape of (N, C, H, W).\n            style (Tensor): Style latent with shape of (N, C).\n            noise (Tensor, optional): Noise for injection. Defaults to None.\n            add_noise (bool, optional): Whether apply noise injection to\n                feature. Defaults to True.\n            return_noise (bool, optional): Whether to return noise tensors.\n                Defaults to False.\n\n        Returns:\n            Tensor: Output features with shape of (N, C, H, W)\n        \"\"\"\n        with autocast(enabled=self.fp16_enabled):\n            out = self.conv(x, style)\n\n            if add_noise:\n                if return_noise:\n                    out, noise = self.noise_injector(\n                        out, noise=noise, return_noise=return_noise)\n                else:\n                    out = self.noise_injector(\n                        out, noise=noise, return_noise=return_noise)\n\n            # TODO: FP16 in activate layers\n            out = self.activate(out)\n            if self.fp16_enabled:\n                out = torch.clamp(\n                    out, min=-self.conv_clamp, max=self.conv_clamp)\n\n        if return_noise:\n            return out, noise\n\n        return out\n\n\nclass ModulatedToRGB(BaseModule):\n    \"\"\"To RGB layer.\n\n    This module is designed to output image tensor in StyleGAN2.\n\n    Args:\n        in_channels (int): Input channels.\n        style_channels (int): Channels for the style codes.\n        out_channels (int, optional): Output channels. Defaults to 3.\n        upsample (bool, optional): Whether to adopt upsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        style_mod_cfg (dict, optional): Configs for style modulation module.\n            Defaults to dict(bias_init=1.).\n        style_bias (float, optional): Bias value for style code.\n            Defaults to 0..\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        conv_clamp (float, optional): Clamp the convolutional layer results to\n            avoid gradient overflow. Defaults to `256.0`.\n        out_fp32 (bool, optional): Whether to convert the output feature map to\n            `torch.float32`. Defaults to `True`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 style_channels,\n                 out_channels=3,\n                 upsample=True,\n                 blur_kernel=[1, 3, 3, 1],\n                 style_mod_cfg=dict(bias_init=1.),\n                 style_bias=0.,\n                 fp16_enabled=False,\n                 conv_clamp=256,\n                 out_fp32=True):\n        super().__init__()\n\n        if upsample:\n            self.upsample = UpsampleUpFIRDn(blur_kernel)\n\n        # add support for fp16\n        self.fp16_enabled = fp16_enabled\n        self.conv_clamp = float(conv_clamp)\n\n        self.conv = ModulatedConv2d(\n            in_channels,\n            out_channels=out_channels,\n            kernel_size=1,\n            style_channels=style_channels,\n            demodulate=False,\n            style_mod_cfg=style_mod_cfg,\n            style_bias=style_bias,\n            fp16_enabled=fp16_enabled)\n\n        self.bias = nn.Parameter(torch.zeros(1, out_channels, 1, 1))\n\n        # enforece the output to be fp32 (follow Tero's implementation)\n        self.out_fp32 = out_fp32\n\n    # @auto_fp16(apply_to=('x', 'style'))\n    def forward(self, x, style, skip=None):\n        \"\"\"Forward Function.\n\n        Args:\n            x ([Tensor): Input features with shape of (N, C, H, W).\n            style (Tensor): Style latent with shape of (N, C).\n            skip (Tensor, optional): Tensor for skip link. Defaults to None.\n\n        Returns:\n            Tensor: Output features with shape of (N, C, H, W)\n        \"\"\"\n        with autocast(enabled=self.fp16_enabled):\n            out = self.conv(x, style)\n            out = out + self.bias.to(x.dtype)\n\n            if self.fp16_enabled:\n                out = torch.clamp(\n                    out, min=-self.conv_clamp, max=self.conv_clamp)\n\n            # Here, Tero adopts FP16 at `skip`.\n            if skip is not None:\n                if hasattr(self, 'upsample'):\n                    skip = self.upsample(skip)\n                out = out + skip\n        if self.out_fp32:\n            out = out.to(torch.float32)\n        return out\n\n\nclass ConvDownLayer(nn.Sequential):\n    \"\"\"Convolution and Downsampling layer.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        downsample (bool, optional): Whether to adopt downsampling in features.\n            Defaults to False.\n        blur_kernel (list[int], optional): Blurry kernel.\n            Defaults to [1, 3, 3, 1].\n        bias (bool, optional): Whether to use bias parameter. Defaults to True.\n        act_cfg (dict, optional): Activation configs.\n            Defaults to dict(type='fused_bias').\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        conv_clamp (float, optional): Clamp the convolutional layer results to\n            avoid gradient overflow. Defaults to `256.0`.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 kernel_size,\n                 downsample=False,\n                 blur_kernel=[1, 3, 3, 1],\n                 bias=True,\n                 act_cfg=dict(type='fused_bias'),\n                 fp16_enabled=False,\n                 conv_clamp=256.):\n\n        self.fp16_enabled = fp16_enabled\n        self.conv_clamp = float(conv_clamp)\n        layers = []\n\n        if downsample:\n            factor = 2\n            p = (len(blur_kernel) - factor) + (kernel_size - 1)\n            pad0 = (p + 1) // 2\n            pad1 = p // 2\n\n            layers.append(Blur(blur_kernel, pad=(pad0, pad1)))\n\n            stride = 2\n            self.padding = 0\n        else:\n            stride = 1\n            self.padding = kernel_size // 2\n\n        self.with_fused_bias = act_cfg is not None and act_cfg.get(\n            'type') == 'fused_bias'\n        if self.with_fused_bias:\n            conv_act_cfg = None\n        else:\n            conv_act_cfg = act_cfg\n        layers.append(\n            EqualizedLRConvModule(\n                in_channels,\n                out_channels,\n                kernel_size,\n                padding=self.padding,\n                stride=stride,\n                bias=bias and not self.with_fused_bias,\n                norm_cfg=None,\n                act_cfg=conv_act_cfg,\n                equalized_lr_cfg=dict(mode='fan_in', gain=1.)))\n        if self.with_fused_bias:\n            layers.append(_FusedBiasLeakyReLU(out_channels))\n\n        super(ConvDownLayer, self).__init__(*layers)\n\n    # @auto_fp16(apply_to=('x', ))\n    def forward(self, x):\n        with autocast(enabled=self.fp16_enabled):\n            x = super().forward(x)\n            if self.fp16_enabled:\n                x = torch.clamp(x, min=-self.conv_clamp, max=self.conv_clamp)\n        return x\n\n\nclass ResBlock(BaseModule):\n    \"\"\"Residual block used in the discriminator of StyleGAN2.\n\n    Args:\n        in_channels (int): Input channels.\n        out_channels (int): Output channels.\n        kernel_size (int): Kernel size, same as :obj:`nn.Con2d`.\n        fp16_enabled (bool, optional): Whether to use fp16 training in this\n            module. Defaults to False.\n        convert_input_fp32 (bool, optional): Whether to convert input type to\n            fp32 if not `fp16_enabled`. This argument is designed to deal with\n            the cases where some modules are run in FP16 and others in FP32.\n            Defaults to True.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 blur_kernel=[1, 3, 3, 1],\n                 fp16_enabled=False,\n                 convert_input_fp32=True):\n        super().__init__()\n\n        self.fp16_enabled = fp16_enabled\n        self.convert_input_fp32 = convert_input_fp32\n\n        self.conv1 = ConvDownLayer(\n            in_channels,\n            in_channels,\n            3,\n            fp16_enabled=fp16_enabled,\n            blur_kernel=blur_kernel)\n        self.conv2 = ConvDownLayer(\n            in_channels,\n            out_channels,\n            3,\n            downsample=True,\n            fp16_enabled=fp16_enabled,\n            blur_kernel=blur_kernel)\n\n        self.skip = ConvDownLayer(\n            in_channels,\n            out_channels,\n            1,\n            downsample=True,\n            act_cfg=None,\n            bias=False,\n            fp16_enabled=fp16_enabled,\n            blur_kernel=blur_kernel)\n\n    def forward(self, input):\n        \"\"\"Forward function.\n\n        Args:\n            input (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map.\n        \"\"\"\n        # TODO: study whether this explicit datatype transfer will harm the\n        # apex training speed\n        if not self.fp16_enabled and self.convert_input_fp32:\n            input = input.to(torch.float32)\n\n        with autocast(enabled=self.fp16_enabled):\n            out = self.conv1(input)\n            out = self.conv2(out)\n\n            skip = self.skip(input)\n            out = (out + skip) / np.sqrt(2)\n\n        return out\n\n\nclass ModMBStddevLayer(BaseModule):\n    \"\"\"Modified MiniBatch Stddev Layer.\n\n    This layer is modified from ``MiniBatchStddevLayer`` used in PGGAN. In\n    StyleGAN2, the authors add a new feature, `channel_groups`, into this\n    layer.\n\n    Note that to accelerate the training procedure, we also add a new feature\n    of ``sync_std`` to achieve multi-nodes/machine training. This feature is\n    still in beta version and we have tested it on 256 scales.\n\n    Args:\n        group_size (int, optional): The size of groups in batch dimension.\n            Defaults to 4.\n        channel_groups (int, optional): The size of groups in channel\n            dimension. Defaults to 1.\n        sync_std (bool, optional): Whether to use synchronized std feature.\n            Defaults to False.\n        sync_groups (int | None, optional): The size of groups in node\n            dimension. Defaults to None.\n        eps (float, optional): Epsilon value to avoid computation error.\n            Defaults to 1e-8.\n    \"\"\"\n\n    def __init__(self,\n                 group_size=4,\n                 channel_groups=1,\n                 sync_std=False,\n                 sync_groups=None,\n                 eps=1e-8):\n        super().__init__()\n        self.group_size = group_size\n        self.eps = eps\n        self.channel_groups = channel_groups\n        self.sync_std = sync_std\n        self.sync_groups = group_size if sync_groups is None else sync_groups\n\n        if self.sync_std:\n            assert torch.distributed.is_initialized(\n            ), 'Only in distributed training can the sync_std be activated.'\n            mmengine.print_log('Adopt synced minibatch stddev layer', 'mmagic')\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input feature map with shape of (N, C, H, W).\n\n        Returns:\n            Tensor: Output feature map with shape of (N, C+1, H, W).\n        \"\"\"\n\n        if self.sync_std:\n            # concatenate all features\n            all_features = torch.cat(AllGatherLayer.apply(x), dim=0)\n            # get the exact features we need in calculating std-dev\n            rank, ws = get_dist_info()\n            local_bs = all_features.shape[0] // ws\n            start_idx = local_bs * rank\n            # avoid the case where start idx near the tail of features\n            if start_idx + self.sync_groups > all_features.shape[0]:\n                start_idx = all_features.shape[0] - self.sync_groups\n            end_idx = min(local_bs * rank + self.sync_groups,\n                          all_features.shape[0])\n\n            x = all_features[start_idx:end_idx]\n\n        # batch size should be smaller than or equal to group size. Otherwise,\n        # batch size should be divisible by the group size.\n        assert x.shape[\n            0] <= self.group_size or x.shape[0] % self.group_size == 0, (\n                'Batch size be smaller than or equal '\n                'to group size. Otherwise,'\n                ' batch size should be divisible by the group size.'\n                f'But got batch size {x.shape[0]},'\n                f' group size {self.group_size}')\n        assert x.shape[1] % self.channel_groups == 0, (\n            '\"channel_groups\" must be divided by the feature channels. '\n            f'channel_groups: {self.channel_groups}, '\n            f'feature channels: {x.shape[1]}')\n\n        n, c, h, w = x.shape\n        group_size = min(n, self.group_size)\n        # [G, M, Gc, C', H, W]\n        y = torch.reshape(x, (group_size, -1, self.channel_groups,\n                              c // self.channel_groups, h, w))\n        y = torch.var(y, dim=0, unbiased=False)\n        y = torch.sqrt(y + self.eps)\n        # [M, 1, 1, 1]\n        y = y.mean(dim=(2, 3, 4), keepdim=True).squeeze(2)\n        y = y.repeat(group_size, 1, h, w)\n        return torch.cat([x, y], dim=1)\n"
  },
  {
    "path": "mmagic/models/editors/stylegan3/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .stylegan3 import StyleGAN3\nfrom .stylegan3_generator import StyleGAN3Generator\nfrom .stylegan3_modules import SynthesisInput, SynthesisLayer, SynthesisNetwork\n\n__all__ = [\n    'StyleGAN3',\n    'StyleGAN3Generator',\n    'SynthesisInput',\n    'SynthesisLayer',\n    'SynthesisNetwork',\n]\n"
  },
  {
    "path": "mmagic/models/editors/stylegan3/stylegan3.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmengine import Config, MessageHub\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ...utils import get_module_device, get_valid_num_batches\nfrom ..stylegan2 import StyleGAN2\nfrom .stylegan3_utils import (apply_fractional_pseudo_rotation,\n                              apply_fractional_rotation,\n                              apply_fractional_translation,\n                              apply_integer_translation, rotation_matrix)\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass StyleGAN3(StyleGAN2):\n    \"\"\"Implementation of `Alias-Free Generative Adversarial Networks`. # noqa.\n\n    Paper link: https://nvlabs-fi-cdn.nvidia.com/stylegan3/stylegan3-paper.pdf # noqa\n\n    Detailed architecture can be found in\n\n    :class:`~mmagic.models.editors.stylegan3.StyleGAN3Generator`\n    and\n    :class:`~mmagic.models.editors.stylegan2.StyleGAN2Discriminator`\n    \"\"\"\n\n    def __init__(self,\n                 generator: ModelType,\n                 discriminator: Optional[ModelType] = None,\n                 data_preprocessor: Optional[Union[dict, Config]] = None,\n                 generator_steps: int = 1,\n                 discriminator_steps: int = 1,\n                 forward_kwargs: Optional[Dict] = None,\n                 ema_config: Optional[Dict] = None,\n                 loss_config=dict()):\n        super().__init__(generator, discriminator, data_preprocessor,\n                         generator_steps, discriminator_steps, ema_config,\n                         loss_config)\n\n        self.noise_size = getattr(self.generator, 'noise_size', 512)\n        forward_kwargs = dict() if forward_kwargs is None else forward_kwargs\n        disc_default_forward_kwargs = dict(update_emas=True, force_fp32=False)\n        gen_default_forward_kwargs = dict(force_fp32=False)\n        forward_kwargs.setdefault('disc', disc_default_forward_kwargs)\n        forward_kwargs.setdefault('gen', gen_default_forward_kwargs)\n        self.forward_kwargs = forward_kwargs\n\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n        # hard code to compute equivarience\n        if 'mode' in inputs_dict and 'eq_cfg' in inputs_dict['mode']:\n            batch_size = get_valid_num_batches(inputs_dict, data_samples)\n            outputs = self.sample_equivarience_pairs(\n                batch_size,\n                sample_mode=inputs_dict['mode']['sample_mode'],\n                eq_cfg=inputs_dict['mode']['eq_cfg'],\n                sample_kwargs=inputs_dict['mode']['sample_kwargs'])\n        else:\n            outputs = self(inputs_dict, data_samples)\n        return outputs\n\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: A list of ``DataSample`` contain generated results.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        inputs_dict, data_samples = data['inputs'], data['data_samples']\n        # hard code to compute equivarience\n        if 'mode' in inputs_dict and 'eq_cfg' in inputs_dict['mode']:\n            batch_size = get_valid_num_batches(inputs_dict, data_samples)\n            outputs = self.sample_equivarience_pairs(\n                batch_size,\n                sample_mode=inputs_dict['mode']['sample_mode'],\n                eq_cfg=inputs_dict['mode']['eq_cfg'],\n                sample_kwargs=inputs_dict['mode']['sample_kwargs'])\n        else:\n            outputs = self(inputs_dict, data_samples)\n        return outputs\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(\n                noise_batch, return_noise=False, **self.forward_kwargs['disc'])\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(disc_pred_fake,\n                                                 disc_pred_real, real_imgs)\n        optimizer_wrapper.update_params(parsed_losses)\n        # save ada info\n        message_hub = MessageHub.get_current_instance()\n        message_hub.update_info('disc_pred_real', disc_pred_real)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(\n            noise, return_noise=False, **self.forward_kwargs['gen'])\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake, num_batches)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n\n    def sample_equivarience_pairs(self,\n                                  batch_size,\n                                  sample_mode='ema',\n                                  eq_cfg=dict(\n                                      compute_eqt_int=False,\n                                      compute_eqt_frac=False,\n                                      compute_eqr=False,\n                                      translate_max=0.125,\n                                      rotate_max=1),\n                                  sample_kwargs=dict()):\n        generator = self.generator if (sample_mode\n                                       == 'orig') else self.generator_ema\n        if hasattr(generator, 'module'):\n            generator = generator.module\n\n        device = get_module_device(generator)\n        identity_matrix = torch.eye(3, device=device)\n\n        # Run mapping network.\n        z = torch.randn([batch_size, self.noise_size], device=device)\n        ws = generator.style_mapping(z=z)\n        transform_matrix = getattr(\n            getattr(getattr(generator, 'synthesis', None), 'input', None),\n            'transform', None)\n\n        # Generate reference image.\n        transform_matrix[:] = identity_matrix\n        orig = generator.synthesis(ws=ws, **sample_kwargs)\n\n        batch_sample = [DataSample() for _ in range(batch_size)]\n        # Integer translation (EQ-T).\n        if eq_cfg['compute_eqt_int']:\n            t = (torch.rand(2, device=device) * 2 -\n                 1) * eq_cfg['translate_max']\n            t = (t * generator.out_size).round() / generator.out_size\n            transform_matrix[:] = identity_matrix\n            transform_matrix[:2, 2] = -t\n            img = generator.synthesis(ws=ws, **sample_kwargs)\n            ref, mask = apply_integer_translation(orig, t[0], t[1])\n\n            diff = (ref - img).square() * mask\n            for idx in range(batch_size):\n                data_sample = batch_sample[idx]\n                setattr(data_sample, 'eqt_int',\n                        DataSample(diff=diff, mask=mask))\n\n        # Fractional translation (EQ-T_frac).\n        if eq_cfg['compute_eqt_frac']:\n            t = (torch.rand(2, device=device) * 2 -\n                 1) * eq_cfg['translate_max']\n            transform_matrix[:] = identity_matrix\n            transform_matrix[:2, 2] = -t\n            img = generator.synthesis(ws=ws, **sample_kwargs)\n            ref, mask = apply_fractional_translation(orig, t[0], t[1])\n\n            diff = (ref - img).square() * mask\n            for idx in range(batch_size):\n                data_sample = batch_sample[idx]\n                setattr(data_sample, 'eqt_frac',\n                        DataSample(diff=diff, mask=mask))\n\n        # Rotation (EQ-R).\n        if eq_cfg['compute_eqr']:\n            angle = (torch.rand([], device=device) * 2 - 1) * (\n                eq_cfg['rotate_max'] * np.pi)\n            transform_matrix[:] = rotation_matrix(-angle)\n            img = generator.synthesis(ws=ws, **sample_kwargs)\n            ref, ref_mask = apply_fractional_rotation(orig, angle)\n            pseudo, pseudo_mask = apply_fractional_pseudo_rotation(img, angle)\n            mask = ref_mask * pseudo_mask\n\n            diff = (ref - pseudo).square() * mask\n            for idx in range(batch_size):\n                data_sample = batch_sample[idx]\n                setattr(data_sample, 'eqr', DataSample(diff=diff, mask=mask))\n\n        return batch_sample\n"
  },
  {
    "path": "mmagic/models/editors/stylegan3/stylegan3_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport mmengine\nimport torch\nfrom mmengine.model import BaseModule\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\n\nfrom mmagic.registry import MODELS\nfrom ...utils import get_module_device\nfrom ..stylegan1 import get_mean_latent\n\n\n@MODELS.register_module('StyleGANv3Generator')\n@MODELS.register_module()\nclass StyleGAN3Generator(BaseModule):\n    \"\"\"StyleGAN3 Generator.\n\n    In StyleGAN3, we make several changes to StyleGANv2's generator which\n    include transformed fourier features, filtered nonlinearity and\n    non-critical sampling, etc. More details can be found in: Alias-Free\n    Generative Adversarial Networks NeurIPS'2021.\n\n    Ref: https://github.com/NVlabs/stylegan3\n\n    Args:\n        out_size (int): The output size of the StyleGAN3 generator.\n        style_channels (int): The number of channels for style code.\n        img_channels (int): The number of output's channels.\n        noise_size (int, optional): Size of the input noise vector.\n            Defaults to 512.\n        rgb2bgr (bool, optional): Whether to reformat the output channels\n                with order `bgr`. We provide several pre-trained StyleGAN3\n                weights whose output channels order is `rgb`. You can set\n                this argument to True to use the weights.\n        pretrained (str | dict, optional): Path for the pretrained model or\n            dict containing information for pretrained models whose necessary\n            key is 'ckpt_path'. Besides, you can also provide 'prefix' to load\n            the generator part from the whole state dict. Defaults to None.\n        synthesis_cfg (dict, optional): Config for synthesis network. Defaults\n            to dict(type='SynthesisNetwork').\n        mapping_cfg (dict, optional): Config for mapping network. Defaults to\n            dict(type='MappingNetwork').\n    \"\"\"\n\n    def __init__(self,\n                 out_size,\n                 style_channels,\n                 img_channels,\n                 noise_size=512,\n                 rgb2bgr=False,\n                 pretrained=None,\n                 synthesis_cfg=dict(type='SynthesisNetwork'),\n                 mapping_cfg=dict(type='MappingNetwork')):\n        super().__init__()\n        self.noise_size = noise_size\n        self.style_channels = style_channels\n        self.out_size = out_size\n        self.img_channels = img_channels\n        self.rgb2bgr = rgb2bgr\n\n        self._synthesis_cfg = deepcopy(synthesis_cfg)\n        self._synthesis_cfg.setdefault('style_channels', style_channels)\n        self._synthesis_cfg.setdefault('out_size', out_size)\n        self._synthesis_cfg.setdefault('img_channels', img_channels)\n        self.synthesis = MODELS.build(self._synthesis_cfg)\n\n        self.num_ws = self.synthesis.num_ws\n        self._mapping_cfg = deepcopy(mapping_cfg)\n        self._mapping_cfg.setdefault('noise_size', noise_size)\n        self._mapping_cfg.setdefault('style_channels', style_channels)\n        self._mapping_cfg.setdefault('num_ws', self.num_ws)\n        self.style_mapping = MODELS.build(self._mapping_cfg)\n\n        if pretrained is not None:\n            self._load_pretrained_model(**pretrained)\n\n    def _load_pretrained_model(self,\n                               ckpt_path,\n                               prefix='',\n                               map_location='cpu',\n                               strict=True):\n        state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                  map_location)\n        self.load_state_dict(state_dict, strict=strict)\n        mmengine.print_log(f'Load pretrained model from {ckpt_path}')\n\n    def forward(self,\n                noise,\n                num_batches=0,\n                input_is_latent=False,\n                truncation=1,\n                num_truncation_layer=None,\n                update_emas=False,\n                force_fp32=True,\n                return_noise=False,\n                return_latents=False):\n        \"\"\"Forward Function for stylegan3.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            num_batches (int, optional): The number of batch size.\n                Defaults to 0.\n            input_is_latent (bool, optional): If `True`, the input tensor is\n                the latent tensor. Defaults to False.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            num_truncation_layer (int, optional): Number of layers use\n                truncated latent. Defaults to None.\n            update_emas (bool, optional): Whether update moving average of\n                mean latent. Defaults to False.\n            force_fp32 (bool, optional): Force fp32 ignore the weights.\n                Defaults to True.\n            return_noise (bool, optional): If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n            return_latents (bool, optional): If True, ``latent`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n        Returns:\n            torch.Tensor | dict: Generated image tensor or dictionary \\\n                containing more data.\n        \"\"\"\n        # if input is latent, set noise size as the style_channels\n        noise_size = (\n            self.style_channels if input_is_latent else self.noise_size)\n\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, noise_size))\n\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, noise_size))\n\n        device = get_module_device(self)\n        noise_batch = noise_batch.to(device)\n\n        if input_is_latent:\n            ws = noise_batch.unsqueeze(1).repeat([1, self.num_ws, 1])\n        else:\n            ws = self.style_mapping(\n                noise_batch,\n                truncation=truncation,\n                num_truncation_layer=num_truncation_layer,\n                update_emas=update_emas)\n        out_img = self.synthesis(\n            ws, update_emas=update_emas, force_fp32=force_fp32)\n\n        if self.rgb2bgr:\n            out_img = out_img[:, [2, 1, 0], ...]\n\n        if return_noise or return_latents:\n            output = dict(fake_img=out_img, noise_batch=noise_batch, latent=ws)\n            return output\n\n        return out_img\n\n    def get_mean_latent(self, num_samples=4096, **kwargs):\n        \"\"\"Get mean latent of W space in this generator.\n\n        Args:\n            num_samples (int, optional): Number of sample times. Defaults\n                to 4096.\n\n        Returns:\n            Tensor: Mean latent of this generator.\n        \"\"\"\n        if hasattr(self.style_mapping, 'w_avg'):\n            return self.style_mapping.w_avg\n        return get_mean_latent(self, num_samples, **kwargs)\n\n    def get_training_kwargs(self, phase):\n        \"\"\"Get training kwargs. In StyleGANv3, we enable fp16, and update\n        magnitude ema during training of discriminator. This function is used\n        to pass related arguments.\n\n        Args:\n            phase (str): Current training phase.\n\n        Returns:\n            dict: Training kwargs.\n        \"\"\"\n        if phase == 'disc':\n            return dict(update_emas=True, force_fp32=False)\n        if phase == 'gen':\n            return dict(force_fp32=False)\n        return {}\n"
  },
  {
    "path": "mmagic/models/editors/stylegan3/stylegan3_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport scipy\nimport torch\nfrom mmengine.model import BaseModule\n\ntry:\n    from mmcv.ops import bias_act, conv2d_gradfix, filtered_lrelu\nexcept ImportError:\n    bias_act = None\n    conv2d_gradfix = None\n    filtered_lrelu = None\n    print('Warning: mmcv.ops.bias_act, mmcv.ops.conv2d_gradfix'\n          ' and mmcv.ops.filtered_lrelu are not available.')\n\nfrom mmengine.runner.amp import autocast\n\nfrom mmagic.registry import MODELS\n\n\ndef modulated_conv2d(\n    x,\n    w,\n    s,\n    demodulate=True,\n    padding=0,\n    input_gain=None,\n):\n    \"\"\"Modulated Conv2d in StyleGANv3.\n\n    Args:\n        x (torch.Tensor): Input tensor with shape (batch_size, in_channels,\n            height, width).\n        w (torch.Tensor): Weight of modulated convolution with shape\n            (out_channels, in_channels, kernel_height, kernel_width).\n        s (torch.Tensor): Style tensor with shape (batch_size, in_channels).\n        demodulate (bool): Whether apply weight demodulation. Defaults to True.\n        padding (int or list[int]): Convolution padding. Defaults to 0.\n        input_gain (list[int]): Scaling factors for input. Defaults to None.\n\n    Returns:\n        torch.Tensor: Convolution Output.\n    \"\"\"\n\n    batch_size = int(x.shape[0])\n    _, in_channels, kh, kw = w.shape\n\n    # Pre-normalize inputs.\n    if demodulate:\n        w = w * w.square().mean([1, 2, 3], keepdim=True).rsqrt()\n        s = s * s.square().mean().rsqrt()\n\n    # Modulate weights.\n    w = w.unsqueeze(0)  # [NOIkk]\n    w = w * s.unsqueeze(1).unsqueeze(3).unsqueeze(4)  # [NOIkk]\n\n    # Demodulate weights.\n    if demodulate:\n        dcoefs = (w.square().sum(dim=[2, 3, 4]) + 1e-8).rsqrt()  # [NO]\n        w = w * dcoefs.unsqueeze(2).unsqueeze(3).unsqueeze(4)  # [NOIkk]\n\n    # Apply input scaling.\n    if input_gain is not None:\n        input_gain = input_gain.expand(batch_size, in_channels)  # [NI]\n        w = w * input_gain.unsqueeze(1).unsqueeze(3).unsqueeze(4)  # [NOIkk]\n\n    # Execute as one fused op using grouped convolution.\n    x = x.reshape(1, -1, *x.shape[2:])\n    w = w.reshape(-1, in_channels, kh, kw)\n    x = conv2d_gradfix.conv2d(\n        input=x, weight=w.to(x.dtype), padding=padding, groups=batch_size)\n    x = x.reshape(batch_size, -1, *x.shape[2:])\n    return x\n\n\nclass FullyConnectedLayer(BaseModule):\n    \"\"\"Fully connected layer used in StyleGANv3.\n\n    Args:\n        in_features (int): Number of channels in the input feature.\n        out_features (int): Number of channels in the out feature.\n        activation (str, optional): Activation function with choices 'relu',\n            'lrelu', 'linear'. 'linear' means no extra activation.\n            Defaults to 'linear'.\n        bias (bool, optional): Whether to use additive bias. Defaults to True.\n        lr_multiplier (float, optional): Equalized learning rate multiplier.\n            Defaults to 1..\n        weight_init (float, optional): Weight multiplier for initialization.\n            Defaults to 1..\n        bias_init (float, optional): Initial bias. Defaults to 0..\n    \"\"\"\n\n    def __init__(self,\n                 in_features,\n                 out_features,\n                 activation='linear',\n                 bias=True,\n                 lr_multiplier=1.,\n                 weight_init=1.,\n                 bias_init=0.):\n        super().__init__()\n        self.in_features = in_features\n        self.out_features = out_features\n        self.activation = activation\n        self.weight = torch.nn.Parameter(\n            torch.randn([out_features, in_features]) *\n            (weight_init / lr_multiplier))\n        bias_init = np.broadcast_to(\n            np.asarray(bias_init, dtype=np.float32), [out_features])\n        self.bias = torch.nn.Parameter(\n            torch.from_numpy(bias_init / lr_multiplier)) if bias else None\n        self.weight_gain = lr_multiplier / np.sqrt(in_features)\n        self.bias_gain = lr_multiplier\n\n    def forward(self, x):\n        \"\"\"Forward function.\"\"\"\n        w = self.weight.to(x.dtype) * self.weight_gain\n        b = self.bias\n        if b is not None:\n            b = b.to(x.dtype)\n            if self.bias_gain != 1:\n                b = b * self.bias_gain\n        if self.activation == 'linear' and b is not None:\n            x = torch.addmm(b.unsqueeze(0), x, w.t())\n        else:\n            x = x.matmul(w.t())\n            x = bias_act(x, b, act=self.activation)\n        return x\n\n\n@MODELS.register_module()\nclass MappingNetwork(BaseModule):\n    \"\"\"Style mapping network used in StyleGAN3. The main difference between it\n    and styleganv1,v2 is that mean latent is registered as a buffer and dynamic\n    updated during training.\n\n    Args:\n        noise_size (int, optional): Size of the input noise vector.\n        style_channels (int): The number of channels for style code.\n        num_ws (int | None): The repeat times of w latent. If None is passed,\n            the output will shape like (batch_size, 1), otherwise the output\n            will shape like (bz, num_ws, 1).\n        cond_size (int, optional): Size of the conditional input.\n            Defaults to None.\n        num_layers (int, optional): The number of layers of mapping network.\n            Defaults to 2.\n        lr_multiplier (float, optional): Equalized learning rate multiplier.\n            Defaults to 0.01.\n        w_avg_beta (float, optional): The value used for update `w_avg`.\n            Defaults to 0.998.\n    \"\"\"\n\n    def __init__(self,\n                 noise_size,\n                 style_channels,\n                 num_ws,\n                 cond_size=0,\n                 num_layers=2,\n                 lr_multiplier=0.01,\n                 w_avg_beta=0.998):\n        super().__init__()\n        self.noise_size = noise_size\n        self.cond_size = cond_size\n        self.style_channels = style_channels\n        self.num_ws = num_ws\n        self.num_layers = num_layers\n        self.w_avg_beta = w_avg_beta\n\n        # Construct layers.\n        if self.cond_size is not None and self.cond_size > 0:\n            self.embed = FullyConnectedLayer(self.cond_size,\n                                             self.style_channels)\n\n        features = [\n            self.noise_size +\n            (self.style_channels if self.cond_size > 0 else 0)\n        ] + [self.style_channels] * self.num_layers\n        for idx, in_features, out_features in zip(\n                range(num_layers), features[:-1], features[1:]):\n            layer = FullyConnectedLayer(\n                in_features,\n                out_features,\n                activation='lrelu',\n                lr_multiplier=lr_multiplier)\n            setattr(self, f'fc{idx}', layer)\n        if w_avg_beta is not None:\n            self.register_buffer('w_avg', torch.zeros([style_channels]))\n\n    def forward(self,\n                z,\n                label=None,\n                truncation=1,\n                num_truncation_layer=None,\n                update_emas=False):\n        \"\"\"Style mapping function.\n\n        Args:\n            z (torch.Tensor): Input noise tensor.\n            label (torch.Tensor, optional): The conditional input.\n                Defaults to None.\n            truncation (float, optional): Truncation factor. Give value less\n                than 1., the truncation trick will be adopted. Defaults to 1.\n            num_truncation_layer (int, optional): Number of layers use\n                truncated latent. Defaults to None.\n            update_emas (bool, optional): Whether update moving average of\n                mean latent. Defaults to False.\n\n        Returns:\n            torch.Tensor: W-plus latent.\n        \"\"\"\n\n        if num_truncation_layer is None:\n            num_truncation_layer = self.num_ws\n\n        x = None\n        # Embed, normalize, and concatenate inputs.\n        if self.noise_size > 0:\n            assert z is not None, (\n                '\\'z\\' must be passed since \\'self.noise_size\\''\n                f'({self.noise_size}) larger than 0.')\n            x = z.to(torch.float32)\n            x = x * (x.square().mean(1, keepdim=True) + 1e-8).rsqrt()\n        if self.cond_size > 0:\n            y = self.embed(label.to(torch.float32))\n            y = y * (y.square().mean(1, keepdim=True) + 1e-8).rsqrt()\n            x = torch.cat([x, y], dim=1) if x is not None else y\n\n        # Execute layers.\n        for idx in range(self.num_layers):\n            x = getattr(self, f'fc{idx}')(x)\n\n        # Update moving average of W.\n        if update_emas and self.w_avg_beta is not None:\n            self.w_avg.copy_(x.detach().mean(\n                dim=0).lerp(self.w_avg, self.w_avg_beta))\n\n        # Broadcast and apply truncation.\n        if self.num_ws is not None:\n            x = x.unsqueeze(1).repeat([1, self.num_ws, 1])\n        if truncation != 1:\n            assert hasattr(self, 'w_avg'), (\n                '\\'w_avg\\' must not be None when truncation trick is used.')\n            if num_truncation_layer is None:\n                x = self.w_avg.lerp(x, truncation)\n            else:\n                x[:, :num_truncation_layer] = self.w_avg.lerp(\n                    x[:, :num_truncation_layer], truncation)\n        return x\n\n\nclass SynthesisInput(BaseModule):\n    \"\"\"Module which generate input for synthesis layer.\n\n    Args:\n        style_channels (int): The number of channels for style code.\n        channels (int): The number of output channel.\n        size (int): The size of sampling grid.\n        sampling_rate (int): Sampling rate for construct sampling grid.\n        bandwidth (float): Bandwidth of random frequencies.\n    \"\"\"\n\n    def __init__(self, style_channels, channels, size, sampling_rate,\n                 bandwidth):\n        super().__init__()\n        self.style_channels = style_channels\n        self.channels = channels\n        self.size = np.broadcast_to(np.asarray(size), [2])\n        self.sampling_rate = sampling_rate\n        self.bandwidth = bandwidth\n\n        # Draw random frequencies from uniform 2D disc.\n        freqs = torch.randn([self.channels, 2])\n        radii = freqs.square().sum(dim=1, keepdim=True).sqrt()\n        freqs /= radii * radii.square().exp().pow(0.25)\n        freqs *= bandwidth\n        phases = torch.rand([self.channels]) - 0.5\n\n        # Setup parameters and buffers.\n        self.weight = torch.nn.Parameter(\n            torch.randn([self.channels, self.channels]))\n        self.affine = FullyConnectedLayer(\n            style_channels, 4, weight_init=0, bias_init=[1, 0, 0, 0])\n        self.register_buffer('transform', torch.eye(\n            3, 3))  # User-specified inverse transform wrt. resulting image.\n        self.register_buffer('freqs', freqs)\n        self.register_buffer('phases', phases)\n\n    def forward(self, w):\n        \"\"\"Forward function.\"\"\"\n        # Introduce batch dimension.\n        transforms = self.transform.unsqueeze(0)  # [batch, row, col]\n        freqs = self.freqs.unsqueeze(0)  # [batch, channel, xy]\n        phases = self.phases.unsqueeze(0)  # [batch, channel]\n\n        # Apply learned transformation.\n        t = self.affine(w)  # t = (r_c, r_s, t_x, t_y)\n        t = t / t[:, :2].norm(\n            dim=1, keepdim=True)  # t' = (r'_c, r'_s, t'_x, t'_y)\n        m_r = torch.eye(\n            3, device=w.device).unsqueeze(0).repeat(\n                [w.shape[0], 1, 1])  # Inverse rotation wrt. resulting image.\n        m_r[:, 0, 0] = t[:, 0]  # r'_c\n        m_r[:, 0, 1] = -t[:, 1]  # r'_s\n        m_r[:, 1, 0] = t[:, 1]  # r'_s\n        m_r[:, 1, 1] = t[:, 0]  # r'_c\n        m_t = torch.eye(\n            3, device=w.device).unsqueeze(0).repeat(\n                [w.shape[0], 1,\n                 1])  # Inverse translation wrt. resulting image.\n        m_t[:, 0, 2] = -t[:, 2]  # t'_x\n        m_t[:, 1, 2] = -t[:, 3]  # t'_y\n\n        # First rotate resulting image, then translate\n        # and finally apply user-specified transform.\n        transforms = m_r @ m_t @ transforms\n\n        # Transform frequencies.\n        phases = phases + (freqs @ transforms[:, :2, 2:]).squeeze(2)\n        freqs = freqs @ transforms[:, :2, :2]\n\n        # Dampen out-of-band frequencies\n        # that may occur due to the user-specified transform.\n        amplitudes = (1 - (freqs.norm(dim=2) - self.bandwidth) /\n                      (self.sampling_rate / 2 - self.bandwidth)).clamp(0, 1)\n\n        # Construct sampling grid.\n        theta = torch.eye(2, 3, device=w.device)\n        theta[0, 0] = 0.5 * self.size[0] / self.sampling_rate\n        theta[1, 1] = 0.5 * self.size[1] / self.sampling_rate\n        grids = torch.nn.functional.affine_grid(\n            theta.unsqueeze(0), [1, 1, self.size[1], self.size[0]],\n            align_corners=False)\n\n        # Compute Fourier features.\n        x = (grids.unsqueeze(3) @ freqs.permute(\n            0, 2, 1).unsqueeze(1).unsqueeze(2)).squeeze(\n                3)  # [batch, height, width, channel]\n        x = x + phases.unsqueeze(1).unsqueeze(2)\n        x = torch.sin(x * (np.pi * 2))\n        x = x * amplitudes.unsqueeze(1).unsqueeze(2)\n\n        # Apply trainable mapping.\n        weight = self.weight / np.sqrt(self.channels)\n        x = x @ weight.t()\n\n        # Ensure correct shape.\n        x = x.permute(0, 3, 1, 2)  # [batch, channel, height, width]\n        return x\n\n\nclass SynthesisLayer(BaseModule):\n    \"\"\"Layer of Synthesis network for stylegan3.\n\n    Args:\n        style_channels (int): The number of channels for style code.\n        is_torgb (bool): Whether output of this layer is transformed to\n            rgb image.\n        is_critically_sampled (bool): Whether filter cutoff is set exactly\n            at the bandlimit.\n        use_fp16 (bool, optional): Whether to use fp16 training in this\n            module. If this flag is `True`, the whole module will be wrapped\n            with ``auto_fp16``.\n        in_channels (int): The channel number of the input feature map.\n        out_channels (int): The channel number of the output feature map.\n        in_size (int): The input size of feature map.\n        out_size (int): The output size of feature map.\n        in_sampling_rate (int): Sampling rate for upsampling filter.\n        out_sampling_rate (int): Sampling rate for downsampling filter.\n        in_cutoff (float): Cutoff frequency for upsampling filter.\n        out_cutoff (float): Cutoff frequency for downsampling filter.\n        in_half_width (float): The approximate width of the transition region\n            for upsampling filter.\n        out_half_width (float): The approximate width of the transition region\n            for downsampling filter.\n        conv_kernel (int, optional): The kernel of modulated convolution.\n            Defaults to 3.\n        filter_size (int, optional): Base filter size. Defaults to 6.\n        lrelu_upsampling (int, optional): Upsamling rate for `filtered_lrelu`.\n            Defaults to 2.\n        use_radial_filters (bool, optional): Whether use radially symmetric\n            jinc-based filter in downsamping filter. Defaults to False.\n        conv_clamp (int, optional): Clamp bound for convolution.\n            Defaults to 256.\n        magnitude_ema_beta (float, optional): Beta coefficient for calculating\n            input magnitude ema. Defaults to 0.999.\n    \"\"\"\n\n    def __init__(\n        self,\n        style_channels,\n        is_torgb,\n        is_critically_sampled,\n        use_fp16,\n        in_channels,\n        out_channels,\n        in_size,\n        out_size,\n        in_sampling_rate,\n        out_sampling_rate,\n        in_cutoff,\n        out_cutoff,\n        in_half_width,\n        out_half_width,\n        conv_kernel=3,\n        filter_size=6,\n        lrelu_upsampling=2,\n        use_radial_filters=False,\n        conv_clamp=256,\n        magnitude_ema_beta=0.999,\n    ):\n        super().__init__()\n        self.style_channels = style_channels\n        self.is_torgb = is_torgb\n        self.is_critically_sampled = is_critically_sampled\n        self.use_fp16 = use_fp16\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.in_size = np.broadcast_to(np.asarray(in_size), [2])\n        self.out_size = np.broadcast_to(np.asarray(out_size), [2])\n        self.in_sampling_rate = in_sampling_rate\n        self.out_sampling_rate = out_sampling_rate\n        self.tmp_sampling_rate = max(in_sampling_rate, out_sampling_rate) * (\n            1 if is_torgb else lrelu_upsampling)\n        self.in_cutoff = in_cutoff\n        self.out_cutoff = out_cutoff\n        self.in_half_width = in_half_width\n        self.out_half_width = out_half_width\n        self.conv_kernel = 1 if is_torgb else conv_kernel\n        self.conv_clamp = conv_clamp\n        self.magnitude_ema_beta = magnitude_ema_beta\n\n        # Setup parameters and buffers.\n        self.affine = FullyConnectedLayer(\n            self.style_channels, self.in_channels, bias_init=1)\n        self.weight = torch.nn.Parameter(\n            torch.randn([\n                self.out_channels, self.in_channels, self.conv_kernel,\n                self.conv_kernel\n            ]))\n        self.bias = torch.nn.Parameter(torch.zeros([self.out_channels]))\n        self.register_buffer('magnitude_ema', torch.ones([]))\n\n        # Design upsampling filter.\n        self.up_factor = int(\n            np.rint(self.tmp_sampling_rate / self.in_sampling_rate))\n        assert self.in_sampling_rate * self.up_factor == self.tmp_sampling_rate\n        self.up_taps = (\n            filter_size *\n            self.up_factor if self.up_factor > 1 and not self.is_torgb else 1)\n        self.register_buffer(\n            'up_filter',\n            self.design_lowpass_filter(\n                numtaps=self.up_taps,\n                cutoff=self.in_cutoff,\n                width=self.in_half_width * 2,\n                fs=self.tmp_sampling_rate))\n\n        # Design downsampling filter.\n        self.down_factor = int(\n            np.rint(self.tmp_sampling_rate / self.out_sampling_rate))\n        assert (self.out_sampling_rate *\n                self.down_factor == self.tmp_sampling_rate)\n        self.down_taps = (\n            filter_size * self.down_factor\n            if self.down_factor > 1 and not self.is_torgb else 1)\n        self.down_radial = (\n            use_radial_filters and not self.is_critically_sampled)\n        self.register_buffer(\n            'down_filter',\n            self.design_lowpass_filter(\n                numtaps=self.down_taps,\n                cutoff=self.out_cutoff,\n                width=self.out_half_width * 2,\n                fs=self.tmp_sampling_rate,\n                radial=self.down_radial))\n\n        # Compute padding.\n        pad_total = (\n            self.out_size - 1\n        ) * self.down_factor + 1  # Desired output size before downsampling.\n        pad_total -= (self.in_size + self.conv_kernel -\n                      1) * self.up_factor  # Input size after upsampling.\n        pad_total += self.up_taps + self.down_taps - 2\n        pad_lo = (pad_total + self.up_factor) // 2\n        pad_hi = pad_total - pad_lo\n        self.padding = [\n            int(pad_lo[0]),\n            int(pad_hi[0]),\n            int(pad_lo[1]),\n            int(pad_hi[1])\n        ]\n\n    def forward(self, x, w, force_fp32=False, update_emas=False):\n        \"\"\"Forward function for synthesis layer.\n\n        Args:\n            x (torch.Tensor): Input feature map tensor.\n            w (torch.Tensor): Input style tensor.\n            force_fp32 (bool, optional): Force fp32 ignore the weights.\n                Defaults to True.\n            update_emas (bool, optional): Whether update moving average of\n                input magnitude. Defaults to False.\n\n        Returns:\n            torch.Tensor: Output feature map tensor.\n        \"\"\"\n\n        # Track input magnitude.\n        if update_emas:\n            with torch.autograd.profiler.record_function(\n                    'update_magnitude_ema'):\n                magnitude_cur = x.detach().to(torch.float32).square().mean()\n                self.magnitude_ema.copy_(\n                    magnitude_cur.lerp(self.magnitude_ema,\n                                       self.magnitude_ema_beta))\n        input_gain = self.magnitude_ema.rsqrt()\n\n        # Execute affine layer.\n        styles = self.affine(w)\n        if self.is_torgb:\n            weight_gain = 1 / np.sqrt(self.in_channels * (self.conv_kernel**2))\n            styles = styles * weight_gain\n\n        # Execute modulated conv2d.\n        dtype = torch.float16 if (self.use_fp16 and not force_fp32 and\n                                  x.device.type == 'cuda') else torch.float32\n        with autocast(enabled=dtype == torch.float16):\n            x = modulated_conv2d(\n                x=x.to(dtype),\n                w=self.weight,\n                s=styles,\n                padding=self.conv_kernel - 1,\n                demodulate=(not self.is_torgb),\n                input_gain=input_gain)\n\n            # Execute bias, filtered leaky ReLU, and clamping.\n            gain = 1 if self.is_torgb else np.sqrt(2)\n            slope = 1 if self.is_torgb else 0.2\n            x = filtered_lrelu(\n                input=x,\n                filter_up=self.up_filter,\n                filter_down=self.down_filter,\n                bias=self.bias.to(x.dtype),\n                up=self.up_factor,\n                down=self.down_factor,\n                padding=self.padding,\n                gain=gain,\n                slope=slope,\n                clamp=self.conv_clamp)\n\n        # Ensure correct shape and dtype.\n        assert x.dtype == dtype\n        return x\n\n    @staticmethod\n    def design_lowpass_filter(numtaps, cutoff, width, fs, radial=False):\n        \"\"\"Design lowpass filter giving related arguments.\n\n        Args:\n            numtaps (int): Length of the filter. `numtaps` must be odd if a\n                passband includes the Nyquist frequency.\n            cutoff (float): Cutoff frequency of filter\n            width (float): The approximate width of the transition region.\n            fs (float): The sampling frequency of the signal.\n            radial (bool, optional):  Whether use radially symmetric jinc-based\n                filter. Defaults to False.\n\n        Returns:\n            torch.Tensor: Kernel of lowpass filter.\n        \"\"\"\n        assert numtaps >= 1\n\n        # Identity filter.\n        if numtaps == 1:\n            return None\n\n        # Separable Kaiser low-pass filter.\n        if not radial:\n            f = scipy.signal.firwin(\n                numtaps=numtaps, cutoff=cutoff, width=width, fs=fs)\n            return torch.as_tensor(f, dtype=torch.float32)\n\n        # Radially symmetric jinc-based filter.\n        x = (np.arange(numtaps) - (numtaps - 1) / 2) / fs\n        r = np.hypot(*np.meshgrid(x, x))\n        f = scipy.special.j1(2 * cutoff * (np.pi * r)) / (np.pi * r)\n        beta = scipy.signal.kaiser_beta(\n            scipy.signal.kaiser_atten(numtaps, width / (fs / 2)))\n        w = np.kaiser(numtaps, beta)\n        f *= np.outer(w, w)\n        f /= np.sum(f)\n        return torch.as_tensor(f, dtype=torch.float32)\n\n\n@MODELS.register_module()\nclass SynthesisNetwork(BaseModule):\n    \"\"\"Synthesis network for stylegan3.\n\n    Args:\n        style_channels (int): The number of channels for style code.\n        out_size (int): The resolution of output image.\n        img_channels (int): The number of channels for output image.\n        channel_base (int, optional): Overall multiplier for the number of\n            channels. Defaults to 32768.\n        channel_max (int, optional): Maximum number of channels in any layer.\n            Defaults to 512.\n        num_layers (int, optional): Total number of layers, excluding Fourier\n            features and ToRGB. Defaults to 14.\n        num_critical (int, optional):  Number of critically sampled layers at\n            the end. Defaults to 2.\n        first_cutoff (int, optional): Cutoff frequency of the first layer.\n            Defaults to 2.\n        first_stopband (int, optional): Minimum stopband of the first layer.\n            Defaults to 2**2.1.\n        last_stopband_rel (float, optional): Minimum stopband of the last\n            layer, expressed relative to the cutoff. Defaults to 2**0.3.\n        margin_size (int, optional): Number of additional pixels outside the\n            image. Defaults to 10.\n        output_scale (float, optional): Scale factor for output value.\n            Defaults to 0.25.\n        num_fp16_res (int, optional): Number of first few layers use fp16.\n            Defaults to 4.\n    \"\"\"\n\n    def __init__(\n        self,\n        style_channels,\n        out_size,\n        img_channels,\n        channel_base=32768,\n        channel_max=512,\n        num_layers=14,\n        num_critical=2,\n        first_cutoff=2,\n        first_stopband=2**2.1,\n        last_stopband_rel=2**0.3,\n        margin_size=10,\n        output_scale=0.25,\n        num_fp16_res=4,\n        **layer_kwargs,\n    ):\n        super().__init__()\n        self.style_channels = style_channels\n        self.num_ws = num_layers + 2\n        self.out_size = out_size\n        self.img_channels = img_channels\n        self.num_layers = num_layers\n        self.num_critical = num_critical\n        self.margin_size = margin_size\n        self.output_scale = output_scale\n        self.num_fp16_res = num_fp16_res\n\n        # Geometric progression of layer cutoffs and min. stopbands.\n        last_cutoff = self.out_size / 2  # f_{c,N}\n        last_stopband = last_cutoff * last_stopband_rel  # f_{t,N}\n        exponents = np.minimum(\n            np.arange(self.num_layers + 1) /\n            (self.num_layers - self.num_critical), 1)\n        cutoffs = first_cutoff * (last_cutoff /\n                                  first_cutoff)**exponents  # f_c[i]\n        stopbands = first_stopband * (last_stopband /\n                                      first_stopband)**exponents  # f_t[i]\n\n        # Compute remaining layer parameters.\n        sampling_rates = np.exp2(\n            np.ceil(np.log2(np.minimum(stopbands * 2, self.out_size))))  # s[i]\n        half_widths = np.maximum(stopbands,\n                                 sampling_rates / 2) - cutoffs  # f_h[i]\n        sizes = sampling_rates + self.margin_size * 2\n        sizes[-2:] = self.out_size\n        channels = np.rint(\n            np.minimum((channel_base / 2) / cutoffs, channel_max))\n        channels[-1] = self.img_channels\n\n        # Construct layers.\n        self.input = SynthesisInput(\n            style_channels=self.style_channels,\n            channels=int(channels[0]),\n            size=int(sizes[0]),\n            sampling_rate=sampling_rates[0],\n            bandwidth=cutoffs[0])\n        self.layer_names = []\n        for idx in range(self.num_layers + 1):\n            prev = max(idx - 1, 0)\n            is_torgb = (idx == self.num_layers)\n            is_critically_sampled = (\n                idx >= self.num_layers - self.num_critical)\n            use_fp16 = (\n                sampling_rates[idx] * (2**self.num_fp16_res) > self.out_size)\n            layer = SynthesisLayer(\n                style_channels=self.style_channels,\n                is_torgb=is_torgb,\n                is_critically_sampled=is_critically_sampled,\n                use_fp16=use_fp16,\n                in_channels=int(channels[prev]),\n                out_channels=int(channels[idx]),\n                in_size=int(sizes[prev]),\n                out_size=int(sizes[idx]),\n                in_sampling_rate=int(sampling_rates[prev]),\n                out_sampling_rate=int(sampling_rates[idx]),\n                in_cutoff=cutoffs[prev],\n                out_cutoff=cutoffs[idx],\n                in_half_width=half_widths[prev],\n                out_half_width=half_widths[idx],\n                **layer_kwargs)\n            name = f'L{idx}_{layer.out_size[0]}_{layer.out_channels}'\n            setattr(self, name, layer)\n            self.layer_names.append(name)\n\n    def forward(self, ws, **layer_kwargs):\n        \"\"\"Forward function.\"\"\"\n        ws = ws.to(torch.float32).unbind(dim=1)\n\n        # Execute layers.\n        x = self.input(ws[0])\n        for name, w in zip(self.layer_names, ws[1:]):\n            x = getattr(self, name)(x, w, **layer_kwargs)\n        if self.output_scale != 1:\n            x = x * self.output_scale\n\n        # Ensure correct shape and dtype.\n        x = x.to(torch.float32)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/stylegan3/stylegan3_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\ntry:\n    from mmcv.ops import filter2d, upsample2d\nexcept ImportError:\n    filter2d = None\n    upsample2d = None\n    print(\n        'Warning: mmcv.ops.filter2d and mmcv.ops.upsample2d are not available.'\n    )\n\n\ndef apply_integer_translation(x, tx, ty):\n    _N, _C, H, W = x.shape\n    tx = torch.as_tensor(tx * W).to(dtype=torch.float32, device=x.device)\n    ty = torch.as_tensor(ty * H).to(dtype=torch.float32, device=x.device)\n    ix = tx.round().to(torch.int64)\n    iy = ty.round().to(torch.int64)\n\n    z = torch.zeros_like(x)\n    m = torch.zeros_like(x)\n    if abs(ix) < W and abs(iy) < H:\n        y = x[:, :, max(-iy, 0):H + min(-iy, 0), max(-ix, 0):W + min(-ix, 0)]\n        z[:, :, max(iy, 0):H + min(iy, 0), max(ix, 0):W + min(ix, 0)] = y\n        m[:, :, max(iy, 0):H + min(iy, 0), max(ix, 0):W + min(ix, 0)] = 1\n    return z, m\n\n\ndef sinc(x):\n    y = (x * np.pi).abs()\n    z = torch.sin(y) / y.clamp(1e-30, float('inf'))\n    return torch.where(y < 1e-30, torch.ones_like(x), z)\n\n\ndef apply_fractional_translation(x, tx, ty, a=3):\n    _N, _C, H, W = x.shape\n    tx = torch.as_tensor(tx * W).to(dtype=torch.float32, device=x.device)\n    ty = torch.as_tensor(ty * H).to(dtype=torch.float32, device=x.device)\n    ix = tx.floor().to(torch.int64)\n    iy = ty.floor().to(torch.int64)\n    fx = tx - ix\n    fy = ty - iy\n    b = a - 1\n\n    z = torch.zeros_like(x)\n    zx0 = max(ix - b, 0)\n    zy0 = max(iy - b, 0)\n    zx1 = min(ix + a, 0) + W\n    zy1 = min(iy + a, 0) + H\n    if zx0 < zx1 and zy0 < zy1:\n        taps = torch.arange(a * 2, device=x.device) - b\n        filter_x = (sinc(taps - fx) * sinc((taps - fx) / a)).unsqueeze(0)\n        filter_y = (sinc(taps - fy) * sinc((taps - fy) / a)).unsqueeze(1)\n        y = x\n        y = filter2d(y, filter_x / filter_x.sum(), padding=[b, a, 0, 0])\n        y = filter2d(y, filter_y / filter_y.sum(), padding=[0, 0, b, a])\n        y = y[:, :,\n              max(b - iy, 0):H + b + a + min(-iy - a, 0),\n              max(b - ix, 0):W + b + a + min(-ix - a, 0)]\n        z[:, :, zy0:zy1, zx0:zx1] = y\n\n    m = torch.zeros_like(x)\n    mx0 = max(ix + a, 0)\n    my0 = max(iy + a, 0)\n    mx1 = min(ix - b, 0) + W\n    my1 = min(iy - b, 0) + H\n    if mx0 < mx1 and my0 < my1:\n        m[:, :, my0:my1, mx0:mx1] = 1\n    return z, m\n\n\ndef rotation_matrix(angle):\n    angle = torch.as_tensor(angle).to(torch.float32)\n    mat = torch.eye(3, device=angle.device)\n    mat[0, 0] = angle.cos()\n    mat[0, 1] = angle.sin()\n    mat[1, 0] = -angle.sin()\n    mat[1, 1] = angle.cos()\n    return mat\n\n\ndef lanczos_window(x, a):\n    x = x.abs() / a\n    return torch.where(x < 1, sinc(x), torch.zeros_like(x))\n\n\ndef construct_affine_bandlimit_filter(mat,\n                                      a=3,\n                                      amax=16,\n                                      aflt=64,\n                                      up=4,\n                                      cutoff_in=1,\n                                      cutoff_out=1):\n    assert a <= amax < aflt\n    mat = torch.as_tensor(mat).to(torch.float32)\n\n    # Construct 2D filter taps in input & output coordinate spaces.\n    taps = ((torch.arange(aflt * up * 2 - 1, device=mat.device) + 1) / up -\n            aflt).roll(1 - aflt * up)\n    yi, xi = torch.meshgrid(taps, taps)\n    xo, yo = (torch.stack([xi, yi], dim=2) @ mat[:2, :2].t()).unbind(2)\n\n    # Convolution of two oriented 2D sinc filters.\n    fin = sinc(xi * cutoff_in) * sinc(yi * cutoff_in)\n    fout = sinc(xo * cutoff_out) * sinc(yo * cutoff_out)\n    f = torch.fft.ifftn(torch.fft.fftn(fin) * torch.fft.fftn(fout)).real\n\n    # Convolution of two oriented 2D Lanczos windows.\n    wi = lanczos_window(xi, a) * lanczos_window(yi, a)\n    wo = lanczos_window(xo, a) * lanczos_window(yo, a)\n    w = torch.fft.ifftn(torch.fft.fftn(wi) * torch.fft.fftn(wo)).real\n\n    # Construct windowed FIR filter.\n    f = f * w\n\n    # Finalize.\n    c = (aflt - amax) * up\n    f = f.roll([aflt * up - 1] * 2, dims=[0, 1])[c:-c, c:-c]\n    f = torch.nn.functional.pad(f,\n                                [0, 1, 0, 1]).reshape(amax * 2, up, amax * 2,\n                                                      up)\n    f = f / f.sum([0, 2], keepdim=True) / (up**2)\n    f = f.reshape(amax * 2 * up, amax * 2 * up)[:-1, :-1]\n    return f\n\n\ndef apply_affine_transformation(x, mat, up=4, **filter_kwargs):\n    _N, _C, H, W = x.shape\n    mat = torch.as_tensor(mat).to(dtype=torch.float32, device=x.device)\n\n    # Construct filter.\n    f = construct_affine_bandlimit_filter(mat, up=up, **filter_kwargs)\n    assert f.ndim == 2 and f.shape[0] == f.shape[1] and f.shape[0] % 2 == 1\n    p = f.shape[0] // 2\n\n    # Construct sampling grid.\n    theta = mat.inverse()\n    theta[:2, 2] *= 2\n    theta[0, 2] += 1 / up / W\n    theta[1, 2] += 1 / up / H\n    theta[0, :] *= W / (W + p / up * 2)\n    theta[1, :] *= H / (H + p / up * 2)\n    theta = theta[:2, :3].unsqueeze(0).repeat([x.shape[0], 1, 1])\n    g = torch.nn.functional.affine_grid(theta, x.shape, align_corners=False)\n\n    # Resample image.\n    y = upsample2d(input=x, filter=f, up=up, padding=p)\n    z = torch.nn.functional.grid_sample(\n        y, g, mode='bilinear', padding_mode='zeros', align_corners=False)\n\n    # Form mask.\n    m = torch.zeros_like(y)\n    c = p * 2 + 1\n    m[:, :, c:-c, c:-c] = 1\n    m = torch.nn.functional.grid_sample(\n        m, g, mode='nearest', padding_mode='zeros', align_corners=False)\n    return z, m\n\n\ndef apply_fractional_rotation(x, angle, a=3, **filter_kwargs):\n    angle = torch.as_tensor(angle).to(dtype=torch.float32, device=x.device)\n    mat = rotation_matrix(angle)\n    return apply_affine_transformation(\n        x, mat, a=a, amax=a * 2, **filter_kwargs)\n\n\ndef apply_fractional_pseudo_rotation(x, angle, a=3, **filter_kwargs):\n    angle = torch.as_tensor(angle).to(dtype=torch.float32, device=x.device)\n    mat = rotation_matrix(-angle)\n    f = construct_affine_bandlimit_filter(\n        mat, a=a, amax=a * 2, up=1, **filter_kwargs)\n    y = filter2d(input=x, filter=f)\n    m = torch.zeros_like(y)\n    c = f.shape[0] // 2\n    m[:, :, c:-c, c:-c] = 1\n    return y, m\n"
  },
  {
    "path": "mmagic/models/editors/swinir/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .swinir_net import SwinIRNet\n\n__all__ = ['SwinIRNet']\n"
  },
  {
    "path": "mmagic/models/editors/swinir/swinir_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport torch.nn as nn\n\nfrom .swinir_utils import to_2tuple\n\n\nclass PatchEmbed(nn.Module):\n    r\"\"\" Image to Patch Embedding\n    Args:\n        img_size (int): Image size.  Default: 224.\n        patch_size (int): Patch token size. Default: 4.\n        in_chans (int): Number of input image channels. Default: 3.\n        embed_dim (int): Number of linear projection output channels.\n            Default: 96.\n        norm_layer (nn.Module, optional): Normalization layer. Default: None\n    \"\"\"\n\n    def __init__(self,\n                 img_size=224,\n                 patch_size=4,\n                 in_chans=3,\n                 embed_dim=96,\n                 norm_layer=None):\n        super().__init__()\n        img_size = to_2tuple(img_size)\n        patch_size = to_2tuple(patch_size)\n        patches_resolution = [\n            img_size[0] // patch_size[0], img_size[1] // patch_size[1]\n        ]\n        self.img_size = img_size\n        self.patch_size = patch_size\n        self.patches_resolution = patches_resolution\n        self.num_patches = patches_resolution[0] * patches_resolution[1]\n\n        self.in_chans = in_chans\n        self.embed_dim = embed_dim\n\n        if norm_layer is not None:\n            self.norm = norm_layer(embed_dim)\n        else:\n            self.norm = None\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, Ph, Pw).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = x.flatten(2).transpose(1, 2)  # B Ph*Pw C\n        if self.norm is not None:\n            x = self.norm(x)\n        return x\n\n\nclass PatchUnEmbed(nn.Module):\n    r\"\"\" Image to Patch Unembedding\n    Args:\n        img_size (int): Image size.  Default: 224.\n        patch_size (int): Patch token size. Default: 4.\n        in_chans (int): Number of input image channels. Default: 3.\n        embed_dim (int): Number of linear projection output channels.\n            Default: 96.\n        norm_layer (nn.Module, optional): Normalization layer. Default: None\n    \"\"\"\n\n    def __init__(self,\n                 img_size=224,\n                 patch_size=4,\n                 in_chans=3,\n                 embed_dim=96,\n                 norm_layer=None):\n        super().__init__()\n        img_size = to_2tuple(img_size)\n        patch_size = to_2tuple(patch_size)\n        patches_resolution = [\n            img_size[0] // patch_size[0], img_size[1] // patch_size[1]\n        ]\n        self.img_size = img_size\n        self.patch_size = patch_size\n        self.patches_resolution = patches_resolution\n        self.num_patches = patches_resolution[0] * patches_resolution[1]\n\n        self.in_chans = in_chans\n        self.embed_dim = embed_dim\n\n    def forward(self, x, x_size):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n            x_size (tuple[int]): Resolution of input feature.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        B, HW, C = x.shape\n        x = x.transpose(1, 2).view(B, self.embed_dim, x_size[0],\n                                   x_size[1])  # B Ph*Pw C\n        return x\n\n\nclass Upsample(nn.Sequential):\n    \"\"\"Upsample module.\n\n    Args:\n        scale (int): Scale factor. Supported scales: 2^n and 3.\n        num_feat (int): Channel number of intermediate features.\n    \"\"\"\n\n    def __init__(self, scale, num_feat):\n        m = []\n        if (scale & (scale - 1)) == 0:  # scale = 2^n\n            for _ in range(int(math.log(scale, 2))):\n                m.append(nn.Conv2d(num_feat, 4 * num_feat, 3, 1, 1))\n                m.append(nn.PixelShuffle(2))\n        elif scale == 3:\n            m.append(nn.Conv2d(num_feat, 9 * num_feat, 3, 1, 1))\n            m.append(nn.PixelShuffle(3))\n        else:\n            raise ValueError(f'scale {scale} is not supported. '\n                             'Supported scales: 2^n and 3.')\n        super(Upsample, self).__init__(*m)\n\n\nclass UpsampleOneStep(nn.Sequential):\n    \"\"\"UpsampleOneStep module (the difference with Upsample is that it always\n    only has 1conv + 1pixelshuffle) Used in lightweight SR to save parameters.\n\n    Args:\n        scale (int): Scale factor. Supported scales: 2^n and 3.\n        num_feat (int): Channel number of intermediate features.\n        num_out_ch (int): Channel number for PixelShuffle.\n        input_resolution (tuple[int], optional): Input resolution.\n            Default: None\n    \"\"\"\n\n    def __init__(self, scale, num_feat, num_out_ch, input_resolution=None):\n        self.num_feat = num_feat\n        self.input_resolution = input_resolution\n        m = []\n        m.append(nn.Conv2d(num_feat, (scale**2) * num_out_ch, 3, 1, 1))\n        m.append(nn.PixelShuffle(scale))\n        super(UpsampleOneStep, self).__init__(*m)\n"
  },
  {
    "path": "mmagic/models/editors/swinir/swinir_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import trunc_normal_\n\nfrom mmagic.registry import MODELS\nfrom .swinir_modules import PatchEmbed, PatchUnEmbed, Upsample, UpsampleOneStep\nfrom .swinir_rstb import RSTB\n\n\n@MODELS.register_module()\nclass SwinIRNet(BaseModule):\n    r\"\"\" SwinIR\n        A PyTorch impl of: `SwinIR: Image Restoration Using Swin Transformer`,\n        based on Swin Transformer.\n        Ref repo: https://github.com/JingyunLiang/SwinIR\n\n    Args:\n        img_size (int | tuple(int)): Input image size. Default 64\n        patch_size (int | tuple(int)): Patch size. Default: 1\n        in_chans (int): Number of input image channels. Default: 3\n        embed_dim (int): Patch embedding dimension. Default: 96\n        depths (tuple(int)): Depth of each Swin Transformer layer.\n            Default: [6, 6, 6, 6]\n        num_heads (tuple(int)): Number of attention heads in different layers.\n            Default: [6, 6, 6, 6]\n        window_size (int): Window size. Default: 7\n        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4\n        qkv_bias (bool): If True, add a learnable bias to query, key, value.\n            Default: True\n        qk_scale (float): Override default qk scale of head_dim ** -0.5 if set.\n            Default: None\n        drop_rate (float): Dropout rate. Default: 0\n        attn_drop_rate (float): Attention dropout rate. Default: 0\n        drop_path_rate (float): Stochastic depth rate. Default: 0.1\n        norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm.\n        ape (bool): If True, add absolute position embedding to the\n            patch embedding. Default: False\n        patch_norm (bool): If True, add normalization after patch embedding.\n            Default: True\n        use_checkpoint (bool): Whether to use checkpointing to save memory.\n            Default: False\n        upscale (int): Upscale factor. 2/3/4/8 for image SR, 1 for denoising\n            and compress artifact reduction. Default: 2\n        img_range (float): Image range. 1. or 255. Default: 1.0\n        upsampler (string, optional): The reconstruction module.\n            'pixelshuffle' / 'pixelshuffledirect' /'nearest+conv'/None.\n            Default: ''\n        resi_connection (string): The convolutional block before residual\n            connection. '1conv'/'3conv'. Default: '1conv'\n    \"\"\"\n\n    def __init__(self,\n                 img_size=64,\n                 patch_size=1,\n                 in_chans=3,\n                 embed_dim=96,\n                 depths=[6, 6, 6, 6],\n                 num_heads=[6, 6, 6, 6],\n                 window_size=7,\n                 mlp_ratio=4.,\n                 qkv_bias=True,\n                 qk_scale=None,\n                 drop_rate=0.,\n                 attn_drop_rate=0.,\n                 drop_path_rate=0.1,\n                 norm_layer=nn.LayerNorm,\n                 ape=False,\n                 patch_norm=True,\n                 use_checkpoint=False,\n                 upscale=2,\n                 img_range=1.,\n                 upsampler='',\n                 resi_connection='1conv',\n                 **kwargs):\n        super(SwinIRNet, self).__init__()\n        num_in_ch = in_chans\n        num_out_ch = in_chans\n        num_feat = 64\n        self.img_range = img_range\n        if in_chans == 3:\n            rgb_mean = (0.4488, 0.4371, 0.4040)\n            self.mean = torch.Tensor(rgb_mean).view(1, 3, 1, 1)\n        else:\n            self.mean = torch.zeros(1, 1, 1, 1)\n        self.upscale = upscale\n        self.upsampler = upsampler\n        self.window_size = window_size\n\n        # 1, shallow feature extraction\n        self.conv_first = nn.Conv2d(num_in_ch, embed_dim, 3, 1, 1)\n\n        # 2, deep feature extraction\n        self.num_layers = len(depths)\n        self.embed_dim = embed_dim\n        self.ape = ape\n        self.patch_norm = patch_norm\n        self.num_features = embed_dim\n        self.mlp_ratio = mlp_ratio\n\n        # split image into non-overlapping patches\n        self.patch_embed = PatchEmbed(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=embed_dim,\n            embed_dim=embed_dim,\n            norm_layer=norm_layer if self.patch_norm else None)\n        num_patches = self.patch_embed.num_patches\n        patches_resolution = self.patch_embed.patches_resolution\n        self.patches_resolution = patches_resolution\n\n        # merge non-overlapping patches into image\n        self.patch_unembed = PatchUnEmbed(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=embed_dim,\n            embed_dim=embed_dim,\n            norm_layer=norm_layer if self.patch_norm else None)\n\n        # absolute position embedding\n        if self.ape:\n            self.absolute_pos_embed = nn.Parameter(\n                torch.zeros(1, num_patches, embed_dim))\n            trunc_normal_(self.absolute_pos_embed, std=.02)\n\n        self.pos_drop = nn.Dropout(p=drop_rate)\n\n        # stochastic depth decay rule\n        dpr = [\n            x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))\n        ]\n\n        # build Residual Swin Transformer blocks (RSTB)\n        self.layers = nn.ModuleList()\n        for i_layer in range(self.num_layers):\n            layer = RSTB(\n                dim=embed_dim,\n                input_resolution=(patches_resolution[0],\n                                  patches_resolution[1]),\n                depth=depths[i_layer],\n                num_heads=num_heads[i_layer],\n                window_size=window_size,\n                mlp_ratio=self.mlp_ratio,\n                qkv_bias=qkv_bias,\n                qk_scale=qk_scale,\n                drop=drop_rate,\n                attn_drop=attn_drop_rate,\n                drop_path=dpr[sum(depths[:i_layer]):sum(depths[:i_layer + 1])],\n                norm_layer=norm_layer,\n                downsample=None,\n                use_checkpoint=use_checkpoint,\n                img_size=img_size,\n                patch_size=patch_size,\n                resi_connection=resi_connection)\n            self.layers.append(layer)\n        self.norm = norm_layer(self.num_features)\n\n        # build the last conv layer in deep feature extraction\n        if resi_connection == '1conv':\n            self.conv_after_body = nn.Conv2d(embed_dim, embed_dim, 3, 1, 1)\n        elif resi_connection == '3conv':\n            # to save parameters and memory\n            self.conv_after_body = nn.Sequential(\n                nn.Conv2d(embed_dim, embed_dim // 4, 3, 1, 1),\n                nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                nn.Conv2d(embed_dim // 4, embed_dim // 4, 1, 1, 0),\n                nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                nn.Conv2d(embed_dim // 4, embed_dim, 3, 1, 1))\n\n        # 3, high quality image reconstruction\n        if self.upsampler == 'pixelshuffle':\n            # for classical SR\n            self.conv_before_upsample = nn.Sequential(\n                nn.Conv2d(embed_dim, num_feat, 3, 1, 1),\n                nn.LeakyReLU(inplace=True))\n            self.upsample = Upsample(upscale, num_feat)\n            self.conv_last = nn.Conv2d(num_feat, num_out_ch, 3, 1, 1)\n        elif self.upsampler == 'pixelshuffledirect':\n            # for lightweight SR (to save parameters)\n            self.upsample = UpsampleOneStep(upscale, embed_dim, num_out_ch,\n                                            (patches_resolution[0],\n                                             patches_resolution[1]))\n        elif self.upsampler == 'nearest+conv':\n            # for real-world SR (less artifacts)\n            self.conv_before_upsample = nn.Sequential(\n                nn.Conv2d(embed_dim, num_feat, 3, 1, 1),\n                nn.LeakyReLU(inplace=True))\n            self.conv_up1 = nn.Conv2d(num_feat, num_feat, 3, 1, 1)\n            if self.upscale == 4:\n                self.conv_up2 = nn.Conv2d(num_feat, num_feat, 3, 1, 1)\n            self.conv_hr = nn.Conv2d(num_feat, num_feat, 3, 1, 1)\n            self.conv_last = nn.Conv2d(num_feat, num_out_ch, 3, 1, 1)\n            self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)\n        else:\n            # for image denoising and JPEG compression artifact reduction\n            self.conv_last = nn.Conv2d(embed_dim, num_out_ch, 3, 1, 1)\n\n        self.apply(self._init_weights)\n\n    def _init_weights(self, m):\n        if isinstance(m, nn.Linear):\n            trunc_normal_(m.weight, std=.02)\n            if isinstance(m, nn.Linear) and m.bias is not None:\n                nn.init.constant_(m.bias, 0)\n        elif isinstance(m, nn.LayerNorm):\n            nn.init.constant_(m.bias, 0)\n            nn.init.constant_(m.weight, 1.0)\n\n    @torch.jit.ignore\n    def no_weight_decay(self):\n        return {'absolute_pos_embed'}\n\n    @torch.jit.ignore\n    def no_weight_decay_keywords(self):\n        return {'relative_position_bias_table'}\n\n    def check_image_size(self, x):\n        \"\"\"Check image size and pad images so that it has enough dimension do\n        window size.\n\n        args:\n            x: input tensor image with (B, C, H, W) shape.\n        \"\"\"\n        _, _, h, w = x.size()\n        mod_pad_h = (self.window_size -\n                     h % self.window_size) % self.window_size\n        mod_pad_w = (self.window_size -\n                     w % self.window_size) % self.window_size\n        x = F.pad(x, (0, mod_pad_w, 0, mod_pad_h), 'reflect')\n        return x\n\n    def forward_features(self, x):\n        \"\"\"Forward function of Deep Feature Extraction.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x_size = (x.shape[2], x.shape[3])\n        x = self.patch_embed(x)\n        if self.ape:\n            x = x + self.absolute_pos_embed\n        x = self.pos_drop(x)\n\n        for layer in self.layers:\n            x = layer(x, x_size)\n\n        x = self.norm(x)  # B L C\n        x = self.patch_unembed(x, x_size)\n\n        return x\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, C, H, W).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        H, W = x.shape[2:]\n        x = self.check_image_size(x)\n\n        self.mean = self.mean.type_as(x)\n        x = (x - self.mean) * self.img_range\n\n        if self.upsampler == 'pixelshuffle':\n            # for classical SR\n            x = self.conv_first(x)\n            x = self.conv_after_body(self.forward_features(x)) + x\n            x = self.conv_before_upsample(x)\n            x = self.conv_last(self.upsample(x))\n        elif self.upsampler == 'pixelshuffledirect':\n            # for lightweight SR\n            x = self.conv_first(x)\n            x = self.conv_after_body(self.forward_features(x)) + x\n            x = self.upsample(x)\n        elif self.upsampler == 'nearest+conv':\n            # for real-world SR\n            x = self.conv_first(x)\n            x = self.conv_after_body(self.forward_features(x)) + x\n            x = self.conv_before_upsample(x)\n            x = self.lrelu(\n                self.conv_up1(\n                    torch.nn.functional.interpolate(\n                        x, scale_factor=2, mode='nearest')))\n            if self.upscale == 4:\n                x = self.lrelu(\n                    self.conv_up2(\n                        torch.nn.functional.interpolate(\n                            x, scale_factor=2, mode='nearest')))\n            x = self.conv_last(self.lrelu(self.conv_hr(x)))\n        else:\n            # for image denoising and JPEG compression artifact reduction\n            x_first = self.conv_first(x)\n            res = self.conv_after_body(\n                self.forward_features(x_first)) + x_first\n            x = x + self.conv_last(res)\n\n        x = x / self.img_range + self.mean\n\n        return x[:, :, :H * self.upscale, :W * self.upscale]\n"
  },
  {
    "path": "mmagic/models/editors/swinir/swinir_rstb.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport torch\nimport torch.nn as nn\nimport torch.utils.checkpoint as checkpoint\nfrom mmengine.model.weight_init import trunc_normal_\n\nfrom .swinir_modules import PatchEmbed, PatchUnEmbed\nfrom .swinir_utils import (drop_path, to_2tuple, window_partition,\n                           window_reverse)\n\n\nclass DropPath(nn.Module):\n    \"\"\"Drop paths (Stochastic Depth) per sample (when applied in main path of\n    residual blocks).\"\"\"\n\n    def __init__(self, drop_prob: float = 0., scale_by_keep: bool = True):\n        super(DropPath, self).__init__()\n        self.drop_prob = drop_prob\n        self.scale_by_keep = scale_by_keep\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return drop_path(x, self.drop_prob, self.training, self.scale_by_keep)\n\n    def extra_repr(self):\n        return f'drop_prob={round(self.drop_prob, 3):0.3f}'\n\n\nclass Mlp(nn.Module):\n    \"\"\"Multilayer Perceptron layer.\n\n    Args:\n        in_features (int): Number of input channels.\n        hidden_features (int | None, optional): Number of hidden layer\n            channels. Default: None\n        out_features (int | None, optional): Number of output channels.\n            Default: None\n        act_layer (nn.Module, optional): Activation layer. Default: nn.GELU\n        drop (float, optional): Dropout ratio of attention weight. Default: 0.0\n    \"\"\"\n\n    def __init__(self,\n                 in_features,\n                 hidden_features=None,\n                 out_features=None,\n                 act_layer=nn.GELU,\n                 drop=0.):\n        super().__init__()\n        out_features = out_features or in_features\n        hidden_features = hidden_features or in_features\n        self.fc1 = nn.Linear(in_features, hidden_features)\n        self.act = act_layer()\n        self.fc2 = nn.Linear(hidden_features, out_features)\n        self.drop = nn.Dropout(drop)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.fc1(x)\n        x = self.act(x)\n        x = self.drop(x)\n        x = self.fc2(x)\n        x = self.drop(x)\n        return x\n\n\nclass WindowAttention(nn.Module):\n    r\"\"\" Window based multi-head self attention (W-MSA)\n    module with relative position bias.\n    It supports both of shifted and non-shifted window.\n    Args:\n        dim (int): Number of input channels.\n        window_size (tuple[int]): The height and width of the window.\n        num_heads (int): Number of attention heads.\n        qkv_bias (bool, optional):  If True, add a learnable bias to\n            query, key, value. Default: True\n        qk_scale (float | None, optional): Override default qk scale\n            of head_dim ** -0.5 if set\n        attn_drop (float, optional): Dropout ratio of attention weight.\n            Default: 0.0\n        proj_drop (float, optional): Dropout ratio of output. Default: 0.0\n    \"\"\"\n\n    def __init__(self,\n                 dim,\n                 window_size,\n                 num_heads,\n                 qkv_bias=True,\n                 qk_scale=None,\n                 attn_drop=0.,\n                 proj_drop=0.):\n\n        super().__init__()\n        self.dim = dim\n        self.window_size = window_size  # Wh, Ww\n        self.num_heads = num_heads\n        head_dim = dim // num_heads\n        self.scale = qk_scale or head_dim**-0.5\n\n        # define a parameter table of relative position bias\n        # 2*Wh-1 * 2*Ww-1, nH\n        self.relative_position_bias_table = nn.Parameter(\n            torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1),\n                        num_heads))\n\n        # get pair-wise relative position index\n        # for each token inside the window\n        coords_h = torch.arange(self.window_size[0])\n        coords_w = torch.arange(self.window_size[1])\n        coords = torch.stack(torch.meshgrid([coords_h, coords_w]))  # 2, Wh, Ww\n        coords_flatten = torch.flatten(coords, 1)  # 2, Wh*Ww\n        relative_coords = \\\n            coords_flatten[:, :, None] - coords_flatten[:, None, :]\n        # Wh*Ww, Wh*Ww, 2\n        relative_coords = relative_coords.permute(1, 2, 0).contiguous()\n        # shift to start from 0\n        relative_coords[:, :, 0] += self.window_size[0] - 1\n        relative_coords[:, :, 1] += self.window_size[1] - 1\n        relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1\n        relative_position_index = relative_coords.sum(-1)  # Wh*Ww, Wh*Ww\n        self.register_buffer('relative_position_index',\n                             relative_position_index)\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.attn_drop = nn.Dropout(attn_drop)\n        self.proj = nn.Linear(dim, dim)\n\n        self.proj_drop = nn.Dropout(proj_drop)\n\n        trunc_normal_(self.relative_position_bias_table, std=.02)\n        self.softmax = nn.Softmax(dim=-1)\n\n    def forward(self, x, mask=None):\n        \"\"\"\n        Args:\n            x: input features with shape of (num_windows*B, N, C)\n            mask: (0/-inf) mask with shape of\n                (num_windows, Wh*Ww, Wh*Ww) or None\n        \"\"\"\n        B_, N, C = x.shape\n        qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads,\n                                  C // self.num_heads).permute(2, 0, 3, 1, 4)\n        # make torchscript happy (cannot use tensor as tuple)\n        q, k, v = qkv[0], qkv[1], qkv[2]\n\n        q = q * self.scale\n        attn = (q @ k.transpose(-2, -1))\n\n        relative_position_bias = self.relative_position_bias_table[\n            self.relative_position_index.view(-1)].view(\n                self.window_size[0] * self.window_size[1],\n                self.window_size[0] * self.window_size[1],\n                -1)  # Wh*Ww,Wh*Ww,nH\n        relative_position_bias = relative_position_bias.permute(\n            2, 0, 1).contiguous()  # nH, Wh*Ww, Wh*Ww\n        attn = attn + relative_position_bias.unsqueeze(0)\n\n        if mask is not None:\n            nW = mask.shape[0]\n            attn = attn.view(B_ // nW, nW, self.num_heads, N,\n                             N) + mask.unsqueeze(1).unsqueeze(0)\n            attn = attn.view(-1, self.num_heads, N, N)\n            attn = self.softmax(attn)\n        else:\n            attn = self.softmax(attn)\n\n        attn = self.attn_drop(attn)\n\n        x = (attn @ v).transpose(1, 2).reshape(B_, N, C)\n        x = self.proj(x)\n        x = self.proj_drop(x)\n        return x\n\n    def extra_repr(self) -> str:\n        return f'dim={self.dim}, window_size={self.window_size}, ' \\\n               f'num_heads={self.num_heads}'\n\n\nclass SwinTransformerBlock(nn.Module):\n    r\"\"\" Swin Transformer Block.\n    Args:\n        dim (int): Number of input channels.\n        input_resolution (tuple[int]): Input resolution.\n        num_heads (int): Number of attention heads.\n        window_size (int): Window size.\n        shift_size (int): Shift size for SW-MSA.\n        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n        qkv_bias (bool, optional): If True, add a learnable bias\n            to query, key, value. Default: True\n        qk_scale (float | None, optional): Override default qk\n            scale of head_dim ** -0.5 if set.\n        drop (float, optional): Dropout rate. Default: 0.0\n        attn_drop (float, optional): Attention dropout rate. Default: 0.0\n        drop_path (float, optional): Stochastic depth rate. Default: 0.0\n        act_layer (nn.Module, optional): Activation layer. Default: nn.GELU\n        norm_layer (nn.Module, optional): Normalization layer.\n            Default: nn.LayerNorm\n    \"\"\"\n\n    def __init__(self,\n                 dim,\n                 input_resolution,\n                 num_heads,\n                 window_size=7,\n                 shift_size=0,\n                 mlp_ratio=4.,\n                 qkv_bias=True,\n                 qk_scale=None,\n                 drop=0.,\n                 attn_drop=0.,\n                 drop_path=0.,\n                 act_layer=nn.GELU,\n                 norm_layer=nn.LayerNorm):\n        super().__init__()\n        self.dim = dim\n        self.input_resolution = input_resolution\n        self.num_heads = num_heads\n        self.window_size = window_size\n        self.shift_size = shift_size\n        self.mlp_ratio = mlp_ratio\n        if min(self.input_resolution) <= self.window_size:\n            # if window size is larger than input resolution,\n            # we don't partition windows\n            self.shift_size = 0\n            self.window_size = min(self.input_resolution)\n        assert 0 <= self.shift_size < self.window_size, \\\n            'shift_size must in 0-window_size'\n\n        self.norm1 = norm_layer(dim)\n        self.attn = WindowAttention(\n            dim,\n            window_size=to_2tuple(self.window_size),\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            qk_scale=qk_scale,\n            attn_drop=attn_drop,\n            proj_drop=drop)\n\n        self.drop_path = DropPath(\n            drop_path) if drop_path > 0. else nn.Identity()\n        self.norm2 = norm_layer(dim)\n        mlp_hidden_dim = int(dim * mlp_ratio)\n        self.mlp = Mlp(\n            in_features=dim,\n            hidden_features=mlp_hidden_dim,\n            act_layer=act_layer,\n            drop=drop)\n\n        if self.shift_size > 0:\n            attn_mask = self.calculate_mask(self.input_resolution)\n        else:\n            attn_mask = None\n\n        self.register_buffer('attn_mask', attn_mask)\n\n    def calculate_mask(self, x_size):\n        # calculate attention mask for SW-MSA\n        \"\"\"Calculate attention mask for SW-MSA.\n\n        Args:\n            x_size (tuple[int]): Resolution of input feature.\n\n        Returns:\n            Tensor: Attention mask\n        \"\"\"\n        H, W = x_size\n        img_mask = torch.zeros((1, H, W, 1))  # 1 H W 1\n        h_slices = (slice(0, -self.window_size),\n                    slice(-self.window_size,\n                          -self.shift_size), slice(-self.shift_size, None))\n        w_slices = (slice(0, -self.window_size),\n                    slice(-self.window_size,\n                          -self.shift_size), slice(-self.shift_size, None))\n        cnt = 0\n        for h in h_slices:\n            for w in w_slices:\n                img_mask[:, h, w, :] = cnt\n                cnt += 1\n\n        mask_windows = window_partition(\n            img_mask, self.window_size)  # nW, window_size, window_size, 1\n        mask_windows = mask_windows.view(-1,\n                                         self.window_size * self.window_size)\n        attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)\n        attn_mask = attn_mask.masked_fill(attn_mask != 0,\n                                          float(-100.0)).masked_fill(\n                                              attn_mask == 0, float(0.0))\n\n        return attn_mask\n\n    def forward(self, x, x_size):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n            x_size (tuple[int]): Resolution of input feature.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        H, W = x_size\n        B, L, C = x.shape\n        # assert L == H * W, \"input feature has wrong size\"\n\n        shortcut = x\n        x = self.norm1(x)\n        x = x.view(B, H, W, C)\n\n        # cyclic shift\n        if self.shift_size > 0:\n            shifted_x = torch.roll(\n                x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2))\n        else:\n            shifted_x = x\n\n        # partition windows\n        x_windows = window_partition(\n            shifted_x, self.window_size)  # nW*B, window_size, window_size, C\n        x_windows = x_windows.view(-1, self.window_size * self.window_size,\n                                   C)  # nW*B, window_size*window_size, C\n\n        # W-MSA/SW-MSA (to be compatible for testing on images\n        # whose shapes are the multiple of window size\n        if self.input_resolution == x_size:\n            attn_windows = self.attn(\n                x_windows,\n                mask=self.attn_mask)  # nW*B, window_size*window_size, C\n        else:\n            attn_windows = self.attn(\n                x_windows, mask=self.calculate_mask(x_size).to(x.device))\n\n        # merge windows\n        attn_windows = attn_windows.view(-1, self.window_size,\n                                         self.window_size, C)\n        shifted_x = window_reverse(attn_windows, self.window_size, H,\n                                   W)  # B H' W' C\n\n        # reverse cyclic shift\n        if self.shift_size > 0:\n            x = torch.roll(\n                shifted_x,\n                shifts=(self.shift_size, self.shift_size),\n                dims=(1, 2))\n        else:\n            x = shifted_x\n        x = x.view(B, H * W, C)\n\n        # FFN\n        x = shortcut + self.drop_path(x)\n        x = x + self.drop_path(self.mlp(self.norm2(x)))\n\n        return x\n\n    def extra_repr(self) -> str:\n        return f'dim={self.dim}, ' \\\n               f'input_resolution={self.input_resolution}, ' \\\n               f'num_heads={self.num_heads}, ' \\\n               f'window_size={self.window_size}, ' \\\n               f'shift_size={self.shift_size}, ' \\\n               f'mlp_ratio={self.mlp_ratio}'\n\n\nclass BasicLayer(nn.Module):\n    \"\"\"A basic Swin Transformer layer for one stage.\n\n    Args:\n        dim (int): Number of input channels.\n        input_resolution (tuple[int]): Input resolution.\n        depth (int): Number of blocks.\n        num_heads (int): Number of attention heads.\n        window_size (int): Local window size.\n        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n        qkv_bias (bool, optional): If True, add a learnable bias\n            to query, key, value. Default: True\n        qk_scale (float | None, optional): Override default qk\n            scale of head_dim ** -0.5 if set.\n        drop (float, optional): Dropout rate. Default: 0.0\n        attn_drop (float, optional): Attention dropout rate. Default: 0.0\n        drop_path (float | tuple[float], optional): Stochastic depth rate.\n            Default: 0.0\n        norm_layer (nn.Module, optional): Normalization layer.\n            Default: nn.LayerNorm\n        downsample (nn.Module | None, optional): Downsample layer at the\n            end of the layer. Default: None\n        use_checkpoint (bool): Whether to use checkpointing to save memory.\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 dim,\n                 input_resolution,\n                 depth,\n                 num_heads,\n                 window_size,\n                 mlp_ratio=4.,\n                 qkv_bias=True,\n                 qk_scale=None,\n                 drop=0.,\n                 attn_drop=0.,\n                 drop_path=0.,\n                 norm_layer=nn.LayerNorm,\n                 downsample=None,\n                 use_checkpoint=False):\n\n        super().__init__()\n        self.dim = dim\n        self.input_resolution = input_resolution\n        self.depth = depth\n        self.use_checkpoint = use_checkpoint\n\n        # build blocks\n        self.blocks = nn.ModuleList([\n            SwinTransformerBlock(\n                dim=dim,\n                input_resolution=input_resolution,\n                num_heads=num_heads,\n                window_size=window_size,\n                shift_size=0 if (i % 2 == 0) else window_size // 2,\n                mlp_ratio=mlp_ratio,\n                qkv_bias=qkv_bias,\n                qk_scale=qk_scale,\n                drop=drop,\n                attn_drop=attn_drop,\n                drop_path=drop_path[i]\n                if isinstance(drop_path, list) else drop_path,\n                norm_layer=norm_layer) for i in range(depth)\n        ])\n\n        # patch merging layer\n        if downsample is not None:\n            self.downsample = downsample(\n                input_resolution, dim=dim, norm_layer=norm_layer)\n        else:\n            self.downsample = None\n\n    def forward(self, x, x_size):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n            x_size (tuple[int]): Resolution of input feature.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        for blk in self.blocks:\n            if self.use_checkpoint:\n                x = checkpoint.checkpoint(blk, x, x_size)\n            else:\n                x = blk(x, x_size)\n        if self.downsample is not None:\n            x = self.downsample(x)\n        return x\n\n    def extra_repr(self) -> str:\n        return f'dim={self.dim}, ' \\\n               f'input_resolution={self.input_resolution}, ' \\\n               f'depth={self.depth}'\n\n\nclass RSTB(nn.Module):\n    \"\"\"Residual Swin Transformer Block (RSTB).\n\n    Args:\n        dim (int): Number of input channels.\n        input_resolution (tuple[int]): Input resolution.\n        depth (int): Number of blocks.\n        num_heads (int): Number of attention heads.\n        window_size (int): Local window size.\n        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n            Default: 4.0\n        qkv_bias (bool, optional): If True, add a learnable bias to\n            query, key, value. Default: True\n        qk_scale (float | None, optional): Override default qk scale\n            of head_dim ** -0.5 if set.\n        drop (float, optional): Dropout rate. Default: 0.0\n        attn_drop (float, optional): Attention dropout rate. Default: 0.0\n        drop_path (float | tuple[float], optional): Stochastic depth rate.\n            Default: 0.0\n        norm_layer (nn.Module, optional): Normalization layer.\n            Default: nn.LayerNorm\n        downsample (nn.Module | None, optional): Downsample layer at the\n            end of the layer. Default: None\n        use_checkpoint (bool): Whether to use checkpointing to save memory.\n            Default: False.\n        img_size (int): Input image size. Default: 224\n        patch_size (int): Patch size. Default: 4\n        resi_connection (string): The convolutional block before\n            residual connection. Default: '1conv'\n    \"\"\"\n\n    def __init__(self,\n                 dim,\n                 input_resolution,\n                 depth,\n                 num_heads,\n                 window_size,\n                 mlp_ratio=4.,\n                 qkv_bias=True,\n                 qk_scale=None,\n                 drop=0.,\n                 attn_drop=0.,\n                 drop_path=0.,\n                 norm_layer=nn.LayerNorm,\n                 downsample=None,\n                 use_checkpoint=False,\n                 img_size=224,\n                 patch_size=4,\n                 resi_connection='1conv'):\n        super(RSTB, self).__init__()\n\n        self.dim = dim\n        self.input_resolution = input_resolution\n\n        self.residual_group = BasicLayer(\n            dim=dim,\n            input_resolution=input_resolution,\n            depth=depth,\n            num_heads=num_heads,\n            window_size=window_size,\n            mlp_ratio=mlp_ratio,\n            qkv_bias=qkv_bias,\n            qk_scale=qk_scale,\n            drop=drop,\n            attn_drop=attn_drop,\n            drop_path=drop_path,\n            norm_layer=norm_layer,\n            downsample=downsample,\n            use_checkpoint=use_checkpoint)\n\n        if resi_connection == '1conv':\n            self.conv = nn.Conv2d(dim, dim, 3, 1, 1)\n        elif resi_connection == '3conv':\n            # to save parameters and memory\n            self.conv = nn.Sequential(\n                nn.Conv2d(dim, dim // 4, 3, 1, 1),\n                nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                nn.Conv2d(dim // 4, dim // 4, 1, 1, 0),\n                nn.LeakyReLU(negative_slope=0.2, inplace=True),\n                nn.Conv2d(dim // 4, dim, 3, 1, 1))\n\n        self.patch_embed = PatchEmbed(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=0,\n            embed_dim=dim,\n            norm_layer=None)\n\n        self.patch_unembed = PatchUnEmbed(\n            img_size=img_size,\n            patch_size=patch_size,\n            in_chans=0,\n            embed_dim=dim,\n            norm_layer=None)\n\n    def forward(self, x, x_size):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (B, L, C).\n            x_size (tuple[int]): Resolution of input feature.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        return self.patch_embed(\n            self.conv(\n                self.patch_unembed(self.residual_group(x, x_size),\n                                   x_size))) + x\n"
  },
  {
    "path": "mmagic/models/editors/swinir/swinir_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport collections.abc\nfrom itertools import repeat\n\n\n# From PyTorch internals\ndef _ntuple(n):\n    \"\"\"A `to_tuple` function generator. It returns a function, this function\n    will repeat the input to a tuple of length ``n`` if the input is not an\n    Iterable object, otherwise, return the input directly.\n\n    Args:\n        n (int): The number of the target length.\n    \"\"\"\n\n    def parse(x):\n        if isinstance(x, collections.abc.Iterable) and not isinstance(x, str):\n            return x\n        return tuple(repeat(x, n))\n\n    return parse\n\n\nto_2tuple = _ntuple(2)\n\n\ndef drop_path(x,\n              drop_prob: float = 0.,\n              training: bool = False,\n              scale_by_keep: bool = True):\n    \"\"\"Drop paths (Stochastic Depth) per sample (when applied in main path of\n    residual blocks).\n\n    This is the same as the DropConnect impl I created for\n    EfficientNet, etc networks, however, the original name is misleading\n    as 'Drop Connect' is a different form of dropout in a separate paper...\n    See discussion:\n    https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956\n    I've opted for changing the layer and argument names to 'drop path'\n    rather than mix DropConnect as a layer name and use\n    'survival rate' as the argument.\n    \"\"\"\n    if drop_prob == 0. or not training:\n        return x\n    keep_prob = 1 - drop_prob\n    # work with diff dim tensors, not just 2D ConvNets\n    shape = (x.shape[0], ) + (1, ) * (x.ndim - 1)\n    random_tensor = x.new_empty(shape).bernoulli_(keep_prob)\n    if keep_prob > 0.0 and scale_by_keep:\n        random_tensor.div_(keep_prob)\n    return x * random_tensor\n\n\ndef window_partition(x, window_size):\n    \"\"\"\n    Args:\n        x: (B, H, W, C)\n        window_size (int): window size\n    Returns:\n        windows: (num_windows*B, window_size, window_size, C)\n    \"\"\"\n    B, H, W, C = x.shape\n    x = x.view(B, H // window_size, window_size, W // window_size, window_size,\n               C)\n    windows = x.permute(0, 1, 3, 2, 4,\n                        5).contiguous().view(-1, window_size, window_size, C)\n    return windows\n\n\ndef window_reverse(windows, window_size, H, W):\n    \"\"\"\n    Args:\n        windows: (num_windows*B, window_size, window_size, C)\n        window_size (int): Window size\n        H (int): Height of image\n        W (int): Width of image\n    Returns:\n        x: (B, H, W, C)\n    \"\"\"\n    B = int(windows.shape[0] / (H * W / window_size / window_size))\n    x = windows.view(B, H // window_size, W // window_size, window_size,\n                     window_size, -1)\n    x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1)\n    return x\n"
  },
  {
    "path": "mmagic/models/editors/tdan/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .tdan import TDAN\nfrom .tdan_net import TDANNet\n\n__all__ = ['TDAN', 'TDANNet']\n"
  },
  {
    "path": "mmagic/models/editors/tdan/tdan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models import BaseEditModel\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass TDAN(BaseEditModel):\n    \"\"\"TDAN model for video super-resolution.\n\n    Paper:\n        TDAN: Temporally-Deformable Alignment Network for Video Super-\n        Resolution, CVPR, 2020\n\n    Args:\n        generator (dict): Config for the generator structure.\n        pixel_loss (dict): Config for pixel-wise loss.\n        lq_pixel_loss (dict): Config for pixel-wise loss for the LQ images.\n        train_cfg (dict): Config for training. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 pixel_loss,\n                 lq_pixel_loss,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n        super().__init__(\n            generator=generator,\n            pixel_loss=pixel_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.lq_pixel_loss = MODELS.build(lq_pixel_loss)\n\n    def forward_train(self, inputs, data_samples=None, **kwargs):\n        \"\"\"Forward training. Returns dict of losses of training.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        feats, aligned_img = self.forward_tensor(\n            inputs, data_samples, training=True, **kwargs)\n        batch_gt_data = data_samples.gt_img\n\n        losses = dict()\n        # loss on the HR image\n        losses['loss_pix'] = self.pixel_loss(feats, batch_gt_data)\n        # loss on the aligned LR images\n        t = aligned_img.size(1)\n        lq_ref = inputs[:,\n                        t // 2:t // 2 + 1, :, :, :].expand(-1, t, -1, -1, -1)\n        loss_pix_lq = self.lq_pixel_loss(aligned_img, lq_ref)\n        losses['loss_pix_lq'] = loss_pix_lq\n\n        return losses\n\n    def forward_tensor(self,\n                       inputs,\n                       data_samples=None,\n                       training=False,\n                       **kwargs):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            training (bool): Whether is training. Default: False.\n\n        Returns:\n            (Tensor | List[Tensor]): results of forward inference and\n                forward train.\n        \"\"\"\n\n        outputs = self.generator(inputs, **kwargs)\n\n        return outputs if training else outputs[0]\n"
  },
  {
    "path": "mmagic/models/editors/tdan/tdan_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmcv.ops import DeformConv2d, DeformConv2dPack, deform_conv2d\nfrom mmengine.model import BaseModule\nfrom mmengine.model.weight_init import constant_init\nfrom torch.nn.modules.utils import _pair\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass TDANNet(BaseModule):\n    \"\"\"TDAN network structure for video super-resolution.\n\n    Support only x4 upsampling.\n\n    Paper:\n        TDAN: Temporally-Deformable Alignment Network for Video Super-\n        Resolution, CVPR, 2020\n\n    Args:\n        in_channels (int): Number of channels of the input image. Default: 3.\n        mid_channels (int): Number of channels of the intermediate features.\n            Default: 64.\n        out_channels (int): Number of channels of the output image. Default: 3.\n        num_blocks_before_align (int): Number of residual blocks before\n            temporal alignment. Default: 5.\n        num_blocks_after_align (int): Number of residual blocks after\n            temporal alignment. Default: 10.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels=3,\n                 mid_channels=64,\n                 out_channels=3,\n                 num_blocks_before_align=5,\n                 num_blocks_after_align=10):\n\n        super().__init__()\n\n        self.feat_extract = nn.Sequential(\n            ConvModule(in_channels, mid_channels, 3, padding=1),\n            make_layer(\n                ResidualBlockNoBN,\n                num_blocks_before_align,\n                mid_channels=mid_channels))\n\n        self.feat_aggregate = nn.Sequential(\n            nn.Conv2d(mid_channels * 2, mid_channels, 3, padding=1, bias=True),\n            DeformConv2dPack(\n                mid_channels, mid_channels, 3, padding=1, deform_groups=8),\n            DeformConv2dPack(\n                mid_channels, mid_channels, 3, padding=1, deform_groups=8))\n        self.align_1 = AugmentedDeformConv2dPack(\n            mid_channels, mid_channels, 3, padding=1, deform_groups=8)\n        self.align_2 = DeformConv2dPack(\n            mid_channels, mid_channels, 3, padding=1, deform_groups=8)\n        self.to_rgb = nn.Conv2d(mid_channels, 3, 3, padding=1, bias=True)\n\n        self.reconstruct = nn.Sequential(\n            ConvModule(in_channels * 5, mid_channels, 3, padding=1),\n            make_layer(\n                ResidualBlockNoBN,\n                num_blocks_after_align,\n                mid_channels=mid_channels),\n            PixelShufflePack(mid_channels, mid_channels, 2, upsample_kernel=3),\n            PixelShufflePack(mid_channels, mid_channels, 2, upsample_kernel=3),\n            nn.Conv2d(mid_channels, out_channels, 3, 1, 1, bias=False))\n\n    def forward(self, lrs):\n        \"\"\"Forward function for TDANNet.\n\n        Args:\n            lrs (Tensor): Input LR sequence with shape (n, t, c, h, w).\n\n        Returns:\n            tuple[Tensor]: Output HR image with shape (n, c, 4h, 4w) and\n            aligned LR images with shape (n, t, c, h, w).\n        \"\"\"\n        n, t, c, h, w = lrs.size()\n        lr_center = lrs[:, t // 2, :, :, :]  # LR center frame\n\n        # extract features\n        feats = self.feat_extract(lrs.view(-1, c, h, w)).view(n, t, -1, h, w)\n\n        # alignment of LR frames\n        feat_center = feats[:, t // 2, :, :, :].contiguous()\n        aligned_lrs = []\n        for i in range(0, t):\n            if i == t // 2:\n                aligned_lrs.append(lr_center)\n            else:\n                feat_neig = feats[:, i, :, :, :].contiguous()\n                feat_agg = torch.cat([feat_center, feat_neig], dim=1)\n                feat_agg = self.feat_aggregate(feat_agg)\n\n                aligned_feat = self.align_2(self.align_1(feat_neig, feat_agg))\n                aligned_lrs.append(self.to_rgb(aligned_feat))\n\n        aligned_lrs = torch.cat(aligned_lrs, dim=1)\n\n        # output HR center frame and the aligned LR frames\n        return self.reconstruct(aligned_lrs), aligned_lrs.view(n, t, c, h, w)\n\n\nclass AugmentedDeformConv2dPack(DeformConv2d):\n    \"\"\"Augmented Deformable Convolution Pack.\n\n    Different from DeformConv2dPack, which generates offsets from the\n    preceding feature, this AugmentedDeformConv2dPack takes another feature to\n    generate the offsets.\n\n    Args:\n        in_channels (int): Number of channels in the input feature.\n        out_channels (int): Number of channels produced by the convolution.\n        kernel_size (int or tuple[int]): Size of the convolving kernel.\n        stride (int or tuple[int]): Stride of the convolution. Default: 1.\n        padding (int or tuple[int]): Zero-padding added to both sides of the\n            input. Default: 0.\n        dilation (int or tuple[int]): Spacing between kernel elements.\n            Default: 1.\n        groups (int): Number of blocked connections from input channels to\n            output channels. Default: 1.\n        deform_groups (int): Number of deformable group partitions.\n        bias (bool or str): If specified as `auto`, it will be decided by the\n            norm_cfg. Bias will be set as True if norm_cfg is None, otherwise\n            False.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n        self.conv_offset = nn.Conv2d(\n            self.in_channels,\n            self.deform_groups * 2 * self.kernel_size[0] * self.kernel_size[1],\n            kernel_size=self.kernel_size,\n            stride=_pair(self.stride),\n            padding=_pair(self.padding),\n            bias=True)\n\n        self.init_offset()\n\n    def init_offset(self):\n        \"\"\"Init constant offset.\"\"\"\n        constant_init(self.conv_offset, val=0, bias=0)\n\n    def forward(self, x, extra_feat):\n        \"\"\"Forward function.\"\"\"\n        offset = self.conv_offset(extra_feat)\n        return deform_conv2d(x, offset, self.weight, self.stride, self.padding,\n                             self.dilation, self.groups, self.deform_groups)\n"
  },
  {
    "path": "mmagic/models/editors/textual_inversion/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .textual_inversion import TextualInversion\n\n__all__ = ['TextualInversion']\n"
  },
  {
    "path": "mmagic/models/editors/textual_inversion/textual_inversion.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Optional, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.logging import MMLogger\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ..stable_diffusion.stable_diffusion import StableDiffusion\n\nlogger = MMLogger.get_current_instance()\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass TextualInversion(StableDiffusion):\n    \"\"\"Implementation of `An Image is Worth One Word: Personalizing Text-to-\n    Image Generation using Textual Inversion.\n\n    <https://arxiv.org/abs/2208.01618>`_ (Textual Inversion).\n\n    Args:\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        dtype (str, optional): The dtype for the model. Defaults to 'fp16'.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise  # noqa\n            Defaults to 0.\n        tomesd_cfg (dict, optional): The config for TOMESD. Please refers to\n            https://github.com/dbolya/tomesd and\n            https://github.com/open-mmlab/mmagic/blob/main/mmagic/models/utils/tome_utils.py for detail.  # noqa\n            Defaults to None.\n        initialize_token (str, optional): The initialization token for textual\n            embedding to train. Defaults to None.\n        num_vefctor_per_token (int): The length of the learnable embedding.\n            Defaults to 1.\n        val_prompts (Union[str, List[str]], optional): The prompts for\n            validation. Defaults to None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Defaults to\n                dict(type='DataPreprocessor').\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Defaults to None/\n    \"\"\"\n\n    def __init__(self,\n                 placeholder_token: str,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 dtype: Optional[str] = None,\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 initialize_token: Optional[str] = None,\n                 num_vectors_per_token: int = 1,\n                 val_prompts=None,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None):\n\n        super().__init__(vae, text_encoder, tokenizer, unet, scheduler,\n                         test_scheduler, dtype, enable_xformers,\n                         noise_offset_weight, tomesd_cfg, data_preprocessor,\n                         init_cfg)\n\n        self.val_prompts = val_prompts\n        self.placeholder_token = placeholder_token\n        self.add_tokens(placeholder_token, initialize_token,\n                        num_vectors_per_token)\n        self.prepare_models()\n\n    def prepare_models(self):\n        \"\"\"Disable gradient for untrainable modules to save memory.\"\"\"\n        self.vae.requires_grad_(False)\n        self.unet.requires_grad_(False)\n        self.text_encoder.set_only_embedding_trainable()\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        data_samples = data['data_samples']\n        if self.val_prompts is None:\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples.split() * len(prompt)\n            data_samples = DataSample.stack(data_samples.split() * len(prompt))\n\n        unet_dtype = next(self.unet.parameters()).dtype\n        self.unet.to(self.dtype)\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        self.unet.to(unet_dtype)\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        if self.val_prompts is None:\n            data = self.data_preprocessor(data)\n            data_samples = data['data_samples']\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples = DataSample.stack(data['data_samples'] * len(prompt))\n\n        unet_dtype = next(self.unet.parameters()).dtype\n        self.unet.to(self.dtype)\n\n        output = self.infer(prompt, return_type='tensor')\n        samples = output['samples']\n\n        self.unet.to(unet_dtype)\n\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    def add_tokens(self,\n                   placeholder_token: str,\n                   initialize_token: str = None,\n                   num_vectors_per_token: int = 1):\n        \"\"\"Add token for training.\n\n        # TODO: support add tokens as dict, then we can load pretrained tokens.\n        \"\"\"\n        self.tokenizer.add_placeholder_token(\n            placeholder_token, num_vec_per_token=num_vectors_per_token)\n\n        self.text_encoder.set_embedding_layer()\n        embedding_layer = self.text_encoder.get_embedding_layer()\n        assert embedding_layer is not None, (\n            'Do not support get embedding layer for current text encoder. '\n            'Please check your configuration.')\n\n        if initialize_token:\n            init_id = self.tokenizer(initialize_token).input_ids[1]\n            initialize_embedding = embedding_layer.weight[init_id]\n            initialize_embedding = initialize_embedding[None, ...].repeat(\n                num_vectors_per_token, 1)\n        else:\n            emb_dim = embedding_layer.weight.shape[1]\n            initialize_embedding = torch.zeros(num_vectors_per_token, emb_dim)\n\n        token_info = self.tokenizer.get_token_info(placeholder_token)\n        token_info['embedding'] = initialize_embedding\n        token_info['trainable'] = True\n        self.token_info = token_info\n        embedding_layer.add_embeddings(token_info)\n\n    def train_step(self, data, optim_wrapper):\n        \"\"\"Training step.\"\"\"\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n\n        vae = self.vae.module if hasattr(self.vae, 'module') else self.vae\n        vae_dtype = next(vae.parameters()).dtype\n        unet_dtype = next(self.unet.parameters()).dtype\n\n        with optim_wrapper.optim_context(self.unet):\n            image = inputs  # image for new concept\n            prompt = data_samples.prompt\n            num_batches = image.shape[0]\n\n            image = image.to(vae_dtype)\n            latents = vae.encode(image).latent_dist.sample()\n            latents = latents * vae.config.scaling_factor\n\n            noise = torch.randn_like(latents)\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n\n            noisy_latents = self.scheduler.add_noise(latents, noise, timesteps)\n\n            input_ids = self.tokenizer(\n                prompt,\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n\n            encoder_hidden_states = self.text_encoder(input_ids)[0]\n\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            model_output = self.unet(\n                noisy_latents.to(unet_dtype),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.to(unet_dtype))\n            model_pred = model_output['sample']\n\n            loss_dict = dict()\n\n            # calculate loss in FP32\n            loss = F.mse_loss(model_pred.float(), gt.float())\n            loss_dict['loss'] = loss\n\n            parsed_loss, log_vars = self.parse_losses(loss_dict)\n            optim_wrapper.update_params(parsed_loss)\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/tof/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .tof_vfi_net import TOFlowVFINet, ToFResBlock\nfrom .tof_vsr_net import TOFlowVSRNet\n\n__all__ = ['TOFlowVFINet', 'TOFlowVSRNet', 'ToFResBlock']\n"
  },
  {
    "path": "mmagic/models/editors/tof/tof_vfi_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine import MMLogger\nfrom mmengine.model import BaseModule\nfrom mmengine.runner import load_checkpoint\n\nfrom mmagic.models.utils import flow_warp\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass TOFlowVFINet(BaseModule):\n    \"\"\"PyTorch implementation of TOFlow for video frame interpolation.\n\n    Paper: Xue et al., Video Enhancement with Task-Oriented Flow, IJCV 2018\n    Code reference:\n\n    1. https://github.com/anchen1011/toflow\n    2. https://github.com/Coldog2333/pytoflow\n\n    Args:\n        rgb_mean (list[float]):  Image mean in RGB orders.\n            Default: [0.485, 0.456, 0.406]\n        rgb_std (list[float]):  Image std in RGB orders.\n            Default: [0.229, 0.224, 0.225]\n        flow_cfg (dict): Config of SPyNet.\n            Default: dict(norm_cfg=None, pretrained=None)\n        init_cfg (dict, optional): Initialization config dict. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 rgb_mean=[0.485, 0.456, 0.406],\n                 rgb_std=[0.229, 0.224, 0.225],\n                 flow_cfg=dict(norm_cfg=None, pretrained=None),\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        # The mean and std are for img with range (0, 1)\n        self.register_buffer('mean', torch.Tensor(rgb_mean).view(1, -1, 1, 1))\n        self.register_buffer('std', torch.Tensor(rgb_std).view(1, -1, 1, 1))\n\n        # flow estimation module\n        self.spynet = SPyNet(**flow_cfg)\n\n        # reconstruction module\n        self.resnet = ToFResBlock()\n\n    def forward(self, imgs):\n        \"\"\"\n        Args:\n            imgs: Input frames with shape of (b, 2, 3, h, w).\n\n        Returns:\n            Tensor: Interpolated frame with shape of (b, 3, h, w).\n        \"\"\"\n\n        flow_10 = self.spynet(imgs[:, 0], imgs[:, 1]).permute(0, 2, 3, 1)\n        flow_01 = self.spynet(imgs[:, 1], imgs[:, 0]).permute(0, 2, 3, 1)\n\n        warp_frame0 = flow_warp(imgs[:, 0], flow_01 / 2)\n        warp_frame1 = flow_warp(imgs[:, 1], flow_10 / 2)\n\n        warp_frames = torch.stack([warp_frame0, warp_frame1], dim=1)\n        output = self.resnet(warp_frames)\n\n        return output\n\n\nclass BasicModule(nn.Module):\n    \"\"\"Basic module of SPyNet.\n\n    Note that unlike the common spynet architecture, the basic module\n    here could contain batch normalization.\n\n    Args:\n        norm_cfg (dict | None): Config of normalization.\n    \"\"\"\n\n    def __init__(self, norm_cfg):\n        super().__init__()\n\n        self.basic_module = nn.Sequential(\n            ConvModule(\n                in_channels=8,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=64,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=64,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=16,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=norm_cfg,\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=16,\n                out_channels=2,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=None))\n\n    def forward(self, tensor_input):\n        \"\"\"\n        Args:\n            tensor_input (Tensor): Input tensor with shape (b, 8, h, w).\n                8 channels contain:\n                [reference image (3), neighbor image (3), initial flow (2)].\n\n        Returns:\n            Tensor: Estimated flow with shape (b, 2, h, w)\n        \"\"\"\n        return self.basic_module(tensor_input)\n\n\nclass SPyNet(nn.Module):\n    \"\"\"SPyNet architecture.\n\n    Note that this implementation is specifically for TOFlow. It differs from\n    the common SPyNet in the following aspects:\n        1. The basic modules in paper of TOFlow contain BatchNorm.\n        2. Normalization and denormalization are not done here, as\n            they are done in TOFlow.\n    Paper:\n        Optical Flow Estimation using a Spatial Pyramid Network\n    Code reference:\n        https://github.com/Coldog2333/pytoflow\n\n    Args:\n        norm_cfg (dict | None): Config of normalization.\n        pretrained (str): path for pre-trained SPyNet. Default: None.\n    \"\"\"\n\n    def __init__(self, norm_cfg, pretrained=None):\n        super().__init__()\n\n        self.basic_module = nn.ModuleList(\n            [BasicModule(norm_cfg) for _ in range(4)])\n\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=True, logger=logger)\n        elif pretrained is not None:\n            raise TypeError('[pretrained] should be str or None, '\n                            f'but got {type(pretrained)}.')\n\n    def forward(self, ref, supp):\n        \"\"\"\n        Args:\n            ref (Tensor): Reference image with shape of (b, 3, h, w).\n            supp: The supporting image to be warped: (b, 3, h, w).\n\n        Returns:\n            Tensor: Estimated optical flow: (b, 2, h, w).\n        \"\"\"\n\n        num_batches, _, h, w = ref.size()\n        ref = [ref]\n        supp = [supp]\n\n        # generate downsampled frames\n        for _ in range(3):\n            ref.insert(\n                0,\n                F.avg_pool2d(\n                    input=ref[0],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n            supp.insert(\n                0,\n                F.avg_pool2d(\n                    input=supp[0],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n\n        # flow computation\n        flow = ref[0].new_zeros(num_batches, 2, h // 16, w // 16)\n        for i in range(4):\n            flow_up = F.interpolate(\n                input=flow,\n                scale_factor=2,\n                mode='bilinear',\n                align_corners=True) * 2.0\n            flow = flow_up + self.basic_module[i](\n                torch.cat([\n                    ref[i],\n                    flow_warp(\n                        supp[i],\n                        flow_up.permute(0, 2, 3, 1),\n                        padding_mode='border'), flow_up\n                ], 1))\n\n        return flow\n\n\nclass ToFResBlock(nn.Module):\n    \"\"\"ResNet architecture.\n\n    Three-layers ResNet/ResBlock\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n        self.res_block = nn.Sequential(\n            nn.Conv2d(6, 64, kernel_size=9, stride=1, padding=4),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(64, 64, kernel_size=1, stride=1, padding=0),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(64, 3, kernel_size=1, stride=1, padding=0))\n\n    def forward(self, frames):\n        \"\"\"\n        Args:\n            frames (Tensor): Tensor with shape of (b, 2, 3, h, w).\n\n        Returns:\n            Tensor: Interpolated frame with shape of (b, 3, h, w).\n        \"\"\"\n\n        num_batches, _, _, h, w = frames.size()\n        average = frames.mean(dim=1)\n        x = frames.view(num_batches, -1, h, w)\n        result = self.res_block(x)\n        return result + average\n"
  },
  {
    "path": "mmagic/models/editors/tof/tof_vsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.utils import flow_warp\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass TOFlowVSRNet(BaseModule):\n    \"\"\"PyTorch implementation of TOFlow.\n\n    In TOFlow, the LR frames are pre-upsampled and have the same size with\n    the GT frames.\n\n    Paper: Xue et al., Video Enhancement with Task-Oriented Flow, IJCV 2018\n    Code reference:\n\n    1. https://github.com/anchen1011/toflow\n    2. https://github.com/Coldog2333/pytoflow\n\n    Args:\n        adapt_official_weights (bool): Whether to adapt the weights translated\n            from the official implementation. Set to false if you want to\n            train from scratch. Default: False\n    \"\"\"\n\n    def __init__(self, adapt_official_weights=False, init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.adapt_official_weights = adapt_official_weights\n        self.ref_idx = 0 if adapt_official_weights else 3\n\n        # flow estimation module\n        self.spynet = SPyNet()\n\n        # reconstruction module\n        self.conv1 = nn.Conv2d(3 * 7, 64, 9, 1, 4)\n        self.conv2 = nn.Conv2d(64, 64, 9, 1, 4)\n        self.conv3 = nn.Conv2d(64, 64, 1)\n        self.conv4 = nn.Conv2d(64, 3, 1)\n\n        # activation function\n        self.relu = nn.ReLU(inplace=True)\n\n    def forward(self, lrs):\n        \"\"\"\n        Args:\n            lrs: Input lr frames: (b, 7, 3, h, w).\n\n        Returns:\n            Tensor: SR frame: (b, 3, h, w).\n        \"\"\"\n        # In the official implementation, the 0-th frame is the reference frame\n        if self.adapt_official_weights:\n            lrs = lrs[:, [3, 0, 1, 2, 4, 5, 6], :, :, :]\n\n        num_batches, _, _, h, w = lrs.size()\n\n        lr_ref = lrs[:, self.ref_idx, :, :, :]\n        lr_aligned = []\n        for i in range(7):  # 7 frames\n            if i == self.ref_idx:\n                lr_aligned.append(lr_ref)\n            else:\n                lr_supp = lrs[:, i, :, :, :]\n                flow = self.spynet(lr_ref, lr_supp)\n                lr_aligned.append(flow_warp(lr_supp, flow.permute(0, 2, 3, 1)))\n\n        # reconstruction\n        hr = torch.stack(lr_aligned, dim=1)\n        hr = hr.view(num_batches, -1, h, w)\n        hr = self.relu(self.conv1(hr))\n        hr = self.relu(self.conv2(hr))\n        hr = self.relu(self.conv3(hr))\n        hr = self.conv4(hr) + lr_ref\n\n        return hr\n\n\nclass BasicModule(nn.Module):\n    \"\"\"Basic module of SPyNet.\n\n    Note that unlike the common spynet architecture, the basic module here\n    contains batch normalization.\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n        self.basic_module = nn.Sequential(\n            ConvModule(\n                in_channels=8,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=dict(type='BN'),\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=64,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=dict(type='BN'),\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=64,\n                out_channels=32,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=dict(type='BN'),\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=32,\n                out_channels=16,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=dict(type='BN'),\n                act_cfg=dict(type='ReLU')),\n            ConvModule(\n                in_channels=16,\n                out_channels=2,\n                kernel_size=7,\n                stride=1,\n                padding=3,\n                norm_cfg=None,\n                act_cfg=None))\n\n    def forward(self, tensor_input):\n        \"\"\"\n        Args:\n            tensor_input (Tensor): Input tensor with shape (b, 8, h, w).\n                8 channels contain:\n                [reference image (3), neighbor image (3), initial flow (2)].\n\n        Returns:\n            Tensor: Estimated flow with shape (b, 2, h, w)\n        \"\"\"\n        return self.basic_module(tensor_input)\n\n\nclass SPyNet(nn.Module):\n    \"\"\"SPyNet architecture.\n\n    Note that this implementation is specifically for TOFlow. It differs from\n    the common SPyNet in the following aspects:\n        1. The basic modules here contain BatchNorm.\n        2. Normalization and denormalization are not done here, as\n            they are done in TOFlow.\n    Paper:\n        Optical Flow Estimation using a Spatial Pyramid Network\n    Code reference:\n        https://github.com/Coldog2333/pytoflow\n    \"\"\"\n\n    def __init__(self):\n        super().__init__()\n\n        self.basic_module = nn.ModuleList([BasicModule() for _ in range(4)])\n\n    def forward(self, ref, supp):\n        \"\"\"\n        Args:\n            ref (Tensor): Reference image with shape of (b, 3, h, w).\n            supp: The supporting image to be warped: (b, 3, h, w).\n\n        Returns:\n            Tensor: Estimated optical flow: (b, 2, h, w).\n        \"\"\"\n        num_batches, _, h, w = ref.size()\n        ref = [ref]\n        supp = [supp]\n\n        # generate downsampled frames\n        for _ in range(3):\n            ref.insert(\n                0,\n                F.avg_pool2d(\n                    input=ref[0],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n            supp.insert(\n                0,\n                F.avg_pool2d(\n                    input=supp[0],\n                    kernel_size=2,\n                    stride=2,\n                    count_include_pad=False))\n\n        # flow computation\n        flow = ref[0].new_zeros(num_batches, 2, h // 16, w // 16)\n        for i in range(4):\n            flow_up = F.interpolate(\n                input=flow,\n                scale_factor=2,\n                mode='bilinear',\n                align_corners=True) * 2.0\n            flow = flow_up + self.basic_module[i](\n                torch.cat([\n                    ref[i],\n                    flow_warp(supp[i], flow_up.permute(0, 2, 3, 1)), flow_up\n                ], 1))\n        return flow\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .lte import LTE\nfrom .search_transformer import SearchTransformer\nfrom .ttsr import TTSR\nfrom .ttsr_disc import TTSRDiscriminator\nfrom .ttsr_net import TTSRNet\n\n__all__ = [\n    'LTE',\n    'SearchTransformer',\n    'TTSR',\n    'TTSRDiscriminator',\n    'TTSRNet',\n]\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/lte.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine.model import BaseModule\nfrom torchvision import models\n\nfrom mmagic.models.archs import ImgNormalize\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass LTE(BaseModule):\n    \"\"\"Learnable Texture Extractor.\n\n    Based on pretrained VGG19. Generate features in 3 levels.\n\n    Args:\n        requires_grad (bool): Require grad or not. Default: True.\n        pixel_range (float): Pixel range of feature. Default: 1.\n        load_pretrained_vgg (bool): Load pretrained VGG from torchvision.\n            Default: True.\n            Train: must load pretrained VGG.\n            Eval: needn't load pretrained VGG, because we will load pretrained\n            LTE.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 requires_grad=True,\n                 pixel_range=1.,\n                 load_pretrained_vgg=True,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        vgg_mean = (0.485, 0.456, 0.406)\n        vgg_std = (0.229 * pixel_range, 0.224 * pixel_range,\n                   0.225 * pixel_range)\n        self.img_normalize = ImgNormalize(\n            pixel_range=pixel_range, img_mean=vgg_mean, img_std=vgg_std)\n\n        # use vgg19 weights to initialize\n        vgg_pretrained_features = models.vgg19(\n            pretrained=load_pretrained_vgg).features\n\n        self.slice1 = torch.nn.Sequential()\n        self.slice2 = torch.nn.Sequential()\n        self.slice3 = torch.nn.Sequential()\n\n        for x in range(2):\n            self.slice1.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(2, 7):\n            self.slice2.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(7, 12):\n            self.slice3.add_module(str(x), vgg_pretrained_features[x])\n\n        if not requires_grad:\n            for param in self.slice1.parameters():\n                param.requires_grad = requires_grad\n            for param in self.slice2.parameters():\n                param.requires_grad = requires_grad\n            for param in self.slice3.parameters():\n                param.requires_grad = requires_grad\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, 3, h, w).\n\n        Returns:\n            Tuple[Tensor]: Forward results in 3 levels.\n                x_level3: Forward results in level 3 (n, 256, h/4, w/4).\n                x_level2: Forward results in level 2 (n, 128, h/2, w/2).\n                x_level1: Forward results in level 1 (n, 64, h, w).\n        \"\"\"\n\n        x = self.img_normalize(x)\n\n        x_level1 = x = self.slice1(x)\n        x_level2 = x = self.slice2(x)\n        x_level3 = x = self.slice3(x)\n\n        return [x_level3, x_level2, x_level1]\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/search_transformer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass SearchTransformer(BaseModule):\n    \"\"\"Search texture reference by transformer.\n\n    Include relevance embedding, hard-attention and soft-attention.\n    \"\"\"\n\n    def gather(self, inputs, dim, index):\n        \"\"\"Hard Attention. Gathers values along an axis specified by dim.\n\n        Args:\n            inputs (Tensor): The source tensor. (N, C*k*k, H*W)\n            dim (int): The axis along which to index.\n            index (Tensor): The indices of elements to gather. (N, H*W)\n\n        results:\n            outputs (Tensor): The result tensor. (N, C*k*k, H*W)\n        \"\"\"\n\n        views = [inputs.size(0)\n                 ] + [1 if i != dim else -1 for i in range(1, inputs.ndim)]\n        expansion = [\n            -1 if i in (0, dim) else d for i, d in enumerate(inputs.size())\n        ]\n        index = index.view(views).expand(expansion)\n        outputs = torch.gather(inputs, dim, index)\n\n        return outputs\n\n    def forward(self, img_lq, ref_lq, refs):\n        \"\"\"Texture transformer.\n\n        Q = LTE(img_lq)\n        K = LTE(ref_lq)\n        V = LTE(ref), from V_level_n to V_level_1\n\n        Relevance embedding aims to embed the relevance between the LQ and\n            Ref image by estimating the similarity between Q and K.\n        Hard-Attention: Only transfer features from the most relevant position\n            in V for each query.\n        Soft-Attention: synthesize features from the transferred GT texture\n            features T and the LQ features F from the backbone.\n\n        Args:\n            All args are features come from extractor (such as LTE).\n                These features contain 3 levels.\n                When upscale_factor=4, the size ratio of these features is\n                level3:level2:level1 = 1:2:4.\n            img_lq (Tensor): Tensor of 4x bicubic-upsampled lq image.\n                (N, C, H, W)\n            ref_lq (Tensor): Tensor of ref_lq. ref_lq is obtained\n                by applying bicubic down-sampling and up-sampling with factor\n                4x on ref. (N, C, H, W)\n            refs (Tuple[Tensor]): Tuple of ref tensors.\n                [(N, C, H, W), (N, C/2, 2H, 2W), ...]\n\n        Returns:\n            tuple: tuple contains:\n                soft_attention (Tensor): Soft-Attention tensor. (N, 1, H, W) \\n\n                textures (Tuple[Tensor]): Transferred GT textures.\n                [(N, C, H, W), (N, C/2, 2H, 2W), ...]\n        \"\"\"\n\n        levels = len(refs)\n        # query\n        query = F.unfold(img_lq, kernel_size=(3, 3), padding=1)\n\n        # key\n        key = F.unfold(ref_lq, kernel_size=(3, 3), padding=1)\n        key_t = key.permute(0, 2, 1)\n\n        # values\n        values = [\n            F.unfold(\n                refs[i],\n                kernel_size=3 * pow(2, i),\n                padding=pow(2, i),\n                stride=pow(2, i)) for i in range(levels)\n        ]\n\n        key_t = F.normalize(key_t, dim=2)  # [N, H*W, C*k*k]\n        query = F.normalize(query, dim=1)  # [N, C*k*k, H*W]\n\n        # Relevance embedding\n        rel_embedding = torch.bmm(key_t, query)  # [N, H*W, H*W]\n        max_val, max_index = torch.max(rel_embedding, dim=1)  # [N, H*W]\n\n        # hard-attention\n        textures = [self.gather(value, 2, max_index) for value in values]\n\n        # to tensor\n        h, w = img_lq.size()[-2:]\n        textures = [\n            F.fold(\n                textures[i],\n                output_size=(h * pow(2, i), w * pow(2, i)),\n                kernel_size=3 * pow(2, i),\n                padding=pow(2, i),\n                stride=pow(2, i)) / 9. for i in range(levels)\n        ]\n\n        soft_attention = max_val.view(max_val.size(0), 1, h, w)\n\n        return soft_attention, textures\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/ttsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List\n\nimport torch\nfrom mmengine.optim import OptimWrapperDict\n\nfrom mmagic.models.utils import set_requires_grad\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom ..srgan import SRGAN\n\n\n@MODELS.register_module()\nclass TTSR(SRGAN):\n    \"\"\"TTSR model for Reference-based Image Super-Resolution.\n\n    Paper: Learning Texture Transformer Network for Image Super-Resolution.\n\n    Args:\n        generator (dict): Config for the generator.\n        extractor (dict): Config for the extractor.\n        transformer (dict): Config for the transformer.\n        pixel_loss (dict): Config for the pixel loss.\n        discriminator (dict): Config for the discriminator. Default: None.\n        perceptual_loss (dict): Config for the perceptual loss. Default: None.\n        transferal_perceptual_loss (dict): Config for the transferal perceptual\n            loss. Default: None.\n        gan_loss (dict): Config for the GAN loss. Default: None\n        train_cfg (dict): Config for train. Default: None.\n        test_cfg (dict): Config for testing. Default: None.\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Default: None.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Default: None.\n    \"\"\"\n\n    def __init__(self,\n                 generator,\n                 extractor,\n                 transformer,\n                 pixel_loss,\n                 discriminator=None,\n                 perceptual_loss=None,\n                 transferal_perceptual_loss=None,\n                 gan_loss=None,\n                 train_cfg=None,\n                 test_cfg=None,\n                 init_cfg=None,\n                 data_preprocessor=None):\n\n        super().__init__(\n            generator=generator,\n            discriminator=discriminator,\n            gan_loss=gan_loss,\n            pixel_loss=pixel_loss,\n            perceptual_loss=perceptual_loss,\n            train_cfg=train_cfg,\n            test_cfg=test_cfg,\n            init_cfg=init_cfg,\n            data_preprocessor=data_preprocessor)\n\n        self.transformer = MODELS.build(transformer)\n        self.extractor = MODELS.build(extractor)\n        extractor['requires_grad'] = False\n        self.extractor_copy = MODELS.build(extractor)\n        set_requires_grad(self.extractor_copy, False)\n\n        if transferal_perceptual_loss:\n            self.transferal_perceptual_loss = MODELS.build(\n                transferal_perceptual_loss)\n        else:\n            self.transferal_perceptual_loss = None\n\n        self.pixel_init = train_cfg.get('pixel_init', 0) if train_cfg else 0\n\n    def forward_tensor(self, inputs, data_samples=None, training=False):\n        \"\"\"Forward tensor. Returns result of simple forward.\n\n        Args:\n            inputs (torch.Tensor): batch input tensor collated by\n                :attr:`data_preprocessor`.\n            data_samples (List[BaseDataElement], optional):\n                data samples collated by :attr:`data_preprocessor`.\n            training (bool): Whether is training. Default: False.\n\n        Returns:\n            (Tensor | Tuple[List[Tensor]]): results of forward inference and\n                forward train.\n        \"\"\"\n\n        img_lq = []\n        ref_lq = []\n        ref = []\n\n        img_lq = data_samples.img_lq / 255.\n        ref_lq = data_samples.ref_lq / 255.\n        ref = data_samples.ref_img / 255.\n\n        img_lq, _, _ = self.extractor(img_lq)\n        ref_lq, _, _ = self.extractor(ref_lq)\n        refs = self.extractor(ref)\n\n        soft_attention, textures = self.transformer(img_lq, ref_lq, refs)\n\n        pred = self.generator(inputs, soft_attention, textures)\n\n        if training:\n            return pred, soft_attention, textures\n        else:\n            return pred\n\n    def if_run_g(self):\n        \"\"\"Calculates whether need to run the generator step.\"\"\"\n\n        return True\n\n    def if_run_d(self):\n        \"\"\"Calculates whether need to run the discriminator step.\"\"\"\n\n        return self.step_counter >= self.pixel_init and super().if_run_d()\n\n    def g_step(self, batch_outputs, batch_gt_data: DataSample):\n        \"\"\"G step of GAN: Calculate losses of generator.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n\n        Returns:\n            dict: Dict of losses.\n        \"\"\"\n\n        losses = dict()\n        pred, soft_attention, textures = batch_outputs\n\n        # pix loss\n        if self.pixel_loss:\n            losses['loss_pix'] = self.pixel_loss(pred, batch_gt_data)\n\n        if self.step_counter >= self.pixel_init:\n            # perceptual loss\n            if self.perceptual_loss:\n                loss_percep, loss_style = self.perceptual_loss(\n                    pred, batch_gt_data)\n                if loss_percep is not None:\n                    losses['loss_perceptual'] = loss_percep\n                if loss_style is not None:\n                    losses['loss_style'] = loss_style\n\n            # transform loss\n            if self.transferal_perceptual_loss:\n                state_dict = self.extractor.module.state_dict() if hasattr(\n                    self.extractor, 'module') else self.extractor.state_dict()\n                self.extractor_copy.load_state_dict(state_dict)\n                sr_textures = self.extractor_copy((pred + 1.) / 2.)\n                losses['loss_transferal'] = self.transferal_perceptual_loss(\n                    sr_textures, soft_attention, textures)\n\n            # gan loss for generator\n            if self.gan_loss and self.discriminator:\n                fake_g_pred = self.discriminator(pred)\n                losses['loss_gan'] = self.gan_loss(\n                    fake_g_pred, target_is_real=True, is_disc=False)\n\n        return losses\n\n    def g_step_with_optim(self, batch_outputs: torch.Tensor,\n                          batch_gt_data: torch.Tensor,\n                          optim_wrapper: OptimWrapperDict):\n        \"\"\"G step with optim of GAN: Calculate losses of generator and run\n        optim.\n\n        Args:\n            batch_outputs (Tensor): Batch output of generator.\n            batch_gt_data (Tensor): Batch GT data.\n            optim_wrapper (OptimWrapperDict): Optim wrapper dict.\n\n        Returns:\n            dict: Dict of parsed losses.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n        e_optim_wrapper = optim_wrapper['extractor']\n\n        losses_g = self.g_step(batch_outputs, batch_gt_data)\n        parsed_losses_g, log_vars_g = self.parse_losses(losses_g)\n\n        if g_optim_wrapper.should_update():\n            g_optim_wrapper.backward(parsed_losses_g)\n            g_optim_wrapper.step()\n            g_optim_wrapper.zero_grad()\n\n        if e_optim_wrapper.should_update():\n            e_optim_wrapper.step()\n            e_optim_wrapper.zero_grad()\n\n        return log_vars_g\n\n    def train_step(self, data: List[dict],\n                   optim_wrapper: OptimWrapperDict) -> Dict[str, torch.Tensor]:\n        \"\"\"Train step of GAN-based method.\n\n        Args:\n            data (List[dict]): Data sampled from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance\n                used to update model parameters.\n\n        Returns:\n            Dict[str, torch.Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n\n        g_optim_wrapper = optim_wrapper['generator']\n\n        data = self.data_preprocessor(data, True)\n        batch_inputs = data['inputs']\n        data_samples = data['data_samples']\n        batch_gt_data = self.extract_gt_data(data_samples)\n\n        log_vars = dict()\n\n        with g_optim_wrapper.optim_context(self):\n            batch_outputs = self.forward_train(batch_inputs, data_samples)\n\n        if self.if_run_g():\n            set_requires_grad(self.discriminator, False)\n\n            log_vars_d = self.g_step_with_optim(\n                batch_outputs=batch_outputs,\n                batch_gt_data=batch_gt_data,\n                optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if self.if_run_d():\n            set_requires_grad(self.discriminator, True)\n\n            pred, _, _ = batch_outputs\n\n            for _ in range(self.disc_repeat):\n                # detach before function call to resolve PyTorch2.0 compile bug\n                log_vars_d = self.d_step_with_optim(\n                    batch_outputs=pred.detach(),\n                    batch_gt_data=batch_gt_data,\n                    optim_wrapper=optim_wrapper)\n\n            log_vars.update(log_vars_d)\n\n        if 'loss' in log_vars:\n            log_vars.pop('loss')\n\n        self.step_counter += 1\n\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/ttsr_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch.nn as nn\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass TTSRDiscriminator(BaseModule):\n    \"\"\"A discriminator for TTSR.\n\n    Args:\n        in_channels (int): Channel number of inputs. Default: 3.\n        in_size (int): Size of input image. Default: 160.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self, in_channels=3, in_size=160, init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.body = nn.Sequential(\n            nn.Conv2d(in_channels, 32, 3, 1, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(32, 32, 3, 2, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(32, 64, 3, 1, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(64, 64, 3, 2, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(64, 128, 3, 1, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(128, 128, 3, 2, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(128, 256, 3, 1, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(256, 256, 3, 2, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(256, 512, 3, 1, 1), nn.LeakyReLU(0.2),\n            nn.Conv2d(512, 512, 3, 2, 1), nn.LeakyReLU(0.2))\n\n        self.last = nn.Sequential(\n            nn.Linear(in_size // 32 * in_size // 32 * 512, 1024),\n            nn.LeakyReLU(0.2), nn.Linear(1024, 1))\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x = self.body(x)\n        x = x.view(x.size(0), -1)\n        x = self.last(x)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/ttsr/ttsr_net.py",
    "content": "from functools import partial\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmcv.cnn import build_conv_layer\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.archs import PixelShufflePack, ResidualBlockNoBN\nfrom mmagic.models.utils import make_layer\nfrom mmagic.registry import MODELS\n\n# Use partial to specify some default arguments\n_conv3x3_layer = partial(\n    build_conv_layer, dict(type='Conv2d'), kernel_size=3, padding=1)\n_conv1x1_layer = partial(\n    build_conv_layer, dict(type='Conv2d'), kernel_size=1, padding=0)\n\n\n@MODELS.register_module()\nclass TTSRNet(BaseModule):\n    \"\"\"TTSR network structure (main-net) for reference-based super-resolution.\n\n    Paper: Learning Texture Transformer Network for Image Super-Resolution\n\n    Adapted from 'https://github.com/researchmm/TTSR.git'\n    'https://github.com/researchmm/TTSR'\n    Copyright permission at 'https://github.com/researchmm/TTSR/issues/38'.\n\n    Args:\n        in_channels (int): Number of channels in the input image\n        out_channels (int): Number of channels in the output image\n        mid_channels (int): Channel number of intermediate features.\n            Default: 64\n        texture_channels (int): Number of texture channels. Default: 64.\n        num_blocks (tuple[int]): Block numbers in the trunk network.\n            Default: (16, 16, 8, 4)\n        res_scale (float): Used to scale the residual in residual block.\n            Default: 1.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 out_channels,\n                 mid_channels=64,\n                 texture_channels=64,\n                 num_blocks=(16, 16, 8, 4),\n                 res_scale=1.0,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n\n        self.texture_channels = texture_channels\n\n        self.sfe = SFE(in_channels, mid_channels, num_blocks[0], res_scale)\n\n        # stage 1\n        self.conv_first1 = _conv3x3_layer(4 * texture_channels + mid_channels,\n                                          mid_channels)\n\n        self.res_block1 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[1],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n\n        self.conv_last1 = _conv3x3_layer(mid_channels, mid_channels)\n\n        # up-sampling 1 -> 2\n        self.up1 = PixelShufflePack(\n            in_channels=mid_channels,\n            out_channels=mid_channels,\n            scale_factor=2,\n            upsample_kernel=3)\n\n        # stage 2\n        self.conv_first2 = _conv3x3_layer(2 * texture_channels + mid_channels,\n                                          mid_channels)\n\n        self.csfi2 = CSFI2(mid_channels)\n\n        self.res_block2_1 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[2],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n        self.res_block2_2 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[2],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n\n        self.conv_last2_1 = _conv3x3_layer(mid_channels, mid_channels)\n        self.conv_last2_2 = _conv3x3_layer(mid_channels, mid_channels)\n\n        # up-sampling 2 -> 3\n        self.up2 = PixelShufflePack(\n            in_channels=mid_channels,\n            out_channels=mid_channels,\n            scale_factor=2,\n            upsample_kernel=3)\n\n        # stage 3\n        self.conv_first3 = _conv3x3_layer(texture_channels + mid_channels,\n                                          mid_channels)\n\n        self.csfi3 = CSFI3(mid_channels)\n\n        self.res_block3_1 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[3],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n        self.res_block3_2 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[3],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n        self.res_block3_3 = make_layer(\n            ResidualBlockNoBN,\n            num_blocks[3],\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n\n        self.conv_last3_1 = _conv3x3_layer(mid_channels, mid_channels)\n        self.conv_last3_2 = _conv3x3_layer(mid_channels, mid_channels)\n        self.conv_last3_3 = _conv3x3_layer(mid_channels, mid_channels)\n\n        # end, merge features\n        self.merge_features = MergeFeatures(mid_channels, out_channels)\n\n    def forward(self, x, soft_attention, textures):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n            soft_attention (Tensor): Soft-Attention tensor with shape\n                (n, 1, h, w).\n            textures (Tuple[Tensor]): Transferred HR texture tensors.\n                [(N, C, H, W), (N, C/2, 2H, 2W), ...]\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        assert textures[-1].shape[1] == self.texture_channels\n\n        x1 = self.sfe(x)\n\n        # stage 1\n        x1_res = torch.cat((x1, textures[0]), dim=1)\n        x1_res = self.conv_first1(x1_res)\n\n        # soft-attention\n        x1 = x1 + x1_res * soft_attention\n\n        x1_res = self.res_block1(x1)\n        x1_res = self.conv_last1(x1_res)\n\n        x1 = x1 + x1_res\n\n        # stage 2\n        x21 = x1\n        x22 = self.up1(x1)\n        x22 = F.relu(x22)\n\n        x22_res = torch.cat((x22, textures[1]), dim=1)\n        x22_res = self.conv_first2(x22_res)\n\n        # soft-attention\n        x22_res = x22_res * F.interpolate(\n            soft_attention,\n            scale_factor=2,\n            mode='bicubic',\n            align_corners=False)\n        x22 = x22 + x22_res\n\n        x21_res, x22_res = self.csfi2(x21, x22)\n\n        x21_res = self.res_block2_1(x21_res)\n        x22_res = self.res_block2_2(x22_res)\n\n        x21_res = self.conv_last2_1(x21_res)\n        x22_res = self.conv_last2_2(x22_res)\n\n        x21 = x21 + x21_res\n        x22 = x22 + x22_res\n\n        # stage 3\n        x31 = x21\n        x32 = x22\n        x33 = self.up2(x22)\n        x33 = F.relu(x33)\n\n        x33_res = torch.cat((x33, textures[2]), dim=1)\n        x33_res = self.conv_first3(x33_res)\n\n        # soft-attention\n        x33_res = x33_res * F.interpolate(\n            soft_attention,\n            scale_factor=4,\n            mode='bicubic',\n            align_corners=False)\n        x33 = x33 + x33_res\n\n        x31_res, x32_res, x33_res = self.csfi3(x31, x32, x33)\n\n        x31_res = self.res_block3_1(x31_res)\n        x32_res = self.res_block3_2(x32_res)\n        x33_res = self.res_block3_3(x33_res)\n\n        x31_res = self.conv_last3_1(x31_res)\n        x32_res = self.conv_last3_2(x32_res)\n        x33_res = self.conv_last3_3(x33_res)\n\n        x31 = x31 + x31_res\n        x32 = x32 + x32_res\n        x33 = x33 + x33_res\n        x = self.merge_features(x31, x32, x33)\n\n        return x\n\n\nclass SFE(nn.Module):\n    \"\"\"Structural Feature Encoder.\n\n    Backbone of Texture Transformer Network for Image Super-Resolution.\n\n    Args:\n        in_channels (int): Number of channels in the input image\n        mid_channels (int): Channel number of intermediate features\n        num_blocks (int): Block number in the trunk network\n        res_scale (float): Used to scale the residual in residual block.\n            Default: 1.\n    \"\"\"\n\n    def __init__(self, in_channels, mid_channels, num_blocks, res_scale):\n        super().__init__()\n\n        self.num_blocks = num_blocks\n        self.conv_first = _conv3x3_layer(in_channels, mid_channels)\n\n        self.body = make_layer(\n            ResidualBlockNoBN,\n            num_blocks,\n            mid_channels=mid_channels,\n            res_scale=res_scale)\n\n        self.conv_last = _conv3x3_layer(mid_channels, mid_channels)\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        x1 = x = F.relu(self.conv_first(x))\n        x = self.body(x)\n        x = self.conv_last(x)\n        x = x + x1\n        return x\n\n\nclass CSFI2(nn.Module):\n    \"\"\"Cross-Scale Feature Integration between 1x and 2x features.\n\n    Cross-Scale Feature Integration in Texture Transformer Network for\n        Image Super-Resolution.\n    It is cross-scale feature integration between 1x and 2x features.\n        For example, `conv2to1` means conv layer from 2x feature to 1x\n        feature. Down-sampling is achieved by conv layer with stride=2,\n        and up-sampling is achieved by bicubic interpolate and conv layer.\n\n    Args:\n        mid_channels (int): Channel number of intermediate features\n    \"\"\"\n\n    def __init__(self, mid_channels):\n        super().__init__()\n        self.conv1to2 = _conv1x1_layer(mid_channels, mid_channels)\n        self.conv2to1 = _conv3x3_layer(mid_channels, mid_channels, stride=2)\n\n        self.conv_merge1 = _conv3x3_layer(mid_channels * 2, mid_channels)\n        self.conv_merge2 = _conv3x3_layer(mid_channels * 2, mid_channels)\n\n    def forward(self, x1, x2):\n        \"\"\"Forward function.\n\n        Args:\n            x1 (Tensor): Input tensor with shape (n, c, h, w).\n            x2 (Tensor): Input tensor with shape (n, c, 2h, 2w).\n\n        Returns:\n            x1 (Tensor): Output tensor with shape (n, c, h, w).\n            x2 (Tensor): Output tensor with shape (n, c, 2h, 2w).\n        \"\"\"\n\n        x12 = F.interpolate(\n            x1, scale_factor=2, mode='bicubic', align_corners=False)\n        x12 = F.relu(self.conv1to2(x12))\n        x21 = F.relu(self.conv2to1(x2))\n\n        x1 = F.relu(self.conv_merge1(torch.cat((x1, x21), dim=1)))\n        x2 = F.relu(self.conv_merge2(torch.cat((x2, x12), dim=1)))\n\n        return x1, x2\n\n\nclass CSFI3(nn.Module):\n    \"\"\"Cross-Scale Feature Integration between 1x, 2x, and 4x features.\n\n    Cross-Scale Feature Integration in Texture Transformer Network for\n        Image Super-Resolution.\n    It is cross-scale feature integration between 1x and 2x features.\n        For example, `conv2to1` means conv layer from 2x feature to 1x\n        feature. Down-sampling is achieved by conv layer with stride=2,\n        and up-sampling is achieved by bicubic interpolate and conv layer.\n\n    Args:\n        mid_channels (int): Channel number of intermediate features\n    \"\"\"\n\n    def __init__(self, mid_channels):\n        super().__init__()\n        self.conv1to2 = _conv1x1_layer(mid_channels, mid_channels)\n        self.conv1to4 = _conv1x1_layer(mid_channels, mid_channels)\n\n        self.conv2to1 = _conv3x3_layer(mid_channels, mid_channels, stride=2)\n        self.conv2to4 = _conv1x1_layer(mid_channels, mid_channels)\n\n        self.conv4to1_1 = _conv3x3_layer(mid_channels, mid_channels, stride=2)\n        self.conv4to1_2 = _conv3x3_layer(mid_channels, mid_channels, stride=2)\n        self.conv4to2 = _conv3x3_layer(mid_channels, mid_channels, stride=2)\n\n        self.conv_merge1 = _conv3x3_layer(mid_channels * 3, mid_channels)\n        self.conv_merge2 = _conv3x3_layer(mid_channels * 3, mid_channels)\n        self.conv_merge4 = _conv3x3_layer(mid_channels * 3, mid_channels)\n\n    def forward(self, x1, x2, x4):\n        \"\"\"Forward function.\n\n        Args:\n            x1 (Tensor): Input tensor with shape (n, c, h, w).\n            x2 (Tensor): Input tensor with shape (n, c, 2h, 2w).\n            x4 (Tensor): Input tensor with shape (n, c, 4h, 4w).\n\n        Returns:\n            x1 (Tensor): Output tensor with shape (n, c, h, w).\n            x2 (Tensor): Output tensor with shape (n, c, 2h, 2w).\n            x4 (Tensor): Output tensor with shape (n, c, 4h, 4w).\n        \"\"\"\n\n        x12 = F.interpolate(\n            x1, scale_factor=2, mode='bicubic', align_corners=False)\n        x12 = F.relu(self.conv1to2(x12))\n        x14 = F.interpolate(\n            x1, scale_factor=4, mode='bicubic', align_corners=False)\n        x14 = F.relu(self.conv1to4(x14))\n\n        x21 = F.relu(self.conv2to1(x2))\n        x24 = F.interpolate(\n            x2, scale_factor=2, mode='bicubic', align_corners=False)\n        x24 = F.relu(self.conv2to4(x24))\n\n        x41 = F.relu(self.conv4to1_1(x4))\n        x41 = F.relu(self.conv4to1_2(x41))\n        x42 = F.relu(self.conv4to2(x4))\n\n        x1 = F.relu(self.conv_merge1(torch.cat((x1, x21, x41), dim=1)))\n        x2 = F.relu(self.conv_merge2(torch.cat((x2, x12, x42), dim=1)))\n        x4 = F.relu(self.conv_merge4(torch.cat((x4, x14, x24), dim=1)))\n\n        return x1, x2, x4\n\n\nclass MergeFeatures(nn.Module):\n    \"\"\"Merge Features. Merge 1x, 2x, and 4x features.\n\n    Final module of Texture Transformer Network for Image Super-Resolution.\n\n    Args:\n        mid_channels (int): Channel number of intermediate features\n        out_channels (int): Number of channels in the output image\n    \"\"\"\n\n    def __init__(self, mid_channels, out_channels):\n        super().__init__()\n        self.conv1to4 = _conv1x1_layer(mid_channels, mid_channels)\n        self.conv2to4 = _conv1x1_layer(mid_channels, mid_channels)\n        self.conv_merge = _conv3x3_layer(mid_channels * 3, mid_channels)\n        self.conv_last1 = _conv3x3_layer(mid_channels, mid_channels // 2)\n        self.conv_last2 = _conv1x1_layer(mid_channels // 2, out_channels)\n\n    def forward(self, x1, x2, x4):\n        \"\"\"Forward function.\n\n        Args:\n            x1 (Tensor): Input tensor with shape (n, c, h, w).\n            x2 (Tensor): Input tensor with shape (n, c, 2h, 2w).\n            x4 (Tensor): Input tensor with shape (n, c, 4h, 4w).\n\n        Returns:\n            x (Tensor): Output tensor with shape (n, c_out, 4h, 4w).\n        \"\"\"\n\n        x14 = F.interpolate(\n            x1, scale_factor=4, mode='bicubic', align_corners=False)\n        x14 = F.relu(self.conv1to4(x14))\n        x24 = F.interpolate(\n            x2, scale_factor=2, mode='bicubic', align_corners=False)\n        x24 = F.relu(self.conv2to4(x24))\n\n        x = F.relu(self.conv_merge(torch.cat((x4, x14, x24), dim=1)))\n        x = self.conv_last1(x)\n        x = self.conv_last2(x)\n        x = torch.clamp(x, -1, 1)\n\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/vico/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .vico import ViCo\nfrom .vico_utils import set_vico_modules\n\n__all__ = ['ViCo', 'set_vico_modules']\n"
  },
  {
    "path": "mmagic/models/editors/vico/vico.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, List, Optional, Union\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.runner import set_random_seed\nfrom PIL import Image\nfrom tqdm.auto import tqdm\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\nfrom ..stable_diffusion.stable_diffusion import StableDiffusion\nfrom .vico_utils import set_vico_modules\n\nModelType = Union[Dict, nn.Module]\n\n\n@MODELS.register_module()\nclass ViCo(StableDiffusion):\n    \"\"\"Implementation of `ViCo with Stable Diffusion.\n\n    <https://arxiv.org/abs/2306.00971>`_ (ViCo).\n\n    Args:\n        vae (Union[dict, nn.Module]): The config or module for VAE model.\n        text_encoder (Union[dict, nn.Module]): The config or module for text\n            encoder.\n        tokenizer (str): The **name** for CLIP tokenizer.\n        unet (Union[dict, nn.Module]): The config or module for Unet model.\n        schedule (Union[dict, nn.Module]): The config or module for diffusion\n            scheduler.\n        test_scheduler (Union[dict, nn.Module], optional): The config or\n            module for diffusion scheduler in test stage (`self.infer`). If not\n            passed, will use the same scheduler as `schedule`. Defaults to\n            None.\n        val_prompts (Union[str, List[str]], optional): The prompts for\n            validation. Defaults to None.\n        num_class_images (int, optional): The number of images for class prior.\n            Defaults to 3.\n        dtype (str, optional): The dtype for the model. Defaults to 'fp16'.\n        enable_xformers (bool, optional): Whether to use xformers.\n            Defaults to True.\n        noise_offset_weight (bool, optional): The weight of noise offset\n            introduced in https://www.crosslabs.org/blog/diffusion-with-offset-noise  # noqa\n            Defaults to 0.\n        data_preprocessor (dict, optional): The pre-process config of\n            :class:`BaseDataPreprocessor`. Defaults to\n                dict(type='DataPreprocessor').\n        init_cfg (dict, optional): The weight initialized config for\n            :class:`BaseModule`. Defaults to None/\n        image_cross_layers (List[int], optional): The layers to use image\n            cross attention. Defaults to None.\n        reg_loss_weight (float, optional): The weight of regularization loss.\n            Defaults to 0.\n        placeholder (str, optional): The placeholder token. Defaults to None.\n        initialize_token (str, optional): The token to initialize the\n            placeholder. Defaults to None.\n        num_vectors_per_token (int, optional): The number of vectors per token.\n    \"\"\"\n\n    def __init__(self,\n                 vae: ModelType,\n                 text_encoder: ModelType,\n                 tokenizer: str,\n                 unet: ModelType,\n                 scheduler: ModelType,\n                 test_scheduler: Optional[ModelType] = None,\n                 val_prompts: Union[str, List[str]] = None,\n                 dtype: str = 'fp16',\n                 enable_xformers: bool = True,\n                 noise_offset_weight: float = 0,\n                 tomesd_cfg: Optional[dict] = None,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 init_cfg: Optional[dict] = None,\n                 image_cross_layers: List[int] = None,\n                 reg_loss_weight: float = 0,\n                 placeholder: str = None,\n                 initialize_token: str = None,\n                 num_vectors_per_token: int = 1):\n\n        super().__init__(vae, text_encoder, tokenizer, unet, scheduler,\n                         test_scheduler, dtype, enable_xformers,\n                         noise_offset_weight, tomesd_cfg, data_preprocessor,\n                         init_cfg)\n        self.reg_loss_weight = reg_loss_weight\n        self.placeholder = placeholder\n\n        self.dtype = torch.float32\n        if dtype == 'fp16':\n            self.dtype = torch.float16\n        elif dtype == 'bf16':\n            self.dtype = torch.bfloat16\n        else:\n            assert dtype in [\n                'fp32', None\n            ], ('dtype must be one of \\'fp32\\', \\'fp16\\', \\'bf16\\' or None.')\n\n        self.val_prompts = val_prompts\n        self.add_tokens(placeholder, initialize_token, num_vectors_per_token)\n        self.set_vico(image_cross_layers)\n        self.prepare_models()\n\n    def prepare_models(self):\n        \"\"\"Prepare model for training.\n\n        Move model to target dtype and disable gradient for some models.\n        \"\"\"\n        \"\"\"Disable gradient for untrainable modules to save memory.\"\"\"\n        self.vae.requires_grad_(False)\n        self.unet.requires_grad_(False)\n        self.text_encoder.set_only_embedding_trainable()\n        self.set_only_imca_trainable()\n\n    def set_vico(self, have_image_cross_attention: List[int]):\n        \"\"\"Set ViCo for model.\"\"\"\n        set_vico_modules(self.unet, have_image_cross_attention)\n\n    def set_only_imca_trainable(self):\n        \"\"\"Set only image cross attention trainable.\"\"\"\n        for _, layer in self.unet.named_modules():\n            if layer.__class__.__name__ == 'ViCoTransformer2D':\n                if hasattr(layer, 'image_cross_attention'):\n                    layer.image_cross_attention.train()\n                    for name, param in (\n                            layer.image_cross_attention.named_parameters()):\n                        param.requires_grad = True\n\n    def add_tokens(self,\n                   placeholder_token: str,\n                   initialize_token: str = None,\n                   num_vectors_per_token: int = 1):\n        \"\"\"Add token for training.\n\n        # TODO: support add tokens as dict, then we can load pretrained tokens.\n        \"\"\"\n        self.tokenizer.add_placeholder_token(\n            placeholder_token, num_vec_per_token=num_vectors_per_token)\n\n        self.text_encoder.set_embedding_layer()\n        embedding_layer = self.text_encoder.get_embedding_layer()\n        assert embedding_layer is not None, (\n            'Do not support get embedding layer for current text encoder. '\n            'Please check your configuration.')\n\n        if initialize_token:\n            init_id = self.tokenizer(initialize_token).input_ids[1]\n            initialize_embedding = embedding_layer.weight[init_id]\n            initialize_embedding = initialize_embedding[None, ...].repeat(\n                num_vectors_per_token, 1)\n        else:\n            emb_dim = embedding_layer.weight.shape[1]\n            initialize_embedding = torch.zeros(num_vectors_per_token, emb_dim)\n\n        token_info = self.tokenizer.get_token_info(placeholder_token)\n        token_info['embedding'] = initialize_embedding\n        token_info['trainable'] = True\n        self.token_info = token_info\n        embedding_layer.add_embeddings(token_info)\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        image_reference = data['inputs']['img_ref']\n        data_samples = data['data_samples']\n        if self.val_prompts is None:\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples.split() * len(prompt)\n            data_samples = DataSample.stack(data_samples.split() * len(prompt))\n\n        output = self.infer(prompt, image_reference, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Calls\n        ``self.data_preprocessor`` and ``self.infer`` in order. Return the\n        generated results which will be passed to evaluator or visualizer.\n\n        Args:\n            data (dict or tuple or list): Data sampled from dataset.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        image_reference = data['inputs']['img_ref']\n        data_samples = data['data_samples']\n\n        if self.val_prompts is None:\n            prompt = data_samples.prompt\n        else:\n            prompt = self.val_prompts\n            # construct a fake data_sample for destruct\n            data_samples.split() * len(prompt)\n            data_samples = DataSample.stack(data_samples.split() * len(prompt))\n\n        output = self.infer(prompt, image_reference, return_type='tensor')\n        samples = output['samples']\n        samples = self.data_preprocessor.destruct(samples, data_samples)\n\n        out_data_sample = DataSample(fake_img=samples, prompt=prompt)\n        data_sample_list = out_data_sample.split()\n        return data_sample_list\n\n    def prepare_reference(self,\n                          image_ref: Union[Image.Image, torch.Tensor],\n                          height: Optional[int] = 512,\n                          width: Optional[int] = 512):\n        if isinstance(image_ref, Image.Image):\n            if not image_ref.mode == 'RGB':\n                image_ref = image_ref.convert('RGB')\n            img = np.array(image_ref).astype(np.uint8)\n            image_ref = Image.fromarray(img)\n            image_ref = image_ref.resize((height, width),\n                                         resample=Image.BILINEAR)\n\n            image_ref = np.array(image_ref).astype(np.uint8)\n            image_ref = (image_ref / 127.5 - 1.0).astype(np.float32)\n            image_ref = torch.from_numpy(image_ref).permute(2, 0,\n                                                            1).unsqueeze(0)\n\n        return image_ref\n\n    def train_step(self, data, optim_wrapper):\n        \"\"\"Training step.\"\"\"\n        data = self.data_preprocessor(data)\n        inputs, data_samples = data['inputs'], data['data_samples']\n\n        with optim_wrapper.optim_context(self.unet):\n            image = inputs['img']  # image for new concept\n            num_batches = image.shape[0]\n\n            image_ref = inputs['img_ref']\n            # cat image and image reference to avoid forward twice\n            image = torch.cat([image, image_ref], dim=0)\n            prompt_init = data_samples.prompt\n            placeholder_string = self.placeholder\n\n            image = image.to(self.dtype)\n            latents = self.vae.encode(image).latent_dist.sample()\n            latents = latents * self.vae.config.scaling_factor\n\n            noise = torch.randn_like(latents[:num_batches, ...])\n            timesteps = torch.randint(\n                0,\n                self.scheduler.num_train_timesteps, (num_batches, ),\n                device=self.device)\n            timesteps = timesteps.long()\n            # image reference shares the same timesteps\n\n            # only add noise to source image\n            noisy_latents = self.scheduler.add_noise(\n                latents[:num_batches, ...], noise, timesteps)\n            noisy_latents = torch.cat(\n                [noisy_latents, latents[num_batches:, ...]], dim=0)\n            timesteps = torch.cat([timesteps, timesteps])\n\n            input_ids = self.tokenizer(\n                prompt_init,\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n            ph_tokens = self.tokenizer(\n                [placeholder_string],\n                max_length=self.tokenizer.model_max_length,\n                return_tensors='pt',\n                padding='max_length',\n                truncation=True)['input_ids'].to(self.device)\n            ph_tok = ph_tokens[0, 1]\n            placeholder_idx = torch.where(input_ids == ph_tok)\n            clip_eot_token_id = self.tokenizer.encode(\n                self.tokenizer.eos_token)['input_ids'][1]\n            endoftext_idx = (torch.arange(input_ids.shape[0]),\n                             (input_ids == clip_eot_token_id).nonzero(\n                                 as_tuple=False)[0, 1])\n            placeholder_position = [placeholder_idx, endoftext_idx]\n\n            encoder_hidden_states = self.text_encoder(input_ids)[0]\n            encoder_hidden_states = torch.cat(\n                [encoder_hidden_states, encoder_hidden_states], dim=0)\n            if self.scheduler.config.prediction_type == 'epsilon':\n                gt = noise\n            elif self.scheduler.config.prediction_type == 'v_prediction':\n                gt = self.scheduler.get_velocity(latents, noise, timesteps)\n            else:\n                raise ValueError('Unknown prediction type '\n                                 f'{self.scheduler.config.prediction_type}')\n\n            # NOTE: we train unet in fp32, convert to float manually\n            model_output = self.unet(\n                noisy_latents.float(),\n                timesteps,\n                encoder_hidden_states=encoder_hidden_states.float(),\n                placeholder_position=placeholder_position)\n            model_pred = model_output['sample']\n            loss_reg = model_output['loss_reg']\n\n            loss_dict = dict()\n            if loss_reg != 0:\n                loss_dict['loss_reg'] = loss_reg * self.reg_loss_weight\n            vico_loss = F.mse_loss(model_pred[:1].float(), gt.float())\n            loss_dict['vico_loss'] = vico_loss\n            parsed_loss, log_vars = self.parse_losses(loss_dict)\n            optim_wrapper.update_params(parsed_loss)\n\n        return log_vars\n\n    @torch.no_grad()\n    def infer(self,\n              prompt: Union[str, List[str]],\n              image_reference: Image.Image = None,\n              height: Optional[int] = None,\n              width: Optional[int] = None,\n              num_inference_steps: int = 50,\n              guidance_scale: float = 7.5,\n              negative_prompt: Optional[Union[str, List[str]]] = None,\n              num_images_per_prompt: Optional[int] = 1,\n              eta: float = 0.0,\n              generator: Optional[torch.Generator] = None,\n              latents: Optional[torch.FloatTensor] = None,\n              show_progress=True,\n              seed=1,\n              return_type='image'):\n        \"\"\"Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`):\n                The prompt or prompts to guide the image generation.\n            height (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image.\n            width (`int`, *optional*,\n                defaults to self.unet_sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps.\n                More denoising steps usually lead to a higher\n                quality image at the expense of slower inference.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in\n                [Classifier-Free Diffusion Guidance]\n                (https://arxiv.org/abs/2207.12598).\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                Ignored when not using guidance (i.e., ignored\n                if `guidance_scale` is less than `1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator`, *optional*):\n                A [torch generator] to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents,\n                sampled from a Gaussian distribution,\n                to be used as inputs for image generation.\n                Can be used to tweak the same generation\n                with different prompts.\n                If not provided, a latents tensor will be\n                generated by sampling using the supplied random `generator`.\n            return_type (str): The return type of the inference results.\n                Supported types are 'image', 'numpy', 'tensor'. If 'image'\n                is passed, a list of PIL images will be returned. If 'numpy'\n                is passed, a numpy array with shape [N, C, H, W] will be\n                returned, and the value range will be same as decoder's\n                output range. If 'tensor' is passed, the decoder's output\n                will be returned. Defaults to 'image'.\n\n        Returns:\n            dict: A dict containing the generated images.\n        \"\"\"\n        assert return_type in ['image', 'tensor', 'numpy']\n        set_random_seed(seed=seed)\n\n        # 0. Default height and width to unet\n        height = height or self.unet_sample_size * self.vae_scale_factor\n        width = width or self.unet_sample_size * self.vae_scale_factor\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(prompt, height, width)\n\n        # 2. Define call parameters\n        batch_size = 1 if isinstance(prompt, str) else len(prompt)\n        device = self.device\n\n        img_dtype = self.vae.module.dtype if hasattr(self.vae, 'module') \\\n            else self.vae.dtype\n        latent_dtype = next(self.unet.parameters()).dtype\n        # here `guidance_scale` is defined analog to the\n        # guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        text_embeddings = self._encode_prompt(prompt, device,\n                                              num_images_per_prompt,\n                                              do_classifier_free_guidance,\n                                              negative_prompt)\n        uncond_embeddings, text_embeddings = text_embeddings.chunk(2)\n        uncond_embeddings = torch.cat([uncond_embeddings] * 2)\n        text_embeddings = torch.cat([text_embeddings] * 2)\n        ph_tokens = self.tokenizer(\n            num_images_per_prompt * [self.placeholder],\n            max_length=self.tokenizer.model_max_length,\n            return_tensors='pt',\n            padding='max_length',\n            truncation=True)['input_ids']\n        input_ids = self.tokenizer(\n            num_images_per_prompt * prompt,\n            max_length=self.tokenizer.model_max_length,\n            return_tensors='pt',\n            padding='max_length',\n            truncation=True)['input_ids']\n        ph_tok = ph_tokens[0, 1]\n        # TODO fix hard code\n        clip_eot_token_id = 49407\n        endoftext_idx = (torch.arange(input_ids.shape[0]),\n                         torch.nonzero(input_ids == clip_eot_token_id)\n                         [:batch_size, 1].repeat(num_images_per_prompt))\n        placeholder_idx = torch.where(input_ids == ph_tok)\n        if self.placeholder in prompt[0]:\n            ph_pos = [placeholder_idx, endoftext_idx]\n        else:\n            ph_pos = [endoftext_idx, endoftext_idx]\n\n        # 4. Prepare timesteps\n        self.test_scheduler.set_timesteps(num_inference_steps)\n        timesteps = self.test_scheduler.timesteps\n\n        # 5. Prepare latent variables\n        if hasattr(self.unet, 'module'):\n            num_channels_latents = self.unet.module.in_channels\n        else:\n            num_channels_latents = self.unet.in_channels\n        latents = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            text_embeddings.dtype,\n            device,\n            generator,\n            latents,\n        )\n        image_reference = self.prepare_reference(\n            image_reference,\n            height,\n            width,\n        )\n        image_reference = self.vae.encode(\n            image_reference.to(dtype=img_dtype,\n                               device=device)).latent_dist.sample()\n        image_reference = image_reference.expand(\n            batch_size * num_images_per_prompt, -1, -1, -1)\n        image_reference = image_reference * self.vae.config.scaling_factor\n\n        # 6. Prepare extra step kwargs.\n        # TODO: Logic should ideally just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Denoising loop\n        if show_progress:\n            timesteps = tqdm(timesteps)\n        for i, t in enumerate(timesteps):\n            latents = torch.cat([latents, image_reference], dim=0)\n            latent_model_input = self.test_scheduler.scale_model_input(\n                latents, t)\n            latent_model_input = latent_model_input.to(latent_dtype)\n            text_embeddings = text_embeddings.to(latent_dtype)\n            uncond_embeddings = uncond_embeddings.to(latent_dtype)\n            # predict the noise residual\n\n            noise_pred_uncond = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=uncond_embeddings,\n                placeholder_position=ph_pos)['sample'][:batch_size *\n                                                       num_images_per_prompt]\n            noise_pred_text = self.unet(\n                latent_model_input,\n                t,\n                encoder_hidden_states=text_embeddings,\n                placeholder_position=ph_pos)['sample'][:batch_size *\n                                                       num_images_per_prompt]\n\n            # perform guidance\n            if do_classifier_free_guidance:\n                noise_pred = noise_pred_uncond + guidance_scale * (\n                    noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents_to_denoise = latents[:batch_size *\n                                             num_images_per_prompt, ...]\n                latents = self.test_scheduler.step(\n                    noise_pred, t, latents_to_denoise,\n                    **extra_step_kwargs)['prev_sample']\n\n        # 8. Post-processing\n        image = self.decode_latents(latents.to(img_dtype))\n        if return_type == 'image':\n            image = self.output_to_pil(image)\n        elif return_type == 'numpy':\n            image = image.cpu().numpy()\n        else:\n            assert return_type == 'tensor', (\n                'Only support \\'image\\', \\'numpy\\' and \\'tensor\\' for '\n                f'return_type, but receive {return_type}')\n\n        return {'samples': image}\n\n    def forward(self,\n                inputs: torch.Tensor,\n                data_samples: Optional[list] = None,\n                mode: str = 'tensor') -> Union[Dict[str, torch.Tensor], list]:\n        \"\"\"forward is not implemented now.\"\"\"\n        raise NotImplementedError(\n            'Forward is not implemented now, please use infer.')\n"
  },
  {
    "path": "mmagic/models/editors/vico/vico_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom dataclasses import dataclass\nfrom typing import Any, Dict, List, Optional, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom diffusers import Transformer2DModel\nfrom diffusers.models.attention import Attention, BasicTransformerBlock\nfrom diffusers.models.unet_2d_condition import UNet2DConditionOutput\nfrom diffusers.utils import BaseOutput, is_torch_version\n\n\nclass ViCoCrossAttnProcessor:\n    \"\"\"Processor for implementing attention for the ViCo method.\"\"\"\n\n    def __call__(self,\n                 attn: Attention,\n                 hidden_states,\n                 encoder_hidden_states=None,\n                 attention_mask=None):\n        \"\"\"\n        Args:\n            attn (Attention): Attention module.\n            hidden_states (torch.Tensor): Input hidden states.\n            encoder_hidden_states (torch.Tensor): Encoder hidden states.\n            attention_mask (torch.Tensor): Attention mask.\n        Returns:\n            torch.Tensor: Output hidden states.\n        \"\"\"\n        batch_size, sequence_length, _ = hidden_states.shape\n        attention_mask = attn.prepare_attention_mask(\n            attention_mask, sequence_length, batch_size=batch_size)\n\n        query = attn.to_q(hidden_states)\n\n        encoder_hidden_states = encoder_hidden_states \\\n            if encoder_hidden_states is not None else hidden_states\n        key = attn.to_k(encoder_hidden_states)\n        value = attn.to_v(encoder_hidden_states)\n\n        query = attn.head_to_batch_dim(query)\n        key = attn.head_to_batch_dim(key)\n        value = attn.head_to_batch_dim(value)\n\n        attention_probs = attn.get_attention_scores(query, key, attention_mask)\n        # new bookkeeping to save the attn probs\n        attn.attn_probs = attention_probs\n\n        hidden_states = torch.bmm(attention_probs, value)\n        hidden_states = attn.batch_to_head_dim(hidden_states)\n\n        # linear proj\n        hidden_states = attn.to_out[0](hidden_states)\n        # dropout\n        hidden_states = attn.to_out[1](hidden_states)\n\n        return hidden_states\n\n\ndef replace_cross_attention(unet):\n    \"\"\"Replace Cross Attention processor in UNet.\"\"\"\n    for name, module in unet.named_modules():\n        name: str\n        if name.endswith('attn2'):\n            module.set_processor(ViCoCrossAttnProcessor())\n\n\n@dataclass\nclass ViCoTransformer2DModelOutput(BaseOutput):\n    \"\"\"Output for ViCoTransformer2DModel.\"\"\"\n    sample: torch.FloatTensor\n    loss_reg: torch.FloatTensor\n\n\ndef otsu(mask_in):\n    \"\"\"Apply otsu for mask.\n\n    Args:\n        mask_in (torch.Tensor): Input mask.\n    \"\"\"\n\n    # normalize\n    mask_norm = (mask_in - mask_in.min(-1, keepdim=True)[0]) / \\\n        (mask_in.max(-1, keepdim=True)[0] - mask_in.min(-1, keepdim=True)[0])\n\n    bs = mask_in.shape[0]\n    h = mask_in.shape[1]\n    mask = []\n    for i in range(bs):\n        threshold_t = 0.\n        max_g = 0.\n        for t in range(10):\n            mask_i = mask_norm[i]\n            low = mask_i[mask_i < t * 0.1]\n            high = mask_i[mask_i >= t * 0.1]\n            low_num = low.shape[0] / h\n            high_num = high.shape[0] / h\n            low_mean = low.mean()\n            high_mean = high.mean()\n\n            g = low_num * high_num * ((low_mean - high_mean)**2)\n            if g > max_g:\n                max_g = g\n                threshold_t = t * 0.1\n\n        mask_i[mask_i < threshold_t] = 0\n        mask_i[mask_i > threshold_t] = 1\n        mask.append(mask_i)\n    mask_out = torch.stack(mask, dim=0)\n\n    return mask_out\n\n\nclass ViCoTransformer2D(nn.Module):\n    \"\"\"New ViCo-Transformer2D to replace the original Transformer2D model.\"\"\"\n\n    def __init__(self, org_transformer2d: Transformer2DModel,\n                 have_image_cross) -> None:\n        \"\"\"\n        Args:\n            org_transformer2d (Transformer2DModel): Original\n            Transformer2DModel.\n            have_image_cross (bool): Flag indicating if the model has\n            image_cross_attention modules.\n        \"\"\"\n        super().__init__()\n        self.transformer_blocks = org_transformer2d.transformer_blocks\n        self.is_input_continuous = org_transformer2d.is_input_continuous\n        self.norm = org_transformer2d.norm\n        self.use_linear_projection = org_transformer2d.use_linear_projection\n        self.proj_in = org_transformer2d.proj_in\n        self.proj_out = org_transformer2d.proj_out\n        self.is_input_vectorized = org_transformer2d.is_input_vectorized\n        self.is_input_patches = org_transformer2d.is_input_patches\n\n        num_attention_heads = org_transformer2d.num_attention_heads\n        attention_head_dim = org_transformer2d.attention_head_dim\n        inner_dim = num_attention_heads * attention_head_dim\n\n        self.have_image_cross = have_image_cross\n        if self.have_image_cross:\n            image_cross_attention = BasicTransformerBlock(\n                inner_dim,\n                num_attention_heads,\n                attention_head_dim,\n                cross_attention_dim=inner_dim)\n            self.image_cross_attention = image_cross_attention.to(\n                org_transformer2d.device, dtype=org_transformer2d.dtype)\n\n    def forward(\n        self,\n        hidden_states: torch.Tensor,\n        encoder_hidden_states: Optional[torch.Tensor] = None,\n        timestep: Optional[torch.LongTensor] = None,\n        placeholder_position: list = None,\n        class_labels: Optional[torch.LongTensor] = None,\n        cross_attention_kwargs: Dict[str, Any] = None,\n        attention_mask: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.Tensor] = None,\n        return_dict: bool = True,\n    ):\n        if attention_mask is not None and attention_mask.ndim == 2:\n            # assume that mask is expressed as:\n            #   (1 = keep,      0 = discard)\n            # convert mask into a bias that can be added to attention scores:\n            #       (keep = +0,     discard = -10000.0)\n            attention_mask = (\n                1 - attention_mask.to(hidden_states.dtype)) * -10000.0\n            attention_mask = attention_mask.unsqueeze(1)\n\n        if encoder_attention_mask is not None and (encoder_attention_mask.ndim\n                                                   == 2):\n            encoder_attention_mask = (\n                1 - encoder_attention_mask.to(hidden_states.dtype)) * -10000.0\n            encoder_attention_mask = encoder_attention_mask.unsqueeze(1)\n\n        # 1. Input\n        if self.is_input_continuous:\n            batch, _, height, width = hidden_states.shape\n            residual = hidden_states\n\n            hidden_states = self.norm(hidden_states)\n            if not self.use_linear_projection:\n                hidden_states = self.proj_in(hidden_states)\n                inner_dim = hidden_states.shape[1]\n                hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                    batch, height * width, inner_dim)\n            else:\n                inner_dim = hidden_states.shape[1]\n                hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(\n                    batch, height * width, inner_dim)\n                hidden_states = self.proj_in(hidden_states)\n        elif self.is_input_vectorized:\n            hidden_states = self.latent_image_embedding(hidden_states)\n        elif self.is_input_patches:\n            hidden_states = self.pos_embed(hidden_states)\n\n        # 2. Blocks\n        for block in self.transformer_blocks:\n            hidden_states = block(\n                hidden_states,\n                attention_mask=attention_mask,\n                encoder_hidden_states=encoder_hidden_states,\n                encoder_attention_mask=encoder_attention_mask,\n                timestep=timestep,\n                cross_attention_kwargs=cross_attention_kwargs,\n                class_labels=class_labels,\n            )\n            attention_probs = block.attn2.attn_probs[batch // 2:batch, ...]\n\n            loss_reg = None\n            if self.have_image_cross:\n                # 2.5. image cross attention\n                ph_idx, eot_idx = placeholder_position[\n                    0], placeholder_position[1]\n                attn = attention_probs.transpose(1, 2)\n                attn_ph = attn[ph_idx].squeeze(1)  # bs, n_patch\n                attn_eot = attn[eot_idx].squeeze(1).detach()\n\n                # ########################\n                # attention reg\n                if self.image_cross_attention.training:\n                    loss_reg = F.mse_loss(\n                        attn_ph / attn_ph.max(-1, keepdim=True)[0],\n                        attn_eot / attn_eot.max(-1, keepdim=True)[0])\n                # ########################\n\n                mask = attn_ph.detach()\n                mask = otsu(mask)\n                if mask.dim() == 2:\n                    mask = mask.unsqueeze(1)\n\n                hidden_states, image_reference = hidden_states[:batch // 2], \\\n                    hidden_states[batch // 2:]\n                hidden_states = self.image_cross_attention(\n                    hidden_states,\n                    attention_mask=attention_mask,\n                    encoder_hidden_states=image_reference,\n                    encoder_attention_mask=mask,\n                    timestep=timestep,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    class_labels=class_labels,\n                )\n                hidden_states = torch.cat([hidden_states, image_reference],\n                                          dim=0)\n\n        # 3. Output\n        if self.is_input_continuous:\n            if not self.use_linear_projection:\n                hidden_states = hidden_states.reshape(batch, height, width,\n                                                      inner_dim).permute(\n                                                          0, 3, 1,\n                                                          2).contiguous()\n                hidden_states = self.proj_out(hidden_states)\n            else:\n                hidden_states = self.proj_out(hidden_states)\n                hidden_states = hidden_states.reshape(batch, height, width,\n                                                      inner_dim).permute(\n                                                          0, 3, 1,\n                                                          2).contiguous()\n\n            output = hidden_states + residual\n        elif self.is_input_vectorized:\n            hidden_states = self.norm_out(hidden_states)\n            logits = self.out(hidden_states)\n            # (batch, self.num_vector_embeds - 1, self.num_latent_pixels)\n            logits = logits.permute(0, 2, 1)\n\n            # log(p(x_0))\n            output = F.log_softmax(logits.double(), dim=1).float()\n        elif self.is_input_patches:\n            # TODO: cleanup!\n            conditioning = self.transformer_blocks[0].norm1.emb(\n                timestep, class_labels, hidden_dtype=hidden_states.dtype)\n            shift, scale = self.proj_out_1(F.silu(conditioning)).chunk(\n                2, dim=1)\n            hidden_states = self.norm_out(hidden_states) * (\n                1 + scale[:, None]) + shift[:, None]\n            hidden_states = self.proj_out_2(hidden_states)\n\n            # unpatchify\n            height = width = int(hidden_states.shape[1]**0.5)\n            hidden_states = hidden_states.reshape(\n                shape=(-1, height, width, self.patch_size, self.patch_size,\n                       self.out_channels))\n            hidden_states = torch.einsum('nhwpqc->nchpwq', hidden_states)\n            output = hidden_states.reshape(\n                shape=(-1, self.out_channels, height * self.patch_size,\n                       width * self.patch_size))\n\n        if not return_dict:\n            return (output, loss_reg)\n\n        return ViCoTransformer2DModelOutput(sample=output, loss_reg=loss_reg)\n\n\ndef replace_transformer2d(module: nn.Module,\n                          have_image_cross: Dict[str, List[bool]]):\n    \"\"\"Replace the the Transformer2DModel in UNet.\n\n    Args:\n        module (nn.Module): Parent module of Transformer2D.\n        have_image_cross (List): List of flag indicating which\n        transformer2D modules have image_cross_attention modules.\n    \"\"\"\n    down_transformer2d_modules = [(k.rsplit('.', 1), v)\n                                  for k, v in module.named_modules()\n                                  if isinstance(v, Transformer2DModel)]\n    for i, ((parent, k), v) in enumerate(down_transformer2d_modules):\n        parent = module.get_submodule(parent)\n        setattr(parent, k, ViCoTransformer2D(v, have_image_cross[i]))\n\n\nclass ViCoBlockWrapper(nn.Module):\n    \"\"\"Wrapper for ViCo blocks.\"\"\"\n\n    def apply_to(self, org_module):\n        self.org_module = org_module\n        self.org_module.forward = self.forward\n\n\nclass ViCoCrossAttnDownBlock2D(ViCoBlockWrapper):\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        temb: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.FloatTensor] = None,\n        placeholder_position: torch.Tensor = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n    ):\n        \"\"\"\n        Args:\n            hidden_states (torch.FloatTensor): Hidden states.\n            temb (Optional[torch.FloatTensor]): Time embedding.\n            encoder_hidden_states (Optional[torch.FloatTensor]): Encoder\n                hidden states.\n            placeholder_position (torch.Tensor): Placeholder position.\n            attention_mask (Optional[torch.FloatTensor]): Attention mask.\n            cross_attention_kwargs (Optional[Dict[str, Any]]): Cross attention\n                keyword arguments.\n            encoder_attention_mask (Optional[torch.FloatTensor]): Encoder\n                attention mask.\n        Returns:\n            torch.FloatTensor: Output hidden states.\n            Tuple[torch.FloatTensor]: Output hidden states of each block.\n            torch.FloatTensor: Attention regularization loss.\n        \"\"\"\n        output_states = ()\n        loss_reg_all = 0.0\n\n        for resnet, attn in zip(self.org_module.resnets,\n                                self.org_module.attentions):\n            attn: ViCoTransformer2D\n            if self.org_module.training and (\n                    self.org_module.gradient_checkpointing):\n\n                def create_custom_forward(module, return_dict=None):\n\n                    def custom_forward(*inputs):\n                        if return_dict is not None:\n                            return module(*inputs, return_dict=return_dict)\n                        else:\n                            return module(*inputs)\n\n                    return custom_forward\n\n                ckpt_kwargs: Dict[str, Any] = {\n                    'use_reentrant': False\n                } if is_torch_version('>=', '1.11.0') else {}\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet),\n                    hidden_states,\n                    temb,\n                    **ckpt_kwargs,\n                )\n                hidden_states, loss_reg = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(attn, return_dict=False),\n                    hidden_states,\n                    encoder_hidden_states,\n                    None,  # timestep\n                    placeholder_position,\n                    None,  # class_labels\n                    cross_attention_kwargs,\n                    attention_mask,\n                    encoder_attention_mask,\n                    **ckpt_kwargs,\n                )\n            else:\n                hidden_states = resnet(hidden_states, temb)\n                hidden_states, loss_reg = attn(\n                    hidden_states,\n                    encoder_hidden_states=encoder_hidden_states,\n                    placeholder_position=placeholder_position,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    attention_mask=attention_mask,\n                    encoder_attention_mask=encoder_attention_mask,\n                    return_dict=False,\n                )\n\n            output_states = output_states + (hidden_states, )\n            if loss_reg is not None:\n                loss_reg_all += loss_reg\n\n        if self.org_module.downsamplers is not None:\n            for downsampler in self.org_module.downsamplers:\n                hidden_states = downsampler(hidden_states)\n\n            output_states = output_states + (hidden_states, )\n\n        return hidden_states, output_states, loss_reg_all\n\n\nclass ViCoUNetMidBlock2DCrossAttn(ViCoBlockWrapper):\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        temb: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.FloatTensor] = None,\n        placeholder_position: torch.Tensor = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n    ) -> torch.FloatTensor:\n        \"\"\"\n        Args:\n            hidden_states (torch.FloatTensor): Hidden states.\n            temb (Optional[torch.FloatTensor]): Time embedding.\n            encoder_hidden_states (Optional[torch.FloatTensor]): Encoder\n                hidden states.\n            placeholder_position (torch.Tensor): Placeholder position.\n            attention_mask (Optional[torch.FloatTensor]): Attention mask.\n            cross_attention_kwargs (Optional[Dict[str, Any]]): Cross attention\n                keyword arguments.\n            encoder_attention_mask (Optional[torch.FloatTensor]): Encoder\n                attention mask.\n        Returns:\n            torch.FloatTensor: Output hidden states.\n            torch.FloatTensor: Attention regularization loss.\n        \"\"\"\n        loss_reg_all = 0.0\n        hidden_states = self.org_module.resnets[0](hidden_states, temb)\n        for attn, resnet in zip(self.org_module.attentions,\n                                self.org_module.resnets[1:]):\n            hidden_states, loss_reg = attn(\n                hidden_states,\n                encoder_hidden_states=encoder_hidden_states,\n                placeholder_position=placeholder_position,\n                cross_attention_kwargs=cross_attention_kwargs,\n                attention_mask=attention_mask,\n                encoder_attention_mask=encoder_attention_mask,\n                return_dict=False,\n            )\n            hidden_states = resnet(hidden_states, temb)\n            if loss_reg is not None:\n                loss_reg_all += loss_reg\n\n        return hidden_states, loss_reg_all\n\n\nclass ViCoCrossAttnUpBlock2D(ViCoBlockWrapper):\n\n    def forward(\n        self,\n        hidden_states: torch.FloatTensor,\n        res_hidden_states_tuple: Tuple[torch.FloatTensor, ...],\n        temb: Optional[torch.FloatTensor] = None,\n        encoder_hidden_states: Optional[torch.FloatTensor] = None,\n        placeholder_position: torch.Tensor = None,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        upsample_size: Optional[int] = None,\n        attention_mask: Optional[torch.FloatTensor] = None,\n        encoder_attention_mask: Optional[torch.FloatTensor] = None,\n    ):\n        \"\"\"Performs the forward pass through the ViCoCrossAttnUpBlock2D module.\n\n        Args:\n            hidden_states (torch.FloatTensor): Input hidden states.\n            res_hidden_states_tuple (Tuple[torch.FloatTensor, ...]):\n                Tuple of residual hidden states.\n            temb (Optional[torch.FloatTensor], optional):\n                Temporal embeddings. Defaults to None.\n            encoder_hidden_states (Optional[torch.FloatTensor], optional):\n                Encoder hidden states. Defaults to None.\n            placeholder_position (torch.Tensor, optional):\n                Placeholder positions. Defaults to None.\n            cross_attention_kwargs (Optional[Dict[str, Any]], optional):\n                Keyword arguments for cross-attention. Defaults to None.\n            upsample_size (Optional[int], optional): Upsample size.\n            attention_mask (Optional[torch.FloatTensor], optional):\n              Attention mask.\n            encoder_attention_mask (Optional[torch.FloatTensor], optional):\n                Encoder attention mask.\n\n        Returns:\n            Tuple[torch.FloatTensor, torch.FloatTensor]:\n                A tuple containing the output hidden states and\n                the total regularization loss.\n        \"\"\"\n        loss_reg_all = 0.0\n        for resnet, attn in zip(self.org_module.resnets,\n                                self.org_module.attentions):\n            attn: ViCoTransformer2D\n\n            # pop res hidden states\n            res_hidden_states = res_hidden_states_tuple[-1]\n            res_hidden_states_tuple = res_hidden_states_tuple[:-1]\n            hidden_states = torch.cat([hidden_states, res_hidden_states],\n                                      dim=1)\n\n            if self.org_module.training and (\n                    self.org_module.gradient_checkpointing):\n\n                def create_custom_forward(module, return_dict=None):\n\n                    def custom_forward(*inputs):\n                        if return_dict is not None:\n                            return module(*inputs, return_dict=return_dict)\n                        else:\n                            return module(*inputs)\n\n                    return custom_forward\n\n                ckpt_kwargs: Dict[str, Any] = {\n                    'use_reentrant': False\n                } if is_torch_version('>=', '1.11.0') else {}\n                hidden_states = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(resnet),\n                    hidden_states,\n                    temb,\n                    **ckpt_kwargs,\n                )\n                hidden_states, loss_reg = torch.utils.checkpoint.checkpoint(\n                    create_custom_forward(attn, return_dict=False),\n                    hidden_states,\n                    encoder_hidden_states,\n                    None,  # timestep\n                    placeholder_position,\n                    None,  # class_labels\n                    cross_attention_kwargs,\n                    attention_mask,\n                    encoder_attention_mask,\n                    **ckpt_kwargs,\n                )\n            else:\n                hidden_states = resnet(hidden_states, temb)\n                hidden_states, loss_reg = attn(\n                    hidden_states,\n                    encoder_hidden_states=encoder_hidden_states,\n                    placeholder_position=placeholder_position,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    attention_mask=attention_mask,\n                    encoder_attention_mask=encoder_attention_mask,\n                    return_dict=False,\n                )\n            if loss_reg is not None:\n                loss_reg_all += loss_reg\n\n        if self.org_module.upsamplers is not None:\n            for upsampler in self.org_module.upsamplers:\n                hidden_states = upsampler(hidden_states, upsample_size)\n\n        return hidden_states, loss_reg_all\n\n\nclass ViCoUNet2DConditionOutput(BaseOutput):\n    \"\"\"Output for ViCoUNet2DConditionModel.\"\"\"\n    sample: torch.FloatTensor\n    loss_reg: torch.FloatTensor\n\n\nclass ViCoUNet2DConditionModel(ViCoBlockWrapper):\n    \"\"\"UNet2DConditionModel for ViCo Method.\"\"\"\n\n    def forward(\n        self,\n        sample: torch.FloatTensor,\n        timestep: Union[torch.Tensor, float, int],\n        encoder_hidden_states: torch.Tensor,\n        placeholder_position: torch.Tensor,\n        class_labels: Optional[torch.Tensor] = None,\n        timestep_cond: Optional[torch.Tensor] = None,\n        attention_mask: Optional[torch.Tensor] = None,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None,\n        down_block_additional_residuals: Optional[Tuple[torch.Tensor]] = None,\n        mid_block_additional_residual: Optional[torch.Tensor] = None,\n        encoder_attention_mask: Optional[torch.Tensor] = None,\n        return_dict: bool = True,\n    ) -> Union[UNet2DConditionOutput, Tuple]:\n        \"\"\"Performs the forward pass through the ViCoBlock2D module.\n\n        Args:\n            sample (torch.FloatTensor): Input sample.\n            timestep (Union[torch.Tensor, float, int]): Timestep value.\n            encoder_hidden_states (torch.Tensor): Encoder hidden states.\n            placeholder_position (torch.Tensor): Placeholder positions.\n            class_labels (Optional[torch.Tensor], optional): Class labels.\n                Defaults to None.\n            timestep_cond (Optional[torch.Tensor], optional):\n                Timestep condition. Defaults to None.\n            attention_mask (Optional[torch.Tensor], optional):\n                Attention mask. Defaults to None.\n            cross_attention_kwargs (Optional[Dict[str, Any]], optional):\n                Keyword arguments for cross-attention. Defaults to None.\n            added_cond_kwargs (Optional[Dict[str, torch.Tensor]], optional):\n                Additional condition arguments. Defaults to None.\n            down_block_additional_residuals\n                (Optional[Tuple[torch.Tensor]], optional):\n                Additional residuals for down-blocks. Defaults to None.\n            mid_block_additional_residual (Optional[torch.Tensor], optional):\n                Additional residual for mid-block. Defaults to None.\n            encoder_attention_mask (Optional[torch.Tensor], optional):\n                Encoder attention mask. Defaults to None.\n            return_dict (bool, optional):\n                Whether to return a dictionary or a tuple.\n\n        Returns:\n            Union[UNet2DConditionOutput, Tuple]:\n                The output of the forward pass, which can be either\n                a UNet2DConditionOutput object or a tuple of tensors.\n        \"\"\"\n        default_overall_up_factor = 2**self.org_module.num_upsamplers\n        forward_upsample_size = False\n        upsample_size = None\n\n        if any(s % default_overall_up_factor != 0 for s in sample.shape[-2:]):\n            forward_upsample_size = True\n\n        if attention_mask is not None:\n            # assume that mask is expressed as:\n            #   (1 = keep,      0 = discard)\n            # convert mask into a bias that can be added to attention scores:\n            #       (keep = +0,     discard = -10000.0)\n            attention_mask = (1 - attention_mask.to(sample.dtype)) * -10000.0\n            attention_mask = attention_mask.unsqueeze(1)\n\n        if encoder_attention_mask is not None:\n            encoder_attention_mask = (\n                1 - encoder_attention_mask.to(sample.dtype)) * -10000.0\n            encoder_attention_mask = encoder_attention_mask.unsqueeze(1)\n\n        # 0. center input if necessary\n        if self.org_module.config.center_input_sample:\n            sample = 2 * sample - 1.0\n\n        # 1. time\n        timesteps = timestep\n        if not torch.is_tensor(timesteps):\n            is_mps = sample.device.type == 'mps'\n            if isinstance(timestep, float):\n                dtype = torch.float32 if is_mps else torch.float64\n            else:\n                dtype = torch.int32 if is_mps else torch.int64\n            timesteps = torch.tensor([timesteps],\n                                     dtype=dtype,\n                                     device=sample.device)\n        elif len(timesteps.shape) == 0:\n            timesteps = timesteps[None].to(sample.device)\n\n        t_emb = self.org_module.time_proj(timesteps)\n\n        t_emb = t_emb.to(dtype=sample.dtype)\n\n        emb = self.org_module.time_embedding(t_emb, timestep_cond)\n\n        if self.org_module.class_embedding is not None:\n            if class_labels is None:\n                raise ValueError('class_labels should be provided \\\n                    when num_class_embeds > 0')\n\n            if self.org_module.config.class_embed_type == 'timestep':\n                class_labels = self.org_module.time_proj(class_labels)\n                class_labels = class_labels.to(dtype=sample.dtype)\n\n            class_emb = self.org_module.class_embedding(class_labels).to(\n                dtype=sample.dtype)\n\n            if self.org_module.config.class_embeddings_concat:\n                emb = torch.cat([emb, class_emb], dim=-1)\n            else:\n                emb = emb + class_emb\n\n        if self.org_module.config.addition_embed_type == 'text':\n            aug_emb = self.org_module.add_embedding(encoder_hidden_states)\n            emb = emb + aug_emb\n        elif self.org_module.config.addition_embed_type == 'text_image':\n            # Kadinsky 2.1 - style\n            if 'image_embeds' not in added_cond_kwargs:\n                raise ValueError(\n                    f\"{self.org_module.__class__} has the config param \\\n                    `addition_embed_type` set to 'text_image' which \\\n                    requires the keyword argument `image_embeds` \\\n                    to be passed in `added_cond_kwargs`\")\n\n            image_embs = added_cond_kwargs.get('image_embeds')\n            text_embs = added_cond_kwargs.get('text_embeds',\n                                              encoder_hidden_states)\n\n            aug_emb = self.org_module.add_embedding(text_embs, image_embs)\n            emb = emb + aug_emb\n\n        if self.org_module.time_embed_act is not None:\n            emb = self.org_module.time_embed_act(emb)\n\n        if self.org_module.encoder_hid_proj is not None and (\n                self.org_module.config.encoder_hid_dim_type == 'text_proj'):\n            encoder_hidden_states = self.org_module.encoder_hid_proj(\n                encoder_hidden_states)\n        elif self.org_module.encoder_hid_proj is not None and (\n                self.org_module.config.encoder_hid_dim_type\n                == 'text_image_proj'):\n            # Kadinsky 2.1 - style\n            if 'image_embeds' not in added_cond_kwargs:\n                raise ValueError(\n                    f\"{self.org_module.__class__} has the config param \\\n                        `encoder_hid_dim_type` set to 'text_image_proj' which \\\n                        requires the keyword argument `image_embeds` to be \\\n                        passed in  `added_conditions`\")\n\n            image_embeds = added_cond_kwargs.get('image_embeds')\n            encoder_hidden_states = self.org_module.encoder_hid_proj(\n                encoder_hidden_states, image_embeds)\n\n        # 2. pre-process\n        sample = self.org_module.conv_in(sample)\n\n        loss_reg_all = 0.0 if self.training else None\n\n        # 3. down\n        down_block_res_samples = (sample, )\n        for downsample_block in self.org_module.down_blocks:\n            if hasattr(downsample_block, 'has_cross_attention'\n                       ) and downsample_block.has_cross_attention:\n                sample, res_samples, loss_reg = downsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    encoder_hidden_states=encoder_hidden_states,\n                    placeholder_position=placeholder_position,\n                    attention_mask=attention_mask,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    encoder_attention_mask=encoder_attention_mask,\n                )\n                if self.training:\n                    loss_reg_all += loss_reg\n            else:\n                sample, res_samples = downsample_block(\n                    hidden_states=sample, temb=emb)\n\n            down_block_res_samples += res_samples\n\n        if down_block_additional_residuals is not None:\n            new_down_block_res_samples = ()\n\n            for down_block_res_sample, down_block_additional_residual in zip(\n                    down_block_res_samples, down_block_additional_residuals):\n                down_block_res_sample = down_block_res_sample + \\\n                    down_block_additional_residual\n                new_down_block_res_samples = new_down_block_res_samples + (\n                    down_block_res_sample, )\n\n            down_block_res_samples = new_down_block_res_samples\n\n        # 4. mid\n        if self.org_module.mid_block is not None:\n            sample, loss_reg = self.org_module.mid_block(\n                sample,\n                emb,\n                encoder_hidden_states=encoder_hidden_states,\n                attention_mask=attention_mask,\n                cross_attention_kwargs=cross_attention_kwargs,\n                encoder_attention_mask=encoder_attention_mask,\n            )\n            if self.training:\n                loss_reg_all += loss_reg\n        if mid_block_additional_residual is not None:\n            sample = sample + mid_block_additional_residual\n\n        # 5. up\n        for i, upsample_block in enumerate(self.org_module.up_blocks):\n            is_final_block = i == len(self.org_module.up_blocks) - 1\n\n            res_samples = down_block_res_samples[-len(upsample_block.resnets):]\n            down_block_res_samples = down_block_res_samples[:-len(\n                upsample_block.resnets)]\n\n            # if we have not reached the final block and need to forward the\n            # upsample size, we do it here\n            if not is_final_block and forward_upsample_size:\n                upsample_size = down_block_res_samples[-1].shape[2:]\n\n            if hasattr(upsample_block, 'has_cross_attention'\n                       ) and upsample_block.has_cross_attention:\n                sample, loss_reg = upsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    res_hidden_states_tuple=res_samples,\n                    encoder_hidden_states=encoder_hidden_states,\n                    placeholder_position=placeholder_position,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    upsample_size=upsample_size,\n                    attention_mask=attention_mask,\n                    encoder_attention_mask=encoder_attention_mask,\n                )\n                if self.training:\n                    loss_reg_all += loss_reg\n            else:\n                sample = upsample_block(\n                    hidden_states=sample,\n                    temb=emb,\n                    res_hidden_states_tuple=res_samples,\n                    upsample_size=upsample_size)\n\n        # 6. post-process\n        if self.org_module.conv_norm_out:\n            sample = self.org_module.conv_norm_out(sample)\n            sample = self.org_module.conv_act(sample)\n        sample = self.org_module.conv_out(sample)\n\n        if not return_dict:\n            return (sample, loss_reg_all)\n\n        return ViCoUNet2DConditionOutput(sample=sample, loss_reg=loss_reg_all)\n\n\ndef set_vico_modules(unet, image_cross_layers):\n    \"\"\"Set all modules for ViCo method after the UNet initialized normally.\n\n    Args:\n        unet (nn.Module): UNet model.\n        image_cross_layers (List): List of flag indicating which\n        transformer2D modules have image_cross_attention modules.\n    \"\"\"\n    # replace transformer2d blocks\n    replace_transformer2d(unet, image_cross_layers)\n\n    # replace cross attention layer\n    replace_cross_attention(unet)\n\n    # replace forward\n    for _, layer in unet.named_modules():\n        if layer.__class__.__name__ == 'UNet2DConditionModel':\n            vico_unet = ViCoUNet2DConditionModel()\n            vico_unet.apply_to(unet)\n        elif layer.__class__.__name__ == 'CrossAttnDownBlock2D':\n            vico_down_block = ViCoCrossAttnDownBlock2D()\n            vico_down_block.apply_to(layer)\n        elif layer.__class__.__name__ == 'UNetMidBlock2DCrossAttn':\n            vico_mid_block = ViCoUNetMidBlock2DCrossAttn()\n            vico_mid_block.apply_to(layer)\n        elif layer.__class__.__name__ == 'CrossAttnUpBlock2D':\n            vico_up_block = ViCoCrossAttnUpBlock2D()\n            vico_up_block.apply_to(layer)\n"
  },
  {
    "path": "mmagic/models/editors/wgan_gp/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .wgan_discriminator import WGANGPDiscriminator\nfrom .wgan_generator import WGANGPGenerator\nfrom .wgan_gp import WGANGP\n\n__all__ = ['WGANGPDiscriminator', 'WGANGPGenerator', 'WGANGP']\n"
  },
  {
    "path": "mmagic/models/editors/wgan_gp/wgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.registry import MODELS\nfrom .wgan_gp_module import ConvLNModule, WGANDecisionHead\n\n\n@MODELS.register_module()\nclass WGANGPDiscriminator(BaseModule):\n    r\"\"\"Discriminator for WGANGP.\n\n    Implementation Details for WGANGP discriminator the same as training\n    configuration (a) described in PGGAN paper:\n    PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION\n    https://research.nvidia.com/sites/default/files/pubs/2017-10_Progressive-Growing-of/karras2018iclr-paper.pdf # noqa\n\n    #. Adopt convolution architecture specified in appendix A.2;\n    #. Add layer normalization to all conv3x3 and conv4x4 layers;\n    #. Use LeakyReLU in the discriminator except for the final output layer;\n    #. Initialize all weights using He’s initializer.\n\n    Args:\n        in_channel (int): The channel number of the input image.\n        in_scale (int): The scale of the input image.\n        conv_module_cfg (dict, optional): Config for the convolution module\n            used in this discriminator. Defaults to None.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n    _default_channels_per_scale = {\n        '4': 512,\n        '8': 512,\n        '16': 256,\n        '32': 128,\n        '64': 64,\n        '128': 32\n    }\n    _default_conv_module_cfg = dict(\n        conv_cfg=None,\n        kernel_size=3,\n        stride=1,\n        padding=1,\n        bias=True,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        norm_cfg=dict(type='LN2d'),\n        order=('conv', 'norm', 'act'))\n\n    _default_upsample_cfg = dict(type='nearest', scale_factor=2)\n\n    def __init__(self,\n                 in_channel,\n                 in_scale,\n                 conv_module_cfg=None,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        # set initial params\n        self.in_channel = in_channel\n        self.in_scale = in_scale\n        self.conv_module_cfg = deepcopy(self._default_conv_module_cfg)\n        if conv_module_cfg is not None:\n            self.conv_module_cfg.update(conv_module_cfg)\n        # set from_rgb head\n        self.from_rgb = ConvModule(\n            3,\n            kernel_size=1,\n            out_channels=self._default_channels_per_scale[str(self.in_scale)],\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2))\n        # set conv_blocks\n        self.conv_blocks = nn.ModuleList()\n\n        log2scale = int(np.log2(self.in_scale))\n        for i in range(log2scale, 2, -1):\n            self.conv_blocks.append(\n                ConvLNModule(\n                    self._default_channels_per_scale[str(2**i)],\n                    self._default_channels_per_scale[str(2**i)],\n                    feature_shape=(self._default_channels_per_scale[str(2**i)],\n                                   2**i, 2**i),\n                    **self.conv_module_cfg))\n            self.conv_blocks.append(\n                ConvLNModule(\n                    self._default_channels_per_scale[str(2**i)],\n                    self._default_channels_per_scale[str(2**(i - 1))],\n                    feature_shape=(self._default_channels_per_scale[str(\n                        2**(i - 1))], 2**i, 2**i),\n                    **self.conv_module_cfg))\n            self.conv_blocks.append(nn.AvgPool2d(kernel_size=2, stride=2))\n        self.decision = WGANDecisionHead(\n            self._default_channels_per_scale['4'],\n            self._default_channels_per_scale['4'],\n            1,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n            norm_cfg=self.conv_module_cfg['norm_cfg'])\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (torch.Tensor): Fake or real image tensor.\n\n        Returns:\n            torch.Tensor: Prediction for the reality of the input image.\n        \"\"\"\n        # noise vector to 2D feature\n        x = self.from_rgb(x)\n        for conv in self.conv_blocks:\n            x = conv(x)\n        x = self.decision(x)\n        return x\n"
  },
  {
    "path": "mmagic/models/editors/wgan_gp/wgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule\nfrom mmengine.model import BaseModule\n\nfrom mmagic.models.utils import get_module_device\nfrom mmagic.registry import MODELS\nfrom .wgan_gp_module import WGANNoiseTo2DFeat\n\n\n@MODELS.register_module()\nclass WGANGPGenerator(BaseModule):\n    r\"\"\"Generator for WGANGP.\n\n    Implementation Details for WGANGP generator the same as training\n    configuration (a) described in PGGAN paper:\n    PROGRESSIVE GROWING OF GANS FOR IMPROVED QUALITY, STABILITY, AND VARIATION\n    https://research.nvidia.com/sites/default/files/pubs/2017-10_Progressive-Growing-of/karras2018iclr-paper.pdf # noqa\n\n    #. Adopt convolution architecture specified in appendix A.2;\n    #. Use batchnorm in the generator except for the final output layer;\n    #. Use ReLU in the generator except for the final output layer;\n    #. Use Tanh in the last layer;\n    #. Initialize all weights using He’s initializer.\n\n    Args:\n        noise_size (int): Size of the input noise vector.\n        out_scale (int): Output scale for the generated image.\n        conv_module_cfg (dict, optional): Config for the convolution\n            module used in this generator. Defaults to None.\n        upsample_cfg (dict, optional): Config for the upsampling operation.\n            Defaults to None.\n        init_cfg (dict, optional): Initialization config dict.\n    \"\"\"\n    _default_channels_per_scale = {\n        '4': 512,\n        '8': 512,\n        '16': 256,\n        '32': 128,\n        '64': 64,\n        '128': 32\n    }\n    _default_conv_module_cfg = dict(\n        conv_cfg=None,\n        kernel_size=3,\n        stride=1,\n        padding=1,\n        bias=True,\n        act_cfg=dict(type='ReLU'),\n        norm_cfg=dict(type='BN'),\n        order=('conv', 'norm', 'act'))\n\n    _default_upsample_cfg = dict(type='nearest', scale_factor=2)\n\n    def __init__(self,\n                 noise_size,\n                 out_scale,\n                 conv_module_cfg=None,\n                 upsample_cfg=None,\n                 init_cfg=None):\n        super().__init__(init_cfg=init_cfg)\n        # set initial params\n        self.noise_size = noise_size\n        self.out_scale = out_scale\n        self.conv_module_cfg = deepcopy(self._default_conv_module_cfg)\n        if conv_module_cfg is not None:\n            self.conv_module_cfg.update(conv_module_cfg)\n        self.upsample_cfg = upsample_cfg if upsample_cfg else deepcopy(\n            self._default_upsample_cfg)\n        # set noise2feat head\n        self.noise2feat = WGANNoiseTo2DFeat(\n            self.noise_size, self._default_channels_per_scale['4'])\n        # set conv_blocks\n        self.conv_blocks = nn.ModuleList()\n        self.conv_blocks.append(ConvModule(512, 512, **self.conv_module_cfg))\n\n        log2scale = int(np.log2(self.out_scale))\n        for i in range(3, log2scale + 1):\n            self.conv_blocks.append(MODELS.build(self._default_upsample_cfg))\n            self.conv_blocks.append(\n                ConvModule(self._default_channels_per_scale[str(2**(i - 1))],\n                           self._default_channels_per_scale[str(2**i)],\n                           **self.conv_module_cfg))\n            self.conv_blocks.append(\n                ConvModule(self._default_channels_per_scale[str(2**i)],\n                           self._default_channels_per_scale[str(2**i)],\n                           **self.conv_module_cfg))\n        self.to_rgb = ConvModule(\n            self._default_channels_per_scale[str(self.out_scale)],\n            kernel_size=1,\n            out_channels=3,\n            act_cfg=dict(type='Tanh'))\n\n    def forward(self, noise, num_batches=0, return_noise=False):\n        \"\"\"Forward function.\n\n        Args:\n            noise (torch.Tensor | callable | None): You can directly give a\n                batch of noise through a ``torch.Tensor`` or offer a callable\n                function to sample a batch of noise data. Otherwise, the\n                ``None`` indicates to use the default noise sampler.\n            num_batches (int, optional): The number of batch size. Defaults to\n                0.\n            return_noise (bool, optional):  If True, ``noise_batch`` will be\n                returned in a dict with ``fake_img``. Defaults to False.\n\n        Returns:\n            torch.Tensor | dict: If not ``return_noise``, only the output image\n                will be returned. Otherwise, a dict contains ``fake_img`` and\n                ``noise_batch`` will be returned.\n        \"\"\"\n        # receive noise and conduct sanity check.\n        if isinstance(noise, torch.Tensor):\n            assert noise.shape[1] == self.noise_size\n            assert noise.ndim == 2, ('The noise should be in shape of (n, c), '\n                                     f'but got {noise.shape}')\n            noise_batch = noise\n        # receive a noise generator and sample noise.\n        elif callable(noise):\n            noise_generator = noise\n            assert num_batches > 0\n            noise_batch = noise_generator((num_batches, self.noise_size))\n        # otherwise, we will adopt default noise sampler.\n        else:\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, self.noise_size))\n\n        # dirty code for putting data on the right device\n        noise_batch = noise_batch.to(get_module_device(self))\n\n        # noise vector to 2D feature\n        x = self.noise2feat(noise_batch)\n        for conv in self.conv_blocks:\n            x = conv(x)\n        out_img = self.to_rgb(x)\n\n        if return_noise:\n            output = dict(fake_img=out_img, noise_batch=noise_batch)\n            return output\n\n        return out_img\n"
  },
  {
    "path": "mmagic/models/editors/wgan_gp/wgan_gp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Dict, Tuple\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch import Tensor\n\nfrom mmagic.models.base_models import BaseGAN\nfrom mmagic.models.losses import gradient_penalty_loss\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@MODELS.register_module()\nclass WGANGP(BaseGAN):\n    \"\"\"Implementation of `Improved Training of Wasserstein GANs`.\n\n    Paper link: https://arxiv.org/pdf/1704.00028\n\n    Detailed architecture can be found in\n    :class:`~mmagic.models.editors.wgan_gp.WGANGPGenerator`\n    and\n    :class:`~mmagic.models.editors.wgan_gp.WGANGPDiscriminator`\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        # gradient penalty loss settings\n        self.gp_norm_mode = self.loss_config.get('norm_mode', 'HWC')\n        self.gp_loss_weight = self.loss_config.get('loss_weight', 10)\n\n    def disc_loss(self, real_data: Tensor, fake_data: Tensor,\n                  disc_pred_fake: Tensor, disc_pred_real: Tensor) -> Tuple:\n        r\"\"\"Get disc loss. WGAN-GP use the wgan loss and gradient penalty to\n        train the discriminator.\n\n        Args:\n            real_data (Tensor): Real input data.\n            fake_data (Tensor): Fake input data.\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n            disc_pred_real (Tensor): Discriminator's prediction of the real\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_disc_fake'] = disc_pred_fake.mean()\n        losses_dict['loss_disc_real'] = -disc_pred_real.mean()\n\n        # Gradient Penalty loss\n        losses_dict['loss_gp'] = self.gp_loss_weight * gradient_penalty_loss(\n            self.discriminator,\n            real_data,\n            fake_data,\n            norm_mode=self.gp_norm_mode)\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def gen_loss(self, disc_pred_fake: Tensor) -> Tuple:\n        \"\"\"Get gen loss. DCGAN use the wgan loss to train the generator.\n\n        Args:\n            disc_pred_fake (Tensor): Discriminator's prediction of the fake\n                images.\n\n        Returns:\n            tuple[Tensor, dict]: Loss value and a dict of log variables.\n        \"\"\"\n        losses_dict = dict()\n        losses_dict['loss_gen'] = -disc_pred_fake.mean()\n        loss, log_var = self.parse_losses(losses_dict)\n        return loss, log_var\n\n    def train_discriminator(self, inputs: dict, data_samples: DataSample,\n                            optimizer_wrapper: OptimWrapper\n                            ) -> Dict[str, Tensor]:\n        \"\"\"Train discriminator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        real_imgs = data_samples.gt_img\n\n        num_batches = real_imgs.shape[0]\n\n        noise_batch = self.noise_fn(num_batches=num_batches)\n        with torch.no_grad():\n            fake_imgs = self.generator(noise=noise_batch, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        disc_pred_real = self.discriminator(real_imgs)\n\n        parsed_losses, log_vars = self.disc_loss(real_imgs, fake_imgs,\n                                                 disc_pred_fake,\n                                                 disc_pred_real)\n        optimizer_wrapper.update_params(parsed_losses)\n        return log_vars\n\n    def train_generator(self, inputs: dict, data_samples: DataSample,\n                        optimizer_wrapper: OptimWrapper) -> Dict[str, Tensor]:\n        \"\"\"Train generator.\n\n        Args:\n            inputs (dict): Inputs from dataloader.\n            data_samples (DataSample): Data samples from dataloader.\n                Do not used in generator's training.\n            optim_wrapper (OptimWrapper): OptimWrapper instance used to update\n                model parameters.\n\n        Returns:\n            Dict[str, Tensor]: A ``dict`` of tensor for logging.\n        \"\"\"\n        num_batches = len(data_samples)\n\n        noise = self.noise_fn(num_batches=num_batches)\n        fake_imgs = self.generator(noise=noise, return_noise=False)\n\n        disc_pred_fake = self.discriminator(fake_imgs)\n        parsed_loss, log_vars = self.gen_loss(disc_pred_fake)\n\n        optimizer_wrapper.update_params(parsed_loss)\n        return log_vars\n"
  },
  {
    "path": "mmagic/models/editors/wgan_gp/wgan_gp_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport torch\nimport torch.nn as nn\nfrom mmcv.cnn import ConvModule, build_norm_layer\nfrom mmengine.model import constant_init\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass WGANNoiseTo2DFeat(nn.Module):\n    \"\"\"Module used in WGAN-GP to transform 1D noise tensor in order [N, C] to\n    2D shape feature tensor in order [N, C, H, W].\n\n    Args:\n        noise_size (int): Size of the input noise vector.\n        out_channels (int): The channel number of the output feature.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        norm_cfg (dict, optional): Config dict to build norm layer. Defaults to\n            dict(type='BN').\n        order (tuple, optional): The order of conv/norm/activation layers. It\n            is a sequence of \"conv\", \"norm\" and \"act\". Common examples are\n            (\"conv\", \"norm\", \"act\") and (\"act\", \"conv\", \"norm\"). Defaults to\n            ('linear', 'act', 'norm').\n    \"\"\"\n\n    def __init__(self,\n                 noise_size,\n                 out_channels,\n                 act_cfg=dict(type='ReLU'),\n                 norm_cfg=dict(type='BN'),\n                 order=('linear', 'act', 'norm')):\n        super().__init__()\n        self.noise_size = noise_size\n        self.out_channels = out_channels\n        self.with_activation = act_cfg is not None\n        self.with_norm = norm_cfg is not None\n        self.order = order\n        assert len(order) == 3 and set(order) == set(['linear', 'act', 'norm'])\n\n        # w/o bias, because the bias is added after reshaping the tensor to\n        # 2D feature\n        self.linear = nn.Linear(noise_size, out_channels * 16, bias=False)\n\n        if self.with_activation:\n            self.activation = MODELS.build(act_cfg)\n\n        # add bias for reshaped 2D feature.\n        self.register_parameter(\n            'bias', nn.Parameter(torch.zeros(1, out_channels, 1, 1)))\n\n        if self.with_norm:\n            _, self.norm = build_norm_layer(norm_cfg, out_channels)\n        self._init_weight()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input noise tensor with shape (n, c).\n\n        Returns:\n            Tensor: Forward results with shape (n, c, 4, 4).\n        \"\"\"\n        assert x.ndim == 2\n        for order in self.order:\n            if order == 'linear':\n                x = self.linear(x)\n                # [n, c, 4, 4]\n                x = torch.reshape(x, (-1, self.out_channels, 4, 4))\n                x = x + self.bias\n            elif order == 'act' and self.with_activation:\n                x = self.activation(x)\n            elif order == 'norm' and self.with_norm:\n                x = self.norm(x)\n\n        return x\n\n    def _init_weight(self):\n        \"\"\"Initialize weights for the model.\"\"\"\n        nn.init.normal_(self.linear.weight, 0., 1.)\n        if self.bias is not None:\n            nn.init.constant_(self.bias, 0.)\n        if self.with_norm:\n            constant_init(self.norm, 1, bias=0)\n\n\nclass WGANDecisionHead(nn.Module):\n    \"\"\"Module used in WGAN-GP to get the final prediction result with 4x4\n    resolution input tensor in the bottom of the discriminator.\n\n    Args:\n        in_channels (int): Number of channels in input feature map.\n        mid_channels (int): Number of channels in feature map after\n            convolution.\n        out_channels (int): The channel number of the final output layer.\n        bias (bool, optional): Whether to use bias parameter. Defaults to True.\n        act_cfg (dict, optional): Config for the activation layer. Defaults to\n            dict(type='ReLU').\n        out_act (dict, optional): Config for the activation layer of output\n            layer. Defaults to None.\n        norm_cfg (dict, optional): Config dict to build norm layer. Defaults to\n            dict(type='LN2d').\n    \"\"\"\n\n    def __init__(self,\n                 in_channels,\n                 mid_channels,\n                 out_channels,\n                 bias=True,\n                 act_cfg=dict(type='ReLU'),\n                 out_act=None,\n                 norm_cfg=dict(type='LN2d')):\n        super().__init__()\n        self.in_channels = in_channels\n        self.mid_channels = mid_channels\n        self.out_channels = out_channels\n        self.with_out_activation = out_act is not None\n\n        # setup conv layer\n        self.conv = ConvLNModule(\n            in_channels,\n            feature_shape=(mid_channels, 1, 1),\n            kernel_size=4,\n            out_channels=mid_channels,\n            act_cfg=act_cfg,\n            norm_cfg=norm_cfg,\n            order=('conv', 'norm', 'act'))\n        # setup linear layer\n        self.linear = nn.Linear(\n            self.mid_channels, self.out_channels, bias=bias)\n\n        if self.with_out_activation:\n            self.out_activation = MODELS.build(out_act)\n\n        self._init_weight()\n\n    def forward(self, x):\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n        x = self.conv(x)\n        x = torch.reshape(x, (x.shape[0], -1))\n        x = self.linear(x)\n        if self.with_out_activation:\n            x = self.out_activation(x)\n        return x\n\n    def _init_weight(self):\n        \"\"\"Initialize weights for the model.\"\"\"\n        nn.init.normal_(self.linear.weight, 0., 1.)\n        nn.init.constant_(self.linear.bias, 0.)\n\n\n@MODELS.register_module()\nclass ConvLNModule(ConvModule):\n    r\"\"\"ConvModule with Layer Normalization.\n\n    In this module, we inherit default ``mmcv.cnn.ConvModule`` and deal with\n    the situation that 'norm_cfg' is 'LN2d' or 'GN'. We adopt 'GN' as a\n    replacement for layer normalization referring to:\n    https://github.com/LynnHo/DCGAN-LSGAN-WGAN-GP-DRAGAN-Pytorch/blob/master/module.py # noqa\n\n    Args:\n        feature_shape (tuple): The shape of feature map that will be.\n    \"\"\"\n\n    def __init__(self, *args, feature_shape=None, **kwargs):\n        if 'norm_cfg' in kwargs and kwargs['norm_cfg'] is not None and kwargs[\n                'norm_cfg']['type'] in ['LN2d', 'GN']:\n            nkwargs = deepcopy(kwargs)\n            nkwargs['norm_cfg'] = None\n            super().__init__(*args, **nkwargs)\n            self.with_norm = True\n            self.norm_name = kwargs['norm_cfg']['type']\n            if self.norm_name == 'LN2d':\n                norm = nn.LayerNorm(feature_shape)\n                self.add_module(self.norm_name, norm)\n            else:\n                norm = nn.GroupNorm(1, feature_shape[0])\n                self.add_module(self.norm_name, norm)\n        else:\n            super().__init__(*args, **kwargs)\n"
  },
  {
    "path": "mmagic/models/losses/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .adv_loss import AdvLoss\nfrom .clip_loss import CLIPLoss\nfrom .composition_loss import (CharbonnierCompLoss, L1CompositionLoss,\n                               MSECompositionLoss)\nfrom .face_id_loss import FaceIdLoss\nfrom .feature_loss import LightCNNFeatureLoss\nfrom .gan_loss import (DiscShiftLoss, GANLoss, GaussianBlur,\n                       GradientPenaltyLoss, disc_shift_loss,\n                       gen_path_regularizer, gradient_penalty_loss,\n                       r1_gradient_penalty_loss)\nfrom .gradient_loss import GradientLoss\nfrom .loss_comps import (CLIPLossComps, DiscShiftLossComps, FaceIdLossComps,\n                         GANLossComps, GeneratorPathRegularizerComps,\n                         GradientPenaltyLossComps, R1GradientPenaltyComps)\nfrom .loss_wrapper import mask_reduce_loss, reduce_loss\nfrom .perceptual_loss import (PerceptualLoss, PerceptualVGG,\n                              TransferalPerceptualLoss)\nfrom .pixelwise_loss import (CharbonnierLoss, L1Loss, MaskedTVLoss, MSELoss,\n                             PSNRLoss, tv_loss)\n\n__all__ = [\n    'L1Loss', 'MSELoss', 'CharbonnierLoss', 'L1CompositionLoss',\n    'MSECompositionLoss', 'CharbonnierCompLoss', 'GANLoss', 'GaussianBlur',\n    'GradientPenaltyLoss', 'PerceptualLoss', 'PerceptualVGG', 'reduce_loss',\n    'mask_reduce_loss', 'DiscShiftLoss', 'MaskedTVLoss', 'GradientLoss',\n    'TransferalPerceptualLoss', 'LightCNNFeatureLoss', 'gradient_penalty_loss',\n    'r1_gradient_penalty_loss', 'gen_path_regularizer', 'FaceIdLoss',\n    'CLIPLoss', 'CLIPLossComps', 'DiscShiftLossComps', 'FaceIdLossComps',\n    'GANLossComps', 'GeneratorPathRegularizerComps',\n    'GradientPenaltyLossComps', 'R1GradientPenaltyComps', 'disc_shift_loss',\n    'tv_loss', 'PSNRLoss', 'AdvLoss'\n]\n"
  },
  {
    "path": "mmagic/models/losses/adv_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport random\nfrom collections import deque\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom .gan_loss import GANLoss, gradient_penalty_loss\n\n\nclass ImagePool:\n    \"\"\"Defined a image pool for RelativisticDiscLoss.\"\"\"\n\n    def __init__(self, pool_size):\n        self.pool_size = pool_size\n        self.sample_size = pool_size\n        if self.pool_size > 0:\n            self.num_imgs = 0\n            self.images = deque()\n\n    def add(self, images):\n        if self.pool_size == 0:\n            return images\n        for image in images.data:\n            image = torch.unsqueeze(image, 0)\n            if self.num_imgs < self.pool_size:\n                self.num_imgs = self.num_imgs + 1\n                self.images.append(image)\n            else:\n                self.images.popleft()\n                self.images.append(image)\n\n    def query(self):\n        if len(self.images) > self.sample_size:\n            return_images = list(random.sample(self.images, self.sample_size))\n        else:\n            return_images = list(self.images)\n        return torch.cat(return_images, 0)\n\n\nclass DiscLoss(nn.Module):\n    \"\"\"Defined a criterion to calculator loss.\"\"\"\n\n    def name(self):\n        \"\"\"return name of criterion.\"\"\"\n        return 'DiscLoss'\n\n    def __init__(self, gan_type='vanilla'):\n        super(DiscLoss, self).__init__()\n\n        self.criterionGAN = GANLoss(gan_type=gan_type)\n\n    def forward(self, net, fakeB, realB, model='discriminator'):\n        \"\"\"Get discriminator or generator loss.\"\"\"\n        if model == 'discriminator':\n            self.pred_fake = net.forward(fakeB.detach())\n            self.loss_D_fake = self.criterionGAN(self.pred_fake, 0)\n\n            # Real\n            self.pred_real = net.forward(realB)\n            self.loss_D_real = self.criterionGAN(self.pred_real, 1)\n\n            # Combined loss\n            self.loss_D = (self.loss_D_fake + self.loss_D_real) * 0.5\n            return self.loss_D\n        else:\n            pred_fake = net.forward(fakeB)\n            return self.criterionGAN(pred_fake, 1)\n\n\nclass RelativisticDiscLoss(nn.Module):\n    \"\"\"Defined a criterion to calculator loss.\"\"\"\n\n    def name(self):\n        \"\"\"return name of criterion.\"\"\"\n        return 'RelativisticDiscLoss'\n\n    def __init__(self):\n        super(RelativisticDiscLoss, self).__init__()\n\n        self.criterionGAN = GANLoss(gan_type='vanilla')\n        self.fake_pool = ImagePool(50)\n        self.real_pool = ImagePool(50)\n\n    def forward(self, net, fakeB, realB, model='discriminator'):\n        \"\"\"Get discriminator or generator loss.\"\"\"\n        if model == 'discriminator':\n            self.fake_B = fakeB.detach()\n            self.real_B = realB\n            self.pred_fake = net.forward(self.fake_B)\n            self.fake_pool.add(self.pred_fake)\n\n            # Real\n            self.pred_real = net.forward(self.real_B)\n            self.real_pool.add(self.pred_real)\n\n            # Combined loss\n            self.loss_D = (self.criterionGAN(\n                self.pred_real - torch.mean(self.fake_pool.query()), 1) +\n                           self.criterionGAN(\n                               self.pred_fake -\n                               torch.mean(self.real_pool.query()), 0)) / 2\n            return self.loss_D\n        else:\n            self.pred_fake = net.forward(fakeB)\n\n            # Real\n            self.pred_real = net.forward(realB)\n            errG = (self.criterionGAN(\n                self.pred_real - torch.mean(self.fake_pool.query()), 0) +\n                    self.criterionGAN(\n                        self.pred_fake - torch.mean(self.real_pool.query()),\n                        1)) / 2\n            return errG\n\n\nclass RelativisticDiscLossLS(nn.Module):\n    \"\"\"Defined a criterion to calculator loss.\"\"\"\n\n    def name(self):\n        \"\"\"return name of criterion.\"\"\"\n        return 'RelativisticDiscLossLS'\n\n    def __init__(self):\n        super(RelativisticDiscLossLS, self).__init__()\n\n        self.criterionGAN = GANLoss(gan_type='l1')\n        self.fake_pool = ImagePool(50)\n        self.real_pool = ImagePool(50)\n\n    def forward(self, net, fakeB, realB, model='discriminator'):\n        \"\"\"Get discriminator or generator loss.\"\"\"\n        if model == 'discriminator':\n            self.fake_B = fakeB.detach()\n            self.real_B = realB\n            self.pred_fake = net.forward(fakeB.detach())\n            self.fake_pool.add(self.pred_fake)\n\n            # Real\n            self.pred_real = net.forward(realB)\n            self.real_pool.add(self.pred_real)\n\n            # Combined loss\n            ex_pdata = torch.mean(\n                (self.pred_real - torch.mean(self.fake_pool.query()) - 1)**2)\n            ex_pz = torch.mean(\n                (self.pred_fake - torch.mean(self.real_pool.query()) + 1)**2)\n            self.loss_D = (ex_pdata + ex_pz) / 2\n            return self.loss_D\n        else:\n            self.pred_fake = net.forward(fakeB)\n\n            # Real\n            self.pred_real = net.forward(realB)\n            ex_pdata = torch.mean(\n                (self.pred_real - torch.mean(self.fake_pool.query()) + 1)**2)\n            ez_pz = torch.mean(\n                (self.pred_fake - torch.mean(self.real_pool.query()) - 1)**2)\n            errG = (ex_pdata + ez_pz) / 2\n            return errG\n\n\nclass DiscLossWGANGP(DiscLoss):\n    \"\"\"Defined a criterion to calculator loss.\"\"\"\n\n    def name(self):\n        \"\"\"return name of criterion.\"\"\"\n        return 'DiscLossWGAN-GP'\n\n    def __init__(self):\n        super(DiscLossWGANGP, self).__init__()\n        self.LAMBDA = 10\n\n    def forward(self, net, fakeB, realB, model='discriminator'):\n        \"\"\"Get discriminator or generator loss.\"\"\"\n        if model == 'discriminator':\n            self.D_fake = net.forward(fakeB.detach())\n            self.D_fake = self.D_fake.mean()\n\n            # Real\n            self.D_real = net.forward(realB)\n            self.D_real = self.D_real.mean()\n            # Combined loss\n            self.loss_D = self.D_fake - self.D_real\n            gradient_penalty = gradient_penalty_loss(net, realB.data,\n                                                     fakeB.data) * self.LAMBDA\n            return self.loss_D + gradient_penalty\n        else:\n            self.D_fake = net.forward(fakeB)\n            return -self.D_fake.mean()\n\n\n@MODELS.register_module()\nclass AdvLoss:\n    \"\"\"Returns the loss of discriminator with the specified type for\n    DeblurGanv2.\n\n    Args:\n        loss_type (Str): One of value in [wgan-gp,lsgan,gan,ragan,ragan-ls].\n    \"\"\"\n\n    def __new__(cls, loss_type: str):\n        if loss_type == 'wgan-gp':\n            disc_loss = DiscLossWGANGP()\n        elif loss_type == 'lsgan':\n            disc_loss = DiscLoss(gan_type='l1')\n        elif loss_type == 'gan':\n            disc_loss = DiscLoss()\n        elif loss_type == 'ragan':\n            disc_loss = RelativisticDiscLoss()\n        elif loss_type == 'ragan-ls':\n            disc_loss = RelativisticDiscLossLS()\n        else:\n            raise ValueError('GAN Loss [%s] not recognized.' % loss_type)\n        return disc_loss\n"
  },
  {
    "path": "mmagic/models/losses/clip_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import try_import\n\nclip = try_import('clip')\n\n\nclass CLIPLossModel(torch.nn.Module):\n    \"\"\"Wrapped clip model to calculate clip loss.\n\n    Ref: https://github.com/orpatashnik/StyleCLIP/blob/main/criteria/clip_loss.py # noqa\n\n    Args:\n        in_size (int, optional): Input image size. Defaults to 1024.\n        scale_factor (int, optional): Unsampling factor. Defaults to 7.\n        pool_size (int, optional): Pooling output size. Defaults to 224.\n        clip_type (str, optional): A model name listed by\n            `clip.available_models()`, or the path to a model checkpoint\n            containing the state_dict. For more details, you can refer to\n            https://github.com/openai/CLIP/blob/573315e83f07b53a61ff5098757e8fc885f1703e/clip/clip.py#L91 # noqa\n            Defaults to 'ViT-B/32'.\n    \"\"\"\n\n    def __init__(self,\n                 in_size: int = 1024,\n                 scale_factor: int = 7,\n                 pool_size: int = 224,\n                 clip_type: str = 'ViT-B/32') -> None:\n        super(CLIPLossModel, self).__init__()\n        try:\n            import clip\n        except ImportError:\n            raise 'To use clip loss, openai clip need to be installed first'\n\n        assert clip is not None, (\n            \"Cannot import 'clip'. Please install 'clip' via \"\n            \"\\\"pip install git+https://github.com/openai/CLIP.git\\\".\")\n        self.model, self.preprocess = clip.load(clip_type, device='cpu')\n        self.upsample = torch.nn.Upsample(scale_factor=scale_factor)\n        self.avg_pool = torch.nn.AvgPool2d(\n            kernel_size=(scale_factor * in_size // pool_size))\n\n    def forward(self, image: torch.Tensor, text: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\"\"\"\n        assert image is not None\n        assert text is not None\n        image = self.avg_pool(self.upsample(image))\n        loss = 1 - self.model(image, text)[0] / 100\n        return loss\n\n\n@MODELS.register_module()\nclass CLIPLoss(nn.Module):\n    \"\"\"Clip loss. In styleclip, this loss is used to optimize the latent code\n    to generate image that match the text.\n\n    In this loss, we may need to provide ``image``, ``text``. Thus,\n    an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            image='fake_imgs',\n            text='descriptions')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        clip_model (dict, optional): Kwargs for clip loss model. Defaults to\n            dict().\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_clip'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 data_info: Optional[dict] = None,\n                 clip_model: dict = dict(),\n                 loss_name: str = 'loss_clip') -> None:\n\n        super(CLIPLoss, self).__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n        self.net = CLIPLossModel(**clip_model)\n        self._loss_name = loss_name\n\n    def forward(self, image: torch.Tensor, text: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``third_party_net_loss``.\n        \"\"\"\n        return self.net(image, text) * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/composition_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom .pixelwise_loss import charbonnier_loss, l1_loss, mse_loss\n\n_reduction_modes = ['none', 'mean', 'sum']\n\n\n@MODELS.register_module()\nclass L1CompositionLoss(nn.Module):\n    \"\"\"L1 composition loss.\n\n    Args:\n        loss_weight (float): Loss weight for L1 loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n\n    def forward(self,\n                pred_alpha: torch.Tensor,\n                fg: torch.Tensor,\n                bg: torch.Tensor,\n                ori_merged: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            pred_alpha (Tensor): of shape (N, 1, H, W). Predicted alpha matte.\n            fg (Tensor): of shape (N, 3, H, W). Tensor of foreground object.\n            bg (Tensor): of shape (N, 3, H, W). Tensor of background object.\n            ori_merged (Tensor): of shape (N, 3, H, W). Tensor of origin merged\n                image before normalized by ImageNet mean and std.\n            weight (Tensor, optional): of shape (N, 1, H, W). It is an\n                indicating matrix: weight[trimap == 128] = 1. Default: None.\n        \"\"\"\n        pred_merged = pred_alpha * fg + (1. - pred_alpha) * bg\n        if weight is not None:\n            weight = weight.expand(-1, 3, -1, -1)\n        return self.loss_weight * l1_loss(\n            pred_merged,\n            ori_merged,\n            weight,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n\n\n@MODELS.register_module()\nclass MSECompositionLoss(nn.Module):\n    \"\"\"MSE (L2) composition loss.\n\n    Args:\n        loss_weight (float): Loss weight for MSE loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n\n    def forward(self,\n                pred_alpha: torch.Tensor,\n                fg: torch.Tensor,\n                bg: torch.Tensor,\n                ori_merged: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            pred_alpha (Tensor): of shape (N, 1, H, W). Predicted alpha matte.\n            fg (Tensor): of shape (N, 3, H, W). Tensor of foreground object.\n            bg (Tensor): of shape (N, 3, H, W). Tensor of background object.\n            ori_merged (Tensor): of shape (N, 3, H, W). Tensor of origin merged\n                image before normalized by ImageNet mean and std.\n            weight (Tensor, optional): of shape (N, 1, H, W). It is an\n                indicating matrix: weight[trimap == 128] = 1. Default: None.\n        \"\"\"\n        pred_merged = pred_alpha * fg + (1. - pred_alpha) * bg\n        if weight is not None:\n            weight = weight.expand(-1, 3, -1, -1)\n        return self.loss_weight * mse_loss(\n            pred_merged,\n            ori_merged,\n            weight,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n\n\n@MODELS.register_module()\nclass CharbonnierCompLoss(nn.Module):\n    \"\"\"Charbonnier composition loss.\n\n    Args:\n        loss_weight (float): Loss weight for L1 loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n        eps (float): A value used to control the curvature near zero.\n            Default: 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False,\n                 eps: bool = 1e-12) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n        self.eps = eps\n\n    def forward(self,\n                pred_alpha: torch.Tensor,\n                fg: torch.Tensor,\n                bg: torch.Tensor,\n                ori_merged: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"\n        Args:\n            pred_alpha (Tensor): of shape (N, 1, H, W). Predicted alpha matte.\n            fg (Tensor): of shape (N, 3, H, W). Tensor of foreground object.\n            bg (Tensor): of shape (N, 3, H, W). Tensor of background object.\n            ori_merged (Tensor): of shape (N, 3, H, W). Tensor of origin merged\n                image before normalized by ImageNet mean and std.\n            weight (Tensor, optional): of shape (N, 1, H, W). It is an\n                indicating matrix: weight[trimap == 128] = 1. Default: None.\n        \"\"\"\n        pred_merged = pred_alpha * fg + (1. - pred_alpha) * bg\n        if weight is not None:\n            weight = weight.expand(-1, 3, -1, -1)\n        return self.loss_weight * charbonnier_loss(\n            pred_merged,\n            ori_merged,\n            weight,\n            eps=self.eps,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n"
  },
  {
    "path": "mmagic/models/losses/face_id_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FaceIdLoss(nn.Module):\n    \"\"\"Face similarity loss. Generally this loss is used to keep the id\n    consistency of the input face image and output face image.\n\n    In this loss, we may need to provide ``gt``, ``pred`` and ``x``. Thus,\n    an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            gt='real_imgs',\n            pred='fake_imgs')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        facenet (dict, optional): Config dict for facenet. Defaults to\n            dict(type='ArcFace', ir_se50_weights=None, device='cuda').\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_id'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 data_info: Optional[dict] = None,\n                 facenet: dict = dict(type='ArcFace', ir_se50_weights=None),\n                 loss_name: str = 'loss_id') -> None:\n\n        super(FaceIdLoss, self).__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n        self.net = MODELS.build(facenet)\n        self._loss_name = loss_name\n\n    def forward(self, pred: torch.Tensor, gt: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\"\"\"\n\n        # NOTE: only return the loss term\n        return self.net(pred, gt)[0] * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/feature_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport warnings\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import MMLogger\nfrom mmengine.runner import load_checkpoint\n\nfrom mmagic.models.editors.dic import LightCNN\nfrom mmagic.registry import MODELS\n\n\nclass LightCNNFeature(nn.Module):\n    \"\"\"Feature of LightCNN.\n\n    It is used to train DICGAN.\n    \"\"\"\n\n    def __init__(self) -> None:\n        super().__init__()\n\n        model = LightCNN(3)\n        self.features = nn.Sequential(*list(model.features.children()))\n        self.features.requires_grad_(False)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        return self.features(x)\n\n    def init_weights(self,\n                     pretrained: Optional[str] = None,\n                     strict: bool = True) -> None:\n        \"\"\"Init weights for models.\n\n        Args:\n            pretrained (str, optional): Path for pretrained weights. If given\n                None, pretrained weights will not be loaded. Defaults to None.\n            strict (boo, optional): Whether strictly load the pretrained model.\n                Defaults to True.\n        \"\"\"\n        if isinstance(pretrained, str):\n            logger = MMLogger.get_current_instance()\n            load_checkpoint(self, pretrained, strict=strict, logger=logger)\n        elif pretrained is not None:\n            raise TypeError(f'\"pretrained\" must be a str or None. '\n                            f'But received {type(pretrained)}.')\n\n\n@MODELS.register_module()\nclass LightCNNFeatureLoss(nn.Module):\n    \"\"\"Feature loss of DICGAN, based on LightCNN.\n\n    Args:\n        pretrained (str): Path for pretrained weights.\n        loss_weight (float): Loss weight. Default: 1.0.\n        criterion (str): Criterion type. Options are 'l1' and 'mse'.\n            Default: 'l1'.\n    \"\"\"\n\n    def __init__(self,\n                 pretrained: str,\n                 loss_weight: float = 1.0,\n                 criterion: str = 'l1') -> None:\n        super().__init__()\n        self.model = LightCNNFeature()\n        if not isinstance(pretrained, str):\n            warnings.warn('`LightCNNFeature` model in FeatureLoss ' +\n                          'should be pretrained')\n        self.model.init_weights(pretrained)\n        self.model.eval()\n        self.loss_weight = loss_weight\n        if criterion == 'l1':\n            self.criterion = torch.nn.L1Loss()\n        elif criterion == 'mse':\n            self.criterion = torch.nn.MSELoss()\n        else:\n            raise ValueError(\"'criterion' should be 'l1' or 'mse', \"\n                             f'but got {criterion}')\n\n    def forward(self, pred: torch.Tensor, gt: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            pred (Tensor): Predicted tensor.\n            gt (Tensor): GT tensor.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        self.model.eval()\n        pred_feature = self.model(pred)\n        gt_feature = self.model(gt).detach()\n        feature_loss = self.criterion(pred_feature, gt_feature)\n\n        return feature_loss * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/gan_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.autograd as autograd\nimport torch.distributed as dist\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine.dist import is_distributed\nfrom torch.cuda.amp.grad_scaler import GradScaler\nfrom torch.nn.functional import conv2d\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GANLoss(nn.Module):\n    \"\"\"Define GAN loss.\n\n    Args:\n        gan_type (str): Support 'vanilla', 'lsgan', 'wgan', 'hinge', 'l1'.\n        real_label_val (float): The value for real label. Default: 1.0.\n        fake_label_val (float): The value for fake label. Default: 0.0.\n        loss_weight (float): Loss weight. Default: 1.0.\n            Note that loss_weight is only for generators; and it is always 1.0\n            for discriminators.\n    \"\"\"\n\n    def __init__(self,\n                 gan_type: str,\n                 real_label_val: float = 1.0,\n                 fake_label_val: float = 0.0,\n                 loss_weight: float = 1.0) -> None:\n        super().__init__()\n        self.gan_type = gan_type\n        self.real_label_val = real_label_val\n        self.fake_label_val = fake_label_val\n        self.loss_weight = loss_weight\n        if self.gan_type == 'smgan':\n            self.gaussian_blur = GaussianBlur()\n\n        if self.gan_type == 'vanilla':\n            self.loss = nn.BCEWithLogitsLoss()\n        elif self.gan_type == 'lsgan' or self.gan_type == 'smgan':\n            self.loss = nn.MSELoss()\n        elif self.gan_type == 'wgan':\n            self.loss = self._wgan_loss\n        elif self.gan_type == 'hinge':\n            self.loss = nn.ReLU()\n        elif self.gan_type == 'l1':\n            self.loss = nn.L1Loss()\n        else:\n            raise NotImplementedError(\n                f'GAN type {self.gan_type} is not implemented.')\n\n    def _wgan_loss(self, input: torch.Tensor, target: bool) -> torch.Tensor:\n        \"\"\"wgan loss.\n\n        Args:\n            input (Tensor): Input tensor.\n            target (bool): Target label.\n\n        Returns:\n            Tensor: wgan loss.\n        \"\"\"\n\n        return -input.mean() if target else input.mean()\n\n    def get_target_label(self, input: torch.Tensor,\n                         target_is_real: bool) -> Union[bool, torch.Tensor]:\n        \"\"\"Get target label.\n\n        Args:\n            input (Tensor): Input tensor.\n            target_is_real (bool): Whether the target is real or fake.\n\n        Returns:\n            (bool | Tensor): Target tensor. Return bool for wgan, otherwise,\n                return Tensor.\n        \"\"\"\n\n        if self.gan_type == 'wgan':\n            return target_is_real\n        target_val = (\n            self.real_label_val if target_is_real else self.fake_label_val)\n        return input.new_ones(input.size()) * target_val\n\n    def forward(self,\n                input: torch.Tensor,\n                target_is_real: bool,\n                is_disc: bool = False,\n                mask: Optional[torch.Tensor] = None) -> torch.Tensor:\n        \"\"\"\n        Args:\n            input (Tensor): The input for the loss module, i.e., the network\n                prediction.\n            target_is_real (bool): Whether the target is real or fake.\n            is_disc (bool): Whether the loss for discriminators or not.\n                Default: False.\n            mask (Tensor): The mask tensor. Default: None.\n\n        Returns:\n            Tensor: GAN loss value.\n        \"\"\"\n\n        target_label = self.get_target_label(input, target_is_real)\n        if self.gan_type == 'hinge':\n            if is_disc:  # for discriminators in hinge-gan\n                input = -input if target_is_real else input\n                loss = self.loss(1 + input).mean()\n            else:  # for generators in hinge-gan\n                loss = -input.mean()\n        elif self.gan_type == 'smgan':\n\n            input_height, input_width = input.shape[2:]\n            mask_height, mask_width = mask.shape[2:]\n\n            # Handle inconsistent size between outputs and masks\n            if input_height != mask_height or input_width != mask_width:\n                input = F.interpolate(\n                    input,\n                    size=(mask_height, mask_width),\n                    mode='bilinear',\n                    align_corners=True)\n\n                target_label = self.get_target_label(input, target_is_real)\n\n            if is_disc:\n                if target_is_real:\n                    target_label = target_label\n                else:\n                    target_label = self.gaussian_blur(mask).detach().cuda(\n                    ) if mask.is_cuda else self.gaussian_blur(\n                        mask).detach().cpu()\n                    # target_label = self.gaussian_blur(mask).detach().cpu()\n                loss = self.loss(input, target_label)\n            else:\n                loss = self.loss(input, target_label) * mask / mask.mean()\n                loss = loss.mean()\n        else:  # other gan types\n            loss = self.loss(input, target_label)\n\n        # loss_weight is always 1.0 for discriminators\n        return loss if is_disc else loss * self.loss_weight\n\n\n@MODELS.register_module()\nclass GaussianBlur(nn.Module):\n    \"\"\"A Gaussian filter which blurs a given tensor with a two-dimensional\n    gaussian kernel by convolving it along each channel. Batch operation is\n    supported.\n\n    This function is modified from kornia.filters.gaussian:\n    `<https://kornia.readthedocs.io/en/latest/_modules/kornia/filters/gaussian.html>`.\n\n    Args:\n        kernel_size (tuple[int]): The size of the kernel. Default: (71, 71).\n        sigma (tuple[float]): The standard deviation of the kernel.\n        Default (10.0, 10.0)\n\n    Returns:\n        Tensor: The Gaussian-blurred tensor.\n\n    Shape:\n        - input: Tensor with shape of (n, c, h, w)\n        - output: Tensor with shape of (n, c, h, w)\n    \"\"\"\n\n    def __init__(\n        self,\n        kernel_size: Tuple[int, int] = (71, 71),\n        sigma: Tuple[float, float] = (10.0, 10.0)\n    ) -> None:\n        super(GaussianBlur, self).__init__()\n        self.kernel_size = kernel_size\n        self.sigma = sigma\n        self.padding = self.compute_zero_padding(kernel_size)\n        self.kernel = self.get_2d_gaussian_kernel(kernel_size, sigma)\n\n    @staticmethod\n    def compute_zero_padding(kernel_size: Tuple[int, int]) -> tuple:\n        \"\"\"Compute zero padding tuple.\n\n        Args:\n            kernel_size (tuple[int]): The size of the kernel.\n\n        Returns:\n            tuple: Padding of height and weight.\n        \"\"\"\n\n        padding = [(ks - 1) // 2 for ks in kernel_size]\n\n        return padding[0], padding[1]\n\n    def get_2d_gaussian_kernel(self, kernel_size: Tuple[int, int],\n                               sigma: Tuple[float, float]) -> torch.Tensor:\n        \"\"\"Get the two-dimensional Gaussian filter matrix coefficients.\n\n        Args:\n            kernel_size (tuple[int]): Kernel filter size in the x and y\n                                      direction. The kernel sizes\n                                      should be odd and positive.\n            sigma (tuple[int]): Gaussian standard deviation in\n                                the x and y direction.\n\n        Returns:\n            kernel_2d (Tensor): A 2D torch tensor with gaussian filter\n                                matrix coefficients.\n        \"\"\"\n\n        if not isinstance(kernel_size, tuple) or len(kernel_size) != 2:\n            raise TypeError(\n                'kernel_size must be a tuple of length two. Got {}'.format(\n                    kernel_size))\n        if not isinstance(sigma, tuple) or len(sigma) != 2:\n            raise TypeError(\n                'sigma must be a tuple of length two. Got {}'.format(sigma))\n\n        kernel_size_x, kernel_size_y = kernel_size\n        sigma_x, sigma_y = sigma\n\n        kernel_x = self.get_1d_gaussian_kernel(kernel_size_x, sigma_x)\n        kernel_y = self.get_1d_gaussian_kernel(kernel_size_y, sigma_y)\n        kernel_2d = torch.matmul(\n            kernel_x.unsqueeze(-1),\n            kernel_y.unsqueeze(-1).t())\n\n        return kernel_2d\n\n    def get_1d_gaussian_kernel(self, kernel_size: int,\n                               sigma: float) -> torch.Tensor:\n        \"\"\"Get the Gaussian filter coefficients in one dimension (x or y\n        direction).\n\n        Args:\n            kernel_size (int): Kernel filter size in x or y direction.\n                               Should be odd and positive.\n            sigma (float): Gaussian standard deviation in x or y direction.\n\n        Returns:\n            kernel_1d (Tensor): A 1D torch tensor with gaussian filter\n                                coefficients in x or y direction.\n        \"\"\"\n\n        if not isinstance(kernel_size,\n                          int) or kernel_size % 2 == 0 or kernel_size <= 0:\n            raise TypeError(\n                'kernel_size must be an odd positive integer. Got {}'.format(\n                    kernel_size))\n\n        kernel_1d = self.gaussian(kernel_size, sigma)\n        return kernel_1d\n\n    def gaussian(self, kernel_size: int, sigma: float) -> torch.Tensor:\n        \"\"\"Gaussian function.\n\n        Args:\n            kernel_size (int): Kernel filter size in x or y direction.\n                               Should be odd and positive.\n            sigma (float): Gaussian standard deviation in x or y direction.\n\n        Returns:\n            Tensor: A 1D torch tensor with gaussian filter\n                coefficients in x or y direction.\n        \"\"\"\n\n        def gauss_arg(x):\n            return -(x - kernel_size // 2)**2 / float(2 * sigma**2)\n\n        gauss = torch.stack([\n            torch.exp(torch.tensor(gauss_arg(x))) for x in range(kernel_size)\n        ])\n        return gauss / gauss.sum()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Tensor with shape (n, c, h, w)\n\n        Returns:\n            Tensor: The Gaussian-blurred tensor.\n        \"\"\"\n        if not torch.is_tensor(x):\n            raise TypeError(\n                'Input x type is not a torch.Tensor. Got {}'.format(type(x)))\n        if not len(x.shape) == 4:\n            raise ValueError(\n                'Invalid input shape, we expect BxCxHxW. Got: {}'.format(\n                    x.shape))\n        _, c, _, _ = x.shape\n        tmp_kernel = self.kernel.to(x.device).to(x.dtype)\n        kernel = tmp_kernel.repeat(c, 1, 1, 1)\n\n        return conv2d(x, kernel, padding=self.padding, stride=1, groups=c)\n\n\ndef gradient_penalty_loss(discriminator: nn.Module,\n                          real_data: torch.Tensor,\n                          fake_data: torch.Tensor,\n                          mask: Optional[torch.Tensor] = None,\n                          norm_mode: str = 'pixel') -> torch.Tensor:\n    \"\"\"Calculate gradient penalty for wgan-gp.\n\n    Args:\n        discriminator (nn.Module): Network for the discriminator.\n        real_data (Tensor): Real input data.\n        fake_data (Tensor): Fake input data.\n        mask (Tensor): Masks for inpainting. Default: None.\n\n    Returns:\n        Tensor: A tensor for gradient penalty.\n    \"\"\"\n\n    batch_size = real_data.size(0)\n    alpha = torch.rand(batch_size, 1, 1, 1).to(real_data)\n\n    # interpolate between real_data and fake_data\n    interpolates = alpha * real_data + (1. - alpha) * fake_data\n    interpolates = autograd.Variable(interpolates, requires_grad=True)\n\n    disc_interpolates = discriminator(interpolates)\n    gradients = autograd.grad(\n        outputs=disc_interpolates,\n        inputs=interpolates,\n        grad_outputs=torch.ones_like(disc_interpolates),\n        create_graph=True,\n        retain_graph=True,\n        only_inputs=True)[0]\n\n    if mask is not None:\n        gradients = gradients * mask\n\n    if norm_mode == 'pixel':\n        gradients_penalty = ((gradients.norm(2, dim=1) - 1)**2).mean()\n    elif norm_mode == 'HWC':\n        gradients_penalty = ((\n            gradients.reshape(batch_size, -1).norm(2, dim=1) - 1)**2).mean()\n    else:\n        raise NotImplementedError(\n            'Currently, we only support [\"pixel\", \"HWC\"] '\n            f'norm mode but got {norm_mode}.')\n    if mask is not None:\n        gradients_penalty /= torch.mean(mask)\n\n    return gradients_penalty\n\n\n@MODELS.register_module()\nclass GradientPenaltyLoss(nn.Module):\n    \"\"\"Gradient penalty loss for wgan-gp.\n\n    Args:\n        loss_weight (float): Loss weight. Default: 1.0.\n    \"\"\"\n\n    def __init__(self, loss_weight: float = 1.) -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n\n    def forward(self,\n                discriminator: nn.Module,\n                real_data: torch.Tensor,\n                fake_data: torch.Tensor,\n                mask: Optional[torch.Tensor] = None) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            discriminator (nn.Module): Network for the discriminator.\n            real_data (Tensor): Real input data.\n            fake_data (Tensor): Fake input data.\n            mask (Tensor): Masks for inpainting. Default: None.\n\n        Returns:\n            Tensor: Loss.\n        \"\"\"\n        loss = gradient_penalty_loss(\n            discriminator, real_data, fake_data, mask=mask)\n\n        return loss * self.loss_weight\n\n\ndef disc_shift_loss(pred: torch.Tensor) -> torch.Tensor:\n    \"\"\"Disc Shift loss.\n\n    This loss is proposed in PGGAN as an auxiliary loss for discriminator.\n\n    Args:\n        pred (Tensor): Input tensor.\n\n    Returns:\n        torch.Tensor: loss tensor.\n    \"\"\"\n    return pred**2\n\n\n@MODELS.register_module()\nclass DiscShiftLoss(nn.Module):\n    \"\"\"Disc shift loss.\n\n    Args:\n        loss_weight (float, optional): Loss weight. Defaults to 1.0.\n    \"\"\"\n\n    def __init__(self, loss_weight: float = 0.1) -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Tensor with shape (n, c, h, w)\n\n        Returns:\n            Tensor: Loss.\n        \"\"\"\n        loss = torch.mean(disc_shift_loss(x))\n\n        return loss * self.loss_weight\n\n\ndef r1_gradient_penalty_loss(discriminator: nn.Module,\n                             real_data: torch.Tensor,\n                             mask: Optional[torch.Tensor] = None,\n                             norm_mode: str = 'pixel',\n                             loss_scaler: Optional[GradScaler] = None,\n                             use_apex_amp: bool = False) -> torch.Tensor:\n    \"\"\"Calculate R1 gradient penalty for WGAN-GP.\n\n    R1 regularizer comes from:\n    \"Which Training Methods for GANs do actually Converge?\" ICML'2018\n\n    Different from original gradient penalty, this regularizer only penalized\n    gradient w.r.t. real data.\n\n    Args:\n        discriminator (nn.Module): Network for the discriminator.\n        real_data (Tensor): Real input data.\n        mask (Tensor): Masks for inpainting. Default: None.\n        norm_mode (str): This argument decides along which dimension the norm\n            of the gradients will be calculated. Currently, we support [\"pixel\"\n            , \"HWC\"]. Defaults to \"pixel\".\n\n    Returns:\n        Tensor: A tensor for gradient penalty.\n    \"\"\"\n    batch_size = real_data.shape[0]\n\n    real_data = real_data.clone().requires_grad_()\n\n    disc_pred = discriminator(real_data)\n    if loss_scaler:\n        disc_pred = loss_scaler.scale(disc_pred)\n    elif use_apex_amp:\n        from apex.amp._amp_state import _amp_state\n        _loss_scaler = _amp_state.loss_scalers[0]\n        disc_pred = _loss_scaler.loss_scale() * disc_pred.float()\n\n    gradients = autograd.grad(\n        outputs=disc_pred,\n        inputs=real_data,\n        grad_outputs=torch.ones_like(disc_pred),\n        create_graph=True,\n        retain_graph=True,\n        only_inputs=True)[0]\n\n    if loss_scaler:\n        # unscale the gradient\n        inv_scale = 1. / loss_scaler.get_scale()\n        gradients = gradients * inv_scale\n    elif use_apex_amp:\n        inv_scale = 1. / _loss_scaler.loss_scale()\n        gradients = gradients * inv_scale\n\n    if mask is not None:\n        gradients = gradients * mask\n\n    if norm_mode == 'pixel':\n        gradients_penalty = ((gradients.norm(2, dim=1))**2).mean()\n    elif norm_mode == 'HWC':\n        gradients_penalty = gradients.pow(2).reshape(batch_size,\n                                                     -1).sum(1).mean()\n    else:\n        raise NotImplementedError(\n            'Currently, we only support [\"pixel\", \"HWC\"] '\n            f'norm mode but got {norm_mode}.')\n    if mask is not None:\n        gradients_penalty /= torch.mean(mask)\n\n    return gradients_penalty\n\n\ndef gen_path_regularizer(generator: nn.Module,\n                         num_batches: int,\n                         mean_path_length: torch.Tensor,\n                         pl_batch_shrink: int = 1,\n                         decay: float = 0.01,\n                         weight: float = 1.,\n                         pl_batch_size: Optional[int] = None,\n                         sync_mean_buffer: bool = False,\n                         loss_scaler: Optional[GradScaler] = None,\n                         use_apex_amp: bool = False) -> Tuple[torch.Tensor]:\n    \"\"\"Generator Path Regularization.\n\n    Path regularization is proposed in StyleGAN2, which can help the improve\n    the continuity of the latent space. More details can be found in:\n    Analyzing and Improving the Image Quality of StyleGAN, CVPR2020.\n\n    Args:\n        generator (nn.Module): The generator module. Note that this loss\n            requires that the generator contains ``return_latents`` interface,\n            with which we can get the latent code of the current sample.\n        num_batches (int): The number of samples used in calculating this loss.\n        mean_path_length (Tensor): The mean path length, calculated by moving\n            average.\n        pl_batch_shrink (int, optional): The factor of shrinking the batch size\n            for saving GPU memory. Defaults to 1.\n        decay (float, optional): Decay for moving average of mean path length.\n            Defaults to 0.01.\n        weight (float, optional): Weight of this loss item. Defaults to ``1.``.\n        pl_batch_size (int | None, optional): The batch size in calculating\n            generator path. Once this argument is set, the ``num_batches`` will\n            be overridden with this argument and won't be affected by\n            ``pl_batch_shrink``. Defaults to None.\n        sync_mean_buffer (bool, optional): Whether to sync mean path length\n            across all of GPUs. Defaults to False.\n\n    Returns:\n        tuple[Tensor]: The penalty loss, detached mean path tensor, and \\\n            current path length.\n    \"\"\"\n    # reduce batch size for conserving GPU memory\n    if pl_batch_shrink > 1:\n        num_batches = max(1, num_batches // pl_batch_shrink)\n\n    # reset the batch size if pl_batch_size is not None\n    if pl_batch_size is not None:\n        num_batches = pl_batch_size\n\n    # get output from different generators\n    output_dict = generator(None, num_batches=num_batches, return_latents=True)\n    fake_img, latents = output_dict['fake_img'], output_dict['latent']\n\n    noise = torch.randn_like(fake_img) / np.sqrt(\n        fake_img.shape[2] * fake_img.shape[3])\n\n    if loss_scaler:\n        loss = loss_scaler.scale((fake_img * noise).sum())[0]\n        grad = autograd.grad(\n            outputs=loss,\n            inputs=latents,\n            grad_outputs=torch.ones(()).to(loss),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n\n        # unscale the grad\n        inv_scale = 1. / loss_scaler.get_scale()\n        grad = grad * inv_scale\n    elif use_apex_amp:\n        from apex.amp._amp_state import _amp_state\n\n        # by default, we use loss_scalers[0] for discriminator and\n        # loss_scalers[1] for generator\n        _loss_scaler = _amp_state.loss_scalers[1]\n        loss = _loss_scaler.loss_scale() * ((fake_img * noise).sum()).float()\n\n        grad = autograd.grad(\n            outputs=loss,\n            inputs=latents,\n            grad_outputs=torch.ones(()).to(loss),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n\n        # unscale the grad\n        inv_scale = 1. / _loss_scaler.loss_scale()\n        grad = grad * inv_scale\n    else:\n        grad = autograd.grad(\n            outputs=(fake_img * noise).sum(),\n            inputs=latents,\n            grad_outputs=torch.ones(()).to(fake_img),\n            create_graph=True,\n            retain_graph=True,\n            only_inputs=True)[0]\n\n    path_lengths = torch.sqrt(grad.pow(2).sum(2).mean(1))\n    # update mean path\n    path_mean = mean_path_length + decay * (\n        path_lengths.mean() - mean_path_length)\n\n    if sync_mean_buffer and is_distributed():\n        dist.all_reduce(path_mean)\n        path_mean = path_mean / float(dist.get_world_size())\n\n    path_penalty = (path_lengths - path_mean).pow(2).mean() * weight\n\n    return path_penalty, path_mean.detach(), path_lengths\n"
  },
  {
    "path": "mmagic/models/losses/gradient_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\nfrom .pixelwise_loss import l1_loss\n\n_reduction_modes = ['none', 'mean', 'sum']\n\n\n@MODELS.register_module()\nclass GradientLoss(nn.Module):\n    \"\"\"Gradient loss.\n\n    Args:\n        loss_weight (float): Loss weight for L1 loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean') -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        if self.reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {self.reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n    def forward(self,\n                pred: torch.Tensor,\n                target: torch.Tensor,\n                weight: Optional[torch.Tensor] = None) -> torch.Tensor:\n        \"\"\"\n        Args:\n            pred (Tensor): of shape (N, C, H, W). Predicted tensor.\n            target (Tensor): of shape (N, C, H, W). Ground truth tensor.\n            weight (Tensor, optional): of shape (N, C, H, W). Element-wise\n                weights. Default: None.\n        \"\"\"\n        kx = torch.Tensor([[1, 0, -1], [2, 0, -2],\n                           [1, 0, -1]]).view(1, 1, 3, 3).to(target)\n        ky = torch.Tensor([[1, 2, 1], [0, 0, 0],\n                           [-1, -2, -1]]).view(1, 1, 3, 3).to(target)\n\n        pred_grad_x = F.conv2d(pred, kx, padding=1)\n        pred_grad_y = F.conv2d(pred, ky, padding=1)\n        target_grad_x = F.conv2d(target, kx, padding=1)\n        target_grad_y = F.conv2d(target, ky, padding=1)\n\n        loss = (\n            l1_loss(\n                pred_grad_x, target_grad_x, weight, reduction=self.reduction) +\n            l1_loss(\n                pred_grad_y, target_grad_y, weight, reduction=self.reduction))\n        return loss * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .clip_loss_comps import CLIPLossComps\nfrom .disc_auxiliary_loss_comps import (DiscShiftLossComps,\n                                        GradientPenaltyLossComps,\n                                        R1GradientPenaltyComps)\nfrom .face_id_loss_comps import FaceIdLossComps\nfrom .gan_loss_comps import GANLossComps\nfrom .gen_auxiliary_loss_comps import GeneratorPathRegularizerComps\n\n__all__ = [\n    'CLIPLossComps', 'DiscShiftLossComps', 'GradientPenaltyLossComps',\n    'R1GradientPenaltyComps', 'FaceIdLossComps', 'GANLossComps',\n    'GeneratorPathRegularizerComps'\n]\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/clip_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom ..clip_loss import CLIPLossModel\n\n\n@MODELS.register_module()\nclass CLIPLossComps(nn.Module):\n    \"\"\"Clip loss. In styleclip, this loss is used to optimize the latent code\n    to generate image that match the text.\n\n    In this loss, we may need to provide ``image``, ``text``. Thus,\n    an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            image='fake_imgs',\n            text='descriptions')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        clip_model (dict, optional): Kwargs for clip loss model. Defaults to\n            dict().\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_clip'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 data_info: Optional[dict] = None,\n                 clip_model: dict = dict(),\n                 loss_name: str = 'loss_clip') -> None:\n\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n        self.net = CLIPLossModel(**clip_model)\n        self._loss_name = loss_name\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``third_party_net_loss``.\n        \"\"\"\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n        return self.net(*args, **kwargs) * self.loss_weight\n\n    @staticmethod\n    def loss_name() -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return 'clip_loss'\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/disc_auxiliary_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom ..gan_loss import (disc_shift_loss, gradient_penalty_loss,\n                        r1_gradient_penalty_loss)\n\n\n@MODELS.register_module()\nclass DiscShiftLossComps(nn.Module):\n    \"\"\"Disc Shift Loss.\n\n    This loss is proposed in PGGAN as an auxiliary loss for discriminator.\n\n    **Note for the design of ``data_info``:**\n    In ``MMagic``, almost all of loss modules contain the argument\n    ``data_info``, which can be used for constructing the link between the\n    input items (needed in loss calculation) and the data from the generative\n    model. For example, in the training of GAN model, we will collect all of\n    important data/modules into a dictionary:\n\n    .. code-block:: python\n        :caption: Code from StaticUnconditionalGAN, train_step\n        :linenos:\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs,\n            iteration=curr_iter,\n            batch_size=batch_size)\n\n    But in this loss, we will need to provide ``pred`` as input. Thus, an\n    example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            pred='disc_pred_fake')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    In addition, in general, ``disc_shift_loss`` will be applied over real and\n    fake data. In this case, users just need to add this loss module twice, but\n    with different ``data_info``. Our model will automatically add these two\n    items.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_disc_shift'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 data_info: Optional[dict] = None,\n                 loss_name: str = 'loss_disc_shift') -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n        self._loss_name = loss_name\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function, ``disc_shift_loss``.\n        \"\"\"\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            return disc_shift_loss(**kwargs) * self.loss_weight\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            return disc_shift_loss(*args, **kwargs) * self.loss_weight\n\n    def loss_name(self) -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return self._loss_name\n\n\n@MODELS.register_module()\nclass GradientPenaltyLossComps(nn.Module):\n    \"\"\"Gradient Penalty for WGAN-GP.\n\n    In the detailed implementation, there are two streams where one uses the\n    pixel-wise gradient norm, but the other adopts normalization along instance\n    (HWC) dimensions. Thus, ``norm_mode`` are offered to define which mode you\n    want.\n\n    **Note for the design of ``data_info``:**\n    In ``MMagic``, almost all of loss modules contain the argument\n    ``data_info``, which can be used for constructing the link between the\n    input items (needed in loss calculation) and the data from the generative\n    model. For example, in the training of GAN model, we will collect all of\n    important data/modules into a dictionary:\n\n    .. code-block:: python\n        :caption: Code from StaticUnconditionalGAN, train_step\n        :linenos:\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs,\n            iteration=curr_iter,\n            batch_size=batch_size)\n\n    But in this loss, we will need to provide ``discriminator``, ``real_data``,\n    and ``fake_data`` as input. Thus, an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            discriminator='disc',\n            real_data='real_imgs',\n            fake_data='fake_imgs')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        norm_mode (str): This argument decides along which dimension the norm\n            of the gradients will be calculated. Currently, we support [\"pixel\"\n            , \"HWC\"]. Defaults to \"pixel\".\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_gp'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 norm_mode: str = 'pixel',\n                 data_info: Optional[dict] = None,\n                 loss_name: str = 'loss_gp') -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.norm_mode = norm_mode\n        self.data_info = data_info\n        self._loss_name = loss_name\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``gradient_penalty_loss``.\n        \"\"\"\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            # kwargs.update(\n            #     dict(weight=self.loss_weight, norm_mode=self.norm_mode))\n            kwargs.update(dict(norm_mode=self.norm_mode))\n            return gradient_penalty_loss(**kwargs) * self.loss_weight\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            # return gradient_penalty_loss(\n            #     *args, weight=self.loss_weight, **kwargs)\n            return gradient_penalty_loss(*args, **kwargs) * self.loss_weight\n\n    def loss_name(self) -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return self._loss_name\n\n\n@MODELS.register_module()\nclass R1GradientPenaltyComps(nn.Module):\n    \"\"\"R1 gradient penalty for WGAN-GP.\n\n    R1 regularizer comes from:\n    \"Which Training Methods for GANs do actually Converge?\" ICML'2018\n\n    Different from original gradient penalty, this regularizer only penalized\n    gradient w.r.t. real data.\n\n    **Note for the design of ``data_info``:**\n    In ``MMagic``, almost all of loss modules contain the argument\n    ``data_info``, which can be used for constructing the link between the\n    input items (needed in loss calculation) and the data from the generative\n    model. For example, in the training of GAN model, we will collect all of\n    important data/modules into a dictionary:\n\n    .. code-block:: python\n        :caption: Code from StaticUnconditionalGAN, train_step\n        :linenos:\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            disc_pred_fake=disc_pred_fake,\n            disc_pred_real=disc_pred_real,\n            fake_imgs=fake_imgs,\n            real_imgs=real_imgs,\n            iteration=curr_iter,\n            batch_size=batch_size)\n\n    But in this loss, we will need to provide ``discriminator`` and\n    ``real_data`` as input. Thus, an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            discriminator='disc',\n            real_data='real_imgs')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        norm_mode (str): This argument decides along which dimension the norm\n            of the gradients will be calculated. Currently, we support [\"pixel\"\n            , \"HWC\"]. Defaults to \"pixel\".\n        interval (int, optional): The interval of calculating this loss.\n            Defaults to 1.\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_r1_gp'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 norm_mode: str = 'pixel',\n                 interval: int = 1,\n                 data_info: Optional[dict] = None,\n                 use_apex_amp: bool = False,\n                 loss_name: str = 'loss_r1_gp') -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.norm_mode = norm_mode\n        self.interval = interval\n        self.data_info = data_info\n        self.use_apex_amp = use_apex_amp\n        self._loss_name = loss_name\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``r1_gradient_penalty_loss``.\n        \"\"\"\n        if self.interval > 1:\n            assert self.data_info is not None\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            if self.interval > 1 and outputs_dict[\n                    'iteration'] % self.interval != 0:\n                return None\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            kwargs.update(\n                dict(norm_mode=self.norm_mode, use_apex_amp=self.use_apex_amp))\n            return r1_gradient_penalty_loss(**kwargs) * self.loss_weight\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            return r1_gradient_penalty_loss(\n                *args, norm_mode=self.norm_mode, **kwargs) * self.loss_weight\n\n    def loss_name(self) -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return self._loss_name\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/face_id_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass FaceIdLossComps(nn.Module):\n    \"\"\"Face similarity loss. Generally this loss is used to keep the id\n    consistency of the input face image and output face image.\n\n    In this loss, we may need to provide ``gt``, ``pred`` and ``x``. Thus,\n    an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            gt='real_imgs',\n            pred='fake_imgs')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        facenet (dict, optional): Config dict for facenet. Defaults to\n            dict(type='ArcFace', ir_se50_weights=None).\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_id'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 data_info: Optional[dict] = None,\n                 facenet: dict = dict(type='ArcFace', ir_se50_weights=None),\n                 loss_name: str = 'loss_id') -> None:\n\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.data_info = data_info\n        self.net = MODELS.build(facenet)\n        self._loss_name = loss_name\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``third_party_net_loss``.\n        \"\"\"\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n\n        # NOTE: only return the loss term\n        return self.net(*args, **kwargs)[0] * self.loss_weight\n\n    def loss_name(self) -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return self._loss_name\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/gan_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass GANLossComps(nn.Module):\n    \"\"\"Define GAN loss.\n\n    Args:\n        gan_type (str): Support 'vanilla', 'lsgan', 'wgan', 'hinge',\n            'wgan-logistic-ns'.\n        real_label_val (float): The value for real label. Default: 1.0.\n        fake_label_val (float): The value for fake label. Default: 0.0.\n        loss_weight (float): Loss weight. Default: 1.0.\n            Note that loss_weight is only for generators; and it is always 1.0\n            for discriminators.\n    \"\"\"\n\n    def __init__(self,\n                 gan_type: str,\n                 real_label_val: float = 1.0,\n                 fake_label_val: float = 0.0,\n                 loss_weight: float = 1.0) -> None:\n        super().__init__()\n        self.gan_type = gan_type\n        self.loss_weight = loss_weight\n        self.real_label_val = real_label_val\n        self.fake_label_val = fake_label_val\n\n        if self.gan_type == 'vanilla':\n            self.loss = nn.BCEWithLogitsLoss()\n        elif self.gan_type == 'lsgan':\n            self.loss = nn.MSELoss()\n        elif self.gan_type == 'wgan':\n            self.loss = self._wgan_loss\n        elif self.gan_type == 'wgan-logistic-ns':\n            self.loss = self._wgan_logistic_ns_loss\n        elif self.gan_type == 'hinge':\n            self.loss = nn.ReLU()\n        else:\n            raise NotImplementedError(\n                f'GAN type {self.gan_type} is not implemented.')\n\n    def _wgan_loss(self, input: torch.Tensor, target: bool) -> torch.Tensor:\n        \"\"\"wgan loss.\n\n        Args:\n            input (Tensor): Input tensor.\n            target (bool): Target label.\n\n        Returns:\n            Tensor: wgan loss.\n        \"\"\"\n        return -input.mean() if target else input.mean()\n\n    def _wgan_logistic_ns_loss(self, input: torch.Tensor,\n                               target: bool) -> torch.Tensor:\n        \"\"\"WGAN loss in logistically non-saturating mode.\n\n        This loss is widely used in StyleGANv2.\n\n        Args:\n            input (Tensor): Input tensor.\n            target (bool): Target label.\n\n        Returns:\n            Tensor: wgan loss.\n        \"\"\"\n\n        return F.softplus(-input).mean() if target else F.softplus(\n            input).mean()\n\n    def get_target_label(self, input: torch.Tensor,\n                         target_is_real: bool) -> Union[bool, torch.Tensor]:\n        \"\"\"Get target label.\n\n        Args:\n            input (Tensor): Input tensor.\n            target_is_real (bool): Whether the target is real or fake.\n\n        Returns:\n            (bool | Tensor): Target tensor. Return bool for wgan, otherwise, \\\n                return Tensor.\n        \"\"\"\n\n        if self.gan_type in ['wgan', 'wgan-logistic-ns']:\n            return target_is_real\n        target_val = (\n            self.real_label_val if target_is_real else self.fake_label_val)\n        return input.new_ones(input.size()) * target_val\n\n    def forward(self,\n                input: torch.Tensor,\n                target_is_real: bool,\n                is_disc: bool = False) -> torch.Tensor:\n        \"\"\"\n        Args:\n            input (Tensor): The input for the loss module, i.e., the network\n                prediction.\n            target_is_real (bool): Whether the targe is real or fake.\n            is_disc (bool): Whether the loss for discriminators or not.\n                Default: False.\n\n        Returns:\n            Tensor: GAN loss value.\n        \"\"\"\n        target_label = self.get_target_label(input, target_is_real)\n        if self.gan_type == 'hinge':\n            if is_disc:  # for discriminators in hinge-gan\n                input = -input if target_is_real else input\n                loss = self.loss(1 + input).mean()\n            else:  # for generators in hinge-gan\n                loss = -input.mean()\n        else:  # other gan types\n            loss = self.loss(input, target_label)\n\n        # loss_weight is always 1.0 for discriminators\n        return loss if is_disc else loss * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/loss_comps/gen_auxiliary_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\nfrom ..gan_loss import gen_path_regularizer\n\n\n@MODELS.register_module()\nclass GeneratorPathRegularizerComps(nn.Module):\n    \"\"\"Generator Path Regularizer.\n\n    Path regularization is proposed in StyleGAN2, which can help the improve\n    the continuity of the latent space. More details can be found in:\n    Analyzing and Improving the Image Quality of StyleGAN, CVPR2020.\n\n    Users can achieve lazy regularization by setting ``interval`` arguments\n    here.\n\n    **Note for the design of ``data_info``:**\n    In ``MMagic``, almost all of loss modules contain the argument\n    ``data_info``, which can be used for constructing the link between the\n    input items (needed in loss calculation) and the data from the generative\n    model. For example, in the training of GAN model, we will collect all of\n    important data/modules into a dictionary:\n\n    .. code-block:: python\n        :caption: Code from StaticUnconditionalGAN, train_step\n        :linenos:\n\n        data_dict_ = dict(\n            gen=self.generator,\n            disc=self.discriminator,\n            fake_imgs=fake_imgs,\n            disc_pred_fake_g=disc_pred_fake_g,\n            iteration=curr_iter,\n            batch_size=batch_size)\n\n    But in this loss, we will need to provide ``generator`` and ``num_batches``\n    as input. Thus an example of the ``data_info`` is:\n\n    .. code-block:: python\n        :linenos:\n\n        data_info = dict(\n            generator='gen',\n            num_batches='batch_size')\n\n    Then, the module will automatically construct this mapping from the input\n    data dictionary.\n\n    Args:\n        loss_weight (float, optional): Weight of this loss item.\n            Defaults to ``1.``.\n        pl_batch_shrink (int, optional): The factor of shrinking the batch size\n            for saving GPU memory. Defaults to 1.\n        decay (float, optional): Decay for moving average of mean path length.\n            Defaults to 0.01.\n        pl_batch_size (int | None, optional): The batch size in calculating\n            generator path. Once this argument is set, the ``num_batches`` will\n            be overridden with this argument and won't be affected by\n            ``pl_batch_shrink``. Defaults to None.\n        sync_mean_buffer (bool, optional): Whether to sync mean path length\n            across all of GPUs. Defaults to False.\n        interval (int, optional): The interval of calculating this loss. This\n            argument is used to support lazy regularization. Defaults to 1.\n        data_info (dict, optional): Dictionary contains the mapping between\n            loss input args and data dictionary. If ``None``, this module will\n            directly pass the input data to the loss function.\n            Defaults to None.\n        loss_name (str, optional): Name of the loss item. If you want this loss\n            item to be included into the backward graph, `loss_` must be the\n            prefix of the name. Defaults to 'loss_path_regular'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.,\n                 pl_batch_shrink: int = 1,\n                 decay: float = 0.01,\n                 pl_batch_size: Optional[int] = None,\n                 sync_mean_buffer: bool = False,\n                 interval: int = 1,\n                 data_info: Optional[dict] = None,\n                 use_apex_amp: bool = False,\n                 loss_name: str = 'loss_path_regular') -> None:\n        super().__init__()\n        self.loss_weight = loss_weight\n        self.pl_batch_shrink = pl_batch_shrink\n        self.decay = decay\n        self.pl_batch_size = pl_batch_size\n        self.sync_mean_buffer = sync_mean_buffer\n        self.interval = interval\n        self.data_info = data_info\n        self.use_apex_amp = use_apex_amp\n        self._loss_name = loss_name\n\n        self.register_buffer('mean_path_length', torch.tensor(0.))\n\n    def forward(self, *args, **kwargs) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        If ``self.data_info`` is not ``None``, a dictionary containing all of\n        the data and necessary modules should be passed into this function.\n        If this dictionary is given as a non-keyword argument, it should be\n        offered as the first argument. If you are using keyword argument,\n        please name it as `outputs_dict`.\n\n        If ``self.data_info`` is ``None``, the input argument or key-word\n        argument will be directly passed to loss function,\n        ``gen_path_regularizer``.\n        \"\"\"\n        if self.interval > 1:\n            assert self.data_info is not None\n        # use data_info to build computational path\n        if self.data_info is not None:\n            # parse the args and kwargs\n            if len(args) == 1:\n                assert isinstance(args[0], dict), (\n                    'You should offer a dictionary containing network outputs '\n                    'for building up computational graph of this loss module.')\n                outputs_dict = args[0]\n            elif 'outputs_dict' in kwargs:\n                assert len(args) == 0, (\n                    'If the outputs dict is given in keyworded arguments, no'\n                    ' further non-keyworded arguments should be offered.')\n                outputs_dict = kwargs.pop('outputs_dict')\n            else:\n                raise NotImplementedError(\n                    'Cannot parsing your arguments passed to this loss module.'\n                    ' Please check the usage of this module')\n            if self.interval > 1 and outputs_dict[\n                    'iteration'] % self.interval != 0:\n                return None\n            # link the outputs with loss input args according to self.data_info\n            loss_input_dict = {\n                k: outputs_dict[v]\n                for k, v in self.data_info.items()\n            }\n            kwargs.update(loss_input_dict)\n            kwargs.update(\n                dict(\n                    # weight=self.loss_weight,\n                    mean_path_length=self.mean_path_length,\n                    pl_batch_shrink=self.pl_batch_shrink,\n                    decay=self.decay,\n                    use_apex_amp=self.use_apex_amp,\n                    pl_batch_size=self.pl_batch_size,\n                    sync_mean_buffer=self.sync_mean_buffer))\n            path_penalty, self.mean_path_length, _ = gen_path_regularizer(\n                **kwargs)\n        else:\n            # if you have not define how to build computational graph, this\n            # module will just directly return the loss as usual.\n            path_penalty, self.mean_path_length, _ = gen_path_regularizer(\n                *args, **kwargs)\n        return path_penalty * self.loss_weight\n\n    def loss_name(self) -> str:\n        \"\"\"Loss Name.\n\n        This function must be implemented and will return the name of this\n        loss function. This name will be used to combine different loss items\n        by simple sum operation. In addition, if you want this loss item to be\n        included into the backward graph, `loss_` must be the prefix of the\n        name.\n\n        Returns:\n            str: The name of this loss item.\n        \"\"\"\n        return self._loss_name\n"
  },
  {
    "path": "mmagic/models/losses/loss_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport functools\nfrom typing import Optional\n\nimport torch\nimport torch.nn.functional as F\n\n\ndef reduce_loss(loss: torch.Tensor, reduction: str) -> torch.Tensor:\n    \"\"\"Reduce loss as specified.\n\n    Args:\n        loss (Tensor): Elementwise loss tensor.\n        reduction (str): Options are \"none\", \"mean\" and \"sum\".\n\n    Returns:\n        Tensor: Reduced loss tensor.\n    \"\"\"\n    reduction_enum = F._Reduction.get_enum(reduction)\n    # none: 0, elementwise_mean:1, sum: 2\n    if reduction_enum == 0:\n        return loss\n    if reduction_enum == 1:\n        return loss.mean()\n    if reduction_enum == 2:\n        return loss.sum()\n    raise ValueError(f'reduction type {reduction} not supported')\n\n\ndef mask_reduce_loss(loss: torch.Tensor,\n                     weight: Optional[torch.Tensor] = None,\n                     reduction: str = 'mean',\n                     sample_wise: bool = False) -> torch.Tensor:\n    \"\"\"Apply element-wise weight and reduce loss.\n\n    Args:\n        loss (Tensor): Element-wise loss.\n        weight (Tensor): Element-wise weights. Default: None.\n        reduction (str): Same as built-in losses of PyTorch. Options are\n            \"none\", \"mean\" and \"sum\". Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n\n    Returns:\n        Tensor: Processed loss values.\n    \"\"\"\n    # if weight is specified, apply element-wise weight\n    if weight is not None:\n        assert weight.dim() == loss.dim()\n        assert weight.size(1) == 1 or weight.size(1) == loss.size(1)\n        loss = loss * weight\n\n    # if weight is not specified or reduction is sum, just reduce the loss\n    if weight is None or reduction == 'sum':\n        loss = reduce_loss(loss, reduction)\n    # if reduction is mean, then compute mean over masked region\n    elif reduction == 'mean':\n        # expand weight from N1HW to NCHW\n        if weight.size(1) == 1:\n            weight = weight.expand_as(loss)\n        # small value to prevent division by zero\n        eps = 1e-12\n\n        # perform sample-wise mean\n        if sample_wise:\n            weight = weight.sum(dim=[1, 2, 3], keepdim=True)  # NCHW to N111\n            loss = (loss / (weight + eps)).sum() / weight.size(0)\n        # perform pixel-wise mean\n        else:\n            loss = loss.sum() / (weight.sum() + eps)\n\n    return loss\n\n\ndef masked_loss(loss_func):\n    \"\"\"Create a masked version of a given loss function.\n\n    To use this decorator, the loss function must have the signature like\n    `loss_func(pred, target, **kwargs)`. The function only needs to compute\n    element-wise loss without any reduction. This decorator will add weight\n    and reduction arguments to the function. The decorated function will have\n    the signature like `loss_func(pred, target, weight=None, reduction='mean',\n    avg_factor=None, **kwargs)`.\n\n    :Example:\n\n    >>> import torch\n    >>> @masked_loss\n    >>> def l1_loss(pred, target):\n    >>>     return (pred - target).abs()\n\n    >>> pred = torch.Tensor([0, 2, 3])\n    >>> target = torch.Tensor([1, 1, 1])\n    >>> weight = torch.Tensor([1, 0, 1])\n\n    >>> l1_loss(pred, target)\n    tensor(1.3333)\n    >>> l1_loss(pred, target, weight)\n    tensor(1.5000)\n    >>> l1_loss(pred, target, reduction='none')\n    tensor([1., 1., 2.])\n    >>> l1_loss(pred, target, weight, reduction='sum')\n    tensor(3.)\n    \"\"\"\n\n    @functools.wraps(loss_func)\n    def wrapper(pred: torch.Tensor,\n                target: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                reduction: str = 'mean',\n                sample_wise: bool = False,\n                **kwargs) -> torch.Tensor:\n        # get element-wise loss\n        loss = loss_func(pred, target, **kwargs)\n        loss = mask_reduce_loss(loss, weight, reduction, sample_wise)\n        return loss\n\n    return wrapper\n"
  },
  {
    "path": "mmagic/models/losses/perceptual_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List, Optional, Tuple\n\nimport torch\nimport torch.nn as nn\nimport torchvision.models.vgg as vgg\nfrom mmengine import MMLogger\nfrom mmengine.runner import load_checkpoint\nfrom torch.nn import functional as F\n\nfrom mmagic.registry import MODELS\n\n\nclass PerceptualVGG(nn.Module):\n    \"\"\"VGG network used in calculating perceptual loss.\n\n    In this implementation, we allow users to choose whether use normalization\n    in the input feature and the type of vgg network. Note that the pretrained\n    path must fit the vgg type.\n\n    Args:\n        layer_name_list (list[str]): According to the name in this list,\n            forward function will return the corresponding features. This\n            list contains the name each layer in `vgg.feature`. An example\n            of this list is ['4', '10'].\n        vgg_type (str): Set the type of vgg network. Default: 'vgg19'.\n        use_input_norm (bool): If True, normalize the input image.\n            Importantly, the input feature must in the range [0, 1].\n            Default: True.\n        pretrained (str): Path for pretrained weights. Default:\n            'torchvision://vgg19'\n    \"\"\"\n\n    def __init__(self,\n                 layer_name_list: List[str],\n                 vgg_type: str = 'vgg19',\n                 use_input_norm: bool = True,\n                 pretrained: str = 'torchvision://vgg19') -> None:\n        super().__init__()\n        if pretrained.startswith('torchvision://'):\n            assert vgg_type in pretrained\n        self.layer_name_list = layer_name_list\n        self.use_input_norm = use_input_norm\n\n        # get vgg model and load pretrained vgg weight\n        # remove _vgg from attributes to avoid `find_unused_parameters` bug\n        _vgg = getattr(vgg, vgg_type)(pretrained=True)\n        # self.init_weights(_vgg, pretrained) #TODO urlopen error\n        num_layers = max(map(int, layer_name_list)) + 1\n        assert len(_vgg.features) >= num_layers\n        # only borrow layers that will be used from _vgg to avoid unused params\n        self.vgg_layers = _vgg.features[:num_layers]\n\n        if self.use_input_norm:\n            # the mean is for image with range [0, 1]\n            self.register_buffer(\n                'mean',\n                torch.Tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1))\n            # the std is for image with range [-1, 1]\n            self.register_buffer(\n                'std',\n                torch.Tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1))\n\n        for v in self.vgg_layers.parameters():\n            v.requires_grad = False\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.use_input_norm:\n            x = (x - self.mean) / self.std\n        output = {}\n\n        for name, module in self.vgg_layers.named_children():\n            x = module(x)\n            if name in self.layer_name_list:\n                output[name] = x.clone()\n        return output\n\n    def init_weights(self, model: nn.Module, pretrained: str) -> None:\n        \"\"\"Init weights.\n\n        Args:\n            model (nn.Module): Models to be inited.\n            pretrained (str): Path for pretrained weights.\n        \"\"\"\n        logger = MMLogger.get_current_instance()\n        load_checkpoint(model, pretrained, logger=logger)\n\n\n@MODELS.register_module()\nclass PerceptualLoss(nn.Module):\n    \"\"\"Perceptual loss with commonly used style loss.\n\n    Args:\n        layers_weights (dict): The weight for each layer of vgg feature for\n            perceptual loss. Here is an example: {'4': 1., '9': 1., '18': 1.},\n            which means the 5th, 10th and 18th feature layer will be\n            extracted with weight 1.0 in calculating losses.\n        layers_weights_style (dict): The weight for each layer of vgg feature\n            for style loss. If set to 'None', the weights are set equal to\n            the weights for perceptual loss. Default: None.\n        vgg_type (str): The type of vgg network used as feature extractor.\n            Default: 'vgg19'.\n        use_input_norm (bool):  If True, normalize the input image in vgg.\n            Default: True.\n        perceptual_weight (float): If `perceptual_weight > 0`, the perceptual\n            loss will be calculated and the loss will multiplied by the\n            weight. Default: 1.0.\n        style_weight (float): If `style_weight > 0`, the style loss will be\n            calculated and the loss will multiplied by the weight.\n            Default: 1.0.\n        norm_img (bool): If True, the image will be normed to [0, 1]. Note that\n            this is different from the `use_input_norm` which norm the input in\n            in forward function of vgg according to the statistics of dataset.\n            Importantly, the input image must be in range [-1, 1].\n        pretrained (str): Path for pretrained weights. Default:\n            'torchvision://vgg19'.\n        criterion (str): Criterion type. Options are 'l1' and 'mse'.\n            Default: 'l1'.\n    \"\"\"\n\n    def __init__(self,\n                 layer_weights: dict,\n                 layer_weights_style: Optional[dict] = None,\n                 vgg_type: str = 'vgg19',\n                 use_input_norm: bool = True,\n                 perceptual_weight: float = 1.0,\n                 style_weight: float = 1.0,\n                 norm_img: bool = True,\n                 pretrained: str = 'torchvision://vgg19',\n                 criterion: str = 'l1') -> None:\n        super().__init__()\n        self.norm_img = norm_img\n        self.perceptual_weight = perceptual_weight\n        self.style_weight = style_weight\n        self.layer_weights = layer_weights\n        self.layer_weights_style = layer_weights_style\n\n        self.vgg = PerceptualVGG(\n            layer_name_list=list(self.layer_weights.keys()),\n            vgg_type=vgg_type,\n            use_input_norm=use_input_norm,\n            pretrained=pretrained)\n\n        if self.layer_weights_style is not None and \\\n                self.layer_weights_style != self.layer_weights:\n            self.vgg_style = PerceptualVGG(\n                layer_name_list=list(self.layer_weights_style.keys()),\n                vgg_type=vgg_type,\n                use_input_norm=use_input_norm,\n                pretrained=pretrained)\n        else:\n            self.layer_weights_style = self.layer_weights\n            self.vgg_style = None\n\n        criterion = criterion.lower()\n        if criterion == 'l1':\n            self.criterion = torch.nn.L1Loss()\n        elif criterion == 'mse':\n            self.criterion = torch.nn.MSELoss()\n        else:\n            raise NotImplementedError(\n                f'{criterion} criterion has not been supported in'\n                ' this version.')\n\n    def forward(self, x: torch.Tensor,\n                gt: torch.Tensor) -> Tuple[torch.Tensor]:\n        \"\"\"Forward function.\n\n        Args:\n            x (Tensor): Input tensor with shape (n, c, h, w).\n            gt (Tensor): Ground-truth tensor with shape (n, c, h, w).\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.norm_img:\n            x = (x + 1.) * 0.5\n            gt = (gt + 1.) * 0.5\n        # extract vgg features\n        x_features = self.vgg(x)\n        gt_features = self.vgg(gt.detach())\n\n        # calculate perceptual loss\n        if self.perceptual_weight > 0:\n            percep_loss = 0\n            for k in x_features.keys():\n                percep_loss += self.criterion(\n                    x_features[k], gt_features[k]) * self.layer_weights[k]\n            percep_loss *= self.perceptual_weight\n        else:\n            percep_loss = None\n\n        # calculate style loss\n        if self.style_weight > 0:\n            if self.vgg_style is not None:\n                x_features = self.vgg_style(x)\n                gt_features = self.vgg_style(gt.detach())\n\n            style_loss = 0\n            for k in x_features.keys():\n                style_loss += self.criterion(\n                    self._gram_mat(x_features[k]),\n                    self._gram_mat(\n                        gt_features[k])) * self.layer_weights_style[k]\n            style_loss *= self.style_weight\n        else:\n            style_loss = None\n\n        return percep_loss, style_loss\n\n    def _gram_mat(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Calculate Gram matrix.\n\n        Args:\n            x (torch.Tensor): Tensor with shape of (n, c, h, w).\n\n        Returns:\n            torch.Tensor: Gram matrix.\n        \"\"\"\n        (n, c, h, w) = x.size()\n        features = x.view(n, c, w * h)\n        features_t = features.transpose(1, 2)\n        gram = features.bmm(features_t) / (c * h * w)\n        return gram\n\n\n@MODELS.register_module()\nclass TransferalPerceptualLoss(nn.Module):\n    \"\"\"Transferal perceptual loss.\n\n    Args:\n        loss_weight (float): Loss weight. Default: 1.0.\n        use_attention (bool): If True, use soft-attention tensor. Default: True\n        criterion (str): Criterion type. Options are 'l1' and 'mse'.\n            Default: 'mse'.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 use_attention: bool = True,\n                 criterion: str = 'mse') -> None:\n        super().__init__()\n        self.use_attention = use_attention\n        self.loss_weight = loss_weight\n        criterion = criterion.lower()\n        if criterion == 'l1':\n            self.loss_function = torch.nn.L1Loss()\n        elif criterion == 'mse':\n            self.loss_function = torch.nn.MSELoss()\n        else:\n            raise ValueError(\n                f\"criterion should be 'l1' or 'mse', but got {criterion}\")\n\n    def forward(self, maps: Tuple[torch.Tensor], soft_attention: torch.Tensor,\n                textures: Tuple[torch.Tensor]) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            maps (Tuple[Tensor]): Input tensors.\n            soft_attention (Tensor): Soft-attention tensor.\n            textures (Tuple[Tensor]): Ground-truth tensors.\n\n        Returns:\n            Tensor: Forward results.\n        \"\"\"\n\n        if self.use_attention:\n            h, w = soft_attention.shape[-2:]\n            softs = [torch.sigmoid(soft_attention)]\n            for i in range(1, len(maps)):\n                softs.append(\n                    F.interpolate(\n                        soft_attention,\n                        size=(h * pow(2, i), w * pow(2, i)),\n                        mode='bicubic',\n                        align_corners=False))\n        else:\n            softs = [1., 1., 1.]\n\n        loss_texture = 0\n        for map, soft, texture in zip(maps, softs, textures):\n            loss_texture += self.loss_function(map * soft, texture * soft)\n\n        return loss_texture * self.loss_weight\n"
  },
  {
    "path": "mmagic/models/losses/pixelwise_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\nfrom .loss_wrapper import masked_loss\n\n_reduction_modes = ['none', 'mean', 'sum']\n\n\n@masked_loss\ndef l1_loss(pred: torch.Tensor, target: torch.Tensor) -> torch.Tensor:\n    \"\"\"L1 loss.\n\n    Args:\n        pred (Tensor): Prediction Tensor with shape (n, c, h, w).\n        target ([type]): Target Tensor with shape (n, c, h, w).\n\n    Returns:\n        Tensor: Calculated L1 loss.\n    \"\"\"\n    return F.l1_loss(pred, target, reduction='none')\n\n\n@masked_loss\ndef mse_loss(pred: torch.Tensor, target: torch.Tensor) -> torch.Tensor:\n    \"\"\"MSE loss.\n\n    Args:\n        pred (Tensor): Prediction Tensor with shape (n, c, h, w).\n        target ([type]): Target Tensor with shape (n, c, h, w).\n\n    Returns:\n        Tensor: Calculated MSE loss.\n    \"\"\"\n    return F.mse_loss(pred, target, reduction='none')\n\n\n@masked_loss\ndef charbonnier_loss(pred: torch.Tensor,\n                     target: torch.Tensor,\n                     eps: float = 1e-12) -> torch.Tensor:\n    \"\"\"Charbonnier loss.\n\n    Args:\n        pred (Tensor): Prediction Tensor with shape (n, c, h, w).\n        target ([type]): Target Tensor with shape (n, c, h, w).\n        eps (float): A value used to control the curvature near zero.\n            Default: 1e-12.\n\n    Returns:\n        Tensor: Calculated Charbonnier loss.\n    \"\"\"\n    return torch.sqrt((pred - target)**2 + eps)\n\n\ndef tv_loss(input: torch.Tensor) -> torch.Tensor:\n    \"\"\"L2 total variation loss, as in Mahendran et al.\"\"\"\n    input = F.pad(input, (0, 1, 0, 1), 'replicate')\n    x_diff = input[..., :-1, 1:] - input[..., :-1, :-1]\n    y_diff = input[..., 1:, :-1] - input[..., :-1, :-1]\n    return (x_diff**2 + y_diff**2).mean([1, 2, 3])\n\n\n@MODELS.register_module()\nclass L1Loss(nn.Module):\n    \"\"\"L1 (mean absolute error, MAE) loss.\n\n    Args:\n        loss_weight (float): Loss weight for L1 loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduce loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n\n    def forward(self,\n                pred: torch.Tensor,\n                target: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            pred (Tensor): of shape (N, C, H, W). Predicted tensor.\n            target (Tensor): of shape (N, C, H, W). Ground truth tensor.\n            weight (Tensor, optional): of shape (N, C, H, W). Element-wise\n                weights. Default: None.\n        \"\"\"\n        return self.loss_weight * l1_loss(\n            pred,\n            target,\n            weight,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n\n\n@MODELS.register_module()\nclass MSELoss(nn.Module):\n    \"\"\"MSE (L2) loss.\n\n    Args:\n        loss_weight (float): Loss weight for MSE loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n\n    def forward(self,\n                pred: torch.Tensor,\n                target: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            pred (Tensor): of shape (N, C, H, W). Predicted tensor.\n            target (Tensor): of shape (N, C, H, W). Ground truth tensor.\n            weight (Tensor, optional): of shape (N, C, H, W). Element-wise\n                weights. Default: None.\n        \"\"\"\n        return self.loss_weight * mse_loss(\n            pred,\n            target,\n            weight,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n\n\n@MODELS.register_module()\nclass CharbonnierLoss(nn.Module):\n    \"\"\"Charbonnier loss (one variant of Robust L1Loss, a differentiable variant\n    of L1Loss).\n\n    Described in \"Deep Laplacian Pyramid Networks for Fast and Accurate\n        Super-Resolution\".\n\n    Args:\n        loss_weight (float): Loss weight for L1 loss. Default: 1.0.\n        reduction (str): Specifies the reduction to apply to the output.\n            Supported choices are 'none' | 'mean' | 'sum'. Default: 'mean'.\n        sample_wise (bool): Whether calculate the loss sample-wise. This\n            argument only takes effect when `reduction` is 'mean' and `weight`\n            (argument of `forward()`) is not None. It will first reduces loss\n            with 'mean' per-sample, and then it means over all the samples.\n            Default: False.\n        eps (float): A value used to control the curvature near zero.\n            Default: 1e-12.\n    \"\"\"\n\n    def __init__(self,\n                 loss_weight: float = 1.0,\n                 reduction: str = 'mean',\n                 sample_wise: bool = False,\n                 eps: float = 1e-12) -> None:\n        super().__init__()\n        if reduction not in ['none', 'mean', 'sum']:\n            raise ValueError(f'Unsupported reduction mode: {reduction}. '\n                             f'Supported ones are: {_reduction_modes}')\n\n        self.loss_weight = loss_weight\n        self.reduction = reduction\n        self.sample_wise = sample_wise\n        self.eps = eps\n\n    def forward(self,\n                pred: torch.Tensor,\n                target: torch.Tensor,\n                weight: Optional[torch.Tensor] = None,\n                **kwargs) -> torch.Tensor:\n        \"\"\"Forward Function.\n\n        Args:\n            pred (Tensor): of shape (N, C, H, W). Predicted tensor.\n            target (Tensor): of shape (N, C, H, W). Ground truth tensor.\n            weight (Tensor, optional): of shape (N, C, H, W). Element-wise\n                weights. Default: None.\n        \"\"\"\n        return self.loss_weight * charbonnier_loss(\n            pred,\n            target,\n            weight,\n            eps=self.eps,\n            reduction=self.reduction,\n            sample_wise=self.sample_wise)\n\n\n@MODELS.register_module()\nclass MaskedTVLoss(L1Loss):\n    \"\"\"Masked TV loss.\n\n    Args:\n        loss_weight (float, optional): Loss weight. Defaults to 1.0.\n    \"\"\"\n\n    def __init__(self, loss_weight: float = 1.0) -> None:\n        super().__init__(loss_weight=loss_weight)\n\n    def forward(self,\n                pred: torch.Tensor,\n                mask: Optional[torch.Tensor] = None) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            pred (torch.Tensor): Tensor with shape of (n, c, h, w).\n            mask (torch.Tensor, optional): Tensor with shape of (n, 1, h, w).\n                Defaults to None.\n\n        Returns:\n            [type]: [description]\n        \"\"\"\n        y_diff = super().forward(\n            pred[:, :, :-1, :], pred[:, :, 1:, :], weight=mask[:, :, :-1, :])\n        x_diff = super().forward(\n            pred[:, :, :, :-1], pred[:, :, :, 1:], weight=mask[:, :, :, :-1])\n\n        loss = x_diff + y_diff\n\n        return loss\n\n\n@MODELS.register_module()\nclass PSNRLoss(nn.Module):\n    \"\"\"PSNR Loss in \"HINet: Half Instance Normalization Network for Image\n    Restoration\".\n\n    Args:\n        loss_weight (float, optional): Loss weight. Defaults to 1.0.\n        reduction: reduction for PSNR. Can only be mean here.\n        toY: change to calculate the PSNR of Y channel in YCbCr format\n    \"\"\"\n\n    def __init__(self, loss_weight: float = 1.0, toY: bool = False) -> None:\n        super(PSNRLoss, self).__init__()\n        self.loss_weight = loss_weight\n        import numpy as np\n        self.scale = 10 / np.log(10)\n        self.toY = toY\n        self.coef = torch.tensor([65.481, 128.553, 24.966]).reshape(1, 3, 1, 1)\n        self.first = True\n\n    def forward(self, pred: torch.Tensor,\n                target: torch.Tensor) -> torch.Tensor:\n        assert len(pred.size()) == 4\n\n        return self.loss_weight * self.scale * torch.log((\n            (pred - target)**2).mean(dim=(1, 2, 3)) + 1e-8).mean()\n"
  },
  {
    "path": "mmagic/models/utils/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nfrom .bbox_utils import extract_around_bbox, extract_bbox_patch\nfrom .flow_warp import flow_warp\nfrom .model_utils import (build_module, default_init_weights,\n                          generation_init_weights, get_module_device,\n                          get_valid_noise_size, get_valid_num_batches,\n                          make_layer, remove_tomesd, set_requires_grad,\n                          set_tomesd, set_xformers, xformers_is_enable)\nfrom .sampling_utils import label_sample_fn, noise_sample_fn\nfrom .tensor_utils import get_unknown_tensor, normalize_vecs\n\n__all__ = [\n    'default_init_weights', 'make_layer', 'flow_warp',\n    'generation_init_weights', 'set_requires_grad', 'extract_bbox_patch',\n    'extract_around_bbox', 'get_unknown_tensor', 'noise_sample_fn',\n    'label_sample_fn', 'get_valid_num_batches', 'get_valid_noise_size',\n    'get_module_device', 'normalize_vecs', 'build_module', 'set_xformers',\n    'xformers_is_enable', 'set_tomesd', 'remove_tomesd'\n]\n"
  },
  {
    "path": "mmagic/models/utils/bbox_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\n\ndef extract_bbox_patch(bbox, img, channel_first=True):\n    \"\"\"Extract patch from a given bbox.\n\n    Args:\n        bbox (torch.Tensor | numpy.array): Bbox with (top, left, h, w). If\n            `img` has batch dimension, the `bbox` must be stacked at first\n            dimension. The shape should be (4,) or (n, 4).\n        img (torch.Tensor | numpy.array): Image data to be extracted. If\n            organized in batch dimension, the batch dimension must be the first\n            order like (n, h, w, c) or (n, c, h, w).\n        channel_first (bool): If True, the channel dimension of img is before\n            height and width, e.g. (c, h, w). Otherwise, the img shape (samples\n            in the batch) is like (h, w, c). Default: True.\n\n    Returns:\n        (torch.Tensor | numpy.array): Extracted patches. The dimension of the \\\n            output should be the same as `img`.\n    \"\"\"\n\n    def _extract(bbox, img):\n        assert len(bbox) == 4\n        t, l, h, w = bbox\n        if channel_first:\n            img_patch = img[..., t:t + h, l:l + w]\n        else:\n            img_patch = img[t:t + h, l:l + w, ...]\n\n        return img_patch\n\n    input_size = img.shape\n    assert len(input_size) == 3 or len(input_size) == 4\n    bbox_size = bbox.shape\n    assert bbox_size == (4, ) or (len(bbox_size) == 2\n                                  and bbox_size[0] == input_size[0])\n\n    # images with batch dimension\n    if len(input_size) == 4:\n        output_list = []\n        for i in range(input_size[0]):\n            img_patch_ = _extract(bbox[i], img[i:i + 1, ...])\n            output_list.append(img_patch_)\n        if isinstance(img, torch.Tensor):\n            img_patch = torch.cat(output_list, dim=0)\n        else:\n            img_patch = np.concatenate(output_list, axis=0)\n    # standardize image\n    else:\n        img_patch = _extract(bbox, img)\n\n    return img_patch\n\n\ndef scale_bbox(bbox, target_size):\n    \"\"\"Modify bbox to target size.\n\n    The original bbox will be enlarged to the target size with the original\n    bbox in the center of the new bbox.\n\n    Args:\n        bbox (np.ndarray | torch.Tensor): Bboxes to be modified. Bbox can\n            be in batch or not. The shape should be (4,) or (n, 4).\n        target_size (tuple[int]): Target size of final bbox.\n\n    Returns:\n        (np.ndarray | torch.Tensor): Modified bboxes.\n    \"\"\"\n\n    def _mod(bbox, target_size):\n        top_ori, left_ori, h_ori, w_ori = bbox\n        h, w = target_size\n        assert h >= h_ori and w >= w_ori\n        top = int(max(0, top_ori - (h - h_ori) // 2))\n        left = int(max(0, left_ori - (w - w_ori) // 2))\n\n        if isinstance(bbox, torch.Tensor):\n            bbox_new = torch.Tensor([top, left, h, w]).type_as(bbox)\n        else:\n            bbox_new = np.asarray([top, left, h, w])\n\n        return bbox_new\n\n    if isinstance(bbox, torch.Tensor):\n        bbox_new = torch.zeros_like(bbox)\n    elif isinstance(bbox, np.ndarray):\n        bbox_new = np.zeros_like(bbox)\n    else:\n        raise TypeError('bbox mush be torch.Tensor or numpy.ndarray'\n                        f'but got type {type(bbox)}')\n    bbox_shape = list(bbox.shape)\n\n    if len(bbox_shape) == 2:\n        for i in range(bbox_shape[0]):\n            bbox_new[i, :] = _mod(bbox[i], target_size)\n    else:\n        bbox_new = _mod(bbox, target_size)\n\n    return bbox_new\n\n\ndef extract_around_bbox(img, bbox, target_size, channel_first=True):\n    \"\"\"Extract patches around the given bbox.\n\n    Args:\n        img (torch.Tensor | numpy.array): Image data to be extracted. If\n            organized in batch dimension, the batch dimension must be the first\n            order like (n, h, w, c) or (n, c, h, w).\n        bbox (np.ndarray | torch.Tensor): Bboxes to be modified. Bbox can\n            be in batch or not.\n        target_size (List(int)): Target size of final bbox.\n        channel_first (bool): If True, the channel dimension of img is before\n            height and width, e.g. (c, h, w). Otherwise, the img shape (samples\n            in the batch) is like (h, w, c). Default: True.\n\n    Returns:\n        (torch.Tensor | np.ndarray): Extracted patches. The dimension of the \\\n            output should be the same as `img`.\n    \"\"\"\n    bbox_new = scale_bbox(bbox, target_size)\n    img_patch = extract_bbox_patch(bbox_new, img, channel_first=channel_first)\n\n    return img_patch, bbox_new\n"
  },
  {
    "path": "mmagic/models/utils/diffusion_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport numpy as np\n\n\ndef betas_for_alpha_bar(num_diffusion_timesteps, max_beta=0.999):\n    \"\"\"Create a beta schedule that discretized the given alpha_t_bar\n    function, which defines the cumulative product of\n    (1-beta) over time from t = [0,1].\n\n    Source: https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_ddim.py#L49 # noqa\n    \"\"\"\n\n    def alpha_bar(time_step):\n        return math.cos((time_step + 0.008) / 1.008 * math.pi / 2)**2\n\n    betas = []\n    for i in range(num_diffusion_timesteps):\n        t1 = i / num_diffusion_timesteps\n        t2 = (i + 1) / num_diffusion_timesteps\n        betas.append(min(1 - alpha_bar(t2) / alpha_bar(t1), max_beta))\n    return np.array(betas, dtype=np.float64)\n"
  },
  {
    "path": "mmagic/models/utils/flow_warp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn.functional as F\n\n\ndef flow_warp(x,\n              flow,\n              interpolation='bilinear',\n              padding_mode='zeros',\n              align_corners=True):\n    \"\"\"Warp an image or a feature map with optical flow.\n\n    Args:\n        x (Tensor): Tensor with size (n, c, h, w).\n        flow (Tensor): Tensor with size (n, h, w, 2). The last dimension is\n            a two-channel, denoting the width and height relative offsets.\n            Note that the values are not normalized to [-1, 1].\n        interpolation (str): Interpolation mode: 'nearest' or 'bilinear'.\n            Default: 'bilinear'.\n        padding_mode (str): Padding mode: 'zeros' or 'border' or 'reflection'.\n            Default: 'zeros'.\n        align_corners (bool): Whether align corners. Default: True.\n\n    Returns:\n        Tensor: Warped image or feature map.\n    \"\"\"\n    if x.size()[-2:] != flow.size()[1:3]:\n        raise ValueError(f'The spatial sizes of input ({x.size()[-2:]}) and '\n                         f'flow ({flow.size()[1:3]}) are not the same.')\n    _, _, h, w = x.size()\n    # create mesh grid\n    device = flow.device\n    # torch.meshgrid has been modified in 1.10.0 (compatibility with previous\n    # versions), and will be further modified in 1.12 (Breaking Change)\n    if 'indexing' in torch.meshgrid.__code__.co_varnames:\n        grid_y, grid_x = torch.meshgrid(\n            torch.arange(0, h, device=device, dtype=x.dtype),\n            torch.arange(0, w, device=device, dtype=x.dtype),\n            indexing='ij')\n    else:\n        grid_y, grid_x = torch.meshgrid(\n            torch.arange(0, h, device=device, dtype=x.dtype),\n            torch.arange(0, w, device=device, dtype=x.dtype))\n    grid = torch.stack((grid_x, grid_y), 2)  # h, w, 2\n    grid.requires_grad = False\n\n    grid_flow = grid + flow\n    # scale grid_flow to [-1,1]\n    grid_flow_x = 2.0 * grid_flow[:, :, :, 0] / max(w - 1, 1) - 1.0\n    grid_flow_y = 2.0 * grid_flow[:, :, :, 1] / max(h - 1, 1) - 1.0\n    grid_flow = torch.stack((grid_flow_x, grid_flow_y), dim=3)\n    grid_flow = grid_flow.type(x.type())\n    output = F.grid_sample(\n        x,\n        grid_flow,\n        mode=interpolation,\n        padding_mode=padding_mode,\n        align_corners=align_corners)\n    return output\n"
  },
  {
    "path": "mmagic/models/utils/model_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport logging\nfrom typing import Any, Dict, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import print_log\nfrom mmengine.model.weight_init import (constant_init, kaiming_init,\n                                        normal_init, update_init_info,\n                                        xavier_init)\nfrom mmengine.registry import Registry\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\nfrom torch import Tensor\nfrom torch.nn import init\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs\nfrom .tome_utils import (add_tome_cfg_hook, build_mmagic_tomesd_block,\n                         build_mmagic_wrapper_tomesd_block, isinstance_str)\n\n\ndef default_init_weights(module, scale=1):\n    \"\"\"Initialize network weights.\n\n    Args:\n        modules (nn.Module): Modules to be initialized.\n        scale (float): Scale initialized weights, especially for residual\n            blocks. Default: 1.\n    \"\"\"\n    for m in module.modules():\n        if isinstance(m, nn.Conv2d):\n            kaiming_init(m, a=0, mode='fan_in', bias=0)\n            m.weight.data *= scale\n        elif isinstance(m, nn.Linear):\n            kaiming_init(m, a=0, mode='fan_in', bias=0)\n            m.weight.data *= scale\n        elif isinstance(m, _BatchNorm):\n            constant_init(m.weight, val=1, bias=0)\n\n\ndef make_layer(block, num_blocks, **kwarg):\n    \"\"\"Make layers by stacking the same blocks.\n\n    Args:\n        block (nn.module): nn.module class for basic block.\n        num_blocks (int): number of blocks.\n\n    Returns:\n        nn.Sequential: Stacked blocks in nn.Sequential.\n    \"\"\"\n    layers = []\n    for _ in range(num_blocks):\n        layers.append(block(**kwarg))\n    return nn.Sequential(*layers)\n\n\ndef get_module_device(module):\n    \"\"\"Get the device of a module.\n\n    Args:\n        module (nn.Module): A module contains the parameters.\n\n    Returns:\n        torch.device: The device of the module.\n    \"\"\"\n    try:\n        next(module.parameters())\n    except StopIteration:\n        raise ValueError('The input module should contain parameters.')\n\n    if next(module.parameters()).is_cuda:\n        return next(module.parameters()).get_device()\n    else:\n        return torch.device('cpu')\n\n\ndef set_requires_grad(nets, requires_grad=False):\n    \"\"\"Set requires_grad for all the networks.\n\n    Args:\n        nets (nn.Module | list[nn.Module]): A list of networks or a single\n            network.\n        requires_grad (bool): Whether the networks require gradients or not\n    \"\"\"\n    if not isinstance(nets, list):\n        nets = [nets]\n    for net in nets:\n        if net is not None:\n            for param in net.parameters():\n                param.requires_grad = requires_grad\n\n\ndef generation_init_weights(module, init_type='normal', init_gain=0.02):\n    \"\"\"Default initialization of network weights for image generation.\n\n    By default, we use normal init, but xavier and kaiming might work\n    better for some applications.\n\n    Args:\n        module (nn.Module): Module to be initialized.\n        init_type (str): The name of an initialization method:\n            normal | xavier | kaiming | orthogonal. Default: 'normal'.\n        init_gain (float): Scaling factor for normal, xavier and\n            orthogonal. Default: 0.02.\n    \"\"\"\n\n    def init_func(m):\n        \"\"\"Initialization function.\n\n        Args:\n            m (nn.Module): Module to be initialized.\n        \"\"\"\n        classname = m.__class__.__name__\n        if hasattr(m, 'weight') and (classname.find('Conv') != -1\n                                     or classname.find('Linear') != -1):\n            if init_type == 'normal':\n                normal_init(m, 0.0, init_gain)\n            elif init_type == 'xavier':\n                xavier_init(m, gain=init_gain, distribution='normal')\n            elif init_type == 'kaiming':\n                kaiming_init(\n                    m,\n                    a=0,\n                    mode='fan_in',\n                    nonlinearity='leaky_relu',\n                    distribution='normal')\n            elif init_type == 'orthogonal':\n                init.orthogonal_(m.weight, gain=init_gain)\n                init.constant_(m.bias.data, 0.0)\n            else:\n                raise NotImplementedError(\n                    f\"Initialization method '{init_type}' is not implemented\")\n            init_info = (f'Initialize {m.__class__.__name__} by \\'init_type\\' '\n                         f'{init_type}.')\n        elif classname.find('BatchNorm2d') != -1:\n            # BatchNorm Layer's weight is not a matrix;\n            # only normal distribution applies.\n            normal_init(m, 1.0, init_gain)\n            init_info = (f'{m.__class__.__name__} is BatchNorm2d, initialize '\n                         'by Norm initialization with mean=1, '\n                         f'std={init_gain}')\n\n        if hasattr(m, '_params_init_info'):\n            update_init_info(module, init_info)\n\n    module.apply(init_func)\n\n\ndef get_valid_noise_size(noise_size: Optional[int],\n                         generator: Union[Dict, nn.Module]) -> Optional[int]:\n    \"\"\"Get the value of `noise_size` from input, `generator` and check the\n    consistency of these values. If no conflict is found, return that value.\n\n    Args:\n        noise_size (Optional[int]): `noise_size` passed to\n            `BaseGAN_refactor`'s initialize function.\n        generator (ModelType): The config or the model of generator.\n\n    Returns:\n        int | None: The noise size feed to generator.\n    \"\"\"\n    if isinstance(generator, dict):\n        model_noise_size = generator.get('noise_size', None)\n    else:\n        model_noise_size = getattr(generator, 'noise_size', None)\n\n    # get noise_size\n    if noise_size is not None and model_noise_size is not None:\n        assert noise_size == model_noise_size, (\n            'Input \\'noise_size\\' is inconsistent with '\n            f'\\'generator.noise_size\\'. Receive \\'{noise_size}\\' and '\n            f'\\'{model_noise_size}\\'.')\n    else:\n        noise_size = noise_size or model_noise_size\n\n    return noise_size\n\n\ndef get_valid_num_batches(batch_inputs: Optional[ForwardInputs] = None,\n                          data_samples: List[DataSample] = None) -> int:\n    \"\"\"Try get the valid batch size from inputs.\n\n    - If some values in `batch_inputs` are `Tensor` and 'num_batches' is in\n      `batch_inputs`, we check whether the value of 'num_batches' and the the\n      length of first dimension of all tensors are same. If the values are not\n      same, `AssertionError` will be raised. If all values are the same,\n      return the value.\n    - If no values in `batch_inputs` is `Tensor`, 'num_batches' must be\n      contained in `batch_inputs`. And this value will be returned.\n    - If some values are `Tensor` and 'num_batches' is not contained in\n      `batch_inputs`, we check whether all tensor have the same length on the\n      first dimension. If the length are not same, `AssertionError` will be\n      raised. If all length are the same, return the length as batch size.\n    - If batch_inputs is a `Tensor`, directly return the length of the first\n      dimension as batch size.\n\n    Args:\n        batch_inputs (ForwardInputs): Inputs passed to :meth:`forward`.\n\n    Returns:\n        int: The batch size of samples to generate.\n    \"\"\"\n    # attempt to infer num_batches from batch_inputs\n    if batch_inputs is not None:\n        if isinstance(batch_inputs, Tensor):\n            return batch_inputs.shape[0]\n\n        # get num_batches from batch_inputs\n        num_batches_dict = {\n            k: v.shape[0]\n            for k, v in batch_inputs.items() if isinstance(v, Tensor)\n        }\n        if 'num_batches' in batch_inputs:\n            num_batches_dict['num_batches'] = batch_inputs['num_batches']\n\n        if num_batches_dict:\n            num_batches_inputs = list(num_batches_dict.values())[0]\n            # ensure all num_batches are same\n            assert all([\n                bz == num_batches_inputs for bz in num_batches_dict.values()\n            ]), ('\\'num_batches\\' is inconsistency among the preprocessed '\n                 f'input. \\'num_batches\\' parsed results: {num_batches_dict}')\n        else:\n            num_batches_inputs = None\n    else:\n        num_batches_inputs = None\n\n    # attempt to infer num_batches from data_samples\n    if data_samples is not None:\n        num_batches_samples = len(data_samples)\n    else:\n        num_batches_samples = None\n\n    if not (num_batches_inputs or num_batches_samples):\n        print_log(\n            'Cannot get \\'num_batches\\' from both \\'inputs\\' and '\n            '\\'data_samples\\', automatically set \\'num_batches\\' as 1. '\n            'This may leads to potential error.', 'current', logging.WARNING)\n        return 1\n    elif num_batches_inputs and num_batches_samples:\n        assert num_batches_inputs == num_batches_samples, (\n            '\\'num_batches\\' inferred from \\'inputs\\' and \\'data_samples\\' '\n            f'are different, ({num_batches_inputs} vs. {num_batches_samples}).'\n            ' Please check your input carefully.')\n\n    return num_batches_inputs or num_batches_samples\n\n\ndef build_module(module: Union[dict, nn.Module], builder: Registry, *args,\n                 **kwargs) -> Any:\n    \"\"\"Build module from config or return the module itself.\n\n    Args:\n        module (Union[dict, nn.Module]): The module to build.\n        builder (Registry): The registry to build module.\n        *args, **kwargs: Arguments passed to build function.\n\n    Returns:\n        Any: The built module.\n    \"\"\"\n    if isinstance(module, dict):\n        return builder.build(module, *args, **kwargs)\n    elif isinstance(module, nn.Module):\n        return module\n    else:\n        raise TypeError(\n            f'Only support dict and nn.Module, but got {type(module)}.')\n\n\ndef xformers_is_enable(verbose: bool = False) -> bool:\n    \"\"\"Check whether xformers is installed.\n    Args:\n        verbose (bool): Whether to print the log.\n\n    Returns:\n        bool: Whether xformers is installed.\n    \"\"\"\n    from mmagic.utils import try_import\n    xformers = try_import('xformers')\n    if xformers is None and verbose:\n        print_log('Do not support Xformers.', 'current')\n    return xformers is not None\n\n\ndef set_xformers(module: nn.Module, prefix: str = '') -> nn.Module:\n    \"\"\"Set xformers' efficient Attention for attention modules.\n\n    Args:\n        module (nn.Module): The module to set xformers.\n        prefix (str): The prefix of the module name.\n\n    Returns:\n        nn.Module: The module with xformers' efficient Attention.\n    \"\"\"\n\n    if not xformers_is_enable():\n        print_log('Do not support Xformers. Please install Xformers first. '\n                  'The program will run without Xformers.')\n        return\n\n    for n, m in module.named_children():\n        if hasattr(m, 'set_use_memory_efficient_attention_xformers'):\n            # set xformers for Diffusers' Cross Attention\n            m.set_use_memory_efficient_attention_xformers(True)\n            module_name = f'{prefix}.{n}' if prefix else n\n            print_log(\n                'Enable Xformers for HuggingFace Diffusers\\' '\n                f'module \\'{module_name}\\'.', 'current')\n        else:\n            set_xformers(m, prefix=n)\n\n    return module\n\n\ndef set_tomesd(model: torch.nn.Module,\n               ratio: float = 0.5,\n               max_downsample: int = 1,\n               sx: int = 2,\n               sy: int = 2,\n               use_rand: bool = True,\n               merge_attn: bool = True,\n               merge_crossattn: bool = False,\n               merge_mlp: bool = False):\n    \"\"\"Patches a stable diffusion model with ToMe. Apply this to the highest\n    level stable diffusion object.\n\n    Refer to: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L173 # noqa\n\n    Args:\n        model (torch.nn.Module): A top level Stable Diffusion module to patch in place.\n        ratio (float): The ratio of tokens to merge. I.e., 0.4 would reduce the total\n            number of tokens by 40%.The maximum value for this is 1-(1/(`sx` * `sy`)). By default,\n            the max ratio is 0.75 (usually <= 0.5 is recommended). Higher values result in more speed-up,\n            but with more visual quality loss.\n        max_downsample (int): Apply ToMe to layers with at most this amount of downsampling.\n            E.g., 1 only applies to layers with no downsampling, while 8 applies to all layers.\n            Should be chosen from [1, 2, 4, or 8]. 1 and 2 are recommended.\n        sx, sy (int, int): The stride for computing dst sets. A higher stride means you can merge\n            more tokens, default setting of (2, 2) works well in most cases.\n            `sx` and `sy` do not need to divide image size.\n        use_rand (bool): Whether or not to allow random perturbations when computing dst sets.\n            By default: True, but if you're having weird artifacts you can try turning this off.\n        merge_attn (bool): Whether or not to merge tokens for attention (recommended).\n        merge_crossattn (bool): Whether or not to merge tokens for cross attention (not recommended).\n        merge_mlp (bool): Whether or not to merge tokens for the mlp layers (particular not recommended).\n\n    Returns:\n        model (torch.nn.Module): Model patched by ToMe.\n    \"\"\"\n\n    # Make sure the module is not currently patched\n    remove_tomesd(model)\n\n    is_mmagic = isinstance_str(model, 'StableDiffusion') or isinstance_str(\n        model, 'BaseModel')\n\n    if is_mmagic:\n        # Supports \"StableDiffusion.unet\" and \"unet\"\n        diffusion_model = model.unet if hasattr(model, 'unet') else model\n        if isinstance_str(diffusion_model, 'DenoisingUnet'):\n            is_wrapper = False\n        else:\n            is_wrapper = True\n    else:\n        if not hasattr(model, 'model') or not hasattr(model.model,\n                                                      'diffusion_model'):\n            # Provided model not supported\n            print('Expected a Stable Diffusion / Latent Diffusion model.')\n            raise RuntimeError('Provided model was not supported.')\n        diffusion_model = model.model.diffusion_model\n        # TODO: can support more diffusion models, like Stability AI\n        is_wrapper = None\n\n    diffusion_model._tome_info = {\n        'size': None,\n        'hooks': [],\n        'args': {\n            'ratio': ratio,\n            'max_downsample': max_downsample,\n            'sx': sx,\n            'sy': sy,\n            'use_rand': use_rand,\n            'merge_attn': merge_attn,\n            'merge_crossattn': merge_crossattn,\n            'merge_mlp': merge_mlp\n        }\n    }\n    add_tome_cfg_hook(diffusion_model)\n\n    for _, module in diffusion_model.named_modules():\n        if isinstance_str(module, 'BasicTransformerBlock'):\n            # TODO: can support more stable diffusion based models\n            if is_mmagic:\n                if is_wrapper is None:\n                    raise NotImplementedError(\n                        'Specific ToMe block not implemented')\n                elif not is_wrapper:\n                    make_tome_block_fn = build_mmagic_tomesd_block\n                elif is_wrapper:\n                    make_tome_block_fn = build_mmagic_wrapper_tomesd_block\n            else:\n                raise TypeError(\n                    'Currently `tome` only support *stable-diffusion* model!')\n            module.__class__ = make_tome_block_fn(module.__class__)\n            module._tome_info = diffusion_model._tome_info\n\n    return model\n\n\ndef remove_tomesd(model: torch.nn.Module):\n    \"\"\"Removes a patch from a ToMe Diffusion module if it was already patched.\n\n    Refer to: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L251 # noqa\n    \"\"\"\n    # For mmagic Stable Diffusion models\n    model = model.unet if hasattr(model, 'unet') else model\n\n    for _, module in model.named_modules():\n        if hasattr(module, '_tome_info'):\n            for hook in module._tome_info['hooks']:\n                hook.remove()\n            module._tome_info['hooks'].clear()\n\n        if module.__class__.__name__ == 'ToMeBlock':\n            module.__class__ = module._parent\n\n    return model\n"
  },
  {
    "path": "mmagic/models/utils/sampling_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Callable, List, Optional, Sequence, Union\n\nimport numpy as np\nimport torch\nfrom mmengine import is_list_of\nfrom torch import Tensor\n\n\ndef noise_sample_fn(noise: Union[Tensor, Callable, None] = None,\n                    *,\n                    num_batches: int = 1,\n                    noise_size: Union[int, Sequence[int], None] = None,\n                    device: Optional[str] = None) -> Tensor:\n    \"\"\"Sample noise with respect to the given `num_batches`, `noise_size` and\n    `device`.\n\n    Args:\n        noise (torch.Tensor | callable | None): You can directly give a\n            batch of noise through a ``torch.Tensor`` or offer a callable\n            function to sample a batch of noise data. Otherwise, the ``None``\n            indicates to use the default noise sampler. Defaults to None.\n        num_batches (int, optional): The number of batch size. Defaults to 1.\n        noise_size (Union[int, Sequence[int], None], optional): The size of\n            random noise. Defaults to None.\n        device (Optional[str], optional): The target device of the random\n            noise. Defaults to None.\n\n    Returns:\n        Tensor: Sampled random noise.\n    \"\"\"\n    if isinstance(noise, torch.Tensor):\n        noise_batch = noise\n        # unsqueeze if need\n        if noise_batch.ndim == 1:\n            noise_batch = noise_batch[None, ...]\n    else:\n        # generate noise automatically, prepare and check `num_batches` and\n        # `noise_size`\n        # num_batches = 1 if num_batches is None else num_batches\n        assert num_batches > 0, (\n            'If you want to generate noise automatically, \\'num_batches\\' '\n            'must larger than 0.')\n        assert noise_size is not None, (\n            'If you want to generate noise automatically, \\'noise_size\\' '\n            'must not be None.')\n        noise_size = [noise_size] if isinstance(noise_size, int) \\\n            else noise_size\n\n        if callable(noise):\n            # receive a noise generator and sample noise.\n            noise_generator = noise\n            noise_batch = noise_generator((num_batches, *noise_size))\n        else:\n            # otherwise, we will adopt default noise sampler.\n            assert num_batches > 0\n            noise_batch = torch.randn((num_batches, *noise_size))\n\n    # Check the shape if `noise_size` is passed. Ignore `num_batches` here\n    # because `num_batches` has default value.\n    if noise_size is not None:\n        if isinstance(noise_size, int):\n            noise_size = [noise_size]\n        assert list(noise_batch.shape[1:]) == list(noise_size), (\n            'Size of the input noise is inconsistency with \\'noise_size\\'\\'. '\n            f'Receive \\'{noise_batch.shape[1:]}\\' and \\'{noise_size}\\' '\n            'respectively.')\n\n    if device is not None:\n        return noise_batch.to(device)\n    return noise_batch\n\n\ndef label_sample_fn(label: Union[Tensor, Callable, List[int], None] = None,\n                    *,\n                    num_batches: int = 1,\n                    num_classes: Optional[int] = None,\n                    device: Optional[str] = None) -> Union[Tensor, None]:\n    \"\"\"Sample random label with respect to `num_batches`, `num_classes` and\n    `device`.\n\n    Args:\n        label (Union[Tensor, Callable, List[int], None], optional): You can\n            directly give a batch of label through a ``torch.Tensor`` or offer\n            a callable function to sample a batch of label data. Otherwise, the\n            ``None`` indicates to use the default label sampler.\n            Defaults to None.\n        num_batches (int, optional): The number of batch size. Defaults to 1.\n        num_classes (Optional[int], optional): The number of classes. Defaults\n            to None.\n        device (Optional[str], optional): The target device of the label.\n            Defaults to None.\n\n    Returns:\n        Union[Tensor, None]: Sampled random label.\n    \"\"\"\n    # label is not passed and do not have `num_classes` to sample label\n    if (num_classes is None or num_classes <= 0) and (label is None):\n        return None\n\n    if isinstance(label, Tensor):\n        label_batch = label\n    elif isinstance(label, np.ndarray):\n        label_batch = torch.from_numpy(label).long()\n    elif isinstance(label, list):\n        if is_list_of(label, (int, np.ndarray)):\n            label = [torch.LongTensor([lab]).squeeze() for lab in label]\n        else:\n            assert is_list_of(label, torch.Tensor), (\n                'Only support \\'int\\', \\'np.ndarray\\' and \\'torch.Tensor\\' '\n                'type for list input. But receives '\n                f'\\'{[type(lab) for lab in label]}\\'')\n            label = [lab.squeeze() for lab in label]\n        label_batch = torch.stack(label, dim=0)\n    else:\n        # generate label_batch manually, prepare and check `num_batches`\n        assert num_batches > 0, (\n            'If you want to generate label automatically, \\'num_batches\\' '\n            'must larger than 0.')\n\n        if callable(label):\n            # receive a noise generator and sample noise.\n            label_generator = label\n            label_batch = label_generator(num_batches)\n        else:\n            # otherwise, we will adopt default label sampler.\n            label_batch = torch.randint(0, num_classes, (num_batches, ))\n\n    # Check whether is LongTensor (torch.int64) and shape like [bz, ]\n    assert label_batch.dtype == torch.int64, (\n        'Input label cannot convert to torch.LongTensor (torch.int64). Please '\n        'check your input.')\n    assert label_batch.ndim == 1, (\n        'Input label must shape like \\'[num_batches, ]\\', but shape like '\n        f'({label_batch.shape})')\n\n    # Check the label if `num_classes` is passed. Ignore `num_batches` because\n    # `num_batches` has default value.\n    if num_classes is not None:\n        invalid_index = torch.logical_or(label_batch < 0,\n                                         label_batch >= num_classes)\n        assert not (invalid_index).any(), (\n            f'Labels in label_batch must be in range [0, num_classes - 1] '\n            f'([0, {num_classes}-1]). But found {label_batch[invalid_index]} '\n            'are out of range.')\n\n    if device is not None:\n        return label_batch.to(device)\n    return label_batch\n"
  },
  {
    "path": "mmagic/models/utils/tensor_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\n\ndef get_unknown_tensor(trimap, unknown_value=128 / 255):\n    \"\"\"Get 1-channel unknown area tensor from the 3 or 1-channel trimap tensor.\n\n    Args:\n        trimap (Tensor): Tensor with shape (N, 3, H, W) or (N, 1, H, W).\n        unknown_value (float): Scalar value indicating unknown region in\n            trimap.\n            If trimap is pre-processed using `'rescale_to_zero_one'`, then\n            0 for bg, 128/255 for unknown, 1 for fg,\n            and unknown_value should set to 128 / 255.\n            If trimap is pre-processed by\n            :meth:`FormatTrimap(to_onehot=False)`, then\n            0 for bg, 1 for unknown, 2 for fg\n            and unknown_value should set to 1.\n            If trimap is pre-processed by\n            :meth:`FormatTrimap(to_onehot=True)`, then\n            trimap is 3-channeled, and this value is not used.\n\n    Returns:\n        Tensor: Unknown area mask of shape (N, 1, H, W).\n    \"\"\"\n    if trimap.shape[1] == 3:\n        # The three channels correspond to (bg mask, unknown mask, fg mask)\n        # respectively.\n        weight = trimap[:, 1:2, :, :].float()\n    # elif 'to_onehot' in meta[0]:\n    # key 'to_onehot' is added by pipeline `FormatTrimap`\n    # 0 for bg, 1 for unknown, 2 for fg\n    # weight = trimap.eq(1).float()\n    else:\n        # trimap is simply processed by pipeline `RescaleToZeroOne`\n        # 0 for bg, 128/255 for unknown, 1 for fg\n        weight = trimap.eq(unknown_value).float()\n    return weight\n\n\ndef normalize_vecs(vectors: torch.Tensor) -> torch.Tensor:\n    \"\"\"Normalize vector with it's lengths at the last dimension. If `vector` is\n    two-dimension tensor, this function is same as L2 normalization.\n\n    Args:\n        vector (torch.Tensor): Vectors to be normalized.\n\n    Returns:\n        torch.Tensor: Vectors after normalization.\n    \"\"\"\n    return vectors / (torch.norm(vectors, dim=-1, keepdim=True))\n"
  },
  {
    "path": "mmagic/models/utils/tome_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import Any, Callable, Dict, Tuple, Type\n\nimport torch\n\n\ndef add_tome_cfg_hook(model: torch.nn.Module):\n    \"\"\"Add a forward pre hook to get the image size. This hook can be removed\n    with remove_patch.\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L158 # noqa\n    \"\"\"\n\n    def hook(module, args):\n        module._tome_info['size'] = (args[0].shape[2], args[0].shape[3])\n        return None\n\n    model._tome_info['hooks'].append(model.register_forward_pre_hook(hook))\n\n\ndef build_mmagic_wrapper_tomesd_block(block_class: Type[torch.nn.Module]\n                                      ) -> Type[torch.nn.Module]:\n    \"\"\"Make a patched class for a DiffusersWrapper model in mmagic. This patch\n    applies ToMe to the forward function of the block.\n\n    Refer to: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L67 # noqa\n    Args:\n        block_class (torch.nn.Module): original class need tome speedup.\n\n    Returns:\n        ToMeBlock (torch.nn.Module): patched class based on the original class.\n    \"\"\"\n\n    class ToMeBlock(block_class):\n        # Save for unpatching later\n        _parent = block_class\n\n        def forward(\n            self,\n            hidden_states,\n            encoder_hidden_states=None,\n            timestep=None,\n            attention_mask=None,\n            cross_attention_kwargs=None,\n            class_labels=None,\n        ):\n            # -> (1) ToMeBlock\n            m_a, m_c, m_m, u_a, u_c, u_m = build_merge(hidden_states,\n                                                       self._tome_info)\n            if self.use_ada_layer_norm:\n                norm_hidden_states = self.norm1(hidden_states, timestep)\n            elif self.use_ada_layer_norm_zero:\n                norm_hidden_states, gate_msa,\\\n                    shift_mlp, scale_mlp, gate_mlp = self.norm1(\n                                    hidden_states,\n                                    timestep,\n                                    class_labels,\n                                    hidden_dtype=hidden_states.dtype)\n            else:\n                norm_hidden_states = self.norm1(hidden_states)\n\n            # -> (2) ToMe m_a\n            norm_hidden_states = m_a(norm_hidden_states)\n\n            # 1. Self-Attention\n            if cross_attention_kwargs is not None:\n                cross_attention_kwargs = cross_attention_kwargs\n            else:\n                cross_attention_kwargs = {}\n            attn_output = self.attn1(\n                norm_hidden_states,\n                encoder_hidden_states=encoder_hidden_states\n                if self.only_cross_attention else None,\n                attention_mask=attention_mask,\n                **cross_attention_kwargs,\n            )\n            if self.use_ada_layer_norm_zero:\n                attn_output = gate_msa.unsqueeze(1) * attn_output\n\n            # -> (3) ToMe u_a\n            hidden_states = u_a(attn_output) + hidden_states\n\n            if self.attn2 is not None:\n                norm_hidden_states = (\n                    self.norm2(hidden_states, timestep)\n                    if self.use_ada_layer_norm else self.norm2(hidden_states))\n                # -> (4) ToMe m_c\n                norm_hidden_states = m_c(norm_hidden_states)\n\n                # 2. Cross-Attention\n                attn_output = self.attn2(\n                    norm_hidden_states,\n                    encoder_hidden_states=encoder_hidden_states,\n                    attention_mask=attention_mask,\n                    **cross_attention_kwargs,\n                )\n                # -> (5) ToMe u_c\n                hidden_states = u_c(attn_output) + hidden_states\n\n            # 3. Feed-forward\n            norm_hidden_states = self.norm3(hidden_states)\n\n            if self.use_ada_layer_norm_zero:\n                norm_hidden_states = norm_hidden_states * (\n                    1 + scale_mlp[:, None]) + shift_mlp[:, None]\n\n            # -> (6) ToMe m_m\n            norm_hidden_states = m_m(norm_hidden_states)\n\n            ff_output = self.ff(norm_hidden_states)\n\n            if self.use_ada_layer_norm_zero:\n                ff_output = gate_mlp.unsqueeze(1) * ff_output\n\n            # -> (7) ToMe u_m\n            hidden_states = u_m(ff_output) + hidden_states\n\n            return hidden_states\n\n    return ToMeBlock\n\n\ndef build_mmagic_tomesd_block(block_class: Type[torch.nn.Module]\n                              ) -> Type[torch.nn.Module]:\n    \"\"\"Make a patched class for a mmagic StableDiffusion model. This patch\n    applies ToMe to the forward function of the block.\n\n    Refer to: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L67 # noqa\n    Args:\n        block_class (torch.nn.Module): original class need tome speedup.\n\n    Returns:\n        ToMeBlock (torch.nn.Module): patched class based on the original class.\n    \"\"\"\n\n    class ToMeBlock(block_class):\n        # Save for unpatching later\n        _parent = block_class\n\n        def forward(self, hidden_states, context=None, timestep=None):\n            # ->(1) ToMeBlock\n            m_a, m_c, m_m, u_a, u_c, u_m = build_merge(hidden_states,\n                                                       self._tome_info)\n\n            # 1. Self-Attention\n            # ->(2) ToMe m_a\n            norm_hidden_states = (m_a(self.norm1(hidden_states)))\n\n            # ->(3) ToMe u_a\n            if self.only_cross_attention:\n                hidden_states = u_a(self.attn1(norm_hidden_states,\n                                               context)) + hidden_states\n            else:\n                hidden_states = u_a(\n                    self.attn1(norm_hidden_states)) + hidden_states\n\n            # 2. Cross-Attention\n            # ->(4) ToMe m_c\n            norm_hidden_states = (m_c(self.norm2(hidden_states)))\n            # ->(5) ToMe u_c\n            hidden_states = u_c(\n                self.attn2(norm_hidden_states,\n                           context=context)) + hidden_states\n\n            # 3. Feed-forward\n            # ->(6) ToMe m_m, u_m\n            hidden_states = u_m(self.ff(m_m(\n                self.norm3(hidden_states)))) + hidden_states\n\n            return hidden_states\n\n    return ToMeBlock\n\n\ndef isinstance_str(x: object, cls_name: str):\n    \"\"\"Checks whether `x` has any class *named* `cls_name` in its ancestry.\n    Doesn't require access to the class's implementation.\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/utils.py#L3 # noqa\n    \"\"\"\n\n    for _cls in x.__class__.__mro__:\n        if _cls.__name__ == cls_name:\n            return True\n\n    return False\n\n\ndef do_nothing(x: torch.Tensor, mode: str = None):\n    \"\"\"Build identical mapping function.\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/merge.py#L5 # noqa\n    \"\"\"\n    return x\n\n\ndef mps_gather_workaround(input, dim, index):\n    \"\"\"Gather function specific for `mps` backend (Metal Performance Shaders).\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/merge.py#L9 # noqa\n    \"\"\"\n    if input.shape[-1] == 1:\n        return torch.gather(\n            input.unsqueeze(-1), dim - 1 if dim < 0 else dim,\n            index.unsqueeze(-1)).squeeze(-1)\n    else:\n        return torch.gather(input, dim, index)\n\n\ndef bipartite_soft_matching_random2d(metric: torch.Tensor,\n                                     w: int,\n                                     h: int,\n                                     sx: int,\n                                     sy: int,\n                                     r: int,\n                                     no_rand: bool = False\n                                     ) -> Tuple[Callable, Callable]:\n    \"\"\"Partitions the tokens into src and dst and merges r tokens from src to\n    dst, dst tokens are partitioned by choosing one randomy in each (`sx`,\n    `sy`) region. More details refer to `Token Merging: Your ViT But Faster`,\n    paper link: <https://arxiv.org/abs/2210.09461>`_ # noqa.\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/merge.py#20 # noqa\n\n    Args:\n        metric (torch.Tensor): metric with size (B, N, C) for similarity computation.\n        w (int): image width in tokens.\n        h (int): image height in tokens.\n        sx (int): stride in the x dimension for dst, must divide `w`.\n        sy (int): stride in the y dimension for dst, must divide `h`.\n        r (int): number of tokens to remove (by merging).\n        no_rand (bool): if true, disable randomness (use top left corner only).\n\n    Returns:\n        merge (Callable): token merging function.\n        unmerge (Callable): token unmerging function.\n    \"\"\"\n    B, N, _ = metric.shape\n\n    if r <= 0:\n        return do_nothing, do_nothing\n\n    if metric.device.type == 'mps':\n        gather = mps_gather_workaround\n    else:\n        gather = torch.gather\n\n    with torch.no_grad():\n\n        hsy, wsx = h // sy, w // sx\n\n        # For each sy by sx kernel, randomly assign one token to\n        # be dst and the rest src\n        if no_rand:\n            rand_idx = torch.zeros(\n                hsy, wsx, 1, device=metric.device, dtype=torch.int64)\n        else:\n            rand_idx = torch.randint(\n                sy * sx, size=(hsy, wsx, 1), device=metric.device)\n\n        # The image might not divide sx and sy, so we need to work\n        # on a view of the top left if the idx buffer instead\n        idx_buffer_view = torch.zeros(\n            hsy, wsx, sy * sx, device=metric.device, dtype=torch.int64)\n        idx_buffer_view.scatter_(\n            dim=2,\n            index=rand_idx,\n            src=-torch.ones_like(rand_idx, dtype=rand_idx.dtype))\n        idx_buffer_view = idx_buffer_view.view(hsy, wsx, sy, sx).transpose(\n            1, 2).reshape(hsy * sy, wsx * sx)\n\n        # Image is not divisible by sx or sy so we need to move it\n        # into a new buffer\n        if (hsy * sy) < h or (wsx * sx) < w:\n            idx_buffer = torch.zeros(\n                h, w, device=metric.device, dtype=torch.int64)\n            idx_buffer[:(hsy * sy), :(wsx * sx)] = idx_buffer_view\n        else:\n            idx_buffer = idx_buffer_view\n\n        # We set dst tokens to be -1 and src to be 0, so an argsort\n        # gives us dst|src indices\n        rand_idx = idx_buffer.reshape(1, -1, 1).argsort(dim=1)\n\n        # We're finished with these\n        del idx_buffer, idx_buffer_view\n\n        # rand_idx is currently dst|src, so split them\n        num_dst = hsy * wsx\n        a_idx = rand_idx[:, num_dst:, :]  # src\n        b_idx = rand_idx[:, :num_dst, :]  # dst\n\n        def split(x):\n            C = x.shape[-1]\n            src = gather(x, dim=1, index=a_idx.expand(B, N - num_dst, C))\n            dst = gather(x, dim=1, index=b_idx.expand(B, num_dst, C))\n            return src, dst\n\n        # Cosine similarity between A and B\n        metric = metric / metric.norm(dim=-1, keepdim=True)\n        a, b = split(metric)\n        scores = a @ b.transpose(-1, -2)\n\n        # Can't reduce more than the # tokens in src\n        r = min(a.shape[1], r)\n\n        # Find the most similar greedily\n        node_max, node_idx = scores.max(dim=-1)\n        edge_idx = node_max.argsort(dim=-1, descending=True)[..., None]\n\n        unm_idx = edge_idx[..., r:, :]  # Unmerged Tokens\n        src_idx = edge_idx[..., :r, :]  # Merged Tokens\n        dst_idx = gather(node_idx[..., None], dim=-2, index=src_idx)\n\n    def merge(x: torch.Tensor, mode='mean') -> torch.Tensor:\n        src, dst = split(x)\n        n, t1, c = src.shape\n\n        unm = gather(src, dim=-2, index=unm_idx.expand(n, t1 - r, c))\n        src = gather(src, dim=-2, index=src_idx.expand(n, r, c))\n\n        if not hasattr(torch.Tensor,\n                       'scatter_reduce') or torch.__version__ < '1.12.1':\n            raise ImportError(\n                'Please upgrade torch >= 1.12.1 to enable \\'scatter_reduce\\'')\n        dst = dst.scatter_reduce(-2, dst_idx.expand(n, r, c), src, reduce=mode)\n\n        return torch.cat([unm, dst], dim=1)\n\n    def unmerge(x: torch.Tensor) -> torch.Tensor:\n        unm_len = unm_idx.shape[1]\n        unm, dst = x[..., :unm_len, :], x[..., unm_len:, :]\n        _, _, c = unm.shape\n\n        src = gather(dst, dim=-2, index=dst_idx.expand(B, r, c))\n\n        # Combine back to the original shape\n        out = torch.zeros(B, N, c, device=x.device, dtype=x.dtype)\n        out.scatter_(dim=-2, index=b_idx.expand(B, num_dst, c), src=dst)\n        out.scatter_(\n            dim=-2,\n            index=gather(\n                a_idx.expand(B, a_idx.shape[1], 1), dim=1,\n                index=unm_idx).expand(B, unm_len, c),\n            src=unm)\n        out.scatter_(\n            dim=-2,\n            index=gather(\n                a_idx.expand(B, a_idx.shape[1], 1), dim=1,\n                index=src_idx).expand(B, r, c),\n            src=src)\n\n        return out\n\n    return merge, unmerge\n\n\ndef build_merge(x: torch.Tensor, tome_info: Dict[str,\n                                                 Any]) -> Tuple[Callable, ...]:\n    \"\"\"Build the merge and unmerge functions for a given setting from\n    `tome_info`.\n\n    Source: https://github.com/dbolya/tomesd/blob/main/tomesd/patch.py#L10 # noqa\n    \"\"\"\n    original_h, original_w = tome_info['size']\n    original_tokens = original_h * original_w\n    downsample = int(math.ceil(math.sqrt(original_tokens // x.shape[1])))\n\n    args = tome_info['args']\n\n    if downsample <= args['max_downsample']:\n        w = int(math.ceil(original_w / downsample))\n        h = int(math.ceil(original_h / downsample))\n        r = int(x.shape[1] * args['ratio'])\n        # If the batch size is odd, then it's not possible for promted and\n        # unprompted images to be in the same batch, which causes artifacts\n        # with use_rand, so force it to be off.\n        use_rand = False if x.shape[0] % 2 == 1 else args['use_rand']\n        m, u = bipartite_soft_matching_random2d(x, w, h, args['sx'],\n                                                args['sy'], r, not use_rand)\n    else:\n        m, u = (do_nothing, do_nothing)\n\n    m_a, u_a = (m, u) if args['merge_attn'] else (do_nothing, do_nothing)\n    m_c, u_c = (m, u) if args['merge_crossattn'] else (do_nothing, do_nothing)\n    m_m, u_m = (m, u) if args['merge_mlp'] else (do_nothing, do_nothing)\n\n    return m_a, m_c, m_m, u_a, u_c, u_m\n"
  },
  {
    "path": "mmagic/registry.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\"\"\"Registries and utilities in MMagic.\n\nMMagic provides 17 registry nodes to support using modules across projects.\nEach node is a child of the root registry in MMEngine.\n\nMore details can be found at\nhttps://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html.\n\"\"\"\n\nfrom mmengine.registry import DATA_SAMPLERS as MMENGINE_DATA_SAMPLERS\nfrom mmengine.registry import DATASETS as MMENGINE_DATASETS\nfrom mmengine.registry import EVALUATOR as MMENGINE_EVALUATOR\nfrom mmengine.registry import HOOKS as MMENGINE_HOOKS\nfrom mmengine.registry import LOG_PROCESSORS as MMENGINE_LOG_PROCESSORS\nfrom mmengine.registry import LOOPS as MMENGINE_LOOPS\nfrom mmengine.registry import METRICS as MMENGINE_METRICS\nfrom mmengine.registry import MODEL_WRAPPERS as MMENGINE_MODEL_WRAPPERS\nfrom mmengine.registry import MODELS as MMENGINE_MODELS\nfrom mmengine.registry import \\\n    OPTIM_WRAPPER_CONSTRUCTORS as MMENGINE_OPTIM_WRAPPER_CONSTRUCTORS\nfrom mmengine.registry import OPTIM_WRAPPERS as MMENGINE_OPTIM_WRAPPERS\nfrom mmengine.registry import OPTIMIZERS as MMENGINE_OPTIMIZERS\nfrom mmengine.registry import PARAM_SCHEDULERS as MMENGINE_PARAM_SCHEDULERS\nfrom mmengine.registry import \\\n    RUNNER_CONSTRUCTORS as MMENGINE_RUNNER_CONSTRUCTORS\nfrom mmengine.registry import RUNNERS as MMENGINE_RUNNERS\nfrom mmengine.registry import TASK_UTILS as MMENGINE_TASK_UTILS\nfrom mmengine.registry import TRANSFORMS as MMENGINE_TRANSFORMS\nfrom mmengine.registry import VISBACKENDS as MMENGINE_VISBACKENDS\nfrom mmengine.registry import VISUALIZERS as MMENGINE_VISUALIZERS\nfrom mmengine.registry import \\\n    WEIGHT_INITIALIZERS as MMENGINE_WEIGHT_INITIALIZERS\nfrom mmengine.registry import Registry\n\n__all__ = [\n    'RUNNERS', 'RUNNER_CONSTRUCTORS', 'LOOPS', 'HOOKS', 'LOG_PROCESSORS',\n    'OPTIMIZERS', 'OPTIM_WRAPPERS', 'OPTIM_WRAPPER_CONSTRUCTORS',\n    'PARAM_SCHEDULERS', 'DATASETS', 'DATA_SAMPLERS', 'TRANSFORMS', 'MODELS',\n    'MODEL_WRAPPERS', 'WEIGHT_INITIALIZERS', 'TASK_UTILS',\n    'DIFFUSION_SCHEDULERS', 'METRICS', 'EVALUATORS', 'VISUALIZERS',\n    'VISBACKENDS'\n]\n\n#######################################################################\n#                            mmagic.engine                            #\n#######################################################################\n\n# Runners like `EpochBasedRunner` and `IterBasedRunner`\nRUNNERS = Registry(\n    'runner',\n    parent=MMENGINE_RUNNERS,\n    locations=['mmagic.engine'],\n)\n# Runner constructors that define how to initialize runners\nRUNNER_CONSTRUCTORS = Registry(\n    'runner constructor',\n    parent=MMENGINE_RUNNER_CONSTRUCTORS,\n    locations=['mmagic.engine'],\n)\n# Loops which define the training or test process, like `EpochBasedTrainLoop`\nLOOPS = Registry(\n    'loop',\n    parent=MMENGINE_LOOPS,\n    locations=['mmagic.engine'],\n)\n# Hooks to add additional functions during running, like `CheckpointHook`\nHOOKS = Registry(\n    'hook',\n    parent=MMENGINE_HOOKS,\n    locations=['mmagic.engine'],\n)\n# Log processors to process the scalar log data.\nLOG_PROCESSORS = Registry(\n    'log processor',\n    parent=MMENGINE_LOG_PROCESSORS,\n    locations=['mmagic.engine'],\n)\n# Optimizers to optimize the model weights, like `SGD` and `Adam`.\nOPTIMIZERS = Registry(\n    'optimizer',\n    parent=MMENGINE_OPTIMIZERS,\n    locations=['mmagic.engine'],\n)\n# Optimizer wrappers to enhance the optimization process.\nOPTIM_WRAPPERS = Registry(\n    'optimizer_wrapper',\n    parent=MMENGINE_OPTIM_WRAPPERS,\n    locations=['mmagic.engine'],\n)\n# Optimizer constructors to customize the hyper-parameters of optimizers.\nOPTIM_WRAPPER_CONSTRUCTORS = Registry(\n    'optimizer wrapper constructor',\n    parent=MMENGINE_OPTIM_WRAPPER_CONSTRUCTORS,\n    locations=['mmagic.engine'],\n)\n# Parameter schedulers to dynamically adjust optimization parameters.\nPARAM_SCHEDULERS = Registry(\n    'parameter scheduler',\n    parent=MMENGINE_PARAM_SCHEDULERS,\n    locations=['mmagic.engine'],\n)\n\n#######################################################################\n#                            mmagic.datasets                          #\n#######################################################################\n\n# Datasets like `ImageNet` and `CIFAR10`.\nDATASETS = Registry(\n    'dataset',\n    parent=MMENGINE_DATASETS,\n    locations=['mmagic.datasets'],\n)\n# Samplers to sample the dataset.\nDATA_SAMPLERS = Registry(\n    'data sampler',\n    parent=MMENGINE_DATA_SAMPLERS,\n    locations=['mmagic.datasets'],\n)\n# Transforms to process the samples from the dataset.\nTRANSFORMS = Registry(\n    'transform',\n    parent=MMENGINE_TRANSFORMS,\n    locations=['mmagic.datasets.transforms'],\n)\n\n#######################################################################\n#                            mmagic.models                            #\n#######################################################################\n\n# Neural network modules inheriting `nn.Module`.\nMODELS = Registry(\n    'model',\n    parent=MMENGINE_MODELS,\n    locations=['mmagic.models'],\n)\n# Model wrappers like 'MMDistributedDataParallel'\nMODEL_WRAPPERS = Registry(\n    'model_wrapper',\n    parent=MMENGINE_MODEL_WRAPPERS,\n    locations=['mmagic.models'],\n)\n# Weight initialization methods like uniform, xavier.\nWEIGHT_INITIALIZERS = Registry(\n    'weight initializer',\n    parent=MMENGINE_WEIGHT_INITIALIZERS,\n    locations=['mmagic.models'],\n)\n# Task-specific modules like anchor generators and box coders\nTASK_UTILS = Registry(\n    'task util',\n    parent=MMENGINE_TASK_UTILS,\n    locations=['mmagic.models'],\n)\n# modules for diffusion models that support adding noise and denoising\nDIFFUSION_SCHEDULERS = Registry(\n    'diffusion scheduler',\n    locations=['mmagic.models.diffusion_schedulers'],\n)\n\n#######################################################################\n#                          mmagic.evaluation                           #\n#######################################################################\n\n# Metrics to evaluate the model prediction results.\nMETRICS = Registry(\n    'metric',\n    parent=MMENGINE_METRICS,\n    locations=['mmagic.evaluation'],\n)\n# Evaluators to define the evaluation process.\nEVALUATORS = Registry(\n    'evaluator',\n    parent=MMENGINE_EVALUATOR,\n    locations=['mmagic.evaluation'],\n)\n\n#######################################################################\n#                         mmagic.visualization                         #\n#######################################################################\n\n# Visualizers to display task-specific results.\nVISUALIZERS = Registry(\n    'visualizer',\n    parent=MMENGINE_VISUALIZERS,\n    locations=['mmagic.visualization'],\n)\n# Backends to save the visualization results, like TensorBoard, WandB.\nVISBACKENDS = Registry(\n    'vis_backend',\n    parent=MMENGINE_VISBACKENDS,\n    locations=['mmagic.visualization'],\n)\n"
  },
  {
    "path": "mmagic/structures/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .data_sample import DataSample\n\n__all__ = ['DataSample']\n"
  },
  {
    "path": "mmagic/structures/data_sample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom collections import abc\nfrom copy import deepcopy\nfrom itertools import chain\nfrom numbers import Number\nfrom typing import Any, Sequence, Union\n\nimport mmengine\nimport numpy as np\nimport torch\nfrom mmengine.structures import BaseDataElement, LabelData\n\nfrom mmagic.utils import all_to_tensor\n\n\ndef format_label(value: Union[torch.Tensor, np.ndarray, Sequence, int],\n                 num_classes: int = None) -> LabelData:\n    \"\"\"Convert label of various python types to :obj:`mmengine.LabelData`.\n\n    Supported types are: :class:`numpy.ndarray`, :class:`torch.Tensor`,\n    :class:`Sequence`, :class:`int`.\n\n    Args:\n        value (torch.Tensor | numpy.ndarray | Sequence | int): Label value.\n        num_classes (int, optional): The number of classes. If not None, set\n            it to the metainfo. Defaults to None.\n\n    Returns:\n        :obj:`mmengine.LabelData`: The formatted label data.\n    \"\"\"\n    # Handle single number\n    if isinstance(value, (torch.Tensor, np.ndarray)) and value.ndim == 0:\n        value = int(value.item())\n\n    if isinstance(value, np.ndarray):\n        value = torch.from_numpy(value)\n    elif isinstance(value, Sequence) and not mmengine.is_str(value):\n        value = torch.tensor(value)\n    elif isinstance(value, int):\n        value = torch.LongTensor([value])\n    elif not isinstance(value, torch.Tensor):\n        raise TypeError(f'Type {type(value)} is not an available label type.')\n\n    metainfo = {}\n    if num_classes is not None:\n        metainfo['num_classes'] = num_classes\n        if value.max() >= num_classes:\n            raise ValueError(f'The label data ({value}) should not '\n                             f'exceed num_classes ({num_classes}).')\n    label = LabelData(label=value, metainfo=metainfo)\n    return label\n\n\ndef is_splitable_var(var: Any) -> bool:\n    \"\"\"Check whether input is a splitable variable.\n\n    Args:\n        var (Any): The input variable to check.\n\n    Returns:\n        bool: Whether input variable is a splitable variable.\n    \"\"\"\n    if isinstance(var, DataSample):\n        return True\n    if isinstance(var, torch.Tensor):\n        return True\n    if isinstance(var, np.ndarray):\n        return True\n    if isinstance(var, abc.Sequence) and not isinstance(var, str):\n        return True\n    return False\n\n\nclass DataSample(BaseDataElement):\n    \"\"\"A data structure interface of MMagic. They are used as interfaces\n    between different components, e.g., model, visualizer, evaluator, etc.\n    Typically, DataSample contains all the information and data from ground-\n    truth and predictions.\n\n    `DataSample` inherits from `BaseDataElement`. See more details in:\n      https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html\n      Specifically, an instance of BaseDataElement consists of two components,\n      - ``metainfo``, which contains some meta information,\n        e.g., `img_shape`, `img_id`, `color_order`, etc.\n      - ``data``, which contains the data used in the loop.\n\n    The attributes in ``DataSample`` are divided into several parts:\n\n    - ``gt_img``: Ground truth image(s).\n    - ``pred_img``: Image(s) of model predictions.\n    - ``ref_img``: Reference image(s).\n    - ``mask``: Mask in Inpainting.\n    - ``trimap``: Trimap in Matting.\n    - ``gt_alpha``: Ground truth alpha image in Matting.\n    - ``pred_alpha``: Predicted alpha image in Matting.\n    - ``gt_fg``: Ground truth foreground image in Matting.\n    - ``pred_fg``: Predicted foreground image in Matting.\n    - ``gt_bg``: Ground truth background image in Matting.\n    - ``pred_bg``: Predicted background image in Matting.\n    - ``gt_merged``: Ground truth merged image in Matting.\n\n    Examples::\n\n         >>> import torch\n         >>> import numpy as np\n         >>> from mmagic.structures import DataSample\n         >>> img_meta = dict(img_shape=(800, 1196, 3))\n         >>> img = torch.rand((3, 800, 1196))\n         >>> data_sample = DataSample(gt_img=img, metainfo=img_meta)\n         >>> assert 'img_shape' in data_sample.metainfo_keys()\n         >>> data_sample\n        <DataSample(\n\n            META INFORMATION\n            img_shape: (800, 1196, 3)\n\n            DATA FIELDS\n            gt_img: tensor(...)\n        ) at 0x1f6a5a99a00>\n\n    We also support `stack` and `split` operation to handle a batch of data\n    samples:\n        >>> import torch\n        >>> import numpy as np\n        >>> from mmagic.structures import DataSample\n        >>> img_meta1 = img_meta2 = dict(img_shape=(800, 1196, 3))\n        >>> img1 = torch.rand((3, 800, 1196))\n        >>> img2 = torch.rand((3, 800, 1196))\n        >>> data_sample1 = DataSample(gt_img=img1, metainfo=img_meta1)\n        >>> data_sample2 = DataSample(gt_img=img2, metainfo=img_meta1)\n\n        >>> # stack them and then use as batched-tensor!\n        >>> data_sample = DataSample.stack([data_sample1, data_sample2])\n        >>> print(data_sample.gt_img.shape)\n        torch.Size([2, 3, 800, 1196])\n        >>> print(data_sample.metainfo)\n        {'img_shape': [(800, 1196, 3), (800, 1196, 3)]}\n\n        >>> # split them if you want\n        >>> data_sample1_, data_sample2_ = data_sample.split()\n        >>> assert (data_sample1_.gt_img == img1).all()\n        >>> assert (data_sample2_.gt_img == img2).all()\n    \"\"\"\n\n    # source_key_in_results: target_key_in_metainfo\n    META_KEYS = {\n        'img_path': 'img_path',\n        'gt_path': 'gt_path',\n        'merged_path': 'merged_path',\n        'trimap_path': 'trimap_path',\n        'ori_shape': 'ori_shape',\n        'img_shape': 'img_shape',\n        'ori_merged_shape': 'ori_merged_shape',\n        'ori_trimap_shape': 'ori_trimap_shape',\n        'trimap_channel_order': 'trimap_channel_order',\n        'empty_box': 'empty_box',\n        'ori_img_shape': 'ori_img_shape',\n        'ori_gt_shape': 'ori_gt_shape',\n        'img_channel_order': 'img_channel_order',\n        'gt_channel_order': 'gt_channel_order',\n        'gt_color_type': 'gt_color_type',\n        'img_color_type': 'img_color_type',\n        'sample_idx': 'sample_idx',\n        'num_input_frames': 'num_input_frames',\n        'num_output_frames': 'num_output_frames',\n        'mask_bbox': 'mask_bbox',\n        # for LIIF\n        'coord': 'coord',\n        'cell': 'cell',\n    }\n\n    # source_key_in_results: target_key_in_datafield\n    DATA_KEYS = {\n        'gt': 'gt_img',\n        'gt_label': 'gt_label',\n        'gt_heatmap': 'gt_heatmap',\n        'gt_unsharp': 'gt_unsharp',\n        'merged': 'gt_merged',\n        'ori_alpha': 'ori_alpha',\n        'fg': 'gt_fg',\n        'bg': 'gt_bg',\n        'gt_rgb': 'gt_rgb',\n        'alpha': 'gt_alpha',\n        'img_lq': 'img_lq',\n        'ref': 'ref_img',\n        'ref_lq': 'ref_lq',\n        'mask': 'mask',\n        'trimap': 'trimap',\n        'gray': 'gray',\n        'cropped_img': 'cropped_img',\n        'pred_img': 'pred_img',\n        'ori_trimap': 'ori_trimap',\n        # For text to images\n        'prompt': 'prompt',\n        # For StyleGAN\n        'latent': 'latent',\n        'feats': 'feats'\n    }\n\n    def set_predefined_data(self, data: dict) -> None:\n        \"\"\"set or change pre-defined key-value pairs in ``data_field`` by\n        parameter ``data``.\n\n        Args:\n            data (dict): A dict contains annotations of image or\n                model predictions.\n        \"\"\"\n\n        metainfo = {\n            self.META_KEYS[k]: v\n            for (k, v) in data.items() if k in self.META_KEYS\n        }\n        self.set_metainfo(metainfo)\n\n        data = {\n            self.DATA_KEYS[k]: v\n            for (k, v) in data.items() if k in self.DATA_KEYS\n        }\n        self.set_tensor_data(data)\n\n    def set_tensor_data(self, data: dict) -> None:\n        \"\"\"convert input data to tensor, and then set or change key-value pairs\n        in ``data_field`` by parameter ``data``.\n\n        Args:\n            data (dict): A dict contains annotations of image or\n                model predictions.\n        \"\"\"\n        assert isinstance(data,\n                          dict), f'data should be a `dict` but got {data}'\n        for k, v in data.items():\n            if k == 'gt_label':\n                self.set_gt_label(v)\n            elif k == 'prompt':\n                self.set_field(v, k, dtype=(str, list))\n            else:\n                self.set_field(all_to_tensor(v), k, dtype=torch.Tensor)\n\n    def set_gt_label(\n        self, value: Union[np.ndarray, torch.Tensor, Sequence[Number], Number]\n    ) -> 'DataSample':\n        \"\"\"Set label of ``gt_label``.\"\"\"\n        label = format_label(value, self.get('num_classes'))\n        if 'gt_label' in self:\n            self.gt_label.label = label.label\n        else:\n            self.gt_label = label\n        return self\n\n    @property\n    def gt_label(self):\n        \"\"\"This the function to fetch gt label.\n\n        Returns:\n            LabelData: gt label.\n        \"\"\"\n        return self._gt_label\n\n    @gt_label.setter\n    def gt_label(self, value: LabelData):\n        \"\"\"This is the function to set gt label.\n\n        Args:\n            value (LabelData): gt label.\n        \"\"\"\n        self.set_field(value, '_gt_label', dtype=LabelData)\n\n    @gt_label.deleter\n    def gt_label(self):\n        \"\"\"Delete gt label.\"\"\"\n        del self._gt_label\n\n    @classmethod\n    def stack(cls, data_samples: Sequence['DataSample']) -> 'DataSample':\n        \"\"\"Stack a list of data samples to one. All tensor fields will be\n        stacked at first dimension. Otherwise the values will be saved in a\n        list.\n\n        Args:\n            data_samples (Sequence['DataSample']): A sequence of\n                `DataSample` to stack.\n\n        Returns:\n            DataSample: The stacked data sample.\n        \"\"\"\n        # 1. check key consistency\n        keys = data_samples[0].keys()\n        assert all([data.keys() == keys for data in data_samples])\n\n        meta_keys = data_samples[0].metainfo_keys()\n        assert all(\n            [data.metainfo_keys() == meta_keys for data in data_samples])\n\n        # 2. stack data\n        stacked_data_sample = DataSample()\n        for k in keys:\n            values = [getattr(data, k) for data in data_samples]\n            # 3. check type consistent\n            value_type = type(values[0])\n            assert all([type(val) == value_type for val in values])\n\n            # 4. stack\n            if isinstance(values[0], torch.Tensor):\n                stacked_value = torch.stack(values)\n            elif isinstance(values[0], LabelData):\n                labels = [data.label for data in values]\n                values = torch.stack(labels)\n                stacked_value = LabelData(label=values)\n            else:\n                stacked_value = values\n            stacked_data_sample.set_field(stacked_value, k)\n\n        # 5. stack metainfo\n        for k in meta_keys:\n            values = [data.metainfo[k] for data in data_samples]\n            stacked_data_sample.set_metainfo({k: values})\n\n        return stacked_data_sample\n\n    def split(self,\n              allow_nonseq_value: bool = False) -> Sequence['DataSample']:\n        \"\"\"Split a sequence of data sample in the first dimension.\n\n        Args:\n            allow_nonseq_value (bool): Whether allow non-sequential data in\n                split operation. If True, non-sequential data will be copied\n                for all split data samples. Otherwise, an error will be\n                raised. Defaults to False.\n\n        Returns:\n            Sequence[DataSample]: The list of data samples after splitting.\n        \"\"\"\n        # 1. split\n        data_sample_list = [DataSample() for _ in range(len(self))]\n        for k in self.all_keys():\n            stacked_value = self.get(k)\n            if isinstance(stacked_value, torch.Tensor):\n                # split tensor shape like (N, *shape) to N (*shape) tensors\n                values = [v for v in stacked_value]\n            elif isinstance(stacked_value, LabelData):\n                # split tensor shape like (N, *shape) to N (*shape) tensors\n                labels = [l_ for l_ in stacked_value.label]\n                values = [LabelData(label=l_) for l_ in labels]\n            elif isinstance(stacked_value, DataSample):\n                values = stacked_value.split()\n            else:\n                if is_splitable_var(stacked_value):\n                    values = stacked_value\n                elif allow_nonseq_value:\n                    values = [deepcopy(stacked_value)] * len(self)\n                else:\n                    raise TypeError(\n                        f'\\'{k}\\' is non-sequential data and '\n                        '\\'allow_nonseq_value\\' is False. Please check your '\n                        'data sample or set \\'allow_nonseq_value\\' as True '\n                        f'to copy field \\'{k}\\' for all split data sample.')\n\n            field = 'metainfo' if k in self.metainfo_keys() else 'data'\n            for data, v in zip(data_sample_list, values):\n                data.set_field(v, k, field_type=field)\n\n        return data_sample_list\n\n    def __len__(self):\n        \"\"\"Get the length of the data sample.\"\"\"\n\n        value_length = []\n        for v in chain(self.values(), self.metainfo_values()):\n            if isinstance(v, LabelData):\n                value_length.append(v.label.shape[0])\n            elif is_splitable_var(v):\n                value_length.append(len(v))\n            else:\n                continue\n\n        # NOTE: If length of values are not same or the current data sample\n        # is empty, return length as 1\n        if len(list(set(value_length))) != 1:\n            return 1\n\n        length = value_length[0]\n        return length\n"
  },
  {
    "path": "mmagic/utils/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .cli import modify_args\nfrom .img_utils import (all_to_tensor, can_convert_to_image, get_box_info,\n                        reorder_image, tensor2img, to_numpy)\nfrom .io_utils import MMAGIC_CACHE_DIR, download_from_url\n# TODO replace with engine's API\nfrom .logger import print_colored_log\nfrom .sampler import get_sampler\nfrom .setup_env import register_all_modules, try_import\nfrom .trans_utils import (add_gaussian_noise, adjust_gamma, bbox2mask,\n                          brush_stroke_mask, get_irregular_mask, make_coord,\n                          random_bbox, random_choose_unknown)\nfrom .typing import ConfigType, ForwardInputs, LabelVar, NoiseVar, SampleList\n\n__all__ = [\n    'modify_args', 'print_colored_log', 'register_all_modules', 'try_import',\n    'ForwardInputs', 'SampleList', 'NoiseVar', 'ConfigType', 'LabelVar',\n    'MMAGIC_CACHE_DIR', 'download_from_url', 'get_sampler', 'tensor2img',\n    'random_choose_unknown', 'add_gaussian_noise', 'adjust_gamma',\n    'make_coord', 'bbox2mask', 'brush_stroke_mask', 'get_irregular_mask',\n    'random_bbox', 'reorder_image', 'to_numpy', 'get_box_info',\n    'can_convert_to_image', 'all_to_tensor'\n]\n"
  },
  {
    "path": "mmagic/utils/cli.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport re\nimport sys\nimport warnings\n\n\ndef modify_args():\n    \"\"\"Modify args of argparse.ArgumentParser.\"\"\"\n    for i, v in enumerate(sys.argv):\n        if i == 0:\n            assert v.endswith('.py')\n        elif re.match(r'--\\w+_.*', v):\n            new_arg = v.replace('_', '-')\n            warnings.warn(\n                f'command line argument {v} is deprecated, '\n                f'please use {new_arg} instead.',\n                category=DeprecationWarning,\n            )\n            sys.argv[i] = new_arg\n"
  },
  {
    "path": "mmagic/utils/collect_env.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmcv.utils import collect_env as collect_base_env\nfrom mmengine.utils import get_git_hash\n\nimport mmagic\n\n\ndef collect_env():\n    \"\"\"Collect the information of the running environments.\"\"\"\n    env_info = collect_base_env()\n    env_info['MMagic'] = f'{mmagic.__version__}+{get_git_hash()[:7]}'\n\n    return env_info\n\n\nif __name__ == '__main__':\n    for name, val in collect_env().items():\n        print('{}: {}'.format(name, val))\n"
  },
  {
    "path": "mmagic/utils/img_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import List, Tuple\n\nimport numpy as np\nimport torch\nfrom mmcv.transforms import to_tensor\nfrom torchvision.utils import make_grid\n\n\ndef can_convert_to_image(value):\n    \"\"\"Judge whether the input value can be converted to image tensor via\n    :func:`images_to_tensor` function.\n\n    Args:\n        value (any): The input value.\n\n    Returns:\n        bool: If true, the input value can convert to image with\n            :func:`images_to_tensor`, and vice versa.\n    \"\"\"\n    if isinstance(value, (List, Tuple)):\n        return all([can_convert_to_image(v) for v in value])\n    elif isinstance(value, np.ndarray) and len(value.shape) > 1:\n        return True\n    elif isinstance(value, torch.Tensor):\n        return True\n    else:\n        return False\n\n\ndef image_to_tensor(img):\n    \"\"\"Trans image to tensor.\n\n    Args:\n        img (np.ndarray): The original image.\n\n    Returns:\n        Tensor: The output tensor.\n    \"\"\"\n\n    if len(img.shape) < 3:\n        img = np.expand_dims(img, -1)\n    img = np.ascontiguousarray(img)\n    tensor = to_tensor(img).permute(2, 0, 1).contiguous()\n\n    return tensor\n\n\ndef all_to_tensor(value):\n    \"\"\"Trans image and sequence of frames to tensor.\n\n    Args:\n        value (np.ndarray | list[np.ndarray] | Tuple[np.ndarray]):\n            The original image or list of frames.\n\n    Returns:\n        Tensor: The output tensor.\n    \"\"\"\n\n    if not can_convert_to_image(value):\n        return value\n\n    if isinstance(value, (List, Tuple)):\n        # sequence of frames\n        if len(value) == 1:\n            tensor = image_to_tensor(value[0])\n        else:\n            frames = [image_to_tensor(v) for v in value]\n            tensor = torch.stack(frames, dim=0)\n    elif isinstance(value, np.ndarray):\n        tensor = image_to_tensor(value)\n    else:\n        # Maybe the data has been converted to Tensor.\n        tensor = to_tensor(value)\n\n    return tensor\n\n\ndef tensor2img(tensor, out_type=np.uint8, min_max=(0, 1)):\n    \"\"\"Convert torch Tensors into image numpy arrays.\n\n    After clamping to (min, max), image values will be normalized to [0, 1].\n\n    For different tensor shapes, this function will have different behaviors:\n\n        1. 4D mini-batch Tensor of shape (N x 3/1 x H x W):\n            Use `make_grid` to stitch images in the batch dimension, and then\n            convert it to numpy array.\n        2. 3D Tensor of shape (3/1 x H x W) and 2D Tensor of shape (H x W):\n            Directly change to numpy array.\n\n    Note that the image channel in input tensors should be RGB order. This\n    function will convert it to cv2 convention, i.e., (H x W x C) with BGR\n    order.\n\n    Args:\n        tensor (Tensor | list[Tensor]): Input tensors.\n        out_type (numpy type): Output types. If ``np.uint8``, transform outputs\n            to uint8 type with range [0, 255]; otherwise, float type with\n            range [0, 1]. Default: ``np.uint8``.\n        min_max (tuple): min and max values for clamp.\n\n    Returns:\n        (Tensor | list[Tensor]): 3D ndarray of shape (H x W x C) or 2D ndarray\n        of shape (H x W).\n    \"\"\"\n    if not (torch.is_tensor(tensor) or\n            (isinstance(tensor, list)\n             and all(torch.is_tensor(t) for t in tensor))):\n        raise TypeError(\n            f'tensor or list of tensors expected, got {type(tensor)}')\n\n    if torch.is_tensor(tensor):\n        tensor = [tensor]\n    result = []\n    for _tensor in tensor:\n        # Squeeze two times so that:\n        # 1. (1, 1, h, w) -> (h, w) or\n        # 3. (1, 3, h, w) -> (3, h, w) or\n        # 2. (n>1, 3/1, h, w) -> (n>1, 3/1, h, w)\n        _tensor = _tensor.squeeze(0).squeeze(0)\n        _tensor = _tensor.float().detach().cpu().clamp_(*min_max)\n        _tensor = (_tensor - min_max[0]) / (min_max[1] - min_max[0])\n        n_dim = _tensor.dim()\n        if n_dim == 4:\n            img_np = make_grid(\n                _tensor, nrow=int(math.sqrt(_tensor.size(0))),\n                normalize=False).numpy()\n            img_np = np.transpose(img_np[[2, 1, 0], :, :], (1, 2, 0))\n        elif n_dim == 3:\n            img_np = _tensor.numpy()\n            img_np = np.transpose(img_np[[2, 1, 0], :, :], (1, 2, 0))\n        elif n_dim == 2:\n            img_np = _tensor.numpy()\n        else:\n            raise ValueError('Only support 4D, 3D or 2D tensor. '\n                             f'But received with dimension: {n_dim}')\n        if out_type == np.uint8:\n            # Unlike MATLAB, numpy.unit8() WILL NOT round by default.\n            img_np = (img_np * 255.0).round()\n        img_np = img_np.astype(out_type)\n        result.append(img_np)\n    result = result[0] if len(result) == 1 else result\n    return result\n\n\ndef reorder_image(img, input_order='HWC'):\n    \"\"\"Reorder images to 'HWC' order.\n\n    If the input_order is (h, w), return (h, w, 1);\n    If the input_order is (c, h, w), return (h, w, c);\n    If the input_order is (h, w, c), return as it is.\n\n    Args:\n        img (np.ndarray): Input image.\n        input_order (str): Whether the input order is 'HWC' or 'CHW'.\n            If the input image shape is (h, w), input_order will not have\n            effects. Default: 'HWC'.\n\n    Returns:\n        np.ndarray: Reordered image.\n    \"\"\"\n\n    if input_order not in ['HWC', 'CHW']:\n        raise ValueError(\n            f'Wrong input_order {input_order}. Supported input_orders are '\n            '\"HWC\" and \"CHW\"')\n    if len(img.shape) == 2:\n        img = img[..., None]\n        return img\n    if input_order == 'CHW':\n        if isinstance(img, np.ndarray):\n            img = img.transpose(1, 2, 0)\n        elif isinstance(img, torch.Tensor):\n            img = img.permute(1, 2, 0)\n    return img\n\n\ndef to_numpy(img, dtype=np.float64):\n    \"\"\"Convert data into numpy arrays of dtype.\n\n    Args:\n        img (Tensor | np.ndarray): Input data.\n        dtype (np.dtype): Set the data type of the output. Default: np.float64\n\n    Returns:\n        img (np.ndarray): Converted numpy arrays data.\n    \"\"\"\n    if isinstance(img, torch.Tensor):\n        img = img.cpu().numpy()\n    elif not isinstance(img, np.ndarray):\n        raise TypeError('Only support torch.tensor and np.ndarray, '\n                        f'but got type {type(img)}')\n\n    img = img.astype(dtype)\n\n    return img\n\n\ndef get_box_info(pred_bbox, original_shape, final_size):\n    \"\"\"\n\n    Args:\n        pred_bbox: The bounding box for the instance\n        original_shape: Original image shape\n        final_size: Size of the final output\n\n    Returns:\n        List: [L_pad, R_pad, T_pad, B_pad, rh, rw]\n    \"\"\"\n    assert len(pred_bbox) == 4\n    resize_startx = int(pred_bbox[0] / original_shape[0] * final_size)\n    resize_starty = int(pred_bbox[1] / original_shape[1] * final_size)\n    resize_endx = int(pred_bbox[2] / original_shape[0] * final_size)\n    resize_endy = int(pred_bbox[3] / original_shape[1] * final_size)\n    rh = resize_endx - resize_startx\n    rw = resize_endy - resize_starty\n    if rh < 1:\n        if final_size - resize_endx > 1:\n            resize_endx += 1\n        else:\n            resize_startx -= 1\n        rh = 1\n    if rw < 1:\n        if final_size - resize_endy > 1:\n            resize_endy += 1\n        else:\n            resize_starty -= 1\n        rw = 1\n    L_pad = resize_startx\n    R_pad = final_size - resize_endx\n    T_pad = resize_starty\n    B_pad = final_size - resize_endy\n    return [L_pad, R_pad, T_pad, B_pad, rh, rw]\n"
  },
  {
    "path": "mmagic/utils/io_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport hashlib\nimport os\n\nimport click\nimport mmengine\nimport requests\nimport torch.distributed as dist\nfrom mmengine.dist import get_dist_info\nfrom requests.exceptions import InvalidURL, RequestException, Timeout\n\nMMAGIC_CACHE_DIR = os.path.expanduser('~') + '/.cache/openmmlab/mmagic/'\n\n\ndef get_content_from_url(url, timeout=15, stream=False):\n    \"\"\"Get content from url.\n\n    Args:\n        url (str): Url for getting content.\n        timeout (int): Set the socket timeout. Default: 15.\n    \"\"\"\n    try:\n        response = requests.get(url, timeout=timeout, stream=stream)\n    except InvalidURL as err:\n        raise err  # type: ignore\n    except Timeout as err:\n        raise err  # type: ignore\n    except RequestException as err:\n        raise err  # type: ignore\n    except Exception as err:\n        raise err  # type: ignore\n    return response\n\n\ndef download_from_url(url,\n                      dest_path=None,\n                      dest_dir=MMAGIC_CACHE_DIR,\n                      hash_prefix=None):\n    \"\"\"Download object at the given URL to a local path.\n\n    Args:\n        url (str): URL of the object to download.\n        dest_path (str): Path where object will be saved.\n        dest_dir (str): The directory of the destination. Defaults to\n            ``'~/.cache/openmmlab/mmagic/'``.\n        hash_prefix (string, optional): If not None, the SHA256 downloaded\n            file should start with `hash_prefix`. Default: None.\n\n    Return:\n        str: path for the downloaded file.\n    \"\"\"\n    # get the exact destination path\n    if dest_path is None:\n        filename = url.split('/')[-1]\n        dest_path = os.path.join(dest_dir, filename)\n\n    if dest_path.startswith('~'):\n        dest_path = os.path.expanduser('~') + dest_path[1:]\n\n    # avoid downloading existed file\n    if os.path.exists(dest_path):\n        return dest_path\n\n    rank, ws = get_dist_info()\n\n    # only download from the master process\n    if rank == 0:\n        # mkdir\n        _dir = os.path.dirname(dest_path)\n        mmengine.mkdir_or_exist(_dir)\n\n        if hash_prefix is not None:\n            sha256 = hashlib.sha256()\n\n        response = get_content_from_url(url, stream=True)\n        size = int(response.headers.get('content-length'))\n        with open(dest_path, 'wb') as fw:\n            content_iter = response.iter_content(chunk_size=1024)\n            with click.progressbar(content_iter, length=size / 1024) as chunks:\n                for chunk in chunks:\n                    if chunk:\n                        fw.write(chunk)\n                        fw.flush()\n                        if hash_prefix is not None:\n                            sha256.update(chunk)\n\n        if hash_prefix is not None:\n            digest = sha256.hexdigest()\n            if digest[:len(hash_prefix)] != hash_prefix:\n                raise RuntimeError(\n                    f'invalid hash value, expected \"{hash_prefix}\", but got '\n                    f'\"{digest}\"')\n\n    # sync the other processes\n    if ws > 1:\n        dist.barrier()\n\n    return dest_path\n"
  },
  {
    "path": "mmagic/utils/logger.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport logging\n\nfrom mmengine.logging import print_log\nfrom termcolor import colored\n\n\ndef print_colored_log(msg, level=logging.INFO, color='magenta'):\n    \"\"\"Print colored log with default logger.\n\n    Args:\n        msg (str): Message to log.\n        level (int): The root logger level. Note that only the process of\n            rank 0 is affected, while other processes will set the level to\n            \"Error\" and be silent most of the time.Log level,\n            default to 'info'.\n        color (str, optional): Color 'magenta'.\n    \"\"\"\n    print_log(colored(msg, color), 'current', level)\n"
  },
  {
    "path": "mmagic/utils/sampler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Optional\n\nfrom mmengine.dataset import pseudo_collate\nfrom mmengine.runner import Runner\nfrom torch.utils.data import ConcatDataset, DataLoader\n\n\ndef _check_keys(sample_kwargs: dict, key: str) -> None:\n    \"\"\"Check whether target `key` is in the `sample_kwargs`.\"\"\"\n    assert key in sample_kwargs, (\n        f'\\'{key}\\' must be set in \\'sample_kwargs\\'. But only find '\n        f'following keys: \\'{list(sample_kwargs.keys())}\\'.')\n\n\ndef get_sampler(sample_kwargs: dict, runner: Optional[Runner]):\n    \"\"\"Get a sampler to loop input data.\n\n    Args:\n        sample_kwargs (dict): _description_\n        runner (Optional[Runner]): _description_\n\n    Returns:\n        _type_: _description_\n    \"\"\"\n    _check_keys(sample_kwargs, 'type')\n    sampler_kwargs_ = deepcopy(sample_kwargs)\n    sampler_type = sampler_kwargs_.pop('type')\n    sampler = eval(f'{sampler_type}Sampler')(sampler_kwargs_, runner)\n    return sampler\n\n\nclass ArgumentsSampler:\n    \"\"\"Dummy sampler only return input args multiple times.\"\"\"\n\n    def __init__(self,\n                 sample_kwargs: dict,\n                 runner: Optional[Runner] = None) -> None:\n        _check_keys(sample_kwargs, 'max_times')\n        assert isinstance(sample_kwargs['max_times'], int), (\n            '\\'max_times\\' in \\'sample_kwargs\\' must be type of int.\\'.')\n\n        self.sample_kwargs = deepcopy(sample_kwargs)\n        self.max_times = self.sample_kwargs.pop('max_times')\n        self.forward_kwargs = self.sample_kwargs.pop('forward_kwargs')\n        # set default num_batches from forward_kwargs\n        self.forward_kwargs.setdefault('num_batches',\n                                       self.sample_kwargs['num_batches'])\n        self.idx = 0\n\n    def __iter__(self):\n        self.idx = 0\n        return self\n\n    def __next__(self):\n        if self.idx >= self.max_times:\n            raise StopIteration\n        self.idx += 1\n        return dict(inputs=deepcopy(self.forward_kwargs))\n\n\nclass NoiseSampler:\n    \"\"\"Noise sampler to by call `models.noise_fn` to generate noise.\"\"\"\n\n    def __init__(self, sample_kwargs: dict, runner: Runner) -> None:\n        _check_keys(sample_kwargs, 'max_times')\n        _check_keys(sample_kwargs, 'num_batches')\n\n        self.sample_kwargs = deepcopy(sample_kwargs)\n        self.max_times = self.sample_kwargs.pop('max_times')\n        self.num_batches = self.sample_kwargs.pop('num_batches')\n\n        module = runner.model\n        if hasattr(module, 'module'):\n            module = module.module\n        self.module = module\n\n        self.idx = 0\n\n    def __iter__(self):\n        self.idx = 0\n        return self\n\n    def __next__(self):\n        if self.idx >= self.max_times:\n            raise StopIteration\n        self.idx += 1\n\n        noise = self.module.noise_fn(num_batches=self.num_batches)\n        sample_kwargs = deepcopy(self.sample_kwargs)\n        sample_kwargs['noise'] = noise\n        # return sample_kwargs\n        return dict(inputs=sample_kwargs)\n\n\nclass DataSampler:\n    \"\"\"Sampler loop the train_dataloader.\"\"\"\n\n    def __init__(self, sample_kwargs: dict, runner: Runner) -> None:\n        _check_keys(sample_kwargs, 'max_times')\n\n        self.sample_kwargs = deepcopy(sample_kwargs)\n        self.max_times = self.sample_kwargs.pop('max_times')\n\n        # build a new vanilla dataloader, because we should not reset the one\n        # used in the training process.\n        dataset = runner.train_dataloader.dataset\n        batch_size = runner.train_dataloader.batch_size\n        self._dataloader = DataLoader(\n            dataset, batch_size=batch_size, collate_fn=pseudo_collate)\n        self._iterator = iter(self._dataloader)\n\n    def __iter__(self):\n        self.idx = 0\n        return self\n\n    def __next__(self):\n        if self.idx >= self.max_times:\n            self._iterator = iter(self._dataloader)\n            raise StopIteration\n        self.idx += 1\n        return next(self._iterator)\n\n\nclass ValDataSampler:\n    \"\"\"Sampler loop the val_dataloader.\"\"\"\n\n    def __init__(self, sample_kwargs: dict, runner: Runner) -> None:\n        _check_keys(sample_kwargs, 'max_times')\n\n        self.sample_kwargs = deepcopy(sample_kwargs)\n        self.max_times = self.sample_kwargs.pop('max_times')\n\n        # build a new vanilla dataloader, because we should not reset the one\n        # used in the training process.\n        if hasattr(runner.val_loop, 'dataloader'):\n            dataset = runner.val_loop.dataloader.dataset\n            batch_size = runner.val_loop.dataloader.batch_size\n        else:\n            # MultiValLoop use `dataloaders` instead `dataloader`\n            loaders = runner.val_loop.dataloaders\n            dataset = ConcatDataset([loader.dataset for loader in loaders])\n            batch_size = loaders[0].batch_size\n\n        self._dataloader = DataLoader(\n            dataset, batch_size=batch_size, collate_fn=pseudo_collate)\n        self._iterator = iter(self._dataloader)\n\n    def __iter__(self):\n        self.idx = 0\n        return self\n\n    def __next__(self):\n        if self.idx >= self.max_times:\n            self._iterator = iter(self._dataloader)\n            raise StopIteration\n        self.idx += 1\n        return next(self._iterator)\n"
  },
  {
    "path": "mmagic/utils/setup_env.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport datetime\nimport importlib\nimport warnings\nfrom types import ModuleType\nfrom typing import Optional\n\nfrom mmengine import DefaultScope\n\n\ndef register_all_modules(init_default_scope: bool = True) -> None:\n    \"\"\"Register all modules in mmagic into the registries.\n\n    Args:\n        init_default_scope (bool): Whether initialize the mmagic default scope.\n            When `init_default_scope=True`, the global default scope will be\n            set to `mmagic`, and all registries will build modules from\n            mmagic's registry node.\n            To understand more about the registry, please refer\n            to https://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html\n            Defaults to True.\n    \"\"\"  # noqa\n    import mmagic.datasets  # noqa: F401,F403\n    import mmagic.engine  # noqa: F401,F403\n    import mmagic.evaluation  # noqa: F401,F403\n    import mmagic.models  # noqa: F401,F403\n    import mmagic.visualization  # noqa: F401,F403\n\n    if init_default_scope:\n        never_created = DefaultScope.get_current_instance() is None \\\n            or not DefaultScope.check_instance_created('mmagic')\n        if never_created:\n            DefaultScope.get_instance('mmagic', scope_name='mmagic')\n            return\n        current_scope = DefaultScope.get_current_instance()\n        if current_scope.scope_name != 'mmagic':\n            warnings.warn('The current default scope '\n                          f'\"{current_scope.scope_name}\" is not \"mmagic\", '\n                          '`register_all_modules` will force the current'\n                          'default scope to be \"mmagic\". If this is not '\n                          'expected, please set `init_default_scope=False`.')\n            # avoid name conflict\n            new_instance_name = f'mmagic-{datetime.datetime.now()}'\n            DefaultScope.get_instance(new_instance_name, scope_name='mmagic')\n\n\ndef try_import(name: str) -> Optional[ModuleType]:\n    \"\"\"Try to import a module.\n\n    Args:\n        name (str): Specifies what module to import in absolute or relative\n            terms (e.g. either pkg.mod or ..mod).\n    Returns:\n        ModuleType or None: If importing successfully, returns the imported\n        module, otherwise returns None.\n    \"\"\"\n    try:\n        return importlib.import_module(name)\n    except ImportError:\n        return None\n"
  },
  {
    "path": "mmagic/utils/trans_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport logging\nimport math\n\nimport cv2\nimport numpy as np\nimport torch\nfrom mmengine.logging import print_log\nfrom mmengine.utils import is_tuple_of\nfrom PIL import Image, ImageDraw\n\n\ndef make_coord(shape, ranges=None, flatten=True):\n    \"\"\"Make coordinates at grid centers.\n\n    Args:\n        shape (tuple): shape of image.\n        ranges (tuple): range of coordinate value. Default: None.\n        flatten (bool): flatten to (n, 2) or Not. Default: True.\n\n    Returns:\n        coord (Tensor): coordinates.\n    \"\"\"\n    coord_seqs = []\n    for i, n in enumerate(shape):\n        if ranges is None:\n            v0, v1 = -1, 1\n        else:\n            v0, v1 = ranges[i]\n        r = (v1 - v0) / (2 * n)\n        seq = v0 + r + (2 * r) * torch.arange(n).float()\n        coord_seqs.append(seq)\n\n    if 'indexing' in torch.meshgrid.__code__.co_varnames:\n        coord = torch.meshgrid(*coord_seqs, indexing='ij')\n    else:\n        coord = torch.meshgrid(*coord_seqs)\n    coord = torch.stack(coord, dim=-1)\n    if flatten:\n        coord = coord.view(-1, coord.shape[-1])\n    return coord\n\n\ndef bbox2mask(img_shape, bbox, dtype='uint8'):\n    \"\"\"Generate mask in np.ndarray from bbox.\n\n    The returned mask has the shape of (h, w, 1). '1' indicates the\n    hole and '0' indicates the valid regions.\n\n    We prefer to use `uint8` as the data type of masks, which may be different\n    from other codes in the community.\n\n    Args:\n        img_shape (tuple[int]): The size of the image.\n        bbox (tuple[int]): Configuration tuple, (top, left, height, width)\n        np.dtype (str): Indicate the data type of returned masks.\n            Default: 'uint8'\n\n    Returns:\n        mask (np.ndarray): Mask in the shape of (h, w, 1).\n    \"\"\"\n\n    height, width = img_shape[:2]\n\n    mask = np.zeros((height, width, 1), dtype=dtype)\n    mask[bbox[0]:bbox[0] + bbox[2], bbox[1]:bbox[1] + bbox[3], :] = 1\n\n    return mask\n\n\ndef brush_stroke_mask(img_shape,\n                      num_vertices=(4, 12),\n                      mean_angle=2 * math.pi / 5,\n                      angle_range=2 * math.pi / 15,\n                      brush_width=(12, 40),\n                      max_loops=4,\n                      dtype='uint8'):\n    \"\"\"Generate free-form mask.\n\n    The method of generating free-form mask is in the following paper:\n    Free-Form Image Inpainting with Gated Convolution.\n\n    When you set the config of this type of mask. You may note the usage of\n    `np.random.randint` and the range of `np.random.randint` is [left, right).\n\n    We prefer to use `uint8` as the data type of masks, which may be different\n    from other codes in the community.\n\n    TODO: Rewrite the implementation of this function.\n\n    Args:\n        img_shape (tuple[int]): Size of the image.\n        num_vertices (int | tuple[int]): Min and max number of vertices. If\n            only give an integer, we will fix the number of vertices.\n            Default: (4, 12).\n        mean_angle (float): Mean value of the angle in each vertex. The angle\n            is measured in radians. Default: 2 * math.pi / 5.\n        angle_range (float): Range of the random angle.\n            Default: 2 * math.pi / 15.\n        brush_width (int | tuple[int]): (min_width, max_width). If only give\n            an integer, we will fix the width of brush. Default: (12, 40).\n        max_loops (int): The max number of for loops of drawing strokes.\n            Default: 4.\n        np.dtype (str): Indicate the data type of returned masks.\n            Default: 'uint8'.\n\n    Returns:\n        mask (np.ndarray): Mask in the shape of (h, w, 1).\n    \"\"\"\n\n    img_h, img_w = img_shape[:2]\n    if isinstance(num_vertices, int):\n        min_num_vertices, max_num_vertices = num_vertices, num_vertices + 1\n    elif isinstance(num_vertices, tuple):\n        min_num_vertices, max_num_vertices = num_vertices\n    else:\n        raise TypeError('The type of num_vertices should be int'\n                        f'or tuple[int], but got type: {num_vertices}')\n\n    if isinstance(brush_width, tuple):\n        min_width, max_width = brush_width\n    elif isinstance(brush_width, int):\n        min_width, max_width = brush_width, brush_width + 1\n    else:\n        raise TypeError('The type of brush_width should be int'\n                        f'or tuple[int], but got type: {brush_width}')\n\n    average_radius = math.sqrt(img_h * img_h + img_w * img_w) / 8\n    mask = Image.new('L', (img_w, img_h), 0)\n\n    loop_num = np.random.randint(1, max_loops)\n    num_vertex_list = np.random.randint(\n        min_num_vertices, max_num_vertices, size=loop_num)\n    angle_min_list = np.random.uniform(0, angle_range, size=loop_num)\n    angle_max_list = np.random.uniform(0, angle_range, size=loop_num)\n\n    for loop_n in range(loop_num):\n        num_vertex = num_vertex_list[loop_n]\n        angle_min = mean_angle - angle_min_list[loop_n]\n        angle_max = mean_angle + angle_max_list[loop_n]\n        angles = []\n        vertex = []\n\n        # set random angle on each vertex\n        angles = np.random.uniform(angle_min, angle_max, size=num_vertex)\n        reverse_mask = (np.arange(num_vertex, dtype=np.float32) % 2) == 0\n        angles[reverse_mask] = 2 * math.pi - angles[reverse_mask]\n\n        h, w = mask.size\n\n        # set random vertices\n        vertex.append((np.random.randint(0, w), np.random.randint(0, h)))\n        r_list = np.random.normal(\n            loc=average_radius, scale=average_radius // 2, size=num_vertex)\n        for i in range(num_vertex):\n            r = np.clip(r_list[i], 0, 2 * average_radius)\n            new_x = np.clip(vertex[-1][0] + r * math.cos(angles[i]), 0, w)\n            new_y = np.clip(vertex[-1][1] + r * math.sin(angles[i]), 0, h)\n            vertex.append((int(new_x), int(new_y)))\n        # draw brush strokes according to the vertex and angle list\n        draw = ImageDraw.Draw(mask)\n        width = np.random.randint(min_width, max_width)\n        draw.line(vertex, fill=1, width=width)\n        for v in vertex:\n            draw.ellipse((v[0] - width // 2, v[1] - width // 2,\n                          v[0] + width // 2, v[1] + width // 2),\n                         fill=1)\n    # randomly flip the mask\n    if np.random.normal() > 0:\n        mask.transpose(Image.FLIP_LEFT_RIGHT)\n    if np.random.normal() > 0:\n        mask.transpose(Image.FLIP_TOP_BOTTOM)\n    mask = np.array(mask).astype(dtype=getattr(np, dtype))\n    mask = mask[:, :, None]\n    return mask\n\n\ndef random_bbox(img_shape, max_bbox_shape, max_bbox_delta=40, min_margin=20):\n    \"\"\"Generate a random bbox for the mask on a given image.\n\n    In our implementation, the max value cannot be obtained since we use\n    `np.random.randint`. And this may be different with other standard scripts\n    in the community.\n\n    Args:\n        img_shape (tuple[int]): The size of a image, in the form of (h, w).\n        max_bbox_shape (int | tuple[int]): Maximum shape of the mask box,\n            in the form of (h, w). If it is an integer, the mask box will be\n            square.\n        max_bbox_delta (int | tuple[int]): Maximum delta of the mask box,\n            in the form of (delta_h, delta_w). If it is an integer, delta_h\n            and delta_w will be the same. Mask shape will be randomly sampled\n            from the range of `max_bbox_shape - max_bbox_delta` and\n            `max_bbox_shape`. Default: (40, 40).\n        min_margin (int | tuple[int]): The minimum margin size from the\n            edges of mask box to the image boarder, in the form of\n            (margin_h, margin_w). If it is an integer, margin_h and margin_w\n            will be the same. Default: (20, 20).\n\n    Returns:\n        tuple[int]: The generated box, (top, left, h, w).\n    \"\"\"\n    if not isinstance(max_bbox_shape, tuple):\n        max_bbox_shape = (max_bbox_shape, max_bbox_shape)\n    if not isinstance(max_bbox_delta, tuple):\n        max_bbox_delta = (max_bbox_delta, max_bbox_delta)\n    if not isinstance(min_margin, tuple):\n        min_margin = (min_margin, min_margin)\n    assert is_tuple_of(max_bbox_shape, int)\n    assert is_tuple_of(max_bbox_delta, int)\n    assert is_tuple_of(min_margin, int)\n\n    img_h, img_w = img_shape[:2]\n    max_mask_h, max_mask_w = max_bbox_shape\n    max_delta_h, max_delta_w = max_bbox_delta\n    margin_h, margin_w = min_margin\n\n    if max_mask_h > img_h or max_mask_w > img_w:\n        raise ValueError(f'mask shape {max_bbox_shape} should be smaller than '\n                         f'image shape {img_shape}')\n    if (max_delta_h // 2 * 2 >= max_mask_h\n            or max_delta_w // 2 * 2 >= max_mask_w):\n        raise ValueError(f'mask delta {max_bbox_delta} should be smaller than'\n                         f'mask shape {max_bbox_shape}')\n    if img_h - max_mask_h < 2 * margin_h or img_w - max_mask_w < 2 * margin_w:\n        raise ValueError(f'Margin {min_margin} cannot be satisfied for img'\n                         f'shape {img_shape} and mask shape {max_bbox_shape}')\n\n    # get the max value of (top, left)\n    max_top = img_h - margin_h - max_mask_h\n    max_left = img_w - margin_w - max_mask_w\n    # randomly select a (top, left)\n    top = np.random.randint(margin_h, max_top)\n    left = np.random.randint(margin_w, max_left)\n    # randomly shrink the shape of mask box according to `max_bbox_delta`\n    # the center of box is fixed\n    delta_top = np.random.randint(0, max_delta_h // 2 + 1)\n    delta_left = np.random.randint(0, max_delta_w // 2 + 1)\n    top = top + delta_top\n    left = left + delta_left\n    h = max_mask_h - delta_top\n    w = max_mask_w - delta_left\n    return (top, left, h, w)\n\n\ndef random_irregular_mask(img_shape,\n                          num_vertices=(4, 8),\n                          max_angle=4,\n                          length_range=(10, 100),\n                          brush_width=(10, 40),\n                          dtype='uint8'):\n    \"\"\"Generate random irregular masks.\n\n    This is a modified version of free-form mask implemented in\n    'brush_stroke_mask'.\n\n    We prefer to use `uint8` as the data type of masks, which may be different\n    from other codes in the community.\n\n    TODO: Rewrite the implementation of this function.\n\n    Args:\n        img_shape (tuple[int]): Size of the image.\n        num_vertices (int | tuple[int]): Min and max number of vertices. If\n            only give an integer, we will fix the number of vertices.\n            Default: (4, 8).\n        max_angle (float): Max value of angle at each vertex. Default 4.0.\n        length_range (int | tuple[int]): (min_length, max_length). If only give\n            an integer, we will fix the length of brush. Default: (10, 100).\n        brush_width (int | tuple[int]): (min_width, max_width). If only give\n            an integer, we will fix the width of brush. Default: (10, 40).\n        np.dtype (str): Indicate the data type of returned masks.\n            Default: 'uint8'\n\n    Returns:\n        mask (np.ndarray): Mask in the shape of (h, w, 1).\n    \"\"\"\n\n    h, w = img_shape[:2]\n\n    mask = np.zeros((h, w), dtype=dtype)\n    if isinstance(length_range, int):\n        min_length, max_length = length_range, length_range + 1\n    elif isinstance(length_range, tuple):\n        min_length, max_length = length_range\n    else:\n        raise TypeError('The type of length_range should be int'\n                        f'or tuple[int], but got type: {length_range}')\n    if isinstance(num_vertices, int):\n        min_num_vertices, max_num_vertices = num_vertices, num_vertices + 1\n    elif isinstance(num_vertices, tuple):\n        min_num_vertices, max_num_vertices = num_vertices\n    else:\n        raise TypeError('The type of num_vertices should be int'\n                        f'or tuple[int], but got type: {num_vertices}')\n\n    if isinstance(brush_width, int):\n        min_brush_width, max_brush_width = brush_width, brush_width + 1\n    elif isinstance(brush_width, tuple):\n        min_brush_width, max_brush_width = brush_width\n    else:\n        raise TypeError('The type of brush_width should be int'\n                        f'or tuple[int], but got type: {brush_width}')\n\n    num_v = np.random.randint(min_num_vertices, max_num_vertices)\n\n    for i in range(num_v):\n        start_x = np.random.randint(w)\n        start_y = np.random.randint(h)\n        # from the start point, randomly setlect n \\in [1, 6] directions.\n        direction_num = np.random.randint(1, 6)\n        angle_list = np.random.randint(0, max_angle, size=direction_num)\n        length_list = np.random.randint(\n            min_length, max_length, size=direction_num)\n        brush_width_list = np.random.randint(\n            min_brush_width, max_brush_width, size=direction_num)\n        for direct_n in range(direction_num):\n            angle = 0.01 + angle_list[direct_n]\n            if i % 2 == 0:\n                angle = 2 * math.pi - angle\n            length = length_list[direct_n]\n            brush_w = brush_width_list[direct_n]\n            # compute end point according to the random angle\n            end_x = (start_x + length * np.sin(angle)).astype(np.int32)\n            end_y = (start_y + length * np.cos(angle)).astype(np.int32)\n\n            cv2.line(mask, (start_y, start_x), (end_y, end_x), 1, brush_w)\n            start_x, start_y = end_x, end_y\n    mask = np.expand_dims(mask, axis=2)\n\n    return mask\n\n\ndef get_irregular_mask(img_shape, area_ratio_range=(0.15, 0.5), **kwargs):\n    \"\"\"Get irregular mask with the constraints in mask ratio.\n\n    Args:\n        img_shape (tuple[int]): Size of the image.\n        area_ratio_range (tuple(float)): Contain the minimum and maximum area\n        ratio. Default: (0.15, 0.5).\n\n    Returns:\n        mask (np.ndarray): Mask in the shape of (h, w, 1).\n    \"\"\"\n\n    mask = random_irregular_mask(img_shape, **kwargs)\n    min_ratio, max_ratio = area_ratio_range\n\n    while not min_ratio < (np.sum(mask) /\n                           (img_shape[0] * img_shape[1])) < max_ratio:\n        mask = random_irregular_mask(img_shape, **kwargs)\n\n    return mask\n\n\n_integer_types = (\n    np.byte,\n    np.ubyte,  # 8 bits\n    np.short,\n    np.ushort,  # 16 bits\n    np.intc,\n    np.uintc,  # 16 or 32 or 64 bits\n    np.int_,\n    np.uint,  # 32 or 64 bits\n    np.longlong,\n    np.ulonglong)  # 64 bits\n\n_integer_ranges = {\n    t: (np.iinfo(t).min, np.iinfo(t).max)\n    for t in _integer_types\n}\n\ndtype_range = {\n    np.bool_: (False, True),\n    np.bool8: (False, True),\n    np.float16: (-1, 1),\n    np.float32: (-1, 1),\n    np.float64: (-1, 1)\n}\ndtype_range.update(_integer_ranges)\n\n\ndef dtype_limits(image, clip_negative=False):\n    \"\"\"Return intensity limits, i.e. (min, max) tuple, of the image's dtype.\n\n    This function is adopted from skimage:\n    https://github.com/scikit-image/scikit-image/blob/\n    7e4840bd9439d1dfb6beaf549998452c99f97fdd/skimage/util/dtype.py#L35\n\n    Args:\n        image (np.ndarray): Input image.\n        clip_negative (bool, optional): If True, clip the negative range\n            (i.e. return 0 for min intensity) even if the image dtype allows\n            negative values. Default: False.\n\n    Returns\n        tuple: Lower and upper intensity limits.\n    \"\"\"\n    imin, imax = dtype_range[image.dtype.type]\n    if clip_negative:\n        imin = 0\n    return imin, imax\n\n\ndef adjust_gamma(image, gamma=1, gain=1):\n    \"\"\"Performs Gamma Correction on the input image.\n\n    This function is adopted from skimage:\n    https://github.com/scikit-image/scikit-image/blob/\n    7e4840bd9439d1dfb6beaf549998452c99f97fdd/skimage/exposure/\n    exposure.py#L439-L494\n\n    Also known as Power Law Transform.\n    This function transforms the input image pixelwise according to the\n    equation ``O = I**gamma`` after scaling each pixel to the range 0 to 1.\n\n    Args:\n        image (np.ndarray): Input image.\n        gamma (float, optional): Non negative real number. Defaults to 1.\n        gain (float, optional): The constant multiplier. Defaults to 1.\n\n    Returns:\n        np.ndarray: Gamma corrected output image.\n    \"\"\"\n    if np.any(image < 0):\n        raise ValueError('Image Correction methods work correctly only on '\n                         'images with non-negative values. Use '\n                         'skimage.exposure.rescale_intensity.')\n\n    dtype = image.dtype.type\n\n    if gamma < 0:\n        raise ValueError('Gamma should be a non-negative real number.')\n\n    scale = float(dtype_limits(image, True)[1] - dtype_limits(image, True)[0])\n\n    out = ((image / scale)**gamma) * scale * gain\n    return out.astype(dtype)\n\n\ndef add_gaussian_noise(img: np.ndarray, mu, sigma):\n    \"\"\"Add Gaussian Noise on the input image.\n\n    Args:\n        img (np.ndarray): Input image.\n        mu (float): The mu value of the Gaussian function.\n        sigma (float): The sigma value of the Gaussian function.\n\n    Returns:\n        noisy_img (np.ndarray): Gaussian noisy output image.\n    \"\"\"\n    img = img.astype(np.float32)\n    gauss_noise = np.random.normal(mu, sigma, img.shape)\n    noisy_img = img + gauss_noise\n    noisy_img = np.clip(noisy_img, 0, 255)\n    return noisy_img\n\n\ndef random_choose_unknown(unknown, crop_size):\n    \"\"\"Randomly choose an unknown start (top-left) point for a given crop_size.\n\n    Args:\n        unknown (np.ndarray): The binary unknown mask.\n        crop_size (tuple[int]): The given crop size.\n\n    Returns:\n        tuple[int]: The top-left point of the chosen bbox.\n    \"\"\"\n    h, w = unknown.shape\n    crop_h, crop_w = crop_size\n    delta_h = center_h = crop_h // 2\n    delta_w = center_w = crop_w // 2\n\n    # mask out the validate area for selecting the cropping center\n    mask = np.zeros_like(unknown)\n    mask[delta_h:h - delta_h, delta_w:w - delta_w] = 1\n    if np.any(unknown & mask):\n        center_h_list, center_w_list = np.where(unknown & mask)\n    elif np.any(unknown):\n        center_h_list, center_w_list = np.where(unknown)\n    else:\n        print_log('No unknown pixels found!', level=logging.WARNING)\n        center_h_list = [center_h]\n        center_w_list = [center_w]\n    num_unknowns = len(center_h_list)\n    rand_ind = np.random.randint(num_unknowns)\n    center_h = center_h_list[rand_ind]\n    center_w = center_w_list[rand_ind]\n\n    # make sure the top-left point is valid\n    top = np.clip(center_h - delta_h, 0, h - crop_h)\n    left = np.clip(center_w - delta_w, 0, w - crop_w)\n\n    return top, left\n"
  },
  {
    "path": "mmagic/utils/typing.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import Callable, Dict, List, Sequence, Tuple, Union\n\nfrom mmengine.config import ConfigDict\nfrom mmengine.structures import BaseDataElement\nfrom torch import Tensor\n\nForwardInputs = Tuple[Dict[str, Union[Tensor, str, int]], Tensor]\nSampleList = Sequence[BaseDataElement]\n\nNoiseVar = Union[Tensor, Callable, None]\nLabelVar = Union[Tensor, Callable, List[int], None]\n\nConfigType = Union[ConfigDict, Dict]\n"
  },
  {
    "path": "mmagic/version.py",
    "content": "# Copyright (c) Open-MMLab. All rights reserved.\n\n__version__ = '1.2.0dev0'\n\n\ndef parse_version_info(version_str):\n    ver_info = []\n    for x in version_str.split('.'):\n        if x.isdigit():\n            ver_info.append(int(x))\n        elif x.find('rc') != -1:\n            patch_version = x.split('rc')\n            ver_info.append(int(patch_version[0]))\n            ver_info.append(f'rc{patch_version[1]}')\n    return tuple(ver_info)\n\n\nversion_info = parse_version_info(__version__)\n"
  },
  {
    "path": "mmagic/visualization/__init__.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom .concat_visualizer import ConcatImageVisualizer\nfrom .vis_backend import (PaviVisBackend, TensorboardVisBackend, VisBackend,\n                          WandbVisBackend)\nfrom .visualizer import Visualizer\n\n__all__ = [\n    'ConcatImageVisualizer', 'Visualizer', 'VisBackend', 'PaviVisBackend',\n    'TensorboardVisBackend', 'WandbVisBackend'\n]\n"
  },
  {
    "path": "mmagic/visualization/concat_visualizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport logging\nimport re\nfrom typing import Sequence\n\nimport numpy as np\nimport torch\nfrom mmengine.visualization import Visualizer\n\nfrom mmagic.registry import VISUALIZERS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import print_colored_log\n\n\n@VISUALIZERS.register_module()\nclass ConcatImageVisualizer(Visualizer):\n    \"\"\"Visualize multiple images by concatenation.\n\n    This visualizer will horizontally concatenate images belongs to different\n    keys and vertically concatenate images belongs to different frames to\n    visualize.\n\n    Image to be visualized can be:\n        - torch.Tensor or np.array\n        - Image sequences of shape (T, C, H, W)\n        - Multi-channel image of shape (1/3, H, W)\n        - Single-channel image of shape (C, H, W)\n\n    Args:\n        fn_key (str): key used to determine file name for saving image.\n            Usually it is the path of some input image. If the value is\n            `dir/basename.ext`, the name used for saving will be basename.\n        img_keys (str): keys, values of which are images to visualize.\n        pixel_range (dict): min and max pixel value used to denormalize images,\n            note that only float array or tensor will be denormalized,\n            uint8 arrays are assumed to be unnormalized.\n        bgr2rgb (bool): whether to convert the image from BGR to RGB.\n        name (str): name of visualizer. Default: 'visualizer'.\n        *args and \\**kwargs: Other arguments are passed to `Visualizer`. # noqa\n    \"\"\"\n\n    def __init__(self,\n                 fn_key: str,\n                 img_keys: Sequence[str],\n                 pixel_range={},\n                 bgr2rgb=False,\n                 name: str = 'visualizer',\n                 *args,\n                 **kwargs) -> None:\n        super().__init__(name, *args, **kwargs)\n        self.fn_key = fn_key\n        self.img_keys = img_keys\n        self.pixel_range = pixel_range\n        self.bgr2rgb = bgr2rgb\n\n    def add_datasample(self, data_sample: DataSample, step=0) -> None:\n        \"\"\"Concatenate image and draw.\n\n        Args:\n            input (torch.Tensor): Single input tensor from data_batch.\n            data_sample (DataSample): Single data_sample from data_batch.\n            output (DataSample): Single prediction output by model.\n            step (int): Global step value to record. Default: 0.\n        \"\"\"\n        # Note:\n        # with LocalVisBackend and default arguments, we have:\n        # self.save_dir == runner._log_dir / 'vis_data'\n\n        merged_dict = {\n            **data_sample.to_dict(),\n        }\n\n        if 'output' in merged_dict.keys():\n            merged_dict.update(**merged_dict['output'])\n\n        fn = merged_dict[self.fn_key]\n        if isinstance(fn, list):\n            fn = fn[0]\n        fn = re.split(r' |/|\\\\', fn)[-1]\n        fn = fn.split('.')[0]\n\n        img_list = []\n        for k in self.img_keys:\n            if k not in merged_dict:\n                print_colored_log(\n                    f'Key \"{k}\" not in data_sample or outputs',\n                    level=logging.WARN)\n                continue\n\n            img = merged_dict[k]\n\n            # PixelData\n            if isinstance(img, dict) and ('data' in img):\n                img = img['data']\n\n            # Tensor to array\n            if isinstance(img, torch.Tensor):\n                img = img.detach().cpu().numpy()\n                if img.ndim == 3:\n                    img = img.transpose(1, 2, 0)\n                elif img.ndim == 4:\n                    img = img.transpose(0, 2, 3, 1)\n\n            # concat frame vertically\n            if img.ndim == 4:\n                img = np.concatenate(img, axis=0)\n\n            # gray to 3 channel\n            if (img.ndim == 3 and img.shape[2] == 1):\n                img = np.concatenate((img, img, img), axis=2)\n\n            # gray to 3 channel\n            if img.ndim == 2:\n                img = np.stack((img, img, img), axis=2)\n\n            if self.bgr2rgb:\n                img = img[..., ::-1]\n\n            if img.dtype != np.uint8:\n                # We assume uint8 type are not normalized\n                if k in self.pixel_range:\n                    min_, max_ = self.pixel_range.get(k)\n                    img = ((img - min_) / (max_ - min_)) * 255\n                img = img.clip(0, 255).round().astype(np.uint8)\n\n            img_list.append(img)\n\n        max_height = max(img.shape[0] for img in img_list)\n\n        for i, img in enumerate(img_list):\n            if img.shape[0] < max_height:\n                img_list[i] = np.concatenate([\n                    img,\n                    np.ones((max_height - img.shape[0], *img.shape[1:]),\n                            dtype=img.dtype) * 127\n                ],\n                                             axis=0)\n\n        img_cat = np.concatenate(img_list, axis=1)\n\n        for vis_backend in self._vis_backends.values():\n            vis_backend.add_image(fn, img_cat, step)\n"
  },
  {
    "path": "mmagic/visualization/vis_backend.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom typing import Optional, Union\n\nimport cv2\nimport imageio\nimport numpy as np\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.config import Config\nfrom mmengine.fileio import dump, get_file_backend\nfrom mmengine.visualization import BaseVisBackend\nfrom mmengine.visualization import \\\n    TensorboardVisBackend as BaseTensorboardVisBackend\nfrom mmengine.visualization import WandbVisBackend as BaseWandbVisBackend\nfrom mmengine.visualization.vis_backend import force_init_env\n\nfrom mmagic.registry import VISBACKENDS\n\n\n@VISBACKENDS.register_module()\nclass VisBackend(BaseVisBackend):\n    \"\"\"MMagic visualization backend class. It can write image, config, scalars,\n    etc. to the local hard disk and ceph path. You can get the drawing backend\n    through the experiment property for custom drawing.\n\n    Examples:\n        >>> from mmagic.visualization import VisBackend\n        >>> import numpy as np\n        >>> vis_backend = VisBackend(save_dir='temp_dir',\n        >>>                          ceph_path='s3://temp-bucket')\n        >>> img = np.random.randint(0, 256, size=(10, 10, 3))\n        >>> vis_backend.add_image('img', img)\n        >>> vis_backend.add_scalar('mAP', 0.6)\n        >>> vis_backend.add_scalars({'loss': [1, 2, 3], 'acc': 0.8})\n        >>> cfg = Config(dict(a=1, b=dict(b1=[0, 1])))\n        >>> vis_backend.add_config(cfg)\n    Args:\n        save_dir (str): The root directory to save the files produced by the\n            visualizer.\n        img_save_dir (str): The directory to save images.\n            Default to 'vis_image'.\n        config_save_file (str): The file name to save config.\n            Default to 'config.py'.\n        scalar_save_file (str):  The file name to save scalar values.\n            Default to 'scalars.json'.\n        ceph_path (Optional[str]): The remote path of Ceph cloud storage.\n            Defaults to None.\n        delete_local (bool): Whether delete local after uploading to ceph or\n            not. If ``ceph_path`` is None, this will be ignored. Defaults to\n            True.\n    \"\"\"\n\n    def __init__(self,\n                 save_dir: str,\n                 img_save_dir: str = 'vis_image',\n                 config_save_file: str = 'config.py',\n                 scalar_save_file: str = 'scalars.json',\n                 ceph_path: Optional[str] = None,\n                 delete_local_image: bool = True):\n        assert config_save_file.split('.')[-1] == 'py'\n        assert scalar_save_file.split('.')[-1] == 'json'\n        super().__init__(save_dir)\n        self._img_save_dir = img_save_dir\n        self._config_save_file = config_save_file\n        self._scalar_save_file = scalar_save_file\n\n        self._ceph_path = ceph_path\n        self._file_client = None\n        self._delete_local_image = delete_local_image\n\n        self._cfg = None\n\n    def _init_env(self):\n        if self._env_initialized:\n            return\n        self._env_initialized = True\n        \"\"\"Init save dir.\"\"\"\n        os.makedirs(self._save_dir, exist_ok=True)\n        self._img_save_dir = osp.join(\n            self._save_dir,  # type: ignore\n            self._img_save_dir)\n        self._config_save_file = osp.join(\n            self._save_dir,  # type: ignore\n            self._config_save_file)\n        self._scalar_save_file = osp.join(\n            self._save_dir,  # type: ignore\n            self._scalar_save_file)\n\n        if self._ceph_path is not None:\n            # work_dir: A/B/.../C/D\n            # ceph_path: s3://a/b\n            # local_files:  A/B/.../C/D/TIME_STAMP/vis_data/\n            # remote files: s3://a/b/D/TIME_STAMP/vis_data/\n            if self._cfg is None or self._cfg.get('work_dir', None) is None:\n                message_hub = MessageHub.get_current_instance()\n                cfg_str = message_hub.get_info('cfg')\n                self._cfg = Config.fromstring(cfg_str, '.py')\n            full_work_dir = osp.abspath(self._cfg['work_dir'])\n            if full_work_dir.endswith('/'):\n                full_work_dir = full_work_dir[:-1]\n\n            # NOTE: handle src_path with `os.sep`, because may windows\n            # and linux may have different separate.\n            src_path = os.sep.join(full_work_dir.split(os.sep)[:-1])\n            # NOTE: handle tar_path with '/', because ceph use linux\n            # environment\n            tar_path = self._ceph_path[:-1] if \\\n                self._ceph_path.endswith('/') else self._ceph_path\n\n            backend_args = dict(\n                backend='petrel', path_mapping={src_path: tar_path})\n            self._file_client = get_file_backend(backend_args=backend_args)\n\n    @property  # type: ignore\n    @force_init_env\n    def experiment(self) -> 'VisBackend':\n        \"\"\"Return the experiment object associated with this visualization\n        backend.\"\"\"\n        return self\n\n    def add_config(self, config: Config, **kwargs) -> None:\n        \"\"\"Record the config to disk.\n\n        Args:\n            config (Config): The Config object\n        \"\"\"\n        assert isinstance(config, Config)\n        self._cfg = config\n        self._init_env()\n        config.dump(self._config_save_file)\n        self._upload(self._config_save_file)\n\n    @force_init_env\n    def add_image(self,\n                  name: str,\n                  image: np.array,\n                  step: int = 0,\n                  **kwargs) -> None:\n        \"\"\"Record the image to disk.\n\n        Args:\n            name (str): The image identifier.\n            image (np.ndarray): The image to be saved. The format\n                should be RGB. Default to None.\n            step (int): Global step value to record. Default to 0.\n        \"\"\"\n        assert image.dtype == np.uint8\n        os.makedirs(self._img_save_dir, exist_ok=True)\n        if image.ndim == 3:\n            drawn_image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\n            save_file_name = f'{name}_{step}.png'\n            cv2.imwrite(\n                osp.join(self._img_save_dir, save_file_name), drawn_image)\n        elif image.ndim == 4:\n            n_skip = kwargs.get('n_skip', 1)\n            fps = kwargs.get('fps', 60)\n            save_file_name = f'{name}_{step}.gif'\n            save_file_path = osp.join(self._img_save_dir, save_file_name)\n\n            frames_list = []\n            for frame in image[::n_skip]:\n                frames_list.append(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))\n            if not (image.shape[0] % n_skip == 0):\n                frames_list.append(image[-1])\n            imageio.mimsave(\n                save_file_path, frames_list, 'GIF', duration=1000. / fps)\n        else:\n            raise ValueError(\n                'Only support visualize image with dimension of 3 or 4. But '\n                f'receive input with shape \\'{image.shape}\\'.')\n        self._upload(\n            osp.join(self._img_save_dir, save_file_name),\n            self._delete_local_image)\n\n    @force_init_env\n    def add_scalar(self,\n                   name: str,\n                   value: Union[int, float, torch.Tensor, np.ndarray],\n                   step: int = 0,\n                   **kwargs) -> None:\n        \"\"\"Record the scalar data to disk.\n\n        Args:\n            name (str): The scalar identifier.\n            value (int, float, torch.Tensor, np.ndarray): Value to save.\n            step (int): Global step value to record. Default to 0.\n        \"\"\"\n        if isinstance(value, torch.Tensor):\n            value = value.item()\n        self._dump({name: value, 'step': step}, self._scalar_save_file, 'json')\n\n    @force_init_env\n    def add_scalars(self,\n                    scalar_dict: dict,\n                    step: int = 0,\n                    file_path: Optional[str] = None,\n                    **kwargs) -> None:\n        \"\"\"Record the scalars to disk.\n\n        The scalar dict will be written to the default and\n        specified files if ``file_path`` is specified.\n\n        Args:\n            scalar_dict (dict): Key-value pair storing the tag and\n                corresponding values. The value must be dumped\n                into json format.\n            step (int): Global step value to record. Default to 0.\n            file_path (str, optional): The scalar's data will be\n                saved to the ``file_path`` file at the same time\n                if the ``file_path`` parameter is specified.\n                Default to None.\n        \"\"\"\n        assert isinstance(scalar_dict, dict)\n        scalar_dict_new = dict()\n        for k, v in scalar_dict.items():\n            if isinstance(v, torch.Tensor):\n                scalar_dict_new[k] = v.item()\n            else:\n                scalar_dict_new[k] = v\n        scalar_dict_new.setdefault('step', step)\n\n        if file_path is not None:\n            assert file_path.split('.')[-1] == 'json'\n            new_save_file_path = osp.join(\n                self._save_dir,  # type: ignore\n                file_path)\n            assert new_save_file_path != self._scalar_save_file, \\\n                '``file_path`` and ``scalar_save_file`` have the ' \\\n                'same name, please set ``file_path`` to another value'\n            self._dump(scalar_dict_new, new_save_file_path, 'json')\n        self._dump(scalar_dict_new, self._scalar_save_file, 'json')\n        self._upload(self._scalar_save_file)\n\n    def _dump(self, value_dict: dict, file_path: str,\n              file_format: str) -> None:\n        \"\"\"dump dict to file.\n\n        Args:\n           value_dict (dict) : The dict data to saved.\n           file_path (str): The file path to save data.\n           file_format (str): The file format to save data.\n        \"\"\"\n        with open(file_path, 'a+') as f:\n            dump(value_dict, f, file_format=file_format)\n            f.write('\\n')\n\n    def _upload(self, path: str, delete_local=False) -> None:\n        \"\"\"Upload file at path to remote.\n\n        Args:\n            path (str): Path of file to upload.\n        \"\"\"\n        if self._file_client is None:\n            return\n        with open(path, 'rb') as file:\n            self._file_client.put(file, path)\n        if delete_local:\n            os.remove(path)\n\n\n@VISBACKENDS.register_module()\nclass TensorboardVisBackend(BaseTensorboardVisBackend):\n\n    @force_init_env\n    def add_image(self, name: str, image: np.array, step: int = 0, **kwargs):\n        \"\"\"Record the image to Tensorboard. Additional support upload gif\n        files.\n\n        Args:\n            name (str): The image identifier.\n            image (np.ndarray): The image to be saved. The format\n                should be RGB.\n            step (int): Useless parameter. Wandb does not\n                need this parameter. Default to 0.\n        \"\"\"\n\n        if image.ndim == 4:\n            n_skip = kwargs.get('n_skip', 1)\n            fps = kwargs.get('fps', 60)\n\n            frames_list = []\n            for frame in image[::n_skip]:\n                frames_list.append(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))\n            if not (image.shape[0] % n_skip == 0):\n                frames_list.append(image[-1])\n\n            frames_np = np.transpose(\n                np.stack(frames_list, axis=0), (0, 3, 1, 2))\n            frames_tensor = torch.from_numpy(frames_np)[None, ...]\n            self._tensorboard.add_video(\n                name, frames_tensor, global_step=step, fps=fps)\n        else:\n            # write normal image\n            self._tensorboard.add_image(name, image, step, dataformats='HWC')\n\n\n@VISBACKENDS.register_module()\nclass PaviVisBackend(BaseVisBackend):\n    \"\"\"Visualization backend for Pavi.\"\"\"\n\n    def __init__(self,\n                 save_dir: str,\n                 exp_name: Optional[str] = None,\n                 labels: Optional[str] = None,\n                 project: Optional[str] = None,\n                 model: Optional[str] = None,\n                 description: Optional[str] = None):\n        self.save_dir = save_dir\n\n        self._name = exp_name\n        self._labels = labels\n        self._project = project\n        self._model = model\n        self._description = description\n\n    def _init_env(self):\n        \"\"\"Init save dir.\"\"\"\n        try:\n            import pavi\n        except ImportError:\n            raise ImportError(\n                'To use \\'PaviVisBackend\\' Pavi must be installed.')\n        self._pavi = pavi.SummaryWriter(\n            name=self._name,\n            labels=self._labels,\n            project=self._project,\n            model=self._model,\n            description=self._description,\n            log_dir=self.save_dir)\n\n    @property  # type: ignore\n    @force_init_env\n    def experiment(self) -> 'VisBackend':\n        \"\"\"Return the experiment object associated with this visualization\n        backend.\"\"\"\n        return self._pavi\n\n    @force_init_env\n    def add_image(self,\n                  name: str,\n                  image: np.array,\n                  step: int = 0,\n                  **kwargs) -> None:\n        \"\"\"Record the image to Pavi.\n\n        Args:\n            name (str): The image identifier.\n            image (np.ndarray): The image to be saved. The format\n                should be RGB. Default to None.\n            step (int): Global step value to record. Default to 0.\n        \"\"\"\n        assert image.dtype == np.uint8\n        drawn_image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)\n        self._pavi.add_image(name, drawn_image, step)\n\n    @force_init_env\n    def add_scalar(self,\n                   name: str,\n                   value: Union[int, float, torch.Tensor, np.ndarray],\n                   step: int = 0,\n                   **kwargs) -> None:\n        \"\"\"Record the scalar data to Pavi.\n\n        Args:\n            name (str): The scalar identifier.\n            value (int, float, torch.Tensor, np.ndarray): Value to save.\n            step (int): Global step value to record. Default to 0.\n        \"\"\"\n        if isinstance(value, torch.Tensor):\n            value = value.item()\n        self._pavi.add_scalar(name, value, step)\n\n    @force_init_env\n    def add_scalars(self,\n                    scalar_dict: dict,\n                    step: int = 0,\n                    file_path: Optional[str] = None,\n                    **kwargs) -> None:\n        \"\"\"Record the scalars to Pavi.\n\n        The scalar dict will be written to the default and\n        specified files if ``file_path`` is specified.\n\n        Args:\n            scalar_dict (dict): Key-value pair storing the tag and\n                corresponding values. The value must be dumped\n                into json format.\n            step (int): Global step value to record. Default to 0.\n            file_path (str, optional): The scalar's data will be\n                saved to the ``file_path`` file at the same time\n                if the ``file_path`` parameter is specified.\n                Default to None.\n        \"\"\"\n        assert isinstance(scalar_dict, dict)\n        for name, value in scalar_dict.items():\n            self.add_scalar(name, value, step)\n\n\n@VISBACKENDS.register_module()\nclass WandbVisBackend(BaseWandbVisBackend):\n    \"\"\"Wandb visualization backend for MMagic.\"\"\"\n\n    def _init_env(self):\n        \"\"\"Setup env for wandb.\"\"\"\n        if not os.path.exists(self._save_dir):\n            os.makedirs(self._save_dir, exist_ok=True)  # type: ignore\n        if self._init_kwargs is None:\n            self._init_kwargs = {'dir': self._save_dir}\n        else:\n            self._init_kwargs.setdefault('dir', self._save_dir)\n        try:\n            import wandb\n        except ImportError:\n            raise ImportError(\n                'Please run \"pip install wandb\" to install wandb')\n\n        # add timestamp at the end of name\n        timestamp = self._save_dir.split('/')[-2]\n        orig_name = self._init_kwargs.get('name', None)\n        if orig_name:\n            self._init_kwargs['name'] = f'{orig_name}_{timestamp}'\n        wandb.init(**self._init_kwargs)\n        self._wandb = wandb\n\n    @force_init_env\n    def add_image(self, name: str, image: np.array, step: int = 0, **kwargs):\n        \"\"\"Record the image to wandb. Additional support upload gif files.\n\n        Args:\n            name (str): The image identifier.\n            image (np.ndarray): The image to be saved. The format\n                should be RGB.\n            step (int): Useless parameter. Wandb does not\n                need this parameter. Default to 0.\n        \"\"\"\n        try:\n            import wandb\n        except ImportError:\n            raise ImportError(\n                'Please run \"pip install wandb\" to install wandb')\n\n        if image.ndim == 4:\n            n_skip = kwargs.get('n_skip', 1)\n            fps = kwargs.get('fps', 60)\n\n            frames_list = []\n            for frame in image[::n_skip]:\n                frames_list.append(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))\n            if not (image.shape[0] % n_skip == 0):\n                frames_list.append(image[-1])\n\n            frames_np = np.transpose(\n                np.stack(frames_list, axis=0), (0, 3, 1, 2))\n            self._wandb.log(\n                {name: wandb.Video(frames_np, fps=fps, format='gif')},\n                commit=self._commit)\n        else:\n            # write normal image\n            self._wandb.log({name: wandb.Image(image)}, commit=self._commit)\n"
  },
  {
    "path": "mmagic/visualization/visualizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom typing import Dict, List, Optional, Sequence, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom mmengine.dist import master_only\nfrom mmengine.visualization import Visualizer as BaseVisualizer\nfrom torch import Tensor\nfrom torchvision.utils import make_grid\n\nfrom mmagic.registry import VISUALIZERS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import SampleList\n\nmean_std_type = Optional[Sequence[Union[float, int]]]\n\n\n@VISUALIZERS.register_module()\nclass Visualizer(BaseVisualizer):\n    \"\"\"MMagic Visualizer.\n\n    Args:\n        name (str): Name of the instance. Defaults to 'visualizer'.\n        vis_backends (list, optional): Visual backend config list.\n            Defaults to None.\n        save_dir (str, optional): Save file dir for all storage backends.\n            If it is None, the backend storage will not save any data.\n\n    Examples::\n\n        >>> # Draw image\n        >>> vis = Visualizer()\n        >>> vis.add_datasample(\n        >>>     'random_noise',\n        >>>     gen_samples=torch.rand(2, 3, 10, 10),\n        >>>     gt_samples=dict(imgs=torch.randn(2, 3, 10, 10)),\n        >>>     gt_keys='imgs',\n        >>>     vis_mode='image',\n        >>>     n_rows=2,\n        >>>     step=10)\n    \"\"\"\n\n    def __init__(self,\n                 name='visualizer',\n                 vis_backends: Optional[List[Dict]] = None,\n                 save_dir: Optional[str] = None) -> None:\n        super().__init__(name, vis_backends=vis_backends, save_dir=save_dir)\n\n    @staticmethod\n    def _post_process_image(image: Tensor) -> Tensor:\n        \"\"\"Post process images.\n\n        Args:\n            image (Tensor): Image to post process. The value range of\n                image should be in [0, 255] and the channel order should\n                be BGR.\n\n        Returns:\n            Tensor: Image in RGB color order.\n        \"\"\"\n        # input image should be [0, 255] and BGR\n        if image.shape[1] == 1:\n            image = torch.cat([image, image, image], dim=1)\n        image = image[:, [2, 1, 0], ...]\n        return image\n\n    @staticmethod\n    def _get_n_row_and_padding(samples: Tuple[dict, Tensor],\n                               n_row: Optional[int] = None\n                               ) -> Tuple[int, Optional[Tensor]]:\n        \"\"\"Get number of sample in each row and tensor for padding the empty\n        position.\n\n        Args:\n            samples (Tuple[dict, Tensor]): Samples to visualize.\n            n_row (int, optional): Number of images displayed in each row of.\n                If not passed, n_row will be set as ``int(sqrt(batch_size))``.\n\n        Returns:\n            Tuple[int, Optional[int]]: Number of sample in each row and tensor\n                for padding the empty position.\n        \"\"\"\n        if isinstance(samples, dict):\n            for sample in iter(samples.values()):\n                # NOTE: dirty way to get the shape of image tensor\n                if isinstance(sample, Tensor) and sample.ndim in [4, 5]:\n                    sample_shape = sample.shape\n                    break\n        else:\n            sample_shape = samples.shape\n\n        n_samples = sample_shape[0]\n        if n_row is None:\n            n_row = math.ceil(math.sqrt(n_samples))\n        if n_samples % n_row == 0:\n            n_padding = 0\n        else:\n            n_padding = n_row - (n_samples % n_row)\n        if n_padding:\n            return n_row, -1.0 * torch.ones(n_padding, *sample_shape[1:])\n        return n_row, None\n\n    def _vis_gif_sample(self, gen_samples: SampleList,\n                        target_keys: Union[str, List[str],\n                                           None], n_row: int) -> np.ndarray:\n        \"\"\"Visualize gif samples.\n\n        Args:\n            gen_samples (SampleList): List of data samples to visualize\n            target_keys (Union[str, List[str], None]): Keys of the\n                visualization target in data samples.\n            n_rows (int, optional): Number of images in one row.\n\n        Returns:\n            np.ndarray: The visualization results.\n        \"\"\"\n\n        def post_process_sequence(samples):\n            num_timesteps = samples.shape[1]\n            seq_list = [\n                self._post_process_image(samples[:, t, ...].cpu())\n                for t in range(num_timesteps)\n            ]\n            return torch.stack(seq_list, dim=1)\n\n        if target_keys is None:\n            # get all the keys that are tensors with 4 dimensions\n            target_keys = [\n                k for k, v in gen_samples[0].items()\n                if ((not k.startswith('_')) and (isinstance(v, Tensor)) and (\n                    v.data.ndim == 4))\n            ]\n        target_keys = [target_keys] if isinstance(target_keys, str) \\\n            else target_keys\n\n        sample_list = list()\n        for sample in gen_samples:\n            sample_dict = dict()\n            for k in target_keys:\n                sample_dict[k] = self._get_vis_data_by_key(sample, k)\n            sample_list.append(sample_dict)\n\n        for k in sample_list[0].keys():\n            sample_ = torch.stack([samp[k] for samp in sample_list], dim=0)\n            sample_ = post_process_sequence(sample_.cpu())\n            sample_dict[k] = sample_\n\n        n_row, padding_tensor = self._get_n_row_and_padding(sample_dict, n_row)\n        num_timesteps = next(iter(sample_dict.values())).shape[1]\n\n        vis_results = []\n        for sample in sample_dict.values():\n            if padding_tensor is not None:\n                vis_results.append(torch.cat([sample, padding_tensor], dim=0))\n            else:\n                vis_results.append(sample)\n\n        # concatenate along batch size\n        vis_results = torch.cat(vis_results)\n        vis_results = [\n            make_grid(vis_results[:, t, ...].cpu(),\n                      nrow=n_row).cpu().permute(1, 2, 0)\n            for t in range(num_timesteps)\n        ]\n        vis_results = torch.stack(vis_results, dim=0)  # [t, H, W, 3]\n        vis_results = vis_results.numpy().astype(np.uint8)\n        return vis_results\n\n    def _vis_image_sample(self, gen_samples: SampleList,\n                          target_keys: Union[str, List[str],\n                                             None], n_row: int) -> np.ndarray:\n        \"\"\"Visualize image samples.\n\n        Args:\n            gen_samples (SampleList): List of data samples to visualize\n            target_keys (Union[str, List[str], None]): Keys of the\n                visualization target in data samples.\n            color_order (str): The color order of the passed images.\n            target_mean (Sequence[Union[float, int]]): The target mean of the\n                visualization results.\n            target_std (Sequence[Union[float, int]]): The target std of the\n                visualization results.\n            n_rows (int, optional): Number of images in one row.\n\n        Returns:\n            np.ndarray: The visualization results.\n        \"\"\"\n        if target_keys is None:\n            # get all key of image tensor automatically\n            target_keys = [\n                k for k, v in gen_samples[0].items()\n                if ((not k.startswith('_')) and (isinstance(v, Tensor)) and (\n                    v.data.ndim == 3))\n            ]\n        target_keys = [target_keys] if isinstance(target_keys, str) \\\n            else target_keys\n\n        sample_list = list()\n        for sample in gen_samples:\n            sample_dict = dict()\n            for k in target_keys:\n                sample_dict[k] = self._get_vis_data_by_key(sample, k)\n            sample_list.append(sample_dict)\n\n        for k in sample_list[0].keys():\n            sample_ = torch.stack([samp[k] for samp in sample_list], dim=0)\n            sample_ = self._post_process_image(sample_.cpu())\n            sample_dict[k] = sample_\n\n        n_row, padding_tensor = self._get_n_row_and_padding(sample_dict, n_row)\n\n        vis_results = []\n        for sample in sample_dict.values():\n            if padding_tensor is not None:\n                vis_results.append(torch.cat([sample, padding_tensor], dim=0))\n            else:\n                vis_results.append(sample)\n\n        # concatenate along batch size\n        vis_results = torch.cat(vis_results, dim=0)\n        vis_results = make_grid(vis_results, nrow=n_row).cpu().permute(1, 2, 0)\n        vis_results = vis_results.numpy().astype(np.uint8)\n        return vis_results\n\n    def _get_vis_data_by_key(self, sample: DataSample, key: str) -> Tensor:\n        \"\"\"Get tensor in ``DataSample`` by the given key.\n\n        Args:\n            sample (DataSample): Input data sample.\n            key (str): Name of the target tensor.\n\n        Returns:\n            Tensor: Tensor from the data sample.\n        \"\"\"\n        if '.' in key:\n            key_list = key.split('.')\n        else:\n            key_list = [key]\n        vis_data = sample\n        for k in key_list:\n            # get vis data step by step\n            assert hasattr(vis_data, k)\n            vis_data = getattr(vis_data, k)\n\n        if isinstance(vis_data, Tensor):\n            return vis_data\n        else:\n            # check only one tensor in current datasample to visualize\n            elements = [\n                element for k, element in vis_data.items()\n                if not k.startswith('_') and isinstance(element, Tensor)\n            ]\n            assert len(elements) == 1, (\n                f'Find {len(elements)} Tensor in DataSample with '\n                f'key {key}.')\n            vis_data = elements[0]\n\n            assert isinstance(\n                vis_data,\n                Tensor), (f'Element with key \\'{key}\\' is not a Tensor.')\n            return vis_data\n\n    def add_datasample(self,\n                       name: str,\n                       *,\n                       gen_samples: Sequence[DataSample],\n                       target_keys: Optional[Tuple[str, List[str]]] = None,\n                       vis_mode: Optional[str] = None,\n                       n_row: Optional[int] = None,\n                       show: bool = False,\n                       wait_time: int = 0,\n                       step: int = 0,\n                       **kwargs) -> None:\n        \"\"\"Draw datasample and save to all backends.\n\n        If GT and prediction are plotted at the same time, they\n        are displayed in a stitched image where the left image is the\n        ground truth and the right image is the prediction.\n\n        If ``show`` is True, all storage backends are ignored,\n        and the images will be displayed in a local window.\n\n        Args:\n            name (str): The image identifier.\n            gen_samples (List[DataSample]): Data samples to visualize.\n            vis_mode (str, optional): Visualization mode. If not passed, will\n                visualize results as image. Defaults to None.\n            n_rows (int, optional): Number of images in one row.\n                Defaults to None.\n            color_order (str): The color order of the passed images. Defaults\n                to 'bgr'.\n            target_mean (Sequence[Union[float, int]]): The target mean of the\n                visualization results. Defaults to 127.5.\n            target_std (Sequence[Union[float, int]]): The target std of the\n                visualization results. Defaults to 127.5.\n            show (bool): Whether to display the drawn image. Default to False.\n            wait_time (float): The interval of show (s). Defaults to 0.\n            step (int): Global step value to record. Defaults to 0.\n        \"\"\"\n\n        # get visualize function\n        if vis_mode is None:\n            vis_func = self._vis_image_sample\n        else:\n            vis_func = getattr(self, f'_vis_{vis_mode}_sample')\n\n        vis_sample = vis_func(gen_samples, target_keys, n_row)\n\n        if show:\n            self.show(vis_sample, win_name=name, wait_time=wait_time)\n\n        self.add_image(name, vis_sample, step, **kwargs)\n\n    @master_only\n    def add_image(self,\n                  name: str,\n                  image: np.ndarray,\n                  step: int = 0,\n                  **kwargs) -> None:\n        \"\"\"Record the image. Support input kwargs.\n\n        Args:\n            name (str): The image identifier.\n            image (np.ndarray, optional): The image to be saved. The format\n                should be RGB. Default to None.\n            step (int): Global step value to record. Default to 0.\n        \"\"\"\n        for vis_backend in self._vis_backends.values():\n            vis_backend.add_image(name, image, step, **kwargs)  # type: ignore\n"
  },
  {
    "path": "model-index.yml",
    "content": "Import:\n- configs/animatediff/metafile.yml\n- configs/aot_gan/metafile.yml\n- configs/basicvsr/metafile.yml\n- configs/basicvsr_pp/metafile.yml\n- configs/biggan/metafile.yml\n- configs/cain/metafile.yml\n- configs/controlnet/metafile.yml\n- configs/controlnet_animation/metafile.yml\n- configs/cyclegan/metafile.yml\n- configs/dcgan/metafile.yml\n- configs/deblurganv2/metafile.yml\n- configs/deepfillv1/metafile.yml\n- configs/deepfillv2/metafile.yml\n- configs/dic/metafile.yml\n- configs/diffusers_pipeline/metafile.yml\n- configs/dim/metafile.yml\n- configs/disco_diffusion/metafile.yml\n- configs/draggan/metafile.yml\n- configs/dreambooth/metafile.yml\n- configs/edsr/metafile.yml\n- configs/edvr/metafile.yml\n- configs/eg3d/metafile.yml\n- configs/esrgan/metafile.yml\n- configs/fastcomposer/metafile.yml\n- configs/flavr/metafile.yml\n- configs/gca/metafile.yml\n- configs/ggan/metafile.yml\n- configs/glean/metafile.yml\n- configs/global_local/metafile.yml\n- configs/guided_diffusion/metafile.yml\n- configs/iconvsr/metafile.yml\n- configs/indexnet/metafile.yml\n- configs/inst_colorization/metafile.yml\n- configs/liif/metafile.yml\n- configs/lsgan/metafile.yml\n- configs/nafnet/metafile.yml\n- configs/partial_conv/metafile.yml\n- configs/pggan/metafile.yml\n- configs/pix2pix/metafile.yml\n- configs/positional_encoding_in_gans/metafile.yml\n- configs/rdn/metafile.yml\n- configs/real_basicvsr/metafile.yml\n- configs/real_esrgan/metafile.yml\n- configs/restormer/metafile.yml\n- configs/sagan/metafile.yml\n- configs/singan/metafile.yml\n- configs/sngan_proj/metafile.yml\n- configs/srcnn/metafile.yml\n- configs/srgan_resnet/metafile.yml\n- configs/stable_diffusion/metafile.yml\n- configs/stable_diffusion_xl/metafile.yml\n- configs/styleganv1/metafile.yml\n- configs/styleganv2/metafile.yml\n- configs/styleganv3/metafile.yml\n- configs/swinir/metafile.yml\n- configs/tdan/metafile.yml\n- configs/textual_inversion/metafile.yml\n- configs/tof/metafile.yml\n- configs/ttsr/metafile.yml\n- configs/vico/metafile.yml\n- configs/wgan-gp/metafile.yml\n"
  },
  {
    "path": "projects/README.md",
    "content": "# Welcome to Projects of MMagic\n\nWelcome to the MMagic community!\nThe MMagic ecosystem consists of tutorials, libraries, and projects from a broad set of researchers in academia and industry, ML and application engineers.\nThe goal of this ecosystem is to support, accelerate, and aid in your AIGC exploration with MMagic for image, video, 3D content generation, editing and processing.\n\nHere are a few projects that are built upon MMagic. They are examples of how to use MMagic as a library, to make your projects more maintainable.\nPlease find more projects in [MMagic Ecosystem](https://openmmlab.com/ecosystem).\n\n## Show your projects on OpenMMLab Ecosystem\n\nYou can submit your project so that it can be shown on the homepage of [OpenMMLab](https://openmmlab.com/ecosystem).\n\n## Add example projects to MMagic\n\nHere is an [example project](./example_project) about how to add your projects to MMagic.\nYou can copy and create your own project from the [example project](./example_project).\n\nWe also provide some documentation listed below for your reference:\n\n- [Contribution Guide](https://mmagic.readthedocs.io/en/latest/community/contributing.html)\n\n  The guides for new contributors about how to add your projects to MMagic.\n\n- [New Model Guide](https://mmagic.readthedocs.io/en/latest/howto/models.html)\n\n  The documentation of adding new models.\n\n- [Discussions](https://github.com/open-mmlab/mmagic/discussions)\n\n  Welcome to start a discussion!\n\n## Projects of libraries and toolboxes\n\n- [PowerVQE](https://github.com/ryanxingql/powervqe): Open framework for quality enhancement of compressed videos based on PyTorch and MMagic.\n\n- [VR-Baseline](https://github.com/linjing7/VR-Baseline): Video Restoration Toolbox.\n\n- [Derain-Toolbox](https://github.com/biubiubiiu/derain-toolbox): Single Image Deraining Toolbox and Benchmark\n\n## Projects of research papers\n\n- [Towards Interpretable Video Super-Resolution via Alternating Optimization, ECCV 2022](https://arxiv.org/abs/2207.10765)[\\[github\\]](https://github.com/caojiezhang/DAVSR)\n\n- [SepLUT:Separable Image-adaptive Lookup Tables for Real-time Image Enhancement, ECCV 2022](https://arxiv.org/abs/2207.08351)[\\[github\\]](https://github.com/ImCharlesY/SepLUT)\n\n- [TTVSR: Learning Trajectory-Aware Transformer for Video Super-Resolution, CVPR 2022](https://arxiv.org/abs/2204.04216)[\\[github\\]](https://github.com/researchmm/TTVSR)\n\n- [Arbitrary-Scale Image Synthesis, CVPR 2022](https://arxiv.org/pdf/2204.02273.pdf)[\\[github\\]](https://github.com/vglsd/ScaleParty)\n\n- [Investigating Tradeoffs in Real-World Video Super-Resolution(RealBasicVSR), CVPR 2022](https://arxiv.org/abs/2111.12704)[\\[github\\]](https://github.com/ckkelvinchan/RealBasicVSR)\n\n- [BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment, CVPR 2022](https://arxiv.org/abs/2104.13371)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR_PlusPlus)\n\n- [Multi-Scale Memory-Based Video Deblurring, CVPR 2022](https://arxiv.org/abs/2204.02977)[\\[github\\]](https://github.com/jibo27/MemDeblur)\n\n- [AdaInt:Learning Adaptive Intervals for 3D Lookup Tables on Real-time Image Enhancement, CVPR 2022](https://arxiv.org/abs/2204.13983)[\\[github\\]](https://github.com/ImCharlesY/AdaInt)\n\n- [A New Dataset and Transformer for Stereoscopic Video Super-Resolution, CVPRW 2022](https://openaccess.thecvf.com/content/CVPR2022W/NTIRE/papers/Imani_A_New_Dataset_and_Transformer_for_Stereoscopic_Video_Super-Resolution_CVPRW_2022_paper.pdf)[\\[github\\]](https://github.com/H-deep/Trans-SVSR)\n\n- [Liquid warping GAN with attention: A unified framework for human image synthesis, TPAMI 2021](https://arxiv.org/pdf/2011.09055.pdf)[\\[github\\]](https://github.com/iPERDance/iPERCore)\n\n- [BasicVSR:The Search for Essential Components in Video Super-Resolution and Beyond, CVPR 2021](https://arxiv.org/abs/2012.02181)[\\[github\\]](https://github.com/ckkelvinchan/BasicVSR-IconVSR)\n\n- [GLEAN:Generative Latent Bank for Large-Factor Image Super-Resolution, CVPR 2021](https://arxiv.org/abs/2012.00739)[\\[github\\]](https://github.com/ckkelvinchan/GLEAN)\n\n- [DAN:Unfolding the Alternating Optimization for Blind Super Resolution, NeurIPS 2020](https://arxiv.org/abs/2010.02631v4)[\\[github\\]](https://github.com/AlexZou14/DAN-Basd-on-Openmmlab)\n"
  },
  {
    "path": "projects/animated_drawings/README.md",
    "content": "# Animated Drawings (SIGGRAPH'2023)\n\n> [A Method for Animating Children's Drawings of The Human Figure](https://arxiv.org/abs/2303.12741)\n\n> **Task**: Drawing\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nChildren’s drawings have a wonderful inventiveness, creativity, and variety to them. We present a system that automatically animates children’s drawings of the human figure, is robust to the variance inherent in these depictions, and is simple and straightforward enough for anyone to use. We demonstrate the value and broad appeal of our approach by building and releasing the Animated Drawings Demo, a freely available public website that has been used by millions of people around the world. We present a set of experiments exploring the amount of training data needed for fine-tuning, as well as a perceptual study demonstrating the appeal of a novel twisted perspective retargeting technique. Finally, we introduce the Amateur Drawings Dataset, a first-of-its-kind annotated dataset, collected via the public demo, containing over 178,000 amateur drawings and corresponding user-accepted character bounding boxes, segmentation masks, and joint location annotations.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/6675724/219223438-2c93f9cb-d4b5-45e9-a433-149ed76affa6.gif\" width=\"800\"/>\n</div >\n\n## Quick Start\n\n### 1. Install Animated Drawings\n\n```shell\ncd  mmagic/projects/animated_drawings\npip install -e git+https://github.com/facebookresearch/AnimatedDrawings.git#egg=animated_drawings\n```\n\n### 2. Download resources\n\n```shell\ncd  mmagic/projects/animated_drawings\nmkdir resources\n# download image\nwget -O sakuragi.png https://user-images.githubusercontent.com/12782558/236157945-452fb9d0-e02e-4f36-8338-34f0ca0fe962.png\n# download mask image\nwget -O sakuragi_mask.png https://user-images.githubusercontent.com/12782558/236157965-539a5467-edae-40d0-a9da-7bb5906bcdc4.png\n# download background image\nwget -O basketball_playground.png https://user-images.githubusercontent.com/12782558/236190727-0e456482-2ae3-4304-9e6c-6ba7d319ea71.png\n```\n\n### 3. Generate character\n\nBy running following codes, you will get texture and mask images for animated rendering in characters/slamdunk directory.\n\n```shell\ncd mmagic/projects/animated_drawings\npython tools/generate_character.py\n```\n\n### 3. Generate video\n\nBy running following codes, you will get a Sakuragi moving like a zombie.\n\n```shell\ncd mmagic/projects/animated_drawings\npython tools/generate_video.py\n```\n\nThe output video will be saved at resources dir, and it looks like this:\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/12782558/236162056-c9a65baa-89c4-4cb3-84da-7777f5f21757.gif\" width=\"512\"/>\n</div >\n\n## Citation\n\n```bibtex\n@misc{smith2023method,\n      title={A Method for Animating Children's Drawings of the Human Figure},\n      author={Harrison Jesse Smith and Qingyuan Zheng and Yifei Li and Somya Jain and Jessica K. Hodgins},\n      year={2023},\n      eprint={2303.12741},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n```\n"
  },
  {
    "path": "projects/animated_drawings/bvh/zombie.bvh",
    "content": "HIERARCHY\nROOT Hips\n{\n\tOFFSET 0.00 0.00 0.00\n\tCHANNELS 6 Xposition Yposition Zposition Xrotation Yrotation Zrotation\n\tJOINT Spine\n\t{\n\t\tOFFSET 0.00000 1.15266 1.72900\n\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\tJOINT Spine1\n\t\t{\n\t\t\tOFFSET 0.00000 0.40032 2.27031\n\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\tJOINT Spine2\n\t\t\t{\n\t\t\t\tOFFSET 0.00000 0.20092 2.29656\n\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\tJOINT Spine3\n\t\t\t\t{\n\t\t\t\t\tOFFSET 0.00000 0.00000 2.30533\n\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\tJOINT Neck\n\t\t\t\t\t{\n\t\t\t\t\t\tOFFSET 0.00000 -0.86449 6.05149\n\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\tJOINT Head\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOFFSET 0.00000 -0.55043 3.12167\n\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\tEnd Site\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tOFFSET 0.00000 0.00000 3.73175\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tJOINT RightShoulder\n\t\t\t\t\t{\n\t\t\t\t\t\tOFFSET -0.78828 -1.31380 4.25672\n\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\tJOINT RightArm\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOFFSET -3.91513 0.00000 0.00000\n\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\tJOINT RightForeArm\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tOFFSET -6.91491 0.00000 0.00000\n\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\tJOINT RightHand\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tOFFSET -6.09622 0.00000 0.00000\n\t\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\t\tJOINT RightHandEnd\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tOFFSET -1.74995 0.00000 0.00000\n\t\t\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\t\t\tEnd Site\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tOFFSET -1.74995 0.00000 0.00000\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tJOINT RightHandThumb1\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tOFFSET -0.69998 -1.16663 -0.46665\n\t\t\t\t\t\t\t\t\t\tCHANNELS 3 Yrotation Xrotation Zrotation\n\t\t\t\t\t\t\t\t\t\tEnd Site\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tOFFSET -1.69032 -0.45292 0.00000\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tJOINT LeftShoulder\n\t\t\t\t\t{\n\t\t\t\t\t\tOFFSET 0.78828 -1.31380 4.25672\n\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\tJOINT LeftArm\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tOFFSET 3.91513 0.00000 0.00000\n\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\tJOINT LeftForeArm\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tOFFSET 6.91491 0.00000 0.00000\n\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\tJOINT LeftHand\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tOFFSET 6.09622 0.00000 0.00000\n\t\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\t\tJOINT LeftHandEnd\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tOFFSET 1.74995 0.00000 0.00000\n\t\t\t\t\t\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\t\t\t\t\t\tEnd Site\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tOFFSET 1.74995 0.00000 0.00000\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tJOINT LeftHandThumb1\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tOFFSET 0.69998 -1.16663 -0.46665\n\t\t\t\t\t\t\t\t\t\tCHANNELS 3 Yrotation Xrotation Zrotation\n\t\t\t\t\t\t\t\t\t\tEnd Site\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tOFFSET 1.69032 -0.45292 0.00000\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tJOINT RightUpLeg\n\t{\n\t\tOFFSET -2.33857 0.00000 -0.68318\n\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\tJOINT RightLeg\n\t\t{\n\t\t\tOFFSET 0.00000 0.00000 -10.74496\n\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\tJOINT RightFoot\n\t\t\t{\n\t\t\t\tOFFSET 0.00000 0.00000 -10.93085\n\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\tJOINT RightToeBase\n\t\t\t\t{\n\t\t\t\t\tOFFSET 0.00000 -4.08727 -1.48765\n\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\tEnd Site\n\t\t\t\t\t{\n\t\t\t\t\t\tOFFSET 0.00000 -1.89187 -0.00000\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tJOINT LeftUpLeg\n\t{\n\t\tOFFSET 2.33857 0.00000 -0.68318\n\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\tJOINT LeftLeg\n\t\t{\n\t\t\tOFFSET 0.00000 0.00000 -10.74496\n\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\tJOINT LeftFoot\n\t\t\t{\n\t\t\t\tOFFSET 0.00000 0.00000 -10.93085\n\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\tJOINT LeftToeBase\n\t\t\t\t{\n\t\t\t\t\tOFFSET 0.00000 -4.08727 -1.48765\n\t\t\t\t\tCHANNELS 3 Xrotation Yrotation Zrotation\n\t\t\t\t\tEnd Site\n\t\t\t\t\t{\n\t\t\t\t\t\tOFFSET 0.00000 -1.89187 -0.00000\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\nMOTION\nFrames: 779\nFrame Time:\t0.0333333\n 0.1081 -113.8641 24.4236 -6.3750 0.7993 174.1813 -0.0953 1.7897 0.3053 -0.3614 0.2761 0.1877 0.7990 -0.1400 4.9767 -1.4096 -0.8139 1.4970 -2.5341 -3.3677 -3.3142 3.3078 -1.2990 -7.1278 -6.4106 -0.5739 -2.4492 -10.4508 -2.0339 10.0589 0.0000 0.0000 12.1538 0.0637 4.7831 -15.3322 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -9.3109 1.9097 0.2116 -6.0004 0.1782 -15.5610 -0.0000 0.0000 2.3711 6.2266 11.8306 4.9716 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -15.1304 1.0672 -2.8595 12.2683 0.0000 0.0000 -4.2579 0.8079 4.6097 1.6031 0.0000 0.0000 -6.0430 1.7069 2.9203 1.2763 0.0000 0.0000 -5.2588 0.9797 4.8866 -10.1323 0.0000 -0.0000\n 0.1079 -113.8686 24.4224 -6.3199 0.8366 174.0418 -0.0988 1.7864 0.3152 -0.3659 0.2548 0.1921 0.8374 -0.0605 5.0930 -1.3909 -0.8112 1.4935 -2.4917 -3.2868 -3.4655 3.1313 -1.3927 -7.4013 -6.2072 -0.6167 -2.3347 -10.3995 -1.9826 10.0459 0.0000 0.0000 12.1126 -0.1044 4.8419 -15.1945 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -9.1497 2.0464 0.1636 -5.9267 0.1111 -15.3938 -0.0000 0.0000 2.3954 6.2524 11.7179 4.9499 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -15.1482 1.0814 -2.8012 12.3519 0.0000 0.0000 -4.2833 0.8585 4.6873 1.6347 0.0000 0.0000 -6.0401 1.7337 2.9826 1.3849 0.0000 0.0000 -5.3472 0.9041 4.9651 -10.0684 0.0000 -0.0000\n 0.1079 -113.8732 24.4215 -6.2277 0.8769 173.8209 -0.1314 1.7244 0.3367 -0.4035 0.1958 0.1984 0.9460 0.1383 5.2991 -1.3283 -0.7790 1.4777 -2.3977 -3.2255 -3.7001 2.8417 -1.4821 -7.8039 -5.8961 -0.7868 -2.2646 -10.3788 -1.8077 10.2038 0.0000 0.0000 11.9409 -0.2890 4.8491 -15.1174 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -8.9047 2.2548 0.0294 -5.9347 0.0171 -15.1029 -0.0000 0.0000 2.4298 6.3042 11.6357 4.9176 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -15.1107 1.0909 -2.7461 12.3784 0.0000 0.0000 -4.2626 0.8808 4.8474 1.6268 0.0000 0.0000 -5.9833 1.7663 3.0944 1.4746 0.0000 0.0000 -5.4348 0.7095 5.0934 -9.7424 0.0000 -0.0000\n 0.1087 -113.8780 24.4217 -6.1983 0.8995 173.6527 -0.1730 1.6524 0.3534 -0.4412 0.1469 0.2049 1.0357 0.3317 5.4612 -1.2835 -0.7393 1.4601 -2.3881 -3.2217 -3.9204 2.6532 -1.5105 -8.1725 -5.6820 -0.9430 -2.2244 -10.4151 -1.6737 10.3028 0.0000 0.0000 11.8120 -0.3784 4.8122 -15.1513 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -8.7325 2.4736 -0.0639 -6.0416 -0.0278 -14.8610 -0.0000 0.0000 2.4736 6.2846 11.6479 4.9282 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.0763 1.0885 -2.7506 12.2973 0.0000 0.0000 -4.1855 0.8665 5.0169 1.5819 0.0000 0.0000 -5.9804 1.7815 3.2145 1.5295 0.0000 0.0000 -5.4654 0.5082 5.1784 -9.3226 0.0000 -0.0000\n 0.1126 -113.8820 24.4232 -6.2059 0.8844 173.6270 -0.1447 1.6194 0.3491 -0.4358 0.1161 0.2028 1.0627 0.4618 5.5006 -1.3030 -0.7140 1.4457 -2.5604 -3.2676 -4.0955 2.6712 -1.5104 -8.4456 -5.6464 -0.9554 -2.1580 -10.4357 -1.7398 10.1353 0.0000 0.0000 11.8452 -0.3624 4.8209 -15.2210 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.7125 2.6046 -0.0595 -6.1169 0.0532 -14.7231 -0.0000 0.0000 2.5316 6.1832 11.6645 5.0114 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -15.0272 1.0639 -2.8288 12.1615 0.0000 0.0000 -4.0980 0.8639 5.1121 1.5446 0.0000 0.0000 -6.0331 1.7547 3.3263 1.6007 0.0000 0.0000 -5.4608 0.4466 5.1188 -9.1174 0.0000 -0.0000\n 0.1191 -113.8873 24.4242 -6.2037 0.8718 173.6878 -0.0783 1.6291 0.3364 -0.4107 0.1146 0.2037 1.0969 0.5531 5.4640 -1.3474 -0.6890 1.4309 -2.8110 -3.3321 -4.2654 2.7535 -1.5447 -8.6774 -5.6406 -0.8803 -2.0806 -10.3911 -1.9316 9.8328 0.0000 0.0000 11.8949 -0.3322 4.8781 -15.2454 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -8.7370 2.6204 -0.0728 -6.0662 0.2219 -14.5694 -0.0000 0.0000 2.5795 6.1085 11.5625 5.1285 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.0200 1.0471 -2.8934 12.1447 0.0000 0.0000 -4.0730 0.8946 5.1055 1.5409 0.0000 0.0000 -6.1119 1.7225 3.4608 1.7210 0.0000 0.0000 -5.4639 0.5086 4.9229 -9.1574 0.0000 -0.0000\n 0.1270 -113.8938 24.4235 -6.1692 0.8867 173.7455 -0.0330 1.6651 0.3303 -0.3987 0.1193 0.2063 1.1832 0.6688 5.4343 -1.3650 -0.6728 1.4083 -2.9620 -3.3869 -4.4362 2.7403 -1.6216 -8.9088 -5.5296 -0.8501 -2.0683 -10.3024 -2.0641 9.6841 0.0000 0.0000 11.7575 -0.3727 4.8768 -15.2365 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -8.6663 2.5952 -0.1534 -5.9543 0.3668 -14.3747 -0.0000 0.0000 2.5829 6.1113 11.3590 5.2133 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -15.0685 1.0516 -2.8718 12.2890 0.0000 0.0000 -4.1167 0.9260 5.0262 1.5453 0.0000 0.0000 -6.1595 1.7152 3.5784 1.8385 0.0000 0.0000 -5.4793 0.5657 4.7369 -9.2128 0.0000 -0.0000\n 0.1354 -113.8993 24.4220 -6.1299 0.9141 173.7782 0.0097 1.7316 0.3281 -0.3870 0.1454 0.2107 1.2507 0.7500 5.4053 -1.3832 -0.6862 1.3833 -3.0033 -3.3937 -4.5680 2.6890 -1.7032 -9.1335 -5.3831 -0.8729 -2.1530 -10.2161 -2.1009 9.7342 0.0000 0.0000 11.5122 -0.4515 4.7769 -15.2629 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.5323 2.6400 -0.1482 -5.9049 0.4273 -14.2983 -0.0000 0.0000 2.5516 6.1151 11.1850 5.2588 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -15.1266 1.0617 -2.8062 12.4568 0.0000 0.0000 -4.1744 0.9404 4.9402 1.5292 0.0000 0.0000 -6.1623 1.7242 3.6221 1.8893 0.0000 0.0000 -5.4836 0.5683 4.6650 -9.1666 0.0000 -0.0000\n 0.1446 -113.9027 24.4214 -6.1217 0.9239 173.7954 0.0877 1.8197 0.3242 -0.3425 0.1909 0.2120 1.2284 0.7530 5.3502 -1.4490 -0.7131 1.3659 -3.0773 -3.3501 -4.6595 2.7479 -1.7501 -9.3423 -5.3531 -0.9081 -2.3161 -10.1288 -2.1131 9.8424 0.0000 0.0000 11.3886 -0.4703 4.6843 -15.3389 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.5045 2.7765 0.0646 -5.9261 0.4239 -14.4273 -0.0000 0.0000 2.5444 6.0657 11.0956 5.3035 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.1490 1.0508 -2.7957 12.5043 0.0000 0.0000 -4.1904 0.9591 4.9201 1.5015 0.0000 0.0000 -6.1437 1.7153 3.6007 1.8537 0.0000 0.0000 -5.4617 0.5734 4.6850 -9.1236 0.0000 -0.0000\n 0.1555 -113.9041 24.4225 -6.1303 0.9028 173.7754 0.1828 1.8866 0.3192 -0.2681 0.2338 0.2152 1.1435 0.7296 5.2899 -1.5380 -0.7207 1.3570 -3.2150 -3.2997 -4.7414 2.8966 -1.7515 -9.5261 -5.4248 -0.9779 -2.4983 -10.0440 -2.0962 9.9275 0.0000 0.0000 11.4197 -0.3887 4.6730 -15.3994 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.6315 2.9479 0.3627 -5.9474 0.3674 -14.5987 -0.0000 0.0000 2.5856 6.0268 11.0244 5.3775 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -15.1119 1.0024 -2.8698 12.4137 0.0000 0.0000 -4.1506 0.9933 5.0003 1.4921 0.0000 0.0000 -6.0990 1.6664 3.5664 1.7544 0.0000 0.0000 -5.4261 0.6161 4.7408 -9.1558 0.0000 -0.0000\n 0.1678 -113.9039 24.4238 -6.1127 0.8701 173.6864 0.2698 1.9221 0.3197 -0.2019 0.2428 0.2151 1.0444 0.7669 5.2767 -1.5990 -0.7141 1.3439 -3.2723 -3.2875 -4.8068 2.9666 -1.7232 -9.6638 -5.4416 -1.1257 -2.6070 -10.0079 -1.9732 9.9807 0.0000 0.0000 11.4302 -0.2846 4.6694 -15.3788 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.7670 3.1035 0.5368 -5.9558 0.2356 -14.5922 -0.0000 0.0000 2.6208 6.0238 10.9111 5.4741 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.0203 0.9289 -2.9451 12.2675 0.0000 0.0000 -4.0881 1.0312 5.1389 1.5100 0.0000 0.0000 -6.0138 1.5959 3.5373 1.6516 0.0000 0.0000 -5.4063 0.6597 4.8392 -9.1872 0.0000 -0.0000\n 0.1817 -113.9026 24.4244 -6.0681 0.8413 173.5454 0.3459 1.9508 0.3214 -0.1437 0.2418 0.2164 0.9297 0.8412 5.3118 -1.6323 -0.7239 1.3279 -3.1987 -3.2925 -4.8357 2.8972 -1.7053 -9.7597 -5.3540 -1.3126 -2.6099 -10.0330 -1.7475 9.9759 0.0000 0.0000 11.3313 -0.2768 4.6114 -15.3292 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -8.7797 3.2601 0.5709 -6.0512 0.0335 -14.4394 -0.0000 0.0000 2.6269 5.9368 10.7812 5.5605 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -14.9046 0.8433 -2.9509 12.1214 0.0000 0.0000 -4.0257 1.0680 5.2640 1.5266 0.0000 0.0000 -5.9224 1.5235 3.4590 1.6071 0.0000 0.0000 -5.4196 0.6713 5.0362 -9.1769 0.0000 -0.0000\n 0.1977 -113.9036 24.4251 -6.0477 0.8277 173.3990 0.4168 1.9713 0.3288 -0.0958 0.2420 0.2218 0.8235 0.9505 5.3813 -1.6669 -0.7235 1.3160 -3.1826 -3.3199 -4.8728 2.8104 -1.7119 -9.8493 -5.3065 -1.4887 -2.6017 -10.0639 -1.5407 9.8900 0.0000 0.0000 11.2267 -0.3784 4.5980 -15.3700 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -8.7598 3.3749 0.5611 -6.2975 -0.1516 -14.3093 -0.0000 0.0000 2.6551 5.6786 10.6350 5.6174 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -14.8320 0.7597 -2.9143 11.9929 0.0000 0.0000 -3.9584 1.1084 5.3582 1.5160 0.0000 0.0000 -5.8935 1.4593 3.3438 1.6240 0.0000 0.0000 -5.4466 0.6715 5.2863 -9.1938 0.0000 -0.0000\n 0.2175 -113.9081 24.4267 -6.0625 0.8167 173.3018 0.4898 1.9512 0.3395 -0.0598 0.2210 0.2287 0.7666 1.1505 5.4653 -1.7029 -0.6751 1.3119 -3.3799 -3.4139 -4.9738 2.8148 -1.7200 -9.9486 -5.4271 -1.6361 -2.6725 -10.0571 -1.4732 9.7325 0.0000 0.0000 11.2313 -0.4631 4.7449 -15.5049 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.8501 3.3987 0.5370 -6.6121 -0.2946 -14.2666 -0.0000 0.0000 2.7444 5.3657 10.4129 5.6587 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -14.7986 0.6779 -2.9409 11.8650 0.0000 0.0000 -3.8767 1.1527 5.4629 1.4924 0.0000 0.0000 -5.9064 1.3899 3.2082 1.6263 0.0000 0.0000 -5.4511 0.6957 5.5090 -9.2646 0.0000 -0.0000\n 0.2420 -113.9146 24.4288 -6.1188 0.7917 173.2982 0.5363 1.9180 0.3488 -0.0271 0.1817 0.2321 0.7414 1.3984 5.4928 -1.7408 -0.6109 1.2994 -3.6654 -3.5618 -5.0923 2.8594 -1.7095 -10.0361 -5.6160 -1.7818 -2.7589 -10.0446 -1.4897 9.5578 0.0000 0.0000 11.3061 -0.4324 4.9555 -15.6011 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -8.9955 3.4111 0.5091 -6.8569 -0.5092 -14.2754 -0.0000 0.0000 2.8518 5.1706 10.1253 5.7091 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -14.7801 0.5899 -3.0923 11.7029 0.0000 0.0000 -3.7873 1.2071 5.5951 1.4869 0.0000 0.0000 -5.9499 1.2958 3.0909 1.5855 0.0000 0.0000 -5.4294 0.7562 5.6147 -9.3178 0.0000 -0.0000\n 0.2712 -113.9187 24.4312 -6.1838 0.7218 173.3996 0.5738 1.9106 0.3473 0.0200 0.1645 0.2314 0.6859 1.5568 5.4148 -1.7911 -0.5919 1.2639 -3.8391 -3.6634 -5.1571 2.8636 -1.6903 -10.0971 -5.6888 -1.9671 -2.7721 -10.0770 -1.4197 9.4497 0.0000 0.0000 11.3496 -0.3483 5.0395 -15.6018 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -9.0535 3.5225 0.5176 -6.9983 -0.8424 -14.3179 -0.0000 0.0000 2.9184 5.1070 9.8719 5.7745 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -14.6764 0.4705 -3.3916 11.4085 0.0000 0.0000 -3.6681 1.2830 5.7672 1.4936 0.0000 0.0000 -6.0082 1.1494 3.0084 1.5642 0.0000 0.0000 -5.4171 0.8449 5.5847 -9.3146 0.0000 -0.0000\n 0.3040 -113.9178 24.4351 -6.2027 0.5965 173.5468 0.6404 1.8950 0.3414 0.0654 0.1558 0.2291 0.6454 1.6328 5.2974 -1.8441 -0.6020 1.2190 -3.9517 -3.6616 -5.1907 2.8679 -1.6676 -10.1435 -5.6461 -2.2122 -2.7639 -10.1461 -1.1994 9.4622 0.0000 0.0000 11.3388 -0.3198 5.0073 -15.6028 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -9.0539 3.6723 0.5602 -7.1105 -1.1401 -14.3977 -0.0000 0.0000 2.9446 5.1060 9.7146 5.8473 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -14.3949 0.3047 -3.8132 10.9068 0.0000 0.0000 -3.4737 1.3685 6.0077 1.4820 0.0000 0.0000 -6.0238 0.9457 2.9523 1.5817 0.0000 0.0000 -5.4212 0.9492 5.4913 -9.2978 0.0000 -0.0000\n 0.3365 -113.9197 24.4398 -6.2969 0.4872 173.6508 0.6294 1.8357 0.3489 0.0604 0.1206 0.2295 0.7110 1.7393 5.2503 -1.8797 -0.5737 1.1906 -4.1902 -3.5924 -5.2512 2.9499 -1.6351 -10.1711 -5.6337 -2.4874 -2.8312 -10.2082 -0.9222 9.5500 0.0000 0.0000 11.3347 -0.3452 5.0212 -15.6599 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.1270 3.7503 0.6247 -7.2266 -1.2801 -14.5397 -0.0000 0.0000 2.9665 5.1227 9.6310 5.9137 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -14.1569 0.1386 -4.2702 10.3084 0.0000 0.0000 -3.2189 1.4388 6.3281 1.4592 0.0000 0.0000 -6.1252 0.7455 2.8820 1.6036 0.0000 0.0000 -5.4087 1.0492 5.4572 -9.2844 0.0000 -0.0000\n 0.3671 -113.9236 24.4443 -6.4370 0.4124 173.6916 0.6172 1.7661 0.3623 0.0542 0.0781 0.2329 0.7682 1.8603 5.2666 -1.9300 -0.5312 1.1820 -4.4935 -3.4743 -5.3009 3.0863 -1.6238 -10.1646 -5.6417 -2.7079 -2.9592 -10.2472 -0.6994 9.6659 0.0000 0.0000 11.3585 -0.3574 5.0988 -15.6979 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -9.2215 3.7795 0.7939 -7.2939 -1.3138 -14.7738 -0.0000 0.0000 2.9839 5.1279 9.5914 5.9692 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -13.9771 -0.0118 -4.6763 9.6998 0.0000 0.0000 -2.9590 1.4990 6.6685 1.4574 0.0000 0.0000 -6.2349 0.5773 2.7071 1.5421 0.0000 0.0000 -5.3609 1.1321 5.5859 -9.2435 0.0000 -0.0000\n 0.3962 -113.9254 24.4480 -6.5563 0.3549 173.7085 0.7425 1.7732 0.3632 0.1447 0.0846 0.2348 0.5653 1.8609 5.2572 -2.0550 -0.5572 1.1694 -4.6096 -3.2832 -5.2667 3.1725 -1.6809 -10.1513 -5.5162 -2.8398 -3.0702 -10.2937 -0.5314 9.8511 0.0000 0.0000 11.3684 -0.3494 5.1112 -15.6855 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -9.1495 3.8904 1.1794 -7.3183 -1.3813 -15.1205 -0.0000 0.0000 3.0062 5.1058 9.6134 6.0033 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -13.7905 -0.1538 -4.9849 9.1210 0.0000 0.0000 -2.7302 1.5731 6.9429 1.4778 0.0000 0.0000 -6.2929 0.4361 2.4608 1.4302 0.0000 0.0000 -5.3089 1.1955 5.8200 -9.1867 0.0000 -0.0000\n 0.4245 -113.9241 24.4511 -6.6041 0.2989 173.7199 1.0447 1.8445 0.3445 0.3275 0.1453 0.2362 0.1010 1.7419 5.2112 -2.2406 -0.6437 1.1497 -4.4992 -3.0370 -5.1999 3.1748 -1.8003 -10.1790 -5.2329 -2.9265 -3.1606 -10.3840 -0.3740 10.1244 0.0000 0.0000 11.3523 -0.3721 5.0428 -15.7032 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -8.9216 4.0557 1.7004 -7.3737 -1.4745 -15.4890 -0.0000 0.0000 3.0566 5.1093 9.6551 6.0432 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -13.5463 -0.2912 -5.2286 8.5856 0.0000 0.0000 -2.5248 1.6552 7.1577 1.4785 0.0000 0.0000 -6.2901 0.3082 2.2985 1.3590 0.0000 0.0000 -5.2849 1.2546 5.9939 -9.1846 0.0000 -0.0000\n 0.4524 -113.9256 24.4536 -6.6868 0.2585 173.7179 1.3061 1.8805 0.3278 0.4810 0.1864 0.2402 -0.3043 1.6803 5.1956 -2.3890 -0.6867 1.1422 -4.4342 -2.8256 -5.2233 3.1543 -1.9163 -10.2495 -4.9913 -3.0136 -3.2897 -10.5014 -0.2404 10.3785 0.0000 0.0000 11.3526 -0.4129 5.0415 -15.7572 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -8.7815 4.1169 2.1288 -7.4525 -1.5209 -15.6992 -0.0000 0.0000 3.0966 5.1777 9.6128 6.1403 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -13.3915 -0.4175 -5.4512 8.1336 0.0000 0.0000 -2.3338 1.7153 7.3608 1.4421 0.0000 0.0000 -6.3792 0.1850 2.3129 1.3836 0.0000 0.0000 -5.2934 1.3317 6.0002 -9.2583 0.0000 -0.0000\n 0.4813 -113.9279 24.4557 -6.8190 0.2188 173.7207 1.4024 1.8469 0.3222 0.5379 0.1604 0.2445 -0.3886 1.7428 5.2307 -2.4609 -0.6473 1.1619 -4.6199 -2.6795 -5.3622 3.1787 -1.9933 -10.3255 -4.9351 -3.0639 -3.4753 -10.5797 -0.1703 10.4975 0.0000 0.0000 11.4037 -0.4200 5.1456 -15.7653 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.8530 4.0183 2.3915 -7.4679 -1.5046 -15.6937 -0.0000 0.0000 3.0625 5.2468 9.4515 6.2781 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -13.3137 -0.5487 -5.6766 7.7308 0.0000 0.0000 -2.1587 1.7487 7.5617 1.3985 0.0000 0.0000 -6.5395 0.0457 2.4217 1.4455 0.0000 0.0000 -5.3227 1.4315 5.8772 -9.3370 0.0000 -0.0000\n 0.5112 -113.9254 24.4578 -6.9318 0.1647 173.7479 1.4438 1.8108 0.3221 0.5552 0.1254 0.2494 -0.2962 1.7886 5.2641 -2.5070 -0.5860 1.1844 -4.9254 -2.5413 -5.5078 3.2517 -2.0666 -10.3943 -4.9745 -3.0396 -3.6613 -10.6049 -0.1501 10.5043 0.0000 0.0000 11.4782 -0.3872 5.2181 -15.7367 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -8.9929 3.8708 2.6129 -7.4061 -1.4634 -15.5674 -0.0000 0.0000 2.9690 5.2323 9.2725 6.3708 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -13.1951 -0.6883 -5.9296 7.3190 0.0000 0.0000 -1.9928 1.7768 7.7697 1.3804 0.0000 0.0000 -6.6699 -0.1081 2.5668 1.5106 0.0000 0.0000 -5.3723 1.5348 5.6769 -9.3563 0.0000 -0.0000\n 0.5391 -113.9220 24.4599 -7.0765 0.1103 173.8044 1.5004 1.7886 0.3099 0.5916 0.0895 0.2526 -0.3083 1.8261 5.2803 -2.5722 -0.5594 1.1946 -5.1048 -2.4027 -5.5820 3.3337 -2.1640 -10.4357 -4.9819 -3.0162 -3.8077 -10.6388 -0.1128 10.4753 0.0000 0.0000 11.5239 -0.3674 5.1930 -15.7386 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -9.0599 3.7849 2.8326 -7.3342 -1.4552 -15.4014 -0.0000 0.0000 2.9042 5.1802 9.1987 6.3858 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -13.0942 -0.8156 -6.2861 6.8878 0.0000 0.0000 -1.8180 1.8023 8.0516 1.3822 0.0000 0.0000 -6.8866 -0.2577 2.8123 1.6793 0.0000 0.0000 -5.4660 1.6338 5.3587 -9.3408 0.0000 -0.0000\n 0.5602 -113.9209 24.4613 -7.3134 0.0922 173.8970 1.5364 1.7373 0.3023 0.6262 0.0372 0.2543 -0.4650 1.9318 5.2979 -2.6329 -0.5211 1.1745 -5.0942 -2.3241 -5.5511 3.3976 -2.2423 -10.3682 -4.9733 -3.0902 -3.8873 -10.7173 0.0050 10.3926 0.0000 0.0000 11.5094 -0.4141 5.1503 -15.6963 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.1022 3.7662 2.9864 -7.2589 -1.5049 -15.2073 -0.0000 0.0000 2.8837 5.1867 9.2018 6.3797 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -13.0908 -0.8844 -6.7933 6.4506 0.0000 0.0000 -1.6622 1.8048 8.4522 1.3913 0.0000 0.0000 -7.2744 -0.3605 3.1222 1.9691 0.0000 0.0000 -5.5875 1.7264 4.9549 -9.3258 0.0000 -0.0000\n 0.5737 -113.9114 24.4628 -7.5119 0.0539 174.0700 1.5665 1.6190 0.2975 0.6664 -0.0543 0.2495 -0.6076 2.0895 5.3202 -2.6699 -0.4409 1.1371 -5.0102 -2.3101 -5.4068 3.4476 -2.2327 -10.1049 -5.0435 -3.2214 -3.9167 -10.7642 0.1934 10.2263 0.0000 0.0000 11.4503 -0.5246 5.1314 -15.5529 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.1851 3.8129 3.0490 -7.1458 -1.5839 -15.0243 -0.0000 0.0000 2.8609 5.2140 9.1103 6.3424 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -12.9642 -0.9378 -7.3920 5.9078 0.0000 0.0000 -1.5036 1.7633 8.8663 1.4027 0.0000 0.0000 -7.5866 -0.4453 3.2587 2.2115 0.0000 0.0000 -5.6944 1.8067 4.6395 -9.3021 0.0000 -0.0000\n 0.5776 -113.8918 24.4651 -7.6344 -0.0110 174.2775 1.5928 1.4765 0.2951 0.7114 -0.1514 0.2394 -0.6477 2.1985 5.3588 -2.7014 -0.3554 1.1126 -4.9711 -2.2938 -5.1600 3.4806 -2.1285 -9.6509 -5.2219 -3.2975 -3.9258 -10.6973 0.3718 10.0763 0.0000 0.0000 11.3663 -0.6369 5.0976 -15.4640 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -9.2684 3.9385 3.0493 -7.0044 -1.6115 -14.9159 -0.0000 0.0000 2.8553 5.1510 8.7910 6.1625 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -12.7285 -0.9906 -7.8671 5.3534 0.0000 0.0000 -1.3255 1.6959 9.1247 1.4133 0.0000 0.0000 -7.7389 -0.5103 3.2043 2.3311 0.0000 0.0000 -5.7572 1.8506 4.4824 -9.2675 0.0000 -0.0000\n 0.5691 -113.8764 24.4671 -7.7922 -0.0409 174.3972 1.5864 1.3288 0.2915 0.7107 -0.2325 0.2362 -0.6151 2.3108 5.4648 -2.7265 -0.2983 1.1158 -4.9942 -2.2622 -4.8483 3.4543 -2.0050 -9.0939 -5.4167 -3.3204 -3.8783 -10.5534 0.4774 10.0662 0.0000 0.0000 11.2585 -0.6810 5.0620 -15.5458 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.2769 4.0911 2.9499 -6.8495 -1.5536 -14.8993 -0.0000 0.0000 2.9265 5.0091 8.3387 5.8590 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -12.6905 -0.9993 -8.0444 5.0559 0.0000 0.0000 -1.1845 1.6443 9.1763 1.4132 0.0000 0.0000 -7.9760 -0.5213 3.2595 2.5248 0.0000 0.0000 -5.8183 1.8489 4.3268 -9.2649 0.0000 -0.0000\n 0.5478 -113.8785 24.4664 -8.1405 0.0304 174.4152 1.4032 1.1957 0.2941 0.5931 -0.2774 0.2439 -0.4284 2.4749 5.6243 -2.7236 -0.2473 1.1251 -5.1090 -2.2363 -4.5006 3.3516 -1.9453 -8.5175 -5.5060 -3.3753 -3.6765 -10.4325 0.5246 10.2132 0.0000 0.0000 11.1418 -0.6392 5.0533 -15.6459 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -9.1930 4.2340 2.7346 -6.6602 -1.4976 -15.0639 -0.0000 0.0000 3.0609 4.9065 8.0359 5.6780 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -13.1352 -0.8968 -8.0100 5.1904 0.0000 0.0000 -1.2027 1.6252 9.1311 1.4279 0.0000 0.0000 -8.6458 -0.4452 3.6926 3.0907 0.0000 0.0000 -5.9669 1.8099 3.9160 -9.2596 0.0000 -0.0000\n 0.5238 -113.8699 24.4658 -8.2209 0.0291 174.5245 1.2784 1.0830 0.2754 0.4443 -0.3168 0.2471 0.0908 2.5750 5.7249 -2.6997 -0.1836 1.1277 -5.4189 -2.1931 -4.1593 3.2901 -1.9557 -7.9892 -5.4345 -3.3655 -3.2880 -10.3631 0.4081 10.4798 0.0000 0.0000 11.0647 -0.5312 5.0169 -15.6694 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -8.9834 4.3181 2.4513 -6.5000 -1.4160 -15.6003 -0.0000 0.0000 3.2437 4.8633 8.0603 5.7906 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -13.2758 -0.8070 -8.1101 5.3539 0.0000 0.0000 -1.3058 1.5838 9.1283 1.5074 0.0000 0.0000 -9.1488 -0.4091 4.2013 3.9189 0.0000 0.0000 -6.2535 1.7481 3.3197 -9.1398 0.0000 -0.0000\n 0.5021 -113.8364 24.4680 -7.8530 -0.1389 174.7733 1.2859 1.0395 0.2351 0.3500 -0.3771 0.2338 0.9553 2.4808 5.7527 -2.6782 -0.1314 1.1350 -6.0019 -2.0842 -3.8862 3.3926 -1.9830 -7.5773 -5.2680 -3.1073 -2.7560 -10.3157 -0.0444 10.9344 0.0000 0.0000 11.0031 -0.4128 4.8847 -15.7487 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.6246 4.3169 2.0932 -6.5286 -1.1746 -16.6011 -0.0000 0.0000 3.5537 4.7728 8.3179 6.0536 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -12.7683 -0.8186 -8.4451 5.3288 0.0000 0.0000 -1.3604 1.4759 9.2010 1.6564 0.0000 0.0000 -9.1185 -0.4810 4.4512 4.7340 0.0000 0.0000 -6.6249 1.6582 2.8081 -8.9073 0.0000 -0.0000\n 0.4755 -113.7997 24.4713 -7.3143 -0.3492 174.9201 1.3289 1.0471 0.2004 0.2475 -0.4552 0.2191 1.9319 2.3206 5.8624 -2.6263 -0.1085 1.1704 -6.7146 -1.9474 -3.6787 3.5825 -1.9996 -7.2946 -5.0785 -2.6065 -2.0708 -10.3172 -0.8323 11.7287 0.0000 0.0000 10.8030 -0.4240 4.7009 -15.7531 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.1698 4.1792 1.5349 -6.7701 -0.7473 -17.9089 -0.0000 0.0000 3.9753 4.5627 8.5628 6.2166 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -12.0786 -0.8637 -8.7864 5.2939 0.0000 0.0000 -1.3653 1.3218 9.3738 1.7805 0.0000 0.0000 -8.8102 -0.5710 4.4893 5.3954 0.0000 0.0000 -6.9915 1.5361 2.6024 -8.7640 0.0000 -0.0000\n 0.4335 -113.7907 24.4702 -7.0713 -0.4264 174.7200 1.1485 1.0393 0.2037 0.0420 -0.5627 0.2168 2.8125 2.3458 6.1881 -2.4911 -0.0960 1.2267 -7.3277 -1.8605 -3.4293 3.6350 -2.0244 -7.0503 -4.8586 -2.1420 -1.1675 -10.4781 -1.6075 12.9671 0.0000 0.0000 10.4237 -0.7343 4.5555 -15.1607 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -7.7422 3.9795 0.7589 -7.0350 -0.4256 -19.3844 -0.0000 0.0000 4.2174 4.2402 8.6103 6.1825 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -11.8975 -0.8186 -8.9017 5.4415 0.0000 0.0000 -1.4055 1.1753 9.6804 1.8047 0.0000 0.0000 -8.8246 -0.5574 4.6134 6.0095 0.0000 0.0000 -7.3349 1.3822 2.6669 -8.8566 0.0000 -0.0000\n 0.3762 -113.7941 24.4656 -6.9879 -0.4506 174.2563 0.8407 0.9449 0.2294 -0.2336 -0.7291 0.2178 3.6254 2.5630 6.6863 -2.3082 -0.0626 1.2877 -7.8067 -1.8164 -3.0755 3.5071 -2.0691 -6.7501 -4.5754 -1.8805 -0.1338 -10.8497 -2.1032 14.6949 0.0000 0.0000 10.1227 -1.3249 4.5360 -13.7945 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -7.3739 3.8297 -0.0292 -7.1907 -0.4031 -21.2209 -0.0000 0.0000 4.0855 3.7346 8.3496 5.9128 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -11.8781 -0.7529 -8.8934 5.4599 0.0000 0.0000 -1.3598 1.0257 10.1270 1.7929 0.0000 0.0000 -8.9869 -0.4982 4.8630 6.5810 0.0000 0.0000 -7.6995 1.1921 2.8569 -9.0847 0.0000 -0.0000\n 0.3055 -113.7827 24.4620 -6.8583 -0.5466 173.7264 0.5192 0.7912 0.2605 -0.4737 -0.9344 0.2124 4.4203 2.7349 7.2399 -2.1640 -0.0055 1.3826 -8.3430 -1.6978 -2.7160 3.4242 -2.1398 -6.4049 -4.2665 -1.6583 0.7834 -11.2888 -2.4787 16.9674 0.0000 0.0000 10.1618 -1.9950 4.8255 -12.1498 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -7.0525 3.6796 -0.5968 -7.2598 -0.3597 -23.8300 -0.0000 0.0000 3.9280 2.8753 7.6929 5.3252 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -11.6362 -0.7488 -8.8504 5.1903 0.0000 0.0000 -1.1187 0.8210 10.5865 1.8414 0.0000 0.0000 -8.9907 -0.4710 5.1428 7.0356 0.0000 0.0000 -8.0976 0.9311 3.0561 -9.2547 0.0000 -0.0000\n 0.2146 -113.7491 24.4600 -6.5889 -0.6581 173.1520 0.3084 0.6734 0.2933 -0.6506 -1.1082 0.2105 5.1145 2.6983 7.8375 -2.0668 0.0722 1.5554 -9.0510 -1.4073 -2.4855 3.5878 -2.2864 -6.0916 -3.9527 -1.2150 1.4549 -11.5916 -3.0200 19.8109 0.0000 0.0000 10.4429 -2.6564 5.5257 -10.6821 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.7711 3.3353 -0.8592 -7.3076 0.2291 -27.5415 -0.0000 0.0000 4.3167 1.7072 6.6633 4.4354 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -11.2110 -0.6957 -8.6350 4.9362 0.0000 0.0000 -0.9066 0.5392 10.9293 1.8720 0.0000 0.0000 -8.6881 -0.3687 5.3291 7.2782 0.0000 0.0000 -8.4654 0.5566 3.3893 -9.3209 0.0000 -0.0000\n 0.0962 -113.7070 24.4558 -6.3048 -0.6753 172.4968 0.1178 0.5923 0.3359 -0.7987 -1.2284 0.2171 5.6748 2.5723 8.4952 -1.9546 0.1693 1.7800 -9.8686 -1.0304 -2.3667 3.9419 -2.5337 -5.8388 -3.5662 -0.6317 1.9883 -11.8261 -3.5971 23.1973 0.0000 0.0000 10.6672 -3.4756 6.2204 -9.3601 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.5412 2.7424 -0.8570 -7.3609 1.4209 -32.3714 -0.0000 0.0000 5.2400 0.6570 5.3544 3.3244 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -10.9599 -0.4583 -8.2306 5.0533 0.0000 0.0000 -0.9939 0.2110 11.2048 1.7151 0.0000 0.0000 -8.2966 -0.0781 5.3859 7.3797 0.0000 0.0000 -8.7546 0.0822 3.9486 -9.3403 0.0000 -0.0000\n -0.0447 -113.6536 24.4496 -5.9181 -0.6943 171.9228 -0.0431 0.4366 0.3691 -0.9350 -1.3082 0.2230 6.2438 2.4989 9.0984 -1.8304 0.2814 1.9854 -10.6589 -0.7783 -2.2717 4.3139 -2.7859 -5.6042 -3.0212 -0.2071 2.4960 -12.3398 -3.9518 27.0729 0.0000 0.0000 10.7695 -4.4923 6.2827 -8.1242 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.3119 2.0397 -0.8146 -7.5012 2.8394 -37.8369 -0.0000 0.0000 5.9863 0.0568 3.8376 1.9195 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -10.7791 -0.1009 -7.9390 5.5595 0.0000 0.0000 -1.2888 -0.1236 11.5206 1.3981 0.0000 0.0000 -7.7737 0.2988 5.4476 7.4301 0.0000 0.0000 -8.9704 -0.3941 4.4364 -9.2966 0.0000 -0.0000\n -0.2002 -113.5902 24.4400 -5.5231 -0.7352 171.6508 -0.2472 0.2563 0.3686 -1.0882 -1.2759 0.2285 6.8530 2.4159 9.4268 -1.7561 0.3463 2.1479 -11.3097 -0.7949 -2.1930 4.6258 -2.9008 -5.3286 -2.3309 -0.0221 2.9085 -13.2048 -4.2420 31.4551 0.0000 0.0000 10.8921 -5.2998 5.8877 -7.0001 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -5.9656 1.2773 -1.0768 -7.8748 4.3096 -43.1706 -0.0000 0.0000 6.0013 -0.2495 2.1989 0.1732 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -10.9771 0.3717 -7.6610 6.9120 0.0000 0.0000 -1.8728 -0.4581 11.5414 1.1599 0.0000 0.0000 -7.3273 0.6814 5.9209 7.6139 0.0000 0.0000 -9.1698 -0.7853 4.2448 -9.0880 0.0000 -0.0000\n -0.3706 -113.5380 24.4125 -5.3886 -0.3778 171.6793 -0.5787 0.5047 0.3602 -1.3004 -0.9603 0.2697 7.2368 2.1599 9.3516 -1.7458 0.2569 2.2682 -11.6975 -1.0863 -2.1683 4.8772 -2.8780 -4.9800 -1.5566 0.1528 3.2219 -13.9431 -4.7451 36.1774 0.0000 0.0000 11.1968 -5.5498 6.0020 -5.7705 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.3888 0.2595 -1.9044 -8.4765 5.8867 -47.7814 -0.0000 0.0000 5.4503 -0.6163 0.5439 -1.5135 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -12.5032 1.3226 -6.3920 10.2424 0.0000 0.0000 -3.4700 -0.8987 10.4078 1.1154 0.0000 0.0000 -7.4361 1.4102 7.1812 8.1228 0.0000 0.0000 -9.4042 -1.1555 3.0646 -8.6302 0.0000 -0.0000\n -0.5488 -113.5011 24.3496 -5.4202 0.7703 171.9271 -0.9567 1.6518 0.3508 -1.4622 -0.4224 0.3457 7.2203 1.8345 8.9286 -1.7703 -0.0141 2.3431 -11.8254 -1.6381 -2.2298 5.1172 -2.8552 -4.5900 -0.7475 0.4999 3.5243 -14.2410 -5.4653 40.8741 0.0000 0.0000 11.7852 -5.4432 7.1969 -4.3205 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -4.6027 -1.2194 -3.1975 -9.2110 7.4459 -51.7204 -0.0000 0.0000 4.8214 -1.0645 -1.1854 -2.6001 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -15.4680 2.9640 -3.7314 15.7711 0.0000 0.0000 -6.2213 -1.6143 7.9891 1.0574 0.0000 0.0000 -8.0260 2.8967 8.8454 8.9188 0.0000 0.0000 -9.7158 -1.6660 1.4091 -7.9670 0.0000 -0.0000\n -0.7089 -113.4341 24.2685 -4.8851 2.2253 172.3606 -0.9363 3.2918 0.2988 -1.3991 0.0817 0.4074 7.1132 1.6834 8.3727 -1.8188 -0.3148 2.3633 -11.9192 -2.3520 -2.4043 5.4319 -2.9227 -4.2638 -0.0178 0.8695 3.8126 -14.4300 -6.3963 45.3161 0.0000 0.0000 12.6369 -5.2473 9.0769 -3.0731 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -3.8885 -2.8854 -4.6056 -9.9581 8.6618 -55.4441 -0.0000 0.0000 4.2413 -1.3512 -3.1739 -3.1262 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -18.2377 4.7522 -1.0175 22.0284 0.0000 0.0000 -8.7670 -2.5105 5.3615 0.7723 0.0000 0.0000 -7.8948 4.7975 10.0012 9.5261 0.0000 0.0000 -10.0611 -2.2952 0.1115 -7.3199 0.0000 -0.0000\n -0.8332 -113.3218 24.2060 -3.8270 3.2017 172.7720 -0.6184 4.5182 0.2409 -1.2037 0.3940 0.4405 7.3038 1.7482 7.9206 -1.9058 -0.4908 2.3747 -12.1760 -2.9537 -2.6742 5.8885 -3.0228 -4.0704 0.4560 0.9656 4.0611 -14.7896 -7.6249 49.5167 0.0000 0.0000 13.5613 -4.8025 10.8784 -2.2971 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.5900 -4.1241 -5.7987 -10.5360 9.5544 -59.3318 -0.0000 0.0000 3.5673 -1.3302 -5.3627 -3.6271 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -20.2383 5.8663 0.8536 27.9464 0.0000 0.0000 -9.8167 -3.2934 2.7934 0.3831 0.0000 0.0000 -6.8134 6.2849 10.3497 9.7346 0.0000 0.0000 -10.3777 -2.8383 -0.5127 -6.8979 0.0000 -0.0000\n -0.9263 -113.1823 24.1753 -2.7535 3.5326 172.9422 -0.3236 5.0819 0.2371 -1.0521 0.5044 0.4455 7.6347 1.8430 7.6948 -1.9867 -0.5470 2.3868 -12.3671 -3.1856 -2.8801 6.4449 -3.0511 -3.9777 0.6794 0.7700 4.5055 -14.9645 -8.8514 53.4135 0.0000 0.0000 14.2545 -4.0069 12.2172 -1.5927 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.8468 -4.8014 -6.7464 -10.6252 10.6543 -63.1894 -0.0000 0.0000 2.7051 -1.0948 -7.4451 -4.2117 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -21.8896 6.0581 1.9261 33.1432 0.0000 0.0000 -9.6929 -3.7384 -0.0204 0.1629 0.0000 0.0000 -5.4153 7.0670 10.3582 9.6999 0.0000 0.0000 -10.6654 -3.1853 -0.6903 -6.6345 0.0000 -0.0000\n -0.9969 -113.0391 24.1642 -2.0473 3.4644 172.9430 -0.2784 5.2816 0.2461 -0.9921 0.5215 0.4400 7.8104 1.7490 7.5664 -1.9931 -0.5910 2.3754 -12.2899 -3.0170 -2.8550 6.9920 -3.0134 -3.8754 0.6469 0.4838 5.4258 -14.5593 -9.7295 56.8025 0.0000 0.0000 14.5195 -3.3297 12.9042 -0.6971 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -4.3986 -5.0535 -7.6036 -10.1784 11.7428 -66.6784 -0.0000 0.0000 1.9487 -0.9241 -8.9693 -4.5314 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -23.4475 5.5947 2.4541 37.1729 0.0000 0.0000 -9.6627 -3.6809 -2.9826 0.1293 0.0000 0.0000 -4.3929 7.3036 10.5290 9.8119 0.0000 0.0000 -11.0463 -3.3988 -0.8660 -6.3004 0.0000 -0.0000\n -1.0449 -112.8938 24.1611 -1.5294 3.2032 172.9917 -0.3148 5.3800 0.2383 -0.9969 0.5485 0.4281 7.9233 1.4866 7.3462 -1.9421 -0.6718 2.3441 -12.1813 -2.6946 -2.6817 7.4758 -2.9583 -3.6918 0.3432 0.1783 6.6728 -13.7790 -10.6030 59.6697 0.0000 0.0000 14.2666 -3.5090 12.4520 0.0118 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.9457 -5.0914 -8.5304 -9.5213 12.1454 -69.7261 -0.0000 0.0000 1.6970 -0.9512 -9.6634 -4.3514 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -24.6270 4.8283 2.7013 39.7107 0.0000 0.0000 -10.1153 -3.1986 -5.4663 0.1356 0.0000 0.0000 -3.6027 7.2209 10.9135 10.0915 0.0000 0.0000 -11.5219 -3.5189 -1.2924 -5.8849 0.0000 -0.0000\n -1.0733 -112.7509 24.1622 -1.1153 2.8873 173.1300 -0.4073 5.4467 0.2408 -1.0385 0.5987 0.4190 8.2275 1.2534 7.0445 -1.9201 -0.7367 2.3241 -12.3832 -2.4962 -2.5968 7.8954 -2.8846 -3.4521 -0.3302 -0.0561 7.8125 -12.8541 -12.4533 62.1206 0.0000 0.0000 13.6253 -4.4580 10.5938 0.1118 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.5339 -5.2950 -9.5679 -8.8497 12.1039 -72.4039 -0.0000 0.0000 1.9894 -1.0014 -9.5570 -3.8908 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -25.5837 3.9993 2.9288 40.8861 0.0000 0.0000 -10.2312 -2.7892 -6.7589 0.1824 0.0000 0.0000 -2.8627 6.9996 11.3568 10.2812 0.0000 0.0000 -11.9381 -3.4500 -1.8817 -5.6043 0.0000 -0.0000\n -1.0964 -112.6243 24.1653 -0.8864 2.7065 173.1489 -0.5351 5.5419 0.2647 -1.1223 0.6743 0.4234 8.5883 1.1382 6.8314 -1.9587 -0.7494 2.3414 -12.7897 -2.3880 -2.6414 8.2074 -2.8146 -3.2456 -1.1204 -0.1556 8.6952 -11.7104 -14.8827 64.2723 0.0000 0.0000 12.8102 -5.3691 7.8567 -0.2157 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.2403 -5.9362 -10.6342 -8.0928 12.4143 -74.6909 -0.0000 0.0000 2.5289 -0.9620 -8.9097 -3.5075 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -26.7434 3.3490 3.2387 41.0321 0.0000 0.0000 -9.4945 -2.8506 -6.5405 0.3046 0.0000 0.0000 -2.2350 6.8863 11.8640 10.1858 0.0000 0.0000 -12.1397 -3.1602 -2.4208 -5.5008 0.0000 -0.0000\n -1.1207 -112.5244 24.1659 -1.0506 2.7337 173.0261 -0.7966 5.6895 0.2655 -1.2192 0.7807 0.4441 8.6902 1.0834 6.7309 -2.0068 -0.7226 2.3080 -13.0988 -2.1709 -2.5963 8.3646 -2.8071 -3.1638 -1.7234 -0.2185 9.5539 -10.1625 -16.3635 66.1722 0.0000 0.0000 12.0345 -5.4852 5.2055 -0.3990 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -6.9829 -6.8396 -11.5792 -7.1949 13.2034 -76.5597 -0.0000 0.0000 3.0790 -0.9078 -8.0569 -3.3271 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -28.3251 2.9992 3.4111 40.2295 0.0000 0.0000 -8.3018 -3.2431 -5.1631 0.4417 0.0000 0.0000 -2.0985 6.9505 12.3660 10.0541 0.0000 0.0000 -12.2170 -2.8692 -2.7735 -5.3590 0.0000 -0.0000\n -1.1281 -112.4168 24.1676 -1.2165 2.6923 173.0914 -0.9607 5.8061 0.2346 -1.2726 0.8300 0.4409 8.6190 1.0170 6.5290 -2.0295 -0.6742 2.1467 -13.2699 -1.7629 -2.3496 8.4443 -2.8168 -3.2154 -2.0230 -0.4707 10.5166 -8.4808 -16.2782 67.7694 0.0000 0.0000 11.4336 -4.9641 3.1936 -0.2644 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -7.6293 -7.5857 -12.3350 -6.2771 13.9555 -78.0998 -0.0000 0.0000 3.5539 -0.8009 -7.2229 -3.2590 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -29.5233 2.7994 3.1150 38.3030 0.0000 0.0000 -7.1575 -3.6524 -3.4999 0.4990 0.0000 0.0000 -1.9978 6.9230 12.5478 10.0539 0.0000 0.0000 -12.3546 -2.7768 -2.9794 -5.0907 0.0000 -0.0000\n -1.1011 -112.2699 24.1747 -1.1374 2.3205 173.6199 -1.0230 5.7602 0.2045 -1.2938 0.8086 0.4019 8.7431 0.8446 6.0811 -2.0178 -0.5820 1.9048 -13.5131 -1.2177 -2.0301 8.6089 -2.6456 -3.3090 -2.2071 -0.9738 11.3940 -7.1529 -15.7339 68.9454 0.0000 0.0000 11.0795 -4.4601 1.5794 -0.2066 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -8.1143 -7.9527 -12.9059 -5.5126 14.3892 -79.4909 -0.0000 0.0000 3.8587 -0.4155 -6.4102 -3.2095 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -29.8447 2.5269 2.2623 35.3083 0.0000 0.0000 -6.0845 -3.9507 -2.3237 0.3769 0.0000 0.0000 -1.5739 6.5150 12.2202 10.2339 0.0000 0.0000 -12.6715 -2.8007 -3.1669 -4.8901 0.0000 -0.0000\n -1.0554 -112.0908 24.1802 -0.8503 1.8549 174.3902 -1.0258 5.6500 0.1975 -1.3195 0.7384 0.3464 9.0631 0.6326 5.5744 -1.9925 -0.4272 1.6778 -13.8076 -0.5334 -1.7332 8.9371 -2.1590 -3.3461 -2.3983 -1.5033 12.0863 -6.3986 -15.7143 69.6255 0.0000 0.0000 10.9956 -4.1061 -0.2181 -0.4962 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -8.4570 -8.2136 -13.3766 -4.8798 14.9726 -80.7113 -0.0000 0.0000 3.8986 0.2709 -5.5239 -3.1966 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -29.5578 2.2871 1.1214 31.7403 0.0000 0.0000 -5.1338 -4.1466 -1.7062 -0.0241 0.0000 -0.0000 -0.8523 5.9799 11.6577 10.4483 0.0000 0.0000 -13.0846 -2.7408 -3.3975 -4.9127 0.0000 -0.0000\n -1.0182 -111.9192 24.1710 -0.7678 1.7099 175.0743 -1.1237 5.6243 0.1888 -1.3711 0.6636 0.3056 9.2352 0.5257 5.2031 -1.9715 -0.1893 1.4743 -13.9827 0.3806 -1.3836 9.3443 -1.4709 -3.3314 -2.5544 -1.9532 12.6869 -6.0838 -15.8147 69.9608 0.0000 0.0000 11.1157 -3.5259 -2.2913 -0.9396 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -8.6294 -8.6443 -13.7965 -4.2607 15.9616 -81.6818 -0.0000 0.0000 3.8389 0.8275 -4.5259 -3.2601 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -29.4379 2.3442 -0.0964 28.1489 0.0000 0.0000 -4.4360 -4.1987 -1.1693 -0.5838 0.0000 -0.0000 -0.4392 5.7362 11.2382 10.7521 0.0000 0.0000 -13.5319 -2.5619 -3.6802 -5.0521 0.0000 -0.0000\n -0.9848 -111.7589 24.1512 -0.9016 1.7875 175.7531 -1.2449 5.5851 0.1621 -1.4255 0.6018 0.2796 9.2086 0.5315 4.8798 -1.9790 0.1365 1.2257 -14.0287 1.6157 -0.9335 9.7003 -0.8104 -3.3211 -2.7082 -2.3887 13.1761 -5.9860 -15.5991 70.2231 0.0000 0.0000 11.3990 -2.6431 -4.2509 -1.2684 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.6876 -9.1710 -14.1876 -3.4944 17.1002 -82.4652 -0.0000 0.0000 3.9900 1.0578 -3.6214 -3.3307 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -29.4761 2.6163 -1.3925 24.7229 0.0000 0.0000 -3.8194 -3.9102 -0.4152 -1.0084 0.0000 -0.0000 -0.3793 5.6614 11.0081 11.2256 0.0000 0.0000 -14.0515 -2.2777 -4.1192 -5.1451 0.0000 -0.0000\n -0.9319 -111.5804 24.1323 -1.0794 1.7742 176.6972 -1.4022 5.4345 0.1478 -1.4680 0.5052 0.2406 9.2331 0.5382 4.4356 -1.9976 0.5568 0.9379 -14.0673 3.1452 -0.4889 9.9766 -0.2440 -3.2999 -3.0122 -2.8298 13.3424 -5.9959 -15.5088 70.5266 0.0000 0.0000 11.9044 -1.8922 -5.7813 -1.5038 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -8.7016 -9.6204 -14.5848 -2.4875 18.0793 -83.2536 -0.0000 0.0000 4.4840 1.3337 -3.0591 -3.3391 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -29.3712 2.8351 -2.5821 21.6391 0.0000 0.0000 -3.1847 -3.1614 0.3497 -1.2921 0.0000 -0.0000 -0.3600 5.3990 10.7468 11.8069 0.0000 0.0000 -14.6615 -1.8370 -4.7718 -5.1938 0.0000 -0.0000\n -0.8545 -111.3598 24.1166 -1.0735 1.6371 177.8552 -1.4952 5.2118 0.1625 -1.5072 0.3789 0.1959 9.3669 0.4950 3.9267 -1.9990 1.0314 0.6884 -14.0818 4.9448 -0.1327 10.2599 0.3042 -3.1724 -3.4499 -3.0686 13.1623 -6.0930 -15.7630 70.7737 0.0000 0.0000 12.5742 -1.6150 -6.8724 -1.7073 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -8.5578 -9.8384 -15.0188 -1.3319 18.7256 -84.0920 -0.0000 0.0000 5.1786 1.9528 -2.7133 -3.3356 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -28.8929 2.9392 -3.3495 19.1894 0.0000 0.0000 -2.9986 -2.1659 0.8892 -1.6537 0.0000 -0.0000 0.0902 4.9657 10.3238 12.1320 0.0000 0.0000 -15.2362 -1.2579 -5.5020 -5.3047 0.0000 -0.0000\n -0.7719 -111.1149 24.0936 -1.1528 1.7090 178.9308 -1.6627 5.0645 0.2223 -1.5883 0.2736 0.1664 9.4456 0.5187 3.4889 -1.9931 1.5371 0.5033 -14.0385 6.9679 0.2217 10.6231 0.8850 -2.8535 -3.8364 -3.0975 12.9284 -6.3018 -15.6401 70.8900 0.0000 0.0000 13.1733 -1.5806 -7.7152 -1.8072 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.1139 -9.6532 -15.4040 -0.2096 18.8793 -84.8767 -0.0000 0.0000 5.9071 2.6415 -2.1578 -3.3928 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -28.4696 3.1985 -3.6294 17.5550 0.0000 0.0000 -3.4338 -1.2993 1.3811 -2.0621 0.0000 -0.0000 0.7765 4.7945 9.6999 11.9027 0.0000 0.0000 -15.6433 -0.7561 -5.9812 -5.4602 0.0000 -0.0000\n -0.6892 -110.8594 24.0625 -1.4997 1.9954 179.8270 -1.9879 4.8856 0.3428 -1.7415 0.2104 0.1494 9.4933 0.7119 3.1218 -2.0057 2.0792 0.3034 -14.0592 9.1443 0.7390 11.0067 1.4814 -2.3208 -4.0971 -3.2475 12.7876 -6.6823 -14.6660 71.0524 0.0000 0.0000 13.5186 -1.3330 -8.5246 -1.8213 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -7.5539 -8.9393 -15.6184 0.8622 18.6145 -85.5114 -0.0000 0.0000 6.5891 3.1503 -1.1353 -3.4860 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -28.2955 3.6299 -3.5572 16.6066 0.0000 0.0000 -3.6667 -0.6803 1.8476 -2.2295 0.0000 -0.0000 1.4840 4.9079 8.8480 11.1224 0.0000 0.0000 -15.9040 -0.4068 -6.0644 -5.5157 0.0000 -0.0000\n -0.5964 -110.5791 24.0297 -1.9535 2.3033 -179.4030 -2.3753 4.5656 0.5191 -1.9523 0.1462 0.1330 9.6411 1.0600 2.7900 -2.0199 2.6431 0.0520 -14.2343 11.4266 1.4991 11.2609 2.1208 -1.5741 -4.3554 -3.6612 12.5595 -7.2500 -13.6112 71.4409 0.0000 0.0000 13.7254 -0.7402 -9.3447 -1.8934 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -7.1338 -7.9189 -15.6433 1.9211 18.2476 -86.0059 -0.0000 0.0000 7.2206 3.6018 0.2701 -3.5949 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -28.2501 4.0231 -3.0746 16.5341 0.0000 0.0000 -3.1950 -0.2278 1.8633 -2.0201 0.0000 -0.0000 2.2956 5.0349 7.8466 10.0433 0.0000 0.0000 -16.0766 -0.0238 -5.8839 -5.4429 0.0000 -0.0000\n -0.4880 -110.2597 23.9916 -2.4267 2.6077 -178.7666 -2.7803 4.1653 0.6881 -2.1674 0.0621 0.1177 9.7882 1.5141 2.5507 -2.0022 3.1729 -0.2071 -14.4493 13.8275 2.4833 11.2857 2.8759 -0.6518 -4.6604 -4.0912 12.1564 -7.9079 -13.3240 71.9884 0.0000 0.0000 13.9696 -0.0937 -9.9467 -2.0044 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.8209 -7.0808 -15.5728 2.9218 18.0104 -86.3492 -0.0000 0.0000 7.7686 4.1270 1.8410 -3.7208 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -28.2156 4.2748 -2.3968 17.5200 0.0000 0.0000 -2.8312 -0.0882 1.3479 -1.6056 0.0000 -0.0000 3.1350 5.0835 6.9387 9.0746 0.0000 0.0000 -16.2495 0.5093 -5.6899 -5.4046 0.0000 -0.0000\n -0.3632 -109.9021 23.9446 -2.9950 2.8907 -178.3387 -3.2168 3.6303 0.8351 -2.4211 -0.0169 0.1147 9.8276 2.0659 2.4227 -1.9751 3.6620 -0.4566 -14.6759 16.3633 3.6612 11.1426 3.8173 0.3341 -4.8495 -4.4901 11.8395 -8.5756 -13.2403 72.4882 0.0000 0.0000 14.2612 0.2162 -10.1382 -2.0237 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -6.4258 -6.5683 -15.3856 3.8037 17.5725 -86.5808 -0.0000 0.0000 8.2213 4.5376 3.5286 -3.7923 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -27.8738 4.3233 -2.1286 18.6497 0.0000 0.0000 -3.1462 -0.3618 0.8497 -1.2889 0.0000 -0.0000 3.7795 5.0263 6.3922 8.4901 0.0000 0.0000 -16.5541 1.1089 -5.6315 -5.4831 0.0000 -0.0000\n -0.2110 -109.5085 23.9060 -3.6899 2.7678 -178.1740 -3.7922 2.5437 1.0310 -2.7945 -0.2340 0.0811 10.0549 2.8571 2.3766 -2.0170 4.1389 -0.7181 -15.2384 19.1152 5.0701 11.0047 5.0079 1.2963 -4.8144 -5.3357 11.7873 -9.3110 -12.1546 72.9874 0.0000 0.0000 14.4759 0.1368 -10.1059 -1.9467 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.0452 -5.8114 -14.9064 4.6315 16.3056 -86.8415 -0.0000 0.0000 8.5656 4.7886 5.4172 -3.6803 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -26.9062 3.7945 -2.5275 18.4355 0.0000 0.0000 -2.9393 -0.5418 0.7233 -1.1236 0.0000 -0.0000 4.1112 4.4489 6.3456 8.3966 0.0000 0.0000 -17.0806 1.8356 -5.6843 -5.5627 0.0000 -0.0000\n -0.0295 -109.0662 23.8971 -4.1231 2.0428 -178.3369 -4.2462 0.7502 1.2423 -3.2506 -0.7988 -0.0071 10.6841 3.9443 2.4862 -2.1759 4.6541 -0.9753 -16.3852 22.2469 6.8381 10.9683 6.4371 2.3254 -4.8491 -6.5954 11.8756 -9.9723 -10.5860 73.5457 0.0000 0.0000 14.6248 0.0270 -10.1554 -1.8892 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -5.9157 -4.3931 -14.1341 5.4532 14.3789 -87.1024 -0.0000 0.0000 8.7420 5.1585 7.3364 -3.4378 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -25.3300 2.4669 -3.0479 16.8794 0.0000 0.0000 -1.0894 0.0449 0.6978 -0.8107 0.0000 -0.0000 4.6008 3.1497 6.6576 8.6813 0.0000 0.0000 -17.5914 2.8821 -5.6734 -5.7013 0.0000 -0.0000\n 0.1475 -108.5926 23.9081 -4.2192 1.4971 -178.7638 -4.3166 -0.9515 1.3704 -3.4398 -1.7564 -0.1698 11.0189 5.3318 2.8245 -2.4066 5.2762 -1.2013 -17.8559 25.6007 9.0370 10.8710 7.8379 3.5567 -5.2896 -7.3122 12.0679 -10.1981 -10.3313 73.8257 0.0000 0.0000 14.7869 0.0365 -10.3938 -1.8682 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -5.8031 -2.9402 -13.4329 6.0292 12.8184 -87.0096 -0.0000 0.0000 8.7687 5.6448 8.7513 -3.2901 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -24.3037 1.1625 -2.5040 16.3940 0.0000 0.0000 0.8578 1.2027 -0.0147 -0.1644 0.0000 -0.0000 5.3635 2.0399 6.9672 9.2198 0.0000 0.0000 -17.6066 4.0867 -5.5023 -6.3088 0.0000 -0.0000\n 0.2792 -108.1334 23.9143 -4.3622 2.1294 -178.9868 -3.9914 -1.6820 1.3705 -3.1803 -2.5651 -0.2954 10.2393 6.7490 3.1783 -2.6129 6.0291 -1.4957 -19.2382 28.5247 11.4263 10.4673 8.7741 4.8623 -5.9327 -6.7424 12.5751 -9.9974 -11.4444 73.4260 0.0000 0.0000 14.8310 -0.1805 -10.7909 -1.8113 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -5.3815 -2.4020 -13.2551 6.2535 12.4799 -86.2669 -0.0000 0.0000 8.7490 5.8420 9.1203 -3.2644 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -24.9118 1.0791 -0.6964 19.0529 0.0000 0.0000 0.3084 2.0656 -1.5947 0.4883 0.0000 0.0000 5.8715 2.2139 6.9086 9.9823 0.0000 0.0000 -16.9018 5.1155 -5.4030 -7.5651 0.0000 -0.0000\n 0.3790 -107.6876 23.9153 -4.6411 3.5689 -178.2594 -3.5499 -1.6443 1.2267 -2.7099 -2.7801 -0.3310 8.8886 7.7903 3.0585 -2.7973 6.8099 -1.9728 -20.5321 30.2885 13.5296 9.8496 9.1689 5.8609 -6.4557 -5.3222 13.4059 -9.7820 -12.0499 72.3979 0.0000 0.0000 14.6375 -0.5941 -11.3449 -1.7723 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.8156 -2.8276 -13.5805 6.3575 13.0661 -85.1803 -0.0000 0.0000 8.6897 5.5209 8.4904 -3.2104 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -26.0255 2.0436 1.2076 23.1100 0.0000 0.0000 -2.4535 2.3772 -3.5609 0.6777 0.0000 0.0000 5.9844 3.0867 6.6289 11.0006 0.0000 0.0000 -15.7482 6.2690 -6.1091 -8.9556 0.0000 -0.0000\n 0.4955 -107.2311 23.9270 -4.9835 4.4956 -176.5491 -3.3089 -1.6997 1.0582 -2.4575 -2.8358 -0.3634 8.1077 8.5714 2.3461 -3.0101 7.3798 -2.5082 -21.9791 30.7657 14.9496 9.3212 9.3684 6.2902 -6.8667 -4.2546 13.9965 -9.8228 -11.0525 71.2659 0.0000 0.0000 14.3632 -0.5690 -11.9908 -1.8503 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.4893 -3.2884 -14.0449 6.6124 13.6070 -84.4299 -0.0000 0.0000 8.4835 5.0030 7.5233 -3.1538 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -26.2846 2.7308 2.4481 25.9744 0.0000 0.0000 -5.1735 2.6622 -5.8276 0.5204 0.0000 0.0000 5.8314 3.1070 6.6938 12.3900 0.0000 0.0000 -14.5425 7.9694 -8.0439 -9.9029 0.0000 -0.0000\n 0.6456 -106.7521 23.9448 -5.3443 4.3464 -174.7179 -3.4525 -2.1793 0.9679 -2.4832 -3.0372 -0.4284 8.0920 8.9756 1.5708 -3.2423 7.6441 -2.8624 -23.5227 30.3969 15.6913 8.9448 9.6538 6.2085 -7.2056 -4.0897 14.1192 -10.2522 -9.4384 70.2783 0.0000 0.0000 14.2838 -0.0643 -12.3614 -2.0012 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.3611 -3.2310 -14.4304 6.9527 13.9432 -84.2008 -0.0000 0.0000 8.1429 4.5936 6.8830 -3.2786 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -25.6870 2.3402 2.9381 27.1025 0.0000 0.0000 -6.8192 3.3096 -8.1341 0.4660 0.0000 0.0000 5.4975 1.8375 7.2006 14.1000 0.0000 0.0000 -13.5316 9.5777 -10.4947 -10.5442 0.0000 -0.0000\n 0.8018 -106.2510 23.9538 -5.3968 3.6996 -173.5932 -3.5764 -2.6832 0.8825 -2.5542 -3.2859 -0.4931 8.1694 8.7633 1.2186 -3.4534 7.6746 -2.9126 -24.7368 29.6371 15.9783 8.4706 9.9018 5.8792 -7.4097 -4.1850 14.2905 -10.9853 -8.7045 69.2431 0.0000 0.0000 14.4985 0.0621 -11.9444 -2.1446 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.1886 -3.0929 -14.9068 7.1798 14.8728 -83.8987 -0.0000 0.0000 7.8495 4.3136 6.7625 -3.5771 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -24.4076 1.3174 2.7062 27.1837 0.0000 0.0000 -8.0936 4.1750 -9.6991 0.6804 0.0000 0.0000 5.4131 0.1538 7.6792 15.9436 0.0000 0.0000 -12.9341 10.0370 -12.2051 -11.2649 0.0000 -0.0000\n 0.9318 -105.7635 23.9530 -5.3613 3.3883 -173.2652 -3.6050 -2.8463 0.7795 -2.5101 -3.3936 -0.5094 7.9061 8.2430 1.2374 -3.6387 7.6244 -2.8104 -25.3570 28.4714 15.8997 7.6974 9.8309 5.5803 -7.4156 -3.9885 14.8454 -11.6162 -8.7869 68.2831 0.0000 0.0000 14.8027 -0.5331 -10.6875 -2.1990 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.9661 -3.2718 -15.5834 7.2450 16.3357 -83.0747 -0.0000 0.0000 7.8046 4.3870 7.0777 -3.7779 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -23.0485 0.6492 1.8580 27.0431 0.0000 0.0000 -9.6521 4.9254 -9.9239 1.0554 0.0000 0.0000 5.0133 -0.9899 7.8658 18.5418 0.0000 0.0000 -12.5667 9.7944 -12.8172 -11.7627 0.0000 -0.0000\n 1.0370 -105.3089 23.9549 -5.2058 3.5043 -173.3318 -3.3656 -2.8514 0.6857 -2.3536 -3.4167 -0.4976 7.4221 8.0427 1.3261 -3.8428 7.5530 -2.7345 -25.4971 26.5783 15.3811 6.7850 9.4357 5.4945 -7.4061 -3.5918 15.3572 -11.6530 -8.9040 67.9848 0.0000 0.0000 14.8507 -0.9560 -9.1226 -2.1164 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.8604 -3.4552 -16.2197 7.2650 17.1657 -82.0502 -0.0000 0.0000 7.9896 5.2269 7.6665 -3.6864 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -21.6633 0.4821 0.8834 26.9332 0.0000 0.0000 -11.1766 5.4745 -9.3521 1.4580 0.0000 0.0000 3.7083 -1.7648 7.9866 22.9282 0.0000 0.0000 -11.6681 10.7498 -13.0974 -11.2767 0.0000 -0.0000\n 1.1427 -104.8953 23.9537 -5.0845 3.5564 -173.4393 -3.0569 -3.0163 0.5876 -2.1629 -3.4647 -0.4746 6.9488 8.3199 1.3629 -4.0867 7.4464 -2.7450 -25.3637 23.8790 14.4306 5.9983 8.8874 5.5727 -7.4931 -3.2583 15.4043 -11.1165 -8.8561 68.5891 0.0000 0.0000 14.4585 -0.5757 -8.0832 -1.9781 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.7960 -3.2150 -16.5228 7.2181 16.6591 -81.3624 -0.0000 0.0000 8.1827 6.5332 8.2349 -3.4789 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -20.4844 0.1807 0.4229 26.8947 0.0000 0.0000 -12.2724 5.9910 -9.0933 1.7435 0.0000 0.0000 1.0842 -2.9363 8.4105 29.2825 0.0000 0.0000 -10.1956 13.3036 -13.5120 -9.6749 0.0000 -0.0000\n 1.2556 -104.5086 23.9413 -4.9257 3.3731 -173.5837 -2.7686 -3.3770 0.4997 -2.0209 -3.4146 -0.4266 6.6353 8.7046 1.3686 -4.2977 7.2975 -2.7435 -25.0187 20.8594 13.2067 5.3385 8.2480 5.5427 -7.5263 -2.8364 15.1871 -10.4682 -8.9753 69.5924 0.0000 0.0000 13.7285 0.0905 -8.1477 -1.8885 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.5814 -2.7116 -16.5875 6.8879 15.6754 -80.9586 -0.0000 0.0000 8.1327 7.2177 8.3377 -3.3965 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -19.4318 -0.5411 0.6838 27.0236 0.0000 0.0000 -13.1358 6.5312 -9.4484 1.7973 0.0000 0.0000 -2.0701 -4.6489 9.3197 35.9770 0.0000 0.0000 -9.7240 14.9002 -13.0656 -8.1293 0.0000 -0.0000\n 1.3566 -104.1314 23.9340 -4.6741 3.2617 -173.9494 -2.6225 -3.7372 0.4497 -1.9649 -3.2544 -0.3585 6.6273 9.0730 1.4933 -4.3733 7.1531 -2.7026 -24.6034 18.2560 11.9749 4.6967 7.5002 5.1917 -7.2543 -2.2715 15.1365 -10.0491 -9.0138 70.5012 0.0000 0.0000 12.8567 0.3649 -9.1638 -1.9134 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.2875 -2.3155 -16.6776 6.2989 15.3697 -80.4371 -0.0000 0.0000 7.7544 6.4788 7.8267 -3.4624 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -18.3649 -1.2161 1.2387 27.3554 0.0000 0.0000 -13.9382 6.8991 -9.6139 1.6419 0.0000 0.0000 -4.8525 -6.3618 10.8109 41.0588 0.0000 0.0000 -11.7156 13.1743 -10.3566 -7.6791 0.0000 -0.0000\n 1.4308 -103.7554 23.9494 -4.3323 3.4037 -174.6713 -2.5915 -4.0189 0.4409 -1.9882 -3.1310 -0.3063 6.8944 9.5135 1.8580 -4.3249 7.0784 -2.6299 -24.3606 16.5062 11.0095 4.2160 6.7636 4.5903 -6.9396 -1.6353 15.3359 -9.5249 -8.8779 71.2572 0.0000 0.0000 12.0445 0.5228 -10.2980 -2.0074 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.1213 -2.1786 -16.8189 5.7942 15.7730 -79.7201 -0.0000 0.0000 7.1883 4.7615 7.1497 -3.5888 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -17.1780 -1.4153 1.4369 27.6750 0.0000 0.0000 -14.5889 6.9577 -8.7783 1.4224 0.0000 0.0000 -6.9247 -7.7661 12.9624 43.3921 0.0000 0.0000 -14.5328 8.8558 -5.8680 -7.7016 0.0000 -0.0000\n 1.4857 -103.3775 23.9811 -3.9285 3.6483 -175.7181 -2.5563 -4.2753 0.4313 -1.9793 -3.0747 -0.2440 7.1819 9.9551 2.4197 -4.2513 7.0546 -2.5221 -24.4153 15.6024 10.4618 4.1128 6.1589 3.9780 -6.9450 -1.0010 15.5867 -8.5143 -8.9388 72.0122 0.0000 0.0000 11.4321 0.9736 -10.8787 -1.9981 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.1248 -2.1822 -16.8375 5.6362 16.0917 -79.1111 -0.0000 0.0000 6.7286 3.4529 6.9236 -3.6522 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.7596 -1.2502 0.9906 27.5690 0.0000 0.0000 -15.0738 6.8410 -7.0181 1.2098 0.0000 0.0000 -8.4179 -9.0781 15.5634 43.0318 0.0000 0.0000 -15.6970 5.1655 -1.5872 -7.4338 0.0000 -0.0000\n 1.5315 -103.0036 24.0073 -3.5334 3.9114 -176.9205 -2.4539 -4.4138 0.4169 -1.9068 -3.0563 -0.2078 7.3338 10.2831 3.1192 -4.2077 7.0854 -2.4404 -24.6434 15.1833 10.2689 4.2947 5.6755 3.5231 -7.1303 -0.4313 15.7999 -7.3022 -9.4061 72.7302 0.0000 0.0000 11.0754 1.3956 -10.9602 -1.8468 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.2542 -2.3124 -16.6509 5.8020 16.0207 -78.8431 -0.0000 0.0000 6.5716 3.3412 7.2376 -3.5984 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -14.2037 -0.9614 0.2175 27.0417 0.0000 0.0000 -15.6051 6.7363 -5.0355 0.9850 0.0000 0.0000 -9.6416 -10.3537 18.0761 40.8631 0.0000 0.0000 -15.3242 3.9877 1.0240 -7.1987 0.0000 -0.0000\n 1.5623 -102.6473 24.0123 -3.2426 4.2097 -178.1085 -2.3615 -4.4719 0.3917 -1.8193 -2.9973 -0.1649 7.4154 10.5532 3.8028 -4.1766 7.1372 -2.3707 -24.8304 14.9373 10.2548 4.5113 5.2639 3.2313 -7.1189 0.1146 16.0187 -6.4560 -10.0044 73.2580 0.0000 0.0000 10.8902 1.3866 -10.9472 -1.6845 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -3.5156 -2.5499 -16.4018 6.0602 15.9274 -78.7797 -0.0000 0.0000 6.6368 4.0524 7.6767 -3.5343 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -12.9013 -0.6704 -0.2227 26.6893 0.0000 0.0000 -16.3347 6.6134 -3.5182 0.8206 0.0000 0.0000 -10.9701 -11.3474 19.7732 37.7841 0.0000 0.0000 -14.6239 4.1670 1.7629 -7.3168 0.0000 -0.0000\n 1.5624 -102.3137 23.9947 -3.0117 4.5890 -179.2447 -2.2587 -4.5208 0.3740 -1.7681 -2.9541 -0.1268 7.5177 10.8901 4.4664 -4.1254 7.2230 -2.3162 -24.8919 14.7649 10.3076 4.7105 4.9388 3.0436 -6.9221 0.6426 16.2812 -6.0357 -10.4184 73.5646 0.0000 0.0000 10.7201 1.2218 -10.9921 -1.6129 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.8553 -2.7452 -16.2332 6.2020 15.9762 -78.6744 -0.0000 0.0000 6.7304 4.9040 7.8161 -3.5700 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -12.0833 -0.3315 0.0586 27.0733 0.0000 0.0000 -17.2736 6.3427 -2.6851 0.8436 0.0000 0.0000 -12.5274 -11.8086 20.0042 34.2413 0.0000 0.0000 -13.8213 4.3404 1.3048 -7.5933 0.0000 -0.0000\n 1.5243 -101.9958 23.9578 -2.8905 5.0381 179.6774 -2.2132 -4.5765 0.3568 -1.7632 -2.9626 -0.0875 7.6317 11.2796 5.0853 -4.0675 7.3241 -2.2271 -24.8215 14.7097 10.3680 4.9360 4.6719 2.9168 -6.8103 1.0368 16.5450 -5.6775 -10.5730 73.7367 0.0000 0.0000 10.5118 1.3045 -11.0197 -1.5972 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.1063 -2.7048 -16.1390 6.1991 15.8174 -78.4989 -0.0000 0.0000 6.8159 5.6302 7.5827 -3.7069 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -11.7488 0.1358 0.7289 28.1094 0.0000 0.0000 -18.4078 5.9422 -2.2108 1.0448 0.0000 0.0000 -14.3199 -11.7619 18.7407 30.3756 0.0000 0.0000 -12.5666 4.6627 0.4143 -7.9503 0.0000 -0.0000\n 1.4538 -101.6664 23.9112 -2.7801 5.4467 178.6797 -2.2373 -4.6867 0.3333 -1.7636 -2.9755 -0.0699 7.7294 11.6284 5.6640 -3.9918 7.4077 -2.1324 -24.5845 14.7081 10.3753 5.1248 4.3731 2.8330 -6.8329 1.1767 16.7597 -5.1990 -10.5406 73.8223 0.0000 0.0000 10.3697 1.5020 -11.0438 -1.5717 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.2220 -2.4809 -16.0022 6.2225 15.4120 -78.4036 -0.0000 0.0000 6.9701 6.2236 7.1950 -3.8696 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -11.3943 0.6955 1.2312 29.1279 0.0000 0.0000 -19.6292 5.5682 -1.6738 1.2649 0.0000 0.0000 -15.9431 -11.4729 16.8089 26.1049 0.0000 0.0000 -10.9834 5.6725 -0.6965 -8.7075 0.0000 -0.0000\n 1.3525 -101.3067 23.8697 -2.6406 5.7665 177.7587 -2.3749 -4.8748 0.2918 -1.8181 -2.9561 -0.0492 7.9228 11.8868 6.1544 -3.8777 7.4606 -2.0328 -24.2450 14.6335 10.3009 5.2680 4.0352 2.7801 -6.8835 1.1365 16.8636 -4.6707 -10.5080 73.8726 0.0000 0.0000 10.3309 1.4729 -11.1391 -1.5339 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.3305 -2.2169 -15.7749 6.4011 15.2242 -78.4254 -0.0000 0.0000 7.1608 6.6275 6.9907 -4.0444 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -10.7225 1.3265 1.4861 29.7177 0.0000 0.0000 -20.7647 5.2222 -0.9891 1.3774 0.0000 0.0000 -17.1628 -11.0631 14.9427 21.4401 0.0000 0.0000 -9.3782 7.2467 -1.9762 -10.0606 0.0000 -0.0000\n 1.2188 -100.9164 23.8410 -2.4130 5.9845 176.9029 -2.5325 -5.1267 0.2403 -1.8976 -2.9529 -0.0432 8.1909 12.0867 6.5677 -3.7452 7.4668 -1.9353 -23.9283 14.4364 10.1718 5.4738 3.7569 2.7276 -6.9743 1.1143 16.8436 -4.1096 -10.7240 73.9856 0.0000 0.0000 10.2176 1.2444 -11.3095 -1.5150 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -4.4790 -1.9841 -15.5290 6.6813 15.4438 -78.4280 -0.0000 0.0000 7.2547 6.8691 7.1663 -4.2837 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -9.6774 1.9940 1.7416 29.8894 0.0000 0.0000 -21.6964 4.7391 -0.3746 1.3902 0.0000 0.0000 -18.1237 -10.5575 13.0250 16.9226 0.0000 0.0000 -7.6748 8.8782 -2.8744 -11.4968 0.0000 -0.0000\n 1.0561 -100.5109 23.8196 -2.1855 6.0762 176.1164 -2.6458 -5.4557 0.1967 -1.9148 -2.9594 -0.0481 8.3289 12.2412 6.9257 -3.6467 7.4252 -1.8478 -23.5964 14.0968 9.9743 5.6601 3.4500 2.6385 -7.1466 1.1867 16.7878 -3.4553 -11.1461 74.1473 0.0000 0.0000 9.9034 1.0834 -11.4852 -1.5450 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.5785 -1.7164 -15.3210 6.9678 15.6096 -78.3764 -0.0000 0.0000 7.2461 7.2165 7.5694 -4.5633 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -8.4877 2.6467 2.0188 29.8275 0.0000 0.0000 -22.4237 4.1004 0.1116 1.3781 0.0000 0.0000 -19.3409 -10.0748 11.0841 13.5441 0.0000 0.0000 -6.1175 10.0909 -2.8489 -12.0906 0.0000 -0.0000\n 0.8726 -100.0914 23.8021 -1.9820 6.0046 175.2676 -2.6510 -5.9041 0.1647 -1.8866 -2.9835 -0.0402 8.1980 12.4520 7.3619 -3.5628 7.3413 -1.7648 -23.0085 13.4219 9.6289 5.4910 2.7184 2.5364 -7.2410 1.3178 16.8088 -2.7633 -11.3216 74.1558 0.0000 0.0000 9.5803 0.9871 -11.5629 -1.6368 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.6462 -1.2345 -15.0697 7.2443 15.4249 -78.4543 -0.0000 0.0000 7.2725 7.7924 7.8686 -4.8621 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -7.2147 3.2517 2.1487 29.5495 0.0000 0.0000 -22.9475 3.4439 0.7524 1.3471 0.0000 0.0000 -20.8421 -9.7258 10.1548 11.6822 0.0000 0.0000 -5.5426 10.5682 -2.2858 -11.6560 0.0000 -0.0000\n 0.6755 -99.6473 23.7893 -1.8952 5.7839 174.1041 -2.7332 -6.4138 0.1467 -1.8737 -3.1089 -0.0315 7.8641 12.8643 8.1015 -3.4121 7.1874 -1.6516 -22.0911 12.0541 9.0875 4.8867 1.2790 2.5205 -7.0889 1.4187 16.8850 -2.1239 -10.8294 73.9127 0.0000 0.0000 9.4618 0.6161 -11.4642 -1.7354 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -4.8699 -0.4118 -14.6834 7.4520 15.3196 -78.7195 -0.0000 0.0000 7.2925 8.2068 7.9420 -5.2775 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.9493 3.8154 2.2267 29.0175 0.0000 0.0000 -23.2508 2.7528 1.7376 1.1896 0.0000 0.0000 -22.2239 -9.5078 10.6240 10.5832 0.0000 0.0000 -6.0282 10.2952 -1.7823 -10.8414 0.0000 -0.0000\n 0.4708 -99.1694 23.7736 -1.9385 5.4222 172.6932 -2.9829 -6.7718 0.1115 -1.9497 -3.4064 -0.0431 7.5256 13.3923 9.0708 -3.2134 6.8746 -1.4496 -21.0702 9.8580 8.3404 4.2707 -0.6161 2.6307 -6.7116 1.3111 16.8200 -1.5768 -9.7081 73.6724 0.0000 0.0000 9.3831 -0.1774 -11.3033 -1.7695 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -5.2932 0.6195 -14.2718 7.4484 15.6114 -78.9184 -0.0000 0.0000 7.0492 7.8621 7.8417 -5.9063 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -4.6869 4.3108 2.4194 28.2910 0.0000 0.0000 -23.3822 1.8934 2.8103 0.8300 0.0000 0.0000 -23.2222 -9.3486 11.1279 9.4539 0.0000 0.0000 -6.4117 9.8519 -1.2788 -10.1971 0.0000 -0.0000\n 0.2573 -98.6458 23.7389 -1.9231 4.9133 171.5213 -3.2483 -6.9039 0.0441 -2.0496 -3.5949 -0.0469 7.2569 13.6095 9.8049 -3.0680 6.3350 -1.1546 -20.1301 7.2176 7.3787 4.0390 -2.4054 2.7275 -6.2674 0.9279 16.4719 -1.1176 -8.5197 73.7483 0.0000 0.0000 9.0953 -0.9209 -11.3009 -1.7640 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -5.6914 1.5088 -14.0216 7.2150 15.8262 -78.8520 -0.0000 0.0000 6.4580 6.6710 7.4183 -6.5737 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -3.1920 4.7296 2.5557 27.5647 0.0000 0.0000 -23.4746 0.9285 3.6196 0.3795 0.0000 0.0000 -23.8344 -9.0228 10.4127 8.3991 0.0000 0.0000 -6.0309 9.8011 -0.4622 -9.6790 0.0000 -0.0000\n 0.0239 -98.0606 23.6808 -1.7624 4.2717 170.8406 -3.4824 -6.9600 -0.0508 -2.1097 -3.5026 -0.0359 7.0391 13.3123 10.0908 -2.9831 5.6688 -0.8507 -19.2870 4.7194 6.2944 4.0747 -3.8046 2.6327 -5.8288 0.4556 15.9768 -0.7352 -7.8121 74.1083 0.0000 0.0000 8.7470 -1.0788 -11.4029 -1.7652 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.9020 2.0638 -13.8589 6.9286 15.3382 -78.7045 -0.0000 0.0000 5.8246 5.2362 6.4412 -6.9807 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -1.3468 5.1310 2.3841 26.9399 0.0000 0.0000 -23.5701 -0.0150 4.2254 -0.0576 0.0000 -0.0000 -23.9171 -8.2679 9.1111 7.5918 0.0000 0.0000 -5.4955 9.7640 0.3394 -9.2348 0.0000 -0.0000\n -0.2476 -97.4020 23.6144 -1.5344 3.7237 170.1876 -3.8075 -6.8338 -0.1966 -2.2648 -3.5534 -0.0550 6.9594 12.8425 10.2854 -2.8582 5.0432 -0.5507 -18.6657 2.6220 5.3160 4.1092 -4.9304 2.3576 -5.4162 -0.0082 15.5963 -0.3445 -7.5047 74.5358 0.0000 0.0000 8.6016 -0.9129 -11.3539 -1.6929 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.0478 2.5541 -13.4806 6.7147 14.0736 -78.7711 -0.0000 0.0000 5.5220 4.2439 5.2932 -7.1039 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 0.6621 5.8788 1.9428 26.3578 0.0000 0.0000 -23.5722 -1.1662 5.1340 -0.6089 0.0000 -0.0000 -22.9206 -6.9569 8.4086 6.2977 0.0000 0.0000 -4.6675 8.8196 0.5925 -9.2822 0.0000 -0.0000\n -0.5712 -96.6670 23.5529 -1.2342 3.7418 169.0875 -4.3518 -5.9868 -0.3986 -2.6695 -4.2239 -0.1845 7.2323 12.6826 10.7410 -2.6719 4.4803 -0.2136 -18.4630 0.6746 4.5295 4.2127 -6.0105 2.0389 -4.9855 -1.0710 15.3823 0.0217 -6.6806 74.9878 0.0000 0.0000 8.5229 -1.1465 -11.3014 -1.5030 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -6.3302 3.3305 -12.8152 6.5146 12.2727 -79.0271 -0.0000 0.0000 5.5332 3.8830 4.7580 -7.1325 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 2.5441 7.6190 1.3256 25.9810 0.0000 0.0000 -23.3523 -2.8435 6.7493 -1.4517 0.0000 -0.0000 -20.7172 -5.0622 7.8465 4.0371 0.0000 0.0000 -1.9474 7.0114 0.8168 -9.8980 0.0000 -0.0000\n -0.9477 -95.8360 23.5113 -0.1942 4.9143 167.8951 -4.8686 -3.8860 -0.5238 -3.1821 -5.1892 -0.4247 7.9450 13.1172 11.1764 -2.5112 3.8277 0.1245 -18.4418 -1.6606 3.6286 4.6234 -7.3777 1.7089 -4.3478 -3.4011 15.0955 0.1731 -4.7925 75.4414 0.0000 0.0000 8.3177 -1.6526 -11.5343 -1.3652 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.7935 4.2648 -12.2856 6.3253 10.2556 -79.1984 -0.0000 0.0000 5.5221 3.9020 4.9399 -7.1609 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 4.7925 11.0366 0.3601 26.1358 0.0000 0.0000 -22.7089 -4.8273 8.8660 -2.6075 0.0000 -0.0000 -17.5706 -2.1635 5.9667 1.7774 0.0000 0.0000 2.8709 5.6149 2.4259 -10.2162 0.0000 -0.0000\n -1.3557 -94.9052 23.5171 2.0446 7.1748 167.2462 -5.0691 -1.2325 -0.4529 -3.4804 -5.2673 -0.5105 8.6758 14.1326 11.1649 -2.3812 2.9938 0.3734 -17.8961 -4.9431 2.2531 5.2731 -9.4795 1.2994 -3.4915 -6.1642 14.5536 0.3929 -3.1624 75.5599 0.0000 0.0000 8.3000 -1.5189 -11.5168 -1.3874 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -7.3061 4.9172 -12.3406 6.3080 8.6272 -79.2205 -0.0000 0.0000 5.2936 3.9493 5.1527 -7.1319 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 8.0917 15.8214 -0.9305 26.7779 0.0000 0.0000 -21.1899 -6.5024 10.6781 -4.2250 0.0000 -0.0000 -14.0684 1.9265 2.2491 1.2699 0.0000 0.0000 6.4639 5.6589 6.0505 -9.6400 0.0000 -0.0000\n -1.7512 -93.9502 23.5933 4.3510 9.3792 166.8545 -5.3388 0.4061 -0.1768 -3.5375 -4.2990 -0.2891 8.7740 15.5297 11.0952 -2.1265 2.2279 0.5312 -16.5996 -9.4053 0.5778 5.7864 -12.3654 0.8032 -2.6188 -7.5909 13.8385 1.4092 -3.3576 75.1368 0.0000 0.0000 8.6491 -0.9758 -10.5458 -1.3154 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.8716 5.2072 -12.7591 6.6786 8.1422 -79.4020 -0.0000 0.0000 4.9190 3.8497 4.8851 -7.0472 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 11.1597 20.2092 -1.5020 27.9471 0.0000 0.0000 -18.3153 -7.5699 11.5167 -6.5406 0.0000 -0.0000 -10.9109 6.0829 -0.6320 2.2764 0.0000 0.0000 6.1670 5.6898 9.3161 -8.9162 0.0000 -0.0000\n -2.0806 -93.0525 23.7256 6.0046 10.3035 165.8941 -5.7386 0.8988 0.2583 -3.4832 -3.5471 -0.0781 8.2781 16.6496 11.5901 -1.7345 1.7639 0.6870 -15.2562 -14.4113 -0.7774 5.8946 -15.2021 0.2252 -2.0600 -7.1161 13.3853 3.4842 -5.0673 74.4701 0.0000 0.0000 8.8621 -1.2744 -9.2820 -1.0027 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.5770 5.3469 -12.8137 7.3478 8.7332 -80.0234 -0.0000 0.0000 4.5087 3.5758 4.4190 -6.9987 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 12.1838 22.8633 -0.2202 30.5782 0.0000 0.0000 -14.1206 -8.0963 11.6609 -8.9334 0.0000 -0.0000 -7.4606 8.7767 -0.7692 2.3768 0.0000 0.0000 3.8759 4.1986 10.2829 -8.7096 0.0000 -0.0000\n -2.3358 -92.2535 23.8441 7.5154 10.2041 164.2837 -5.7628 1.3296 0.7021 -3.3254 -3.1445 0.0558 7.8079 16.7642 12.2957 -1.4436 1.3341 0.9484 -14.5405 -18.6720 -1.6523 5.5504 -16.8335 -0.5219 -1.9619 -6.1598 13.4119 5.7255 -6.4431 74.0020 0.0000 0.0000 8.4541 -2.2842 -9.2654 -0.7743 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -9.2044 5.0674 -12.4191 7.6998 9.3271 -80.9338 -0.0000 0.0000 4.2262 3.2682 4.2665 -7.0026 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 10.5795 24.2880 2.3387 36.2899 0.0000 0.0000 -9.1876 -8.1131 11.8899 -9.4927 0.0000 -0.0000 -3.3723 10.2504 0.0391 1.0059 0.0000 0.0000 2.2444 2.2917 10.3418 -8.7458 0.0000 -0.0000\n -2.5527 -91.5830 23.8757 9.1266 10.6052 162.7390 -5.4328 2.8015 1.2049 -3.1300 -2.1628 0.2658 7.7967 15.7859 12.4775 -1.3876 0.6195 1.3040 -14.4482 -21.0482 -2.4811 4.9146 -17.0949 -1.4432 -2.0219 -6.1235 13.4763 6.8449 -6.5311 73.8655 0.0000 0.0000 7.8211 -2.2383 -10.4957 -0.9366 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.4151 4.0934 -12.1986 7.0365 8.8758 -81.7571 -0.0000 0.0000 4.2686 3.1680 4.4441 -6.9500 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 6.5401 25.8866 4.8603 45.2984 0.0000 0.0000 -4.5309 -7.8771 11.7345 -6.8391 0.0000 -0.0000 0.2654 12.1016 -0.3409 -0.4544 0.0000 -0.0000 1.5673 1.1445 11.4095 -8.6589 0.0000 -0.0000\n -2.7477 -91.0355 23.8330 10.4919 11.9927 161.8182 -5.2509 5.0497 1.7567 -3.0401 -0.4751 0.6518 8.2624 14.2830 11.9862 -1.4058 -0.1404 1.6325 -14.4833 -21.3864 -3.5050 4.3119 -16.8070 -2.3996 -1.7137 -6.6050 13.3021 6.5742 -6.3587 73.8675 0.0000 0.0000 7.8678 -0.7309 -10.9677 -1.0470 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -9.4110 2.9761 -12.3805 5.5960 7.3781 -82.3550 -0.0000 0.0000 4.6493 3.3782 4.4684 -6.6933 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0574 27.8130 6.9321 55.0619 0.0000 0.0000 -1.9280 -8.2101 9.4994 -3.6807 0.0000 -0.0000 2.8077 14.7067 -2.2290 -1.4337 0.0000 -0.0000 0.8748 0.4868 13.5052 -8.5293 0.0000 -0.0000\n -2.8872 -90.5713 23.8041 11.3229 12.8370 161.5811 -5.2571 6.5418 2.1663 -3.0192 0.6273 0.8982 8.9099 13.3326 11.3490 -1.2776 -0.4899 1.7739 -14.2261 -20.6030 -4.4041 4.0014 -16.5552 -3.2636 -1.0136 -6.6559 13.1735 5.9627 -7.2283 73.7345 0.0000 0.0000 8.7143 0.0713 -9.4445 -0.6505 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -9.7071 2.4685 -12.5189 4.4299 5.7381 -83.0750 -0.0000 0.0000 5.1193 3.6672 3.8403 -6.0570 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -4.2797 28.2169 8.4128 62.6488 0.0000 0.0000 -3.0408 -8.8143 4.6145 -3.6056 0.0000 -0.0000 4.9764 16.4398 -4.0734 -2.4354 0.0000 -0.0000 0.0698 -0.2816 14.8961 -8.4799 0.0000 -0.0000\n -2.9616 -90.1791 23.8298 11.4569 12.4872 161.9527 -5.3551 6.9347 2.3754 -3.0671 0.7984 0.9157 9.5433 12.8129 10.7578 -1.0237 -0.3908 1.6840 -13.6655 -19.3885 -4.7195 4.0482 -16.3110 -3.9179 -0.4851 -6.1688 13.3657 6.0714 -9.0343 73.3652 0.0000 0.0000 9.4770 -1.3729 -7.3877 0.0856 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -10.0183 2.6734 -12.2164 3.7598 4.7479 -84.3691 -0.0000 0.0000 5.3317 3.7243 2.7312 -5.2112 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -8.9590 26.5356 8.7642 66.8541 0.0000 0.0000 -6.8215 -7.7729 -0.7201 -4.8610 0.0000 -0.0000 6.5431 16.5984 -4.3125 -2.9307 0.0000 -0.0000 -0.6810 -0.8085 14.3360 -8.5180 0.0000 -0.0000\n -2.9897 -89.8543 23.8808 11.2335 11.7341 162.8456 -5.3394 7.2192 2.4252 -3.0811 0.7376 0.8598 9.9682 12.0378 10.1695 -0.8149 -0.2382 1.5662 -13.0584 -17.8439 -4.5208 4.4868 -15.8166 -4.2035 -0.4996 -5.6788 13.6330 6.9034 -10.6305 72.8953 0.0000 0.0000 9.4750 -3.2990 -6.8857 0.4926 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -9.0831 2.9548 -11.9242 2.4162 4.4384 -86.1431 -0.0000 0.0000 5.1320 3.3941 2.0573 -4.7351 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -13.0370 24.0589 8.2189 67.7164 0.0000 0.0000 -10.2202 -5.1491 -3.4071 -4.2106 0.0000 -0.0000 7.0408 16.0762 -3.0574 -2.0049 0.0000 -0.0000 -1.8250 -0.6126 12.2300 -8.7745 0.0000 -0.0000\n -2.9859 -89.5790 23.9194 10.9928 11.1626 163.9713 -5.1492 7.8327 2.3850 -2.9917 0.9484 0.8717 10.2133 10.8644 9.6895 -0.7124 -0.2698 1.5653 -12.6773 -16.0911 -4.1838 5.2846 -14.9900 -4.0025 -0.7831 -5.4714 13.6212 7.8362 -10.9262 72.5621 0.0000 0.0000 8.9150 -3.2841 -7.9590 0.2239 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -6.6392 2.8754 -12.2517 -0.1350 4.2951 -87.9614 -0.0000 0.0000 4.7825 2.8321 2.4724 -4.9057 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -16.6213 21.7124 7.7263 65.6775 0.0000 0.0000 -11.9623 -3.4325 -2.9134 -2.0259 0.0000 -0.0000 6.9059 15.5724 -1.6355 -0.1621 0.0000 -0.0000 -3.4522 -0.2625 9.9565 -9.2190 0.0000 -0.0000\n -2.9610 -89.3174 23.9431 10.9382 10.6253 164.9796 -4.8326 8.3349 2.3417 -2.8554 1.2474 0.9124 10.5329 9.7680 9.3357 -0.6297 -0.3811 1.6561 -12.5593 -14.4065 -3.8667 6.1537 -14.0829 -3.4420 -0.9535 -5.3628 13.4157 8.5288 -10.0816 72.4373 0.0000 0.0000 8.4190 -1.6119 -9.1755 -0.0834 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -4.3763 2.5219 -13.0028 -2.4690 4.0936 -89.5536 -0.0000 0.0000 4.6339 2.6284 3.4892 -5.2718 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -19.3122 19.6933 7.3822 60.6755 0.0000 0.0000 -12.1639 -3.9591 -1.3604 -0.7305 0.0000 -0.0000 7.2700 15.0848 -0.9887 1.0109 0.0000 0.0000 -4.8042 -0.6328 8.3847 -9.4028 0.0000 -0.0000\n -2.9368 -89.0503 23.9590 10.8689 10.1772 165.9096 -4.6836 8.4612 2.3561 -2.7759 1.4535 0.9291 11.0823 9.1126 8.9209 -0.5357 -0.3927 1.6677 -12.5495 -13.0641 -3.5522 6.7136 -13.4479 -2.8713 -0.9264 -5.3339 13.3750 8.9155 -9.3791 72.2639 0.0000 0.0000 8.3393 -0.6208 -9.5663 -0.1170 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.7419 2.1902 -13.5273 -3.1185 4.0142 -90.9642 -0.0000 0.0000 4.7410 3.2135 4.1878 -5.2626 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -20.9749 18.5459 5.9957 52.7224 0.0000 0.0000 -10.4705 -5.3060 -0.6129 -0.6221 0.0000 -0.0000 8.2080 14.6579 -1.3069 0.9963 0.0000 0.0000 -5.3556 -1.6397 7.6250 -8.9996 0.0000 -0.0000\n -2.9262 -88.7735 23.9642 10.6963 10.0458 166.9703 -4.6193 8.4253 2.3624 -2.7632 1.6089 0.9286 11.6094 8.8471 8.4027 -0.4673 -0.3127 1.5676 -12.5128 -12.1542 -3.3586 6.8353 -13.1259 -2.6258 -0.8720 -5.4131 13.5044 9.0611 -9.8964 71.8557 0.0000 0.0000 8.5749 -1.4519 -9.4166 -0.1809 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.2523 1.9448 -13.6485 -2.4341 4.1634 -92.2875 -0.0000 0.0000 4.9241 4.1419 4.3982 -4.9445 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -21.7141 18.6910 2.3696 42.7649 0.0000 0.0000 -6.1837 -5.9531 -0.4162 -0.4716 0.0000 -0.0000 9.2442 14.4640 -2.3016 0.4741 0.0000 0.0000 -5.5066 -2.4099 7.3731 -8.3558 0.0000 -0.0000\n -2.9160 -88.4965 23.9651 10.2939 10.0732 168.1322 -4.6298 8.2255 2.3459 -2.8161 1.7849 0.9446 12.0193 8.7382 7.9569 -0.4313 -0.2700 1.4620 -12.5249 -11.5943 -3.5042 6.5909 -12.6620 -2.8861 -0.7707 -5.7810 13.5268 8.9427 -10.7846 71.3786 0.0000 0.0000 8.7959 -2.8881 -9.4036 -0.3666 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.3801 1.9031 -13.6797 -1.9953 4.2699 -93.3946 -0.0000 0.0000 4.9885 4.6320 4.5754 -4.7776 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -21.8652 19.3315 -3.2380 32.0499 0.0000 0.0000 0.5332 -6.2173 0.4561 -0.2711 0.0000 -0.0000 9.8848 14.3167 -3.0418 0.2061 0.0000 0.0000 -5.9813 -2.4598 6.8921 -7.9121 0.0000 -0.0000\n -2.8785 -88.2122 23.9702 9.7057 9.9639 169.3100 -4.7910 7.9530 2.4046 -2.9556 1.8430 0.9508 12.4660 8.4457 7.6098 -0.3681 -0.3319 1.4424 -12.5904 -10.9857 -4.0945 6.1658 -11.5150 -3.7606 -0.5163 -6.4257 13.3366 8.6885 -10.5979 71.1686 0.0000 0.0000 8.7691 -3.3053 -9.6212 -0.5243 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.7300 2.0862 -13.8538 -2.2400 4.2273 -94.0648 -0.0000 0.0000 4.9167 4.4751 4.8076 -4.8798 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -21.3226 19.3750 -9.5039 21.0480 0.0000 0.0000 7.5116 -5.8597 2.8468 -1.0362 0.0000 -0.0000 10.1319 13.9295 -2.9938 0.4302 0.0000 0.0000 -6.9277 -2.1294 5.7323 -7.6199 0.0000 -0.0000\n -2.7941 -87.8833 23.9620 9.3213 10.0069 170.6459 -4.9284 8.3961 2.6014 -3.0392 1.6331 0.8928 12.7577 7.5523 7.1755 -0.2515 -0.4550 1.4810 -12.3766 -9.8352 -5.0317 5.9116 -9.6464 -5.2443 -0.2619 -6.7620 13.0862 8.6750 -9.9046 71.2903 0.0000 0.0000 8.6143 -2.5497 -9.8004 -0.5627 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.4253 1.9277 -14.0499 -1.8740 4.6042 -94.3055 -0.0000 0.0000 4.8464 4.2299 4.6846 -4.9296 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -20.1700 18.9403 -14.2081 10.9414 0.0000 0.0000 11.2487 -4.2728 6.1827 -3.0992 0.0000 -0.0000 10.4926 13.5816 -2.7281 1.0692 0.0000 0.0000 -8.1256 -1.8194 4.1440 -7.3225 0.0000 -0.0000\n -2.6705 -87.5069 23.9322 9.0989 10.3815 172.1933 -4.9936 9.5048 2.8465 -2.9572 1.2877 0.7833 12.6441 6.2456 6.6045 -0.1414 -0.5334 1.5083 -11.7927 -8.2323 -6.0695 6.0616 -7.6114 -6.9874 -0.1626 -6.6205 12.8661 8.9370 -10.0442 71.5281 0.0000 0.0000 8.6144 -1.7926 -9.9350 -0.5157 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.8112 1.3026 -14.1026 -0.5638 5.3178 -94.3901 -0.0000 0.0000 4.9728 4.4520 4.3324 -4.7484 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -19.7972 18.9711 -14.2023 4.6221 0.0000 0.0000 10.0527 -2.5802 7.6596 -5.3895 0.0000 -0.0000 10.9504 13.4283 -2.6431 2.0737 0.0000 0.0000 -9.5053 -1.5033 2.4584 -7.0944 0.0000 -0.0000\n -2.5154 -87.0962 23.9148 9.1304 10.3208 173.7423 -4.8047 9.9595 2.8656 -2.7919 1.0663 0.6887 12.4567 5.0350 6.0446 -0.0728 -0.5215 1.4954 -11.1727 -6.6825 -6.7934 6.4164 -6.0409 -8.3460 -0.1800 -6.4287 12.6987 9.1476 -10.9733 71.7285 0.0000 0.0000 8.8465 -1.8512 -10.1976 -0.3658 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -3.8353 0.9124 -13.9949 0.2997 5.5306 -94.5068 -0.0000 0.0000 5.3972 4.9768 4.4795 -4.5108 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -20.2059 19.4193 -11.8655 2.9928 0.0000 0.0000 6.9201 -1.6637 8.1043 -6.5759 0.0000 -0.0000 11.8892 12.7490 -2.7138 2.9260 0.0000 0.0000 -10.8893 -1.0521 0.9248 -6.9756 0.0000 -0.0000\n -2.3268 -86.6536 23.9153 9.3916 9.7278 175.0658 -4.5925 9.6401 2.7595 -2.6512 1.0147 0.6189 12.5426 3.9696 5.5621 0.0158 -0.4824 1.4829 -10.7196 -5.4463 -6.9430 6.6944 -5.1149 -8.8805 -0.2588 -6.3474 12.5943 9.1705 -11.7765 71.9164 0.0000 0.0000 9.1255 -2.3405 -10.5298 -0.1623 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.3854 0.8658 -13.8054 0.4055 5.4772 -94.5853 -0.0000 0.0000 5.8949 5.4242 5.1687 -4.3911 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -21.1310 19.8374 -9.8355 5.2287 0.0000 0.0000 4.9493 -2.0592 9.1804 -6.4855 0.0000 -0.0000 13.4857 11.4604 -3.2548 3.0669 0.0000 0.0000 -12.0047 -0.5826 0.0876 -6.8694 0.0000 -0.0000\n -2.0909 -86.1648 23.9120 9.7436 8.9551 176.2141 -4.5945 9.0423 2.7121 -2.6420 1.0746 0.5791 12.9622 3.0315 5.1233 0.1596 -0.4648 1.4670 -10.4405 -4.5191 -6.6726 6.9395 -4.5224 -8.7577 -0.3889 -6.4466 12.5492 9.0621 -11.9395 72.0683 0.0000 0.0000 9.3173 -2.4806 -10.7595 -0.1410 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.2358 0.5040 -13.5903 1.6650 6.2234 -94.6144 -0.0000 0.0000 6.1263 5.8023 5.5373 -4.3473 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -22.1643 19.9679 -7.0900 9.7873 0.0000 0.0000 3.8373 -3.2354 9.1500 -5.6071 0.0000 -0.0000 15.5673 9.8416 -4.4932 2.5272 0.0000 0.0000 -12.8470 -0.1284 0.1653 -6.8235 0.0000 -0.0000\n -1.8007 -85.6402 23.8858 9.7621 8.1973 177.1694 -4.9950 8.2229 2.7773 -2.8619 1.2149 0.5773 13.5699 2.4283 4.7704 0.2662 -0.4310 1.4065 -10.3397 -3.7516 -6.2807 7.2566 -3.8974 -8.4666 -0.5597 -6.9593 12.5606 8.8533 -11.5658 72.1112 0.0000 0.0000 9.4938 -2.1495 -10.9248 -0.3852 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -7.2086 -0.1322 -13.3564 5.0327 7.7475 -94.6556 -0.0000 0.0000 6.0621 6.1514 5.1063 -4.2629 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -23.6875 19.4353 -2.9759 15.9205 0.0000 0.0000 1.7749 -4.7882 6.8037 -4.4589 0.0000 -0.0000 17.3917 8.0703 -5.7774 1.8844 0.0000 0.0000 -13.7393 0.4199 0.6334 -6.9111 0.0000 -0.0000\n -1.4607 -85.0741 23.8207 9.4937 7.6256 177.8410 -5.5688 7.3701 2.9457 -3.1875 1.3228 0.5949 14.0046 2.2065 4.4450 0.2615 -0.3066 1.2840 -10.2475 -2.9685 -5.8808 7.5743 -3.1901 -8.2506 -0.6922 -7.7520 12.5911 8.6285 -10.9788 72.2153 0.0000 0.0000 9.6922 -1.8162 -11.0555 -0.5253 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -10.5510 -0.4416 -13.1339 8.7507 9.2427 -94.5955 -0.0000 0.0000 6.0310 6.2653 4.3880 -4.0638 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -25.7272 18.1474 2.1601 23.4134 0.0000 0.0000 -1.1636 -7.6143 3.0741 -3.3870 0.0000 -0.0000 18.9183 6.3947 -6.6003 1.4067 0.0000 0.0000 -14.9571 1.0653 0.9709 -6.9200 0.0000 -0.0000\n -1.0797 -84.4300 23.7034 9.4218 7.4637 178.4741 -5.9710 6.8762 3.1703 -3.3750 1.3153 0.5750 14.0603 2.2727 4.0182 0.2130 -0.0870 1.0473 -10.0232 -2.1338 -5.4479 7.8099 -2.4853 -7.9891 -0.8364 -8.3986 12.5669 8.5141 -10.5758 72.5087 0.0000 0.0000 9.8812 -1.7701 -11.0434 -0.3040 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -12.4773 -0.3189 -12.8794 10.9411 10.0419 -94.3504 -0.0000 0.0000 6.1820 6.2073 4.1293 -3.7459 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -26.6705 16.6460 6.6027 30.4576 0.0000 0.0000 -3.3436 -11.5249 1.0568 -2.4901 0.0000 -0.0000 20.7888 4.9732 -7.2756 0.9854 0.0000 0.0000 -16.4848 1.8581 1.1104 -6.7174 0.0000 -0.0000\n -0.6613 -83.7134 23.5296 9.3169 7.6943 179.2244 -6.4377 6.4430 3.4029 -3.6165 1.3520 0.5910 14.1294 2.8116 3.5260 0.1640 0.2013 0.7598 -10.0100 -1.2491 -4.9787 8.0645 -1.6251 -7.5477 -1.1408 -9.0530 12.4051 8.2610 -10.6148 72.7491 0.0000 0.0000 10.1161 -1.9600 -11.2031 -0.0886 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -13.8117 -0.0484 -12.5357 12.3484 9.8388 -94.1955 -0.0000 0.0000 6.2540 6.4769 4.3123 -3.4422 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -25.9255 15.3628 9.2958 35.2083 0.0000 0.0000 -4.4523 -13.5876 2.3669 -1.5277 0.0000 -0.0000 22.5180 3.7440 -7.3820 1.0688 0.0000 0.0000 -18.3415 3.1386 0.6394 -6.6004 0.0000 -0.0000\n -0.1853 -82.9638 23.2967 8.7131 7.9018 179.6090 -7.1300 5.4550 3.5851 -4.1051 1.1863 0.6110 14.3133 4.3133 3.4763 -0.0283 0.5710 0.4869 -10.5263 -0.1303 -4.4325 8.5225 -0.3511 -7.0463 -1.5523 -10.2401 12.1309 7.3523 -11.2985 72.7539 0.0000 0.0000 10.6069 -2.3048 -12.1603 -0.3735 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.4241 0.3851 -11.9402 14.0210 8.9755 -94.3251 -0.0000 0.0000 6.1300 6.8363 4.1932 -3.3136 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -25.0195 13.4642 11.5794 38.5446 0.0000 0.0000 -6.8437 -11.9540 4.0170 -0.3990 0.0000 -0.0000 23.2149 2.5016 -5.8095 2.4129 0.0000 0.0000 -20.7571 5.0390 -0.8509 -6.6262 0.0000 -0.0000\n 0.3860 -82.2043 23.0275 7.8789 7.1921 179.0547 -7.6220 3.7037 3.7008 -4.5612 0.0619 0.4059 14.1226 6.7088 4.0888 -0.5415 1.0244 0.2428 -11.3360 1.3905 -3.7185 9.1099 1.1926 -6.7234 -1.8303 -12.0730 12.0157 5.5276 -12.4607 72.6949 0.0000 0.0000 11.7073 -2.7052 -13.8340 -1.0288 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -15.4835 1.6595 -10.9584 14.5994 8.2535 -94.2828 -0.0000 0.0000 6.1056 5.9641 3.4387 -3.2092 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -24.9969 9.2601 15.2558 42.4621 0.0000 0.0000 -11.5385 -8.5956 1.8749 0.3465 0.0000 0.0000 23.1624 0.5150 -2.7523 5.0712 0.0000 0.0000 -23.7901 7.1258 -2.4443 -6.2498 0.0000 -0.0000\n 1.0455 -81.4464 22.8010 7.5031 5.0625 178.0442 -7.4607 1.8960 3.6915 -4.6492 -2.3108 -0.1579 13.3472 8.9016 4.8143 -1.2676 1.4440 -0.0133 -11.9767 2.8980 -2.9293 9.5238 2.4335 -6.6626 -2.0193 -13.8902 12.3356 3.1690 -13.6768 72.6363 0.0000 0.0000 13.9024 -2.6478 -14.9906 -1.4308 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -12.4684 4.2974 -9.9949 13.0923 8.1693 -93.5121 -0.0000 0.0000 6.3253 3.6228 2.6810 -3.0156 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -24.6659 2.7203 19.2479 46.5987 0.0000 0.0000 -15.9947 -5.9188 -3.6719 0.5443 0.0000 0.0000 23.2087 -2.8347 -0.1975 8.7433 0.0000 0.0000 -26.7305 8.8942 -2.5509 -5.5090 0.0000 -0.0000\n 1.7146 -80.7381 22.7258 7.3173 2.1577 177.9602 -7.2751 0.7599 3.4187 -4.7622 -4.4486 -0.7188 12.9272 9.3449 4.7472 -1.8400 1.6618 -0.2418 -12.4686 3.4006 -2.4010 9.5530 2.9697 -6.7029 -2.5664 -14.8438 12.8848 0.7599 -14.7750 72.3274 0.0000 0.0000 17.3158 -1.5430 -14.3699 -1.1879 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -8.5033 7.4222 -9.8141 11.7870 8.2828 -92.2572 -0.0000 0.0000 6.5265 1.7580 2.9296 -2.9850 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -23.1330 -3.5743 20.9174 48.4462 0.0000 0.0000 -18.2925 -4.0441 -8.5652 0.6199 0.0000 0.0000 22.2937 -7.1665 0.7697 14.1868 0.0000 0.0000 -28.0386 10.1438 -1.5153 -5.6082 0.0000 -0.0000\n 2.3207 -80.1431 22.8383 6.5125 -0.5134 179.4773 -7.7200 0.1959 2.7759 -5.3674 -4.6661 -0.8448 13.3278 7.7694 3.6503 -2.0291 1.5504 -0.3912 -13.0931 2.2236 -2.3778 9.2405 2.9132 -6.5588 -3.5171 -14.6597 13.0645 -1.8789 -16.1809 71.8119 0.0000 0.0000 21.2567 0.1155 -12.2868 -0.7950 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -5.9707 9.2954 -10.5235 12.8384 7.8304 -91.2620 -0.0000 0.0000 6.4657 1.8138 5.1933 -3.3703 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -21.1464 -7.5943 19.6524 46.7230 0.0000 0.0000 -18.5775 -1.9402 -10.6306 0.7235 0.0000 0.0000 18.1885 -11.7504 0.9721 22.6602 0.0000 0.0000 -26.3601 10.4423 -1.4106 -7.1910 0.0000 -0.0000\n 2.8428 -79.6733 23.0538 5.2493 -2.7230 -178.0117 -8.1463 -0.3319 1.8381 -5.6538 -3.2414 -0.5257 13.0761 5.3358 2.1573 -1.9789 1.1704 -0.4600 -13.7286 -0.1297 -2.8080 8.7181 2.5246 -6.1464 -4.3363 -13.2601 12.4795 -4.9495 -18.6104 71.6499 0.0000 0.0000 24.5230 0.6490 -9.9401 -0.6387 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -4.2374 9.4985 -11.8677 14.8739 7.2131 -90.7890 -0.0000 0.0000 6.1694 3.0830 9.2014 -4.1618 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -19.3161 -9.8968 16.9157 42.7651 0.0000 0.0000 -17.8315 0.2579 -11.2349 0.7315 0.0000 0.0000 10.8786 -16.0111 0.4919 33.6528 0.0000 0.0000 -22.2162 8.5263 -2.4269 -8.8686 0.0000 -0.0000\n 3.2626 -79.2833 23.2590 4.5796 -4.4331 -175.6000 -7.5464 -1.0162 1.0004 -5.0170 -1.9301 -0.2578 11.6607 3.6453 0.8414 -2.0417 0.7710 -0.5171 -14.1666 -2.5907 -3.4538 7.9530 1.8629 -5.7899 -4.8662 -10.7518 11.3944 -8.0707 -21.8318 72.0750 0.0000 0.0000 26.2494 -1.2674 -7.6484 -0.4541 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -2.2627 8.7703 -13.2653 15.8301 8.0506 -90.6419 -0.0000 0.0000 5.8532 3.3291 12.8293 -4.7358 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -17.3785 -11.5937 14.6067 38.8651 0.0000 0.0000 -16.9196 1.6564 -12.0383 0.7322 0.0000 0.0000 2.8499 -18.8911 -1.3036 44.8613 0.0000 0.0000 -18.4694 5.2574 -2.6527 -9.1228 0.0000 -0.0000\n 3.5625 -78.9407 23.4042 4.6817 -5.2535 -174.0693 -6.1682 -1.6157 0.5212 -4.0877 -1.4065 -0.1668 10.4007 3.0147 0.0370 -2.2868 0.5634 -0.5909 -14.4927 -4.5192 -4.1565 6.9571 0.9489 -5.9101 -5.4962 -7.8920 10.3739 -10.7501 -24.3373 72.6780 0.0000 0.0000 26.4529 -4.5884 -4.9918 -0.0558 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.7996 8.0969 -13.9824 15.9543 10.5322 -90.6427 -0.0000 0.0000 5.5501 2.3198 14.1567 -4.5596 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -15.3398 -12.5270 13.0473 36.1494 0.0000 0.0000 -16.3039 2.2497 -12.2913 0.8862 0.0000 0.0000 -4.1023 -19.6403 -3.3058 54.3800 0.0000 0.0000 -17.5205 3.5498 -1.9580 -8.6830 0.0000 -0.0000\n 3.7674 -78.6347 23.4972 4.8459 -5.2783 -173.8513 -5.0337 -2.1155 0.3162 -3.4678 -1.4039 -0.1558 10.0349 3.1135 0.1354 -2.4738 0.5170 -0.5778 -14.7412 -5.7848 -4.8773 6.1507 -0.0436 -6.5810 -6.3493 -5.7243 9.7947 -12.7995 -24.9526 72.9908 0.0000 0.0000 25.8564 -6.4809 -1.8860 0.2828 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.4687 7.9014 -13.9813 16.1805 12.7990 -90.6214 -0.0000 0.0000 5.0617 1.9082 12.7944 -4.4096 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -13.6332 -12.4745 11.4315 34.3934 0.0000 0.0000 -16.1041 2.6617 -10.6273 1.0771 0.0000 0.0000 -9.7472 -19.0527 -3.5716 61.0463 0.0000 0.0000 -18.8606 3.6680 -1.4169 -8.6325 0.0000 -0.0000\n 3.9207 -78.3465 23.5611 4.6637 -4.9890 -174.9231 -4.6174 -2.6620 0.2446 -3.2698 -1.6160 -0.1399 10.3603 3.5549 1.0335 -2.4559 0.5140 -0.3716 -14.8227 -6.4283 -5.5116 6.0537 -1.0208 -7.4576 -7.0699 -4.6398 9.7090 -14.1912 -24.2110 73.0526 0.0000 0.0000 25.1811 -5.6957 1.1002 0.2269 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.7538 7.8303 -13.7503 16.4152 13.7949 -90.3141 -0.0000 0.0000 4.5000 2.4802 10.1381 -4.7875 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -12.5199 -11.9389 9.7952 33.2975 0.0000 0.0000 -16.2877 3.0947 -7.6286 1.1467 0.0000 0.0000 -14.2823 -18.4677 -1.4434 64.2623 0.0000 0.0000 -20.0772 3.7769 -0.9151 -8.6371 0.0000 -0.0000\n 4.0450 -78.0511 23.6109 4.4255 -4.7340 -176.5575 -4.5728 -3.2709 0.2281 -3.2261 -1.8321 -0.1279 10.9019 3.9436 2.0523 -2.2797 0.5366 -0.1319 -14.7070 -6.7837 -5.8881 6.7003 -2.1740 -8.1190 -7.4602 -4.1259 9.9630 -14.7971 -23.7400 73.0035 0.0000 0.0000 24.8980 -3.8584 3.1222 -0.0649 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.1262 7.4340 -13.5762 16.2564 14.2883 -89.5780 -0.0000 0.0000 4.2446 3.0580 7.9920 -5.1723 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -11.5858 -11.5285 8.7400 32.5870 0.0000 0.0000 -16.6591 3.4739 -4.8784 1.1928 0.0000 0.0000 -17.6725 -18.3752 1.8716 64.2578 0.0000 0.0000 -19.9110 3.1854 0.4668 -8.0567 0.0000 -0.0000\n 4.1403 -77.7386 23.6583 4.4851 -4.5133 -177.8802 -4.4518 -3.7360 0.1912 -3.1278 -1.9093 -0.1211 11.4613 4.1373 2.5673 -2.0473 0.5399 -0.0237 -14.4880 -7.3909 -5.9982 7.6135 -3.6936 -8.3448 -7.6107 -3.4973 10.3023 -14.5830 -24.1839 72.7724 0.0000 0.0000 25.0873 -2.9182 3.7762 -0.1292 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -1.6939 6.7005 -13.4087 15.8898 15.0217 -88.6479 -0.0000 0.0000 4.3792 3.2943 7.2076 -5.1398 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -10.2271 -11.2036 8.0908 31.7586 0.0000 0.0000 -17.0165 3.8916 -2.7858 1.3439 0.0000 0.0000 -19.9867 -18.2871 4.6277 61.7213 0.0000 0.0000 -18.7954 2.7858 2.6484 -7.2874 0.0000 -0.0000\n 4.2108 -77.4030 23.7155 5.0409 -4.2871 -178.6711 -3.9978 -3.9474 0.1165 -2.9193 -1.8174 -0.1015 11.9555 4.1912 2.6910 -1.7801 0.4117 0.0073 -14.1909 -8.5028 -5.9807 8.2737 -5.3396 -8.1886 -7.6390 -2.5242 10.5302 -13.7304 -24.8682 72.2823 0.0000 0.0000 25.3455 -2.6459 3.4423 0.2656 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -2.4242 5.7926 -13.1975 15.6122 15.6127 -87.9757 -0.0000 0.0000 4.5154 3.4721 7.2867 -4.8505 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.0523 -10.7636 7.3143 30.4255 0.0000 0.0000 -17.3122 4.3780 -0.8988 1.4978 0.0000 0.0000 -21.2768 -17.9305 6.1206 57.3958 0.0000 0.0000 -17.2084 3.2498 4.3061 -7.0699 0.0000 -0.0000\n 4.2705 -77.0458 23.7771 5.8483 -4.2160 -179.3292 -3.3580 -4.1038 0.0549 -2.6171 -1.5836 -0.0485 12.2331 4.1032 2.9259 -1.4716 0.0801 0.1659 -13.7454 -9.8038 -5.9645 8.4419 -6.6036 -7.8531 -7.5248 -1.4599 10.5405 -12.5021 -25.1033 71.7969 0.0000 0.0000 25.0580 -1.8567 2.6866 1.1040 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.9222 4.8032 -13.1015 15.4013 15.9093 -87.6932 -0.0000 0.0000 4.2930 3.5080 7.2400 -4.7523 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -5.3932 -10.4237 6.5597 28.7338 0.0000 0.0000 -17.5560 4.7598 0.8196 1.5199 0.0000 0.0000 -21.9133 -17.6759 6.7456 52.1949 0.0000 0.0000 -15.1875 4.4511 4.5190 -7.2917 0.0000 -0.0000\n 4.3149 -76.6755 23.8290 6.5296 -4.2759 179.8322 -2.7777 -4.3236 0.0206 -2.3367 -1.3504 0.0204 12.3116 3.9596 3.4800 -1.1614 -0.3190 0.4409 -13.2020 -10.8496 -5.9279 8.2257 -7.2978 -7.5240 -7.2402 -0.7040 10.4037 -11.0571 -24.8859 71.7234 0.0000 0.0000 23.9827 -0.8853 1.6060 2.1924 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -3.2100 3.8603 -13.2178 15.2141 16.7573 -87.4741 -0.0000 0.0000 3.8780 3.2334 6.9594 -4.9887 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -2.8315 -10.2271 6.2505 27.0802 0.0000 0.0000 -17.7871 4.9274 2.2093 1.4887 0.0000 0.0000 -22.3729 -17.5795 7.0927 46.9261 0.0000 0.0000 -13.1212 6.0050 3.5455 -7.5010 0.0000 -0.0000\n 4.3270 -76.3075 23.8648 6.7198 -4.2175 178.7986 -2.5414 -4.5541 -0.0125 -2.2134 -1.2642 0.0686 12.4130 3.9780 4.1178 -0.9023 -0.5589 0.6950 -12.7556 -11.4922 -5.8261 7.9683 -7.6893 -7.2710 -6.8354 -0.4263 10.4139 -9.5115 -24.3849 72.0518 0.0000 0.0000 22.5165 -1.0025 0.1644 3.2564 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -3.6486 3.1943 -13.4558 15.0566 18.4420 -86.9496 -0.0000 0.0000 3.6501 3.0864 7.1286 -5.3009 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.9612 -9.8626 6.2928 25.8232 0.0000 0.0000 -18.0999 4.9045 3.4451 1.5339 0.0000 0.0000 -23.1305 -17.2719 7.4093 41.8776 0.0000 0.0000 -11.3910 7.6765 1.8611 -8.0313 0.0000 -0.0000\n 4.3049 -75.9346 23.8880 6.6138 -3.9606 177.7207 -2.5169 -4.7403 -0.0687 -2.1841 -1.2739 0.0847 12.6000 4.1451 4.6523 -0.6950 -0.6071 0.8340 -12.5160 -11.7575 -5.7026 7.9949 -8.0672 -7.1160 -6.3801 -0.2564 10.8182 -7.9776 -23.7904 72.3660 0.0000 0.0000 21.2728 -2.1434 -1.1467 4.2261 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.2816 2.8677 -13.6986 14.8289 20.0999 -86.0790 -0.0000 0.0000 3.6582 3.7227 7.8062 -5.4915 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.3785 -9.2093 6.3647 25.0101 0.0000 0.0000 -18.5841 4.7441 4.6791 1.6474 0.0000 0.0000 -23.9352 -16.6850 7.7850 36.7668 0.0000 0.0000 -9.6084 9.5640 -0.3445 -9.2303 0.0000 -0.0000\n 4.2638 -75.5365 23.8960 6.5057 -3.7051 176.8275 -2.4548 -4.9031 -0.1234 -2.1526 -1.2363 0.0977 12.7475 4.2232 4.9807 -0.5217 -0.5948 0.9223 -12.4243 -11.7762 -5.7079 8.3072 -8.4025 -7.0958 -5.8894 0.1257 11.3705 -6.5330 -23.2977 72.5666 0.0000 0.0000 20.4748 -2.9823 -1.8575 5.1705 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -4.7876 2.6346 -14.0461 14.3680 21.2172 -85.0503 -0.0000 0.0000 3.7349 5.0489 8.3118 -5.7790 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 1.6346 -8.5243 6.3955 24.4320 0.0000 0.0000 -19.2595 4.5152 5.7135 1.7790 0.0000 0.0000 -24.3553 -16.0470 8.2545 31.3663 0.0000 0.0000 -7.4900 11.3783 -2.7959 -10.3100 0.0000 -0.0000\n 4.2115 -75.1100 23.8875 6.2801 -3.5795 176.3990 -2.4515 -4.9661 -0.1995 -2.1222 -1.1395 0.1005 12.7789 4.0469 5.0309 -0.3838 -0.6365 0.9734 -12.3727 -11.7064 -5.8719 8.5870 -8.5904 -7.2076 -5.2826 0.4853 11.6315 -5.2520 -22.8086 72.9898 0.0000 0.0000 19.9521 -2.9798 -2.2058 5.8301 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.1133 2.4087 -14.5865 13.7159 22.5098 -83.9783 -0.0000 0.0000 3.8643 6.4818 8.2822 -6.4653 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 2.8720 -7.9926 6.2343 23.7561 0.0000 0.0000 -19.9781 4.2589 6.4310 1.9247 0.0000 0.0000 -24.4774 -15.2441 8.5557 25.7345 0.0000 0.0000 -5.3673 12.0699 -5.2860 -10.4467 0.0000 -0.0000\n 4.1523 -74.6681 23.8720 5.6457 -3.6613 176.6257 -2.7038 -4.9340 -0.3559 -2.2560 -1.0783 0.0753 12.7729 3.6509 4.7126 -0.3006 -0.7075 0.9113 -12.3143 -11.7633 -6.0535 8.5717 -8.6481 -7.3996 -4.5017 0.2545 11.5744 -4.2052 -21.8421 73.7362 0.0000 0.0000 19.4555 -2.7996 -2.6932 5.9594 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.4092 2.3427 -15.1523 13.0245 24.2661 -82.9140 -0.0000 0.0000 4.0086 7.4504 7.9532 -7.4700 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 3.9436 -7.6950 5.4546 22.6064 0.0000 0.0000 -20.4562 3.9587 7.0909 2.0464 0.0000 0.0000 -24.7124 -14.1229 8.2843 19.8524 0.0000 0.0000 -2.6186 11.6900 -7.8339 -10.1591 0.0000 -0.0000\n 4.0954 -74.2006 23.8498 4.7227 -4.0840 177.4377 -3.1527 -4.9508 -0.5906 -2.4822 -0.9912 0.0364 12.6910 3.0403 4.0953 -0.2745 -0.8281 0.7843 -12.2921 -11.9790 -6.2572 8.3522 -8.6251 -7.6311 -3.7715 -0.4656 11.4465 -3.2856 -20.5540 74.3674 0.0000 0.0000 18.9478 -2.6680 -3.2707 5.8176 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.5962 2.4934 -15.5665 12.4018 25.4991 -82.0928 -0.0000 0.0000 3.9209 7.6494 7.6045 -8.3931 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 5.1926 -7.7468 3.9036 20.6412 0.0000 0.0000 -20.6487 3.6236 8.0252 2.0859 0.0000 0.0000 -24.9338 -12.9100 7.6640 13.7434 0.0000 0.0000 1.9760 12.3241 -9.5583 -10.1046 0.0000 -0.0000\n 4.0368 -73.6748 23.8081 3.9436 -4.6904 178.4920 -3.4899 -4.9756 -0.8550 -2.6187 -0.7870 0.0234 12.4576 2.3094 3.4926 -0.3358 -1.0853 0.7549 -12.4709 -12.1880 -6.6852 8.1935 -8.5216 -7.9571 -3.2973 -1.1851 11.1554 -2.2892 -19.5553 74.6842 0.0000 0.0000 18.5626 -1.9658 -3.4475 5.6786 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -5.6517 2.7958 -16.0909 11.7772 26.0384 -81.5288 -0.0000 0.0000 3.6198 7.6866 7.4123 -9.1619 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 7.2083 -7.9698 1.9072 17.8029 0.0000 0.0000 -20.7939 3.1728 9.3855 2.0872 0.0000 0.0000 -24.4757 -11.5969 7.2956 8.1803 0.0000 0.0000 6.3855 15.0095 -8.1920 -9.7336 0.0000 -0.0000\n 3.9511 -73.0944 23.7500 3.0905 -4.9018 179.2476 -3.8605 -4.5594 -1.1052 -2.7973 -0.6504 0.0301 12.3207 1.6826 3.2097 -0.5525 -1.4184 0.8706 -13.1256 -12.2845 -7.3411 8.1118 -8.3006 -8.3941 -2.8749 -2.1860 10.4547 -1.1680 -18.6657 75.1064 0.0000 0.0000 18.4937 -0.4593 -3.0345 5.3388 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.8615 3.6271 -16.9368 10.8959 26.7685 -80.7730 -0.0000 0.0000 3.5942 8.5775 7.6622 -10.2366 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 9.3624 -7.7405 -0.1282 14.8608 0.0000 0.0000 -21.0201 2.3558 11.0937 2.1640 0.0000 0.0000 -23.1063 -9.6227 7.3740 3.7088 0.0000 0.0000 6.4602 16.6131 -3.1284 -8.8846 0.0000 -0.0000\n 3.8328 -72.4808 23.6831 1.7174 -4.7185 179.2845 -4.5848 -3.6048 -1.2722 -3.2389 -0.8346 -0.0021 12.4962 1.0903 3.2009 -0.9105 -1.6739 1.0112 -14.2398 -12.2110 -7.8320 7.8099 -7.8816 -8.8551 -2.3698 -3.8911 9.6748 0.3004 -17.5928 75.8059 0.0000 0.0000 18.7985 1.1888 -2.3492 4.7642 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.2406 5.2926 -17.3416 9.8254 26.9813 -79.9832 -0.0000 0.0000 3.8799 9.7485 8.2223 -11.4987 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 10.5582 -6.9985 -1.7926 12.9059 0.0000 0.0000 -21.3080 1.1969 12.8851 2.2408 0.0000 0.0000 -21.2510 -7.1792 7.3817 -0.3250 0.0000 -0.0000 4.6232 12.8483 1.5779 -9.1942 0.0000 -0.0000\n 3.6977 -71.8399 23.5995 0.1474 -4.2697 178.8655 -5.4377 -2.1262 -1.2951 -3.8331 -1.0763 -0.0706 12.8649 0.0630 3.1203 -1.2980 -1.8384 1.0770 -15.4866 -11.8779 -7.9333 6.9390 -7.1645 -9.3265 -1.9438 -6.1095 9.5338 2.3532 -16.3565 76.2268 0.0000 0.0000 18.8939 1.7354 -1.9011 4.5518 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.2888 7.1300 -16.1381 9.0315 23.9635 -80.4054 -0.0000 0.0000 3.4333 9.0298 8.1949 -11.5877 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 10.8879 -5.8886 -3.0568 12.3519 0.0000 0.0000 -21.9267 0.0106 14.6109 2.0245 0.0000 0.0000 -19.8788 -4.9778 6.5956 -3.5544 0.0000 -0.0000 6.8836 5.6079 2.3880 -11.2516 0.0000 -0.0000\n 3.5239 -71.1624 23.5214 -0.7783 -2.6837 178.6864 -5.9296 0.1592 -1.2507 -4.3425 -0.8043 -0.0389 13.4785 -1.1354 2.9104 -1.6421 -1.9728 1.0987 -16.7116 -11.1992 -8.0323 5.4740 -6.1898 -10.0177 -1.5763 -8.5566 10.1678 4.7633 -14.5205 75.9604 0.0000 0.0000 17.6633 0.3756 -1.9165 4.6764 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -5.7774 8.2305 -13.4392 8.1226 16.9486 -82.3999 -0.0000 0.0000 1.5696 5.9973 6.6445 -10.2214 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 11.3803 -3.5242 -4.4968 12.8993 0.0000 0.0000 -23.0211 -1.2730 16.1367 1.2936 0.0000 0.0000 -19.5318 -2.4732 4.1009 -4.3073 0.0000 -0.0000 12.6171 0.2400 2.4384 -11.4536 0.0000 -0.0000\n 3.2573 -70.3938 23.5119 -0.3203 0.6229 178.5976 -5.7914 2.4569 -1.1332 -4.4902 -0.1479 0.1253 14.2202 -0.8456 3.2120 -1.8738 -1.8803 1.1136 -17.6911 -9.9962 -8.5555 4.0224 -5.2973 -11.2013 -0.8197 -10.6382 11.0332 7.4089 -11.7334 75.4562 0.0000 0.0000 14.5426 -2.0901 -2.2426 3.8529 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -5.0803 8.3710 -10.8139 6.1422 9.5795 -84.5696 -0.0000 -0.0000 -0.9834 3.0179 3.8672 -9.0951 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 13.1505 0.9011 -6.2615 14.0171 0.0000 0.0000 -23.5831 -3.1424 17.3256 0.0144 0.0000 0.0000 -18.6305 1.3133 0.7329 -2.8758 0.0000 -0.0000 16.4864 -0.5469 5.4141 -8.1621 0.0000 -0.0000\n 2.9074 -69.5382 23.6144 0.6869 4.3616 177.6716 -5.6298 3.2583 -0.8325 -4.3704 -0.1457 0.2202 14.5459 1.7380 4.5524 -1.8925 -1.1820 1.0830 -18.2401 -8.0462 -9.1428 3.3750 -4.8832 -12.8210 0.3261 -11.1996 11.8622 10.9421 -8.8682 75.3219 0.0000 0.0000 10.4236 -3.3660 -3.1935 1.4612 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.9137 8.0632 -9.2986 3.7847 5.9882 -85.7595 -0.0000 -0.0000 -3.4783 1.6492 1.3193 -8.7961 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 15.0965 6.2552 -7.4445 15.7319 0.0000 0.0000 -22.1738 -5.4211 18.3031 -2.0186 0.0000 -0.0000 -16.1572 5.6170 -0.8165 -1.7956 0.0000 -0.0000 15.4578 -0.1666 9.4720 -5.7611 0.0000 -0.0000\n 2.5600 -68.6986 23.7794 0.7493 6.6839 175.9836 -5.9026 2.3382 -0.4011 -4.2168 -0.9744 0.1433 13.8568 4.7378 6.5072 -1.7326 -0.0011 1.0091 -18.5768 -5.4580 -9.0896 3.5800 -5.0546 -14.2974 1.2962 -9.7317 12.9170 15.4569 -7.5458 75.5000 0.0000 0.0000 7.1788 -1.4467 -6.0314 -0.8927 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.4497 7.7966 -8.5698 1.7990 6.3819 -85.9651 -0.0000 -0.0000 -5.5195 1.2179 -0.1478 -8.7794 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 14.8692 10.4879 -7.3264 18.6948 0.0000 0.0000 -19.0578 -7.1473 19.6008 -5.0356 0.0000 -0.0000 -13.5923 8.6426 -0.4253 -2.3096 0.0000 -0.0000 12.4683 -1.9067 11.6716 -5.7347 0.0000 -0.0000\n 2.2579 -67.9487 23.9096 -0.0428 7.9654 174.5143 -6.0356 1.4582 -0.0481 -4.0296 -1.6268 0.0792 12.4538 6.3010 8.1600 -1.7127 0.9527 0.9613 -19.2190 -3.1151 -8.4827 3.8722 -5.5473 -15.0053 1.9944 -7.7565 14.0573 19.2890 -8.0542 75.5380 0.0000 0.0000 5.9229 2.7910 -10.8558 -0.9447 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -6.1122 7.4907 -8.1026 -0.5087 8.0597 -85.8266 -0.0000 -0.0000 -6.9189 1.1613 -0.9609 -8.4674 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 12.2838 13.6937 -6.9080 23.5848 0.0000 0.0000 -15.7731 -8.1987 21.6594 -8.6214 0.0000 -0.0000 -12.2595 10.5890 0.7193 -3.0124 0.0000 -0.0000 10.5373 -3.8053 11.7033 -6.4994 0.0000 -0.0000\n 1.9748 -67.2527 23.9596 -0.3369 9.7056 173.4195 -5.4400 1.9896 0.1721 -3.5837 -1.2964 0.2035 11.0649 6.6975 9.1055 -2.0522 1.1798 1.0860 -20.2278 -2.0079 -8.0464 3.6522 -6.0753 -14.8207 2.8372 -7.1427 14.5777 20.9516 -9.5030 75.1619 0.0000 0.0000 6.1326 5.0881 -15.2290 0.6431 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.4095 6.7818 -8.0120 -3.6859 8.8656 -85.5630 -0.0000 -0.0000 -7.9909 1.6026 -2.1819 -7.7567 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 8.4315 17.6654 -6.4997 31.1996 0.0000 0.0000 -11.9639 -10.0557 24.1089 -11.6555 0.0000 -0.0000 -11.2804 12.9915 1.5581 -2.9220 0.0000 -0.0000 9.2108 -4.3766 11.8817 -6.4190 0.0000 -0.0000\n 1.6940 -66.5683 23.9427 0.3899 12.1263 171.9171 -4.3075 3.5594 0.3390 -2.9703 -0.2449 0.4676 10.0756 6.8005 9.8332 -2.5997 0.8414 1.4796 -21.1322 -2.0184 -8.1452 3.1003 -6.6054 -14.0916 3.8751 -7.8235 14.2887 20.8143 -11.5307 74.6513 0.0000 0.0000 6.7640 2.6373 -16.3786 0.8369 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.4318 5.6886 -8.5692 -7.1721 8.6182 -84.8875 -0.0000 -0.0000 -9.1479 2.1654 -4.1504 -6.9944 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 2.8910 22.6696 -3.8691 41.8110 0.0000 0.0000 -4.9567 -13.6583 26.3152 -12.8410 0.0000 -0.0000 -9.4418 16.2107 1.8876 -2.8914 0.0000 -0.0000 7.4586 -5.0375 13.2636 -5.7913 0.0000 -0.0000\n 1.4389 -65.9151 23.8873 1.6228 14.6194 169.7638 -3.3118 5.5411 0.5876 -2.4294 0.8051 0.7348 9.5310 6.8388 10.6475 -3.0213 0.3025 2.0604 -21.6588 -2.2716 -8.6006 2.6721 -7.1747 -13.2558 4.7157 -8.4263 13.7507 20.1750 -14.0251 74.4745 0.0000 0.0000 7.3464 -1.2559 -13.2474 -0.2365 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.6439 4.4517 -9.6695 -10.0578 8.2662 -83.7955 -0.0000 -0.0000 -10.0694 2.1225 -6.0221 -6.5860 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -4.8354 26.9773 2.1223 53.4298 0.0000 0.0000 4.9087 -17.1543 27.9406 -10.7860 0.0000 -0.0000 -6.9613 19.6105 1.9562 -3.6834 0.0000 -0.0000 5.9446 -6.6383 14.8722 -5.5196 0.0000 -0.0000\n 1.2550 -65.3199 23.8407 2.8802 16.3710 168.0667 -2.6362 7.3691 0.7501 -2.0496 1.5299 0.9129 9.5544 6.6841 11.0284 -3.1691 -0.1449 2.5379 -22.0108 -2.4034 -9.1669 2.4722 -7.7154 -12.6404 5.1128 -8.3984 13.4536 19.8930 -16.1867 74.8094 0.0000 0.0000 7.8431 -2.1969 -8.0358 -0.7854 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -7.1573 3.4276 -10.9345 -12.1206 8.2221 -82.8252 -0.0000 -0.0000 -9.9797 1.6668 -6.9100 -6.5549 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -12.7279 28.6403 8.9973 63.3244 0.0000 0.0000 10.8155 -18.0518 27.2015 -7.5490 0.0000 -0.0000 -4.6435 22.2242 2.0116 -4.2762 0.0000 -0.0000 4.9497 -7.8041 15.4420 -5.5637 0.0000 -0.0000\n 1.1647 -64.7943 23.8476 3.5620 16.9090 167.9277 -2.2071 8.5375 0.7062 -1.8743 1.9654 0.9685 10.0323 6.2703 10.3981 -3.1431 -0.3852 2.6372 -22.2990 -2.6251 -9.7088 2.4140 -8.1988 -12.3566 5.2544 -8.1627 13.4213 20.1204 -17.2080 75.6303 0.0000 0.0000 8.0914 -1.1416 -4.0539 -0.8006 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -7.5852 2.8694 -11.9314 -13.4189 8.5501 -82.4580 -0.0000 -0.0000 -8.8887 1.7284 -7.1455 -6.3511 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -18.8220 27.4744 13.6411 70.3222 0.0000 0.0000 8.0220 -16.8854 22.3321 -5.8470 0.0000 -0.0000 -3.2404 23.3867 2.9632 -3.3266 0.0000 -0.0000 3.2873 -7.6985 13.9951 -5.6061 0.0000 -0.0000\n 1.1720 -64.3233 23.9181 3.3403 16.0710 169.2754 -2.0626 8.9318 0.5764 -1.9000 2.0807 0.9125 10.5740 5.4813 8.9591 -3.0328 -0.5285 2.4164 -22.3039 -3.0571 -10.1394 2.4969 -8.5653 -12.3408 5.1407 -7.8809 13.4113 20.8390 -17.6642 76.5985 0.0000 0.0000 7.9526 -0.4965 -3.3283 -0.4487 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -7.5459 2.6089 -12.5408 -13.6909 9.3999 -82.6497 -0.0000 -0.0000 -7.6223 2.1676 -7.5933 -5.6721 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -22.9959 24.1930 14.9457 73.7186 0.0000 0.0000 -0.1040 -13.8607 13.3164 -4.6662 0.0000 -0.0000 -2.6596 22.7895 4.9989 -1.2750 0.0000 -0.0000 0.6476 -7.1529 10.6105 -5.7156 0.0000 -0.0000\n 1.2528 -63.8820 24.0246 2.7036 14.3046 171.2593 -2.1129 8.9753 0.4984 -1.9798 2.0261 0.8128 10.9420 4.3040 7.4097 -2.8250 -0.8148 2.1739 -21.9294 -3.5616 -10.5132 2.6708 -8.6425 -12.3806 4.5137 -7.3322 13.2019 21.7294 -18.4611 77.1819 0.0000 0.0000 7.5293 -0.2406 -6.1494 0.1109 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -7.3064 2.1836 -13.3120 -12.5738 10.5617 -82.8958 -0.0000 -0.0000 -6.5402 2.0550 -8.1281 -5.0639 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -26.1037 19.9760 13.9257 73.3933 0.0000 0.0000 -6.5800 -8.8810 3.3642 -3.2225 0.0000 -0.0000 -2.0688 20.9506 6.7145 0.4191 0.0000 0.0000 -1.8038 -6.8355 6.9045 -5.8065 0.0000 -0.0000\n 1.3576 -63.4699 24.1163 2.2171 12.6963 173.3128 -2.1295 9.3369 0.4544 -1.9806 2.1730 0.7624 11.2338 3.0038 6.0967 -2.6042 -1.3653 2.0899 -21.3958 -4.0998 -10.9553 2.8141 -8.3675 -12.2196 3.4301 -6.6841 12.6477 22.0740 -19.2063 77.2357 0.0000 0.0000 7.0568 0.7296 -10.8470 0.4828 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -7.2904 1.4169 -14.8203 -10.3780 11.2440 -82.8775 -0.0000 -0.0000 -5.2456 1.6579 -7.8056 -5.0842 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -28.8697 16.4444 12.3034 70.2385 0.0000 0.0000 -9.4185 -4.2675 -3.7851 -2.1307 0.0000 -0.0000 -1.2628 19.1314 7.4850 1.5034 0.0000 0.0000 -3.4962 -6.5363 3.9581 -5.5213 0.0000 -0.0000\n 1.4535 -63.0776 24.1638 2.0780 11.8384 175.2033 -1.8954 10.1158 0.3897 -1.8819 2.6088 0.7765 11.5554 1.9583 4.8994 -2.5032 -1.9677 2.0535 -20.8461 -4.7888 -11.3615 2.9641 -7.9540 -11.6999 2.3925 -6.4526 11.8489 21.5169 -18.8649 77.1459 0.0000 0.0000 6.6844 2.1250 -14.4086 0.5716 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -7.1354 0.7719 -16.4269 -7.9530 10.8319 -82.9315 -0.0000 -0.0000 -3.8064 2.2142 -6.3000 -5.4926 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -31.2744 14.4366 10.9937 65.0283 0.0000 0.0000 -10.7283 -2.4461 -6.8369 -1.4293 0.0000 -0.0000 -0.2207 18.0430 7.5623 2.2889 0.0000 0.0000 -4.8531 -6.1578 1.8894 -4.8907 0.0000 -0.0000\n 1.5279 -62.6714 24.1762 2.0932 11.5648 176.7228 -1.5989 10.8619 0.3373 -1.7611 3.0733 0.7977 11.8561 1.3944 3.7262 -2.4630 -2.3000 1.8803 -20.2047 -5.5214 -11.4417 3.3032 -7.6050 -10.9648 1.6995 -6.7178 11.1241 20.4535 -17.6356 77.2396 0.0000 0.0000 6.5220 2.6003 -14.4481 0.3364 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.2523 0.6850 -16.9809 -5.6787 9.7827 -83.4839 -0.0000 -0.0000 -2.7262 3.5902 -4.6528 -5.9083 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -33.1256 13.7277 9.8465 57.8453 0.0000 0.0000 -10.3244 -3.3132 -6.1661 -0.9981 0.0000 -0.0000 1.1878 17.6002 7.1553 2.4986 0.0000 0.0000 -6.1413 -5.9634 0.5462 -4.4032 0.0000 -0.0000\n 1.5759 -62.2268 24.1663 2.0289 11.5914 177.7659 -1.6235 11.2596 0.3594 -1.7486 3.3600 0.7978 12.1875 1.3100 2.7505 -2.2899 -2.2775 1.5753 -19.4187 -5.9062 -11.1497 3.8498 -7.2379 -10.4302 1.1720 -7.0163 10.7246 19.2140 -16.9077 77.2330 0.0000 0.0000 6.7800 1.7062 -11.4024 -0.0291 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -5.2607 0.9501 -16.8347 -3.1014 9.9951 -84.0347 -0.0000 -0.0000 -1.7944 4.7271 -3.3292 -6.5431 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -34.2376 13.7665 8.1902 48.6008 0.0000 0.0000 -6.3649 -4.7877 -2.6124 -1.0656 0.0000 -0.0000 2.8515 17.5390 6.3457 2.0113 0.0000 0.0000 -7.2056 -5.9156 -0.1485 -4.1889 0.0000 -0.0000\n 1.6033 -61.7481 24.1321 1.7603 11.8462 178.3877 -2.1473 11.3678 0.5084 -1.9534 3.4898 0.8230 12.7659 1.5724 2.1444 -1.9525 -2.0311 1.2397 -18.6013 -5.6812 -10.7469 4.4831 -6.7072 -10.3905 0.6470 -7.2196 10.5351 17.5291 -17.3603 76.7223 0.0000 0.0000 7.6157 0.2335 -8.0827 -0.1078 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -5.3579 1.1398 -17.2605 0.1804 13.3870 -83.8809 -0.0000 -0.0000 -0.0484 6.4756 -1.2356 -7.8742 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -34.6168 14.0734 5.7027 37.5857 0.0000 0.0000 1.3073 -5.8840 2.9968 -1.3967 0.0000 -0.0000 4.3190 17.7359 5.3635 1.4594 0.0000 0.0000 -8.1874 -5.7955 -0.2684 -4.0342 0.0000 -0.0000\n 1.6315 -61.2312 24.0803 1.3795 12.0885 178.7259 -2.9760 11.1897 0.8193 -2.3385 3.5201 0.8550 13.6492 2.0326 1.7754 -1.6319 -1.6907 0.9154 -17.8530 -4.9933 -10.3974 5.2013 -6.0563 -10.6858 0.1974 -7.7315 10.3175 15.3049 -18.5071 75.7654 0.0000 0.0000 8.9191 -0.7368 -6.3623 0.0798 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.2085 1.4990 -18.1157 3.5064 18.8136 -83.4855 -0.0000 0.0000 2.9276 10.3839 1.8278 -9.7441 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -34.0444 14.1404 2.0472 25.2684 0.0000 0.0000 11.0496 -7.3370 9.7680 -1.5053 0.0000 -0.0000 5.4870 17.8932 4.5754 1.3972 0.0000 0.0000 -9.5655 -5.7429 -0.1758 -3.9705 0.0000 -0.0000\n 1.6853 -60.6381 24.0142 1.1359 12.1510 178.9762 -3.7513 10.9302 1.2074 -2.7041 3.3711 0.8603 14.4333 2.5086 1.4155 -1.4078 -1.3206 0.6234 -17.0945 -4.1166 -10.0354 6.0599 -5.3911 -10.8993 -0.1872 -8.4906 9.8999 13.1545 -20.0448 74.8091 0.0000 0.0000 10.3474 -0.7429 -6.1620 0.3082 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.2668 2.3349 -18.0561 6.5964 21.3762 -83.9404 -0.0000 0.0000 5.6409 13.9161 3.9493 -10.5721 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -32.2846 13.5116 -2.8604 12.9831 0.0000 0.0000 19.1924 -8.9851 16.7136 -1.5719 0.0000 -0.0000 6.7804 17.7835 4.1819 1.7789 0.0000 0.0000 -11.5111 -5.8339 -0.3986 -4.1065 0.0000 -0.0000\n 1.7705 -59.9663 23.9223 0.9687 12.2361 179.1465 -4.4264 10.9471 1.6355 -2.9607 3.0237 0.8274 14.8213 2.9182 1.1014 -1.1968 -0.9427 0.4159 -16.3928 -3.2691 -9.5597 6.9160 -4.6004 -10.7287 -0.6691 -9.0919 9.3167 11.4177 -21.9058 73.9546 0.0000 0.0000 11.7085 -0.1008 -6.8617 0.4310 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -5.1941 3.2296 -16.9043 9.7570 18.3343 -85.2567 -0.0000 0.0000 6.6934 13.4203 4.7407 -9.6563 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -30.7926 12.0599 -5.3728 4.3113 0.0000 0.0000 19.8511 -10.3876 20.0036 -2.0416 0.0000 -0.0000 8.1153 17.5720 4.2915 2.5644 0.0000 0.0000 -13.8033 -5.5185 -1.0839 -4.2141 0.0000 -0.0000\n 1.8690 -59.2431 23.8081 0.8838 12.2600 179.1108 -5.0159 10.8855 1.9577 -3.1760 2.7613 0.8089 15.1580 3.2139 0.9972 -1.0189 -0.6356 0.3033 -15.9938 -2.3942 -8.8406 7.5670 -3.5535 -10.1177 -1.1817 -9.4950 8.8147 9.6328 -23.4613 72.9983 0.0000 0.0000 13.0737 0.8131 -7.9408 0.3102 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.1035 3.9581 -15.9588 12.3401 13.7316 -86.0789 -0.0000 0.0000 7.0601 11.1759 5.5072 -8.7134 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -30.4473 10.3916 -4.8674 1.2331 0.0000 0.0000 12.2620 -10.0488 17.7365 -1.9077 0.0000 -0.0000 9.3647 17.2285 4.8314 3.8078 0.0000 0.0000 -16.2552 -4.4082 -1.9356 -4.1445 0.0000 -0.0000\n 1.9732 -58.4625 23.6774 1.0762 11.9916 179.1216 -5.2967 10.7091 2.0726 -3.2583 2.6288 0.7739 15.4274 3.0125 0.8287 -0.9402 -0.4149 0.1925 -15.8597 -1.3760 -7.7539 8.0283 -2.3591 -9.1380 -1.6487 -9.6300 8.5920 7.8095 -24.6246 71.9667 0.0000 0.0000 14.5452 1.9405 -8.7664 0.0440 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -3.6895 4.2571 -15.7775 14.1010 12.6843 -86.0089 -0.0000 0.0000 7.6391 11.3209 6.9497 -8.5218 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -30.4867 8.9055 -4.9341 2.3981 0.0000 0.0000 4.8513 -7.2348 13.8344 -1.1809 0.0000 -0.0000 10.9472 16.5383 5.2561 5.2971 0.0000 0.0000 -18.8360 -3.1602 -2.6526 -4.2184 0.0000 -0.0000\n 2.0859 -57.6327 23.5345 0.7492 11.1428 -179.9932 -5.6939 10.2681 2.0663 -3.4548 2.6203 0.7171 15.6428 2.1582 0.0283 -0.9592 -0.2768 -0.0546 -16.1413 -0.3119 -6.4778 8.2188 -1.2423 -7.9523 -2.4197 -9.5398 8.4545 6.5270 -25.5608 71.0303 0.0000 0.0000 15.8005 2.7160 -9.2625 -0.0167 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.5636 4.2767 -15.8296 15.0322 13.9223 -85.5440 -0.0000 0.0000 8.0241 13.0952 8.3891 -8.6861 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -30.3120 7.8719 -5.2944 4.6410 0.0000 0.0000 4.8314 -5.4020 10.8704 -1.5880 0.0000 -0.0000 12.0743 15.0542 5.4485 7.1621 0.0000 0.0000 -21.5941 -2.4961 -3.5988 -4.5178 0.0000 -0.0000\n 2.2216 -56.7783 23.3753 -0.8248 9.5296 -178.0639 -6.7521 9.0465 2.2259 -4.1990 2.7748 0.7028 16.2492 1.1966 -1.3773 -1.0832 -0.2396 -0.4235 -17.2741 0.5042 -5.4871 7.8445 -0.3521 -6.8117 -3.6590 -9.8481 7.9204 5.4443 -25.1077 70.3495 0.0000 0.0000 16.1734 2.1193 -10.5837 0.0841 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.3822 4.7328 -15.7410 15.0630 13.1144 -85.0343 -0.0000 0.0000 7.6775 13.0032 9.4152 -8.8394 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -29.9737 6.7345 -5.4140 5.3908 0.0000 0.0000 11.3198 -4.3447 10.0846 -2.0901 0.0000 -0.0000 11.7265 12.4493 6.0975 9.6285 0.0000 0.0000 -24.5381 -1.7065 -5.3317 -4.4865 0.0000 -0.0000\n 2.4216 -55.8988 23.2237 -3.0251 6.5712 -176.5227 -8.3590 6.5254 2.6704 -5.6524 2.8240 0.7433 17.9318 0.3765 -2.4553 -1.5629 -0.2888 -0.6881 -19.4200 0.8745 -4.8454 6.8490 0.2158 -5.8694 -5.0206 -11.2525 6.9951 3.3874 -21.8071 69.9121 0.0000 0.0000 15.7335 0.8559 -13.6394 -0.2373 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.1992 6.6930 -15.3034 13.7645 9.3240 -84.4062 -0.0000 0.0000 6.8093 10.3478 10.4591 -8.9741 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -29.3460 3.6254 -4.7095 3.9944 0.0000 0.0000 18.0714 0.0176 9.5793 -1.6211 0.0000 -0.0000 10.3428 8.2865 7.8970 12.4646 0.0000 0.0000 -27.5480 0.2728 -7.3188 -3.9535 0.0000 -0.0000\n 2.7147 -54.9215 23.1573 -3.2153 1.5182 -177.0816 -8.4668 3.1549 2.8767 -6.7422 1.9622 0.5414 19.6067 -1.6495 -2.2145 -2.5852 -0.2545 -0.5622 -21.5965 1.0196 -3.8756 5.5937 0.2451 -4.9842 -5.7069 -12.5991 6.5825 -0.0001 -17.1212 69.5600 0.0000 0.0000 15.7549 1.4149 -16.5411 -0.8859 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -2.9061 9.8670 -14.1334 11.1231 5.8900 -83.4985 -0.0000 0.0000 5.6321 6.8198 10.9693 -8.7098 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -25.9678 -2.8796 -3.0554 0.7385 0.0000 0.0000 21.0500 5.1274 7.2664 -0.6027 0.0000 -0.0000 11.2873 2.0238 10.6745 14.6452 0.0000 0.0000 -29.8010 2.6820 -8.1185 -4.1059 0.0000 -0.0000\n 3.0173 -53.9428 23.2155 -2.0793 -4.0060 -179.2587 -6.7154 1.3174 2.4286 -5.7745 0.4569 0.0393 17.9388 -6.1808 -0.8754 -3.4723 -0.1702 0.0401 -22.3469 1.0023 -2.2154 4.2383 -0.4869 -3.8153 -5.2703 -11.4228 7.0985 -3.6007 -15.4603 69.3221 0.0000 0.0000 17.3518 4.9324 -15.0563 -1.0729 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -2.3888 11.5994 -12.2372 8.0435 6.3319 -82.0104 -0.0000 0.0000 4.1935 3.5073 9.6349 -7.7780 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -21.2694 -10.1442 -2.3432 -2.1470 0.0000 -0.0000 20.4709 5.7430 6.2113 0.4001 0.0000 0.0000 13.6257 -4.1367 13.2210 17.2587 0.0000 0.0000 -30.0094 3.1232 -6.9558 -6.2278 0.0000 -0.0000\n 3.2116 -53.1851 23.3764 -2.8766 -6.9596 178.4015 -5.1991 1.0136 1.6135 -4.1267 -0.7330 -0.2798 13.8830 -8.5851 0.0048 -3.6203 -1.0050 0.7378 -22.1391 -0.8621 -1.2810 2.6328 -1.5750 -2.1962 -4.5502 -8.7112 7.5446 -6.7133 -18.6017 68.9335 0.0000 0.0000 20.6379 8.9807 -8.4373 -1.2357 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -2.1404 8.8397 -10.9556 5.2064 9.6038 -79.1410 -0.0000 0.0000 2.6949 0.9787 7.1609 -6.8673 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -19.8777 -14.0895 -4.1636 -2.2113 0.0000 -0.0000 18.0739 2.5315 9.2290 0.6616 0.0000 0.0000 11.4343 -7.4451 14.1869 23.8735 0.0000 0.0000 -27.3516 1.1995 -4.7147 -9.4331 0.0000 -0.0000\n 3.3150 -52.5733 23.5636 -4.3630 -7.6907 177.5908 -4.2749 0.6935 0.8149 -3.0743 -1.1107 -0.3424 10.6899 -7.9829 -0.3293 -3.3991 -2.1988 1.1118 -21.9502 -4.5197 -1.7314 0.9842 -2.7144 -0.7441 -4.3908 -6.1976 7.4793 -9.6988 -23.9805 67.8010 0.0000 0.0000 24.8432 11.4856 -1.1743 -1.5657 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.4195 3.3958 -11.2390 2.3149 10.6517 -74.8427 -0.0000 0.0000 1.2680 0.1231 5.6752 -6.6517 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -20.0352 -15.0084 -7.2572 -1.2138 0.0000 -0.0000 16.1849 -0.1715 13.5287 0.3867 0.0000 0.0000 5.3317 -9.3294 14.2594 34.5349 0.0000 0.0000 -22.2744 -0.1738 -2.7607 -11.1799 0.0000 -0.0000\n 3.4134 -51.9833 23.7026 -5.1397 -8.6080 178.3871 -3.4365 -0.3899 0.3481 -2.4869 -1.1384 -0.3550 8.9584 -7.2497 -1.2481 -3.3193 -2.8658 1.1496 -21.7267 -7.8396 -2.6872 -0.0124 -3.7309 -0.2952 -4.5662 -4.7012 7.1146 -12.9243 -27.1758 66.3168 0.0000 0.0000 28.5530 13.0983 3.3545 -1.8687 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -2.7703 0.0273 -11.9463 -0.9048 7.2710 -70.8487 -0.0000 -0.0000 -0.2353 1.2811 4.3508 -6.9294 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -19.4802 -15.7485 -9.4642 -0.8692 0.0000 -0.0000 14.5723 -1.2618 15.4688 0.0891 0.0000 0.0000 -1.5349 -12.3525 14.5835 46.4435 0.0000 0.0000 -17.5553 -0.2195 -1.1622 -10.5473 0.0000 -0.0000\n 3.5138 -51.3584 23.7967 -5.0091 -10.4300 179.2931 -2.5724 -2.1023 0.1892 -2.0562 -1.4285 -0.4112 8.1863 -7.4082 -1.5673 -3.4908 -3.1798 1.1914 -21.0115 -9.4014 -3.3641 0.1966 -4.3300 -0.8754 -4.8725 -4.0726 6.7116 -15.7818 -27.0080 65.1639 0.0000 0.0000 30.8466 14.5519 5.6275 -1.9044 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -2.8130 -0.1266 -11.7736 -4.8337 4.2914 -68.7432 -0.0000 -0.0000 -1.9609 2.2166 0.7413 -6.6290 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -17.5269 -17.4536 -10.7127 -1.4447 0.0000 -0.0000 12.9297 -2.9154 15.9249 -0.2085 0.0000 -0.0000 -7.1090 -16.6491 15.3289 56.5184 0.0000 0.0000 -15.7268 -0.6281 0.5053 -10.1685 0.0000 -0.0000\n 3.5725 -50.7153 23.8909 -4.5071 -11.9238 179.4013 -2.0930 -3.3820 0.1560 -1.7683 -1.8376 -0.4599 8.0549 -8.1740 -0.9440 -3.5489 -3.4802 1.4881 -19.7900 -9.4984 -3.6474 1.3830 -4.3358 -1.8456 -5.3905 -3.4638 6.3110 -17.5023 -25.8881 64.3922 0.0000 0.0000 31.7229 15.2591 7.4402 -1.2928 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -2.9418 0.4452 -10.7936 -9.0513 6.3566 -68.1996 -0.0000 -0.0000 -3.7917 -0.0244 -4.1006 -5.9597 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -14.8585 -18.9127 -12.1847 -2.1528 0.0000 -0.0000 11.6495 -5.9035 17.7308 -0.6543 0.0000 -0.0000 -11.2144 -20.4498 16.5145 63.0560 0.0000 0.0000 -16.4271 -1.9444 1.4885 -11.0054 0.0000 -0.0000\n 3.5876 -50.0882 23.9997 -3.8355 -12.4210 179.3436 -1.9843 -4.0665 0.1272 -1.6700 -1.8994 -0.4445 8.3372 -8.7323 -0.2178 -3.2333 -3.8563 1.9052 -18.4440 -9.3934 -3.8673 2.7850 -3.8276 -2.6274 -6.0575 -2.7778 5.7828 -17.9775 -25.7378 63.8946 0.0000 0.0000 31.5180 14.7807 9.4411 -0.4305 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -3.5495 -0.1426 -9.9931 -12.0228 10.5584 -67.7676 -0.0000 -0.0000 -5.2764 -4.2297 -7.3844 -6.3175 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -12.3133 -19.3355 -14.7162 -2.1639 0.0000 -0.0000 10.6256 -8.1474 21.1224 -1.0435 0.0000 -0.0000 -14.5930 -22.7713 17.2650 66.1449 0.0000 0.0000 -17.9463 -2.9657 1.2349 -11.2971 0.0000 -0.0000\n 3.5771 -49.4885 24.1093 -2.9085 -12.3029 179.9947 -1.9061 -4.5853 0.0413 -1.6291 -1.5982 -0.3969 8.6960 -8.8595 -0.1118 -2.7755 -4.1170 2.1414 -17.2137 -9.6178 -4.0814 3.8201 -3.2313 -3.0767 -6.5133 -2.4962 5.2684 -17.6008 -25.9135 63.7607 0.0000 0.0000 30.5779 13.7404 10.6715 0.0493 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.3207 -1.0880 -9.7437 -13.2513 10.9650 -67.4640 -0.0000 -0.0000 -6.0028 -5.9416 -7.8121 -6.9532 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -10.1098 -19.0750 -17.4404 -1.4897 0.0000 -0.0000 9.0671 -8.3605 23.7994 -1.2300 0.0000 -0.0000 -17.9376 -23.7517 16.5782 66.6341 0.0000 0.0000 -19.2272 -2.4216 0.9734 -10.2229 0.0000 -0.0000\n 3.5431 -48.9185 24.2028 -1.9263 -12.0071 -178.9420 -1.7013 -5.0551 -0.0909 -1.5256 -1.3279 -0.3714 8.8937 -8.8472 -0.3545 -2.4527 -4.1296 2.1421 -16.1319 -9.6593 -4.0835 4.2908 -3.0682 -3.3459 -6.6119 -2.3146 4.9665 -16.5330 -25.4009 63.9559 0.0000 0.0000 29.1794 12.7388 10.3726 0.1879 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -4.8509 -1.5187 -9.4171 -13.5029 7.7579 -67.8484 -0.0000 -0.0000 -6.3597 -3.8960 -6.8065 -7.2543 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.1302 -18.5973 -18.8586 -0.6072 0.0000 -0.0000 7.0153 -7.8305 24.6226 -1.2853 0.0000 -0.0000 -21.2577 -23.8981 15.1798 65.0382 0.0000 0.0000 -19.9808 -1.1715 2.1703 -8.9589 0.0000 -0.0000\n 3.4893 -48.3876 24.2732 -1.2610 -11.6544 -178.3475 -1.4999 -5.3926 -0.1737 -1.4121 -1.3214 -0.3774 8.9978 -8.7853 -0.2889 -2.2557 -3.9844 2.1150 -15.3348 -9.2579 -3.9509 4.1634 -3.5084 -3.6823 -6.4952 -1.7920 4.9038 -14.8743 -24.0394 64.2716 0.0000 0.0000 27.3140 11.4677 8.9331 0.4859 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -5.2968 -1.8816 -8.6177 -13.7529 5.5866 -68.8516 -0.0000 -0.0000 -6.6718 -1.5457 -6.1495 -7.5098 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -6.3577 -18.0671 -18.8193 0.0630 0.0000 0.0000 5.2897 -7.8666 24.6359 -1.2806 0.0000 -0.0000 -24.2843 -23.7228 14.5564 61.5062 0.0000 0.0000 -19.9968 -1.2825 4.2490 -8.0504 0.0000 -0.0000\n 3.4319 -47.8926 24.3225 -0.9060 -11.2703 -178.3072 -1.3314 -5.5973 -0.1936 -1.3179 -1.4127 -0.3742 9.1066 -8.5744 0.2027 -2.1061 -3.8837 2.1934 -14.9395 -8.8919 -4.0540 3.5675 -4.3968 -4.3442 -6.2725 -1.1821 5.0171 -12.9046 -22.2377 64.5334 0.0000 0.0000 24.8059 9.4629 6.9542 0.8813 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -5.8701 -2.4920 -7.7955 -14.2727 6.1461 -70.1012 -0.0000 -0.0000 -6.8904 -1.9783 -5.6427 -7.8584 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -4.6859 -17.5966 -18.2098 0.2919 0.0000 0.0000 3.9354 -8.0254 24.6546 -1.1635 0.0000 -0.0000 -26.8636 -23.3217 14.6137 56.1969 0.0000 0.0000 -19.2464 -2.4232 5.1033 -7.3097 0.0000 -0.0000\n 3.3727 -47.4181 24.3567 -0.7009 -10.8736 -178.3562 -1.1452 -5.6691 -0.2095 -1.1873 -1.4311 -0.3398 9.1615 -8.2815 0.8014 -2.0374 -3.9128 2.3402 -14.8993 -8.9678 -4.6106 2.8242 -5.4822 -5.3866 -6.1360 -0.6096 5.2259 -10.5920 -20.9961 64.6298 0.0000 0.0000 21.7104 6.8357 4.4568 0.8753 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.4629 -3.0137 -7.4491 -14.8966 7.4641 -71.1207 -0.0000 -0.0000 -7.2942 -3.3567 -5.0454 -8.1614 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -3.1080 -17.2178 -17.5758 0.2391 0.0000 0.0000 2.5091 -7.5507 24.4977 -0.8937 0.0000 -0.0000 -28.9365 -22.2531 13.8975 49.2834 0.0000 0.0000 -18.2239 -2.0471 3.6498 -8.0937 0.0000 -0.0000\n 3.2922 -46.9524 24.3804 -0.6974 -10.5166 -178.5179 -0.9415 -5.6121 -0.2304 -1.0717 -1.4165 -0.3085 9.1449 -8.1681 1.4208 -2.0639 -4.0371 2.5474 -15.0961 -9.2345 -5.4008 2.2027 -6.4967 -6.5604 -6.1324 0.1967 5.4526 -7.7026 -20.6153 64.8746 0.0000 0.0000 17.8753 3.5854 1.2926 0.6225 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.8040 -3.2106 -7.4401 -15.5235 7.7108 -71.7667 -0.0000 -0.0000 -8.1138 -3.1721 -4.5593 -8.3410 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -1.8322 -16.8138 -16.6817 0.3463 0.0000 0.0000 0.9980 -6.8647 24.1032 -0.5535 0.0000 -0.0000 -30.3849 -20.3530 11.7069 40.9295 0.0000 0.0000 -16.8680 0.2140 0.8641 -11.1028 0.0000 -0.0000\n 3.1824 -46.4857 24.3898 -0.9755 -10.2928 -179.0955 -0.8181 -5.5446 -0.2704 -0.9964 -1.3967 -0.2796 9.1300 -8.3542 2.1738 -2.1059 -4.2353 2.8616 -15.4144 -9.3137 -6.0604 1.8203 -7.2162 -7.5115 -6.3647 1.3143 5.7395 -4.1375 -20.8397 65.4776 0.0000 0.0000 13.2674 0.2601 -2.7870 0.4589 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -7.0917 -3.4091 -7.5168 -15.8853 7.0520 -72.0865 -0.0000 -0.0000 -8.9377 -2.0949 -4.1534 -8.5329 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.9388 -16.3466 -15.3862 0.8239 0.0000 0.0000 -0.4636 -6.6149 23.8522 -0.1929 0.0000 -0.0000 -31.2315 -18.1398 8.7352 31.7743 0.0000 0.0000 -15.0568 1.7207 -1.7947 -12.7517 0.0000 -0.0000\n 3.0547 -45.9877 24.3829 -1.2080 -10.1246 -179.8926 -0.6620 -5.5329 -0.3344 -0.9149 -1.2445 -0.2356 9.1448 -8.6472 2.9437 -2.1259 -4.4917 3.2033 -15.6672 -9.2421 -6.4646 1.7487 -7.6184 -8.0952 -6.5658 2.0217 6.1528 -0.4559 -21.1234 66.1647 0.0000 0.0000 8.6422 -1.3516 -7.6297 0.0505 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -7.5837 -3.8232 -7.7491 -15.9362 6.1982 -72.2351 -0.0000 -0.0000 -9.1224 -1.6888 -3.4924 -8.6744 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.1152 -15.8433 -14.1978 1.3240 0.0000 0.0000 -2.0410 -6.4975 23.9787 0.1492 0.0000 0.0000 -31.4361 -16.0616 6.1480 22.8280 0.0000 0.0000 -13.1788 2.1601 -3.7467 -11.2065 0.0000 -0.0000\n 2.9242 -45.4327 24.3610 -1.2906 -9.9820 179.3900 -0.4950 -5.5897 -0.4150 -0.8112 -0.9600 -0.1877 9.1060 -8.8674 3.4910 -2.1278 -4.6985 3.4385 -15.7037 -9.0919 -6.6189 1.9937 -7.8797 -8.3985 -6.3310 1.9667 6.6634 2.8967 -21.3288 66.5038 0.0000 0.0000 5.3066 0.0737 -11.8207 -0.6527 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -8.2083 -4.3182 -8.0812 -16.0063 5.7825 -72.4008 -0.0000 -0.0000 -8.6750 -1.6217 -2.5467 -8.5167 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 1.5616 -15.3973 -13.5129 1.5588 0.0000 0.0000 -3.7674 -6.0251 24.3478 0.3242 0.0000 0.0000 -31.3236 -14.2407 4.6420 15.0340 0.0000 0.0000 -10.7002 3.5977 -4.7588 -9.4824 0.0000 -0.0000\n 2.7953 -44.8298 24.3238 -1.5733 -9.9376 178.5120 -0.4706 -5.6685 -0.5154 -0.7809 -0.7877 -0.1731 8.9979 -9.0157 3.8759 -2.1093 -4.7118 3.5150 -15.5827 -8.6994 -6.4219 2.3707 -8.0995 -8.5017 -5.5803 1.4536 7.3793 5.8881 -21.5263 66.4466 0.0000 0.0000 3.6682 3.1720 -14.3641 -0.9852 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -8.7738 -4.6662 -8.0977 -16.2770 5.8231 -72.6974 -0.0000 -0.0000 -8.0899 -1.2361 -1.7602 -8.1871 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 2.8872 -15.0219 -12.9534 1.8358 0.0000 0.0000 -5.4283 -5.4727 24.8240 0.2473 0.0000 0.0000 -31.4917 -12.7269 3.9988 9.0819 0.0000 0.0000 -6.7919 5.7118 -4.2651 -9.4201 0.0000 -0.0000\n 2.6713 -44.1893 24.2661 -2.1964 -9.8852 177.2465 -0.6038 -5.5851 -0.6557 -0.8533 -0.7859 -0.1794 8.8963 -9.1400 4.2104 -2.1044 -4.5456 3.4894 -15.4835 -8.0005 -5.8950 2.6639 -8.2127 -8.4366 -4.5813 0.5226 8.3972 8.3160 -21.9045 66.1062 0.0000 0.0000 2.9395 5.2412 -15.8068 -0.7529 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -9.1729 -4.6887 -7.6699 -16.5677 5.4910 -73.1511 -0.0000 -0.0000 -7.5371 -1.3431 -1.3441 -8.0700 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 3.8217 -14.5390 -12.0052 2.4661 0.0000 0.0000 -7.1936 -5.1210 25.2955 0.1327 0.0000 0.0000 -32.1210 -11.5699 3.7764 5.4071 0.0000 0.0000 -2.1517 6.9519 -2.3815 -9.6013 0.0000 -0.0000\n 2.5645 -43.4726 24.1829 -2.7417 -9.6132 175.8697 -0.8032 -5.2657 -0.7820 -0.9511 -0.7130 -0.1602 8.8651 -9.0460 4.4017 -2.1541 -4.3463 3.3912 -15.4760 -7.2573 -5.3955 2.8570 -8.1851 -8.2949 -3.5847 -0.8233 9.3297 10.2126 -22.7148 65.7594 0.0000 0.0000 2.4801 5.0888 -16.6301 -0.4463 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -9.3359 -4.4740 -7.2848 -16.7635 4.7290 -73.6706 -0.0000 -0.0000 -6.9053 -2.3936 -1.2640 -8.0423 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 5.0007 -13.8181 -10.8186 3.1749 0.0000 0.0000 -9.4878 -4.5891 25.6599 0.2715 0.0000 0.0000 -32.5805 -10.7413 4.0743 4.1973 0.0000 0.0000 1.3312 7.4850 -0.7795 -9.3473 0.0000 -0.0000\n 2.4870 -42.6301 24.0685 -3.0566 -9.3031 174.3093 -1.1862 -4.9868 -0.8320 -1.0821 -0.5740 -0.1208 8.8796 -8.5243 4.5449 -2.1634 -4.1232 3.2383 -15.5028 -6.6669 -5.0568 2.9455 -8.0803 -8.1802 -2.7044 -1.7512 9.7103 12.4447 -23.8737 66.1394 0.0000 0.0000 2.4882 3.6148 -16.4242 -0.4882 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -9.3227 -4.3343 -7.1270 -16.6528 4.5616 -74.1478 -0.0000 -0.0000 -6.4081 -2.8629 -1.7515 -7.7662 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 6.7614 -13.0164 -9.8257 3.8480 0.0000 0.0000 -12.1065 -3.9141 26.2872 0.6859 0.0000 0.0000 -31.8406 -10.4776 4.6821 4.3731 0.0000 0.0000 3.1997 7.2815 -0.7788 -9.8091 0.0000 -0.0000\n 2.4234 -41.6854 23.9153 -3.8045 -9.0710 171.9916 -2.0237 -4.7381 -0.9663 -1.4814 -0.6129 -0.1116 8.8745 -7.9313 4.9082 -2.0581 -3.7146 3.0612 -15.5765 -6.1122 -4.4520 2.7363 -7.9476 -7.9693 -2.0740 -1.8280 9.6116 15.6464 -24.3347 68.0884 0.0000 0.0000 2.8971 2.3762 -15.6296 -0.6956 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -9.3117 -3.9035 -6.4656 -15.5019 3.7665 -74.8222 -0.0000 -0.0000 -6.3389 -1.2297 -3.0731 -7.5934 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 7.9568 -11.9986 -8.9046 5.3562 0.0000 0.0000 -14.7339 -4.0598 27.5696 1.2042 0.0000 0.0000 -29.7571 -10.7436 4.9393 3.7384 0.0000 0.0000 5.7744 5.4642 -1.5350 -11.0246 0.0000 -0.0000\n 2.3106 -40.6777 23.7495 -4.8109 -7.4350 169.4394 -3.2034 -3.0143 -1.3052 -2.2781 -0.5495 -0.0892 8.9535 -7.8284 5.0027 -1.9855 -3.1387 2.7719 -15.7639 -5.6150 -3.4159 2.2233 -7.7704 -7.4177 -1.8589 -2.4677 9.1604 18.9664 -22.7784 71.5020 0.0000 0.0000 2.8738 2.1110 -15.6159 -0.8105 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -9.1491 -1.8723 -4.7639 -12.9213 -1.3257 -76.1687 -0.0000 -0.0000 -6.4492 2.0897 -5.5346 -7.8907 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 7.8468 -9.1061 -8.0236 8.5412 0.0000 0.0000 -17.9811 -5.3168 28.9911 1.5952 0.0000 0.0000 -26.7594 -9.4608 4.1900 1.2851 0.0000 0.0000 10.5558 2.3439 -0.6050 -10.9339 0.0000 -0.0000\n 2.0879 -39.5491 23.6503 -3.9449 -2.5271 168.4015 -4.0091 1.4176 -1.4567 -3.1182 0.4882 0.1001 9.2908 -7.4800 3.9088 -2.0524 -2.6051 2.2028 -15.7429 -5.6485 -2.8106 1.9379 -7.4034 -6.6292 -2.0950 -4.6308 7.9947 21.5050 -20.3102 75.3015 0.0000 0.0000 2.3423 2.5647 -16.0131 -0.8956 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.2585 1.6666 -3.1519 -9.7000 -9.7787 -77.6539 -0.0000 -0.0000 -6.3112 6.0358 -9.6415 -7.9280 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 8.2335 -2.2691 -8.2959 13.1146 0.0000 0.0000 -21.9193 -6.7379 29.9141 1.2124 0.0000 0.0000 -22.2718 -3.8026 2.7053 -2.0326 0.0000 -0.0000 15.2573 -0.5749 2.5537 -8.4696 0.0000 -0.0000\n 1.7801 -38.3156 23.6920 -0.9275 4.0493 168.7854 -4.2447 5.3598 -1.0084 -3.4006 2.2379 0.4713 9.5470 -4.1255 2.2593 -2.0193 -2.1733 1.4220 -14.9838 -6.4233 -3.5185 2.3542 -6.5731 -6.0990 -2.7192 -6.0290 5.9939 24.0050 -20.4154 78.9847 0.0000 0.0000 2.2594 2.8590 -14.8923 -0.9740 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.2732 3.7151 -3.5048 -5.8717 -13.9343 -78.2763 -0.0000 -0.0000 -5.4406 9.6317 -13.9684 -7.2413 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 9.7435 6.9394 -9.9133 19.4097 0.0000 0.0000 -23.6834 -7.7832 30.6553 -0.6698 0.0000 -0.0000 -17.0951 4.6174 1.2630 -3.3823 0.0000 -0.0000 15.6221 -2.3452 5.6440 -5.6402 0.0000 -0.0000\n 1.5039 -37.2090 23.8703 1.2570 7.7579 168.7112 -4.5761 5.4664 -0.4587 -3.3048 2.5685 0.6355 9.3640 1.0508 2.0331 -1.6109 -1.2108 0.7592 -13.9463 -6.3442 -4.5387 3.0869 -5.4037 -6.0037 -3.5494 -3.4733 4.3498 26.9669 -24.0010 82.6182 0.0000 0.0000 3.0602 1.8876 -13.2365 -0.7404 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.0985 3.1267 -5.5329 -0.7767 -10.1721 -78.2750 -0.0000 -0.0000 -3.2097 11.2387 -14.8944 -7.6885 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 7.9438 13.1735 -8.2096 29.4967 0.0000 0.0000 -19.3460 -8.9699 30.5732 -3.7200 0.0000 -0.0000 -13.6891 9.8720 1.1332 -1.8342 0.0000 -0.0000 11.6587 -2.9407 6.5724 -4.8138 0.0000 -0.0000\n 1.3019 -36.3221 24.0559 2.5104 8.0935 166.8422 -4.3254 3.7324 -0.1598 -2.9789 1.6249 0.5211 8.6521 3.9811 3.3972 -1.1285 0.2171 0.4332 -13.1774 -4.1593 -4.1390 3.3500 -4.1235 -5.6487 -4.6363 2.2947 4.4804 28.9493 -28.0998 85.6576 0.0000 0.0000 4.3055 -0.4215 -14.2618 -0.2867 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.7830 1.7039 -7.5607 5.0197 -3.8624 -78.2698 -0.0000 0.0000 0.6242 10.7047 -9.3240 -9.8619 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 1.1668 15.2286 -1.2981 43.1947 0.0000 0.0000 -8.4398 -12.5363 29.7681 -5.3363 0.0000 -0.0000 -10.9452 11.1233 3.7285 -0.5288 0.0000 -0.0000 7.8897 -3.7335 5.3446 -5.3824 0.0000 -0.0000\n 1.1212 -35.5910 24.1231 3.6855 8.6270 164.2401 -3.5887 3.8300 0.0569 -2.5632 0.9696 0.4154 7.8854 4.6512 4.3960 -0.9619 1.1052 0.2287 -12.6516 -1.4889 -2.4690 3.0233 -2.7831 -4.2572 -6.2656 6.6082 5.5588 28.0422 -29.2413 87.1052 0.0000 0.0000 5.6078 -2.2039 -17.0877 -0.0998 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -2.2737 0.3293 -8.8231 10.6428 -0.9197 -78.3664 -0.0000 0.0000 4.7939 11.9520 1.4311 -10.8335 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.5666 16.1671 6.3236 56.4424 0.0000 0.0000 2.1522 -16.9954 28.4187 -4.7671 0.0000 -0.0000 -8.2839 12.5908 7.1284 -0.7663 0.0000 -0.0000 6.0711 -5.3269 4.0275 -5.2656 0.0000 -0.0000\n 0.9819 -34.8873 24.1125 5.3140 10.1318 163.3673 -2.9684 5.8668 0.1615 -2.2650 1.3499 0.4091 7.9859 4.5221 3.3976 -0.9388 1.2696 -0.1756 -12.2798 -0.4623 -0.7811 2.8065 -1.7016 -2.2385 -7.6976 6.6712 5.8401 24.2962 -27.4449 86.8649 0.0000 0.0000 7.5773 -1.5374 -16.4021 -0.0178 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.0621 -0.7569 -9.3475 15.1314 -0.9695 -78.3235 -0.0000 0.0000 7.2929 15.2308 10.8480 -10.7962 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -14.4077 17.4422 10.8685 66.2275 0.0000 0.0000 4.0711 -18.2000 23.6335 -4.9555 0.0000 -0.0000 -4.9346 15.4569 8.0314 -2.0098 0.0000 -0.0000 4.8428 -6.6610 3.5125 -4.6010 0.0000 -0.0000\n 0.9188 -34.2128 24.1107 6.2549 11.1905 164.9176 -3.0671 7.6318 0.2409 -2.2740 2.1911 0.4398 9.0425 4.4425 1.0373 -0.7594 1.2434 -0.8553 -11.9580 -1.1837 0.1710 3.2992 -1.3913 -0.8322 -8.3488 4.7155 5.2769 19.7427 -27.4227 85.1816 0.0000 0.0000 11.2396 0.9203 -9.7969 -0.1580 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -1.5143 -0.8526 -9.1689 16.8831 -0.1508 -78.3113 -0.0000 0.0000 7.8761 16.6635 13.7586 -10.1476 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -19.1813 18.1381 11.4190 71.6120 0.0000 0.0000 -1.5974 -14.1144 14.6327 -5.3504 0.0000 -0.0000 -1.8428 17.5390 6.7953 -2.7175 0.0000 -0.0000 3.1155 -6.5702 2.5624 -5.0830 0.0000 -0.0000\n 0.9227 -33.6008 24.1566 6.3075 10.9012 167.5283 -3.3597 8.1672 0.2595 -2.3860 2.5229 0.4164 10.1437 4.5757 -0.7821 -0.4181 1.4204 -1.4956 -11.5553 -2.3725 0.3038 4.1618 -1.9692 -0.6975 -8.8044 4.1919 4.8820 15.6802 -32.5324 81.4613 0.0000 0.0000 16.4284 1.8105 -2.0982 -0.3350 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.7408 0.1194 -8.7354 16.2418 3.0555 -78.6396 -0.0000 0.0000 7.2144 14.8807 10.3375 -9.2627 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -22.6175 17.3807 9.7215 72.1616 0.0000 0.0000 -6.9550 -7.0109 5.4993 -4.0668 0.0000 -0.0000 0.2767 17.6560 6.4067 -2.1779 0.0000 -0.0000 1.1805 -5.5898 -0.1107 -6.5321 0.0000 -0.0000\n 0.9676 -33.0556 24.2389 5.9881 9.7205 169.8972 -3.3976 8.0804 0.2367 -2.3837 2.3091 0.3427 10.6664 4.6450 -1.3783 -0.0851 1.5919 -1.7666 -11.0485 -3.1009 -0.1347 4.6172 -2.8812 -1.4307 -9.1529 4.9464 4.6778 10.9297 -37.5511 76.1346 0.0000 0.0000 20.7923 -0.1673 2.7416 0.2967 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.2347 1.3328 -8.5979 15.2219 6.9051 -79.3902 -0.0000 0.0000 5.9995 11.4287 5.4147 -9.6410 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -25.3423 15.6037 8.0137 68.5021 0.0000 0.0000 -9.0917 -2.0169 -0.5285 -2.2237 0.0000 -0.0000 1.4099 16.5039 7.7847 -0.7599 0.0000 -0.0000 -0.7342 -5.2586 -3.8991 -7.0588 0.0000 -0.0000\n 1.0331 -32.5584 24.3262 5.4858 8.4645 171.9107 -3.3288 8.0345 0.2228 -2.3272 2.1656 0.3134 10.8807 4.3536 -1.4489 0.1652 1.4934 -1.7018 -10.6111 -3.2922 -0.8798 4.4863 -3.2889 -2.3573 -8.9264 5.0042 4.0912 5.1828 -36.7301 71.6335 0.0000 0.0000 22.4669 -1.5688 5.7593 0.5130 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0023 1.7390 -8.7837 14.6795 9.8140 -80.4749 -0.0000 0.0000 4.8873 9.0258 2.6310 -10.1870 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -27.3722 13.9338 6.5003 61.3751 0.0000 0.0000 -9.7165 -0.1733 -3.0099 -1.1861 0.0000 -0.0000 1.9632 15.0544 8.8361 0.8238 0.0000 0.0000 -2.8558 -5.8441 -6.8397 -6.1470 0.0000 -0.0000\n 1.0892 -32.0805 24.3842 4.9547 7.6112 173.7171 -3.2482 8.1544 0.1682 -2.2381 2.2369 0.3202 11.0685 3.8487 -1.5792 0.3401 1.3268 -1.5700 -10.4423 -2.9146 -1.6846 4.1352 -2.8492 -3.2420 -8.4199 4.4913 3.3247 0.0162 -32.1313 69.2650 0.0000 0.0000 22.3939 -0.4864 8.1974 -0.1706 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0489 1.0682 -9.0744 14.4448 11.6047 -81.3948 -0.0000 0.0000 4.1718 9.0208 1.6442 -9.8287 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -28.5987 13.2077 4.5616 51.6205 0.0000 0.0000 -8.6611 -0.5889 -2.3727 -0.5418 0.0000 -0.0000 2.5188 13.9718 8.3810 1.9887 0.0000 0.0000 -4.6832 -5.9656 -8.2482 -5.3681 0.0000 -0.0000\n 1.1056 -31.6010 24.3996 4.6830 7.2701 174.9610 -2.9274 8.1993 0.0970 -2.0678 2.2471 0.3015 11.1408 3.5556 -1.6731 0.3671 1.4344 -1.5606 -10.4583 -1.7985 -2.2835 3.8011 -1.8304 -4.1104 -8.1153 4.3104 2.8635 -4.1247 -28.6950 67.8629 0.0000 0.0000 22.3660 0.3342 9.9841 -0.5711 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0710 0.1840 -9.0836 14.4039 11.9911 -81.9522 -0.0000 0.0000 4.1899 10.4334 1.7169 -9.1514 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -29.1313 13.3602 1.9200 40.4009 0.0000 0.0000 -4.2720 -2.4566 0.9933 0.2280 0.0000 0.0000 3.5345 13.5552 7.2672 2.4694 0.0000 0.0000 -5.7518 -5.1489 -8.6592 -5.6057 0.0000 -0.0000\n 1.0808 -31.1100 24.3810 4.5844 7.3623 175.3203 -2.4633 8.0276 0.0882 -1.8643 2.0809 0.2619 10.9773 3.6908 -1.4483 0.2299 1.8348 -1.6248 -10.4223 -0.0457 -2.5259 3.4823 -0.6989 -4.8257 -8.1297 4.3236 2.7506 -7.4965 -28.0901 66.4382 0.0000 0.0000 23.2546 -0.7677 10.6879 -0.2105 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.3206 -0.1553 -8.6209 14.7303 11.1857 -82.4486 -0.0000 0.0000 5.1690 11.6534 2.2980 -8.5782 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -29.2379 13.7129 -1.9269 28.4668 0.0000 0.0000 3.9555 -3.6080 6.7631 0.2448 0.0000 0.0000 4.8509 13.7824 6.3509 2.3995 0.0000 0.0000 -6.6937 -4.7273 -8.4543 -5.7244 0.0000 -0.0000\n 1.0460 -30.5802 24.3333 4.6921 7.8786 175.1192 -2.0166 8.0648 0.1086 -1.6010 1.7746 0.2229 10.5940 4.0964 -0.9386 0.0765 2.3165 -1.6720 -10.1743 1.8621 -2.4168 3.2455 0.1805 -5.0966 -8.3350 4.4227 2.8468 -10.0880 -28.8414 64.8862 0.0000 0.0000 24.8776 -1.8223 10.3528 0.1495 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.5737 -0.4053 -7.9543 15.4159 10.6643 -82.9768 -0.0000 0.0000 6.5841 12.2686 2.8605 -7.8314 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -28.9319 13.6729 -7.4503 16.9182 0.0000 0.0000 13.1510 -2.2806 13.6790 -1.3915 0.0000 -0.0000 6.4401 14.5548 5.6005 2.1910 0.0000 0.0000 -8.2619 -5.4018 -8.0297 -4.4673 0.0000 -0.0000\n 1.0319 -30.0233 24.2632 4.8847 8.6807 174.9544 -1.7227 8.5721 0.1523 -1.3253 1.4123 0.1920 10.2643 4.5461 -0.4835 0.0320 2.7490 -1.7198 -9.9174 3.2546 -2.0420 3.2027 0.6885 -4.8322 -8.6414 4.8162 3.0586 -11.8175 -29.4727 63.3175 0.0000 0.0000 26.6731 -1.0494 9.6036 0.1053 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.7281 -1.0171 -7.4779 16.0934 11.0674 -83.2073 -0.0000 0.0000 7.5956 12.5448 3.3407 -7.0004 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -29.2006 12.9396 -12.0080 8.4464 0.0000 0.0000 17.8793 -0.8823 18.1380 -3.7180 0.0000 -0.0000 7.8595 15.4870 5.5307 2.6642 0.0000 0.0000 -10.3839 -5.5511 -8.5724 -2.4255 0.0000 -0.0000\n 1.0453 -29.4828 24.2012 4.8830 9.0521 175.2044 -1.5122 8.7885 0.1614 -1.1568 1.1287 0.1660 10.2061 4.9838 -0.2801 0.0248 3.0923 -1.8105 -9.8826 3.8347 -1.5474 3.3683 0.9004 -4.2498 -8.8947 5.1868 3.2527 -12.9099 -29.3901 61.9759 0.0000 0.0000 28.0111 0.2165 8.7855 0.1861 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.8117 -1.3774 -7.3002 16.4783 11.5624 -82.9676 -0.0000 0.0000 7.9827 12.6457 4.0311 -6.5741 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -30.3634 11.6578 -13.3437 4.0078 0.0000 0.0000 16.2441 -2.1788 17.6794 -4.8568 0.0000 -0.0000 8.5960 15.6904 6.7049 4.2289 0.0000 0.0000 -12.5323 -3.9386 -10.5958 -1.4319 0.0000 -0.0000\n 1.0812 -28.9422 24.1571 4.6717 8.6639 176.0131 -1.2726 8.4771 0.0151 -1.0021 0.9583 0.1402 10.1208 5.1425 -0.2742 -0.0166 3.2483 -1.8776 -9.8026 3.9482 -1.1050 3.7935 1.0351 -3.6440 -8.9926 5.5603 3.3324 -13.5166 -29.1399 60.9303 0.0000 0.0000 28.5778 0.2027 7.7710 0.6796 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.7702 -1.2664 -7.3141 16.7927 12.0693 -82.7065 -0.0000 0.0000 8.0974 12.5453 4.6342 -6.4831 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -31.8260 10.1492 -13.9787 2.8186 0.0000 0.0000 11.4341 -3.8659 14.1406 -3.8814 0.0000 -0.0000 9.0699 14.9199 7.8889 6.0670 0.0000 0.0000 -14.2375 -2.2227 -12.5895 -2.5467 0.0000 -0.0000\n 1.1294 -28.3795 24.1351 4.1674 7.7215 177.3602 -1.1634 7.8010 -0.2383 -0.9324 0.9416 0.1209 9.9858 4.8754 -0.4654 -0.0342 3.2039 -1.8867 -9.6568 4.0839 -0.8294 4.4030 1.4159 -3.1614 -8.9175 5.7166 3.2043 -13.8036 -28.7922 60.4230 0.0000 0.0000 28.3551 -0.7146 6.5138 1.2244 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.4802 -1.1193 -7.4116 17.2280 12.8129 -82.7966 -0.0000 0.0000 8.0830 11.8915 4.5767 -6.3045 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -33.3294 8.6583 -16.0316 3.9827 0.0000 0.0000 8.6047 -4.1937 9.7466 -2.3253 0.0000 -0.0000 9.5169 13.5191 8.2571 7.4426 0.0000 0.0000 -15.5130 -2.0580 -13.6748 -4.6741 0.0000 -0.0000\n 1.1790 -27.7984 24.1276 3.2115 6.7468 179.0896 -1.4325 7.0262 -0.3793 -1.0987 1.0640 0.1207 10.0868 4.4123 -0.9348 0.0021 3.0922 -1.9052 -9.7428 4.5638 -0.7312 5.0424 2.3049 -2.8304 -8.7906 5.3025 2.8945 -13.8995 -28.0674 60.5431 0.0000 0.0000 27.6410 -1.3031 5.3142 1.4599 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0583 -1.2585 -7.6589 17.7444 13.6335 -83.0638 -0.0000 0.0000 7.8682 10.5670 4.1811 -6.0785 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -34.6416 7.4415 -19.1254 5.9159 0.0000 0.0000 9.8585 -4.0924 5.0775 -2.0592 0.0000 -0.0000 9.5910 11.9758 8.3460 8.5847 0.0000 0.0000 -16.5093 -2.5055 -14.6985 -6.1793 0.0000 -0.0000\n 1.2250 -27.1904 24.1116 1.9267 5.9947 -179.2488 -2.0306 6.2917 -0.3009 -1.4280 1.1284 0.1147 10.3536 4.0083 -1.4512 -0.0068 3.0902 -1.9618 -10.0573 5.6904 -0.6295 5.6856 3.7484 -2.6298 -8.7446 4.3959 2.6587 -13.7835 -27.1580 60.8903 0.0000 0.0000 26.9787 -1.3186 4.2679 1.3702 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.1116 -1.4071 -8.1402 18.3310 14.9251 -83.2144 -0.0000 0.0000 7.7680 9.7508 4.3295 -6.1141 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -35.4311 6.3255 -21.7479 7.3978 0.0000 0.0000 12.7309 -4.2160 1.1130 -2.8090 0.0000 -0.0000 9.3536 10.5731 8.6408 9.7398 0.0000 0.0000 -17.4525 -1.9277 -16.2136 -6.8275 0.0000 -0.0000\n 1.2633 -26.5239 24.0688 0.6237 5.2163 -178.0091 -2.7617 5.4018 -0.2300 -1.7439 0.9303 0.0743 10.4911 3.6719 -1.6499 -0.1170 3.2795 -2.0337 -10.4072 7.7923 -0.2404 6.3463 5.5903 -2.4491 -8.7496 3.3753 2.7764 -13.3909 -26.2546 61.0612 0.0000 0.0000 26.7744 -1.1803 3.0966 1.1876 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.1096 -1.3217 -8.7221 19.0002 17.5614 -83.2390 -0.0000 0.0000 8.1579 10.8544 4.9839 -6.3779 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -35.2956 4.9141 -22.3463 8.6909 0.0000 0.0000 13.9837 -4.3573 -0.4096 -3.1325 0.0000 -0.0000 9.3331 9.2065 9.1892 10.7103 0.0000 0.0000 -18.5373 -0.6022 -17.8414 -7.6189 0.0000 -0.0000\n 1.2845 -25.7910 23.9912 -0.7462 4.4556 -176.7649 -3.6610 4.3057 -0.2264 -2.1571 0.6601 0.0183 10.6729 3.3481 -1.8400 -0.2027 3.6079 -2.1707 -11.0264 10.8182 0.4384 6.7635 7.6996 -2.1708 -8.7694 2.0860 3.1543 -12.8503 -24.6056 61.1332 0.0000 0.0000 26.8735 -1.1801 1.2757 1.2717 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.3662 -1.2368 -9.1830 19.5716 20.4312 -83.2634 -0.0000 0.0000 8.7074 12.6973 5.3686 -6.6098 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -33.9278 3.5031 -20.8578 9.8632 0.0000 0.0000 13.6541 -4.0069 1.2034 -2.1483 0.0000 -0.0000 9.4119 7.8826 9.8560 11.6545 0.0000 0.0000 -19.5671 0.5499 -19.4662 -8.8212 0.0000 -0.0000\n 1.2962 -25.0162 23.8828 -2.6531 3.7600 -174.7725 -5.1162 2.8570 0.1015 -3.0471 0.5935 -0.0056 11.6009 3.2893 -2.6254 -0.2004 3.9565 -2.4871 -12.3671 14.3602 1.0691 6.5907 9.9845 -1.8815 -8.9121 -0.2416 3.2975 -12.5113 -21.1179 61.3779 0.0000 0.0000 26.6688 -1.4323 -1.7557 1.7946 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.3758 -0.7662 -9.4843 19.8309 20.2579 -83.2478 -0.0000 0.0000 8.7184 12.2742 5.6341 -6.6575 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -31.3975 2.2932 -19.1193 9.2421 0.0000 0.0000 13.5756 -1.4172 4.5731 -0.2136 0.0000 -0.0000 8.6451 6.3891 10.5597 13.3218 0.0000 0.0000 -20.4817 1.7736 -21.6673 -9.4683 0.0000 -0.0000\n 1.3434 -24.1771 23.7807 -4.4889 1.6968 -172.4938 -6.8671 -0.1704 0.6287 -4.4126 0.1596 -0.0684 13.4583 3.9201 -3.4110 -0.3189 4.2979 -2.8657 -14.2447 18.0579 1.5779 6.0131 12.1432 -1.7739 -9.3856 -3.3654 3.0600 -12.4802 -16.6633 61.4132 0.0000 0.0000 25.9779 -1.7670 -6.0175 2.4082 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.2354 1.4477 -9.5857 19.6972 16.0444 -83.0487 -0.0000 0.0000 8.2756 9.3987 6.2699 -6.5996 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -27.3456 -0.6001 -18.7369 4.7703 0.0000 0.0000 14.3378 4.2698 6.7484 0.9957 0.0000 0.0000 7.2352 3.1044 11.8281 16.2239 0.0000 0.0000 -21.9844 3.2958 -24.6714 -9.2475 0.0000 -0.0000\n 1.4295 -23.2243 23.7243 -4.3659 -2.4281 -171.6645 -7.3819 -4.5384 0.5750 -5.1429 -2.0730 -0.5118 14.5822 4.8954 -2.6994 -0.7460 4.8327 -2.9464 -15.7577 21.1809 2.5393 5.5111 13.6872 -1.7461 -10.2264 -4.7297 3.2881 -12.2208 -14.9245 60.1986 0.0000 0.0000 25.3742 -1.7998 -9.9652 2.3775 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0392 4.9564 -9.2141 19.4893 11.7475 -82.9215 -0.0000 0.0000 7.8453 6.8695 6.3806 -6.3575 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -21.4583 -6.4469 -17.4290 -2.3018 0.0000 -0.0000 15.8110 8.9002 5.3961 0.7533 0.0000 0.0000 6.8855 -2.7070 14.1518 20.7681 0.0000 0.0000 -23.9604 4.0957 -27.3534 -9.9041 0.0000 -0.0000\n 1.5048 -22.3365 23.7563 -3.5566 -6.5036 -173.2674 -6.5616 -7.5340 0.3087 -4.5717 -4.9193 -1.0635 13.6919 4.1557 -0.5550 -1.2617 5.5035 -2.6243 -17.0407 22.5192 4.4871 4.9274 13.9497 -1.3917 -10.7444 -3.4785 4.9373 -12.0409 -16.6456 58.0003 0.0000 0.0000 25.0861 -2.0137 -11.1932 1.5448 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.5505 7.4194 -8.0169 19.2804 10.5547 -83.1921 -0.0000 0.0000 7.4200 5.5258 4.7643 -5.8703 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -17.8813 -11.8716 -13.6454 -4.8143 0.0000 -0.0000 15.6158 9.4116 2.2234 -0.0265 0.0000 -0.0000 5.3373 -8.4814 16.1400 28.8987 0.0000 0.0000 -23.4860 3.3362 -27.8658 -12.9308 0.0000 -0.0000\n 1.5725 -21.6095 23.8789 -2.8774 -8.6130 -175.2103 -5.0255 -8.1247 0.2746 -3.4469 -5.5132 -1.0918 12.2912 1.6485 0.6613 -1.5120 5.3452 -2.1480 -18.1017 20.6097 6.3291 4.0374 12.6476 -0.5690 -10.3670 -1.5801 7.2899 -12.5235 -19.3574 56.1786 0.0000 0.0000 24.8138 -3.0918 -9.0126 0.5815 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 1.2825 6.2709 -6.6441 19.1789 11.5724 -83.7149 -0.0000 0.0000 6.5854 3.3330 2.1403 -5.3064 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -16.8243 -14.6067 -13.9105 -2.1019 0.0000 -0.0000 12.4332 8.7227 3.6829 -0.3729 0.0000 -0.0000 0.4749 -12.5038 15.0813 41.3115 0.0000 0.0000 -16.7126 3.2238 -26.2118 -15.9859 0.0000 -0.0000\n 1.6443 -20.9509 24.0033 -1.7263 -8.9942 -174.8585 -3.4601 -7.3086 0.1914 -2.6177 -4.1947 -0.8416 11.4598 -0.3071 -0.1465 -1.4678 4.1639 -1.7802 -17.7633 15.5026 6.1662 3.4100 10.1425 0.2323 -9.1963 -0.5374 8.3199 -12.9803 -21.4885 55.8341 0.0000 0.0000 24.1079 -4.7803 -5.2617 -0.0974 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 1.8999 2.4776 -6.2080 19.3170 12.2393 -83.9292 -0.0000 0.0000 5.4215 0.2926 0.7145 -5.1088 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -14.7998 -15.1668 -16.9914 -0.1280 0.0000 -0.0000 9.2394 8.7498 6.9221 -0.1750 0.0000 -0.0000 -6.7104 -14.8358 10.7302 54.6964 0.0000 0.0000 -5.3607 5.7081 -23.9894 -14.0421 0.0000 -0.0000\n 1.7160 -20.2956 24.0981 -0.2833 -9.1861 -173.2303 -2.2368 -6.6111 0.0707 -2.1480 -2.9029 -0.6211 11.1261 -1.0113 -1.2944 -1.3750 2.7809 -1.4477 -16.1451 9.3482 4.0752 3.8174 6.8766 0.2405 -7.9823 -0.1397 7.2151 -12.3222 -23.1169 57.1750 0.0000 0.0000 22.6737 -6.0215 -2.7619 -0.6233 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 1.8302 0.5065 -6.7321 19.2663 11.3900 -83.3847 -0.0000 0.0000 4.5435 -0.7142 1.2194 -5.4837 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -11.1169 -15.8204 -17.4047 -1.2571 0.0000 -0.0000 7.6474 8.8590 6.7888 0.2564 0.0000 0.0000 -13.8967 -16.3009 5.8288 65.3591 0.0000 0.0000 2.1486 8.0735 -21.7784 -11.2641 0.0000 -0.0000\n 1.7306 -19.6657 24.1753 0.8098 -9.4545 -172.9959 -1.4694 -6.5483 0.0267 -1.8616 -2.4922 -0.4818 11.1404 -0.6041 -1.0261 -1.3244 1.7929 -0.9928 -14.3914 4.0308 1.5684 4.9328 3.4298 -0.6863 -7.3650 0.7277 5.4202 -10.6238 -24.7611 59.2591 0.0000 0.0000 20.5143 -6.0806 -3.1968 -0.9252 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 1.2990 1.7826 -7.3496 18.5817 10.6473 -82.2392 -0.0000 0.0000 4.0404 0.5671 1.9096 -6.2397 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.5612 -16.6217 -14.1201 -2.7052 0.0000 -0.0000 6.6844 8.1098 4.2382 0.8873 0.0000 0.0000 -19.5929 -17.2683 3.2598 72.0551 0.0000 0.0000 1.7166 7.6859 -18.1220 -12.0090 0.0000 -0.0000\n 1.6900 -19.0962 24.2303 1.3136 -9.6711 -174.6052 -1.1939 -7.0206 0.0766 -1.7013 -2.6628 -0.4071 11.5481 0.3276 0.3207 -1.1169 1.3215 -0.4947 -13.3090 0.3920 -0.2539 5.6811 0.6468 -1.8628 -7.1500 2.3426 4.5782 -8.9731 -25.9488 61.2137 0.0000 0.0000 18.1058 -5.1181 -5.8686 -0.6828 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.9746 3.5709 -7.5372 17.2125 11.7769 -80.8570 -0.0000 0.0000 3.3318 0.4791 1.3223 -6.9486 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -5.3367 -17.0605 -10.9878 -2.2642 0.0000 -0.0000 5.0356 7.3357 3.3995 1.4637 0.0000 0.0000 -23.8788 -18.1717 3.2308 74.7482 0.0000 0.0000 -2.5488 4.1971 -12.5648 -12.6363 0.0000 -0.0000\n 1.6310 -18.5607 24.2596 1.7141 -9.7034 -176.2641 -1.1200 -7.6263 0.1263 -1.6086 -2.8104 -0.3666 12.2672 1.0242 1.3760 -0.6972 1.1590 -0.1600 -12.9246 -1.4076 -1.2300 5.6878 -0.8262 -2.6484 -6.8491 3.7535 4.7029 -7.9375 -25.7046 62.7555 0.0000 0.0000 16.5985 -3.8286 -8.2583 -0.0164 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.9288 3.6858 -7.5775 15.8306 14.3240 -79.5888 -0.0000 0.0000 2.4169 -2.7282 0.1200 -7.5155 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -3.4883 -17.2156 -10.5413 -1.4039 0.0000 -0.0000 3.1500 7.7749 5.0930 1.4539 0.0000 0.0000 -27.3442 -18.6785 3.4607 73.8666 0.0000 0.0000 -4.9195 0.3477 -6.4657 -11.1523 0.0000 -0.0000\n 1.5618 -18.0285 24.2862 2.2009 -9.5701 -176.9059 -0.9899 -8.0284 0.0981 -1.5615 -2.8524 -0.3555 12.9277 1.1902 1.7255 -0.3299 1.1400 -0.0307 -12.8538 -1.6781 -1.6094 5.5051 -1.0973 -3.0167 -6.3671 4.0001 4.9768 -7.2118 -24.2116 63.7470 0.0000 0.0000 16.7660 -3.1480 -8.4819 0.4242 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.8224 2.9600 -7.7325 15.2178 16.3021 -78.8129 -0.0000 0.0000 1.9752 -6.0650 -0.5502 -8.0422 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -1.2885 -17.1709 -10.8059 -1.6283 0.0000 -0.0000 1.7464 8.9518 6.3539 0.8044 0.0000 0.0000 -30.0639 -18.3619 2.8508 69.7209 0.0000 0.0000 -5.1934 -1.7247 -0.9084 -9.7366 0.0000 -0.0000\n 1.4700 -17.5131 24.3231 2.2378 -9.2640 -177.0822 -0.9903 -8.1565 0.0421 -1.5557 -2.8962 -0.3692 13.2213 1.0551 1.8096 -0.1971 1.1929 -0.0024 -12.8511 -0.9931 -1.5972 5.6558 -0.7367 -3.2178 -6.0568 3.4275 5.1894 -6.5093 -23.3139 64.0924 0.0000 0.0000 17.7892 -3.4243 -7.3556 0.4498 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.6053 2.6978 -7.8722 15.3672 16.6257 -78.6982 -0.0000 0.0000 2.1714 -6.5023 -0.6513 -8.4044 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.3254 -16.7606 -9.6755 -1.9545 0.0000 -0.0000 0.6455 9.6111 5.6324 0.0836 0.0000 0.0000 -31.9000 -17.4973 2.3853 62.3972 0.0000 0.0000 -5.1236 -2.8182 2.9619 -9.0992 0.0000 -0.0000\n 1.3669 -17.0041 24.3575 2.0014 -8.8474 -177.2557 -1.0066 -8.1771 0.0067 -1.5402 -2.8760 -0.3775 13.2170 0.9140 1.8428 -0.1733 1.2791 -0.0264 -12.8672 -0.0911 -1.4227 5.9517 -0.2031 -3.3717 -6.0761 3.0795 5.5113 -5.8984 -24.1819 64.0560 0.0000 0.0000 18.1711 -4.2100 -6.8442 0.4790 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.4386 2.5597 -7.9072 15.8196 15.8985 -79.0112 -0.0000 0.0000 2.5588 -4.7839 -0.6936 -8.5907 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 1.2469 -16.0637 -8.4737 -1.3599 0.0000 -0.0000 -0.8667 9.5340 4.8920 -0.1725 0.0000 -0.0000 -32.4627 -16.7410 2.9588 52.5227 0.0000 0.0000 -4.5669 -3.5244 3.3017 -8.3190 0.0000 -0.0000\n 1.2781 -16.4809 24.3698 1.7539 -8.6496 -177.2132 -1.1012 -8.3480 -0.0798 -1.5685 -2.7735 -0.3897 13.2572 0.8233 1.7120 -0.0970 1.3888 -0.1026 -12.9494 0.5056 -1.3316 5.9310 0.2247 -3.5310 -6.1421 3.1435 5.8661 -5.4500 -25.4212 64.0729 0.0000 0.0000 17.5248 -4.8229 -7.3482 0.5580 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.2513 2.0916 -7.9955 16.2439 15.0004 -79.3382 -0.0000 0.0000 2.8588 -3.1054 -0.5769 -8.6721 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 1.8947 -15.6000 -8.8193 -0.1822 0.0000 -0.0000 -2.9006 9.2976 5.5481 -0.0108 0.0000 -0.0000 -32.1820 -16.3151 4.4715 41.3445 0.0000 0.0000 -2.9683 -3.4158 -0.7502 -7.5787 0.0000 -0.0000\n 1.1932 -15.9298 24.3613 1.5113 -8.7348 -176.8478 -1.3316 -8.6717 -0.2761 -1.6731 -2.6395 -0.4120 13.4377 0.7216 1.4412 -0.0068 1.5006 -0.2122 -13.1038 0.7327 -1.4109 5.6569 0.3348 -3.7748 -6.0150 3.1186 6.0802 -4.8549 -25.0280 64.2271 0.0000 0.0000 16.7494 -5.0699 -7.9619 0.4406 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0250 1.8878 -8.1373 16.4967 13.9930 -79.5132 -0.0000 0.0000 3.1053 -1.8899 -0.1864 -8.7026 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 2.4929 -15.4420 -9.7035 1.0401 0.0000 0.0000 -5.0487 9.2222 6.3314 0.1486 0.0000 0.0000 -31.4911 -15.7725 6.6704 29.6800 0.0000 0.0000 -0.0705 -1.4543 -7.5609 -7.4896 0.0000 -0.0000\n 1.0798 -15.3379 24.3350 1.2308 -8.7939 -176.4892 -1.5827 -9.0273 -0.5026 -1.7597 -2.3640 -0.4122 13.4716 0.6451 1.2124 0.0079 1.5405 -0.2981 -13.2170 0.6486 -1.6128 5.5852 0.0973 -4.1203 -5.7078 2.9466 6.1351 -3.9957 -23.3994 64.2867 0.0000 0.0000 16.3867 -5.2955 -8.1088 0.1679 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0096 2.2405 -8.1749 16.6159 12.8003 -79.6683 -0.0000 0.0000 3.2668 -0.7245 -0.0632 -8.6262 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 3.0711 -15.1895 -9.6614 2.3877 0.0000 0.0000 -7.1874 9.2627 6.0381 0.0362 0.0000 0.0000 -30.4044 -14.6147 9.0092 18.2202 0.0000 0.0000 4.3887 3.4995 -13.7847 -8.0093 0.0000 -0.0000\n 0.9310 -14.6933 24.2887 1.0248 -8.6296 -176.3664 -1.6896 -9.2790 -0.6704 -1.7433 -1.9276 -0.3768 13.2099 0.6213 1.0968 -0.0464 1.4761 -0.3225 -13.2684 0.2596 -1.8855 5.8520 -0.3193 -4.4348 -5.4330 3.0274 6.1001 -3.1909 -22.6277 64.2178 0.0000 0.0000 15.9309 -5.7025 -8.1739 -0.0591 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 0.2054 2.6094 -8.1815 16.7861 12.0164 -79.8128 -0.0000 0.0000 3.2996 0.1717 -0.3034 -8.4736 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 3.8489 -14.6308 -9.2286 3.9047 0.0000 0.0000 -9.4126 9.2069 5.5188 -0.1859 0.0000 -0.0000 -29.2797 -12.8289 8.8557 8.8348 0.0000 0.0000 8.2345 9.6869 -15.5205 -8.5631 0.0000 -0.0000\n 0.7762 -14.0248 24.2361 0.6817 -8.2852 -176.3628 -1.8170 -9.0197 -0.7739 -1.7707 -1.6848 -0.3593 13.0131 0.5219 0.9824 -0.1684 1.3535 -0.3100 -13.5961 -0.3610 -2.1529 6.1163 -0.7868 -4.5774 -5.3838 3.0133 6.0410 -2.7566 -22.7850 64.2266 0.0000 0.0000 15.0130 -6.2475 -8.6515 -0.2372 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 0.2460 2.8957 -8.3760 17.0059 11.8574 -79.6575 -0.0000 0.0000 3.3548 0.6871 -0.1902 -8.4537 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 4.5874 -13.8428 -9.3663 5.3821 0.0000 0.0000 -11.6072 8.8458 5.6875 -0.2207 0.0000 -0.0000 -29.2530 -10.9626 6.2369 3.7684 0.0000 0.0000 7.9844 12.1782 -12.1788 -9.0839 0.0000 -0.0000\n 0.6198 -13.3419 24.1764 0.1763 -7.9469 -176.3948 -1.9730 -8.3872 -0.8936 -1.8888 -1.7020 -0.3678 12.9467 0.3065 0.8639 -0.3621 1.1893 -0.2741 -14.1800 -1.0254 -2.3450 6.1601 -1.4236 -4.5794 -5.4361 2.5204 6.0752 -2.6419 -22.5129 64.1730 0.0000 0.0000 14.2179 -6.6172 -9.1964 -0.4826 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 0.1986 3.2805 -8.6878 17.1498 11.6525 -79.2635 -0.0000 0.0000 3.5716 1.0983 0.2955 -8.5571 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 5.3539 -13.0482 -9.4551 6.5023 0.0000 0.0000 -13.5971 8.2589 5.9232 -0.2032 0.0000 -0.0000 -30.6456 -9.1556 6.4883 3.5496 0.0000 0.0000 5.3879 9.2153 -8.2625 -9.6690 0.0000 -0.0000\n 0.4388 -12.5846 24.0965 -0.3141 -7.3978 -177.0920 -2.2630 -7.7602 -0.9386 -1.9784 -1.6476 -0.3347 12.8108 0.3420 1.1070 -0.4954 0.9678 -0.1416 -14.4824 -1.7939 -2.5584 6.1389 -2.5401 -4.5795 -5.2142 1.9741 6.1793 -2.5581 -21.9134 63.8458 0.0000 0.0000 14.1347 -6.5910 -9.0141 -0.6936 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.3359 3.6031 -8.8546 17.4189 10.9276 -79.0208 -0.0000 0.0000 3.8515 1.3954 0.4492 -8.5149 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 6.5818 -11.9565 -8.4187 7.2975 0.0000 0.0000 -15.4922 7.5585 5.6592 -0.5059 0.0000 -0.0000 -31.4006 -7.5012 9.5278 4.9918 0.0000 0.0000 3.8212 6.4544 -3.7859 -9.8171 0.0000 -0.0000\n 0.2256 -11.7246 24.0017 -1.0823 -6.3354 -179.1475 -3.0845 -7.0720 -1.0172 -2.3309 -1.5055 -0.2397 12.8197 1.0079 2.1557 -0.4433 0.7896 0.1731 -14.4550 -3.1670 -2.8951 6.2441 -4.3411 -4.5592 -4.6970 1.6962 6.1969 -2.2337 -21.9974 63.5696 0.0000 0.0000 14.3996 -6.5655 -8.1603 -0.6843 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.1309 4.1037 -8.8170 18.0826 10.3310 -78.7137 -0.0000 0.0000 4.1795 1.8241 0.8159 -8.3683 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 7.6679 -9.9727 -7.1429 8.5318 0.0000 0.0000 -17.6563 6.3895 6.1506 -0.8098 0.0000 -0.0000 -29.5609 -5.9032 11.9749 3.8184 0.0000 0.0000 4.5883 8.1056 1.0246 -10.0211 0.0000 -0.0000\n 0.0074 -10.7659 23.8885 -2.0545 -5.0688 177.6185 -4.4516 -6.0555 -1.1982 -3.0366 -1.5955 -0.1710 13.1654 1.9835 3.7156 -0.2899 0.6852 0.5886 -14.5009 -5.6083 -3.1973 6.4195 -6.6148 -4.3476 -4.1737 1.0470 6.0413 -1.4779 -21.9775 64.1115 0.0000 0.0000 14.2621 -7.1229 -7.8291 -0.4881 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -1.0535 5.3538 -8.7016 18.7697 10.8499 -77.6307 -0.0000 0.0000 4.8446 3.5446 2.6960 -8.4603 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 8.0971 -7.2712 -6.7174 10.9232 0.0000 0.0000 -20.2965 4.5413 8.4558 -0.4453 0.0000 -0.0000 -25.3643 -4.1662 8.8120 -0.8471 0.0000 -0.0000 7.4885 9.6613 6.6197 -11.0014 0.0000 -0.0000\n -0.1813 -9.7237 23.7728 -2.0095 -3.5056 174.7184 -5.3981 -3.6653 -1.1924 -3.7320 -1.8059 -0.1723 13.8507 2.3430 4.4486 -0.2746 0.3230 0.8721 -14.6420 -8.9359 -3.3823 6.3726 -8.6056 -3.9331 -3.8054 -1.1815 5.6332 -0.5232 -19.9759 65.6690 0.0000 0.0000 13.7218 -7.6867 -8.6582 -0.3686 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.5125 7.2982 -8.6385 18.4430 11.5681 -75.6538 -0.0000 0.0000 5.9628 6.9256 5.2665 -8.7361 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 8.9790 -4.0466 -6.4674 14.2576 0.0000 0.0000 -22.8758 2.8229 10.7608 -0.1295 0.0000 -0.0000 -20.2041 -2.0829 2.8545 -5.9270 0.0000 -0.0000 12.9601 5.1411 10.4092 -11.1758 0.0000 -0.0000\n -0.3966 -8.6791 23.7384 -0.7688 -0.8250 173.7925 -5.6995 0.1932 -1.0698 -4.2920 -0.8583 0.0013 14.7889 1.5772 3.5481 -0.4429 -0.5156 0.8887 -14.3678 -11.7475 -3.6883 5.9484 -9.5847 -3.5266 -3.5179 -4.5301 4.9211 0.1925 -17.2229 67.2673 0.0000 0.0000 13.5550 -7.1915 -9.3174 -0.3712 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -2.9903 9.0287 -8.7609 17.1457 10.8702 -73.6650 -0.0000 0.0000 6.8327 9.7773 5.8473 -8.5828 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 10.0763 0.1539 -5.9780 18.7799 0.0000 0.0000 -24.1574 1.7968 10.7655 -1.8249 0.0000 -0.0000 -16.7825 1.9133 1.9100 -6.6384 0.0000 -0.0000 17.0267 -2.7909 9.1027 -9.0716 0.0000 -0.0000\n -0.6533 -7.7095 23.8692 0.4804 2.3491 174.0714 -5.8755 3.1287 -0.8259 -4.5634 1.0850 0.4014 15.0946 1.1481 2.1059 -0.4700 -1.3567 0.7508 -13.3956 -12.6634 -4.4223 5.5835 -9.5128 -3.4617 -3.3004 -6.2587 3.9037 1.3204 -18.2489 67.8975 0.0000 0.0000 14.0145 -6.3497 -8.2660 -0.3004 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -2.6151 8.9895 -9.1284 16.3695 10.3143 -72.6597 -0.0000 0.0000 6.7631 9.8936 3.8839 -7.7851 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 9.2763 4.5153 -4.6288 25.9251 0.0000 0.0000 -22.2119 0.3405 8.8646 -5.8207 0.0000 -0.0000 -15.1208 6.3216 3.5793 -3.8390 0.0000 -0.0000 15.6938 -5.5760 7.5159 -7.4606 0.0000 -0.0000\n -0.8942 -6.8827 24.1109 0.6989 3.9449 173.4740 -6.1085 3.1482 -0.4565 -4.4192 1.9825 0.6083 13.9331 2.1807 1.7743 -0.2371 -1.2532 0.6489 -12.4607 -11.6671 -5.1817 5.8274 -8.7128 -4.0177 -3.0264 -4.6733 3.3415 3.1263 -23.6476 67.1887 0.0000 0.0000 14.2637 -7.0841 -6.9948 -0.0115 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.6629 7.0642 -9.5230 16.5868 12.2756 -72.6833 -0.0000 0.0000 6.0248 8.0844 2.3320 -7.4307 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 4.1948 7.0605 -1.3432 37.0883 0.0000 0.0000 -16.1163 -2.6979 7.3272 -8.9740 0.0000 -0.0000 -13.5495 8.2448 4.7891 -2.2471 0.0000 -0.0000 11.9218 -2.6541 7.3514 -8.0806 0.0000 -0.0000\n -1.1160 -6.2253 24.2905 0.4150 4.5002 171.6443 -5.7917 2.3411 -0.1206 -3.8777 1.6044 0.5272 11.8470 3.3484 2.6608 -0.1308 -0.4358 0.6503 -12.3586 -9.4481 -5.2671 6.3578 -7.6019 -4.8378 -2.5873 -1.4282 3.9555 4.1743 -28.1698 65.6576 0.0000 0.0000 13.5191 -8.7329 -8.0474 0.0470 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.4173 4.7858 -9.9019 16.6672 15.3437 -73.0338 -0.0000 0.0000 5.2432 6.7956 3.2165 -7.7609 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.3115 8.1590 2.6776 50.6712 0.0000 0.0000 -7.6940 -5.8141 7.1127 -7.9158 0.0000 -0.0000 -11.9460 8.9392 5.9934 -2.4426 0.0000 -0.0000 9.0117 -0.7397 7.1706 -9.0973 0.0000 -0.0000\n -1.3191 -5.6657 24.3244 0.9284 5.7699 170.4772 -4.6811 3.4935 -0.0395 -3.2357 1.3993 0.4588 10.4868 3.5984 3.1216 -0.3610 -0.0138 0.6081 -12.9104 -7.3690 -4.9309 6.2990 -6.5800 -5.2118 -2.3591 0.1268 4.6582 3.7998 -28.1296 64.4367 0.0000 0.0000 12.4132 -8.1739 -10.3207 -0.4202 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.7672 3.4079 -10.3201 15.3695 15.6961 -73.2780 -0.0000 0.0000 4.7193 7.1929 4.2699 -7.7584 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -12.3192 9.7970 4.9448 62.7595 0.0000 0.0000 -2.0413 -6.6859 5.8840 -5.3113 0.0000 -0.0000 -10.3949 10.9478 9.8344 -2.3446 0.0000 -0.0000 7.2721 -2.0293 3.8980 -8.9621 0.0000 -0.0000\n -1.4629 -5.1145 24.2936 2.0807 7.6025 171.4577 -3.6529 6.1691 -0.1208 -2.8724 2.0733 0.5023 10.6366 3.2301 1.8810 -0.7058 -0.2974 0.3625 -13.2119 -6.5004 -4.8833 5.7279 -6.1783 -4.9164 -2.2650 -1.1237 4.2540 2.6062 -25.8109 63.9323 0.0000 0.0000 12.1629 -5.3786 -10.1458 -0.8496 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.0793 3.2995 -10.7548 12.9080 12.9204 -73.2200 -0.0000 0.0000 4.2039 7.7633 2.6251 -7.1993 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -17.8494 12.5447 4.2673 70.7996 0.0000 0.0000 -2.4431 -4.9240 1.6639 -3.9998 0.0000 -0.0000 -8.3547 13.8510 14.0610 -1.8738 0.0000 -0.0000 5.3251 -2.9076 -1.1734 -8.1367 0.0000 -0.0000\n -1.5255 -4.5566 24.3062 2.6971 8.7660 174.1149 -3.3603 8.3467 -0.1765 -2.8017 3.1558 0.5868 11.4596 2.7885 -0.4832 -0.8796 -0.7310 -0.1421 -12.9110 -6.7078 -5.1446 5.7279 -6.7787 -4.1858 -2.1840 -2.8874 3.1336 1.6584 -25.7041 63.5038 0.0000 0.0000 12.8298 -4.5649 -6.9669 -1.2164 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -2.1108 3.8684 -11.1548 10.6577 11.0642 -72.6657 -0.0000 0.0000 3.3117 6.6275 -1.3293 -6.8439 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -21.5990 15.0432 1.3577 73.7944 0.0000 0.0000 -5.9618 -1.0647 -3.6836 -3.3579 0.0000 -0.0000 -5.8852 15.7174 14.9337 -1.9198 0.0000 -0.0000 3.3580 -1.0379 -4.8260 -7.8355 0.0000 -0.0000\n -1.5282 -4.0336 24.3830 2.5529 8.8396 176.8655 -3.5206 9.4144 -0.2179 -2.8012 3.8117 0.6133 11.9344 2.6021 -2.6204 -0.8136 -0.7939 -0.7100 -12.5333 -7.2122 -5.1107 6.5653 -8.0552 -3.2976 -2.2417 -3.2900 2.4003 1.3379 -27.8181 62.4736 0.0000 0.0000 13.2763 -7.4501 -5.0323 -1.0801 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.7058 4.2685 -11.4251 9.5638 12.3074 -71.7219 -0.0000 0.0000 2.1805 4.1574 -4.7734 -7.7525 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -24.9356 16.0619 -1.2331 72.3845 0.0000 0.0000 -7.9895 2.2613 -6.5923 -3.0621 0.0000 -0.0000 -3.9037 15.9630 13.7018 -2.1469 0.0000 -0.0000 1.9884 1.9627 -6.8277 -7.8446 0.0000 -0.0000\n -1.4952 -3.5682 24.4889 2.3975 8.3686 178.6757 -3.5050 9.9951 -0.2456 -2.7329 3.9181 0.5829 12.0954 2.5622 -3.7917 -0.6607 -0.5770 -1.0931 -12.5511 -7.2532 -4.5251 7.2934 -9.1404 -2.3919 -2.4898 -3.1316 2.3616 0.9144 -28.3320 61.0350 0.0000 0.0000 12.7688 -9.9358 -7.1171 -0.9109 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -1.6287 4.3571 -11.5313 9.5943 13.9890 -71.0110 -0.0000 0.0000 1.6591 2.9279 -5.8156 -8.8953 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -28.0086 15.7630 -1.8539 67.6741 0.0000 0.0000 -7.5098 3.0271 -5.8013 -2.9403 0.0000 -0.0000 -2.5430 15.3636 13.7455 -1.9223 0.0000 -0.0000 1.1489 4.6227 -8.8265 -7.4064 0.0000 -0.0000\n -1.4338 -3.1564 24.5901 2.2235 7.6986 179.8917 -3.4898 10.3156 -0.2109 -2.7044 3.8561 0.5593 12.4765 2.4855 -4.1872 -0.5718 -0.3557 -1.2751 -12.8355 -6.4734 -3.7399 7.2029 -9.3154 -1.6131 -2.8301 -3.4938 2.5604 -0.0890 -26.0116 59.4240 0.0000 0.0000 12.1164 -8.6521 -11.0062 -0.7790 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.4165 4.3821 -11.4756 10.4871 13.7178 -71.0249 -0.0000 0.0000 2.2582 4.0084 -4.9636 -8.7500 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -30.4698 14.9953 -1.5474 60.0070 0.0000 0.0000 -5.7032 2.0881 -2.5142 -2.4823 0.0000 -0.0000 -1.6807 14.3755 15.3109 -1.3166 0.0000 -0.0000 0.4851 7.0441 -11.3818 -6.9450 0.0000 -0.0000\n -1.3541 -2.7680 24.6727 1.8662 6.7555 -178.6929 -3.5830 10.1161 -0.2259 -2.7218 3.7309 0.5292 13.0053 2.4277 -4.3382 -0.5539 -0.0122 -1.4230 -13.1385 -4.9340 -3.0773 6.6515 -8.5821 -1.2017 -3.0283 -3.9580 2.7790 -1.5581 -23.2722 57.3810 0.0000 0.0000 12.3185 -5.9525 -12.8854 -0.3691 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.1950 4.2067 -11.2043 11.9691 12.8897 -71.3956 -0.0000 0.0000 3.6329 5.3897 -3.2483 -7.8702 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -31.7502 14.4747 -2.3074 49.5513 0.0000 0.0000 -3.9683 1.1733 1.4503 -1.9207 0.0000 -0.0000 -1.0147 13.0539 16.1062 -0.8353 0.0000 -0.0000 -0.2006 8.8764 -13.5766 -6.9966 0.0000 -0.0000\n -1.2823 -2.3839 24.7230 1.4546 5.9760 -177.0159 -3.5500 9.6904 -0.3230 -2.6542 3.4360 0.4653 13.2679 2.6077 -4.3712 -0.5468 0.6096 -1.6260 -13.4973 -2.9250 -2.5994 6.2132 -7.5331 -1.3071 -3.0296 -3.9588 3.1549 -3.3754 -21.8409 54.7105 0.0000 0.0000 13.1428 -5.6539 -12.1492 -0.3933 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.1476 3.7699 -10.7811 13.5228 13.3378 -71.5569 -0.0000 0.0000 5.2353 5.3560 -1.4605 -7.2280 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -32.0030 14.5342 -4.3153 37.4953 0.0000 0.0000 -3.2645 1.0092 4.6811 -1.8436 0.0000 -0.0000 -0.3695 12.0439 15.3933 -0.6276 0.0000 -0.0000 -0.8922 9.2031 -14.7315 -6.8701 0.0000 -0.0000\n -1.2245 -2.0031 24.7313 1.1003 5.8714 -175.6447 -3.3621 9.5738 -0.3255 -2.4749 3.0091 0.4014 13.3149 3.1700 -4.0256 -0.5586 1.3124 -1.7792 -13.9399 -0.8843 -2.2959 5.9156 -6.6736 -1.8296 -3.0413 -3.9127 3.7166 -5.5302 -21.0408 51.5718 0.0000 0.0000 13.9817 -7.3577 -10.6065 -0.6676 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -1.0908 3.6365 -10.2993 14.7418 13.8847 -71.4409 -0.0000 0.0000 6.6538 4.7372 -0.1202 -6.8819 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -32.2487 14.9090 -6.3017 25.7345 0.0000 0.0000 -3.2882 1.4561 5.8736 -2.0076 0.0000 -0.0000 0.3770 11.9036 14.0585 -0.6759 0.0000 -0.0000 -1.6181 8.0645 -14.8153 -6.1930 0.0000 -0.0000\n -1.1623 -1.6069 24.7092 1.0980 6.2516 -174.8192 -2.9143 9.7830 -0.2328 -2.1881 2.5296 0.3617 13.3541 4.0258 -3.2138 -0.6382 1.8733 -1.8236 -14.2509 0.6946 -2.0999 5.6609 -6.0488 -2.4960 -3.0839 -4.1333 4.2356 -7.7547 -20.1748 48.5589 0.0000 0.0000 14.7572 -8.2497 -9.1684 -0.7390 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.8825 4.1495 -9.7232 15.7691 12.8203 -71.2105 -0.0000 0.0000 7.5235 4.6315 0.6876 -6.5428 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -32.9988 15.1546 -7.9250 16.0795 0.0000 0.0000 -2.9056 1.8646 4.7500 -1.9895 0.0000 -0.0000 1.7867 12.2809 12.5377 -1.1926 0.0000 -0.0000 -2.4739 6.4835 -14.2210 -6.3266 0.0000 -0.0000\n -1.0873 -1.1863 24.6803 1.4076 6.6318 -174.0988 -2.2608 10.0250 -0.2169 -1.7643 2.0852 0.3220 13.3433 4.8618 -2.3889 -0.7580 2.3130 -1.8226 -14.3436 1.5924 -1.9139 5.5743 -5.5298 -2.9753 -3.0195 -4.2080 4.5505 -9.5657 -19.7315 46.2776 0.0000 0.0000 15.5879 -7.7690 -7.9308 -0.6972 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.5139 4.8521 -9.0829 16.6716 10.7662 -70.8157 -0.0000 0.0000 7.8102 4.5654 1.1378 -6.0815 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -34.4058 15.2391 -10.2660 9.9860 0.0000 0.0000 -2.1528 1.5146 3.0502 -1.7971 0.0000 -0.0000 3.8093 12.5198 10.6611 -2.0934 0.0000 -0.0000 -3.3265 5.3579 -13.4657 -8.1653 0.0000 -0.0000\n -1.0108 -0.7573 24.6649 1.7091 6.8561 -173.0757 -1.5281 10.1254 -0.3110 -1.2858 1.8282 0.2870 13.2281 5.4049 -1.9911 -0.8347 2.6537 -1.8580 -14.3878 2.1016 -1.7039 5.6701 -5.1288 -3.1349 -2.8516 -3.9453 4.6923 -10.6641 -19.7369 45.0426 0.0000 0.0000 16.2037 -7.4977 -7.4973 -0.6127 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.1421 5.1660 -8.5705 17.2860 9.5810 -70.2872 -0.0000 0.0000 7.9353 4.0105 1.4114 -5.5950 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -36.3184 15.4201 -13.8216 7.4724 0.0000 0.0000 -1.7348 0.8676 2.6024 -1.4648 0.0000 -0.0000 5.7734 12.4283 8.8343 -2.8744 0.0000 -0.0000 -3.9307 5.0398 -13.0574 -9.9909 0.0000 -0.0000\n -0.9342 -0.3175 24.6637 1.8646 6.9021 -171.8918 -0.8436 10.0892 -0.4114 -0.9120 1.7441 0.2657 13.1173 5.5634 -1.8477 -0.8650 2.8684 -1.8996 -14.4106 2.5734 -1.5032 5.7843 -4.8199 -3.1659 -2.8034 -3.6686 4.8232 -11.1124 -19.5859 44.5292 0.0000 0.0000 16.4326 -7.8771 -8.3208 -0.3380 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0310 5.0797 -8.2640 17.6765 9.8083 -70.0083 -0.0000 0.0000 8.2142 3.6547 1.7179 -5.3466 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -38.3057 15.5685 -16.7054 7.2669 0.0000 0.0000 -1.3497 1.0058 2.4569 -1.1507 0.0000 -0.0000 7.3666 12.0268 7.6172 -3.2297 0.0000 -0.0000 -4.5434 5.3465 -13.1657 -9.3651 0.0000 -0.0000\n -0.8417 0.1618 24.6704 2.1277 6.4755 -170.9146 -0.1866 9.7793 -0.4926 -0.5648 1.5688 0.2298 12.9496 5.4466 -1.5268 -0.9043 2.9693 -1.8399 -14.3279 3.0811 -1.3238 5.8723 -4.4789 -3.2843 -2.9376 -3.4991 5.0635 -11.2451 -19.3208 44.0709 0.0000 0.0000 16.6139 -8.0711 -9.5787 0.0925 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0110 4.9068 -8.0303 18.0848 10.6612 -70.2227 -0.0000 0.0000 8.4155 4.0461 2.0963 -5.5236 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -39.6793 15.0675 -17.6256 8.2721 0.0000 0.0000 -0.5984 1.8449 1.2165 -1.0492 0.0000 -0.0000 8.9257 11.0162 6.8221 -3.2856 0.0000 -0.0000 -5.6434 5.6777 -13.4187 -7.0746 0.0000 -0.0000\n -0.7355 0.6696 24.6788 2.1619 5.6881 -170.1202 0.2709 9.2596 -0.5966 -0.3063 1.2997 0.1887 12.6924 5.2585 -1.0095 -0.9874 3.0152 -1.7034 -14.3064 3.5091 -1.1845 5.9130 -4.0937 -3.4666 -3.0488 -3.3588 5.3843 -11.3830 -19.4200 43.4373 0.0000 0.0000 17.0496 -7.9723 -10.1103 0.4114 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0379 4.7423 -7.8157 18.4503 11.3724 -70.7101 -0.0000 0.0000 8.1930 4.3082 2.3564 -5.9304 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -40.3195 13.9721 -17.8875 9.7180 0.0000 0.0000 0.4120 2.3263 -0.0690 -1.1688 0.0000 -0.0000 9.9632 9.6136 6.4474 -2.8687 0.0000 -0.0000 -7.1128 5.7168 -13.8498 -5.7906 0.0000 -0.0000\n -0.6281 1.1770 24.6795 1.3955 5.0359 -169.4729 0.2977 8.7702 -0.5677 -0.3399 1.1861 0.1915 12.5073 5.2489 -0.5409 -1.1300 3.0071 -1.5641 -14.6399 3.7691 -1.1600 5.7638 -3.7815 -3.6298 -2.9928 -3.5913 5.6632 -11.6184 -19.5103 42.9755 0.0000 0.0000 17.4889 -8.0501 -9.9934 0.5577 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0486 4.6920 -7.7368 18.5247 11.5623 -71.1431 -0.0000 0.0000 7.6876 3.5679 2.4708 -6.1625 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -40.4861 12.6483 -18.7826 10.5553 0.0000 0.0000 1.8707 2.1241 -0.2195 -1.3650 0.0000 -0.0000 9.8247 8.4875 6.9752 -1.8444 0.0000 -0.0000 -8.4941 5.8737 -14.8236 -6.0470 0.0000 -0.0000\n -0.5119 1.7117 24.6549 -0.0872 4.4598 -169.2682 -0.2452 8.3719 -0.2776 -0.6524 1.1228 0.2218 12.5278 5.4307 -0.0075 -1.3530 2.9342 -1.3976 -15.3553 3.9060 -1.2435 5.4620 -3.5919 -3.7998 -2.8541 -4.5021 5.9155 -11.8020 -18.9313 42.8960 0.0000 0.0000 17.6652 -8.1071 -9.8956 0.7517 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0098 5.0895 -7.8324 18.3798 11.2865 -71.4131 -0.0000 0.0000 7.3244 2.5240 2.6063 -6.1103 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -40.2301 10.7342 -19.9796 10.1407 0.0000 0.0000 4.1701 1.3025 0.0011 -1.4822 0.0000 -0.0000 8.9419 7.5765 8.2544 -0.6640 0.0000 -0.0000 -10.0129 6.4175 -16.0031 -6.3652 0.0000 -0.0000\n -0.3895 2.3395 24.5919 -1.5083 3.5933 -169.4398 -1.0402 7.8914 0.0479 -1.0295 0.8923 0.2288 12.6651 5.5010 0.6436 -1.6083 2.8328 -1.1651 -16.2751 4.0179 -1.2782 5.2552 -3.4725 -3.9800 -2.7458 -5.5875 6.2830 -11.7727 -18.1615 42.9516 0.0000 0.0000 17.7693 -7.8190 -9.8460 1.0327 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.1748 5.8737 -8.0516 18.1946 11.0657 -71.4793 -0.0000 0.0000 7.1839 2.2193 2.7616 -5.9933 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -38.8182 8.0759 -20.4224 9.1570 0.0000 0.0000 6.5169 -0.5461 -0.0888 -1.5772 0.0000 -0.0000 8.4892 6.3448 9.4969 0.2342 0.0000 0.0000 -12.0982 7.0176 -16.8986 -5.9658 0.0000 -0.0000\n -0.3035 3.0620 24.4843 -3.0286 2.9289 -169.0090 -2.0536 7.4053 0.3342 -1.5533 0.7872 0.2349 13.0228 5.4999 0.7745 -1.7767 2.7372 -1.0850 -17.4027 4.0968 -1.3132 5.0760 -3.4028 -4.0797 -2.6363 -6.6091 6.6487 -11.4765 -17.5612 43.1194 0.0000 0.0000 17.8306 -7.7803 -9.8735 1.1889 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.2256 6.5120 -8.5324 17.9554 10.9052 -71.2067 -0.0000 0.0000 6.9517 2.3097 2.8383 -5.9816 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -35.9787 6.0694 -19.4017 8.5362 0.0000 0.0000 8.1234 -2.6522 0.7926 -1.9503 0.0000 -0.0000 8.1042 5.2647 10.4679 1.4113 0.0000 0.0000 -14.3085 7.5979 -18.1364 -5.6141 0.0000 -0.0000\n -0.2736 3.8630 24.3295 -5.2305 2.7803 -167.3061 -3.6388 6.6220 0.9066 -2.5993 1.0004 0.2954 14.1118 6.1281 -0.0895 -1.8649 2.6622 -1.3283 -18.8266 4.1264 -1.6049 4.7003 -3.3269 -4.1600 -2.5900 -8.4670 6.7189 -10.8179 -15.9097 43.6353 0.0000 0.0000 17.3852 -8.4618 -10.7406 1.1523 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.2047 7.2421 -9.2817 17.7251 9.6146 -70.6624 -0.0000 0.0000 6.4368 1.8191 3.2797 -6.1044 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -32.0128 5.3246 -17.4933 7.2380 0.0000 0.0000 9.9993 -2.1254 3.5867 -2.3126 0.0000 -0.0000 6.8473 4.6389 11.3502 3.5305 0.0000 0.0000 -16.2905 8.6266 -20.4023 -5.7704 0.0000 -0.0000\n -0.2372 4.8140 24.1496 -6.7117 1.1770 -165.7118 -5.4738 3.7318 1.6041 -4.0634 0.5524 0.2748 16.0907 7.8954 -0.7583 -2.0750 2.6883 -1.6155 -20.2465 4.3614 -1.9469 4.4431 -3.0751 -4.3763 -2.8789 -11.3940 6.6866 -9.7003 -12.6788 44.0916 0.0000 0.0000 16.3498 -8.9802 -12.4814 1.0124 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.6048 9.1121 -9.7820 17.6727 7.1077 -70.0507 -0.0000 0.0000 5.7745 0.8750 4.6165 -6.4006 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -26.6653 2.7282 -15.6902 3.4592 0.0000 0.0000 12.4142 2.3628 5.9492 -1.5559 0.0000 -0.0000 6.1175 2.1662 12.5994 6.1067 0.0000 0.0000 -18.9774 10.1139 -22.9199 -5.9216 0.0000 -0.0000\n -0.1259 5.9806 24.0064 -4.5999 -3.6826 -166.4000 -5.7831 -1.5432 1.5834 -4.6920 -1.9507 -0.2132 17.2647 8.9382 0.4546 -2.4573 3.0577 -1.3890 -20.9436 5.3396 -1.3999 4.7451 -2.6384 -4.4823 -3.4535 -12.7295 7.1727 -8.2736 -11.0203 44.0081 0.0000 0.0000 15.3062 -8.4027 -13.0370 0.7562 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -1.3239 11.6928 -9.4265 17.5341 6.2855 -69.6109 -0.0000 0.0000 5.3593 0.1343 6.2325 -6.7288 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -19.4048 -4.7351 -13.8204 -1.6507 0.0000 -0.0000 14.1613 6.8420 5.9060 -0.2725 0.0000 -0.0000 8.7732 -4.5679 15.6049 8.9189 0.0000 0.0000 -22.7228 11.4651 -24.5811 -6.0129 0.0000 -0.0000\n 0.0486 7.0632 23.9771 -2.3562 -9.3930 -169.3105 -5.2322 -5.1631 1.1262 -4.2186 -4.3401 -0.6749 16.0620 5.9345 2.9144 -2.7112 3.4904 -0.5839 -20.9726 6.7410 0.3790 5.0144 -2.3814 -3.8455 -3.6100 -10.5350 8.3405 -7.2177 -13.7852 44.3013 0.0000 0.0000 14.6259 -7.8132 -10.5407 0.2179 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.4096 12.6176 -8.4312 16.6624 8.8532 -69.3739 -0.0000 0.0000 5.4896 -0.5783 6.8056 -6.7177 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -16.1338 -12.6457 -12.7805 -1.2922 0.0000 -0.0000 12.4545 7.8737 6.2330 0.1363 0.0000 0.0000 10.0941 -12.2945 19.7763 15.5268 0.0000 0.0000 -25.2731 11.5119 -24.8805 -7.1664 0.0000 -0.0000\n 0.1473 7.9425 24.0752 -1.5941 -11.4819 -171.7289 -4.2045 -5.5460 0.7863 -3.2053 -3.9793 -0.5168 13.6137 1.9806 4.0093 -2.5809 2.8143 0.1789 -20.4691 6.5383 1.7837 4.4060 -2.5487 -2.3215 -2.9053 -6.7760 9.3176 -6.7204 -19.5813 45.7473 0.0000 0.0000 14.3192 -8.7490 -6.4674 -0.1530 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.4294 9.0945 -7.9751 15.5152 12.5032 -69.2828 -0.0000 0.0000 5.7331 -1.7014 6.3415 -6.2500 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.9646 -15.4246 -14.7318 3.7767 0.0000 0.0000 7.7218 7.1388 9.2216 -0.1817 0.0000 -0.0000 6.5867 -16.1542 17.4717 27.9011 0.0000 0.0000 -23.6514 9.7861 -21.0850 -9.8097 0.0000 -0.0000\n 0.1553 8.7580 24.1897 -0.4564 -10.6833 -171.4125 -2.7288 -4.5685 0.4534 -2.3003 -2.4998 -0.2481 11.5769 0.0914 3.2362 -2.3091 1.5812 0.5002 -19.3426 4.5277 1.5805 3.4232 -3.3039 -0.9392 -1.7154 -4.0982 9.2013 -5.8819 -23.9693 48.2194 0.0000 0.0000 14.1632 -10.3109 -4.5001 0.0734 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 0.1649 3.2758 -8.3759 14.9689 13.2415 -69.1779 -0.0000 0.0000 5.4016 -2.4104 6.2236 -5.8726 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -13.8636 -14.8160 -15.4850 6.7684 0.0000 0.0000 4.0562 6.9719 10.2997 -0.4431 0.0000 -0.0000 -0.3766 -16.7264 10.5200 43.5581 0.0000 0.0000 -16.9529 9.9087 -16.5110 -11.7411 0.0000 -0.0000\n 0.1731 9.5752 24.2387 1.2823 -10.8647 -170.2967 -1.4519 -4.9697 0.3137 -1.7441 -1.9528 -0.1534 10.5335 -0.4998 2.6654 -2.1714 0.8129 0.6906 -17.9146 2.3927 0.3747 3.3898 -4.4142 -0.8206 -0.7938 -3.2511 8.3535 -4.3570 -24.3637 50.7522 0.0000 0.0000 14.0888 -10.1374 -5.8020 0.5071 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.6373 0.3639 -8.8334 13.8301 10.6609 -68.8367 -0.0000 0.0000 4.4800 -1.4768 6.0247 -6.0527 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -9.8456 -15.8319 -14.1242 6.2898 0.0000 0.0000 2.2895 7.7978 8.8154 -0.2680 0.0000 -0.0000 -7.7663 -18.2454 5.4045 57.8207 0.0000 0.0000 -9.8183 10.6904 -15.3678 -11.8458 0.0000 -0.0000\n 0.1855 10.3844 24.2331 2.9958 -12.4155 -170.7827 -0.8104 -6.5654 0.3061 -1.4655 -2.6289 -0.1903 10.3412 -0.6589 3.7968 -2.1085 0.5127 1.1351 -16.5032 1.0719 -0.8668 4.5941 -5.3422 -1.8074 -0.5681 -3.2389 7.8184 -3.0283 -22.7325 51.9798 0.0000 0.0000 14.2846 -8.0231 -7.9517 1.0392 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.9977 1.3454 -8.8381 10.5842 8.8582 -68.3166 -0.0000 0.0000 3.1050 0.0871 3.9270 -6.1773 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -5.5051 -18.4137 -12.0657 4.8424 0.0000 0.0000 0.9968 8.2305 7.9336 -0.0142 0.0000 -0.0000 -13.8975 -21.3465 3.5861 67.9186 0.0000 0.0000 -7.4391 8.8654 -15.9865 -12.0030 0.0000 -0.0000\n 0.1342 11.1394 24.2221 3.7518 -13.3154 -172.7580 -0.9799 -7.6426 0.3113 -1.4273 -3.3713 -0.2185 10.6365 -0.6663 5.8141 -1.8990 0.2428 1.7856 -15.2181 0.2977 -1.8370 5.9405 -5.8020 -2.9694 -0.6473 -3.2252 7.6771 -2.3939 -21.8379 52.2803 0.0000 0.0000 14.6482 -6.6020 -8.2937 1.2099 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.9151 3.0342 -8.5830 6.0870 10.1828 -67.7889 -0.0000 0.0000 1.2132 -0.2120 -0.2651 -6.0008 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -2.4519 -19.6296 -10.9349 5.0862 0.0000 0.0000 -1.1988 7.8782 9.4466 -0.0627 0.0000 -0.0000 -18.9593 -23.3524 3.9099 73.1465 0.0000 0.0000 -9.6080 5.2422 -14.8715 -12.3647 0.0000 -0.0000\n 0.0031 11.8592 24.2366 4.1280 -12.6453 -174.5559 -1.3695 -7.8313 0.2776 -1.4566 -3.3796 -0.1541 11.0204 -0.5218 7.3198 -1.5182 -0.1709 2.3467 -14.0715 -0.3188 -2.6003 6.4872 -5.9209 -3.8182 -0.4762 -3.2789 7.4018 -2.0925 -21.8483 52.7888 0.0000 0.0000 15.0219 -7.5918 -6.5995 0.7860 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.4051 3.2636 -8.4101 2.5508 12.3587 -67.2094 -0.0000 -0.0000 -0.8087 -2.5525 -4.4097 -6.3099 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.3809 -18.7079 -9.8964 6.9345 0.0000 0.0000 -3.8391 7.4483 10.8499 -0.3240 0.0000 -0.0000 -22.8060 -22.6861 4.5827 73.5482 0.0000 0.0000 -12.2493 1.5456 -10.6742 -11.7821 0.0000 -0.0000\n -0.1751 12.5552 24.2678 4.6894 -11.4279 -175.6843 -1.4160 -7.7633 0.2212 -1.4259 -3.1606 -0.0847 11.1874 -0.4302 8.1457 -1.1660 -0.4526 2.6815 -13.1494 -0.6707 -3.0988 6.4354 -6.0729 -4.4019 -0.1617 -3.4115 7.0946 -1.6492 -22.1126 53.5920 0.0000 0.0000 15.3989 -9.3368 -4.6058 0.4178 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -4.0559 2.7032 -8.3089 1.0376 12.5759 -66.7928 -0.0000 -0.0000 -2.0651 -4.3881 -5.8455 -6.8739 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 1.1688 -17.1346 -7.4112 9.5147 0.0000 0.0000 -6.2578 7.0910 9.7935 -0.5480 0.0000 -0.0000 -25.4802 -20.6183 4.7973 69.8446 0.0000 0.0000 -13.0363 -1.4581 -5.0026 -9.7904 0.0000 -0.0000\n -0.3732 13.1972 24.2849 4.9099 -10.4332 -176.6964 -1.3687 -7.6575 0.1873 -1.4140 -3.1817 -0.0813 11.1620 -0.5751 8.6269 -0.9809 -0.5147 2.8506 -12.6445 -0.7224 -3.2654 6.3422 -6.4062 -4.7826 -0.1609 -3.2953 7.1883 -1.2357 -23.1337 54.2632 0.0000 0.0000 15.4077 -9.4048 -4.1022 0.4771 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -4.9140 2.3216 -8.1200 0.7417 11.1545 -66.6394 -0.0000 -0.0000 -2.1733 -3.7997 -4.3614 -6.8842 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.7796 -15.7227 -4.6698 12.5486 0.0000 0.0000 -8.6359 6.4936 7.9836 -0.6538 0.0000 -0.0000 -27.4703 -18.5289 4.8920 62.7366 0.0000 0.0000 -13.0049 -3.4440 -0.2526 -7.8509 0.0000 -0.0000\n -0.5737 13.8076 24.2727 4.7643 -9.5775 -177.5583 -1.4694 -7.4170 0.1836 -1.4195 -3.1384 -0.0849 11.0904 -0.9337 8.7589 -0.9149 -0.6299 2.9513 -12.5192 -0.9155 -3.3267 6.2758 -6.7434 -4.9697 -0.5039 -2.8940 7.5750 -1.2622 -25.4333 54.7529 0.0000 0.0000 14.5861 -7.6344 -5.2331 0.7927 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -5.5386 1.8902 -7.9636 0.5959 10.0019 -66.6175 -0.0000 -0.0000 -1.5098 -1.6786 -1.9052 -6.4191 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 2.0997 -14.3265 -3.3116 15.1878 0.0000 0.0000 -10.8469 5.7705 7.5193 -0.7794 0.0000 -0.0000 -28.4260 -16.6849 5.2855 52.4401 0.0000 0.0000 -12.8623 -4.2403 1.7733 -7.6888 0.0000 -0.0000\n -0.7457 14.4313 24.2429 4.6751 -9.0797 -178.0646 -1.6458 -7.2539 0.1509 -1.4593 -2.8950 -0.0804 11.1295 -1.4151 8.6445 -0.8797 -0.9652 3.0673 -12.6019 -1.5291 -3.5775 6.1122 -6.9924 -5.0942 -0.7752 -2.7222 7.8013 -1.6081 -27.8238 55.2754 0.0000 0.0000 13.1892 -5.7090 -6.7618 1.0406 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.8843 1.3386 -8.0497 0.5107 9.7405 -66.5668 -0.0000 -0.0000 -0.7707 -0.1822 -0.0543 -5.9646 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 2.9970 -13.3341 -2.7999 16.7499 0.0000 0.0000 -12.3651 5.1790 7.7356 -1.1134 0.0000 -0.0000 -28.0265 -15.5127 6.3701 39.5549 0.0000 0.0000 -10.5876 -3.5914 -0.1444 -8.6688 0.0000 -0.0000\n -0.8901 15.0416 24.2139 4.1440 -9.0192 -178.4578 -2.2133 -7.0935 -0.1035 -1.7504 -2.6637 -0.0826 11.5115 -2.1587 8.5242 -0.8812 -1.3352 3.2096 -13.0115 -2.3126 -3.9293 5.9776 -7.3004 -5.2855 -0.8915 -3.3129 7.8997 -1.5869 -28.5256 55.8958 0.0000 0.0000 12.0926 -4.8717 -7.6516 1.0168 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.2401 1.5957 -8.1273 0.6674 9.3732 -66.3731 -0.0000 -0.0000 -0.4478 -0.0870 1.1117 -5.8319 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 3.6995 -12.8839 -2.3010 17.5244 0.0000 0.0000 -13.3151 4.7295 7.6587 -1.6221 0.0000 -0.0000 -27.3388 -14.8876 8.8035 25.2236 0.0000 0.0000 -3.7342 -1.0940 -5.6954 -9.8005 0.0000 -0.0000\n -1.0468 15.6401 24.1721 3.1382 -9.1694 -178.7505 -3.0311 -7.0340 -0.5931 -2.2089 -2.3105 -0.0874 11.9804 -3.1658 8.2642 -0.9621 -1.5660 3.2607 -13.6286 -3.0030 -4.1726 6.1135 -7.7342 -5.5652 -1.0156 -4.3274 8.1751 -0.9008 -27.7654 56.4694 0.0000 0.0000 11.6106 -4.9542 -7.9693 0.9140 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -6.5707 2.7087 -7.9260 0.9396 8.5361 -66.0247 -0.0000 -0.0000 -0.4252 -0.5626 2.0840 -5.9234 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 4.2056 -12.5402 -2.4213 17.5873 0.0000 0.0000 -14.3858 4.5679 8.1184 -1.8829 0.0000 -0.0000 -26.9187 -13.7478 9.6885 11.0019 0.0000 0.0000 6.0561 4.0439 -10.3573 -10.9914 0.0000 -0.0000\n -1.1953 16.2997 24.1028 2.8389 -9.4579 -178.7136 -3.2667 -7.1986 -0.8289 -2.2331 -1.7581 -0.0861 11.9288 -4.0566 7.6249 -1.1069 -1.7538 3.1655 -14.0609 -3.6304 -4.5114 6.4231 -8.1552 -5.9792 -1.1607 -5.0485 8.4555 0.0430 -27.1754 56.8703 0.0000 0.0000 11.2912 -5.3226 -8.0770 0.9048 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -6.6415 3.4837 -7.7910 1.2472 7.8560 -65.8004 -0.0000 -0.0000 -0.1800 -0.5361 2.8413 -5.9414 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 6.1832 -12.2858 -3.3592 16.5050 0.0000 0.0000 -15.5612 4.7341 9.6555 -1.6235 0.0000 -0.0000 -26.8042 -12.9092 3.1829 1.4552 0.0000 0.0000 10.1566 10.8363 -7.6737 -11.7064 0.0000 -0.0000\n -1.3053 16.9465 24.0393 2.6553 -9.6251 -178.6631 -3.1797 -6.9901 -0.8507 -2.1322 -1.5446 -0.0816 11.8088 -4.5172 7.1431 -1.3298 -1.9136 3.0868 -14.6172 -4.0413 -5.0609 6.4391 -8.4379 -6.5841 -1.2733 -5.5545 8.6396 0.5043 -26.7863 56.9369 0.0000 0.0000 10.8659 -5.7144 -8.0117 0.8305 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -6.6355 4.0202 -7.9070 1.6697 7.1722 -66.1525 -0.0000 0.0000 0.5261 0.1501 3.1786 -5.9006 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 8.1848 -12.0146 -4.2331 15.4971 0.0000 0.0000 -16.3510 4.7954 11.2019 -1.2553 0.0000 -0.0000 -28.7446 -12.8027 0.3284 0.2475 0.0000 0.0000 6.0279 12.3778 -7.5395 -11.0349 0.0000 -0.0000\n -1.4154 17.5876 23.9961 2.3150 -9.6957 -179.7911 -3.0018 -6.8748 -0.7827 -2.0056 -1.7571 -0.0789 11.8175 -4.2942 7.6267 -1.5188 -1.9135 3.2089 -15.1602 -4.1057 -5.5835 6.1682 -8.5649 -7.2167 -1.1786 -5.6385 8.8355 0.4459 -26.6532 56.7671 0.0000 0.0000 10.4738 -5.8864 -7.5836 0.5867 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -6.6804 4.3242 -8.1211 2.3965 7.0172 -66.8489 -0.0000 0.0000 1.3107 0.7856 3.3084 -5.9705 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 9.4380 -11.4733 -3.6690 15.7480 0.0000 0.0000 -16.7778 4.4985 12.0921 -1.6166 0.0000 -0.0000 -31.2755 -13.1315 1.7846 3.9070 0.0000 0.0000 1.1653 8.3410 -9.1806 -10.1902 0.0000 -0.0000\n -1.5607 18.2835 23.9715 1.8465 -9.2879 177.8400 -2.9481 -6.7430 -0.6188 -1.9019 -2.0672 -0.0613 11.8260 -3.4558 8.5938 -1.5935 -1.7651 3.3632 -15.3814 -4.1837 -5.7758 6.0177 -8.6018 -7.5408 -0.8897 -5.6331 9.1470 0.5438 -26.6866 56.8948 0.0000 0.0000 10.2959 -5.8820 -6.8890 0.2923 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -6.7377 4.3971 -8.2220 3.3630 7.5231 -67.1630 -0.0000 0.0000 1.9028 0.8356 3.8922 -6.0955 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 10.0794 -10.0567 -2.3203 17.2753 0.0000 0.0000 -17.1456 4.0124 13.0844 -3.2012 0.0000 -0.0000 -32.5671 -13.5743 3.2242 7.6386 0.0000 0.0000 1.8919 4.2532 -8.1419 -12.5061 0.0000 -0.0000\n -1.7406 19.0767 23.9553 1.2137 -8.3137 175.4393 -3.3377 -6.4375 -0.4558 -2.0276 -2.1209 -0.0240 11.7528 -2.3365 9.0163 -1.5293 -1.5805 3.2870 -15.2345 -4.5453 -5.6644 6.2503 -8.6400 -7.4834 -0.5479 -5.8208 9.3429 1.6300 -26.4112 57.7880 0.0000 0.0000 10.5893 -6.3887 -6.1451 0.0602 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -6.7537 4.4003 -8.2088 4.4033 8.2408 -66.8838 -0.0000 0.0000 2.5776 0.7561 5.0939 -6.0618 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 10.1640 -7.8449 -1.5187 19.6053 0.0000 0.0000 -17.2697 3.4508 14.5280 -5.4976 0.0000 -0.0000 -32.6021 -13.4922 4.4266 10.3314 0.0000 0.0000 6.2495 4.7706 -7.0663 -16.0460 0.0000 -0.0000\n -1.9286 19.9919 23.9143 0.5529 -7.4557 173.3659 -4.1201 -6.2945 -0.3754 -2.4055 -2.1172 -0.0028 11.6469 -1.2619 8.9960 -1.2762 -1.3457 3.0822 -14.9094 -4.8932 -5.4916 6.6400 -8.6739 -7.3176 -0.1467 -5.7408 9.1904 3.6699 -25.3716 59.2192 0.0000 0.0000 11.4652 -7.8676 -5.6384 -0.0204 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.7707 4.3006 -8.0558 5.5569 8.9812 -66.6223 -0.0000 0.0000 3.5365 1.2216 6.2931 -5.8836 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 10.0365 -5.7515 -0.4278 22.3926 0.0000 0.0000 -16.6662 2.4997 15.3668 -7.9502 0.0000 -0.0000 -31.0739 -13.2696 5.4675 12.2341 0.0000 0.0000 8.3200 7.2584 -8.9857 -18.0106 0.0000 -0.0000\n -2.1495 20.9805 23.8139 -0.3478 -6.2258 171.2766 -5.3427 -5.6224 -0.4672 -3.1392 -2.4151 -0.0384 12.0227 -0.3250 9.1516 -0.9844 -0.9770 2.9105 -14.9510 -4.9278 -5.2674 6.6603 -8.5926 -7.2692 0.1266 -5.7451 9.0658 5.3063 -23.2521 60.3527 0.0000 0.0000 12.2128 -9.4103 -6.0018 0.1213 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.9381 4.6421 -7.5625 6.7854 8.7458 -66.7958 -0.0000 0.0000 4.4092 2.0853 7.2579 -5.7931 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 9.4034 -3.2085 1.1730 25.6632 0.0000 0.0000 -16.0010 0.9443 15.7574 -10.8525 0.0000 -0.0000 -28.3985 -12.1629 5.6751 12.9893 0.0000 0.0000 7.9979 7.3789 -11.8294 -17.1689 0.0000 -0.0000\n -2.4825 22.0237 23.6773 -0.7197 -2.6244 169.6948 -6.6131 -2.8760 -0.5488 -4.1914 -2.8098 -0.0877 13.2237 1.0499 9.2206 -0.9733 -0.4960 2.6221 -15.5610 -4.9469 -4.9623 6.3034 -8.2939 -7.3042 -0.2027 -7.0837 9.4488 5.3380 -20.8994 60.5309 0.0000 0.0000 11.7742 -9.3979 -7.6473 0.1430 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -7.2318 6.1637 -6.9724 7.7933 6.2821 -66.9187 -0.0000 0.0000 4.7735 3.0180 8.1500 -5.9197 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 8.7660 2.4953 0.5221 29.3011 0.0000 0.0000 -16.2497 -0.7372 18.2603 -14.5362 0.0000 -0.0000 -25.5488 -7.6392 4.1085 13.1598 0.0000 0.0000 7.1702 5.3184 -10.7759 -12.6048 0.0000 -0.0000\n -2.9582 23.1391 23.5906 0.2614 3.7630 168.7815 -7.3022 0.9684 -0.3434 -5.0728 -2.6808 0.0057 14.3471 4.2516 9.1236 -1.3385 -0.0101 2.1281 -16.0450 -5.2250 -4.8253 6.2748 -7.8414 -7.3321 -1.1130 -9.4833 10.0566 3.8479 -20.4112 59.9571 0.0000 0.0000 9.9545 -7.2675 -9.5164 -0.3844 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -7.2028 8.3941 -7.0482 8.3783 2.9536 -66.5213 -0.0000 0.0000 4.7079 3.9128 8.0866 -6.1051 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 8.1988 12.4726 -3.0301 34.2600 0.0000 0.0000 -15.4514 -2.7737 23.7046 -18.1181 0.0000 -0.0000 -23.1215 0.6577 1.9445 13.9437 0.0000 0.0000 5.8289 3.5142 -5.4904 -7.8108 0.0000 -0.0000\n -3.4606 24.2583 23.6373 1.9373 9.9949 166.7444 -7.1644 2.5789 0.1118 -5.0214 -2.4750 0.2037 13.5964 9.7092 10.1923 -1.6851 0.6741 1.7268 -15.7726 -5.3086 -4.9131 6.8938 -7.3930 -7.3375 -1.8204 -10.6115 10.2293 1.8246 -22.2488 59.3390 0.0000 0.0000 8.0080 -4.7256 -9.5350 -1.3713 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.5269 9.7569 -7.7244 8.6897 2.7949 -66.3296 -0.0000 0.0000 4.6892 3.9719 5.6685 -5.9726 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 5.0880 22.8795 -2.7951 42.0243 0.0000 0.0000 -8.7191 -6.0283 28.4920 -19.5797 0.0000 -0.0000 -20.2982 8.5695 2.2839 13.7340 0.0000 0.0000 3.4835 2.1789 -0.7936 -5.9565 0.0000 -0.0000\n -3.8373 25.2937 23.7928 4.2338 13.5438 162.5041 -5.8693 2.1816 0.6016 -3.8613 -2.4710 0.3725 11.0750 13.7781 12.8949 -1.7400 1.9083 1.7435 -15.2078 -4.0981 -4.5687 7.4977 -7.0627 -7.1876 -1.9115 -8.3041 10.1232 0.4431 -24.2379 59.3243 0.0000 0.0000 7.6977 -4.1080 -7.8507 -2.2365 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.5376 9.8387 -7.9127 8.8584 7.5032 -66.9451 -0.0000 0.0000 4.9951 2.2362 1.7288 -5.6697 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -1.9776 28.7004 6.4274 51.3065 0.0000 0.0000 4.8583 -11.7947 30.0537 -15.2100 0.0000 -0.0000 -14.9544 13.4658 3.8403 9.5640 0.0000 0.0000 2.0699 0.9572 1.9687 -6.6582 0.0000 -0.0000\n -4.0095 26.1808 23.9176 6.7930 14.1894 158.6503 -3.6848 2.0967 0.9017 -2.4508 -2.1206 0.4751 9.0755 14.0776 14.6085 -1.7641 3.1410 1.7878 -15.0620 -1.9881 -3.5502 7.3601 -6.6222 -6.6675 -1.7662 -4.1668 10.1632 -0.5484 -23.9333 59.9853 0.0000 0.0000 9.4235 -5.4479 -6.2103 -2.2675 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.6637 9.1029 -7.6017 9.1464 13.8042 -67.5884 -0.0000 0.0000 5.6264 0.3266 -0.9808 -5.3020 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -8.6009 28.1213 18.0660 59.5672 0.0000 0.0000 15.5322 -18.0656 29.4651 -8.1518 0.0000 -0.0000 -8.0022 15.9037 2.1002 3.5016 0.0000 0.0000 2.6306 0.2607 5.5539 -7.3839 0.0000 -0.0000\n -4.0358 26.8685 23.9703 8.1024 14.0358 158.8146 -2.0664 3.3094 0.8818 -1.7741 -1.4002 0.4780 8.9424 12.8480 12.9606 -1.9382 3.5975 1.3086 -15.5554 -0.6574 -2.5866 6.6196 -5.7906 -5.8928 -2.0740 -2.2643 10.2271 -2.6283 -21.2637 60.3936 0.0000 0.0000 12.1795 -6.7228 -4.6743 -1.5357 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -3.8056 8.3534 -7.8055 9.6902 16.6079 -67.8496 -0.0000 0.0000 6.5628 0.9602 -1.0952 -4.2096 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -12.5628 24.8446 23.7007 66.4582 0.0000 0.0000 14.0372 -19.8090 26.2179 -5.3140 0.0000 -0.0000 -3.9378 17.0568 1.3704 1.5307 0.0000 0.0000 2.5383 -0.5198 5.2044 -6.9477 0.0000 -0.0000\n -3.9841 27.4094 24.0020 7.5337 14.0966 162.3547 -1.8900 4.9875 0.6694 -1.9571 -0.5617 0.4651 10.1759 11.5032 9.3843 -2.0288 3.4522 0.5448 -16.1100 -0.2890 -2.2221 6.1124 -4.7031 -5.2880 -3.0369 -2.8578 10.0689 -5.9715 -19.4527 59.8780 0.0000 0.0000 14.9399 -6.7916 -2.5962 -0.9706 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.6703 8.0790 -8.6910 10.8892 15.5831 -68.3409 -0.0000 0.0000 7.2206 3.4570 -0.1107 -2.9560 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -15.9494 21.5132 23.5913 70.9270 0.0000 0.0000 3.6170 -16.8724 19.3150 -6.0049 0.0000 -0.0000 -4.1964 17.3639 3.5387 4.9634 0.0000 0.0000 -0.1725 -1.7085 0.1067 -6.4004 0.0000 -0.0000\n -3.8525 27.9379 24.0527 6.4075 13.1270 165.1268 -2.4355 5.5168 0.6445 -2.2761 -0.2017 0.4425 11.4102 10.5945 7.1525 -1.8208 3.2704 0.1215 -16.1094 -0.1018 -2.2840 6.3249 -3.7445 -5.0954 -4.2437 -3.1685 9.6165 -9.4299 -20.4760 58.5370 0.0000 0.0000 17.3663 -6.3070 -0.3360 -1.0913 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.4204 7.9018 -9.4000 12.8697 15.0666 -69.5893 -0.0000 0.0000 7.0349 4.3939 -0.0007 -2.3819 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -19.4419 17.0530 22.7161 71.7845 0.0000 0.0000 -6.2586 -12.8207 10.2310 -6.4090 0.0000 -0.0000 -4.6634 16.1835 4.1163 8.2495 0.0000 0.0000 -3.2574 -2.7418 -2.9997 -6.2102 0.0000 -0.0000\n -3.7168 28.5002 24.1194 6.0903 11.8272 165.2529 -2.7112 5.2869 0.7794 -2.3083 -0.4094 0.4038 11.9212 10.5351 7.1046 -1.5008 3.3898 0.1031 -15.7490 0.0928 -2.3023 6.9703 -3.2660 -5.0968 -5.0499 -2.3993 9.2041 -12.2004 -22.0005 57.0885 0.0000 0.0000 19.2140 -6.1692 1.0032 -1.4107 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.6476 7.8140 -9.4060 15.0683 17.7414 -71.1732 -0.0000 0.0000 6.4720 2.8301 0.0486 -2.5336 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -22.7630 12.5035 23.2690 69.2241 0.0000 0.0000 -12.1821 -9.1765 1.9752 -4.6110 0.0000 -0.0000 -3.2672 14.9375 3.5429 8.7886 0.0000 0.0000 -4.9772 -3.3481 -3.0728 -5.9462 0.0000 -0.0000\n -3.6131 29.0464 24.1543 6.3754 11.0757 164.4277 -2.4217 5.2771 0.8621 -2.1022 -0.7000 0.3643 11.8983 10.9904 7.6049 -1.3576 3.6366 0.1083 -15.4146 -0.0848 -2.1086 7.6048 -3.2341 -4.9462 -5.2778 -1.6629 9.0557 -14.0739 -21.6290 56.4544 0.0000 0.0000 20.2705 -6.2543 0.9496 -1.4215 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.4040 8.0137 -9.1352 16.9576 22.0564 -72.2795 -0.0000 0.0000 6.5384 2.0303 1.2640 -2.7986 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -25.6974 9.7490 23.2108 63.9476 0.0000 0.0000 -15.6185 -5.8340 -2.8213 -2.4538 0.0000 -0.0000 -1.5718 14.4591 3.1661 9.0966 0.0000 0.0000 -6.4968 -3.6878 -2.2499 -5.5969 0.0000 -0.0000\n -3.5266 29.5591 24.1371 6.6812 10.8549 164.0853 -1.9983 5.6700 0.7995 -1.8654 -0.7409 0.3535 11.8097 11.4138 7.6303 -1.3645 3.7731 -0.0071 -15.1538 -0.5738 -1.8222 8.0136 -3.2809 -4.6127 -5.2258 -1.2443 8.9822 -15.4013 -20.3770 56.6658 0.0000 0.0000 20.7910 -5.7536 0.1486 -1.1907 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0802 8.5487 -9.0307 18.5108 24.8403 -72.9338 -0.0000 0.0000 7.4076 3.9949 2.6597 -2.6650 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -28.5772 9.1005 20.9451 56.8756 0.0000 0.0000 -16.8230 -4.1369 -3.0432 -2.1455 0.0000 -0.0000 -0.6784 14.4689 3.3273 10.6937 0.0000 0.0000 -8.7706 -3.9820 -2.1866 -5.4785 0.0000 -0.0000\n -3.4342 30.0889 24.1008 7.2269 10.6949 163.6477 -1.6149 6.0757 0.7116 -1.6167 -0.6929 0.3588 11.8247 11.6624 7.6642 -1.3051 3.8750 -0.0833 -14.8437 -0.8552 -1.5248 8.1734 -3.0728 -4.2910 -5.1714 -0.6196 8.7651 -16.4330 -20.3099 57.2630 0.0000 0.0000 21.2674 -4.7476 -0.5411 -1.0459 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.6522 9.1105 -8.8595 20.3256 25.3796 -73.7103 -0.0000 0.0000 8.2354 6.1172 2.8544 -2.4076 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -30.9053 9.2876 17.1893 48.6721 0.0000 0.0000 -14.5122 -3.8947 0.6765 -3.5008 0.0000 -0.0000 0.8679 14.6416 3.3039 11.5580 0.0000 0.0000 -10.6907 -4.2763 -2.1118 -5.3969 0.0000 -0.0000\n -3.3260 30.6682 24.0780 8.2600 10.4029 162.7288 -1.1377 6.3585 0.6810 -1.2801 -0.7545 0.3392 11.8267 11.8246 8.0091 -1.1438 4.0780 -0.0764 -14.4579 -0.5922 -1.1678 8.1740 -2.6095 -4.0893 -5.1638 0.0684 8.5085 -17.0145 -21.4441 57.9340 0.0000 0.0000 22.0619 -3.9992 -0.9311 -0.9808 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.4561 9.5357 -8.2587 22.4407 25.5970 -74.5503 -0.0000 0.0000 8.5249 5.7403 2.1214 -2.2096 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -31.9017 9.4377 12.6842 39.4430 0.0000 0.0000 -8.0191 -3.3276 7.2910 -5.3658 0.0000 -0.0000 4.0045 14.9612 2.6878 10.4216 0.0000 0.0000 -11.4745 -4.5035 -1.3211 -5.1363 0.0000 -0.0000\n -3.1995 31.2664 24.0546 9.1804 10.2206 162.2719 -0.6966 6.6910 0.6740 -0.9297 -0.8854 0.2984 11.7010 11.9242 8.1505 -1.0097 4.3570 -0.1507 -14.0394 0.1029 -0.7613 8.2071 -2.0717 -4.0044 -5.1393 0.3080 8.3991 -17.1152 -22.6471 58.3456 0.0000 0.0000 23.3284 -3.6516 -1.3982 -0.7390 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 1.9098 9.7730 -7.4020 24.3825 27.0556 -75.1519 -0.0000 0.0000 8.6393 4.1254 1.8109 -2.1408 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -32.0393 9.6019 7.2886 29.7448 0.0000 0.0000 1.6974 -1.5454 15.4109 -7.4154 0.0000 -0.0000 7.4194 15.3062 1.6189 8.7016 0.0000 0.0000 -11.8873 -4.6545 -0.5338 -4.9860 0.0000 -0.0000\n -3.0565 31.8415 24.0074 9.3812 10.4311 162.9122 -0.5607 7.1117 0.6773 -0.7032 -0.9919 0.2637 11.5394 12.0835 7.8916 -0.9522 4.6371 -0.3417 -13.7119 0.9893 -0.4755 8.3934 -1.5419 -4.0716 -5.0582 0.1043 8.3583 -17.0788 -23.4003 58.1525 0.0000 0.0000 25.0051 -3.3153 -2.3775 -0.3795 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 1.9713 9.8437 -6.8682 26.0167 28.9166 -75.5457 -0.0000 0.0000 8.9464 3.8679 2.3941 -2.1014 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -32.4394 9.7494 1.7366 20.7388 0.0000 0.0000 11.0689 2.0092 22.4739 -9.3608 0.0000 -0.0000 9.7357 15.5141 0.7110 7.8136 0.0000 0.0000 -12.7480 -4.7210 -0.8226 -5.0212 0.0000 -0.0000\n -2.8944 32.3943 23.9393 9.1333 10.7694 164.0395 -0.5522 7.3287 0.7416 -0.5779 -1.1522 0.2397 11.4660 12.4993 7.6989 -0.9291 4.9446 -0.5153 -13.5906 1.9195 -0.3717 8.7072 -0.9962 -4.3103 -4.8786 -0.1940 8.3094 -17.2278 -23.6751 57.3321 0.0000 0.0000 26.7736 -2.7965 -3.9677 -0.1159 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 1.8654 9.9663 -6.8255 27.4461 29.6187 -75.9537 -0.0000 0.0000 9.3411 4.9591 3.1484 -2.1025 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -33.2197 9.4168 -1.6993 13.4481 0.0000 0.0000 15.0249 5.7231 25.7829 -10.6107 0.0000 -0.0000 11.4007 15.4825 0.0296 7.3513 0.0000 0.0000 -13.7973 -4.6116 -1.7305 -4.8849 0.0000 -0.0000\n -2.7196 32.9583 23.8634 8.9623 11.0001 164.9500 -0.4300 7.2714 0.8268 -0.3719 -1.4119 0.2115 11.3776 13.0920 7.9330 -0.9213 5.3095 -0.6084 -13.6474 2.8647 -0.2606 9.0715 -0.4958 -4.5757 -4.5661 -0.4267 8.3724 -17.5219 -23.5641 56.2254 0.0000 0.0000 28.2160 -2.1149 -5.8212 0.1373 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 1.7502 10.4337 -6.8365 28.4969 29.4696 -76.3321 -0.0000 0.0000 9.6357 5.7136 3.2668 -2.1657 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -33.8380 8.7026 -2.1983 8.4550 0.0000 0.0000 12.3765 7.0259 24.1677 -10.3425 0.0000 -0.0000 13.3049 15.3318 -0.8721 6.6001 0.0000 0.0000 -14.5678 -4.3372 -2.1882 -4.7873 0.0000 -0.0000\n -2.5381 33.5487 23.7871 8.7826 11.2223 165.7634 -0.2574 7.1060 0.8870 -0.1274 -1.7070 0.1875 11.1687 13.7295 8.3455 -0.9527 5.6506 -0.6510 -13.7492 3.7212 -0.0432 9.3699 -0.1121 -4.6940 -4.1792 -0.7456 8.5108 -17.6956 -23.3989 55.2433 0.0000 0.0000 29.1208 -1.4976 -7.3936 0.4857 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 1.7504 11.1358 -6.5452 28.9385 29.7696 -76.6113 -0.0000 0.0000 9.8447 5.2108 2.6454 -2.1724 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -34.1265 8.0439 -2.4099 5.5329 0.0000 0.0000 7.2404 6.8745 18.9466 -8.4862 0.0000 -0.0000 15.2745 15.1285 -1.7767 5.7980 0.0000 0.0000 -15.2139 -3.9806 -2.4786 -5.3122 0.0000 -0.0000\n -2.3584 34.1372 23.7108 8.0376 11.7038 166.9433 -0.3365 6.9447 1.0030 -0.0702 -1.9261 0.1924 10.9685 14.4240 8.5632 -1.0372 5.8786 -0.7207 -13.8739 4.3964 0.1177 9.4394 0.2523 -4.7227 -3.8047 -1.4073 8.4934 -17.6600 -23.2539 54.5513 0.0000 0.0000 29.6623 -1.3344 -8.3128 0.6609 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 1.8211 11.6512 -6.2051 29.0653 30.7593 -76.8120 -0.0000 0.0000 9.9025 3.7402 1.5025 -2.1446 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -34.4802 7.8429 -4.0336 3.7559 0.0000 0.0000 4.6194 6.6783 13.2310 -6.7886 0.0000 -0.0000 16.4032 14.9093 -2.2292 5.4795 0.0000 0.0000 -15.9950 -3.5961 -3.3796 -5.9364 0.0000 -0.0000\n -2.1866 34.7168 23.6382 6.7429 12.2667 168.5563 -0.6282 6.6086 1.1966 -0.1517 -2.1842 0.1866 10.9081 15.2606 8.5724 -1.1867 6.0097 -0.8041 -14.1312 5.0429 0.1125 9.2688 0.7474 -4.8347 -3.5486 -2.4410 8.3495 -17.5772 -23.1016 53.7359 0.0000 0.0000 30.4341 -1.1848 -8.5592 0.4884 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 1.7939 12.0538 -6.1221 29.2219 31.8953 -76.8200 -0.0000 0.0000 9.7457 2.1013 0.0030 -2.2545 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -34.7001 8.3201 -5.8106 2.6751 0.0000 0.0000 5.4534 6.1175 9.6352 -6.2456 0.0000 -0.0000 16.6980 14.5229 -2.1817 5.6535 0.0000 0.0000 -16.8169 -3.0143 -4.9423 -5.5050 0.0000 -0.0000\n -2.0307 35.3062 23.5740 5.0478 12.6041 170.1866 -1.0236 5.7828 1.3833 -0.3171 -2.6375 0.1373 10.8982 16.3097 8.7172 -1.4327 6.1842 -0.8533 -14.7086 5.8281 0.0779 9.0175 1.3095 -5.0265 -3.1609 -4.0730 8.3639 -17.8685 -22.7822 52.3909 0.0000 0.0000 31.8588 -0.4078 -8.3389 0.3571 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 1.5765 12.9991 -5.9733 29.1908 33.2364 -76.4020 -0.0000 0.0000 9.4927 1.1820 -1.6259 -2.4444 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -34.5927 9.4060 -6.2718 3.1390 0.0000 0.0000 6.9746 4.8754 9.7000 -5.8825 0.0000 -0.0000 16.4083 13.8724 -1.7803 6.1827 0.0000 0.0000 -17.4297 -2.0074 -6.6282 -4.2638 0.0000 -0.0000\n -1.8829 35.9339 23.5033 2.7308 12.7758 171.6276 -1.7346 4.4035 1.5688 -0.6784 -3.2908 0.0602 10.7124 17.8438 9.2164 -1.7392 6.3718 -0.8471 -15.6406 6.5311 0.0429 8.7447 1.7333 -5.1917 -2.4321 -6.3190 8.4473 -18.4523 -22.6179 50.5751 0.0000 0.0000 33.7781 -0.1085 -7.6240 0.5999 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 1.3245 14.3413 -5.3754 28.8644 35.3404 -75.7425 -0.0000 0.0000 9.2852 0.9833 -2.9960 -2.3893 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -34.3115 10.8027 -5.1822 5.2669 0.0000 0.0000 8.2134 2.9015 11.9131 -4.7835 0.0000 -0.0000 15.4515 13.0726 -1.0724 6.9285 0.0000 0.0000 -17.8391 -0.6989 -8.2743 -4.3567 0.0000 -0.0000\n -1.7129 36.6067 23.4095 -0.4148 12.8300 173.2307 -2.9655 2.5428 1.9238 -1.4304 -4.1324 -0.0507 10.5718 20.3021 9.7123 -2.0676 6.2870 -0.8522 -16.9502 6.6413 -0.2357 8.2973 2.0123 -5.3139 -1.5508 -9.1929 8.0934 -18.1842 -22.2549 49.2061 0.0000 0.0000 35.2869 -2.3828 -5.5012 1.3630 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 1.0431 15.2840 -4.8641 28.5747 37.7201 -74.7735 -0.0000 0.0000 9.1435 0.4349 -3.7064 -1.9955 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -33.8030 11.9131 -3.9990 6.5647 0.0000 0.0000 11.6387 1.1338 13.1676 -3.3203 0.0000 -0.0000 13.7386 12.0390 -0.1242 7.7815 0.0000 0.0000 -18.3258 0.4177 -10.1392 -6.8176 0.0000 -0.0000\n -1.4810 37.2990 23.3426 -4.0828 11.7350 174.9053 -4.4287 -0.5767 2.5067 -2.5528 -5.8677 -0.3590 10.9147 24.6490 9.7720 -2.5642 5.7041 -0.9526 -18.9783 5.8219 -0.8449 7.6815 2.3105 -5.3118 -0.8543 -13.5041 7.4378 -15.6494 -20.0911 49.1965 0.0000 0.0000 35.4713 -6.4983 -0.5964 3.2746 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.3764 16.3636 -5.2877 27.9060 38.3380 -72.1106 -0.0000 0.0000 9.0999 -0.4524 -3.3914 -1.5320 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -32.7017 11.2332 -4.5874 4.3949 0.0000 0.0000 17.6394 1.0569 12.1968 -1.6997 0.0000 -0.0000 11.3543 9.7337 1.4982 9.0282 0.0000 0.0000 -18.9639 1.1785 -12.3478 -9.3227 0.0000 -0.0000\n -1.1688 38.0239 23.3627 -7.0780 8.7608 175.3980 -5.1692 -4.5324 2.9332 -3.2247 -9.9094 -1.1875 10.4554 30.7044 10.2268 -3.3477 4.8006 -1.0098 -21.5450 4.4709 -1.2628 7.2296 2.5224 -4.9889 -0.1907 -18.7562 7.6476 -10.5152 -16.4113 49.5608 0.0000 0.0000 34.2249 -8.8607 7.2230 6.2274 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.5843 18.6276 -6.3749 26.3423 36.5226 -67.0092 -0.0000 0.0000 8.9819 0.0897 -2.2864 -1.0413 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -30.6108 7.6335 -5.2599 -0.5648 0.0000 -0.0000 22.5727 1.9861 9.3226 -0.3128 0.0000 -0.0000 9.3334 5.6036 4.1752 10.8845 0.0000 0.0000 -19.1291 1.9271 -14.4020 -10.6661 0.0000 -0.0000\n -0.8368 38.7428 23.4589 -9.1517 5.5651 173.6474 -4.7818 -6.7061 2.9261 -2.8071 -14.4970 -2.0414 7.6621 33.4742 12.4955 -4.2189 4.4934 -0.7057 -24.0947 3.8513 -0.6484 6.6562 2.1290 -4.3347 1.2079 -22.2550 9.5251 -3.8071 -14.1242 49.0900 0.0000 0.0000 31.4719 -8.1108 15.4457 7.9046 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.7823 21.6963 -7.1394 24.0816 34.0682 -61.4563 -0.0000 0.0000 8.5905 2.2937 -1.4157 -0.5278 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -29.4642 2.8077 -4.3989 -3.1876 0.0000 -0.0000 22.8151 2.7782 7.5536 0.2747 0.0000 0.0000 7.9172 1.5260 7.6178 13.3841 0.0000 0.0000 -18.0565 2.5749 -15.5035 -12.1728 0.0000 -0.0000\n -0.5526 39.3614 23.5894 -10.9836 4.0850 170.4386 -4.2350 -6.3837 2.6014 -2.4269 -13.5132 -1.6507 6.4846 26.7843 14.2445 -4.9709 5.1028 0.0853 -26.9818 4.6002 1.3865 4.9125 0.9215 -3.5986 3.3227 -21.4066 12.6078 2.8488 -15.5150 48.5858 0.0000 0.0000 26.7095 -6.5925 19.1313 6.4022 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.3978 23.3632 -7.3792 21.7249 33.6120 -58.4902 -0.0000 0.0000 8.0819 3.1675 -1.6029 -0.4676 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -30.5345 -0.8371 -4.0789 -1.2602 0.0000 -0.0000 19.6459 3.3280 9.3365 0.2152 0.0000 0.0000 5.9458 -0.6700 10.9272 16.8575 0.0000 0.0000 -15.8527 2.6701 -15.6098 -15.1090 0.0000 -0.0000\n -0.2817 39.9226 23.7290 -11.5997 3.4681 168.3228 -3.5156 -4.9957 1.9893 -2.3232 -7.9760 -0.5795 7.8557 15.3547 13.8233 -5.2165 4.8292 1.0427 -29.8288 5.1516 3.7000 1.7525 -0.5892 -2.9400 5.1365 -15.9496 15.5701 8.5405 -20.7069 49.3337 0.0000 0.0000 20.0788 -7.3517 14.8297 3.3208 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 2.4309 20.5888 -7.9772 20.6460 36.9445 -59.0776 -0.0000 0.0000 7.3383 -0.0559 -2.3107 -1.5945 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -30.4611 -2.8387 -3.8437 0.9437 0.0000 0.0000 17.1955 3.3441 10.6331 -0.0183 0.0000 -0.0000 3.9718 -2.3367 13.0520 21.8303 0.0000 0.0000 -12.9647 2.5775 -16.0771 -17.8563 0.0000 -0.0000\n 0.0284 40.4558 23.8681 -11.2420 2.0010 168.8711 -2.3530 -3.8730 1.4132 -1.9907 -4.6801 -0.0713 9.3785 8.4105 12.3354 -4.9312 3.0639 1.6339 -32.1833 3.5422 3.7921 -1.3713 -2.1783 -2.3127 6.2721 -10.5610 17.4947 13.4523 -25.6318 50.5704 0.0000 0.0000 13.3944 -8.8209 5.2082 0.9669 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 4.0501 14.5434 -9.9641 20.5256 40.7387 -60.3090 -0.0000 0.0000 5.7820 -4.8689 -1.2098 -3.5001 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -28.3494 -4.3202 -3.7605 1.2564 0.0000 0.0000 15.8067 3.4326 9.2912 -0.0399 0.0000 -0.0000 1.1904 -5.7397 13.4391 29.6031 0.0000 0.0000 -9.3276 3.3525 -17.7909 -17.4660 0.0000 -0.0000\n 0.3663 40.9476 23.9653 -11.2242 -0.5269 171.4942 -1.5435 -3.4019 1.0037 -1.7652 -3.6665 -0.0081 10.8112 4.4367 10.5590 -4.5804 1.0611 1.9878 -33.6946 0.3890 1.3121 -2.8520 -4.2471 -2.1725 7.1518 -8.3376 18.1272 18.3641 -27.0961 50.9967 0.0000 0.0000 8.7642 -5.6514 -4.5997 -0.4661 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 4.6656 10.6730 -12.5138 19.8558 39.8223 -60.0507 -0.0000 0.0000 4.2586 -5.9712 2.2915 -4.6530 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -25.9961 -6.1705 -4.2065 0.3734 0.0000 0.0000 14.3561 3.5864 6.5096 0.0092 0.0000 0.0000 -3.9808 -10.9778 11.8730 39.9070 0.0000 0.0000 -4.9022 5.4364 -19.4478 -13.8807 0.0000 -0.0000\n 0.6827 41.4098 24.0071 -11.8647 -3.1868 174.3346 -1.5429 -3.3933 0.7451 -1.7768 -3.3677 -0.0342 11.8509 1.5470 9.3768 -4.3979 -0.7467 2.4114 -33.4296 -3.4555 -2.8823 -2.7277 -6.5759 -2.7552 7.9510 -8.9349 17.4369 22.9569 -25.9862 50.5737 0.0000 0.0000 6.5181 1.2107 -12.1084 -0.5439 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 4.6387 9.7597 -14.3485 18.8705 35.0290 -59.4097 -0.0000 0.0000 3.6319 -2.1293 6.0148 -5.1226 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -24.2970 -8.2572 -4.7653 -1.0200 0.0000 -0.0000 13.1001 3.6086 3.8517 -0.1369 0.0000 -0.0000 -10.7752 -16.0886 9.4873 49.7937 0.0000 0.0000 -1.6420 7.8659 -18.8941 -11.3904 0.0000 -0.0000\n 0.9028 41.8922 24.0515 -11.7965 -4.7734 176.0246 -1.5055 -3.2795 0.6832 -1.7703 -2.8922 0.0230 12.6807 -0.6116 9.0016 -4.1603 -2.4530 3.0297 -31.2616 -7.2532 -7.2187 -1.8590 -8.3819 -3.5341 8.3078 -10.7407 15.5138 26.2281 -24.3523 50.2131 0.0000 0.0000 5.6063 5.8009 -15.3488 -0.4174 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 3.9793 9.1485 -15.1961 18.0100 30.8070 -59.0896 -0.0000 0.0000 3.4504 2.0556 7.4658 -5.4313 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -22.1300 -9.6381 -4.8682 -2.3383 0.0000 -0.0000 12.2244 3.6674 2.1456 -0.3920 0.0000 -0.0000 -15.8436 -19.0957 8.3089 56.3509 0.0000 0.0000 -2.2224 8.9429 -15.0109 -11.4383 0.0000 -0.0000\n 0.9781 42.4018 24.1469 -10.4041 -5.0134 176.6939 -0.8043 -2.9994 0.6905 -1.4926 -2.1819 0.1415 13.3520 -2.2347 8.8709 -3.6158 -3.9932 3.6676 -27.8981 -10.2080 -9.8877 -0.4004 -9.0251 -3.8787 7.9259 -12.3119 12.9289 27.6092 -23.6075 50.6672 0.0000 0.0000 5.1718 5.8118 -14.0186 -1.1577 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 2.8573 7.4535 -15.3672 16.7101 29.2367 -58.2562 -0.0000 0.0000 3.1857 1.8046 6.4929 -5.3734 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -19.3086 -9.7802 -4.5847 -2.4325 0.0000 -0.0000 10.8671 3.8823 1.3563 -0.5556 0.0000 -0.0000 -17.7710 -19.7729 8.9976 58.6339 0.0000 0.0000 -5.6563 7.6918 -9.3771 -12.2447 0.0000 -0.0000\n 0.9286 42.8970 24.2809 -8.6737 -4.2842 177.1748 0.1317 -2.6997 0.6380 -1.0862 -1.6059 0.1951 13.7351 -3.4181 8.3966 -2.8583 -5.0207 4.0272 -24.2806 -11.8001 -10.3227 1.6808 -8.6135 -3.8016 7.1838 -13.2881 10.6229 27.1495 -24.0913 51.5996 0.0000 0.0000 5.3266 3.0587 -10.2932 -1.6053 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 1.7618 5.6107 -15.0375 14.5250 28.3225 -56.2680 -0.0000 0.0000 2.6874 -1.5906 5.1596 -5.1512 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -17.0168 -8.7079 -4.1161 -0.9173 0.0000 -0.0000 8.6381 4.0855 0.8188 -0.6556 0.0000 -0.0000 -18.4201 -18.6591 10.1488 57.3500 0.0000 0.0000 -8.5796 5.5189 -5.0124 -12.5194 0.0000 -0.0000\n 0.8333 43.3611 24.4120 -7.3474 -3.0971 178.0622 0.8088 -2.4723 0.5203 -0.7796 -1.2357 0.1911 14.0873 -4.2222 7.6404 -2.1903 -5.4085 4.0489 -21.2482 -12.1008 -9.6104 3.7215 -8.0055 -3.7584 6.5338 -13.8004 9.1474 25.4636 -25.6452 52.1713 0.0000 0.0000 6.5858 -1.1202 -6.3144 -1.2002 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 0.9448 4.5151 -14.3211 11.7828 25.7744 -54.0170 -0.0000 0.0000 2.0367 -3.3745 4.5725 -4.8763 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.2256 -6.9880 -3.5967 0.6678 0.0000 0.0000 6.5053 4.2318 -0.0336 -0.7881 0.0000 -0.0000 -19.4201 -16.6241 10.5585 53.7506 0.0000 0.0000 -9.7009 4.2492 -3.5425 -11.6164 0.0000 -0.0000\n 0.7620 43.8090 24.5183 -6.1663 -2.0684 179.3099 1.3672 -2.4323 0.4110 -0.5266 -1.0231 0.1747 14.6957 -4.6703 7.0868 -1.7567 -5.4322 3.9680 -19.2160 -11.8173 -9.1175 5.0038 -7.9686 -4.2306 6.0250 -13.8365 8.5204 23.2655 -27.9603 51.8595 0.0000 0.0000 8.9404 -6.2552 -2.4659 -0.4008 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.2567 3.8713 -13.5876 8.9972 21.9662 -52.5867 -0.0000 0.0000 1.3050 -2.3739 3.6587 -4.6598 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -12.9458 -5.4908 -3.3976 0.9296 0.0000 0.0000 5.1425 4.4837 -1.0185 -0.8533 0.0000 -0.0000 -20.4586 -14.7834 10.6104 48.4461 0.0000 0.0000 -9.5484 3.9118 -4.5248 -9.5968 0.0000 -0.0000\n 0.7322 44.2266 24.5824 -5.2332 -1.7660 -179.3640 1.9751 -2.7405 0.3611 -0.2646 -0.9538 0.1513 15.1234 -4.9356 6.9211 -1.4932 -5.4660 3.9971 -17.9273 -11.8379 -9.4551 5.4561 -8.5394 -5.4180 5.6198 -13.2521 8.4080 20.9837 -30.7739 50.9962 0.0000 0.0000 11.5811 -10.1696 1.5352 0.4144 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.3988 3.1172 -13.2235 6.2651 18.6773 -51.9595 -0.0000 0.0000 0.5411 -1.5310 1.4884 -4.4904 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -10.5916 -4.9013 -3.8430 0.3737 0.0000 0.0000 4.1423 4.7611 -1.6684 -0.7715 0.0000 -0.0000 -21.5329 -13.9612 11.1242 41.8713 0.0000 0.0000 -8.7380 3.9846 -6.8290 -7.5380 0.0000 -0.0000\n 0.7380 44.5820 24.5875 -5.2265 -2.5014 -178.0802 2.3796 -3.4522 0.3831 -0.0935 -1.0246 0.1153 14.7774 -5.2779 6.8809 -1.2671 -5.6800 4.1466 -16.9195 -12.7558 -10.5063 5.4128 -9.3253 -7.0230 5.3991 -12.2589 8.3655 18.8541 -33.5801 50.4799 0.0000 0.0000 13.6003 -10.9948 5.3296 0.8511 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.9756 2.1835 -13.1989 3.6295 16.6956 -51.6454 -0.0000 -0.0000 -0.3143 -2.8393 -1.0812 -4.3504 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -9.4748 -5.4858 -5.0674 0.0459 0.0000 0.0000 3.1064 4.8898 -1.6986 -0.7045 0.0000 -0.0000 -23.6940 -14.2198 12.1310 34.6705 0.0000 0.0000 -7.0489 4.3221 -9.9532 -6.6082 0.0000 -0.0000\n 0.7718 44.9025 24.5441 -6.0034 -4.0190 -176.9671 2.4271 -4.3220 0.4580 -0.0788 -1.1003 0.0712 14.0277 -5.7947 6.7375 -1.0262 -6.1203 4.3607 -16.0747 -14.5536 -11.8393 5.2834 -10.0528 -8.4010 5.2738 -11.5734 8.0638 16.9646 -35.5879 50.7620 0.0000 0.0000 14.7751 -9.8860 7.9260 0.6424 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.4916 1.1960 -13.4164 1.3447 15.5961 -51.2012 -0.0000 -0.0000 -1.4629 -4.9788 -2.9198 -4.4935 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -9.4265 -6.9337 -6.7225 -0.0622 0.0000 -0.0000 2.1703 4.9320 -1.3116 -0.7745 0.0000 -0.0000 -26.8706 -14.8708 12.9874 27.0028 0.0000 0.0000 -3.2016 5.3837 -13.4341 -8.1466 0.0000 -0.0000\n 0.8140 45.2827 24.4821 -6.1796 -5.7265 -176.1964 2.7459 -5.1253 0.5581 0.0270 -0.9397 0.0574 13.5242 -6.4117 6.4939 -0.7803 -6.7875 4.6274 -15.4575 -16.6880 -13.0860 5.4763 -10.6806 -9.0549 5.1035 -11.8151 7.4176 15.2403 -36.4508 51.4983 0.0000 0.0000 15.5752 -9.1996 8.9104 0.1045 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.9696 -0.0029 -14.0134 -0.1886 14.9466 -50.3856 -0.0000 -0.0000 -2.8256 -6.0937 -4.0047 -5.0376 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -8.5389 -8.7349 -7.7940 -0.4644 0.0000 -0.0000 1.2971 5.0712 -1.1431 -0.7963 0.0000 -0.0000 -29.0947 -15.3539 13.2446 18.9890 0.0000 0.0000 3.0208 7.7477 -15.8052 -12.5786 0.0000 -0.0000\n 0.8419 45.7477 24.4172 -5.6577 -7.3126 -175.8547 3.3618 -5.8774 0.6807 0.3052 -0.5762 0.0636 13.2744 -6.9255 6.2575 -0.5294 -7.5250 4.9009 -15.0294 -18.5521 -14.0565 6.0775 -11.2398 -9.0297 4.9627 -12.7054 6.6461 13.6533 -37.1165 52.1203 0.0000 0.0000 16.6096 -9.2903 9.3424 -0.1624 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -2.3193 -1.4479 -14.9455 -0.7007 14.5294 -49.5236 -0.0000 -0.0000 -3.8161 -6.1865 -4.6946 -5.7161 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.7842 -10.5391 -7.8688 -0.7408 0.0000 -0.0000 0.0807 5.3563 -1.3202 -0.6119 0.0000 -0.0000 -30.3247 -15.7108 12.9840 12.3360 0.0000 0.0000 8.4118 10.6185 -15.4842 -16.3526 0.0000 -0.0000\n 0.8414 46.2446 24.3659 -5.5346 -8.4354 -176.0729 3.7444 -6.1766 0.7320 0.4309 -0.3073 0.0781 13.1515 -7.2254 6.1977 -0.2735 -8.0770 5.1339 -14.7449 -19.8321 -14.6358 6.6535 -11.6684 -8.7400 5.0066 -13.3199 6.1031 12.3898 -38.8238 52.4066 0.0000 0.0000 17.9664 -9.2086 10.0830 0.3227 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -2.5447 -2.5237 -15.7836 -0.3186 14.1207 -49.3253 -0.0000 -0.0000 -3.9572 -5.9931 -4.7814 -5.9404 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -5.6591 -11.7972 -7.7852 -0.2195 0.0000 -0.0000 -1.5708 5.5591 -1.0519 -0.4650 0.0000 -0.0000 -31.8965 -15.6860 13.6645 8.4034 0.0000 0.0000 9.8509 11.7874 -12.9874 -15.7448 0.0000 -0.0000\n 0.8150 46.7721 24.3241 -5.9842 -9.1054 -177.0266 3.7477 -6.0509 0.6842 0.3612 -0.2213 0.1047 13.2243 -7.1936 6.4540 -0.0506 -8.2983 5.3046 -14.5126 -20.6155 -14.8307 6.8882 -11.8313 -8.5041 5.1809 -13.4238 5.9889 11.7756 -41.3110 52.3989 0.0000 0.0000 19.1536 -8.8429 10.3299 1.2047 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -2.6909 -2.8794 -16.2841 0.4303 14.0603 -49.9214 -0.0000 -0.0000 -3.4868 -5.7270 -4.0686 -5.5485 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -5.2102 -12.4976 -7.9094 0.8822 0.0000 0.0000 -3.3933 5.4538 -0.0050 -0.5610 0.0000 -0.0000 -33.7495 -15.3379 16.1548 6.6305 0.0000 0.0000 8.3134 10.6483 -9.8461 -12.3669 0.0000 -0.0000\n 0.7714 47.3909 24.2701 -6.0634 -9.6390 -178.4130 3.8564 -5.9501 0.6460 0.4051 -0.1199 0.1435 13.4175 -6.8273 6.7704 0.0813 -8.3097 5.3417 -14.2135 -21.0016 -14.8264 7.0621 -11.7695 -8.4013 5.4246 -13.7038 6.1624 12.0618 -43.0109 52.4915 0.0000 0.0000 19.5399 -8.5270 9.3482 1.5679 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -2.6263 -2.7882 -16.6166 1.0988 15.0341 -50.7060 -0.0000 -0.0000 -3.0423 -5.5202 -3.2556 -5.0232 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -4.1042 -13.0268 -7.7461 2.0701 0.0000 0.0000 -5.4331 5.2056 1.2386 -0.5766 0.0000 -0.0000 -34.7110 -15.2293 19.0262 6.1881 0.0000 0.0000 6.4605 10.1921 -6.5440 -10.5641 0.0000 -0.0000\n 0.7211 48.1023 24.1804 -5.9710 -10.4941 -179.7940 4.0076 -6.1919 0.6841 0.4952 0.0508 0.1659 13.3798 -6.3888 6.7483 0.1679 -8.2121 5.2035 -13.8411 -20.9129 -14.8297 7.5935 -11.6451 -8.4062 5.8842 -14.2458 6.2841 13.5112 -43.4133 53.3945 0.0000 0.0000 18.8517 -8.0655 7.9400 1.5547 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -2.1663 -2.5648 -16.8288 1.7898 17.1525 -51.3910 -0.0000 -0.0000 -2.8544 -5.6764 -3.0225 -4.8758 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -2.6967 -13.7929 -6.9167 3.5626 0.0000 0.0000 -7.9052 5.1192 1.9335 -0.2645 0.0000 -0.0000 -34.7860 -15.6552 20.8884 6.5065 0.0000 0.0000 5.4759 11.5151 -4.0841 -11.2305 0.0000 -0.0000\n 0.6623 48.8662 24.0519 -6.9874 -11.6034 178.3928 3.2580 -6.4408 0.6303 0.2038 0.0977 0.1683 13.3718 -6.0832 6.5976 0.3019 -7.9704 5.0127 -13.5761 -20.3927 -14.6600 8.4112 -11.3739 -8.4134 6.5556 -14.5623 6.3677 16.0491 -42.8762 55.0876 0.0000 0.0000 17.2307 -7.2173 6.5792 2.0076 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -1.4010 -1.7014 -16.5841 2.9434 19.5517 -52.3047 -0.0000 -0.0000 -2.6566 -5.9658 -3.0803 -5.0267 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.4252 -14.7354 -5.3199 5.5329 0.0000 0.0000 -10.5242 4.9514 2.0907 -0.0671 0.0000 -0.0000 -34.5289 -16.1258 21.1825 6.1228 0.0000 0.0000 6.1557 10.8708 -3.5112 -11.5872 0.0000 -0.0000\n 0.5518 49.7545 23.9396 -7.9236 -11.3977 175.8536 1.9633 -5.1792 0.0977 -0.4286 0.1586 0.2192 14.5550 -5.8135 6.7170 0.4099 -7.6603 4.8010 -13.5913 -19.9658 -13.8767 9.0974 -10.6681 -8.2809 6.9379 -15.7712 7.1566 18.2683 -40.5965 55.3873 0.0000 0.0000 15.2045 -6.0418 4.0301 2.4332 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.5532 0.8422 -15.5952 4.6182 21.2246 -53.3310 -0.0000 -0.0000 -2.3642 -5.9581 -3.1999 -5.0005 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.3300 -14.1373 -3.5529 6.8861 0.0000 0.0000 -12.8759 3.8876 2.9432 -0.3350 0.0000 -0.0000 -31.6804 -14.9292 18.7498 3.0847 0.0000 0.0000 9.2733 5.7294 -2.2423 -10.4293 0.0000 -0.0000\n 0.3433 50.9359 23.8997 -4.8977 -8.3544 173.9495 2.2368 -1.2327 -0.6200 -0.5170 0.8893 0.3674 17.1535 -5.1781 6.4117 0.3368 -7.5408 4.3006 -13.3389 -20.0330 -12.7651 9.5884 -9.6112 -8.2759 6.7721 -19.3307 8.7539 18.8749 -36.6194 52.5981 0.0000 0.0000 13.2789 -4.6101 0.1526 1.5912 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.4239 4.4052 -14.3239 6.3859 22.9007 -53.4651 -0.0000 -0.0000 -2.4823 -6.2260 -3.9620 -4.9315 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 5.0021 -9.7225 -2.6759 6.4779 0.0000 0.0000 -15.0658 1.7875 4.9059 -0.5875 0.0000 -0.0000 -22.3167 -10.3743 13.0002 -3.2340 0.0000 -0.0000 14.6484 -0.5467 3.3417 -8.2055 0.0000 -0.0000\n 0.0494 52.2065 23.9145 -0.1713 -3.7209 173.7147 3.3922 3.0895 -0.8108 0.1455 2.5455 0.5312 18.7699 -3.9458 4.5650 0.2235 -7.5450 3.2801 -11.7800 -19.8892 -12.3453 10.2587 -8.4954 -9.1005 6.3342 -23.2515 9.3993 18.3685 -34.3028 49.1027 0.0000 0.0000 11.4229 -3.3163 -2.1773 -0.7605 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 1.6918 6.4822 -13.5369 8.3497 26.6758 -52.6054 -0.0000 -0.0000 -3.2500 -7.2670 -5.5701 -5.5634 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 12.2512 -3.1434 -3.8542 6.8529 0.0000 0.0000 -17.1352 -0.1709 6.2894 -0.7030 0.0000 -0.0000 -12.2002 -4.0961 7.3210 -8.4998 0.0000 -0.0000 18.6474 -3.0608 9.3399 -5.9499 0.0000 -0.0000\n -0.3148 53.1315 24.0199 0.3189 -0.2127 175.3741 3.2841 4.9295 -0.9006 0.3024 3.9349 0.5253 18.3686 -3.0901 1.3631 0.3762 -6.9701 1.9809 -9.4018 -18.2228 -12.5846 11.3554 -6.8496 -10.8144 5.3132 -23.8213 7.9788 17.1684 -36.3285 47.1852 0.0000 0.0000 9.8718 -3.2307 -1.1271 -3.3270 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 2.8933 7.5636 -12.8728 11.3631 31.2251 -52.4853 -0.0000 -0.0000 -3.7289 -7.8494 -6.4266 -6.6554 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 11.7193 1.4703 -5.6813 12.5057 0.0000 0.0000 -18.2202 -0.8248 5.7418 -1.6349 0.0000 -0.0000 -9.8065 0.5228 2.7346 -8.6298 0.0000 -0.0000 17.3544 -2.0146 13.1289 -5.4266 0.0000 -0.0000\n -0.6688 53.7586 24.1814 -2.2038 0.5878 176.3889 2.3570 4.2583 -0.9030 -0.1128 3.9441 0.3775 16.7983 -2.8045 -1.2025 0.8587 -5.4973 1.0002 -6.4936 -14.1167 -12.1171 13.0013 -4.2728 -12.1641 3.5925 -19.6184 5.3853 15.7022 -41.7899 45.9511 0.0000 0.0000 9.5453 -5.1681 -0.4654 -4.0285 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 3.7029 8.6694 -11.5352 16.2345 34.6100 -54.7031 -0.0000 -0.0000 -2.7837 -6.4458 -4.8467 -6.8174 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 4.0744 3.2093 -4.1117 24.1427 0.0000 0.0000 -16.6653 -1.1471 3.5276 -4.0539 0.0000 -0.0000 -12.0484 2.2225 2.2504 -5.9944 0.0000 -0.0000 13.5243 -1.9121 13.2908 -5.7576 0.0000 -0.0000\n -0.9944 54.3657 24.2920 -3.8899 1.1786 173.9270 1.5718 3.7587 -0.7670 -0.5666 3.2139 0.2863 15.5641 -2.0740 -1.4546 1.3438 -3.8052 0.5763 -3.1527 -7.9983 -9.8516 14.4986 -1.2601 -11.5624 1.8828 -14.5576 3.5952 12.5058 -44.9093 42.5587 0.0000 0.0000 10.9747 -7.6087 -4.3120 -3.4213 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 3.8970 9.7358 -9.3796 22.2311 36.5469 -58.3252 -0.0000 -0.0000 -0.3546 -3.4237 -0.7681 -6.0986 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -5.5068 4.6987 0.7573 38.7407 0.0000 0.0000 -11.9651 -2.8626 2.9337 -6.7049 0.0000 -0.0000 -13.3018 3.1870 5.9683 -3.6600 0.0000 -0.0000 10.6551 -4.0600 11.9761 -5.5455 0.0000 -0.0000\n -1.3127 55.1235 24.3076 -2.5392 3.7245 169.4656 1.6673 5.0500 -0.7457 -0.6078 3.0719 0.3493 15.4303 -0.5419 -0.3408 1.5965 -2.4907 0.3134 -0.2393 -1.4760 -6.3184 15.0735 0.7813 -8.7825 1.2593 -13.1187 3.0444 6.3121 -41.6055 37.2540 0.0000 0.0000 13.8262 -7.7969 -8.7880 -2.7699 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 3.5249 10.2810 -7.1911 27.0272 38.2659 -60.6031 -0.0000 0.0000 2.4923 0.6141 4.5840 -5.6366 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -12.6907 7.5935 7.2982 52.2823 0.0000 0.0000 -6.4623 -4.4422 4.8113 -6.8687 0.0000 -0.0000 -10.7792 6.1141 9.2270 -3.0465 0.0000 -0.0000 8.9331 -5.8356 13.3332 -4.9140 0.0000 -0.0000\n -1.5770 55.9203 24.2576 -0.2795 6.8309 166.4599 1.8137 6.8499 -0.8229 -0.5421 3.5722 0.4550 15.7535 1.1781 0.0518 1.6829 -1.4762 -0.2189 1.1862 3.6150 -2.8056 15.3164 1.0154 -5.3236 2.0702 -14.3152 2.9672 -1.4270 -35.0387 32.4593 0.0000 0.0000 17.5771 -6.3187 -7.6945 -1.8326 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.0973 10.5635 -5.6139 28.7377 40.0473 -59.8368 -0.0000 0.0000 4.4155 4.5267 8.4993 -5.6166 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -18.0866 10.4780 12.6618 62.6648 0.0000 0.0000 -3.7754 -4.5064 6.6121 -4.2518 0.0000 -0.0000 -7.0663 10.3146 10.2690 -3.7708 0.0000 -0.0000 7.2698 -6.0858 15.4767 -4.6205 0.0000 -0.0000\n -1.7364 56.5993 24.2157 0.1712 8.6489 166.4587 1.4761 7.6836 -0.9053 -0.6672 3.7744 0.4499 15.7812 2.4258 -0.8050 1.7164 -0.4977 -1.0106 1.1923 6.2538 -0.3314 15.7020 0.5805 -2.7607 3.2614 -14.7852 2.7299 -9.0723 -29.8592 28.4144 0.0000 0.0000 21.0667 -6.4505 -1.2280 -1.4499 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.0684 11.6967 -4.3748 27.3300 40.1340 -56.3403 -0.0000 0.0000 4.5013 5.4995 8.2046 -5.2631 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -23.2000 11.5655 14.6377 69.1328 0.0000 0.0000 -4.6825 -3.9722 5.9067 -2.0573 0.0000 -0.0000 -5.0169 13.1263 10.6967 -4.4611 0.0000 -0.0000 5.4220 -6.2592 14.8849 -4.7158 0.0000 -0.0000\n -1.7697 57.1894 24.2372 -0.5242 8.6957 168.2481 1.1848 7.6464 -0.9876 -0.8007 3.4157 0.3422 15.5205 3.0182 -2.0087 1.7182 0.3808 -1.7307 0.9438 7.0844 0.7419 15.6503 0.7907 -1.6165 3.5052 -13.6687 2.3680 -15.5271 -26.2945 24.2212 0.0000 0.0000 23.1936 -8.1645 4.9391 -2.3083 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 3.4621 13.9124 -2.9761 24.0572 38.4065 -51.7117 -0.0000 0.0000 2.7079 2.6270 3.5514 -4.7980 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -27.1936 10.8114 13.8249 71.2804 0.0000 0.0000 -7.0171 -3.2723 2.6096 -2.2265 0.0000 -0.0000 -4.2492 13.6966 11.8536 -3.9732 0.0000 -0.0000 3.5408 -6.8559 11.6497 -4.7723 0.0000 -0.0000\n -1.7068 57.7709 24.3052 -0.9211 7.9039 170.1321 1.2099 7.5369 -1.0498 -0.7899 3.0290 0.2322 15.1638 3.1958 -2.8162 1.7254 0.8777 -2.1756 1.1892 7.3252 0.7984 15.0835 1.7184 -1.7529 2.5120 -12.0985 2.3146 -20.2832 -22.4216 20.1388 0.0000 0.0000 23.9584 -8.8204 7.2745 -4.2988 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 3.8105 15.8349 -1.1992 19.9186 37.5161 -47.3374 -0.0000 0.0000 0.0515 -2.6138 -2.8545 -5.6986 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -29.5726 9.2572 12.3968 69.5721 0.0000 0.0000 -8.4402 -1.9997 -1.3692 -3.2181 0.0000 -0.0000 -3.5646 13.0190 13.0038 -2.3540 0.0000 -0.0000 1.3941 -7.0579 8.5128 -4.6310 0.0000 -0.0000\n -1.6057 58.3398 24.3650 -1.1878 7.1763 171.7241 1.2081 7.6908 -1.0908 -0.7761 2.8939 0.1725 14.7693 3.1199 -3.3212 1.7765 1.0032 -2.4630 1.6432 7.7230 0.4537 14.7737 2.8289 -2.5905 0.9590 -10.5276 2.4533 -23.6911 -18.1612 17.0942 0.0000 0.0000 24.4153 -7.9884 6.5601 -5.9732 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 3.5534 16.3061 0.8640 15.4251 39.0379 -43.4425 -0.0000 -0.0000 -2.2181 -7.8674 -7.8728 -7.8609 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -31.4943 7.7860 11.4598 65.1772 0.0000 0.0000 -7.9565 -0.5905 -4.0999 -3.4354 0.0000 -0.0000 -2.8858 12.1347 13.7758 -0.5666 0.0000 -0.0000 -0.9569 -6.6806 6.2208 -4.2785 0.0000 -0.0000\n -1.4968 58.8780 24.3956 -1.7045 6.5427 173.1657 0.9746 7.8933 -1.0893 -0.8615 2.7356 0.1171 14.4955 2.8823 -3.8227 1.8283 1.0967 -2.7660 1.7858 8.5460 0.2387 15.0499 3.8627 -3.2115 -0.6454 -8.7873 2.3790 -26.4158 -14.6313 15.4077 0.0000 0.0000 25.4806 -7.0349 5.5990 -6.2633 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 2.7881 16.0870 2.7398 11.3976 40.4880 -39.9998 -0.0000 -0.0000 -3.4202 -10.1970 -10.3130 -8.4661 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -33.5211 6.7836 10.5887 58.6600 0.0000 0.0000 -5.6404 0.1874 -4.6834 -3.1386 0.0000 -0.0000 -2.3318 11.2611 14.5426 0.6910 0.0000 0.0000 -3.1261 -6.2945 3.9395 -3.7329 0.0000 -0.0000\n -1.3876 59.4105 24.4037 -2.1627 5.9987 174.3870 0.6271 7.9788 -1.0522 -0.9754 2.3728 0.0352 14.4631 2.7457 -4.2930 1.8474 1.4236 -3.1164 1.6978 9.7594 0.5183 15.4066 4.8405 -2.9870 -2.0656 -7.3397 2.1227 -29.0903 -12.0247 14.9061 0.0000 0.0000 27.2951 -6.2727 5.6860 -5.7140 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 2.0149 16.1186 4.0509 9.6737 39.0647 -38.3470 -0.0000 -0.0000 -3.3469 -8.9936 -10.9358 -6.5517 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -34.9434 6.5075 9.2197 49.9809 0.0000 0.0000 -1.6384 0.2681 -2.9428 -2.7703 0.0000 -0.0000 -1.7361 10.4325 15.2216 1.7479 0.0000 0.0000 -5.0477 -5.9392 1.8543 -3.3469 0.0000 -0.0000\n -1.2900 59.9613 24.3861 -2.4288 5.8490 175.3766 0.2096 7.9641 -1.0073 -1.1040 2.0008 -0.0374 14.5510 2.9172 -4.5841 1.9110 1.9745 -3.4273 1.6890 11.1415 1.2067 15.3823 5.7548 -2.0897 -3.1575 -6.6265 1.9215 -31.9036 -9.8272 15.0110 0.0000 0.0000 29.9237 -4.4208 6.5067 -5.0699 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.5877 15.9237 4.7683 10.6416 35.8661 -38.8398 -0.0000 -0.0000 -2.4560 -6.4288 -11.0033 -4.5859 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -35.5536 7.0548 7.1359 39.7098 0.0000 0.0000 3.7983 -0.3004 0.6185 -2.3648 0.0000 -0.0000 -1.1007 9.9369 15.6340 3.0617 0.0000 0.0000 -6.9527 -5.2965 0.4244 -3.4389 0.0000 -0.0000\n -1.2100 60.5265 24.3427 -2.7703 6.0493 176.2228 -0.3167 7.7839 -0.8835 -1.3193 1.7096 -0.0736 14.6921 3.3310 -4.6485 2.0097 2.5713 -3.6350 1.6297 12.5193 1.8555 15.0969 6.6976 -1.1912 -3.9134 -6.4196 1.8939 -34.5202 -7.6252 15.0410 0.0000 0.0000 33.5576 -1.3186 7.9889 -4.4543 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 1.3778 15.1807 5.0718 12.0225 33.6389 -39.7743 -0.0000 -0.0000 -1.6267 -4.8540 -11.3102 -3.9047 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -35.9728 7.9297 4.0581 29.0748 0.0000 0.0000 9.6024 -1.7677 4.9276 -2.0913 0.0000 -0.0000 -0.3999 9.8258 15.7660 4.1547 0.0000 0.0000 -8.7335 -4.5469 -0.5626 -3.6376 0.0000 -0.0000\n -1.1384 61.1222 24.2871 -3.0230 6.3296 177.0337 -0.7245 7.4916 -0.6839 -1.4551 1.3350 -0.1119 14.8157 3.8031 -4.4998 2.0265 3.0844 -3.7582 1.2767 13.8942 2.1276 14.9138 7.8980 -0.8388 -4.3465 -6.2505 1.9612 -36.8443 -5.8111 14.6870 0.0000 0.0000 38.1384 1.6943 10.2833 -3.8096 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 1.0664 14.6301 5.2579 12.0155 33.1846 -39.9011 -0.0000 -0.0000 -1.3097 -4.1987 -11.3607 -3.0851 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -36.1902 8.5782 -0.1415 19.3121 0.0000 0.0000 13.8404 -4.0577 9.1144 -2.0042 0.0000 -0.0000 0.9723 9.9621 15.1602 4.2058 0.0000 0.0000 -9.9940 -3.9801 -1.0900 -3.4998 0.0000 -0.0000\n -1.0643 61.7722 24.2273 -2.9453 6.7531 178.1552 -0.7982 7.3493 -0.5602 -1.3361 0.8974 -0.1782 14.7003 4.1866 -4.3271 1.9236 3.4819 -3.8504 0.8420 15.2907 1.9887 14.9270 9.3164 -1.2127 -4.4086 -6.0084 1.8993 -39.1287 -5.3036 13.9253 -0.0000 0.0000 43.5772 4.5807 12.7454 -3.3502 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.6606 14.6119 5.5342 11.0888 33.7521 -39.4364 -0.0000 -0.0000 -1.5328 -4.4212 -11.1837 -1.5322 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -36.1852 9.1277 -4.7070 11.9207 0.0000 0.0000 15.0403 -6.3492 12.2177 -1.7215 0.0000 -0.0000 3.2720 10.3115 13.5127 3.2990 0.0000 0.0000 -10.5877 -3.3608 -1.0483 -3.2656 0.0000 -0.0000\n -0.9797 62.4416 24.1695 -3.2369 7.3524 179.9732 -0.9672 7.2434 -0.5031 -1.2639 0.7410 -0.2074 14.4569 4.3812 -4.4255 1.7927 3.7315 -3.9815 0.4868 16.6116 1.5138 14.8395 10.5551 -2.0738 -4.3451 -6.0942 1.6680 -41.1586 -6.0451 12.7382 -0.0000 0.0001 49.7247 8.0578 14.4884 -2.7708 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.3162 14.8406 5.8111 10.4956 34.5070 -39.2125 -0.0000 -0.0000 -2.1646 -5.9290 -11.4674 -1.2356 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -36.6952 9.8570 -8.9586 7.1640 0.0000 0.0000 13.9530 -7.2238 12.7676 -1.4601 0.0000 -0.0000 5.2417 10.6078 11.5930 2.4844 0.0000 0.0000 -10.8180 -2.4113 -1.1108 -3.2222 0.0000 -0.0000\n -0.8775 63.1173 24.1120 -4.0839 7.9880 -177.7537 -1.4011 7.1439 -0.3170 -1.3975 0.7773 -0.2091 14.3135 4.4036 -4.7444 1.6892 3.7931 -4.0953 0.0764 17.7598 0.8812 14.4211 11.4486 -2.9553 -4.3468 -6.6305 1.5477 -42.2765 -7.0941 11.3230 -0.0000 0.0001 55.5611 10.6989 15.8479 -0.9372 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.1527 15.3836 5.8358 10.5488 34.9243 -39.4210 -0.0000 -0.0000 -3.0831 -6.9015 -11.7993 -2.9402 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -37.4197 10.4475 -12.8262 3.7134 0.0000 0.0000 11.9921 -5.8901 9.8554 -1.5939 0.0000 -0.0000 6.4527 10.6887 10.1413 2.1966 0.0000 0.0000 -11.0586 -1.3025 -1.8421 -3.1445 0.0000 -0.0000\n -0.7637 63.8497 24.0476 -4.6459 8.4608 -175.6139 -1.6844 7.0764 -0.0797 -1.4789 0.6357 -0.2341 14.2096 4.2004 -4.8515 1.5751 3.7585 -4.0699 -0.4339 18.7771 0.4205 13.8585 12.2682 -3.5960 -4.0927 -7.3513 1.7860 -42.2382 -8.0715 10.2547 -0.0000 0.0001 59.5175 10.9009 17.9874 2.2480 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.2283 16.4279 5.6600 11.2245 34.9357 -40.0857 -0.0000 -0.0000 -3.9664 -6.3577 -11.8198 -4.6255 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -37.1621 10.6001 -16.0106 1.3452 0.0000 0.0000 9.3080 -3.2622 4.6614 -1.4354 0.0000 -0.0000 7.8001 10.4262 9.2322 2.4340 0.0000 0.0000 -11.6304 -0.1359 -3.1068 -3.0685 0.0000 -0.0000\n -0.6645 64.6515 23.9663 -5.0370 8.7469 -173.1944 -2.0288 6.7994 -0.0358 -1.5685 0.4491 -0.2708 14.1313 3.7352 -4.8107 1.4498 3.6923 -3.9441 -0.9363 19.7358 0.2172 13.3888 13.0287 -4.0495 -3.5120 -8.1347 2.1653 -41.2247 -9.4045 9.7259 -0.0000 0.0001 60.9693 10.1181 20.7190 5.5240 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.4120 17.2941 5.5105 13.3045 35.0637 -41.8131 -0.0000 -0.0000 -4.1870 -5.6525 -11.7574 -5.2962 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -35.6516 11.3050 -18.8153 1.0361 0.0000 0.0000 6.5866 -1.1095 0.9244 -0.9892 0.0000 -0.0000 8.6747 9.6692 9.2766 4.2220 0.0000 0.0000 -12.8313 1.4623 -5.4336 -3.5322 0.0000 -0.0000\n -0.5714 65.5018 23.8239 -6.1396 8.7274 -169.3844 -3.0107 6.1219 -0.0188 -2.1297 0.6019 -0.2564 14.3152 2.9662 -5.2504 1.3409 3.4357 -3.8633 -1.5943 20.4926 -0.0469 12.9122 13.3234 -4.4524 -3.2245 -9.1885 2.3426 -39.5453 -10.7581 9.2990 -0.0000 0.0001 60.2664 10.8503 22.0889 7.6965 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.5074 17.4854 5.1744 17.1771 35.0774 -44.7398 -0.0000 -0.0000 -3.4526 -5.1061 -10.3646 -5.6034 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -33.0920 13.2405 -21.6510 1.9617 0.0000 0.0000 6.6574 -0.0229 0.1356 -1.2607 0.0000 -0.0000 7.8104 8.0328 10.5920 8.4019 0.0000 0.0000 -14.8186 3.6484 -9.8602 -4.2901 0.0000 -0.0000\n -0.4342 66.3965 23.5953 -7.6731 7.3302 -165.0628 -4.6977 4.1108 0.3987 -3.3803 0.8777 -0.1937 15.2825 2.0581 -5.7282 1.0746 2.9791 -3.7340 -3.2427 20.9591 -0.4162 12.1884 13.0810 -4.8891 -3.6185 -11.1792 2.6648 -37.6476 -10.2466 9.1266 -0.0000 0.0001 57.0982 12.2136 21.2574 8.4990 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0333 18.5371 4.1414 21.0097 33.3385 -46.7688 -0.0000 -0.0000 -2.3555 -3.7625 -5.3922 -5.9805 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -29.8295 13.9370 -24.2614 1.6501 0.0000 0.0000 11.3448 1.3066 0.0693 -1.4754 0.0000 -0.0000 5.6906 4.5603 11.8316 13.8305 0.0000 0.0000 -17.7572 5.7657 -14.6586 -4.5067 0.0000 -0.0000\n -0.2386 67.3676 23.3913 -7.3437 3.2847 -163.4882 -6.1000 -0.9581 0.9036 -5.0117 -0.0606 -0.2725 17.6212 1.6132 -4.3454 0.4023 2.8431 -3.1851 -6.6253 21.4863 -0.2187 11.3311 12.7134 -5.4099 -4.2835 -14.0428 4.0531 -35.6370 -7.3055 10.0147 -0.0000 0.0001 49.9282 10.1485 20.4993 7.9835 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.5329 21.9810 2.6475 22.7241 29.7545 -45.7305 -0.0000 -0.0000 -1.5255 -1.9022 2.6787 -6.2097 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -25.4468 9.3450 -26.3434 -1.7256 0.0000 -0.0000 17.7106 3.4036 -0.6936 -0.5305 0.0000 -0.0000 4.9431 -1.7524 12.8058 18.5510 0.0000 0.0000 -21.0517 7.4118 -17.0530 -5.0317 0.0000 -0.0000\n -0.0454 68.3520 23.3485 -5.1148 -1.7519 -165.6822 -6.1871 -6.6489 0.8207 -5.6761 -3.8437 -0.9737 19.3551 1.9064 -0.4167 -0.3777 3.6016 -2.1070 -10.4195 21.6797 0.9273 10.6145 12.2872 -5.9697 -4.3845 -15.6828 6.8060 -33.4420 -5.5913 11.4631 -0.0000 0.0000 38.7770 4.4455 20.3891 4.0102 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -3.4214 24.8941 1.8017 23.0480 28.0442 -43.8985 -0.0000 -0.0000 -0.3302 -0.6470 9.6417 -5.7248 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -20.7571 1.1841 -27.3403 -5.9487 0.0000 -0.0000 20.5507 5.3775 -0.3950 0.6033 0.0000 0.0000 6.1884 -8.9369 15.0378 23.0664 0.0000 0.0000 -21.8339 8.4464 -17.2051 -8.1040 0.0000 -0.0000\n 0.0678 69.0905 23.5066 -4.9670 -3.9461 -169.1877 -5.7686 -9.1207 0.5923 -5.0192 -7.0618 -1.4532 18.2394 1.8559 3.9651 -0.7760 4.3360 -0.8864 -12.7596 19.9583 1.9722 9.5982 10.8895 -6.4579 -3.8938 -15.6224 10.1229 -31.7100 -8.0117 12.6722 0.0000 0.0000 26.9667 -0.5501 16.9531 -4.5705 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.1280 23.6460 1.5030 22.7681 30.0349 -43.7793 -0.0000 0.0000 1.6651 0.4287 12.5267 -4.7459 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -19.7386 -2.9573 -27.6926 -5.7291 0.0000 -0.0000 17.8652 5.9518 2.4985 1.1049 0.0000 0.0000 3.8702 -12.4523 16.1648 30.6443 0.0000 0.0000 -17.1627 8.8127 -16.0935 -13.4960 0.0000 -0.0000\n 0.1528 69.6724 23.7646 -5.2223 -2.8845 -170.1118 -4.5905 -8.8974 0.3880 -3.5043 -6.3721 -1.0611 15.1210 0.8100 5.9080 -0.9675 3.6444 -0.0442 -13.4864 14.2617 1.4070 8.0695 7.6385 -7.0902 -2.7860 -14.9795 12.6971 -28.8389 -13.3585 13.3881 0.0000 0.0000 18.3801 -3.2243 7.5713 -10.2990 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -3.2810 18.3076 0.3328 22.0497 32.3391 -44.2669 -0.0000 0.0000 3.0197 2.2950 12.9496 -4.4029 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -18.9484 -2.2669 -28.9027 -3.8359 0.0000 -0.0000 14.4101 4.4959 5.5894 0.9022 0.0000 0.0000 -1.9734 -13.3243 13.9156 41.1781 0.0000 0.0000 -7.9113 9.9038 -15.7735 -16.2526 0.0000 -0.0000\n 0.3119 70.2051 23.9782 -4.4639 -1.5971 -168.1176 -2.7067 -8.0382 0.2711 -2.2372 -4.2604 -0.5869 12.3103 0.1535 5.3904 -1.3774 1.8379 0.3772 -14.1088 4.9718 -1.1684 6.0191 2.3789 -8.1891 -0.4678 -13.9292 13.6554 -20.1892 -18.1053 16.6902 0.0000 0.0000 14.7824 -2.7728 -5.2488 -8.4038 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.9045 13.2295 -2.0936 19.6834 29.7623 -42.8035 -0.0000 0.0000 2.5775 3.8510 12.7789 -4.9060 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -16.7192 -0.9204 -29.9006 -2.8575 0.0000 -0.0000 12.6836 2.7255 5.5650 0.3742 0.0000 0.0000 -8.8903 -14.5184 9.6298 51.7659 0.0000 0.0000 -0.0465 11.2778 -17.4212 -14.3130 0.0000 -0.0000\n 0.5090 70.6952 24.1072 -3.3103 -1.4116 -166.3583 -0.8845 -7.5987 0.3220 -1.4465 -2.9582 -0.3321 11.0750 0.0100 5.0747 -1.8844 -0.1126 0.8801 -15.7248 -4.7952 -5.1284 3.2400 -3.2168 -9.6701 3.0132 -12.2276 13.5559 -8.3307 -18.6582 24.5859 0.0000 0.0000 14.4555 0.3715 -13.2659 -0.9176 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.7762 11.7084 -5.0320 14.9547 22.4491 -39.2950 -0.0000 0.0000 1.1247 2.7762 9.9560 -4.9016 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -14.4471 -1.1863 -29.4645 -2.3458 0.0000 -0.0000 11.1630 2.2671 3.6309 -0.1304 0.0000 -0.0000 -15.2760 -16.6880 6.2900 59.8764 0.0000 0.0000 2.4573 12.1839 -19.6830 -12.3046 0.0000 -0.0000\n 0.6513 71.1455 24.1714 -2.4792 -1.6280 -166.7813 0.1666 -7.2567 0.4654 -0.9651 -2.6184 -0.1939 11.0565 -0.3886 6.1694 -2.1718 -1.6288 1.7591 -17.4218 -12.1813 -9.0185 0.6376 -6.4108 -11.0174 5.8376 -10.1212 13.0546 -2.0849 -17.2971 33.3710 0.0000 0.0000 13.9737 1.2103 -15.9779 3.0430 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.7054 11.2116 -7.4949 9.1740 16.8685 -36.3006 -0.0000 0.0000 0.1402 -1.1644 3.1310 -4.1323 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -12.7286 -2.3471 -28.0312 -2.1133 0.0000 -0.0000 9.5027 3.0641 2.8410 -0.4765 0.0000 -0.0000 -20.1713 -18.9889 5.6877 64.1211 0.0000 0.0000 1.6048 12.7143 -20.3131 -11.4937 0.0000 -0.0000\n 0.7126 71.5685 24.1994 -1.9217 -1.6247 -168.4760 0.5416 -6.9693 0.5894 -0.6437 -2.6905 -0.1336 11.4739 -1.4422 7.5920 -2.1719 -2.4948 2.6318 -17.6548 -15.2848 -10.9628 -0.2058 -6.7932 -12.1786 6.3593 -8.7749 13.1224 -1.6529 -17.8367 40.4126 0.0000 0.0000 12.8564 1.8826 -16.4459 1.8810 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -1.8604 9.1777 -8.6142 3.8310 15.6140 -35.1695 -0.0000 -0.0000 -0.0128 -5.4806 -3.5477 -4.8200 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -10.9000 -3.4107 -26.3891 -2.6926 0.0000 -0.0000 8.6700 3.9993 3.2622 -0.7267 0.0000 -0.0000 -23.5396 -20.3117 6.4295 64.3997 0.0000 0.0000 0.7585 12.9587 -18.4927 -10.7362 0.0000 -0.0000\n 0.7209 71.9611 24.2275 -1.4066 -1.4351 -169.9302 0.7702 -7.1207 0.6262 -0.4109 -2.9716 -0.1584 11.8703 -2.5727 8.3775 -2.0641 -2.6679 3.0275 -16.6509 -14.4731 -10.8253 0.8110 -5.8111 -13.3491 5.7691 -9.4189 14.3283 -3.0128 -18.7797 44.9197 0.0000 0.0000 13.4701 4.0124 -11.2468 0.4618 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -3.6757 6.5989 -8.8799 0.6467 14.8460 -35.2233 -0.0000 -0.0000 -0.3272 -7.6746 -5.6100 -7.0794 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -8.8932 -4.0615 -24.4100 -3.7824 0.0000 -0.0000 8.5393 4.4329 2.9630 -0.9710 0.0000 -0.0000 -25.8326 -20.0233 6.2607 61.0272 0.0000 0.0000 0.3028 13.9025 -14.9484 -9.7989 0.0000 -0.0000\n 0.6856 72.3050 24.2853 -1.3267 -0.9985 -170.9925 0.8972 -7.5291 0.5881 -0.3012 -3.3736 -0.2187 12.1653 -3.0274 8.7708 -1.9304 -2.3597 3.0230 -15.8951 -12.1364 -10.0246 2.0846 -4.8103 -14.2846 5.8113 -10.8319 15.8919 -4.4301 -18.7302 47.4602 0.0000 0.0000 16.4398 3.7200 -2.2770 1.4936 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.3743 5.0697 -8.9963 -0.4086 11.6996 -36.3001 -0.0000 -0.0000 -1.6052 -7.7292 -5.0304 -9.4842 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -7.7010 -3.9370 -22.2283 -4.1491 0.0000 -0.0000 7.9481 4.4368 2.0041 -1.2316 0.0000 -0.0000 -27.2270 -18.2074 5.2322 54.1804 0.0000 0.0000 -1.0657 15.5135 -10.6130 -8.9735 0.0000 -0.0000\n 0.6109 72.6102 24.3633 -1.8615 -0.2472 -172.1267 0.8724 -7.6316 0.5752 -0.2871 -3.6329 -0.2548 12.2631 -2.9521 9.1160 -1.8053 -1.9937 2.9732 -15.7685 -10.2959 -9.5017 2.4077 -4.1684 -14.7293 6.4222 -11.0820 16.5988 -6.4119 -20.0523 49.1286 0.0000 0.0000 20.2775 -1.1419 4.2046 3.9956 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.2751 4.1258 -9.0805 -1.5979 8.2162 -38.4032 -0.0000 -0.0000 -3.3788 -7.9110 -6.0543 -10.9060 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -7.7581 -3.0066 -20.4798 -3.2005 0.0000 -0.0000 6.6239 4.2230 1.6658 -1.4340 0.0000 -0.0000 -27.8556 -15.7259 4.5938 44.6480 0.0000 0.0000 -2.4468 15.6138 -7.4461 -7.8935 0.0000 -0.0000\n 0.5291 72.9097 24.4260 -2.5166 0.3745 -173.2393 0.9684 -7.4147 0.5851 -0.2330 -3.5401 -0.2489 11.9396 -3.0367 9.1331 -1.8413 -1.8706 2.9893 -15.7379 -9.2705 -9.2469 2.2847 -3.9323 -14.6069 6.4958 -10.2848 16.2261 -8.4053 -23.7919 50.4602 0.0000 0.0000 23.6019 -5.2208 5.5264 5.4018 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.3286 2.8023 -9.1683 -4.0074 7.0206 -41.1502 -0.0000 -0.0000 -4.6650 -9.3424 -8.5534 -11.2236 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.3150 -2.0674 -19.3485 -1.6272 0.0000 -0.0000 5.2891 3.9428 1.8325 -1.5290 0.0000 -0.0000 -28.1654 -13.6298 4.4352 34.1743 0.0000 0.0000 -1.6893 14.3351 -8.2264 -8.0016 0.0000 -0.0000\n 0.4594 73.2335 24.4575 -2.7498 0.3891 -174.2445 1.3457 -7.3500 0.5797 -0.0876 -3.1655 -0.2375 11.3526 -3.4405 8.5844 -2.0432 -1.9764 2.9561 -15.4915 -8.8436 -8.9985 2.6244 -4.2753 -14.0244 5.7587 -9.5719 15.5754 -9.3661 -27.4511 51.6066 0.0000 0.0000 25.6439 -4.4844 3.4538 4.3645 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -6.1212 1.4437 -9.3901 -6.3430 7.3810 -43.9963 -0.0000 -0.0000 -5.0906 -10.2462 -10.1565 -11.2314 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -8.4146 -1.8715 -18.5267 -0.2715 0.0000 -0.0000 4.0829 3.7268 1.9185 -1.5640 0.0000 -0.0000 -28.2133 -12.4147 4.1391 24.2440 0.0000 0.0000 1.2101 14.7822 -13.0224 -11.2793 0.0000 -0.0000\n 0.3858 73.6077 24.4605 -2.3846 -0.2194 -175.5187 1.7915 -7.7203 0.5718 0.0967 -2.7227 -0.2416 10.9629 -3.7795 7.7267 -2.1282 -2.1693 2.8460 -14.9383 -9.1195 -8.7974 3.4658 -4.9945 -13.2237 4.9896 -8.9922 15.0260 -9.1009 -28.9202 53.0153 0.0000 0.0000 26.1074 -1.8467 1.5551 3.2351 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -6.1060 0.5960 -9.7854 -7.4132 7.6130 -46.9845 -0.0000 -0.0000 -4.8705 -9.7655 -9.8936 -11.1443 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -7.4687 -2.5055 -17.7068 0.3210 0.0000 0.0000 2.8300 3.4795 2.2258 -1.6020 0.0000 -0.0000 -27.9388 -12.0369 3.3529 16.0769 0.0000 0.0000 4.8993 17.6560 -18.3957 -15.0226 0.0000 -0.0000\n 0.2843 74.0179 24.4506 -1.8465 -0.8845 -177.3520 1.9321 -8.0219 0.5565 0.1880 -2.3663 -0.2632 11.0976 -3.9290 6.8676 -1.9299 -2.3406 2.7304 -14.1045 -9.9104 -8.6533 4.3818 -5.5422 -12.3757 4.4607 -8.1036 14.4591 -8.1570 -29.0058 54.4054 0.0000 0.0000 25.5420 -1.1040 1.5793 3.0156 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.2834 0.2090 -10.1358 -7.3709 7.7694 -50.2973 -0.0000 -0.0000 -4.4916 -8.8780 -8.9055 -10.8057 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.8673 -3.2398 -16.7203 0.1524 0.0000 0.0000 1.8222 3.0452 3.0831 -1.5936 0.0000 -0.0000 -28.0170 -11.9064 2.3622 11.0273 0.0000 0.0000 7.1002 19.9815 -20.6393 -15.3072 0.0000 -0.0000\n 0.1602 74.4370 24.4383 -1.3557 -1.4040 -179.6835 1.9895 -7.9412 0.4981 0.2145 -2.1696 -0.2873 11.4983 -4.0788 6.0663 -1.6265 -2.4621 2.5878 -13.0611 -10.5759 -8.2816 5.2839 -5.7283 -11.4652 3.9623 -7.3806 13.9541 -7.2803 -29.0479 55.0255 0.0000 0.0000 24.6971 -1.5575 2.4064 2.7973 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -6.3536 0.0399 -10.2212 -6.7132 8.5149 -53.5489 -0.0000 -0.0000 -4.3628 -8.2613 -8.0058 -10.5293 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.1948 -3.7340 -15.5575 -0.2438 0.0000 -0.0000 1.2042 2.5055 4.1812 -1.4569 0.0000 -0.0000 -28.8020 -11.8552 1.9883 9.3726 0.0000 0.0000 7.0694 20.3138 -19.7876 -14.0770 0.0000 -0.0000\n 0.0254 74.8792 24.4198 -0.7643 -2.1335 177.4425 2.3109 -7.8201 0.4345 0.3356 -2.1121 -0.3196 11.8289 -4.2807 5.3382 -1.3627 -2.5667 2.4173 -11.9196 -10.7374 -7.5087 6.2558 -5.8404 -10.3528 3.4076 -7.2311 13.5718 -6.8625 -29.5936 54.5278 0.0000 0.0000 23.8786 -1.6326 2.6902 2.4322 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.1003 0.0366 -10.0678 -5.3975 9.3446 -56.2488 -0.0000 -0.0000 -4.4935 -7.5077 -6.7091 -10.7544 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -2.5335 -4.2742 -14.1142 -0.2828 0.0000 -0.0000 0.4597 1.9614 5.3559 -1.2353 0.0000 -0.0000 -29.6378 -12.2638 1.8295 9.9470 0.0000 0.0000 6.2026 20.1946 -18.2152 -13.6172 0.0000 -0.0000\n -0.1216 75.3720 24.3938 -0.1510 -3.1949 173.9694 2.6891 -7.8046 0.3607 0.4710 -2.0644 -0.3559 12.2650 -4.5314 4.6712 -1.0401 -2.6442 2.2620 -10.8463 -10.6582 -6.4885 7.1690 -6.0600 -8.9379 2.8770 -7.2439 13.1273 -6.7171 -30.5324 53.2730 0.0000 0.0000 22.9051 -2.6074 2.4694 2.2094 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.7144 0.2205 -9.8340 -3.2962 9.3824 -58.3254 -0.0000 -0.0000 -4.5005 -6.3795 -4.9168 -11.2020 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.8436 -4.8814 -12.4564 0.1305 0.0000 0.0000 -0.6391 1.2268 6.9887 -1.0426 0.0000 -0.0000 -29.7738 -13.1835 0.7232 11.1416 0.0000 0.0000 5.5999 20.8739 -18.4214 -13.5316 0.0000 -0.0000\n -0.2822 75.9187 24.3604 0.0907 -4.4009 170.1016 2.6475 -7.7281 0.2599 0.4616 -1.9472 -0.3947 12.9769 -4.8566 3.9077 -0.6263 -2.6829 2.0903 -9.8415 -10.7013 -5.3921 7.9686 -6.2190 -7.3246 2.4982 -7.2387 12.6121 -6.5604 -31.1822 51.6542 0.0000 0.0000 21.5558 -5.2556 2.1496 1.6489 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -5.4324 0.5154 -9.6175 -0.8085 9.0688 -59.8564 -0.0000 -0.0000 -4.0047 -5.1655 -3.2383 -11.2757 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.6039 -5.3723 -10.8429 0.7393 0.0000 0.0000 -1.6735 0.2271 9.1689 -0.8826 0.0000 -0.0000 -29.2790 -14.2307 -2.4001 11.9324 0.0000 0.0000 5.4000 21.5433 -21.5299 -13.0316 0.0000 -0.0000\n -0.4414 76.5355 24.3115 0.1045 -5.7543 166.0585 2.4447 -7.6063 0.1819 0.4268 -1.7100 -0.4287 13.5747 -5.2769 3.0219 -0.2556 -2.7496 1.8868 -8.7226 -10.8403 -4.3086 8.8530 -6.1777 -5.7668 2.3773 -7.5451 12.1926 -6.4971 -30.9804 49.3215 0.0000 0.0000 20.1221 -7.3896 1.8058 0.6474 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -5.1263 0.7615 -9.4881 1.4238 9.8176 -60.8471 -0.0000 -0.0000 -3.0009 -3.7884 -1.7362 -10.8168 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 2.1159 -5.8116 -9.1509 1.2695 0.0000 0.0000 -2.5776 -0.7486 11.4015 -0.6998 0.0000 -0.0000 -27.9160 -15.2232 -8.2496 12.0073 0.0000 0.0000 5.1359 21.6998 -26.2530 -12.3273 0.0000 -0.0000\n -0.5782 77.2349 24.2278 -0.0704 -7.5107 161.7040 2.3142 -7.6432 0.1145 0.4575 -1.4112 -0.4506 13.8159 -5.7672 2.3482 0.0542 -2.8999 1.7600 -7.5311 -10.8583 -3.3285 9.8037 -6.1092 -4.4394 2.5008 -8.0209 11.8895 -6.8211 -30.1020 45.6319 0.0000 0.0000 19.1749 -7.6258 1.6363 0.0363 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -4.7889 0.9632 -9.5542 3.3217 12.0229 -61.3508 -0.0000 -0.0000 -1.7569 -2.1278 -0.2598 -10.1056 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 3.9276 -6.4393 -6.7797 1.6765 0.0000 0.0000 -3.8103 -1.5369 13.3619 -0.5275 0.0000 -0.0000 -25.2418 -16.5265 -15.0993 11.4326 0.0000 0.0000 5.0716 21.8137 -30.7588 -11.2014 0.0000 -0.0000\n -0.6879 77.9867 24.1114 -0.7840 -9.5196 156.9779 1.9616 -7.4692 -0.0932 0.2747 -1.3029 -0.4670 14.2724 -6.4598 1.9990 0.3697 -3.0548 1.7543 -6.6918 -10.7770 -2.5301 10.4825 -6.2150 -3.2867 2.6237 -8.5834 11.6392 -7.5105 -28.5139 40.8568 0.0000 0.0000 18.6113 -7.6744 1.6488 -0.1745 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -4.7369 1.5960 -9.7586 5.3153 14.0008 -61.4754 -0.0000 -0.0000 -0.5357 -0.7963 1.1311 -9.4895 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 5.7270 -7.1784 -3.6686 1.8521 0.0000 0.0000 -5.1700 -2.4278 15.1897 -0.4210 0.0000 -0.0000 -21.5115 -18.2218 -20.1220 10.4927 0.0000 0.0000 5.6562 21.7195 -33.3773 -9.5249 0.0000 -0.0000\n -0.7918 78.7185 24.0046 -2.2991 -10.8349 152.3960 0.9821 -5.9718 -0.4139 -0.3812 -1.3468 -0.4814 15.4369 -7.8572 1.3707 0.5031 -3.2477 1.6911 -6.5641 -10.7647 -1.9394 10.8766 -6.3593 -2.3312 2.2728 -10.2862 11.4020 -8.2251 -25.3964 36.0337 0.0000 0.0000 17.8310 -8.8182 1.0706 -0.8640 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -5.0286 3.4217 -9.6949 7.5782 13.7219 -61.3254 -0.0000 0.0000 0.5250 -0.0155 2.4138 -9.0617 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 6.6414 -7.4392 -0.5623 1.8126 0.0000 0.0000 -5.9524 -3.6371 16.6485 -0.3922 0.0000 -0.0000 -18.5771 -19.3629 -22.4058 10.5257 0.0000 0.0000 5.3123 20.6675 -32.8112 -8.0861 0.0000 -0.0000\n -0.9417 79.3747 23.9528 -4.1624 -10.2463 148.6254 -0.2684 -2.4495 -0.6970 -1.3090 -0.6944 -0.4007 16.5410 -10.3545 0.0449 0.1137 -3.8132 1.4804 -7.0246 -10.5588 -1.7748 11.4420 -6.3405 -1.9921 0.9690 -13.4871 10.7629 -9.0189 -21.3131 31.4858 0.0000 0.0000 17.0399 -10.1394 -0.0776 -2.1139 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -5.3228 6.4474 -9.1429 9.8272 11.5320 -60.9585 -0.0000 0.0000 1.2910 1.1088 3.4271 -8.6681 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 5.7865 -6.2383 1.6301 2.2185 0.0000 0.0000 -6.4898 -5.0474 17.6152 -0.4903 0.0000 -0.0000 -18.5811 -18.4438 -22.9739 13.4107 0.0000 0.0000 1.9907 18.1845 -29.4228 -6.7974 0.0000 -0.0000\n -1.1882 79.9448 23.9459 -5.7208 -7.7702 144.9831 -0.8561 1.2811 -0.8855 -1.7605 1.2252 -0.1115 15.8945 -12.3055 -1.2685 -0.6514 -4.8405 1.3845 -7.7111 -9.6314 -2.5252 12.1783 -6.3483 -2.6635 -1.0226 -15.9225 9.0381 -10.5562 -19.1766 26.7279 0.0000 0.0000 17.0432 -11.0453 0.0211 -3.3633 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -5.2609 9.1078 -8.6866 11.6093 9.9127 -60.5825 -0.0000 0.0000 1.7105 2.7754 3.8601 -8.3005 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 2.8108 -3.3084 3.0466 4.2739 0.0000 0.0000 -7.6733 -6.7835 19.2891 -0.7163 0.0000 -0.0000 -20.7400 -15.7236 -22.3001 18.0538 0.0000 0.0000 -2.8459 14.9356 -25.1333 -5.4815 0.0000 -0.0000\n -1.5357 80.4428 23.9678 -6.1452 -4.4125 139.5885 -0.5223 3.5807 -0.7938 -1.4743 2.5049 0.1453 13.9119 -10.6910 -1.2294 -1.2955 -5.3429 1.5615 -8.7949 -8.0780 -4.2186 12.1915 -6.6306 -4.0504 -2.1721 -15.5618 6.8891 -12.9901 -20.1189 21.8190 0.0000 0.0000 17.3785 -11.8716 2.0664 -4.5436 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -4.9698 9.8594 -9.1044 12.3879 9.9291 -60.1828 -0.0000 0.0000 1.8712 3.6830 3.8227 -8.0935 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -1.5803 0.8261 5.1255 8.0855 0.0000 0.0000 -8.5313 -9.3784 22.5304 -0.7833 0.0000 -0.0000 -21.5048 -12.9158 -18.9322 20.5988 0.0000 0.0000 -5.9058 12.4156 -21.6087 -5.1010 0.0000 -0.0000\n -1.9435 80.8764 24.0150 -5.5957 -1.2373 131.9837 -0.0216 4.6589 -0.5450 -1.1381 1.9654 0.2453 12.5645 -6.3021 0.5444 -1.7019 -4.3385 1.7531 -10.4285 -5.9450 -5.7703 10.9428 -7.0588 -5.3174 -1.5166 -12.9959 5.8957 -14.5410 -21.8901 18.2385 0.0000 0.0000 16.5695 -12.0248 3.5513 -5.9340 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -4.7158 9.4664 -9.9547 11.8191 9.8990 -59.3956 -0.0000 0.0000 1.9211 3.1373 3.6216 -7.8264 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -6.5739 4.7083 7.1902 11.7186 0.0000 0.0000 -6.8928 -12.6301 26.3787 -0.4363 0.0000 -0.0000 -20.1333 -10.8301 -13.8414 20.1474 0.0000 0.0000 -7.0996 10.4712 -17.9140 -5.4489 0.0000 -0.0000\n -2.3276 81.2470 24.0924 -5.2197 1.0964 124.1095 0.1425 4.9061 -0.3755 -1.0903 0.7698 0.2527 12.1846 -2.0559 2.2419 -2.0680 -2.4899 1.5191 -12.3174 -3.7103 -6.0476 9.1118 -7.2154 -5.9126 -0.2531 -11.1188 6.2037 -13.3311 -21.2645 17.6267 0.0000 0.0000 14.8280 -11.2253 1.7855 -6.6999 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.4760 9.7156 -9.9581 10.3969 8.2180 -58.4521 -0.0000 0.0000 2.1059 2.6409 2.8013 -6.9332 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -10.8621 6.9374 6.8569 12.7647 0.0000 0.0000 -3.4740 -15.2546 27.6026 -0.1178 0.0000 -0.0000 -18.5001 -9.6927 -9.4530 18.4590 0.0000 0.0000 -7.6787 8.3844 -13.5242 -5.6600 0.0000 -0.0000\n -2.6209 81.5382 24.2051 -6.1437 2.9319 118.2337 -0.4762 4.8700 -0.3274 -1.4722 0.0033 0.1847 12.5067 0.3198 2.1637 -2.5297 -1.2605 0.8708 -14.3081 -2.3266 -5.2467 7.8404 -6.8834 -5.8257 0.0794 -11.8681 6.9417 -11.4507 -17.5130 18.2369 0.0000 0.0000 14.1543 -10.0029 -1.1560 -5.3425 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -4.3576 11.0594 -8.9945 9.0688 5.7892 -57.9869 -0.0000 0.0000 2.4851 3.4598 1.0123 -5.6235 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -13.3787 7.1224 3.1461 10.1251 0.0000 0.0000 -1.7968 -15.8177 23.7400 -0.2567 0.0000 -0.0000 -18.3210 -10.0294 -5.9419 16.8832 0.0000 0.0000 -7.7718 6.7898 -10.7085 -5.6568 0.0000 -0.0000\n -2.8037 81.7721 24.3375 -7.6261 4.4844 114.3007 -1.5984 5.6530 -0.3199 -2.1212 -0.0394 0.1184 13.3022 0.3536 0.8053 -2.8860 -1.2372 0.2712 -16.1447 -1.8865 -4.3326 7.5291 -6.3239 -5.4184 -0.6700 -13.6382 7.4832 -12.2069 -13.5246 17.5601 0.0000 0.0000 15.4834 -9.5213 -1.7771 -2.7287 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -4.5026 12.4476 -8.1418 8.3065 4.9461 -58.0590 -0.0000 0.0000 2.6947 4.0001 -0.8293 -5.1844 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -13.8806 6.1423 -1.3289 4.9881 0.0000 0.0000 -2.6902 -13.1952 16.9126 -0.4107 0.0000 -0.0000 -18.2203 -11.2520 -2.0460 14.4906 0.0000 0.0000 -6.8708 6.3884 -10.4809 -5.7725 0.0000 -0.0000\n -2.9265 82.0110 24.4661 -8.2181 5.5197 110.3190 -2.4446 7.3355 -0.1951 -2.5884 0.2964 0.1194 14.1079 -0.7211 -0.2488 -2.9953 -1.7023 0.0289 -17.5289 -1.8514 -3.9750 7.5783 -5.8712 -5.1702 -1.5964 -14.2368 7.7617 -15.3907 -11.3046 15.9808 0.0000 0.0000 18.0126 -11.0583 -0.4811 -0.6541 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -4.6824 13.0577 -8.1617 7.8976 6.1046 -58.2570 -0.0000 0.0000 2.3805 2.0770 -1.3940 -6.3434 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -13.8342 5.7725 -2.4743 1.4043 0.0000 0.0000 -3.6421 -9.3675 11.6170 -0.3962 0.0000 -0.0000 -15.9271 -11.8401 1.9458 9.9697 0.0000 0.0000 -5.0019 6.4203 -9.9324 -5.8775 0.0000 -0.0000\n -3.0377 82.2786 24.5727 -7.9921 5.6990 105.2632 -2.5550 8.4117 0.1236 -2.6618 0.5327 0.1451 14.5792 -1.0626 -0.5702 -3.0195 -1.8887 -0.0261 -18.3767 -1.9430 -4.1666 7.3823 -5.3989 -5.3436 -1.9345 -14.0913 7.8814 -18.2426 -9.4688 15.3632 0.0000 0.0000 20.4145 -13.6743 0.8801 0.4492 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -4.6268 13.0647 -8.6451 7.4786 7.6501 -58.6852 -0.0000 0.0000 1.8208 -1.3168 -0.8382 -7.9306 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -14.4660 6.5445 -1.9008 2.1127 0.0000 0.0000 -3.1637 -7.1831 11.7331 -0.2502 0.0000 -0.0000 -11.4166 -11.6222 4.2656 3.9346 0.0000 0.0000 -2.9332 5.9815 -6.2369 -5.7689 0.0000 -0.0000\n -3.1633 82.5475 24.6233 -7.5201 5.6380 100.1735 -2.2096 8.6192 0.3465 -2.4396 0.8448 0.1720 14.3925 -0.6663 -0.9619 -3.0767 -1.8182 -0.2131 -18.6001 -1.9308 -4.3834 7.0349 -4.4576 -5.7653 -1.9081 -14.2052 7.8437 -19.4361 -6.8706 16.3727 0.0000 0.0000 22.2332 -15.2219 1.5663 1.0675 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.3258 12.7897 -8.9444 7.0180 8.7355 -59.8334 -0.0000 0.0000 1.6398 -3.1816 -0.7837 -8.7143 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -16.2054 8.2347 -1.6140 5.9873 0.0000 0.0000 -1.5354 -6.0980 14.9423 0.0422 0.0000 0.0000 -7.5197 -10.9903 5.5930 -0.6676 0.0000 -0.0000 -1.4966 5.1217 -1.6950 -5.5554 0.0000 -0.0000\n -3.2861 82.8109 24.6284 -6.7054 5.6030 96.0019 -1.7508 8.8611 0.2877 -2.1676 1.3338 0.1842 13.9839 -0.4359 -1.8328 -3.0915 -1.6781 -0.5763 -18.3842 -1.3519 -4.0933 6.8489 -2.8628 -5.8209 -2.2367 -14.4258 7.7112 -20.1834 -4.3345 17.8519 0.0000 0.0000 23.8823 -15.1195 1.7145 1.7506 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.0431 12.4225 -9.1869 6.6868 9.5876 -61.5638 -0.0000 0.0000 1.9077 -2.6512 -1.6969 -8.9686 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -18.1103 10.6847 -1.2366 10.3779 0.0000 0.0000 0.0303 -4.1476 16.0072 -0.0252 0.0000 -0.0000 -5.6053 -9.8452 8.0076 -2.2108 0.0000 -0.0000 -1.0699 4.4192 0.2998 -5.3945 0.0000 -0.0000\n -3.3747 83.0515 24.6296 -5.9507 5.4634 92.1949 -1.5698 9.1271 0.1665 -2.0557 1.5309 0.1544 13.9798 -0.4777 -2.6987 -3.0084 -1.3266 -0.9336 -18.0072 0.1517 -3.1070 6.8750 -0.9093 -4.9968 -3.0134 -14.2952 7.6636 -21.7069 -2.9856 18.8162 0.0000 0.0000 25.7416 -14.5436 1.6614 2.4069 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -3.9230 11.9109 -9.5850 6.6573 10.5354 -63.4763 -0.0000 0.0000 2.1488 -1.4758 -2.5992 -9.2732 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -19.6164 12.8103 -0.3376 14.0511 0.0000 0.0000 1.1705 -1.1011 13.3333 -0.5896 0.0000 -0.0000 -4.9014 -8.8111 11.7602 -1.5753 0.0000 -0.0000 -1.5727 3.8266 0.2880 -5.1213 0.0000 -0.0000\n -3.4086 83.2567 24.6458 -5.5180 5.1798 87.8056 -1.6798 9.0881 0.1934 -2.0888 1.2084 0.0716 14.2160 -0.3926 -3.1159 -2.9075 -0.6936 -1.1731 -17.5607 2.4815 -1.5509 7.1294 0.9126 -3.4678 -3.6242 -13.9157 7.8741 -23.6320 -2.4839 19.4803 0.0000 0.0000 27.7232 -14.5349 1.5456 2.8646 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.9101 11.2864 -9.7399 7.1416 11.4852 -65.6255 -0.0000 0.0000 2.0935 -0.9613 -2.7803 -9.4566 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -20.6613 14.0342 0.5387 16.5812 0.0000 0.0000 2.8669 1.3164 8.8202 -0.9795 0.0000 -0.0000 -4.2665 -8.3111 15.4950 -0.2063 0.0000 -0.0000 -2.7119 3.0681 0.8841 -4.7981 0.0000 -0.0000\n -3.3935 83.4192 24.6629 -5.3267 4.9428 82.8159 -1.8833 8.7421 0.2901 -2.1400 0.7144 -0.0198 14.2017 -0.0875 -3.2588 -2.8957 -0.0123 -1.3836 -17.1204 4.8732 0.2367 7.6379 2.4048 -1.8234 -3.8676 -13.6104 8.3020 -24.9881 -2.0705 20.3750 0.0000 0.0000 29.6064 -14.6713 1.4936 3.4127 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.9470 10.7499 -9.3354 8.2005 11.9361 -68.1356 -0.0000 0.0000 1.9541 -0.5368 -2.3054 -9.0812 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -21.1779 14.7489 -0.0464 17.4909 0.0000 0.0000 4.9478 1.6569 5.3802 -1.0085 0.0000 -0.0000 -3.5228 -8.1894 18.4122 1.2817 0.0000 0.0000 -4.0875 2.3246 2.9241 -4.7942 0.0000 -0.0000\n -3.3436 83.5248 24.6638 -5.2834 4.6278 77.8305 -1.8438 8.3551 0.3612 -2.1248 0.4096 -0.0809 13.8911 0.2560 -3.4855 -2.9718 0.4076 -1.5994 -16.7686 6.5609 1.8163 8.0877 3.7664 -0.3645 -4.2931 -13.3833 8.5243 -25.5503 -1.8381 21.5541 0.0000 0.0000 31.4279 -13.8876 1.5792 4.2572 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -3.9274 10.3492 -8.8297 9.3842 11.7653 -70.6288 -0.0000 0.0000 1.9534 0.4702 -1.4356 -8.3291 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -20.8023 15.2991 -2.6056 16.9036 0.0000 0.0000 6.0718 1.2861 4.7663 -1.3492 0.0000 -0.0000 -2.6335 -8.2565 21.2194 2.8089 0.0000 0.0000 -5.4335 1.8205 5.0690 -4.9788 0.0000 -0.0000\n -3.2872 83.5848 24.6432 -5.0413 4.4294 73.0706 -1.8789 8.2444 0.4640 -2.1590 0.2631 -0.1158 13.7253 0.5753 -3.8377 -3.0758 0.5815 -1.7792 -16.6711 7.6512 3.0379 8.0563 5.2371 1.0034 -5.2929 -13.2552 8.2646 -25.8503 -1.8508 22.8065 0.0000 0.0000 33.4720 -12.0684 1.7302 5.1959 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.8492 9.9439 -8.7366 10.2316 11.6538 -72.6334 -0.0000 0.0000 2.0880 1.5298 -0.5841 -7.6624 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -20.2158 15.7981 -5.6662 15.9171 0.0000 0.0000 5.8598 1.8806 6.3068 -2.3097 0.0000 -0.0000 -1.9812 -8.1820 24.3866 4.3908 0.0000 0.0000 -6.7582 1.3645 6.6428 -4.8455 0.0000 -0.0000\n -3.2238 83.6397 24.6073 -4.3463 4.3521 68.3007 -2.1328 8.2015 0.5885 -2.3531 0.1831 -0.1316 13.9155 0.9229 -4.1297 -3.2075 0.7753 -1.9092 -17.0689 8.9598 4.1846 7.6130 6.7537 2.3873 -6.4845 -13.2517 7.8474 -26.4943 -1.6283 23.9099 0.0000 0.0000 36.0587 -10.0749 1.8906 6.0017 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.8486 9.5246 -8.9349 10.8320 12.1748 -74.1114 -0.0000 0.0000 2.4208 1.8292 -0.1967 -7.0350 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -19.9888 16.2857 -7.8630 15.2891 0.0000 0.0000 5.4075 2.6030 7.6899 -3.1361 0.0000 -0.0000 -1.4667 -7.5770 27.2549 5.5736 0.0000 0.0000 -7.9298 0.7911 8.5432 -4.4796 0.0000 -0.0000\n -3.1450 83.7153 24.5587 -3.1747 4.3013 63.3298 -2.4530 7.8693 0.6390 -2.5776 0.0819 -0.1477 14.1441 1.5252 -4.3095 -3.4487 1.1768 -2.0530 -18.0536 10.7397 5.5617 7.1215 8.0984 3.7320 -7.3761 -13.2614 7.7354 -27.6636 -1.0124 24.6675 -0.0000 0.0000 39.2831 -8.5018 2.2108 6.6941 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -3.9605 9.0930 -9.0622 11.4466 12.9515 -75.2543 -0.0000 0.0000 3.1485 1.5633 -0.1625 -6.1647 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -20.3116 16.7573 -10.0387 15.1300 0.0000 0.0000 5.9223 2.1110 7.4558 -3.1290 0.0000 -0.0000 -0.9890 -6.2777 29.3617 6.0884 0.0000 0.0000 -8.7540 0.2792 11.3538 -4.3344 0.0000 -0.0000\n -3.0566 83.7930 24.4960 -1.7796 4.0590 58.2432 -2.4416 7.2151 0.5508 -2.5976 -0.1542 -0.2047 13.9521 2.5506 -4.4237 -3.8334 1.7675 -2.2789 -19.4014 12.4341 7.1120 6.6167 9.2400 4.9970 -8.0056 -13.0898 7.8292 -29.1171 -0.5345 25.1156 -0.0000 0.0000 42.9131 -7.2026 2.8757 7.3892 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.9407 8.5174 -9.0676 11.9560 13.2333 -76.1119 -0.0000 0.0000 4.2023 1.5477 0.1983 -5.1547 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -20.9724 16.9917 -13.3928 15.4252 0.0000 0.0000 6.7831 1.1158 5.5342 -2.5278 0.0000 -0.0000 -0.6827 -4.6731 30.9841 6.6446 0.0000 0.0000 -9.5456 0.0043 14.6311 -4.3064 0.0000 -0.0000\n -2.9742 83.8492 24.4185 -0.2761 3.7306 53.1565 -2.1993 6.4009 0.3721 -2.4433 -0.4578 -0.2719 13.3479 3.7406 -4.5870 -4.2605 2.4329 -2.5264 -20.8953 13.7010 8.5905 5.8273 10.2926 6.2046 -8.4533 -12.7866 7.8324 -30.7526 -0.3641 25.6264 -0.0000 0.0000 46.5447 -6.0071 3.8741 8.1900 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.6911 7.7320 -9.0860 12.1585 13.0435 -76.5170 -0.0000 0.0000 5.0713 2.0522 1.1280 -4.3837 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -21.9844 16.7723 -17.2295 16.0600 0.0000 0.0000 6.6976 1.0662 2.0928 -2.0054 0.0000 -0.0000 -1.0897 -3.3152 32.8071 8.2730 0.0000 0.0000 -10.8309 -0.1843 17.5847 -4.0338 0.0000 -0.0000\n -2.8945 83.8614 24.3347 1.0771 3.6041 48.1368 -2.0362 5.4214 0.1848 -2.2981 -0.7702 -0.3420 12.6775 4.4800 -4.8800 -4.5648 3.0830 -2.7555 -22.5831 14.7525 9.9368 4.6405 11.2359 7.2943 -8.4899 -12.3910 7.9505 -32.7860 -0.2694 26.3261 -0.0000 0.0001 49.9648 -5.1153 5.0885 9.0891 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.4461 6.8819 -9.0863 12.1523 13.1700 -76.3282 -0.0000 0.0000 5.3561 2.6133 1.8846 -3.9379 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -23.0195 15.6447 -20.3886 16.3088 0.0000 0.0000 5.9771 1.3035 -2.3997 -1.7868 0.0000 -0.0000 -2.1875 -2.7269 34.7729 10.9747 0.0000 0.0000 -12.5432 -0.3676 20.2420 -3.6834 0.0000 -0.0000\n -2.8033 83.8059 24.2499 2.0938 3.6305 43.2759 -1.9245 4.4370 0.0502 -2.1554 -1.0101 -0.4241 12.0876 4.3653 -5.3496 -4.7251 3.6305 -2.9803 -24.4552 15.5967 11.0934 3.2063 11.9054 8.1044 -8.1494 -11.7278 8.3802 -35.1031 -0.5121 26.9142 -0.0000 0.0001 53.1564 -4.6519 6.3152 9.8545 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.2718 6.0866 -9.0640 12.0476 14.1581 -75.6746 -0.0000 0.0000 5.3445 2.5656 1.7966 -3.6405 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -23.5736 13.4407 -22.8250 15.8251 0.0000 0.0000 5.2894 0.5489 -5.9192 -1.5748 0.0000 -0.0000 -3.2363 -2.8154 36.0007 13.9023 0.0000 0.0000 -14.2424 -0.2708 23.0538 -3.4752 0.0000 -0.0000\n -2.7058 83.6644 24.1583 2.9008 3.5311 38.7569 -1.6835 3.6787 -0.0453 -1.9211 -1.0767 -0.4844 11.5168 3.7480 -5.9902 -4.8858 3.9538 -3.1802 -26.2622 15.8901 11.8199 1.7413 12.2486 8.4896 -7.9900 -10.8639 8.6978 -37.0684 -1.6167 27.2552 -0.0000 0.0001 56.0243 -4.3028 7.2285 10.2714 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -2.9680 5.3488 -9.2399 11.7819 15.7483 -74.8367 -0.0000 0.0000 5.5696 2.1243 1.3037 -3.5832 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -23.5920 10.4478 -24.2183 15.0040 0.0000 0.0000 4.7728 -0.1264 -6.6657 -1.3744 0.0000 -0.0000 -3.8132 -3.1731 36.0661 16.7483 0.0000 0.0000 -15.9479 0.4866 25.4301 -3.1519 0.0000 -0.0000\n -2.6157 83.4375 24.0609 3.6577 3.3544 34.5722 -1.3685 2.8564 -0.0650 -1.7301 -1.0215 -0.5220 11.1263 3.2342 -6.6256 -5.1663 4.0716 -3.3259 -27.9937 15.8015 12.1313 0.3403 12.3566 8.4603 -8.2551 -10.2643 8.7027 -38.4875 -3.2428 27.6225 -0.0000 0.0001 58.4046 -3.7309 7.6977 10.4594 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -2.5334 4.9299 -9.7916 11.4258 16.9457 -73.8337 -0.0000 0.0000 5.9104 2.0236 1.3110 -3.9332 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -23.4441 7.0717 -23.2657 14.1056 0.0000 0.0000 4.6444 1.1314 -5.6426 -1.2694 0.0000 -0.0000 -4.0191 -3.7598 35.1543 19.6297 0.0000 0.0000 -17.7615 2.0674 26.5104 -2.8455 0.0000 -0.0000\n -2.5317 83.1441 23.9819 4.4208 3.5052 30.3996 -1.2609 1.5478 0.0155 -1.7557 -1.1613 -0.5680 11.1304 2.8287 -7.0081 -5.4977 4.2670 -3.4245 -30.0398 15.8768 12.5780 -1.1270 12.1904 8.2718 -8.5454 -10.0128 9.1209 -39.9145 -4.7663 27.9679 -0.0000 0.0001 60.4164 -3.1055 8.0547 10.6695 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -2.1927 5.1105 -10.4629 11.3294 16.7874 -72.6040 -0.0000 0.0000 5.8130 1.9926 1.8478 -4.3908 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -23.7038 3.9083 -19.5790 13.5549 0.0000 0.0000 4.6584 3.3439 -5.1370 -0.9723 0.0000 -0.0000 -4.0912 -4.8533 33.5722 22.5121 0.0000 0.0000 -19.2140 4.5567 26.4241 -3.3663 0.0000 -0.0000\n -2.4404 82.7906 23.9464 5.0786 3.8598 25.8822 -1.2658 0.0221 0.1636 -1.8039 -1.6526 -0.6678 11.2513 2.2705 -6.9564 -5.7522 4.6777 -3.4320 -32.2250 15.9141 13.4725 -2.9725 11.4335 8.3422 -8.3615 -9.4361 10.4963 -41.6242 -6.7114 27.7738 -0.0000 0.0001 62.1669 -3.0157 8.7012 10.8942 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.8896 5.4748 -10.9474 11.7054 15.4940 -71.3936 -0.0000 0.0000 5.2758 1.1106 2.2418 -4.4218 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -24.5002 1.6650 -15.3427 14.2344 0.0000 0.0000 4.1126 3.8205 -4.9629 -0.5921 0.0000 -0.0000 -3.8628 -6.3695 31.4224 25.4365 0.0000 0.0000 -19.5342 7.8292 25.6973 -4.8848 0.0000 -0.0000\n -2.3429 82.3544 23.9473 5.4735 3.5585 21.0416 -1.0052 -0.9046 0.2317 -1.5277 -2.0278 -0.7075 10.9392 1.8874 -6.3987 -5.8694 4.9282 -3.2751 -33.4739 14.8090 14.1551 -5.2838 9.8693 8.9649 -7.6489 -8.0725 12.1093 -42.9075 -10.0549 26.9240 -0.0000 0.0001 63.1238 -3.7571 9.6083 10.9555 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.4238 5.1369 -11.4072 12.3167 14.6050 -70.6242 -0.0000 0.0000 4.9500 -0.1097 2.5705 -4.1603 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -25.2563 0.6809 -12.8957 16.4013 0.0000 0.0000 2.5625 2.7215 -3.1420 -0.3563 0.0000 -0.0000 -2.9154 -7.6565 28.8276 28.5727 0.0000 0.0000 -17.9541 11.0951 23.3842 -6.6941 0.0000 -0.0000\n -2.2684 81.8244 23.9568 5.5922 2.2438 16.1504 -0.5558 -0.9144 0.2231 -1.1442 -1.7983 -0.5978 10.3025 2.2160 -5.4331 -5.8826 4.6435 -2.9345 -33.2079 11.9567 13.8281 -7.5374 7.6841 9.9776 -6.5334 -6.4933 13.0572 -42.9516 -14.2596 26.3089 -0.0000 0.0001 62.2761 -4.8262 10.4349 10.7521 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.0743 4.0563 -12.1355 12.7032 15.2203 -70.2453 -0.0000 0.0000 5.0479 0.1351 3.6534 -4.3628 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -25.5258 0.3676 -10.7257 19.3284 0.0000 0.0000 0.3133 2.4555 -0.6171 -0.2402 0.0000 -0.0000 -1.2531 -8.4466 26.0696 31.6638 0.0000 0.0000 -14.0444 13.2573 17.5682 -8.4272 0.0000 -0.0000\n -2.2518 81.2290 23.9554 5.4424 0.7854 11.5539 -0.3554 -0.5883 0.2612 -1.0332 -1.1974 -0.4129 9.8381 3.0521 -4.3357 -5.7926 3.9816 -2.5237 -32.0472 8.0357 12.5504 -9.0875 5.3254 10.8316 -5.1385 -5.2302 13.5327 -41.6159 -17.8016 26.8056 -0.0000 0.0001 59.2042 -5.3512 10.9403 10.2222 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.2151 3.1452 -13.0492 12.4063 16.7054 -69.6514 -0.0000 0.0000 5.0852 1.9182 5.2334 -5.2395 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -25.2748 -0.5146 -6.5496 22.0096 0.0000 0.0000 -2.1581 3.5046 -0.0198 -0.1122 0.0000 -0.0000 0.6668 -9.5187 22.9561 34.1830 0.0000 0.0000 -8.4875 14.1821 8.1520 -10.6649 0.0000 -0.0000\n -2.2937 80.6242 23.9363 4.9859 -0.0135 7.6645 -0.4679 -0.4605 0.3558 -1.1738 -0.7230 -0.2556 9.7841 3.7731 -3.4632 -5.5321 3.3285 -2.1939 -30.8091 4.2546 10.8903 -9.7716 3.1536 11.1119 -3.8205 -3.9959 14.1614 -39.3408 -20.2362 28.2055 -0.0000 0.0001 54.5716 -5.2776 11.1937 9.4535 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -1.6827 2.7381 -13.7828 11.1262 17.9343 -68.6039 -0.0000 0.0000 4.7414 2.9412 5.7909 -5.9523 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -24.5733 -2.0965 -1.7133 24.2351 0.0000 0.0000 -4.4365 4.4291 -1.0503 0.1016 0.0000 0.0000 2.2644 -11.3619 18.5036 36.1013 0.0000 0.0000 -2.1620 15.0724 -3.0578 -13.4326 0.0000 -0.0000\n -2.3683 80.0618 23.9059 4.2836 -0.2779 4.7703 -0.6378 -0.3965 0.4040 -1.3419 -0.4833 -0.1693 10.0520 4.0093 -2.8304 -5.1320 2.8306 -1.9532 -29.7937 1.5670 9.3664 -9.7967 1.4107 10.7990 -2.8172 -2.6656 14.8497 -36.7000 -22.0449 30.1235 -0.0000 0.0001 49.3513 -5.3955 11.3351 8.6207 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -2.0769 2.2770 -14.3309 8.9548 18.7483 -67.4378 -0.0000 0.0000 4.0467 2.0918 4.5077 -5.7987 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -23.5219 -3.4617 1.1296 26.1327 0.0000 0.0000 -6.4871 4.6078 -1.3826 0.2685 0.0000 0.0000 2.8628 -13.4980 12.2508 37.9201 0.0000 0.0000 4.2788 16.2354 -14.2595 -14.3638 0.0000 -0.0000\n -2.4510 79.5682 23.8779 3.6061 -0.4581 2.7637 -0.7612 -0.2286 0.3908 -1.4648 -0.2665 -0.0876 10.3856 3.8871 -2.0660 -4.7179 2.3720 -1.6420 -28.9680 0.4237 8.2771 -9.4805 0.5318 10.1117 -1.8571 -1.8049 15.1755 -34.1205 -23.0251 32.3611 -0.0000 0.0000 44.4140 -6.1272 11.2969 7.7604 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.3647 1.2562 -15.0870 6.5785 19.5246 -66.5657 -0.0000 0.0000 3.0716 1.1223 2.3370 -5.3664 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -22.3307 -4.2029 1.9377 27.5575 0.0000 0.0000 -8.2971 4.8119 -0.4546 0.3328 0.0000 0.0000 1.9858 -15.3407 5.4632 40.1242 0.0000 0.0000 8.3772 16.5546 -22.5715 -12.2967 0.0000 -0.0000\n -2.5282 79.1295 23.8701 2.9605 -0.4873 1.2766 -0.8199 -0.2722 0.3909 -1.5487 -0.1232 0.0098 10.6977 3.6738 -0.8611 -4.3386 1.9913 -1.1696 -28.3581 0.8042 7.7624 -9.0744 0.7248 9.2311 -0.7486 -1.6795 15.3422 -31.7514 -22.7174 34.0696 -0.0000 0.0000 40.6625 -7.0151 11.0622 6.8298 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -2.9168 -0.3389 -16.1388 5.0023 20.1333 -66.3286 -0.0000 0.0000 2.0235 1.4356 0.8663 -5.4315 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -20.7935 -4.8737 2.5215 28.0724 0.0000 0.0000 -9.6307 5.4047 0.3454 0.3517 0.0000 0.0000 0.0191 -17.0557 -0.2822 42.6408 0.0000 0.0000 7.9270 16.0220 -24.6133 -10.6406 0.0000 -0.0000\n -2.5872 78.7233 23.8929 2.1989 -0.1373 0.0693 -0.8187 -0.7777 0.4056 -1.5753 -0.2500 0.0803 11.0563 3.4525 0.6225 -3.9465 1.8258 -0.6360 -27.9951 2.3078 7.8323 -8.6346 1.3619 8.2144 0.1370 -1.6875 15.9431 -29.3436 -21.8962 34.3412 -0.0000 0.0000 38.3735 -7.5918 10.7539 5.8784 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.9825 -2.1347 -17.1862 4.6553 20.1660 -66.7585 -0.0000 0.0000 1.3566 2.4144 0.6629 -5.8385 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -18.6486 -5.7677 3.4668 27.4846 0.0000 0.0000 -10.3465 5.8914 0.5072 0.3399 0.0000 0.0000 -2.4157 -18.9433 -4.4527 44.6888 0.0000 0.0000 4.3758 14.6212 -20.2973 -11.0621 0.0000 -0.0000\n -2.6152 78.3419 23.9375 1.2748 0.3525 -0.9263 -0.6877 -1.4872 0.3997 -1.5118 -0.5629 0.0998 11.3678 3.2495 2.0020 -3.5519 1.8368 -0.1925 -27.7113 4.0703 8.2066 -8.0854 1.5817 7.2147 0.5662 -1.4419 17.0941 -26.5466 -21.7521 33.7683 0.0000 0.0000 36.4720 -8.1903 10.2758 5.0762 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -5.3852 -3.8089 -18.0478 5.0271 19.9183 -67.4305 -0.0000 0.0000 1.3936 3.0817 1.4125 -5.9450 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -16.0267 -6.4530 4.0483 26.2011 0.0000 0.0000 -10.7146 6.0523 0.8833 0.2870 0.0000 0.0000 -5.0190 -20.7713 -7.0759 45.3808 0.0000 0.0000 0.8946 12.0003 -13.3524 -11.0153 0.0000 -0.0000\n -2.6074 77.9913 23.9784 0.4264 0.6076 -1.8499 -0.4577 -2.0889 0.3917 -1.3873 -0.7711 0.1166 11.4444 3.1433 3.1334 -3.2695 1.8360 0.1606 -27.2893 5.1752 8.4604 -7.4495 1.2991 6.5180 0.8190 -1.2293 18.3096 -23.3594 -22.4612 33.9060 0.0000 0.0000 33.5142 -9.2436 9.3892 4.4983 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.7527 -5.2260 -18.7798 5.3249 20.0446 -67.8778 -0.0000 0.0000 1.8705 3.3679 2.6197 -5.6874 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -13.6185 -6.6512 4.1516 25.0674 0.0000 0.0000 -11.1938 6.1550 1.8131 0.2726 0.0000 0.0000 -7.7532 -22.2410 -8.1041 44.2620 0.0000 0.0000 -1.0339 9.0904 -7.7505 -9.8214 0.0000 -0.0000\n -2.5653 77.6656 23.9978 -0.2962 0.6310 -2.8533 -0.1238 -2.5979 0.4139 -1.2403 -0.7879 0.1657 11.3191 3.1586 4.1697 -3.1290 1.7104 0.4887 -26.7069 5.3796 8.4702 -6.8708 0.9905 6.2230 1.2584 -1.2135 19.0914 -19.9479 -23.3063 35.5749 0.0000 0.0000 29.1563 -10.5883 8.2445 3.9586 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -7.8753 -6.3810 -19.3537 5.2216 20.5009 -68.0675 -0.0000 0.0000 2.1192 3.5987 3.5946 -5.5474 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -11.7768 -6.5996 4.6182 24.6536 0.0000 0.0000 -11.9523 6.2277 2.5246 0.3554 0.0000 0.0000 -10.2167 -23.4063 -7.4154 41.1322 0.0000 0.0000 -1.7708 7.2589 -5.0097 -9.5494 0.0000 -0.0000\n -2.4878 77.3556 23.9974 -0.9595 0.5348 -3.7777 0.2073 -3.0553 0.4548 -1.1042 -0.7265 0.2246 11.2779 3.1934 5.1611 -3.0107 1.5221 0.8247 -26.1234 5.0373 8.3065 -6.4067 0.8634 6.1447 1.6867 -1.1167 19.3150 -16.3296 -24.0065 38.2018 0.0000 0.0000 24.2941 -11.8590 7.1617 3.1703 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -8.7814 -7.4381 -19.7121 4.8165 20.7874 -68.2727 -0.0000 0.0000 1.7586 3.6292 3.8206 -5.7431 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -10.4071 -6.4099 5.6249 24.9284 0.0000 0.0000 -12.8779 6.0678 2.6037 0.4170 0.0000 0.0000 -12.1802 -24.2246 -5.3190 35.9771 0.0000 0.0000 -1.3754 7.2389 -5.1997 -10.1366 0.0000 -0.0000\n -2.3736 77.0502 23.9879 -1.6630 0.3463 -4.2482 0.4705 -3.4225 0.4653 -0.9784 -0.6265 0.2589 11.4405 3.1250 5.9917 -2.8141 1.2877 1.1535 -25.5664 4.5780 7.9294 -5.9821 0.6826 6.0489 1.7997 -0.7723 19.1543 -12.6361 -24.8696 40.7161 0.0000 0.0000 20.0952 -12.8886 6.1383 1.9452 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.6375 -8.4597 -20.0276 4.2293 21.0178 -68.5260 -0.0000 0.0000 0.9175 3.2980 3.4425 -6.0348 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.1496 -5.9544 6.3532 25.4646 0.0000 0.0000 -13.9015 5.7530 2.5048 0.3488 0.0000 0.0000 -13.6561 -24.4284 -2.2969 28.9936 0.0000 0.0000 0.9622 8.7744 -8.2353 -9.9640 0.0000 -0.0000\n -2.2240 76.7359 23.9725 -2.3686 0.1494 -4.1374 0.6904 -3.7796 0.3950 -0.8864 -0.3835 0.2908 11.6390 2.8533 6.5443 -2.5933 0.9842 1.4362 -24.8771 4.0216 7.3287 -5.5440 0.3358 5.8265 1.7231 -0.4972 18.8831 -9.0730 -25.9055 42.6058 0.0000 0.0000 17.2177 -13.5001 5.0280 0.5225 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -10.4625 -9.3969 -20.3597 3.5404 21.5645 -68.7909 -0.0000 0.0000 0.0373 2.8038 3.0860 -6.2173 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -7.8384 -5.3034 6.4667 25.9664 0.0000 0.0000 -15.0520 5.5018 2.4632 0.2884 0.0000 0.0000 -14.7880 -23.7939 1.2394 20.8400 0.0000 0.0000 5.6943 10.9047 -13.3239 -9.1992 0.0000 -0.0000\n -2.0435 76.4046 23.9491 -2.9726 0.0652 -3.6792 0.8773 -4.1735 0.2495 -0.8066 -0.0049 0.3069 11.6675 2.3761 6.8037 -2.4274 0.5844 1.6489 -23.9706 3.2134 6.6279 -5.1442 -0.0739 5.5656 1.9318 -0.7224 18.5849 -5.5888 -26.2579 44.3834 0.0000 0.0000 15.5025 -13.6783 4.0129 -0.4453 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -11.2467 -10.2109 -20.5364 3.0328 22.1879 -69.1151 -0.0000 -0.0000 -0.5814 2.4311 3.1815 -6.2748 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -6.5109 -4.6958 6.4187 26.3642 0.0000 0.0000 -16.2905 5.3116 2.2687 0.4322 0.0000 0.0000 -15.8485 -22.1986 3.7918 12.7360 0.0000 0.0000 11.2737 12.8923 -17.3296 -9.5173 0.0000 -0.0000\n -1.8498 76.0491 23.9204 -3.6378 0.2486 -3.1814 1.1179 -4.5367 0.1032 -0.6887 0.3772 0.3139 11.6046 1.6453 6.8186 -2.2916 0.0825 1.8455 -22.9519 2.2143 5.8807 -4.8197 -0.3924 5.3939 2.4598 -1.3894 18.1191 -2.2705 -25.6832 46.4639 0.0000 0.0000 14.4705 -13.5767 3.3266 -0.6470 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -12.0185 -11.0463 -20.6412 2.8571 22.4213 -69.3876 -0.0000 -0.0000 -0.9381 2.2098 3.6100 -6.2199 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -4.8497 -4.3419 6.4734 26.3955 0.0000 0.0000 -17.4312 5.1234 1.9167 0.6804 0.0000 0.0000 -16.9086 -20.0642 2.4262 6.0540 0.0000 0.0000 14.4715 14.9709 -15.6484 -11.4389 0.0000 -0.0000\n -1.6765 75.6648 23.8937 -4.6882 0.9608 -2.8521 1.6167 -4.8462 0.0557 -0.4386 0.6000 0.3033 11.5828 0.6102 6.7758 -2.1348 -0.5804 2.1549 -22.0024 1.3027 4.9756 -4.5625 -0.4871 5.3118 2.9941 -2.1845 17.3098 0.2251 -25.0902 48.4989 0.0000 0.0000 13.8974 -13.3077 2.8299 -0.5081 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -12.8451 -12.1116 -21.1598 2.8247 22.5382 -69.2172 -0.0000 -0.0000 -1.2276 1.9618 4.0225 -6.0820 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -2.2855 -4.5094 6.5182 25.5902 0.0000 0.0000 -18.2061 4.9648 1.6757 0.7644 0.0000 0.0000 -17.9363 -18.4793 -1.4344 2.2678 0.0000 0.0000 13.9814 15.9249 -9.5512 -13.3800 0.0000 -0.0000\n -1.5271 75.2769 23.8699 -5.7654 2.1804 -2.8423 2.2207 -5.0803 0.0106 -0.1616 0.6363 0.2882 11.6475 -0.6554 6.8266 -2.0001 -1.4049 2.6107 -21.3143 0.5459 3.9887 -4.4419 -0.3685 5.2742 3.3834 -3.1459 16.3439 1.4738 -25.0769 50.0525 0.0000 0.0000 13.8845 -12.7499 2.2922 -0.5408 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -13.6129 -13.3075 -22.0710 2.7461 22.7020 -68.5593 -0.0000 -0.0000 -1.4519 1.3486 4.3488 -5.9330 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.6772 -5.1186 6.4129 24.0355 0.0000 0.0000 -18.5767 4.7249 1.9612 0.7194 0.0000 0.0000 -19.4837 -17.6687 -2.0598 2.2036 0.0000 0.0000 12.2270 14.3847 -6.3142 -13.9524 0.0000 -0.0000\n -1.3979 74.8868 23.8427 -6.5218 3.8012 -3.2415 2.7481 -5.2058 -0.1012 0.0266 0.5454 0.2742 11.7743 -2.0646 6.8474 -1.9168 -2.3036 3.0626 -20.9011 -0.3113 3.1498 -4.5260 -0.2816 5.3183 3.7348 -4.4614 15.5680 1.9821 -25.2357 51.3847 0.0000 0.0000 14.3483 -11.7844 1.7730 -0.7219 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -14.1933 -14.3910 -22.8501 2.7920 22.4317 -67.7797 -0.0000 -0.0000 -1.4248 0.3450 4.8456 -5.7724 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.5725 -6.0345 6.3257 21.9702 0.0000 0.0000 -18.6501 4.3401 2.8354 0.8205 0.0000 0.0000 -21.2099 -17.7081 0.9728 4.4549 0.0000 0.0000 11.0034 12.1193 -7.4021 -13.4083 0.0000 -0.0000\n -1.2735 74.4794 23.8091 -6.8508 5.4474 -3.8582 2.9774 -5.0591 -0.2115 0.0917 0.3770 0.2447 12.0500 -3.4716 6.5755 -1.8272 -3.1641 3.3790 -20.7786 -1.3759 2.4262 -4.6825 -0.4018 5.4232 3.9494 -5.9951 15.0608 2.4804 -25.3137 52.8032 0.0000 0.0000 14.9089 -10.4427 1.2078 -0.8554 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -14.6603 -15.1887 -23.4106 3.0796 21.4581 -67.0636 -0.0000 -0.0000 -1.1906 -0.5170 5.5378 -5.4860 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 6.2342 -6.8877 6.2882 19.6201 0.0000 0.0000 -18.5975 3.8870 3.9503 1.0148 0.0000 0.0000 -22.7236 -18.2085 3.8016 7.4581 0.0000 0.0000 10.5139 10.8768 -8.6358 -13.0362 0.0000 -0.0000\n -1.1225 74.0427 23.7704 -6.8547 6.6969 -4.4910 2.8589 -4.6534 -0.2598 0.0569 0.2358 0.2126 12.5442 -4.7091 6.0895 -1.6890 -3.8981 3.6072 -21.0633 -2.3500 1.5862 -4.6172 -0.5257 5.4125 3.8385 -7.2015 14.6481 3.0988 -25.7067 54.0033 0.0000 0.0000 15.3229 -8.9173 0.3061 -1.0120 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -15.1517 -15.7077 -24.1206 3.3439 20.4929 -66.4003 -0.0000 -0.0000 -1.0775 -0.7797 5.9715 -5.0784 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 8.5557 -7.2741 6.3244 17.3993 0.0000 0.0000 -18.5808 3.3497 4.8378 0.9275 0.0000 0.0000 -24.0824 -18.3252 4.5076 11.4428 0.0000 0.0000 10.3817 10.6539 -7.5981 -13.0920 0.0000 -0.0000\n -0.9224 73.5714 23.7173 -6.5150 7.4955 -5.4156 2.5170 -4.1807 -0.2638 -0.0608 0.1032 0.1904 13.0865 -5.6303 5.8073 -1.5849 -4.4550 3.8164 -21.6885 -2.9895 0.7434 -4.1842 -0.4148 5.2138 3.6714 -7.8150 14.3190 3.7858 -26.0009 54.7660 0.0000 0.0000 15.6433 -7.5281 -0.8545 -1.2748 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.5557 -16.0460 -24.8403 3.4607 20.0970 -66.1345 -0.0000 -0.0000 -1.1981 -0.6894 5.7662 -4.7999 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 10.1530 -7.1347 6.9084 16.0349 0.0000 0.0000 -18.8484 2.6961 5.3233 0.5630 0.0000 0.0000 -24.9454 -17.8449 4.2613 16.5016 0.0000 0.0000 9.7601 10.1957 -5.4034 -12.4852 0.0000 -0.0000\n -0.6684 73.0752 23.6363 -5.5705 7.8317 -6.8557 2.0095 -3.4973 -0.3383 -0.3563 -0.0523 0.1767 13.4413 -6.3704 5.7506 -1.6275 -4.8303 3.9210 -22.3654 -3.4358 0.3807 -3.5788 -0.2421 5.0479 3.8061 -8.3980 14.2909 4.7625 -24.8575 55.4874 0.0000 0.0000 15.7958 -6.4053 -1.8567 -1.3708 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -15.6960 -16.0302 -24.9198 3.8100 19.5892 -66.6905 -0.0000 -0.0000 -1.2523 -0.6615 5.2205 -4.8906 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 10.4814 -6.4782 8.0872 16.0270 0.0000 0.0000 -19.7377 2.0802 5.6311 0.3734 0.0000 0.0000 -24.8649 -16.7986 4.0729 20.9529 0.0000 0.0000 7.6795 8.4876 -3.4936 -11.3113 0.0000 -0.0000\n -0.3639 72.5770 23.5400 -3.9173 7.3718 -8.2778 1.1736 -2.0905 -0.5364 -0.8813 -0.1175 0.1466 13.6554 -7.2662 5.4257 -1.8131 -5.1194 3.8090 -23.0227 -3.7861 0.6358 -3.1748 -0.2250 5.1010 3.9742 -9.6536 14.6393 5.7201 -22.3875 56.1570 0.0000 0.0000 15.5703 -5.2485 -2.7927 -1.1396 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -15.5814 -15.3564 -24.3031 4.4420 18.2134 -67.8240 -0.0000 -0.0000 -0.9793 -0.6797 4.7938 -5.2618 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 9.4034 -5.0960 8.9000 17.1162 0.0000 0.0000 -21.2029 1.5025 5.8997 0.4129 0.0000 0.0000 -24.7451 -14.6218 2.1843 23.7471 0.0000 0.0000 3.6449 6.3834 -0.6094 -10.6715 0.0000 -0.0000\n -0.0265 72.0747 23.4696 -2.2447 6.2957 -8.9159 0.2800 -0.2722 -0.7628 -1.4246 0.1419 0.1266 13.8902 -8.3549 4.6278 -2.0267 -5.3929 3.5757 -23.8721 -3.7811 0.9726 -3.1999 -0.1544 5.1853 3.6543 -11.1649 15.0787 5.7121 -21.0078 56.0418 0.0000 0.0000 15.1673 -3.6926 -3.9898 -0.9416 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -15.3262 -14.3952 -23.8353 4.6854 16.8581 -68.8725 -0.0000 -0.0000 -0.6169 -0.7064 4.2744 -5.5332 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 7.9848 -3.1704 8.9068 18.4864 0.0000 0.0000 -22.3832 0.5808 5.8664 0.1347 0.0000 0.0000 -25.6263 -11.3392 -2.7227 26.1138 0.0000 0.0000 -1.0827 5.2932 4.7142 -9.9464 0.0000 -0.0000\n 0.3029 71.5471 23.4543 -1.3239 5.6181 -9.0489 -0.1056 0.7192 -0.8598 -1.6386 0.5257 0.1503 14.0710 -8.9576 3.8949 -2.1957 -5.5508 3.4012 -24.9438 -3.3286 0.8906 -3.5200 0.2148 4.9803 3.1749 -11.8999 15.2898 4.5014 -21.6010 54.9809 0.0000 0.0000 15.2189 -2.3240 -4.6897 -1.1391 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -14.9355 -14.0698 -24.0578 4.2366 16.9856 -69.7885 -0.0000 -0.0000 -0.5210 -1.0164 3.1893 -5.5037 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 7.4132 -1.6640 9.2941 19.7538 0.0000 0.0000 -22.3271 -0.7163 5.3137 -0.7305 0.0000 -0.0000 -26.8803 -8.7147 -6.7386 29.2655 0.0000 0.0000 -4.6211 5.0788 9.2692 -8.6758 0.0000 -0.0000\n 0.6085 70.9877 23.4944 -1.0757 5.5495 -9.6145 -0.0152 0.7124 -0.7769 -1.5506 0.6412 0.1603 14.0648 -8.6818 3.6955 -2.3249 -5.4198 3.2749 -25.8643 -2.7100 0.6146 -3.6965 0.6117 4.5035 3.2308 -11.5861 15.3381 3.4107 -22.1394 53.8018 0.0000 0.0000 16.2000 -2.1734 -3.7227 -1.5422 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -14.3219 -14.3514 -24.4251 3.8331 18.1288 -71.0087 -0.0000 -0.0000 -0.6203 -1.6040 1.8171 -5.4756 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 7.4297 -0.7907 10.7061 21.2802 0.0000 0.0000 -21.1490 -1.6471 4.7201 -1.8178 0.0000 -0.0000 -27.1070 -7.9229 -6.0527 31.9757 0.0000 0.0000 -6.5527 4.4821 9.7192 -7.6115 0.0000 -0.0000\n 0.9113 70.4205 23.5734 -0.8447 5.2297 -10.7878 0.0154 0.7549 -0.6739 -1.5389 0.5673 0.1562 13.8555 -7.9721 3.6719 -2.4251 -5.0498 3.0885 -26.2026 -2.1230 0.6276 -3.4209 0.7176 4.0824 3.8199 -10.9794 15.5047 3.3381 -21.3809 53.2897 0.0000 0.0000 17.7073 -2.9852 -1.8206 -1.6349 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -13.4810 -14.2093 -24.3833 4.2128 18.7916 -72.3223 -0.0000 -0.0000 -0.6655 -1.7628 0.9291 -5.7616 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 6.7727 0.3365 11.9037 23.6908 0.0000 0.0000 -19.7089 -1.6111 4.7518 -2.7228 0.0000 -0.0000 -26.0063 -7.7269 -2.5057 32.7206 0.0000 0.0000 -7.9730 3.0286 7.9002 -7.3691 0.0000 -0.0000\n 1.2226 69.8878 23.6813 -0.2262 4.0798 -12.0716 -0.4581 1.4703 -0.6126 -1.7763 0.6431 0.1684 13.6266 -7.3588 3.3665 -2.4736 -4.6287 2.8519 -26.0574 -1.4238 0.9268 -2.8394 0.7852 3.9153 4.1258 -10.7028 15.8598 3.3325 -20.8207 53.0475 0.0000 0.0000 19.1316 -3.3434 -1.1969 -1.3921 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -12.5020 -13.1766 -24.1172 5.0350 18.5670 -73.0688 -0.0000 -0.0000 -0.5612 -1.1962 0.7216 -6.1796 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 4.3608 2.1846 12.2218 27.7813 0.0000 0.0000 -18.1272 -1.5283 5.5308 -3.3214 0.0000 -0.0000 -24.5200 -6.5274 0.4686 31.5731 0.0000 0.0000 -9.2203 1.6426 6.9621 -7.5447 0.0000 -0.0000\n 1.5105 69.4252 23.8034 0.6355 2.5829 -13.2679 -1.2096 2.4417 -0.5278 -2.1152 0.9204 0.2126 13.4831 -6.8510 2.9555 -2.4762 -4.2521 2.6640 -25.8344 -0.4702 1.2182 -2.3325 1.1503 3.8795 3.7196 -10.4913 16.1366 2.5352 -21.6165 52.6359 0.0000 0.0000 20.4808 -2.4889 -2.5194 -1.2157 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -11.6014 -11.9540 -23.9937 5.6619 18.0795 -73.1630 -0.0000 -0.0000 -0.2962 -0.5703 0.7374 -6.3292 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.1066 3.8950 12.8893 34.0739 0.0000 0.0000 -15.5669 -2.4615 6.6586 -3.3621 0.0000 -0.0000 -23.4255 -4.7146 2.0316 29.8387 0.0000 0.0000 -9.6977 0.7917 7.4417 -7.5735 0.0000 -0.0000\n 1.7428 69.0322 23.9039 1.3178 1.2207 -14.5834 -1.7214 3.3527 -0.4014 -2.3226 1.1609 0.2743 13.2766 -6.1262 2.7619 -2.5052 -3.8600 2.5310 -25.6328 0.4867 1.4428 -2.0670 1.6584 3.8178 3.0309 -9.9440 16.0807 1.4200 -22.5558 52.4769 0.0000 0.0000 22.0778 -0.8060 -4.0576 -1.2383 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -10.9190 -11.3178 -23.9349 6.0073 17.5705 -73.0672 -0.0000 0.0000 0.1442 -0.4487 0.6118 -6.1760 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.9484 4.7494 14.1529 41.6846 0.0000 0.0000 -12.4030 -2.9190 7.0143 -2.9817 0.0000 -0.0000 -22.4612 -3.2445 3.8956 28.3431 0.0000 0.0000 -9.6633 0.0257 7.5972 -7.5788 0.0000 -0.0000\n 1.9134 68.6677 23.9687 1.3956 0.1352 -15.9397 -1.7610 4.2512 -0.3091 -2.3148 1.2708 0.3194 12.9839 -5.2121 2.7389 -2.5776 -3.3896 2.3653 -25.2914 1.2293 1.7459 -1.9315 2.0319 3.7212 2.4225 -9.1182 15.7650 0.4307 -22.7695 52.7674 0.0000 0.0000 24.0801 1.3319 -4.1850 -1.2032 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -10.3419 -11.0002 -23.6445 6.0625 17.0875 -72.8662 -0.0000 0.0000 0.3564 -0.4209 0.1686 -6.0689 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -9.1053 5.0003 14.5377 48.3279 0.0000 0.0000 -10.9917 -0.4469 3.8376 -3.2223 0.0000 -0.0000 -20.9128 -2.1352 6.4125 26.8469 0.0000 0.0000 -9.9614 -0.8279 6.9507 -7.7307 0.0000 -0.0000\n 2.0259 68.3133 24.0241 1.0689 -0.3647 -17.1016 -1.6662 4.8697 -0.2429 -2.2229 1.2557 0.3323 12.9107 -4.3954 2.7874 -2.5961 -2.9048 2.2060 -24.8597 1.9141 2.0954 -1.8379 2.3529 3.5848 1.7215 -8.1713 15.4635 -1.2281 -23.5751 52.4432 0.0000 0.0000 26.8000 3.8704 -3.1778 -1.0928 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -9.5637 -10.2964 -23.0196 5.2702 17.4913 -72.3102 -0.0000 -0.0000 -0.5014 0.3172 -1.0360 -6.1662 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -11.8151 4.8465 13.1669 51.9816 0.0000 0.0000 -11.7909 4.5500 -4.3062 -3.4777 0.0000 -0.0000 -18.9440 -1.3705 8.1409 25.2973 0.0000 0.0000 -10.6614 -1.3731 6.7260 -7.7926 0.0000 -0.0000\n 2.0927 67.9828 24.0928 0.6971 -0.1020 -18.1307 -1.6152 4.9598 -0.1540 -2.1496 1.1184 0.3250 13.1421 -3.8280 3.0845 -2.4883 -2.5031 2.1844 -24.5042 2.6685 2.3167 -1.8017 2.7624 3.3667 0.8269 -6.9717 15.2043 -4.2819 -26.1332 50.5199 0.0000 0.0000 30.8685 6.5258 -1.8614 -0.9991 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -8.3901 -9.2106 -22.0692 3.1559 19.8722 -71.4760 -0.0000 -0.0000 -3.0598 2.2007 -3.2650 -6.2007 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -13.6038 4.2608 10.6302 51.9990 0.0000 0.0000 -12.9086 9.4471 -13.5987 -2.0893 0.0000 -0.0000 -17.0194 -1.2347 8.8682 24.0884 0.0000 0.0000 -11.2358 -1.6054 7.1788 -7.7167 0.0000 -0.0000\n 2.1377 67.6980 24.1606 0.5823 0.5039 -19.1202 -1.6216 4.8383 -0.0732 -2.1062 0.9094 0.3206 13.4004 -3.4815 3.5953 -2.3499 -2.2781 2.3110 -24.2260 3.2816 2.3829 -1.8051 3.1115 3.1761 -0.0257 -5.6095 14.7846 -8.2545 -29.3877 47.4597 0.0000 0.0000 36.4522 9.0194 -0.2433 -0.8750 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -7.0366 -8.1993 -20.7746 0.2983 23.9961 -70.6072 -0.0000 -0.0000 -7.2545 5.1406 -5.9883 -5.8835 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -15.2883 3.5565 7.9811 49.6592 0.0000 0.0000 -14.2318 11.3335 -17.5631 -0.0175 0.0000 -0.0000 -15.5260 -1.6116 9.7378 23.3424 0.0000 0.0000 -11.5980 -1.8812 7.2475 -7.8166 0.0000 -0.0000\n 2.1770 67.4458 24.2088 0.4991 0.9141 -19.7588 -1.4700 5.0669 -0.0715 -2.0382 0.7815 0.3226 13.4753 -3.3994 3.9619 -2.3129 -2.2306 2.4175 -23.8701 3.5401 2.3768 -1.7650 3.2600 3.1539 -0.5025 -4.7150 14.0039 -12.2947 -31.8769 44.7908 -0.0000 0.0000 42.6890 11.6097 1.6495 -0.7858 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -5.6791 -7.3435 -19.2173 -2.4047 28.0182 -69.8708 -0.0000 -0.0000 -12.2537 8.3364 -8.6618 -5.3488 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -16.7688 3.2739 5.4966 46.2393 0.0000 0.0000 -15.7216 9.5375 -14.8464 0.7739 0.0000 0.0000 -14.2433 -1.8210 10.8067 22.6678 0.0000 0.0000 -12.0542 -2.1946 6.7624 -8.0966 0.0000 -0.0000\n 2.2165 67.2019 24.2375 0.1942 0.9013 -19.7816 -1.1804 5.7404 -0.1208 -1.9329 0.8274 0.3314 13.5021 -3.5301 3.9833 -2.3603 -2.2765 2.4658 -23.3659 3.6098 2.2745 -1.6391 3.3534 3.2191 -0.8082 -4.4482 13.0136 -16.2927 -34.0872 42.6954 -0.0000 0.0000 48.9174 14.9109 3.0625 -0.9936 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -4.5254 -6.5890 -17.8183 -4.6850 31.2135 -69.1218 -0.0000 -0.0000 -17.3235 11.1090 -11.3460 -4.8528 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -17.8123 3.5926 3.2065 41.9974 0.0000 0.0000 -15.8008 6.4780 -9.7710 0.3726 0.0000 0.0000 -12.9453 -1.3480 11.1464 21.8008 0.0000 0.0000 -12.5489 -2.3559 6.6235 -8.2174 0.0000 -0.0000\n 2.2529 66.9643 24.2568 -0.2173 0.6311 -19.4232 -0.9673 6.4255 -0.1567 -1.8290 0.9411 0.3487 13.6501 -3.6220 3.9401 -2.3603 -2.2913 2.5115 -22.8353 3.7679 2.0596 -1.4565 3.5638 3.1472 -1.3340 -4.1857 12.1590 -20.4350 -36.8630 40.1056 -0.0000 0.0001 55.1859 18.8038 3.7263 -1.4584 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -3.8209 -6.1838 -16.8220 -6.5573 34.4270 -68.2516 -0.0000 -0.0000 -22.2455 13.4663 -13.8732 -4.3658 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -18.5445 4.0312 1.3675 36.9505 0.0000 0.0000 -14.5769 4.9234 -6.3005 -0.1688 0.0000 -0.0000 -11.6604 -0.4479 10.7853 20.8219 0.0000 0.0000 -12.7919 -2.5202 6.8994 -8.1169 0.0000 -0.0000\n 2.2778 66.7422 24.2738 -0.5369 0.3486 -18.9264 -0.8780 6.8203 -0.1557 -1.7679 1.0024 0.3601 13.8931 -3.5354 3.9747 -2.2576 -2.2052 2.5396 -22.4050 3.9853 1.8331 -1.2849 3.8375 2.9053 -2.1489 -3.4901 11.5779 -24.3755 -39.8229 36.8016 -0.0000 0.0001 61.3185 22.1847 4.4497 -1.7439 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -3.6522 -6.3359 -16.0019 -7.8417 38.0472 -67.4667 -0.0000 -0.0000 -26.9264 15.7825 -15.7919 -3.7386 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -19.2110 4.1184 0.2501 31.4518 0.0000 0.0000 -13.0126 4.7081 -4.9145 -0.3629 0.0000 -0.0000 -10.4052 0.3756 10.5924 19.7538 0.0000 0.0000 -12.7877 -2.9262 6.6950 -7.9777 0.0000 -0.0000\n 2.2820 66.5283 24.2937 -0.7838 0.1669 -18.0065 -0.7933 7.0284 -0.1517 -1.7154 1.0399 0.3486 14.1460 -3.4534 3.7896 -2.1133 -2.0627 2.4433 -22.0360 4.1179 1.6790 -1.1621 4.0467 2.6155 -2.9383 -2.7357 11.0752 -27.4448 -42.0587 34.0457 -0.0000 0.0001 66.4802 23.9691 5.8765 -1.4974 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -3.6999 -6.7197 -15.1418 -8.5834 41.0581 -67.0213 -0.0000 -0.0000 -31.1227 18.0046 -17.2055 -3.0822 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -19.8050 3.9512 -0.6355 26.0203 0.0000 0.0000 -11.3411 4.3450 -4.1403 -0.3981 0.0000 -0.0000 -9.0873 0.9709 10.6514 18.5107 0.0000 0.0000 -12.7346 -3.4113 5.6719 -7.7624 0.0000 -0.0000\n 2.2633 66.3032 24.3185 -1.1441 0.0355 -16.4005 -0.6127 7.2873 -0.1609 -1.6426 1.1194 0.3249 14.4226 -3.5990 3.1952 -1.9741 -1.9304 2.2440 -21.6206 4.2123 1.5346 -1.0218 4.2062 2.3132 -3.5030 -2.3657 10.5446 -29.4433 -43.2449 32.5537 -0.0000 0.0001 70.2111 24.4471 7.5779 -0.8543 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -3.7105 -6.9707 -14.3738 -9.0582 42.9244 -66.8537 -0.0000 -0.0000 -34.7490 19.7652 -18.5497 -2.6424 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -20.2291 3.9109 -2.0779 21.2379 0.0000 0.0000 -9.6516 3.4388 -2.8352 -0.7168 0.0000 -0.0000 -7.5607 1.5122 10.3177 17.0859 0.0000 0.0000 -12.6279 -3.6277 4.4016 -7.3836 0.0000 -0.0000\n 2.2264 66.0663 24.3424 -1.6052 -0.1297 -14.4964 -0.3916 7.6418 -0.1762 -1.5701 1.1621 0.2823 14.7208 -3.8755 2.5885 -1.8451 -1.8099 2.0310 -21.1366 4.3694 1.3502 -0.7700 4.4169 1.9704 -3.8528 -2.2867 10.2101 -30.7934 -43.4407 31.6922 -0.0000 0.0001 72.7560 24.9840 8.8765 -0.3293 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.6800 -7.1020 -13.7880 -9.3958 44.2104 -66.8778 -0.0000 -0.0000 -37.8979 20.8591 -19.7094 -2.4683 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -20.7487 4.0350 -3.7870 17.6661 0.0000 0.0000 -8.2359 2.5418 -0.9093 -1.2769 0.0000 -0.0000 -5.9204 2.0681 9.4293 15.6568 0.0000 0.0000 -12.4319 -3.5597 3.4212 -7.0737 0.0000 -0.0000\n 2.1784 65.8330 24.3544 -2.0184 -0.4039 -12.8784 -0.1866 8.0020 -0.1763 -1.4618 1.1585 0.2525 14.8686 -4.0754 2.2651 -1.7418 -1.7020 1.9295 -20.6151 4.5513 1.1850 -0.4317 4.7230 1.6282 -4.0952 -2.1509 10.2010 -31.6344 -42.9593 30.9483 -0.0000 0.0001 74.2474 26.1122 9.6618 -0.2086 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -3.7126 -7.3080 -13.2873 -9.5173 45.4445 -67.1209 -0.0000 -0.0000 -40.5651 21.5689 -20.2152 -2.3627 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -21.7301 4.1702 -4.5257 15.5879 0.0000 0.0000 -7.2931 2.0914 0.9678 -1.5843 0.0000 -0.0000 -4.3905 2.6197 8.4720 14.3882 0.0000 0.0000 -12.3272 -3.4312 2.7358 -7.0379 0.0000 -0.0000\n 2.1183 65.6017 24.3541 -2.4279 -0.7566 -11.5081 0.1460 8.2850 -0.1943 -1.2895 1.1665 0.2357 14.7741 -4.1261 2.1412 -1.7051 -1.6037 1.8761 -20.0515 4.6734 1.0598 -0.1447 5.0849 1.3434 -4.1483 -2.0677 10.2891 -31.7014 -42.1270 30.8900 -0.0000 0.0001 74.2757 26.8380 10.1093 -0.2303 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.8167 -7.6279 -12.8399 -9.4819 46.3454 -67.5210 -0.0000 -0.0000 -42.6123 22.4337 -20.0736 -2.0398 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -22.9064 4.2881 -4.0444 14.6242 0.0000 0.0000 -6.6103 2.1203 2.0873 -1.5369 0.0000 -0.0000 -2.9345 3.1225 7.7253 13.3101 0.0000 0.0000 -12.4335 -3.2769 2.0683 -7.0810 0.0000 -0.0000\n 2.0464 65.3578 24.3499 -2.8179 -1.2299 -10.0426 0.5359 8.5189 -0.2202 -1.0928 1.2268 0.2272 14.5761 -4.1297 2.0090 -1.7291 -1.5140 1.7987 -19.4873 4.8809 0.9545 0.0189 5.4581 1.0227 -3.8972 -2.3277 10.2900 -31.1240 -41.1280 31.7855 -0.0000 0.0001 72.8056 26.3501 10.1694 -0.0309 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -3.8931 -7.8020 -12.4578 -9.4352 46.4915 -68.0586 -0.0000 -0.0000 -44.0722 23.7364 -19.5408 -1.3405 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -23.9865 4.5528 -3.2575 14.2441 0.0000 0.0000 -5.9657 2.1916 2.3209 -1.5169 0.0000 -0.0000 -1.4728 3.6301 7.0521 12.2283 0.0000 0.0000 -12.5218 -2.9663 1.2526 -6.9964 0.0000 -0.0000\n 1.9623 65.0849 24.3478 -3.1899 -1.7609 -8.4694 0.8847 8.6822 -0.2109 -0.9215 1.2626 0.2117 14.4615 -4.1770 1.9103 -1.7602 -1.3922 1.7234 -19.0640 5.3790 0.8989 0.1285 5.8381 0.5697 -3.5159 -2.7808 10.4013 -30.5248 -40.1809 32.5378 -0.0000 0.0001 70.9509 25.3565 9.6264 0.2857 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.9496 -7.7702 -12.0187 -9.2911 46.3344 -68.7402 -0.0000 -0.0000 -45.4687 25.3240 -18.4409 -0.3781 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -24.7866 4.9430 -2.8620 14.1118 0.0000 0.0000 -5.4497 1.8347 2.1679 -1.6798 0.0000 -0.0000 0.2048 4.1172 6.2326 10.8508 0.0000 0.0000 -12.4331 -2.4716 0.4161 -6.9507 0.0000 -0.0000\n 1.8642 64.7864 24.3386 -3.3899 -2.2944 -6.9205 1.0884 8.7649 -0.1853 -0.7838 1.2205 0.1901 14.4243 -4.2567 1.9640 -1.7644 -1.2548 1.7052 -18.9210 6.1111 0.9044 0.2549 6.2593 0.0348 -3.2102 -3.0882 10.6969 -30.2508 -39.5546 32.2251 -0.0000 0.0001 69.9893 24.9108 8.6804 0.3544 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.1319 -7.8416 -11.5322 -8.9560 46.6124 -69.3039 -0.0000 -0.0000 -47.4342 26.8155 -16.7225 0.4205 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -25.4027 5.3393 -2.8888 14.0679 0.0000 0.0000 -5.1556 1.2658 2.1926 -1.7615 0.0000 -0.0000 1.8641 4.5104 5.1426 9.3694 0.0000 0.0000 -12.4403 -1.9513 -0.1669 -7.0897 0.0000 -0.0000\n 1.7467 64.4742 24.3146 -3.3014 -2.8440 -5.2706 1.1801 8.7982 -0.1542 -0.6964 1.1993 0.1816 14.4182 -4.3677 2.0653 -1.7823 -1.1682 1.7238 -19.0666 6.8318 0.8872 0.3458 6.7298 -0.4765 -2.9938 -3.3235 10.9081 -30.1311 -39.2862 31.2340 -0.0000 0.0001 70.1469 24.7889 7.8449 0.2016 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -4.3493 -8.0459 -11.2365 -8.7363 46.9265 -69.4917 -0.0000 -0.0000 -49.9126 27.8610 -15.3067 0.6637 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -25.8381 5.7568 -3.1530 13.9176 0.0000 0.0000 -4.8049 0.9859 2.3037 -1.5868 0.0000 -0.0000 3.0607 4.7509 3.9590 8.3567 0.0000 0.0000 -12.7957 -1.4962 -0.6826 -7.2154 0.0000 -0.0000\n 1.6063 64.1498 24.2841 -2.9174 -3.3949 -3.4763 1.1831 8.7553 -0.0686 -0.7131 1.2588 0.1903 14.5207 -4.5189 2.1059 -1.8584 -1.1359 1.7260 -19.4287 7.4745 0.8711 0.3076 7.1993 -0.9333 -2.7008 -3.8829 10.9525 -30.0200 -39.0167 30.3996 -0.0000 0.0001 70.9155 24.2215 7.3567 0.1619 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -4.4574 -8.0207 -11.2135 -8.8561 46.6084 -69.3148 -0.0000 -0.0000 -52.4502 28.3953 -15.0212 0.3901 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -26.1368 6.1794 -3.3248 13.7356 0.0000 0.0000 -3.9049 0.6589 1.9986 -1.3281 0.0000 -0.0000 3.7100 4.8067 2.9889 7.9167 0.0000 0.0000 -13.3095 -0.9690 -1.5226 -7.1841 0.0000 -0.0000\n 1.4433 63.7951 24.2536 -2.3355 -3.8113 -1.8598 1.0504 8.5403 0.0634 -0.8175 1.2886 0.1987 14.7478 -4.7124 2.2045 -1.9600 -1.0817 1.7215 -19.9499 8.1647 1.0581 0.1286 7.5846 -1.2998 -2.3113 -4.6667 11.1652 -30.0715 -38.6487 29.6331 -0.0000 0.0001 72.1275 23.4785 6.8481 0.3343 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -4.3953 -7.6123 -11.1426 -9.1380 45.9886 -69.0018 -0.0000 -0.0000 -54.9189 28.5477 -15.1595 0.0117 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -26.4537 6.3850 -3.0707 14.0110 0.0000 0.0000 -2.1109 -0.4323 1.3989 -1.2111 0.0000 -0.0000 4.2142 4.6320 2.2477 7.5359 0.0000 0.0000 -13.8379 -0.2321 -2.4794 -7.1824 0.0000 -0.0000\n 1.2622 63.3883 24.2084 -1.6172 -4.1689 -0.5309 0.7381 8.2298 0.1751 -0.9060 1.2140 0.1878 14.9363 -4.8272 2.4039 -2.0195 -0.9828 1.7218 -20.6311 8.7501 1.4504 -0.1551 7.8104 -1.5058 -1.9517 -5.2354 11.6570 -30.4095 -38.4824 28.4974 -0.0000 0.0001 73.8656 23.4273 5.7198 0.4526 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -4.5273 -7.4501 -10.9870 -9.2349 46.1886 -68.3470 -0.0000 -0.0000 -57.6556 28.6604 -14.3058 -0.1779 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -26.7385 6.4393 -2.5036 14.9332 0.0000 0.0000 0.6189 -1.7813 1.3300 -1.2302 0.0000 -0.0000 4.8242 4.3735 1.5101 6.9604 0.0000 0.0000 -14.5882 0.5931 -3.1035 -7.2985 0.0000 -0.0000\n 1.0621 62.9201 24.1371 -0.7780 -4.7096 0.9045 0.3554 7.9638 0.3050 -1.0481 1.2303 0.1955 15.1080 -4.7973 2.4659 -2.0650 -0.9238 1.6800 -21.5157 8.9343 1.7328 -0.5913 7.8360 -1.5679 -1.5735 -5.6815 12.0310 -30.8501 -38.3420 27.4942 -0.0000 0.0001 75.7647 24.0832 3.8168 0.3026 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.8514 -7.5562 -10.9831 -9.3320 46.5445 -67.5332 -0.0000 -0.0000 -60.2966 28.8344 -12.5490 -0.3588 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -26.4896 6.6852 -1.8549 15.7819 0.0000 0.0000 3.8411 -2.0155 1.7843 -1.2161 0.0000 -0.0000 5.4742 4.2210 0.6541 6.3910 0.0000 0.0000 -15.5017 1.3456 -3.5799 -7.3498 0.0000 -0.0000\n 0.8329 62.3956 24.0543 0.3333 -5.2581 2.4155 -0.2005 7.5030 0.6236 -1.4107 1.4961 0.2575 15.5313 -4.7339 2.3940 -2.2044 -0.9444 1.5947 -22.6491 8.8881 1.8562 -1.3075 7.7167 -1.5841 -1.1012 -6.4533 12.1547 -30.9890 -37.4816 27.4283 -0.0000 0.0001 77.2939 24.7631 1.5539 -0.0266 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -4.9545 -6.7997 -11.0054 -9.6686 45.0894 -67.3538 -0.0000 -0.0001 -62.0099 28.8184 -10.9843 -0.8391 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -25.8680 6.8372 -0.6572 16.2072 0.0000 0.0000 6.1570 -1.2396 1.4127 -1.0049 0.0000 -0.0000 5.9919 3.9564 -0.1917 5.7822 0.0000 0.0000 -16.2065 2.1745 -4.1777 -7.3600 0.0000 -0.0000\n 0.5554 61.8208 23.9815 1.4984 -4.8771 3.0287 -0.7955 6.1737 1.0683 -1.9253 1.5987 0.3162 16.1079 -4.7464 2.7666 -2.4721 -0.9278 1.6258 -23.9502 9.0426 2.2578 -2.3612 7.5197 -1.5418 -0.8032 -7.2066 12.5710 -30.6290 -35.9462 27.7200 -0.0000 0.0001 78.5818 25.2377 -0.5893 -0.3934 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.5475 -4.6572 -10.5725 -10.2563 41.5599 -68.0120 -0.0000 -0.0001 -62.6625 28.3034 -9.6832 -1.6859 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -25.6670 5.5782 1.4916 17.1777 0.0000 0.0000 6.1049 -0.8001 -0.5101 -0.5549 0.0000 -0.0000 6.5391 2.7136 -0.5772 5.1585 0.0000 0.0000 -17.1077 3.3444 -4.3519 -7.6339 0.0000 -0.0000\n 0.2269 61.2409 23.9133 2.4884 -3.2481 2.2831 -1.0240 4.1763 1.2767 -2.1474 0.9108 0.2487 16.0759 -4.6719 3.9404 -2.7591 -0.8787 1.8961 -25.2039 9.0082 2.9972 -3.6615 7.0649 -1.3197 -0.8490 -6.9404 13.6334 -30.2297 -35.1453 26.8805 -0.0000 0.0001 80.2493 25.8387 -2.4154 -0.8179 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.0852 -2.8609 -9.9132 -10.9962 38.4759 -68.3295 -0.0000 -0.0001 -62.9173 27.7107 -8.2429 -2.8300 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -26.5799 2.5290 3.3959 19.7941 0.0000 0.0000 3.7082 -0.8640 -2.5298 0.0636 0.0000 0.0000 6.4188 0.2266 0.5303 6.3233 0.0000 0.0000 -19.2757 4.8405 -4.2517 -8.1384 0.0000 -0.0000\n -0.1292 60.7184 23.8497 3.2068 -1.3261 1.5997 -0.6296 2.5832 0.9936 -1.8007 -0.2057 0.1021 15.1635 -4.2503 5.2019 -2.9216 -1.1683 2.2846 -26.2006 7.4529 3.1068 -5.1181 5.9277 -0.9032 -0.7461 -5.5221 14.8400 -30.8731 -36.1967 24.3655 -0.0000 0.0001 82.5217 26.6930 -3.8235 -1.3411 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.8703 -3.4159 -10.0888 -12.1217 37.4261 -67.4494 -0.0000 -0.0001 -62.7660 27.6913 -8.1533 -4.2720 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -27.7556 -0.6498 3.3426 23.0012 0.0000 0.0000 0.6807 -0.4361 -3.2423 0.6693 0.0000 0.0000 4.3488 -2.7841 2.3961 11.7050 0.0000 0.0000 -22.2449 6.1765 -4.7868 -8.4058 0.0000 -0.0000\n -0.4889 60.2580 23.8200 3.3890 0.2088 2.5257 0.1660 1.6121 0.5220 -1.2888 -0.6489 0.0707 14.2225 -3.7558 5.5633 -2.8963 -1.9753 2.5569 -26.8124 3.8176 1.5918 -6.7424 3.7708 -0.3844 0.1167 -3.8210 15.3731 -33.1566 -38.6671 20.8877 -0.0000 0.0001 84.9858 27.6048 -4.6842 -1.8317 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -3.7349 -5.9395 -11.8407 -13.9084 37.0842 -65.8078 -0.0000 -0.0001 -61.5743 27.7142 -11.3682 -5.9455 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -27.6570 -2.6933 1.6398 24.8303 0.0000 0.0000 -1.5919 0.6767 -3.4070 1.0792 0.0000 0.0000 0.4752 -5.6438 1.8381 20.5223 0.0000 0.0000 -23.6578 6.3966 -5.2999 -8.3881 0.0000 -0.0000\n -0.8178 59.8304 23.8615 3.2786 1.1901 4.5893 0.6930 1.1987 0.2407 -1.0413 -0.4280 0.1225 13.9223 -3.5555 5.2199 -2.6758 -3.0638 2.7810 -27.0424 -0.6769 -1.2290 -8.4135 0.7833 0.1455 1.3884 -2.4799 14.9453 -35.9270 -41.6894 17.5459 -0.0000 0.0001 87.1570 28.5744 -5.4322 -2.2041 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -3.5110 -8.1565 -14.4508 -15.5565 35.7402 -64.7522 -0.0000 -0.0000 -59.2850 26.6557 -16.6515 -7.6147 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -26.2733 -3.7002 -0.4965 24.7200 0.0000 0.0000 -2.9858 1.5897 -3.5946 1.2678 0.0000 0.0000 -4.1116 -7.6049 -0.4896 29.5442 0.0000 0.0000 -22.5934 5.0403 -5.6156 -7.7069 0.0000 -0.0000\n -1.0796 59.3977 23.9766 3.0172 1.6641 5.9290 0.8524 1.1309 0.1724 -1.0101 -0.1826 0.1939 14.0703 -3.5470 5.2161 -2.3092 -4.0663 3.1252 -26.8355 -4.6009 -4.0827 -9.5952 -2.2288 0.5193 2.1391 -1.6584 14.1595 -37.4253 -44.5992 15.2233 -0.0000 0.0001 88.7904 29.7540 -7.1532 -2.7972 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.3422 -8.9338 -16.3870 -15.8140 33.8410 -65.0893 -0.0000 -0.0000 -56.4251 24.9587 -20.4346 -9.1037 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -24.1138 -4.2685 -2.4572 23.3170 0.0000 0.0000 -3.8410 1.7048 -2.9701 1.2955 0.0000 0.0000 -7.7472 -8.6328 -1.8542 36.1703 0.0000 0.0000 -21.1014 2.4969 -4.5684 -6.2282 0.0000 -0.0000\n -1.2586 58.9668 24.1102 2.8807 1.6027 5.6835 0.7056 1.1595 0.1786 -1.0238 -0.1625 0.2554 14.2076 -3.3777 5.9361 -1.9206 -4.7502 3.5864 -26.0672 -7.3975 -6.0967 -9.7122 -4.5960 0.4183 2.1999 -1.1233 13.6123 -37.1176 -46.9507 14.6073 -0.0000 0.0001 89.5617 31.2144 -10.2523 -3.9580 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -3.3405 -8.5803 -17.0598 -14.8566 31.7040 -66.5194 -0.0000 -0.0000 -52.8389 24.1752 -21.1690 -9.9719 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -22.0511 -4.4170 -4.4540 21.8462 0.0000 0.0000 -4.4936 1.2657 -0.6326 1.3007 0.0000 0.0000 -10.0999 -8.9686 -1.4272 39.9294 0.0000 0.0000 -20.6824 0.0061 -1.2711 -6.0682 0.0000 -0.0000\n -1.3783 58.5500 24.2122 2.6703 1.1383 4.6854 0.6501 1.0580 0.2134 -0.9938 -0.1947 0.3049 14.1372 -2.9613 6.7712 -1.6181 -5.1020 3.9249 -24.7615 -9.3761 -7.3236 -8.7417 -6.2139 -0.1348 2.2551 -0.8188 13.3473 -35.2296 -48.2329 16.5388 -0.0000 0.0001 88.7193 32.7409 -13.2483 -5.2825 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -3.4539 -7.9046 -17.0825 -13.7472 28.5788 -68.2292 -0.0000 -0.0000 -48.0483 24.8633 -19.7389 -9.4699 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -20.2045 -4.1462 -6.4343 20.9766 0.0000 0.0000 -5.2227 0.7265 2.5101 1.4391 0.0000 0.0000 -11.5810 -8.9557 -0.0505 41.4123 0.0000 0.0000 -20.7851 -1.6793 2.2455 -7.3317 0.0000 -0.0000\n -1.4738 58.1517 24.2785 2.3113 0.6681 3.9330 0.7332 0.7825 0.2519 -0.9678 -0.1373 0.3353 13.9942 -2.6397 7.0831 -1.3846 -5.2542 4.0169 -23.1137 -10.9445 -8.0151 -7.1653 -7.2104 -0.6536 2.5667 -0.7938 13.0845 -31.6292 -48.0777 21.5079 -0.0000 0.0001 85.3005 33.7199 -13.6565 -5.8725 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.7745 -7.4015 -17.1700 -12.7547 24.5321 -69.4903 -0.0000 -0.0000 -42.3545 25.8380 -16.5877 -7.5240 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -18.5175 -3.8624 -7.8615 20.5841 0.0000 0.0000 -6.1028 0.2809 4.7900 1.6682 0.0000 0.0000 -12.8097 -9.0768 1.3412 41.2575 0.0000 0.0000 -20.6730 -2.1145 2.9986 -8.0498 0.0000 -0.0000\n -1.5604 57.7688 24.3257 1.9501 0.4652 3.5316 0.7578 0.4630 0.2537 -0.9855 -0.0597 0.3327 13.9151 -2.6913 6.8731 -1.1290 -5.3566 3.9833 -21.3700 -12.1550 -8.2586 -5.4290 -7.6962 -0.8109 2.7136 -0.9250 12.6166 -26.6753 -46.6008 28.5880 -0.0000 0.0001 79.0370 33.2505 -10.8754 -5.5491 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -4.3535 -7.0945 -17.4605 -11.4050 20.5960 -70.4156 -0.0000 -0.0000 -35.8089 25.2179 -12.2868 -5.4772 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -17.0194 -3.8913 -8.6650 20.3584 0.0000 0.0000 -6.9753 0.0988 5.9605 1.8000 0.0000 0.0000 -14.0024 -9.5825 2.6170 39.7288 0.0000 0.0000 -20.1864 -1.2920 0.6226 -7.8907 0.0000 -0.0000\n -1.6387 57.3993 24.3560 1.6396 0.4374 3.2740 0.7135 0.2166 0.2197 -1.0005 0.0008 0.3101 13.8954 -2.9501 6.4577 -0.8352 -5.4767 3.9559 -19.8393 -13.0819 -8.3550 -3.7484 -7.9198 -0.8312 2.3748 -0.9746 12.0412 -21.9473 -44.5665 35.5127 -0.0000 0.0001 71.0751 31.3731 -7.2662 -4.9669 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -5.1303 -6.9810 -18.0370 -9.4140 17.0464 -71.7440 -0.0000 -0.0000 -27.3624 21.8734 -9.2523 -4.8026 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -15.6601 -4.0903 -9.3076 20.2154 0.0000 0.0000 -7.7892 0.3342 6.8358 1.7832 0.0000 0.0000 -15.1606 -10.2393 3.8762 37.0885 0.0000 0.0000 -19.3457 0.0333 -2.7501 -7.5073 0.0000 -0.0000\n -1.7074 57.0450 24.3649 1.3097 0.3432 3.1017 0.7495 0.0643 0.1876 -0.9766 0.1155 0.2984 13.9067 -3.0615 6.0450 -0.5603 -5.6136 3.9400 -18.7101 -13.9820 -8.7332 -2.3022 -8.2792 -1.0642 1.8244 -0.7770 11.6375 -18.8181 -42.8745 40.5523 -0.0000 0.0001 63.3356 29.5097 -5.3243 -4.9067 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.1793 -7.2442 -19.1623 -6.6751 13.5428 -73.5842 -0.0000 -0.0000 -17.0837 15.7715 -7.9534 -5.4950 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -14.3841 -4.1814 -9.9068 20.2780 0.0000 0.0000 -8.7301 0.8504 7.7153 1.7519 0.0000 0.0000 -16.3887 -10.6347 5.0460 33.7967 0.0000 0.0000 -18.2170 1.4253 -5.1724 -7.7603 0.0000 -0.0000\n -1.7628 56.7055 24.3605 1.0436 0.1231 2.7561 0.8426 0.0037 0.1791 -0.9506 0.2703 0.3122 13.9406 -2.9671 5.7801 -0.3376 -5.7255 3.9227 -17.8700 -14.9379 -9.4002 -1.2437 -8.8770 -1.4805 1.4425 -0.3556 11.5368 -17.0673 -41.5049 43.8332 -0.0000 0.0001 57.0924 28.5742 -5.4756 -5.5835 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -7.7777 -8.0838 -20.6290 -3.1451 11.7647 -75.0463 -0.0000 -0.0000 -7.7706 9.5015 -5.6741 -6.0841 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -13.3601 -4.1585 -10.0711 20.6345 0.0000 0.0000 -9.8229 1.3366 8.3557 1.7756 0.0000 0.0000 -17.8155 -10.6613 6.2348 30.1749 0.0000 0.0000 -16.7415 3.1662 -6.0515 -9.9485 0.0000 -0.0000\n -1.8045 56.3643 24.3551 0.9137 -0.0156 1.8876 0.9093 -0.0500 0.1780 -0.9470 0.3636 0.3267 13.9549 -2.8607 5.7626 -0.1521 -5.7859 3.9488 -17.1124 -15.8108 -9.9354 -0.5086 -9.4059 -1.8313 1.2511 0.0628 11.5982 -15.4243 -39.5220 46.7157 -0.0000 0.0001 52.2818 27.8782 -6.6185 -6.3897 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -9.3920 -9.1325 -21.5162 0.4136 12.6337 -75.9034 -0.0000 -0.0000 -1.7737 6.3478 -1.4491 -5.9047 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -12.5258 -4.2661 -9.7386 21.0118 0.0000 0.0000 -10.8114 1.6496 8.9058 1.7719 0.0000 0.0000 -19.2876 -10.6263 7.6597 26.4434 0.0000 0.0000 -15.2158 4.7764 -5.5872 -13.6086 0.0000 -0.0000\n -1.8419 55.9986 24.3489 0.8591 0.1629 0.6632 0.9087 -0.2840 0.1789 -0.9256 0.3980 0.3312 13.9315 -2.8324 5.8942 -0.0047 -5.8312 4.0055 -16.4224 -16.5404 -10.1360 0.1087 -9.6574 -2.0084 1.2487 0.1425 11.5673 -13.3935 -36.2075 50.0759 -0.0000 0.0000 48.0868 26.6171 -7.3082 -6.6977 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -10.3234 -9.8957 -21.5675 3.4142 14.1594 -76.3378 -0.0000 0.0000 0.8837 6.2649 3.4512 -5.8570 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -11.4965 -4.6951 -9.3781 20.9621 0.0000 0.0000 -11.5838 1.8121 9.7430 1.7188 0.0000 0.0000 -20.7601 -10.8390 9.1402 23.1981 0.0000 0.0000 -14.4335 4.9747 -4.3519 -14.6071 0.0000 -0.0000\n -1.8835 55.5917 24.3411 0.5932 0.6159 -0.4339 1.0388 -0.7468 0.1999 -0.8384 0.4474 0.3275 13.8802 -2.7697 5.9847 0.0966 -5.8829 4.0259 -15.9039 -17.2112 -10.1741 0.6776 -9.7513 -2.1301 1.2854 -0.0093 11.4186 -11.5214 -32.5888 53.2557 -0.0000 0.0000 44.1509 25.2378 -6.9430 -6.6379 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -10.4332 -10.1375 -21.3088 5.6309 15.0087 -76.3753 -0.0000 0.0000 1.4820 7.1302 7.1852 -6.2760 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -9.8111 -5.3500 -9.2822 20.3367 0.0000 0.0000 -12.2814 1.8235 10.8050 1.7064 0.0000 0.0000 -22.1660 -11.2307 10.3324 20.9510 0.0000 0.0000 -14.5417 3.9598 -3.4120 -12.2325 0.0000 -0.0000\n -1.9258 55.1572 24.3327 0.2644 1.1021 -1.3587 1.2319 -1.2248 0.2385 -0.7193 0.4868 0.3322 13.8060 -2.5958 6.0638 0.1377 -5.9025 4.0082 -15.6019 -17.7894 -10.2395 1.1196 -9.8236 -2.3220 1.1539 -0.0059 11.2989 -10.1587 -30.2537 55.5150 -0.0000 0.0000 40.6514 24.3324 -6.0522 -6.7937 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -9.9783 -9.8220 -20.9508 7.0710 15.5202 -76.3256 -0.0000 0.0000 1.5255 7.2523 8.6655 -6.5253 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -7.9048 -5.9901 -9.2007 19.5602 0.0000 0.0000 -12.9649 1.7325 11.6913 1.7148 0.0000 0.0000 -23.7657 -11.5717 11.2156 19.6224 0.0000 0.0000 -14.6257 3.3365 -3.6130 -10.6729 0.0000 -0.0000\n -1.9599 54.7076 24.3204 0.0550 1.4265 -2.3754 1.4183 -1.4732 0.2712 -0.6286 0.4527 0.3364 13.7247 -2.3506 6.2666 0.1245 -5.8348 4.0132 -15.5088 -18.1539 -10.3502 1.4161 -9.8637 -2.6261 0.7422 0.2841 11.3411 -9.1295 -29.2869 56.8724 0.0000 0.0000 37.7330 23.6854 -5.3954 -7.2097 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.3922 -9.2337 -20.4287 8.1090 16.0792 -76.4693 -0.0000 0.0000 1.6534 6.5969 8.3093 -6.3634 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -6.2511 -6.4070 -8.9585 19.0848 0.0000 0.0000 -13.6689 1.7156 12.3877 1.6322 0.0000 0.0000 -25.5824 -11.6770 11.9137 18.7068 0.0000 0.0000 -13.9812 3.5108 -4.3270 -11.1471 0.0000 -0.0000\n -1.9866 54.2334 24.2919 -0.0931 1.6165 -3.4108 1.5653 -1.5433 0.2957 -0.5477 0.4364 0.3491 13.6697 -2.0606 6.5040 0.0919 -5.7208 4.0180 -15.5843 -18.3055 -10.5292 1.6516 -9.9220 -3.0136 0.2850 0.7120 11.5325 -8.3203 -28.4984 57.7597 0.0000 0.0000 35.3342 23.0345 -5.1660 -7.4030 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -8.8806 -8.7464 -19.9504 8.9220 16.4744 -76.6204 -0.0000 0.0000 1.7152 6.1513 7.3761 -6.2442 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -4.7477 -6.6054 -8.6903 18.9491 0.0000 0.0000 -14.6026 1.8083 13.1707 1.4945 0.0000 0.0000 -27.3344 -11.4539 12.5159 17.8618 0.0000 0.0000 -13.2428 3.6241 -4.2361 -10.8392 0.0000 -0.0000\n -2.0126 53.7225 24.2447 -0.2432 1.7868 -4.2597 1.6548 -1.5932 0.3341 -0.4780 0.5020 0.3698 13.6270 -1.6834 6.6376 0.0772 -5.6154 3.9751 -15.7525 -18.3618 -10.8288 1.8807 -10.0754 -3.4117 0.0242 1.1981 11.7313 -7.7305 -27.5402 58.4235 0.0000 0.0000 33.5271 22.7118 -5.1750 -7.2166 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -8.3833 -8.4434 -19.7543 9.4277 16.6405 -76.5328 -0.0000 0.0000 1.5779 6.3309 6.7561 -6.3988 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -3.1688 -6.7170 -8.4250 18.9422 0.0000 0.0000 -15.8026 1.6955 14.0712 1.4465 0.0000 0.0000 -28.6885 -10.8742 13.3744 16.8277 0.0000 0.0000 -13.1555 3.4205 -3.2545 -9.0274 0.0000 -0.0000\n -2.0399 53.1924 24.1879 0.0011 2.0397 -5.1217 1.5237 -1.6643 0.3830 -0.4959 0.5410 0.3897 13.4880 -1.2843 6.7739 0.0373 -5.4726 3.9140 -15.9692 -18.3430 -11.1152 2.0806 -10.2537 -3.7752 0.0588 1.5259 11.7953 -7.4070 -26.7631 59.0330 0.0000 0.0000 32.4132 22.3257 -5.3509 -7.0684 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -7.8762 -8.0517 -19.6161 9.7845 16.7653 -76.3818 -0.0000 0.0000 1.4225 6.4857 6.5470 -6.5766 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.9428 -6.8893 -8.0297 18.9664 0.0000 0.0000 -16.9038 1.1237 14.9249 1.4594 0.0000 0.0000 -29.9037 -10.1171 14.7601 15.3282 0.0000 0.0000 -13.0663 3.2884 -2.3422 -8.0750 0.0000 -0.0000\n -2.0648 52.6514 24.1232 0.8491 2.3453 -6.1530 1.1528 -1.6915 0.3883 -0.6485 0.4856 0.4030 13.2253 -0.9252 7.0094 -0.1145 -5.2699 3.8511 -16.2779 -18.2165 -11.2259 2.2009 -10.4777 -4.1425 0.1502 1.4923 11.8136 -7.2705 -26.4020 59.5157 0.0000 0.0000 32.0038 21.0215 -5.8100 -7.2483 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -7.4632 -7.3782 -19.2157 10.2636 16.8146 -76.4283 -0.0000 0.0000 1.4165 6.0641 6.5988 -6.4775 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -1.2262 -7.1139 -7.6474 18.8322 0.0000 0.0000 -17.7617 0.4598 15.7524 1.3706 0.0000 0.0000 -31.3860 -9.2558 16.0266 13.5715 0.0000 0.0000 -12.1884 3.0338 -1.5151 -8.2507 0.0000 -0.0000\n -2.0831 52.0560 24.0445 1.7532 2.4670 -6.9875 0.7343 -1.6110 0.3518 -0.7980 0.5244 0.4294 12.9292 -0.4934 7.1344 -0.3364 -5.0310 3.7088 -16.6887 -18.1804 -11.3460 2.1921 -11.0832 -4.5778 0.2899 1.1858 11.9389 -7.2863 -26.0614 59.7257 0.0000 0.0000 32.0131 19.3396 -6.1894 -7.4350 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.0664 -6.5814 -18.6624 10.7061 16.6153 -76.6133 -0.0000 0.0000 1.4994 5.6374 6.7011 -6.2057 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.2002 -7.1382 -7.5332 18.2224 0.0000 0.0000 -18.7843 0.3184 16.5853 1.1467 0.0000 0.0000 -32.6825 -7.8910 16.3405 12.3037 0.0000 0.0000 -11.2547 1.6970 -0.1276 -7.7056 0.0000 -0.0000\n -2.0892 51.3453 23.9562 2.1049 2.1580 -7.6034 0.3647 -1.3390 0.3173 -0.9230 0.6916 0.4772 12.7720 0.3029 7.1783 -0.4755 -4.7349 3.4834 -17.0578 -18.4987 -11.7137 2.0608 -12.2273 -5.0845 0.6288 1.1608 12.1422 -7.1616 -25.6016 59.8550 0.0000 0.0000 31.8302 18.8614 -5.8451 -7.1604 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.4878 -5.6327 -18.1250 10.9167 16.3188 -76.7760 -0.0000 0.0000 1.5043 5.9238 6.5350 -6.0914 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 1.7942 -6.6212 -7.3984 17.2601 0.0000 0.0000 -20.1345 0.4409 17.3057 0.8888 0.0000 0.0000 -32.3635 -5.6518 16.1552 11.3907 0.0000 0.0000 -10.6782 -0.9203 0.8347 -7.3661 0.0000 -0.0000\n -2.0910 50.5296 23.8529 2.6122 1.6955 -8.9956 -0.4997 -1.0714 0.2712 -1.2645 0.6927 0.5347 12.6973 1.4683 7.7025 -0.4683 -4.2977 3.3600 -17.2780 -19.1148 -12.0423 1.9908 -13.4147 -5.5461 0.9620 1.6024 12.3447 -6.2807 -25.0755 60.5234 0.0000 0.0000 30.8741 19.0915 -5.2034 -6.5314 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.8424 -4.1050 -17.2835 11.3538 16.1107 -76.9549 -0.0000 0.0000 1.4528 6.1372 6.0671 -6.2030 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.5261 -5.7586 -6.5235 16.8957 0.0000 0.0000 -21.3694 -0.2761 17.9938 0.6748 0.0000 0.0000 -30.2631 -3.3355 15.8816 9.5154 0.0000 0.0000 -8.3275 -3.3587 -0.0850 -9.5539 0.0000 -0.0000\n -2.0944 49.6541 23.7263 3.7124 0.9010 -11.6682 -1.9679 -0.3681 0.1306 -1.9355 0.4025 0.5780 12.6201 2.7173 8.8687 -0.4982 -3.7957 3.4041 -17.5445 -19.8566 -11.8795 2.1394 -14.0271 -5.7868 1.0710 1.3641 12.7014 -4.7587 -23.5242 62.0176 0.0000 0.0000 29.2477 17.7663 -5.7176 -5.7988 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -5.4692 -1.8245 -15.8504 12.4530 15.4934 -76.9924 -0.0000 0.0000 1.5575 5.1228 5.8426 -6.2449 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 3.9125 -4.2112 -5.3435 18.0533 0.0000 0.0000 -22.5848 -2.0733 19.4958 0.3733 0.0000 0.0000 -27.4470 -1.4189 14.3137 5.9548 0.0000 0.0000 -1.5528 -4.3397 -1.3706 -12.0352 0.0000 -0.0000\n -2.0890 48.7368 23.6073 4.2070 -1.3601 -14.3898 -3.2604 1.9932 -0.0152 -2.6688 0.3177 0.6443 12.7067 3.9944 9.8236 -0.7404 -3.4518 3.3651 -18.1863 -20.7997 -11.5351 2.2487 -14.1384 -5.8178 1.2891 -0.7360 13.2675 -3.8164 -20.4261 63.5909 0.0000 0.0000 27.9779 15.2716 -7.5141 -5.0629 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -5.2670 0.5932 -14.3917 13.6121 13.7405 -76.3849 -0.0000 0.0000 1.9234 3.8885 6.0452 -5.9487 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 3.6074 -0.6746 -5.2372 21.0190 0.0000 0.0000 -24.3006 -3.5560 22.1340 -0.4219 0.0000 -0.0000 -24.5814 1.2262 10.5396 1.9488 0.0000 0.0000 7.9167 -4.0427 -0.1313 -10.4627 0.0000 -0.0000\n -2.0667 47.8042 23.5773 3.2272 -5.0277 -15.9047 -3.8230 5.4419 -0.0186 -3.1209 0.9774 0.8216 12.9887 5.7897 10.0044 -1.1105 -3.2354 3.0244 -19.0382 -21.7248 -11.7239 1.8450 -14.2486 -5.9881 2.1575 -3.7795 13.6917 -4.2905 -17.8024 64.4683 0.0000 0.0000 27.8231 14.4251 -8.5052 -4.3695 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -4.6939 2.4918 -13.7932 14.0224 11.4004 -74.9685 -0.0000 0.0000 2.3526 4.3935 5.8215 -5.4623 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 3.1146 4.7582 -5.9030 25.9553 0.0000 0.0000 -25.3961 -3.7867 24.4611 -2.1150 0.0000 -0.0000 -21.9713 5.1672 6.8428 -0.0461 0.0000 -0.0000 13.5117 -3.1445 2.8381 -7.3569 0.0000 -0.0000\n -2.0463 46.9256 23.7033 1.9268 -7.6951 -16.8999 -3.8802 6.9529 0.0720 -3.1940 1.6892 1.0275 13.0452 8.3978 10.2566 -1.3566 -2.6280 2.5992 -19.4659 -21.5185 -12.2050 1.0691 -14.2276 -6.7173 3.0749 -5.4166 13.5110 -5.3433 -19.2176 64.6412 0.0000 0.0000 28.3411 15.0095 -7.8860 -3.7357 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.6249 4.1740 -13.8477 13.8801 10.1265 -73.4693 -0.0000 0.0000 2.7332 5.8026 4.3253 -5.0160 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 1.3353 9.0561 -4.7331 32.9175 0.0000 0.0000 -22.2950 -4.6519 24.7918 -4.2628 0.0000 -0.0000 -19.6980 8.2779 6.4296 0.3522 0.0000 0.0000 12.3086 -2.7796 4.2882 -6.5511 0.0000 -0.0000\n -2.0663 46.1523 23.9409 1.4892 -7.3671 -18.6351 -3.6870 5.3047 0.2180 -3.0421 1.2476 1.0351 12.5453 10.7734 11.5198 -1.4149 -1.3375 2.4327 -19.0205 -18.8250 -11.7099 0.8631 -13.2974 -7.8844 2.8048 -4.6989 12.9551 -6.0607 -25.6382 63.8346 0.0000 0.0000 28.9927 13.0797 -7.9588 -2.9519 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -2.5705 6.2399 -13.4786 13.9244 10.9670 -72.7617 -0.0000 0.0000 3.2526 5.2471 2.1489 -4.6726 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.3685 9.4989 -0.4954 40.7828 0.0000 0.0000 -13.5050 -9.7298 23.1553 -4.3202 0.0000 -0.0000 -17.1535 8.2187 8.9104 0.6992 0.0000 0.0000 8.5676 -3.1911 3.2648 -7.8236 0.0000 -0.0000\n -2.1112 45.4792 24.1720 1.7554 -5.4952 -20.6273 -3.3643 2.9822 0.4031 -2.7973 0.0003 0.8757 11.8247 11.5606 13.1543 -1.4253 0.1284 2.5232 -17.9528 -13.6434 -9.7614 1.7954 -11.0677 -8.7851 1.2175 -3.1572 12.8010 -7.4734 -33.9527 61.1501 0.0000 0.0000 30.3333 7.0032 -10.3515 -2.2389 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.8915 8.0156 -12.4221 14.5543 13.2870 -73.0916 -0.0000 0.0000 4.1212 2.8532 1.0686 -4.4304 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -6.2789 7.7877 3.5811 47.0238 0.0000 0.0000 -4.9411 -17.3728 21.1132 -1.1194 0.0000 -0.0000 -14.7571 6.4442 11.2290 0.4534 0.0000 0.0000 6.2768 -3.5040 1.8526 -9.0272 0.0000 -0.0000\n -2.1590 44.8512 24.3308 1.7387 -4.0535 -21.1515 -2.9761 2.0827 0.4988 -2.5527 -0.8248 0.7258 11.6408 10.7957 13.8072 -1.4303 1.1224 2.5509 -16.7931 -7.6474 -7.2216 3.1379 -8.1047 -9.0049 -0.4601 -2.7480 12.9387 -10.8673 -40.0215 56.9106 0.0000 0.0000 33.0051 0.3753 -12.5068 -1.9462 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -1.5135 8.2483 -11.5227 15.8265 15.3375 -74.2183 -0.0000 0.0000 5.2538 2.0599 2.0993 -3.9697 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -8.4249 7.0563 3.8784 50.3230 0.0000 0.0000 -4.1696 -20.4520 17.4329 -0.0161 0.0000 -0.0000 -12.8274 5.3992 12.4907 0.8763 0.0000 0.0000 4.7314 -3.5878 0.4230 -9.2417 0.0000 -0.0000\n -2.1983 44.2293 24.4191 1.2873 -3.4568 -19.8581 -2.7595 2.2862 0.4931 -2.4583 -0.9275 0.6566 12.0236 9.6255 13.2840 -1.3141 1.6404 2.3824 -15.6191 -2.5693 -5.0288 4.0457 -5.4475 -8.7398 -1.8178 -3.0897 12.8156 -15.0410 -43.7288 52.4091 0.0000 0.0000 36.7437 -3.2839 -11.2445 -0.9646 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.4538 7.1022 -11.2105 17.6625 16.0920 -75.7654 -0.0000 0.0000 6.2352 4.1727 4.6204 -3.5873 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -9.0115 8.0546 0.2001 50.5111 0.0000 0.0000 -10.1862 -17.0352 10.8634 -1.8532 0.0000 -0.0000 -11.0271 5.6197 13.4821 1.7560 0.0000 0.0000 2.5559 -3.7020 -1.8141 -9.2744 0.0000 -0.0000\n -2.2180 43.6084 24.4690 0.8912 -3.2237 -18.1124 -2.8996 2.4995 0.5252 -2.5027 -0.9855 0.5969 12.5146 9.0508 12.5595 -1.0445 2.0780 2.1430 -14.4340 0.9221 -3.4721 4.6895 -3.6751 -8.2186 -3.1705 -3.1169 12.4329 -18.9105 -46.7144 48.0964 -0.0000 0.0000 40.1712 -6.0775 -7.7729 0.3449 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.6793 6.3089 -10.8652 19.4852 15.6423 -77.3442 -0.0000 0.0000 6.7513 6.7933 7.0222 -3.7020 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -9.3068 9.7127 -4.9925 47.8276 0.0000 0.0000 -15.9165 -11.2354 3.7557 -2.1512 0.0000 -0.0000 -8.9437 6.3278 14.0188 1.8022 0.0000 0.0000 0.5974 -3.9250 -4.0519 -9.4754 0.0000 -0.0000\n -2.2207 42.9885 24.5057 0.2981 -2.8822 -16.9293 -3.0063 2.3849 0.6347 -2.5433 -1.3545 0.4912 13.0411 9.1954 12.2744 -0.7447 2.5456 1.9615 -13.5142 2.9430 -2.3535 5.5668 -2.7071 -7.5522 -4.4518 -2.8581 12.1845 -22.6513 -48.7804 44.1029 -0.0000 0.0000 42.1197 -10.7258 -5.0013 0.9555 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -1.8739 6.7916 -10.0332 20.5182 14.8519 -78.6343 -0.0000 0.0000 6.7787 6.8903 7.8343 -3.8381 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -9.5986 11.1828 -9.2769 43.2492 0.0000 0.0000 -18.2572 -7.6740 -1.4843 -0.6559 0.0000 -0.0000 -6.3612 6.9340 12.9728 1.1613 0.0000 0.0000 -0.4403 -4.2679 -4.4867 -9.4768 0.0000 -0.0000\n -2.2108 42.3899 24.5221 -0.6787 -2.5811 -16.1298 -2.8681 2.3208 0.7494 -2.4997 -1.6735 0.3965 13.6467 9.5176 12.2592 -0.5083 2.8518 1.8686 -12.9519 3.7789 -1.5116 6.6578 -2.2341 -6.8853 -5.2378 -2.6942 12.1798 -26.0708 -49.1077 41.2449 -0.0000 0.0000 42.5854 -15.6302 -3.3915 0.8387 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.7849 7.5957 -9.1852 20.6954 14.5921 -79.5293 -0.0000 0.0000 6.4063 4.9321 6.7058 -3.8801 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -9.8114 12.3539 -11.9188 37.7533 0.0000 0.0000 -18.2462 -6.2834 -3.8864 0.2946 0.0000 0.0000 -3.8418 7.4951 11.0084 1.1871 0.0000 0.0000 -1.5471 -4.8419 -3.5434 -9.2019 0.0000 -0.0000\n -2.1837 41.8369 24.5119 -1.5906 -2.4769 -15.3968 -2.7087 2.4284 0.8025 -2.4170 -1.6801 0.3746 14.1070 9.5671 12.2628 -0.3288 2.9096 1.8800 -12.4897 3.8766 -0.9594 7.5770 -2.1042 -6.2513 -5.4327 -2.4961 12.1019 -28.3423 -48.3764 40.0934 -0.0000 0.0000 42.3314 -17.4870 -1.9397 0.4986 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.4571 7.8605 -8.8030 20.6688 14.7254 -80.1180 -0.0000 0.0000 5.9695 3.2907 4.5209 -4.2734 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -10.5439 13.1827 -13.0119 32.0912 0.0000 0.0000 -16.4471 -5.2798 -3.6920 0.2676 0.0000 0.0000 -1.9055 8.1062 10.0452 2.0281 0.0000 0.0000 -3.3605 -5.6046 -3.3475 -8.8724 0.0000 -0.0000\n -2.1447 41.3251 24.4985 -2.1794 -2.2321 -14.7973 -2.5961 2.4537 0.8306 -2.3466 -1.6397 0.3690 14.3316 9.2719 12.2387 -0.2120 2.8660 1.9520 -12.0319 3.6785 -0.6308 8.1763 -2.2155 -5.5563 -5.3499 -2.2658 11.7850 -29.0701 -47.6514 40.4002 -0.0000 0.0000 41.8570 -15.6417 -0.5402 0.0749 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.1945 7.8477 -8.6866 20.9672 14.5978 -80.5405 -0.0000 0.0000 5.8911 2.8253 2.6355 -4.7957 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -12.0432 13.3823 -13.0363 26.6583 0.0000 0.0000 -12.8646 -4.3441 -1.8363 0.0416 0.0000 0.0000 -0.2281 8.4378 10.3892 2.6725 0.0000 0.0000 -5.1713 -6.1716 -4.4245 -8.4437 0.0000 -0.0000\n -2.1049 40.8447 24.5021 -2.5517 -1.7086 -14.2037 -2.5160 2.4371 0.8965 -2.2840 -1.7194 0.3298 14.5755 8.6632 11.9990 -0.1765 2.7688 2.0173 -11.7968 3.3888 -0.3789 8.5918 -2.4033 -4.8557 -5.3005 -2.2771 11.5336 -28.6504 -46.8498 41.4661 -0.0000 0.0000 41.2371 -12.5995 -0.0506 -0.4433 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -1.1276 7.8740 -8.6155 21.4291 14.0340 -80.8668 -0.0000 0.0000 6.2482 3.4406 2.1028 -4.8690 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -14.0508 12.9858 -12.7205 21.7484 0.0000 0.0000 -8.0181 -4.2714 0.7067 -0.1523 0.0000 -0.0000 1.3231 8.3595 10.8805 3.0260 0.0000 0.0000 -6.5258 -6.1524 -5.6843 -7.8992 0.0000 -0.0000\n -2.0765 40.3917 24.5129 -2.8571 -1.0759 -13.1411 -2.4112 2.5861 0.9550 -2.2685 -1.7499 0.2798 15.0074 7.7265 11.3680 -0.1584 2.5553 2.0141 -11.8650 3.0018 -0.2319 8.8924 -2.5467 -4.3395 -5.2319 -2.5239 11.5407 -27.7701 -45.4374 42.6847 -0.0000 0.0000 40.4825 -10.7829 -0.4732 -0.5190 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.2121 7.5325 -8.7586 21.7989 13.4609 -81.1618 -0.0000 0.0000 6.7541 5.1883 3.0278 -4.4991 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -16.2841 12.3209 -12.2677 17.7492 0.0000 0.0000 -2.6964 -5.3495 2.9456 -0.3573 0.0000 -0.0000 2.5145 7.9650 11.2488 3.8722 0.0000 0.0000 -7.9774 -5.4674 -7.0762 -7.5896 0.0000 -0.0000\n -2.0565 39.9570 24.5083 -2.9764 -0.5623 -11.4723 -2.3898 2.8765 0.9391 -2.2600 -1.6424 0.2516 15.3874 6.6144 10.4894 -0.0918 2.2618 1.9647 -11.9777 2.5993 -0.3110 9.0278 -2.6196 -4.0800 -5.0742 -2.6414 11.6282 -26.8530 -43.8288 43.5365 -0.0000 0.0000 39.7561 -10.4098 -0.5619 0.0527 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -1.3476 6.6557 -9.1794 22.0886 13.0358 -81.5076 -0.0000 0.0000 7.1297 7.6390 4.5125 -4.1917 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -18.8908 11.7599 -11.4129 14.9683 0.0000 0.0000 2.3721 -6.3850 4.3615 -0.7323 0.0000 -0.0000 3.1333 7.4114 12.0120 5.4508 0.0000 0.0000 -9.8552 -4.4609 -9.3395 -7.6419 0.0000 -0.0000\n -2.0405 39.5057 24.4891 -3.1817 -0.0557 -9.5508 -2.1912 3.0994 0.8442 -2.1312 -1.5220 0.2306 15.4379 5.4620 9.6843 -0.0129 1.9977 1.9507 -11.8557 2.4229 -0.5694 9.0533 -2.6037 -3.9955 -4.8806 -2.4376 11.6257 -26.1279 -42.9487 43.7051 -0.0000 0.0000 39.1606 -10.7294 0.2523 0.7056 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -1.3786 5.7745 -9.6251 22.3082 12.6823 -81.9474 -0.0000 0.0000 7.3337 9.6059 5.3411 -4.1005 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -21.4494 11.3124 -10.3681 13.2422 0.0000 0.0000 6.6626 -6.0497 5.2749 -1.4145 0.0000 -0.0000 3.7893 6.7193 13.0345 7.2422 0.0000 0.0000 -11.7916 -3.5594 -12.2064 -7.5639 0.0000 -0.0000\n -2.0314 39.0220 24.4689 -3.5757 0.5402 -7.5883 -1.8023 3.2081 0.6950 -1.8891 -1.4665 0.2011 15.2723 4.3049 9.0242 0.0372 1.7606 1.9732 -11.5472 2.5007 -0.8515 9.0948 -2.4972 -3.9971 -4.6655 -2.1534 11.6169 -25.7820 -42.8443 43.2720 -0.0000 0.0000 38.6128 -11.1536 1.2361 0.9530 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -1.1910 5.1686 -9.9534 22.3326 12.5576 -82.4539 -0.0000 0.0000 7.4435 10.2634 4.9821 -4.0053 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -23.7019 10.7898 -9.7458 12.3123 0.0000 0.0000 9.9558 -4.7985 6.0248 -2.1028 0.0000 -0.0000 4.6525 5.8221 13.8661 9.1208 0.0000 0.0000 -13.6157 -2.8238 -14.9352 -7.0471 0.0000 -0.0000\n -2.0322 38.5126 24.4490 -3.9450 1.1658 -5.4199 -1.4946 3.1878 0.5240 -1.6961 -1.3975 0.1688 15.1808 3.2575 8.2946 0.1282 1.5043 1.9500 -11.2820 2.5547 -1.1122 9.1918 -2.3936 -4.0641 -4.4851 -1.9935 11.6326 -25.5775 -42.8140 42.6977 0.0000 0.0000 37.9501 -11.2068 1.8685 0.9573 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.9784 4.4484 -10.2849 22.2568 12.8263 -82.9971 -0.0000 0.0000 7.4500 10.1059 4.0261 -3.9532 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -25.6721 10.1063 -9.7588 11.8193 0.0000 0.0000 12.0961 -4.4989 6.2988 -2.2523 0.0000 -0.0000 5.4745 4.7022 14.3364 11.0848 0.0000 0.0000 -15.3553 -2.0223 -17.4136 -6.5493 0.0000 -0.0000\n -2.0335 37.9867 24.4158 -4.0523 1.6755 -2.9976 -1.4745 2.9954 0.3894 -1.6639 -1.2737 0.1403 15.2785 2.4902 7.4063 0.2908 1.2755 1.8325 -11.1799 2.4252 -1.4053 9.3328 -2.3850 -4.1618 -4.3544 -2.0032 11.5808 -24.9964 -42.1470 42.5947 0.0000 0.0000 36.9573 -10.8045 2.4273 1.0955 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -1.0234 3.5946 -10.6892 22.2729 13.0831 -83.4969 -0.0000 0.0000 7.3029 9.8407 3.4780 -4.0872 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -27.4168 9.3369 -9.8841 11.2007 0.0000 0.0000 12.9813 -5.6172 5.7125 -1.9626 0.0000 -0.0000 6.1232 3.5474 14.4696 12.8269 0.0000 0.0000 -16.9468 -1.2556 -19.8670 -6.5173 0.0000 -0.0000\n -2.0252 37.4402 24.3617 -3.9518 1.9722 -0.6229 -1.6190 2.7546 0.2926 -1.6996 -1.1676 0.1141 15.4162 1.9819 6.5569 0.4178 1.1451 1.6901 -11.1905 2.1822 -1.7224 9.5445 -2.4102 -4.2365 -4.1826 -2.1846 11.5258 -24.0894 -40.7803 42.9075 0.0000 0.0000 35.6663 -10.4063 3.0740 1.3335 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.2235 3.0832 -11.0708 22.3124 12.9629 -83.8669 -0.0000 0.0000 7.0515 9.4199 3.5034 -4.2429 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -28.8370 8.5583 -9.7717 10.1381 0.0000 0.0000 13.0905 -6.7878 4.6948 -1.9329 0.0000 -0.0000 6.7666 2.6089 14.4265 14.1328 0.0000 0.0000 -18.3908 -0.8607 -22.2357 -6.7203 0.0000 -0.0000\n -2.0083 36.8602 24.2957 -3.8038 1.9918 1.4804 -1.6988 2.7225 0.1542 -1.6726 -1.0953 0.0911 15.3806 1.5981 5.9474 0.4295 1.0247 1.5839 -11.2352 1.9366 -2.0250 9.7941 -2.4339 -4.2790 -3.8669 -2.4327 11.5215 -23.3281 -39.3708 43.1470 0.0000 0.0000 34.3469 -10.4731 3.6145 1.5412 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -1.2432 2.9361 -11.4334 22.2213 12.8730 -84.0620 -0.0000 0.0000 6.7665 8.7636 3.4670 -4.2081 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -29.8031 7.7895 -9.9290 8.9318 0.0000 0.0000 13.3000 -7.1116 4.3453 -2.2709 0.0000 -0.0000 7.6100 1.9880 14.3971 15.0551 0.0000 0.0000 -19.6034 -0.5428 -24.3176 -6.8790 0.0000 -0.0000\n -1.9808 36.2468 24.2216 -3.4000 1.6602 3.4289 -1.8340 2.9335 0.0130 -1.6580 -0.9257 0.1014 15.1981 1.3068 5.3885 0.3641 0.8614 1.5064 -11.3766 1.7010 -2.3128 9.9524 -2.5664 -4.3302 -3.5457 -2.6747 11.4430 -22.6573 -38.3605 43.2821 0.0000 0.0000 33.0905 -10.8398 4.1876 1.8858 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.1333 2.7157 -11.8522 22.1394 13.1476 -84.1293 -0.0000 0.0000 6.4847 8.1555 3.2369 -4.1192 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -30.4942 7.0390 -10.6996 7.9616 0.0000 0.0000 13.4996 -6.4503 5.0596 -2.4383 0.0000 -0.0000 8.4662 1.7332 14.2035 15.5982 0.0000 0.0000 -20.3288 0.3459 -26.0342 -7.2603 0.0000 -0.0000\n -1.9406 35.6057 24.1308 -2.5693 1.2989 5.4445 -2.1612 2.9420 -0.0735 -1.7835 -0.6722 0.1183 15.0614 1.1445 4.7315 0.2342 0.7822 1.3428 -11.7515 1.5131 -2.5643 9.9435 -2.8553 -4.4027 -3.2440 -3.1629 11.3184 -21.6704 -36.9119 43.8304 0.0000 0.0000 31.6387 -10.8678 5.1876 2.4616 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.1690 2.4822 -12.2729 22.2084 13.1998 -84.0960 -0.0000 0.0000 6.2437 7.5997 3.4445 -4.1647 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -30.9820 6.0799 -11.4099 7.0293 0.0000 0.0000 12.9594 -5.5351 5.5989 -2.1793 0.0000 -0.0000 9.1388 1.5411 13.6581 15.7707 0.0000 0.0000 -20.7939 1.6024 -27.5729 -8.0146 0.0000 -0.0000\n -1.8898 34.9390 24.0209 -1.4093 1.3076 7.4324 -2.6344 2.5137 -0.1415 -2.0017 -0.4949 0.1139 14.9963 0.9726 4.0199 -0.0105 0.8248 1.1419 -12.4199 1.4140 -2.7217 9.7062 -3.1990 -4.4517 -2.8171 -4.0290 11.4773 -20.4542 -34.2255 44.7024 0.0000 0.0000 30.0499 -9.8572 6.6083 3.0203 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.3090 2.6502 -12.6299 22.2554 12.7341 -83.9104 -0.0000 0.0000 6.1206 6.9514 4.1374 -4.1901 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -31.4182 4.7109 -11.7034 6.1926 0.0000 0.0000 12.5301 -5.9690 5.0612 -1.8771 0.0000 -0.0000 9.5833 1.0570 13.1096 15.7912 0.0000 0.0000 -21.5301 2.3990 -29.0797 -8.7440 0.0000 -0.0000\n -1.8242 34.2306 23.9005 -0.0539 1.4931 9.2960 -3.1569 2.1069 -0.2539 -2.2295 -0.4003 0.0882 14.8504 0.6362 3.3005 -0.3209 0.8156 0.9538 -13.3291 1.1988 -2.7862 8.9746 -3.7221 -4.3738 -2.3289 -4.9330 11.8859 -19.1674 -31.0783 45.4481 0.0000 0.0000 28.6767 -7.7184 8.3446 3.6669 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -1.3816 2.9589 -13.0045 22.1719 12.6255 -83.6090 -0.0000 0.0000 6.1793 6.4468 4.5586 -4.0701 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -31.8435 3.1825 -12.5546 6.0743 0.0000 0.0000 14.2027 -8.0483 4.8428 -1.9807 0.0000 -0.0000 9.8416 0.4203 12.9419 15.9123 0.0000 0.0000 -22.2535 3.0311 -30.6174 -9.3472 0.0000 -0.0000\n -1.7234 33.4509 23.7510 1.6224 1.3145 11.3028 -3.8401 2.0590 -0.2901 -2.5601 -0.1437 0.0895 14.6069 0.2944 2.3317 -0.5720 0.6848 0.6973 -14.4139 0.5073 -2.8063 7.4091 -4.8844 -4.0034 -1.9617 -5.7579 11.9445 -17.3718 -28.1589 46.5359 0.0000 0.0000 27.2475 -5.5180 10.6793 5.0098 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -1.5899 3.0206 -13.4048 22.1844 13.2898 -83.3226 -0.0000 0.0000 6.3127 6.3667 4.6703 -4.0517 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -32.0362 2.0198 -13.8756 6.8718 0.0000 0.0000 17.8657 -8.8775 6.2426 -2.1134 0.0000 -0.0000 9.9574 0.1254 12.7523 16.0722 0.0000 0.0000 -22.3453 4.4563 -32.2619 -10.3672 0.0000 -0.0000\n -1.5957 32.5916 23.5490 3.4559 1.4093 13.5432 -4.7343 1.4338 -0.1089 -3.1036 0.2501 0.1061 14.6046 0.2044 1.0587 -0.8662 0.5878 0.3172 -15.8074 -0.8781 -2.7145 5.0637 -6.8605 -3.2344 -1.6511 -6.9784 11.6804 -15.0218 -24.4484 48.1654 0.0000 0.0000 25.3349 -4.2416 13.6394 6.9626 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -1.9239 3.7403 -13.6279 22.0571 13.2958 -82.9157 -0.0000 0.0000 6.2823 6.4845 5.2118 -4.2504 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -31.9765 0.6956 -13.1380 8.4508 0.0000 0.0000 19.5110 -5.3018 7.0257 -1.4921 0.0000 -0.0000 9.9200 -0.5470 12.4987 16.5757 0.0000 0.0000 -22.6007 6.1104 -34.3240 -11.7817 0.0000 -0.0000\n -1.4920 31.6785 23.3532 4.4274 2.9577 15.4371 -5.2264 -0.4724 0.1344 -3.5992 0.3173 0.0620 15.0247 0.0267 -0.1024 -1.4945 0.4053 -0.0041 -17.6821 -3.0760 -2.6303 2.5262 -9.1600 -2.0223 -0.6985 -8.6273 12.1025 -13.3117 -19.3341 49.1258 0.0000 0.0000 23.4559 -3.5528 16.7794 8.5708 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.5806 6.0707 -13.8150 20.9935 11.9366 -81.9565 -0.0000 0.0000 5.9067 6.4864 5.4169 -4.1777 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -32.0378 -1.9161 -8.8369 11.6845 0.0000 0.0000 15.7445 1.1026 4.2812 0.0573 0.0000 0.0000 9.6472 -3.1748 13.2548 18.8751 0.0000 0.0000 -23.8826 6.6050 -37.0672 -12.7078 0.0000 -0.0000\n -1.4280 30.7600 23.3055 3.8483 5.1536 16.6383 -4.4783 -1.9444 0.2071 -3.4305 -0.0232 -0.0819 15.2535 -1.0686 -0.9568 -2.3524 -0.3662 -0.0092 -19.8653 -6.4354 -3.1611 0.3567 -11.2823 -0.4695 0.9595 -9.1844 13.4895 -12.5568 -15.8310 48.5559 0.0000 0.0000 22.3756 -2.8147 20.0806 9.4000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0661 8.5220 -14.5552 19.1400 11.3598 -80.5877 -0.0000 0.0000 5.3030 6.2374 3.2821 -3.6086 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -31.8218 -5.0174 -4.3860 16.2596 0.0000 0.0000 9.7523 5.2765 -0.3403 1.2427 0.0000 0.0000 8.7723 -7.3670 14.2290 24.3634 0.0000 0.0000 -23.1618 6.7973 -39.5703 -13.1322 0.0000 -0.0000\n -1.3683 29.8991 23.4908 2.8234 6.1811 17.6601 -2.9000 -1.4213 0.0602 -2.6295 -0.0101 -0.1632 14.6687 -2.7385 -1.7542 -2.8361 -1.9319 0.2273 -21.7582 -11.1544 -5.0891 -1.4153 -13.3270 0.9757 2.5815 -7.8179 14.3178 -11.0839 -16.1022 48.3272 0.0000 0.0000 20.8476 -3.1672 23.1206 9.8443 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 1.4485 8.6612 -16.0186 18.1294 13.3841 -79.4927 -0.0000 0.0000 4.6371 5.5118 -0.3358 -3.3862 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -30.3480 -6.3226 -3.6547 19.0707 0.0000 0.0000 5.7616 5.0066 -2.6400 1.2603 0.0000 0.0000 6.0374 -10.8530 12.5921 32.3535 0.0000 0.0000 -15.1087 9.7431 -40.3344 -13.1341 0.0000 -0.0000\n -1.2840 29.0983 23.7828 2.4811 5.6982 18.7994 -1.5684 -0.0302 -0.1460 -1.9224 0.4755 -0.1197 13.3669 -3.4004 -2.4656 -2.7048 -3.4541 0.4852 -22.5732 -16.1479 -7.9401 -2.5840 -15.2220 1.2555 3.1810 -5.4229 13.4277 -6.6678 -18.4257 50.4627 0.0000 0.0000 16.8987 -4.9021 23.0727 9.3917 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 1.4689 6.4630 -17.5647 19.1267 16.4893 -79.3911 -0.0000 0.0000 3.8740 4.1616 -0.7648 -4.2216 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -27.6225 -5.7296 -5.2060 18.9384 0.0000 0.0000 4.0855 3.8038 -2.1522 0.9487 0.0000 0.0000 1.9445 -12.4583 8.9147 39.4072 0.0000 0.0000 -1.2206 17.0271 -39.8804 -10.5969 0.0000 -0.0000\n -1.1769 28.3108 24.0124 2.5120 4.8265 19.3220 -1.0933 0.4679 -0.1180 -1.6873 0.7799 -0.0277 12.3156 -2.8597 -2.4217 -2.4452 -4.0307 0.7366 -22.1074 -19.0536 -10.0084 -2.3614 -16.3695 0.0291 2.6380 -3.5476 12.0684 0.1143 -19.4135 53.9769 0.0000 0.0000 11.3999 -5.0859 16.1591 6.6381 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.2249 4.9199 -18.3265 20.9254 17.7804 -80.2529 -0.0000 0.0000 3.2447 3.2378 4.2687 -5.2007 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -24.3328 -5.3006 -5.8030 17.3860 0.0000 0.0000 2.6982 4.7491 -1.2750 0.9192 0.0000 0.0000 -1.0488 -13.3773 6.4784 43.1939 0.0000 0.0000 6.9856 23.4070 -37.7475 -7.7815 0.0000 -0.0000\n -1.0722 27.5330 24.1460 2.1881 4.5595 18.6511 -1.1944 -0.3464 0.0922 -1.7870 0.5490 0.0314 12.0391 -1.9806 -1.3611 -2.3655 -3.7949 0.9919 -20.6267 -18.9188 -10.5694 -0.3993 -16.3906 -1.4741 1.9872 -3.3285 11.7352 5.6981 -18.5589 56.0307 0.0000 0.0000 7.6547 -1.3574 3.5258 3.0609 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.9819 5.4880 -17.9897 21.4460 17.0930 -81.2524 -0.0000 0.0000 3.2549 3.7680 10.6397 -5.2215 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -21.2393 -6.0957 -4.5425 16.2835 0.0000 0.0000 0.6985 6.4326 -1.5442 0.9918 0.0000 0.0000 -2.1904 -15.1946 6.7477 44.1335 0.0000 0.0000 3.3760 24.0651 -31.4279 -8.1182 0.0000 -0.0000\n -0.9911 26.8121 24.2214 1.7932 4.7124 17.5646 -1.5517 -1.4323 0.2175 -1.9680 0.1793 0.0481 12.1304 -1.4131 -0.2909 -2.2681 -3.3920 1.1546 -18.6393 -17.0894 -10.1022 2.0405 -15.5652 -2.3824 1.9220 -4.2707 11.8992 9.0186 -17.8479 56.7424 0.0000 0.0000 6.8103 3.2134 -7.3364 1.7752 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -1.6621 6.4031 -17.1310 20.4257 15.9874 -81.8507 -0.0000 0.0000 3.7591 5.0825 12.7432 -4.5204 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -19.1580 -7.2203 -3.1000 16.5679 0.0000 0.0000 -1.3299 6.8871 -2.2453 0.8810 0.0000 0.0000 -2.9065 -17.6027 8.5433 42.9011 0.0000 0.0000 -5.4092 19.1461 -22.9656 -8.9080 0.0000 -0.0000\n -0.9170 26.1579 24.2698 1.5004 4.1951 17.2239 -1.7983 -1.6750 0.1919 -2.0781 0.2489 0.0757 12.2320 -1.1006 -0.1539 -1.9207 -3.0981 1.0785 -16.7807 -15.3938 -9.3706 3.4713 -14.6440 -2.8562 2.1105 -5.1274 11.5126 11.3334 -18.8903 57.8782 0.0000 0.0000 7.4366 4.1315 -11.4011 2.1006 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -2.2138 5.9992 -16.3380 18.8378 14.7160 -82.0128 -0.0000 0.0000 4.0731 5.5804 9.5525 -3.9416 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -17.6329 -7.3624 -2.3929 17.8631 0.0000 0.0000 -3.3559 6.8796 -2.6347 0.6772 0.0000 0.0000 -4.2400 -19.1114 9.2915 39.9863 0.0000 0.0000 -10.7677 14.2717 -16.1760 -8.7507 0.0000 -0.0000\n -0.8335 25.5599 24.2917 1.1192 3.0020 17.4000 -1.8384 -1.3945 0.1300 -2.1039 0.5258 0.1171 12.4616 -0.5597 -0.4898 -1.4247 -2.7663 0.8505 -15.3983 -14.2595 -8.7794 3.8854 -14.0900 -3.2089 2.2864 -5.3925 10.8642 13.2537 -21.2375 59.3524 0.0000 0.0000 8.1031 0.6344 -9.8543 2.6651 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -2.9572 4.8636 -15.8345 17.0024 13.6314 -81.7027 -0.0000 0.0000 3.7391 4.8052 4.2852 -3.7901 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -16.1110 -6.7459 -1.7556 19.5630 0.0000 0.0000 -5.7008 7.5431 -2.9588 0.5265 0.0000 0.0000 -5.8790 -19.5467 8.8541 35.9090 0.0000 0.0000 -12.7767 11.4675 -11.8186 -9.2001 0.0000 -0.0000\n -0.7479 25.0196 24.2876 0.5767 2.1957 16.9767 -1.8246 -1.5939 0.0914 -2.0977 0.6066 0.1484 12.8672 0.1898 -0.3100 -1.0003 -2.3503 0.7157 -14.4780 -13.2129 -8.3144 4.0077 -13.7152 -3.5282 2.6185 -5.1861 10.7148 14.3721 -23.5885 60.1972 0.0000 0.0000 8.4668 -3.2053 -6.4006 3.1437 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -3.7046 4.2074 -15.5825 14.6021 14.0915 -81.0724 -0.0000 0.0000 3.0037 3.7242 -0.0084 -3.9240 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -14.6505 -6.5317 -0.9675 21.1321 0.0000 0.0000 -7.9879 8.2263 -3.0373 0.4111 0.0000 0.0000 -7.3974 -20.1121 9.2032 31.1314 0.0000 0.0000 -13.9270 9.0703 -10.1727 -9.3399 0.0000 -0.0000\n -0.6619 24.5311 24.2778 0.0656 2.0608 15.7684 -1.8542 -2.2563 0.0654 -2.0892 0.5423 0.1733 13.2272 0.8344 0.3933 -0.7070 -2.0192 0.7557 -13.8345 -12.2044 -7.8926 4.1255 -13.3288 -3.7927 3.0238 -4.8857 10.9456 14.8864 -25.2167 60.5064 0.0000 0.0000 8.6227 -3.9028 -3.3142 3.1282 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.3520 3.9831 -15.4027 12.0673 16.1769 -80.4800 -0.0000 0.0000 2.2950 3.0801 -2.4424 -4.1511 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -13.2135 -6.8796 -0.3214 21.9614 0.0000 0.0000 -9.6219 8.2921 -2.4956 0.3151 0.0000 0.0000 -9.2877 -21.1080 10.4044 26.3870 0.0000 0.0000 -14.6235 8.1852 -10.9368 -9.6003 0.0000 -0.0000\n -0.5605 24.0648 24.2760 -0.4554 2.0425 14.6108 -1.7589 -2.8408 0.0296 -2.0155 0.6385 0.2148 13.3432 1.2067 0.9403 -0.5049 -1.8415 0.8238 -13.2693 -11.4897 -7.5335 4.2446 -13.0812 -3.9515 3.2060 -4.7538 10.9642 15.7016 -25.9491 61.0748 0.0000 0.0000 8.5305 -2.6905 -1.2658 2.8878 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -4.9772 3.5911 -15.1977 10.3008 17.6966 -80.1786 -0.0000 0.0000 1.7687 2.8189 -2.9913 -4.4133 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -11.3433 -7.2544 0.3662 21.8501 0.0000 0.0000 -10.7211 8.3122 -1.8998 0.2673 0.0000 0.0000 -11.8203 -21.7808 10.3800 22.1933 0.0000 0.0000 -14.3042 10.0447 -12.4482 -12.9919 0.0000 -0.0000\n -0.4335 23.5979 24.2739 -1.2646 2.0025 13.8838 -1.3933 -3.4317 -0.0083 -1.7991 0.9219 0.2582 13.2431 1.4187 1.1107 -0.3745 -1.7467 0.8540 -12.7467 -10.9859 -7.2870 4.5306 -13.0638 -3.9577 3.1289 -4.5638 10.7148 16.8348 -26.3459 61.8371 0.0000 0.0000 8.3157 -2.1617 -0.6472 2.9564 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -5.5808 2.9751 -15.1367 9.4668 17.2632 -80.1093 -0.0000 0.0000 1.4769 2.8938 -2.0663 -4.6737 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.9076 -7.6236 1.4893 21.2895 0.0000 0.0000 -11.7603 8.6007 -2.0167 0.2656 0.0000 0.0000 -14.5432 -21.8916 8.1790 18.8087 0.0000 0.0000 -13.7568 12.1670 -13.1735 -17.1107 0.0000 -0.0000\n -0.2813 23.1321 24.2701 -2.3352 1.9787 13.0718 -0.8403 -4.1016 -0.0139 -1.4838 1.2065 0.2983 13.1351 1.6259 1.3077 -0.2777 -1.6655 0.9025 -12.4120 -10.4849 -7.1362 5.0349 -13.1139 -3.8625 3.0523 -4.0620 10.6192 17.4983 -27.0846 62.0984 0.0000 0.0000 8.2689 -2.4997 -1.2036 3.2328 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.1214 2.3763 -15.3109 9.0586 16.1208 -80.0984 -0.0000 0.0000 1.5216 3.3277 -0.8604 -4.8222 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -6.2572 -7.9226 2.7910 20.8438 0.0000 0.0000 -12.8537 8.6508 -2.3131 0.3076 0.0000 0.0000 -16.9765 -21.6233 5.1834 16.3449 0.0000 0.0000 -14.1850 12.2344 -13.0728 -15.8871 0.0000 -0.0000\n -0.1072 22.6740 24.2686 -3.3096 1.7622 11.8322 -0.3237 -4.5038 0.0148 -1.1883 1.3794 0.3370 13.1347 1.9371 1.7488 -0.1816 -1.5740 1.0004 -12.2858 -10.0151 -7.0217 5.4991 -13.1152 -3.8010 3.0915 -3.4337 10.7730 17.5972 -27.9834 61.8801 0.0000 0.0000 8.3496 -2.5092 -1.8409 3.4193 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.5856 1.8637 -15.5145 8.8019 15.6673 -80.1618 -0.0000 0.0000 1.8616 3.7756 -0.2155 -4.8148 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -3.7860 -7.7560 3.7397 20.6403 0.0000 0.0000 -13.9536 8.3378 -1.8790 0.3723 0.0000 0.0000 -19.1543 -20.9232 2.8336 14.3782 0.0000 0.0000 -14.9550 11.5758 -12.8483 -11.7351 0.0000 -0.0000\n 0.0939 22.2106 24.2620 -4.1730 1.1619 10.5149 0.1896 -4.4807 0.0450 -0.9289 1.4753 0.3762 13.1629 2.3476 2.1791 -0.1116 -1.4146 1.0583 -12.1725 -9.6399 -6.8928 5.7705 -13.1165 -3.8216 3.1564 -2.9740 10.8624 17.7739 -28.3277 61.8540 0.0000 0.0000 8.3152 -1.9989 -1.8205 3.4774 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.9190 1.4718 -15.5159 8.7707 15.4973 -80.3421 -0.0000 0.0000 2.1412 4.0459 0.0156 -4.7949 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.4465 -7.0012 4.4847 20.6777 0.0000 0.0000 -15.2085 8.1307 -1.1161 0.3941 0.0000 0.0000 -21.1143 -19.6148 1.0197 12.4905 0.0000 0.0000 -14.9335 12.0553 -12.4393 -9.9481 0.0000 -0.0000\n 0.3216 21.7257 24.2369 -5.1856 0.4626 9.4656 0.8284 -4.3711 0.0685 -0.6284 1.4967 0.3842 13.1187 2.7518 2.3939 -0.0951 -1.1624 1.0188 -11.9156 -9.2192 -6.7220 6.0008 -13.1294 -3.8492 3.2482 -2.6397 10.7385 18.1290 -28.1427 62.1538 0.0000 0.0000 8.2442 -1.7166 -1.4444 3.4123 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.9997 1.3211 -15.3435 8.8863 15.0128 -80.5234 -0.0000 0.0000 2.0733 4.3645 0.1731 -4.8498 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.9465 -6.1300 5.4785 21.0304 0.0000 0.0000 -16.6859 8.0974 -0.9248 0.3829 0.0000 0.0000 -22.7713 -17.9839 -0.5917 11.0137 0.0000 0.0000 -14.5388 13.1840 -11.7481 -10.4909 0.0000 -0.0000\n 0.5635 21.2253 24.1937 -6.1580 -0.0169 8.4372 1.3626 -4.3615 0.1037 -0.3693 1.4182 0.3717 13.0979 3.0815 2.5321 -0.0801 -0.8790 0.9580 -11.5900 -8.6641 -6.4866 6.3253 -13.0674 -3.7902 3.3870 -2.3456 10.5909 18.1377 -28.1236 62.2557 0.0000 0.0000 8.3836 -2.0802 -1.2491 3.3082 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -6.8407 1.4292 -15.1450 8.9656 14.7505 -80.6122 -0.0000 0.0000 1.8550 4.7921 0.2004 -4.9174 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 3.1368 -5.4066 6.6285 21.6532 0.0000 0.0000 -18.1998 7.9197 -1.0272 0.4547 0.0000 0.0000 -24.2333 -16.4147 -1.7225 10.2785 0.0000 0.0000 -14.7334 13.5778 -11.2087 -10.2338 0.0000 -0.0000\n 0.8111 20.7141 24.1444 -6.7558 -0.3260 7.0916 1.4988 -4.2997 0.1189 -0.2853 1.2962 0.3688 13.2289 3.3864 2.7783 -0.0040 -0.6384 0.9434 -11.2986 -8.1241 -6.1577 6.7015 -12.9223 -3.6045 3.4360 -2.2707 10.5607 17.7847 -28.3715 62.0378 0.0000 0.0000 8.6075 -2.7715 -1.2230 3.3388 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -6.6931 1.6355 -14.9905 9.1835 15.1121 -80.6322 -0.0000 0.0000 1.8818 5.0305 0.1491 -4.9852 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 4.9485 -4.5972 7.5236 22.1754 0.0000 0.0000 -19.5826 7.6089 -0.6012 0.5506 0.0000 0.0000 -25.5047 -14.9993 -2.5750 9.7343 0.0000 0.0000 -15.1868 13.3923 -10.7962 -9.0431 0.0000 -0.0000\n 1.0656 20.1792 24.0942 -7.0699 -0.6289 5.5622 1.3343 -4.0963 0.0864 -0.3362 1.2432 0.3838 13.4721 3.7014 3.0015 0.1119 -0.4600 0.9315 -11.0398 -7.7422 -5.7569 7.0978 -12.8071 -3.2877 3.2892 -2.4945 10.5623 17.6082 -28.3688 61.9638 0.0000 0.0000 8.6378 -3.1271 -1.1562 3.5214 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.7603 1.7659 -14.9057 9.8202 15.4188 -80.5968 -0.0000 0.0000 2.2910 4.9775 0.4875 -5.0758 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 6.6457 -3.5416 8.0808 22.3419 0.0000 0.0000 -20.8348 7.3330 0.2820 0.4582 0.0000 0.0000 -26.3760 -13.6690 -3.6489 8.8994 0.0000 0.0000 -15.2564 13.6851 -10.0586 -8.6232 0.0000 -0.0000\n 1.3172 19.6238 24.0328 -7.2285 -0.7501 4.1503 1.0891 -3.9147 0.0391 -0.4053 1.2646 0.3975 13.6726 3.9471 2.9972 0.1976 -0.3104 0.8649 -10.8762 -7.4775 -5.3591 7.5074 -12.7611 -2.8807 3.0939 -2.7730 10.5519 17.6344 -28.1351 62.1459 0.0000 0.0000 8.6266 -2.9592 -1.0788 3.6689 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -6.9780 1.7591 -14.9208 10.7153 15.1344 -80.4505 -0.0000 0.0000 2.8823 4.9641 1.4693 -5.0858 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 8.2228 -2.5968 8.6187 22.3950 0.0000 0.0000 -21.9457 6.9668 0.9529 0.2338 0.0000 0.0000 -27.0059 -12.5602 -4.5334 8.3124 0.0000 0.0000 -15.5740 14.5026 -9.3112 -8.7891 0.0000 -0.0000\n 1.5500 19.0699 23.9566 -7.0917 -0.4724 2.8689 0.8287 -3.8064 -0.0196 -0.5141 1.2336 0.3935 13.7901 4.0568 2.8258 0.2035 -0.1645 0.7634 -10.9635 -7.2266 -5.0043 7.8204 -12.6897 -2.4712 3.0245 -3.0275 10.6361 17.3557 -28.0708 62.1347 0.0000 0.0000 8.8728 -2.9825 -1.1143 3.6816 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -7.1230 1.7747 -14.9818 11.4014 14.5348 -80.1721 -0.0000 0.0000 3.3767 5.2189 2.6353 -4.9850 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 9.3504 -2.0686 9.2962 22.5979 0.0000 0.0000 -22.8319 6.3623 1.3788 0.0955 0.0000 0.0000 -27.7046 -11.8222 -4.5451 8.4537 0.0000 0.0000 -16.8372 14.8734 -9.1755 -8.7150 0.0000 -0.0000\n 1.7677 18.5170 23.8815 -6.4997 0.0851 1.7045 0.4208 -3.6472 -0.1356 -0.7394 1.1158 0.3760 13.9384 4.0881 2.5826 0.1039 -0.0406 0.6531 -11.3276 -6.9880 -4.7062 7.9835 -12.5382 -2.1252 3.0163 -3.6910 10.8191 16.7004 -27.8960 61.6701 0.0000 0.0000 9.2116 -3.7359 -1.3023 3.6477 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -7.0715 2.0722 -15.0119 11.7295 13.8673 -79.8332 -0.0000 0.0000 3.6543 5.5173 3.3805 -4.9125 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 10.0066 -1.7585 9.7131 22.6961 0.0000 0.0000 -23.3865 5.6112 2.1152 -0.1602 0.0000 -0.0000 -28.4489 -11.3027 -4.0897 8.8269 0.0000 0.0000 -18.2624 14.2782 -9.0910 -8.8052 0.0000 -0.0000\n 1.9908 17.9294 23.8227 -5.6067 0.6754 0.9100 -0.2007 -3.4320 -0.3191 -1.0231 1.0905 0.3648 14.1925 4.0891 2.1556 -0.0993 0.0219 0.5038 -11.8935 -6.7167 -4.4977 8.1959 -12.3788 -1.8661 2.9382 -4.9112 10.9459 16.1064 -27.2185 60.9844 0.0000 0.0000 9.2552 -4.4428 -1.5825 3.6648 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.9138 2.6628 -15.0736 11.9836 13.1083 -79.5416 -0.0000 0.0000 3.7802 5.5698 3.7193 -4.9591 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 10.6942 -1.3879 9.4402 22.2443 0.0000 0.0000 -23.4568 4.8513 3.2537 -0.9452 0.0000 -0.0000 -28.8337 -10.6514 -3.6338 8.9024 0.0000 0.0000 -18.9844 13.0370 -8.2376 -9.3862 0.0000 -0.0000\n 2.2224 17.2788 23.7696 -4.7013 1.3202 0.4665 -0.8129 -3.2631 -0.5129 -1.2808 1.2013 0.3682 14.4304 4.0454 1.5888 -0.3689 0.0716 0.3241 -12.7384 -6.2677 -4.3633 8.6423 -12.2169 -1.6819 2.8004 -6.0488 11.0376 15.6519 -26.7923 60.1240 0.0000 0.0000 9.0700 -4.1960 -1.8453 3.7827 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -6.7660 3.2583 -15.2921 12.3182 12.4707 -79.3514 -0.0000 0.0000 3.8938 5.5522 4.0946 -5.0679 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 11.7966 -1.0950 8.8595 21.2761 0.0000 0.0000 -23.0130 4.2162 4.2729 -2.0685 0.0000 -0.0000 -28.3443 -9.8511 -2.8103 8.7562 0.0000 0.0000 -19.8596 11.1701 -6.8271 -9.6958 0.0000 -0.0000\n 2.4366 16.5935 23.6958 -3.3101 2.2749 -0.1396 -1.6027 -3.1149 -0.6922 -1.6611 1.1671 0.3581 14.5996 3.9995 1.2307 -0.7206 0.1772 0.1913 -14.1433 -5.6113 -4.1854 9.1175 -11.9238 -1.5254 2.6650 -6.8243 11.3733 14.8504 -27.3066 58.6051 0.0000 0.0000 9.0273 -3.7921 -2.0560 4.0026 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -6.6504 3.9019 -15.6403 12.5708 11.8841 -79.2104 -0.0000 0.0000 4.0452 5.9568 4.6739 -5.2090 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 12.4295 -1.2396 8.7442 20.4233 0.0000 0.0000 -22.3716 3.8814 4.8533 -3.0012 0.0000 -0.0000 -27.4098 -9.3998 -1.6569 8.2802 0.0000 0.0000 -21.5956 8.2568 -5.3936 -9.3416 0.0000 -0.0000\n 2.6360 15.8973 23.6146 -1.1890 2.9775 -0.6732 -2.6888 -2.3519 -0.9152 -2.3374 0.9425 0.3366 14.9607 4.1525 0.9491 -1.2615 0.2635 0.0654 -16.3015 -5.0291 -4.0272 9.2168 -11.4706 -1.4151 2.5534 -8.3379 12.0574 13.2600 -27.8188 55.7464 0.0000 0.0000 9.3791 -4.5272 -2.2597 4.1647 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.4775 5.0121 -16.1199 12.6407 10.4980 -79.0302 -0.0000 0.0000 4.1406 6.7684 5.1960 -5.3979 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 12.2510 -1.2226 8.3686 19.7480 0.0000 0.0000 -21.7342 3.6011 5.4347 -3.8611 0.0000 -0.0000 -26.4914 -8.9608 -1.3906 6.5573 0.0000 0.0000 -22.0979 5.2923 -3.4953 -9.0033 0.0000 -0.0000\n 2.8604 15.1698 23.5725 0.9285 2.3390 0.3784 -3.5825 -0.4337 -1.1565 -3.0748 1.0850 0.3785 15.7235 4.8521 0.0115 -2.0767 0.2040 -0.2634 -19.1555 -4.6525 -4.3381 8.7895 -10.9585 -1.6612 2.7382 -11.4644 12.7932 10.6743 -27.3763 51.1582 0.0000 0.0000 10.3546 -5.9746 -2.0985 4.1188 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.1012 6.4445 -17.0462 12.6092 8.2788 -78.9617 -0.0000 0.0000 4.0341 7.4015 5.2086 -5.5357 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 12.3669 -0.0316 6.1134 18.7856 0.0000 0.0000 -20.7294 2.8746 6.2924 -5.1643 0.0000 -0.0000 -25.4760 -7.3173 -2.7480 3.1619 0.0000 0.0000 -18.6248 5.3606 -0.8167 -9.3277 0.0000 -0.0000\n 3.1258 14.3899 23.5899 2.1085 0.4283 3.5721 -3.2911 1.6536 -1.2575 -3.1399 1.8955 0.5240 16.2414 6.5516 -1.4625 -3.0298 0.2641 -0.8141 -22.2537 -3.7260 -5.3758 7.8804 -10.1603 -2.7913 3.6369 -14.7553 13.2976 6.8712 -27.4642 44.7034 0.0000 0.0000 12.2299 -6.9847 -0.9231 4.0475 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -5.1951 7.2117 -18.6577 12.4099 7.0675 -79.5563 -0.0000 0.0000 3.5895 7.6436 4.1314 -5.6198 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 13.8348 1.9826 2.4161 17.8292 0.0000 0.0000 -18.9067 1.9631 6.8078 -6.7369 0.0000 -0.0000 -23.9981 -4.2867 -5.2556 -0.5187 0.0000 -0.0000 -12.4442 9.5454 1.7433 -10.1698 0.0000 -0.0000\n 3.3770 13.6261 23.6712 3.0956 -1.1040 6.8070 -2.1846 2.2955 -1.1075 -2.4938 2.4223 0.6314 15.8975 9.0814 -1.9242 -3.8429 1.1256 -1.2296 -25.0949 -0.9499 -6.2889 6.3671 -8.4333 -4.9783 5.0700 -16.1871 13.6612 1.7629 -29.6611 36.3924 0.0000 0.0000 14.6805 -7.9972 0.9445 4.1710 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.5396 7.3200 -20.2840 11.9885 7.6528 -81.1636 -0.0000 0.0000 2.6298 7.6910 1.7476 -5.9850 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 14.5308 3.2333 0.1126 18.6057 0.0000 0.0000 -16.3576 1.6304 6.3371 -8.0845 0.0000 -0.0000 -23.2152 -1.5551 -7.5495 -2.0817 0.0000 -0.0000 -7.6970 13.4715 2.7269 -11.1351 0.0000 -0.0000\n 3.5506 12.9208 23.8341 4.6425 -1.1566 7.7532 -1.3151 1.6351 -0.7755 -1.9636 1.8298 0.6262 14.9533 11.7818 -0.3422 -4.3668 2.6887 -1.1738 -27.2742 3.8022 -5.7215 4.1674 -5.3560 -7.4683 6.3233 -16.0361 14.0022 -3.3875 -32.4219 27.7079 0.0000 0.0000 16.4264 -9.9720 1.9160 4.1508 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.5753 7.7296 -20.6916 12.0134 8.5032 -83.2950 -0.0000 0.0000 1.3146 7.0849 -1.1083 -6.6724 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 12.2836 3.4286 0.3656 22.0189 0.0000 0.0000 -12.9726 1.1241 5.7133 -9.4455 0.0000 -0.0000 -23.3975 -0.5939 -8.2713 -1.8896 0.0000 -0.0000 -5.8900 13.1963 1.9229 -12.3737 0.0000 -0.0000\n 3.6627 12.2557 24.0534 6.6332 -0.1403 6.5082 -1.0341 0.6239 -0.4056 -1.7798 0.7342 0.5969 13.6217 14.1815 2.2255 -4.6065 4.0558 -0.8768 -28.4273 8.9118 -3.5504 1.5400 -1.4342 -8.9269 6.7662 -15.8685 14.0459 -6.5114 -33.9565 21.5359 0.0000 0.0000 16.4122 -11.8917 1.0067 3.1897 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.2016 8.2401 -19.4257 13.2434 8.4304 -85.1660 -0.0000 0.0000 0.9369 4.9754 -3.1796 -7.0267 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 7.6499 3.2370 1.5274 27.2305 0.0000 0.0000 -8.0476 -1.7144 6.4053 -10.6001 0.0000 -0.0000 -23.9313 -1.3649 -8.2755 -1.4888 0.0000 -0.0000 -5.8063 10.4881 1.3683 -13.4038 0.0000 -0.0000\n 3.7850 11.6112 24.2642 8.3408 0.7803 4.9369 -0.9832 0.1196 -0.1042 -1.7085 0.2814 0.6153 12.3657 15.5038 3.8828 -4.6156 4.7359 -0.7515 -28.6142 12.9491 -0.7455 -0.8562 2.0905 -8.8263 6.3272 -15.9265 13.6551 -8.3917 -34.8043 18.0246 0.0000 0.0000 15.3359 -12.7638 -1.2069 1.2885 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0035 7.8600 -17.3807 15.5338 7.9362 -86.2137 -0.0000 0.0000 2.7812 2.1939 -3.8306 -6.4824 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 2.6156 3.5991 1.7265 33.0891 0.0000 0.0000 -1.7359 -7.2106 8.8963 -9.6208 0.0000 -0.0000 -24.2173 -2.4221 -8.2424 -1.1061 0.0000 -0.0000 -5.7584 9.2619 1.6970 -13.8404 0.0000 -0.0000\n 3.9504 10.9929 24.4175 9.2852 0.9858 3.9002 -0.9236 0.5226 0.1045 -1.6308 0.6441 0.6806 11.7235 15.3739 4.2268 -4.4392 4.9520 -0.8292 -28.2594 15.8637 1.9467 -2.1103 4.5625 -7.8434 5.6315 -15.5031 13.1034 -11.8333 -35.6842 14.7378 0.0000 0.0000 14.7429 -14.3846 -3.0691 -0.5609 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.6475 6.5915 -15.7192 18.0652 7.8394 -86.1589 -0.0000 0.0000 6.0861 1.2785 -3.0206 -5.7318 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -1.7800 5.0490 0.8165 39.0591 0.0000 0.0000 3.3380 -12.5346 11.7811 -6.5577 0.0000 -0.0000 -23.9982 -2.6675 -7.5884 -0.3342 0.0000 -0.0000 -5.4998 9.7175 1.6411 -13.9953 0.0000 -0.0000\n 4.1244 10.4116 24.5286 9.6088 0.8543 2.8167 -0.8821 1.4863 0.2266 -1.5840 0.9817 0.7093 11.6635 14.5493 4.3598 -4.1628 5.0647 -0.8698 -27.6338 18.1099 4.2312 -1.9921 6.3871 -6.7939 5.2310 -14.7172 12.6861 -17.4230 -35.8210 10.4005 0.0000 0.0000 15.5537 -17.9465 -3.2446 -1.6099 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -1.1573 5.4736 -14.4288 19.9268 7.5204 -85.2205 -0.0000 0.0000 8.5842 2.9606 -1.8847 -6.0299 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -5.7430 6.9547 -0.4252 44.6247 0.0000 0.0000 3.8085 -15.1550 12.0992 -4.4347 0.0000 -0.0000 -23.2726 -2.4810 -6.3137 0.6694 0.0000 0.0000 -5.4209 9.4320 0.8626 -14.0670 0.0000 -0.0000\n 4.2727 9.8611 24.6404 9.5567 0.9384 1.5317 -0.8902 2.3909 0.2841 -1.5556 0.9087 0.6983 11.8984 13.7652 4.7997 -3.8255 5.1510 -0.7934 -26.5698 19.8654 5.9156 -1.2015 8.0445 -5.9295 5.1091 -14.1598 12.3371 -22.6345 -34.2287 6.4939 0.0000 0.0000 17.5967 -20.0286 -1.8722 -1.6376 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.0245 5.1362 -12.8155 20.8925 6.2761 -84.1681 -0.0000 0.0000 9.1552 4.4344 -1.9715 -7.1618 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -9.3967 8.5482 -2.1440 48.5340 0.0000 0.0000 0.1226 -14.7616 8.4818 -4.3242 0.0000 -0.0000 -22.0973 -2.5560 -5.2822 1.3964 0.0000 0.0000 -5.4174 8.2255 0.2561 -14.1616 0.0000 -0.0000\n 4.3969 9.3302 24.7621 9.1741 1.4553 0.7370 -0.8469 2.8671 0.2813 -1.4893 0.7476 0.6547 12.3124 12.9558 5.1365 -3.3775 5.1806 -0.7315 -24.8898 21.0956 6.8285 -0.3047 9.3789 -5.2023 5.0765 -13.7151 11.8535 -25.5368 -31.3469 4.4981 0.0000 0.0000 20.2488 -17.0136 0.3458 -1.0518 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.6737 5.1721 -10.9296 21.3479 5.6249 -83.6536 -0.0000 0.0000 8.6574 3.1944 -3.1208 -7.9668 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -12.3372 9.7098 -5.0432 49.6365 0.0000 0.0000 -3.8184 -12.2178 3.0198 -4.7264 0.0000 -0.0000 -20.5688 -3.0263 -4.5839 1.7227 0.0000 0.0000 -5.1066 7.9302 -0.3000 -14.5124 0.0000 -0.0000\n 4.5118 8.8107 24.8743 8.4463 2.2185 0.6527 -0.6987 3.0516 0.2147 -1.3803 0.7056 0.6011 12.9250 11.8967 5.1124 -2.8232 5.1430 -0.7291 -22.8645 21.7564 7.0075 0.7869 10.0670 -4.5953 5.0808 -12.9827 11.2562 -26.9602 -28.0129 3.9217 0.0000 0.0000 23.0462 -10.9097 2.7908 -0.3088 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.5833 5.0443 -9.3645 21.6439 7.0033 -83.7898 -0.0000 0.0000 8.4219 0.8031 -4.2825 -8.1979 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -14.3807 10.7730 -8.8853 48.0267 0.0000 0.0000 -5.7564 -9.5296 -1.1839 -4.0930 0.0000 -0.0000 -18.7291 -3.6117 -3.5394 1.8276 0.0000 0.0000 -4.5728 8.6288 -1.6296 -14.6643 0.0000 -0.0000\n 4.6128 8.2948 24.9701 7.3941 3.0068 0.8181 -0.4145 3.2998 0.0908 -1.2791 0.6276 0.5323 13.6727 10.7021 4.9178 -2.2720 4.9675 -0.7174 -20.9158 21.8164 6.7481 2.2234 10.2162 -4.1124 5.0000 -12.0652 10.7096 -28.5006 -24.6426 3.8406 0.0000 0.0000 25.7517 -6.4095 4.7534 0.5226 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.6084 4.8538 -8.3719 21.8715 9.0897 -84.1793 -0.0000 0.0000 8.7059 0.1527 -5.1131 -8.2531 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.6349 11.7712 -12.8158 44.2736 0.0000 0.0000 -6.2535 -8.2730 -2.7358 -2.8097 0.0000 -0.0000 -16.6052 -4.1514 -1.8958 1.9791 0.0000 0.0000 -4.1566 8.7715 -3.7166 -13.4950 0.0000 -0.0000\n 4.6822 7.7999 25.0518 6.5535 3.8403 0.9129 -0.3048 3.6486 -0.0469 -1.2638 0.5132 0.4633 14.3610 9.4722 4.6486 -1.8061 4.6170 -0.6800 -19.0927 21.3127 6.3063 3.7914 10.1712 -3.7138 4.5897 -11.2372 10.2818 -30.5564 -21.6371 4.0666 0.0000 0.0000 28.3743 -4.0509 6.2924 1.1604 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.4397 4.8512 -7.7436 22.0701 9.9128 -84.4638 -0.0000 0.0000 8.9512 1.1169 -5.5749 -8.2786 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -16.8115 12.3411 -16.1233 38.7214 0.0000 0.0000 -5.5604 -8.2500 -1.6914 -1.7858 0.0000 -0.0000 -15.0218 -4.7926 0.2237 2.6862 0.0000 0.0000 -3.8515 7.7790 -6.1819 -10.9417 0.0000 -0.0000\n 4.7100 7.3318 25.1212 6.0608 4.9486 0.9803 -0.3531 3.7120 -0.1492 -1.3433 0.4476 0.4062 14.8228 8.2502 4.3013 -1.3854 4.1977 -0.6429 -17.1816 20.4572 5.6972 5.2453 10.0488 -3.4020 3.8032 -10.4510 9.8813 -32.5391 -19.3970 4.7436 0.0000 0.0000 31.1000 -1.2281 8.0939 1.2334 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.1461 4.8835 -7.2514 22.4043 9.7418 -84.7282 -0.0000 0.0000 8.9019 1.8540 -5.6551 -8.1557 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -18.0047 12.0084 -18.2752 31.4311 0.0000 0.0000 -3.1620 -7.8593 0.9527 -1.1263 0.0000 -0.0000 -14.2526 -5.8571 2.3690 4.0742 0.0000 0.0000 -3.4012 6.1528 -8.7374 -8.7795 0.0000 -0.0000\n 4.7038 6.8731 25.1716 5.7570 6.1920 1.0219 -0.5274 3.4611 -0.1778 -1.4551 0.3579 0.3612 15.1150 7.1730 4.0266 -0.9493 3.8272 -0.5945 -15.1173 19.5180 4.8571 6.5869 9.8409 -3.2703 2.8758 -9.5664 9.4003 -33.9017 -17.8513 5.8838 0.0000 0.0000 33.9785 2.7603 9.9894 0.9045 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0053 4.7179 -6.8409 22.9926 10.1469 -85.2447 -0.0000 0.0000 8.7294 1.9367 -5.4208 -7.8742 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -19.0186 10.9406 -18.8402 22.8536 0.0000 0.0000 0.2934 -6.1868 3.5043 -0.7073 0.0000 -0.0000 -13.8027 -7.1687 3.9153 5.5979 0.0000 0.0000 -2.9906 4.2882 -10.8395 -8.3143 0.0000 -0.0000\n 4.6900 6.3806 25.1952 5.1261 6.7499 1.1820 -0.5597 3.6515 -0.1564 -1.4618 0.2154 0.3213 15.3101 6.3046 3.9092 -0.4852 3.5060 -0.4961 -12.8897 18.5564 3.7767 7.9234 9.6234 -3.4295 2.0733 -8.6010 8.7927 -34.6575 -16.7088 7.3272 0.0000 0.0000 36.8186 6.3032 11.1634 0.7308 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0090 4.3428 -6.5022 23.8589 11.4946 -86.1389 -0.0000 0.0000 8.5248 2.1322 -5.0462 -7.5942 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -19.6183 10.4397 -18.3241 14.6073 0.0000 0.0000 3.2942 -4.5352 4.8854 -0.6455 0.0000 -0.0000 -12.5307 -7.7461 4.4926 6.4427 0.0000 0.0000 -3.1112 2.6683 -11.8301 -8.7817 0.0000 -0.0000\n 4.6759 5.8544 25.2008 4.2484 6.4559 1.7357 -0.4918 4.4110 -0.1306 -1.3735 0.0904 0.2977 15.4659 5.6616 3.7964 -0.0327 3.2068 -0.4021 -10.4761 17.4707 2.4380 9.2309 9.2965 -3.9475 1.4426 -7.8031 8.0961 -35.0854 -15.8666 8.9497 -0.0000 0.0000 39.3717 8.6417 11.5720 0.9381 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0853 4.0194 -6.1746 24.9284 12.7204 -87.2614 -0.0000 0.0000 8.2365 2.4443 -4.5610 -7.3626 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -20.6146 11.1461 -17.9185 8.9739 0.0000 0.0000 5.0085 -4.3843 5.2450 -0.8194 0.0000 -0.0000 -10.4575 -7.4223 4.4902 6.5013 0.0000 0.0000 -3.7466 2.0381 -12.0984 -9.0405 0.0000 -0.0000\n 4.6542 5.3144 25.2042 3.2483 5.9096 2.7234 -0.3259 5.0960 -0.1162 -1.2234 0.0106 0.2736 15.5729 5.2308 3.6147 0.4024 2.9567 -0.3616 -7.8532 16.1919 0.8218 10.4015 8.5591 -4.8523 0.9093 -7.1821 7.3771 -35.2120 -15.4742 10.7545 -0.0000 0.0000 41.4079 10.3745 11.8566 1.2292 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.2686 3.9600 -5.7376 26.1352 13.1930 -88.4974 -0.0000 0.0000 7.9626 2.4331 -3.9241 -7.1139 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -22.3859 12.5416 -17.9568 6.7406 0.0000 0.0000 5.6611 -5.0520 5.3221 -0.9475 0.0000 -0.0000 -7.9296 -6.9144 4.3784 5.9980 0.0000 0.0000 -4.4423 2.4365 -12.4091 -8.9958 0.0000 -0.0000\n 4.6209 4.7538 25.2015 1.9034 5.3847 4.0062 0.0657 5.5294 -0.1394 -0.9602 -0.0565 0.2425 15.6242 4.8767 3.4468 0.8534 2.7556 -0.3239 -5.0614 14.5546 -1.0160 11.4138 7.4011 -6.1123 0.4274 -6.4400 6.6694 -34.7636 -15.6052 12.7194 -0.0000 0.0000 42.7598 11.8424 12.2958 1.3291 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.5758 3.9392 -5.2050 27.4604 13.3080 -89.8775 -0.0000 0.0000 7.8113 2.3937 -3.3141 -6.8735 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -24.2960 14.1757 -17.5566 7.0476 0.0000 0.0000 5.9107 -4.8016 5.1322 -1.0150 0.0000 -0.0000 -4.8592 -6.5270 3.9813 5.1501 0.0000 0.0000 -5.0455 3.1114 -12.7570 -9.0106 0.0000 -0.0000\n 4.5649 4.1579 25.1867 0.2429 4.8899 5.5876 0.5692 5.8642 -0.1695 -0.6485 -0.0490 0.2219 15.7848 4.4466 3.2483 1.3266 2.4342 -0.2370 -2.3862 12.3874 -2.8848 12.3283 6.1526 -7.5956 0.0475 -5.6263 5.8562 -33.6267 -15.9770 15.0073 -0.0000 0.0000 43.3593 12.8877 12.6752 1.2715 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.8780 3.7489 -4.7736 28.7720 13.3106 -91.2506 -0.0000 0.0000 7.6447 2.7449 -2.9185 -6.7470 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -25.6204 15.6805 -16.1132 8.3310 0.0000 0.0000 6.3358 -2.9780 4.2833 -1.0609 0.0000 -0.0000 -1.5258 -6.3347 3.0734 4.4243 0.0000 0.0000 -5.8600 3.5741 -12.9900 -8.9643 0.0000 -0.0000\n 4.4777 3.5387 25.1616 -1.1436 4.5103 7.4422 0.7504 6.0482 -0.1344 -0.5318 0.0890 0.2220 16.2597 3.9355 2.9312 1.7794 1.9308 -0.1144 -0.2165 9.7801 -4.5518 13.1520 4.9991 -9.0788 -0.2194 -5.1553 4.9518 -32.0858 -16.1896 17.6050 -0.0000 0.0000 43.3962 13.7549 12.8578 1.1494 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -1.0671 3.6048 -4.5867 29.8141 12.9254 -92.2532 -0.0000 0.0000 7.3308 3.0142 -2.6499 -6.7534 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -26.3587 16.7267 -13.8174 9.2076 0.0000 0.0000 7.1740 -0.6616 3.3673 -1.1208 0.0000 -0.0000 1.1257 -6.5164 2.1782 4.4293 0.0000 0.0000 -7.0949 4.0134 -13.5608 -8.6208 0.0000 -0.0000\n 4.3593 2.9067 25.1252 -1.9471 4.3717 9.2135 0.4247 5.9956 -0.0305 -0.6939 0.1855 0.2276 16.9644 3.4105 2.6561 2.1818 1.4005 0.0443 1.2938 7.1164 -5.8618 13.8509 3.8138 -10.3601 -0.4106 -5.0800 4.2394 -30.4617 -16.1742 20.1072 -0.0000 0.0000 43.1684 14.8511 12.9136 0.9807 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -1.2111 3.7986 -4.5588 30.5271 12.3616 -92.7122 -0.0000 0.0000 6.9993 2.7300 -2.2772 -6.8472 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -26.8253 17.1550 -10.6405 9.1867 0.0000 0.0000 7.8392 0.5676 3.1069 -1.2125 0.0000 -0.0000 2.7652 -7.1713 2.0578 5.2625 0.0000 0.0000 -8.6397 4.6081 -14.8920 -8.1866 0.0000 -0.0000\n 4.2136 2.2524 25.0690 -2.4371 4.3901 10.5804 -0.1416 5.8700 0.0690 -0.9167 0.0464 0.2046 17.5339 2.8866 2.6405 2.5406 0.9530 0.2345 2.2453 4.6873 -6.8011 14.4133 2.4990 -11.3680 -0.5302 -5.0013 3.8864 -28.6762 -16.1414 22.2116 -0.0000 0.0000 42.8056 15.8742 12.8073 0.8703 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -1.3565 4.1400 -4.6106 31.0048 12.2856 -92.7411 -0.0000 0.0000 6.8346 2.3399 -1.6887 -7.0327 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -27.0587 17.0805 -7.4459 8.6097 0.0000 0.0000 7.6550 0.2497 3.6855 -1.1880 0.0000 -0.0000 3.9468 -8.1355 2.7532 6.5331 0.0000 0.0000 -10.3486 5.2337 -16.6858 -7.9649 0.0000 -0.0000\n 4.0489 1.5838 24.9830 -2.6900 4.2271 11.6755 -0.6662 5.8162 0.1139 -1.0912 -0.0931 0.1906 17.7961 2.4051 2.7148 2.8094 0.5088 0.4415 2.6756 2.4782 -7.5034 14.8098 1.1627 -12.1217 -0.5497 -4.8242 3.6996 -26.4986 -16.0155 24.1318 -0.0000 0.0000 42.2381 16.2038 12.3640 1.0089 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -1.4848 4.1994 -4.8762 31.1836 12.6192 -92.3692 -0.0000 0.0000 6.8118 2.3556 -0.9408 -7.2710 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -27.0755 16.8648 -6.2317 7.8768 0.0000 0.0000 7.0997 -0.5803 5.0793 -1.0802 0.0000 -0.0000 4.8563 -8.9879 3.5995 8.0227 0.0000 0.0000 -12.1516 5.8795 -18.3427 -7.8509 0.0000 -0.0000\n 3.8713 0.9128 24.8630 -2.4997 3.6602 12.6272 -1.1732 5.7904 0.1766 -1.3269 0.0317 0.2155 17.9303 2.0855 2.7063 2.9162 0.0580 0.6064 2.5138 0.4457 -8.0749 15.0223 -0.1232 -12.6749 -0.3407 -5.0053 3.5682 -24.1491 -15.2760 26.1992 -0.0000 0.0000 41.3523 15.9091 11.5503 1.3672 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.6427 4.0250 -5.3651 30.8933 12.5846 -91.4669 -0.0000 0.0000 6.7990 2.5877 -0.2068 -7.3919 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -27.0539 16.6849 -6.9931 7.0539 0.0000 0.0000 7.0890 -0.9451 6.4337 -1.2160 0.0000 -0.0000 5.4248 -9.4257 4.1672 9.4876 0.0000 0.0000 -13.8505 6.6895 -19.6141 -7.6526 0.0000 -0.0000\n 3.6799 0.2117 24.7138 -1.9944 2.7740 13.2396 -1.7641 5.7756 0.3147 -1.6196 0.2012 0.2570 18.0561 1.9985 2.7482 2.8880 -0.2880 0.7383 1.8443 -1.3012 -8.5715 15.1898 -1.4479 -13.0596 0.1633 -5.6878 3.6700 -22.1170 -13.9443 28.1916 -0.0000 0.0000 40.1612 15.5264 10.6079 1.7435 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.8777 4.0321 -5.8623 30.1492 12.1919 -90.0635 -0.0000 0.0000 6.8062 2.7791 0.2365 -7.2645 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -27.0796 16.4086 -7.7591 6.5695 0.0000 0.0000 7.1426 -1.5032 6.1644 -1.6433 0.0000 -0.0000 6.2013 -9.5095 4.6055 10.3859 0.0000 0.0000 -15.2304 7.6241 -20.5093 -7.5525 0.0000 -0.0000\n 3.4747 -0.5508 24.5419 -1.4487 1.6504 13.5985 -2.3506 5.8407 0.4623 -1.8742 0.2575 0.2871 18.0280 2.0841 2.8151 2.8086 -0.5250 0.8456 0.8811 -2.8257 -9.0177 15.4205 -2.8677 -13.2359 0.7470 -6.4386 3.9471 -20.2736 -12.9280 29.9445 -0.0000 0.0000 38.6379 15.0659 9.8986 2.0799 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -2.1096 4.2330 -6.3348 29.0330 12.3570 -88.2574 -0.0000 0.0000 6.8590 3.0222 0.3060 -7.0065 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -26.9530 16.0321 -8.8600 7.3616 0.0000 0.0000 5.7959 -3.1724 4.5996 -1.9304 0.0000 -0.0000 7.5786 -9.3606 4.9392 10.5224 0.0000 0.0000 -16.2450 8.5858 -21.0324 -7.7691 0.0000 -0.0000\n 3.2507 -1.3615 24.3394 -0.5241 0.2325 14.2246 -3.0685 5.9389 0.5434 -2.1948 0.5936 0.3468 17.8797 2.3237 2.5163 2.6468 -0.7870 0.8077 -0.3963 -4.3753 -9.3586 15.4784 -4.3523 -13.0657 1.1248 -7.1815 4.0631 -17.8168 -12.3280 32.0644 0.0000 0.0000 36.5160 13.9004 9.4740 2.5518 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -2.3697 4.4343 -7.0173 27.5004 13.0569 -85.6635 -0.0000 0.0000 6.6786 3.1893 0.4553 -6.9243 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -26.4421 15.7845 -12.3020 9.3275 0.0000 0.0000 3.6421 -5.1728 4.4004 -1.8458 0.0000 -0.0000 8.6708 -8.9699 4.8978 10.6001 0.0000 0.0000 -17.0186 9.7534 -21.4123 -8.0289 0.0000 -0.0000\n 2.9684 -2.2184 24.1042 0.9300 -0.9494 14.6866 -4.2009 5.4000 0.6745 -2.8615 1.3412 0.4776 18.1206 2.9044 1.9295 2.3120 -0.9920 0.6039 -2.3134 -5.9283 -9.3907 15.0811 -5.9664 -12.4123 1.2468 -8.4936 4.2115 -14.2978 -10.7439 35.1313 0.0000 0.0000 33.4939 11.7666 8.8358 3.2632 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -2.8052 5.2416 -7.8291 25.3584 12.5032 -81.5994 -0.0000 0.0000 5.9523 2.8005 1.2292 -7.1284 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -25.7512 14.8314 -15.2143 11.3951 0.0000 0.0000 3.4612 -6.1805 5.6018 -1.6624 0.0000 -0.0000 9.0814 -8.9319 5.1085 11.1210 0.0000 0.0000 -17.6622 11.3416 -21.9887 -8.0951 0.0000 -0.0000\n 2.5524 -3.1729 23.8752 1.9190 -0.3879 13.1855 -5.6221 3.1271 1.0292 -3.8792 1.5401 0.5651 19.0507 3.9520 1.9865 1.8226 -0.9025 0.4615 -4.8741 -7.2457 -8.9619 14.4177 -7.8912 -11.2075 1.3065 -10.3775 5.0670 -10.2052 -7.7938 38.7706 0.0000 0.0000 29.5486 9.1742 7.6364 3.8619 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.2473 7.5850 -8.3425 22.4949 9.6400 -76.1146 -0.0000 0.0000 4.9149 2.0590 2.1851 -7.2526 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -25.8475 10.8965 -11.8528 13.9902 0.0000 0.0000 5.3038 -5.5040 4.7652 -0.9899 0.0000 -0.0000 10.2230 -10.8582 7.3360 11.7536 0.0000 0.0000 -18.0342 13.1753 -22.6594 -8.7402 0.0000 -0.0000\n 1.9974 -4.2279 23.7122 1.6635 2.1226 9.4700 -6.3994 0.0941 1.3926 -4.5296 0.3115 0.3824 19.4822 4.6730 2.9583 1.3477 -0.5909 0.6029 -7.0741 -8.5545 -8.2002 13.9105 -10.1469 -9.5013 1.5523 -11.1174 6.3790 -6.0535 -6.5810 42.7763 0.0000 0.0000 24.7363 6.5096 6.3768 3.7989 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.2902 10.4841 -8.4947 19.2274 6.8734 -70.5499 -0.0000 0.0000 4.2428 1.9279 2.1038 -6.8121 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -26.9957 3.9865 -3.6729 18.9811 0.0000 0.0000 5.4133 -3.9189 1.2217 0.3128 0.0000 0.0000 13.0176 -14.8347 11.6791 12.9287 0.0000 0.0000 -17.4305 14.6725 -23.0457 -11.0857 0.0000 -0.0000\n 1.4366 -5.2746 23.6985 0.5882 4.2556 6.7682 -5.8602 -1.1874 1.1988 -4.1848 -0.8394 0.1342 18.3660 4.0174 3.5015 1.0367 -0.6693 0.8339 -8.0320 -10.8557 -7.5688 13.4073 -12.4916 -7.5439 1.7321 -9.4526 6.9461 -1.6157 -10.1912 47.8512 0.0000 0.0000 19.0476 3.5835 5.5724 2.9823 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -2.9160 11.5277 -8.6161 16.0584 6.9241 -66.3567 -0.0000 0.0000 4.1063 2.4864 0.9682 -5.9862 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -27.0660 -1.4685 0.3219 24.4501 0.0000 0.0000 2.2092 -2.5525 -0.7389 0.8692 0.0000 0.0000 15.0218 -18.6619 14.0710 16.7876 0.0000 0.0000 -14.6721 15.0217 -23.2198 -14.4402 0.0000 -0.0000\n 0.9844 -6.1975 23.8659 -0.3684 4.0057 7.3533 -4.6558 -0.2841 0.7343 -3.3972 -0.3528 0.1570 16.7274 2.9292 2.4360 0.7668 -1.5642 0.7904 -8.4765 -14.7744 -7.6961 12.4677 -14.6990 -5.9744 1.2372 -6.5412 6.5522 3.6246 -17.1901 53.3027 0.0000 0.0000 13.3138 0.6257 4.3019 2.1467 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -2.8232 10.0325 -9.2779 13.6732 8.7045 -63.5696 -0.0000 0.0000 3.5168 2.6153 0.5369 -5.6288 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -24.9307 -2.3909 -0.8465 26.8571 0.0000 0.0000 -1.9595 -1.5144 -0.8694 0.5808 0.0000 0.0000 12.2995 -20.6406 10.4456 25.0453 0.0000 0.0000 -9.4819 13.6697 -22.9409 -15.8269 0.0000 -0.0000\n 0.6208 -6.9783 24.0939 -0.7576 2.5708 9.8254 -3.3886 0.9071 0.3725 -2.6890 0.7936 0.2825 15.2989 2.4696 0.7493 0.4438 -2.6139 0.6111 -9.3656 -19.1862 -8.7304 11.1968 -16.4232 -5.4564 0.4755 -4.1396 6.0895 9.0757 -22.9350 57.4294 0.0000 0.0000 9.1000 -0.9240 0.9023 1.7163 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.3832 7.6126 -10.6470 12.0882 9.7395 -61.7674 -0.0000 0.0000 1.8461 1.8177 1.4979 -6.1608 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -21.5382 -1.5346 -2.9989 25.9927 0.0000 0.0000 -4.3307 0.0175 -1.0034 0.2158 0.0000 0.0000 5.3406 -20.9951 3.9722 36.1410 0.0000 0.0000 -3.1201 10.7995 -22.3486 -13.6997 0.0000 -0.0000\n 0.2862 -7.6979 24.2627 -1.0865 2.0138 11.0127 -2.4176 0.8593 0.2621 -2.2243 1.1794 0.3390 14.3662 2.4751 0.3802 0.1432 -3.2284 0.7350 -10.6207 -22.0231 -10.1312 10.1470 -17.3474 -5.8523 0.2906 -2.9827 6.0694 13.0723 -24.7470 59.6243 0.0000 0.0000 7.2033 -0.1655 -3.4668 1.5968 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -4.1741 6.1607 -12.1996 10.1005 9.8034 -60.7681 -0.0000 -0.0000 -0.0268 0.8734 2.0400 -6.9678 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -18.2640 -2.2798 -3.0932 24.1435 0.0000 0.0000 -5.1552 1.8442 -1.7590 0.0989 0.0000 0.0000 -1.5029 -21.5974 0.4854 46.2694 0.0000 0.0000 1.4900 7.3678 -20.6995 -11.5374 0.0000 -0.0000\n -0.0187 -8.4094 24.3631 -1.4910 2.1502 9.8456 -1.9691 0.2552 0.3365 -2.0211 0.8553 0.3629 13.9481 2.4292 1.5513 -0.0155 -3.5662 1.2272 -11.3848 -22.6522 -11.0644 9.6544 -17.5720 -6.3171 0.7317 -2.9476 6.1675 15.0038 -24.0986 60.7735 0.0000 0.0000 6.9993 1.1963 -5.4282 1.7251 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.7185 5.7531 -13.2910 7.1451 10.1703 -60.3953 -0.0000 -0.0000 -0.9814 0.2883 0.7382 -7.3153 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -15.7377 -3.9454 -2.1010 23.1502 0.0000 0.0000 -6.3379 2.8255 -1.7284 0.0346 0.0000 0.0000 -6.2294 -23.0404 0.7517 53.1259 0.0000 0.0000 2.4555 5.0829 -16.7462 -11.1261 0.0000 -0.0000\n -0.2620 -9.1097 24.4307 -1.6708 1.6941 7.9082 -1.8530 0.0841 0.3898 -1.9475 0.7457 0.4228 13.7121 2.3311 2.7848 -0.0260 -3.8567 1.7077 -11.2973 -22.2047 -11.1684 9.5808 -17.4508 -6.2973 1.2793 -3.4573 5.9835 15.8027 -23.9052 62.1888 0.0000 0.0000 7.5028 0.5641 -3.8528 1.6860 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.0960 5.3752 -13.7672 4.1811 10.7752 -60.1826 -0.0000 -0.0000 -1.0807 -0.1472 -1.3574 -7.2355 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -13.6523 -4.4561 -2.4077 22.9510 0.0000 0.0000 -8.2729 2.9221 0.2396 -0.0078 0.0000 -0.0000 -9.5287 -23.9353 2.4929 56.0713 0.0000 0.0000 0.9004 3.9831 -11.3792 -11.1862 0.0000 -0.0000\n -0.4483 -9.7973 24.4852 -1.8113 0.5105 6.4824 -1.7314 0.1624 0.3781 -1.8607 1.0148 0.4997 13.5211 2.5329 3.2728 0.0249 -3.9529 1.8703 -10.8923 -21.7345 -10.7260 9.6294 -17.2667 -5.9353 1.5719 -3.9110 5.7616 16.4455 -25.0956 64.0019 0.0000 0.0000 8.3776 -1.9845 -1.1211 1.7328 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -5.7174 4.7336 -13.8888 2.0938 10.6638 -59.7417 -0.0000 -0.0000 -1.0231 -0.2799 -2.2623 -7.1457 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -11.5320 -3.8620 -3.2942 22.8980 0.0000 0.0000 -10.0769 2.9489 2.6778 0.1347 0.0000 0.0000 -12.1668 -23.8870 4.0340 55.4255 0.0000 0.0000 -0.8089 3.2061 -7.0845 -10.9057 0.0000 -0.0000\n -0.6080 -10.4745 24.5278 -2.1122 -0.4578 5.2573 -1.5244 -0.1538 0.3665 -1.7534 1.1116 0.5287 13.4698 3.0832 3.5612 0.1099 -3.7327 1.8352 -10.6488 -21.2828 -10.1621 9.6335 -17.1094 -5.6207 1.6811 -3.8574 5.9042 17.0766 -26.6384 65.5845 0.0000 0.0000 9.4352 -3.9022 0.1482 1.9077 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -6.5630 4.1945 -13.8727 0.6385 9.9919 -59.3212 -0.0000 -0.0000 -1.0083 0.2463 -1.6907 -7.1825 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.3908 -3.4584 -3.3172 22.8735 0.0000 0.0000 -11.5664 2.9049 4.2334 0.4525 0.0000 0.0000 -14.1749 -24.0435 5.5415 51.9907 0.0000 0.0000 -1.6843 2.7498 -5.3076 -10.3755 0.0000 -0.0000\n -0.7463 -11.1433 24.5567 -2.3810 -0.9095 3.7391 -1.3925 -0.8184 0.3743 -1.6863 0.9733 0.5470 13.5160 3.6542 4.1768 0.2157 -3.4126 1.8594 -10.5217 -20.7027 -9.6985 9.5585 -16.9493 -5.4771 1.7655 -3.3269 6.2653 17.6080 -27.4802 66.8298 0.0000 0.0000 10.1135 -3.8744 0.0444 1.9364 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -7.2701 3.8128 -13.7155 -0.5418 9.5627 -59.4249 -0.0000 -0.0000 -0.8419 0.9824 -0.8838 -7.1861 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.3399 -3.3902 -3.1371 22.7444 0.0000 0.0000 -13.0251 2.3213 5.6865 0.7728 0.0000 0.0000 -15.5607 -24.7209 7.6085 46.4753 0.0000 0.0000 -2.0310 2.5841 -5.5416 -9.6761 0.0000 -0.0000\n -0.8513 -11.8043 24.5691 -2.3784 -1.3698 2.1593 -1.3578 -1.2759 0.3757 -1.6363 0.9093 0.5731 13.3887 4.1240 4.9640 0.2648 -3.2555 1.9846 -10.3663 -20.2457 -9.3391 9.5171 -16.8113 -5.3564 1.7284 -2.7477 6.4498 18.2576 -27.6784 68.0274 0.0000 0.0000 10.0591 -3.0134 -0.1473 1.8825 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -7.6874 3.4387 -13.4480 -1.1801 9.1846 -59.9877 -0.0000 -0.0000 -0.6632 1.1749 -0.3962 -7.1052 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.3944 -2.9718 -3.8232 22.3211 0.0000 0.0000 -14.4256 1.6787 7.9835 1.0390 0.0000 0.0000 -16.8067 -24.9779 9.7498 39.6361 0.0000 0.0000 -1.7405 2.1282 -6.7294 -8.9488 0.0000 -0.0000\n -0.9186 -12.4566 24.5599 -2.1371 -2.0571 0.7064 -1.3050 -1.4321 0.3710 -1.5572 1.0479 0.6283 13.0175 4.4693 5.6447 0.1949 -3.1994 2.1265 -10.2534 -20.0490 -8.9839 9.6656 -16.7719 -5.1274 1.5309 -2.3590 6.4886 18.9395 -27.8293 69.0559 0.0000 0.0000 9.7061 -2.6111 -0.0851 1.6752 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -7.9865 3.1742 -13.2102 -1.2352 8.4254 -60.4375 -0.0000 -0.0000 -0.7322 0.9595 0.0742 -7.0975 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -3.7976 -2.1611 -4.7084 22.0551 0.0000 0.0000 -15.7856 1.6166 10.4728 1.2733 0.0000 0.0000 -18.4011 -24.3761 11.0578 32.4509 0.0000 0.0000 -0.5020 1.2736 -8.1326 -8.3787 0.0000 -0.0000\n -0.9470 -13.1187 24.5281 -1.9353 -2.5966 -0.9186 -1.1741 -1.6587 0.3758 -1.4174 1.1074 0.6586 12.6000 4.7125 6.3188 0.0961 -3.0688 2.2560 -10.1798 -19.8208 -8.5376 9.9536 -16.8265 -4.7880 1.4169 -1.9530 6.6484 19.2127 -28.2722 69.6073 0.0000 0.0000 9.7983 -2.6626 0.0141 1.3256 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -8.2890 3.0637 -12.9855 -1.2649 7.9716 -60.4902 -0.0000 -0.0000 -0.8612 0.9433 0.5031 -7.1605 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -2.5224 -1.4235 -4.7553 22.3732 0.0000 0.0000 -17.2211 1.5951 12.3376 1.3525 0.0000 0.0000 -20.1167 -23.4989 11.6376 25.6863 0.0000 0.0000 1.3924 0.9630 -9.5230 -8.3349 0.0000 -0.0000\n -0.9318 -13.8238 24.4807 -1.9553 -2.8725 -2.8954 -0.9996 -2.0642 0.3641 -1.2654 1.0264 0.6543 12.3260 4.8146 7.0503 0.0825 -2.8326 2.3815 -9.9660 -19.4102 -7.9666 10.1767 -16.8726 -4.3853 1.5157 -1.4466 6.9088 19.0657 -28.9087 69.8451 0.0000 0.0000 10.4911 -2.8772 0.2639 1.1201 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -8.5405 2.9507 -12.5893 -1.4746 8.3170 -60.3373 -0.0000 -0.0000 -0.7117 1.1434 0.6851 -7.1484 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.9958 -0.7085 -4.4358 22.7455 0.0000 0.0000 -18.5861 0.9410 14.1238 1.1787 0.0000 0.0000 -21.4995 -22.5935 12.1034 19.6381 0.0000 0.0000 3.3725 2.0138 -11.1269 -9.5246 0.0000 -0.0000\n -0.8829 -14.5791 24.4226 -2.0403 -3.0974 -5.0026 -0.8529 -2.4061 0.3230 -1.1269 0.9225 0.6354 12.1101 4.8440 7.6658 0.0867 -2.6027 2.4738 -9.5639 -19.0627 -7.3335 10.3563 -16.8529 -3.9643 1.6342 -1.1318 7.0971 18.9358 -29.5278 70.1217 0.0000 0.0000 11.3359 -3.3006 0.7119 1.1927 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -8.6695 2.8277 -12.0355 -1.4713 8.6903 -60.0525 -0.0000 -0.0000 -0.3636 1.3273 0.8374 -7.0812 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 1.0090 0.2629 -4.5778 22.5039 0.0000 0.0000 -19.7701 0.1474 16.4861 0.8981 0.0000 0.0000 -22.8603 -21.4426 12.1141 14.7175 0.0000 0.0000 4.9105 4.1354 -12.8231 -11.8667 0.0000 -0.0000\n -0.8229 -15.3700 24.3595 -2.0860 -3.3376 -7.1498 -0.6516 -2.4875 0.3598 -0.9339 0.8267 0.6075 11.7669 4.8026 8.1136 0.0021 -2.4621 2.5370 -9.1633 -18.9360 -6.7716 10.6822 -16.7983 -3.5920 1.6753 -1.0724 7.2240 18.9745 -30.0487 70.4497 0.0000 0.0000 11.9919 -3.6062 1.0919 1.2458 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.6989 2.7733 -11.5561 -1.1496 8.7629 -59.5090 -0.0000 -0.0000 -0.0505 1.6310 1.1788 -7.0425 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 3.1905 1.4371 -4.8930 21.8382 0.0000 0.0000 -20.7722 -0.4425 19.0628 0.6248 0.0000 0.0000 -24.7212 -20.1983 11.7943 11.8284 0.0000 0.0000 5.1499 6.2568 -14.0950 -13.7411 0.0000 -0.0000\n -0.7674 -16.1856 24.2950 -1.9808 -3.4161 -9.4641 -0.4403 -2.3531 0.4993 -0.7271 0.6241 0.5807 11.3519 4.6423 8.5482 -0.1170 -2.4018 2.6435 -8.9412 -18.9337 -6.3894 11.0527 -16.7553 -3.3297 1.7464 -0.9326 7.3816 19.0369 -30.4843 70.7494 0.0000 0.0000 12.4559 -3.2613 1.3519 1.0448 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -8.7424 2.6133 -11.2056 -0.8341 9.3652 -58.8754 -0.0000 0.0000 0.3615 2.1629 1.5264 -6.9470 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 5.1306 2.5361 -4.5431 21.2186 0.0000 0.0000 -21.2878 -1.5249 21.1467 0.1285 0.0000 0.0000 -27.1041 -19.1365 12.7865 11.2038 0.0000 0.0000 3.7383 7.7536 -14.6521 -14.1624 0.0000 -0.0000\n -0.7090 -17.0427 24.2171 -1.6598 -3.4940 -11.8901 -0.3859 -1.9594 0.6455 -0.6577 0.3162 0.5486 11.0660 4.4552 8.9946 -0.1993 -2.3587 2.7758 -8.8877 -19.0492 -6.1583 11.1742 -16.8183 -3.2011 1.7854 -0.6099 7.5495 19.3035 -30.7865 71.2694 0.0000 0.0000 12.5536 -2.7350 1.6068 0.8852 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -8.8982 2.2220 -10.7868 -0.4669 10.4612 -58.6557 -0.0000 0.0000 1.1273 2.8294 1.8031 -6.7093 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 6.8741 3.7219 -3.6378 20.5741 0.0000 0.0000 -21.3185 -3.1475 22.8144 -0.8037 0.0000 -0.0000 -29.3256 -17.7410 15.4472 11.2932 0.0000 0.0000 1.9929 8.7965 -13.8098 -14.1367 0.0000 -0.0000\n -0.6448 -17.9588 24.0999 -1.0256 -3.7339 -14.0939 -0.6455 -1.3831 0.7463 -0.7345 0.0531 0.5341 10.9086 4.4149 9.2499 -0.3338 -2.3500 2.8434 -9.0107 -19.4147 -6.0676 11.0917 -17.1036 -3.2164 1.5449 -0.3921 7.7492 20.0630 -31.0575 72.0632 0.0000 0.0000 11.8793 -3.1031 1.7166 1.0469 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.1275 2.0092 -10.3212 0.2123 10.7887 -59.1176 -0.0000 0.0000 2.0854 3.8213 2.1444 -6.4244 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 8.5245 5.0692 -3.0134 19.7305 0.0000 0.0000 -21.5723 -4.0892 24.4624 -1.9455 0.0000 -0.0000 -31.2731 -15.6131 18.5973 10.7060 0.0000 0.0000 1.5654 9.4055 -11.7329 -14.4397 0.0000 -0.0000\n -0.5947 -18.9566 23.9355 -0.3017 -3.7338 -16.0229 -1.0075 -1.0600 0.8883 -0.8140 -0.0666 0.5335 10.7923 4.5230 9.4087 -0.5643 -2.4258 2.8690 -9.4809 -19.9317 -6.2808 11.1141 -17.5457 -3.3986 1.1147 -0.1768 8.0590 21.1312 -31.7715 72.7736 0.0000 0.0000 10.4063 -4.3500 1.5674 1.1708 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -9.2340 2.4126 -10.1434 0.7069 10.3559 -60.0749 -0.0000 0.0000 2.8186 5.1372 2.3497 -6.2289 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 10.3709 6.1801 -2.7650 18.8197 0.0000 0.0000 -22.0348 -4.2272 26.0704 -2.9994 0.0000 -0.0000 -32.8197 -13.3198 21.3605 9.6610 0.0000 0.0000 2.2944 9.8749 -9.9110 -14.2957 0.0000 -0.0000\n -0.5829 -20.0613 23.7254 0.3851 -3.0021 -18.0689 -1.3604 -1.2801 1.0252 -0.9202 -0.2847 0.5337 10.8008 4.7044 9.8546 -0.7553 -2.5041 2.9711 -10.3868 -20.3349 -6.8357 11.2390 -17.8799 -3.6716 0.9301 0.3419 8.4933 22.1013 -32.9223 73.2397 0.0000 0.0000 8.7401 -5.4835 1.3138 0.8308 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -9.1898 3.3118 -10.3295 0.4785 10.5360 -61.2029 -0.0000 0.0000 3.0907 5.9811 2.1800 -6.1710 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 12.5788 6.7122 -2.0296 17.9383 0.0000 0.0000 -21.5738 -4.9098 27.4257 -4.2819 0.0000 -0.0000 -33.2189 -11.5026 23.1967 8.6748 0.0000 0.0000 2.8856 11.2103 -10.0799 -13.4298 0.0000 -0.0000\n -0.6070 -21.2772 23.4496 1.2927 -2.0692 -20.5093 -2.0082 -1.3853 0.9917 -1.2759 -0.8664 0.5022 11.0608 5.0090 10.5824 -0.9432 -2.4503 3.1226 -11.6630 -20.7693 -7.3983 11.2581 -17.9575 -3.8799 1.0268 0.4230 9.1231 22.8765 -33.6117 73.3916 0.0000 0.0000 7.5871 -5.8635 0.5847 0.3544 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -9.2278 4.5218 -10.3721 0.1581 10.9050 -62.4830 -0.0000 0.0000 3.1048 5.8682 2.1099 -6.3447 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 14.7389 7.2884 -0.9426 17.1862 0.0000 0.0000 -20.3204 -6.1690 28.9489 -6.2597 0.0000 -0.0000 -32.3434 -9.7441 22.3673 7.7865 0.0000 0.0000 3.7656 13.4012 -11.8619 -12.9569 0.0000 -0.0000\n -0.6527 -22.5621 23.1330 2.2070 -2.1876 -23.0613 -2.9423 0.1247 0.8357 -1.9236 -1.6687 0.4439 11.6818 5.4838 11.0874 -1.5361 -2.4352 3.1851 -13.6005 -21.7699 -7.8702 11.1997 -17.8872 -4.0060 1.1364 -1.7574 10.2757 22.8694 -32.9061 72.0277 0.0000 0.0000 7.1751 -5.4934 -1.3455 0.3202 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -9.4765 6.5929 -10.0558 0.4633 9.3354 -64.0086 -0.0000 0.0000 3.2865 6.0155 2.4114 -6.5964 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 16.1971 9.2502 -1.6218 17.4036 0.0000 0.0000 -19.6925 -6.6722 31.9615 -8.7869 0.0000 -0.0000 -31.9960 -7.5011 17.4152 9.1563 0.0000 0.0000 5.6247 13.6309 -12.6067 -12.9082 0.0000 -0.0000\n -0.7335 -23.8406 22.8879 2.7182 -2.3900 -25.1033 -3.4130 2.4663 0.3828 -2.4647 -2.1420 0.4271 12.5548 5.8684 11.4024 -2.7255 -2.8836 3.2795 -16.6168 -22.9743 -8.7713 11.0953 -17.8004 -4.2568 1.5136 -6.0357 12.1656 21.1774 -31.3657 67.8578 0.0000 0.0000 7.3270 -4.8815 -3.7320 0.6023 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -9.6066 9.6542 -10.2009 0.9162 6.8712 -65.4286 -0.0000 0.0000 3.7258 7.4322 2.0546 -6.5741 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 16.4748 11.7712 -3.8778 20.0138 0.0000 0.0000 -17.8040 -7.2458 36.8313 -11.2582 0.0000 -0.0000 -34.9159 -6.1939 10.6157 17.8790 0.0000 0.0000 5.7704 10.3158 -11.4528 -11.5177 0.0000 -0.0000\n -0.9339 -25.1204 22.8276 2.2318 0.8696 -27.4248 -2.1230 2.0441 0.0663 -1.6529 -1.6898 0.5508 12.7088 5.3633 12.4258 -3.8117 -3.6563 3.7245 -19.7917 -22.6267 -10.1516 10.4082 -17.7871 -4.7475 2.6603 -8.6900 14.2429 18.3125 -31.2322 62.3946 0.0000 0.0000 7.6905 -5.2029 -4.1471 0.5542 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -8.9012 11.8431 -11.6719 1.0713 8.1130 -66.2686 -0.0000 0.0000 4.2383 8.6300 0.2282 -6.3994 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 16.6080 11.7788 -1.9902 24.6284 0.0000 0.0000 -8.2898 -10.0120 41.7091 -12.3715 0.0000 -0.0000 -37.0446 -8.9461 7.3704 30.7106 0.0000 0.0000 2.2786 5.9357 -11.4042 -8.9155 0.0000 -0.0000\n -1.1761 -26.2912 23.0430 1.9174 6.0449 -30.2566 0.0383 -0.2320 0.1810 -0.2810 -1.4613 0.6478 12.4042 4.6238 14.1316 -4.2784 -3.9890 4.3224 -22.3853 -20.6786 -11.2472 8.6435 -17.3841 -5.1855 4.0928 -8.6370 15.5809 15.6603 -32.5337 58.2484 0.0000 0.0000 8.0240 -7.0641 -2.0812 0.1387 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -7.6268 12.1889 -13.8445 1.5155 12.8866 -66.4397 -0.0000 0.0000 4.7689 8.0287 -1.3506 -6.8069 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 15.2088 9.5245 5.0026 29.0078 0.0000 0.0000 10.0727 -15.6026 45.3843 -8.4758 0.0000 -0.0000 -34.9805 -14.0792 6.4823 38.3196 0.0000 0.0000 -3.1945 3.6771 -10.9221 -7.8647 0.0000 -0.0000\n -1.3261 -27.2389 23.4475 3.5038 9.2597 -32.5624 1.0927 -1.7364 0.3695 0.1875 -1.7910 0.6206 12.0673 3.9576 14.9796 -4.4793 -3.7579 4.6147 -24.0478 -18.1113 -11.2593 6.6331 -16.1945 -5.0945 4.8620 -7.7203 15.8414 14.4601 -34.0748 56.5886 0.0000 0.0000 8.2681 -8.6417 -0.7770 0.0171 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -6.2901 11.7804 -15.4038 3.1363 16.4222 -66.3203 -0.0000 0.0000 5.4619 7.2935 -0.3026 -7.4089 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 11.0482 6.9408 11.3587 31.6168 0.0000 0.0000 22.1757 -20.7561 45.5996 -2.8529 0.0000 -0.0000 -31.8535 -17.2808 5.9883 38.7685 0.0000 0.0000 -7.2199 3.0761 -9.4547 -8.4130 0.0000 -0.0000\n -1.4040 -28.0469 23.9283 5.9301 10.0661 -33.2422 0.9737 -1.8074 0.3819 0.0062 -1.9372 0.5274 11.7675 2.8527 14.1295 -4.8449 -3.3794 4.4320 -24.9404 -15.2145 -10.1121 5.5378 -14.2675 -4.4265 4.7476 -7.8225 15.5320 13.9492 -34.6820 55.9206 0.0000 0.0000 8.3211 -7.9300 -2.8281 0.2120 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -4.8298 12.0078 -15.9650 5.8657 16.5026 -66.5753 -0.0000 0.0000 6.3571 8.8464 2.1683 -7.2092 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 5.6961 5.4585 12.4261 33.0222 0.0000 0.0000 17.9082 -22.7913 39.5220 -1.4323 0.0000 -0.0000 -29.0886 -17.6352 5.1929 34.6550 0.0000 0.0000 -7.8035 2.3663 -8.2332 -9.0138 0.0000 -0.0000\n -1.4499 -28.8220 24.3653 7.6498 9.8249 -32.8151 0.7304 -1.1195 0.3567 -0.1108 -1.6420 0.4559 11.1896 1.2953 12.7144 -5.2308 -3.0151 4.1093 -25.1440 -11.5573 -8.1605 5.3669 -11.9820 -3.6029 4.1986 -8.1959 15.2069 12.7792 -34.3520 54.5045 0.0000 0.0000 8.2343 -5.6117 -6.0772 0.3560 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -3.2241 12.3140 -16.2181 8.6312 16.3069 -67.5050 -0.0000 0.0000 7.2745 11.5853 3.2598 -6.5434 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 1.0792 5.8771 7.6945 32.5253 0.0000 0.0000 6.0286 -20.3247 30.6690 -2.0389 0.0000 -0.0000 -26.3996 -16.8986 5.4969 29.8521 0.0000 0.0000 -6.7155 1.2895 -8.1971 -8.8740 0.0000 -0.0000\n -1.4796 -29.6082 24.6812 8.3117 10.0534 -32.7323 0.9890 -0.9053 0.3274 0.0423 -1.5664 0.4025 10.5023 0.1782 12.1234 -5.3146 -2.5413 3.9569 -24.7080 -7.6695 -5.8474 5.2538 -9.7897 -2.7965 3.6833 -7.7644 14.9631 11.2627 -32.3369 52.6451 0.0000 0.0000 8.4173 -3.8891 -6.9132 0.2974 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -1.8706 11.8587 -16.4142 10.6505 18.7541 -69.1558 -0.0000 0.0000 7.8181 12.4632 2.6777 -6.0055 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -2.1975 7.0541 1.5576 29.7045 0.0000 0.0000 0.0655 -17.6938 25.9752 -1.5310 0.0000 -0.0000 -23.1972 -16.7064 7.7155 26.6669 0.0000 0.0000 -6.7394 0.2234 -9.2734 -8.2583 0.0000 -0.0000\n -1.4979 -30.3930 24.8636 8.2227 10.8806 -33.4246 1.5565 -1.1105 0.2705 0.2046 -1.8119 0.3652 10.2248 -0.2824 12.2147 -5.1624 -2.1173 3.9253 -23.8767 -4.8521 -3.5795 4.7506 -7.9329 -1.7111 3.3821 -7.1891 14.6968 10.5271 -27.0979 51.3512 0.0000 0.0000 9.3651 -2.9397 -4.7609 0.2136 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.9648 11.3199 -16.1035 11.8333 22.8938 -71.0114 -0.0000 0.0000 7.6809 10.4208 1.8440 -5.9515 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -4.6360 8.0139 -2.5766 25.3293 0.0000 0.0000 0.9633 -15.0763 25.6694 -1.2146 0.0000 -0.0000 -19.4819 -16.7341 10.0948 24.9211 0.0000 0.0000 -8.0163 -0.7267 -10.0281 -7.6441 0.0000 -0.0000\n -1.5098 -31.1258 24.9398 8.0182 11.5581 -34.0932 1.7647 -1.0309 0.2227 0.2026 -1.8991 0.3339 10.4845 -0.6424 12.0153 -5.0074 -2.0220 3.8464 -23.0030 -3.5328 -1.6612 4.1366 -6.3866 -0.2327 3.2257 -7.4846 14.4186 10.4148 -18.7605 50.3500 0.0000 0.0000 11.0924 -0.8048 -1.4008 0.3971 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.3354 11.4567 -15.3502 12.1694 27.0723 -72.3336 -0.0000 0.0000 7.2002 6.9485 1.2533 -5.9921 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -7.2967 8.6433 -5.0934 20.3924 0.0000 0.0000 5.3199 -9.9538 26.2591 -1.7003 0.0000 -0.0000 -16.6202 -16.4487 11.4450 24.4444 0.0000 0.0000 -9.5575 -1.5166 -10.2705 -7.1991 0.0000 -0.0000\n -1.5314 -31.8008 24.9623 7.7849 12.1628 -33.9019 1.6523 -0.7560 0.1845 0.0797 -1.7750 0.2945 11.1586 -1.2134 11.1310 -4.8192 -2.1423 3.6743 -22.2965 -2.9258 -0.2561 3.8102 -5.2230 1.2322 2.9205 -8.1130 14.1331 10.1013 -10.2514 49.0816 0.0000 0.0000 13.1105 2.8386 1.7814 0.7796 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0636 11.6852 -14.8195 11.8782 31.2105 -72.8346 -0.0000 0.0000 6.9501 3.8939 0.2360 -5.6691 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -10.2593 8.8985 -7.2838 15.9092 0.0000 0.0000 11.7197 -4.9399 24.7205 -2.1361 0.0000 -0.0000 -14.8191 -16.2935 12.6215 25.1467 0.0000 0.0000 -11.3474 -1.7927 -11.3010 -6.9856 0.0000 -0.0000\n -1.5716 -32.4560 24.9634 7.3164 13.0150 -32.8454 1.5374 -0.7263 0.1380 -0.0136 -1.8045 0.2078 11.9477 -1.6831 9.8398 -4.4626 -2.0943 3.3750 -21.6958 -2.3965 0.6569 3.9080 -4.6195 2.2369 2.2659 -7.9013 13.7065 9.2331 -4.6859 48.0226 0.0000 0.0000 14.8888 5.8803 4.2201 1.1178 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.1627 11.0965 -14.6723 11.5961 35.1478 -72.8208 -0.0000 0.0000 7.1494 2.0880 -1.1417 -5.0613 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -13.1100 8.9385 -8.8279 12.6606 0.0000 0.0000 17.6480 -3.9480 20.4292 -2.0777 0.0000 -0.0000 -13.0065 -16.3848 14.0390 26.0098 0.0000 0.0000 -13.4239 -1.5865 -13.2711 -7.0121 0.0000 -0.0000\n -1.6230 -33.1087 24.9569 6.3839 13.6440 -31.2910 1.5736 -0.6775 0.0433 -0.0509 -1.9214 0.0976 12.5116 -1.7306 8.4141 -4.0094 -1.7896 2.9214 -21.0690 -2.1168 1.2311 4.3200 -4.4807 2.7535 1.5128 -7.0155 13.1910 7.8024 -2.2039 47.5696 0.0000 0.0000 16.2236 7.2391 5.7176 1.4698 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0989 9.9271 -14.4093 11.6592 37.9371 -72.6834 -0.0000 0.0000 7.5150 1.4258 -1.9783 -4.3296 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -16.0882 9.4751 -9.2989 11.5701 0.0000 0.0000 18.5568 -5.0608 15.4748 -1.7978 0.0000 -0.0000 -10.6012 -15.8841 15.0763 26.0243 0.0000 0.0000 -15.0662 -1.3397 -15.1944 -7.0702 0.0000 -0.0000\n -1.6849 -33.7249 24.9536 5.2994 13.3707 -29.4609 1.5107 -0.1124 -0.1204 -0.0981 -1.8036 0.0266 12.6851 -1.4182 7.0462 -3.6088 -1.4638 2.3911 -20.3466 -2.2090 1.5666 4.7346 -4.3940 2.9744 0.9565 -6.2895 12.6958 6.0804 -1.1536 47.4308 0.0000 0.0000 17.2292 7.8174 6.7022 1.9051 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.1415 8.8468 -13.8707 11.8102 39.4267 -72.4654 -0.0000 0.0000 7.6167 1.3444 -2.2653 -3.6780 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -20.0101 10.8145 -9.6766 12.6674 0.0000 0.0000 15.2843 -4.1954 11.9260 -1.3013 0.0000 -0.0000 -8.4216 -14.5198 15.6500 25.4532 0.0000 0.0000 -15.7534 -1.0546 -16.9206 -6.9340 0.0000 -0.0000\n -1.7800 -34.3147 24.9743 4.2228 12.8574 -27.1840 1.4492 0.5302 -0.3325 -0.1205 -1.5329 -0.0034 12.6678 -1.0082 5.7985 -3.2407 -1.1919 1.9036 -19.5385 -2.1542 1.7341 4.8655 -4.0498 2.9767 0.5663 -5.8402 12.0662 4.3682 -0.5807 47.3409 0.0000 0.0000 18.1788 8.5521 7.5887 2.1533 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.3451 7.8990 -13.4234 11.8957 40.3835 -72.1714 -0.0000 0.0000 7.4160 1.3861 -2.7420 -3.3271 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -23.9007 12.1417 -10.8326 14.1406 0.0000 0.0000 13.3029 -2.1523 9.7904 -0.7029 0.0000 -0.0000 -6.4730 -13.2729 16.2475 24.8263 0.0000 0.0000 -15.8106 -0.4542 -19.1311 -6.7362 0.0000 -0.0000\n -1.9173 -34.9190 25.0189 3.3400 13.0797 -24.3208 1.3510 0.3944 -0.4923 -0.1175 -1.3651 -0.0539 12.8693 -0.8387 4.5421 -2.8651 -0.7785 1.4184 -18.8209 -1.3510 1.9270 4.8106 -3.3910 2.7289 0.1600 -5.4448 11.3183 2.7355 -0.3880 47.2087 0.0000 0.0000 19.2293 9.2929 8.2726 2.1277 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.5951 6.9603 -13.1682 12.1092 40.9714 -72.0671 -0.0000 0.0000 7.2889 1.4810 -3.4338 -3.2536 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -26.4891 12.3986 -12.5188 14.3604 0.0000 0.0000 14.5157 -0.7567 7.6928 -0.6766 0.0000 -0.0000 -4.4382 -13.1216 16.8185 24.2712 0.0000 0.0000 -15.8544 0.2620 -22.0334 -6.9268 0.0000 -0.0000\n -2.0824 -35.5516 25.0600 2.4190 13.8683 -21.0520 1.3687 -0.3071 -0.5982 -0.0935 -1.3807 -0.1431 13.2549 -0.9084 3.2472 -2.5536 -0.1467 0.8785 -18.3612 0.2765 2.3443 4.9627 -2.4315 2.2313 -0.2534 -5.1593 10.8157 1.1150 -0.5087 46.8852 0.0000 0.0000 20.2974 9.7774 8.8237 2.2322 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.8302 6.0183 -12.8047 12.5799 40.9495 -72.3473 -0.0000 0.0000 7.4438 1.6925 -3.9578 -3.1872 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -27.7534 11.7241 -13.6993 13.4086 0.0000 0.0000 16.3113 0.0033 5.4512 -1.2629 0.0000 -0.0000 -2.1802 -13.6856 16.8804 23.7409 0.0000 0.0000 -15.9591 0.9402 -24.9867 -7.7829 0.0000 -0.0000\n -2.2448 -36.1644 25.0653 1.5535 14.0631 -17.9051 1.4316 -0.6269 -0.7637 -0.0020 -1.4981 -0.2336 13.4092 -0.9215 2.2295 -2.3824 0.6224 0.3424 -18.1778 2.4589 3.0562 5.4267 -1.2682 1.5725 -0.5506 -5.0802 10.7993 -0.4909 -0.7485 46.1654 0.0000 0.0000 21.4500 10.2815 9.6413 2.6464 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 1.0979 5.1162 -12.1881 13.1654 40.3332 -72.9406 -0.0000 0.0000 7.7171 1.7467 -4.2986 -2.9844 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -29.1943 11.1235 -13.8809 12.5604 0.0000 0.0000 16.4081 0.3820 4.4313 -1.7441 0.0000 -0.0000 -0.4482 -13.8420 16.2012 23.5248 0.0000 0.0000 -15.7992 1.7467 -27.2077 -9.0469 0.0000 -0.0000\n -2.3878 -36.7479 25.0299 0.6913 13.3915 -15.1072 1.6898 -0.4289 -0.9787 0.1867 -1.6256 -0.2947 13.2118 -0.6574 1.6951 -2.2992 1.4493 -0.1065 -18.0779 4.9079 3.9539 5.8993 -0.1056 0.9521 -0.7610 -5.0133 11.0517 -1.8854 -1.0533 45.0446 0.0000 0.0000 22.9702 10.9312 10.5622 2.9660 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 1.3098 4.3052 -11.4919 13.8256 39.4484 -73.7367 -0.0000 0.0000 7.9230 1.4192 -4.5149 -2.7899 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -30.9250 10.8680 -13.8838 12.0021 0.0000 0.0000 15.5923 0.0500 5.5076 -1.7497 0.0000 -0.0000 0.9390 -13.1046 14.8755 23.4255 0.0000 0.0000 -15.5533 2.3851 -28.3280 -10.3073 0.0000 -0.0000\n -2.5150 -37.3537 24.9636 -0.2039 12.4845 -12.4562 2.0325 -0.3244 -1.1073 0.3846 -1.7153 -0.3286 13.0659 -0.2147 1.4413 -2.2125 2.2510 -0.4795 -17.8888 7.3224 4.8793 6.1650 1.0452 0.5706 -0.9610 -4.8482 11.2595 -2.8450 -1.2259 43.7986 0.0000 0.0000 24.6427 11.4223 11.0143 2.9849 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.2803 3.7670 -10.8711 14.5460 38.7344 -74.5986 -0.0000 0.0000 8.0819 1.1337 -4.5400 -2.7981 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -32.1420 10.3296 -14.0027 11.1188 0.0000 0.0000 15.3979 -0.4685 7.1810 -1.7939 0.0000 -0.0000 2.6840 -11.9447 13.1101 22.8977 0.0000 0.0000 -15.9829 2.1620 -28.6268 -11.2489 0.0000 -0.0000\n -2.6422 -38.0236 24.8836 -1.0969 11.8670 -9.7338 2.2608 -0.5667 -1.1181 0.5136 -1.8047 -0.3621 13.3232 0.1445 1.2221 -2.0910 2.8979 -0.7889 -17.6721 9.4337 5.7618 6.3109 2.3863 0.4380 -1.0489 -4.7247 11.3916 -3.3926 -1.0516 42.7151 0.0000 0.0000 25.6991 11.6152 11.2631 3.1145 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 1.1708 3.6378 -10.3165 15.0743 38.4500 -75.3829 -0.0000 0.0000 8.2826 1.3824 -4.6853 -3.0065 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -32.6879 9.0709 -13.8229 10.1048 0.0000 0.0000 15.6854 -0.7146 7.3604 -1.8855 0.0000 -0.0000 4.9381 -11.1550 11.3212 21.9827 0.0000 0.0000 -16.9455 1.4240 -28.9926 -11.7734 0.0000 -0.0000\n -2.7711 -38.7424 24.8037 -1.7929 11.3013 -6.8560 2.2980 -0.7267 -1.1488 0.5663 -1.8926 -0.4037 13.8070 0.2309 0.9782 -1.9265 3.3277 -1.0132 -17.5249 11.1082 6.5132 6.4655 3.8571 0.2935 -0.9470 -4.6912 11.5125 -3.6605 -0.8806 41.8233 0.0000 0.0000 25.8315 11.6379 12.0473 3.6070 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 1.3461 3.6923 -9.8545 15.3819 38.2760 -76.1444 -0.0000 0.0000 8.5165 1.8825 -5.2381 -3.2370 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -33.0713 7.4723 -13.8691 9.4976 0.0000 0.0000 15.9047 -1.3467 6.6139 -1.5423 0.0000 -0.0000 6.9252 -10.8966 9.8858 21.4184 0.0000 0.0000 -17.3712 1.3263 -30.1516 -12.2136 0.0000 -0.0000\n -2.8870 -39.4806 24.7140 -2.0112 10.4770 -3.6851 2.1745 -0.7035 -1.2178 0.5321 -1.8742 -0.4304 14.1056 0.1399 0.6146 -1.7342 3.5462 -1.1765 -17.3653 12.3827 6.8208 6.6719 5.0027 -0.0798 -0.8199 -4.6718 11.5053 -3.5473 -1.1322 41.0114 0.0000 0.0000 25.4510 11.3219 12.9474 4.1416 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 1.6643 3.6343 -9.6655 15.9555 37.6755 -76.9458 -0.0000 0.0000 8.7003 2.1687 -5.5763 -3.3083 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -33.3797 5.9621 -14.8481 8.8863 0.0000 0.0000 16.3174 -2.4776 7.1148 -1.1683 0.0000 -0.0000 7.9589 -10.8730 8.6792 21.6090 0.0000 0.0000 -17.3029 1.6749 -32.0210 -13.0946 0.0000 -0.0000\n -2.9785 -40.2408 24.5859 -1.6585 9.5660 -0.2672 1.9248 -0.9210 -1.2311 0.3891 -1.7024 -0.4329 14.1475 0.0504 0.1376 -1.5807 3.6434 -1.3401 -17.2084 13.2156 6.5612 6.8888 5.6777 -0.6119 -0.8977 -4.6868 11.3905 -2.8484 -1.5445 40.1324 0.0000 0.0000 24.8904 10.5036 12.8127 4.3464 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 1.7188 3.4605 -9.7417 16.9767 36.7453 -77.6968 -0.0000 0.0000 8.8498 2.2924 -5.0772 -3.2329 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -33.7002 4.4515 -15.4300 8.0959 0.0000 0.0000 16.6443 -3.2008 8.4493 -1.3694 0.0000 -0.0000 8.2731 -10.8883 7.1938 22.1521 0.0000 0.0000 -17.9927 1.3894 -33.8096 -14.3742 0.0000 -0.0000\n -3.0438 -41.0611 24.4134 -1.1617 8.7183 3.0192 1.6496 -1.2674 -1.2552 0.2706 -1.5795 -0.4330 14.2287 -0.0487 -0.2365 -1.4810 3.6073 -1.4140 -17.3286 13.5322 6.1614 6.8846 6.1597 -1.0587 -1.0132 -4.7168 11.4211 -1.8075 -1.5725 39.1785 0.0000 0.0000 24.0088 9.6832 11.8153 4.2400 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1.6447 3.2048 -9.9367 17.8314 36.3759 -78.1838 -0.0000 0.0000 8.9398 2.4931 -4.4633 -3.1462 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -34.2955 2.8849 -14.5040 8.4589 0.0000 0.0000 14.9439 -3.4002 8.5424 -1.6267 0.0000 -0.0000 8.8046 -10.7844 5.0700 22.5028 0.0000 0.0000 -19.2979 0.7514 -34.7551 -15.2859 0.0000 -0.0000\n -3.0633 -41.9904 24.2018 -1.0200 7.3296 6.2283 1.5199 -0.9080 -1.4069 0.2347 -1.4563 -0.4476 14.5078 -0.4541 -0.5822 -1.3317 3.3442 -1.3770 -17.7690 13.2602 5.9528 6.4724 6.4322 -1.2335 -0.8757 -4.6151 11.5490 -0.8825 -1.5759 38.4058 0.0000 0.0000 22.7970 9.4731 11.2158 4.0979 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 2.0597 2.7198 -10.3069 17.9182 36.6251 -78.2664 -0.0000 0.0000 8.8966 2.5415 -4.2701 -3.1101 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -34.4976 1.9256 -13.7488 10.6456 0.0000 0.0000 10.8025 -3.7616 8.1836 -1.5348 0.0000 -0.0000 10.2875 -9.9781 1.9381 22.3741 0.0000 0.0000 -19.7578 0.4812 -34.5741 -15.6978 0.0000 -0.0000\n -3.0128 -43.0372 23.9175 -0.6164 5.0992 10.0620 1.1393 -0.0051 -1.5609 0.0297 -0.9788 -0.4366 14.7600 -1.0863 -1.5677 -1.1519 2.8975 -1.4206 -18.2402 12.4093 5.5496 5.9625 6.0503 -1.1084 -0.6206 -4.6377 11.2934 -0.0070 -2.1258 38.2410 0.0000 0.0000 21.4648 9.2544 10.9106 4.0538 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 2.6624 2.1189 -11.2352 17.4595 36.6176 -77.2447 -0.0000 0.0000 8.6397 2.4392 -3.5373 -3.0546 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -33.5576 2.1388 -13.5810 12.9798 0.0000 0.0000 7.4827 -4.4850 9.0774 -1.8223 0.0000 -0.0000 12.0513 -8.5402 -1.7997 21.9649 0.0000 0.0000 -20.0536 -0.0939 -34.4136 -16.8466 0.0000 -0.0000\n -2.9105 -44.1445 23.5423 1.0074 3.1443 14.3440 0.0112 -0.0494 -1.4200 -0.6482 -0.2321 -0.3966 14.8314 -1.4430 -3.3270 -1.2054 2.6175 -1.7451 -18.9897 11.3165 4.8636 5.7782 4.9942 -0.8296 -0.8017 -5.3077 10.8891 1.2662 -2.8125 38.6590 0.0000 0.0000 19.9274 8.1151 9.2234 3.8645 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 2.6646 2.4484 -12.6063 16.3039 35.3309 -73.9457 -0.0000 0.0000 8.3977 2.7845 -1.7098 -2.8798 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -33.0133 2.6230 -10.2709 15.2894 0.0000 0.0000 7.2409 -4.4088 9.0318 -2.5300 0.0000 -0.0000 12.4090 -7.8387 -3.6887 22.5574 0.0000 0.0000 -21.7114 -1.1223 -36.8028 -19.5904 0.0000 -0.0000\n -2.7971 -45.2638 23.1853 3.0014 2.3069 17.3120 -1.3121 -1.4159 -0.8556 -1.4936 0.0311 -0.4030 15.0104 -1.4288 -4.8525 -1.6391 2.7115 -2.2034 -20.6643 10.3913 4.7883 5.5096 3.8623 -0.4891 -1.4452 -6.4710 11.5148 2.7150 -2.8652 39.1096 0.0000 0.0000 17.8972 6.6165 5.8866 3.1270 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 2.4519 4.4606 -13.5022 13.5139 32.1557 -68.3563 -0.0000 0.0000 8.4322 3.8333 -0.3495 -2.5252 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -34.7984 1.9981 -2.4921 20.8028 0.0000 0.0000 7.0151 -3.0787 5.9406 -1.9194 0.0000 -0.0000 10.5825 -8.5114 -1.7826 26.5281 0.0000 0.0000 -21.6290 -0.1062 -41.8873 -22.0942 0.0000 -0.0000\n -2.6698 -46.3958 23.0188 3.0792 1.4810 18.4987 -1.0410 -2.2133 -0.3540 -1.5914 -0.6390 -0.5617 15.1827 -1.8640 -5.3807 -2.2462 2.7176 -2.4201 -22.6156 9.1346 5.6057 4.2380 2.8709 -0.0734 -1.7107 -6.9651 13.4511 3.5715 -2.9932 39.2880 0.0000 0.0000 15.6738 5.9771 2.9552 2.0889 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 3.0962 6.5419 -13.4052 9.4199 27.7380 -62.7276 -0.0000 0.0000 8.4367 4.6866 -0.9238 -1.9534 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -36.2870 1.0656 2.7765 29.4206 0.0000 0.0000 3.2272 -1.7064 3.6370 -0.2355 0.0000 -0.0000 7.7337 -9.8240 1.3829 34.9588 0.0000 0.0000 -12.6367 4.3573 -45.2391 -21.4899 0.0000 -0.0000\n -2.5685 -47.4717 23.1226 1.3980 0.8433 20.0470 0.5112 -1.9808 -0.4797 -0.9356 -1.2265 -0.7136 14.9067 -3.3312 -5.3887 -2.6780 1.8037 -2.1990 -23.0929 6.3332 5.5211 2.1137 1.2381 0.3186 -1.0485 -6.4115 14.8465 3.7701 -4.3286 39.6661 0.0000 0.0000 13.8568 5.7059 1.7340 1.4796 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 4.1531 6.4081 -12.7489 6.0534 24.1144 -59.1999 -0.0000 0.0000 7.8156 4.4063 -1.8820 -1.5531 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -34.4392 1.2274 2.1366 35.1947 0.0000 0.0000 -2.3014 -1.5966 3.0516 0.5911 0.0000 0.0000 3.8991 -12.4168 2.9287 44.8879 0.0000 0.0000 4.4865 13.3016 -43.9219 -15.3743 0.0000 -0.0000\n -2.5073 -48.4634 23.4635 -0.2851 0.5258 22.9918 1.7350 -1.5007 -0.6912 -0.3964 -0.9096 -0.6631 14.2193 -4.7141 -5.2290 -2.7550 -0.0742 -1.6080 -21.7542 1.4958 2.5474 0.6574 -1.6909 0.3125 -0.0036 -6.0726 13.5996 4.1892 -6.8224 40.8647 0.0000 0.0000 12.3661 4.3000 0.9091 1.4499 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 3.7464 4.3039 -12.6445 4.3052 22.3559 -57.1589 -0.0000 0.0000 6.5882 3.4466 -0.5618 -1.8135 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -29.2709 1.7917 -0.7811 34.7281 0.0000 0.0000 -5.7063 -2.0120 2.5191 0.1830 0.0000 0.0000 -0.7727 -15.7498 3.2058 52.5631 0.0000 0.0000 13.1034 21.8111 -38.5926 -10.1548 0.0000 -0.0000\n -2.4145 -49.3675 23.9002 -0.7308 -0.0258 25.5854 1.9654 -1.0015 -0.6022 -0.2663 -0.1434 -0.4522 13.1611 -5.0399 -4.3875 -2.6455 -2.0835 -0.6530 -20.2017 -4.2616 -2.3197 0.7433 -5.2528 -0.4741 0.4519 -6.0768 10.6112 5.2399 -9.9678 42.6383 0.0000 0.0000 10.7187 2.2482 -1.1483 1.4496 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 1.1737 2.4389 -14.1744 2.7663 21.4159 -54.1398 -0.0000 0.0000 5.3903 3.0460 2.4396 -2.0201 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -23.2049 1.9922 -2.1536 29.8156 0.0000 0.0000 -5.8434 -1.4009 1.9073 -0.5376 0.0000 -0.0000 -5.8624 -17.9284 4.2292 56.6192 0.0000 0.0000 7.9901 22.4456 -30.8428 -10.1914 0.0000 -0.0000\n -2.2756 -50.1693 24.2578 -0.3618 -0.2721 25.8338 1.6679 -1.0313 -0.3601 -0.2766 0.3270 -0.2309 11.9520 -4.7558 -2.5984 -2.5048 -3.5641 0.5359 -19.4904 -9.0931 -6.2923 1.6784 -8.0849 -1.7758 0.2617 -5.2549 8.6675 6.0943 -13.0379 44.3490 0.0000 0.0000 9.2385 1.3532 -3.5685 1.1263 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -2.0195 1.6611 -16.3840 0.6463 18.7183 -49.4974 -0.0000 0.0000 4.4385 3.5804 3.8384 -1.5623 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -18.5497 1.5406 -1.6578 24.5578 0.0000 0.0000 -5.0468 0.0933 1.7165 -0.8272 0.0000 -0.0000 -10.2163 -19.4670 6.7108 56.8022 0.0000 0.0000 -0.0186 17.5108 -26.2075 -11.0925 0.0000 -0.0000\n -2.1227 -50.8964 24.4559 -0.4250 -0.3921 24.1574 1.8731 -1.4411 -0.1372 -0.0847 0.3494 -0.0896 11.0937 -4.5535 -0.3486 -2.4462 -4.3978 1.6106 -19.3006 -11.9947 -8.3376 2.3743 -9.7364 -3.0504 0.3141 -4.0737 8.3957 5.7859 -14.5087 45.9626 0.0000 0.0000 9.0383 1.3969 -4.1901 0.8039 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -4.3861 0.8673 -17.7736 -0.8729 12.9584 -44.6327 -0.0000 0.0000 3.2141 4.0322 2.6158 -1.2568 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -15.1474 0.9170 -1.5281 21.5566 0.0000 0.0000 -5.6192 1.7342 2.9131 -0.7487 0.0000 -0.0000 -13.3938 -20.9029 8.1794 54.2973 0.0000 0.0000 -2.9550 16.0131 -25.5270 -10.2717 0.0000 -0.0000\n -1.9736 -51.6049 24.5158 -1.1956 -0.8047 22.3892 2.6855 -1.7289 -0.0081 0.3071 0.2170 -0.0134 10.7399 -4.4891 1.6390 -2.5296 -4.7330 2.3542 -19.0706 -13.1836 -9.3839 2.3909 -10.8386 -4.2097 1.2768 -3.9617 8.3646 4.0719 -13.8765 47.7007 0.0000 0.0000 10.6258 0.4755 -1.8644 0.6464 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.9345 -0.5718 -18.1828 -1.9890 6.6167 -40.2941 -0.0000 0.0000 1.6227 3.4784 0.2050 -1.5630 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -12.0433 0.3887 -1.5607 20.6016 0.0000 0.0000 -7.2326 3.2576 4.1773 -0.6290 0.0000 -0.0000 -15.8478 -21.6517 7.0326 49.9013 0.0000 0.0000 -1.9136 15.9004 -24.8758 -9.4824 0.0000 -0.0000\n -1.8180 -52.3082 24.5241 -1.9271 -1.2209 21.1850 3.1611 -1.8521 0.0644 0.5297 0.0435 0.0304 10.7672 -4.4939 3.0571 -2.5638 -4.7409 2.8116 -18.5656 -13.4283 -10.1006 2.1287 -11.9017 -5.2664 2.6548 -4.9370 8.0441 1.5230 -13.1845 49.3574 0.0000 0.0000 13.4572 -1.6249 2.4522 0.7641 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -7.4255 -2.2252 -18.0248 -4.2445 3.0940 -36.9076 -0.0000 0.0000 0.3557 2.0828 -1.8029 -2.0961 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -9.3381 -0.1625 -0.3100 20.4361 0.0000 0.0000 -8.6728 4.4696 3.9750 -0.6344 0.0000 -0.0000 -18.1351 -21.4019 4.3159 43.5973 0.0000 0.0000 0.5595 10.3111 -21.9644 -9.6546 0.0000 -0.0000\n -1.6428 -52.9951 24.5577 -2.1733 -1.3327 20.2019 2.7880 -1.8711 0.1185 0.4253 -0.1186 0.0480 10.9432 -4.6971 3.9045 -2.3406 -4.7095 3.1347 -17.6596 -13.4192 -10.3314 2.1157 -12.7551 -5.9731 3.2924 -5.6269 7.8347 -0.4535 -14.8313 50.7173 0.0000 0.0000 16.5097 -2.8926 5.9985 1.2937 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -9.0664 -3.8374 -17.5638 -6.9199 2.5821 -34.7562 -0.0000 -0.0000 -0.0838 0.8327 -2.3431 -2.3395 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -7.0793 -0.5347 0.9222 19.9834 0.0000 0.0000 -9.8120 4.8652 3.7132 -0.7535 0.0000 -0.0000 -20.3696 -20.6745 1.8949 35.6751 0.0000 0.0000 5.8236 0.8731 -17.6985 -10.0448 0.0000 -0.0000\n -1.4365 -53.6855 24.6210 -2.4145 -1.5679 19.4904 2.1954 -1.6522 0.1459 0.2629 -0.0527 0.0736 10.9153 -5.0556 4.2153 -1.9615 -4.8526 3.4048 -16.3923 -13.5212 -10.1844 2.3537 -13.1803 -6.3702 2.8860 -5.2982 7.6371 -0.6869 -18.3582 52.0680 0.0000 0.0000 18.5479 -2.3069 6.8341 1.7601 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -10.4482 -5.4137 -17.2025 -7.7014 2.6460 -33.5886 -0.0000 0.0000 0.0194 0.6958 -1.4919 -2.3439 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.2760 -0.2350 0.1984 18.6375 0.0000 0.0000 -10.8586 4.5057 5.1773 -0.9332 0.0000 -0.0000 -22.3065 -19.7991 1.2123 27.6666 0.0000 0.0000 12.5121 -4.0893 -12.9779 -10.2612 0.0000 -0.0000\n -1.1917 -54.3870 24.6764 -3.1626 -2.3081 19.1413 2.1045 -1.3227 0.1638 0.3255 0.1959 0.1091 10.5720 -5.1565 4.3536 -1.6811 -5.0013 3.5995 -15.1230 -13.7211 -10.1853 2.5431 -13.4262 -6.8656 2.2705 -4.3871 7.1705 0.6186 -21.1326 53.9664 0.0000 0.0000 18.7024 -1.1941 5.8038 1.7548 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -11.3760 -6.7168 -17.2033 -6.5297 1.9568 -33.3701 -0.0000 0.0000 0.1553 1.2357 -0.1731 -2.5203 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.6282 0.6153 -1.6831 17.0617 0.0000 0.0000 -11.5559 4.0463 7.6288 -1.1676 0.0000 -0.0000 -23.9834 -18.5432 2.8797 21.6447 0.0000 0.0000 14.6737 -2.0099 -9.1952 -10.2469 0.0000 -0.0000\n -0.9163 -55.0636 24.7122 -4.3596 -3.0641 18.5878 2.4402 -1.4354 0.2065 0.5427 0.2651 0.1160 10.2934 -4.7778 4.7880 -1.5356 -4.8742 3.7144 -14.1761 -13.7525 -10.4099 2.5681 -13.7993 -7.5498 2.0673 -3.1631 6.7394 2.4812 -21.9850 56.2344 0.0000 0.0000 17.4695 -1.0561 4.8748 1.4847 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -11.9279 -7.4313 -17.2630 -5.8641 1.5296 -33.8991 -0.0000 0.0000 0.1804 1.2945 0.4828 -2.8663 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 2.7988 1.2794 -2.3809 16.5406 0.0000 0.0000 -11.8844 3.8494 9.1178 -1.5276 0.0000 -0.0000 -25.5274 -17.0858 5.2294 17.6223 0.0000 0.0000 11.9938 2.5034 -8.4463 -9.7877 0.0000 -0.0000\n -0.6310 -55.6889 24.7521 -5.5461 -3.6444 17.4784 2.8007 -1.7568 0.2389 0.7075 0.1546 0.1231 10.3724 -4.2317 5.4477 -1.3975 -4.5528 3.7485 -13.5535 -13.6103 -10.4987 2.4971 -14.2091 -8.1285 2.0691 -1.8417 6.7473 4.1743 -21.7911 58.1407 0.0000 0.0000 16.2240 -1.6955 4.6895 1.3010 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -12.2292 -7.6307 -17.0575 -6.6403 2.3069 -34.6809 -0.0000 0.0000 0.1725 0.5795 0.2850 -3.1869 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 5.3164 1.7489 -1.3463 17.2133 0.0000 0.0000 -12.1362 3.7292 9.0801 -2.1695 0.0000 -0.0000 -27.0697 -15.4548 5.2863 14.1867 0.0000 0.0000 10.4823 5.2058 -10.2818 -9.6143 0.0000 -0.0000\n -0.3410 -56.3015 24.7941 -6.4971 -4.4837 16.1253 3.0617 -1.6325 0.3139 0.8440 0.1596 0.1347 10.5642 -3.7075 5.9075 -1.2266 -4.3194 3.7461 -13.0694 -13.5299 -10.4315 2.4233 -14.5124 -8.4785 1.9342 -0.7006 6.8474 5.4933 -21.9528 59.5125 0.0000 0.0000 15.7811 -1.9979 4.7200 1.2885 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -12.3491 -7.7825 -16.8151 -7.2663 3.5783 -35.3479 -0.0000 0.0000 0.1358 0.1690 0.0343 -3.4267 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 7.5968 2.4559 0.4603 17.9778 0.0000 0.0000 -12.4872 3.8219 8.0252 -3.0546 0.0000 -0.0000 -28.4708 -13.3623 2.5333 11.0326 0.0000 0.0000 11.3590 5.0578 -12.3507 -9.8295 0.0000 -0.0000\n -0.0456 -56.9390 24.8018 -7.3828 -5.4794 14.7632 3.3221 -1.2522 0.4395 1.0030 0.3167 0.1622 10.6752 -3.1743 6.1261 -1.0568 -4.1386 3.7173 -12.6842 -13.5217 -10.4203 2.3366 -14.8152 -8.7154 1.7419 0.3258 6.6494 6.3558 -22.8474 60.6408 0.0000 0.0000 15.9585 -1.7907 4.5818 1.2898 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -12.3275 -8.0533 -16.7655 -6.7091 4.2944 -35.9666 -0.0000 0.0000 0.0970 0.7800 0.2996 -3.4801 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 10.2866 3.2055 2.6410 18.1373 0.0000 0.0000 -12.9258 4.5604 6.2797 -3.8075 0.0000 -0.0000 -29.6378 -11.1455 -0.7499 8.9511 0.0000 0.0000 11.6088 4.2413 -13.3694 -9.9559 0.0000 -0.0000\n 0.2506 -57.5719 24.7608 -8.2557 -6.1558 13.1749 3.5887 -1.0431 0.5319 1.1187 0.3032 0.1690 10.9403 -2.5737 6.3569 -0.9100 -3.7968 3.6321 -12.4998 -13.4218 -10.3604 2.1656 -15.2083 -8.8179 1.6364 1.2919 6.4714 6.6794 -23.5890 61.6261 0.0000 0.0000 16.2480 -1.6730 4.5032 1.2293 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -12.1979 -8.0190 -16.7023 -5.8249 4.3953 -36.5281 -0.0000 0.0000 0.0677 1.6628 0.6111 -3.4522 -0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 12.9386 3.8076 4.9593 18.1477 0.0000 0.0000 -13.5931 5.7001 4.5706 -4.1855 0.0000 -0.0000 -30.5703 -9.3799 -2.7362 7.8404 0.0000 0.0000 10.8157 5.1769 -13.3164 -10.4246 0.0000 -0.0000\n 0.5387 -58.1835 24.6922 -8.9501 -6.3855 11.3872 3.7414 -0.9880 0.5678 1.1723 0.1401 0.1554 11.3941 -2.0252 6.4907 -0.8157 -3.3709 3.4529 -12.4230 -13.3246 -10.0470 2.0307 -15.5892 -8.6597 1.4824 1.8912 6.6570 6.6992 -23.5952 62.3604 0.0000 0.0000 16.4784 -1.7733 4.7103 1.2290 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -11.9599 -7.4647 -16.4525 -5.4936 4.5671 -36.8917 -0.0000 0.0000 0.0215 1.9582 0.4226 -3.5131 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 15.0070 4.4220 6.6481 18.4533 0.0000 0.0000 -14.5811 6.6022 3.9298 -4.4249 0.0000 -0.0000 -31.3008 -8.1734 -3.4663 7.0617 0.0000 0.0000 10.6633 7.0919 -12.7903 -11.4841 0.0000 -0.0000\n 0.8159 -58.8118 24.6189 -9.1707 -6.4037 9.8549 3.6077 -0.7715 0.6110 1.1375 0.1188 0.1442 11.7062 -1.6835 6.2472 -0.7820 -3.1159 3.2144 -12.3192 -13.4765 -9.6474 2.2147 -15.8438 -8.2910 1.1710 2.0249 6.9188 6.7963 -23.6404 62.8101 0.0000 0.0000 16.8095 -1.7637 5.0341 1.3271 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -11.5798 -6.6946 -16.1340 -5.3878 5.2534 -37.2832 -0.0000 0.0000 0.0016 1.9929 0.0916 -3.5957 -0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 16.3718 5.1212 7.4023 19.0445 0.0000 0.0000 -15.4538 7.1241 4.3344 -4.8889 0.0000 -0.0000 -31.9000 -7.0592 -3.4237 6.6358 0.0000 0.0000 10.9422 7.7750 -12.3246 -12.2443 0.0000 -0.0000\n 1.0835 -59.4850 24.5370 -8.9037 -6.1121 8.7188 3.1718 -0.4841 0.6195 0.9333 0.1456 0.1294 11.7948 -1.4957 5.7503 -0.7355 -2.9870 2.9812 -12.3037 -13.8894 -9.4651 2.7531 -15.9989 -7.8766 0.8879 2.0691 6.9437 6.9588 -24.4201 63.0249 0.0000 0.0000 17.3003 -1.6808 5.2069 1.4105 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -11.0946 -6.0002 -15.9555 -4.8556 6.2445 -37.8877 -0.0000 0.0000 0.1175 2.2392 0.1798 -3.6580 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 17.2014 5.4847 7.9513 19.8177 0.0000 0.0000 -15.7147 7.5021 4.7475 -5.6721 0.0000 -0.0000 -32.1464 -5.9766 -3.0888 6.5583 0.0000 0.0000 10.4297 7.2562 -11.9935 -12.4248 0.0000 -0.0000\n 1.3471 -60.1993 24.4311 -8.4627 -5.3531 7.6980 2.5749 -0.3890 0.5141 0.5662 0.0381 0.1060 11.9848 -1.3677 5.2105 -0.6477 -2.7641 2.7335 -12.5087 -14.3753 -9.4675 3.3604 -16.1820 -7.4938 0.8002 1.9970 6.9333 7.0263 -24.8813 63.1485 0.0000 0.0000 17.6200 -1.8859 5.1477 1.4385 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -10.5432 -5.1838 -16.0192 -3.9331 6.9566 -38.3609 -0.0000 0.0000 0.3502 2.2081 0.4919 -3.9482 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 17.9539 5.3736 8.7277 20.4802 0.0000 0.0000 -15.5703 7.5432 4.7893 -6.8483 0.0000 -0.0000 -31.6455 -5.2122 -2.7984 6.3494 0.0000 0.0000 9.7831 7.2610 -11.5619 -13.1494 0.0000 -0.0000\n 1.6264 -60.9770 24.3023 -7.9548 -4.5822 6.7790 1.8296 -0.2301 0.4014 0.1608 -0.0268 0.0634 12.3013 -1.2924 4.4328 -0.6036 -2.5383 2.3767 -12.7505 -14.7743 -9.4108 3.9722 -16.4735 -7.1369 0.8347 1.3288 7.0505 7.2501 -24.0147 63.4404 0.0000 0.0000 17.4383 -2.3796 4.9997 1.4271 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.7704 -3.9653 -16.0528 -3.2387 7.6219 -38.5622 -0.0000 0.0000 0.5832 1.3953 0.2289 -4.4755 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 19.0959 5.4940 8.9444 20.5482 0.0000 0.0000 -15.4959 6.9501 5.3235 -8.4417 0.0000 -0.0000 -30.3703 -4.4013 -1.7971 6.2128 0.0000 0.0000 9.8154 7.9901 -10.9570 -14.3797 0.0000 -0.0000\n 1.9278 -61.8523 24.1424 -7.0320 -3.7043 5.9576 0.7273 -0.1002 0.3654 -0.3221 0.1105 0.0343 12.3767 -1.4770 3.3657 -0.6666 -2.4665 1.9708 -12.8842 -14.8490 -9.1630 4.8932 -16.7467 -6.7993 0.8354 0.4423 7.0762 7.8963 -23.4998 63.8679 0.0000 0.0000 17.1664 -2.7313 5.0447 1.2814 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -8.5168 -2.3141 -15.4648 -3.0902 9.2491 -38.9213 -0.0000 0.0000 0.5533 0.1456 -1.0114 -4.8590 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 20.1580 5.8295 8.3557 20.2252 0.0000 0.0000 -15.3350 6.1148 6.9191 -9.9028 0.0000 -0.0000 -28.6644 -3.6252 0.6750 7.0292 0.0000 0.0000 9.2501 8.3443 -10.6354 -14.1254 0.0000 -0.0000\n 2.2422 -62.8185 23.9190 -5.6839 -2.0732 4.3726 -0.7042 -0.3199 0.2104 -1.0233 -0.1380 -0.0292 12.3745 -1.9319 2.7371 -0.8186 -2.3028 1.7172 -13.2773 -14.5679 -8.7348 6.1044 -16.6983 -6.4030 0.8227 -0.2910 7.0358 8.4093 -24.9036 63.7516 0.0000 0.0000 17.8643 -2.6798 5.4271 1.0643 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -6.8488 0.1059 -13.9765 -2.5421 11.2328 -39.4294 -0.0000 -0.0000 -0.2310 -1.0096 -2.7839 -5.0751 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 20.5114 5.8846 7.9804 20.3027 0.0000 0.0000 -15.0147 5.5464 9.3275 -10.5652 0.0000 -0.0000 -26.0232 -3.8287 3.3533 8.0366 0.0000 0.0000 7.7439 8.1248 -10.6754 -12.1002 0.0000 -0.0000\n 2.6009 -63.8533 23.6485 -4.4493 -1.1371 1.3709 -2.1956 0.5993 -0.1474 -1.9938 -0.9359 -0.1466 13.3213 -2.5730 2.9185 -1.1119 -1.8465 1.6446 -14.4342 -14.6763 -8.2522 6.9707 -16.2653 -5.9662 0.8949 -2.7246 7.3323 8.0295 -25.3268 62.3176 0.0000 0.0000 19.9493 -2.5359 5.8008 1.1689 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.2748 4.5523 -12.0760 -0.1476 10.4776 -39.4489 -0.0000 -0.0000 -1.7513 -2.2317 -4.0594 -5.4112 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 20.6761 7.4654 7.4363 21.0115 0.0000 0.0000 -15.1981 4.6899 12.7752 -11.0521 0.0000 -0.0000 -21.6376 -3.5995 3.9436 6.9896 0.0000 0.0000 7.7639 7.6627 -9.5415 -10.4409 0.0000 -0.0000\n 3.0716 -65.0163 23.4467 -4.6248 -4.4854 -1.6684 -3.3513 5.5612 0.0032 -3.1192 -0.8142 -0.1328 15.7442 -3.3891 2.6968 -1.6624 -1.6177 1.4348 -15.9978 -16.2081 -8.1536 7.2172 -15.8363 -5.7991 0.8923 -8.3573 7.9550 7.6122 -22.0264 59.8056 0.0000 0.0000 22.2853 -2.7626 5.9984 1.6677 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -4.4479 11.0907 -10.5972 4.0330 6.7299 -38.4894 -0.0000 -0.0000 -2.8245 -3.4763 -4.3521 -5.4894 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 22.4489 13.9823 3.9160 22.1502 0.0000 0.0000 -15.1720 2.4815 17.8923 -13.2869 0.0000 -0.0000 -14.8755 1.2152 0.9763 2.1995 0.0000 0.0000 10.7196 7.1453 -5.2773 -9.8886 0.0000 -0.0000\n 3.6015 -66.2708 23.4074 -5.8493 -10.7947 -2.5771 -4.3216 11.3686 1.0828 -3.8833 2.0919 0.4153 17.7622 -3.3102 0.8804 -2.2639 -2.3743 0.8075 -16.9176 -19.1097 -9.0773 7.3521 -15.7341 -6.2783 0.6424 -14.1496 7.9426 9.0142 -18.9156 57.5725 0.0000 0.0000 22.7850 -3.3140 6.4722 1.8558 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -4.3594 16.3626 -9.9735 8.0955 5.9148 -37.6337 -0.0000 -0.0000 -1.9572 -3.6937 -3.4853 -4.5725 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 24.7219 22.6210 -1.7457 25.6665 0.0000 0.0000 -11.6915 0.0551 22.7038 -16.5553 0.0000 -0.0000 -7.7423 8.9250 -6.1382 -4.3656 0.0000 -0.0000 13.6804 7.2389 1.4207 -9.3654 0.0000 -0.0000\n 4.0897 -67.3386 23.5501 -6.1599 -14.6141 -1.0404 -4.5985 12.1126 1.4577 -3.7875 4.8860 1.0443 17.7633 0.4380 -1.4669 -2.5109 -3.1963 -0.0688 -17.7204 -22.0376 -11.2240 7.5930 -15.5405 -7.2897 0.5850 -16.6633 6.8657 11.8974 -19.4966 57.1314 0.0000 0.0000 19.9863 -3.9179 6.1902 0.9090 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -4.2043 18.0703 -10.3353 10.0411 11.0891 -38.4754 -0.0000 0.0000 1.0436 -2.0145 -0.7697 -3.3842 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 21.9934 26.9471 -2.8885 35.1482 0.0000 0.0000 -3.1514 -1.2840 23.1834 -15.1555 0.0000 -0.0000 -3.7757 13.6532 -14.5514 -6.7287 0.0000 -0.0000 12.1885 7.4379 7.8234 -8.7891 0.0000 -0.0000\n 4.4624 -68.0785 23.7450 -6.2160 -14.5764 -0.5197 -3.6602 9.6634 1.0452 -2.9971 3.8188 0.8050 16.3961 5.7028 -1.7762 -2.4464 -2.2426 -0.6374 -18.7384 -22.0587 -13.2125 7.5207 -14.8204 -8.2689 1.1834 -14.7055 6.2553 14.8558 -21.7578 58.6237 0.0000 0.0000 15.2614 -4.3383 2.1953 -0.8492 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -3.0896 17.4013 -11.6662 11.3500 17.8778 -40.6122 -0.0000 0.0000 3.9747 0.7252 3.9084 -3.5841 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 12.5736 26.4103 2.9506 49.3620 0.0000 0.0000 6.3896 -4.4582 19.0105 -8.5644 0.0000 -0.0000 -2.3911 14.8681 -15.6410 -4.7316 0.0000 -0.0000 8.5165 5.9878 8.3225 -8.6004 0.0000 -0.0000\n 4.6317 -68.6453 23.9023 -7.0758 -12.6046 -2.7027 -2.1456 7.8876 0.7514 -2.2113 1.5544 0.3489 15.5144 7.5576 -0.1767 -2.3894 -0.4865 -0.6123 -19.1537 -18.4397 -13.2181 6.6514 -13.2999 -8.8586 1.8681 -11.3328 6.8783 16.8771 -20.9021 60.2369 0.0000 0.0000 12.2905 -3.2259 -5.6440 -1.8091 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -1.3008 16.5783 -12.7906 15.1334 20.3858 -44.4028 -0.0000 0.0000 4.7338 2.3462 8.7136 -5.5921 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 1.6852 22.3178 10.6327 62.8132 0.0000 0.0000 8.5773 -7.7878 12.9488 -5.2986 0.0000 -0.0000 -1.4485 13.9360 -10.3629 -1.8612 0.0000 -0.0000 5.9872 3.1991 4.6696 -8.4714 0.0000 -0.0000\n 4.6311 -69.2264 24.0502 -8.4050 -10.6721 -5.4174 -0.9496 7.9387 0.7313 -1.7024 0.6761 0.1796 15.8049 6.5583 0.8586 -2.3656 0.1255 -0.3987 -18.7714 -13.7774 -11.4152 5.3480 -10.9676 -8.9354 2.2193 -10.8270 7.7156 16.8522 -17.1218 60.3637 0.0000 0.0000 12.6426 -0.1429 -12.4096 -0.8884 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.2168 16.2532 -12.7210 19.7385 18.8001 -48.8276 -0.0000 0.0000 4.0278 1.7315 10.4685 -7.8772 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.4713 17.0558 14.7605 71.7094 0.0000 0.0000 2.9419 -6.2479 6.6001 -4.6532 0.0000 -0.0000 0.4948 12.4729 -7.2957 -0.4808 0.0000 -0.0000 4.4374 0.6220 3.7806 -8.1076 0.0000 -0.0000\n 4.6062 -69.7990 24.1687 -9.0014 -9.5066 -6.5560 -0.7511 8.9527 0.7916 -1.6037 1.4667 0.2406 16.6101 3.9666 0.3101 -2.2344 -0.2031 -0.4610 -18.0083 -9.3013 -8.7121 4.2898 -8.5217 -8.4021 1.9963 -12.2107 8.3491 14.7407 -16.5794 59.1745 0.0000 0.0000 15.1302 1.4026 -14.1251 -0.2419 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.8401 16.1752 -11.8569 21.5552 17.9107 -52.1408 -0.0000 0.0000 3.5987 -0.0630 9.2131 -8.4857 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -12.7498 12.9347 14.7286 74.9822 0.0000 0.0000 -2.6017 -1.9136 1.4042 -4.6779 0.0000 -0.0000 2.6131 11.5401 -8.1834 -0.4408 0.0000 -0.0000 2.9568 -0.7708 5.7830 -7.6791 0.0000 -0.0000\n 4.6469 -70.3669 24.2376 -9.8000 -8.5143 -6.8882 -0.5569 9.2556 0.8504 -1.3787 2.2731 0.2792 17.2842 1.7398 -0.7452 -1.9875 -0.1549 -0.7374 -17.2824 -4.9264 -5.9583 3.6773 -6.3472 -7.4336 1.3180 -12.8418 8.8328 11.7352 -20.6771 57.3741 0.0000 0.0000 18.3287 -0.6491 -11.2314 -0.5731 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.8098 15.6100 -11.2273 20.9048 18.7315 -54.4224 -0.0000 0.0000 3.4460 -1.1654 6.5904 -7.9652 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -17.4498 10.0946 12.9716 73.5436 0.0000 0.0000 -3.8827 -0.2792 -2.9105 -4.6842 0.0000 -0.0000 5.6895 10.8516 -10.5462 -1.4459 0.0000 -0.0000 1.7496 -1.6585 8.3061 -7.3384 0.0000 -0.0000\n 4.7274 -70.9937 24.2840 -11.5599 -7.2061 -7.8634 0.1976 8.2841 0.9547 -0.9190 1.9707 0.1475 17.9945 1.3197 -1.0994 -1.7719 0.7292 -0.9911 -16.7920 -0.8315 -3.6188 3.4688 -4.2361 -6.3451 0.9482 -13.2601 9.1464 8.8584 -23.7329 55.5821 0.0000 0.0000 21.5374 -2.4970 -6.5194 -0.0756 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.7023 14.6219 -10.9664 19.7591 18.1800 -56.2471 -0.0000 0.0000 2.5462 -1.1533 3.3840 -7.7677 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -19.9246 7.9323 10.9960 68.0412 0.0000 0.0000 -3.7136 -1.1953 -7.0228 -3.9605 0.0000 -0.0000 9.9624 10.1213 -12.0554 -2.9080 0.0000 -0.0000 1.1466 -2.8404 10.2020 -7.0629 0.0000 -0.0000\n 4.8209 -71.6121 24.3051 -12.5092 -6.4603 -9.5043 0.3132 7.0995 1.1380 -0.8382 1.4378 0.0539 18.7137 2.0002 -0.8168 -1.5923 1.7740 -1.1512 -16.5208 2.6847 -1.6314 3.6642 -2.0053 -5.3198 0.9934 -14.3509 9.2750 6.6639 -23.4452 54.2573 0.0000 0.0000 24.6878 -0.6070 -1.8064 0.5878 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.6512 14.0728 -10.5371 18.4146 15.7814 -57.6571 -0.0000 0.0000 0.7412 -1.0817 -0.0538 -8.0017 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -21.9957 6.9123 8.9676 59.1784 0.0000 0.0000 -3.9774 -1.6378 -9.2491 -2.4314 0.0000 -0.0000 12.7728 10.1621 -12.1920 -3.6827 0.0000 -0.0000 0.4142 -4.1523 11.5074 -6.8011 0.0000 -0.0000\n 4.9385 -72.1037 24.2670 -11.4436 -7.1545 -11.2703 -0.8209 6.6364 1.3388 -1.4199 1.3771 0.1213 18.9770 2.9975 -0.3121 -1.3705 2.4116 -1.2279 -16.4056 5.4901 0.0425 4.0875 0.0754 -4.3674 0.8988 -15.2952 9.2787 4.9576 -22.8570 53.0395 0.0000 0.0000 27.5313 3.0833 1.4226 0.6074 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 0.4582 14.1072 -9.9152 16.2494 14.1092 -58.5453 -0.0000 -0.0000 -1.2683 -1.6286 -2.7082 -8.1087 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -25.6249 7.3482 6.8131 48.6154 0.0000 0.0000 -2.8760 -1.3292 -7.1380 -1.2931 0.0000 -0.0000 12.4995 11.5935 -11.0388 -3.2632 0.0000 -0.0000 -1.0424 -5.2000 11.9081 -6.5407 0.0000 -0.0000\n 5.0380 -72.5246 24.1948 -9.4599 -8.4029 -12.9606 -2.3194 6.6095 1.5523 -2.2176 1.4474 0.2568 18.7388 4.0587 0.3854 -1.1465 2.7007 -1.2015 -16.3080 7.5826 1.3017 4.4396 1.5747 -3.4929 0.4625 -15.4636 9.1817 3.4448 -23.6426 51.7288 0.0000 0.0000 29.4810 4.6444 1.7272 0.4790 -0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0700 14.2001 -9.4988 13.7634 13.8444 -59.2154 -0.0000 -0.0000 -2.8304 -2.2371 -3.8828 -7.8289 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -29.6965 7.8754 4.4131 37.4446 0.0000 0.0000 0.4959 -1.2355 -0.4203 -1.0787 0.0000 -0.0000 10.7303 13.3895 -8.3169 -2.2087 0.0000 -0.0000 -2.8588 -5.8843 10.8325 -6.2834 0.0000 -0.0000\n 5.0213 -73.0695 24.1607 -8.4388 -8.4663 -14.3139 -3.1343 6.4778 1.7971 -2.6193 1.2514 0.3036 18.6391 4.6145 1.0966 -0.9900 2.7978 -1.0648 -16.0806 9.0723 2.2018 4.7449 2.4318 -2.6909 -0.0425 -15.4590 9.0268 2.2042 -24.3142 50.5189 0.0000 0.0000 30.4282 4.1507 -0.1338 0.2225 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.2830 14.1956 -9.3023 11.9221 13.4880 -60.0954 -0.0000 -0.0000 -3.8672 -1.6936 -4.3455 -7.1063 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -31.0006 6.9682 1.5815 25.5219 0.0000 0.0000 5.0804 -1.8754 8.8256 -1.3013 0.0000 -0.0000 10.5724 13.8165 -5.4904 -1.5549 0.0000 -0.0000 -4.6217 -6.1622 9.2606 -6.0945 0.0000 -0.0000\n 4.8694 -73.7638 24.1700 -8.8545 -6.9626 -14.6362 -3.1190 6.3975 1.9966 -2.5527 0.9435 0.2485 19.0577 3.9251 1.3580 -0.8401 2.6754 -0.9113 -15.7574 10.2161 2.9750 5.2582 2.9695 -1.9447 -0.3946 -15.4806 8.8907 1.2379 -24.3284 49.3887 0.0000 0.0000 31.0244 4.5359 -2.1806 -0.3325 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.4123 14.1677 -9.0630 10.7924 13.0445 -61.2260 -0.0000 -0.0000 -4.9480 0.3126 -4.9708 -6.1778 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -29.1454 4.7532 -0.5138 14.1597 0.0000 0.0000 9.2610 -3.6028 16.3412 -1.6274 0.0000 -0.0000 13.1501 12.5175 -4.3051 -1.6273 0.0000 -0.0000 -6.4567 -5.8901 8.2206 -6.0122 0.0000 -0.0000\n 4.6982 -74.4337 24.1644 -9.3155 -5.3213 -13.7895 -3.0320 6.5729 2.1071 -2.4127 0.8213 0.1814 19.6589 2.4371 1.1375 -0.6722 2.4338 -0.8224 -15.6408 11.1347 3.6575 5.9187 3.4414 -1.3321 -0.5718 -15.3140 8.9083 -0.0159 -24.7564 47.8010 0.0000 0.0000 31.8328 6.2995 -3.1899 -0.6107 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.2873 14.1999 -8.8890 9.7099 13.3865 -62.1177 -0.0000 -0.0000 -6.6697 2.6182 -5.6429 -5.5149 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -27.8871 2.8015 -0.3538 6.4785 0.0000 0.0000 11.0586 -5.6775 18.6404 -1.9992 0.0000 -0.0000 15.9188 10.7877 -3.8831 -1.4203 0.0000 -0.0000 -8.5479 -5.2783 7.0060 -5.8373 0.0000 -0.0000\n 4.5905 -75.0640 24.1201 -9.1830 -4.5234 -12.6082 -2.8887 6.8261 2.0898 -2.2942 0.7535 0.1313 19.7247 1.3917 0.9635 -0.5578 2.2973 -0.7671 -15.6660 11.7577 4.0880 6.4606 3.8644 -0.9928 -0.5485 -15.0280 9.0627 -1.9959 -26.3836 45.3077 0.0000 0.0000 32.9665 7.3880 -3.0153 -0.3893 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0773 14.3135 -8.9334 8.6170 14.1743 -62.6534 -0.0000 -0.0000 -8.8656 3.9734 -6.0666 -5.3631 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -29.1213 2.0657 -0.5138 3.8759 0.0000 0.0000 10.2941 -6.6050 17.7928 -2.1749 0.0000 -0.0000 17.2274 9.7787 -2.5912 -0.2229 0.0000 -0.0000 -10.8321 -4.8203 4.6842 -5.3703 0.0000 -0.0000\n 4.5199 -75.7697 24.0428 -8.6252 -4.4777 -11.5323 -2.6676 7.0901 1.9104 -2.0807 0.5949 0.0958 18.9441 1.1337 1.1518 -0.4913 2.2978 -0.6909 -15.4040 12.0361 4.2130 6.9126 4.2346 -0.9469 -0.3474 -14.6340 9.0220 -4.5038 -29.5173 41.8000 0.0000 0.0000 34.8312 7.6283 -1.7205 -0.2353 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.6173 14.3313 -8.7710 8.1363 14.9880 -63.5636 -0.0000 -0.0000 -10.8817 4.8622 -6.7105 -5.2543 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -31.9250 2.2332 -2.4815 5.2753 0.0000 0.0000 9.0425 -6.0683 15.9565 -2.1041 0.0000 -0.0000 17.5312 9.4709 -0.7970 1.6057 0.0000 0.0000 -13.3034 -4.6655 1.9195 -4.7194 0.0000 -0.0000\n 4.4380 -76.5100 23.9396 -7.7332 -4.5470 -10.1910 -2.7170 7.0818 1.6968 -2.0259 0.5343 0.0972 18.2191 1.1757 1.4340 -0.4504 2.2452 -0.6134 -15.0914 12.1566 4.1576 7.4298 4.5287 -1.1211 -0.1737 -14.2353 8.7047 -7.5162 -33.7894 36.7673 -0.0000 0.0000 38.2589 8.6657 0.6211 -0.3080 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 1.0267 14.3707 -8.1375 8.5476 16.1980 -65.0701 -0.0000 -0.0000 -12.7017 6.3463 -7.9196 -4.8665 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -34.4447 2.8044 -4.9364 7.7936 0.0000 0.0000 9.0300 -4.5642 13.0236 -2.0538 0.0000 -0.0000 17.5947 9.0182 0.8264 3.5037 0.0000 0.0000 -15.9246 -4.2264 -0.8098 -4.0997 0.0000 -0.0000\n 4.3365 -77.2126 23.8110 -6.4093 -4.5352 -8.3728 -3.2788 6.7768 1.7056 -2.3158 0.5880 0.1332 18.2580 1.2285 1.5724 -0.4448 2.1014 -0.5644 -15.1989 12.3407 3.9938 7.9618 4.7111 -1.4586 -0.0087 -14.3871 8.4919 -11.3657 -37.6122 29.7341 -0.0000 0.0000 43.0894 10.2856 3.1074 0.2388 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 1.1074 14.7159 -7.5562 9.7793 17.7608 -66.3433 -0.0000 -0.0000 -14.7977 7.7625 -9.2084 -4.7883 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -35.8601 3.5933 -6.7918 9.2376 0.0000 0.0000 9.9742 -3.0571 9.7496 -1.8260 0.0000 -0.0000 17.4817 8.1229 2.3948 5.2586 0.0000 0.0000 -18.3539 -3.1099 -3.7763 -3.5980 0.0000 -0.0000\n 4.2229 -78.0108 23.6642 -4.8742 -4.5150 -6.4758 -4.0418 6.3755 1.8356 -2.6772 0.4975 0.1576 18.3957 1.4000 1.8234 -0.4537 2.0296 -0.4909 -15.4767 12.6069 3.7797 8.4577 4.8506 -1.8442 0.4183 -15.3877 8.5071 -15.4540 -39.8438 21.7366 -0.0000 0.0000 47.7264 10.8424 5.1796 1.6161 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 1.1427 15.3154 -7.2539 11.9434 18.7116 -67.0069 -0.0000 -0.0000 -16.9690 7.9110 -10.1210 -5.3173 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -36.0103 4.5209 -7.9268 9.6610 0.0000 0.0000 10.3070 -2.7725 7.4799 -1.3531 0.0000 -0.0000 17.6235 7.1212 3.4028 6.3096 0.0000 0.0000 -20.1890 -1.8072 -6.3244 -3.5697 0.0000 -0.0000\n 4.0930 -78.9849 23.4974 -3.2615 -4.4595 -4.8695 -4.8585 5.9161 1.8561 -2.9992 0.2433 0.1615 18.0721 1.7539 2.2872 -0.4293 2.0389 -0.3653 -15.7095 12.8290 3.6992 8.9355 5.0137 -2.0836 0.9595 -16.7362 8.3942 -18.3590 -41.3263 14.4480 -0.0000 0.0001 50.8140 10.6458 7.5770 2.8121 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 1.4837 15.8618 -6.7283 14.9273 18.5876 -67.3512 -0.0000 -0.0000 -18.7118 7.6849 -10.5970 -5.6337 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -34.8103 5.2945 -9.4445 9.9942 0.0000 0.0000 9.9343 -3.3883 6.7244 -1.1449 0.0000 -0.0000 18.3108 6.1760 3.6967 6.4520 0.0000 0.0000 -21.5129 -0.5767 -8.0009 -4.4244 0.0000 -0.0000\n 3.9313 -79.9680 23.3012 -1.1905 -4.2753 -3.4415 -6.1871 5.1027 2.0026 -3.7764 0.3260 0.2347 18.3249 2.1455 2.4981 -0.4418 1.9494 -0.3280 -16.6111 12.9611 3.8995 9.1642 5.0888 -2.1119 1.3334 -18.2862 8.1034 -19.1675 -42.4752 9.0848 -0.0000 0.0001 51.7596 10.7658 10.4148 3.4534 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 2.0722 16.6284 -5.9999 17.9213 17.2060 -66.9257 -0.0000 -0.0000 -19.8841 8.0594 -10.3095 -5.6924 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -32.3905 5.3399 -12.6454 9.4861 0.0000 0.0000 11.0789 -2.1032 6.9808 -1.4023 0.0000 -0.0000 18.4876 4.9788 4.2800 7.0144 0.0000 0.0000 -22.6435 1.0637 -9.6275 -5.6841 0.0000 -0.0000\n 3.6777 -80.9226 23.1292 1.0751 -2.7701 -2.0421 -7.9162 2.9279 2.3652 -5.2163 0.5205 0.3586 20.1766 2.8047 2.2222 -0.6494 1.6862 -0.4151 -18.5991 13.1166 4.2086 8.8126 5.0122 -2.0374 1.8880 -21.1834 8.0937 -16.8446 -41.4432 7.4153 -0.0000 0.0001 49.3067 9.7613 12.3620 4.5925 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 2.3683 18.6319 -5.9745 20.7490 13.5674 -64.6562 -0.0000 -0.0000 -19.6569 7.3699 -9.1256 -6.6582 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -28.2279 2.8947 -17.5140 5.5770 0.0000 0.0000 14.7988 3.0314 7.2762 -1.2729 0.0000 -0.0000 17.7419 2.0131 6.4003 9.2768 0.0000 0.0000 -23.6070 3.5146 -12.2254 -6.8596 0.0000 -0.0000\n 3.2747 -82.0616 23.0477 2.1914 1.5679 -1.2071 -8.8695 -0.7903 2.2723 -6.4108 -0.8143 0.0786 22.0391 3.7179 2.2631 -1.0857 1.6048 -0.4476 -20.3394 13.4659 4.5271 8.1264 5.1691 -1.8387 2.9433 -25.1359 8.5322 -9.8545 -37.7630 10.6957 -0.0000 0.0000 41.3187 5.1035 12.8628 6.0053 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 1.7834 21.5913 -6.7207 25.2888 8.4407 -61.1384 -0.0000 -0.0000 -15.9107 4.1276 -7.2612 -8.0290 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -21.8348 -3.8640 -19.8476 -2.3054 0.0000 -0.0000 19.1855 8.6677 5.4705 -0.5037 0.0000 -0.0000 17.7795 -4.2579 10.3294 12.8351 0.0000 0.0000 -23.9971 6.3121 -15.5975 -8.9376 0.0000 -0.0000\n 2.8293 -83.2794 23.0702 2.7534 7.4306 -1.9599 -8.8572 -4.2476 1.5487 -6.7102 -3.9123 -0.7242 21.6632 3.5143 3.3558 -1.5827 2.1499 -0.2231 -20.9367 14.5101 5.4828 7.7199 5.7303 -1.2498 3.7004 -27.0464 9.0070 1.9010 -34.3769 17.9645 0.0000 0.0000 28.0697 -2.2680 9.2246 4.2944 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.2318 23.8624 -7.2593 32.1287 6.1144 -58.3406 -0.0000 -0.0000 -7.9028 1.3067 -3.4055 -7.3887 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -16.9463 -11.6330 -13.9811 -7.3737 0.0000 -0.0000 20.7658 9.8167 -0.9473 0.1295 0.0000 0.0000 17.9978 -12.0460 15.5758 17.9794 0.0000 0.0000 -22.8926 8.2894 -19.0333 -13.1911 0.0000 -0.0000\n 2.4186 -84.2909 23.1973 3.3522 12.6405 -3.6159 -8.0721 -6.2222 0.8654 -6.0311 -5.9716 -1.1990 19.5553 0.5150 4.4305 -1.9083 2.7388 0.1258 -21.4376 15.8863 7.5132 7.5544 6.1526 -0.2512 3.8444 -24.8260 9.8211 13.1134 -35.2688 25.5725 0.0000 0.0000 15.3317 -5.9277 -2.3015 -2.0388 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.6089 23.3226 -7.7119 37.3084 9.7116 -57.7563 -0.0000 0.0000 1.2531 3.7637 3.2818 -4.6214 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -15.4721 -17.6564 -9.0802 -5.4700 0.0000 -0.0000 17.1858 9.0032 -4.9870 0.4999 0.0000 0.0000 16.2651 -19.5845 19.1674 26.8136 0.0000 0.0000 -18.8365 8.6514 -21.6265 -18.0862 0.0000 -0.0000\n 2.0842 -85.2116 23.3566 2.0365 15.2393 -2.7077 -6.0010 -6.5704 0.4879 -4.3822 -5.0615 -0.9435 17.0736 -3.0115 3.4722 -1.9445 2.3509 0.2025 -21.9004 15.5606 9.3057 6.6585 5.9998 0.6058 4.7052 -19.8386 10.9308 20.9673 -40.4654 32.5618 0.0000 0.0000 8.3664 -2.2592 -14.4749 -5.1931 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.8904 17.8495 -8.8914 39.8052 15.3701 -60.1193 -0.0000 0.0000 7.0658 9.9604 11.1874 -2.7492 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -13.4626 -20.5124 -10.5784 -1.4914 0.0000 -0.0000 12.0612 9.0923 -4.5081 0.7042 0.0000 0.0000 11.6022 -25.0950 15.4123 39.6836 0.0000 0.0000 -10.6931 7.6383 -21.8315 -18.2056 0.0000 -0.0000\n 1.8291 -86.1891 23.5023 -0.8675 15.7036 1.7828 -3.2941 -6.1986 0.1878 -2.9261 -3.3366 -0.6370 15.5112 -4.3683 1.2561 -1.8541 1.4728 -0.0656 -21.6693 13.5192 9.0972 4.7518 5.0461 0.6611 6.2410 -15.6995 11.1654 27.4767 -44.1202 38.9805 0.0000 0.0000 7.5412 2.8256 -22.6528 -1.9284 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 2.7827 10.7344 -10.4978 41.5520 16.7680 -63.0285 -0.0000 0.0000 7.6465 13.8229 18.8013 -3.5994 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -9.5180 -21.0332 -13.6577 -0.2950 0.0000 -0.0000 8.8306 10.0866 -4.6780 0.7949 0.0000 0.0000 2.9901 -27.6001 4.9730 54.0631 0.0000 0.0000 -0.9396 6.6877 -20.4900 -11.8485 0.0000 -0.0000\n 1.6385 -87.0543 23.6079 -2.9757 15.7326 6.3360 -1.3174 -6.3009 0.0631 -2.1042 -2.6500 -0.4946 14.7431 -4.0798 0.3926 -1.8617 0.9969 -0.1795 -20.6227 11.5682 7.0940 3.0699 3.7507 -0.3264 7.6834 -15.1402 10.5407 28.8578 -43.9598 39.9994 0.0000 0.0000 9.0278 2.1827 -26.3187 1.8086 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 3.3130 8.3895 -11.4198 40.5298 13.9117 -62.9232 -0.0000 0.0000 5.6674 11.9389 21.7213 -4.7537 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.9277 -21.5737 -14.7762 -1.1213 0.0000 -0.0000 6.9343 10.8038 -6.5975 0.8674 0.0000 0.0000 -7.6752 -27.3752 -5.5257 66.7721 0.0000 0.0000 3.8961 5.7407 -19.0580 -7.9700 0.0000 -0.0000\n 1.5230 -87.6832 23.6546 -3.3494 16.2398 7.6484 -0.7698 -7.2431 0.1781 -1.8086 -3.2905 -0.4542 14.4965 -2.6895 1.9861 -1.9987 1.1341 0.1859 -19.1648 10.3266 4.7266 2.9876 2.9281 -1.8874 7.9730 -16.5751 9.8157 25.9005 -41.7743 36.8658 0.0000 0.0000 9.5720 -3.3821 -25.0952 0.4935 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 2.5655 10.9224 -11.2366 36.4089 11.8357 -61.1119 -0.0000 0.0000 3.9436 6.2377 17.0824 -4.1601 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.9172 -22.5667 -13.6036 -1.3597 0.0000 -0.0000 5.0373 10.7058 -8.1877 0.9760 0.0000 0.0000 -17.3598 -26.1775 -11.0754 75.8881 0.0000 0.0000 1.7367 4.0753 -17.2050 -7.2907 0.0000 -0.0000\n 1.5185 -88.3266 23.6913 -3.6661 16.2002 6.2650 -0.5177 -8.2128 0.3612 -1.4936 -4.3843 -0.4387 14.6035 -0.7003 4.7655 -1.9736 1.5957 0.8345 -17.4532 9.5231 2.9443 4.5813 2.6938 -3.2283 7.2617 -16.9339 9.3425 23.0515 -38.8612 34.9547 0.0000 0.0000 9.4083 -4.1235 -18.9248 -1.6592 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 1.8618 13.1554 -10.3810 30.9391 12.9347 -60.7890 -0.0000 0.0000 2.5243 2.5188 7.2481 -5.0384 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -1.5646 -22.8034 -12.4387 -0.5063 0.0000 -0.0000 2.7538 10.3858 -7.2610 0.9256 0.0000 0.0000 -23.2720 -24.4173 -11.7150 79.9299 0.0000 0.0000 -2.5713 2.1625 -13.7494 -7.9727 0.0000 -0.0000\n 1.6253 -89.1584 23.7783 -5.3707 14.8040 4.7263 0.2854 -8.4768 0.4281 -0.9329 -4.7320 -0.3568 15.1307 0.8444 6.7200 -1.6288 1.9023 1.3149 -15.5847 9.1160 2.0155 6.7723 2.5164 -3.8661 6.2756 -15.7948 9.2079 21.3028 -35.4224 35.3772 0.0000 0.0000 9.8854 0.9510 -9.8805 -2.3228 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.8674 13.1325 -9.6002 26.2510 14.5073 -61.7864 -0.0000 0.0000 0.7424 0.1226 -2.2343 -6.9648 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 2.4905 -21.4054 -11.9331 0.4546 0.0000 0.0000 0.3356 10.1208 -5.1048 0.5512 0.0000 0.0000 -25.0551 -21.2147 -10.2978 78.6954 0.0000 0.0000 -4.7827 1.2357 -8.8608 -9.3098 0.0000 -0.0000\n 1.7808 -89.9432 23.8777 -7.2914 13.0184 3.9889 0.8672 -8.1734 0.2993 -0.5754 -4.5632 -0.2975 16.0078 1.5433 7.2638 -1.1367 1.9739 1.4263 -13.8036 9.0837 1.7599 8.6752 2.0790 -3.7641 5.1184 -14.8048 9.2514 18.1648 -31.9204 35.5194 0.0000 0.0000 11.6831 2.2239 -1.0185 -2.5557 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 1.4347 12.7884 -9.2304 23.1306 13.9945 -62.2707 -0.0000 -0.0000 -1.0551 -1.8454 -6.4542 -7.2468 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 6.3356 -19.2833 -11.1704 1.5574 0.0000 0.0000 -2.2083 9.5581 -4.1883 0.1190 0.0000 0.0000 -25.4872 -17.5159 -9.0417 73.2130 0.0000 0.0000 -5.9098 1.3560 -4.0229 -10.0795 0.0000 -0.0000\n 1.9128 -90.5372 23.9067 -7.6663 12.1354 3.5616 0.4736 -7.9223 0.0786 -0.7079 -4.5282 -0.3364 16.6138 1.5392 7.0099 -0.7474 2.0027 1.3025 -12.3024 9.2076 1.8752 10.1362 1.4977 -3.1585 3.6145 -14.2721 9.2407 12.8109 -29.9112 34.4326 0.0000 0.0000 15.1344 -2.2745 4.0976 -1.3962 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0099 12.9520 -9.0959 20.8325 12.6204 -61.8383 -0.0000 -0.0000 -2.4094 -1.3846 -3.9806 -5.5388 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 7.8042 -17.9122 -10.2617 3.4240 0.0000 0.0000 -4.9132 8.7153 -4.3884 -0.0354 0.0000 -0.0000 -27.0115 -15.4333 -7.9220 64.6040 0.0000 0.0000 -7.1562 1.3277 -0.8374 -9.2837 0.0000 -0.0000\n 1.9965 -91.1668 23.8613 -6.7615 12.2042 3.3633 -0.3832 -7.8439 -0.1140 -1.0687 -4.4998 -0.4188 16.3991 0.8937 6.3670 -0.4912 2.0074 1.1124 -11.1257 9.1922 2.1334 11.3246 1.0428 -2.3587 2.1416 -13.4357 9.1454 7.0000 -29.6526 33.2485 0.0000 0.0000 19.9005 -6.2442 5.6095 0.7308 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -1.5944 12.4525 -9.0377 18.6517 12.4347 -61.4284 -0.0000 -0.0000 -3.3432 0.4923 0.7740 -4.3607 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 7.7749 -17.5982 -10.1135 5.2295 0.0000 0.0000 -7.3592 7.9745 -4.2620 -0.1538 0.0000 -0.0000 -29.0269 -15.2964 -6.0882 53.3320 0.0000 0.0000 -7.2845 0.6276 -0.4657 -7.7958 0.0000 -0.0000\n 2.0618 -91.9382 23.7880 -5.6333 12.7096 3.6207 -1.3727 -7.9009 -0.3296 -1.4820 -4.2435 -0.4966 15.9653 -0.1048 5.4164 -0.2530 1.8862 0.9025 -10.3447 9.0631 2.3699 12.2933 0.8165 -1.6393 1.1033 -12.7014 9.2326 2.1816 -29.2450 32.6476 0.0000 0.0000 24.9252 -5.1599 5.8937 2.7526 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -2.6172 11.4849 -9.1677 16.5453 12.5587 -61.2671 -0.0000 -0.0000 -4.0464 1.5877 3.1316 -4.4664 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 8.1762 -17.9264 -10.5284 5.6844 0.0000 0.0000 -9.2145 7.4052 -3.7199 -0.6106 0.0000 -0.0000 -29.9685 -15.9637 -3.3227 39.7225 0.0000 0.0000 -4.9915 -0.1685 -3.7236 -6.7876 0.0000 -0.0000\n 2.1726 -92.6896 23.7019 -4.4090 13.1377 3.9212 -2.9138 -7.8380 -0.7782 -2.2753 -4.0767 -0.6110 16.5174 -1.0687 4.5179 0.0124 1.8038 0.6937 -10.1405 9.1934 2.6093 12.9511 0.6529 -1.1254 0.0726 -12.6671 9.6513 -1.0651 -27.4291 32.8992 0.0000 0.0000 28.9228 -0.8280 6.3631 3.7361 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -3.5428 11.8669 -9.4103 14.7115 11.3218 -60.7673 -0.0000 -0.0000 -4.6773 1.1958 2.9401 -4.6942 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 9.3743 -18.1731 -10.8553 4.8147 0.0000 0.0000 -10.7863 6.5952 -3.1117 -1.1101 0.0000 -0.0000 -29.7424 -16.1534 -0.0180 24.7672 0.0000 0.0000 0.6881 0.1756 -10.0152 -6.7808 0.0000 -0.0000\n 2.3752 -93.4449 23.5926 -3.0754 13.0359 3.5892 -4.8555 -7.6025 -1.3877 -3.3726 -4.0551 -0.7510 17.9370 -1.7467 4.0698 0.2214 2.0066 0.5103 -10.4116 9.6576 2.9413 13.4140 0.3543 -0.7619 -1.3796 -12.7129 10.2465 -2.6791 -25.3169 33.8439 0.0000 0.0000 31.4171 2.7917 6.8515 3.3653 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -4.7962 13.6473 -9.4283 13.0835 9.5766 -59.9921 -0.0000 -0.0000 -5.3780 0.2412 2.2164 -4.4782 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 11.1021 -17.5745 -10.9909 3.5552 0.0000 0.0000 -12.4889 5.2186 -2.1862 -1.1099 0.0000 -0.0000 -28.8920 -14.9737 -0.2089 10.6595 0.0000 0.0000 7.8560 2.7455 -12.9983 -7.8551 0.0000 -0.0000\n 2.6158 -94.4100 23.4662 -2.6632 12.1155 2.6834 -5.8426 -6.9852 -1.5644 -3.9231 -4.0568 -0.8384 18.7269 -1.8132 4.0037 0.2336 2.2729 0.3742 -10.6598 9.8894 3.1570 14.0198 -0.0052 -0.5146 -2.8863 -12.4961 10.7270 -3.3234 -24.1086 34.8974 0.0000 0.0000 32.6327 3.7867 6.5090 2.7067 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.9834 15.0137 -9.2124 11.6279 8.8752 -59.6604 -0.0000 -0.0000 -6.1099 -0.6731 1.7625 -4.3598 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 14.0796 -15.9171 -10.8269 2.4877 0.0000 0.0000 -14.2925 3.6656 -1.0317 -0.7373 0.0000 -0.0000 -27.4358 -13.6658 -7.1481 1.2500 0.0000 0.0000 8.9541 6.3351 -6.4810 -8.9662 0.0000 -0.0000\n 2.8315 -95.4686 23.3012 -2.5097 11.3518 1.4079 -6.0356 -6.6785 -1.5882 -3.9173 -4.0755 -0.8201 18.2412 -1.2639 4.3992 0.0129 2.3665 0.3690 -10.6651 9.8195 3.1567 14.7932 -0.2402 -0.4624 -3.9070 -12.3047 11.1014 -3.7926 -23.5318 35.6395 0.0000 0.0000 32.8457 3.2090 5.1936 2.4924 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.7759 15.6286 -8.9853 10.5881 8.9763 -59.8942 -0.0000 -0.0000 -6.8511 -1.2947 1.2749 -4.5109 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 16.8498 -14.2320 -9.8937 2.4432 0.0000 0.0000 -16.3392 2.7261 -0.5267 -0.3410 0.0000 -0.0000 -27.6723 -13.2721 -7.4777 -0.1647 0.0000 -0.0000 2.8820 5.4557 -2.9898 -8.8027 0.0000 -0.0000\n 3.0426 -96.4887 23.0681 -2.0649 11.4094 -1.3023 -6.1514 -7.0134 -1.6651 -3.8929 -4.7729 -0.8754 17.2909 -0.3974 5.8386 -0.2163 2.5857 0.6305 -10.5082 9.9617 3.2782 15.2905 -0.3616 -0.5110 -4.1657 -11.7771 11.5511 -4.1978 -23.1964 36.2530 0.0000 0.0000 32.5675 3.2057 3.6026 2.2013 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -7.1707 16.0793 -8.5117 9.9948 9.3715 -60.4487 -0.0000 -0.0000 -7.6447 -0.9940 0.9605 -4.5686 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 18.9987 -12.7200 -7.7150 3.5892 0.0000 0.0000 -18.8701 1.8499 -0.2118 0.1848 0.0000 0.0000 -28.2031 -14.5074 -1.4247 2.2037 0.0000 0.0000 -0.5792 2.4631 -3.0020 -8.5237 0.0000 -0.0000\n 3.2971 -97.5090 22.8209 -0.5421 11.3251 -5.8820 -7.0814 -6.4441 -1.8562 -4.7359 -7.1363 -1.3272 17.8051 0.6109 8.1605 -0.5689 3.2811 1.0517 -11.1645 10.4394 4.0769 15.0985 -0.7291 -0.2727 -4.1020 -11.7515 12.4434 -4.1860 -21.7196 37.0916 0.0000 0.0000 32.5051 4.1570 2.1569 1.5701 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -7.6486 17.4558 -7.4325 9.4807 8.5402 -60.6406 -0.0000 -0.0000 -8.4783 -0.3694 1.6677 -4.6805 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 19.4119 -10.1221 -5.9861 6.0572 0.0000 0.0000 -21.6162 -0.1927 1.5579 0.9910 0.0000 0.0000 -27.8886 -16.6351 4.6465 3.2268 0.0000 0.0000 5.6776 0.6940 -1.1402 -9.4679 0.0000 -0.0000\n 3.6673 -98.6455 22.6919 0.3559 8.4196 -9.7831 -8.0430 -1.9897 -2.0618 -6.6945 -11.3330 -2.5776 20.8403 2.5063 9.7122 -1.6257 4.1236 1.2306 -13.3941 10.6148 5.3881 14.8211 -1.4184 0.4559 -4.5935 -14.3111 13.4668 -3.2640 -17.9981 38.3786 0.0000 0.0000 32.5570 4.8482 0.4530 1.1812 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.0176 20.5344 -6.1765 9.3945 4.8833 -59.5109 -0.0000 -0.0000 -8.9849 -0.9865 3.6009 -5.2646 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 19.2124 -4.2983 -7.1652 9.0812 0.0000 0.0000 -23.3273 -3.3609 4.7469 1.3622 0.0000 0.0000 -25.0513 -15.0304 7.6449 0.7971 0.0000 0.0000 17.0559 1.7446 3.8759 -8.9411 0.0000 -0.0000\n 4.1615 -99.9482 22.7477 -3.0517 1.5402 -10.9268 -6.6525 5.5615 -1.3621 -7.6323 -15.3341 -4.1110 23.0460 8.1570 8.9655 -3.5046 3.6273 0.9360 -15.9689 9.2597 5.8238 15.5573 -1.2703 1.2500 -6.1977 -19.4958 13.0274 -0.9894 -14.9204 40.0530 0.0000 0.0000 31.6927 4.6544 -1.9862 1.1000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -11.1623 22.9730 -5.8312 10.7664 1.1930 -57.0291 -0.0000 -0.0000 -8.4974 -2.3975 5.7525 -5.7375 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 23.2865 5.7094 -11.3974 10.8362 0.0000 0.0000 -22.5986 -6.4308 7.3630 0.1179 0.0000 0.0000 -16.0930 -6.5314 6.4121 -5.9714 0.0000 -0.0000 23.4807 3.3646 11.0604 -6.5019 0.0000 -0.0000\n 4.6212 -100.9403 22.9243 -3.9742 -3.7299 -10.1361 -4.3251 6.7053 -1.1439 -4.0549 -24.7105 -5.6865 13.7238 30.0944 8.0922 -4.5719 -0.6901 0.4068 -17.1736 4.6493 3.7496 16.5365 1.2083 1.4357 -8.2905 -26.2873 9.3625 2.2414 -15.9216 42.2602 0.0000 0.0000 29.1562 4.1109 -4.7768 0.5400 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -11.5819 19.9347 -7.5168 12.5048 2.1363 -55.0317 -0.0000 -0.0000 -6.6341 -2.7412 6.6481 -5.1479 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 24.2280 12.3293 -13.2170 13.9457 0.0000 0.0000 -19.8390 -7.4904 6.2060 -2.7419 0.0000 -0.0000 -11.8950 0.7001 2.9986 -9.2123 0.0000 -0.0000 21.9255 2.1971 15.2557 -4.7505 0.0000 -0.0000\n 4.9698 -101.5947 23.1822 -1.6621 -4.7075 -8.9305 -3.2023 3.5240 -1.3128 -0.9145 -20.7287 -3.6088 6.8291 29.3326 8.3247 -5.1447 -0.0533 -0.2819 -20.0566 6.8953 3.9253 15.3570 2.7609 1.3070 -9.0294 -25.7201 8.1593 4.6028 -19.4162 44.2430 0.0000 0.0000 25.1664 3.0894 -6.9752 -0.5504 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -10.7123 19.2708 -8.1075 11.9672 5.2818 -54.1086 -0.0000 -0.0000 -4.5825 -2.1735 5.5709 -3.6923 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 19.2515 13.7350 -10.8109 20.6751 0.0000 0.0000 -16.0654 -7.9548 2.6741 -5.5635 0.0000 -0.0000 -13.2434 2.7787 1.9434 -7.6875 0.0000 -0.0000 17.9258 0.5049 15.2626 -4.8457 0.0000 -0.0000\n 5.2475 -102.1369 23.4434 -0.0703 -3.4527 -9.6277 -2.0614 0.5223 -1.1973 -0.7187 -9.8623 -1.4032 7.8543 13.0335 7.9414 -5.7576 4.3371 -0.6023 -25.0886 13.0234 7.2840 11.0639 2.8125 0.6775 -7.6538 -19.1284 11.6982 5.3757 -20.7834 45.5297 0.0000 0.0000 20.9816 1.0982 -8.3218 -1.1610 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -8.5538 19.4965 -8.6701 9.5242 8.1060 -54.1068 -0.0000 -0.0000 -2.8964 -2.7723 3.3495 -2.6515 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 12.0046 13.6269 -7.3637 30.6908 0.0000 0.0000 -10.9741 -8.8564 0.4402 -6.6558 0.0000 -0.0000 -14.9370 2.0556 4.7396 -4.4492 0.0000 -0.0000 15.2961 -0.2045 12.9126 -5.6459 0.0000 -0.0000\n 5.4879 -102.5179 23.6332 1.1664 -2.8729 -11.8913 -0.6360 -1.0180 -0.8841 -0.5065 -6.1666 -0.6258 7.6451 7.9460 9.2405 -5.8498 5.6085 -0.3061 -28.9750 15.1150 9.8677 5.4002 2.8228 -0.0006 -5.7420 -13.1849 15.5446 5.5993 -18.7970 46.2794 0.0000 0.0000 18.3024 -0.8280 -8.8853 -0.9698 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -5.7663 16.3491 -10.9403 7.8939 9.5790 -54.0717 -0.0000 -0.0000 -1.9417 -4.7952 2.0991 -2.6398 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 2.5775 14.2181 -3.5901 42.8903 0.0000 0.0000 -4.5295 -8.4197 -0.7540 -5.3029 0.0000 -0.0000 -16.6298 1.3088 8.9383 -1.2701 0.0000 -0.0000 12.9683 -0.7807 10.6654 -6.1098 0.0000 -0.0000\n 5.6946 -102.8226 23.7216 2.3375 -4.1743 -14.3565 -0.3401 -0.2299 -0.5206 -0.5581 -4.5699 -0.2393 7.6740 7.3401 10.4085 -5.9920 5.1292 0.2277 -31.4432 14.0835 10.5402 1.0033 2.6943 0.2145 -4.7337 -11.0059 17.1120 5.3434 -15.9409 47.2014 0.0000 0.0000 17.3459 -1.0964 -8.2396 -0.9142 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.6049 14.9022 -13.2918 7.8188 8.1027 -52.6604 -0.0000 -0.0000 -2.1618 -5.8463 2.9342 -3.3668 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -7.5004 15.7929 0.2233 54.1840 0.0000 0.0000 0.9577 -6.2396 -1.7458 -2.9731 0.0000 -0.0000 -17.3053 2.3018 11.0340 -0.6687 0.0000 -0.0000 10.7653 -1.3594 10.8359 -6.3640 0.0000 -0.0000\n 5.8269 -103.2418 23.7788 3.1256 -5.5274 -15.9121 -0.7371 1.3427 -0.2505 -0.6388 -3.8932 -0.0682 7.7037 7.4863 10.8034 -6.3848 4.4080 0.6144 -32.5537 11.8772 9.9894 -0.9822 2.6723 0.8425 -4.5733 -11.9333 16.6909 4.2652 -16.0646 48.7156 0.0000 0.0000 17.6625 -0.1840 -6.6126 -1.4486 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.5855 16.0341 -14.4052 7.7505 6.7059 -50.5459 -0.0000 -0.0000 -2.9945 -5.0141 4.0014 -3.9814 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -15.2811 16.5898 2.8274 61.6278 0.0000 0.0000 2.0363 -3.4790 -2.5674 -2.1482 0.0000 -0.0000 -16.3167 3.7395 9.9735 -2.5595 0.0000 -0.0000 9.8791 -1.4871 13.2247 -6.7000 0.0000 -0.0000\n 5.8774 -103.7976 23.8653 2.5781 -5.3779 -15.6641 -0.4576 2.3147 -0.1764 -0.4015 -3.7791 -0.1192 7.9961 6.9067 10.1437 -6.8636 4.1417 0.6092 -32.8955 10.4948 9.5755 -1.2780 2.7670 0.8296 -4.7722 -13.1597 16.2289 2.9637 -19.4686 49.3954 0.0000 0.0000 19.2961 -0.0918 -4.8970 -1.6215 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -4.5008 17.3515 -14.0425 6.7565 7.7335 -49.3263 -0.0000 -0.0000 -3.5685 -4.4332 3.3441 -3.7201 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -18.1557 16.2946 2.5488 64.1377 0.0000 0.0000 -1.3504 -1.5204 -3.4423 -2.7947 0.0000 -0.0000 -13.6592 4.4384 7.9785 -4.1421 0.0000 -0.0000 9.4816 -1.4770 14.6320 -6.9864 0.0000 -0.0000\n 5.8944 -104.3130 23.9717 1.2487 -4.5054 -13.4927 0.4074 2.6457 -0.3109 -0.0144 -3.4705 -0.2084 8.4033 5.5765 8.8879 -7.0950 4.1358 0.3645 -32.8348 10.5515 9.6115 -1.0212 2.8342 0.0550 -4.7170 -13.2660 16.6312 2.2641 -22.5547 48.7436 0.0000 0.0000 21.0284 -2.2301 -3.9969 -0.6938 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -3.8813 17.3352 -13.3445 6.2387 10.0659 -49.7194 -0.0000 -0.0000 -3.2693 -5.3774 1.5292 -3.0804 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -17.8728 15.8523 0.1112 62.5626 0.0000 0.0000 -5.4892 -0.7927 -5.4421 -3.0658 0.0000 -0.0000 -11.2299 4.8420 7.2033 -3.3559 0.0000 -0.0000 7.8271 -1.8789 12.9792 -7.0519 0.0000 -0.0000\n 5.8940 -104.7092 24.0593 0.5737 -3.8628 -10.7891 0.8590 2.5531 -0.4252 0.1019 -2.9598 -0.2150 8.4706 4.5006 8.1602 -6.9425 4.0659 0.2336 -32.3084 11.2061 9.5456 -0.5953 2.9272 -0.6987 -4.3414 -12.6730 17.1199 2.4496 -23.1902 48.1853 0.0000 0.0000 21.3228 -4.9014 -4.3247 0.3337 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.2734 16.4117 -13.2047 7.5627 11.5687 -51.2809 -0.0000 -0.0000 -2.3245 -6.1840 1.3320 -2.9265 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -18.0775 15.1893 -1.8570 58.7913 0.0000 0.0000 -8.0012 -0.5833 -9.2296 -2.5671 0.0000 -0.0000 -10.3055 5.0582 7.6772 -1.3238 0.0000 -0.0000 5.3988 -2.3751 9.7136 -7.0119 0.0000 -0.0000\n 5.8653 -105.0559 24.1153 0.7686 -3.5620 -8.9390 0.6365 2.3143 -0.3736 -0.0852 -2.7962 -0.1667 8.3723 4.3566 8.4683 -6.6534 4.0015 0.3665 -31.5198 11.6199 9.2708 0.1541 3.0202 -0.9375 -4.2047 -12.0984 17.0895 3.1941 -22.6625 48.4360 0.0000 0.0000 20.3247 -5.1527 -5.7171 0.2117 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -3.1860 15.7020 -13.4448 9.7051 11.6149 -52.7900 -0.0000 -0.0000 -1.6200 -5.0793 3.8752 -3.3602 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -19.8458 14.1308 -1.5963 54.0809 0.0000 0.0000 -9.6611 -0.2666 -13.1697 -2.2935 0.0000 -0.0000 -10.2333 5.0537 7.9631 0.0611 0.0000 0.0000 3.7468 -2.4044 7.5986 -7.1636 0.0000 -0.0000\n 5.8116 -105.3849 24.1422 0.8558 -3.7108 -7.5941 0.3879 2.2871 -0.2304 -0.1790 -2.9135 -0.1306 8.3229 4.9157 9.2084 -6.4921 4.1033 0.5341 -30.7758 11.5784 9.0193 1.3129 2.8380 -0.8975 -4.5499 -11.9458 16.8758 3.7274 -22.7226 48.7568 0.0000 0.0000 19.1937 -2.8827 -7.3848 -0.7257 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -3.4506 15.5069 -13.5700 11.1005 11.0478 -53.4967 -0.0000 -0.0000 -1.4373 -2.9682 7.0383 -4.0176 -0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -21.6786 13.3416 0.4216 48.9166 0.0000 0.0000 -11.0941 0.6577 -14.2146 -2.2693 0.0000 -0.0000 -9.8061 5.3738 7.3282 0.5854 0.0000 0.0000 2.8432 -2.1632 6.8750 -7.4954 0.0000 -0.0000\n 5.7285 -105.6696 24.1510 0.5783 -4.1531 -5.3367 0.4393 2.4816 -0.1225 -0.0206 -3.0274 -0.1256 8.1296 5.7834 9.4916 -6.4563 4.2019 0.5290 -29.9570 11.2220 8.6734 2.7842 2.1716 -0.8800 -5.0599 -12.2631 16.6867 3.6436 -23.7037 48.3385 0.0000 0.0000 18.4918 -1.6273 -8.4027 -1.4004 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -3.7391 15.4505 -13.5117 11.6459 10.6774 -53.7360 -0.0000 -0.0000 -1.3303 -2.0998 8.2851 -4.2645 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -22.5019 13.2491 2.6725 43.5198 0.0000 0.0000 -11.7809 1.9975 -10.8343 -1.8521 0.0000 -0.0000 -8.7695 6.0996 5.4111 0.6293 0.0000 0.0000 1.9331 -1.8960 6.3954 -7.7996 0.0000 -0.0000\n 5.6085 -105.9433 24.1646 0.3841 -4.4458 -1.6204 0.5228 2.6788 -0.0144 0.1627 -2.9246 -0.1334 7.7779 6.2791 9.2059 -6.3832 4.1922 0.3724 -28.8091 10.6990 8.1542 4.4208 1.2031 -0.7543 -5.5244 -12.6457 16.3334 3.0586 -25.1684 47.1343 0.0000 0.0000 17.8831 -4.4933 -8.7726 -1.5776 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -3.9356 15.4689 -13.3290 11.9486 10.5845 -54.1264 -0.0000 -0.0000 -1.0656 -2.5311 7.1644 -4.2600 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -22.3744 13.6244 4.4057 37.8350 0.0000 0.0000 -11.9785 2.0942 -3.6107 -1.5972 0.0000 -0.0000 -7.3798 6.6636 1.9239 0.0223 0.0000 0.0000 1.1000 -1.2992 6.0321 -8.0657 0.0000 -0.0000\n 5.4469 -106.2468 24.1981 0.3012 -4.2778 2.9263 0.4806 2.7418 0.1559 0.2461 -2.9077 -0.1558 7.5954 6.4214 8.7862 -6.2432 4.0545 0.2686 -27.4609 10.0530 7.6973 5.9790 0.3252 -0.3131 -6.0223 -12.8512 15.6847 2.0357 -26.6438 45.6049 0.0000 0.0000 16.9092 -10.4593 -9.0391 -1.8343 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -4.0899 15.7879 -13.0075 12.0935 10.4870 -54.7222 -0.0000 -0.0000 -0.9642 -2.8570 5.1939 -4.5049 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -21.5736 13.9224 6.4188 31.9193 0.0000 0.0000 -11.6481 -1.2454 5.0249 -2.1789 0.0000 -0.0000 -5.9541 6.5356 -2.0780 -0.8456 0.0000 -0.0000 0.4565 -0.1830 5.4597 -8.3381 0.0000 -0.0000\n 5.2525 -106.5433 24.2337 -0.0296 -4.0635 7.7435 0.5848 2.8663 0.2835 0.3867 -3.0369 -0.1891 7.6284 6.4515 8.6305 -6.1258 3.8658 0.2687 -26.1242 9.3527 7.4506 7.1683 -0.2522 0.3088 -6.5906 -12.9112 14.9380 0.3860 -27.9837 43.9804 0.0000 0.0000 15.6607 -15.7974 -8.8082 -2.6584 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -4.3353 16.2837 -12.5967 11.9554 10.3588 -55.2068 -0.0000 -0.0000 -1.2427 -2.7457 3.8228 -4.8029 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -20.5742 14.1464 9.9853 27.2891 0.0000 0.0000 -10.2675 -7.1113 11.7080 -2.7910 0.0000 -0.0000 -4.8690 6.1386 -4.3987 -0.7958 0.0000 -0.0000 -0.3282 0.9814 2.9896 -8.4021 0.0000 -0.0000\n 5.0323 -106.7787 24.2401 -0.2389 -4.3208 13.0002 0.8840 3.2415 0.2643 0.6226 -3.1179 -0.1913 7.4669 6.5564 8.6640 -6.0332 3.6634 0.2992 -24.7661 8.7482 7.1844 7.9303 -0.5949 0.7671 -7.0869 -12.9001 14.3027 -1.8407 -29.0832 42.2977 0.0000 0.0000 14.5535 -18.8952 -7.1952 -3.7715 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.7736 16.5727 -12.2972 11.7376 10.3005 -55.3545 -0.0000 -0.0000 -1.6384 -2.7329 3.3483 -4.9095 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -20.6471 14.6075 14.6057 26.7640 0.0000 0.0000 -9.7400 -11.7796 15.1807 -2.8893 0.0000 -0.0000 -4.6886 6.1434 -4.7225 0.5062 0.0000 0.0000 -1.1050 1.8443 -1.7682 -8.0963 0.0000 -0.0000\n 4.7873 -106.9878 24.2147 0.0877 -4.9828 18.9392 1.1382 3.7028 0.2245 0.8685 -3.0366 -0.1669 7.0248 6.7943 8.6121 -5.8951 3.5012 0.2766 -23.3640 8.3241 6.7062 8.5479 -0.8072 0.8814 -7.4722 -12.8090 13.8025 -4.1588 -29.8703 40.6846 0.0000 0.0000 13.8506 -21.1684 -4.0378 -4.7977 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -5.3778 16.5512 -12.1366 11.6155 10.2341 -55.1756 -0.0000 -0.0000 -1.8089 -2.8550 3.2598 -4.9952 -0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -22.0017 15.3017 18.3841 30.8458 0.0000 0.0000 -12.0928 -13.2105 16.3054 -2.6198 0.0000 -0.0000 -4.9073 6.5616 -5.8171 1.4383 0.0000 0.0000 -1.1786 2.9498 -6.1505 -7.7823 0.0000 -0.0000\n 4.5362 -107.2274 24.1817 0.6948 -5.9029 25.2446 1.3158 3.9564 0.3182 1.1273 -2.9031 -0.1386 6.6872 7.2894 8.5474 -5.7321 3.5290 0.1799 -22.1166 8.0397 6.1403 9.3442 -0.8958 0.7464 -7.9017 -12.6807 13.2440 -6.2669 -30.6900 39.3248 0.0000 0.0000 13.4550 -23.6829 0.1253 -5.6024 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.0945 16.5025 -11.8687 11.4635 10.0524 -54.6890 -0.0000 -0.0000 -1.8330 -2.6574 2.9748 -5.0690 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -23.2433 16.1839 21.0193 36.9305 0.0000 0.0000 -16.6659 -12.7302 15.7061 -1.9144 0.0000 -0.0000 -4.2564 7.1290 -9.6441 0.4503 0.0000 0.0000 -0.4711 4.9897 -8.1261 -7.8035 0.0000 -0.0000\n 4.2848 -107.4881 24.1499 1.3846 -6.8736 31.3296 1.4707 3.7995 0.5887 1.5049 -3.3029 -0.1678 6.3897 8.7435 8.8418 -5.6074 3.7143 0.1150 -21.1200 7.7498 5.5896 10.3274 -0.8374 0.5799 -8.4854 -12.7147 12.4000 -8.5437 -32.2257 38.0772 0.0000 0.0000 13.0960 -25.8891 4.3831 -6.0962 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -6.8633 16.4748 -11.4166 11.1508 9.9256 -53.7815 -0.0000 -0.0000 -1.9686 -2.2787 2.3585 -4.9630 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -23.5212 16.9855 22.9562 42.5754 0.0000 0.0000 -21.4527 -12.1940 14.2534 -0.9306 0.0000 -0.0000 -2.7299 7.3674 -15.0112 -2.0308 0.0000 -0.0000 0.2165 7.4376 -8.5270 -7.8387 0.0000 -0.0000\n 4.0139 -107.7400 24.1027 2.5115 -7.6235 37.0386 1.4873 3.3718 0.8734 1.8286 -3.9827 -0.1830 5.8325 10.7505 9.7246 -5.4603 4.0111 0.1262 -20.2536 7.4916 5.1541 11.2432 -0.7207 0.5250 -9.1046 -12.9412 11.5566 -11.2653 -34.2873 36.5187 0.0000 0.0000 12.8075 -27.8409 7.7999 -6.2629 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -7.5480 16.3208 -10.8915 10.6736 9.9756 -52.4659 -0.0000 -0.0000 -2.0863 -2.5595 1.6442 -4.9176 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -23.1937 17.7710 23.8555 46.8538 0.0000 0.0000 -25.2336 -11.7189 13.1362 -0.1781 0.0000 -0.0000 -1.7710 7.4051 -19.4260 -4.3068 0.0000 -0.0000 0.5644 9.4440 -9.2916 -7.5600 0.0000 -0.0000\n 3.6932 -107.9860 24.0332 4.1198 -7.9668 42.4120 1.3247 3.0245 1.0648 1.9591 -4.7484 -0.1820 5.0900 12.7617 11.1678 -5.2139 4.1936 0.2578 -19.5035 7.5133 5.0167 11.8844 -0.7385 0.5405 -9.6018 -13.1597 11.2357 -13.5980 -35.5057 34.8181 0.0000 0.0000 12.9985 -30.3498 9.7649 -6.3251 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -8.0854 16.2955 -10.3570 10.0228 9.7588 -50.8941 -0.0000 -0.0000 -1.9205 -3.7120 0.9390 -5.0825 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -22.5739 18.4452 23.8985 49.9239 0.0000 0.0000 -28.3967 -11.0134 12.1761 0.0159 0.0000 0.0000 -2.1457 7.5790 -22.2146 -5.4146 0.0000 -0.0000 1.0570 11.4799 -10.9260 -7.3481 0.0000 -0.0000\n 3.2968 -108.2247 23.9485 5.8608 -7.7974 47.3172 0.9937 2.7239 1.1854 1.9393 -5.4949 -0.1644 4.6244 14.3881 13.0649 -4.9695 4.3110 0.5175 -19.0512 7.8981 5.2231 12.2659 -0.9402 0.5280 -9.8676 -13.1666 11.4396 -14.5786 -35.2360 33.8070 0.0000 0.0000 13.7766 -32.6499 10.2139 -6.4477 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.7430 16.9219 -9.7053 9.2970 8.7592 -49.0555 -0.0000 -0.0000 -1.6991 -4.5285 0.1115 -4.9981 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -21.8254 18.3984 24.1176 52.1983 0.0000 0.0000 -31.3955 -10.7455 10.7783 -0.1166 0.0000 -0.0000 -3.7124 7.7756 -23.9396 -5.4229 0.0000 -0.0000 2.0028 14.0614 -13.3166 -7.4829 0.0000 -0.0000\n 2.8300 -108.4544 23.8570 7.3544 -7.3297 51.6908 0.8949 2.2198 1.2498 2.0818 -6.4096 -0.1401 4.1314 16.0602 15.3437 -4.8514 4.5720 0.8602 -18.8018 8.2577 5.4643 12.4670 -1.1226 0.5240 -9.6922 -13.0006 11.6727 -14.7559 -34.6785 33.7187 0.0000 0.0000 14.7141 -33.1618 9.9671 -6.1469 0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -9.7543 17.7649 -8.9096 8.5670 7.6812 -46.7247 -0.0000 -0.0000 -1.8167 -3.8984 -0.8496 -4.5176 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -20.5815 17.5513 24.5399 52.9286 0.0000 0.0000 -33.0703 -11.4027 9.9618 -0.2074 0.0000 -0.0000 -5.7188 7.8173 -25.1303 -4.9539 0.0000 -0.0000 3.1478 16.2814 -16.1920 -7.5413 0.0000 -0.0000\n 2.2924 -108.6868 23.7460 8.8222 -6.6408 55.6993 1.2569 1.4564 1.2858 2.5232 -7.0863 -0.0404 2.9115 17.8032 17.8248 -4.8564 5.0175 1.2045 -18.4846 8.3068 5.5113 12.4167 -1.1561 0.6824 -9.0172 -12.7898 11.7426 -14.9813 -35.0226 34.1925 0.0000 0.0000 15.5202 -32.6581 9.9106 -4.9881 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -10.7647 17.9249 -8.0761 7.4909 7.4806 -43.9237 -0.0000 -0.0000 -2.0131 -2.7347 -1.7415 -4.1186 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -18.7221 16.6230 24.1736 50.6263 0.0000 0.0000 -32.0687 -11.9544 10.7097 -0.2792 0.0000 -0.0000 -7.9371 7.7542 -26.6677 -4.7058 0.0000 -0.0000 4.0279 17.7611 -18.0365 -7.3072 0.0000 -0.0000\n 1.6350 -108.9398 23.5971 10.1395 -5.4245 59.3439 2.0308 0.3987 1.3332 3.2251 -7.4479 0.1315 1.0405 19.3429 20.3941 -4.9885 5.5483 1.5017 -18.2380 8.3161 5.6689 12.0331 -1.1651 1.0616 -8.1596 -12.5052 11.8882 -14.3984 -35.4043 35.4657 0.0000 0.0000 16.3139 -33.2015 9.7917 -3.4170 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -11.3349 17.6726 -7.1876 5.9258 7.3391 -41.1241 -0.0000 -0.0000 -1.7873 -2.4341 -2.4788 -3.8212 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -16.6464 15.4174 23.0817 45.4623 0.0000 0.0000 -29.7011 -10.5398 11.0902 -0.3180 0.0000 -0.0000 -10.6719 7.1476 -29.3900 -4.9036 0.0000 -0.0000 4.7065 20.0675 -17.9554 -7.2884 0.0000 -0.0000\n 0.8007 -109.2016 23.4289 10.2787 -3.4258 62.4008 3.2567 -1.3756 1.4075 4.2503 -8.3394 0.2742 -0.7354 20.5919 23.1959 -5.2962 6.3684 1.7068 -18.5426 8.8072 6.6083 11.5030 -1.2981 1.6267 -7.4815 -11.9296 12.2621 -11.7651 -34.2162 38.2591 0.0000 0.0000 17.0569 -33.7727 9.3666 -2.4766 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -11.9056 18.3743 -5.7666 4.7340 5.6543 -38.8823 -0.0000 -0.0000 -1.3939 -2.9856 -2.9443 -3.2960 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -15.5910 12.4929 22.6903 40.5991 0.0000 0.0000 -28.4867 -6.9946 8.6100 -0.1144 0.0000 -0.0000 -14.2909 5.2310 -32.1957 -4.5734 0.0000 -0.0000 5.2436 23.2270 -18.1057 -7.4938 0.0000 -0.0000\n -0.1762 -109.4483 23.2987 8.5453 -0.8629 65.0665 4.7791 -3.9024 1.5308 5.5075 -10.0364 0.3838 -1.6223 20.7259 26.1357 -5.6602 7.6637 1.8188 -19.3482 10.1304 8.7969 11.1338 -1.5397 2.4226 -6.9434 -10.6658 12.9087 -7.4676 -31.4044 42.3353 0.0000 0.0000 17.3956 -31.8639 9.5658 -2.5111 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -13.1780 20.5211 -3.1834 4.7667 3.0646 -37.4227 -0.0000 -0.0000 -1.1628 -3.9860 -3.0551 -2.7563 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -16.8194 7.4493 22.6790 39.1987 0.0000 0.0000 -28.2034 -3.1358 4.4936 0.5326 0.0000 0.0000 -18.7229 2.1784 -32.5929 -2.3673 0.0000 -0.0000 4.8178 23.5810 -20.1732 -7.3269 0.0000 -0.0000\n -1.1133 -109.6990 23.2519 5.6429 1.1222 68.2738 6.1241 -6.2701 1.7226 6.1869 -10.6548 0.5053 -0.6276 17.9223 28.1548 -5.7546 8.8792 1.8924 -19.7955 11.8304 11.8660 10.9376 -1.6837 3.4944 -6.2530 -8.4837 14.0362 -2.6553 -28.5780 46.4790 0.0000 0.0000 16.9815 -28.3410 10.8689 -2.7191 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -14.6340 22.4559 0.4259 5.6073 2.6081 -36.7645 -0.0000 -0.0000 -0.3019 -4.9899 -2.6525 -2.2018 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -18.8376 2.5491 20.3319 39.8142 0.0000 0.0000 -26.9508 -0.8551 1.9693 1.1794 0.0000 0.0000 -22.5963 -0.6694 -29.6790 1.2190 0.0000 0.0000 2.0304 18.7906 -20.8401 -7.4323 0.0000 -0.0000\n -1.8255 -109.9675 23.3189 3.2561 1.5135 72.9081 6.9775 -7.8356 1.9372 5.8149 -9.3581 0.5207 1.4498 13.9626 28.5237 -5.4248 8.8152 2.0786 -19.3066 12.2088 14.1476 10.6582 -1.5847 4.5462 -5.2807 -6.3722 15.2868 2.2626 -27.0820 50.0738 0.0000 0.0000 15.6172 -25.9692 12.1628 -2.5446 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -14.5443 21.8811 2.9845 6.6463 5.6811 -36.5752 -0.0000 0.0000 2.0318 -4.4132 -0.4894 -1.2360 -0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -18.8720 0.2834 15.5640 38.7756 0.0000 0.0000 -24.4625 0.2005 1.1876 1.4111 0.0000 0.0000 -24.3520 -1.7403 -24.1945 4.0487 0.0000 0.0000 -1.4190 11.3977 -16.5392 -8.6545 0.0000 -0.0000\n -2.3247 -110.2159 23.4989 2.4534 1.0596 79.2002 7.1073 -8.5917 2.0116 4.8056 -7.4014 0.5156 3.3097 11.6453 27.5500 -4.9022 7.7100 2.3679 -18.4960 10.3668 14.3413 10.0667 -1.6660 4.9213 -3.9715 -5.3424 16.0325 6.7835 -27.3906 53.3659 0.0000 0.0000 13.1863 -24.0862 11.6558 -3.1411 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -12.6332 19.0166 2.7457 8.4488 9.5076 -36.1369 -0.0000 0.0000 4.7140 -0.7555 5.0097 -0.5735 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -16.8027 0.3504 10.7855 35.2143 0.0000 0.0000 -21.9149 1.4006 -0.3227 1.3232 0.0000 0.0000 -24.6892 -0.4776 -16.4463 5.6695 0.0000 0.0000 -2.7633 5.7498 -9.0274 -9.5567 0.0000 -0.0000\n -2.7413 -110.4544 23.7226 2.2606 1.1260 86.6056 6.6478 -8.9727 1.9360 3.8039 -6.1025 0.5533 4.4639 10.9960 26.4040 -4.4722 6.5890 2.6789 -18.1810 7.5291 12.7248 9.1048 -2.4040 4.1054 -2.4584 -4.8451 16.3426 10.5785 -29.3161 56.7035 0.0000 0.0000 10.2645 -20.4165 8.5868 -5.3191 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -10.4264 16.0377 0.8237 11.5013 10.6882 -35.8264 -0.0000 0.0000 5.9855 6.0491 12.8214 -1.7215 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -14.6516 0.4571 7.5095 30.8860 0.0000 0.0000 -19.6240 2.9717 -4.2044 1.0583 0.0000 0.0000 -25.3338 1.2022 -7.2887 7.4178 0.0000 0.0000 -3.2357 3.4965 -4.3497 -9.1001 0.0000 -0.0000\n -3.1392 -110.7220 23.9031 1.4945 1.7729 93.9972 6.1958 -9.3730 1.9030 3.2033 -5.7583 0.6129 4.7721 11.0888 26.0681 -4.2797 5.9041 2.9232 -18.4923 5.2256 10.3700 7.9554 -3.6272 2.1510 -1.2300 -4.3178 16.7334 14.7069 -30.4228 60.4448 0.0000 0.0000 8.3987 -15.3516 3.2325 -7.1738 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -9.0966 14.2950 -0.7996 14.1514 9.1476 -36.0063 -0.0000 0.0000 5.7452 13.1414 19.0258 -4.3057 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -13.6234 -0.2997 4.9556 27.2370 0.0000 0.0000 -17.1296 4.1636 -9.1525 0.5551 0.0000 0.0000 -26.5505 1.3713 1.7231 9.9421 0.0000 0.0000 -3.9464 2.0424 -5.1813 -8.8697 0.0000 -0.0000\n -3.5108 -111.0053 23.9950 0.2731 2.3889 100.7012 6.0506 -9.7240 1.9731 3.0400 -5.8309 0.6654 4.5243 11.2803 26.5073 -4.3336 5.5535 3.1418 -19.0988 3.9007 8.1511 6.8987 -4.7885 -0.3315 -0.6039 -3.9374 17.4478 19.6407 -27.4497 64.4668 0.0000 0.0000 8.6749 -8.6732 -3.6705 -6.1465 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -8.7260 13.6588 -1.5728 14.0114 7.3538 -36.1863 -0.0000 0.0000 5.0017 14.8218 20.5072 -4.8759 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -13.3147 -1.2303 1.6083 24.1883 0.0000 0.0000 -14.6921 5.0786 -12.9435 0.0292 0.0000 0.0000 -27.8970 0.2192 9.3215 13.3789 0.0000 0.0000 -4.8363 -0.3544 -7.7290 -9.1926 0.0000 -0.0000\n -3.8342 -111.2718 24.0204 -1.0770 2.6050 106.9803 6.1195 -9.9738 2.0305 3.1055 -6.0293 0.6952 4.2704 11.4149 27.1256 -4.5615 5.4106 3.3686 -19.7987 3.0339 6.2733 6.0602 -5.5829 -2.6934 -0.2347 -4.2440 18.2844 23.3092 -20.7676 67.5734 0.0000 0.0000 10.4152 -0.9171 -8.0713 -1.5396 0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -8.8230 13.5772 -2.1692 11.1700 6.5910 -36.0091 -0.0000 0.0000 4.1093 10.2907 17.0290 -3.3895 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -12.9589 -2.1405 -2.2586 21.3438 0.0000 0.0000 -12.6802 6.7576 -15.5248 -0.0631 0.0000 -0.0000 -28.9207 -1.5853 14.6066 17.7148 0.0000 0.0000 -6.0321 -2.1386 -7.6138 -9.1308 0.0000 -0.0000\n -4.0892 -111.4975 24.0464 -2.7455 2.5309 113.3832 5.9218 -10.3351 2.0130 3.1773 -6.5551 0.6748 4.2052 11.7495 27.5478 -4.8437 5.3448 3.5363 -20.6565 2.0344 4.4809 5.4379 -6.1634 -4.6746 0.0694 -5.3107 18.6572 24.4354 -15.3712 69.6745 0.0000 0.0000 12.0544 2.3929 -7.8167 1.8749 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.0164 14.1587 -2.9249 7.7636 5.6956 -35.7712 -0.0000 0.0000 2.7020 4.7114 11.5425 -3.0802 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -12.3719 -3.3241 -6.0896 18.1707 0.0000 0.0000 -10.6374 8.7592 -17.8368 0.2538 0.0000 0.0000 -29.2961 -3.7480 17.0955 21.5335 0.0000 0.0000 -7.4564 -2.2940 -4.8602 -8.3573 0.0000 -0.0000\n -4.2531 -111.6582 24.1161 -4.6968 2.2485 120.2550 5.2661 -10.7225 1.9085 3.1195 -7.2972 0.6123 4.0598 12.3372 27.5120 -5.1173 5.1436 3.5753 -21.7199 0.5406 2.4735 5.0318 -6.7415 -6.3078 0.1887 -6.9798 18.2581 23.9978 -14.2961 71.4291 0.0000 0.0000 13.1735 1.4880 -5.3378 1.9642 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -9.2533 15.2388 -3.5728 5.3411 4.1485 -36.0515 -0.0000 0.0000 0.7623 1.1980 6.9198 -3.7753 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -10.9953 -4.6754 -10.9226 13.3932 0.0000 0.0000 -8.1231 9.3482 -19.6266 0.4537 0.0000 0.0000 -28.9211 -5.8485 17.8144 23.5873 0.0000 0.0000 -9.3481 -3.5109 -3.0970 -7.8449 0.0000 -0.0000\n -4.3288 -111.7372 24.1856 -6.3939 1.7764 127.4225 4.3979 -10.5525 1.7860 2.9578 -7.6414 0.5678 3.6581 12.5196 26.7885 -5.3977 4.6400 3.5516 -22.8244 -1.2793 0.2467 4.7691 -7.2759 -7.7061 0.2255 -8.5407 17.5760 23.1737 -16.5161 72.6500 0.0000 0.0000 14.7485 0.3182 -1.0089 1.1046 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -9.4589 15.8895 -4.1962 3.9618 3.1413 -36.6801 -0.0000 -0.0000 -1.0885 0.1782 3.9896 -4.3332 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -8.5373 -6.0923 -16.9810 6.8593 0.0000 0.0000 -5.6773 8.3320 -20.2686 0.2736 0.0000 0.0000 -28.0479 -7.5926 17.6687 24.8243 0.0000 0.0000 -11.7739 -7.3600 -2.9166 -8.4097 0.0000 -0.0000\n -4.3764 -111.7507 24.1890 -7.8598 1.2170 133.9163 3.6651 -9.8016 1.7730 2.8299 -7.5722 0.5934 3.0494 12.0028 25.8375 -5.7463 4.0506 3.6234 -23.8326 -2.8469 -1.8881 4.4421 -7.6670 -8.9418 0.3413 -9.2934 17.1829 22.3160 -19.6582 72.9070 0.0000 0.0000 17.7124 1.1400 3.7349 1.0473 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.4965 15.8557 -4.9595 3.3887 2.9983 -37.3787 -0.0000 -0.0000 -2.0389 0.8293 2.9826 -4.5716 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -6.5607 -7.6717 -21.2854 1.2718 0.0000 0.0000 -3.9054 7.5413 -21.1971 0.0305 0.0000 0.0000 -27.1437 -9.7341 16.8568 26.5880 0.0000 0.0000 -13.5426 -10.2896 -1.5866 -9.0693 0.0000 -0.0000\n -4.4423 -111.7169 24.1431 -9.6732 0.2197 138.7885 3.3525 -9.3522 1.7700 2.9180 -7.9455 0.6070 2.0703 11.7240 25.5500 -6.1947 3.6820 3.7613 -24.9316 -4.2453 -3.6847 3.9764 -7.9719 -9.8701 0.6266 -10.3677 17.0145 21.4786 -21.6808 72.1032 0.0000 0.0000 22.3643 3.4644 6.5307 1.3521 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -9.4857 16.0193 -5.4053 3.4830 2.6243 -37.9398 -0.0000 -0.0000 -2.2746 1.8940 3.3227 -4.3851 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.2294 -9.4410 -22.9252 -1.2553 0.0000 -0.0000 -2.8193 7.4440 -23.3972 -0.0410 0.0000 -0.0000 -26.1723 -13.5711 17.1700 28.1598 0.0000 0.0000 -13.4943 -7.4413 -0.2797 -8.3176 0.0000 -0.0000\n -4.5471 -111.6291 24.0938 -11.9853 -0.7361 142.2918 2.9223 -9.1593 1.7160 3.0134 -8.6792 0.5903 0.7803 12.0785 25.4452 -6.6638 3.2796 3.8103 -26.2980 -6.0996 -5.1736 3.4011 -8.3953 -10.2066 1.3310 -13.1916 16.8619 20.8830 -21.7246 70.4902 0.0000 0.0000 28.4945 6.5457 7.2026 1.5997 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -9.3439 16.8199 -5.3611 3.4423 2.1604 -37.4385 -0.0000 -0.0000 -2.8857 2.6007 3.3996 -3.7519 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -7.8056 -10.8581 -24.5080 -1.1066 0.0000 -0.0000 -2.5984 6.4092 -26.1531 -0.1152 0.0000 -0.0000 -25.7741 -18.0513 20.5808 28.3524 0.0000 0.0000 -12.3636 -0.2231 -3.5711 -6.4102 0.0000 -0.0000\n -4.6911 -111.4248 24.0806 -13.4147 -1.0194 145.8870 2.0250 -8.3012 1.4508 2.4697 -8.2148 0.5384 0.8700 11.9936 23.9461 -6.9337 2.3709 3.7595 -27.9848 -8.2517 -6.4884 2.4157 -9.0635 -9.9436 2.4643 -16.4289 16.8701 20.7060 -21.5080 68.3978 0.0000 0.0000 35.2632 9.9487 7.6352 2.1105 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -8.5606 17.8158 -5.9316 2.2312 3.3264 -34.9278 -0.0000 -0.0000 -4.0821 1.7934 1.4579 -3.3896 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -9.4505 -10.4470 -27.4009 0.1160 0.0000 0.0000 -3.5763 4.8095 -27.2540 -0.1626 0.0000 -0.0000 -25.9285 -19.5238 24.5957 27.3636 0.0000 0.0000 -10.7926 4.5822 -10.4502 -4.8963 0.0000 -0.0000\n -4.8396 -111.0637 24.1207 -12.5457 -1.1054 150.1135 1.1327 -6.3394 0.9179 1.3028 -6.1552 0.4983 3.7367 10.3846 21.1780 -6.7770 1.0619 3.8138 -29.6378 -9.8208 -7.6913 0.7333 -9.8436 -9.3631 3.5471 -17.0894 17.0296 21.1781 -23.3767 66.5264 -0.0000 0.0000 40.6332 11.7770 9.1180 3.4767 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.6441 18.3550 -7.9572 0.2927 6.8730 -31.8476 -0.0000 -0.0000 -3.9778 -1.8598 -2.2651 -3.8297 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.7073 -7.8440 -28.6832 2.1414 0.0000 0.0000 -5.2751 4.9384 -24.0787 -0.4596 0.0000 -0.0000 -24.9336 -16.8105 24.4963 25.6552 0.0000 0.0000 -10.3112 4.6210 -14.4191 -4.5038 0.0000 -0.0000\n -4.9607 -110.6357 24.1963 -10.3998 -1.5918 153.7624 0.6941 -3.9746 0.5085 0.3795 -4.2615 0.5247 7.1288 8.1059 19.2716 -6.2423 -0.1889 4.0745 -30.4451 -10.6570 -8.7015 -0.9952 -10.6157 -8.8256 4.2675 -15.0221 16.8971 22.7776 -26.1070 66.1334 -0.0000 0.0000 41.6640 10.3812 10.2921 5.9829 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -4.1936 18.0646 -10.2917 0.0055 11.9194 -31.3232 -0.0000 -0.0000 -0.9528 -6.5187 -5.1449 -3.5470 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.5490 -4.6142 -23.7096 6.2606 0.0000 0.0000 -7.7248 6.1901 -17.0488 -1.3231 0.0000 -0.0000 -22.1963 -13.1995 20.9133 23.5374 0.0000 0.0000 -10.4116 3.0500 -13.5530 -4.6471 0.0000 -0.0000\n -5.0179 -110.2947 24.2923 -9.5139 -2.7386 156.3980 0.1440 -2.4009 0.4504 -0.1967 -3.6556 0.5182 8.8930 6.5137 18.6084 -5.8395 -1.0760 4.3323 -30.4859 -11.4928 -9.5169 -1.5236 -11.3632 -8.5797 4.7919 -13.5338 16.5934 25.2692 -25.0999 67.2679 0.0000 0.0000 36.9697 7.5896 8.3393 7.9740 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -2.8555 17.7839 -11.2837 2.8211 16.8266 -34.2020 -0.0000 0.0000 3.4335 -7.3946 -3.8814 -0.9821 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -5.9487 -3.0722 -14.4674 11.6096 0.0000 0.0000 -10.2178 5.0267 -7.7199 -1.6692 0.0000 -0.0000 -19.9506 -12.1977 18.7254 21.6283 0.0000 0.0000 -9.9019 2.8766 -13.3369 -4.6460 0.0000 -0.0000\n -4.9874 -110.0386 24.4153 -10.0118 -4.7154 159.4461 -0.4805 -2.1038 0.4298 -0.5364 -3.6059 0.4666 9.1245 5.7112 17.9460 -5.8829 -1.5444 4.3196 -30.5532 -12.6421 -10.4488 -0.6088 -11.9150 -8.8138 5.4813 -14.6211 16.7486 27.7647 -17.9041 68.2649 0.0000 0.0000 28.4937 6.1960 2.8403 7.5095 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -2.8208 18.1672 -11.0287 7.7486 20.2607 -38.7039 -0.0000 0.0000 6.1616 -2.7544 1.4970 0.7733 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -6.1587 -3.5855 -7.8390 15.0318 0.0000 0.0000 -10.7333 0.7439 1.5269 -0.8668 0.0000 -0.0000 -19.0383 -13.5414 19.3052 19.9565 0.0000 0.0000 -8.8809 3.9900 -17.3869 -4.5683 0.0000 -0.0000\n -4.9094 -109.7876 24.5425 -10.3111 -6.8626 163.8218 -0.7801 -2.4527 0.3296 -0.6357 -3.2707 0.4510 8.9436 5.5488 16.9311 -6.1505 -1.7753 4.1264 -31.1290 -13.2838 -11.8908 0.4643 -11.9911 -9.7093 6.1933 -16.3122 17.1876 30.4940 -8.1036 68.0956 0.0000 0.0000 19.7053 5.3948 -3.9632 5.7114 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -2.8061 18.5496 -11.1113 13.1412 22.4139 -43.4619 -0.0000 0.0000 5.9996 4.3324 6.3162 -1.4353 0.0000 -0.0000 0.0000 0.0000 0.0000 0.0000 -5.4381 -4.4472 -5.1257 15.8427 0.0000 0.0000 -9.7245 -3.0265 6.1396 -0.1439 0.0000 -0.0000 -18.5897 -14.6984 19.2199 18.2494 0.0000 0.0000 -7.6307 5.0351 -22.2547 -4.6488 0.0000 -0.0000\n -4.8279 -109.5348 24.6466 -9.7721 -8.4473 168.6872 -0.7117 -2.5165 0.2515 -0.6557 -2.9152 0.4795 9.2501 5.9314 16.3626 -6.3243 -1.8503 4.0602 -32.1703 -12.7321 -13.7834 0.3789 -11.5610 -11.1504 6.3185 -16.5123 16.9582 33.1682 -1.8747 66.9846 0.0000 0.0000 12.9913 4.5755 -10.3402 3.2578 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -1.9093 18.7957 -12.2963 17.4814 23.8468 -48.2717 -0.0000 0.0000 4.1588 7.1688 7.5688 -5.3035 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -3.8360 -4.6787 -5.4315 15.4548 0.0000 0.0000 -8.5267 -3.1351 4.9036 -0.2166 0.0000 -0.0000 -17.6429 -14.7819 17.1609 16.0987 0.0000 0.0000 -6.1120 6.0212 -24.8122 -4.8194 0.0000 -0.0000\n -4.7421 -109.3614 24.7249 -9.6576 -9.6984 172.6433 -0.7914 -2.4238 0.2354 -0.8443 -2.9054 0.5102 9.8376 6.5963 16.4298 -6.3860 -1.7564 4.1546 -33.3250 -11.4116 -15.4759 -0.7599 -11.0547 -12.6427 6.1141 -16.0995 16.0910 34.0816 -0.9690 65.0069 0.0000 0.0000 9.6555 5.2848 -14.4862 0.6193 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.4803 19.5470 -13.4853 19.8761 24.9894 -52.6170 -0.0000 0.0000 2.3386 2.4834 6.8837 -7.0510 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -3.4531 -4.6429 -7.9884 15.4485 0.0000 0.0000 -6.2699 -0.7823 1.3538 -0.4107 0.0000 -0.0000 -17.1952 -15.0388 15.2131 13.8729 0.0000 0.0000 -4.2753 7.1610 -26.5404 -4.9285 0.0000 -0.0000\n -4.6455 -109.2900 24.7826 -10.4755 -10.8944 175.2128 -1.1715 -2.5858 0.2608 -1.1194 -2.9705 0.5262 10.2337 7.3965 16.4596 -6.4619 -1.4798 4.1494 -34.2534 -10.0547 -16.3825 -2.0553 -10.9111 -13.7030 5.9964 -16.3328 15.4422 32.4753 -3.3335 62.0224 0.0000 0.0000 9.7121 6.6894 -14.7236 -0.1400 -0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 0.8228 20.8326 -13.8147 20.3824 26.2595 -55.4520 -0.0000 0.0000 1.1525 -3.8006 5.1980 -6.6311 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -4.9856 -4.2682 -11.0432 16.4012 0.0000 0.0000 -3.7223 0.5963 -0.8629 -0.3771 0.0000 -0.0000 -17.9403 -15.7118 13.9555 12.1695 0.0000 0.0000 -2.7692 7.7409 -28.2177 -4.9732 0.0000 -0.0000\n -4.5587 -109.2359 24.8194 -10.9019 -11.5208 176.6576 -1.2601 -2.6937 0.3254 -1.1645 -2.8162 0.5556 10.6259 8.2926 16.1920 -6.5246 -1.0776 4.0038 -34.7360 -8.7119 -16.3800 -3.0919 -10.9835 -14.2440 5.7845 -16.7716 15.2312 28.9187 -7.2648 58.7547 0.0000 0.0000 11.5387 4.8776 -12.0726 1.0462 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 1.8025 21.8595 -13.7824 19.9600 27.3971 -56.6597 -0.0000 0.0000 0.6504 -5.7540 2.7384 -5.9819 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.2809 -2.9579 -12.5813 17.4374 0.0000 0.0000 -2.6724 0.5795 -1.2095 -0.3001 0.0000 -0.0000 -18.0814 -15.7809 11.8214 10.6392 0.0000 0.0000 -2.1320 7.4857 -27.6813 -5.0491 0.0000 -0.0000\n -4.4838 -109.1523 24.8369 -10.3361 -11.4545 177.2558 -0.9274 -2.4538 0.4071 -0.9744 -2.6562 0.5759 11.3135 9.1715 15.9142 -6.4738 -0.6223 3.8405 -34.7692 -7.1772 -15.6191 -4.0261 -10.7794 -14.4208 5.1985 -16.7692 14.9608 23.9906 -12.4867 55.9584 0.0000 0.0000 13.6394 -0.7111 -8.7733 2.1044 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 2.5006 22.1668 -13.7835 19.9168 27.5986 -57.3074 -0.0000 0.0000 0.9978 -4.6505 0.2764 -5.7172 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.0372 -1.0399 -11.9717 17.4047 0.0000 0.0000 -2.7788 0.7475 -0.7070 -0.0933 0.0000 -0.0000 -16.6072 -15.2744 8.8313 8.8821 0.0000 0.0000 -1.8690 7.1147 -24.7558 -5.2291 0.0000 -0.0000\n -4.3919 -109.0941 24.8460 -9.8306 -11.3759 177.2550 -0.6505 -2.2467 0.4563 -0.8440 -2.6316 0.5723 11.9385 9.7603 15.6646 -6.3384 -0.1005 3.6843 -34.5069 -5.4814 -14.3498 -4.9567 -10.1261 -14.3473 4.4781 -16.7016 14.4428 17.9455 -18.3163 53.4256 0.0000 0.0000 15.8633 -4.2428 -5.2026 2.1113 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 2.9259 22.0141 -13.5332 20.5792 26.9498 -57.9109 -0.0000 0.0000 1.9527 -3.9308 -1.7144 -5.2267 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -5.5575 0.5554 -10.6607 16.5288 0.0000 0.0000 -2.9297 1.6035 0.2558 0.3966 0.0000 0.0000 -15.1427 -15.1829 6.9758 7.3894 0.0000 0.0000 -1.4734 7.1254 -22.5116 -5.5288 0.0000 -0.0000\n -4.2715 -109.0968 24.8576 -9.9718 -11.5764 177.0512 -0.5106 -2.3310 0.4558 -0.8228 -2.6446 0.5490 12.0159 9.9512 15.3018 -6.2018 0.5221 3.4674 -34.0897 -3.6362 -12.7549 -5.7636 -9.1626 -14.1264 4.1028 -17.0283 13.9554 11.8850 -22.5431 51.0719 0.0000 0.0000 18.3757 -2.4194 -1.4937 1.6384 0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 3.2194 21.6018 -12.8838 21.1362 26.6138 -58.2011 -0.0000 0.0000 2.9911 -4.2530 -3.0068 -4.4410 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -5.8874 1.5965 -10.5007 15.7884 0.0000 0.0000 -3.0288 2.1638 1.7077 0.9016 0.0000 0.0000 -14.7701 -15.6556 6.7135 6.4906 0.0000 0.0000 -1.0287 7.2507 -22.1930 -5.8847 0.0000 -0.0000\n -4.1387 -109.1234 24.8656 -10.1998 -11.6323 176.8509 -0.3456 -2.4038 0.4510 -0.7384 -2.5578 0.5336 11.7358 9.7993 14.9059 -6.0619 1.1792 3.2137 -33.4710 -1.4592 -10.8893 -6.3780 -8.0273 -13.8774 4.1795 -17.3663 13.6222 7.2894 -23.7912 49.4296 0.0000 0.0000 20.8280 0.4671 1.5508 1.3134 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.7138 20.8913 -12.1099 21.1261 27.0827 -58.3789 -0.0000 0.0000 3.9449 -4.4564 -3.8527 -3.7755 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -6.5254 2.5244 -11.4665 15.6258 0.0000 0.0000 -3.2446 1.6114 2.5859 0.8408 0.0000 0.0000 -14.6235 -16.0036 6.4228 5.7311 0.0000 0.0000 -0.6463 7.2539 -21.8011 -6.1023 0.0000 -0.0000\n -4.0047 -109.1270 24.8594 -9.6887 -11.2576 176.7371 0.0895 -2.2350 0.4601 -0.5274 -2.3755 0.5329 11.5813 9.5516 14.5633 -5.8764 1.7465 2.9895 -32.5927 0.9526 -8.8545 -6.7546 -6.8670 -13.6402 4.3696 -17.4094 13.3736 4.2324 -23.0290 48.3246 0.0000 0.0000 22.9937 0.4152 3.3936 1.2838 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 4.3908 20.0873 -11.3159 21.1054 27.4752 -59.0131 -0.0000 0.0000 4.8121 -4.2503 -4.5260 -3.0020 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -6.4506 3.4976 -12.0626 15.8840 0.0000 0.0000 -3.6843 0.1193 1.7033 0.1055 0.0000 0.0000 -13.4105 -15.8609 5.2513 4.5693 0.0000 0.0000 -0.2322 7.4315 -20.1190 -6.0834 0.0000 -0.0000\n -3.8565 -109.1386 24.8360 -8.8990 -10.6568 176.7373 0.5167 -2.0163 0.4616 -0.3501 -2.1977 0.5328 11.5776 9.4624 14.1396 -5.6774 2.2025 2.7332 -31.5245 3.1133 -6.8727 -6.7885 -5.8566 -13.3273 4.5061 -17.5701 13.2450 1.8157 -21.7103 47.1965 0.0000 0.0000 25.0156 -0.9914 3.7928 1.3349 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 4.8868 19.6746 -10.3491 21.4840 26.9504 -59.9624 -0.0000 0.0000 5.3838 -3.9621 -4.9512 -1.8960 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -6.2849 4.1749 -11.4596 16.8112 0.0000 0.0000 -5.3808 -1.6226 -0.3789 -0.5847 0.0000 -0.0000 -11.9819 -15.5492 4.3266 3.4938 0.0000 0.0000 0.1626 7.8548 -18.8086 -5.9340 0.0000 -0.0000\n -3.6805 -109.1912 24.7972 -8.3937 -9.9750 176.9374 0.6894 -1.8016 0.4415 -0.2841 -2.0830 0.5090 11.5103 9.4760 13.5283 -5.4895 2.6267 2.3773 -30.3164 4.7227 -5.0815 -6.5113 -4.9459 -12.8579 4.5805 -18.0480 13.1751 -0.3066 -20.6900 46.0637 0.0000 0.0000 26.8512 -0.7742 3.2524 1.4103 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 5.0779 19.6607 -9.2206 21.9666 26.0481 -60.6928 -0.0000 0.0000 5.4537 -3.6274 -5.2754 -1.1671 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.5800 4.4340 -10.4994 18.2549 0.0000 0.0000 -8.9471 -3.2636 -1.7451 -0.7613 0.0000 -0.0000 -11.3948 -15.2462 4.3306 3.0867 0.0000 0.0000 0.4239 8.2521 -18.9542 -5.8334 0.0000 -0.0000\n -3.4835 -109.2628 24.7461 -7.8550 -9.1505 177.2701 0.7480 -1.5042 0.4069 -0.2615 -1.9869 0.4831 11.4778 9.3998 12.8665 -5.2577 2.9786 2.0255 -28.9658 6.0889 -3.4451 -6.1394 -3.8977 -12.2291 4.3940 -18.4011 12.8886 -1.8252 -20.3767 45.2308 0.0000 0.0000 28.1643 0.6337 2.7292 1.4980 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 5.1750 19.6378 -8.2057 22.3420 25.7281 -61.2283 -0.0000 0.0000 5.1446 -3.5414 -5.8972 -1.5022 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -6.5587 4.4712 -10.1601 19.1582 0.0000 0.0000 -12.9595 -5.1231 -1.3292 -0.8091 0.0000 -0.0000 -11.0875 -14.8457 4.4538 3.0432 0.0000 0.0000 0.6598 8.6155 -19.2674 -5.8438 0.0000 -0.0000\n -3.2743 -109.3500 24.6865 -7.1006 -8.2073 177.3829 0.7953 -1.2888 0.3820 -0.2785 -1.9151 0.4625 11.6416 9.3268 12.3970 -4.9569 3.2203 1.7845 -27.6102 7.5719 -1.9262 -5.7592 -2.6209 -11.4460 3.8179 -18.4856 12.3259 -2.5803 -20.6116 44.8976 0.0000 0.0000 28.6293 0.9087 2.5438 1.3616 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 5.2260 19.4732 -7.4131 22.8262 25.8687 -61.9503 -0.0000 0.0000 4.7819 -4.2949 -6.6037 -2.3739 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -6.0374 4.2893 -9.9671 19.2817 0.0000 0.0000 -15.9849 -7.0817 0.0738 -0.8480 0.0000 -0.0000 -10.5275 -14.3975 4.2422 2.9850 0.0000 0.0000 0.9621 9.2150 -18.7749 -5.9448 0.0000 -0.0000\n -3.0496 -109.4968 24.6159 -6.5897 -7.1494 176.9624 0.7296 -1.2465 0.3914 -0.3794 -1.9160 0.4586 11.8141 9.3980 12.1475 -4.6637 3.4221 1.6349 -26.4206 9.1492 -0.5234 -5.2421 -1.3062 -10.5208 3.0225 -18.4242 11.7589 -2.6637 -21.0592 45.1603 0.0000 0.0000 28.2586 -0.2229 2.3426 1.0207 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 5.0771 19.3452 -6.7772 23.4692 25.9485 -62.7511 -0.0000 0.0000 4.4674 -5.5752 -6.9382 -2.7559 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -6.1990 3.8434 -8.7460 19.7743 0.0000 0.0000 -18.7800 -7.9619 1.1525 -0.2918 0.0000 -0.0000 -10.3787 -13.9944 4.5848 3.2827 0.0000 0.0000 1.1595 9.9693 -18.4761 -6.1049 0.0000 -0.0000\n -2.8027 -109.7191 24.5232 -6.5207 -5.8381 176.1588 0.4841 -1.1237 0.4228 -0.5027 -1.9903 0.4459 11.8161 9.4543 11.9483 -4.4093 3.7129 1.4878 -25.4165 10.5147 0.7529 -4.5544 -0.1675 -9.4719 2.2721 -18.1218 11.3950 -2.0696 -21.3966 46.0402 0.0000 0.0000 27.4716 -1.1153 1.8091 0.7672 0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 4.7235 19.0323 -6.3062 24.0302 26.3103 -63.3584 -0.0000 0.0000 4.1835 -6.4142 -7.0548 -2.6250 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -7.4389 3.3046 -6.5180 20.8759 0.0000 0.0000 -21.7535 -6.9406 1.4252 0.8898 0.0000 0.0000 -11.1501 -13.5424 5.9072 4.3300 0.0000 0.0000 1.1665 10.5710 -19.1211 -6.2937 0.0000 -0.0000\n -2.5472 -109.9655 24.4017 -6.1136 -4.0536 175.3923 0.3907 -0.7488 0.4329 -0.5369 -2.0766 0.4240 11.9295 9.5187 11.6347 -4.1218 4.0339 1.3084 -24.4782 11.6048 1.8820 -3.8890 0.7044 -8.3729 1.6293 -17.4919 11.1362 -0.8412 -21.1609 47.4163 0.0000 0.0000 26.7907 -0.8090 0.9901 0.6951 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 4.2916 18.2618 -6.2121 24.4767 27.0712 -63.7856 -0.0000 0.0000 4.0105 -6.5512 -7.0334 -2.6961 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -8.1179 3.2312 -4.6374 21.0263 0.0000 0.0000 -22.7520 -4.7806 1.1597 1.7825 0.0000 0.0000 -11.7223 -12.6529 7.0567 5.4728 0.0000 0.0000 1.1962 11.1045 -19.4242 -6.4629 0.0000 -0.0000\n -2.2944 -110.2412 24.2583 -5.4138 -1.9421 174.6811 0.4281 -0.7428 0.4251 -0.5613 -2.1343 0.3988 12.3624 10.1079 11.2854 -3.8039 4.3860 1.0630 -23.6557 12.5572 2.8312 -3.3474 1.3449 -7.3454 1.0151 -17.0391 10.8389 0.5906 -19.9733 49.0681 0.0000 0.0000 26.3875 0.1438 0.2230 0.7636 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.5952 17.6039 -6.5166 25.0807 26.5786 -63.9481 -0.0000 0.0000 3.9383 -6.3705 -6.0868 -3.1538 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 -8.0952 3.8468 -3.6790 19.8806 0.0000 0.0000 -20.4035 -2.9751 0.4929 1.8014 0.0000 0.0000 -11.8729 -11.3618 7.4471 6.1131 0.0000 0.0000 1.3873 11.8721 -18.6747 -6.5881 0.0000 -0.0000\n -2.0211 -110.6131 24.1167 -5.3619 -0.2676 173.7721 0.4687 -1.9253 0.4447 -0.6943 -2.4892 0.3453 12.6650 11.5564 11.0013 -3.5977 4.9398 0.7292 -23.1188 13.3041 3.6733 -2.8280 1.8899 -6.4008 0.3188 -16.9792 10.5865 1.9709 -18.4061 50.8820 0.0000 0.0000 25.9946 0.8589 -0.1337 1.0061 0.0000 -0.0000 -0.0000 0.0000 0.0000 0.0000 2.6388 17.8837 -6.8375 25.7600 23.1872 -63.5110 -0.0000 0.0000 3.6869 -5.8554 -3.9211 -3.7728 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -9.3795 4.3102 -2.9549 19.5665 0.0000 0.0000 -16.9915 -2.0953 -0.2010 1.3382 0.0000 0.0000 -12.7539 -10.6893 7.8172 6.5170 0.0000 0.0000 1.7148 12.7776 -18.0572 -6.7373 0.0000 -0.0000\n -1.6913 -111.1056 23.9960 -6.6047 0.3146 172.8695 0.2609 -3.8656 0.5571 -0.8883 -3.0167 0.2380 12.3755 12.3410 10.5630 -3.5144 5.6743 0.3185 -22.9214 13.5245 4.6529 -2.4082 2.4790 -5.2991 -0.5106 -16.4147 10.6912 3.5318 -17.3901 52.8905 0.0000 0.0000 25.2792 1.0459 -0.1479 1.4261 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 2.0829 18.5695 -6.9296 25.9496 18.5185 -62.6195 -0.0000 0.0000 3.1601 -4.6874 -2.2610 -4.6573 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -13.3868 3.5606 -1.8896 21.9866 0.0000 0.0000 -15.7372 -1.2899 -0.6469 1.2602 0.0000 0.0000 -15.5636 -11.5977 8.6993 7.5812 0.0000 0.0000 2.4212 13.4381 -18.7639 -7.0800 0.0000 -0.0000\n -1.3025 -111.5819 23.9206 -7.4976 -0.2065 172.7837 0.1679 -5.0482 0.5845 -0.8983 -3.0931 0.1027 12.1383 10.5108 9.3739 -3.3396 5.9009 -0.0275 -22.8178 12.8936 5.8097 -2.4474 3.0389 -3.7698 -1.5111 -14.4888 11.2878 5.1638 -17.1563 54.8863 0.0000 0.0000 24.2890 1.2728 -0.4690 1.7711 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 2.5132 17.9522 -7.1320 25.3266 16.0865 -62.3466 -0.0000 0.0000 2.9248 -3.3663 -2.5355 -5.7057 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -16.8093 1.7696 -1.7014 24.8658 0.0000 0.0000 -16.2249 0.0550 -0.7681 1.7634 0.0000 0.0000 -18.5961 -13.5891 9.2250 9.3745 0.0000 0.0000 3.7956 13.7127 -19.8878 -7.7222 0.0000 -0.0000\n -0.9133 -111.9355 23.9205 -6.9817 -1.1416 173.6934 0.2792 -5.1723 0.4329 -0.8356 -2.4298 0.0186 12.7271 7.0919 7.3848 -2.9702 4.9807 -0.1398 -22.4397 11.0169 6.4526 -2.9360 3.2401 -1.8690 -2.5726 -12.2879 11.8916 5.9949 -17.1155 56.4216 0.0000 0.0000 23.3306 2.2894 -1.5456 1.7190 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 3.2073 15.2813 -8.0232 24.6917 16.4748 -62.9586 -0.0000 0.0000 3.1346 -2.6687 -3.0904 -6.6312 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -17.0836 0.0080 -2.7790 25.2705 0.0000 0.0000 -16.0245 1.5573 -0.9182 2.4028 0.0000 0.0000 -20.4549 -15.3107 9.1736 11.6714 0.0000 0.0000 5.2834 13.6510 -20.0172 -8.4537 0.0000 -0.0000\n -0.6097 -112.1949 23.9889 -6.0004 -1.2341 174.4744 0.2622 -4.5044 0.2695 -0.8859 -1.5144 0.0236 13.6363 4.3652 5.7552 -2.5480 3.3258 0.0314 -21.6128 7.9367 6.0062 -3.0933 2.7157 -0.1025 -3.4320 -11.0344 11.8765 5.7159 -17.2373 57.4264 0.0000 0.0000 22.4819 3.9016 -2.6754 1.2605 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 2.9721 12.3365 -9.4468 24.8313 16.6754 -63.3408 -0.0000 0.0000 3.0973 -2.1670 -1.8306 -7.6308 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -15.8316 -0.6801 -3.7996 23.6680 0.0000 0.0000 -14.6662 2.6269 -0.9393 3.0276 0.0000 0.0000 -21.5672 -15.7038 9.6444 14.5229 0.0000 0.0000 5.5434 13.2657 -19.1459 -8.9008 0.0000 -0.0000\n -0.4351 -112.4013 24.0922 -5.4182 -0.0256 173.7651 0.0976 -3.6177 0.2309 -0.9978 -0.8701 0.1146 14.0833 3.3901 5.4612 -2.2848 1.8837 0.3907 -20.5733 4.3178 4.7794 -2.2901 1.2851 0.9568 -3.9430 -10.3736 11.3527 5.1755 -17.7020 58.3434 0.0000 0.0000 21.5923 4.9137 -2.6523 0.6715 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 1.9453 11.2764 -10.5801 24.7644 14.9247 -62.5483 -0.0000 0.0000 2.3890 -1.1533 0.0896 -8.7605 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -15.2393 0.0320 -3.9319 22.2457 0.0000 0.0000 -13.4926 3.1873 0.1260 3.6896 0.0000 0.0000 -22.0448 -14.8010 10.8594 17.5332 0.0000 0.0000 4.0904 12.6398 -18.1050 -9.0244 0.0000 -0.0000\n -0.3644 -112.5572 24.1945 -5.1281 1.8533 171.5009 -0.0451 -3.0794 0.3051 -1.0205 -0.7363 0.2101 13.8887 3.8630 6.2737 -2.1404 1.1143 0.7851 -19.5538 0.7793 3.3989 -0.9623 -0.8292 1.3350 -4.1412 -9.4050 10.8612 5.1967 -18.0352 59.5970 0.0000 0.0000 20.6967 4.7393 -1.4763 0.2839 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 0.9603 11.6845 -10.9074 23.0344 13.0849 -60.8802 -0.0000 0.0000 1.2649 -0.3115 0.3208 -9.2095 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -15.6455 1.4997 -3.4137 21.8122 0.0000 0.0000 -12.9570 3.3755 2.3927 4.1282 0.0000 0.0000 -21.7062 -13.2643 11.4777 19.9566 0.0000 0.0000 2.0140 11.9204 -17.4430 -8.9897 0.0000 -0.0000\n -0.3349 -112.6588 24.2734 -4.6579 3.5409 168.8331 -0.0166 -2.9397 0.3958 -0.9694 -0.8322 0.2704 13.5206 4.6082 7.2401 -1.9253 0.7397 1.1187 -18.5914 -2.4154 2.2648 -0.0657 -2.9962 1.5103 -4.2099 -8.0689 10.5906 5.5055 -17.8478 61.1911 0.0000 0.0000 20.1171 4.2557 -0.5227 0.1398 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.2427 11.9794 -10.7983 19.6215 12.7764 -59.0331 -0.0000 0.0000 0.0158 -0.6689 -1.1878 -8.4907 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -15.9670 2.7984 -2.5718 21.4821 0.0000 0.0000 -12.3493 3.3882 4.5622 4.1036 0.0000 0.0000 -20.7100 -11.6029 10.2166 21.5901 0.0000 0.0000 0.3325 11.0497 -17.1691 -8.7350 0.0000 -0.0000\n -0.2981 -112.7381 24.3214 -4.2698 4.5831 166.8957 -0.0605 -3.0241 0.4632 -0.9836 -0.8498 0.2944 13.3737 4.8003 7.6722 -1.6347 0.2810 1.3596 -17.6985 -5.2248 1.4376 0.0586 -4.5914 1.7728 -4.3789 -7.0624 10.3483 5.3544 -17.7193 62.6660 0.0000 0.0000 20.1423 4.3764 -0.5766 0.0371 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.5102 11.6629 -10.8417 16.0943 12.9877 -57.2528 -0.0000 -0.0000 -1.2571 -1.9899 -3.0686 -7.4420 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -15.9922 3.3843 -1.4432 20.8308 0.0000 0.0000 -11.5669 3.5391 5.4648 3.8888 0.0000 0.0000 -20.0890 -10.2574 7.3955 23.1567 0.0000 0.0000 -0.9619 9.9548 -17.4496 -8.2191 0.0000 -0.0000\n -0.2435 -112.8163 24.3495 -4.0659 5.0147 166.1372 -0.0535 -3.0393 0.4738 -1.0129 -0.7425 0.2871 13.2982 4.1758 7.4785 -1.4303 -0.4133 1.5606 -16.9522 -7.5871 0.7971 -0.1123 -5.4225 2.0180 -4.7658 -6.7637 10.0662 4.7674 -18.1453 63.4814 0.0000 0.0000 20.8075 4.6726 -0.8485 -0.2141 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -1.3682 10.8439 -11.1903 13.7119 12.6822 -55.9210 -0.0000 -0.0000 -2.2586 -3.4834 -4.3169 -6.9757 -0.0000 -0.0000 0.0000 0.0000 -0.0000 0.0000 -15.8850 3.4135 -0.5021 20.2394 0.0000 0.0000 -11.0925 3.8851 5.3566 3.8283 0.0000 0.0000 -20.2893 -9.4132 4.7151 25.2130 0.0000 0.0000 -1.8443 9.0191 -18.6390 -7.6722 0.0000 -0.0000\n -0.1865 -112.9032 24.3669 -4.0012 5.1332 166.4016 0.1223 -2.7580 0.4235 -0.9308 -0.5240 0.2681 13.0747 2.7732 6.8962 -1.4186 -1.2819 1.7809 -16.4630 -9.3376 0.1696 -0.0757 -5.7288 2.0511 -5.2089 -6.9099 9.8528 4.1686 -18.3470 63.5983 0.0000 0.0000 21.7452 4.3590 -0.2404 -0.6639 -0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -2.1100 9.4901 -11.7745 12.2669 12.3413 -55.3911 -0.0000 -0.0000 -2.6466 -4.5212 -4.3646 -7.0188 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -15.8826 3.3896 -0.5855 20.0112 0.0000 0.0000 -10.8548 4.0666 5.2589 3.7825 0.0000 0.0000 -21.2363 -8.9499 3.5251 27.5808 0.0000 0.0000 -1.8404 8.7181 -20.1264 -7.3721 0.0000 -0.0000\n -0.1453 -112.9949 24.3795 -3.9596 5.1987 167.2112 0.4760 -2.3072 0.3454 -0.7511 -0.2733 0.2386 12.7518 1.1217 6.2402 -1.5484 -2.1847 2.0359 -16.2685 -10.5834 -0.5977 0.1170 -5.8219 1.8297 -5.4578 -7.2164 9.7000 3.5712 -17.7715 63.5675 0.0000 0.0000 22.2115 3.8112 1.1437 -1.2235 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -2.6761 7.7304 -12.6184 11.1240 12.1877 -55.5327 -0.0000 -0.0000 -2.3239 -4.5900 -2.8306 -7.0099 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -15.9277 3.5957 -1.6338 19.9442 0.0000 0.0000 -10.4352 3.7843 5.4940 3.4652 0.0000 0.0000 -22.4329 -8.6265 3.9087 29.5833 0.0000 0.0000 -1.0896 8.9984 -20.5253 -7.3496 0.0000 -0.0000\n -0.1333 -113.0746 24.3956 -3.9413 5.4159 168.0357 0.8686 -1.9602 0.2834 -0.5897 -0.0292 0.2302 12.4545 -0.2144 5.7392 -1.7069 -2.9401 2.2793 -16.3032 -11.6199 -1.4772 0.1874 -5.8954 1.4661 -5.5840 -7.4177 9.5976 2.8681 -17.6857 63.8472 0.0000 0.0000 21.6841 3.8445 2.3486 -1.8195 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -3.2852 6.0997 -13.6670 10.2113 11.6431 -55.8922 -0.0000 -0.0000 -1.5567 -3.4742 -0.2881 -6.8615 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -16.0104 4.0365 -2.6297 19.8664 0.0000 0.0000 -9.9168 3.2965 5.6760 3.0105 0.0000 0.0000 -23.3655 -8.1762 5.2035 30.5159 0.0000 0.0000 -0.5500 9.4383 -19.3794 -7.3878 0.0000 -0.0000\n -0.1466 -113.1260 24.4218 -4.0170 5.7847 168.6197 1.1591 -1.7997 0.2334 -0.4781 0.1109 0.2174 12.1476 -1.0692 5.4557 -1.8197 -3.4362 2.4654 -16.4591 -12.6370 -2.2762 0.1511 -6.0198 1.1176 -5.8523 -7.2639 9.7349 2.2143 -19.4620 64.1681 0.0000 0.0000 20.5338 4.4315 2.8229 -2.3410 0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -4.0000 4.7640 -14.6257 9.6209 10.7101 -56.3007 -0.0000 -0.0000 -0.7324 -1.7652 1.8045 -6.7922 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -16.1333 4.5451 -3.0571 19.6779 0.0000 0.0000 -9.5820 3.1445 5.6369 2.7924 0.0000 0.0000 -23.8270 -7.5417 6.5533 30.0469 0.0000 0.0000 -0.6270 9.7480 -17.7474 -7.4499 0.0000 -0.0000\n -0.1675 -113.1517 24.4518 -4.1614 6.1084 169.0502 1.3714 -1.7329 0.1800 -0.3782 0.1771 0.1950 11.7788 -1.7414 5.2550 -1.8785 -3.7927 2.6168 -16.6599 -13.5698 -2.8627 0.2012 -6.2132 0.8959 -6.2571 -6.7594 10.1873 1.8554 -22.1221 64.1281 0.0000 0.0000 19.5725 4.9555 2.7454 -2.6755 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -4.7166 3.4434 -15.2991 9.1096 10.1163 -56.7744 -0.0000 -0.0000 -0.1872 -0.4200 2.7104 -6.7200 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -16.1417 4.9293 -3.2870 19.2326 0.0000 0.0000 -9.3440 3.5385 5.5500 2.9450 0.0000 0.0000 -23.8841 -6.8876 7.2527 28.4004 0.0000 0.0000 -0.8099 9.8982 -16.8479 -7.7379 0.0000 -0.0000\n -0.1823 -113.1735 24.4724 -4.3558 6.1869 169.5519 1.5820 -1.6970 0.1298 -0.2935 0.2437 0.1646 11.4089 -2.4737 5.0094 -1.9192 -4.1793 2.7793 -16.9232 -14.3886 -3.3422 0.3223 -6.4296 0.8135 -6.5472 -6.3535 10.6145 1.8733 -23.4627 64.0252 0.0000 0.0000 19.0709 5.1852 2.4053 -2.8887 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -5.3681 2.0898 -15.8197 8.3235 9.9868 -57.2221 -0.0000 -0.0000 -0.1224 0.1909 2.9673 -6.6151 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -15.9946 5.0455 -3.6802 18.5486 0.0000 0.0000 -9.0240 4.1949 5.4460 3.2902 0.0000 0.0000 -23.8360 -6.4418 7.1678 26.2698 0.0000 0.0000 -0.7324 9.9482 -16.9324 -8.1848 0.0000 -0.0000\n -0.1927 -113.2025 24.4823 -4.6095 6.0395 170.2321 1.7885 -1.6844 0.0989 -0.2414 0.3527 0.1461 11.1115 -3.2501 4.7076 -1.9789 -4.6230 2.9477 -17.2756 -15.1345 -3.8746 0.3225 -6.6343 0.7688 -6.6358 -6.3754 10.6761 2.0896 -23.2078 64.3048 0.0000 0.0000 18.6009 5.3251 2.0331 -2.9846 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -5.9547 1.0320 -16.3973 7.1442 9.8221 -57.5150 -0.0000 -0.0000 -0.5272 0.2648 3.1162 -6.6629 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -15.8302 4.9734 -4.2827 17.8540 0.0000 0.0000 -8.6986 4.6708 5.3270 3.5651 0.0000 0.0000 -23.9322 -6.2122 6.7849 24.3061 0.0000 0.0000 -0.5362 10.0209 -17.3864 -8.4175 0.0000 -0.0000\n -0.2062 -113.2297 24.4907 -4.8973 5.8076 171.0230 1.9649 -1.7056 0.0702 -0.1911 0.4302 0.1291 10.8410 -3.8969 4.4254 -2.0689 -5.0074 3.0944 -17.6626 -15.8448 -4.4797 0.1772 -6.8273 0.6784 -6.6810 -6.6634 10.4877 2.2499 -22.9056 64.7230 0.0000 0.0000 17.9298 5.3296 1.7805 -2.9128 0.0000 0.0000 -0.0000 -0.0000 0.0000 -0.0000 -6.4573 0.2676 -17.0130 5.6884 9.6128 -57.7755 -0.0000 -0.0000 -1.1466 -0.2030 3.0683 -6.8535 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.7213 4.9117 -5.1669 17.2877 0.0000 0.0000 -8.4347 4.7247 5.3909 3.5961 0.0000 0.0000 -24.1672 -6.0459 6.6422 22.7513 0.0000 0.0000 -0.3968 10.2749 -17.4834 -8.2948 0.0000 -0.0000\n -0.2341 -113.2449 24.5012 -5.1168 5.6793 171.7269 2.1766 -1.6753 0.0362 -0.0999 0.4788 0.1158 10.5097 -4.3887 4.2256 -2.2006 -5.2930 3.2194 -17.9582 -16.4264 -5.0162 0.0406 -7.0204 0.5457 -6.7484 -6.7981 10.3606 2.3626 -23.3335 64.8746 0.0000 0.0000 17.2988 5.0156 1.6300 -2.7379 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000 -6.8844 -0.4558 -17.5029 4.2355 9.7160 -58.2023 -0.0000 -0.0000 -1.7193 -1.2394 2.7620 -7.0172 0.0000 0.0000 0.0000 -0.0000 -0.0000 0.0000 -15.6558 5.0554 -6.2133 16.9192 0.0000 0.0000 -8.1808 4.4014 5.7119 3.3748 0.0000 0.0000 -24.3006 -5.7293 6.8612 21.4806 0.0000 0.0000 -0.3494 10.6350 -16.9256 -8.0527 0.0000 -0.0000\n -0.2866 -113.2515 24.5090 -5.2842 5.7032 172.2359 2.4259 -1.5428 -0.0011 0.0271 0.5416 0.1071 10.1117 -4.7972 4.1107 -2.3740 -5.5168 3.3362 -18.0984 -16.8303 -5.3887 -0.0252 -7.1848 0.4151 -6.7278 -6.7150 10.3875 2.5489 -23.7940 64.8187 0.0000 0.0000 16.8309 4.6580 1.3368 -2.5586 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -7.2488 -1.1605 -17.7839 3.0739 9.9366 -58.8729 -0.0000 -0.0000 -2.1254 -2.2554 2.4738 -7.1481 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.7374 5.3827 -6.9452 16.8385 0.0000 0.0000 -7.9452 3.9035 5.9329 3.0336 0.0000 0.0000 -24.3166 -5.2238 7.1243 20.4661 0.0000 0.0000 -0.4316 10.8342 -15.9923 -7.9684 0.0000 -0.0000\n -0.3615 -113.2502 24.5123 -5.4158 5.7336 172.6257 2.6491 -1.3957 -0.0368 0.1386 0.5951 0.0970 9.7802 -5.1354 4.0181 -2.5424 -5.7032 3.4205 -18.1264 -17.1043 -5.6130 -0.0968 -7.3063 0.2810 -6.5624 -6.6417 10.4975 2.7728 -23.7460 64.8386 0.0000 0.0000 16.2798 4.6508 0.7391 -2.3613 0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0000 -7.6009 -1.7164 -17.9262 2.3245 9.8861 -59.6951 -0.0000 -0.0000 -2.4082 -2.4817 2.4036 -7.2972 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -15.8931 5.7076 -7.1956 16.9505 0.0000 0.0000 -7.8001 3.4034 5.8189 2.7293 0.0000 0.0000 -24.3108 -4.7013 7.0830 19.8481 0.0000 0.0000 -0.5675 10.7659 -15.2203 -8.0341 0.0000 -0.0000\n -0.4442 -113.2380 24.5131 -5.5032 5.6135 172.9739 2.7755 -1.3334 -0.0568 0.2085 0.5776 0.0659 9.6053 -5.3996 3.9098 -2.6300 -5.8355 3.4659 -18.1125 -17.3228 -5.7531 -0.1684 -7.4078 0.1459 -6.3862 -6.6495 10.6653 2.9382 -23.6144 64.9031 0.0000 0.0000 15.5709 4.8274 0.0578 -2.1691 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -7.9351 -2.1871 -18.0298 1.8640 9.6221 -60.5245 -0.0000 -0.0000 -2.6451 -2.0370 2.5365 -7.3937 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -15.9233 5.8870 -7.3957 16.9963 0.0000 0.0000 -7.7096 2.9681 5.6766 2.5465 0.0000 0.0000 -24.3024 -4.3901 6.8362 19.6779 0.0000 0.0000 -0.5123 10.6025 -15.0206 -8.0608 0.0000 -0.0000\n -0.5272 -113.2217 24.5086 -5.5756 5.2818 173.2059 2.8566 -1.3743 -0.0714 0.2630 0.5696 0.0592 9.4977 -5.6889 3.8082 -2.6461 -5.9716 3.5220 -18.1139 -17.5446 -5.8352 -0.1272 -7.4854 0.0545 -6.3770 -6.5943 10.8615 3.1109 -23.9154 64.8499 0.0000 0.0000 14.9388 4.7670 -0.3710 -2.1774 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -8.2410 -2.7114 -18.1118 1.5326 9.5784 -61.3038 -0.0000 -0.0000 -2.8457 -1.6141 2.7668 -7.3777 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -15.8091 5.8612 -7.8653 16.8427 0.0000 0.0000 -7.5665 2.5823 5.8532 2.4842 0.0000 0.0000 -24.3348 -4.4402 6.7428 19.9935 0.0000 0.0000 -0.1943 10.6357 -15.3718 -8.0846 0.0000 -0.0000\n -0.6210 -113.2160 24.4942 -5.6918 4.7710 173.2006 3.0375 -1.3972 -0.0641 0.3508 0.5567 0.0498 9.2923 -5.9754 3.8234 -2.6853 -6.2256 3.6663 -18.2022 -17.8631 -5.9027 0.0040 -7.4715 0.0425 -6.5182 -6.5179 10.9905 3.3124 -24.4449 64.6949 0.0000 0.0000 14.4251 4.5974 -0.5108 -2.4134 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -8.5140 -3.2532 -18.1812 1.2513 9.9919 -62.0961 -0.0000 -0.0000 -2.9812 -1.4894 2.9358 -7.3344 -0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -15.7506 5.6321 -8.3196 16.6225 0.0000 0.0000 -7.3817 2.2044 6.2132 2.4889 0.0000 0.0000 -24.6283 -4.8400 6.8939 21.0763 0.0000 0.0000 0.1618 10.9584 -15.7593 -8.3452 0.0000 -0.0000\n -0.7363 -113.2214 24.4698 -5.7661 4.1148 172.9605 3.4120 -1.3947 -0.0193 0.5325 0.5887 0.0610 8.9811 -6.2993 3.9836 -2.7911 -6.5942 3.9179 -18.4075 -18.3297 -5.9883 0.0363 -7.3314 0.1088 -6.7388 -6.5153 11.0759 3.3897 -24.9418 64.4041 0.0000 0.0000 13.8670 4.8841 -0.3620 -2.6552 0.0000 -0.0000 0.0000 0.0000 -0.0000 -0.0000 -8.7841 -3.7569 -18.2509 1.0255 10.7910 -62.9842 -0.0000 -0.0000 -3.0946 -1.5014 3.0016 -7.3397 0.0000 0.0000 -0.0000 0.0000 0.0000 -0.0000 -15.7199 5.2191 -8.3437 16.4321 0.0000 0.0000 -7.2272 1.8333 6.3626 2.5028 0.0000 0.0000 -25.2693 -5.4904 7.0926 23.2082 0.0000 0.0000 0.3463 11.2713 -15.6923 -8.7232 0.0000 -0.0000\n -0.8691 -113.2246 24.4368 -5.6905 3.2484 172.5958 3.9226 -1.5055 0.0542 0.7869 0.5808 0.0704 8.7267 -6.6149 4.2730 -2.9042 -6.9980 4.2326 -18.6648 -18.9224 -6.0631 -0.1041 -7.1520 0.2404 -6.8767 -6.6474 11.1859 3.1512 -25.1967 63.9708 0.0000 0.0000 13.2452 5.4540 0.2646 -2.8891 0.0000 -0.0000 -0.0000 0.0000 0.0000 -0.0000 -9.1169 -4.2813 -18.3338 0.9611 11.6249 -63.9384 -0.0000 -0.0000 -3.2539 -1.6157 3.2319 -7.3587 0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.0000 -15.4882 4.5741 -7.9698 16.1660 0.0000 0.0000 -7.0610 1.4918 6.1737 2.4986 0.0000 0.0000 -26.0617 -6.3807 7.2578 26.1900 0.0000 0.0000 0.1832 11.1191 -15.3150 -8.7410 0.0000 -0.0000\n -1.0306 -113.2160 24.3971 -5.5750 2.2767 172.1607 4.3776 -1.6770 0.1241 1.0049 0.5605 0.0767 8.6612 -6.9861 4.5963 -2.9643 -7.3951 4.5506 -18.9058 -19.6167 -6.0917 -0.2455 -7.0580 0.4180 -6.9522 -6.8791 11.2777 2.7806 -25.3362 63.5555 0.0000 0.0000 12.7553 5.6442 1.2482 -3.4196 0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -9.5504 -4.8096 -18.4089 1.1838 12.0060 -64.8730 -0.0000 -0.0000 -3.3792 -1.8077 3.8191 -7.3969 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -15.1759 3.8814 -7.4821 15.8718 0.0000 0.0000 -6.8573 1.1019 5.8999 2.4786 0.0000 0.0000 -26.7684 -7.3152 7.5307 29.2761 0.0000 0.0000 -0.7314 10.3813 -14.9624 -8.3753 0.0000 -0.0000\n -1.2454 -113.1950 24.3535 -5.6508 1.3878 171.7100 4.6196 -1.7186 0.1594 1.1013 0.5984 0.0823 8.7396 -7.4287 4.8055 -2.9812 -7.8194 4.8249 -19.1400 -20.4272 -6.1516 -0.2364 -7.0562 0.5921 -7.0664 -7.2209 11.2684 2.5731 -25.5835 63.3825 0.0000 0.0000 12.3295 5.3575 1.9419 -4.0661 -0.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -10.0204 -5.2474 -18.5023 1.6006 11.8177 -65.6821 -0.0000 -0.0000 -3.3157 -1.7326 4.5093 -7.5298 0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -15.1473 3.4193 -7.0595 15.7533 0.0000 0.0000 -6.6820 0.5214 5.7558 2.4454 0.0000 0.0000 -27.3739 -7.9653 7.8330 31.7106 0.0000 0.0000 -2.5997 9.5543 -14.3243 -8.2659 0.0000 -0.0000\n -1.5090 -113.1567 24.3060 -5.8651 0.6122 171.3215 4.7287 -1.6421 0.1810 1.1644 0.7115 0.0896 8.7708 -7.8733 4.8007 -2.9932 -8.2631 5.0387 -19.3525 -21.3177 -6.3024 -0.1535 -7.0104 0.7205 -7.1587 -7.6371 11.2817 2.5031 -25.9894 63.3388 0.0000 0.0000 11.7110 5.0030 2.2526 -4.0166 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -10.3822 -5.5829 -18.6490 1.8778 11.4993 -66.2481 -0.0000 -0.0000 -3.1168 -1.2172 5.0565 -7.6831 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -15.3710 3.2147 -6.6182 15.8927 0.0000 0.0000 -6.6341 -0.2243 5.6074 2.4255 0.0000 0.0000 -27.6668 -8.2435 7.9479 32.8610 0.0000 0.0000 -4.6398 9.1712 -12.8919 -8.8088 0.0000 -0.0000\n -1.7863 -113.1008 24.2411 -6.2042 -0.2932 170.9659 4.7962 -1.6730 0.2111 1.2124 0.8121 0.0808 8.6396 -8.3143 4.6978 -3.0450 -8.6806 5.1941 -19.4676 -22.2426 -6.4371 -0.1162 -6.7991 0.8314 -7.0027 -8.0941 11.5034 2.3911 -26.3146 63.1544 0.0000 0.0000 10.9068 4.5530 3.5225 -3.0575 0.0000 0.0000 -0.0000 0.0000 -0.0000 -0.0000 -10.5963 -5.7949 -18.8274 1.8942 11.3625 -66.4370 -0.0000 -0.0000 -3.1351 -0.7584 5.5511 -7.6733 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 -15.7702 2.8793 -5.9332 16.2618 0.0000 0.0000 -6.7580 -0.9424 5.1542 2.4500 0.0000 0.0000 -27.4614 -8.6120 7.9874 32.4616 0.0000 0.0000 -5.9235 9.0376 -11.2851 -9.4232 0.0000 -0.0000\n -2.0794 -113.0299 24.1507 -6.8805 -1.3788 170.4801 4.7027 -1.6579 0.2053 1.1655 0.9296 0.0692 8.3650 -8.9239 4.6366 -3.1562 -9.1370 5.3344 -19.5729 -23.2843 -6.5262 -0.0730 -6.4967 0.9644 -6.5598 -8.8408 11.7749 2.3262 -26.3292 62.9330 0.0000 0.0000 10.0790 3.3101 7.1431 -2.1788 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -10.6953 -5.6717 -19.0896 1.9754 10.8718 -66.1553 -0.0000 -0.0000 -3.6931 -1.0008 5.7890 -7.5582 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -16.5662 2.3134 -5.0334 16.8543 0.0000 0.0000 -7.0443 -1.6560 4.5228 2.4634 0.0000 0.0000 -26.8981 -9.2904 8.3650 30.8461 0.0000 0.0000 -6.6891 8.5081 -10.8510 -9.2187 0.0000 -0.0000\n -2.4270 -112.9466 24.0570 -8.0371 -2.2435 169.9019 4.2131 -1.0467 0.0911 0.9020 1.2072 0.0863 8.1546 -9.7572 4.5549 -3.2742 -9.7660 5.5026 -20.0235 -24.5230 -6.9225 0.0724 -6.3238 1.0895 -6.2040 -10.2128 11.7096 2.5607 -26.1881 62.9682 0.0000 0.0000 9.1337 1.4543 12.6997 -2.2492 0.0000 0.0000 0.0000 -0.0000 0.0000 0.0000 -10.6992 -5.0900 -19.7499 2.4942 9.3694 -65.3342 -0.0000 -0.0000 -4.8057 -1.8859 4.9009 -7.6259 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 -17.8783 2.0764 -4.4197 17.4740 0.0000 0.0000 -7.3372 -2.6668 4.2969 2.3335 0.0000 0.0000 -26.5322 -9.6428 8.9723 28.9242 0.0000 0.0000 -7.8374 7.3520 -11.6254 -8.1777 0.0000 -0.0000\n -2.7957 -112.8545 24.0007 -9.1618 -2.5305 169.5924 3.4844 0.2447 -0.1027 0.5052 1.6113 0.1324 8.2166 -10.4683 4.3002 -3.3004 -10.5162 5.6783 -21.0047 -25.7229 -7.9316 0.2661 -6.3794 1.1397 -6.2894 -11.9344 11.2194 3.0223 -26.2301 63.2269 0.0000 0.0000 7.9699 0.3563 17.9863 -3.1337 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -10.6367 -4.3916 -21.0184 3.3554 7.2801 -64.0320 -0.0000 -0.0000 -6.1852 -2.8049 2.5370 -7.9483 -0.0000 0.0000 -0.0000 -0.0000 0.0000 0.0000 -18.9928 2.6280 -4.5304 17.6728 0.0000 0.0000 -7.4071 -3.9720 4.7432 2.0511 0.0000 0.0000 -26.5675 -9.0491 9.1003 27.5870 0.0000 0.0000 -9.3007 5.9461 -12.1104 -7.0772 0.0000 -0.0000\n -3.0587 -112.7812 23.9912 -9.7384 -2.4169 169.7111 2.8909 1.3978 -0.2279 0.2159 1.9806 0.1824 8.4843 -10.7557 3.9761 -3.2297 -11.0579 5.7862 -22.0824 -26.4590 -9.1423 0.3553 -6.5326 1.1151 -6.6959 -13.1551 10.6297 3.3972 -26.5336 63.4323 0.0000 0.0000 6.9529 0.3824 20.8984 -3.8625 -0.0000 -0.0000 0.0000 -0.0000 0.0000 0.0000 -10.5862 -4.0609 -22.4528 4.0487 5.7802 -62.7192 -0.0000 -0.0000 -7.3311 -3.3573 -0.0031 -8.2389 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -19.3537 3.4984 -5.0777 17.4115 0.0000 0.0000 -7.2628 -5.0103 5.3638 1.7985 0.0000 0.0000 -26.8311 -8.0164 8.6075 27.1461 0.0000 0.0000 -10.1003 4.8465 -11.5585 -6.5691 0.0000 -0.0000\n"
  },
  {
    "path": "projects/animated_drawings/characters/slamdunk/char_cfg.yaml",
    "content": "height: 512\nskeleton:\n- loc:\n  - 260\n  - 230\n  name: root\n  parent: null\n- loc:\n  - 260\n  - 230\n  name: hip\n  parent: root\n- loc:\n  - 257\n  - 93\n  name: torso\n  parent: hip\n- loc:\n  - 250\n  - 54\n  name: neck\n  parent: torso\n- loc:\n  - 213\n  - 95\n  name: right_shoulder\n  parent: torso\n- loc:\n  - 172\n  - 157\n  name: right_elbow\n  parent: right_shoulder\n- loc:\n  - 145\n  - 228\n  name: right_hand\n  parent: right_elbow\n- loc:\n  - 302\n  - 88\n  name: left_shoulder\n  parent: torso\n- loc:\n  - 342\n  - 150\n  name: left_elbow\n  parent: left_shoulder\n- loc:\n  - 373\n  - 212\n  name: left_hand\n  parent: left_elbow\n- loc:\n  - 231\n  - 230\n  name: right_hip\n  parent: root\n- loc:\n  - 212\n  - 341\n  name: right_knee\n  parent: right_hip\n- loc:\n  - 192\n  - 454\n  name: right_foot\n  parent: right_knee\n- loc:\n  - 290\n  - 231\n  name: left_hip\n  parent: root\n- loc:\n  - 303\n  - 338\n  name: left_knee\n  parent: left_hip\n- loc:\n  - 325\n  - 452\n  name: left_foot\n  parent: left_knee\nwidth: 512\n"
  },
  {
    "path": "projects/animated_drawings/configs/motion/zombie.yaml",
    "content": "filepath: bvh/zombie.bvh\nstart_frame_idx: 0\nend_frame_idx: 320\ngroundplane_joint: LeftFoot\nforward_perp_joint_vectors:\n  - - LeftShoulder\n    - RightShoulder\n  - - LeftUpLeg\n    - RightUpLeg\nscale: 0.025\nup: +z\n"
  },
  {
    "path": "projects/animated_drawings/configs/mvc/slamdunk.yaml",
    "content": "scene:\n  ANIMATED_CHARACTERS:\n    - character_cfg: characters/slamdunk/char_cfg.yaml\n      motion_cfg: configs/motion/zombie.yaml\n      retarget_cfg: configs/retarget/fair1_spf.yaml\nview:\n  CAMERA_POS: [1.6, 1.7, 4.0]\n  CAMERA_FWD: [0.0, 0.5, 2.0]\n  BACKGROUND_IMAGE: resources/basketball_playground.png\n\ncontroller:\n  MODE: video_render\n  OUTPUT_VIDEO_PATH: ./resources/slamdunk_video.mp4\n  OUTPUT_VIDEO_CODEC: mp4v\n"
  },
  {
    "path": "projects/animated_drawings/configs/retarget/fair1_spf.yaml",
    "content": "char_starting_location: [0.0, 0.0, 0.0]\nbvh_projection_bodypart_groups:\n- bvh_joint_names:\n  - RightShoulder\n  - RightArm\n  - RightForeArm\n  - RightHand\n  - RightHandEnd\n  - LeftShoulder\n  - LeftArm\n  - LeftForeArm\n  - LeftHand\n  - LeftHandEnd\n  method: sagittal\n  name: Upper Limbs\n- bvh_joint_names:\n  - RightUpLeg\n  - RightLeg\n  - RightFoot\n  - RightToeBase\n  - LeftUpLeg\n  - LeftLeg\n  - LeftFoot\n  - LeftToeBase\n  method: pca\n  name: Lower Limbs\n- bvh_joint_names:\n  - Hips\n  - Spine\n  - Spine1\n  - Spine2\n  - Spine3\n  - Neck\n  - Head\n  method: frontal\n  name: Trunk\nchar_bodypart_groups:\n- bvh_depth_drivers:\n  - Hips\n  char_joints:\n  - right_shoulder\n  - left_shoulder\n  - right_hip\n  - left_hip\n  - hip\n  - torso\n  - neck\n- bvh_depth_drivers:\n  - LeftHand\n  char_joints:\n  - left_elbow\n  - left_hand\n- bvh_depth_drivers:\n  - RightHand\n  char_joints:\n  - right_elbow\n  - right_hand\n- bvh_depth_drivers:\n  - LeftFoot\n  char_joints:\n  - left_knee\n  - left_foot\n- bvh_depth_drivers:\n  - RightFoot\n  char_joints:\n  - right_knee\n  - right_foot\nchar_bvh_root_offset:\n  bvh_projection_bodypart_group_for_offset: Lower Limbs\n  bvh_joints:\n  - - RightFoot\n    - RightLeg\n    - RightUpLeg\n  - - LeftFoot\n    - LeftLeg\n    - LeftUpLeg\n  char_joints:\n  - - left_foot\n    - left_knee\n    - left_hip\n  - - right_foot\n    - right_knee\n    - right_hip\nchar_joint_bvh_joints_mapping:\n  left_elbow: !!python/tuple\n  - LeftArm\n  - LeftForeArm\n  left_foot: !!python/tuple\n  - LeftLeg\n  - LeftFoot\n  left_hand: !!python/tuple\n  - LeftForeArm\n  - LeftHand\n  left_knee: !!python/tuple\n  - LeftUpLeg\n  - LeftLeg\n  torso: !!python/tuple\n  - Hips\n  - Spine3\n  neck: !!python/tuple\n  - Hips\n  - Neck\n  right_elbow: !!python/tuple\n  - RightArm\n  - RightForeArm\n  right_foot: !!python/tuple\n  - RightLeg\n  - RightFoot\n  right_hand: !!python/tuple\n  - RightForeArm\n  - RightHand\n  right_knee: !!python/tuple\n  - RightUpLeg\n  - RightLeg\nchar_runtime_checks:\n  - - above\n    - neck\n    - right_shoulder\n    - left_shoulder\n"
  },
  {
    "path": "projects/animated_drawings/tools/generate_character.py",
    "content": "import os\nfrom argparse import ArgumentParser\n\nimport cv2\nimport numpy as np\nimport PIL.Image as Image\nimport torch\nimport yaml\nfrom controlnet_aux import OpenposeDetector\nfrom controlnet_aux.open_pose.face import faceDetect\nfrom controlnet_aux.open_pose.hand import handDetect\nfrom controlnet_aux.open_pose.util import (HWC3, draw_bodypose, draw_facepose,\n                                           draw_handpose, resize_image)\n\n\ndef draw_pose(pose, H, W, draw_body=True, draw_hand=True, draw_face=True):\n    bodies = pose['bodies']\n    faces = pose['faces']\n    hands = pose['hands']\n    candidate = bodies['candidate']\n    subset = bodies['subset']\n    canvas = np.zeros(shape=(H, W, 3), dtype=np.uint8)\n\n    if draw_body:\n        canvas = draw_bodypose(canvas, candidate, subset)\n\n    if draw_hand:\n        canvas = draw_handpose(canvas, hands)\n\n    if draw_face:\n        canvas = draw_facepose(canvas, faces)\n\n    return canvas\n\n\nclass OpenposeDetectorPoint(OpenposeDetector):\n\n    def __call__(self,\n                 input_image,\n                 detect_resolution=512,\n                 image_resolution=512,\n                 hand_and_face=False,\n                 return_pil=True):\n        # hand = False\n        if not isinstance(input_image, np.ndarray):\n            input_image = np.array(input_image, dtype=np.uint8)\n\n        input_image = HWC3(input_image)\n        input_image = resize_image(input_image, detect_resolution)\n        input_image = input_image[:, :, ::-1].copy()\n        H, W, C = input_image.shape\n        with torch.no_grad():\n            candidate, subset = self.body_estimation(input_image)\n            hands = []\n            faces = []\n            if hand_and_face:\n                # Hand\n                hands_list = handDetect(candidate, subset, input_image)\n                for x, y, w, is_left in hands_list:\n                    peaks = self.hand_estimation(\n                        input_image[y:y + w, x:x + w, :]).astype(np.float32)\n                    if peaks.ndim == 2 and peaks.shape[1] == 2:\n                        peaks[:, 0] = np.where(peaks[:, 0] < 1e-6, -1,\n                                               peaks[:, 0] + x) / float(W)\n                        peaks[:, 1] = np.where(peaks[:, 1] < 1e-6, -1,\n                                               peaks[:, 1] + y) / float(H)\n                        hands.append(peaks.tolist())\n                # Face\n                faces_list = faceDetect(candidate, subset, input_image)\n                for x, y, w in faces_list:\n                    heatmaps = self.face_estimation(input_image[y:y + w,\n                                                                x:x + w, :])\n                    peaks = self.face_estimation.compute_peaks_from_heatmaps(\n                        heatmaps).astype(np.float32)\n                    if peaks.ndim == 2 and peaks.shape[1] == 2:\n                        peaks[:, 0] = np.where(peaks[:, 0] < 1e-6, -1,\n                                               peaks[:, 0] + x) / float(W)\n                        peaks[:, 1] = np.where(peaks[:, 1] < 1e-6, -1,\n                                               peaks[:, 1] + y) / float(H)\n                        faces.append(peaks.tolist())\n\n            if candidate.ndim == 2 and candidate.shape[1] == 4:\n                candidate = candidate[:, :2]\n                candidate[:, 0] /= float(W)\n                candidate[:, 1] /= float(H)\n\n            bodies = dict(candidate=candidate.tolist(), subset=subset.tolist())\n            pose = dict(bodies=bodies, hands=hands, faces=faces)\n\n            canvas = draw_pose(pose, H, W)\n\n        detected_map = HWC3(canvas)\n        img = resize_image(input_image, image_resolution)\n        H, W, C = img.shape\n\n        detected_map = cv2.resize(\n            detected_map, (W, H), interpolation=cv2.INTER_NEAREST)\n\n        if return_pil:\n            detected_map = Image.fromarray(detected_map)\n\n        return detected_map, candidate, subset\n\n\ndef parse_args():\n    parser = ArgumentParser()\n    parser.add_argument(\n        '--chardir',\n        type=str,\n        default='characters',\n        help='Characters root dir.')\n    parser.add_argument(\n        '--charname', type=str, default='slamdunk', help='Character name.')\n    parser.add_argument(\n        '--img', type=str, default='resources/sakuragi.png', help='Img name.')\n    parser.add_argument(\n        '--mask',\n        type=str,\n        default='resources/sakuragi_mask.png',\n        help='Img mask name.')\n\n    args, unknown = parser.parse_known_args()\n\n    return args, unknown\n\n\ndef main():\n    args, unknown = parse_args()\n\n    detect_resolution = 512\n    control_detector = 'lllyasviel/ControlNet'\n    posedet = OpenposeDetectorPoint.from_pretrained(control_detector)\n\n    char_root_dir = args.chardir\n    char_name = args.charname\n    image_name = args.img\n    mask_name = args.mask\n\n    image = Image.open(image_name)\n    detected_map, candidate, subset = posedet(image)\n    pose_name = 'pose.png'\n    detected_map.save(os.path.join(char_root_dir, char_name, pose_name))\n\n    # resize image\n    image_np = np.array(image, dtype=np.uint8)\n    image_np = HWC3(image_np)\n    image_np = resize_image(image_np, detect_resolution)\n    image_resized = Image.fromarray(image_np)\n    image_resized.save(os.path.join(char_root_dir, char_name, 'texture.png'))\n\n    # resize mask image\n    mask = Image.open(mask_name)\n    mask_np = np.array(mask, dtype=np.uint8)\n    mask_np = HWC3(mask_np)\n    mask_np = resize_image(mask_np, detect_resolution)\n    image_resized = Image.fromarray(mask_np)\n    image_resized.save(os.path.join(char_root_dir, char_name, 'mask.png'))\n\n    W, H = image_resized.size\n\n    config_file = os.path.join(char_root_dir, char_name, 'char_cfg.yaml')\n    config_dict = {}\n    config_dict['width'] = detected_map.size[0]\n    config_dict['height'] = detected_map.size[1]\n\n    # yapf: disable\n    kpts = candidate\n    kpts[:, 0] = kpts[:, 0] * W\n    kpts[:, 1] = kpts[:, 1] * H\n    skeleton = []\n    skeleton.append({'loc' : [round(x) for x in (kpts[8]+kpts[11])/2], 'name': 'root'          , 'parent': None})       # noqa\n    skeleton.append({'loc' : [round(x) for x in (kpts[8]+kpts[11])/2], 'name': 'hip'           , 'parent': 'root'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[1]            ], 'name': 'torso'         , 'parent': 'hip'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[0]            ], 'name': 'neck'          , 'parent': 'torso'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[2]            ], 'name': 'right_shoulder', 'parent': 'torso'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[3]            ], 'name': 'right_elbow'   , 'parent': 'right_shoulder'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[4]            ], 'name': 'right_hand'    , 'parent': 'right_elbow'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[5]            ], 'name': 'left_shoulder' , 'parent': 'torso'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[6]            ], 'name': 'left_elbow'    , 'parent': 'left_shoulder'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[7]            ], 'name': 'left_hand'     , 'parent': 'left_elbow'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[8]            ], 'name': 'right_hip'     , 'parent': 'root'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[9]            ], 'name': 'right_knee'    , 'parent': 'right_hip'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[10]           ], 'name': 'right_foot'    , 'parent': 'right_knee'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[11]           ], 'name': 'left_hip'      , 'parent': 'root'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[12]           ], 'name': 'left_knee'     , 'parent': 'left_hip'})       # noqa\n    skeleton.append({'loc' : [round(x) for x in  kpts[13]           ], 'name': 'left_foot'     , 'parent': 'left_knee'})       # noqa\n    # yapf: enable\n    config_dict['skeleton'] = skeleton\n\n    with open(config_file, 'w') as file:\n        yaml.dump(config_dict, file)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "projects/animated_drawings/tools/generate_video.py",
    "content": "from animated_drawings import render\n\nrender.start('./configs/mvc/slamdunk.yaml')\n"
  },
  {
    "path": "projects/example_project/README.md",
    "content": "# Example Project\n\nThis is an example README for community `projects/`. You can write your README in your own project. Here are\nsome recommended parts of a README for others to understand and use your project, you can copy or modify them\naccording to your project.\n\n## Description \\[required\\]\n\nYou can share any information you would like others to know. For example:\n\n```\nAuthor: @xxx.\n\nThis is an implementation of \\[XXX\\].\n```\n\n## Usage \\[required\\]\n\n### Setup Environment \\[required\\]\n\nPlease refer to [Get Started](https://mmagic.readthedocs.io/en/latest/get_started/I.html) to install\nMMagic.\n\nAt first, add the current folder to `PYTHONPATH`, so that Python can find your code. Run command in the current directory to add it.\n\n> Please run it every time after you opened a new shell.\n\n```shell\nexport PYTHONPATH=`pwd`:$PYTHONPATH\n```\n\n### Data Preparation \\[optional\\]\n\nPrepare the ImageNet-2012 dataset according to the [instruction](https://mmagic.readthedocs.io/en/latest/user_guides/dataset_prepare.html#imagenet).\n\n### Training commands \\[optional\\]\n\n**To train with single GPU:**\n\n```bash\nmim train mmagic configs/examplenet_8xb32_in1k.py\n```\n\n**To train with multiple GPUs:**\n\n```bash\nmim train mmagic configs/examplenet_8xb32_in1k.py --launcher pytorch --gpus 8\n```\n\n**To train with multiple GPUs by slurm:**\n\n```bash\nmim train mmagic configs/examplenet_8xb32_in1k.py --launcher slurm \\\n    --gpus 16 --gpus-per-node 8 --partition $PARTITION\n```\n\n### Testing commands \\[required\\]\n\n**To test with single GPU:**\n\n```bash\nmim test mmagic configs/examplenet_8xb32_in1k.py $CHECKPOINT\n```\n\n**To test with multiple GPUs:**\n\n```bash\nmim test mmagic configs/examplenet_8xb32_in1k.py $CHECKPOINT --launcher pytorch --gpus 8\n```\n\n**To test with multiple GPUs by slurm:**\n\n```bash\nmim test mmagic configs/examplenet_8xb32_in1k.py $CHECKPOINT --launcher slurm \\\n    --gpus 16 --gpus-per-node 8 --partition $PARTITION\n```\n\n## Results \\[required\\]\n\n|       Model        |   Pretrain   | Top-1 (%) | Top-5 (%) |                   Config                   |                Download                |\n| :----------------: | :----------: | :-------: | :-------: | :----------------------------------------: | :------------------------------------: |\n|  ExampleNet-tiny   | From scratch |   82.33   |   96.15   | [config](configs/examplenet_8xb32_in1k.py) | [model](MODEL-LINK) \\| [log](LOG-LINK) |\n| ExampleNet-small\\* | From scratch |   83.63   |   96.51   | [config](configs/examplenet_8xb32_in1k.py) |          [model](MODEL-LINK)           |\n| ExampleNet-base\\*  | From scratch |   84.34   |   96.86   | [config](configs/examplenet_8xb32_in1k.py) |          [model](MODEL-LINK)           |\n\n*Models with * are converted from the [official repo](REPO-LINK). The config files of these models are only for inference. We don't ensure these config files' training accuracy and welcome you to contribute your reproduction results.*\n\nYou can also paste some visual results here if the model doesn't have quantitative results.\n\n## Citation \\[required\\]\n\n<!-- Replace to the citation of the paper your project refers to. -->\n\n```bibtex\n@misc{mmagic2023,\n    title = {{MMagic}: {OpenMMLab} Multimodal Advanced, Generative, and Intelligent Creation Toolbox},\n    author = {{MMagic Contributors}},\n    howpublished = {\\url{https://github.com/open-mmlab/mmagic}},\n    year = {2023}\n}\n```\n\n## Checklist \\[required\\]\n\nHere is a checklist of this project's progress. And you can ignore this part if you don't plan to contribute\nto MMagic projects.\n\n- [ ] Milestone 1: PR-ready, and acceptable to be one of the `projects/`.\n\n  - [ ] Finish the code\n\n    <!-- The code's design shall follow existing interfaces and convention. For example, each model component should be registered into `mmagic.registry.MODELS` and configurable via a config file. -->\n\n  - [ ] Basic docstrings & proper citation\n\n    <!-- Each major class should contains a docstring, describing its functionality and arguments. If your code is copied or modified from other open-source projects, don't forget to cite the source project in docstring and make sure your behavior is not against its license. Typically, we do not accept any code snippet under GPL license. [A Short Guide to Open Source Licenses](https://medium.com/nationwide-technology/a-short-guide-to-open-source-licenses-cf5b1c329edd) -->\n\n  - [ ] Converted checkpoint and results (Only for reproduction)\n\n    <!-- If you are reproducing the result from a paper, make sure the model in the project can match that results. Also please provide checkpoint links or a checkpoint conversion script for others to get the pre-trained model. -->\n\n- [ ] Milestone 2: Indicates a successful model implementation.\n\n  - [ ] Training results\n\n    <!-- If you are reproducing the result from a paper, train your model from scratch and verified that the final result can match the original result. -->\n\n- [ ] Milestone 3: Good to be a part of our core package!\n\n  - [ ] Unit tests\n\n    <!-- Unit tests for the major module are required. [Example](https://github.com/open-mmlab/mmagic/blob/main/tests/test_models/test_backbones/test_vision_transformer.py) -->\n\n  - [ ] Code style\n\n    <!-- Refactor your code according to reviewer's comment. -->\n\n  - [ ] `metafile.yml` and `README.md`\n\n    <!-- It will used for mmagic to acquire your models. [Example](https://github.com/open-mmlab/mmagic/blob/main/configs/mvit/metafile.yml). In particular, you may have to refactor this README into a standard one. [Example](https://github.com/open-mmlab/mmagic/blob/main/configs/swin_transformer/README.md) -->\n"
  },
  {
    "path": "projects/example_project/configs/examplenet_8xb32_in1k.py",
    "content": "# Directly inherit the entire recipe you want to use.\n_base_ = 'mmagic::srcnn/srcnn_x4k915_1xb16-1000k_div2k.py'\n\n# This line is to import your own modules.\ncustom_imports = dict(imports='models')\n\n# Set your model, training, testing configurations.\n"
  },
  {
    "path": "projects/example_project/models/__init__.py",
    "content": "from .example_net import ExampleNet\n\n__all__ = ['ExampleNet']\n"
  },
  {
    "path": "projects/example_project/models/example_net.py",
    "content": "from mmagic.models import ResNet\nfrom mmagic.registry import MODELS\n\n\n# Register your model to the `MODELS`.\n@MODELS.register_module()\nclass ExampleNet(ResNet):\n    \"\"\"Implements an example backbone.\n\n    Implement the backbone network just like a normal pytorch network.\n    \"\"\"\n\n    def __init__(self, **kwargs) -> None:\n        print('#############################\\n'\n              '#  Hello MMagic!  #\\n'\n              '#############################')\n        super().__init__(**kwargs)\n\n    def forward(self, x):\n        \"\"\"The forward method of the network.\n\n        Args:\n            x (torch.Tensor): A tensor of image batch with shape\n                ``(batch_size, num_channels, height, width)``.\n\n        Returns:\n            Tuple[torch.Tensor]: Please return a tuple of tensors and every\n            tensor is a feature map of specified scale. If you only want the\n            final feature map, simply return a tuple with one item.\n        \"\"\"\n        return super().forward(x)\n"
  },
  {
    "path": "projects/flow_style_vton/.gitignore",
    "content": "*.jpg\n*.zip\n"
  },
  {
    "path": "projects/flow_style_vton/README.md",
    "content": "# Style-Based Global Appearance Flow for Virtual Try-On (CVPR 2022)\n\n## Description\n\nAwesome try-on desplays are like this:\n\n![image1](examples/000010_0.png)\n\n```\nAuthor: @FerryHuang.\n\nThis is an implementation of https://github.com/SenHe/Flow-Style-VTON adapting to mmediting. Only inference is supported so far.\n```\n\n## Usage\n\n### Setup Environment\n\nPlease refer to [Get Started](https://mmediting.readthedocs.io/en/latest/get_started/I.html) to install\nMMEditing.\n\nAt first, add the current folder to `PYTHONPATH`, so that Python can find your code. Run command in the current directory to add it.\n\n> Please run it every time after you opened a new shell.\n\n```shell\nexport PYTHONPATH=`pwd`:$PYTHONPATH\n```\n\n### Data Preparation\n\nPlease check the [official repo](https://github.com/SenHe/Flow-Style-VTON) and download test-set and pretrained checkpoints and put them under the folder projects/flow_style_vton\n\n### Testing commands\n\n**To test with single GPU:**\n\n```bash\ncd projects/flow_style_vton\npython inference.py\n```\n\nExpectedly, two folders will be made im_gar_flow_wg and our_t_results, containing the\ntry-on procedures and the final results, respectively.\n\n## Citation\n\n<!-- Replace to the citation of the paper your project refers to. -->\n\n```bibtex\n@inproceedings{he2022fs_vton,\n  title={Style-Based Global Appearance Flow for Virtual Try-On},\n  author={He, Sen and Song, Yi-Zhe and Xiang, Tao},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n## Checklist \\[required\\]\n\nHere is a checklist of this project's progress. And you can ignore this part if you don't plan to contribute\nto MMediting projects.\n\n- [ ] Milestone 1: PR-ready, and acceptable to be one of the `projects/`.\n\n  - [ ] Finish the code\n\n    <!-- The code's design shall follow existing interfaces and convention. For example, each model component should be registered into `mmedit.registry.MODELS` and configurable via a config file. -->\n\n  - [ ] Basic docstrings & proper citation\n\n    <!-- Each major class should contains a docstring, describing its functionality and arguments. If your code is copied or modified from other open-source projects, don't forget to cite the source project in docstring and make sure your behavior is not against its license. Typically, we do not accept any code snippet under GPL license. [A Short Guide to Open Source Licenses](https://medium.com/nationwide-technology/a-short-guide-to-open-source-licenses-cf5b1c329edd) -->\n\n  - [ ] Converted checkpoint and results (Only for reproduction)\n\n    <!-- If you are reproducing the result from a paper, make sure the model in the project can match that results. Also please provide checkpoint links or a checkpoint conversion script for others to get the pre-trained model. -->\n\n- [ ] Milestone 2: Indicates a successful model implementation.\n\n  - [ ] Training results\n\n    <!-- If you are reproducing the result from a paper, train your model from scratch and verified that the final result can match the original result. -->\n\n- [ ] Milestone 3: Good to be a part of our core package!\n\n  - [ ] Unit tests\n\n    <!-- Unit tests for the major module are required. [Example](https://github.com/open-mmlab/mmediting/blob/main/tests/test_models/test_backbones/test_vision_transformer.py) -->\n\n  - [ ] Code style\n\n    <!-- Refactor your code according to reviewer's comment. -->\n\n  - [ ] `metafile.yml` and `README.md`\n\n    <!-- It will used for mmediting to acquire your models. [Example](https://github.com/open-mmlab/mmediting/blob/main/configs/mvit/metafile.yml). In particular, you may have to refactor this README into a standard one. [Example](https://github.com/open-mmlab/mmediting/blob/main/configs/swin_transformer/README.md) -->\n"
  },
  {
    "path": "projects/flow_style_vton/configs/flow_style_vton_PFAFN_epoch_101.py",
    "content": "model = dict(\n    type='FlowStyleVTON',\n    warp_model=dict(type='AFWM', input_nc=3),\n    gen_model=dict(\n        type='ResUnetGenerator', input_nc=7, output_nc=4, num_downs=5),\n    pretrained_cfgs=dict(\n        warp_model=dict(ckpt_path='ckp/aug/PFAFN_warp_epoch_101.pth'),\n        gen_model=dict(ckpt_path='ckp/aug/PFAFN_gen_epoch_101.pth')))\n"
  },
  {
    "path": "projects/flow_style_vton/inference.py",
    "content": "import os\nfrom argparse import ArgumentParser\n\nimport torch\nfrom mmengine.registry import init_default_scope\nfrom torch.utils.data import DataLoader\nfrom torchvision.utils import save_image\nfrom tqdm import tqdm\nfrom vton_dataset import AlignedDataset\n\nfrom mmagic.apis.inferencers.inference_functions import init_model\nfrom projects.flow_style_vton.models import FlowStyleVTON\n\ninit_default_scope('mmagic')\n\nconfig = 'configs/flow_style_vton_PFAFN_epoch_101.py'\n\nparser = ArgumentParser()\nparser.add_argument('--gpu_id', type=int, default=0)\nparser.add_argument(\n    '--loadSize', type=int, default=512, help='scale images to this size')\nparser.add_argument(\n    '--fineSize', type=int, default=512, help='then crop to this size')\nparser.add_argument('--dataroot', type=str, default='VITON_test')\nparser.add_argument('--test_pairs', type=str, default='test_pairs.txt')\nparser.add_argument(\n    '--resize_or_crop',\n    type=str,\n    default='scale_width',\n    help='scaling and cropping of images at load time \\\n    [resize_and_crop|crop|scale_width|scale_width_and_crop]')\nparser.add_argument('--phase', type=str, default='test')\nparser.add_argument('--isTrain', default=False)\nparser.add_argument(\n    '--no_flip',\n    action='store_true',\n    help='if specified, do not flip the images for data argumentation')\nparser.add_argument('--batch_size', type=int, default=1)\nparser.add_argument('--num_workers', type=int, default=4)\n\nparser.add_argument('--output_dir', type=str, default='inference_results')\nopt = parser.parse_args()\n\ndataset = AlignedDataset(opt)\ndataloader = DataLoader(dataset, opt.batch_size, num_workers=opt.num_workers)\n\ndevice = torch.device(\n    f'cuda:{opt.gpu_id}' if torch.cuda.is_available() else 'cpu')\n# pretrained is set inside the config\nmodel = init_model(config).to(device).eval()\nassert isinstance(model, FlowStyleVTON)\n\nos.makedirs('our_t_results', exist_ok=True)\nos.makedirs('im_gar_flow_wg', exist_ok=True)\nfor i, data in enumerate(tqdm(dataloader)):\n    p_tryon, combine = model.infer(data)\n    save_image(\n        p_tryon,\n        os.path.join('our_t_results', data['p_name'][0]),\n        nrow=int(1),\n        normalize=True,\n        value_range=(-1, 1))\n    save_image(\n        combine,\n        os.path.join('im_gar_flow_wg', data['p_name'][0]),\n        nrow=int(1),\n        normalize=True,\n        range=(-1, 1),\n    )\n"
  },
  {
    "path": "projects/flow_style_vton/models/__init__.py",
    "content": "from .afwm import AFWM\nfrom .flow_style_vton_model import FlowStyleVTON\nfrom .generator import ResUnetGenerator\n\n__all__ = ['FlowStyleVTON', 'AFWM', 'ResUnetGenerator']\n"
  },
  {
    "path": "projects/flow_style_vton/models/afwm.py",
    "content": "from math import sqrt\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass AFWM(nn.Module):\n\n    def __init__(self, input_nc):\n        super(AFWM, self).__init__()\n        num_filters = [64, 128, 256, 256, 256]\n        self.image_features = FeatureEncoder(3, num_filters)\n        self.cond_features = FeatureEncoder(input_nc, num_filters)\n        self.image_FPN = RefinePyramid(num_filters)\n        self.cond_FPN = RefinePyramid(num_filters)\n        self.aflow_net = AFlowNet(len(num_filters))\n\n    def forward(self, cond_input, image_input):\n\n        # import ipdb; ipdb.set_trace()\n        cond_pyramids = self.cond_FPN(\n            self.cond_features(cond_input))  # maybe use nn.Sequential\n        image_pyramids = self.image_FPN(self.image_features(image_input))\n\n        x_warp, last_flow = self.aflow_net(image_input, image_pyramids,\n                                           cond_pyramids)\n\n        return x_warp, last_flow\n\n\ndef apply_offset(offset):\n    sizes = list(offset.size()[2:])\n    grid_list = torch.meshgrid(\n        [torch.arange(size, device=offset.device) for size in sizes])\n    grid_list = reversed(grid_list)\n    # apply offset\n    grid_list = [\n        grid.float().unsqueeze(0) + offset[:, dim, ...]\n        for dim, grid in enumerate(grid_list)\n    ]\n    # normalize\n    grid_list = [\n        grid / ((size - 1.0) / 2.0) - 1.0\n        for grid, size in zip(grid_list, reversed(sizes))\n    ]\n\n    return torch.stack(grid_list, dim=-1)\n\n\ndef TVLoss(x):\n    tv_h = x[:, :, 1:, :] - x[:, :, :-1, :]\n    tv_w = x[:, :, :, 1:] - x[:, :, :, :-1]\n\n    return torch.mean(torch.abs(tv_h)) + torch.mean(torch.abs(tv_w))\n\n\n# backbone\nclass EqualLR:\n\n    def __init__(self, name):\n        self.name = name\n\n    def compute_weight(self, module):\n        weight = getattr(module, self.name + '_orig')\n        fan_in = weight.data.size(1) * weight.data[0][0].numel()\n\n        return weight * sqrt(2 / fan_in)\n\n    @staticmethod\n    def apply(module, name):\n        fn = EqualLR(name)\n\n        weight = getattr(module, name)\n        del module._parameters[name]\n        module.register_parameter(name + '_orig', nn.Parameter(weight.data))\n        module.register_forward_pre_hook(fn)\n\n        return fn\n\n    def __call__(self, module, input):\n        weight = self.compute_weight(module)\n        setattr(module, self.name, weight)\n\n\ndef equal_lr(module, name='weight'):\n    EqualLR.apply(module, name)\n\n    return module\n\n\nclass EqualLinear(nn.Module):\n\n    def __init__(self, in_dim, out_dim):\n        super().__init__()\n\n        linear = nn.Linear(in_dim, out_dim)\n        linear.weight.data.normal_()\n        linear.bias.data.zero_()\n\n        self.linear = equal_lr(linear)\n\n    def forward(self, input):\n        return self.linear(input)\n\n\nclass ModulatedConv2d(nn.Module):\n\n    def __init__(self,\n                 fin,\n                 fout,\n                 kernel_size,\n                 padding_type='zero',\n                 upsample=False,\n                 downsample=False,\n                 latent_dim=512,\n                 normalize_mlp=False):\n        super(ModulatedConv2d, self).__init__()\n        self.in_channels = fin\n        self.out_channels = fout\n        self.kernel_size = kernel_size\n        padding_size = kernel_size // 2\n\n        if kernel_size == 1:\n            self.demudulate = False\n        else:\n            self.demudulate = True\n\n        self.weight = nn.Parameter(\n            torch.Tensor(fout, fin, kernel_size, kernel_size))\n        self.bias = nn.Parameter(torch.Tensor(1, fout, 1, 1))\n\n        if not normalize_mlp:\n            self.mlp_class_std = EqualLinear(latent_dim, fin)\n        if padding_type == 'reflect':\n            self.padding = nn.ReflectionPad2d(padding_size)\n        else:\n            self.padding = nn.ZeroPad2d(padding_size)\n\n        self.weight.data.normal_()\n        self.bias.data.zero_()\n\n    def forward(self, input, latent):\n        fan_in = self.weight.data.size(1) * self.weight.data[0][0].numel()\n        weight = self.weight * sqrt(2 / fan_in)\n        weight = weight.view(1, self.out_channels, self.in_channels,\n                             self.kernel_size, self.kernel_size)\n\n        s = self.mlp_class_std(latent).view(-1, 1, self.in_channels, 1, 1)\n        weight = s * weight\n        if self.demudulate:\n            d = torch.rsqrt((weight**2).sum(4).sum(3).sum(2) +\n                            1e-5).view(-1, self.out_channels, 1, 1, 1)\n            weight = (d * weight).view(-1, self.in_channels, self.kernel_size,\n                                       self.kernel_size)\n        else:\n            weight = weight.view(-1, self.in_channels, self.kernel_size,\n                                 self.kernel_size)\n\n        batch, _, height, width = input.shape\n\n        input = input.view(1, -1, height, width)\n        input = self.padding(input)\n        out = F.conv2d(\n            input, weight, groups=batch).view(batch, self.out_channels, height,\n                                              width) + self.bias\n\n        return out\n\n\nclass StyledConvBlock(nn.Module):\n\n    def __init__(self,\n                 fin,\n                 fout,\n                 latent_dim=256,\n                 padding='zero',\n                 actvn='lrelu',\n                 normalize_affine_output=False,\n                 modulated_conv=False):\n        super(StyledConvBlock, self).__init__()\n        if not modulated_conv:\n            if padding == 'reflect':\n                padding_layer = nn.ReflectionPad2d\n            else:\n                padding_layer = nn.ZeroPad2d\n\n        if modulated_conv:\n            conv2d = ModulatedConv2d\n\n        if modulated_conv:\n            self.actvn_gain = sqrt(2)\n        else:\n            self.actvn_gain = 1.0\n\n        self.modulated_conv = modulated_conv\n\n        if actvn == 'relu':\n            activation = nn.ReLU(True)\n        else:\n            activation = nn.LeakyReLU(0.2, True)\n\n        if self.modulated_conv:\n            self.conv0 = conv2d(\n                fin,\n                fout,\n                kernel_size=3,\n                padding_type=padding,\n                upsample=False,\n                latent_dim=latent_dim,\n                normalize_mlp=normalize_affine_output)\n        else:\n            conv0 = conv2d(fin, fout, kernel_size=3)\n\n            seq0 = [padding_layer(1), conv0]\n            self.conv0 = nn.Sequential(*seq0)\n\n        self.actvn0 = activation\n\n        if self.modulated_conv:\n            self.conv1 = conv2d(\n                fout,\n                fout,\n                kernel_size=3,\n                padding_type=padding,\n                downsample=False,\n                latent_dim=latent_dim,\n                normalize_mlp=normalize_affine_output)\n        else:\n            conv1 = conv2d(fout, fout, kernel_size=3)\n            seq1 = [padding_layer(1), conv1]\n            self.conv1 = nn.Sequential(*seq1)\n\n        self.actvn1 = activation\n\n    def forward(self, input, latent=None):\n        if self.modulated_conv:\n            out = self.conv0(input, latent)\n        else:\n            out = self.conv0(input)\n\n        out = self.actvn0(out) * self.actvn_gain\n\n        if self.modulated_conv:\n            out = self.conv1(out, latent)\n        else:\n            out = self.conv1(out)\n\n        out = self.actvn1(out) * self.actvn_gain\n\n        return out\n\n\nclass Styled_F_ConvBlock(nn.Module):\n\n    def __init__(self,\n                 fin,\n                 fout,\n                 latent_dim=256,\n                 padding='zero',\n                 actvn='lrelu',\n                 normalize_affine_output=False,\n                 modulated_conv=False):\n        super(Styled_F_ConvBlock, self).__init__()\n        if not modulated_conv:\n            if padding == 'reflect':\n                padding_layer = nn.ReflectionPad2d\n            else:\n                padding_layer = nn.ZeroPad2d\n\n        if modulated_conv:\n            conv2d = ModulatedConv2d\n\n        if modulated_conv:\n            self.actvn_gain = sqrt(2)\n        else:\n            self.actvn_gain = 1.0\n\n        self.modulated_conv = modulated_conv\n\n        if actvn == 'relu':\n            activation = nn.ReLU(True)\n        else:\n            activation = nn.LeakyReLU(0.2, True)\n\n        if self.modulated_conv:\n            self.conv0 = conv2d(\n                fin,\n                128,\n                kernel_size=3,\n                padding_type=padding,\n                upsample=False,\n                latent_dim=latent_dim,\n                normalize_mlp=normalize_affine_output)\n        else:\n            conv0 = conv2d(fin, 128, kernel_size=3)\n\n            seq0 = [padding_layer(1), conv0]\n            self.conv0 = nn.Sequential(*seq0)\n\n        self.actvn0 = activation\n\n        if self.modulated_conv:\n            self.conv1 = conv2d(\n                128,\n                fout,\n                kernel_size=3,\n                padding_type=padding,\n                downsample=False,\n                latent_dim=latent_dim,\n                normalize_mlp=normalize_affine_output)\n        else:\n            conv1 = conv2d(128, fout, kernel_size=3)\n            seq1 = [padding_layer(1), conv1]\n            self.conv1 = nn.Sequential(*seq1)\n\n    def forward(self, input, latent=None):\n        if self.modulated_conv:\n            out = self.conv0(input, latent)\n        else:\n            out = self.conv0(input)\n\n        out = self.actvn0(out) * self.actvn_gain\n\n        if self.modulated_conv:\n            out = self.conv1(out, latent)\n        else:\n            out = self.conv1(out)\n\n        return out\n\n\nclass ResBlock(nn.Module):\n\n    def __init__(self, in_channels):\n        super(ResBlock, self).__init__()\n        self.block = nn.Sequential(\n            nn.BatchNorm2d(in_channels), nn.ReLU(inplace=True),\n            nn.Conv2d(\n                in_channels, in_channels, kernel_size=3,\n                padding=1, bias=False), nn.BatchNorm2d(in_channels),\n            nn.ReLU(inplace=True),\n            nn.Conv2d(\n                in_channels, in_channels, kernel_size=3, padding=1,\n                bias=False))\n\n    def forward(self, x):\n        return self.block(x) + x\n\n\nclass DownSample(nn.Module):\n\n    def __init__(self, in_channels, out_channels):\n        super(DownSample, self).__init__()\n        self.block = nn.Sequential(\n            nn.BatchNorm2d(in_channels), nn.ReLU(inplace=True),\n            nn.Conv2d(\n                in_channels,\n                out_channels,\n                kernel_size=3,\n                stride=2,\n                padding=1,\n                bias=False))\n\n    def forward(self, x):\n        return self.block(x)\n\n\nclass FeatureEncoder(nn.Module):\n\n    def __init__(self, in_channels, chns=[64, 128, 256, 256, 256]):\n        super(FeatureEncoder, self).__init__()\n        self.encoders = []\n        for i, out_chns in enumerate(chns):\n            if i == 0:\n                encoder = nn.Sequential(\n                    DownSample(in_channels, out_chns), ResBlock(out_chns),\n                    ResBlock(out_chns))\n            else:\n                encoder = nn.Sequential(\n                    DownSample(chns[i - 1], out_chns), ResBlock(out_chns),\n                    ResBlock(out_chns))\n\n            self.encoders.append(encoder)\n\n        self.encoders = nn.ModuleList(self.encoders)\n\n    def forward(self, x):\n        encoder_features = []\n        for encoder in self.encoders:\n            x = encoder(x)\n            encoder_features.append(x)\n        return encoder_features\n\n\nclass RefinePyramid(nn.Module):\n\n    def __init__(self, chns=[64, 128, 256, 256, 256], fpn_dim=256):\n        super(RefinePyramid, self).__init__()\n        self.chns = chns\n\n        # adaptive\n        self.adaptive = []\n        for in_chns in list(reversed(chns)):\n            adaptive_layer = nn.Conv2d(in_chns, fpn_dim, kernel_size=1)\n            self.adaptive.append(adaptive_layer)\n        self.adaptive = nn.ModuleList(self.adaptive)\n        # output conv\n        self.smooth = []\n        for i in range(len(chns)):\n            smooth_layer = nn.Conv2d(\n                fpn_dim, fpn_dim, kernel_size=3, padding=1)\n            self.smooth.append(smooth_layer)\n        self.smooth = nn.ModuleList(self.smooth)\n\n    def forward(self, x):\n        conv_ftr_list = x\n\n        feature_list = []\n        last_feature = None\n        for i, conv_ftr in enumerate(list(reversed(conv_ftr_list))):\n            # adaptive\n            feature = self.adaptive[i](conv_ftr)\n            # fuse\n            if last_feature is not None:\n                feature = feature + F.interpolate(\n                    last_feature, scale_factor=2, mode='nearest')\n            # smooth\n            feature = self.smooth[i](feature)\n            last_feature = feature\n            feature_list.append(feature)\n\n        return tuple(reversed(feature_list))\n\n\nclass AFlowNet(nn.Module):\n\n    def __init__(self, num_pyramid, fpn_dim=256):\n        super(AFlowNet, self).__init__()\n\n        padding_type = 'zero'\n        actvn = 'lrelu'\n        normalize_mlp = False\n        modulated_conv = True\n\n        self.netRefine = []\n\n        self.netStyle = []\n\n        self.netF = []\n\n        for i in range(num_pyramid):\n\n            netRefine_layer = torch.nn.Sequential(\n                torch.nn.Conv2d(\n                    2 * fpn_dim,\n                    out_channels=128,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1),\n                torch.nn.LeakyReLU(inplace=False, negative_slope=0.1),\n                torch.nn.Conv2d(\n                    in_channels=128,\n                    out_channels=64,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1),\n                torch.nn.LeakyReLU(inplace=False, negative_slope=0.1),\n                torch.nn.Conv2d(\n                    in_channels=64,\n                    out_channels=32,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1),\n                torch.nn.LeakyReLU(inplace=False, negative_slope=0.1),\n                torch.nn.Conv2d(\n                    in_channels=32,\n                    out_channels=2,\n                    kernel_size=3,\n                    stride=1,\n                    padding=1))\n\n            style_block = StyledConvBlock(\n                256,\n                49,\n                latent_dim=256,\n                padding=padding_type,\n                actvn=actvn,\n                normalize_affine_output=normalize_mlp,\n                modulated_conv=modulated_conv)\n\n            style_F_block = Styled_F_ConvBlock(\n                49,\n                2,\n                latent_dim=256,\n                padding=padding_type,\n                actvn=actvn,\n                normalize_affine_output=normalize_mlp,\n                modulated_conv=modulated_conv)\n\n            self.netRefine.append(netRefine_layer)\n            self.netStyle.append(style_block)\n            self.netF.append(style_F_block)\n\n        self.netRefine = nn.ModuleList(self.netRefine)\n        self.netStyle = nn.ModuleList(self.netStyle)\n        self.netF = nn.ModuleList(self.netF)\n\n        self.cond_style = torch.nn.Sequential(\n            torch.nn.Conv2d(256, 128, kernel_size=(8, 6), stride=1, padding=0),\n            torch.nn.LeakyReLU(inplace=False, negative_slope=0.1))\n\n        self.image_style = torch.nn.Sequential(\n            torch.nn.Conv2d(256, 128, kernel_size=(8, 6), stride=1, padding=0),\n            torch.nn.LeakyReLU(inplace=False, negative_slope=0.1))\n\n    def forward(self, x, x_warps, x_conds, warp_feature=True):\n        last_flow = None\n\n        B = x_conds[len(x_warps) - 1].shape[0]\n\n        cond_style = self.cond_style(x_conds[len(x_warps) - 1]).view(B, -1)\n        image_style = self.image_style(x_warps[len(x_warps) - 1]).view(B, -1)\n        style = torch.cat([cond_style, image_style], 1)\n\n        for i in range(len(x_warps)):\n            x_warp = x_warps[len(x_warps) - 1 - i]\n            x_cond = x_conds[len(x_warps) - 1 - i]\n\n            if last_flow is not None and warp_feature:\n                x_warp_after = F.grid_sample(\n                    x_warp,\n                    last_flow.detach().permute(0, 2, 3, 1),\n                    mode='bilinear',\n                    padding_mode='border')\n            else:\n                x_warp_after = x_warp\n\n            stylemap = self.netStyle[i](x_warp_after, style)\n\n            flow = self.netF[i](stylemap, style)\n            flow = apply_offset(flow)\n            if last_flow is not None:\n                flow = F.grid_sample(\n                    last_flow, flow, mode='bilinear', padding_mode='border')\n            else:\n                flow = flow.permute(0, 3, 1, 2)\n\n            last_flow = flow\n            x_warp = F.grid_sample(\n                x_warp,\n                flow.permute(0, 2, 3, 1),\n                mode='bilinear',\n                padding_mode='border')\n            concat = torch.cat([x_warp, x_cond], 1)\n            flow = self.netRefine[i](concat)\n            flow = apply_offset(flow)\n            flow = F.grid_sample(\n                last_flow, flow, mode='bilinear', padding_mode='border')\n\n            last_flow = F.interpolate(flow, scale_factor=2, mode='bilinear')\n\n        x_warp = F.grid_sample(\n            x,\n            last_flow.permute(0, 2, 3, 1),\n            mode='bilinear',\n            padding_mode='border')\n        return x_warp, last_flow\n"
  },
  {
    "path": "projects/flow_style_vton/models/flow_style_vton_model.py",
    "content": "import mmengine\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.model import BaseModel\nfrom mmengine.runner.checkpoint import _load_checkpoint\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils.typing import ForwardInputs\n\n\n@MODELS.register_module()\nclass FlowStyleVTON(BaseModel):\n\n    def __init__(self, warp_model, gen_model, pretrained_cfgs=None):\n        super().__init__()\n        self.warp_model = MODELS.build(warp_model)\n        self.gen_model = MODELS.build(gen_model)\n        if pretrained_cfgs:\n            self.load_pretrained_models(pretrained_cfgs)\n\n    def load_pretrained_models(self, pretrained_cfgs):\n        \"\"\"_summary_\n\n        Args:\n            pretrained_cfgs (_type_): _description_\n        \"\"\"\n        for key, ckpt_cfg in pretrained_cfgs.items():\n            map_location = ckpt_cfg.get('map_location', 'cpu')\n            strict = ckpt_cfg.get('strict', False)\n            ckpt_path = ckpt_cfg.get('ckpt_path')\n            state_dict = _load_checkpoint(ckpt_path, map_location)\n            getattr(self, key).load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained {key} from {ckpt_path}')\n\n    @property\n    def device(self):\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    def infer(self, inputs):\n\n        real_image = inputs['image']\n        clothes = inputs['clothes']\n        edge = inputs['edge']\n        edge = torch.FloatTensor(\n            (edge.detach().numpy() > 0.5).astype(np.int64))\n        clothes = clothes * edge\n\n        device = self.device\n        real_image, clothes, edge = real_image.to(device), clothes.to(\n            device), edge.to(device)\n        warped_cloth, last_flow = self.warp_model(real_image, clothes)\n        warped_edge = F.grid_sample(\n            edge,\n            last_flow.permute(0, 2, 3, 1),\n            mode='bilinear',\n            padding_mode='zeros')\n\n        gen_inputs = torch.cat([real_image, warped_cloth, warped_edge], 1)\n        gen_outputs = self.gen_model(gen_inputs)\n        p_rendered, m_composite = torch.split(gen_outputs, [3, 1], 1)\n        p_rendered = torch.tanh(p_rendered)\n        m_composite = torch.sigmoid(m_composite)\n        m_composite = m_composite * warped_edge\n        p_tryon = warped_cloth * m_composite + p_rendered * (1 - m_composite)\n\n        flow_offset = de_offset(last_flow)\n        flow_color = flow2color()(flow_offset)\n        combine = torch.cat([\n            real_image[0], clothes[0],\n            flow_color.to(device),\n            warped_cloth.to(device)[0], p_tryon[0]\n        ], 2).squeeze()\n        return p_tryon, combine\n\n    def forward(self, inputs: ForwardInputs):\n        return self.infer(inputs)\n\n\ndef make_colorwheel():\n    \"\"\"Generates a color wheel for optical flow visualization as presented in:\n\n    Baker et al. \"A Database and Evaluation Methodology for Optical Flow\"\n    (ICCV, 2007) URL: http://vision.middlebury.edu/flow/flowEval-iccv07.pdf\n    According to the C++ source code of Daniel Scharstein\n    According to the Matlab source code of Deqing Sun\n    \"\"\"\n    RY = 15\n    YG = 6\n    GC = 4\n    CB = 11\n    BM = 13\n    MR = 6\n\n    ncols = RY + YG + GC + CB + BM + MR\n    colorwheel = np.zeros((ncols, 3))\n    col = 0\n\n    # RY\n    colorwheel[0:RY, 0] = 255\n    colorwheel[0:RY, 1] = np.floor(255 * np.arange(0, RY) / RY)\n    col = col + RY\n    # YG\n    colorwheel[col:col + YG, 0] = 255 - np.floor(255 * np.arange(0, YG) / YG)\n    colorwheel[col:col + YG, 1] = 255\n    col = col + YG\n    # GC\n    colorwheel[col:col + GC, 1] = 255\n    colorwheel[col:col + GC, 2] = np.floor(255 * np.arange(0, GC) / GC)\n    col = col + GC\n    # CB\n    colorwheel[col:col + CB, 1] = 255 - np.floor(255 * np.arange(CB) / CB)\n    colorwheel[col:col + CB, 2] = 255\n    col = col + CB\n    # BM\n    colorwheel[col:col + BM, 2] = 255\n    colorwheel[col:col + BM, 0] = np.floor(255 * np.arange(0, BM) / BM)\n    col = col + BM\n    # MR\n    colorwheel[col:col + MR, 2] = 255 - np.floor(255 * np.arange(MR) / MR)\n    colorwheel[col:col + MR, 0] = 255\n    return colorwheel\n\n\nclass flow2color():\n    # code from: https://github.com/tomrunia/OpticalFlow_Visualization\n    # MIT License\n    #\n    # Copyright (c) 2018 Tom Runia\n    #\n    # Permission is hereby granted, free of charge, to any person obtaining\n    # a copy of this software and associated documentation files\n    # (the \"Software\"), to deal in the Software without restriction,\n    # including without limitation the rights to use, copy, modify, merge,\n    # publish, distribute, sublicense, and/or sell copies of the Software,\n    # and to permit persons to whom the Software is\n    # furnished to do so, subject to conditions.\n    #\n    # Author: Tom Runia\n    # Date Created: 2018-08-03\n    def __init__(self):\n        self.colorwheel = make_colorwheel()\n\n    def flow_compute_color(self, u, v, convert_to_bgr=False):\n        \"\"\"Applies the flow color wheel to (possibly clipped) flow components u\n        and v. According to the C++ source code of Daniel Scharstein According\n        to the Matlab source code of Deqing Sun.\n\n        :param u: np.ndarray, input horizontal flow\n        :param v: np.ndarray, input vertical flow\n        :param convert_to_bgr: bool, whether to change ordering and output BGR\n         instead of RGB\n        :return:\n        \"\"\"\n        flow_image = np.zeros((u.shape[0], u.shape[1], 3), np.uint8)\n        ncols = self.colorwheel.shape[0]\n\n        rad = np.sqrt(np.square(u) + np.square(v))\n        a = np.arctan2(-v, -u) / np.pi\n        fk = (a + 1) / 2 * (ncols - 1)\n        k0 = np.floor(fk).astype(np.int32)\n        k1 = k0 + 1\n        k1[k1 == ncols] = 0\n        f = fk - k0\n\n        for i in range(self.colorwheel.shape[1]):\n\n            tmp = self.colorwheel[:, i]\n            col0 = tmp[k0] / 255.0\n            col1 = tmp[k1] / 255.0\n            col = (1 - f) * col0 + f * col1\n\n            idx = (rad <= 1)\n            col[idx] = 1 - rad[idx] * (1 - col[idx])\n            col[~idx] = col[~idx] * 0.75  # out of range?\n\n            # Note the 2-i => BGR instead of RGB\n            ch_idx = 2 - i if convert_to_bgr else i\n            flow_image[:, :, ch_idx] = np.floor(255 * col)\n\n        return flow_image\n\n    def __call__(self, flow_uv, clip_flow=None, convert_to_bgr=False):\n        \"\"\"Expects a two dimensional flow image of shape [H,W,2] According to\n        the C++ source code of Daniel Scharstein According to the Matlab source\n        code of Deqing Sun.\n\n        :param flow_uv: np.ndarray of shape [H,W,2]\n        :param clip_flow: float, maximum clipping value for flow\n        :return:\n        \"\"\"\n        if len(flow_uv.size()) != 3:\n            flow_uv = flow_uv[0]\n        flow_uv = flow_uv.permute(1, 2, 0).cpu().detach().numpy()\n\n        assert flow_uv.ndim == 3, 'input flow must have three dimensions'\n        assert flow_uv.shape[2] == 2, 'input flow must have shape [H,W,2]'\n\n        if clip_flow is not None:\n            flow_uv = np.clip(flow_uv, 0, clip_flow)\n\n        u = flow_uv[:, :, 1]\n        v = flow_uv[:, :, 0]\n\n        rad = np.sqrt(np.square(u) + np.square(v))\n        rad_max = np.max(rad)\n\n        epsilon = 1e-5\n        u = u / (rad_max + epsilon)\n        v = v / (rad_max + epsilon)\n        image = self.flow_compute_color(u, v, convert_to_bgr)\n        image = torch.tensor(image).float().permute(2, 0, 1) / 255.0 * 2 - 1\n        return image\n\n\ndef de_offset(s_grid):\n    [b, _, h, w] = s_grid.size()\n\n    x = torch.arange(w).view(1, -1).expand(h, -1).float()\n    y = torch.arange(h).view(-1, 1).expand(-1, w).float()\n    x = 2 * x / (w - 1) - 1\n    y = 2 * y / (h - 1) - 1\n    grid = torch.stack([x, y], dim=0).float().cuda()\n    grid = grid.unsqueeze(0).expand(b, -1, -1, -1)\n\n    offset = grid - s_grid\n\n    offset_x = offset[:, 0, :, :] * (w - 1) / 2\n    offset_y = offset[:, 1, :, :] * (h - 1) / 2\n\n    offset = torch.cat((offset_y, offset_x), 0)\n\n    return offset\n"
  },
  {
    "path": "projects/flow_style_vton/models/generator.py",
    "content": "import os\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass ResUnetGenerator(nn.Module):\n\n    def __init__(self,\n                 input_nc,\n                 output_nc,\n                 num_downs,\n                 ngf=64,\n                 norm_layer=nn.BatchNorm2d,\n                 use_dropout=False):\n        super(ResUnetGenerator, self).__init__()\n        # construct unet structure\n        unet_block = ResUnetSkipConnectionBlock(\n            ngf * 8,\n            ngf * 8,\n            input_nc=None,\n            submodule=None,\n            norm_layer=norm_layer,\n            innermost=True)\n\n        for i in range(num_downs - 5):\n            unet_block = ResUnetSkipConnectionBlock(\n                ngf * 8,\n                ngf * 8,\n                input_nc=None,\n                submodule=unet_block,\n                norm_layer=norm_layer,\n                use_dropout=use_dropout)\n        unet_block = ResUnetSkipConnectionBlock(\n            ngf * 4,\n            ngf * 8,\n            input_nc=None,\n            submodule=unet_block,\n            norm_layer=norm_layer)\n        unet_block = ResUnetSkipConnectionBlock(\n            ngf * 2,\n            ngf * 4,\n            input_nc=None,\n            submodule=unet_block,\n            norm_layer=norm_layer)\n        unet_block = ResUnetSkipConnectionBlock(\n            ngf,\n            ngf * 2,\n            input_nc=None,\n            submodule=unet_block,\n            norm_layer=norm_layer)\n        unet_block = ResUnetSkipConnectionBlock(\n            output_nc,\n            ngf,\n            input_nc=input_nc,\n            submodule=unet_block,\n            outermost=True,\n            norm_layer=norm_layer)\n\n        self.model = unet_block\n\n    def forward(self, input):\n        return self.model(input)\n\n\nclass ResidualBlock(nn.Module):\n\n    def __init__(self, in_features=64, norm_layer=nn.BatchNorm2d):\n        super(ResidualBlock, self).__init__()\n        self.relu = nn.ReLU(True)\n        if norm_layer is None:\n            self.block = nn.Sequential(\n                nn.Conv2d(in_features, in_features, 3, 1, 1, bias=False),\n                nn.ReLU(inplace=True),\n                nn.Conv2d(in_features, in_features, 3, 1, 1, bias=False),\n            )\n        else:\n            self.block = nn.Sequential(\n                nn.Conv2d(in_features, in_features, 3, 1, 1, bias=False),\n                norm_layer(in_features), nn.ReLU(inplace=True),\n                nn.Conv2d(in_features, in_features, 3, 1, 1, bias=False),\n                norm_layer(in_features))\n\n    def forward(self, x):\n        residual = x\n        out = self.block(x)\n        out += residual\n        out = self.relu(out)\n        return out\n\n\n# Defines the submodule with skip connection.\n# X -------------------identity---------------------- X\n#   |-- downsampling -- |submodule| -- upsampling --|\nclass ResUnetSkipConnectionBlock(nn.Module):\n\n    def __init__(self,\n                 outer_nc,\n                 inner_nc,\n                 input_nc=None,\n                 submodule=None,\n                 outermost=False,\n                 innermost=False,\n                 norm_layer=nn.BatchNorm2d,\n                 use_dropout=False):\n        super(ResUnetSkipConnectionBlock, self).__init__()\n        self.outermost = outermost\n        use_bias = norm_layer == nn.InstanceNorm2d\n\n        if input_nc is None:\n            input_nc = outer_nc\n        downconv = nn.Conv2d(\n            input_nc,\n            inner_nc,\n            kernel_size=3,\n            stride=2,\n            padding=1,\n            bias=use_bias)\n        # add two resblock\n        res_downconv = [\n            ResidualBlock(inner_nc, norm_layer),\n            ResidualBlock(inner_nc, norm_layer)\n        ]\n        res_upconv = [\n            ResidualBlock(outer_nc, norm_layer),\n            ResidualBlock(outer_nc, norm_layer)\n        ]\n\n        downrelu = nn.ReLU(True)\n        uprelu = nn.ReLU(True)\n        if norm_layer is not None:\n            downnorm = norm_layer(inner_nc)\n            upnorm = norm_layer(outer_nc)\n\n        if outermost:\n            upsample = nn.Upsample(scale_factor=2, mode='nearest')\n            upconv = nn.Conv2d(\n                inner_nc * 2,\n                outer_nc,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=use_bias)\n            down = [downconv, downrelu] + res_downconv\n            up = [upsample, upconv]\n            model = down + [submodule] + up\n        elif innermost:\n            upsample = nn.Upsample(scale_factor=2, mode='nearest')\n            upconv = nn.Conv2d(\n                inner_nc,\n                outer_nc,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=use_bias)\n            down = [downconv, downrelu] + res_downconv\n            if norm_layer is None:\n                up = [upsample, upconv, uprelu] + res_upconv\n            else:\n                up = [upsample, upconv, upnorm, uprelu] + res_upconv\n            model = down + up\n        else:\n            upsample = nn.Upsample(scale_factor=2, mode='nearest')\n            upconv = nn.Conv2d(\n                inner_nc * 2,\n                outer_nc,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=use_bias)\n            if norm_layer is None:\n                down = [downconv, downrelu] + res_downconv\n                up = [upsample, upconv, uprelu] + res_upconv\n            else:\n                down = [downconv, downnorm, downrelu] + res_downconv\n                up = [upsample, upconv, upnorm, uprelu] + res_upconv\n\n            if use_dropout:\n                model = down + [submodule] + up + [nn.Dropout(0.5)]\n            else:\n                model = down + [submodule] + up\n\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x):\n        if self.outermost:\n            return self.model(x)\n        else:\n            return torch.cat([x, self.model(x)], 1)\n\n\ndef load_checkpoint(model, checkpoint_path):\n\n    if not os.path.exists(checkpoint_path):\n        print('No checkpoint!')\n        return\n\n    checkpoint = torch.load(checkpoint_path)\n    checkpoint_new = model.state_dict()\n    for param in checkpoint_new:\n        checkpoint_new[param] = checkpoint[param]\n\n    model.load_state_dict(checkpoint_new)\n"
  },
  {
    "path": "projects/flow_style_vton/test_pairs.txt",
    "content": "000001_0.jpg 001744_1.jpg\n000010_0.jpg 004325_1.jpg\n000020_0.jpg 002022_1.jpg\n000028_0.jpg 014652_1.jpg\n000038_0.jpg 010143_1.jpg\n000048_0.jpg 010608_1.jpg\n000057_0.jpg 012578_1.jpg\n000066_0.jpg 009595_1.jpg\n000074_0.jpg 015392_1.jpg\n000082_0.jpg 003291_1.jpg\n000097_0.jpg 019522_1.jpg\n000109_0.jpg 018778_1.jpg\n000118_0.jpg 005533_1.jpg\n000129_0.jpg 007365_1.jpg\n000143_0.jpg 016246_1.jpg\n000154_0.jpg 003898_1.jpg\n000164_0.jpg 003514_1.jpg\n000174_0.jpg 016866_1.jpg\n000183_0.jpg 019332_1.jpg\n000192_0.jpg 007692_1.jpg\n000200_0.jpg 015272_1.jpg\n000209_0.jpg 013780_1.jpg\n000220_0.jpg 001360_1.jpg\n000228_0.jpg 019540_1.jpg\n000240_0.jpg 018746_1.jpg\n000248_0.jpg 001583_1.jpg\n000258_0.jpg 019037_1.jpg\n000266_0.jpg 015836_1.jpg\n000274_0.jpg 008560_1.jpg\n000284_0.jpg 019552_1.jpg\n000293_0.jpg 007415_1.jpg\n000303_0.jpg 013245_1.jpg\n000312_0.jpg 007484_1.jpg\n000320_0.jpg 019029_1.jpg\n000330_0.jpg 005053_1.jpg\n000339_0.jpg 001879_1.jpg\n000347_0.jpg 016367_1.jpg\n000356_0.jpg 014701_1.jpg\n000370_0.jpg 002397_1.jpg\n000378_0.jpg 005666_1.jpg\n000386_0.jpg 015308_1.jpg\n000395_0.jpg 011689_1.jpg\n000404_0.jpg 004922_1.jpg\n000417_0.jpg 008406_1.jpg\n000426_0.jpg 014794_1.jpg\n000437_0.jpg 000846_1.jpg\n000445_0.jpg 008645_1.jpg\n000456_0.jpg 015759_1.jpg\n000466_0.jpg 000514_1.jpg\n000477_0.jpg 006976_1.jpg\n000488_0.jpg 007986_1.jpg\n000501_0.jpg 016300_1.jpg\n000514_0.jpg 012652_1.jpg\n000523_0.jpg 017868_1.jpg\n000532_0.jpg 013214_1.jpg\n000542_0.jpg 014149_1.jpg\n000560_0.jpg 006640_1.jpg\n000568_0.jpg 004342_1.jpg\n000576_0.jpg 001192_1.jpg\n000585_0.jpg 008471_1.jpg\n000593_0.jpg 003998_1.jpg\n000602_0.jpg 012860_1.jpg\n000610_0.jpg 014979_1.jpg\n000619_0.jpg 008744_1.jpg\n000629_0.jpg 001144_1.jpg\n000639_0.jpg 008420_1.jpg\n000651_0.jpg 003422_1.jpg\n000659_0.jpg 015362_1.jpg\n000668_0.jpg 008959_1.jpg\n000676_0.jpg 010105_1.jpg\n000685_0.jpg 011944_1.jpg\n000696_0.jpg 012605_1.jpg\n000706_0.jpg 016474_1.jpg\n000716_0.jpg 006808_1.jpg\n000724_0.jpg 007243_1.jpg\n000734_0.jpg 014888_1.jpg\n000742_0.jpg 009390_1.jpg\n000750_0.jpg 013654_1.jpg\n000760_0.jpg 005368_1.jpg\n000768_0.jpg 017886_1.jpg\n000776_0.jpg 008506_1.jpg\n000786_0.jpg 007957_1.jpg\n000795_0.jpg 006859_1.jpg\n000803_0.jpg 005203_1.jpg\n000812_0.jpg 003821_1.jpg\n000827_0.jpg 002297_1.jpg\n000837_0.jpg 004710_1.jpg\n000846_0.jpg 001606_1.jpg\n000855_0.jpg 011816_1.jpg\n000867_0.jpg 002111_1.jpg\n000877_0.jpg 010543_1.jpg\n000889_0.jpg 004080_1.jpg\n000898_0.jpg 011173_1.jpg\n000907_0.jpg 004123_1.jpg\n000915_0.jpg 016049_1.jpg\n000924_0.jpg 007286_1.jpg\n000934_0.jpg 017466_1.jpg\n000943_0.jpg 010463_1.jpg\n000957_0.jpg 012322_1.jpg\n000968_0.jpg 005328_1.jpg\n000979_0.jpg 014765_1.jpg\n000988_0.jpg 016059_1.jpg\n000997_0.jpg 019224_1.jpg\n001009_0.jpg 000889_1.jpg\n001017_0.jpg 010744_1.jpg\n001028_0.jpg 004844_1.jpg\n001038_0.jpg 003721_1.jpg\n001048_0.jpg 002076_1.jpg\n001056_0.jpg 005396_1.jpg\n001064_0.jpg 017438_1.jpg\n001073_0.jpg 000724_1.jpg\n001083_0.jpg 007609_1.jpg\n001092_0.jpg 000154_1.jpg\n001101_0.jpg 018962_1.jpg\n001109_0.jpg 016951_1.jpg\n001118_0.jpg 002874_1.jpg\n001126_0.jpg 011042_1.jpg\n001136_0.jpg 019045_1.jpg\n001144_0.jpg 016172_1.jpg\n001153_0.jpg 018210_1.jpg\n001162_0.jpg 019009_1.jpg\n001173_0.jpg 007505_1.jpg\n001181_0.jpg 002103_1.jpg\n001192_0.jpg 017002_1.jpg\n001203_0.jpg 009236_1.jpg\n001211_0.jpg 014192_1.jpg\n001219_0.jpg 009995_1.jpg\n001228_0.jpg 003731_1.jpg\n001236_0.jpg 007149_1.jpg\n001245_0.jpg 010891_1.jpg\n001255_0.jpg 017091_1.jpg\n001269_0.jpg 014262_1.jpg\n001283_0.jpg 002137_1.jpg\n001292_0.jpg 013047_1.jpg\n001301_0.jpg 003813_1.jpg\n001310_0.jpg 014854_1.jpg\n001320_0.jpg 003208_1.jpg\n001328_0.jpg 011615_1.jpg\n001337_0.jpg 012174_1.jpg\n001349_0.jpg 008241_1.jpg\n001360_0.jpg 008451_1.jpg\n001369_0.jpg 019279_1.jpg\n001378_0.jpg 000466_1.jpg\n001387_0.jpg 015325_1.jpg\n001399_0.jpg 005711_1.jpg\n001408_0.jpg 002980_1.jpg\n001419_0.jpg 010337_1.jpg\n001428_0.jpg 007617_1.jpg\n001437_0.jpg 001476_1.jpg\n001448_0.jpg 016067_1.jpg\n001457_0.jpg 008804_1.jpg\n001467_0.jpg 017235_1.jpg\n001476_0.jpg 010281_1.jpg\n001485_0.jpg 018420_1.jpg\n001494_0.jpg 008928_1.jpg\n001502_0.jpg 015150_1.jpg\n001512_0.jpg 018031_1.jpg\n001520_0.jpg 012395_1.jpg\n001528_0.jpg 015688_1.jpg\n001537_0.jpg 001825_1.jpg\n001547_0.jpg 003357_1.jpg\n001559_0.jpg 011190_1.jpg\n001567_0.jpg 001567_1.jpg\n001575_0.jpg 018544_1.jpg\n001583_0.jpg 019087_1.jpg\n001594_0.jpg 013527_1.jpg\n001606_0.jpg 010115_1.jpg\n001614_0.jpg 005975_1.jpg\n001623_0.jpg 010300_1.jpg\n001635_0.jpg 019573_1.jpg\n001645_0.jpg 009342_1.jpg\n001655_0.jpg 000576_1.jpg\n001664_0.jpg 004061_1.jpg\n001673_0.jpg 008863_1.jpg\n001683_0.jpg 008206_1.jpg\n001695_0.jpg 017175_1.jpg\n001706_0.jpg 010735_1.jpg\n001715_0.jpg 006581_1.jpg\n001725_0.jpg 002892_1.jpg\n001735_0.jpg 001645_1.jpg\n001744_0.jpg 001328_1.jpg\n001756_0.jpg 002999_1.jpg\n001765_0.jpg 006834_1.jpg\n001776_0.jpg 007899_1.jpg\n001789_0.jpg 011288_1.jpg\n001798_0.jpg 001735_1.jpg\n001809_0.jpg 010995_1.jpg\n001817_0.jpg 003777_1.jpg\n001825_0.jpg 017945_1.jpg\n001834_0.jpg 005044_1.jpg\n001845_0.jpg 000395_1.jpg\n001858_0.jpg 019402_1.jpg\n001868_0.jpg 011270_1.jpg\n001879_0.jpg 004727_1.jpg\n001891_0.jpg 018348_1.jpg\n001900_0.jpg 011544_1.jpg\n001908_0.jpg 011515_1.jpg\n001919_0.jpg 001211_1.jpg\n001928_0.jpg 013155_1.jpg\n001937_0.jpg 005887_1.jpg\n001947_0.jpg 002990_1.jpg\n001957_0.jpg 002749_1.jpg\n001966_0.jpg 007932_1.jpg\n001974_0.jpg 008101_1.jpg\n001983_0.jpg 004423_1.jpg\n001991_0.jpg 004981_1.jpg\n002000_0.jpg 016628_1.jpg\n002011_0.jpg 005440_1.jpg\n002022_0.jpg 017204_1.jpg\n002031_0.jpg 008967_1.jpg\n002039_0.jpg 018769_1.jpg\n002049_0.jpg 003124_1.jpg\n002059_0.jpg 008092_1.jpg\n002068_0.jpg 010415_1.jpg\n002076_0.jpg 000716_1.jpg\n002085_0.jpg 001236_1.jpg\n002093_0.jpg 018971_1.jpg\n002103_0.jpg 017070_1.jpg\n002111_0.jpg 017012_1.jpg\n002119_0.jpg 016445_1.jpg\n002128_0.jpg 005360_1.jpg\n002137_0.jpg 015579_1.jpg\n002147_0.jpg 005603_1.jpg\n002156_0.jpg 018431_1.jpg\n002169_0.jpg 009094_1.jpg\n002180_0.jpg 019066_1.jpg\n002191_0.jpg 009215_1.jpg\n002200_0.jpg 008632_1.jpg\n002208_0.jpg 009435_1.jpg\n002217_0.jpg 002119_1.jpg\n002226_0.jpg 016145_1.jpg\n002236_0.jpg 006213_1.jpg\n002248_0.jpg 012338_1.jpg\n002259_0.jpg 013391_1.jpg\n002268_0.jpg 000760_1.jpg\n002276_0.jpg 003338_1.jpg\n002287_0.jpg 018569_1.jpg\n002297_0.jpg 013883_1.jpg\n002307_0.jpg 014416_1.jpg\n002317_0.jpg 017243_1.jpg\n002327_0.jpg 015724_1.jpg\n002337_0.jpg 002439_1.jpg\n002345_0.jpg 015607_1.jpg\n002353_0.jpg 016653_1.jpg\n002362_0.jpg 018401_1.jpg\n002371_0.jpg 005877_1.jpg\n002379_0.jpg 011240_1.jpg\n002388_0.jpg 005081_1.jpg\n002397_0.jpg 009496_1.jpg\n002405_0.jpg 018496_1.jpg\n002413_0.jpg 008023_1.jpg\n002422_0.jpg 015125_1.jpg\n002431_0.jpg 007797_1.jpg\n002439_0.jpg 004185_1.jpg\n002447_0.jpg 000240_1.jpg\n002455_0.jpg 011891_1.jpg\n002464_0.jpg 010851_1.jpg\n002474_0.jpg 004268_1.jpg\n002486_0.jpg 017348_1.jpg\n002494_0.jpg 013836_1.jpg\n002502_0.jpg 004333_1.jpg\n002511_0.jpg 000020_1.jpg\n002523_0.jpg 009114_1.jpg\n002533_0.jpg 019340_1.jpg\n002545_0.jpg 004006_1.jpg\n002553_0.jpg 012763_1.jpg\n002561_0.jpg 012644_1.jpg\n002575_0.jpg 012996_1.jpg\n002589_0.jpg 013891_1.jpg\n002599_0.jpg 005648_1.jpg\n002610_0.jpg 015465_1.jpg\n002620_0.jpg 003749_1.jpg\n002628_0.jpg 016739_1.jpg\n002639_0.jpg 000143_1.jpg\n002651_0.jpg 016636_1.jpg\n002659_0.jpg 003935_1.jpg\n002670_0.jpg 010710_1.jpg\n002681_0.jpg 000312_1.jpg\n002691_0.jpg 015256_1.jpg\n002699_0.jpg 001118_1.jpg\n002712_0.jpg 013583_1.jpg\n002720_0.jpg 019514_1.jpg\n002728_0.jpg 001991_1.jpg\n002739_0.jpg 005952_1.jpg\n002749_0.jpg 011523_1.jpg\n002758_0.jpg 012256_1.jpg\n002769_0.jpg 010806_1.jpg\n002778_0.jpg 001512_1.jpg\n002787_0.jpg 002787_1.jpg\n002795_0.jpg 018138_1.jpg\n002803_0.jpg 016238_1.jpg\n002812_0.jpg 004497_1.jpg\n002820_0.jpg 011761_1.jpg\n002828_0.jpg 000968_1.jpg\n002839_0.jpg 009178_1.jpg\n002852_0.jpg 007261_1.jpg\n002865_0.jpg 004167_1.jpg\n002874_0.jpg 008429_1.jpg\n002883_0.jpg 009141_1.jpg\n002892_0.jpg 016290_1.jpg\n002901_0.jpg 015627_1.jpg\n002911_0.jpg 013355_1.jpg\n002922_0.jpg 012975_1.jpg\n002930_0.jpg 016002_1.jpg\n002942_0.jpg 015371_1.jpg\n002952_0.jpg 011381_1.jpg\n002962_0.jpg 012553_1.jpg\n002970_0.jpg 016593_1.jpg\n002980_0.jpg 004366_1.jpg\n002990_0.jpg 003684_1.jpg\n002999_0.jpg 018393_1.jpg\n003008_0.jpg 007455_1.jpg\n003016_0.jpg 012811_1.jpg\n003024_0.jpg 001245_1.jpg\n003032_0.jpg 005797_1.jpg\n003041_0.jpg 001673_1.jpg\n003049_0.jpg 008822_1.jpg\n003060_0.jpg 002720_1.jpg\n003069_0.jpg 013680_1.jpg\n003077_0.jpg 000639_1.jpg\n003086_0.jpg 006057_1.jpg\n003094_0.jpg 018452_1.jpg\n003107_0.jpg 002795_1.jpg\n003115_0.jpg 007772_1.jpg\n003124_0.jpg 010591_1.jpg\n003133_0.jpg 010125_1.jpg\n003142_0.jpg 011068_1.jpg\n003150_0.jpg 011736_1.jpg\n003158_0.jpg 012350_1.jpg\n003167_0.jpg 006606_1.jpg\n003179_0.jpg 010937_1.jpg\n003187_0.jpg 011212_1.jpg\n003195_0.jpg 009282_1.jpg\n003208_0.jpg 001255_1.jpg\n003218_0.jpg 016541_1.jpg\n003226_0.jpg 010177_1.jpg\n003236_0.jpg 005251_1.jpg\n003250_0.jpg 017410_1.jpg\n003259_0.jpg 002639_1.jpg\n003270_0.jpg 017796_1.jpg\n003280_0.jpg 017526_1.jpg\n003291_0.jpg 011708_1.jpg\n003303_0.jpg 003491_1.jpg\n003311_0.jpg 013827_1.jpg\n003319_0.jpg 015192_1.jpg\n003328_0.jpg 012273_1.jpg\n003338_0.jpg 010567_1.jpg\n003349_0.jpg 001101_1.jpg\n003357_0.jpg 013374_1.jpg\n003367_0.jpg 002353_1.jpg\n003376_0.jpg 014006_1.jpg\n003386_0.jpg 018479_1.jpg\n003395_0.jpg 010726_1.jpg\n003404_0.jpg 015844_1.jpg\n003414_0.jpg 000855_1.jpg\n003422_0.jpg 000456_1.jpg\n003434_0.jpg 010718_1.jpg\n003443_0.jpg 003945_1.jpg\n003451_0.jpg 011336_1.jpg\n003461_0.jpg 004814_1.jpg\n003472_0.jpg 006470_1.jpg\n003481_0.jpg 016726_1.jpg\n003491_0.jpg 017298_1.jpg\n003501_0.jpg 010270_1.jpg\n003514_0.jpg 018608_1.jpg\n003526_0.jpg 001858_1.jpg\n003535_0.jpg 009852_1.jpg\n003545_0.jpg 002085_1.jpg\n003555_0.jpg 013564_1.jpg\n003565_0.jpg 005525_1.jpg\n003578_0.jpg 013007_1.jpg\n003591_0.jpg 005720_1.jpg\n003600_0.jpg 015938_1.jpg\n003611_0.jpg 013715_1.jpg\n003621_0.jpg 000274_1.jpg\n003632_0.jpg 000585_1.jpg\n003641_0.jpg 014876_1.jpg\n003649_0.jpg 019140_1.jpg\n003658_0.jpg 016465_1.jpg\n003668_0.jpg 010234_1.jpg\n003676_0.jpg 007601_1.jpg\n003684_0.jpg 006381_1.jpg\n003693_0.jpg 015590_1.jpg\n003703_0.jpg 011883_1.jpg\n003712_0.jpg 014621_1.jpg\n003721_0.jpg 001126_1.jpg\n003731_0.jpg 015715_1.jpg\n003739_0.jpg 004804_1.jpg\n003749_0.jpg 014140_1.jpg\n003760_0.jpg 008397_1.jpg\n003768_0.jpg 015697_1.jpg\n003777_0.jpg 000082_1.jpg\n003787_0.jpg 001966_1.jpg\n003795_0.jpg 003414_1.jpg\n003803_0.jpg 011916_1.jpg\n003813_0.jpg 014612_1.jpg\n003821_0.jpg 014292_1.jpg\n003833_0.jpg 008326_1.jpg\n003842_0.jpg 012219_1.jpg\n003852_0.jpg 011466_1.jpg\n003861_0.jpg 011962_1.jpg\n003874_0.jpg 014349_1.jpg\n003882_0.jpg 017583_1.jpg\n003890_0.jpg 018921_1.jpg\n003898_0.jpg 004196_1.jpg\n003915_0.jpg 013688_1.jpg\n003925_0.jpg 004397_1.jpg\n003935_0.jpg 012889_1.jpg\n003945_0.jpg 000898_1.jpg\n003953_0.jpg 002379_1.jpg\n003963_0.jpg 008160_1.jpg\n003972_0.jpg 012694_1.jpg\n003981_0.jpg 008307_1.jpg\n003990_0.jpg 004636_1.jpg\n003998_0.jpg 007405_1.jpg\n004006_0.jpg 001725_1.jpg\n004015_0.jpg 015785_1.jpg\n004023_0.jpg 000488_1.jpg\n004033_0.jpg 010583_1.jpg\n004042_0.jpg 004580_1.jpg\n004051_0.jpg 000028_1.jpg\n004061_0.jpg 012531_1.jpg\n004071_0.jpg 012838_1.jpg\n004080_0.jpg 012006_1.jpg\n004091_0.jpg 002769_1.jpg\n004099_0.jpg 000320_1.jpg\n004107_0.jpg 005317_1.jpg\n004115_0.jpg 009949_1.jpg\n004123_0.jpg 008196_1.jpg\n004131_0.jpg 013199_1.jpg\n004139_0.jpg 017814_1.jpg\n004148_0.jpg 017555_1.jpg\n004158_0.jpg 017130_1.jpg\n004167_0.jpg 005388_1.jpg\n004177_0.jpg 015133_1.jpg\n004185_0.jpg 000501_1.jpg\n004196_0.jpg 004158_1.jpg\n004210_0.jpg 008663_1.jpg\n004220_0.jpg 014332_1.jpg\n004234_0.jpg 009766_1.jpg\n004243_0.jpg 010454_1.jpg\n004252_0.jpg 004553_1.jpg\n004260_0.jpg 013899_1.jpg\n004268_0.jpg 017474_1.jpg\n004277_0.jpg 017545_1.jpg\n004285_0.jpg 008110_1.jpg\n004294_0.jpg 015560_1.jpg\n004304_0.jpg 009689_1.jpg\n004314_0.jpg 017896_1.jpg\n004325_0.jpg 003600_1.jpg\n004333_0.jpg 007579_1.jpg\n004342_0.jpg 018460_1.jpg\n004357_0.jpg 001559_1.jpg\n004366_0.jpg 002812_1.jpg\n004378_0.jpg 008367_1.jpg\n004387_0.jpg 010244_1.jpg\n004397_0.jpg 008672_1.jpg\n004415_0.jpg 002000_1.jpg\n004423_0.jpg 011034_1.jpg\n004431_0.jpg 001181_1.jpg\n004441_0.jpg 009545_1.jpg\n004451_0.jpg 007789_1.jpg\n004462_0.jpg 004015_1.jpg\n004470_0.jpg 008900_1.jpg\n004478_0.jpg 011015_1.jpg\n004487_0.jpg 003349_1.jpg\n004497_0.jpg 015209_1.jpg\n004508_0.jpg 009709_1.jpg\n004516_0.jpg 001974_1.jpg\n004529_0.jpg 005995_1.jpg\n004537_0.jpg 019429_1.jpg\n004545_0.jpg 014396_1.jpg\n004553_0.jpg 017400_1.jpg\n004561_0.jpg 019174_1.jpg\n004572_0.jpg 002180_1.jpg\n004580_0.jpg 019252_1.jpg\n004590_0.jpg 011833_1.jpg\n004598_0.jpg 014939_1.jpg\n004609_0.jpg 013698_1.jpg\n004620_0.jpg 002464_1.jpg\n004628_0.jpg 011825_1.jpg\n004636_0.jpg 013806_1.jpg\n004646_0.jpg 001109_1.jpg\n004657_0.jpg 000258_1.jpg\n004666_0.jpg 002628_1.jpg\n004674_0.jpg 007732_1.jpg\n004683_0.jpg 012330_1.jpg\n004691_0.jpg 019287_1.jpg\n004702_0.jpg 010869_1.jpg\n004710_0.jpg 005022_1.jpg\n004718_0.jpg 017496_1.jpg\n004727_0.jpg 008771_1.jpg\n004737_0.jpg 000248_1.jpg\n004745_0.jpg 014591_1.jpg\n004758_0.jpg 001715_1.jpg\n004766_0.jpg 004628_1.jpg\n004774_0.jpg 005120_1.jpg\n004785_0.jpg 000445_1.jpg\n004795_0.jpg 005262_1.jpg\n004804_0.jpg 013907_1.jpg\n004814_0.jpg 002268_1.jpg\n004823_0.jpg 000183_1.jpg\n004833_0.jpg 014014_1.jpg\n004844_0.jpg 015497_1.jpg\n004854_0.jpg 018047_1.jpg\n004867_0.jpg 016777_1.jpg\n004878_0.jpg 013338_1.jpg\n004888_0.jpg 006429_1.jpg\n004896_0.jpg 015803_1.jpg\n004904_0.jpg 012072_1.jpg\n004912_0.jpg 009605_1.jpg\n004922_0.jpg 000934_1.jpg\n004933_0.jpg 010381_1.jpg\n004941_0.jpg 016533_1.jpg\n004949_0.jpg 004451_1.jpg\n004957_0.jpg 006959_1.jpg\n004965_0.jpg 018532_1.jpg\n004981_0.jpg 002820_1.jpg\n004989_0.jpg 010261_1.jpg\n004997_0.jpg 004933_1.jpg\n005006_0.jpg 004415_1.jpg\n005014_0.jpg 008891_1.jpg\n005022_0.jpg 009780_1.jpg\n005031_0.jpg 003218_1.jpg\n005044_0.jpg 012944_1.jpg\n005053_0.jpg 012127_1.jpg\n005062_0.jpg 015767_1.jpg\n005072_0.jpg 018826_1.jpg\n005081_0.jpg 013410_1.jpg\n005091_0.jpg 012404_1.jpg\n005101_0.jpg 007304_1.jpg\n005110_0.jpg 005349_1.jpg\n005120_0.jpg 003842_1.jpg\n005131_0.jpg 007473_1.jpg\n005145_0.jpg 003693_1.jpg\n005153_0.jpg 006658_1.jpg\n005166_0.jpg 007446_1.jpg\n005175_0.jpg 007434_1.jpg\n005186_0.jpg 013948_1.jpg\n005195_0.jpg 002561_1.jpg\n005203_0.jpg 016888_1.jpg\n005213_0.jpg 015264_1.jpg\n005222_0.jpg 007065_1.jpg\n005231_0.jpg 002431_1.jpg\n005241_0.jpg 006789_1.jpg\n005251_0.jpg 014314_1.jpg\n005262_0.jpg 018192_1.jpg\n005271_0.jpg 011954_1.jpg\n005285_0.jpg 006285_1.jpg\n005298_0.jpg 015280_1.jpg\n005306_0.jpg 018681_1.jpg\n005317_0.jpg 011436_1.jpg\n005328_0.jpg 000997_1.jpg\n005336_0.jpg 000404_1.jpg\n005349_0.jpg 006717_1.jpg\n005360_0.jpg 010967_1.jpg\n005368_0.jpg 005379_1.jpg\n005379_0.jpg 016962_1.jpg\n005388_0.jpg 006137_1.jpg\n005396_0.jpg 012545_1.jpg\n005404_0.jpg 013572_1.jpg\n005413_0.jpg 005413_1.jpg\n005422_0.jpg 018470_1.jpg\n005430_0.jpg 004537_1.jpg\n005440_0.jpg 015825_1.jpg\n005449_0.jpg 017904_1.jpg\n005457_0.jpg 017315_1.jpg\n005470_0.jpg 010599_1.jpg\n005480_0.jpg 000988_1.jpg\n005489_0.jpg 007518_1.jpg\n005501_0.jpg 008784_1.jpg\n005510_0.jpg 004294_1.jpg\n005525_0.jpg 006339_1.jpg\n005533_0.jpg 016662_1.jpg\n005542_0.jpg 007345_1.jpg\n005552_0.jpg 012505_1.jpg\n005562_0.jpg 007864_1.jpg\n005570_0.jpg 010481_1.jpg\n005578_0.jpg 019454_1.jpg\n005586_0.jpg 019494_1.jpg\n005594_0.jpg 006016_1.jpg\n005603_0.jpg 017667_1.jpg\n005614_0.jpg 019110_1.jpg\n005622_0.jpg 010947_1.jpg\n005631_0.jpg 019384_1.jpg\n005648_0.jpg 018946_1.jpg\n005657_0.jpg 003443_1.jpg\n005666_0.jpg 016281_1.jpg\n005675_0.jpg 001301_1.jpg\n005683_0.jpg 012099_1.jpg\n005691_0.jpg 011355_1.jpg\n005702_0.jpg 001798_1.jpg\n005711_0.jpg 010096_1.jpg\n005720_0.jpg 009758_1.jpg\n005728_0.jpg 014114_1.jpg\n005737_0.jpg 012063_1.jpg\n005747_0.jpg 004529_1.jpg\n005755_0.jpg 014370_1.jpg\n005763_0.jpg 007834_1.jpg\n005771_0.jpg 018069_1.jpg\n005784_0.jpg 018700_1.jpg\n005797_0.jpg 015881_1.jpg\n005809_0.jpg 010371_1.jpg\n005820_0.jpg 016899_1.jpg\n005828_0.jpg 002049_1.jpg\n005837_0.jpg 016183_1.jpg\n005846_0.jpg 008006_1.jpg\n005857_0.jpg 010628_1.jpg\n005866_0.jpg 013469_1.jpg\n005877_0.jpg 010021_1.jpg\n005887_0.jpg 013593_1.jpg\n005898_0.jpg 000057_1.jpg\n005908_0.jpg 000867_1.jpg\n005920_0.jpg 013327_1.jpg\n005929_0.jpg 011401_1.jpg\n005940_0.jpg 000593_1.jpg\n005952_0.jpg 014201_1.jpg\n005963_0.jpg 009922_1.jpg\n005975_0.jpg 010431_1.jpg\n005984_0.jpg 007710_1.jpg\n005995_0.jpg 001083_1.jpg\n006004_0.jpg 018954_1.jpg\n006016_0.jpg 010691_1.jpg\n006026_0.jpg 003641_1.jpg\n006036_0.jpg 000750_1.jpg\n006045_0.jpg 008681_1.jpg\n006057_0.jpg 010910_1.jpg\n006065_0.jpg 011415_1.jpg\n006073_0.jpg 010840_1.jpg\n006081_0.jpg 008908_1.jpg\n006090_0.jpg 007997_1.jpg\n006099_0.jpg 015900_1.jpg\n006110_0.jpg 009034_1.jpg\n006118_0.jpg 015861_1.jpg\n006129_0.jpg 006165_1.jpg\n006137_0.jpg 008379_1.jpg\n006145_0.jpg 016379_1.jpg\n006155_0.jpg 016878_1.jpg\n006165_0.jpg 010040_1.jpg\n006173_0.jpg 001776_1.jpg\n006186_0.jpg 007891_1.jpg\n006194_0.jpg 015969_1.jpg\n006203_0.jpg 005820_1.jpg\n006213_0.jpg 014900_1.jpg\n006224_0.jpg 016748_1.jpg\n006232_0.jpg 010636_1.jpg\n006241_0.jpg 018327_1.jpg\n006250_0.jpg 013097_1.jpg\n006260_0.jpg 007103_1.jpg\n006268_0.jpg 007073_1.jpg\n006276_0.jpg 011128_1.jpg\n006285_0.jpg 019319_1.jpg\n006296_0.jpg 002952_1.jpg\n006304_0.jpg 002371_1.jpg\n006313_0.jpg 014553_1.jpg\n006321_0.jpg 014489_1.jpg\n006329_0.jpg 005866_1.jpg\n006339_0.jpg 019368_1.jpg\n006347_0.jpg 006402_1.jpg\n006358_0.jpg 002422_1.jpg\n006371_0.jpg 011842_1.jpg\n006381_0.jpg 019446_1.jpg\n006393_0.jpg 012015_1.jpg\n006402_0.jpg 013382_1.jpg\n006410_0.jpg 000038_1.jpg\n006419_0.jpg 014959_1.jpg\n006429_0.jpg 018837_1.jpg\n006440_0.jpg 017750_1.jpg\n006452_0.jpg 003259_1.jpg\n006462_0.jpg 018009_1.jpg\n006470_0.jpg 013309_1.jpg\n006478_0.jpg 014712_1.jpg\n006486_0.jpg 000228_1.jpg\n006494_0.jpg 005614_1.jpg\n006502_0.jpg 010535_1.jpg\n006512_0.jpg 007741_1.jpg\n006523_0.jpg 015990_1.jpg\n006535_0.jpg 011231_1.jpg\n006545_0.jpg 016584_1.jpg\n006555_0.jpg 015105_1.jpg\n006563_0.jpg 001494_1.jpg\n006571_0.jpg 007376_1.jpg\n006581_0.jpg 003404_1.jpg\n006589_0.jpg 008346_1.jpg\n006597_0.jpg 008014_1.jpg\n006606_0.jpg 002511_1.jpg\n006620_0.jpg 017196_1.jpg\n006628_0.jpg 009084_1.jpg\n006640_0.jpg 014086_1.jpg\n006649_0.jpg 004508_1.jpg\n006658_0.jpg 014131_1.jpg\n006670_0.jpg 000979_1.jpg\n006678_0.jpg 002523_1.jpg\n006688_0.jpg 011988_1.jpg\n006697_0.jpg 018200_1.jpg\n006709_0.jpg 017840_1.jpg\n006717_0.jpg 018524_1.jpg\n006728_0.jpg 013418_1.jpg\n006738_0.jpg 011457_1.jpg\n006748_0.jpg 016031_1.jpg\n006757_0.jpg 001520_1.jpg\n006768_0.jpg 008172_1.jpg\n006776_0.jpg 000651_1.jpg\n006789_0.jpg 017110_1.jpg\n006799_0.jpg 001292_1.jpg\n006808_0.jpg 002128_1.jpg\n006817_0.jpg 004357_1.jpg\n006825_0.jpg 012245_1.jpg\n006834_0.jpg 014324_1.jpg\n006842_0.jpg 009635_1.jpg\n006850_0.jpg 012166_1.jpg\n006859_0.jpg 003086_1.jpg\n006868_0.jpg 010859_1.jpg\n006881_0.jpg 004646_1.jpg\n006889_0.jpg 014507_1.jpg\n006897_0.jpg 012849_1.jpg\n006908_0.jpg 006535_1.jpg\n006916_0.jpg 000696_1.jpg\n006928_0.jpg 017290_1.jpg\n006937_0.jpg 008276_1.jpg\n006945_0.jpg 009197_1.jpg\n006959_0.jpg 013706_1.jpg\n006968_0.jpg 015908_1.jpg\n006976_0.jpg 018929_1.jpg\n006984_0.jpg 005631_1.jpg\n006992_0.jpg 000837_1.jpg\n007003_0.jpg 010168_1.jpg\n007013_0.jpg 006984_1.jpg\n007021_0.jpg 006321_1.jpg\n007029_0.jpg 007808_1.jpg\n007037_0.jpg 011278_1.jpg\n007045_0.jpg 008496_1.jpg\n007056_0.jpg 016943_1.jpg\n007065_0.jpg 015381_1.jpg\n007073_0.jpg 007013_1.jpg\n007086_0.jpg 017264_1.jpg\n007094_0.jpg 004210_1.jpg\n007103_0.jpg 011585_1.jpg\n007113_0.jpg 016992_1.jpg\n007121_0.jpg 009263_1.jpg\n007129_0.jpg 000220_1.jpg\n007138_0.jpg 017428_1.jpg\n007149_0.jpg 010816_1.jpg\n007159_0.jpg 018227_1.jpg\n007168_0.jpg 002589_1.jpg\n007180_0.jpg 011300_1.jpg\n007188_0.jpg 000943_1.jpg\n007199_0.jpg 016358_1.jpg\n007212_0.jpg 007094_1.jpg\n007221_0.jpg 002962_1.jpg\n007232_0.jpg 005570_1.jpg\n007243_0.jpg 004888_1.jpg\n007252_0.jpg 003803_1.jpg\n007261_0.jpg 006850_1.jpg\n007269_0.jpg 017639_1.jpg\n007278_0.jpg 001369_1.jpg\n007286_0.jpg 009131_1.jpg\n007294_0.jpg 004774_1.jpg\n007304_0.jpg 003395_1.jpg\n007313_0.jpg 014184_1.jpg\n007324_0.jpg 008847_1.jpg\n007336_0.jpg 001537_1.jpg\n007345_0.jpg 015979_1.jpg\n007357_0.jpg 019561_1.jpg\n007365_0.jpg 005828_1.jpg\n007376_0.jpg 010078_1.jpg\n007388_0.jpg 006945_1.jpg\n007397_0.jpg 012236_1.jpg\n007405_0.jpg 015732_1.jpg\n007415_0.jpg 009426_1.jpg\n007423_0.jpg 012879_1.jpg\n007434_0.jpg 012597_1.jpg\n007446_0.jpg 015317_1.jpg\n007455_0.jpg 009274_1.jpg\n007463_0.jpg 003016_1.jpg\n007473_0.jpg 013725_1.jpg\n007484_0.jpg 003501_1.jpg\n007495_0.jpg 005908_1.jpg\n007505_0.jpg 011970_1.jpg\n007518_0.jpg 005784_1.jpg\n007526_0.jpg 015550_1.jpg\n007536_0.jpg 015853_1.jpg\n007549_0.jpg 015420_1.jpg\n007561_0.jpg 013036_1.jpg\n007570_0.jpg 005306_1.jpg\n007579_0.jpg 006628_1.jpg\n007592_0.jpg 001623_1.jpg\n007601_0.jpg 014463_1.jpg\n007609_0.jpg 009525_1.jpg\n007617_0.jpg 015085_1.jpg\n007628_0.jpg 000074_1.jpg\n007639_0.jpg 014477_1.jpg\n007648_0.jpg 004099_1.jpg\n007656_0.jpg 008138_1.jpg\n007664_0.jpg 002217_1.jpg\n007672_0.jpg 016550_1.jpg\n007681_0.jpg 004833_1.jpg\n007692_0.jpg 003852_1.jpg\n007702_0.jpg 015291_1.jpg\n007710_0.jpg 011050_1.jpg\n007719_0.jpg 005963_1.jpg\n007732_0.jpg 008715_1.jpg\n007741_0.jpg 019302_1.jpg\n007750_0.jpg 018690_1.jpg\n007762_0.jpg 006597_1.jpg\n007772_0.jpg 002691_1.jpg\n007781_0.jpg 002942_1.jpg\n007789_0.jpg 017370_1.jpg\n007797_0.jpg 006916_1.jpg\n007808_0.jpg 014844_1.jpg\n007817_0.jpg 015916_1.jpg\n007826_0.jpg 004766_1.jpg\n007834_0.jpg 011447_1.jpg\n007848_0.jpg 008051_1.jpg\n007856_0.jpg 000129_1.jpg\n007864_0.jpg 001017_1.jpg\n007874_0.jpg 004033_1.jpg\n007882_0.jpg 003890_1.jpg\n007891_0.jpg 008696_1.jpg\n007899_0.jpg 002317_1.jpg\n007914_0.jpg 019130_1.jpg\n007923_0.jpg 000417_1.jpg\n007932_0.jpg 011670_1.jpg\n007940_0.jpg 004441_1.jpg\n007949_0.jpg 018018_1.jpg\n007957_0.jpg 002599_1.jpg\n007966_0.jpg 017761_1.jpg\n007974_0.jpg 000523_1.jpg\n007986_0.jpg 011560_1.jpg\n007997_0.jpg 007592_1.jpg\n008006_0.jpg 004718_1.jpg\n008014_0.jpg 015006_1.jpg\n008023_0.jpg 000803_1.jpg\n008032_0.jpg 003167_1.jpg\n008041_0.jpg 006992_1.jpg\n008051_0.jpg 006697_1.jpg\n008062_0.jpg 009008_1.jpg\n008071_0.jpg 014805_1.jpg\n008080_0.jpg 003578_1.jpg\n008092_0.jpg 007113_1.jpg\n008101_0.jpg 011596_1.jpg\n008110_0.jpg 007628_1.jpg\n008118_0.jpg 005231_1.jpg\n008126_0.jpg 014816_1.jpg\n008138_0.jpg 000266_1.jpg\n008151_0.jpg 011392_1.jpg\n008160_0.jpg 013127_1.jpg\n008172_0.jpg 015026_1.jpg\n008180_0.jpg 009482_1.jpg\n008188_0.jpg 008938_1.jpg\n008196_0.jpg 004737_1.jpg\n008206_0.jpg 002865_1.jpg\n008214_0.jpg 018902_1.jpg\n008224_0.jpg 012626_1.jpg\n008233_0.jpg 002620_1.jpg\n008241_0.jpg 007826_1.jpg\n008250_0.jpg 002486_1.jpg\n008258_0.jpg 003158_1.jpg\n008266_0.jpg 015571_1.jpg\n008276_0.jpg 009418_1.jpg\n008285_0.jpg 004965_1.jpg\n008295_0.jpg 017678_1.jpg\n008307_0.jpg 001428_1.jpg\n008317_0.jpg 011577_1.jpg\n008326_0.jpg 006881_1.jpg\n008334_0.jpg 014863_1.jpg\n008346_0.jpg 014341_1.jpg\n008354_0.jpg 007914_1.jpg\n008367_0.jpg 004904_1.jpg\n008379_0.jpg 004957_1.jpg\n008389_0.jpg 004878_1.jpg\n008397_0.jpg 016786_1.jpg\n008406_0.jpg 015428_1.jpg\n008420_0.jpg 001448_1.jpg\n008429_0.jpg 005747_1.jpg\n008443_0.jpg 011087_1.jpg\n008451_0.jpg 000619_1.jpg\n008462_0.jpg 008224_1.jpg\n008471_0.jpg 012743_1.jpg\n008479_0.jpg 006129_1.jpg\n008487_0.jpg 001378_1.jpg\n008496_0.jpg 015141_1.jpg\n008506_0.jpg 006110_1.jpg\n008515_0.jpg 017630_1.jpg\n008523_0.jpg 002236_1.jpg\n008533_0.jpg 017457_1.jpg\n008542_0.jpg 010620_1.jpg\n008551_0.jpg 016799_1.jpg\n008560_0.jpg 016317_1.jpg\n008570_0.jpg 007648_1.jpg\n008580_0.jpg 018219_1.jpg\n008590_0.jpg 003179_1.jpg\n008598_0.jpg 010527_1.jpg\n008608_0.jpg 016716_1.jpg\n008616_0.jpg 010206_1.jpg\n008624_0.jpg 007664_1.jpg\n008632_0.jpg 019411_1.jpg\n008645_0.jpg 014434_1.jpg\n008653_0.jpg 018710_1.jpg\n008663_0.jpg 007397_1.jpg\n008672_0.jpg 010662_1.jpg\n008681_0.jpg 005552_1.jpg\n008696_0.jpg 014302_1.jpg\n008706_0.jpg 011097_1.jpg\n008715_0.jpg 001437_1.jpg\n008725_0.jpg 004304_1.jpg\n008736_0.jpg 012734_1.jpg\n008744_0.jpg 018796_1.jpg\n008753_0.jpg 003472_1.jpg\n008763_0.jpg 007856_1.jpg\n008771_0.jpg 005186_1.jpg\n008784_0.jpg 006329_1.jpg\n008793_0.jpg 014240_1.jpg\n008804_0.jpg 013490_1.jpg\n008813_0.jpg 011347_1.jpg\n008822_0.jpg 002553_1.jpg\n008830_0.jpg 017118_1.jpg\n008839_0.jpg 013989_1.jpg\n008847_0.jpg 012754_1.jpg\n008855_0.jpg 005241_1.jpg\n008863_0.jpg 018848_1.jpg\n008871_0.jpg 006738_1.jpg\n008881_0.jpg 002739_1.jpg\n008891_0.jpg 015816_1.jpg\n008900_0.jpg 019376_1.jpg\n008908_0.jpg 009975_1.jpg\n008919_0.jpg 011798_1.jpg\n008928_0.jpg 001337_1.jpg\n008938_0.jpg 009074_1.jpg\n008949_0.jpg 002039_1.jpg\n008959_0.jpg 002681_1.jpg\n008967_0.jpg 012033_1.jpg\n008976_0.jpg 006440_1.jpg\n008986_0.jpg 015524_1.jpg\n008997_0.jpg 003226_1.jpg\n009008_0.jpg 004691_1.jpg\n009016_0.jpg 013855_1.jpg\n009024_0.jpg 014379_1.jpg\n009034_0.jpg 012385_1.jpg\n009042_0.jpg 000685_1.jpg\n009054_0.jpg 015403_1.jpg\n009064_0.jpg 017449_1.jpg\n009074_0.jpg 018112_1.jpg\n009084_0.jpg 014220_1.jpg\n009094_0.jpg 014076_1.jpg\n009106_0.jpg 016039_1.jpg\n009114_0.jpg 010653_1.jpg\n009123_0.jpg 001756_1.jpg\n009131_0.jpg 003953_1.jpg\n009141_0.jpg 012917_1.jpg\n009149_0.jpg 015476_1.jpg\n009159_0.jpg 010762_1.jpg\n009169_0.jpg 017648_1.jpg\n009178_0.jpg 008919_1.jpg\n009189_0.jpg 007463_1.jpg\n009197_0.jpg 006065_1.jpg\n009205_0.jpg 014537_1.jpg\n009215_0.jpg 007252_1.jpg\n009228_0.jpg 007212_1.jpg\n009236_0.jpg 017622_1.jpg\n009246_0.jpg 007232_1.jpg\n009254_0.jpg 010918_1.jpg\n009263_0.jpg 016094_1.jpg\n009274_0.jpg 007221_1.jpg\n009282_0.jpg 005691_1.jpg\n009291_0.jpg 002345_1.jpg\n009300_0.jpg 009300_1.jpg\n009312_0.jpg 014629_1.jpg\n009323_0.jpg 010133_1.jpg\n009332_0.jpg 016697_1.jpg\n009342_0.jpg 016262_1.jpg\n009356_0.jpg 011568_1.jpg\n009365_0.jpg 003115_1.jpg\n009374_0.jpg 008542_1.jpg\n009382_0.jpg 010789_1.jpg\n009390_0.jpg 013743_1.jpg\n009399_0.jpg 009374_1.jpg\n009409_0.jpg 011106_1.jpg\n009418_0.jpg 013620_1.jpg\n009426_0.jpg 006817_1.jpg\n009435_0.jpg 012702_1.jpg\n009446_0.jpg 002575_1.jpg\n009454_0.jpg 017730_1.jpg\n009462_0.jpg 016831_1.jpg\n009474_0.jpg 006194_1.jpg\n009482_0.jpg 007086_1.jpg\n009496_0.jpg 001064_1.jpg\n009505_0.jpg 011004_1.jpg\n009515_0.jpg 014968_1.jpg\n009525_0.jpg 002259_1.jpg\n009537_0.jpg 003545_1.jpg\n009545_0.jpg 002147_1.jpg\n009561_0.jpg 003833_1.jpg\n009571_0.jpg 007966_1.jpg\n009586_0.jpg 017877_1.jpg\n009595_0.jpg 007003_1.jpg\n009605_0.jpg 016220_1.jpg\n009619_0.jpg 017306_1.jpg\n009627_0.jpg 010644_1.jpg\n009635_0.jpg 008295_1.jpg\n009643_0.jpg 018318_1.jpg\n009651_0.jpg 013173_1.jpg\n009660_0.jpg 010445_1.jpg\n009668_0.jpg 002068_1.jpg\n009679_0.jpg 003187_1.jpg\n009689_0.jpg 011058_1.jpg\n009699_0.jpg 005657_1.jpg\n009709_0.jpg 009882_1.jpg\n009722_0.jpg 009228_1.jpg\n009730_0.jpg 015794_1.jpg\n009741_0.jpg 009399_1.jpg\n009758_0.jpg 013555_1.jpg\n009766_0.jpg 013265_1.jpg\n009780_0.jpg 013863_1.jpg\n009790_0.jpg 001283_1.jpg\n009799_0.jpg 018755_1.jpg\n009809_0.jpg 006393_1.jpg\n009822_0.jpg 009903_1.jpg\n009832_0.jpg 004148_1.jpg\n009843_0.jpg 018561_1.jpg\n009852_0.jpg 018059_1.jpg\n009860_0.jpg 010575_1.jpg\n009872_0.jpg 008266_1.jpg\n009882_0.jpg 015615_1.jpg\n009894_0.jpg 006250_1.jpg\n009903_0.jpg 014232_1.jpg\n009912_0.jpg 015707_1.jpg\n009922_0.jpg 016812_1.jpg\n009932_0.jpg 007672_1.jpg\n009941_0.jpg 012785_1.jpg\n009949_0.jpg 000924_1.jpg\n009959_0.jpg 009016_1.jpg\n009967_0.jpg 008976_1.jpg\n009975_0.jpg 017688_1.jpg\n009984_0.jpg 016426_1.jpg\n009995_0.jpg 003376_1.jpg\n010003_0.jpg 015637_1.jpg\n010011_0.jpg 014498_1.jpg\n010021_0.jpg 018236_1.jpg\n010031_0.jpg 016112_1.jpg\n010040_0.jpg 001957_1.jpg\n010049_0.jpg 015181_1.jpg\n010057_0.jpg 017860_1.jpg\n010067_0.jpg 015173_1.jpg\n010078_0.jpg 008706_1.jpg\n010088_0.jpg 009323_1.jpg\n010096_0.jpg 019096_1.jpg\n010105_0.jpg 001983_1.jpg\n010115_0.jpg 013165_1.jpg\n010125_0.jpg 001947_1.jpg\n010133_0.jpg 004785_1.jpg\n010143_0.jpg 010225_1.jpg\n010152_0.jpg 000610_1.jpg\n010160_0.jpg 004023_1.jpg\n010168_0.jpg 019001_1.jpg\n010177_0.jpg 006478_1.jpg\n010185_0.jpg 007336_1.jpg\n010195_0.jpg 017831_1.jpg\n010206_0.jpg 003712_1.jpg\n010215_0.jpg 015036_1.jpg\n010225_0.jpg 003972_1.jpg\n010234_0.jpg 001891_1.jpg\n010244_0.jpg 001387_1.jpg\n010253_0.jpg 014736_1.jpg\n010261_0.jpg 013923_1.jpg\n010270_0.jpg 006728_1.jpg\n010281_0.jpg 004896_1.jpg\n010289_0.jpg 011076_1.jpg\n010300_0.jpg 012303_1.jpg\n010308_0.jpg 001092_1.jpg\n010318_0.jpg 012089_1.jpg\n010329_0.jpg 006452_1.jpg\n010337_0.jpg 018263_1.jpg\n010346_0.jpg 016191_1.jpg\n010357_0.jpg 017145_1.jpg\n010371_0.jpg 010515_1.jpg\n010381_0.jpg 006709_1.jpg\n010392_0.jpg 013319_1.jpg\n010404_0.jpg 000659_1.jpg\n010415_0.jpg 016562_1.jpg\n010431_0.jpg 016254_1.jpg\n010445_0.jpg 014744_1.jpg\n010454_0.jpg 017722_1.jpg\n010463_0.jpg 003795_1.jpg\n010473_0.jpg 013753_1.jpg\n010481_0.jpg 009409_1.jpg\n010493_0.jpg 015230_1.jpg\n010503_0.jpg 017701_1.jpg\n010515_0.jpg 002930_1.jpg\n010527_0.jpg 008986_1.jpg\n010535_0.jpg 000827_1.jpg\n010543_0.jpg 008354_1.jpg\n010551_0.jpg 015069_1.jpg\n010559_0.jpg 012514_1.jpg\n010567_0.jpg 012681_1.jpg\n010575_0.jpg 017710_1.jpg\n010583_0.jpg 002852_1.jpg\n010591_0.jpg 006825_1.jpg\n010599_0.jpg 016154_1.jpg\n010608_0.jpg 015450_1.jpg\n010620_0.jpg 009064_1.jpg\n010628_0.jpg 002922_1.jpg\n010636_0.jpg 004131_1.jpg\n010644_0.jpg 007021_1.jpg\n010653_0.jpg 019438_1.jpg\n010662_0.jpg 003535_1.jpg\n010670_0.jpg 003060_1.jpg\n010683_0.jpg 001349_1.jpg\n010691_0.jpg 003874_1.jpg\n010699_0.jpg 017167_1.jpg\n010710_0.jpg 018441_1.jpg\n010718_0.jpg 011425_1.jpg\n010726_0.jpg 001038_1.jpg\n010735_0.jpg 007536_1.jpg\n010744_0.jpg 000676_1.jpg\n010753_0.jpg 011485_1.jpg\n010762_0.jpg 002200_1.jpg\n010770_0.jpg 007495_1.jpg\n010778_0.jpg 006462_1.jpg\n010789_0.jpg 016086_1.jpg\n010797_0.jpg 013298_1.jpg\n010806_0.jpg 015869_1.jpg\n010816_0.jpg 009832_1.jpg\n010830_0.jpg 013734_1.jpg\n010840_0.jpg 010011_1.jpg\n010851_0.jpg 009189_1.jpg\n010859_0.jpg 004997_1.jpg\n010869_0.jpg 004572_1.jpg\n010882_0.jpg 012898_1.jpg\n010891_0.jpg 011680_1.jpg\n010900_0.jpg 001919_1.jpg\n010910_0.jpg 006186_1.jpg\n010918_0.jpg 010346_1.jpg\n010929_0.jpg 007199_1.jpg\n010937_0.jpg 016388_1.jpg\n010947_0.jpg 017051_1.jpg\n010959_0.jpg 017273_1.jpg\n010967_0.jpg 012487_1.jpg\n010976_0.jpg 018980_1.jpg\n010984_0.jpg 018636_1.jpg\n010995_0.jpg 008126_1.jpg\n011004_0.jpg 014693_1.jpg\n011015_0.jpg 008080_1.jpg\n011023_0.jpg 002413_1.jpg\n011034_0.jpg 018807_1.jpg\n011042_0.jpg 007029_1.jpg\n011050_0.jpg 012116_1.jpg\n011058_0.jpg 019204_1.jpg\n011068_0.jpg 007681_1.jpg\n011076_0.jpg 000293_1.jpg\n011087_0.jpg 012265_1.jpg\n011097_0.jpg 019053_1.jpg\n011106_0.jpg 003668_1.jpg\n011120_0.jpg 014387_1.jpg\n011128_0.jpg 009159_1.jpg\n011137_0.jpg 003611_1.jpg\n011152_0.jpg 003676_1.jpg\n011164_0.jpg 018375_1.jpg\n011173_0.jpg 009106_1.jpg\n011181_0.jpg 005763_1.jpg\n011190_0.jpg 000370_1.jpg\n011203_0.jpg 001528_1.jpg\n011212_0.jpg 018737_1.jpg\n011221_0.jpg 005062_1.jpg\n011231_0.jpg 016021_1.jpg\n011240_0.jpg 008285_1.jpg\n011249_0.jpg 016612_1.jpg\n011258_0.jpg 012183_1.jpg\n011270_0.jpg 005510_1.jpg\n011278_0.jpg 014987_1.jpg\n011288_0.jpg 002651_1.jpg\n011300_0.jpg 006045_1.jpg\n011309_0.jpg 003981_1.jpg\n011318_0.jpg 006371_1.jpg\n011328_0.jpg 004091_1.jpg\n011336_0.jpg 009941_1.jpg\n011347_0.jpg 014360_1.jpg\n011355_0.jpg 004702_1.jpg\n011363_0.jpg 010195_1.jpg\n011372_0.jpg 008523_1.jpg\n011381_0.jpg 003077_1.jpg\n011392_0.jpg 018357_1.jpg\n011401_0.jpg 001056_1.jpg\n011415_0.jpg 016971_1.jpg\n011425_0.jpg 009799_1.jpg\n011436_0.jpg 009246_1.jpg\n011447_0.jpg 006502_1.jpg\n011457_0.jpg 005430_1.jpg\n011466_0.jpg 002447_1.jpg\n011475_0.jpg 015487_1.jpg\n011485_0.jpg 014666_1.jpg\n011495_0.jpg 009967_1.jpg\n011506_0.jpg 002839_1.jpg\n011515_0.jpg 006145_1.jpg\n011523_0.jpg 017990_1.jpg\n011536_0.jpg 010067_1.jpg\n011544_0.jpg 014280_1.jpg\n011552_0.jpg 017974_1.jpg\n011560_0.jpg 000734_1.jpg\n011568_0.jpg 012495_1.jpg\n011577_0.jpg 013601_1.jpg\n011585_0.jpg 018146_1.jpg\n011596_0.jpg 012149_1.jpg\n011604_0.jpg 002059_1.jpg\n011615_0.jpg 008736_1.jpg\n011623_0.jpg 004854_1.jpg\n011631_0.jpg 009332_1.jpg\n011641_0.jpg 003565_1.jpg\n011654_0.jpg 005898_1.jpg\n011662_0.jpg 000001_1.jpg\n011670_0.jpg 016484_1.jpg\n011680_0.jpg 015654_1.jpg\n011689_0.jpg 001655_1.jpg\n011699_0.jpg 006512_1.jpg\n011708_0.jpg 000768_1.jpg\n011716_0.jpg 001162_1.jpg\n011724_0.jpg 016495_1.jpg\n011736_0.jpg 012926_1.jpg\n011745_0.jpg 012202_1.jpg\n011761_0.jpg 006563_1.jpg\n011769_0.jpg 003133_1.jpg\n011781_0.jpg 002494_1.jpg\n011790_0.jpg 008997_1.jpg\n011798_0.jpg 012907_1.jpg\n011806_0.jpg 005622_1.jpg\n011816_0.jpg 014685_1.jpg\n011825_0.jpg 014582_1.jpg\n011833_0.jpg 008839_1.jpg\n011842_0.jpg 006670_1.jpg\n011850_0.jpg 015928_1.jpg\n011862_0.jpg 016839_1.jpg\n011872_0.jpg 000877_1.jpg\n011883_0.jpg 016644_1.jpg\n011891_0.jpg 010253_1.jpg\n011899_0.jpg 018488_1.jpg\n011908_0.jpg 011604_1.jpg\n011916_0.jpg 010057_1.jpg\n011924_0.jpg 000668_1.jpg\n011933_0.jpg 006410_1.jpg\n011944_0.jpg 011623_1.jpg\n011954_0.jpg 005195_1.jpg\n011962_0.jpg 004867_1.jpg\n011970_0.jpg 012616_1.jpg\n011980_0.jpg 009024_1.jpg\n011988_0.jpg 002610_1.jpg\n011996_0.jpg 012803_1.jpg\n012006_0.jpg 001457_1.jpg\n012015_0.jpg 018644_1.jpg\n012025_0.jpg 011790_1.jpg\n012033_0.jpg 006968_1.jpg\n012044_0.jpg 015095_1.jpg\n012054_0.jpg 007313_1.jpg\n012063_0.jpg 015516_1.jpg\n012072_0.jpg 006486_1.jpg\n012081_0.jpg 018590_1.jpg\n012089_0.jpg 013147_1.jpg\n012099_0.jpg 006224_1.jpg\n012107_0.jpg 001467_1.jpg\n012116_0.jpg 009454_1.jpg\n012127_0.jpg 005213_1.jpg\n012137_0.jpg 001269_1.jpg\n012149_0.jpg 010830_1.jpg\n012158_0.jpg 013510_1.jpg\n012166_0.jpg 018729_1.jpg\n012174_0.jpg 000957_1.jpg\n012183_0.jpg 018291_1.jpg\n012193_0.jpg 011249_1.jpg\n012202_0.jpg 003882_1.jpg\n012219_0.jpg 004277_1.jpg\n012228_0.jpg 006555_1.jpg\n012236_0.jpg 015045_1.jpg\n012245_0.jpg 008258_1.jpg\n012256_0.jpg 017099_1.jpg\n012265_0.jpg 009462_1.jpg\n012273_0.jpg 004516_1.jpg\n012282_0.jpg 008233_1.jpg\n012291_0.jpg 001009_1.jpg\n012303_0.jpg 018876_1.jpg\n012311_0.jpg 001845_1.jpg\n012322_0.jpg 013060_1.jpg\n012330_0.jpg 015645_1.jpg\n012338_0.jpg 000812_1.jpg\n012350_0.jpg 011023_1.jpg\n012359_0.jpg 013117_1.jpg\n012369_0.jpg 009474_1.jpg\n012377_0.jpg 017227_1.jpg\n012385_0.jpg 005110_1.jpg\n012395_0.jpg 015662_1.jpg\n012404_0.jpg 000174_1.jpg\n012413_0.jpg 007949_1.jpg\n012422_0.jpg 009042_1.jpg\n012430_0.jpg 006620_1.jpg\n012440_0.jpg 009446_1.jpg\n012451_0.jpg 007159_1.jpg\n012460_0.jpg 012025_1.jpg\n012469_0.jpg 015334_1.jpg\n012479_0.jpg 017021_1.jpg\n012487_0.jpg 014055_1.jpg\n012495_0.jpg 002156_1.jpg\n012505_0.jpg 002911_1.jpg\n012514_0.jpg 004285_1.jpg\n012522_0.jpg 015740_1.jpg\n012531_0.jpg 005702_1.jpg\n012545_0.jpg 005755_1.jpg\n012553_0.jpg 016415_1.jpg\n012564_0.jpg 013931_1.jpg\n012578_0.jpg 014252_1.jpg\n012587_0.jpg 016687_1.jpg\n012597_0.jpg 016309_1.jpg\n012605_0.jpg 004561_1.jpg\n012616_0.jpg 009790_1.jpg\n012626_0.jpg 000209_1.jpg\n012636_0.jpg 004666_1.jpg\n012644_0.jpg 017922_1.jpg\n012652_0.jpg 002545_1.jpg\n012660_0.jpg 017957_1.jpg\n012669_0.jpg 005846_1.jpg\n012681_0.jpg 015955_1.jpg\n012694_0.jpg 001683_1.jpg\n012702_0.jpg 015671_1.jpg\n012712_0.jpg 005457_1.jpg\n012725_0.jpg 019243_1.jpg\n012734_0.jpg 008041_1.jpg\n012743_0.jpg 001928_1.jpg\n012754_0.jpg 003142_1.jpg\n012763_0.jpg 006776_1.jpg\n012773_0.jpg 009679_1.jpg\n012785_0.jpg 015412_1.jpg\n012795_0.jpg 018337_1.jpg\n012803_0.jpg 013997_1.jpg\n012811_0.jpg 001834_1.jpg\n012822_0.jpg 013284_1.jpg\n012830_0.jpg 008479_1.jpg\n012838_0.jpg 015889_1.jpg\n012849_0.jpg 015439_1.jpg\n012860_0.jpg 012107_1.jpg\n012868_0.jpg 003250_1.jpg\n012879_0.jpg 017282_1.jpg\n012889_0.jpg 000795_1.jpg\n012898_0.jpg 002758_1.jpg\n012907_0.jpg 012987_1.jpg\n012917_0.jpg 016102_1.jpg\n012926_0.jpg 016328_1.jpg\n012934_0.jpg 010551_1.jpg\n012944_0.jpg 016921_1.jpg\n012953_0.jpg 001310_1.jpg\n012964_0.jpg 006203_1.jpg\n012975_0.jpg 007423_1.jpg\n012987_0.jpg 015200_1.jpg\n012996_0.jpg 012669_1.jpg\n013007_0.jpg 014920_1.jpg\n013019_0.jpg 003069_1.jpg\n013028_0.jpg 000164_1.jpg\n013036_0.jpg 008598_1.jpg\n013047_0.jpg 018507_1.jpg\n013060_0.jpg 009741_1.jpg\n013068_0.jpg 012081_1.jpg\n013076_0.jpg 011654_1.jpg\n013084_0.jpg 012830_1.jpg\n013097_0.jpg 002307_1.jpg\n013106_0.jpg 000542_1.jpg\n013117_0.jpg 014755_1.jpg\n013127_0.jpg 008763_1.jpg\n013139_0.jpg 009809_1.jpg\n013147_0.jpg 008462_1.jpg\n013155_0.jpg 013789_1.jpg\n013165_0.jpg 007526_1.jpg\n013173_0.jpg 010404_1.jpg\n013181_0.jpg 005222_1.jpg\n013190_0.jpg 014908_1.jpg\n013199_0.jpg 019486_1.jpg\n013214_0.jpg 017770_1.jpg\n013224_0.jpg 004590_1.jpg\n013233_0.jpg 007357_1.jpg\n013245_0.jpg 005562_1.jpg\n013256_0.jpg 012773_1.jpg\n013265_0.jpg 018039_1.jpg\n013273_0.jpg 017062_1.jpg\n013284_0.jpg 002474_1.jpg\n013298_0.jpg 002208_1.jpg\n013309_0.jpg 002031_1.jpg\n013319_0.jpg 009169_1.jpg\n013327_0.jpg 006036_1.jpg\n013338_0.jpg 012311_1.jpg\n013355_0.jpg 018626_1.jpg\n013365_0.jpg 014272_1.jpg\n013374_0.jpg 014035_1.jpg\n013382_0.jpg 016515_1.jpg\n013391_0.jpg 004758_1.jpg\n013400_0.jpg 002093_1.jpg\n013410_0.jpg 004462_1.jpg\n013418_0.jpg 000284_1.jpg\n013428_0.jpg 008188_1.jpg\n013437_0.jpg 006260_1.jpg\n013447_0.jpg 007188_1.jpg\n013456_0.jpg 017563_1.jpg\n013469_0.jpg 009984_1.jpg\n013478_0.jpg 005166_1.jpg\n013490_0.jpg 009205_1.jpg\n013502_0.jpg 008032_1.jpg\n013510_0.jpg 005153_1.jpg\n013518_0.jpg 000200_1.jpg\n013527_0.jpg 013478_1.jpg\n013539_0.jpg 012469_1.jpg\n013547_0.jpg 017779_1.jpg\n013555_0.jpg 019505_1.jpg\n013564_0.jpg 016271_1.jpg\n013572_0.jpg 014406_1.jpg\n013583_0.jpg 006296_1.jpg\n013593_0.jpg 009959_1.jpg\n013601_0.jpg 013968_1.jpg\n013611_0.jpg 004051_1.jpg\n013620_0.jpg 010160_1.jpg\n013634_0.jpg 009571_1.jpg\n013642_0.jpg 019475_1.jpg\n013654_0.jpg 011850_1.jpg\n013665_0.jpg 015352_1.jpg\n013680_0.jpg 018515_1.jpg\n013688_0.jpg 012137_1.jpg\n013698_0.jpg 015015_1.jpg\n013706_0.jpg 014834_1.jpg\n013715_0.jpg 019393_1.jpg\n013725_0.jpg 005920_1.jpg\n013734_0.jpg 007974_1.jpg\n013743_0.jpg 018411_1.jpg\n013753_0.jpg 008443_1.jpg\n013764_0.jpg 004431_1.jpg\n013772_0.jpg 000915_1.jpg\n013780_0.jpg 006026_1.jpg\n013789_0.jpg 005586_1.jpg\n013798_0.jpg 009505_1.jpg\n013806_0.jpg 019310_1.jpg\n013816_0.jpg 018671_1.jpg\n013827_0.jpg 010683_1.jpg\n013836_0.jpg 007129_1.jpg\n013845_0.jpg 019183_1.jpg\n013855_0.jpg 009149_1.jpg\n013863_0.jpg 005984_1.jpg\n013875_0.jpg 003367_1.jpg\n013883_0.jpg 005298_1.jpg\n013891_0.jpg 005336_1.jpg\n013899_0.jpg 003311_1.jpg\n013907_0.jpg 005480_1.jpg\n013915_0.jpg 014574_1.jpg\n013923_0.jpg 013981_1.jpg\n013931_0.jpg 001408_1.jpg\n013939_0.jpg 010900_1.jpg\n013948_0.jpg 012193_1.jpg\n013959_0.jpg 003008_1.jpg\n013968_0.jpg 003041_1.jpg\n013981_0.jpg 003632_1.jpg\n013989_0.jpg 003303_1.jpg\n013997_0.jpg 001485_1.jpg\n014006_0.jpg 005131_1.jpg\n014014_0.jpg 005837_1.jpg\n014025_0.jpg 001547_1.jpg\n014035_0.jpg 005271_1.jpg\n014046_0.jpg 014106_1.jpg\n014055_0.jpg 011120_1.jpg\n014066_0.jpg 019119_1.jpg\n014076_0.jpg 008062_1.jpg\n014086_0.jpg 016765_1.jpg\n014096_0.jpg 010289_1.jpg\n014106_0.jpg 003195_1.jpg\n014114_0.jpg 000706_1.jpg\n014123_0.jpg 016757_1.jpg\n014131_0.jpg 015507_1.jpg\n014140_0.jpg 005489_1.jpg\n014149_0.jpg 012934_1.jpg\n014159_0.jpg 012359_1.jpg\n014167_0.jpg 009860_1.jpg\n014176_0.jpg 011769_1.jpg\n014184_0.jpg 004260_1.jpg\n014192_0.jpg 018167_1.jpg\n014201_0.jpg 012451_1.jpg\n014209_0.jpg 003526_1.jpg\n014220_0.jpg 013028_1.jpg\n014232_0.jpg 005006_1.jpg\n014240_0.jpg 004598_1.jpg\n014252_0.jpg 011806_1.jpg\n014262_0.jpg 014176_1.jpg\n014272_0.jpg 008071_1.jpg\n014280_0.jpg 007817_1.jpg\n014292_0.jpg 013634_1.jpg\n014302_0.jpg 007719_1.jpg\n014314_0.jpg 013764_1.jpg\n014324_0.jpg 000532_1.jpg\n014332_0.jpg 012587_1.jpg\n014341_0.jpg 016397_1.jpg\n014349_0.jpg 018300_1.jpg\n014360_0.jpg 008118_1.jpg\n014370_0.jpg 000118_1.jpg\n014379_0.jpg 006173_1.jpg\n014387_0.jpg 002287_1.jpg\n014396_0.jpg 002405_1.jpg\n014406_0.jpg 011181_1.jpg\n014416_0.jpg 002388_1.jpg\n014426_0.jpg 003461_1.jpg\n014434_0.jpg 001937_1.jpg\n014443_0.jpg 019465_1.jpg\n014452_0.jpg 017657_1.jpg\n014463_0.jpg 001664_1.jpg\n014477_0.jpg 010984_1.jpg\n014489_0.jpg 014046_1.jpg\n014498_0.jpg 017932_1.jpg\n014507_0.jpg 003451_1.jpg\n014518_0.jpg 016338_1.jpg\n014528_0.jpg 008753_1.jpg\n014537_0.jpg 012660_1.jpg\n014553_0.jpg 017323_1.jpg\n014564_0.jpg 000568_1.jpg\n014574_0.jpg 013106_1.jpg\n014582_0.jpg 018894_1.jpg\n014591_0.jpg 013502_1.jpg\n014604_0.jpg 012712_1.jpg\n014612_0.jpg 005737_1.jpg\n014621_0.jpg 017041_1.jpg\n014629_0.jpg 019420_1.jpg\n014639_0.jpg 001868_1.jpg\n014652_0.jpg 016435_1.jpg\n014666_0.jpg 005285_1.jpg\n014675_0.jpg 004795_1.jpg\n014685_0.jpg 003434_1.jpg\n014693_0.jpg 013611_1.jpg\n014701_0.jpg 006589_1.jpg\n014712_0.jpg 011309_1.jpg\n014720_0.jpg 009586_1.jpg\n014728_0.jpg 015220_1.jpg\n014736_0.jpg 011137_1.jpg\n014744_0.jpg 007570_1.jpg\n014755_0.jpg 007056_1.jpg\n014765_0.jpg 012044_1.jpg\n014774_0.jpg 018254_1.jpg\n014785_0.jpg 000786_1.jpg\n014794_0.jpg 011372_1.jpg\n014805_0.jpg 001695_1.jpg\n014816_0.jpg 015598_1.jpg\n014825_0.jpg 002712_1.jpg\n014834_0.jpg 014452_1.jpg\n014844_0.jpg 011908_1.jpg\n014854_0.jpg 018129_1.jpg\n014863_0.jpg 017153_1.jpg\n014876_0.jpg 010976_1.jpg\n014888_0.jpg 016929_1.jpg\n014900_0.jpg 009365_1.jpg\n014908_0.jpg 012282_1.jpg\n014920_0.jpg 008389_1.jpg\n014930_0.jpg 012460_1.jpg\n014939_0.jpg 011631_1.jpg\n014950_0.jpg 013273_1.jpg\n014959_0.jpg 003768_1.jpg\n014968_0.jpg 002248_1.jpg\n014979_0.jpg 005675_1.jpg\n014987_0.jpg 013365_1.jpg\n014995_0.jpg 006688_1.jpg\n015006_0.jpg 006268_1.jpg\n015015_0.jpg 017982_1.jpg\n015026_0.jpg 006241_1.jpg\n015036_0.jpg 014167_1.jpg\n015045_0.jpg 016981_1.jpg\n015060_0.jpg 009382_1.jpg\n015069_0.jpg 005501_1.jpg\n015077_0.jpg 014518_1.jpg\n015085_0.jpg 016130_1.jpg\n015095_0.jpg 001614_1.jpg\n015105_0.jpg 011862_1.jpg\n015114_0.jpg 002455_1.jpg\n015125_0.jpg 016707_1.jpg\n015133_0.jpg 014443_1.jpg\n015141_0.jpg 000339_1.jpg\n015150_0.jpg 014825_1.jpg\n015158_0.jpg 005771_1.jpg\n015173_0.jpg 005929_1.jpg\n015181_0.jpg 003150_1.jpg\n015192_0.jpg 004683_1.jpg\n015200_0.jpg 007388_1.jpg\n015209_0.jpg 009356_1.jpg\n015220_0.jpg 011699_1.jpg\n015230_0.jpg 004487_1.jpg\n015238_0.jpg 013224_1.jpg\n015247_0.jpg 004674_1.jpg\n015256_0.jpg 018817_1.jpg\n015264_0.jpg 007561_1.jpg\n015272_0.jpg 010959_1.jpg\n015280_0.jpg 013845_1.jpg\n015291_0.jpg 011506_1.jpg\n015299_0.jpg 010670_1.jpg\n015308_0.jpg 019018_1.jpg\n015317_0.jpg 010185_1.jpg\n015325_0.jpg 006155_1.jpg\n015334_0.jpg 005578_1.jpg\n015344_0.jpg 000742_1.jpg\n015352_0.jpg 002327_1.jpg\n015362_0.jpg 005072_1.jpg\n015371_0.jpg 009912_1.jpg\n015381_0.jpg 009822_1.jpg\n015392_0.jpg 001073_1.jpg\n015403_0.jpg 005014_1.jpg\n015412_0.jpg 015542_1.jpg\n015420_0.jpg 007037_1.jpg\n015428_0.jpg 018245_1.jpg\n015439_0.jpg 006748_1.jpg\n015450_0.jpg 006099_1.jpg\n015465_0.jpg 008580_1.jpg\n015476_0.jpg 000330_1.jpg\n015487_0.jpg 013076_1.jpg\n015497_0.jpg 012953_1.jpg\n015507_0.jpg 018652_1.jpg\n015516_0.jpg 012430_1.jpg\n015524_0.jpg 014159_1.jpg\n015542_0.jpg 019531_1.jpg\n015550_0.jpg 013875_1.jpg\n015560_0.jpg 012422_1.jpg\n015571_0.jpg 018618_1.jpg\n015579_0.jpg 005031_1.jpg\n015590_0.jpg 003963_1.jpg\n015598_0.jpg 018159_1.jpg\n015607_0.jpg 005422_1.jpg\n015615_0.jpg 010699_1.jpg\n015627_0.jpg 018884_1.jpg\n015637_0.jpg 012522_1.jpg\n015645_0.jpg 017536_1.jpg\n015654_0.jpg 009843_1.jpg\n015662_0.jpg 002011_1.jpg\n015671_0.jpg 011152_1.jpg\n015680_0.jpg 005449_1.jpg\n015688_0.jpg 001419_1.jpg\n015697_0.jpg 004314_1.jpg\n015707_0.jpg 018121_1.jpg\n015715_0.jpg 013084_1.jpg\n015724_0.jpg 006313_1.jpg\n015732_0.jpg 013816_1.jpg\n015740_0.jpg 014995_1.jpg\n015748_0.jpg 001502_1.jpg\n015759_0.jpg 003649_1.jpg\n015767_0.jpg 000437_1.jpg\n015776_0.jpg 009651_1.jpg\n015785_0.jpg 005470_1.jpg\n015794_0.jpg 009123_1.jpg\n015803_0.jpg 005145_1.jpg\n015816_0.jpg 004115_1.jpg\n015825_0.jpg 008871_1.jpg\n015836_0.jpg 006118_1.jpg\n015844_0.jpg 007294_1.jpg\n015853_0.jpg 005101_1.jpg\n015861_0.jpg 017592_1.jpg\n015869_0.jpg 011724_1.jpg\n015881_0.jpg 008180_1.jpg\n015889_0.jpg 009699_1.jpg\n015900_0.jpg 017079_1.jpg\n015908_0.jpg 008533_1.jpg\n015916_0.jpg 002533_1.jpg\n015928_0.jpg 017418_1.jpg\n015938_0.jpg 007874_1.jpg\n015946_0.jpg 014426_1.jpg\n015955_0.jpg 018662_1.jpg\n015969_0.jpg 009561_1.jpg\n015979_0.jpg 007848_1.jpg\n015990_0.jpg 010882_1.jpg\n016002_0.jpg 006358_1.jpg\n016013_0.jpg 014528_1.jpg\n016021_0.jpg 003621_1.jpg\n016031_0.jpg 002883_1.jpg\n016039_0.jpg 009894_1.jpg\n016049_0.jpg 004252_1.jpg\n016059_0.jpg 012291_1.jpg\n016067_0.jpg 006523_1.jpg\n016075_0.jpg 007121_1.jpg\n016086_0.jpg 016505_1.jpg\n016094_0.jpg 004378_1.jpg\n016102_0.jpg 011716_1.jpg\n016112_0.jpg 000560_1.jpg\n016121_0.jpg 004478_1.jpg\n016130_0.jpg 002803_1.jpg\n016145_0.jpg 016455_1.jpg\n016154_0.jpg 008949_1.jpg\n016163_0.jpg 002276_1.jpg\n016172_0.jpg 016163_1.jpg\n016183_0.jpg 005728_1.jpg\n016191_0.jpg 011536_1.jpg\n016206_0.jpg 015344_1.jpg\n016220_0.jpg 002670_1.jpg\n016230_0.jpg 002226_1.jpg\n016238_0.jpg 008855_1.jpg\n016246_0.jpg 003481_1.jpg\n016254_0.jpg 015060_1.jpg\n016262_0.jpg 007138_1.jpg\n016271_0.jpg 017390_1.jpg\n016281_0.jpg 018598_1.jpg\n016290_0.jpg 015680_1.jpg\n016300_0.jpg 009627_1.jpg\n016309_0.jpg 015238_1.jpg\n016317_0.jpg 004107_1.jpg\n016328_0.jpg 015776_1.jpg\n016338_0.jpg 009668_1.jpg\n016349_0.jpg 008250_1.jpg\n016358_0.jpg 006889_1.jpg\n016367_0.jpg 008813_1.jpg\n016379_0.jpg 003107_1.jpg\n016388_0.jpg 014785_1.jpg\n016397_0.jpg 002728_1.jpg\n016405_0.jpg 000356_1.jpg\n016415_0.jpg 014096_1.jpg\n016426_0.jpg 016230_1.jpg\n016435_0.jpg 005175_1.jpg\n016445_0.jpg 010770_1.jpg\n016455_0.jpg 013518_1.jpg\n016465_0.jpg 012158_1.jpg\n016474_0.jpg 017613_1.jpg\n016484_0.jpg 019166_1.jpg\n016495_0.jpg 009722_1.jpg\n016505_0.jpg 018858_1.jpg\n016515_0.jpg 009515_1.jpg\n016524_0.jpg 009537_1.jpg\n016533_0.jpg 006276_1.jpg\n016541_0.jpg 016853_1.jpg\n016550_0.jpg 013772_1.jpg\n016562_0.jpg 019154_1.jpg\n016571_0.jpg 017514_1.jpg\n016584_0.jpg 013447_1.jpg\n016593_0.jpg 018309_1.jpg\n016602_0.jpg 010088_1.jpg\n016612_0.jpg 003658_1.jpg\n016620_0.jpg 003760_1.jpg\n016628_0.jpg 007750_1.jpg\n016636_0.jpg 004470_1.jpg\n016644_0.jpg 015158_1.jpg\n016653_0.jpg 008725_1.jpg\n016662_0.jpg 010357_1.jpg\n016676_0.jpg 016013_1.jpg\n016687_0.jpg 014025_1.jpg\n016697_0.jpg 008487_1.jpg\n016707_0.jpg 003094_1.jpg\n016716_0.jpg 014066_1.jpg\n016726_0.jpg 011164_1.jpg\n016739_0.jpg 017805_1.jpg\n016748_0.jpg 012822_1.jpg\n016757_0.jpg 009730_1.jpg\n016765_0.jpg 007180_1.jpg\n016777_0.jpg 000066_1.jpg\n016786_0.jpg 017340_1.jpg\n016799_0.jpg 007656_1.jpg\n016812_0.jpg 003032_1.jpg\n016820_0.jpg 000776_1.jpg\n016831_0.jpg 007702_1.jpg\n016839_0.jpg 004609_1.jpg\n016853_0.jpg 003386_1.jpg\n016866_0.jpg 010778_1.jpg\n016878_0.jpg 012479_1.jpg\n016888_0.jpg 003703_1.jpg\n016899_0.jpg 002778_1.jpg\n016908_0.jpg 018867_1.jpg\n016921_0.jpg 004177_1.jpg\n016929_0.jpg 005683_1.jpg\n016943_0.jpg 000109_1.jpg\n016951_0.jpg 006928_1.jpg\n016962_0.jpg 014675_1.jpg\n016971_0.jpg 007940_1.jpg\n016981_0.jpg 019270_1.jpg\n016992_0.jpg 013547_1.jpg\n017002_0.jpg 013665_1.jpg\n017012_0.jpg 008881_1.jpg\n017021_0.jpg 000048_1.jpg\n017030_0.jpg 004139_1.jpg\n017041_0.jpg 003236_1.jpg\n017051_0.jpg 001136_1.jpg\n017062_0.jpg 001320_1.jpg\n017070_0.jpg 016121_1.jpg\n017079_0.jpg 014728_1.jpg\n017091_0.jpg 010215_1.jpg\n017099_0.jpg 004941_1.jpg\n017110_0.jpg 018183_1.jpg\n017118_0.jpg 001048_1.jpg\n017130_0.jpg 002901_1.jpg\n017145_0.jpg 008793_1.jpg\n017153_0.jpg 015114_1.jpg\n017167_0.jpg 007168_1.jpg\n017175_0.jpg 014639_1.jpg\n017188_0.jpg 001706_1.jpg\n017196_0.jpg 010308_1.jpg\n017204_0.jpg 016349_1.jpg\n017213_0.jpg 002362_1.jpg\n017227_0.jpg 001219_1.jpg\n017235_0.jpg 010559_1.jpg\n017243_0.jpg 003024_1.jpg\n017254_0.jpg 003591_1.jpg\n017264_0.jpg 017358_1.jpg\n017273_0.jpg 004042_1.jpg\n017282_0.jpg 012377_1.jpg\n017290_0.jpg 007762_1.jpg\n017298_0.jpg 015247_1.jpg\n017306_0.jpg 018787_1.jpg\n017315_0.jpg 010503_1.jpg\n017323_0.jpg 000602_1.jpg\n017332_0.jpg 001635_1.jpg\n017340_0.jpg 006842_1.jpg\n017348_0.jpg 017482_1.jpg\n017358_0.jpg 012440_1.jpg\n017370_0.jpg 019215_1.jpg\n017382_0.jpg 019590_1.jpg\n017390_0.jpg 003990_1.jpg\n017400_0.jpg 008334_1.jpg\n017410_0.jpg 017213_1.jpg\n017418_0.jpg 010392_1.jpg\n017428_0.jpg 018991_1.jpg\n017438_0.jpg 001817_1.jpg\n017449_0.jpg 014950_1.jpg\n017457_0.jpg 006649_1.jpg\n017466_0.jpg 013437_1.jpg\n017474_0.jpg 016602_1.jpg\n017482_0.jpg 007269_1.jpg\n017496_0.jpg 011495_1.jpg\n017505_0.jpg 000386_1.jpg\n017514_0.jpg 013190_1.jpg\n017526_0.jpg 004387_1.jpg\n017536_0.jpg 003328_1.jpg\n017545_0.jpg 006799_1.jpg\n017555_0.jpg 012413_1.jpg\n017563_0.jpg 008515_1.jpg\n017575_0.jpg 010152_1.jpg\n017583_0.jpg 011328_1.jpg\n017592_0.jpg 018910_1.jpg\n017600_0.jpg 018718_1.jpg\n017613_0.jpg 000378_1.jpg\n017622_0.jpg 019193_1.jpg\n017630_0.jpg 018280_1.jpg\n017639_0.jpg 013181_1.jpg\n017648_0.jpg 011363_1.jpg\n017657_0.jpg 001173_1.jpg\n017667_0.jpg 004243_1.jpg\n017678_0.jpg 013959_1.jpg\n017688_0.jpg 016908_1.jpg\n017701_0.jpg 013539_1.jpg\n017710_0.jpg 013456_1.jpg\n017722_0.jpg 004234_1.jpg\n017730_0.jpg 001203_1.jpg\n017740_0.jpg 013400_1.jpg\n017750_0.jpg 011781_1.jpg\n017761_0.jpg 011258_1.jpg\n017770_0.jpg 006908_1.jpg\n017779_0.jpg 009660_1.jpg\n017788_0.jpg 002191_1.jpg\n017796_0.jpg 006757_1.jpg\n017805_0.jpg 005857_1.jpg\n017814_0.jpg 011641_1.jpg\n017823_0.jpg 007923_1.jpg\n017831_0.jpg 004949_1.jpg\n017840_0.jpg 018580_1.jpg\n017852_0.jpg 017999_1.jpg\n017860_0.jpg 008653_1.jpg\n017868_0.jpg 011980_1.jpg\n017877_0.jpg 017382_1.jpg\n017886_0.jpg 011899_1.jpg\n017896_0.jpg 002169_1.jpg\n017904_0.jpg 010318_1.jpg\n017914_0.jpg 017740_1.jpg\n017922_0.jpg 011221_1.jpg\n017932_0.jpg 004989_1.jpg\n017945_0.jpg 003915_1.jpg\n017957_0.jpg 001789_1.jpg\n017965_0.jpg 003925_1.jpg\n017974_0.jpg 002337_1.jpg\n017982_0.jpg 008624_1.jpg\n017990_0.jpg 004220_1.jpg\n017999_0.jpg 001594_1.jpg\n018009_0.jpg 006004_1.jpg\n018018_0.jpg 019350_1.jpg\n018031_0.jpg 018552_1.jpg\n018039_0.jpg 010031_1.jpg\n018047_0.jpg 013256_1.jpg\n018059_0.jpg 001809_1.jpg\n018069_0.jpg 006868_1.jpg\n018080_0.jpg 000303_1.jpg\n018089_0.jpg 007882_1.jpg\n018102_0.jpg 016676_1.jpg\n018112_0.jpg 009619_1.jpg\n018121_0.jpg 017965_1.jpg\n018129_0.jpg 010049_1.jpg\n018138_0.jpg 018938_1.jpg\n018146_0.jpg 014209_1.jpg\n018159_0.jpg 007549_1.jpg\n018167_0.jpg 009054_1.jpg\n018175_0.jpg 008214_1.jpg\n018183_0.jpg 003319_1.jpg\n018192_0.jpg 016206_1.jpg\n018200_0.jpg 017914_1.jpg\n018210_0.jpg 016820_1.jpg\n018219_0.jpg 007781_1.jpg\n018227_0.jpg 006545_1.jpg\n018236_0.jpg 001153_1.jpg\n018245_0.jpg 000426_1.jpg\n018254_0.jpg 014123_1.jpg\n018263_0.jpg 006678_1.jpg\n018271_0.jpg 017254_1.jpg\n018280_0.jpg 001900_1.jpg\n018291_0.jpg 019234_1.jpg\n018300_0.jpg 012636_1.jpg\n018309_0.jpg 001908_1.jpg\n018318_0.jpg 017188_1.jpg\n018327_0.jpg 009291_1.jpg\n018337_0.jpg 009932_1.jpg\n018348_0.jpg 003049_1.jpg\n018357_0.jpg 003280_1.jpg\n018366_0.jpg 000010_1.jpg\n018375_0.jpg 015946_1.jpg\n018393_0.jpg 002699_1.jpg\n018401_0.jpg 002502_1.jpg\n018411_0.jpg 004620_1.jpg\n018420_0.jpg 002828_1.jpg\n018431_0.jpg 016524_1.jpg\n018441_0.jpg 005091_1.jpg\n018452_0.jpg 015299_1.jpg\n018460_0.jpg 011996_1.jpg\n018470_0.jpg 006937_1.jpg\n018479_0.jpg 003861_1.jpg\n018488_0.jpg 015748_1.jpg\n018496_0.jpg 005940_1.jpg\n018507_0.jpg 001765_1.jpg\n018515_0.jpg 013798_1.jpg\n018524_0.jpg 017332_1.jpg\n018532_0.jpg 005404_1.jpg\n018544_0.jpg 010797_1.jpg\n018552_0.jpg 006419_1.jpg\n018561_0.jpg 019078_1.jpg\n018569_0.jpg 014564_1.jpg\n018580_0.jpg 008830_1.jpg\n018590_0.jpg 016571_1.jpg\n018598_0.jpg 011745_1.jpg\n018608_0.jpg 000347_1.jpg\n018618_0.jpg 003739_1.jpg\n018626_0.jpg 011662_1.jpg\n018636_0.jpg 001399_1.jpg\n018644_0.jpg 004912_1.jpg\n018652_0.jpg 017600_1.jpg\n018662_0.jpg 018175_1.jpg\n018671_0.jpg 013939_1.jpg\n018681_0.jpg 006768_1.jpg\n018690_0.jpg 014604_1.jpg\n018700_0.jpg 009643_1.jpg\n018710_0.jpg 005542_1.jpg\n018718_0.jpg 003555_1.jpg\n018729_0.jpg 006073_1.jpg\n018737_0.jpg 014720_1.jpg\n018746_0.jpg 017030_1.jpg\n018755_0.jpg 017505_1.jpg\n018769_0.jpg 003270_1.jpg\n018778_0.jpg 007045_1.jpg\n018787_0.jpg 004823_1.jpg\n018796_0.jpg 007278_1.jpg\n018807_0.jpg 002659_1.jpg\n018817_0.jpg 008551_1.jpg\n018826_0.jpg 011318_1.jpg\n018837_0.jpg 016620_1.jpg\n018848_0.jpg 011933_1.jpg\n018858_0.jpg 019360_1.jpg\n018867_0.jpg 004545_1.jpg\n018876_0.jpg 000192_1.jpg\n018884_0.jpg 005809_1.jpg\n018894_0.jpg 012369_1.jpg\n018902_0.jpg 019581_1.jpg\n018910_0.jpg 004745_1.jpg\n018921_0.jpg 013233_1.jpg\n018929_0.jpg 008570_1.jpg\n018938_0.jpg 012564_1.jpg\n018946_0.jpg 013915_1.jpg\n018954_0.jpg 011872_1.jpg\n018962_0.jpg 014930_1.jpg\n018971_0.jpg 017823_1.jpg\n018980_0.jpg 018366_1.jpg\n018991_0.jpg 006897_1.jpg\n019001_0.jpg 010473_1.jpg\n019009_0.jpg 011924_1.jpg\n019018_0.jpg 001575_1.jpg\n019029_0.jpg 002970_1.jpg\n019037_0.jpg 000477_1.jpg\n019045_0.jpg 018080_1.jpg\n019053_0.jpg 008616_1.jpg\n019066_0.jpg 017852_1.jpg\n019078_0.jpg 007639_1.jpg\n019087_0.jpg 000907_1.jpg\n019096_0.jpg 009312_1.jpg\n019110_0.jpg 004657_1.jpg\n019119_0.jpg 001028_1.jpg\n019130_0.jpg 006232_1.jpg\n019140_0.jpg 011203_1.jpg\n019154_0.jpg 012795_1.jpg\n019166_0.jpg 013068_1.jpg\n019174_0.jpg 000097_1.jpg\n019183_0.jpg 009872_1.jpg\n019193_0.jpg 013428_1.jpg\n019204_0.jpg 016075_1.jpg\n019215_0.jpg 004071_1.jpg\n019224_0.jpg 011475_1.jpg\n019234_0.jpg 013642_1.jpg\n019243_0.jpg 018271_1.jpg\n019252_0.jpg 011552_1.jpg\n019262_0.jpg 005594_1.jpg\n019270_0.jpg 016405_1.jpg\n019279_0.jpg 010329_1.jpg\n019287_0.jpg 010493_1.jpg\n019302_0.jpg 018089_1.jpg\n019310_0.jpg 019262_1.jpg\n019319_0.jpg 017788_1.jpg\n019332_0.jpg 014774_1.jpg\n019340_0.jpg 009254_1.jpg\n019350_0.jpg 012725_1.jpg\n019360_0.jpg 008317_1.jpg\n019368_0.jpg 000629_1.jpg\n019376_0.jpg 017575_1.jpg\n019384_0.jpg 007324_1.jpg\n019393_0.jpg 013139_1.jpg\n019402_0.jpg 012868_1.jpg\n019411_0.jpg 001228_1.jpg\n019420_0.jpg 006347_1.jpg\n019429_0.jpg 006494_1.jpg\n019438_0.jpg 008590_1.jpg\n019446_0.jpg 006571_1.jpg\n019454_0.jpg 012228_1.jpg\n019465_0.jpg 010003_1.jpg\n019475_0.jpg 006304_1.jpg\n019486_0.jpg 013019_1.jpg\n019494_0.jpg 010929_1.jpg\n019505_0.jpg 010753_1.jpg\n019514_0.jpg 012054_1.jpg\n019522_0.jpg 018102_1.jpg\n019531_0.jpg 015077_1.jpg\n019540_0.jpg 008151_1.jpg\n019552_0.jpg 003787_1.jpg\n019561_0.jpg 006090_1.jpg\n019573_0.jpg 008608_1.jpg\n019581_0.jpg 006081_1.jpg\n019590_0.jpg 012964_1.jpg\n"
  },
  {
    "path": "projects/flow_style_vton/vton_dataset.py",
    "content": "import os.path\nimport random\n\nimport numpy as np\nfrom PIL import Image\nfrom torch.utils.data import Dataset\nfrom torchvision import transforms\n\n\nclass AlignedDataset(Dataset):\n\n    def __init__(self, opt):\n        self.opt = opt\n        self.root = opt.dataroot\n\n        self.fine_height = 256\n        self.fine_width = 192\n\n        self.text = opt.test_pairs\n\n        dir_I = '_img'\n        self.dir_I = os.path.join(opt.dataroot, opt.phase + dir_I)\n\n        dir_C = '_clothes'\n        self.dir_C = os.path.join(opt.dataroot, opt.phase + dir_C)\n\n        dir_E = '_edge'\n        self.dir_E = os.path.join(opt.dataroot, opt.phase + dir_E)\n\n        self.im_name = []\n        self.c_name = []\n        self.e_name = []\n        self.get_file_name()\n        self.dataset_size = len(self.im_name)\n\n    def get_file_name(self):\n\n        with open(self.text, 'r') as f:\n            for line in f.readlines():\n                im_name, c_name = line.strip().split()\n                self.im_name.append(os.path.join(self.dir_I, im_name))\n                self.c_name.append(os.path.join(self.dir_C, c_name))\n                self.e_name.append(os.path.join(self.dir_E, c_name))\n\n    def __getitem__(self, index):\n\n        I_path = os.path.join(self.im_name[index])\n        img = Image.open(I_path).convert('RGB')\n\n        params = get_params(self.opt, img.size)\n        transform = get_transform(self.opt, params)\n        transform_E = get_transform(\n            self.opt, params, method=Image.NEAREST, normalize=False)\n\n        I_tensor = transform(img)\n        C_path = os.path.join(self.c_name[index])\n        C = Image.open(C_path).convert('RGB')\n        C_tensor = transform(C)\n\n        E_path = os.path.join(self.e_name[index])\n        E = Image.open(E_path).convert('L')\n        E_tensor = transform_E(E)\n\n        input_dict = {\n            'image': I_tensor,\n            'clothes': C_tensor,\n            'edge': E_tensor,\n            'p_name': self.im_name[index].split('/')[-1]\n        }\n        return input_dict\n\n    def __len__(self):\n        return self.dataset_size\n\n\ndef get_params(opt, size):\n    w, h = size\n    new_h = h\n    new_w = w\n    if opt.resize_or_crop == 'resize_and_crop':\n        new_h = new_w = opt.loadSize\n    elif opt.resize_or_crop == 'scale_width_and_crop':\n        new_w = opt.loadSize\n        new_h = opt.loadSize * h // w\n\n    x = random.randint(0, np.maximum(0, new_w - opt.fineSize))\n    y = random.randint(0, np.maximum(0, new_h - opt.fineSize))\n\n    flip = 0\n    return {'crop_pos': (x, y), 'flip': flip}\n\n\ndef get_transform_resize(opt, params, method=Image.BICUBIC, normalize=True):\n    transform_list = []\n    transform_list.append(\n        transforms.Lambda(\n            lambda img: __scale_width(img, opt.loadSize, method)))\n    osize = [256, 192]\n    transform_list.append(transforms.Scale(osize, method))\n    if 'crop' in opt.resize_or_crop:\n        transform_list.append(\n            transforms.Lambda(\n                lambda img: __crop(img, params['crop_pos'], opt.fineSize)))\n\n    if opt.resize_or_crop == 'none':\n        base = float(2**opt.n_downsample_global)\n        if opt.netG == 'local':\n            base *= (2**opt.n_local_enhancers)\n        transform_list.append(\n            transforms.Lambda(lambda img: __make_power_2(img, base, method)))\n\n    if opt.isTrain and not opt.no_flip:\n        transform_list.append(\n            transforms.Lambda(lambda img: __flip(img, params['flip'])))\n\n    transform_list += [transforms.ToTensor()]\n\n    if normalize:\n        transform_list += [\n            transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n        ]\n    return transforms.Compose(transform_list)\n\n\ndef get_transform(opt, params, method=Image.BICUBIC, normalize=True):\n    transform_list = []\n    if 'resize' in opt.resize_or_crop:\n        osize = [opt.loadSize, opt.loadSize]\n        transform_list.append(transforms.Resize(osize, method))\n    elif 'scale_width' in opt.resize_or_crop:\n        transform_list.append(\n            transforms.Lambda(\n                lambda img: __scale_width(img, opt.loadSize, method)))\n        osize = [256, 192]\n        transform_list.append(transforms.Resize(osize, method))\n    if 'crop' in opt.resize_or_crop:\n        transform_list.append(\n            transforms.Lambda(\n                lambda img: __crop(img, params['crop_pos'], opt.fineSize)))\n\n    if opt.resize_or_crop == 'none':\n        base = float(16)\n        transform_list.append(\n            transforms.Lambda(lambda img: __make_power_2(img, base, method)))\n\n    if opt.isTrain and not opt.no_flip:\n        transform_list.append(\n            transforms.Lambda(lambda img: __flip(img, params['flip'])))\n\n    transform_list += [transforms.ToTensor()]\n\n    if normalize:\n        transform_list += [\n            transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n        ]\n    return transforms.Compose(transform_list)\n\n\ndef normalize():\n    return transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n\n\ndef __make_power_2(img, base, method=Image.BICUBIC):\n    ow, oh = img.size\n    h = int(round(oh / base) * base)\n    w = int(round(ow / base) * base)\n    if (h == oh) and (w == ow):\n        return img\n    return img.resize((w, h), method)\n\n\ndef __scale_width(img, target_width, method=Image.BICUBIC):\n    ow, oh = img.size\n    if (ow == target_width):\n        return img\n    w = target_width\n    h = int(target_width * oh / ow)\n    return img.resize((w, h), method)\n\n\ndef __crop(img, pos, size):\n    ow, oh = img.size\n    x1, y1 = pos\n    tw = th = size\n    if (ow > tw or oh > th):\n        return img.crop((x1, y1, x1 + tw, y1 + th))\n    return img\n\n\ndef __flip(img, flip):\n    if flip:\n        return img.transpose(Image.FLIP_LEFT_RIGHT)\n    return img\n"
  },
  {
    "path": "projects/glide/configs/README.md",
    "content": "# GLIDE (Arxiv'2021)\n\n> [GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models](https://papers.nips.cc/paper/2021/file/49ad23d1ec9fa4bd8d77d02681df5cfa-Paper.pdf)\n\n> **Task**: Text2Image, diffusion\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDiffusion models have recently been shown to generate high-quality synthetic images, especially when paired with a guidance technique to trade off diversity for fidelity. We explore diffusion models for the problem of text-conditional image synthesis and compare two different guidance strategies: CLIP guidance and classifier-free guidance. We find that the latter is preferred by human evaluators for both photorealism and caption similarity, and often produces photorealistic samples. Samples from a 3.5 billion parameter text-conditional diffusion model using classifierfree guidance are favored by human evaluators to those from DALL-E, even when the latter uses expensive CLIP reranking. Additionally, we find that our models can be fine-tuned to perform image inpainting, enabling powerful text-driven image editing. We train a smaller model on a filtered dataset and release the code and weights at https://github.com/openai/glide-text2im.\n\n<!-- [IMAGE] -->\n\n<div align=center >\n <img src=\"https://user-images.githubusercontent.com/22982797/209770463-31f3083d-b939-4ed6-b504-6a5baf7365b5.png\" width=\"400\"/>\n</div >\n\n## Results and models\n\n<div align=\"center\">\n  <b>an oil painting of a corgi</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/210042533-1df54b2d-d8a8-42b1-974c-06861e3e6ef6.png\" width=\"400\"/>\n</div>\n\n<div align=\"center\">\n  <b>an cartoon painting of a cat</b>\n  <br/>\n  <img src=\"https://user-images.githubusercontent.com/22982797/210042530-ada31a01-7c9d-452b-bc72-56ae0182ef2f.png\" width=\"400\"/>\n</div>\n\n**Laion**\n\n| Method | Resolution       | Config                                                                      | Weights                                                                                    |\n| ------ | ---------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n| Glide  | 64x64            | [config](projects/glide/configs/glide_ddim-classifier-free_laion-64x64.py)  | [model](https://download.openmmlab.com/mmediting/glide/glide_laion-64x64-02afff47.pth)     |\n| Glide  | 64x64 -> 256x256 | [config](projects/glide/configs/glide_ddim-classifier-free_laion-64-256.py) | [model](https://download.openxlab.org.cn/models/mmediting/GLIDE/weight/glide_laion-64-256) |\n\n## Quick Start\n\nYou can run glide as follows:\n\n```python\nimport torch\nfrom mmagic.apis import init_model\nfrom mmengine.registry import init_default_scope\nfrom projects.glide.models import *\n\ninit_default_scope('mmagic')\n\nconfig = 'projects/glide/configs/glide_ddim-classifier-free_laion-64x64.py'\nckpt = 'https://download.openmmlab.com/mmagic/glide/glide_laion-64x64-02afff47.pth'\nmodel = init_model(config, ckpt).cuda().eval()\nprompt = \"an oil painting of a corgi\"\n\nwith torch.no_grad():\n    samples = model.infer(init_image=None,\n                prompt=prompt,\n                batch_size=16,\n                guidance_scale=3.,\n                num_inference_steps=100,\n                labels=None,\n                classifier_scale=0.0,\n                show_progress=True)['samples']\n```\n\nYou can synthesis images with 256x256 resolution:\n\n```python\nimport torch\nfrom torchvision.utils import save_image\nfrom mmagic.apis import init_model\nfrom mmengine.registry import init_default_scope\nfrom projects.glide.models import *\n\ninit_default_scope('mmagic')\n\nconfig = 'projects/glide/configs/glide_ddim-classifier-free_laion-64-256.py'\nckpt = 'https://download.openxlab.org.cn/models/mmediting/GLIDE/weight/glide_laion-64-256'\nmodel = init_model(config, ckpt).cuda().eval()\nprompt = \"an oil painting of a corgi\"\n\nwith torch.no_grad():\n    samples = model.infer(init_image=None,\n                prompt=prompt,\n                batch_size=16,\n                guidance_scale=3.,\n                num_inference_steps=100,\n                labels=None,\n                classifier_scale=0.0,\n                show_progress=True)['samples']\nsave_image(samples, \"corgi.png\", nrow=4, normalize=True, value_range=(-1, 1))\n```\n\n## Citation\n\n```bibtex\n@article{2021GLIDE,\n  title={GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models},\n  author={ Nichol, A.  and  Dhariwal, P.  and  Ramesh, A.  and  Shyam, P.  and  Mishkin, P.  and  Mcgrew, B.  and  Sutskever, I.  and  Chen, M. },\n  year={2021},\n}\n```\n"
  },
  {
    "path": "projects/glide/configs/glide_ddim-classifier-free_laion-64-256.py",
    "content": "unet_cfg = dict(\n    type='Text2ImUNet',\n    image_size=64,\n    base_channels=192,\n    in_channels=3,\n    resblocks_per_downsample=3,\n    attention_res=(32, 16, 8),\n    norm_cfg=dict(type='GN32', num_groups=32),\n    dropout=0.1,\n    num_classes=0,\n    use_fp16=False,\n    resblock_updown=True,\n    attention_cfg=dict(\n        type='MultiHeadAttentionBlock',\n        num_heads=1,\n        num_head_channels=64,\n        use_new_attention_order=False,\n        encoder_channels=512),\n    use_scale_shift_norm=True,\n    text_ctx=128,\n    xf_width=512,\n    xf_layers=16,\n    xf_heads=8,\n    xf_final_ln=True,\n    xf_padding=True,\n)\nunet_up_cfg = dict(\n    type='SuperResText2ImUNet',\n    image_size=256,\n    base_channels=192,\n    in_channels=3,\n    output_cfg=dict(var='FIXED'),\n    resblocks_per_downsample=2,\n    attention_res=(32, 16, 8),\n    norm_cfg=dict(type='GN32', num_groups=32),\n    dropout=0.1,\n    num_classes=0,\n    use_fp16=False,\n    resblock_updown=True,\n    attention_cfg=dict(\n        type='MultiHeadAttentionBlock',\n        num_heads=1,\n        num_head_channels=64,\n        use_new_attention_order=False,\n        encoder_channels=512),\n    use_scale_shift_norm=True,\n    text_ctx=128,\n    xf_width=512,\n    xf_layers=16,\n    xf_heads=8,\n    xf_final_ln=True,\n    xf_padding=True,\n)\n\nmodel = dict(\n    type='Glide',\n    data_preprocessor=dict(type='DataPreprocessor', mean=[127.5], std=[127.5]),\n    unet=unet_cfg,\n    diffusion_scheduler=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='squaredcos_cap_v2'),\n    unet_up=unet_up_cfg,\n    diffusion_scheduler_up=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='linear'),\n    use_fp16=False)\n"
  },
  {
    "path": "projects/glide/configs/glide_ddim-classifier-free_laion-64x64.py",
    "content": "model = dict(\n    type='Glide',\n    data_preprocessor=dict(type='DataPreprocessor', mean=[127.5], std=[127.5]),\n    unet=dict(\n        type='Text2ImUNet',\n        image_size=64,\n        base_channels=192,\n        in_channels=3,\n        resblocks_per_downsample=3,\n        attention_res=(32, 16, 8),\n        norm_cfg=dict(type='GN32', num_groups=32),\n        dropout=0.1,\n        num_classes=0,\n        use_fp16=False,\n        resblock_updown=True,\n        attention_cfg=dict(\n            type='MultiHeadAttentionBlock',\n            num_heads=1,\n            num_head_channels=64,\n            use_new_attention_order=False,\n            encoder_channels=512),\n        use_scale_shift_norm=True,\n        text_ctx=128,\n        xf_width=512,\n        xf_layers=16,\n        xf_heads=8,\n        xf_final_ln=True,\n        xf_padding=True,\n    ),\n    diffusion_scheduler=dict(\n        type='EditDDIMScheduler',\n        variance_type='learned_range',\n        beta_schedule='squaredcos_cap_v2'),\n    use_fp16=False)\n"
  },
  {
    "path": "projects/glide/models/__init__.py",
    "content": "from .glide import Glide\nfrom .text2im_unet import SuperResText2ImUNet, Text2ImUNet\n\n__all__ = ['Text2ImUNet', 'Glide', 'SuperResText2ImUNet']\n"
  },
  {
    "path": "projects/glide/models/glide.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom typing import Dict, List, Optional, Union\n\nimport mmengine\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\nfrom mmengine.model import BaseModel, is_model_wrapper\nfrom mmengine.optim import OptimWrapperDict\nfrom mmengine.runner.checkpoint import _load_checkpoint_with_prefix\nfrom tqdm import tqdm\n\nfrom mmagic.registry import DIFFUSION_SCHEDULERS, MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils.typing import ForwardInputs, SampleList\n\nModelType = Union[Dict, nn.Module]\n\n\ndef classifier_grad(classifier, x, t, y=None, classifier_scale=1.0):\n    \"\"\"compute classification gradient to x.\"\"\"\n    assert y is not None\n    with torch.enable_grad():\n        x_in = x.detach().requires_grad_(True)\n        logits = classifier(x_in, t)\n        log_probs = F.log_softmax(logits, dim=-1)\n        selected = log_probs[range(len(logits)), y.view(-1)]\n        return torch.autograd.grad(selected.sum(), x_in)[0] * classifier_scale\n\n\n@MODELS.register_module('GLIDE')\n@MODELS.register_module()\nclass Glide(BaseModel):\n    \"\"\"GLIDE: Guided language to image diffusion for generation and editing.\n        Refer to: https://github.com/openai/glide-text2im.\n\n\n    Args:\n        data_preprocessor (dict, optional): The pre-process configuration for\n            :class:`BaseDataPreprocessor`.\n        unet (ModelType): Configuration for the denoising Unet.\n        diffusion_scheduler (ModelType): Configuration for the diffusion\n            scheduler.\n        unet_up (ModelType, optional): Configuration for the upsampling\n            denoising UNet. Defaults to None.\n        diffusion_scheduler_up (ModelType, optional): Configuration for\n            the upsampling diffusion scheduler. Defaults to None.\n        use_fp16 (bool, optional): Whether to use fp16 for the unet model.\n            Defaults to False.\n        classifier (ModelType, optional): Configuration for the classifier.\n            Defaults to None.\n        classifier_scale (float): Classifier scale for classifier guidance.\n            Defaults to 1.0.\n        data_preprocessor (Optional[ModelType]): Configuration for the data\n            preprocessor.\n        pretrained_cfgs (dict, optional): Path configuration for pretrained\n            weights. Usually, this is a dict containing the module name and\n            the corresponding ckpt path. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 unet: ModelType,\n                 diffusion_scheduler: ModelType,\n                 unet_up: Optional[ModelType] = None,\n                 diffusion_scheduler_up: Optional[ModelType] = None,\n                 use_fp16: Optional[bool] = False,\n                 classifier: Optional[dict] = None,\n                 classifier_scale: float = 1.0,\n                 data_preprocessor: Optional[ModelType] = dict(\n                     type='DataPreprocessor'),\n                 pretrained_cfgs: Optional[dict] = None):\n\n        super().__init__(data_preprocessor=data_preprocessor)\n        self.unet = unet if isinstance(unet, nn.Module) else MODELS.build(unet)\n        self.diffusion_scheduler = DIFFUSION_SCHEDULERS.build(\n            diffusion_scheduler) if isinstance(diffusion_scheduler,\n                                               dict) else diffusion_scheduler\n\n        self.unet_up = None\n        self.diffusion_scheduler_up = None\n        if unet_up:\n            self.unet_up = unet_up if isinstance(\n                unet_up, nn.Module) else MODELS.build(unet_up)\n            if diffusion_scheduler_up:\n                self.diffusion_scheduler_up = DIFFUSION_SCHEDULERS.build(\n                    diffusion_scheduler_up) if isinstance(\n                        diffusion_scheduler_up,\n                        dict) else diffusion_scheduler_up\n            else:\n                self.diffusion_scheduler_up = deepcopy(\n                    self.diffusion_scheduler)\n\n        if classifier:\n            self.classifier = MODELS.build(classifier)\n        else:\n            self.classifier = None\n        self.classifier_scale = classifier_scale\n\n        if pretrained_cfgs:\n            self.load_pretrained_models(pretrained_cfgs)\n        if use_fp16:\n            mmengine.print_log('Convert unet modules to floatpoint16')\n            self.unet.convert_to_fp16()\n\n    def load_pretrained_models(self, pretrained_cfgs):\n        \"\"\"_summary_\n\n        Args:\n            pretrained_cfgs (_type_): _description_\n        \"\"\"\n        for key, ckpt_cfg in pretrained_cfgs.items():\n            prefix = ckpt_cfg.get('prefix', '')\n            map_location = ckpt_cfg.get('map_location', 'cpu')\n            strict = ckpt_cfg.get('strict', True)\n            ckpt_path = ckpt_cfg.get('ckpt_path')\n            state_dict = _load_checkpoint_with_prefix(prefix, ckpt_path,\n                                                      map_location)\n            getattr(self, key).load_state_dict(state_dict, strict=strict)\n            mmengine.print_log(f'Load pretrained {key} from {ckpt_path}')\n\n    @property\n    def device(self):\n        \"\"\"Get current device of the model.\n\n        Returns:\n            torch.device: The current device of the model.\n        \"\"\"\n        return next(self.parameters()).device\n\n    @torch.no_grad()\n    def infer(self,\n              init_image: Optional[torch.Tensor] = None,\n              prompt: str = None,\n              batch_size: Optional[int] = 1,\n              guidance_scale: float = 3.,\n              num_inference_steps: int = 50,\n              num_inference_steps_up: Optional[int] = 27,\n              labels: Optional[torch.Tensor] = None,\n              classifier_scale: float = 0.0,\n              show_progress: Optional[bool] = False):\n        \"\"\"Inference function for guided diffusion.\n\n        Args:\n            init_image (torch.Tensor, optional): Starting noise for diffusion.\n                Defaults to None.\n            prompt (str): The prompt to guide the image generation.\n            batch_size (int, optional): Batch size for generation.\n                Defaults to 1.\n            num_inference_steps (int, optional): The number of denoising steps.\n                Defaults to 50.\n            num_inference_steps_up (int, optional): The number of upsampling\n                denoising steps. Defaults to 27.\n            labels (torch.Tensor, optional): Labels for the classifier.\n                Defaults to None.\n            show_progress (bool, optional): Whether to show the progress bar.\n                Defaults to False.\n\n        Returns:\n            torch.Tensor: Generated images.\n        \"\"\"\n        # Sample gaussian noise to begin loop\n        if init_image is None:\n            image = torch.randn((2 * batch_size, self.unet.in_channels,\n                                 self.unet.image_size, self.unet.image_size))\n            image = image.to(self.device)\n        else:\n            image = init_image\n\n        # set step values\n        if num_inference_steps > 0:\n            self.diffusion_scheduler.set_timesteps(num_inference_steps)\n\n        timesteps = self.diffusion_scheduler.timesteps\n\n        # text embedding\n        tokens = self.unet.tokenizer.encode(prompt)\n        tokens, mask = self.unet.tokenizer.padded_tokens_and_mask(tokens, 128)\n\n        # Create the classifier-free guidance tokens (empty)\n        # full_batch_size = batch_size * 2\n        uncond_tokens, uncond_mask = \\\n            self.unet.tokenizer.padded_tokens_and_mask(\n                [], 128)\n\n        tokens = torch.tensor(\n            [tokens] * batch_size + [uncond_tokens] * batch_size,\n            device=self.device)\n        mask = torch.tensor(\n            [mask] * batch_size + [uncond_mask] * batch_size,\n            dtype=torch.bool,\n            device=self.device)\n\n        if show_progress and mmengine.dist.is_main_process():\n            timesteps = tqdm(timesteps)\n\n        for t in timesteps:\n            # 1. predicted model_output\n            half = image[:len(image) // 2]\n            combined = torch.cat([half, half], dim=0)\n            model_output = self.unet(combined, t, tokens=tokens, mask=mask)\n            eps, rest = model_output[:, :3], model_output[:, 3:]\n            cond_eps, uncond_eps = torch.split(eps, len(eps) // 2, dim=0)\n            half_eps = uncond_eps + guidance_scale * (cond_eps - uncond_eps)\n            eps = torch.cat([half_eps, half_eps], dim=0)\n            noise_pred = torch.cat([eps, rest], dim=1)\n\n            # 2. compute previous image: x_t -> x_t-1\n            diffusion_scheduler_output = self.diffusion_scheduler.step(\n                noise_pred, t, image)\n\n            # 3. applying classifier guide\n            if self.classifier and classifier_scale != 0.0:\n                gradient = classifier_grad(\n                    self.classifier,\n                    image,\n                    t,\n                    labels,\n                    classifier_scale=classifier_scale)\n                guided_mean = (\n                    diffusion_scheduler_output['mean'].float() +\n                    diffusion_scheduler_output['sigma'] * gradient.float())\n                image = guided_mean + diffusion_scheduler_output[\n                    'sigma'] * diffusion_scheduler_output['noise']\n            else:\n                image = diffusion_scheduler_output['prev_sample']\n\n        # abandon unconditional image\n        image = image[:image.shape[0] // 2]\n\n        if self.unet_up:\n            image = self.infer_up(\n                low_res_img=image,\n                batch_size=batch_size,\n                prompt=prompt,\n                num_inference_steps=num_inference_steps_up)\n\n        return {'samples': image}\n\n    @torch.no_grad()\n    def infer_up(self,\n                 low_res_img: torch.Tensor,\n                 batch_size: int = 1,\n                 init_image: Optional[torch.Tensor] = None,\n                 prompt: Optional[str] = None,\n                 num_inference_steps: int = 27,\n                 show_progress: bool = False):\n        \"\"\"Inference function for upsampling guided diffusion.\n\n        Args:\n            low_res_img (torch.Tensor): Low resolution image\n                (shape: [B, C, H, W]) for upsampling.\n            batch_size (int, optional): Batch size for generation.\n                Defaults to 1.\n            init_image (torch.Tensor, optional): Starting noise\n                (shape: [B, C, H, W]) for diffusion. Defaults to None.\n            prompt (str, optional): The text prompt to guide the image\n                generation. Defaults to None.\n            num_inference_steps (int, optional): The number of denoising\n                steps. Defaults to 27.\n            show_progress (bool, optional): Whether to show the progress bar.\n                Defaults to False.\n\n        Returns:\n            torch.Tensor: Generated upsampled images (shape: [B, C, H, W]).\n        \"\"\"\n        if init_image is None:\n            image = torch.randn(\n                (batch_size, self.unet_up.in_channels // 2,\n                 self.unet_up.image_size, self.unet_up.image_size))\n            image = image.to(self.device)\n        else:\n            image = init_image\n\n        # set step values\n        if num_inference_steps > 0:\n            self.diffusion_scheduler_up.set_timesteps(num_inference_steps)\n        timesteps = self.diffusion_scheduler_up.timesteps\n\n        # text embedding\n        tokens = self.unet.tokenizer.encode(prompt)\n        tokens, mask = self.unet.tokenizer.padded_tokens_and_mask(tokens, 128)\n        tokens = torch.tensor(\n            [tokens] * batch_size, dtype=torch.bool, device=self.device)\n        mask = torch.tensor(\n            [mask] * batch_size, dtype=torch.bool, device=self.device)\n\n        if show_progress and mmengine.dist.is_main_process():\n            timesteps = tqdm(timesteps)\n\n        for t in timesteps:\n            noise_pred = self.unet_up(\n                image, t, low_res=low_res_img, tokens=tokens, mask=mask)\n            # compute previous image: x_t -> x_t-1\n            diffusion_scheduler_output = self.diffusion_scheduler_up.step(\n                noise_pred, t, image)\n            image = diffusion_scheduler_output['prev_sample']\n\n        return image\n\n    def forward(self,\n                inputs: ForwardInputs,\n                data_samples: Optional[list] = None,\n                mode: Optional[str] = None) -> List[DataSample]:\n        \"\"\"_summary_\n\n        Args:\n            inputs (ForwardInputs): _description_\n            data_samples (Optional[list], optional): _description_.\n                Defaults to None.\n            mode (Optional[str], optional): _description_. Defaults to None.\n\n        Returns:\n            List[DataSample]: _description_\n        \"\"\"\n        init_image = inputs.get('init_image', None)\n        batch_size = inputs.get('batch_size', 1)\n        labels = data_samples.get('labels', None)\n        sample_kwargs = inputs.get('sample_kwargs', dict())\n\n        num_inference_steps = sample_kwargs.get(\n            'num_inference_steps',\n            self.diffusion_scheduler.num_train_timesteps)\n        show_progress = sample_kwargs.get('show_progress', False)\n        classifier_scale = sample_kwargs.get('classifier_scale',\n                                             self.classifier_scale)\n\n        outputs = self.infer(\n            init_image=init_image,\n            batch_size=batch_size,\n            num_inference_steps=num_inference_steps,\n            show_progress=show_progress,\n            classifier_scale=classifier_scale)\n\n        batch_sample_list = []\n        for idx in range(batch_size):\n            gen_sample = DataSample()\n            if data_samples:\n                gen_sample.update(data_samples[idx])\n            if isinstance(outputs, dict):\n                gen_sample.ema = DataSample(\n                    fake_img=outputs['ema'][idx], sample_model='ema')\n                gen_sample.orig = DataSample(\n                    fake_img=outputs['orig'][idx], sample_model='orig')\n                gen_sample.sample_model = 'ema/orig'\n                gen_sample.set_gt_label(labels[idx])\n                gen_sample.ema.set_gt_label(labels[idx])\n                gen_sample.orig.set_gt_label(labels[idx])\n            else:\n                gen_sample.fake_img = outputs[idx]\n                gen_sample.set_gt_label(labels[idx])\n\n            # Append input condition (noise and sample_kwargs) to\n            # batch_sample_list\n            if init_image is not None:\n                gen_sample.noise = init_image[idx]\n            gen_sample.sample_kwargs = deepcopy(sample_kwargs)\n            batch_sample_list.append(gen_sample)\n        return batch_sample_list\n\n    @torch.no_grad()\n    def val_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data.\n\n        Calls ``self.data_preprocessor(data)`` and\n        ``self(inputs, data_sample, mode=None)`` in order. Return the\n        generated results which will be passed to evaluator.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            SampleList: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    @torch.no_grad()\n    def test_step(self, data: dict) -> SampleList:\n        \"\"\"Gets the generated image of given data. Same as :meth:`val_step`.\n\n        Args:\n            data (dict): Data sampled from metric specific\n                sampler. More details in `Metrics` and `Evaluator`.\n\n        Returns:\n            List[DataSample]: Generated image or image dict.\n        \"\"\"\n        data = self.data_preprocessor(data)\n        outputs = self(**data)\n        return outputs\n\n    def train_step(self, data: dict, optim_wrapper: OptimWrapperDict):\n        \"\"\"_summary_\n\n        Args:\n            data (dict): _description_\n            optim_wrapper (OptimWrapperDict): _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        message_hub = MessageHub.get_current_instance()\n        curr_iter = message_hub.get_info('iter')\n\n        # sampling x0 and timestep\n        data = self.data_preprocessor(data)\n        real_imgs = data['inputs']\n        timestep = self.diffusion_scheduler.sample_timestep()\n\n        # calculating loss\n        loss_dict = self.diffusion_scheduler.training_loss(\n            self.unet, real_imgs, timestep)\n        loss, log_vars = self._parse_losses(loss_dict)\n        optim_wrapper['denoising'].update_params(loss)\n\n        # update EMA\n        if self.with_ema_denoising and (curr_iter + 1) >= self.ema_start:\n            self.denoising_ema.update_parameters(\n                self.denoising_ema.\n                module if is_model_wrapper(self.denoising) else self.denoising)\n            # if not update buffer, copy buffer from orig model\n            if not self.denoising_ema.update_buffers:\n                self.denoising_ema.sync_buffers(\n                    self.denoising.module\n                    if is_model_wrapper(self.denoising) else self.denoising)\n        elif self.with_ema_denoising:\n            # before ema, copy weights from orig\n            self.denoising_ema.sync_parameters(\n                self.denoising.\n                module if is_model_wrapper(self.denoising) else self.denoising)\n\n        return log_vars\n"
  },
  {
    "path": "projects/glide/models/glide_modules.py",
    "content": "import math\n\nimport torch\nimport torch.nn as nn\n\n\nclass QKVMultiheadAttention(nn.Module):\n\n    def __init__(self, n_heads: int, n_ctx: int):\n        super().__init__()\n        self.n_heads = n_heads\n        self.n_ctx = n_ctx\n\n    def forward(self, qkv):\n        bs, n_ctx, width = qkv.shape\n        attn_ch = width // self.n_heads // 3\n        scale = 1 / math.sqrt(math.sqrt(attn_ch))\n        qkv = qkv.view(bs, n_ctx, self.n_heads, -1)\n        q, k, v = torch.split(qkv, attn_ch, dim=-1)\n        weight = torch.einsum(\n            'bthc,bshc->bhts', q * scale,\n            k * scale)  # More stable with f16 than dividing afterwards\n        wdtype = weight.dtype\n        weight = torch.softmax(weight.float(), dim=-1).type(wdtype)\n        return torch.einsum('bhts,bshc->bthc', weight,\n                            v).reshape(bs, n_ctx, -1)\n\n\nclass MultiheadAttention(nn.Module):\n\n    def __init__(self, n_ctx, width, heads):\n        super().__init__()\n        self.n_ctx = n_ctx\n        self.width = width\n        self.heads = heads\n        self.c_qkv = nn.Linear(width, width * 3)\n        self.c_proj = nn.Linear(width, width)\n        self.attention = QKVMultiheadAttention(heads, n_ctx)\n\n    def forward(self, x):\n        x = self.c_qkv(x)\n        x = self.attention(x)\n        x = self.c_proj(x)\n        return x\n\n\nclass MLP(nn.Module):\n\n    def __init__(self, width):\n        super().__init__()\n        self.width = width\n        self.c_fc = nn.Linear(width, width * 4)\n        self.c_proj = nn.Linear(width * 4, width)\n        self.gelu = nn.GELU()\n\n    def forward(self, x):\n        return self.c_proj(self.gelu(self.c_fc(x)))\n\n\nclass ResidualAttentionBlock(nn.Module):\n\n    def __init__(\n        self,\n        n_ctx: int,\n        width: int,\n        heads: int,\n    ):\n        super().__init__()\n\n        self.attn = MultiheadAttention(\n            n_ctx,\n            width,\n            heads,\n        )\n        # TODO should the LayerNorm support fp15 gain\n        # and bias but fp32 mean and std?\n        self.ln_1 = nn.LayerNorm(width)\n        self.mlp = MLP(width)\n        self.ln_2 = nn.LayerNorm(width)\n\n    def forward(self, x: torch.Tensor):\n        x = x + self.attn(self.ln_1(x))\n        x = x + self.mlp(self.ln_2(x))\n        return x\n\n\nclass Transformer(nn.Module):\n\n    def __init__(\n        self,\n        n_ctx: int,\n        width: int,\n        layers: int,\n        heads: int,\n    ):\n        super().__init__()\n        self.n_ctx = n_ctx\n        self.width = width\n        self.layers = layers\n        self.resblocks = nn.ModuleList([\n            ResidualAttentionBlock(\n                n_ctx,\n                width,\n                heads,\n            ) for _ in range(layers)\n        ])\n\n    def forward(self, x: torch.Tensor):\n        for block in self.resblocks:\n            x = block(x)\n        return x\n"
  },
  {
    "path": "projects/glide/models/glide_tokenizer/__init__.py",
    "content": "from .bpe import get_encoder\n\n__all__ = ['get_encoder']\n"
  },
  {
    "path": "projects/glide/models/glide_tokenizer/bpe.py",
    "content": "\"\"\"Byte pair encoding utilities adapted from:\n\nhttps://github.com/openai/gpt-2/blob/master/src/encoder.py\n\"\"\"\n\nimport gzip\nimport json\nimport os\nfrom functools import lru_cache\nfrom typing import List, Tuple\n\nimport regex as re\n\n\n@lru_cache()\ndef bytes_to_unicode():\n    \"\"\"Returns list of utf-8 byte and a corresponding list of unicode strings.\n\n    The reversible bpe codes work on unicode strings. This means you need a\n    large # of unicode characters in your vocab if you want to avoid UNKs. When\n    you're at something like a 10B token dataset you end up needing around 5K\n    for decent coverage. This is a significant percentage of your normal, say,\n    32K bpe vocab. To avoid that, we want lookup tables between utf-8 bytes and\n    unicode strings. And avoids mapping to whitespace/control characters the\n    bpe code barfs on.\n    \"\"\"\n    bs = (\n        list(range(ord('!'),\n                   ord('~') + 1)) + list(range(ord('¡'),\n                                               ord('¬') + 1)) +\n        list(range(ord('®'),\n                   ord('ÿ') + 1)))\n    cs = bs[:]\n    n = 0\n    for b in range(2**8):\n        if b not in bs:\n            bs.append(b)\n            cs.append(2**8 + n)\n            n += 1\n    cs = [chr(n) for n in cs]\n    return dict(zip(bs, cs))\n\n\ndef get_pairs(word):\n    \"\"\"Return set of symbol pairs in a word.\n\n    Word is represented as tuple of symbols (symbols being variable-length\n    strings).\n    \"\"\"\n    pairs = set()\n    prev_char = word[0]\n    for char in word[1:]:\n        pairs.add((prev_char, char))\n        prev_char = char\n    return pairs\n\n\nclass Encoder:\n\n    def __init__(self, encoder, bpe_merges, errors='replace'):\n        self.encoder = encoder\n        self.decoder = {v: k for k, v in self.encoder.items()}\n        self.errors = errors  # how to handle errors in decoding\n        self.byte_encoder = bytes_to_unicode()\n        self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}\n        self.bpe_ranks = dict(zip(bpe_merges, range(len(bpe_merges))))\n        self.cache = {}\n\n        # Should haved added re.IGNORECASE so BPE merges can happen for\n        # capitalized versions of contractions\n        self.pat = re.compile(\n            r\"\"\"'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]\n            +|\\s+(?!\\S)|\\s+\"\"\")\n\n    @property\n    def n_vocab(self) -> int:\n        return len(self.encoder)\n\n    @property\n    def end_token(self) -> int:\n        return self.n_vocab - 1\n\n    def padded_tokens_and_mask(self, tokens: List[int],\n                               text_ctx: int) -> Tuple[List[int], List[bool]]:\n        tokens = tokens[:text_ctx]\n        padding = text_ctx - len(tokens)\n        padded_tokens = tokens + [self.end_token] * padding\n        mask = [True] * len(tokens) + [False] * padding\n        return padded_tokens, mask\n\n    def bpe(self, token):\n        if token in self.cache:\n            return self.cache[token]\n        word = tuple(token)\n        pairs = get_pairs(word)\n\n        if not pairs:\n            return token\n\n        while True:\n            bigram = min(\n                pairs, key=lambda pair: self.bpe_ranks.get(pair, float('inf')))\n            if bigram not in self.bpe_ranks:\n                break\n            first, second = bigram\n            new_word = []\n            i = 0\n            while i < len(word):\n                try:\n                    j = word.index(first, i)\n                    new_word.extend(word[i:j])\n                    i = j\n                except:  # noqa: E722\n                    new_word.extend(word[i:])\n                    break\n\n                if word[i] == first and i < len(word) - 1 and word[\n                        i + 1] == second:\n                    new_word.append(first + second)\n                    i += 2\n                else:\n                    new_word.append(word[i])\n                    i += 1\n            new_word = tuple(new_word)\n            word = new_word\n            if len(word) == 1:\n                break\n            else:\n                pairs = get_pairs(word)\n        word = ' '.join(word)\n        self.cache[token] = word\n        return word\n\n    def encode(self, text):\n        text = text.lower()\n        bpe_tokens = []\n        for token in re.findall(self.pat, text):\n            token = ''.join(self.byte_encoder[b]\n                            for b in token.encode('utf-8'))\n            bpe_tokens.extend(self.encoder[bpe_token]\n                              for bpe_token in self.bpe(token).split(' '))\n        return bpe_tokens\n\n    def decode(self, tokens):\n        text = ''.join([self.decoder[token] for token in tokens])\n        text = bytearray([self.byte_decoder[c] for c in text]).decode(\n            'utf-8', errors=self.errors)\n        return text\n\n\ndef get_encoder():\n    root_dir = os.path.dirname(os.path.abspath(__file__))\n    with gzip.open(os.path.join(root_dir, 'encoder.json.gz'), 'r') as f:\n        encoder = json.load(f)\n    with gzip.open(os.path.join(root_dir, 'vocab.bpe.gz'), 'r') as f:\n        bpe_data = str(f.read(), 'utf-8')\n    bpe_merges = [\n        tuple(merge_str.split()) for merge_str in bpe_data.split('\\n')[1:-1]\n    ]\n    return Encoder(\n        encoder=encoder,\n        bpe_merges=bpe_merges,\n    )\n"
  },
  {
    "path": "projects/glide/models/glide_tokenizer/simple_tokenizer.py",
    "content": "\"\"\"Copied from: https://github.com/openai/CLIP/blob/573315e83f07b53a61ff5098757\ne8fc885f1703e/clip/simple_tokenizer.py.\"\"\"\n\nimport gzip\nimport html\nimport os\nfrom functools import lru_cache\nfrom typing import List, Tuple\n\nimport ftfy\nimport regex as re\n\n\n@lru_cache()\ndef default_bpe():\n    return os.path.join(\n        os.path.dirname(os.path.abspath(__file__)),\n        'bpe_simple_vocab_16e6.txt.gz')\n\n\n@lru_cache()\ndef bytes_to_unicode():\n    \"\"\"Returns list of utf-8 byte and a corresponding list of unicode strings.\n\n    The reversible bpe codes work on unicode strings. This means you need a\n    large # of unicode characters in your vocab if you want to avoid UNKs. When\n    you're at something like a 10B token dataset you end up needing around 5K\n    for decent coverage. This is a significant percentage of your normal, say,\n    32K bpe vocab. To avoid that, we want lookup tables between utf-8 bytes and\n    unicode strings. And avoids mapping to whitespace/control characters the\n    bpe code barfs on.\n    \"\"\"\n    bs = (\n        list(range(ord('!'),\n                   ord('~') + 1)) + list(range(ord('¡'),\n                                               ord('¬') + 1)) +\n        list(range(ord('®'),\n                   ord('ÿ') + 1)))\n    cs = bs[:]\n    n = 0\n    for b in range(2**8):\n        if b not in bs:\n            bs.append(b)\n            cs.append(2**8 + n)\n            n += 1\n    cs = [chr(n) for n in cs]\n    return dict(zip(bs, cs))\n\n\ndef get_pairs(word):\n    \"\"\"Return set of symbol pairs in a word.\n\n    Word is represented as tuple of symbols (symbols being variable-length\n    strings).\n    \"\"\"\n    pairs = set()\n    prev_char = word[0]\n    for char in word[1:]:\n        pairs.add((prev_char, char))\n        prev_char = char\n    return pairs\n\n\ndef basic_clean(text):\n    text = ftfy.fix_text(text)\n    text = html.unescape(html.unescape(text))\n    return text.strip()\n\n\ndef whitespace_clean(text):\n    text = re.sub(r'\\s+', ' ', text)\n    text = text.strip()\n    return text\n\n\nclass SimpleTokenizer(object):\n\n    def __init__(self, bpe_path: str = default_bpe()):\n        self.byte_encoder = bytes_to_unicode()\n        self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}\n        merges = gzip.open(bpe_path).read().decode('utf-8').split('\\n')\n        merges = merges[1:49152 - 256 - 2 + 1]\n        merges = [tuple(merge.split()) for merge in merges]\n        vocab = list(bytes_to_unicode().values())\n        vocab = vocab + [v + '</w>' for v in vocab]\n        for merge in merges:\n            vocab.append(''.join(merge))\n        vocab.extend(['<|startoftext|>', '<|endoftext|>'])\n        self.encoder = dict(zip(vocab, range(len(vocab))))\n        self.decoder = {v: k for k, v in self.encoder.items()}\n        self.bpe_ranks = dict(zip(merges, range(len(merges))))\n        self.cache = {\n            '<|startoftext|>': '<|startoftext|>',\n            '<|endoftext|>': '<|endoftext|>'\n        }\n        self.pat = re.compile(\n            r\"\"\"<\\|startoftext\\|>|<\\|endoftext\\|>|'s|'t|'re|'ve|'m|'ll|'d|[\\p\n            {L}]+|[\\p{N}]|[^\\s\\p{L}\\p{N}]+\"\"\",\n            re.IGNORECASE,\n        )\n\n    @property\n    def start_token(self):\n        return self.encoder['<|startoftext|>']\n\n    @property\n    def end_token(self):\n        return self.encoder['<|endoftext|>']\n\n    def padded_tokens_and_len(self, tokens: List[int],\n                              text_ctx: int) -> Tuple[List[int], int]:\n        tokens = [self.start_token] + tokens[:text_ctx - 2] + [self.end_token]\n        text_len = len(tokens)\n        padding = text_ctx - len(tokens)\n        padded_tokens = tokens + [0] * padding\n        return padded_tokens, text_len\n\n    def bpe(self, token):\n        if token in self.cache:\n            return self.cache[token]\n        word = tuple(token[:-1]) + (token[-1] + '</w>', )\n        pairs = get_pairs(word)\n\n        if not pairs:\n            return token + '</w>'\n\n        while True:\n            bigram = min(\n                pairs, key=lambda pair: self.bpe_ranks.get(pair, float('inf')))\n            if bigram not in self.bpe_ranks:\n                break\n            first, second = bigram\n            new_word = []\n            i = 0\n            while i < len(word):\n                try:\n                    j = word.index(first, i)\n                    new_word.extend(word[i:j])\n                    i = j\n                except:  # noqa: E722\n                    new_word.extend(word[i:])\n                    break\n\n                if word[i] == first and i < len(word) - 1 and word[\n                        i + 1] == second:\n                    new_word.append(first + second)\n                    i += 2\n                else:\n                    new_word.append(word[i])\n                    i += 1\n            new_word = tuple(new_word)\n            word = new_word\n            if len(word) == 1:\n                break\n            else:\n                pairs = get_pairs(word)\n        word = ' '.join(word)\n        self.cache[token] = word\n        return word\n\n    def encode(self, text):\n        bpe_tokens = []\n        text = whitespace_clean(basic_clean(text)).lower()\n        for token in re.findall(self.pat, text):\n            token = ''.join(self.byte_encoder[b]\n                            for b in token.encode('utf-8'))\n            bpe_tokens.extend(self.encoder[bpe_token]\n                              for bpe_token in self.bpe(token).split(' '))\n        return bpe_tokens\n\n    def decode(self, tokens):\n        text = ''.join([self.decoder[token] for token in tokens])\n        text = (\n            bytearray([self.byte_decoder[c] for c in text\n                       ]).decode('utf-8',\n                                 errors='replace').replace('</w>', ' '))\n        return text\n"
  },
  {
    "path": "projects/glide/models/text2im_unet.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom mmagic.models import DenoisingUnet\nfrom mmagic.registry import MODELS\nfrom .glide_modules import Transformer\nfrom .glide_tokenizer import get_encoder\n\n\n@MODELS.register_module()\nclass Text2ImUNet(DenoisingUnet):\n    \"\"\"A UNetModel used in GLIDE that conditions on text with an encoding\n    transformer. Expects an extra kwarg `tokens` of text.\n\n    Args:\n        text_ctx (int): Number of text tokens to expect.\n        xf_width (int): Width of the transformer.\n        xf_layers (int): Depth of the transformer.\n        xf_heads (int): Number of heads in the transformer.\n        xf_final_ln (bool): Whether to use a LayerNorm after the output layer.\n        tokenizer (callable, optional): Text tokenizer for sampling/vocab\n            size. Defaults to get_encoder().\n        cache_text_emb (bool, optional): Whether to cache text embeddings.\n            Defaults to False.\n        xf_ar (float, optional): Autoregressive weight for the transformer.\n            Defaults to 0.0.\n        xf_padding (bool, optional): Whether to use padding in the transformer.\n            Defaults to False.\n        share_unemb (bool, optional): Whether to share UNet embeddings.\n            Defaults to False.\n    \"\"\"\n\n    def __init__(\n        self,\n        text_ctx,\n        xf_width,\n        xf_layers,\n        xf_heads,\n        xf_final_ln,\n        *args,\n        tokenizer=get_encoder(),\n        cache_text_emb=False,\n        xf_ar=0.0,\n        xf_padding=False,\n        share_unemb=False,\n        **kwargs,\n    ):\n        self.text_ctx = text_ctx\n        self.xf_width = xf_width\n        self.xf_ar = xf_ar\n        self.xf_padding = xf_padding\n        self.tokenizer = tokenizer\n\n        if not xf_width:\n            super().__init__(*args, **kwargs, encoder_channels=None)\n        else:\n            super().__init__(*args, **kwargs, encoder_channels=xf_width)\n\n        if self.xf_width:\n            self.transformer = Transformer(\n                text_ctx,\n                xf_width,\n                xf_layers,\n                xf_heads,\n            )\n            if xf_final_ln:\n                self.final_ln = nn.LayerNorm(xf_width)\n            else:\n                self.final_ln = None\n\n            self.token_embedding = nn.Embedding(self.tokenizer.n_vocab,\n                                                xf_width)\n            self.positional_embedding = nn.Parameter(\n                torch.empty(text_ctx, xf_width, dtype=torch.float32))\n            self.transformer_proj = nn.Linear(xf_width, self.base_channels * 4)\n\n            if self.xf_padding:\n                self.padding_embedding = nn.Parameter(\n                    torch.empty(text_ctx, xf_width, dtype=torch.float32))\n            if self.xf_ar:\n                self.unemb = nn.Linear(xf_width, self.tokenizer.n_vocab)\n                if share_unemb:\n                    self.unemb.weight = self.token_embedding.weight\n\n        self.cache_text_emb = cache_text_emb\n        self.cache = None\n\n    def get_text_emb(self, tokens, mask):\n        assert tokens is not None\n\n        if self.cache_text_emb and self.cache is not None:\n            assert (tokens == self.cache['tokens']).all(\n            ), f\"Tokens {tokens.cpu().numpy().tolist()} do not match \\\n            cache {self.cache['tokens'].cpu().numpy().tolist()}\"\n\n            return self.cache\n\n        xf_in = self.token_embedding(tokens.long())\n        xf_in = xf_in + self.positional_embedding[None]\n        if self.xf_padding:\n            assert mask is not None\n            xf_in = torch.where(mask[..., None], xf_in,\n                                self.padding_embedding[None])\n        xf_out = self.transformer(xf_in.to(self.dtype))\n        if self.final_ln is not None:\n            xf_out = self.final_ln(xf_out)\n        xf_proj = self.transformer_proj(xf_out[:, -1])\n        xf_out = xf_out.permute(0, 2, 1)  # NLC -> NCL\n\n        outputs = dict(xf_proj=xf_proj, xf_out=xf_out)\n\n        if self.cache_text_emb:\n            self.cache = dict(\n                tokens=tokens,\n                xf_proj=xf_proj.detach(),\n                xf_out=xf_out.detach() if xf_out is not None else None,\n            )\n\n        return outputs\n\n    def del_cache(self):\n        self.cache = None\n\n    def forward(self, x, timesteps, tokens=None, mask=None):\n        hs = []\n        if not torch.is_tensor(timesteps):\n            timesteps = torch.tensor([timesteps],\n                                     dtype=torch.long,\n                                     device=x.device)\n        elif torch.is_tensor(timesteps) and len(timesteps.shape) == 0:\n            timesteps = timesteps[None].to(x.device)\n\n        if timesteps.shape[0] != x.shape[0]:\n            timesteps = timesteps.repeat(x.shape[0])\n        emb = self.time_embedding(timesteps)\n        if self.xf_width:\n            text_outputs = self.get_text_emb(tokens, mask)\n            xf_proj, xf_out = text_outputs['xf_proj'], text_outputs['xf_out']\n            emb = emb + xf_proj.to(emb)\n        else:\n            xf_out = None\n        h = x.type(self.dtype)\n        for module in self.in_blocks:\n            h = module(h, emb, xf_out)\n            hs.append(h)\n        h = self.mid_blocks(h, emb, xf_out)\n        for module in self.out_blocks:\n            h = torch.cat([h, hs.pop()], dim=1)\n            h = module(h, emb, xf_out)\n        h = h.type(x.dtype)\n        h = self.out(h)\n        return h\n\n\n@MODELS.register_module()\nclass SuperResText2ImUNet(Text2ImUNet):\n    \"\"\"A UNetModel that performs super-resolution.\n\n    Expects an extra kwarg `low_res` to condition on a low-resolution image.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        if 'in_channels' in kwargs:\n            kwargs = dict(kwargs)\n            kwargs['in_channels'] = kwargs['in_channels'] * 2\n        else:\n            args = list(args)\n            args[1] = args[1] * 2\n        super().__init__(*args, **kwargs)\n\n    def forward(self, x, timesteps, low_res=None, **kwargs):\n        _, _, new_height, new_width = x.shape\n        upsampled = F.interpolate(\n            low_res, (new_height, new_width),\n            mode='bilinear',\n            align_corners=False)\n        x = torch.cat([x, upsampled], dim=1)\n        return super().forward(x, timesteps, **kwargs)\n"
  },
  {
    "path": "projects/magicmaker/index.html",
    "content": "<!DOCTYPE html>\n    <html>\n    <head>\n        <meta charset=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        <title>My static Space</title>\n        <style>\n            body {\n                margin: 0;\n            }\n            .space {\n                max-width: 100%;\n                max-height: 100%;\n                width: 100vw;\n                height: 100vh;\n                overflow: hidden;\n            }\n            .iframe {\n                min-width: 100%;\n                min-height: 100%;\n                background: black;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"space\">\n            <iframe \n                class=\"iframe\" \n                allowfullscreen=\"true\" \n                frameborder=\"0\"\n                src=\"https://openxlab.org.cn/magic-maker/home\">\n            </iframe>\n        </div>\n    </body>\n    </html>\n"
  },
  {
    "path": "projects/powerpaint/README.md",
    "content": "# A Task is Worth One Word: Learning with Task Prompts for High-Quality Versatile Image Inpainting\n\n### [Project Page](https://powerpaint.github.io/) | [Paper](https://arxiv.org/abs/2312.03594) | [Online Demo(OpenXlab)](https://openxlab.org.cn/apps/detail/rangoliu/PowerPaint#basic-information)\n\nThis README provides a step-by-step guide to download the repository, set up the required virtual environment named \"PowerPaint\" using conda, and run PowerPaint with or without ControlNet.\n\n## News\n\n**December 18, 2023**\n\n*Enhanced PowerPaint Model*\n\n- We are delighted to announce the release of more stable model weights. These refined weights can now be accessed on [Hugging Face](https://huggingface.co/JunhaoZhuang/PowerPaint-v1/tree/main). The `gradio_PowerPaint.py` file and [Online Demo](https://openxlab.org.cn/apps/detail/rangoliu/PowerPaint) have also been updated as part of this release.\n\n**December 22, 2023**\n\n- The logical error in loading ControlNet has been rectified. The `gradio_PowerPaint.py` file and [Online Demo](https://openxlab.org.cn/apps/detail/rangoliu/PowerPaint) have also been updated.\n\n## Next\n\n**Stronger Model Weights Coming Soon！**\n\n______________________________________________________________________\n\n<img src='https://github.com/open-mmlab/mmagic/assets/12782558/acd01391-c73f-4997-aafd-0869aebcc915'/>\n\n## Getting Started\n\n```bash\n# Clone the Repository\ngit clone https://github.com/open-mmlab/mmagic.git\n\n# Navigate to the Repository\ncd projects/powerpaint\n\n# Create Virtual Environment with Conda\nconda create --name PowerPaint python=3.9\nconda activate PowerPaint\n\n# Install Dependencies\npip install -r requirements.txt\n\n# Create Models Folder\nmkdir models\n\n# Set up Git LFS\ngit lfs install\n\n# Clone PowerPaint Model\ngit lfs clone https://huggingface.co/JunhaoZhuang/PowerPaint-v1/ ./models\n```\n\n## Run PowerPaint\n\nTo run PowerPaint, execute the following command:\n\n```bash\npython gradio_PowerPaint.py\n```\n\nThis command will launch the Gradio interface for PowerPaint.\n\nFeel free to explore and create stunning images with PowerPaint!\n\n## BibTeX\n\n```\n@misc{zhuang2023task,\n      title={A Task is Worth One Word: Learning with Task Prompts for High-Quality Versatile Image Inpainting},\n      author={Junhao Zhuang and Yanhong Zeng and Wenran Liu and Chun Yuan and Kai Chen},\n      year={2023},\n      eprint={2312.03594},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV}\n}\n```\n"
  },
  {
    "path": "projects/powerpaint/gradio_PowerPaint.py",
    "content": "import random\n\nimport cv2\nimport gradio as gr\nimport numpy as np\nimport torch\nfrom controlnet_aux import HEDdetector, OpenposeDetector\nfrom diffusers.pipelines.controlnet.pipeline_controlnet import ControlNetModel\nfrom PIL import Image, ImageFilter\nfrom pipeline.pipeline_PowerPaint import \\\n    StableDiffusionInpaintPipeline as Pipeline\nfrom pipeline.pipeline_PowerPaint_ControlNet import \\\n    StableDiffusionControlNetInpaintPipeline as controlnetPipeline\nfrom safetensors.torch import load_model\nfrom transformers import DPTFeatureExtractor, DPTForDepthEstimation\nfrom utils.utils import TokenizerWrapper, add_tokens\n\ntorch.set_grad_enabled(False)\n\nweight_dtype = torch.float16\nglobal pipe\npipe = Pipeline.from_pretrained(\n    'runwayml/stable-diffusion-inpainting', torch_dtype=weight_dtype)\npipe.tokenizer = TokenizerWrapper(\n    from_pretrained='runwayml/stable-diffusion-v1-5',\n    subfolder='tokenizer',\n    revision=None)\n\nadd_tokens(\n    tokenizer=pipe.tokenizer,\n    text_encoder=pipe.text_encoder,\n    placeholder_tokens=['P_ctxt', 'P_shape', 'P_obj'],\n    initialize_tokens=['a', 'a', 'a'],\n    num_vectors_per_token=10)\n\nload_model(pipe.unet, './models/unet/diffusion_pytorch_model.safetensors')\npipe.text_encoder.load_state_dict(\n    torch.load('./models/text_encoder/pytorch_model.bin'), strict=False)\npipe = pipe.to('cuda')\n\ndepth_estimator = DPTForDepthEstimation.from_pretrained(\n    'Intel/dpt-hybrid-midas').to('cuda')\nfeature_extractor = DPTFeatureExtractor.from_pretrained(\n    'Intel/dpt-hybrid-midas')\nopenpose = OpenposeDetector.from_pretrained('lllyasviel/ControlNet')\nhed = HEDdetector.from_pretrained('lllyasviel/ControlNet')\n\nglobal current_control\ncurrent_control = 'canny'\n# controlnet_conditioning_scale = 0.8\n\n\ndef set_seed(seed):\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    np.random.seed(seed)\n    random.seed(seed)\n\n\ndef get_depth_map(image):\n    image = feature_extractor(\n        images=image, return_tensors='pt').pixel_values.to('cuda')\n    with torch.no_grad(), torch.autocast('cuda'):\n        depth_map = depth_estimator(image).predicted_depth\n\n    depth_map = torch.nn.functional.interpolate(\n        depth_map.unsqueeze(1),\n        size=(1024, 1024),\n        mode='bicubic',\n        align_corners=False,\n    )\n    depth_min = torch.amin(depth_map, dim=[1, 2, 3], keepdim=True)\n    depth_max = torch.amax(depth_map, dim=[1, 2, 3], keepdim=True)\n    depth_map = (depth_map - depth_min) / (depth_max - depth_min)\n    image = torch.cat([depth_map] * 3, dim=1)\n\n    image = image.permute(0, 2, 3, 1).cpu().numpy()[0]\n    image = Image.fromarray((image * 255.0).clip(0, 255).astype(np.uint8))\n    return image\n\n\ndef add_task(prompt, negative_prompt, control_type):\n    # print(control_type)\n    if control_type == 'object-removal':\n        promptA = prompt + ' P_ctxt'\n        promptB = prompt + ' P_ctxt'\n        negative_promptA = negative_prompt + ' P_obj'\n        negative_promptB = negative_prompt + ' P_obj'\n    elif control_type == 'shape-guided':\n        promptA = prompt + ' P_shape'\n        promptB = prompt + ' P_ctxt'\n        negative_promptA = negative_prompt\n        negative_promptB = negative_prompt\n    elif control_type == 'image-outpainting':\n        promptA = prompt + ' P_ctxt'\n        promptB = prompt + ' P_ctxt'\n        negative_promptA = negative_prompt + ' P_obj'\n        negative_promptB = negative_prompt + ' P_obj'\n    else:\n        promptA = prompt + ' P_obj'\n        promptB = prompt + ' P_obj'\n        negative_promptA = negative_prompt\n        negative_promptB = negative_prompt\n\n    return promptA, promptB, negative_promptA, negative_promptB\n\n\ndef predict(input_image, prompt, fitting_degree, ddim_steps, scale, seed,\n            negative_prompt, task, vertical_expansion_ratio,\n            horizontal_expansion_ratio):\n    size1, size2 = input_image['image'].convert('RGB').size\n\n    if task != 'image-outpainting':\n        if size1 < size2:\n            input_image['image'] = input_image['image'].convert('RGB').resize(\n                (640, int(size2 / size1 * 640)))\n        else:\n            input_image['image'] = input_image['image'].convert('RGB').resize(\n                (int(size1 / size2 * 640), 640))\n    else:\n        if size1 < size2:\n            input_image['image'] = input_image['image'].convert('RGB').resize(\n                (512, int(size2 / size1 * 512)))\n        else:\n            input_image['image'] = input_image['image'].convert('RGB').resize(\n                (int(size1 / size2 * 512), 512))\n\n    if (vertical_expansion_ratio is not None\n            and horizontal_expansion_ratio is not None):\n        o_W, o_H = input_image['image'].convert('RGB').size\n        c_W = int(horizontal_expansion_ratio * o_W)\n        c_H = int(vertical_expansion_ratio * o_H)\n\n        expand_img = np.ones((c_H, c_W, 3), dtype=np.uint8) * 127\n        original_img = np.array(input_image['image'])\n        expand_img[int((c_H - o_H) / 2.0):int((c_H - o_H) / 2.0) + o_H,\n                   int((c_W - o_W) / 2.0):int((c_W - o_W) / 2.0) +\n                   o_W, :] = original_img\n\n        blurry_gap = 10\n\n        expand_mask = np.ones((c_H, c_W, 3), dtype=np.uint8) * 255\n        if vertical_expansion_ratio == 1 and horizontal_expansion_ratio != 1:\n            expand_mask[int((c_H - o_H) / 2.0):int((c_H - o_H) / 2.0) + o_H,\n                        int((c_W - o_W) / 2.0) +\n                        blurry_gap:int((c_W - o_W) / 2.0) + o_W -\n                        blurry_gap, :] = 0  # noqa\n        elif vertical_expansion_ratio != 1 and horizontal_expansion_ratio != 1:\n            expand_mask[int((c_H - o_H) / 2.0) +\n                        blurry_gap:int((c_H - o_H) / 2.0) + o_H - blurry_gap,\n                        int((c_W - o_W) / 2.0) +\n                        blurry_gap:int((c_W - o_W) / 2.0) + o_W -\n                        blurry_gap, :] = 0  # noqa\n        elif vertical_expansion_ratio != 1 and horizontal_expansion_ratio == 1:\n            expand_mask[int((c_H - o_H) / 2.0) +\n                        blurry_gap:int((c_H - o_H) / 2.0) + o_H - blurry_gap,\n                        int((c_W - o_W) /\n                            2.0):int((c_W - o_W) / 2.0) + o_W, :] = 0  # noqa\n\n        input_image['image'] = Image.fromarray(expand_img)\n        input_image['mask'] = Image.fromarray(expand_mask)\n\n    promptA, promptB, negative_promptA, negative_promptB = add_task(\n        prompt, negative_prompt, task)\n    print(promptA, promptB, negative_promptA, negative_promptB)\n    img = np.array(input_image['image'].convert('RGB'))\n\n    W = int(np.shape(img)[0] - np.shape(img)[0] % 8)\n    H = int(np.shape(img)[1] - np.shape(img)[1] % 8)\n    input_image['image'] = input_image['image'].resize((H, W))\n    input_image['mask'] = input_image['mask'].resize((H, W))\n    set_seed(seed)\n    global pipe\n    result = pipe(\n        promptA=promptA,\n        promptB=promptB,\n        tradoff=fitting_degree,\n        tradoff_nag=fitting_degree,\n        negative_promptA=negative_promptA,\n        negative_promptB=negative_promptB,\n        image=input_image['image'].convert('RGB'),\n        mask_image=input_image['mask'].convert('RGB'),\n        width=H,\n        height=W,\n        guidance_scale=scale,\n        num_inference_steps=ddim_steps).images[0]\n    mask_np = np.array(input_image['mask'].convert('RGB'))\n    red = np.array(result).astype('float') * 1\n    red[:, :, 0] = 180.0\n    red[:, :, 2] = 0\n    red[:, :, 1] = 0\n    result_m = np.array(result)\n    result_m = Image.fromarray(\n        (result_m.astype('float') * (1 - mask_np.astype('float') / 512.0) +\n         mask_np.astype('float') / 512.0 * red).astype('uint8'))\n    m_img = input_image['mask'].convert('RGB').filter(\n        ImageFilter.GaussianBlur(radius=3))\n    m_img = np.asarray(m_img) / 255.0\n    img_np = np.asarray(input_image['image'].convert('RGB')) / 255.0\n    ours_np = np.asarray(result) / 255.0\n    ours_np = ours_np * m_img + (1 - m_img) * img_np\n    result_paste = Image.fromarray(np.uint8(ours_np * 255))\n\n    dict_res = [input_image['mask'].convert('RGB'), result_m]\n\n    dict_out = [input_image['image'].convert('RGB'), result_paste]\n\n    return dict_out, dict_res\n\n\ndef predict_controlnet(input_image, input_control_image, control_type, prompt,\n                       ddim_steps, scale, seed, negative_prompt,\n                       controlnet_conditioning_scale):\n    promptA = prompt + ' P_obj'\n    promptB = prompt + ' P_obj'\n    negative_promptA = negative_prompt\n    negative_promptB = negative_prompt\n    size1, size2 = input_image['image'].convert('RGB').size\n\n    if size1 < size2:\n        input_image['image'] = input_image['image'].convert('RGB').resize(\n            (640, int(size2 / size1 * 640)))\n    else:\n        input_image['image'] = input_image['image'].convert('RGB').resize(\n            (int(size1 / size2 * 640), 640))\n    img = np.array(input_image['image'].convert('RGB'))\n    W = int(np.shape(img)[0] - np.shape(img)[0] % 8)\n    H = int(np.shape(img)[1] - np.shape(img)[1] % 8)\n    input_image['image'] = input_image['image'].resize((H, W))\n    input_image['mask'] = input_image['mask'].resize((H, W))\n\n    global current_control\n    global pipe\n\n    base_control = ControlNetModel.from_pretrained(\n        'lllyasviel/sd-controlnet-canny', torch_dtype=weight_dtype)\n    control_pipe = controlnetPipeline(pipe.vae, pipe.text_encoder,\n                                      pipe.tokenizer, pipe.unet, base_control,\n                                      pipe.scheduler, None, None, False)\n    control_pipe = control_pipe.to('cuda')\n    current_control = 'canny'\n    if current_control != control_type:\n        if control_type == 'canny' or control_type is None:\n            control_pipe.controlnet = ControlNetModel.from_pretrained(\n                'lllyasviel/sd-controlnet-canny', torch_dtype=weight_dtype)\n        elif control_type == 'pose':\n            control_pipe.controlnet = ControlNetModel.from_pretrained(\n                'lllyasviel/sd-controlnet-openpose', torch_dtype=weight_dtype)\n        elif control_type == 'depth':\n            control_pipe.controlnet = ControlNetModel.from_pretrained(\n                'lllyasviel/sd-controlnet-depth', torch_dtype=weight_dtype)\n        else:\n            control_pipe.controlnet = ControlNetModel.from_pretrained(\n                'lllyasviel/sd-controlnet-hed', torch_dtype=weight_dtype)\n        control_pipe = control_pipe.to('cuda')\n        current_control = control_type\n\n    controlnet_image = input_control_image\n    if current_control == 'canny':\n        controlnet_image = controlnet_image.resize((H, W))\n        controlnet_image = np.array(controlnet_image)\n        controlnet_image = cv2.Canny(controlnet_image, 100, 200)\n        controlnet_image = controlnet_image[:, :, None]\n        controlnet_image = np.concatenate(\n            [controlnet_image, controlnet_image, controlnet_image], axis=2)\n        controlnet_image = Image.fromarray(controlnet_image)\n    elif current_control == 'pose':\n        controlnet_image = openpose(controlnet_image)\n    elif current_control == 'depth':\n        controlnet_image = controlnet_image.resize((H, W))\n        controlnet_image = get_depth_map(controlnet_image)\n    else:\n        controlnet_image = hed(controlnet_image)\n\n    mask_np = np.array(input_image['mask'].convert('RGB'))\n    controlnet_image = controlnet_image.resize((H, W))\n    set_seed(seed)\n    result = control_pipe(\n        promptA=promptB,\n        promptB=promptA,\n        tradoff=1.0,\n        tradoff_nag=1.0,\n        negative_promptA=negative_promptA,\n        negative_promptB=negative_promptB,\n        image=input_image['image'].convert('RGB'),\n        mask_image=input_image['mask'].convert('RGB'),\n        control_image=controlnet_image,\n        width=H,\n        height=W,\n        guidance_scale=scale,\n        controlnet_conditioning_scale=controlnet_conditioning_scale,\n        num_inference_steps=ddim_steps).images[0]\n    red = np.array(result).astype('float') * 1\n    red[:, :, 0] = 180.0\n    red[:, :, 2] = 0\n    red[:, :, 1] = 0\n    result_m = np.array(result)\n    result_m = Image.fromarray(\n        (result_m.astype('float') * (1 - mask_np.astype('float') / 512.0) +\n         mask_np.astype('float') / 512.0 * red).astype('uint8'))\n\n    mask_np = np.array(input_image['mask'].convert('RGB'))\n    m_img = input_image['mask'].convert('RGB').filter(\n        ImageFilter.GaussianBlur(radius=4))\n    m_img = np.asarray(m_img) / 255.0\n    img_np = np.asarray(input_image['image'].convert('RGB')) / 255.0\n    ours_np = np.asarray(result) / 255.0\n    ours_np = ours_np * m_img + (1 - m_img) * img_np\n    result_paste = Image.fromarray(np.uint8(ours_np * 255))\n    return [input_image['image'].convert('RGB'),\n            result_paste], [controlnet_image, result_m]\n\n\ndef infer(input_image, text_guided_prompt, text_guided_negative_prompt,\n          shape_guided_prompt, shape_guided_negative_prompt, fitting_degree,\n          ddim_steps, scale, seed, task, enable_control, input_control_image,\n          control_type, vertical_expansion_ratio, horizontal_expansion_ratio,\n          outpaint_prompt, outpaint_negative_prompt,\n          controlnet_conditioning_scale, removal_prompt,\n          removal_negative_prompt):\n    if task == 'text-guided':\n        prompt = text_guided_prompt\n        negative_prompt = text_guided_negative_prompt\n    elif task == 'shape-guided':\n        prompt = shape_guided_prompt\n        negative_prompt = shape_guided_negative_prompt\n    elif task == 'object-removal':\n        prompt = removal_prompt\n        negative_prompt = removal_negative_prompt\n    elif task == 'image-outpainting':\n        prompt = outpaint_prompt\n        negative_prompt = outpaint_negative_prompt\n        return predict(input_image, prompt, fitting_degree, ddim_steps, scale,\n                       seed, negative_prompt, task, vertical_expansion_ratio,\n                       horizontal_expansion_ratio)\n    else:\n        task = 'text-guided'\n        prompt = text_guided_prompt\n        negative_prompt = text_guided_negative_prompt\n\n    if enable_control and task == 'text-guided':\n        return predict_controlnet(input_image, input_control_image,\n                                  control_type, prompt, ddim_steps, scale,\n                                  seed, negative_prompt,\n                                  controlnet_conditioning_scale)\n    else:\n        return predict(input_image, prompt, fitting_degree, ddim_steps, scale,\n                       seed, negative_prompt, task, None, None)\n\n\ndef select_tab_text_guided():\n    return 'text-guided'\n\n\ndef select_tab_object_removal():\n    return 'object-removal'\n\n\ndef select_tab_image_outpainting():\n    return 'image-outpainting'\n\n\ndef select_tab_shape_guided():\n    return 'shape-guided'\n\n\nwith gr.Blocks(css='style.css') as demo:\n    with gr.Row():\n        gr.Markdown(\n            \"<div align='center'><font size='18'>PowerPaint: High-Quality Versatile Image Inpainting</font></div>\"  # noqa\n        )\n    with gr.Row():\n        gr.Markdown(\n            \"<div align='center'><font size='5'><a href='https://powerpaint.github.io/'>Project Page</a> &ensp;\"  # noqa\n            \"<a href='https://arxiv.org/abs/2312.03594/'>Paper</a> &ensp;\"\n            \"<a href='https://github.com/open-mmlab/mmagic/tree/main/projects/powerpaint'>Code</a> </font></div>\"  # noqa\n        )\n    with gr.Row():\n        gr.Markdown(\n            '**Note:** Due to network-related factors, the page may experience occasional bugs！ If the inpainting results deviate significantly from expectations, consider toggling between task options to refresh the content.'  # noqa\n        )\n    with gr.Row():\n        with gr.Column():\n            gr.Markdown('### Input image and draw mask')\n            input_image = gr.Image(source='upload', tool='sketch', type='pil')\n\n            task = gr.Radio([\n                'text-guided', 'object-removal', 'shape-guided',\n                'image-outpainting'\n            ],\n                            show_label=False,\n                            visible=False)\n\n            # Text-guided object inpainting\n            with gr.Tab('Text-guided object inpainting') as tab_text_guided:\n                enable_text_guided = gr.Checkbox(\n                    label='Enable text-guided object inpainting',\n                    value=True,\n                    interactive=False)\n                text_guided_prompt = gr.Textbox(label='Prompt')\n                text_guided_negative_prompt = gr.Textbox(\n                    label='negative_prompt')\n                gr.Markdown('### Controlnet setting')\n                enable_control = gr.Checkbox(\n                    label='Enable controlnet',\n                    info='Enable this if you want to use controlnet')\n                controlnet_conditioning_scale = gr.Slider(\n                    label='controlnet conditioning scale',\n                    minimum=0,\n                    maximum=1,\n                    step=0.05,\n                    value=0.5,\n                )\n                control_type = gr.Radio(['canny', 'pose', 'depth', 'hed'],\n                                        label='Control type')\n                input_control_image = gr.Image(source='upload', type='pil')\n            tab_text_guided.select(\n                fn=select_tab_text_guided, inputs=None, outputs=task)\n\n            # Object removal inpainting\n            with gr.Tab('Object removal inpainting') as tab_object_removal:\n                enable_object_removal = gr.Checkbox(\n                    label='Enable object removal inpainting',\n                    value=True,\n                    info='The recommended configuration for '\n                    'the Guidance Scale is 10 or higher.'\n                    'If undesired objects appear in the masked area, '\n                    'you can address this by specifically increasing '\n                    'the Guidance Scale.',\n                    interactive=False)\n                removal_prompt = gr.Textbox(label='Prompt')\n                removal_negative_prompt = gr.Textbox(label='negative_prompt')\n            tab_object_removal.select(\n                fn=select_tab_object_removal, inputs=None, outputs=task)\n\n            # Object image outpainting\n            with gr.Tab('Image outpainting') as tab_image_outpainting:\n                enable_object_removal = gr.Checkbox(\n                    label='Enable image outpainting',\n                    value=True,\n                    info='The recommended configuration for the Guidance '\n                    'Scale is 10 or higher. '\n                    'If unwanted random objects appear in '\n                    'the extended image region, '\n                    'you can enhance the cleanliness of the extension '\n                    'area by increasing the Guidance Scale.',\n                    interactive=False)\n                outpaint_prompt = gr.Textbox(label='Outpainting_prompt')\n                outpaint_negative_prompt = gr.Textbox(\n                    label='Outpainting_negative_prompt')\n                horizontal_expansion_ratio = gr.Slider(\n                    label='horizontal expansion ratio',\n                    minimum=1,\n                    maximum=4,\n                    step=0.05,\n                    value=1,\n                )\n                vertical_expansion_ratio = gr.Slider(\n                    label='vertical expansion ratio',\n                    minimum=1,\n                    maximum=4,\n                    step=0.05,\n                    value=1,\n                )\n            tab_image_outpainting.select(\n                fn=select_tab_image_outpainting, inputs=None, outputs=task)\n\n            # Shape-guided object inpainting\n            with gr.Tab('Shape-guided object inpainting') as tab_shape_guided:\n                enable_shape_guided = gr.Checkbox(\n                    label='Enable shape-guided object inpainting',\n                    value=True,\n                    interactive=False)\n                shape_guided_prompt = gr.Textbox(label='shape_guided_prompt')\n                shape_guided_negative_prompt = gr.Textbox(\n                    label='shape_guided_negative_prompt')\n                fitting_degree = gr.Slider(\n                    label='fitting degree',\n                    minimum=0,\n                    maximum=1,\n                    step=0.05,\n                    value=1,\n                )\n            tab_shape_guided.select(\n                fn=select_tab_shape_guided, inputs=None, outputs=task)\n\n            run_button = gr.Button(label='Run')\n            with gr.Accordion('Advanced options', open=False):\n                ddim_steps = gr.Slider(\n                    label='Steps', minimum=1, maximum=50, value=45, step=1)\n                scale = gr.Slider(\n                    label='Guidance Scale',\n                    info='For object removal and image outpainting, '\n                    'it is recommended to set the value at 10 or above.',\n                    minimum=0.1,\n                    maximum=30.0,\n                    value=7.5,\n                    step=0.1)\n                seed = gr.Slider(\n                    label='Seed',\n                    minimum=0,\n                    maximum=2147483647,\n                    step=1,\n                    randomize=True,\n                )\n        with gr.Column():\n            gr.Markdown('### Inpainting result')\n            inpaint_result = gr.Gallery(\n                label='Generated images', show_label=False, columns=2)\n            gr.Markdown('### Mask')\n            gallery = gr.Gallery(\n                label='Generated masks', show_label=False, columns=2)\n\n    run_button.click(\n        fn=infer,\n        inputs=[\n            input_image, text_guided_prompt, text_guided_negative_prompt,\n            shape_guided_prompt, shape_guided_negative_prompt, fitting_degree,\n            ddim_steps, scale, seed, task, enable_control, input_control_image,\n            control_type, vertical_expansion_ratio, horizontal_expansion_ratio,\n            outpaint_prompt, outpaint_negative_prompt,\n            controlnet_conditioning_scale, removal_prompt,\n            removal_negative_prompt\n        ],\n        outputs=[inpaint_result, gallery])\n\ndemo.queue()\ndemo.launch(share=False, server_name='0.0.0.0', server_port=7860)\n"
  },
  {
    "path": "projects/powerpaint/pipeline/pipeline_PowerPaint.py",
    "content": "# Copyright 2023 The HuggingFace Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport inspect\nfrom typing import Any, Callable, Dict, List, Optional, Union\n\nimport numpy as np\nimport PIL\nimport torch\nfrom diffusers.configuration_utils import FrozenDict\nfrom diffusers.image_processor import VaeImageProcessor\nfrom diffusers.loaders import (FromSingleFileMixin, LoraLoaderMixin,\n                               TextualInversionLoaderMixin)\nfrom diffusers.models import (AsymmetricAutoencoderKL, AutoencoderKL,\n                              UNet2DConditionModel)\nfrom diffusers.pipelines.pipeline_utils import DiffusionPipeline\nfrom diffusers.pipelines.stable_diffusion import StableDiffusionPipelineOutput\nfrom diffusers.pipelines.stable_diffusion.safety_checker import \\\n    StableDiffusionSafetyChecker\nfrom diffusers.schedulers import KarrasDiffusionSchedulers\nfrom diffusers.utils import (deprecate, is_accelerate_available,\n                             is_accelerate_version, logging)\nfrom diffusers.utils.torch_utils import randn_tensor\nfrom packaging import version\nfrom transformers import CLIPImageProcessor, CLIPTextModel, CLIPTokenizer\n\nlogger = logging.get_logger(__name__)  # pylint: disable=invalid-name\n\n\ndef prepare_mask_and_masked_image(image,\n                                  mask,\n                                  height,\n                                  width,\n                                  return_image: bool = False):\n    \"\"\"Prepares a pair (image, mask) to be consumed by the Stable Diffusion\n    pipeline. This means that those inputs will be converted to\n    ``torch.Tensor`` with shapes ``batch x channels x height x width`` where\n    ``channels`` is ``3`` for the ``image`` and ``1`` for the ``mask``.\n\n    The ``image`` will be converted to ``torch.float32`` and normalized\n    to be in ``[-1, 1]``. The ``mask`` will be\n    binarized (``mask > 0.5``) and cast to ``torch.float32`` too.\n\n    Args:\n        image (Union[np.array, PIL.Image, torch.Tensor]):\n            The image to inpaint.\n            It can be a ``PIL.Image``, or a ``height x width x 3``\n            ``np.array`` or a ``channels x height x width``\n            ``torch.Tensor`` or a ``batch x channels x height x width``\n            ``torch.Tensor``.\n        mask (_type_): The mask to apply to the image, i.e. regions to\n            inpaint.\n            It can be a ``PIL.Image``, or a ``height x width``\n            ``np.array`` or a ``1 x height x width``\n            ``torch.Tensor`` or a ``batch x 1 x height x width``\n            ``torch.Tensor``.\n\n\n    Raises:\n        ValueError: ``torch.Tensor`` images should be in the ``[-1, 1]``\n        range. ValueError: ``torch.Tensor`` mask\n        should be in the ``[0, 1]`` range. ValueError: ``mask`` and\n        ``image`` should have the same spatial dimensions.\n        TypeError: ``mask`` is a ``torch.Tensor`` but ``image`` is not\n            (or the other way around).\n\n    Returns:\n        tuple[torch.Tensor]: The pair (mask, masked_image) as\n            ``torch.Tensor`` with 4\n            dimensions: ``batch x channels x height x width``.\n    \"\"\"\n\n    if image is None:\n        raise ValueError('`image` input cannot be undefined.')\n\n    if mask is None:\n        raise ValueError('`mask_image` input cannot be undefined.')\n\n    if isinstance(image, torch.Tensor):\n        if not isinstance(mask, torch.Tensor):\n            raise TypeError('`image` is a torch.Tensor but '\n                            f'`mask` (type: {type(mask)} is not')\n\n        # Batch single image\n        if image.ndim == 3:\n            assert image.shape[\n                0] == 3, 'Image outside a batch should be of shape (3, H, W)'\n            image = image.unsqueeze(0)\n\n        # Batch and add channel dim for single mask\n        if mask.ndim == 2:\n            mask = mask.unsqueeze(0).unsqueeze(0)\n\n        # Batch single mask or add channel dim\n        if mask.ndim == 3:\n            # Single batched mask, no channel dim or single mask\n            # not batched but channel dim\n            if mask.shape[0] == 1:\n                mask = mask.unsqueeze(0)\n\n            # Batched masks no channel dim\n            else:\n                mask = mask.unsqueeze(1)\n\n        assert image.ndim == 4 and mask.ndim == 4, \\\n            'Image and Mask must have 4 dimensions'\n        assert image.shape[-2:] == mask.shape[\n            -2:], 'Image and Mask must have the same spatial dimensions'\n        assert image.shape[0] == mask.shape[\n            0], 'Image and Mask must have the same batch size'\n\n        # Check image is in [-1, 1]\n        if image.min() < -1 or image.max() > 1:\n            raise ValueError('Image should be in [-1, 1] range')\n\n        # Check mask is in [0, 1]\n        if mask.min() < 0 or mask.max() > 1:\n            raise ValueError('Mask should be in [0, 1] range')\n\n        # Binarize mask\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n\n        # Image as float32\n        image = image.to(dtype=torch.float32)\n    elif isinstance(mask, torch.Tensor):\n        raise TypeError(\n            f'`mask` is a torch.Tensor but `image` (type: {type(image)} is not'\n        )\n    else:\n        # preprocess image\n        if isinstance(image, (PIL.Image.Image, np.ndarray)):\n            image = [image]\n        if isinstance(image, list) and isinstance(image[0], PIL.Image.Image):\n            # resize all images w.r.t passed height an width\n            image = [\n                i.resize((width, height), resample=PIL.Image.LANCZOS)\n                for i in image\n            ]\n            image = [np.array(i.convert('RGB'))[None, :] for i in image]\n            image = np.concatenate(image, axis=0)\n        elif isinstance(image, list) and isinstance(image[0], np.ndarray):\n            image = np.concatenate([i[None, :] for i in image], axis=0)\n\n        image = image.transpose(0, 3, 1, 2)\n        image = torch.from_numpy(image).to(dtype=torch.float32) / 127.5 - 1.0\n\n        # preprocess mask\n        if isinstance(mask, (PIL.Image.Image, np.ndarray)):\n            mask = [mask]\n\n        if isinstance(mask, list) and isinstance(mask[0], PIL.Image.Image):\n            mask = [\n                i.resize((width, height), resample=PIL.Image.LANCZOS)\n                for i in mask\n            ]\n            mask = np.concatenate(\n                [np.array(m.convert('L'))[None, None, :] for m in mask],\n                axis=0)\n            mask = mask.astype(np.float32) / 255.0\n        elif isinstance(mask, list) and isinstance(mask[0], np.ndarray):\n            mask = np.concatenate([m[None, None, :] for m in mask], axis=0)\n\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n        mask = torch.from_numpy(mask)\n\n    masked_image = image * (mask < 0.5)\n\n    # n.b. ensure backwards compatibility as old function does not return image\n    if return_image:\n        return mask, masked_image, image\n\n    return mask, masked_image\n\n\nclass StableDiffusionInpaintPipeline(DiffusionPipeline,\n                                     TextualInversionLoaderMixin,\n                                     LoraLoaderMixin, FromSingleFileMixin):\n    r\"\"\"\n    Pipeline for text-guided image inpainting using Stable Diffusion.\n\n    This model inherits from [`DiffusionPipeline`]. Check the\n        superclass documentation for the generic methods\n    implemented for all pipelines (downloading, saving,\n        running on a particular device, etc.).\n\n    The pipeline also inherits the following loading methods:\n        - [`~loaders.TextualInversionLoaderMixin.load_textual_inversion`]\n            for loading textual inversion embeddings\n        - [`~loaders.LoraLoaderMixin.load_lora_weights`] for\n            loading LoRA weights\n        - [`~loaders.LoraLoaderMixin.save_lora_weights`] for\n            saving LoRA weights\n\n    Args:\n        vae ([`AutoencoderKL`, `AsymmetricAutoencoderKL`]):\n            Variational Auto-Encoder (VAE) Model to encode and decode\n            images to and from latent representations.\n        text_encoder ([`CLIPTextModel`]):\n            Frozen text-encoder ([clip-vit-large-patch14]\n            (https://huggingface.co/openai/clip-vit-large-patch14)).\n        tokenizer ([`~transformers.CLIPTokenizer`]):\n            A `CLIPTokenizer` to tokenize text.\n        unet ([`UNet2DConditionModel`]):\n            A `UNet2DConditionModel` to denoise the encoded image latents.\n        scheduler ([`SchedulerMixin`]):\n            A scheduler to be used in combination with `unet` to denoise\n            the encoded image latents. Can be one of\n            [`DDIMScheduler`], [`LMSDiscreteScheduler`], or [`PNDMScheduler`].\n        safety_checker ([`StableDiffusionSafetyChecker`]):\n            Classification module that estimates whether generated images\n            could be considered offensive or harmful.\n            Please refer to the [model card]\n            (https://huggingface.co/runwayml/stable-diffusion-v1-5)\n            for more details\n            about a model's potential harms.\n        feature_extractor ([`~transformers.CLIPImageProcessor`]):\n            A `CLIPImageProcessor` to extract features from generated\n            images; used as inputs to the `safety_checker`.\n    \"\"\"\n    _optional_components = ['safety_checker', 'feature_extractor']\n\n    def __init__(\n        self,\n        vae: Union[AutoencoderKL, AsymmetricAutoencoderKL],\n        text_encoder: CLIPTextModel,\n        tokenizer: CLIPTokenizer,\n        unet: UNet2DConditionModel,\n        scheduler: KarrasDiffusionSchedulers,\n        safety_checker: StableDiffusionSafetyChecker,\n        feature_extractor: CLIPImageProcessor,\n        requires_safety_checker: bool = True,\n    ):\n        super().__init__()\n\n        if hasattr(scheduler.config,\n                   'steps_offset') and scheduler.config.steps_offset != 1:\n            deprecation_message = (\n                f'The configuration file of this scheduler: {scheduler} is '\n                ' outdated. `steps_offset`'\n                ' should be set to 1 instead of '\n                f' {scheduler.config.steps_offset}. Please make sure '\n                'to update the config accordingly as leaving `steps_offset` '\n                ' might led to incorrect results'\n                ' in future versions. If you have downloaded this checkpoint '\n                ' from the Hugging Face Hub,'\n                ' it would be very nice if you could open a Pull request for '\n                ' the `scheduler/scheduler_config.json`'\n                ' file')\n            deprecate(\n                'steps_offset!=1',\n                '1.0.0',\n                deprecation_message,\n                standard_warn=False)\n            new_config = dict(scheduler.config)\n            new_config['steps_offset'] = 1\n            scheduler._internal_dict = FrozenDict(new_config)\n\n        if hasattr(\n                scheduler.config,\n                'skip_prk_steps') and scheduler.config.skip_prk_steps is False:\n            deprecation_message = (\n                f'The configuration file of this scheduler: {scheduler} has '\n                ' not set the configuration'\n                ' `skip_prk_steps`. `skip_prk_steps` should be set to True in '\n                ' the configuration file. Please make'\n                ' sure to update the config accordingly as not setting '\n                ' `skip_prk_steps` in the config might lead to'\n                ' incorrect results in future versions. '\n                ' If you have downloaded '\n                ' this checkpoint from the Hugging Face'\n                ' Hub, it would be very nice if you could open a Pull '\n                ' request for the'\n                ' `scheduler/scheduler_config.json` file')\n            deprecate(\n                'skip_prk_steps not set',\n                '1.0.0',\n                deprecation_message,\n                standard_warn=False)\n            new_config = dict(scheduler.config)\n            new_config['skip_prk_steps'] = True\n            scheduler._internal_dict = FrozenDict(new_config)\n\n        if safety_checker is None and requires_safety_checker:\n            logger.warning(\n                f'You have disabled the safety checker for {self.__class__} '\n                ' by passing `safety_checker=None`. Ensure'\n                ' that you abide to the conditions of the Stable Diffusion '\n                ' license and do not expose unfiltered'\n                ' results in services or applications open to the public. '\n                ' Both the diffusers team and Hugging Face'\n                ' strongly recommend to keep the safety filter enabled in '\n                ' all public facing circumstances, disabling'\n                ' it only for use-cases that involve analyzing network '\n                ' behavior or auditing its results. For more'\n                ' information, please have a look at'\n                ' https://github.com/huggingface/diffusers/pull/254 .')\n\n        if safety_checker is not None and feature_extractor is None:\n            raise ValueError(\n                'Make sure to define a feature extractor when '\n                'loading {self.__class__} if you want to use the safety'\n                ' checker. If you do not want to use the safety checker, '\n                \"you can pass `'safety_checker=None'` instead.\")\n\n        is_unet_version_less_0_9_0 = hasattr(\n            unet.config, '_diffusers_version') and version.parse(\n                version.parse(unet.config._diffusers_version).base_version\n            ) < version.parse('0.9.0.dev0')\n        is_unet_sample_size_less_64 = hasattr(\n            unet.config, 'sample_size') and unet.config.sample_size < 64\n        if is_unet_version_less_0_9_0 and is_unet_sample_size_less_64:\n            deprecation_message = (\n                'The configuration file of the unet has set the default '\n                '`sample_size` to smaller than'\n                \" 64 which seems highly unlikely .If you're checkpoint is \"\n                ' a fine-tuned version of any of the'\n                ' following: \\n- CompVis/stable-diffusion-v1-4 \\n- '\n                ' CompVis/stable-diffusion-v1-3 \\n-'\n                ' CompVis/stable-diffusion-v1-2 \\n- '\n                ' CompVis/stable-diffusion-v1-1 \\n- '\n                ' runwayml/stable-diffusion-v1-5'\n                ' \\n- runwayml/stable-diffusion-inpainting \\n you should '\n                \" change 'sample_size' to 64 in the\"\n                ' configuration file. Please make sure to update the config '\n                ' accordingly as leaving `sample_size=32`'\n                ' in the config might lead to incorrect results in future '\n                ' versions. If you have downloaded this'\n                ' checkpoint from the Hugging Face Hub, it would be very nice '\n                ' if you could open a Pull request for'\n                ' the `unet/config.json` file')\n            deprecate(\n                'sample_size<64',\n                '1.0.0',\n                deprecation_message,\n                standard_warn=False)\n            new_config = dict(unet.config)\n            new_config['sample_size'] = 64\n            unet._internal_dict = FrozenDict(new_config)\n\n        # Check shapes, assume num_channels_latents == 4,\n        # num_channels_mask == 1, num_channels_masked == 4\n        if unet.config.in_channels != 9:\n            logger.info(\n                f'You have loaded a UNet with {unet.config.in_channels} '\n                'input channels which.')\n\n        self.register_modules(\n            vae=vae,\n            text_encoder=text_encoder,\n            tokenizer=tokenizer,\n            unet=unet,\n            scheduler=scheduler,\n            safety_checker=safety_checker,\n            feature_extractor=feature_extractor,\n        )\n        self.vae_scale_factor = 2**(\n            len(self.vae.config.block_out_channels) - 1)\n        self.image_processor = VaeImageProcessor(\n            vae_scale_factor=self.vae_scale_factor)\n        self.register_to_config(\n            requires_safety_checker=requires_safety_checker)\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.\n    # StableDiffusionPipeline.enable_model_cpu_offload\n    def enable_model_cpu_offload(self, gpu_id=0):\n        r\"\"\"\n        Offload all models to CPU to reduce memory usage with a low impact\n        on performance. Moves one whole model at a\n        time to the GPU when its `forward` method is called, and the model\n        remains in GPU until the next model runs.\n        Memory savings are lower than using `enable_sequential_cpu_offload`,\n        but performance is much better due to the\n        iterative execution of the `unet`.\n        \"\"\"\n        if is_accelerate_available() and is_accelerate_version(\n                '>=', '0.17.0.dev0'):\n            from accelerate import cpu_offload_with_hook\n        else:\n            raise ImportError(\n                '`enable_model_cpu_offload` requires `accelerate v0.17.0` '\n                'or higher.')\n\n        device = torch.device(f'cuda:{gpu_id}')\n\n        if self.device.type != 'cpu':\n            self.to('cpu', silence_dtype_warnings=True)\n            torch.cuda.empty_cache()\n            # otherwise we don't see the memory savings\n            # (but they probably exist)\n\n        hook = None\n        for cpu_offloaded_model in [self.text_encoder, self.unet, self.vae]:\n            _, hook = cpu_offload_with_hook(\n                cpu_offloaded_model, device, prev_module_hook=hook)\n\n        if self.safety_checker is not None:\n            _, hook = cpu_offload_with_hook(\n                self.safety_checker, device, prev_module_hook=hook)\n\n        # We'll offload the last model manually.\n        self.final_offload_hook = hook\n\n    # Copied from diffusers.pipelines.stable_diffusion.pipeline_\n    # stable_diffusion.StableDiffusionPipeline._encode_prompt\n    def _encode_prompt(\n        self,\n        promptA,\n        promptB,\n        t,\n        device,\n        num_images_per_prompt,\n        do_classifier_free_guidance,\n        negative_promptA=None,\n        negative_promptB=None,\n        t_nag=None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        lora_scale: Optional[float] = None,\n    ):\n        r\"\"\"\n        Encodes the prompt into text encoder hidden states.\n\n        Args:\n             prompt (`str` or `List[str]`, *optional*):\n                prompt to be encoded\n            device: (`torch.device`):\n                torch device\n            num_images_per_prompt (`int`):\n                number of images that should be generated per prompt\n            do_classifier_free_guidance (`bool`):\n                whether to use classifier free guidance or not\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                If not defined, one has to pass\n                `negative_prompt_embeds` instead. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is\n                less than `1`).\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily tweak\n                text inputs, *e.g.* prompt weighting. If not\n                provided, text embeddings will be generated from `prompt`\n                input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to easily\n                tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will be\n                generated from `negative_prompt` input\n                argument.\n            lora_scale (`float`, *optional*):\n                A lora scale that will be applied to all LoRA layers of the\n                text encoder if LoRA layers are loaded.\n        \"\"\"\n        # set lora scale so that monkey patched LoRA\n        # function of text encoder can correctly access it\n        if lora_scale is not None and isinstance(self, LoraLoaderMixin):\n            self._lora_scale = lora_scale\n\n        prompt = promptA\n        negative_prompt = negative_promptA\n\n        if promptA is not None and isinstance(promptA, str):\n            batch_size = 1\n        elif promptA is not None and isinstance(promptA, list):\n            batch_size = len(promptA)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        if prompt_embeds is None:\n            # textual inversion: procecss multi-vector tokens if necessary\n            if isinstance(self, TextualInversionLoaderMixin):\n                promptA = self.maybe_convert_prompt(promptA, self.tokenizer)\n\n            text_inputsA = self.tokenizer(\n                promptA,\n                padding='max_length',\n                max_length=self.tokenizer.model_max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            text_inputsB = self.tokenizer(\n                promptB,\n                padding='max_length',\n                max_length=self.tokenizer.model_max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            text_input_idsA = text_inputsA.input_ids\n            text_input_idsB = text_inputsB.input_ids\n            untruncated_ids = self.tokenizer(\n                promptA, padding='longest', return_tensors='pt').input_ids\n\n            if untruncated_ids.shape[-1] >= text_input_idsA.shape[\n                    -1] and not torch.equal(text_input_idsA, untruncated_ids):\n                removed_text = self.tokenizer.batch_decode(\n                    untruncated_ids[:, self.tokenizer.model_max_length - 1:-1])\n                logger.warning(\n                    'The following part of your input was truncated because '\n                    'CLIP can only handle sequences up to'\n                    f' {self.tokenizer.model_max_length} '\n                    f'tokens: {removed_text}')\n\n            if hasattr(self.text_encoder.config, 'use_attention_mask'\n                       ) and self.text_encoder.config.use_attention_mask:\n                attention_mask = text_inputsA.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            # print(\"text_input_idsA: \",text_input_idsA)\n            # print(\"text_input_idsB: \",text_input_idsB)\n            # print('t: ',t)\n\n            prompt_embedsA = self.text_encoder(\n                text_input_idsA.to(device),\n                attention_mask=attention_mask,\n            )\n            prompt_embedsA = prompt_embedsA[0]\n\n            prompt_embedsB = self.text_encoder(\n                text_input_idsB.to(device),\n                attention_mask=attention_mask,\n            )\n            prompt_embedsB = prompt_embedsB[0]\n            prompt_embeds = prompt_embedsA * (t) + (1 - t) * prompt_embedsB\n            # print(\"prompt_embeds: \",prompt_embeds)\n\n        if self.text_encoder is not None:\n            prompt_embeds_dtype = self.text_encoder.dtype\n        elif self.unet is not None:\n            prompt_embeds_dtype = self.unet.dtype\n        else:\n            prompt_embeds_dtype = prompt_embeds.dtype\n\n        prompt_embeds = prompt_embeds.to(\n            dtype=prompt_embeds_dtype, device=device)\n\n        bs_embed, seq_len, _ = prompt_embeds.shape\n        # duplicate text embeddings for each generation per prompt,\n        # using mps friendly method\n        prompt_embeds = prompt_embeds.repeat(1, num_images_per_prompt, 1)\n        prompt_embeds = prompt_embeds.view(bs_embed * num_images_per_prompt,\n                                           seq_len, -1)\n\n        # get unconditional embeddings for classifier free guidance\n        if do_classifier_free_guidance and negative_prompt_embeds is None:\n            uncond_tokensA: List[str]\n            uncond_tokensB: List[str]\n            if negative_prompt is None:\n                uncond_tokensA = [''] * batch_size\n                uncond_tokensB = [''] * batch_size\n            elif prompt is not None and type(prompt) is not type(\n                    negative_prompt):\n                raise TypeError(\n                    f'`negative_prompt` should be the same type to `prompt`, '\n                    ' but got {type(negative_prompt)} !='\n                    f' {type(prompt)}.')\n            elif isinstance(negative_prompt, str):\n                uncond_tokensA = [negative_promptA]\n                uncond_tokensB = [negative_promptB]\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f'`negative_prompt`: {negative_prompt} has batch '\n                    f' size {len(negative_prompt)}, but `prompt`:'\n                    f' {prompt} has batch size {batch_size}. Please make '\n                    ' sure that passed `negative_prompt` matches'\n                    ' the batch size of `prompt`.')\n            else:\n                uncond_tokensA = negative_promptA\n                uncond_tokensB = negative_promptB\n\n            # textual inversion: procecss multi-vector tokens if necessary\n            if isinstance(self, TextualInversionLoaderMixin):\n                uncond_tokensA = self.maybe_convert_prompt(\n                    uncond_tokensA, self.tokenizer)\n                uncond_tokensB = self.maybe_convert_prompt(\n                    uncond_tokensB, self.tokenizer)\n\n            max_length = prompt_embeds.shape[1]\n            uncond_inputA = self.tokenizer(\n                uncond_tokensA,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            uncond_inputB = self.tokenizer(\n                uncond_tokensB,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n\n            if hasattr(self.text_encoder.config, 'use_attention_mask'\n                       ) and self.text_encoder.config.use_attention_mask:\n                attention_mask = uncond_inputA.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            negative_prompt_embedsA = self.text_encoder(\n                uncond_inputA.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            negative_prompt_embedsB = self.text_encoder(\n                uncond_inputB.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            negative_prompt_embeds = negative_prompt_embedsA[0] * (t_nag) + (\n                1 - t_nag) * negative_prompt_embedsB[0]\n\n            # negative_prompt_embeds = negative_prompt_embeds[0]\n\n        if do_classifier_free_guidance:\n            # duplicate unconditional embeddings for each generation per\n            # prompt, using mps friendly method\n            seq_len = negative_prompt_embeds.shape[1]\n\n            negative_prompt_embeds = negative_prompt_embeds.to(\n                dtype=prompt_embeds_dtype, device=device)\n\n            negative_prompt_embeds = negative_prompt_embeds.repeat(\n                1, num_images_per_prompt, 1)\n            negative_prompt_embeds = negative_prompt_embeds.view(\n                batch_size * num_images_per_prompt, seq_len, -1)\n\n            # For classifier free guidance, we need to do two forward passes.\n            # Here we concatenate the unconditional and text embeddings\n            # into a single batch\n            # to avoid doing two forward passes\n            # print(\"prompt_embeds: \",prompt_embeds)\n            prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds])\n\n        return prompt_embeds\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.\n    # StableDiffusionPipeline.run_safety_checker\n    def run_safety_checker(self, image, device, dtype):\n        if self.safety_checker is None:\n            has_nsfw_concept = None\n        else:\n            if torch.is_tensor(image):\n                feature_extractor_input = self.image_processor.postprocess(\n                    image, output_type='pil')\n            else:\n                feature_extractor_input = self.image_processor.numpy_to_pil(\n                    image)\n            safety_checker_input = self.feature_extractor(\n                feature_extractor_input, return_tensors='pt').to(device)\n            image, has_nsfw_concept = self.safety_checker(\n                images=image,\n                clip_input=safety_checker_input.pixel_values.to(dtype))\n        return image, has_nsfw_concept\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.\n    # StableDiffusionPipeline.prepare_extra_step_kwargs\n    def prepare_extra_step_kwargs(self, generator, eta):\n        # prepare extra kwargs for the scheduler step, since not all\n        # schedulers have the same signature\n        # eta (η) is only used with the DDIMScheduler, it will be\n        # ignored for other schedulers.\n        # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502\n        # and should be between [0, 1]\n\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    def check_inputs(\n        self,\n        prompt,\n        height,\n        width,\n        strength,\n        callback_steps,\n        negative_prompt=None,\n        prompt_embeds=None,\n        negative_prompt_embeds=None,\n    ):\n        if strength < 0 or strength > 1:\n            raise ValueError(\n                f'The value of strength should in [0.0, 1.0] but is {strength}'\n            )\n\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError(f'`height` and `width` have to be divisible by 8 '\n                             f' but are {height} and {width}.')\n\n        if (callback_steps is None) or (callback_steps is not None and\n                                        (not isinstance(callback_steps, int)\n                                         or callback_steps <= 0)):\n            raise ValueError(\n                f'`callback_steps` has to be a positive integer but '\n                f' is {callback_steps} of type'\n                f' {type(callback_steps)}.')\n\n        if prompt is not None and prompt_embeds is not None:\n            raise ValueError(\n                f'Cannot forward both `prompt`: {prompt} and `prompt_embeds`: '\n                ' {prompt_embeds}. Please make sure to'\n                ' only forward one of the two.')\n        elif prompt is None and prompt_embeds is None:\n            raise ValueError('Provide either `prompt` or `prompt_embeds`. '\n                             ' Cannot leave both '\n                             ' `prompt` and `prompt_embeds` undefined.')\n        elif prompt is not None and (not isinstance(prompt, str)\n                                     and not isinstance(prompt, list)):\n            raise ValueError(f'`prompt` has to be of type `str` or '\n                             f' `list` but is {type(prompt)}')\n\n        if negative_prompt is not None and negative_prompt_embeds is not None:\n            raise ValueError(\n                f'Cannot forward both `negative_prompt`: {negative_prompt} '\n                'and  `negative_prompt_embeds`:'\n                f' {negative_prompt_embeds}. Please make sure to only '\n                ' forward one of the two.')\n\n        if prompt_embeds is not None and negative_prompt_embeds is not None:\n            if prompt_embeds.shape != negative_prompt_embeds.shape:\n                raise ValueError(\n                    '`prompt_embeds` and `negative_prompt_embeds` '\n                    'must have the same shape when passed directly, but'\n                    f' got: `prompt_embeds` {prompt_embeds.shape} != '\n                    ' `negative_prompt_embeds`'\n                    f' {negative_prompt_embeds.shape}.')\n\n    def prepare_latents(\n        self,\n        batch_size,\n        num_channels_latents,\n        height,\n        width,\n        dtype,\n        device,\n        generator,\n        latents=None,\n        image=None,\n        timestep=None,\n        is_strength_max=True,\n        return_noise=False,\n        return_image_latents=False,\n    ):\n        shape = (batch_size, num_channels_latents,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        if isinstance(generator, list) and len(generator) != batch_size:\n            raise ValueError(\n                f'You have passed a list of generators of '\n                f' length {len(generator)},'\n                ' but requested an effective batch'\n                f' size of {batch_size}. Make sure the batch size '\n                ' matches the length of the generators.')\n\n        if (image is None or timestep is None) and not is_strength_max:\n            raise ValueError(\n                'Since strength < 1. initial latents are to be initialised'\n                ' as a combination of Image + Noise.'\n                'However, either the image or the noise timestep '\n                'has not been provided.')\n\n        if return_image_latents or (latents is None and not is_strength_max):\n            image = image.to(device=device, dtype=dtype)\n            image_latents = self._encode_vae_image(\n                image=image, generator=generator)\n\n        if latents is None:\n            noise = randn_tensor(\n                shape, generator=generator, device=device, dtype=dtype)\n            # if strength is 1. then initialise the latents to noise,\n            # else initial to image + noise\n            latents = noise if is_strength_max else self.scheduler.add_noise(\n                image_latents, noise, timestep)\n            # if pure noise then scale the initial latents by the\n            # Scheduler's init sigma\n            latents = latents * self.scheduler.init_noise_sigma \\\n                if is_strength_max else latents\n        else:\n            noise = latents.to(device)\n            latents = noise * self.scheduler.init_noise_sigma\n\n        outputs = (latents, )\n\n        if return_noise:\n            outputs += (noise, )\n\n        if return_image_latents:\n            outputs += (image_latents, )\n\n        return outputs\n\n    def _encode_vae_image(self, image: torch.Tensor,\n                          generator: torch.Generator):\n        if isinstance(generator, list):\n            image_latents = [\n                self.vae.encode(image[i:i + 1]).latent_dist.sample(\n                    generator=generator[i]) for i in range(image.shape[0])\n            ]\n            image_latents = torch.cat(image_latents, dim=0)\n        else:\n            image_latents = self.vae.encode(image).latent_dist.sample(\n                generator=generator)\n\n        image_latents = self.vae.config.scaling_factor * image_latents\n\n        return image_latents\n\n    def prepare_mask_latents(self, mask, masked_image, batch_size, height,\n                             width, dtype, device, generator,\n                             do_classifier_free_guidance):\n        # resize the mask to latents shape as we concatenate the\n        # mask to the latents\n        # we do that before converting to dtype to avoid breaking in\n        # case we're using cpu_offload\n        # and half precision\n        mask = torch.nn.functional.interpolate(\n            mask,\n            size=(height // self.vae_scale_factor,\n                  width // self.vae_scale_factor))\n        mask = mask.to(device=device, dtype=dtype)\n\n        masked_image = masked_image.to(device=device, dtype=dtype)\n        masked_image_latents = self._encode_vae_image(\n            masked_image, generator=generator)\n\n        # duplicate mask and masked_image_latents for each generation per\n        # prompt, using mps friendly method\n        if mask.shape[0] < batch_size:\n            if not batch_size % mask.shape[0] == 0:\n                raise ValueError(\n                    \"The passed mask and the required batch size don't match. \"\n                    ' Masks are supposed to be duplicated to'\n                    f' a total batch size of {batch_size}, '\n                    f' but {mask.shape[0]} '\n                    ' masks were passed. Make sure the number'\n                    ' of masks that you pass is divisible by the '\n                    ' total requested batch size.')\n            mask = mask.repeat(batch_size // mask.shape[0], 1, 1, 1)\n        if masked_image_latents.shape[0] < batch_size:\n            if not batch_size % masked_image_latents.shape[0] == 0:\n                raise ValueError(\n                    \"The passed images and the required batch size don't \"\n                    ' match. Images are supposed to be duplicated'\n                    f' to a total batch size of {batch_size}, '\n                    f' but {masked_image_latents.shape[0]} images were passed.'\n                    ' Make sure the number of images that you pass is '\n                    ' divisible by the total requested batch size.')\n            masked_image_latents = masked_image_latents.repeat(\n                batch_size // masked_image_latents.shape[0], 1, 1, 1)\n\n        mask = torch.cat([mask] * 2) if do_classifier_free_guidance else mask\n        masked_image_latents = (\n            torch.cat([masked_image_latents] * 2)\n            if do_classifier_free_guidance else masked_image_latents)\n\n        # aligning device to prevent device errors when concatenating it\n        # with the latent model input\n        masked_image_latents = masked_image_latents.to(\n            device=device, dtype=dtype)\n        return mask, masked_image_latents\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion_img2img.\n    # StableDiffusionImg2ImgPipeline.get_timesteps\n    def get_timesteps(self, num_inference_steps, strength, device):\n        # get the original timestep using init_timestep\n        init_timestep = min(\n            int(num_inference_steps * strength), num_inference_steps)\n\n        t_start = max(num_inference_steps - init_timestep, 0)\n        timesteps = self.scheduler.timesteps[t_start * self.scheduler.order:]\n\n        return timesteps, num_inference_steps - t_start\n\n    @torch.no_grad()\n    def __call__(\n        self,\n        promptA: Union[str, List[str]] = None,\n        promptB: Union[str, List[str]] = None,\n        image: Union[torch.FloatTensor, PIL.Image.Image] = None,\n        mask_image: Union[torch.FloatTensor, PIL.Image.Image] = None,\n        height: Optional[int] = None,\n        width: Optional[int] = None,\n        strength: float = 1.0,\n        tradoff: float = 1.0,\n        tradoff_nag: float = 1.0,\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n        negative_promptA: Optional[Union[str, List[str]]] = None,\n        negative_promptB: Optional[Union[str, List[str]]] = None,\n        num_images_per_prompt: Optional[int] = 1,\n        eta: float = 0.0,\n        generator: Optional[Union[torch.Generator,\n                                  List[torch.Generator]]] = None,\n        latents: Optional[torch.FloatTensor] = None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        output_type: Optional[str] = 'pil',\n        return_dict: bool = True,\n        callback: Optional[Callable[[int, int, torch.FloatTensor],\n                                    None]] = None,\n        callback_steps: int = 1,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        task_class: Union[torch.Tensor, float, int] = None,\n    ):\n        r\"\"\"\n        The call function to the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide image generation. If\n                not defined, you need to pass `prompt_embeds`.\n            image (`PIL.Image.Image`):\n                `Image` or tensor representing an image batch to be\n                inpainted (which parts of the image to be masked\n                out with `mask_image` and repainted according to `prompt`).\n            mask_image (`PIL.Image.Image`):\n                `Image` or tensor representing an image batch to mask\n                `image`. White pixels in the mask are repainted\n                while black pixels are preserved. If `mask_image` is a\n                PIL image, it is converted to a single channel\n                (luminance) before use. If it's a tensor, it should contain\n                one color channel (L) instead of 3, so the\n                expected shape would be `(B, H, W, 1)`.\n            height (`int`, *optional*, defaults to `self.unet.config.\n                sample_size * self.vae_scale_factor`):\n                The height in pixels of the generated image.\n            width (`int`, *optional*, defaults to `self.unet.config.\n                sample_size * self.vae_scale_factor`):\n                The width in pixels of the generated image.\n            strength (`float`, *optional*, defaults to 1.0):\n                Indicates extent to transform the reference `image`. Must be\n                between 0 and 1. `image` is used as a\n                starting point and more noise is added the higher the\n                `strength`. The number of denoising steps depends\n                on the amount of noise initially added. When `strength` is 1,\n                added noise is maximum and the denoising\n                process runs for the full number of iterations specified in\n                `num_inference_steps`. A value of 1\n                essentially ignores `image`.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps. More denoising steps usually\n                lead to a higher quality image at the\n                expense of slower inference. This parameter is modulated\n                by `strength`.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                A higher guidance scale value encourages the model to\n                generate images closely linked to the text\n                `prompt` at the expense of lower image quality. Guidance scale\n                is enabled when `guidance_scale > 1`.\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide what to not include in\n                image generation. If not defined, you need to\n                pass `negative_prompt_embeds` instead. Ignored when not\n                using guidance (`guidance_scale < 1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) from the [DDIM]\n                (https://arxiv.org/abs/2010.02502) paper. Only applies\n                to the [`~schedulers.DDIMScheduler`], and is\n                ignored in other schedulers.\n            generator (`torch.Generator` or `List[torch.Generator]`,\n                *optional*):\n                A [`torch.Generator`](https://pytorch.org/docs/stable\n                /generated/torch.Generator.html) to make\n                generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents sampled from a Gaussian\n                distribution, to be used as inputs for image\n                generation. Can be used to tweak the same generation\n                with different prompts. If not provided, a latents\n                tensor is generated by sampling using the supplied\n                random `generator`.\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily\n                tweak text inputs (prompt weighting). If not\n                provided, text embeddings are generated from the\n                `prompt` input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to\n                easily tweak text inputs (prompt weighting). If\n                not provided, `negative_prompt_embeds` are generated\n                from the `negative_prompt` input argument.\n            output_type (`str`, *optional*, defaults to `\"pil\"`):\n                The output format of the generated image. Choose between\n                `PIL.Image` or `np.array`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a [`~pipelines.stable_diffusion.\n                StableDiffusionPipelineOutput`] instead of a\n                plain tuple.\n            callback (`Callable`, *optional*):\n                A function that calls every `callback_steps` steps during\n                inference. The function is called with the\n                following arguments: `callback(step: int, timestep: int,\n                latents: torch.FloatTensor)`.\n            callback_steps (`int`, *optional*, defaults to 1):\n                The frequency at which the `callback` function is called.\n                If not specified, the callback is called at\n                every step.\n            cross_attention_kwargs (`dict`, *optional*):\n                A kwargs dictionary that if specified is passed along to the\n                [`AttentionProcessor`] as defined in\n                [`self.processor`](https://github.com/huggingface/diffusers\n                /blob/main/src/diffusers/models/attention_processor.py).\n\n        Examples:\n\n        ```py\n        >>> import PIL\n        >>> import requests\n        >>> import torch\n        >>> from io import BytesIO\n\n        >>> from diffusers import StableDiffusionInpaintPipeline\n\n\n        >>> def download_image(url):\n        ...     response = requests.get(url)\n        ...     return PIL.Image.open(BytesIO(response.content)).convert(\"RGB\")\n\n\n        >>> img_url = \"https://raw.githubusercontent.com/CompVis/\n            latent-diffusion/main/data/inpainting_examples\n            /overture-creations-5sI6fQgYIuo.png\"\n        >>> mask_url = \"https://raw.githubusercontent.com/CompVis/\n            latent-diffusion/main/data/inpainting_examples/\n            overture-creations-5sI6fQgYIuo_mask.png\"\n\n        >>> init_image = download_image(img_url).resize((512, 512))\n        >>> mask_image = download_image(mask_url).resize((512, 512))\n\n        >>> pipe = StableDiffusionInpaintPipeline.from_pretrained(\n        ...     \"runwayml/stable-diffusion-inpainting\",\n                torch_dtype=torch.float16\n        ... )\n        >>> pipe = pipe.to(\"cuda\")\n\n        >>> prompt = \"Face of a yellow cat, high resolution,\n                sitting on a park bench\"\n        >>> image = pipe(prompt=prompt, image=init_image,\n                mask_image=mask_image).images[0]\n        ```\n\n        Returns:\n            [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`]\n                or `tuple`:\n                If `return_dict` is `True`, [`~pipelines.stable_diffusion.\n                StableDiffusionPipelineOutput`] is returned,\n                otherwise a `tuple` is returned where the first element is\n                a list with the generated images and the\n                second element is a list of `bool`s indicating whether the\n                corresponding generated image contains\n                \"not-safe-for-work\" (nsfw) content.\n        \"\"\"\n        # 0. Default height and width to unet\n        height = height or self.unet.config.sample_size * self.vae_scale_factor\n        width = width or self.unet.config.sample_size * self.vae_scale_factor\n        prompt = promptA\n        negative_prompt = negative_promptA\n        # 1. Check inputs\n        self.check_inputs(\n            prompt,\n            height,\n            width,\n            strength,\n            callback_steps,\n            negative_prompt,\n            prompt_embeds,\n            negative_prompt_embeds,\n        )\n\n        # 2. Define call parameters\n        if prompt is not None and isinstance(prompt, str):\n            batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        device = self._execution_device\n        # here `guidance_scale` is defined analog to the guidance\n        # weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        text_encoder_lora_scale = (\n            cross_attention_kwargs.get('scale', None)\n            if cross_attention_kwargs is not None else None)\n        prompt_embeds = self._encode_prompt(\n            promptA,\n            promptB,\n            tradoff,\n            device,\n            num_images_per_prompt,\n            do_classifier_free_guidance,\n            negative_promptA,\n            negative_promptB,\n            tradoff_nag,\n            prompt_embeds=prompt_embeds,\n            negative_prompt_embeds=negative_prompt_embeds,\n            lora_scale=text_encoder_lora_scale,\n        )\n\n        # 4. set timesteps\n        self.scheduler.set_timesteps(num_inference_steps, device=device)\n        timesteps, num_inference_steps = self.get_timesteps(\n            num_inference_steps=num_inference_steps,\n            strength=strength,\n            device=device)\n        # check that number of inference steps is not < 1 -\n        # as this doesn't make sense\n        if num_inference_steps < 1:\n            raise ValueError(\n                f'After adjusting the num_inference_steps by strength '\n                f' parameter: {strength}, the number of pipeline'\n                f'steps is {num_inference_steps} which is < 1 and not '\n                'appropriate for this pipeline.')\n        # at which timestep to set the initial noise (n.b. 50% if\n        # strength is 0.5)\n        latent_timestep = timesteps[:1].repeat(batch_size *\n                                               num_images_per_prompt)\n        # create a boolean to check if the strength is set to 1.\n        # if so then initialise the latents with pure noise\n        is_strength_max = strength == 1.0\n\n        # 5. Preprocess mask and image\n        mask, masked_image, init_image = prepare_mask_and_masked_image(\n            image, mask_image, height, width, return_image=True)\n        mask_condition = mask.clone()\n\n        # 6. Prepare latent variables\n        num_channels_latents = self.vae.config.latent_channels\n        num_channels_unet = self.unet.config.in_channels\n        return_image_latents = num_channels_unet == 4\n\n        latents_outputs = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n            image=init_image,\n            timestep=latent_timestep,\n            is_strength_max=is_strength_max,\n            return_noise=True,\n            return_image_latents=return_image_latents,\n        )\n\n        if return_image_latents:\n            latents, noise, image_latents = latents_outputs\n        else:\n            latents, noise = latents_outputs\n\n        # 7. Prepare mask latent variables\n        mask, masked_image_latents = self.prepare_mask_latents(\n            mask,\n            masked_image,\n            batch_size * num_images_per_prompt,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            do_classifier_free_guidance,\n        )\n\n        # 8. Check that sizes of mask, masked image and latents match\n        if num_channels_unet == 9:\n            # default case for runwayml/stable-diffusion-inpainting\n            num_channels_mask = mask.shape[1]\n            num_channels_masked_image = masked_image_latents.shape[1]\n            if num_channels_latents + num_channels_mask + \\\n                    num_channels_masked_image != self.unet.config.in_channels:\n                raise ValueError(\n                    'Incorrect configuration settings! The '\n                    f' config of `pipeline.unet`: {self.unet.config} expects'\n                    f' {self.unet.config.in_channels} but received '\n                    f' `num_channels_latents`: {num_channels_latents} +'\n                    f' `num_channels_mask`: {num_channels_mask} + '\n                    ' `num_channels_masked_image`:'\n                    f' {num_channels_masked_image}'\n                    f' = {num_channels_latents+num_channels_masked_image+ num_channels_mask}. Please verify the config of'  # noqa\n                    ' `pipeline.unet` or your `mask_image` or `image` input.')\n        elif num_channels_unet != 4:\n            raise ValueError(\n                f'The unet {self.unet.__class__} should have either 4 or 9 '\n                f'input channels, not {self.unet.config.in_channels}.')\n\n        # 9. Prepare extra step kwargs. TODO: Logic should ideally just\n        # be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 10. Denoising loop\n        num_warmup_steps = len(\n            timesteps) - num_inference_steps * self.scheduler.order\n        with self.progress_bar(total=num_inference_steps) as progress_bar:\n            for i, t in enumerate(timesteps):\n                # expand the latents if we are doing classifier free guidance\n                latent_model_input = torch.cat(\n                    [latents] * 2) if do_classifier_free_guidance else latents\n\n                # concat latents, mask, masked_image_latents\n                # in the channel dimension\n                latent_model_input = self.scheduler.scale_model_input(\n                    latent_model_input, t)\n\n                if num_channels_unet == 9:\n                    latent_model_input = torch.cat(\n                        [latent_model_input, mask, masked_image_latents],\n                        dim=1)\n\n                # predict the noise residual\n                if task_class is not None:\n                    noise_pred = self.unet(\n                        sample=latent_model_input,\n                        timestep=t,\n                        encoder_hidden_states=prompt_embeds,\n                        cross_attention_kwargs=cross_attention_kwargs,\n                        return_dict=False,\n                        task_class=task_class,\n                    )[0]\n                else:\n                    noise_pred = self.unet(\n                        latent_model_input,\n                        t,\n                        encoder_hidden_states=prompt_embeds,\n                        cross_attention_kwargs=cross_attention_kwargs,\n                        return_dict=False,\n                    )[0]\n\n                # perform guidance\n                if do_classifier_free_guidance:\n                    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                    noise_pred = noise_pred_uncond + guidance_scale * (\n                        noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.scheduler.step(\n                    noise_pred,\n                    t,\n                    latents,\n                    **extra_step_kwargs,\n                    return_dict=False)[0]\n\n                if num_channels_unet == 4:\n                    init_latents_proper = image_latents[:1]\n                    init_mask = mask[:1]\n\n                    if i < len(timesteps) - 1:\n                        noise_timestep = timesteps[i + 1]\n                        init_latents_proper = self.scheduler.add_noise(\n                            init_latents_proper, noise,\n                            torch.tensor([noise_timestep]))\n\n                    latents = (1 - init_mask\n                               ) * init_latents_proper + init_mask * latents\n\n                # call the callback, if provided\n                if i == len(timesteps) - 1 or (\n                    (i + 1) > num_warmup_steps and\n                    (i + 1) % self.scheduler.order == 0):  # noqa\n                    progress_bar.update()\n                    if callback is not None and i % callback_steps == 0:\n                        callback(i, t, latents)\n\n        if not output_type == 'latent':\n            condition_kwargs = {}\n            if isinstance(self.vae, AsymmetricAutoencoderKL):\n                init_image = init_image.to(\n                    device=device, dtype=masked_image_latents.dtype)\n                init_image_condition = init_image.clone()\n                init_image = self._encode_vae_image(\n                    init_image, generator=generator)\n                mask_condition = mask_condition.to(\n                    device=device, dtype=masked_image_latents.dtype)\n                condition_kwargs = {\n                    'image': init_image_condition,\n                    'mask': mask_condition\n                }\n            image = self.vae.decode(\n                latents / self.vae.config.scaling_factor,\n                return_dict=False,\n                **condition_kwargs)[0]\n            image, has_nsfw_concept = self.run_safety_checker(\n                image, device, prompt_embeds.dtype)\n        else:\n            image = latents\n            has_nsfw_concept = None\n\n        if has_nsfw_concept is None:\n            do_denormalize = [True] * image.shape[0]\n        else:\n            do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]\n\n        image = self.image_processor.postprocess(\n            image, output_type=output_type, do_denormalize=do_denormalize)\n\n        # Offload last model to CPU\n        if hasattr(\n                self,\n                'final_offload_hook') and self.final_offload_hook is not None:\n            self.final_offload_hook.offload()\n\n        if not return_dict:\n            return (image, has_nsfw_concept)\n\n        return StableDiffusionPipelineOutput(\n            images=image, nsfw_content_detected=has_nsfw_concept)\n"
  },
  {
    "path": "projects/powerpaint/pipeline/pipeline_PowerPaint_ControlNet.py",
    "content": "# Copyright 2023 The HuggingFace Team. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# This model implementation is heavily inspired by https://github.com/haofanwang/ControlNet-for-Diffusers/  # noqa\n\nimport inspect\nimport warnings\nfrom typing import Any, Callable, Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport PIL.Image\nimport torch\nimport torch.nn.functional as F\nfrom diffusers.image_processor import VaeImageProcessor\nfrom diffusers.loaders import (FromSingleFileMixin, LoraLoaderMixin,\n                               TextualInversionLoaderMixin)\nfrom diffusers.models import (AsymmetricAutoencoderKL, AutoencoderKL,\n                              ControlNetModel, UNet2DConditionModel)\nfrom diffusers.pipelines.controlnet import MultiControlNetModel\nfrom diffusers.pipelines.pipeline_utils import DiffusionPipeline\nfrom diffusers.pipelines.stable_diffusion import StableDiffusionPipelineOutput\nfrom diffusers.pipelines.stable_diffusion.safety_checker import \\\n    StableDiffusionSafetyChecker\nfrom diffusers.schedulers import KarrasDiffusionSchedulers\nfrom diffusers.utils import (is_accelerate_available, is_accelerate_version,\n                             logging, replace_example_docstring)\nfrom diffusers.utils.torch_utils import is_compiled_module, randn_tensor\nfrom transformers import CLIPImageProcessor, CLIPTextModel, CLIPTokenizer\n\nlogger = logging.get_logger(__name__)  # pylint: disable=invalid-name\n\nEXAMPLE_DOC_STRING = \"\"\"\n    Examples:\n        ```py\n        >>> # !pip install transformers accelerate\n        >>> from diffusers import (StableDiffusionControlNetInpaintPipeline,\n                ControlNetModel, DDIMScheduler)\n        >>> from diffusers.utils import load_image\n        >>> import numpy as np\n        >>> import torch\n\n        >>> init_image = load_image(\n        ...     \"https://huggingface.co/datasets/diffusers/\" +\n                \"test-arrays/resolve/main/stable_diffusion_inpaint/boy.png\")\n        >>> init_image = init_image.resize((512, 512))\n\n        >>> generator = torch.Generator(device=\"cpu\").manual_seed(1)\n\n        >>> mask_image = load_image(\n        ...     \"https://huggingface.co/datasets/diffusers/\" +\n                \"test-arrays/resolve/main/stable_diffusion_inpaint/boy_mask.png\")\n        >>> mask_image = mask_image.resize((512, 512))\n\n\n        >>> def make_inpaint_condition(image, image_mask):\n        ...     image = np.array(\n                    image.convert(\"RGB\")).astype(np.float32) / 255.0\n        ...     image_mask = np.array(\n                    image_mask.convert(\"L\")).astype(np.float32) / 255.0\n\n        ...     assert image.shape[0:1] == image_mask.shape[0:1], \\\n                    \"image and image_mask must have the same image size\"\n        ...     image[image_mask > 0.5] = -1.0  # set as masked pixel\n        ...     image = np.expand_dims(image, 0).transpose(0, 3, 1, 2)\n        ...     image = torch.from_numpy(image)\n        ...     return image\n\n\n        >>> control_image = make_inpaint_condition(init_image, mask_image)\n\n        >>> controlnet = ControlNetModel.from_pretrained(\n        ...     \"lllyasviel/control_v11p_sd15_inpaint\",\n        ...     torch_dtype=torch.float16\n        ... )\n        >>> pipe = StableDiffusionControlNetInpaintPipeline.from_pretrained(\n        ...     \"runwayml/stable-diffusion-v1-5\", controlnet=controlnet,\n        ...     torch_dtype=torch.float16\n        ... )\n\n        >>> pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)\n        >>> pipe.enable_model_cpu_offload()\n\n        >>> # generate image\n        >>> image = pipe(\n        ...     \"a handsome man with ray-ban sunglasses\",\n        ...     num_inference_steps=20,\n        ...     generator=generator,\n        ...     eta=1.0,\n        ...     image=init_image,\n        ...     mask_image=mask_image,\n        ...     control_image=control_image,\n        ... ).images[0]\n        ```\n\"\"\"\n\n\n# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion_inpaint.prepare_mask_and_masked_image  # noqa\ndef prepare_mask_and_masked_image(image,\n                                  mask,\n                                  height,\n                                  width,\n                                  return_image=False):\n    \"\"\"Prepares a pair (image, mask) to be consumed by the Stable Diffusion\n    pipeline. This means that those inputs will be converted to\n    ``torch.Tensor`` with shapes ``batch x channels x height x width`` where\n    ``channels`` is ``3`` for the ``image`` and ``1`` for the ``mask``.\n\n    The ``image`` will be converted to ``torch.float32`` and normalized to be\n    in ``[-1, 1]``. The ``mask`` will be\n    binarized (``mask > 0.5``) and cast to ``torch.float32`` too.\n\n    Args:\n        image (Union[np.array, PIL.Image, torch.Tensor]): The image to inpaint.\n            It can be a ``PIL.Image``, or a ``height x width x 3`` ``np.array``\n              or a ``channels x height x width``\n            ``torch.Tensor`` or a ``batch x channels x height x width``\n            ``torch.Tensor``.\n        mask (_type_): The mask to apply to the image, i.e. regions to inpaint.\n            It can be a ``PIL.Image``, or a ``height x width`` ``np.array`` or\n            a ``1 x height x width``\n            ``torch.Tensor`` or a ``batch x 1 x height x width``\n            ``torch.Tensor``.\n\n\n    Raises:\n        ValueError: ``torch.Tensor`` images should be in the ``[-1, 1]`` range.\n        ValueError: ``torch.Tensor`` mask\n        should be in the ``[0, 1]`` range. ValueError: ``mask`` and ``image``\n         should have the same spatial dimensions.\n        TypeError: ``mask`` is a ``torch.Tensor`` but ``image`` is not\n            (or the other way around).\n\n    Returns:\n        tuple[torch.Tensor]: The pair (mask, masked_image) as\n        ``torch.Tensor`` with 4\n            dimensions: ``batch x channels x height x width``.\n    \"\"\"\n\n    if image is None:\n        raise ValueError('`image` input cannot be undefined.')\n\n    if mask is None:\n        raise ValueError('`mask_image` input cannot be undefined.')\n\n    if isinstance(image, torch.Tensor):\n        if not isinstance(mask, torch.Tensor):\n            raise TypeError('`image` is a torch.Tensor '\n                            f'but `mask` (type: {type(mask)} is not')\n\n        # Batch single image\n        if image.ndim == 3:\n            assert image.shape[\n                0] == 3, 'Image outside a batch should be of shape (3, H, W)'\n            image = image.unsqueeze(0)\n\n        # Batch and add channel dim for single mask\n        if mask.ndim == 2:\n            mask = mask.unsqueeze(0).unsqueeze(0)\n\n        # Batch single mask or add channel dim\n        if mask.ndim == 3:\n            # Single batched mask, no channel dim or single mask not\n            # batched but channel dim\n            if mask.shape[0] == 1:\n                mask = mask.unsqueeze(0)\n\n            # Batched masks no channel dim\n            else:\n                mask = mask.unsqueeze(1)\n\n        assert image.ndim == 4 and mask.ndim == 4, \\\n            'Image and Mask must have 4 dimensions'\n        assert image.shape[-2:] == mask.shape[\n            -2:], 'Image and Mask must have the same spatial dimensions'\n        assert image.shape[0] == mask.shape[\n            0], 'Image and Mask must have the same batch size'\n\n        # Check image is in [-1, 1]\n        if image.min() < -1 or image.max() > 1:\n            raise ValueError('Image should be in [-1, 1] range')\n\n        # Check mask is in [0, 1]\n        if mask.min() < 0 or mask.max() > 1:\n            raise ValueError('Mask should be in [0, 1] range')\n\n        # Binarize mask\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n\n        # Image as float32\n        image = image.to(dtype=torch.float32)\n    elif isinstance(mask, torch.Tensor):\n        raise TypeError(\n            f'`mask` is a torch.Tensor but `image` (type: {type(image)} is not'\n        )\n    else:\n        # preprocess image\n        if isinstance(image, (PIL.Image.Image, np.ndarray)):\n            image = [image]\n        if isinstance(image, list) and isinstance(image[0], PIL.Image.Image):\n            # resize all images w.r.t passed height an width\n            image = [\n                i.resize((width, height), resample=PIL.Image.LANCZOS)\n                for i in image\n            ]\n            image = [np.array(i.convert('RGB'))[None, :] for i in image]\n            image = np.concatenate(image, axis=0)\n        elif isinstance(image, list) and isinstance(image[0], np.ndarray):\n            image = np.concatenate([i[None, :] for i in image], axis=0)\n\n        image = image.transpose(0, 3, 1, 2)\n        image = torch.from_numpy(image).to(dtype=torch.float32) / 127.5 - 1.0\n\n        # preprocess mask\n        if isinstance(mask, (PIL.Image.Image, np.ndarray)):\n            mask = [mask]\n\n        if isinstance(mask, list) and isinstance(mask[0], PIL.Image.Image):\n            mask = [\n                i.resize((width, height), resample=PIL.Image.LANCZOS)\n                for i in mask\n            ]\n            mask = np.concatenate(\n                [np.array(m.convert('L'))[None, None, :] for m in mask],\n                axis=0)\n            mask = mask.astype(np.float32) / 255.0\n        elif isinstance(mask, list) and isinstance(mask[0], np.ndarray):\n            mask = np.concatenate([m[None, None, :] for m in mask], axis=0)\n\n        mask[mask < 0.5] = 0\n        mask[mask >= 0.5] = 1\n        mask = torch.from_numpy(mask)\n\n    masked_image = image * (mask < 0.5)\n\n    # n.b. ensure backwards compatibility as old function does not return image\n    if return_image:\n        return mask, masked_image, image\n\n    return mask, masked_image\n\n\nclass StableDiffusionControlNetInpaintPipeline(DiffusionPipeline,\n                                               TextualInversionLoaderMixin,\n                                               LoraLoaderMixin,\n                                               FromSingleFileMixin):\n    r\"\"\"\n    Pipeline for text-to-image generation using\n    Stable Diffusion with ControlNet guidance.\n\n    This model inherits from [`DiffusionPipeline`]. Check the\n    superclass documentation for the generic methods the\n    library implements for all the pipelines\n    (such as downloading or saving, running on a particular device, etc.)\n\n    In addition the pipeline inherits the following loading methods:\n        - *Textual-Inversion*: [\n            `loaders.TextualInversionLoaderMixin.load_textual_inversion`]\n\n    <Tip>\n\n    This pipeline can be used both with checkpoints that\n    have been specifically fine-tuned for inpainting, such as\n    [runwayml/stable-diffusion-inpainting]\n    (https://huggingface.co/runwayml/stable-diffusion-inpainting)\n     as well as default text-to-image stable diffusion checkpoints, such as\n     [runwayml/stable-diffusion-v1-5]\n     (https://huggingface.co/runwayml/stable-diffusion-v1-5).\n    Default text-to-image stable diffusion checkpoints might be preferable for\n      controlnets that have been fine-tuned on\n    those, such as [lllyasviel/control_v11p_sd15_inpaint]\n    (https://huggingface.co/lllyasviel/control_v11p_sd15_inpaint).\n\n    </Tip>\n\n    Args:\n        vae ([`AutoencoderKL`]):\n            Variational Auto-Encoder (VAE) Model to encode and decode images\n            to and from latent representations.\n        text_encoder ([`CLIPTextModel`]):\n            Frozen text-encoder. Stable Diffusion uses the text portion of\n            [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#\n            transformers.CLIPTextModel), specifically\n            the [clip-vit-large-patch14](https://huggingface.co/openai/\n            clip-vit-large-patch14) variant.\n        tokenizer (`CLIPTokenizer`):\n            Tokenizer of class\n            [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/\n            en/model_doc/clip#transformers.CLIPTokenizer).\n        unet ([`UNet2DConditionModel`]): Conditional U-Net architecture to\n        denoise the encoded image latents.\n        controlnet ([`ControlNetModel`] or `List[ControlNetModel]`):\n            Provides additional conditioning to the unet during the\n            denoising process. If you set multiple ControlNets\n            as a list, the outputs from each ControlNet are added together\n            to create one combined additional\n            conditioning.\n        scheduler ([`SchedulerMixin`]):\n            A scheduler to be used in combination with `unet` to denoise\n            the encoded image latents. Can be one of\n            [`DDIMScheduler`], [`LMSDiscreteScheduler`], or [`PNDMScheduler`].\n        safety_checker ([`StableDiffusionSafetyChecker`]):\n            Classification module that estimates whether generated images\n            could be considered offensive or harmful.\n            Please, refer to the [model card](https://huggingface.co/\n            runwayml/stable-diffusion-v1-5) for details.\n        feature_extractor ([`CLIPImageProcessor`]):\n            Model that extracts features from generated images to be used as\n            inputs for the `safety_checker`.\n    \"\"\"\n    _optional_components = ['safety_checker', 'feature_extractor']\n\n    def __init__(\n        self,\n        vae: AutoencoderKL,\n        text_encoder: CLIPTextModel,\n        tokenizer: CLIPTokenizer,\n        unet: UNet2DConditionModel,\n        controlnet: Union[ControlNetModel, List[ControlNetModel],\n                          Tuple[ControlNetModel], MultiControlNetModel],\n        scheduler: KarrasDiffusionSchedulers,\n        safety_checker: StableDiffusionSafetyChecker,\n        feature_extractor: CLIPImageProcessor,\n        requires_safety_checker: bool = True,\n    ):\n        super().__init__()\n\n        if safety_checker is None and requires_safety_checker:\n            logger.warning(\n                f'You have disabled the safety checker for {self.__class__} by'\n                ' passing `safety_checker=None`. Ensure'\n                ' that you abide to the conditions of the Stable Diffusion'\n                ' license and do not expose unfiltered'\n                ' results in services or applications open to the public.'\n                ' Both the diffusers team and Hugging Face'\n                ' strongly recommend to keep the safety filter enabled'\n                ' in all public facing circumstances, disabling'\n                ' it only for use-cases that involve analyzing network'\n                ' behavior  or auditing its results. For more'\n                ' information, please have a look at'\n                ' https://github.com/huggingface/diffusers/pull/254 .')\n\n        if safety_checker is not None and feature_extractor is None:\n            raise ValueError(\n                'Make sure to define a feature extractor when '\n                'loading {self.__class__} if you want to use the safety'\n                ' checker. If you do not want to use the safety checker,'\n                \" you can pass `'safety_checker=None'` instead.\")\n\n        if isinstance(controlnet, (list, tuple)):\n            controlnet = MultiControlNetModel(controlnet)\n\n        self.register_modules(\n            vae=vae,\n            text_encoder=text_encoder,\n            tokenizer=tokenizer,\n            unet=unet,\n            controlnet=controlnet,\n            scheduler=scheduler,\n            safety_checker=safety_checker,\n            feature_extractor=feature_extractor,\n        )\n        self.vae_scale_factor = 2**(\n            len(self.vae.config.block_out_channels) - 1)\n        self.image_processor = VaeImageProcessor(\n            vae_scale_factor=self.vae_scale_factor)\n        self.control_image_processor = VaeImageProcessor(\n            vae_scale_factor=self.vae_scale_factor,\n            do_convert_rgb=True,\n            do_normalize=False)\n        self.register_to_config(\n            requires_safety_checker=requires_safety_checker)\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.enable_vae_slicing\n    def enable_vae_slicing(self):\n        r\"\"\"\n        Enable sliced VAE decoding. When this option is enabled,\n        the VAE will split the input tensor in slices to\n        compute decoding in several steps. This is useful\n        to save some memory and allow larger batch sizes.\n        \"\"\"\n        self.vae.enable_slicing()\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.disable_vae_slicing\n    def disable_vae_slicing(self):\n        r\"\"\"\n        Disable sliced VAE decoding. If `enable_vae_slicing`\n        was previously enabled, this method will go back to\n        computing decoding in one step.\n        \"\"\"\n        self.vae.disable_slicing()\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.enable_vae_tiling\n    def enable_vae_tiling(self):\n        r\"\"\"\n        Enable tiled VAE decoding. When this option is enabled,\n        the VAE will split the input tensor into tiles to\n        compute decoding and encoding in several steps.\n        This is useful for saving a large amount of memory and to allow\n        processing larger images.\n        \"\"\"\n        self.vae.enable_tiling()\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.disable_vae_tiling\n    def disable_vae_tiling(self):\n        r\"\"\"\n        Disable tiled VAE decoding. If `enable_vae_tiling` was\n        previously enabled, this method will go back to\n        computing decoding in one step.\n        \"\"\"\n        self.vae.disable_tiling()\n\n    def enable_model_cpu_offload(self, gpu_id=0):\n        r\"\"\"\n        Offloads all models to CPU using accelerate, reducing memory\n        usage with a low impact on performance. Compared\n        to `enable_sequential_cpu_offload`, this method moves one whole\n        model at a time to the GPU when its `forward`\n        method is called, and the model remains in GPU until the next model\n        runs. Memory savings are lower than with\n        `enable_sequential_cpu_offload`, but performance is much better due\n        to the iterative execution of the `unet`.\n        \"\"\"\n        if is_accelerate_available() and is_accelerate_version(\n                '>=', '0.17.0.dev0'):\n            from accelerate import cpu_offload_with_hook\n        else:\n            raise ImportError('`enable_model_cpu_offload` '\n                              'requires `accelerate v0.17.0` or higher.')\n\n        device = torch.device(f'cuda:{gpu_id}')\n\n        hook = None\n        for cpu_offloaded_model in [self.text_encoder, self.unet, self.vae]:\n            _, hook = cpu_offload_with_hook(\n                cpu_offloaded_model, device, prev_module_hook=hook)\n\n        if self.safety_checker is not None:\n            # the safety checker can offload the vae again\n            _, hook = cpu_offload_with_hook(\n                self.safety_checker, device, prev_module_hook=hook)\n\n        # control net hook has be manually offloaded as it alternates with unet\n        cpu_offload_with_hook(self.controlnet, device)\n\n        # We'll offload the last model manually.\n        self.final_offload_hook = hook\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline._encode_prompt\n    def _encode_prompt(\n        self,\n        promptA,\n        promptB,\n        t,\n        device,\n        num_images_per_prompt,\n        do_classifier_free_guidance,\n        negative_promptA=None,\n        negative_promptB=None,\n        t_nag=None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        lora_scale: Optional[float] = None,\n    ):\n        r\"\"\"\n        Encodes the prompt into text encoder hidden states.\n\n        Args:\n             prompt (`str` or `List[str]`, *optional*):\n                prompt to be encoded\n            device: (`torch.device`):\n                torch device\n            num_images_per_prompt (`int`):\n                number of images that should be generated per prompt\n            do_classifier_free_guidance (`bool`):\n                whether to use classifier free guidance or not\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation.\n                If not defined, one has to pass\n                `negative_prompt_embeds` instead. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is\n                less than `1`).\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily tweak\n                text inputs, *e.g.* prompt weighting. If not\n                provided, text embeddings will be generated from `prompt`\n                input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to easily\n                tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will be\n                generated from `negative_prompt` input\n                argument.\n            lora_scale (`float`, *optional*):\n                A lora scale that will be applied to all LoRA layers of the\n                text encoder if LoRA layers are loaded.\n        \"\"\"\n        # set lora scale so that monkey patched LoRA\n        # function of text encoder can correctly access it\n        if lora_scale is not None and isinstance(self, LoraLoaderMixin):\n            self._lora_scale = lora_scale\n\n        prompt = promptA\n        negative_prompt = negative_promptA\n\n        if promptA is not None and isinstance(promptA, str):\n            batch_size = 1\n        elif promptA is not None and isinstance(promptA, list):\n            batch_size = len(promptA)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        if prompt_embeds is None:\n            # textual inversion: procecss multi-vector tokens if necessary\n            if isinstance(self, TextualInversionLoaderMixin):\n                promptA = self.maybe_convert_prompt(promptA, self.tokenizer)\n\n            text_inputsA = self.tokenizer(\n                promptA,\n                padding='max_length',\n                max_length=self.tokenizer.model_max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            text_inputsB = self.tokenizer(\n                promptB,\n                padding='max_length',\n                max_length=self.tokenizer.model_max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            text_input_idsA = text_inputsA.input_ids\n            text_input_idsB = text_inputsB.input_ids\n            untruncated_ids = self.tokenizer(\n                promptA, padding='longest', return_tensors='pt').input_ids\n\n            if untruncated_ids.shape[-1] >= text_input_idsA.shape[\n                    -1] and not torch.equal(text_input_idsA, untruncated_ids):\n                removed_text = self.tokenizer.batch_decode(\n                    untruncated_ids[:, self.tokenizer.model_max_length - 1:-1])\n                logger.warning(\n                    'The following part of your input was truncated because'\n                    'CLIP can only handle sequences up to'\n                    f' {self.tokenizer.model_max_length} '\n                    f' tokens: {removed_text}')\n\n            if hasattr(self.text_encoder.config, 'use_attention_mask'\n                       ) and self.text_encoder.config.use_attention_mask:\n                attention_mask = text_inputsA.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            # print(\"text_input_idsA: \",text_input_idsA)\n            # print(\"text_input_idsB: \",text_input_idsB)\n            # print('t: ',t)\n\n            prompt_embedsA = self.text_encoder(\n                text_input_idsA.to(device),\n                attention_mask=attention_mask,\n            )\n            prompt_embedsA = prompt_embedsA[0]\n\n            prompt_embedsB = self.text_encoder(\n                text_input_idsB.to(device),\n                attention_mask=attention_mask,\n            )\n            prompt_embedsB = prompt_embedsB[0]\n            prompt_embeds = prompt_embedsA * (t) + (1 - t) * prompt_embedsB\n            # print(\"prompt_embeds: \",prompt_embeds)\n\n        if self.text_encoder is not None:\n            prompt_embeds_dtype = self.text_encoder.dtype\n        elif self.unet is not None:\n            prompt_embeds_dtype = self.unet.dtype\n        else:\n            prompt_embeds_dtype = prompt_embeds.dtype\n\n        prompt_embeds = prompt_embeds.to(\n            dtype=prompt_embeds_dtype, device=device)\n\n        bs_embed, seq_len, _ = prompt_embeds.shape\n        # duplicate text embeddings for each generation per prompt,\n        #  using mps friendly method\n        prompt_embeds = prompt_embeds.repeat(1, num_images_per_prompt, 1)\n        prompt_embeds = prompt_embeds.view(bs_embed * num_images_per_prompt,\n                                           seq_len, -1)\n\n        # get unconditional embeddings for classifier free guidance\n        if do_classifier_free_guidance and negative_prompt_embeds is None:\n            uncond_tokensA: List[str]\n            uncond_tokensB: List[str]\n            if negative_prompt is None:\n                uncond_tokensA = [''] * batch_size\n                uncond_tokensB = [''] * batch_size\n            elif prompt is not None and type(prompt) is not type(\n                    negative_prompt):\n                raise TypeError(\n                    f'`negative_prompt` should be the same type to `prompt`, '\n                    f'but got {type(negative_prompt)} !='\n                    f' {type(prompt)}.')\n            elif isinstance(negative_prompt, str):\n                uncond_tokensA = [negative_promptA]\n                uncond_tokensB = [negative_promptB]\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f'`negative_prompt`: {negative_prompt} has '\n                    f'batch size {len(negative_prompt)}, but `prompt`:'\n                    f' {prompt} has batch size {batch_size}. Please make'\n                    ' sure that passed `negative_prompt` matches'\n                    ' the batch size of `prompt`.')\n            else:\n                uncond_tokensA = negative_promptA\n                uncond_tokensB = negative_promptB\n\n            # textual inversion: procecss multi-vector tokens if necessary\n            if isinstance(self, TextualInversionLoaderMixin):\n                uncond_tokensA = self.maybe_convert_prompt(\n                    uncond_tokensA, self.tokenizer)\n                uncond_tokensB = self.maybe_convert_prompt(\n                    uncond_tokensB, self.tokenizer)\n\n            max_length = prompt_embeds.shape[1]\n            uncond_inputA = self.tokenizer(\n                uncond_tokensA,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n            uncond_inputB = self.tokenizer(\n                uncond_tokensB,\n                padding='max_length',\n                max_length=max_length,\n                truncation=True,\n                return_tensors='pt',\n            )\n\n            if hasattr(self.text_encoder.config, 'use_attention_mask'\n                       ) and self.text_encoder.config.use_attention_mask:\n                attention_mask = uncond_inputA.attention_mask.to(device)\n            else:\n                attention_mask = None\n\n            negative_prompt_embedsA = self.text_encoder(\n                uncond_inputA.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            negative_prompt_embedsB = self.text_encoder(\n                uncond_inputB.input_ids.to(device),\n                attention_mask=attention_mask,\n            )\n            negative_prompt_embeds = negative_prompt_embedsA[0] * (t_nag) + (\n                1 - t_nag) * negative_prompt_embedsB[0]\n\n            # negative_prompt_embeds = negative_prompt_embeds[0]\n\n        if do_classifier_free_guidance:\n            # duplicate unconditional embeddings for each generation\n            # per prompt, using mps friendly method\n            seq_len = negative_prompt_embeds.shape[1]\n\n            negative_prompt_embeds = negative_prompt_embeds.to(\n                dtype=prompt_embeds_dtype, device=device)\n\n            negative_prompt_embeds = negative_prompt_embeds.repeat(\n                1, num_images_per_prompt, 1)\n            negative_prompt_embeds = negative_prompt_embeds.view(\n                batch_size * num_images_per_prompt, seq_len, -1)\n\n            # For classifier free guidance, we need to do two forward passes.\n            # Here we concatenate the unconditional and text embeddings\n            # into a single batch\n            # to avoid doing two forward passes\n            # print(\"prompt_embeds: \",prompt_embeds)\n            prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds])\n\n        return prompt_embeds\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.run_safety_checker\n    def run_safety_checker(self, image, device, dtype):\n        if self.safety_checker is None:\n            has_nsfw_concept = None\n        else:\n            if torch.is_tensor(image):\n                feature_extractor_input = self.image_processor.postprocess(\n                    image, output_type='pil')\n            else:\n                feature_extractor_input = self.image_processor.numpy_to_pil(\n                    image)\n            safety_checker_input = self.feature_extractor(\n                feature_extractor_input, return_tensors='pt').to(device)\n            image, has_nsfw_concept = self.safety_checker(\n                images=image,\n                clip_input=safety_checker_input.pixel_values.to(dtype))\n        return image, has_nsfw_concept\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.decode_latents\n    def decode_latents(self, latents):\n        warnings.warn(\n            'The decode_latents method is deprecated and will '\n            'be removed in a future version. Please'\n            ' use VaeImageProcessor instead',\n            FutureWarning,\n        )\n        latents = 1 / self.vae.config.scaling_factor * latents\n        image = self.vae.decode(latents, return_dict=False)[0]\n        image = (image / 2 + 0.5).clamp(0, 1)\n        # we always cast to float32 as this does not cause significant\n        # overhead and is compatible with bfloat16\n        image = image.cpu().permute(0, 2, 3, 1).float().numpy()\n        return image\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion.StableDiffusionPipeline.\n    # prepare_extra_step_kwargs\n    def prepare_extra_step_kwargs(self, generator, eta):\n        # prepare extra kwargs for the scheduler step, since not\n        # all schedulers have the same signature\n        # eta (η) is only used with the DDIMScheduler, it\n        # will be ignored for other schedulers.\n        # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502\n        # and should be between [0, 1]\n\n        accepts_eta = 'eta' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs['eta'] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = 'generator' in set(\n            inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs['generator'] = generator\n        return extra_step_kwargs\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion_img2img.\n    # StableDiffusionImg2ImgPipeline.get_timesteps\n    def get_timesteps(self, num_inference_steps, strength, device):\n        # get the original timestep using init_timestep\n        init_timestep = min(\n            int(num_inference_steps * strength), num_inference_steps)\n\n        t_start = max(num_inference_steps - init_timestep, 0)\n        timesteps = self.scheduler.timesteps[t_start * self.scheduler.order:]\n\n        return timesteps, num_inference_steps - t_start\n\n    def check_inputs(\n        self,\n        prompt,\n        image,\n        height,\n        width,\n        callback_steps,\n        negative_prompt=None,\n        prompt_embeds=None,\n        negative_prompt_embeds=None,\n        controlnet_conditioning_scale=1.0,\n        control_guidance_start=0.0,\n        control_guidance_end=1.0,\n    ):\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError('`height` and `width` have to be divisible '\n                             f' by 8 but are {height} and {width}.')\n\n        if (callback_steps is None) or (callback_steps is not None and\n                                        (not isinstance(callback_steps, int)\n                                         or callback_steps <= 0)):\n            raise ValueError(f'`callback_steps` has to be a positive '\n                             f' integer but is {callback_steps} of type'\n                             f' {type(callback_steps)}.')\n\n        if prompt is not None and prompt_embeds is not None:\n            raise ValueError(\n                f'Cannot forward both `prompt`: {prompt} and '\n                f'`prompt_embeds`: {prompt_embeds}. Please make sure to'\n                ' only forward one of the two.')\n        elif prompt is None and prompt_embeds is None:\n            raise ValueError(\n                'Provide either `prompt` or `prompt_embeds`.'\n                'Cannot leave both `prompt` and `prompt_embeds` undefined.')\n        elif prompt is not None and (not isinstance(prompt, str)\n                                     and not isinstance(prompt, list)):\n            raise ValueError(f'`prompt` has to be of '\n                             f'type `str` or `list` but is {type(prompt)}')\n\n        if negative_prompt is not None and negative_prompt_embeds is not None:\n            raise ValueError(\n                f'Cannot forward both `negative_prompt`: {negative_prompt} '\n                f'and `negative_prompt_embeds`:'\n                f' {negative_prompt_embeds}. Please make'\n                f' sure to only forward one of the two.')\n\n        if prompt_embeds is not None and negative_prompt_embeds is not None:\n            if prompt_embeds.shape != negative_prompt_embeds.shape:\n                raise ValueError(\n                    '`prompt_embeds` and `negative_prompt_embeds` must'\n                    f' have the same shape when passed directly, but'\n                    f' got: `prompt_embeds` {prompt_embeds.shape} != '\n                    '`negative_prompt_embeds`'\n                    f' {negative_prompt_embeds.shape}.')\n\n        # `prompt` needs more sophisticated handling when there are multiple\n        # conditionings.\n        if isinstance(self.controlnet, MultiControlNetModel):\n            if isinstance(prompt, list):\n                logger.warning(\n                    f'You have {len(self.controlnet.nets)} ControlNets '\n                    ' and you have passed {len(prompt)}'\n                    ' prompts. The conditionings will be '\n                    ' fixed across the prompts.')\n\n        # Check `image`\n        is_compiled = hasattr(\n            F, 'scaled_dot_product_attention') and isinstance(\n                self.controlnet, torch._dynamo.eval_frame.OptimizedModule)\n\n        if (isinstance(self.controlnet, ControlNetModel) or is_compiled\n                and isinstance(self.controlnet._orig_mod, ControlNetModel)):\n            self.check_image(image, prompt, prompt_embeds)\n        elif (isinstance(self.controlnet, MultiControlNetModel) or is_compiled\n              and isinstance(self.controlnet._orig_mod, MultiControlNetModel)):\n            if not isinstance(image, list):\n                raise TypeError(\n                    'For multiple controlnets: `image` must be type `list`')\n\n            # When `image` is a nested list:\n            # (e.g. [[canny_image_1, pose_image_1],\n            # [canny_image_2, pose_image_2]])\n            elif any(isinstance(i, list) for i in image):\n                raise ValueError('A single batch of multiple conditionings '\n                                 'are supported at the moment.')\n            elif len(image) != len(self.controlnet.nets):\n                raise ValueError(\n                    'For multiple controlnets: `image` must have the '\n                    'same length as the number of controlnets, but got'\n                    f' {len(image)} images '\n                    f' and {len(self.controlnet.nets)} ControlNets.')\n\n            for image_ in image:\n                self.check_image(image_, prompt, prompt_embeds)\n        else:\n            assert False\n\n        # Check `controlnet_conditioning_scale`\n        if (isinstance(self.controlnet, ControlNetModel) or is_compiled\n                and isinstance(self.controlnet._orig_mod, ControlNetModel)):\n            if not isinstance(controlnet_conditioning_scale, float):\n                raise TypeError(\n                    'For single controlnet: '\n                    '`controlnet_conditioning_scale` must be type `float`.')\n        elif (isinstance(self.controlnet, MultiControlNetModel) or is_compiled\n              and isinstance(self.controlnet._orig_mod, MultiControlNetModel)):\n            if isinstance(controlnet_conditioning_scale, list):\n                if any(\n                        isinstance(i, list)\n                        for i in controlnet_conditioning_scale):\n                    raise ValueError(\n                        'A single batch of '\n                        'multiple conditionings are supported at the moment.')\n            elif isinstance(\n                    controlnet_conditioning_scale,\n                    list) and len(controlnet_conditioning_scale) != len(\n                        self.controlnet.nets):\n                raise ValueError(\n                    'For multiple controlnets: When '\n                    '`controlnet_conditioning_scale` is specified as '\n                    '`list`, it must have'\n                    ' the same length as the number of controlnets')\n        else:\n            assert False\n\n        if len(control_guidance_start) != len(control_guidance_end):\n            raise ValueError(\n                f'`control_guidance_start` has {len(control_guidance_start)} '\n                ' elements, but `control_guidance_end` has'\n                f' {len(control_guidance_end)} elements. Make sure to'\n                f' provide the same number of elements to each list.')\n\n        if isinstance(self.controlnet, MultiControlNetModel):\n            if len(control_guidance_start) != len(self.controlnet.nets):\n                raise ValueError(\n                    f'`control_guidance_start`: {control_guidance_start} has'\n                    f' {len(control_guidance_start)} elements but there '\n                    f' are {len(self.controlnet.nets)} controlnets available. '\n                    f' Make sure to provide {len(self.controlnet.nets)}.')\n\n        for start, end in zip(control_guidance_start, control_guidance_end):\n            if start >= end:\n                raise ValueError(\n                    f'control guidance start: {start} cannot be larger or '\n                    f'equal to control guidance end: {end}.')\n            if start < 0.0:\n                raise ValueError(\n                    f\"control guidance start: {start} can't be smaller than 0.\"\n                )\n            if end > 1.0:\n                raise ValueError(\n                    f\"control guidance end: {end} can't be larger than 1.0.\")\n\n    # Copied from diffusers.pipelines.controlnet.pipeline_controlnet.\n    # StableDiffusionControlNetPipeline.check_image\n    def check_image(self, image, prompt, prompt_embeds):\n        image_is_pil = isinstance(image, PIL.Image.Image)\n        image_is_tensor = isinstance(image, torch.Tensor)\n        image_is_np = isinstance(image, np.ndarray)\n        image_is_pil_list = isinstance(image, list) and isinstance(\n            image[0], PIL.Image.Image)\n        image_is_tensor_list = isinstance(image, list) and isinstance(\n            image[0], torch.Tensor)\n        image_is_np_list = isinstance(image, list) and isinstance(\n            image[0], np.ndarray)\n\n        if (not image_is_pil and not image_is_tensor and not image_is_np\n                and not image_is_pil_list and not image_is_tensor_list\n                and not image_is_np_list):\n            raise TypeError(\n                'image must be passed and be one of PIL image, numpy array,'\n                f' torch tensor, list of PIL images, list of numpy arrays or'\n                f'list of torch tensors, but is {type(image)}')\n\n        if image_is_pil:\n            image_batch_size = 1\n        else:\n            image_batch_size = len(image)\n\n        if prompt is not None and isinstance(prompt, str):\n            prompt_batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            prompt_batch_size = len(prompt)\n        elif prompt_embeds is not None:\n            prompt_batch_size = prompt_embeds.shape[0]\n\n        if image_batch_size != 1 and image_batch_size != prompt_batch_size:\n            raise ValueError(\n                'If image batch size is not 1, image batch size must be '\n                'same as prompt batch size. '\n                f' image batch size: {image_batch_size}, '\n                f' prompt batch size: {prompt_batch_size}')\n\n    # Copied from diffusers.pipelines.controlnet.pipeline_controlnet.\n    # StableDiffusionControlNetPipeline.prepare_image\n    def prepare_control_image(\n        self,\n        image,\n        width,\n        height,\n        batch_size,\n        num_images_per_prompt,\n        device,\n        dtype,\n        do_classifier_free_guidance=False,\n        guess_mode=False,\n    ):\n        image = self.control_image_processor.preprocess(\n            image, height=height, width=width).to(dtype=torch.float32)\n        image_batch_size = image.shape[0]\n\n        if image_batch_size == 1:\n            repeat_by = batch_size\n        else:\n            # image batch size is the same as prompt batch size\n            repeat_by = num_images_per_prompt\n\n        image = image.repeat_interleave(repeat_by, dim=0)\n\n        image = image.to(device=device, dtype=dtype)\n\n        if do_classifier_free_guidance and not guess_mode:\n            image = torch.cat([image] * 2)\n\n        return image\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion_inpaint.\n    # StableDiffusionInpaintPipeline.prepare_latents\n    def prepare_latents(\n        self,\n        batch_size,\n        num_channels_latents,\n        height,\n        width,\n        dtype,\n        device,\n        generator,\n        latents=None,\n        image=None,\n        timestep=None,\n        is_strength_max=True,\n        return_noise=False,\n        return_image_latents=False,\n    ):\n        shape = (batch_size, num_channels_latents,\n                 height // self.vae_scale_factor,\n                 width // self.vae_scale_factor)\n        if isinstance(generator, list) and len(generator) != batch_size:\n            raise ValueError(\n                'You have passed a list of generators of '\n                f'length {len(generator)}, but requested an effective batch'\n                f' size of {batch_size}. Make sure the batch size '\n                'matches the length of the generators.')\n\n        if (image is None or timestep is None) and not is_strength_max:\n            raise ValueError(\n                'Since strength < 1. initial latents are to be initialised'\n                ' as a combination of Image + Noise.'\n                'However, either the image or the noise timestep has '\n                ' not been provided.')\n\n        if return_image_latents or (latents is None and not is_strength_max):\n            image = image.to(device=device, dtype=dtype)\n            image_latents = self._encode_vae_image(\n                image=image, generator=generator)\n\n        if latents is None:\n            noise = randn_tensor(\n                shape, generator=generator, device=device, dtype=dtype)\n            # if strength is 1. then initialise the latents to noise,\n            # else initial to image + noise\n            latents = noise if is_strength_max else self.scheduler.add_noise(\n                image_latents, noise, timestep)\n            # if pure noise then scale the initial latents by the\n            # Scheduler's init sigma\n            latents = latents * self.scheduler.init_noise_sigma \\\n                if is_strength_max else latents\n        else:\n            noise = latents.to(device)\n            latents = noise * self.scheduler.init_noise_sigma\n\n        outputs = (latents, )\n\n        if return_noise:\n            outputs += (noise, )\n\n        if return_image_latents:\n            outputs += (image_latents, )\n\n        return outputs\n\n    def _default_height_width(self, height, width, image):\n        # NOTE: It is possible that a list of images have different\n        # dimensions for each image, so just checking the first image\n        # is not _exactly_ correct, but it is simple.\n        while isinstance(image, list):\n            image = image[0]\n\n        if height is None:\n            if isinstance(image, PIL.Image.Image):\n                height = image.height\n            elif isinstance(image, torch.Tensor):\n                height = image.shape[2]\n\n            height = (height // 8) * 8  # round down to nearest multiple of 8\n\n        if width is None:\n            if isinstance(image, PIL.Image.Image):\n                width = image.width\n            elif isinstance(image, torch.Tensor):\n                width = image.shape[3]\n\n            width = (width // 8) * 8  # round down to nearest multiple of 8\n\n        return height, width\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion_inpaint.\n    # StableDiffusionInpaintPipeline.prepare_mask_latents\n    def prepare_mask_latents(self, mask, masked_image, batch_size, height,\n                             width, dtype, device, generator,\n                             do_classifier_free_guidance):\n        # resize the mask to latents shape as we\n        # concatenate the mask to the latents\n        # we do that before converting to dtype to\n        # avoid breaking in case we're using cpu_offload\n        # and half precision\n        mask = torch.nn.functional.interpolate(\n            mask,\n            size=(height // self.vae_scale_factor,\n                  width // self.vae_scale_factor))\n        mask = mask.to(device=device, dtype=dtype)\n\n        masked_image = masked_image.to(device=device, dtype=dtype)\n        masked_image_latents = self._encode_vae_image(\n            masked_image, generator=generator)\n\n        # duplicate mask and masked_image_latents for each generation per\n        # prompt, using mps friendly method\n        if mask.shape[0] < batch_size:\n            if not batch_size % mask.shape[0] == 0:\n                raise ValueError(\n                    \"The passed mask and required batch size don't match.'\"\n                    ' Masks are supposed to be duplicated to'\n                    f' total batch size of {batch_size}, but {mask.shape[0]} '\n                    ' masks were passed. Make sure the number'\n                    ' of masks that you pass is divisible by the total '\n                    ' requested batch size.')\n            mask = mask.repeat(batch_size // mask.shape[0], 1, 1, 1)\n        if masked_image_latents.shape[0] < batch_size:\n            if not batch_size % masked_image_latents.shape[0] == 0:\n                raise ValueError(\n                    'The passed images and the required batch size '\n                    \" don't match. Images are supposed to be duplicated\"\n                    f' to a total batch size of {batch_size}, but '\n                    f' {masked_image_latents.shape[0]} images were passed.'\n                    ' Make sure the number of images that you pass is '\n                    ' divisible by the total requested batch size.')\n            masked_image_latents = masked_image_latents.repeat(\n                batch_size // masked_image_latents.shape[0], 1, 1, 1)\n\n        mask = torch.cat([mask] * 2) if do_classifier_free_guidance else mask\n        masked_image_latents = (\n            torch.cat([masked_image_latents] * 2)\n            if do_classifier_free_guidance else masked_image_latents)\n\n        # aligning device to prevent device errors when\n        # concatenating it with the latent model input\n        masked_image_latents = masked_image_latents.to(\n            device=device, dtype=dtype)\n        return mask, masked_image_latents\n\n    # Copied from diffusers.pipelines.stable_diffusion.\n    # pipeline_stable_diffusion_inpaint.\n    # StableDiffusionInpaintPipeline._encode_vae_image\n    def _encode_vae_image(self, image: torch.Tensor,\n                          generator: torch.Generator):\n        if isinstance(generator, list):\n            image_latents = [\n                self.vae.encode(image[i:i + 1]).latent_dist.sample(\n                    generator=generator[i]) for i in range(image.shape[0])\n            ]\n            image_latents = torch.cat(image_latents, dim=0)\n        else:\n            image_latents = self.vae.encode(image).latent_dist.sample(\n                generator=generator)\n\n        image_latents = self.vae.config.scaling_factor * image_latents\n\n        return image_latents\n\n    @torch.no_grad()\n    def predict_woControl(\n        self,\n        promptA: Union[str, List[str]] = None,\n        promptB: Union[str, List[str]] = None,\n        image: Union[torch.FloatTensor, PIL.Image.Image] = None,\n        mask_image: Union[torch.FloatTensor, PIL.Image.Image] = None,\n        height: Optional[int] = None,\n        width: Optional[int] = None,\n        strength: float = 1.0,\n        tradoff: float = 1.0,\n        tradoff_nag: float = 1.0,\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n        negative_promptA: Optional[Union[str, List[str]]] = None,\n        negative_promptB: Optional[Union[str, List[str]]] = None,\n        num_images_per_prompt: Optional[int] = 1,\n        eta: float = 0.0,\n        generator: Optional[Union[torch.Generator,\n                                  List[torch.Generator]]] = None,\n        latents: Optional[torch.FloatTensor] = None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        output_type: Optional[str] = 'pil',\n        return_dict: bool = True,\n        callback: Optional[Callable[[int, int, torch.FloatTensor],\n                                    None]] = None,\n        callback_steps: int = 1,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        task_class: Union[torch.Tensor, float, int] = None,\n    ):\n        r\"\"\"\n        The call function to the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide image generation. If not\n                defined, you need to pass `prompt_embeds`.\n            image (`PIL.Image.Image`):\n                `Image` or tensor representing an image batch to be inpainted\n                (which parts of the image to be masked\n                out with `mask_image` and repainted according to `prompt`).\n            mask_image (`PIL.Image.Image`):\n                `Image` or tensor representing an image batch to\n                  mask `image`.\n                White pixels in the mask are repainted\n                while black pixels are preserved. If `mask_image` is a\n                PIL image, it is converted to a single channel\n                (luminance) before use. If it's a tensor, it should\n                contain one color channel (L) instead of 3, so the\n                expected shape would be `(B, H, W, 1)`.\n            height (`int`, *optional*, defaults to `self.unet.config.\n                sample_size * self.vae_scale_factor`):\n                The height in pixels of the generated image.\n            width (`int`, *optional*, defaults to\n                `self.unet.config.sample_size * self.vae_scale_factor`):\n                The width in pixels of the generated image.\n            strength (`float`, *optional*, defaults to 1.0):\n                Indicates extent to transform the reference `image`.\n                Must be between 0 and 1. `image` is used as a\n                starting point and more noise is added the higher the\n                `strength`. The number of denoising steps depends\n                on the amount of noise initially added. When `strength`\n                is 1, added noise is maximum and the denoising\n                process runs for the full number of iterations specified\n                in `num_inference_steps`. A value of 1\n                essentially ignores `image`.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps. More denoising steps\n                usually lead to a higher quality image at the\n                expense of slower inference. This parameter is\n                modulated by `strength`.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                A higher guidance scale value encourages the model to\n                generate images closely linked to the text\n                `prompt` at the expense of lower image quality. Guidance\n                scale is enabled when `guidance_scale > 1`.\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide what to not include in image\n                generation. If not defined, you need to\n                pass `negative_prompt_embeds` instead. Ignored when not\n                using guidance (`guidance_scale < 1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) from the [DDIM]\n                (https://arxiv.org/abs/2010.02502) paper. Only applies\n                to the [`~schedulers.DDIMScheduler`], and is\n                ignored in other schedulers.\n            generator (`torch.Generator` or\n                `List[torch.Generator]`, *optional*):\n                A [`torch.Generator`](https://pytorch.org/docs/stable/\n                generated/torch.Generator.html) to make\n                generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents sampled from a Gaussian\n                distribution, to be used as inputs for image\n                generation. Can be used to tweak the same generation\n                with different prompts. If not provided, a latents\n                tensor is generated by sampling using the supplied\n                random `generator`.\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily\n                tweak text inputs (prompt weighting). If not\n                provided, text embeddings are generated from the\n                `prompt` input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used\n                to easily tweak text inputs (prompt weighting). If\n                not provided, `negative_prompt_embeds` are generated\n                from the `negative_prompt` input argument.\n            output_type (`str`, *optional*, defaults to `\"pil\"`):\n                The output format of the generated image. Choose between\n                `PIL.Image` or `np.array`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a [`~pipelines.stable_diffusion.\n                StableDiffusionPipelineOutput`] instead of a\n                plain tuple.\n            callback (`Callable`, *optional*):\n                A function that calls every `callback_steps` steps during\n                inference. The function is called with the\n                following arguments: `callback(step: int, timestep: int,\n                latents: torch.FloatTensor)`.\n            callback_steps (`int`, *optional*, defaults to 1):\n                The frequency at which the `callback` function is called.\n                If not specified, the callback is called at\n                every step.\n            cross_attention_kwargs (`dict`, *optional*):\n                A kwargs dictionary that if specified is passed along to\n                the [`AttentionProcessor`] as defined in\n                [`self.processor`](https://github.com/huggingface/diffusers/\n                blob/main/src/diffusers/models/attention_processor.py).\n\n        Examples:\n\n        ```py\n        >>> import PIL\n        >>> import requests\n        >>> import torch\n        >>> from io import BytesIO\n\n        >>> from diffusers import StableDiffusionInpaintPipeline\n\n\n        >>> def download_image(url):\n        ...     response = requests.get(url)\n        ...     return PIL.Image.open(BytesIO(response.content)).convert(\"RGB\")\n\n\n        >>> img_url = \"https://raw.githubusercontent.com/CompVis/\n                latent-diffusion/main/data/inpainting_examples/\n                overture-creations-5sI6fQgYIuo.png\"\n        >>> mask_url = \"https://raw.githubusercontent.com/CompVis/\n                latent-diffusion/main/data/inpainting_examples/\n                overture-creations-5sI6fQgYIuo_mask.png\"\n\n        >>> init_image = download_image(img_url).resize((512, 512))\n        >>> mask_image = download_image(mask_url).resize((512, 512))\n\n        >>> pipe = StableDiffusionInpaintPipeline.from_pretrained(\n        ...     \"runwayml/stable-diffusion-inpainting\",\n                torch_dtype=torch.float16\n        ... )\n        >>> pipe = pipe.to(\"cuda\")\n\n        >>> prompt = \"Face of a yellow cat, high resolution,\n                sitting on a park bench\"\n        >>> image = pipe(prompt=prompt, image=init_image,\n                mask_image=mask_image).images[0]\n        ```\n\n        Returns:\n            [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`]\n                or `tuple`:\n                If `return_dict` is `True`, [`~pipelines.stable_diffusion.\n                StableDiffusionPipelineOutput`] is returned,\n                otherwise a `tuple` is returned where the first element is a\n                list with the generated images and the\n                second element is a list of `bool`s indicating whether the\n                corresponding generated image contains\n                \"not-safe-for-work\" (nsfw) content.\n        \"\"\"\n        # 0. Default height and width to unet\n        height = height or self.unet.config.sample_size * self.vae_scale_factor\n        width = width or self.unet.config.sample_size * self.vae_scale_factor\n        prompt = promptA\n        negative_prompt = negative_promptA\n        # 1. Check inputs\n        self.check_inputs(\n            prompt,\n            height,\n            width,\n            strength,\n            callback_steps,\n            negative_prompt,\n            prompt_embeds,\n            negative_prompt_embeds,\n        )\n\n        # 2. Define call parameters\n        if prompt is not None and isinstance(prompt, str):\n            batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        device = self._execution_device\n        # here `guidance_scale` is defined analog to the guidance\n        # weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        text_encoder_lora_scale = (\n            cross_attention_kwargs.get('scale', None)\n            if cross_attention_kwargs is not None else None)\n        prompt_embeds = self._encode_prompt(\n            promptA,\n            promptB,\n            tradoff,\n            device,\n            num_images_per_prompt,\n            do_classifier_free_guidance,\n            negative_promptA,\n            negative_promptB,\n            tradoff_nag,\n            prompt_embeds=prompt_embeds,\n            negative_prompt_embeds=negative_prompt_embeds,\n            lora_scale=text_encoder_lora_scale,\n        )\n\n        # 4. set timesteps\n        self.scheduler.set_timesteps(num_inference_steps, device=device)\n        timesteps, num_inference_steps = self.get_timesteps(\n            num_inference_steps=num_inference_steps,\n            strength=strength,\n            device=device)\n        # check that number of inference steps is not < 1 -\n        # as this doesn't make sense\n        if num_inference_steps < 1:\n            raise ValueError(\n                'After adjusting the num_inference_steps by strength '\n                f'parameter: {strength}, the number of pipeline'\n                f'steps is {num_inference_steps} which is < 1 and '\n                f'not appropriate for this pipeline.')\n        # at which timestep to set the initial noise\n        # (n.b. 50% if strength is 0.5)\n        latent_timestep = timesteps[:1].repeat(batch_size *\n                                               num_images_per_prompt)\n        # create a boolean to check if the strength\n        # is set to 1. if so then initialise the latents with pure noise\n        is_strength_max = strength == 1.0\n\n        # 5. Preprocess mask and image\n        mask, masked_image, init_image = prepare_mask_and_masked_image(\n            image, mask_image, height, width, return_image=True)\n        mask_condition = mask.clone()\n\n        # 6. Prepare latent variables\n        num_channels_latents = self.vae.config.latent_channels\n        num_channels_unet = self.unet.config.in_channels\n        return_image_latents = num_channels_unet == 4\n\n        latents_outputs = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n            image=init_image,\n            timestep=latent_timestep,\n            is_strength_max=is_strength_max,\n            return_noise=True,\n            return_image_latents=return_image_latents,\n        )\n\n        if return_image_latents:\n            latents, noise, image_latents = latents_outputs\n        else:\n            latents, noise = latents_outputs\n\n        # 7. Prepare mask latent variables\n        mask, masked_image_latents = self.prepare_mask_latents(\n            mask,\n            masked_image,\n            batch_size * num_images_per_prompt,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            do_classifier_free_guidance,\n        )\n\n        # 8. Check that sizes of mask, masked image and latents match\n        if num_channels_unet == 9:\n            # default case for runwayml/stable-diffusion-inpainting\n            num_channels_mask = mask.shape[1]\n            num_channels_masked_image = masked_image_latents.shape[1]\n            if (num_channels_latents + num_channels_mask +\n                    num_channels_masked_image) != self.unet.config.in_channels:\n                raise ValueError(\n                    'Incorrect configuration settings! The config '\n                    f'of `pipeline.unet`: {self.unet.config} expects'\n                    f' {self.unet.config.in_channels} but received '\n                    f'`num_channels_latents`: {num_channels_latents} +'\n                    f' `num_channels_mask`: {num_channels_mask} + '\n                    f'`num_channels_masked_image`: {num_channels_masked_image}'\n                    f' = {num_channels_latents+num_channels_masked_image+num_channels_mask}. Please verify the config of'  # noqa\n                    ' `pipeline.unet` or your `mask_image` or `image` input.')\n        elif num_channels_unet != 4:\n            raise ValueError(\n                f'The unet {self.unet.__class__} should have either 4 '\n                f'or 9 input channels, not {self.unet.config.in_channels}.')\n\n        # 9. Prepare extra step kwargs. TODO: Logic should ideally\n        #  just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 10. Denoising loop\n        num_warmup_steps = len(\n            timesteps) - num_inference_steps * self.scheduler.order\n        with self.progress_bar(total=num_inference_steps) as progress_bar:\n            for i, t in enumerate(timesteps):\n                # expand the latents if we are doing classifier free guidance\n                latent_model_input = torch.cat(\n                    [latents] * 2) if do_classifier_free_guidance else latents\n\n                # concat latents, mask, masked_image_latents\n                # in the channel dimension\n                latent_model_input = self.scheduler.scale_model_input(\n                    latent_model_input, t)\n\n                if num_channels_unet == 9:\n                    latent_model_input = torch.cat(\n                        [latent_model_input, mask, masked_image_latents],\n                        dim=1)\n\n                # predict the noise residual\n                if task_class is not None:\n                    noise_pred = self.unet(\n                        sample=latent_model_input,\n                        timestep=t,\n                        encoder_hidden_states=prompt_embeds,\n                        cross_attention_kwargs=cross_attention_kwargs,\n                        return_dict=False,\n                        task_class=task_class,\n                    )[0]\n                else:\n                    noise_pred = self.unet(\n                        latent_model_input,\n                        t,\n                        encoder_hidden_states=prompt_embeds,\n                        cross_attention_kwargs=cross_attention_kwargs,\n                        return_dict=False,\n                    )[0]\n\n                # perform guidance\n                if do_classifier_free_guidance:\n                    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                    noise_pred = noise_pred_uncond + guidance_scale * (\n                        noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.scheduler.step(\n                    noise_pred,\n                    t,\n                    latents,\n                    **extra_step_kwargs,\n                    return_dict=False)[0]\n\n                if num_channels_unet == 4:\n                    init_latents_proper = image_latents[:1]\n                    init_mask = mask[:1]\n\n                    if i < len(timesteps) - 1:\n                        noise_timestep = timesteps[i + 1]\n                        init_latents_proper = self.scheduler.add_noise(\n                            init_latents_proper, noise,\n                            torch.tensor([noise_timestep]))\n\n                    latents = (1 - init_mask\n                               ) * init_latents_proper + init_mask * latents\n\n                # call the callback, if provided\n                if i == len(timesteps) - 1 or (\n                    (i + 1) > num_warmup_steps and\n                    (i + 1) % self.scheduler.order == 0):  # noqa\n                    progress_bar.update()\n                    if callback is not None and i % callback_steps == 0:\n                        callback(i, t, latents)\n\n        if not output_type == 'latent':\n            condition_kwargs = {}\n            if isinstance(self.vae, AsymmetricAutoencoderKL):\n                init_image = init_image.to(\n                    device=device, dtype=masked_image_latents.dtype)\n                init_image_condition = init_image.clone()\n                init_image = self._encode_vae_image(\n                    init_image, generator=generator)\n                mask_condition = mask_condition.to(\n                    device=device, dtype=masked_image_latents.dtype)\n                condition_kwargs = {\n                    'image': init_image_condition,\n                    'mask': mask_condition\n                }\n            image = self.vae.decode(\n                latents / self.vae.config.scaling_factor,\n                return_dict=False,\n                **condition_kwargs)[0]\n            image, has_nsfw_concept = self.run_safety_checker(\n                image, device, prompt_embeds.dtype)\n        else:\n            image = latents\n            has_nsfw_concept = None\n\n        if has_nsfw_concept is None:\n            do_denormalize = [True] * image.shape[0]\n        else:\n            do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]\n\n        image = self.image_processor.postprocess(\n            image, output_type=output_type, do_denormalize=do_denormalize)\n\n        # Offload last model to CPU\n        if hasattr(\n                self,\n                'final_offload_hook') and self.final_offload_hook is not None:\n            self.final_offload_hook.offload()\n\n        if not return_dict:\n            return (image, has_nsfw_concept)\n\n        return StableDiffusionPipelineOutput(\n            images=image, nsfw_content_detected=has_nsfw_concept)\n\n    @torch.no_grad()\n    @replace_example_docstring(EXAMPLE_DOC_STRING)\n    def __call__(\n        self,\n        promptA: Union[str, List[str]] = None,\n        promptB: Union[str, List[str]] = None,\n        image: Union[torch.Tensor, PIL.Image.Image] = None,\n        mask_image: Union[torch.Tensor, PIL.Image.Image] = None,\n        control_image: Union[torch.FloatTensor, PIL.Image.Image, np.ndarray,\n                             List[torch.FloatTensor], List[PIL.Image.Image],\n                             List[np.ndarray], ] = None,\n        height: Optional[int] = None,\n        width: Optional[int] = None,\n        strength: float = 1.0,\n        tradoff: float = 1.0,\n        tradoff_nag: float = 1.0,\n        num_inference_steps: int = 50,\n        guidance_scale: float = 7.5,\n        negative_promptA: Optional[Union[str, List[str]]] = None,\n        negative_promptB: Optional[Union[str, List[str]]] = None,\n        num_images_per_prompt: Optional[int] = 1,\n        eta: float = 0.0,\n        generator: Optional[Union[torch.Generator,\n                                  List[torch.Generator]]] = None,\n        latents: Optional[torch.FloatTensor] = None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        output_type: Optional[str] = 'pil',\n        return_dict: bool = True,\n        callback: Optional[Callable[[int, int, torch.FloatTensor],\n                                    None]] = None,\n        callback_steps: int = 1,\n        cross_attention_kwargs: Optional[Dict[str, Any]] = None,\n        controlnet_conditioning_scale: Union[float, List[float]] = 0.5,\n        guess_mode: bool = False,\n        control_guidance_start: Union[float, List[float]] = 0.0,\n        control_guidance_end: Union[float, List[float]] = 1.0,\n    ):\n        r\"\"\"\n        Function invoked when calling the pipeline for generation.\n\n        Args:\n            prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide the image generation. If\n                not defined, one has to pass `prompt_embeds`.\n                instead.\n            image (`torch.FloatTensor`, `PIL.Image.Image`,\n                `List[torch.FloatTensor]`, `List[PIL.Image.Image]`,\n                    `List[List[torch.FloatTensor]]`, or\n                    `List[List[PIL.Image.Image]]`):\n                The ControlNet input condition. ControlNet uses this input\n                condition to generate guidance to Unet. If\n                the type is specified as `Torch.FloatTensor`, it is passed to\n                ControlNet as is. `PIL.Image.Image` can\n                also be accepted as an image. The dimensions of the output\n                image defaults to `image`'s dimensions. If\n                height and/or width are passed, `image` is resized according\n                to them. If multiple ControlNets are\n                specified in init, images must be passed as a list such that\n                each element of the list can be correctly\n                batched for input to a single controlnet.\n            height (`int`, *optional*, defaults to self.unet.config.\n                sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image.\n            width (`int`, *optional*, defaults to self.unet.config.\n                sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image.\n            strength (`float`, *optional*, defaults to 1.):\n                Conceptually, indicates how much to transform the masked\n                portion of the reference `image`. Must be\n                between 0 and 1. `image` will be used as a starting point,\n                adding more noise to it the larger the\n                `strength`. The number of denoising steps depends on the\n                amount of noise initially added. When\n                `strength` is 1, added noise will be maximum and the\n                denoising process will run for the full number of\n                iterations specified in `num_inference_steps`. A value of 1,\n                therefore, essentially ignores the masked\n                portion of the reference `image`.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps. More denoising steps usually\n                lead to a higher quality image at the\n                expense of slower inference.\n            guidance_scale (`float`, *optional*, defaults to 7.5):\n                Guidance scale as defined in [Classifier-Free Diffusion\n                Guidance](https://arxiv.org/abs/2207.12598).\n                `guidance_scale` is defined as `w` of equation 2. of [Imagen\n                Paper](https://arxiv.org/pdf/2205.11487.pdf). Guidance scale\n                is enabled by setting `guidance_scale >\n                1`. Higher guidance scale encourages to generate images that\n                are closely linked to the text `prompt`,\n                usually at the expense of lower image quality.\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation. If\n                not defined, one has to pass\n                `negative_prompt_embeds` instead. Ignored when not using\n                guidance (i.e., ignored if `guidance_scale` is\n                less than `1`).\n            num_images_per_prompt (`int`, *optional*, defaults to 1):\n                The number of images to generate per prompt.\n            eta (`float`, *optional*, defaults to 0.0):\n                Corresponds to parameter eta (η) in the DDIM paper:\n                https://arxiv.org/abs/2010.02502. Only applies to\n                [`schedulers.DDIMScheduler`], will be ignored for others.\n            generator (`torch.Generator` or\n                `List[torch.Generator]`, *optional*):\n                One or a list of [torch generator(s)]\n                (https://pytorch.org/docs/stable/generated/torch.Generator.html)\n                to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents, sampled from a Gaussian\n                distribution, to be used as inputs for image\n                generation. Can be used to tweak the same generation with\n                different prompts. If not provided, a latents\n                tensor will ge generated by sampling using the supplied\n                random `generator`.\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily\n                tweak text inputs, *e.g.* prompt weighting. If not\n                provided, text embeddings will be generated from\n                `prompt` input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to\n                easily tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will\n                be generated from `negative_prompt` input\n                argument.\n            output_type (`str`, *optional*, defaults to `\"pil\"`):\n                The output format of the generate image. Choose between\n                [PIL](https://pillow.readthedocs.io/en/stable/):\n                `PIL.Image.Image` or `np.array`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a [`~pipelines.stable_diffusion.\n                StableDiffusionPipelineOutput`] instead of a\n                plain tuple.\n            callback (`Callable`, *optional*):\n                A function that will be called every `callback_steps` steps\n                during inference. The function will be\n                called with the following arguments: `callback(step: int,\n                timestep: int, latents: torch.FloatTensor)`.\n            callback_steps (`int`, *optional*, defaults to 1):\n                The frequency at which the `callback` function will be called.\n                If not specified, the callback will be\n                called at every step.\n            cross_attention_kwargs (`dict`, *optional*):\n                A kwargs dictionary that if specified is passed along to the\n                `AttentionProcessor` as defined under\n                `self.processor` in\n                [diffusers.models.attention_processor]\n                (https://github.com/huggingface/diffusers/blob/main/src\n                /diffusers/models/attention_processor.py).\n            controlnet_conditioning_scale (`float` or `List[float]`,\n                *optional*, defaults to 0.5):\n                The outputs of the controlnet are multiplied by\n                `controlnet_conditioning_scale` before they are added\n                to the residual in the original unet. If multiple ControlNets\n                are specified in init, you can set the\n                corresponding scale as a list. Note that by default, we use a\n                smaller conditioning scale for inpainting\n                than for [`~StableDiffusionControlNetPipeline.__call__`].\n            guess_mode (`bool`, *optional*, defaults to `False`):\n                In this mode, the ControlNet encoder will try best to\n                recognize the content of the input image even if\n                you remove all prompts. The `guidance_scale` between 3.0\n                and 5.0 is recommended.\n            control_guidance_start (`float` or `List[float]`, *optional*,\n                defaults to 0.0):\n                The percentage of total steps at which the controlnet\n                starts applying.\n            control_guidance_end (`float` or `List[float]`, *optional*,\n                defaults to 1.0):\n                The percentage of total steps at which the controlnet\n                stops applying.\n\n        Examples:\n\n        Returns:\n            [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`]\n                or `tuple`:\n            [`~pipelines.stable_diffusion.StableDiffusionPipelineOutput`]\n                if `return_dict` is True, otherwise a `tuple.\n            When returning a tuple, the first element is a list with the\n            generated images, and the second element is a\n            list of `bool`s denoting whether the corresponding generated\n            image likely represents \"not-safe-for-work\"\n            (nsfw) content, according to the `safety_checker`.\n        \"\"\"\n        controlnet = self.controlnet._orig_mod if is_compiled_module(\n            self.controlnet) else self.controlnet\n\n        # 0. Default height and width to unet\n        height, width = self._default_height_width(height, width, image)\n\n        prompt = promptA\n        negative_prompt = negative_promptA\n\n        # align format for control guidance\n        if not isinstance(control_guidance_start, list) and isinstance(\n                control_guidance_end, list):\n            control_guidance_start = len(control_guidance_end) * [\n                control_guidance_start\n            ]\n        elif not isinstance(control_guidance_end, list) and isinstance(\n                control_guidance_start, list):\n            control_guidance_end = len(control_guidance_start) * [\n                control_guidance_end\n            ]\n        elif not isinstance(control_guidance_start, list) and not isinstance(\n                control_guidance_end, list):\n            mult = len(controlnet.nets) if isinstance(\n                controlnet, MultiControlNetModel) else 1\n            control_guidance_start, control_guidance_end = mult * [\n                control_guidance_start\n            ], mult * [control_guidance_end]\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(\n            prompt,\n            control_image,\n            height,\n            width,\n            callback_steps,\n            negative_prompt,\n            prompt_embeds,\n            negative_prompt_embeds,\n            controlnet_conditioning_scale,\n            control_guidance_start,\n            control_guidance_end,\n        )\n\n        # 2. Define call parameters\n        if prompt is not None and isinstance(prompt, str):\n            batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        device = self._execution_device\n        # here `guidance_scale` is defined analog to the guidance\n        # weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf .\n        # `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        if isinstance(controlnet, MultiControlNetModel) and isinstance(\n                controlnet_conditioning_scale, float):\n            controlnet_conditioning_scale = [controlnet_conditioning_scale\n                                             ] * len(controlnet.nets)\n\n        global_pool_conditions = (\n            controlnet.config.global_pool_conditions if isinstance(\n                controlnet, ControlNetModel) else\n            controlnet.nets[0].config.global_pool_conditions)\n        guess_mode = guess_mode or global_pool_conditions\n\n        # 3. Encode input prompt\n        text_encoder_lora_scale = (\n            cross_attention_kwargs.get('scale', None)\n            if cross_attention_kwargs is not None else None)\n        prompt_embeds = self._encode_prompt(\n            promptA,\n            promptB,\n            tradoff,\n            device,\n            num_images_per_prompt,\n            do_classifier_free_guidance,\n            negative_promptA,\n            negative_promptB,\n            tradoff_nag,\n            prompt_embeds=prompt_embeds,\n            negative_prompt_embeds=negative_prompt_embeds,\n            lora_scale=text_encoder_lora_scale,\n        )\n\n        # 4. Prepare image\n        if isinstance(controlnet, ControlNetModel):\n            control_image = self.prepare_control_image(\n                image=control_image,\n                width=width,\n                height=height,\n                batch_size=batch_size * num_images_per_prompt,\n                num_images_per_prompt=num_images_per_prompt,\n                device=device,\n                dtype=controlnet.dtype,\n                do_classifier_free_guidance=do_classifier_free_guidance,\n                guess_mode=guess_mode,\n            )\n        elif isinstance(controlnet, MultiControlNetModel):\n            control_images = []\n\n            for control_image_ in control_image:\n                control_image_ = self.prepare_control_image(\n                    image=control_image_,\n                    width=width,\n                    height=height,\n                    batch_size=batch_size * num_images_per_prompt,\n                    num_images_per_prompt=num_images_per_prompt,\n                    device=device,\n                    dtype=controlnet.dtype,\n                    do_classifier_free_guidance=do_classifier_free_guidance,\n                    guess_mode=guess_mode,\n                )\n\n                control_images.append(control_image_)\n\n            control_image = control_images\n        else:\n            assert False\n\n        # 4. Preprocess mask and image - resizes image and\n        # mask w.r.t height and width\n        mask, masked_image, init_image = prepare_mask_and_masked_image(\n            image, mask_image, height, width, return_image=True)\n\n        # 5. Prepare timesteps\n        self.scheduler.set_timesteps(num_inference_steps, device=device)\n        timesteps, num_inference_steps = self.get_timesteps(\n            num_inference_steps=num_inference_steps,\n            strength=strength,\n            device=device)\n        # at which timestep to set the initial noise (n.b.\n        # 50% if strength is 0.5)\n        latent_timestep = timesteps[:1].repeat(batch_size *\n                                               num_images_per_prompt)\n        # create a boolean to check if the strength is set to 1. if so\n        # then initialise the latents with pure noise\n        is_strength_max = strength == 1.0\n\n        # 6. Prepare latent variables\n        num_channels_latents = self.vae.config.latent_channels\n        num_channels_unet = self.unet.config.in_channels\n        return_image_latents = num_channels_unet == 4\n        latents_outputs = self.prepare_latents(\n            batch_size * num_images_per_prompt,\n            num_channels_latents,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n            image=init_image,\n            timestep=latent_timestep,\n            is_strength_max=is_strength_max,\n            return_noise=True,\n            return_image_latents=return_image_latents,\n        )\n\n        if return_image_latents:\n            latents, noise, image_latents = latents_outputs\n        else:\n            latents, noise = latents_outputs\n\n        # 7. Prepare mask latent variables\n        mask, masked_image_latents = self.prepare_mask_latents(\n            mask,\n            masked_image,\n            batch_size * num_images_per_prompt,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            do_classifier_free_guidance,\n        )\n\n        # 7. Prepare extra step kwargs. TODO: Logic should ideally\n        # just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7.1 Create tensor stating which controlnets to keep\n        controlnet_keep = []\n        for i in range(len(timesteps)):\n            keeps = [\n                1.0 - float(i / len(timesteps) < s or\n                            (i + 1) / len(timesteps) > e)\n                for s, e in zip(control_guidance_start, control_guidance_end)\n            ]\n            controlnet_keep.append(\n                keeps[0] if isinstance(controlnet, ControlNetModel) else keeps)\n\n        # 8. Denoising loop\n        num_warmup_steps = len(\n            timesteps) - num_inference_steps * self.scheduler.order\n        with self.progress_bar(total=num_inference_steps) as progress_bar:\n            for i, t in enumerate(timesteps):\n                # expand the latents if we are doing classifier free guidance\n                latent_model_input = torch.cat(\n                    [latents] * 2) if do_classifier_free_guidance else latents\n                latent_model_input = self.scheduler.scale_model_input(\n                    latent_model_input, t)\n\n                # controlnet(s) inference\n                if guess_mode and do_classifier_free_guidance:\n                    # Infer ControlNet only for the conditional batch.\n                    control_model_input = latents\n                    control_model_input = self.scheduler.scale_model_input(\n                        control_model_input, t)\n                    controlnet_prompt_embeds = prompt_embeds.chunk(2)[1]\n                else:\n                    control_model_input = latent_model_input\n                    controlnet_prompt_embeds = prompt_embeds\n\n                if isinstance(controlnet_keep[i], list):\n                    cond_scale = [\n                        c * s for c, s in zip(controlnet_conditioning_scale,\n                                              controlnet_keep[i])\n                    ]\n                else:\n                    controlnet_cond_scale = controlnet_conditioning_scale\n                    if isinstance(controlnet_cond_scale, list):\n                        controlnet_cond_scale = controlnet_cond_scale[0]\n                    cond_scale = controlnet_cond_scale * controlnet_keep[i]\n\n                down_block_res_samples, mid_block_res_sample = self.controlnet(\n                    control_model_input,\n                    t,\n                    encoder_hidden_states=controlnet_prompt_embeds,\n                    controlnet_cond=control_image,\n                    conditioning_scale=cond_scale,\n                    guess_mode=guess_mode,\n                    return_dict=False,\n                )\n\n                if guess_mode and do_classifier_free_guidance:\n                    # Inferred ControlNet only for the conditional batch.\n                    # To apply the output of ControlNet to both the\n                    # unconditional and conditional batches,\n                    # add 0 to the unconditional batch to keep it unchanged.\n                    down_block_res_samples = [\n                        torch.cat([torch.zeros_like(d), d])\n                        for d in down_block_res_samples\n                    ]\n                    mid_block_res_sample = torch.cat([\n                        torch.zeros_like(mid_block_res_sample),\n                        mid_block_res_sample\n                    ])\n\n                # predict the noise residual\n                if num_channels_unet == 9:\n                    latent_model_input = torch.cat(\n                        [latent_model_input, mask, masked_image_latents],\n                        dim=1)\n\n                noise_pred = self.unet(\n                    latent_model_input,\n                    t,\n                    encoder_hidden_states=prompt_embeds,\n                    cross_attention_kwargs=cross_attention_kwargs,\n                    down_block_additional_residuals=down_block_res_samples,\n                    mid_block_additional_residual=mid_block_res_sample,\n                    return_dict=False,\n                )[0]\n\n                # perform guidance\n                if do_classifier_free_guidance:\n                    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                    noise_pred = noise_pred_uncond + guidance_scale * (\n                        noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                latents = self.scheduler.step(\n                    noise_pred,\n                    t,\n                    latents,\n                    **extra_step_kwargs,\n                    return_dict=False)[0]\n\n                if num_channels_unet == 4:\n                    init_latents_proper = image_latents[:1]\n                    init_mask = mask[:1]\n\n                    if i < len(timesteps) - 1:\n                        noise_timestep = timesteps[i + 1]\n                        init_latents_proper = self.scheduler.add_noise(\n                            init_latents_proper, noise,\n                            torch.tensor([noise_timestep]))\n\n                    latents = (1 - init_mask\n                               ) * init_latents_proper + init_mask * latents\n\n                # call the callback, if provided\n                if i == len(timesteps) - 1 or (\n                    (i + 1) > num_warmup_steps and\n                    (i + 1) % self.scheduler.order == 0):  # noqa\n                    progress_bar.update()\n                    if callback is not None and i % callback_steps == 0:\n                        callback(i, t, latents)\n\n        # If we do sequential model offloading, let's\n        # offload unet and controlnet\n        # manually for max memory savings\n        if hasattr(\n                self,\n                'final_offload_hook') and self.final_offload_hook is not None:\n            self.unet.to('cpu')\n            self.controlnet.to('cpu')\n            torch.cuda.empty_cache()\n\n        if not output_type == 'latent':\n            image = self.vae.decode(\n                latents / self.vae.config.scaling_factor, return_dict=False)[0]\n            image, has_nsfw_concept = self.run_safety_checker(\n                image, device, prompt_embeds.dtype)\n        else:\n            image = latents\n            has_nsfw_concept = None\n\n        if has_nsfw_concept is None:\n            do_denormalize = [True] * image.shape[0]\n        else:\n            do_denormalize = [not has_nsfw for has_nsfw in has_nsfw_concept]\n\n        image = self.image_processor.postprocess(\n            image, output_type=output_type, do_denormalize=do_denormalize)\n\n        # Offload last model to CPU\n        if hasattr(\n                self,\n                'final_offload_hook') and self.final_offload_hook is not None:\n            self.final_offload_hook.offload()\n\n        if not return_dict:\n            return (image, has_nsfw_concept)\n\n        return StableDiffusionPipelineOutput(\n            images=image, nsfw_content_detected=has_nsfw_concept)\n"
  },
  {
    "path": "projects/powerpaint/requirements.txt",
    "content": "controlnet-aux==0.0.3\ndiffusers==0.23.1\ngradio==3.41.0\nmmengine\nopencv-python\ntorch\ntorchvision\ntransformers\n"
  },
  {
    "path": "projects/powerpaint/utils/utils.py",
    "content": "import copy\nimport importlib\nimport os\nimport random\nfrom logging import WARNING\nfrom typing import Any, List, Optional, Union\n\nimport torch\nimport torch.nn as nn\nfrom mmengine import print_log\n\n\ndef try_import(name: str):\n    \"\"\"Try to import a module.\n\n    Args:\n        name (str): Specifies what module to import in absolute or relative\n            terms (e.g. either pkg.mod or ..mod).\n    Returns:\n        ModuleType or None: If importing successfully, returns the imported\n        module, otherwise returns None.\n    \"\"\"\n    try:\n        return importlib.import_module(name)\n    except ImportError:\n        return None\n\n\nclass TokenizerWrapper:\n    \"\"\"Tokenizer wrapper for CLIPTokenizer. Only support CLIPTokenizer\n    currently. This wrapper is modified from https://github.com/huggingface/dif\n    fusers/blob/e51f19aee82c8dd874b715a09dbc521d88835d68/src/diffusers/loaders.\n    py#L358  # noqa.\n\n    Args:\n        from_pretrained (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Defaults to None.\n        from_config (Union[str, os.PathLike], optional): The *model id*\n            of a pretrained model or a path to a *directory* containing\n            model weights and config. Defaults to None.\n\n        *args, **kwargs: If `from_pretrained` is passed, *args and **kwargs\n            will be passed to `from_pretrained` function. Otherwise, *args\n            and **kwargs will be used to initialize the model by\n            `self._module_cls(*args, **kwargs)`.\n    \"\"\"\n\n    def __init__(self,\n                 from_pretrained: Optional[Union[str, os.PathLike]] = None,\n                 from_config: Optional[Union[str, os.PathLike]] = None,\n                 *args,\n                 **kwargs):\n        transformers = try_import('transformers')\n        module_cls = transformers.CLIPTokenizer\n\n        assert not (from_pretrained and from_config), (\n            '\\'from_pretrained\\' and \\'from_config\\' should not be passed '\n            'at the same time.')\n\n        if from_config:\n            print_log(\n                'Tokenizers from Huggingface transformers do not support '\n                '\\'from_config\\'. Will call \\'from_pretrained\\' instead '\n                'with the same argument.', 'current', WARNING)\n            from_pretrained = from_config\n\n        if from_pretrained:\n            self.wrapped = module_cls.from_pretrained(from_pretrained, *args,\n                                                      **kwargs)\n        else:\n            self.wrapper = module_cls(*args, **kwargs)\n\n        self._from_pretrained = from_pretrained\n        self.token_map = {}\n\n    def __getattr__(self, name: str) -> Any:\n        if name == 'wrapped':\n            return super().__getattr__('wrapped')\n\n        try:\n            return getattr(self.wrapped, name)\n        except AttributeError:\n            try:\n                return super().__getattr__(name)\n            except AttributeError:\n                raise AttributeError(\n                    '\\'name\\' cannot be found in both '\n                    f'\\'{self.__class__.__name__}\\' and '\n                    f'\\'{self.__class__.__name__}.tokenizer\\'.')\n\n    def try_adding_tokens(self, tokens: Union[str, List[str]], *args,\n                          **kwargs):\n        \"\"\"Attempt to add tokens to the tokenizer.\n\n        Args:\n            tokens (Union[str, List[str]]): The tokens to be added.\n        \"\"\"\n        num_added_tokens = self.wrapped.add_tokens(tokens, *args, **kwargs)\n        assert num_added_tokens != 0, (\n            f'The tokenizer already contains the token {tokens}. Please pass '\n            'a different `placeholder_token` that is not already in the '\n            'tokenizer.')\n\n    def get_token_info(self, token: str) -> dict:\n        \"\"\"Get the information of a token, including its start and end index in\n        the current tokenizer.\n\n        Args:\n            token (str): The token to be queried.\n\n        Returns:\n            dict: The information of the token, including its start and end\n                index in current tokenizer.\n        \"\"\"\n        token_ids = self.__call__(token).input_ids\n        start, end = token_ids[1], token_ids[-2] + 1\n        return {'name': token, 'start': start, 'end': end}\n\n    def add_placeholder_token(self,\n                              placeholder_token: str,\n                              *args,\n                              num_vec_per_token: int = 1,\n                              **kwargs):\n        \"\"\"Add placeholder tokens to the tokenizer.\n\n        Args:\n            placeholder_token (str): The placeholder token to be added.\n            num_vec_per_token (int, optional): The number of vectors of\n                the added placeholder token.\n            *args, **kwargs: The arguments for `self.wrapped.add_tokens`.\n        \"\"\"\n        output = []\n        if num_vec_per_token == 1:\n            self.try_adding_tokens(placeholder_token, *args, **kwargs)\n            output.append(placeholder_token)\n        else:\n            output = []\n            for i in range(num_vec_per_token):\n                ith_token = placeholder_token + f'_{i}'\n                self.try_adding_tokens(ith_token, *args, **kwargs)\n                output.append(ith_token)\n\n        for token in self.token_map:\n            if token in placeholder_token:\n                raise ValueError(\n                    f'The tokenizer already has placeholder token {token} '\n                    f'that can get confused with {placeholder_token} '\n                    'keep placeholder tokens independent')\n        self.token_map[placeholder_token] = output\n\n    def replace_placeholder_tokens_in_text(self,\n                                           text: Union[str, List[str]],\n                                           vector_shuffle: bool = False,\n                                           prop_tokens_to_load: float = 1.0\n                                           ) -> Union[str, List[str]]:\n        \"\"\"Replace the keywords in text with placeholder tokens. This function\n        will be called in `self.__call__` and `self.encode`.\n\n        Args:\n            text (Union[str, List[str]]): The text to be processed.\n            vector_shuffle (bool, optional): Whether to shuffle the vectors.\n                Defaults to False.\n            prop_tokens_to_load (float, optional): The proportion of tokens to\n                be loaded. If 1.0, all tokens will be loaded. Defaults to 1.0.\n\n        Returns:\n            Union[str, List[str]]: The processed text.\n        \"\"\"\n        if isinstance(text, list):\n            output = []\n            for i in range(len(text)):\n                output.append(\n                    self.replace_placeholder_tokens_in_text(\n                        text[i], vector_shuffle=vector_shuffle))\n            return output\n\n        for placeholder_token in self.token_map:\n            if placeholder_token in text:\n                tokens = self.token_map[placeholder_token]\n                tokens = tokens[:1 + int(len(tokens) * prop_tokens_to_load)]\n                if vector_shuffle:\n                    tokens = copy.copy(tokens)\n                    random.shuffle(tokens)\n                text = text.replace(placeholder_token, ' '.join(tokens))\n        return text\n\n    def replace_text_with_placeholder_tokens(self, text: Union[str, List[str]]\n                                             ) -> Union[str, List[str]]:\n        \"\"\"Replace the placeholder tokens in text with the original keywords.\n        This function will be called in `self.decode`.\n\n        Args:\n            text (Union[str, List[str]]): The text to be processed.\n\n        Returns:\n            Union[str, List[str]]: The processed text.\n        \"\"\"\n        if isinstance(text, list):\n            output = []\n            for i in range(len(text)):\n                output.append(\n                    self.replace_text_with_placeholder_tokens(text[i]))\n            return output\n\n        for placeholder_token, tokens in self.token_map.items():\n            merged_tokens = ' '.join(tokens)\n            if merged_tokens in text:\n                text = text.replace(merged_tokens, placeholder_token)\n        return text\n\n    def __call__(self,\n                 text: Union[str, List[str]],\n                 *args,\n                 vector_shuffle: bool = False,\n                 prop_tokens_to_load: float = 1.0,\n                 **kwargs):\n        \"\"\"The call function of the wrapper.\n\n        Args:\n            text (Union[str, List[str]]): The text to be tokenized.\n            vector_shuffle (bool, optional): Whether to shuffle the vectors.\n                Defaults to False.\n            prop_tokens_to_load (float, optional): The proportion of tokens to\n                be loaded. If 1.0, all tokens will be loaded. Defaults to 1.0\n            *args, **kwargs: The arguments for `self.wrapped.__call__`.\n        \"\"\"\n        replaced_text = self.replace_placeholder_tokens_in_text(\n            text,\n            vector_shuffle=vector_shuffle,\n            prop_tokens_to_load=prop_tokens_to_load)\n\n        return self.wrapped.__call__(replaced_text, *args, **kwargs)\n\n    def encode(self, text: Union[str, List[str]], *args, **kwargs):\n        \"\"\"Encode the passed text to token index.\n\n        Args:\n            text (Union[str, List[str]]): The text to be encode.\n            *args, **kwargs: The arguments for `self.wrapped.__call__`.\n        \"\"\"\n        replaced_text = self.replace_placeholder_tokens_in_text(text)\n        return self.wrapped(replaced_text, *args, **kwargs)\n\n    def decode(self,\n               token_ids,\n               return_raw: bool = False,\n               *args,\n               **kwargs) -> Union[str, List[str]]:\n        \"\"\"Decode the token index to text.\n\n        Args:\n            token_ids: The token index to be decoded.\n            return_raw: Whether keep the placeholder token in the text.\n                Defaults to False.\n            *args, **kwargs: The arguments for `self.wrapped.decode`.\n\n        Returns:\n            Union[str, List[str]]: The decoded text.\n        \"\"\"\n        text = self.wrapped.decode(token_ids, *args, **kwargs)\n        if return_raw:\n            return text\n        replaced_text = self.replace_text_with_placeholder_tokens(text)\n        return replaced_text\n\n    def __repr__(self):\n        \"\"\"The representation of the wrapper.\"\"\"\n        s = super().__repr__()\n        prefix = f'Wrapped Module Class: {self._module_cls}\\n'\n        prefix += f'Wrapped Module Name: {self._module_name}\\n'\n        if self._from_pretrained:\n            prefix += f'From Pretrained: {self._from_pretrained}\\n'\n        s = prefix + s\n        return s\n\n\nclass EmbeddingLayerWithFixes(nn.Module):\n    \"\"\"The revised embedding layer to support external embeddings. This design\n    of this class is inspired by https://github.com/AUTOMATIC1111/stable-\n    diffusion-webui/blob/22bcc7be428c94e9408f589966c2040187245d81/modules/sd_hi\n    jack.py#L224  # noqa.\n\n    Args:\n        wrapped (nn.Emebdding): The embedding layer to be wrapped.\n        external_embeddings (Union[dict, List[dict]], optional): The external\n            embeddings added to this layer. Defaults to None.\n    \"\"\"\n\n    def __init__(self,\n                 wrapped: nn.Embedding,\n                 external_embeddings: Optional[Union[dict,\n                                                     List[dict]]] = None):\n        super().__init__()\n        self.wrapped = wrapped\n        self.num_embeddings = wrapped.weight.shape[0]\n\n        self.external_embeddings = []\n        if external_embeddings:\n            self.add_embeddings(external_embeddings)\n\n        self.trainable_embeddings = nn.ParameterDict()\n\n    @property\n    def weight(self):\n        \"\"\"Get the weight of wrapped embedding layer.\"\"\"\n        return self.wrapped.weight\n\n    def check_duplicate_names(self, embeddings: List[dict]):\n        \"\"\"Check whether duplicate names exist in list of 'external\n        embeddings'.\n\n        Args:\n            embeddings (List[dict]): A list of embedding to be check.\n        \"\"\"\n        names = [emb['name'] for emb in embeddings]\n        assert len(names) == len(set(names)), (\n            'Found duplicated names in \\'external_embeddings\\'. Name list: '\n            f'\\'{names}\\'')\n\n    def check_ids_overlap(self, embeddings):\n        \"\"\"Check whether overlap exist in token ids of 'external_embeddings'.\n\n        Args:\n            embeddings (List[dict]): A list of embedding to be check.\n        \"\"\"\n        ids_range = [[emb['start'], emb['end'], emb['name']]\n                     for emb in embeddings]\n        ids_range.sort()  # sort by 'start'\n        # check if 'end' has overlapping\n        for idx in range(len(ids_range) - 1):\n            name1, name2 = ids_range[idx][-1], ids_range[idx + 1][-1]\n            assert ids_range[idx][1] <= ids_range[idx + 1][0], (\n                f'Found ids overlapping between embeddings \\'{name1}\\' '\n                f'and \\'{name2}\\'.')\n\n    def add_embeddings(self, embeddings: Optional[Union[dict, List[dict]]]):\n        \"\"\"Add external embeddings to this layer.\n\n        Use case:\n\n        >>> 1. Add token to tokenizer and get the token id.\n        >>> tokenizer = TokenizerWrapper('openai/clip-vit-base-patch32')\n        >>> # 'how much' in kiswahili\n        >>> tokenizer.add_placeholder_tokens('ngapi', num_vec_per_token=4)\n        >>>\n        >>> 2. Add external embeddings to the model.\n        >>> new_embedding = {\n        >>>     'name': 'ngapi',  # 'how much' in kiswahili\n        >>>     'embedding': torch.ones(1, 15) * 4,\n        >>>     'start': tokenizer.get_token_info('kwaheri')['start'],\n        >>>     'end': tokenizer.get_token_info('kwaheri')['end'],\n        >>>     'trainable': False  # if True, will registry as a parameter\n        >>> }\n        >>> embedding_layer = nn.Embedding(10, 15)\n        >>> embedding_layer_wrapper = EmbeddingLayerWithFixes(embedding_layer)\n        >>> embedding_layer_wrapper.add_embeddings(new_embedding)\n        >>>\n        >>> 3. Forward tokenizer and embedding layer!\n        >>> input_text = ['hello, ngapi!', 'hello my friend, ngapi?']\n        >>> input_ids = tokenizer(\n        >>>     input_text, padding='max_length', truncation=True,\n        >>>     return_tensors='pt')['input_ids']\n        >>> out_feat = embedding_layer_wrapper(input_ids)\n        >>>\n        >>> 4. Let's validate the result!\n        >>> assert (out_feat[0, 3: 7] == 2.3).all()\n        >>> assert (out_feat[2, 5: 9] == 2.3).all()\n\n        Args:\n            embeddings (Union[dict, list[dict]]): The external embeddings to\n                be added. Each dict must contain the following 4 fields: 'name'\n                (the name of this embedding), 'embedding' (the embedding\n                tensor), 'start' (the start token id of this embedding), 'end'\n                (the end token id of this embedding). For example:\n                `{name: NAME, start: START, end: END, embedding: torch.Tensor}`\n        \"\"\"\n        if isinstance(embeddings, dict):\n            embeddings = [embeddings]\n\n        self.external_embeddings += embeddings\n        self.check_duplicate_names(self.external_embeddings)\n        self.check_ids_overlap(self.external_embeddings)\n\n        # set for trainable\n        added_trainable_emb_info = []\n        for embedding in embeddings:\n            trainable = embedding.get('trainable', False)\n            if trainable:\n                name = embedding['name']\n                embedding['embedding'] = torch.nn.Parameter(\n                    embedding['embedding'])\n                self.trainable_embeddings[name] = embedding['embedding']\n                added_trainable_emb_info.append(name)\n\n        added_emb_info = [emb['name'] for emb in embeddings]\n        added_emb_info = ', '.join(added_emb_info)\n        print_log(f'Successfully add external embeddings: {added_emb_info}.',\n                  'current')\n\n        if added_trainable_emb_info:\n            added_trainable_emb_info = ', '.join(added_trainable_emb_info)\n            print_log(\n                'Successfully add trainable external embeddings: '\n                f'{added_trainable_emb_info}', 'current')\n\n    def replace_input_ids(self, input_ids: torch.Tensor) -> torch.Tensor:\n        \"\"\"Replace external input ids to 0.\n\n        Args:\n            input_ids (torch.Tensor): The input ids to be replaced.\n\n        Returns:\n            torch.Tensor: The replaced input ids.\n        \"\"\"\n        input_ids_fwd = input_ids.clone()\n        input_ids_fwd[input_ids_fwd >= self.num_embeddings] = 0\n        return input_ids_fwd\n\n    def replace_embeddings(self, input_ids: torch.Tensor,\n                           embedding: torch.Tensor,\n                           external_embedding: dict) -> torch.Tensor:\n        \"\"\"Replace external embedding to the embedding layer. Noted that, in\n        this function we use `torch.cat` to avoid inplace modification.\n\n        Args:\n            input_ids (torch.Tensor): The original token ids. Shape like\n                [LENGTH, ].\n            embedding (torch.Tensor): The embedding of token ids after\n                `replace_input_ids` function.\n            external_embedding (dict): The external embedding to be replaced.\n\n        Returns:\n            torch.Tensor: The replaced embedding.\n        \"\"\"\n        new_embedding = []\n\n        name = external_embedding['name']\n        start = external_embedding['start']\n        end = external_embedding['end']\n        target_ids_to_replace = [i for i in range(start, end)]\n        ext_emb = external_embedding['embedding']\n\n        # do not need to replace\n        if not (input_ids == start).any():\n            return embedding\n\n        # start replace\n        s_idx, e_idx = 0, 0\n        while e_idx < len(input_ids):\n            if input_ids[e_idx] == start:\n                if e_idx != 0:\n                    # add embedding do not need to replace\n                    new_embedding.append(embedding[s_idx:e_idx])\n\n                # check if the next embedding need to replace is valid\n                actually_ids_to_replace = [\n                    int(i) for i in input_ids[e_idx:e_idx + end - start]\n                ]\n                assert actually_ids_to_replace == target_ids_to_replace, (\n                    f'Invalid \\'input_ids\\' in position: {s_idx} to {e_idx}. '\n                    f'Expect \\'{target_ids_to_replace}\\' for embedding '\n                    f'\\'{name}\\' but found \\'{actually_ids_to_replace}\\'.')\n\n                new_embedding.append(ext_emb)\n\n                s_idx = e_idx + end - start\n                e_idx = s_idx + 1\n            else:\n                e_idx += 1\n\n        if e_idx == len(input_ids):\n            new_embedding.append(embedding[s_idx:e_idx])\n\n        return torch.cat(new_embedding, dim=0)\n\n    def forward(self,\n                input_ids: torch.Tensor,\n                external_embeddings: Optional[List[dict]] = None):\n        \"\"\"The forward function.\n\n        Args:\n            input_ids (torch.Tensor): The token ids shape like [bz, LENGTH] or\n                [LENGTH, ].\n            external_embeddings (Optional[List[dict]]): The external\n                embeddings. If not passed, only `self.external_embeddings`\n                will be used.  Defaults to None.\n\n        input_ids: shape like [bz, LENGTH] or [LENGTH].\n        \"\"\"\n        assert input_ids.ndim in [1, 2]\n        if input_ids.ndim == 1:\n            input_ids = input_ids.unsqueeze(0)\n\n        if external_embeddings is None and not self.external_embeddings:\n            return self.wrapped(input_ids)\n\n        input_ids_fwd = self.replace_input_ids(input_ids)\n        inputs_embeds = self.wrapped(input_ids_fwd)\n\n        vecs = []\n\n        if external_embeddings is None:\n            external_embeddings = []\n        elif isinstance(external_embeddings, dict):\n            external_embeddings = [external_embeddings]\n        embeddings = self.external_embeddings + external_embeddings\n\n        for input_id, embedding in zip(input_ids, inputs_embeds):\n            new_embedding = embedding\n            for external_embedding in embeddings:\n                new_embedding = self.replace_embeddings(\n                    input_id, new_embedding, external_embedding)\n            vecs.append(new_embedding)\n\n        return torch.stack(vecs)\n\n\ndef add_tokens(tokenizer,\n               text_encoder,\n               placeholder_tokens: list,\n               initialize_tokens: list = None,\n               num_vectors_per_token: int = 1):\n    \"\"\"Add token for training.\n\n    # TODO: support add tokens as dict, then we can load pretrained tokens.\n    \"\"\"\n    if initialize_tokens is not None:\n        assert len(initialize_tokens) == len(placeholder_tokens), (\n            'placeholder_token should be the same length as initialize_token')\n    for ii in range(len(placeholder_tokens)):\n\n        tokenizer.add_placeholder_token(\n            placeholder_tokens[ii], num_vec_per_token=num_vectors_per_token)\n\n    # text_encoder.set_embedding_layer()\n    embedding_layer = text_encoder.text_model.embeddings.token_embedding\n    text_encoder.text_model.embeddings.token_embedding = \\\n        EmbeddingLayerWithFixes(embedding_layer)\n    embedding_layer = text_encoder.text_model.embeddings.token_embedding\n\n    assert embedding_layer is not None, (\n        'Do not support get embedding layer for current text encoder. '\n        'Please check your configuration.')\n    initialize_embedding = []\n    if initialize_tokens is not None:\n        for ii in range(len(placeholder_tokens)):\n            init_id = tokenizer(initialize_tokens[ii]).input_ids[1]\n            temp_embedding = embedding_layer.weight[init_id]\n            initialize_embedding.append(temp_embedding[None, ...].repeat(\n                num_vectors_per_token, 1))\n    else:\n        for ii in range(len(placeholder_tokens)):\n            init_id = tokenizer('a').input_ids[1]\n            temp_embedding = embedding_layer.weight[init_id]\n            len_emb = temp_embedding.shape[0]\n            init_weight = (torch.rand(num_vectors_per_token, len_emb) -\n                           0.5) / 2.0\n            initialize_embedding.append(init_weight)\n\n    # initialize_embedding  = torch.cat(initialize_embedding,dim=0)\n\n    token_info_all = []\n    for ii in range(len(placeholder_tokens)):\n        token_info = tokenizer.get_token_info(placeholder_tokens[ii])\n        token_info['embedding'] = initialize_embedding[ii]\n        token_info['trainable'] = True\n        token_info_all.append(token_info)\n    embedding_layer.add_embeddings(token_info_all)\n"
  },
  {
    "path": "projects/prompt_to_prompt/README.md",
    "content": "# Inversions & Editing (DDIM Inversion & Null-Text Inversion & Prompt-to-Prompt Editing)\n\n```\nAuthor: @FerryHuang\n\nThis is an implementation of the papers:\n```\n\n> [PROMPT-TO-PROMPT IMAGE EDITING\n> WITH CROSS-ATTENTION CONTROL](https://prompt-to-prompt.github.io/ptp_files/Prompt-to-Prompt_preprint.pdf)\n\n> [Null-text Inversion for Editing Real Images using Guided Diffusion Models](https://arxiv.org/pdf/2211.09794.pdf)\n\n> **Task**: Text2Image, diffusion, inversion, editing\n\n<!-- [ALGORITHM] -->\n\n## Abstract\n\n<!-- [ABSTRACT] -->\n\nDiffusion's inversion basically means you put an image (with or without a prompt) into a method and it will return a latent code which can be later turned back to a image with high simmilarity as the original one. Of course we want this latent code for an editing purpose, that's also why we always implement inversion methods together with the editing methods.\n\nThis project contains **Two inversion methods** and **One editing method**.\n\n## From right to left: origin image, DDIM inversion, Null-text inversion\n\n<center class=\"half\">\n    <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/34d8a467-5378-41fb-83c6-b23c9dee8f0a\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/3d3814b4-7fb5-4232-a56f-fd7fef0ba28e\" width=\"200\"/><img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/43008ed4-a5a3-4f81-ba9f-95d9e79e6a08\" width=\"200\"/>\n</center>\n\n## Prompt-to-prompt Editing\n\n<div align=\"center\">\n  <b>cat -> dog</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f5d3fc0c-aa7b-4525-9364-365b254d51ca\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>spider man -> iron man(attention replace)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/074adbc6-bd48-4c82-99aa-f322cf937f5a\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>Effel tower -> Effel tower at night (attention refine)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/f815dab3-b20c-4936-90e3-a060d3717e22\" width=\"500\"/>\n</div>\n\n<div align=\"center\">\n  <b>blossom sakura tree -> blossom(-3) sakura tree (attention reweight)</b>\n  <br/>\n  <img src=\"https://github.com/FerryHuang/mmagic/assets/71176040/5ef770b9-4f28-4ae7-84b0-6c15ea7450e9\" width=\"500\"/>\n</div>\n\n## Quick Start\n\nA walkthrough of the project is provided [here](visualize.ipynb)\n\nor you can just run the following scripts to get the results:\n\n```python\n# load the mmagic SD1.5\nfrom mmengine import MODELS, Config\nfrom mmengine.registry import init_default_scope\n\ninit_default_scope('mmagic')\n\nconfig = 'configs/stable_diffusion/stable-diffusion_ddim_denoisingunet.py'\nconfig = Config.fromfile(config).copy()\n\nStableDiffuser = MODELS.build(config.model)\nStableDiffuser = StableDiffuser.to('cuda')\n```\n\n```python\n# inversion\nimage_path = 'projects/prompt_to_prompt/assets/gnochi_mirror.jpeg'\nprompt = \"a cat sitting next to a mirror\"\nimage_tensor = ptp_utils.load_512(image_path).to('cuda')\n\nfrom inversions.null_text_inversion import NullTextInversion\nfrom models.ptp import EmptyControl\nfrom models import ptp_utils\n\nnull_inverter = NullTextInversion(StableDiffuser)\nnull_inverter.init_prompt(prompt)\nddim_latents = null_inverter.ddim_inversion(image_tensor)\nx_t = ddim_latents[-1]\nuncond_embeddings = null_inverter.null_optimization(ddim_latents, num_inner_steps=10, epsilon=1e-5)\nnull_text_rec, _ = ptp_utils.text2image_ldm_stable(StableDiffuser, [prompt], EmptyControl(), latent=x_t, uncond_embeddings=uncond_embeddings)\nptp_utils.view_images(null_text_rec)\n```\n\n```python\n# prompt-to-prompt editing\nprompts = [\"A cartoon of spiderman\",\n           \"A cartoon of ironman\"]\nimport torch\nfrom models.ptp import LocalBlend, AttentionReplace\nfrom models.ptp_utils import text2image_ldm_stable\ng = torch.Generator().manual_seed(2023616)\nlb = LocalBlend(prompts, (\"spiderman\", \"ironman\"), model=StableDiffuser)\ncontroller = AttentionReplace(prompts, 50,\n                              cross_replace_steps={\"default_\": 1., \"ironman\": .2},\n                              self_replace_steps=0.4,\n                              local_blend=lb, model=StableDiffuser)\nimages, x_t = text2image_ldm_stable(StableDiffuser, prompts, controller, latent=None,\n                                    num_inference_steps=50, guidance_scale=7.5, uncond_embeddings=None, generator=g)\n```\n\n## Citation\n\n```bibtex\n@article{hertz2022prompt,\n  title = {Prompt-to-Prompt Image Editing with Cross Attention Control},\n  author = {Hertz, Amir and Mokady, Ron and Tenenbaum, Jay and Aberman, Kfir and Pritch, Yael and Cohen-Or, Daniel},\n  journal = {arXiv preprint arXiv:2208.01626},\n  year = {2022},\n}\n@article{mokady2022null,\n  title={Null-text Inversion for Editing Real Images using Guided Diffusion Models},\n  author={Mokady, Ron and Hertz, Amir and Aberman, Kfir and Pritch, Yael and Cohen-Or, Daniel},\n  journal={arXiv preprint arXiv:2211.09794},\n  year={2022}\n}\n```\n"
  },
  {
    "path": "projects/prompt_to_prompt/inversions/__init__.py",
    "content": ""
  },
  {
    "path": "projects/prompt_to_prompt/inversions/ddim_inversion.py",
    "content": "\"\"\"This code was originally taken from https://github.com/google/prompt-to-\nprompt and modified by Ferry.\"\"\"\n\n# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import Union\n\nimport numpy as np\nimport torch\nfrom PIL import Image\n\nfrom mmagic.models.diffusion_schedulers import EditDDIMScheduler\n\n\nclass DDIMInversion:\n\n    def __init__(self, model, **kwargs):\n        scheduler = EditDDIMScheduler(\n            beta_start=0.00085,\n            beta_end=0.012,\n            beta_schedule='scaled_linear',\n            clip_sample=False,\n            set_alpha_to_one=False)\n        self.model = model\n        self.num_ddim_steps = kwargs.pop('num_ddim_steps', 50)\n        self.guidance_scale = kwargs.pop('guidance_scale', 7.5)\n        self.tokenizer = self.model.tokenizer\n        self.model.scheduler = scheduler\n        self.model.scheduler.set_timesteps(self.num_ddim_steps)\n        self.prompt = None\n        self.context = None\n\n    def prev_step(self, model_output: Union[torch.FloatTensor, np.ndarray],\n                  timestep: int, sample: Union[torch.FloatTensor, np.ndarray]):\n        prev_timestep = timestep - (\n            self.scheduler.num_train_timesteps //\n            self.scheduler.num_inference_steps)\n        alpha_prod_t = self.scheduler.alphas_cumprod[timestep]\n        alpha_prod_t_prev = (\n            self.scheduler.alphas_cumprod[prev_timestep]\n            if prev_timestep >= 0 else self.scheduler.final_alpha_cumprod)\n        beta_prod_t = 1 - alpha_prod_t\n        pred_original_sample = (\n            sample - beta_prod_t**0.5 * model_output) / alpha_prod_t**0.5\n        pred_sample_direction = (1 - alpha_prod_t_prev)**0.5 * model_output\n        prev_sample = alpha_prod_t_prev**0.5 * pred_original_sample \\\n            + pred_sample_direction\n        return prev_sample\n\n    def next_step(self, model_output: Union[torch.FloatTensor, np.ndarray],\n                  timestep: int, sample: Union[torch.FloatTensor, np.ndarray]):\n        timestep, next_timestep = min(\n            timestep - self.scheduler.num_train_timesteps //\n            self.scheduler.num_inference_steps, 999), timestep\n        alpha_prod_t = self.scheduler.alphas_cumprod[\n            timestep] if timestep >= 0 else self.scheduler.final_alpha_cumprod\n        alpha_prod_t_next = self.scheduler.alphas_cumprod[next_timestep]\n        beta_prod_t = 1 - alpha_prod_t\n        next_original_sample = (\n            sample - beta_prod_t**0.5 * model_output) / alpha_prod_t**0.5\n        next_sample_direction = (1 - alpha_prod_t_next)**0.5 * model_output\n        next_sample = alpha_prod_t_next**0.5 * next_original_sample \\\n            + next_sample_direction\n        return next_sample\n\n    def get_noise_pred_single(self, latents, t, context):\n        noise_pred = self.model.unet(\n            latents, t, encoder_hidden_states=context)['sample']\n        return noise_pred\n\n    def get_noise_pred(self, latents, t, is_forward=True, context=None):\n        latents_input = torch.cat([latents] * 2)\n        if context is None:\n            context = self.context\n        guidance_scale = 1 if is_forward else self.guidance_scale\n        noise_pred = self.model.unet(\n            latents_input, t, encoder_hidden_states=context)['sample']\n        noise_pred_uncond, noise_prediction_text = noise_pred.chunk(2)\n        noise_pred = noise_pred_uncond + guidance_scale * (\n            noise_prediction_text - noise_pred_uncond)\n        if is_forward:\n            latents = self.next_step(noise_pred, t, latents)\n        else:\n            latents = self.prev_step(noise_pred, t, latents)\n        return latents\n\n    @torch.no_grad()\n    def latent2image(self, latents, return_type='np'):\n        latents = 1 / 0.18215 * latents.detach()\n        image = self.model.vae.decode(latents, return_dict=False)[0]\n        if return_type == 'np':\n            image = (image / 2 + 0.5).clamp(0, 1)\n            image = image.cpu().permute(0, 2, 3, 1).numpy()[0]\n            image = (image * 255).astype(np.uint8)\n        return image\n\n    @torch.no_grad()\n    def image2latent(self, image):\n        with torch.no_grad():\n            if type(image) is Image:\n                image = np.array(image)\n            if type(image) is torch.Tensor and image.dim() == 4:\n                latents = image\n            else:\n                image = torch.from_numpy(image).float() / 127.5 - 1\n                image = image.permute(2, 0,\n                                      1).unsqueeze(0).to(self.model.device)\n                latents = self.model.vae.encode(image)['latent_dist'].mean\n                latents = latents * 0.18215\n        return latents\n\n    @torch.no_grad()\n    def init_prompt(self, prompt: str):\n        uncond_input = self.model.tokenizer(\n            [''],\n            padding='max_length',\n            max_length=self.model.tokenizer.model_max_length,\n            return_tensors='pt')\n        uncond_embeddings = self.model.text_encoder(\n            uncond_input.input_ids.to(self.model.device))[0]\n        text_input = self.model.tokenizer(\n            [prompt],\n            padding='max_length',\n            max_length=self.model.tokenizer.model_max_length,\n            truncation=True,\n            return_tensors='pt',\n        )\n        text_embeddings = self.model.text_encoder(\n            text_input.input_ids.to(self.model.device))[0]\n        self.context = torch.cat([uncond_embeddings, text_embeddings])\n        self.prompt = prompt\n\n    @torch.no_grad()\n    def ddim_loop(self, latent):\n        uncond_embeddings, cond_embeddings = self.context.chunk(2)\n        all_latent = [latent]\n        latent = latent.clone().detach()\n        for i in range(self.num_ddim_steps):\n            t = self.model.scheduler.timesteps[\n                len(self.model.scheduler.timesteps) - i - 1]\n            noise_pred = self.get_noise_pred_single(latent, t, cond_embeddings)\n            latent = self.next_step(noise_pred, t, latent)\n            all_latent.append(latent)\n        return all_latent\n\n    @property\n    def scheduler(self):\n        return self.model.scheduler\n\n    @torch.no_grad()\n    def ddim_inversion(self, image):\n        latent = self.model.vae.encode(image)['latent_dist'].mean\n        latent = latent * 0.18215\n        # image_rec = self.latent2image(latent)\n        ddim_latents = self.ddim_loop(latent)\n        return ddim_latents\n"
  },
  {
    "path": "projects/prompt_to_prompt/inversions/null_text_inversion.py",
    "content": "import torch\nimport torch.nn.functional as F\nfrom inversions.ddim_inversion import DDIMInversion\nfrom torch.optim import Adam\nfrom tqdm import tqdm\n\n\nclass NullTextInversion(DDIMInversion):\n\n    # basically the only thing null_text_inversion does is\n    # to add a null_text_optimization method over ddim inversion\n\n    def null_optimization(self, latents, num_inner_steps, epsilon):\n        uncond_embeddings, cond_embeddings = self.context.chunk(2)\n        uncond_embeddings_list = []\n        latent_cur = latents[-1]\n        bar = tqdm(total=num_inner_steps * self.num_ddim_steps)\n        for i in range(self.num_ddim_steps):\n            uncond_embeddings = uncond_embeddings.clone().detach()\n            uncond_embeddings.requires_grad = True\n            optimizer = Adam([uncond_embeddings], lr=1e-2 * (1. - i / 100.))\n            latent_prev = latents[len(latents) - i - 2]\n            t = self.model.scheduler.timesteps[i]\n            with torch.no_grad():\n                noise_pred_cond = self.get_noise_pred_single(\n                    latent_cur, t, cond_embeddings)\n            for j in range(num_inner_steps):\n                noise_pred_uncond = self.get_noise_pred_single(\n                    latent_cur, t, uncond_embeddings)\n                noise_pred = noise_pred_uncond + self.guidance_scale * (\n                    noise_pred_cond - noise_pred_uncond)\n                latents_prev_rec = self.prev_step(noise_pred, t, latent_cur)\n                loss = F.mse_loss(latents_prev_rec, latent_prev)\n                optimizer.zero_grad()\n                loss.backward()\n                optimizer.step()\n                loss_item = loss.item()\n                bar.update()\n                if loss_item < epsilon + i * 2e-5:\n                    break\n            for j in range(j + 1, num_inner_steps):\n                bar.update()\n            uncond_embeddings_list.append(uncond_embeddings[:1].detach())\n            with torch.no_grad():\n                context = torch.cat([uncond_embeddings, cond_embeddings])\n                latent_cur = self.get_noise_pred(latent_cur, t, False, context)\n        bar.close()\n        return uncond_embeddings_list\n"
  },
  {
    "path": "projects/prompt_to_prompt/models/ptp.py",
    "content": "\"\"\"This code was originally taken from https://github.com/google/prompt-to-\nprompt.\"\"\"\nimport abc\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as nnf\nfrom PIL import Image\n\nimport projects.prompt_to_prompt.models.ptp_utils as ptp_utils\nimport projects.prompt_to_prompt.models.seq_aligner as seq_aligner\n\nLOW_RESOURCE = False\nMAX_NUM_WORDS = 77\n\n\ndef make_controller(prompts: List[str],\n                    is_replace_controller: bool,\n                    cross_replace_steps: Dict[str, float],\n                    self_replace_steps: float,\n                    blend_words=None,\n                    equilizer_params=None,\n                    model=None):\n    num_ddim_steps = 50\n    if blend_words is None:\n        lb = None\n    else:\n        lb = LocalBlend(prompts, blend_words, model=model)\n    if is_replace_controller:\n        controller = AttentionReplace(\n            prompts,\n            num_ddim_steps,\n            cross_replace_steps=cross_replace_steps,\n            self_replace_steps=self_replace_steps,\n            local_blend=lb,\n            model=model)\n    else:\n        controller = AttentionRefine(\n            prompts,\n            num_ddim_steps,\n            cross_replace_steps=cross_replace_steps,\n            self_replace_steps=self_replace_steps,\n            local_blend=lb,\n            model=model)\n    if equilizer_params is not None:\n        eq = get_equalizer(prompts[1], equilizer_params['words'],\n                           equilizer_params['values'])\n        controller = AttentionReweight(\n            prompts,\n            num_ddim_steps,\n            cross_replace_steps=cross_replace_steps,\n            self_replace_steps=self_replace_steps,\n            equalizer=eq,\n            local_blend=lb,\n            controller=controller)\n    return controller\n\n\nclass LocalBlend:\n\n    def __call__(self, x_t, attention_store):\n        k = 1\n        maps = attention_store['down_cross'][2:4] + attention_store[\n            'up_cross'][:3]\n        maps = [\n            item.reshape(self.alpha_layers.shape[0], -1, 1, 16, 16,\n                         MAX_NUM_WORDS) for item in maps\n        ]\n        maps = torch.cat(maps, dim=1)\n        maps = (maps * self.alpha_layers).sum(-1).mean(1)\n        mask = nnf.max_pool2d(\n            maps, (k * 2 + 1, k * 2 + 1), (1, 1), padding=(k, k))\n        mask = nnf.interpolate(mask, size=(x_t.shape[2:]))\n        mask = mask / mask.max(2, keepdims=True)[0].max(3, keepdims=True)[0]\n        mask = mask.gt(self.threshold)\n        mask = (mask[:1] + mask[1:]).float()\n        x_t = x_t[:1] + mask * (x_t - x_t[:1])\n        return x_t\n\n    def __init__(self, prompts: List[str], words, threshold=.3, model=None):\n        device, tokenizer = model.device, model.tokenizer\n        alpha_layers = torch.zeros(len(prompts), 1, 1, 1, 1, MAX_NUM_WORDS)\n        for i, (prompt, words_) in enumerate(zip(prompts, words)):\n            if type(words_) is str:\n                words_ = [words_]\n            for word in words_:\n                ind = ptp_utils.get_word_inds(prompt, word, tokenizer)\n                alpha_layers[i, :, :, :, :, ind] = 1\n        self.alpha_layers = alpha_layers.to(device)\n        self.threshold = threshold\n\n\nclass AttentionControl(abc.ABC):\n\n    def step_callback(self, x_t):\n        return x_t\n\n    def between_steps(self):\n        return\n\n    @property\n    def num_uncond_att_layers(self):\n        return self.num_att_layers if LOW_RESOURCE else 0\n\n    @abc.abstractmethod\n    def forward(self, attn, is_cross: bool, place_in_unet: str):\n        raise NotImplementedError\n\n    def __call__(self, attn, is_cross: bool, place_in_unet: str):\n        if self.cur_att_layer >= self.num_uncond_att_layers:\n            if LOW_RESOURCE:\n                attn = self.forward(attn, is_cross, place_in_unet)\n            else:\n                h = attn.shape[0]\n                attn[h // 2:] = self.forward(attn[h // 2:], is_cross,\n                                             place_in_unet)\n        self.cur_att_layer += 1\n        if self.cur_att_layer == (self.num_att_layers +\n                                  self.num_uncond_att_layers):\n            self.cur_att_layer = 0\n            self.cur_step += 1\n            self.between_steps()\n        return attn\n\n    def reset(self):\n        self.cur_step = 0\n        self.cur_att_layer = 0\n\n    def __init__(self):\n        self.cur_step = 0\n        self.num_att_layers = -1\n        self.cur_att_layer = 0\n\n\nclass EmptyControl:\n\n    def step_callback(self, x_t):\n        return x_t\n\n    def between_steps(self):\n        return\n\n    def __call__(self, attn, is_cross: bool, place_in_unet: str):\n        return attn\n\n\nclass AttentionStore(AttentionControl):\n\n    @staticmethod\n    def get_empty_store():\n        return {\n            'down_cross': [],\n            'mid_cross': [],\n            'up_cross': [],\n            'down_self': [],\n            'mid_self': [],\n            'up_self': []\n        }\n\n    def forward(self, attn, is_cross: bool, place_in_unet: str):\n        key = f\"{place_in_unet}_{'cross' if is_cross else 'self'}\"\n        if attn.shape[1] <= 32**2:  # avoid memory overhead\n            self.step_store[key].append(attn)\n        return attn\n\n    def between_steps(self):\n        if len(self.attention_store) == 0:\n            self.attention_store = self.step_store\n        else:\n            for key in self.attention_store:\n                for i in range(len(self.attention_store[key])):\n                    self.attention_store[key][i] += self.step_store[key][i]\n        self.step_store = self.get_empty_store()\n\n    def get_average_attention(self):\n        average_attention = {\n            key: [item / self.cur_step for item in self.attention_store[key]]\n            for key in self.attention_store\n        }\n        return average_attention\n\n    def reset(self):\n        super(AttentionStore, self).reset()\n        self.step_store = self.get_empty_store()\n        self.attention_store = {}\n\n    def __init__(self):\n        super(AttentionStore, self).__init__()\n        self.step_store = self.get_empty_store()\n        self.attention_store = {}\n\n\nclass AttentionControlEdit(AttentionStore, abc.ABC):\n\n    def step_callback(self, x_t):\n        if self.local_blend is not None:\n            x_t = self.local_blend(x_t, self.attention_store)\n        return x_t\n\n    def replace_self_attention(self, attn_base, att_replace):\n        if att_replace.shape[2] <= 16**2:\n            return attn_base.unsqueeze(0).expand(att_replace.shape[0],\n                                                 *attn_base.shape)\n        else:\n            return att_replace\n\n    @abc.abstractmethod\n    def replace_cross_attention(self, attn_base, att_replace):\n        raise NotImplementedError\n\n    def forward(self, attn, is_cross: bool, place_in_unet: str):\n        super(AttentionControlEdit, self).forward(attn, is_cross,\n                                                  place_in_unet)\n        if is_cross or (self.num_self_replace[0] <= self.cur_step <\n                        self.num_self_replace[1]):\n            h = attn.shape[0] // (self.batch_size)\n            attn = attn.reshape(self.batch_size, h, *attn.shape[1:])\n            attn_base, attn_repalce = attn[0], attn[1:]\n            if is_cross:\n                alpha_words = self.cross_replace_alpha[self.cur_step]\n                attn_repalce_new = self.replace_cross_attention(\n                    attn_base, attn_repalce) * alpha_words + (\n                        1 - alpha_words) * attn_repalce\n                attn[1:] = attn_repalce_new\n            else:\n                attn[1:] = self.replace_self_attention(attn_base, attn_repalce)\n            attn = attn.reshape(self.batch_size * h, *attn.shape[2:])\n        return attn\n\n    def __init__(self, prompts, num_steps: int,\n                 cross_replace_steps: Union[float, Tuple[float, float],\n                                            Dict[str, Tuple[float, float]]],\n                 self_replace_steps: Union[float, Tuple[float, float]],\n                 local_blend: Optional[LocalBlend], model):\n        super(AttentionControlEdit, self).__init__()\n        self.batch_size = len(prompts)\n        self.cross_replace_alpha = ptp_utils.get_time_words_attention_alpha(\n            prompts, num_steps, cross_replace_steps,\n            model.tokenizer).to(model.device)\n        if type(self_replace_steps) is float:\n            self_replace_steps = 0, self_replace_steps\n        self.num_self_replace = int(num_steps * self_replace_steps[0]), int(\n            num_steps * self_replace_steps[1])\n        self.local_blend = local_blend\n\n\nclass AttentionReplace(AttentionControlEdit):\n\n    def replace_cross_attention(self, attn_base, att_replace):\n        return torch.einsum('hpw,bwn->bhpn', attn_base, self.mapper)\n\n    def __init__(self,\n                 prompts,\n                 num_steps: int,\n                 cross_replace_steps: float,\n                 self_replace_steps: float,\n                 local_blend: Optional[LocalBlend] = None,\n                 model=None):\n        super(AttentionReplace, self).__init__(\n            prompts,\n            num_steps,\n            cross_replace_steps,\n            self_replace_steps,\n            local_blend,\n            model=model)\n        self.mapper = seq_aligner.get_replacement_mapper(\n            prompts, model.tokenizer).to(model.device)\n\n\nclass AttentionRefine(AttentionControlEdit):\n\n    def replace_cross_attention(self, attn_base, att_replace):\n        attn_base_replace = attn_base[:, :, self.mapper].permute(2, 0, 1, 3)\n        attn_replace = attn_base_replace * self.alphas + att_replace * (\n            1 - self.alphas)\n        return attn_replace\n\n    def __init__(self,\n                 prompts,\n                 num_steps: int,\n                 cross_replace_steps: float,\n                 self_replace_steps: float,\n                 local_blend: Optional[LocalBlend] = None,\n                 model=None):\n        super(AttentionRefine, self).__init__(\n            prompts,\n            num_steps,\n            cross_replace_steps,\n            self_replace_steps,\n            local_blend,\n            model=model)\n        self.mapper, alphas = seq_aligner.get_refinement_mapper(\n            prompts, model.tokenizer)\n        self.mapper, alphas = self.mapper.to(model.device), alphas.to(\n            model.device)\n        self.alphas = alphas.reshape(alphas.shape[0], 1, 1, alphas.shape[1])\n\n\nclass AttentionReweight(AttentionControlEdit):\n\n    def replace_cross_attention(self, attn_base, att_replace):\n        if self.prev_controller is not None:\n            attn_base = self.prev_controller.replace_cross_attention(\n                attn_base, att_replace)\n        attn_replace = attn_base[None, :, :, :] * self.equalizer[:, None,\n                                                                 None, :]\n        return attn_replace\n\n    def __init__(self,\n                 prompts,\n                 num_steps: int,\n                 cross_replace_steps: float,\n                 self_replace_steps: float,\n                 equalizer,\n                 local_blend: Optional[LocalBlend] = None,\n                 controller: Optional[AttentionControlEdit] = None,\n                 model=None):\n        super(AttentionReweight, self).__init__(\n            prompts,\n            num_steps,\n            cross_replace_steps,\n            self_replace_steps,\n            local_blend,\n            model=model)\n        self.equalizer = equalizer.to(model.device)\n        self.prev_controller = controller\n\n\ndef get_equalizer(text: str,\n                  word_select: Union[int, Tuple[int, ...]],\n                  values: Union[List[float], Tuple[float, ...]],\n                  tokenizer=None):\n    if type(word_select) is int or type(word_select) is str:\n        word_select = (word_select, )\n    equalizer = torch.ones(len(values), 77)\n    values = torch.tensor(values, dtype=torch.float32)\n    for word in word_select:\n        inds = ptp_utils.get_word_inds(text, word, tokenizer)\n        equalizer[:, inds] = values\n    return equalizer\n\n\ndef aggregate_attention(attention_store: AttentionStore,\n                        res: int,\n                        from_where: List[str],\n                        is_cross: bool,\n                        select: int,\n                        prompts=None):\n    out = []\n    attention_maps = attention_store.get_average_attention()\n    num_pixels = res**2\n    for location in from_where:\n        for item in attention_maps[\n                f\"{location}_{'cross' if is_cross else 'self'}\"]:\n            if item.shape[1] == num_pixels:\n                cross_maps = item.reshape(\n                    len(prompts), -1, res, res, item.shape[-1])[select]\n                out.append(cross_maps)\n    out = torch.cat(out, dim=0)\n    out = out.sum(0) / out.shape[0]\n    return out.cpu()\n\n\ndef show_cross_attention(attention_store: AttentionStore,\n                         res: int,\n                         from_where: List[str],\n                         select: int = 0,\n                         prompts=None,\n                         tokenizer=None):\n    tokens = tokenizer.encode(prompts[select])\n    decoder = tokenizer.decode\n    attention_maps = aggregate_attention(attention_store, res, from_where,\n                                         True, select, prompts)\n    images = []\n    for i in range(len(tokens)):\n        image = attention_maps[:, :, i]\n        image = 255 * image / image.max()\n        image = image.unsqueeze(-1).expand(*image.shape, 3)\n        image = image.numpy().astype(np.uint8)\n        image = np.array(Image.fromarray(image).resize((256, 256)))\n        image = ptp_utils.text_under_image(image, decoder(int(tokens[i])))\n        images.append(image)\n    return (ptp_utils.view_images(np.stack(images, axis=0)))\n\n\ndef show_self_attention_comp(attention_store: AttentionStore,\n                             res: int,\n                             from_where: List[str],\n                             max_com=10,\n                             select: int = 0):\n    attention_maps = aggregate_attention(attention_store, res, from_where,\n                                         False, select).numpy().reshape(\n                                             (res**2, res**2))\n    u, s, vh = np.linalg.svd(attention_maps -\n                             np.mean(attention_maps, axis=1, keepdims=True))\n    images = []\n    for i in range(max_com):\n        image = vh[i].reshape(res, res)\n        image = image - image.min()\n        image = 255 * image / image.max()\n        image = np.repeat(\n            np.expand_dims(image, axis=2), 3, axis=2).astype(np.uint8)\n        image = Image.fromarray(image).resize((256, 256))\n        image = np.array(image)\n        images.append(image)\n    ptp_utils.view_images(np.concatenate(images, axis=1))\n\n\ndef run_and_display(model,\n                    prompts,\n                    controller,\n                    latent=None,\n                    run_baseline=False,\n                    generator=None):\n    if run_baseline:\n        print('w.o. prompt-to-prompt')\n        images, latent = run_and_display(\n            model,\n            prompts,\n            EmptyControl(),\n            latent=latent,\n            run_baseline=False,\n            generator=generator)\n        print('with prompt-to-prompt')\n    images, x_t = ptp_utils.text2image_ld\n"
  },
  {
    "path": "projects/prompt_to_prompt/models/ptp_utils.py",
    "content": "\"\"\"This code was originally taken from https://github.com/google/prompt-to-\nprompt.\"\"\"\n\n# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom typing import Dict, List, Optional, Tuple, Union\n\nimport cv2\nimport numpy as np\nimport torch\nfrom IPython.display import display\nfrom PIL import Image\nfrom tqdm import tqdm\n\n\ndef tensor_to_nparray(image: torch.Tensor):\n    image = (image / 2 + 0.5).clamp(0, 1)\n    image = image.detach().cpu().permute(0, 2, 3, 1).numpy()[0]\n    image = (image * 255).astype(np.uint8)\n    return image\n\n\ndef text_under_image(image: np.ndarray,\n                     text: str,\n                     text_color: Tuple[int, int, int] = (0, 0, 0)):\n    h, w, c = image.shape\n    offset = int(h * .2)\n    img = np.ones((h + offset, w, c), dtype=np.uint8) * 255\n    font = cv2.FONT_HERSHEY_SIMPLEX\n    img[:h] = image\n    textsize = cv2.getTextSize(text, font, 1, 2)[0]\n    text_x, text_y = (w - textsize[0]) // 2, h + offset - textsize[1] // 2\n    cv2.putText(img, text, (text_x, text_y), font, 1, text_color, 2)\n    return img\n\n\ndef view_images(images, num_rows=1, offset_ratio=0.02):\n    if type(images) is list:\n        num_empty = len(images) % num_rows\n    elif images.ndim == 4:\n        num_empty = images.shape[0] % num_rows\n    else:\n        images = [images]\n        num_empty = 0\n\n    empty_images = np.ones(images[0].shape, dtype=np.uint8) * 255\n    images = [image.astype(np.uint8)\n              for image in images] + [empty_images] * num_empty\n    num_items = len(images)\n\n    h, w, c = images[0].shape\n    offset = int(h * offset_ratio)\n    num_cols = num_items // num_rows\n    image_ = np.ones(\n        (h * num_rows + offset * (num_rows - 1), w * num_cols + offset *\n         (num_cols - 1), 3),\n        dtype=np.uint8) * 255\n    for i in range(num_rows):\n        for j in range(num_cols):\n            image_[i * (h + offset):i * (h + offset) + h:, j * (w + offset):j *\n                   (w + offset) + w] = images[i * num_cols + j]\n\n    pil_img = Image.fromarray(image_)\n    display(pil_img)\n    # return pil_img\n\n\ndef diffusion_step(model,\n                   controller,\n                   latents,\n                   context,\n                   t,\n                   guidance_scale,\n                   low_resource=False):\n    if low_resource:\n        noise_pred_uncond = model.unet(\n            latents, t, encoder_hidden_states=context[0])['sample']\n        noise_prediction_text = model.unet(\n            latents, t, encoder_hidden_states=context[1])['sample']\n    else:\n        latents_input = torch.cat([latents] * 2)\n        noise_pred = model.unet(\n            latents_input, t, encoder_hidden_states=context)['sample']\n        noise_pred_uncond, noise_prediction_text = noise_pred.chunk(2)\n    noise_pred = noise_pred_uncond + guidance_scale * (\n        noise_prediction_text - noise_pred_uncond)\n    latents = model.scheduler.step(noise_pred, t, latents)['prev_sample']\n    latents = controller.step_callback(latents)\n    return latents\n\n\ndef latent2image(vae, latents):\n    latents = 1 / 0.18215 * latents\n    image = vae.decode(latents)['sample']\n    image = (image / 2 + 0.5).clamp(0, 1)\n    image = image.cpu().permute(0, 2, 3, 1).numpy()\n    image = (image * 255).astype(np.uint8)\n    return image\n\n\ndef init_latent(latent, model, height, width, generator, batch_size):\n    if latent is None:\n        latent = torch.randn(\n            (1, model.unet.in_channels, height // 8, width // 8),\n            generator=generator,\n        )\n    latents = latent.expand(batch_size, model.unet.in_channels, height // 8,\n                            width // 8).to(model.device)\n    return latent, latents\n\n\n@torch.no_grad()\ndef text2image_ldm_stable(model,\n                          prompt: List[str],\n                          controller,\n                          num_inference_steps: int = 50,\n                          guidance_scale: Optional[float] = 7.5,\n                          generator: Optional[torch.Generator] = None,\n                          latent: Optional[torch.FloatTensor] = None,\n                          uncond_embeddings=None,\n                          start_time=50,\n                          return_type='image'):\n    batch_size = len(prompt)\n    register_attention_control(model, controller)\n    height = width = 512\n\n    text_input = model.tokenizer(\n        prompt,\n        padding='max_length',\n        max_length=model.tokenizer.model_max_length,\n        truncation=True,\n        return_tensors='pt',\n    )\n    text_embeddings = model.text_encoder(\n        text_input.input_ids.to(model.device))[0]\n    max_length = text_input.input_ids.shape[-1]\n    if uncond_embeddings is None:\n        uncond_input = model.tokenizer(\n            [''] * batch_size,\n            padding='max_length',\n            max_length=max_length,\n            return_tensors='pt')\n        uncond_embeddings_ = model.text_encoder(\n            uncond_input.input_ids.to(model.device))[0]\n    else:\n        uncond_embeddings_ = None\n\n    latent, latents = init_latent(latent, model, height, width, generator,\n                                  batch_size)\n    model.scheduler.set_timesteps(num_inference_steps)\n    for i, t in enumerate(tqdm(model.scheduler.timesteps[-start_time:])):\n        if uncond_embeddings_ is None:\n            context = torch.cat([\n                uncond_embeddings[i].expand(*text_embeddings.shape),\n                text_embeddings\n            ])\n        else:\n            context = torch.cat([uncond_embeddings_, text_embeddings])\n        latents = diffusion_step(\n            model,\n            controller,\n            latents,\n            context,\n            t,\n            guidance_scale,\n            low_resource=False)\n\n    if return_type == 'image':\n        image = latent2image(model.vae, latents)\n    else:\n        image = latents\n    return image, latent\n\n\ndef register_attention_control(model, controller):\n\n    def ca_forward(self, place_in_unet):\n        to_out = self.to_out\n        if type(to_out) is torch.nn.modules.container.ModuleList:\n            to_out = self.to_out[0]\n        else:\n            to_out = self.to_out\n\n        def forward(x, encoder_hidden_states=None, attention_mask=None):\n            batch_size, sequence_length, dim = x.shape\n            h = self.heads\n            q = self.to_q(x)\n            is_cross = encoder_hidden_states is not None\n            encoder_hidden_states = encoder_hidden_states if is_cross else x\n            k = self.to_k(encoder_hidden_states)\n            v = self.to_v(encoder_hidden_states)\n            q = self.head_to_batch_dim(q)\n            k = self.head_to_batch_dim(k)\n            v = self.head_to_batch_dim(v)\n\n            sim = torch.einsum('b i d, b j d -> b i j', q, k) * self.scale\n\n            if attention_mask is not None:\n                attention_mask = attention_mask.reshape(batch_size, -1)\n                max_neg_value = -torch.finfo(sim.dtype).max\n                attention_mask = attention_mask[:, None, :].repeat(h, 1, 1)\n                sim.masked_fill_(~attention_mask, max_neg_value)\n\n            # attention, what we cannot get enough of\n            attn = sim.softmax(dim=-1)\n            attn = controller(attn, is_cross, place_in_unet)\n            out = torch.einsum('b i j, b j d -> b i d', attn, v)\n            out = self.batch_to_head_dim(out)\n            return to_out(out)\n\n        return forward\n\n    class DummyController:\n\n        def __call__(self, *args):\n            return args[0]\n\n        def __init__(self):\n            self.num_att_layers = 0\n\n    if controller is None:\n        controller = DummyController()\n\n    # def register_recr(net_, count, place_in_unet):\n    #     if net_.__class__.__name__ == 'CrossAttention':\n    #         net_.forward = ca_forward(net_, place_in_unet)\n    #         return count + 1\n    #     elif hasattr(net_, 'children'):\n    #         for net__ in net_.children():\n    #             count = register_recr(net__, count, place_in_unet)\n    #     return count\n\n    # cross_att_count = 0\n    # sub_nets = model.unet.named_children()\n    # for net in sub_nets:\n    #     if \"down\" in net[0]:\n    #         cross_att_count += register_recr(net[1], 0, \"down\")\n    #     elif \"up\" in net[0]:\n    #         cross_att_count += register_recr(net[1], 0, \"up\")\n    #     elif \"mid\" in net[0]:\n    #         cross_att_count += register_recr(net[1], 0, \"mid\")\n\n    # controller.num_att_layers = cross_att_count\n\n    def register_recr(net_name: str, net_, count, place_in_unet):\n        if net_name.endswith('attn2') or net_name.endswith('attn1'):\n            net_.forward = ca_forward(net_, place_in_unet)\n            return count + 1\n        return count\n\n    cross_att_count = 0\n    sub_nets = model.unet.named_modules()\n    for net in sub_nets:\n        if 'down' in net[0]:\n            cross_att_count += register_recr(net[0], net[1], 0, 'down')\n        elif 'up' in net[0]:\n            cross_att_count += register_recr(net[0], net[1], 0, 'up')\n        elif 'mid' in net[0]:\n            cross_att_count += register_recr(net[0], net[1], 0, 'mid')\n\n    controller.num_att_layers = cross_att_count\n\n\ndef get_word_inds(text: str, word_place: int, tokenizer):\n    split_text = text.split(' ')\n    if type(word_place) is str:\n        word_place = [\n            i for i, word in enumerate(split_text) if word_place == word\n        ]\n    elif type(word_place) is int:\n        word_place = [word_place]\n    out = []\n    if len(word_place) > 0:\n        words_encode = [\n            tokenizer.decode([item]).strip('#')\n            for item in tokenizer.encode(text)['input_ids']\n        ][1:-1]\n        cur_len, ptr = 0, 0\n\n        for i in range(len(words_encode)):\n            cur_len += len(words_encode[i])\n            if ptr in word_place:\n                out.append(i + 1)\n            if cur_len >= len(split_text[ptr]):\n                ptr += 1\n                cur_len = 0\n    return np.array(out)\n\n\ndef update_alpha_time_word(alpha,\n                           bounds: Union[float, Tuple[float, float]],\n                           prompt_ind: int,\n                           word_inds: Optional[torch.Tensor] = None):\n    if type(bounds) is float:\n        bounds = 0, bounds\n    start, end = int(bounds[0] * alpha.shape[0]), int(bounds[1] *\n                                                      alpha.shape[0])\n    if word_inds is None:\n        word_inds = torch.arange(alpha.shape[2])\n    alpha[:start, prompt_ind, word_inds] = 0\n    alpha[start:end, prompt_ind, word_inds] = 1\n    alpha[end:, prompt_ind, word_inds] = 0\n    return alpha\n\n\ndef get_time_words_attention_alpha(\n        prompts,\n        num_steps,\n        cross_replace_steps: Union[float, Dict[str, Tuple[float, float]]],\n        tokenizer,\n        max_num_words=77):\n    if type(cross_replace_steps) is not dict:\n        cross_replace_steps = {'default_': cross_replace_steps}\n    if 'default_' not in cross_replace_steps:\n        cross_replace_steps['default_'] = (0., 1.)\n    alpha_time_words = torch.zeros(num_steps + 1,\n                                   len(prompts) - 1, max_num_words)\n    for i in range(len(prompts) - 1):\n        alpha_time_words = update_alpha_time_word(\n            alpha_time_words, cross_replace_steps['default_'], i)\n    for key, item in cross_replace_steps.items():\n        if key != 'default_':\n            inds = [\n                get_word_inds(prompts[i], key, tokenizer)\n                for i in range(1, len(prompts))\n            ]\n            for i, ind in enumerate(inds):\n                if len(ind) > 0:\n                    alpha_time_words = update_alpha_time_word(\n                        alpha_time_words, item, i, ind)\n    alpha_time_words = alpha_time_words.reshape(num_steps + 1,\n                                                len(prompts) - 1, 1, 1,\n                                                max_num_words)\n    return alpha_time_words\n\n\ndef load_512(image_path, left=0, right=0, top=0, bottom=0, device=None):\n    if type(image_path) is str:\n        image = np.array(Image.open(image_path).convert('RGB'))[:, :, :3]\n    else:\n        image = image_path\n    h, w, c = image.shape\n    left = min(left, w - 1)\n    right = min(right, w - left - 1)\n    top = min(top, h - left - 1)\n    bottom = min(bottom, h - top - 1)\n    image = image[top:h - bottom, left:w - right]\n    h, w, c = image.shape\n    if h < w:\n        offset = (w - h) // 2\n        image = image[:, offset:offset + h]\n    elif w < h:\n        offset = (h - w) // 2\n        image = image[offset:offset + w]\n    image = np.array(Image.fromarray(image).resize((512, 512)))\n    image = torch.from_numpy(image).float() / 127.5 - 1\n    image = image.permute(2, 0, 1).unsqueeze(0).to(device)\n\n    return image\n"
  },
  {
    "path": "projects/prompt_to_prompt/models/seq_aligner.py",
    "content": "\"\"\"This code was originally taken from https://github.com/google/prompt-to-\nprompt.\"\"\"\n\nimport numpy as np\n# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\nimport torch\n\n\nclass ScoreParams:\n\n    def __init__(self, gap, match, mismatch):\n        self.gap = gap\n        self.match = match\n        self.mismatch = mismatch\n\n    def mis_match_char(self, x, y):\n        if x != y:\n            return self.mismatch\n        else:\n            return self.match\n\n\ndef get_matrix(size_x, size_y, gap):\n    matrix = []\n    for i in range(size_x + 1):\n        sub_matrix = []\n        for j in range(size_y + 1):\n            sub_matrix.append(0)\n        matrix.append(sub_matrix)\n    for j in range(1, size_y + 1):\n        matrix[0][j] = j * gap\n    for i in range(1, size_x + 1):\n        matrix[i][0] = i * gap\n    return np.array(matrix)\n\n\n# def get_matrix(size_x, size_y, gap):\n#     matrix = np.zeros((size_x + 1, size_y + 1), dtype=np.int32)\n#     matrix[0, 1:] = (np.arange(size_y) + 1) * gap\n#     matrix[1:, 0] = (np.arange(size_x) + 1) * gap\n#     return matrix\n\n\ndef get_traceback_matrix(size_x, size_y):\n    matrix = np.zeros((size_x + 1, size_y + 1), dtype=np.int32)\n    matrix[0, 1:] = 1\n    matrix[1:, 0] = 2\n    matrix[0, 0] = 4\n    return matrix\n\n\ndef global_align(x, y, score):\n    matrix = get_matrix(len(x), len(y), score.gap)\n    trace_back = get_traceback_matrix(len(x), len(y))\n    for i in range(1, len(x) + 1):\n        for j in range(1, len(y) + 1):\n            left = matrix[i, j - 1] + score.gap\n            up = matrix[i - 1, j] + score.gap\n            diag = matrix[i - 1, j - 1] + score.mis_match_char(\n                x[i - 1], y[j - 1])\n            matrix[i, j] = max(left, up, diag)\n            if matrix[i, j] == left:\n                trace_back[i, j] = 1\n            elif matrix[i, j] == up:\n                trace_back[i, j] = 2\n            else:\n                trace_back[i, j] = 3\n    return matrix, trace_back\n\n\ndef get_aligned_sequences(x, y, trace_back):\n    x_seq = []\n    y_seq = []\n    i = len(x)\n    j = len(y)\n    mapper_y_to_x = []\n    while i > 0 or j > 0:\n        if trace_back[i, j] == 3:\n            x_seq.append(x[i - 1])\n            y_seq.append(y[j - 1])\n            i = i - 1\n            j = j - 1\n            mapper_y_to_x.append((j, i))\n        elif trace_back[i][j] == 1:\n            x_seq.append('-')\n            y_seq.append(y[j - 1])\n            j = j - 1\n            mapper_y_to_x.append((j, -1))\n        elif trace_back[i][j] == 2:\n            x_seq.append(x[i - 1])\n            y_seq.append('-')\n            i = i - 1\n        elif trace_back[i][j] == 4:\n            break\n    mapper_y_to_x.reverse()\n    return x_seq, y_seq, torch.tensor(mapper_y_to_x, dtype=torch.int64)\n\n\ndef get_mapper(x: str, y: str, tokenizer, max_len=77):\n    x_seq = tokenizer.encode(x)['input_ids']\n    y_seq = tokenizer.encode(y)['input_ids']\n    score = ScoreParams(0, 1, -1)\n    matrix, trace_back = global_align(x_seq, y_seq, score)\n    mapper_base = get_aligned_sequences(x_seq, y_seq, trace_back)[-1]\n    alphas = torch.ones(max_len)\n    alphas[:mapper_base.shape[0]] = mapper_base[:, 1].ne(-1).float()\n    mapper = torch.zeros(max_len, dtype=torch.int64)\n    mapper[:mapper_base.shape[0]] = mapper_base[:, 1]\n    mapper[mapper_base.shape[0]:] = len(y_seq) + torch.arange(max_len -\n                                                              len(y_seq))\n    return mapper, alphas\n\n\ndef get_refinement_mapper(prompts, tokenizer, max_len=77):\n    x_seq = prompts[0]\n    mappers, alphas = [], []\n    for i in range(1, len(prompts)):\n        mapper, alpha = get_mapper(x_seq, prompts[i], tokenizer, max_len)\n        mappers.append(mapper)\n        alphas.append(alpha)\n    return torch.stack(mappers), torch.stack(alphas)\n\n\ndef get_word_inds(text: str, word_place: int, tokenizer):\n    split_text = text.split(' ')\n    if type(word_place) is str:\n        word_place = [\n            i for i, word in enumerate(split_text) if word_place == word\n        ]\n    elif type(word_place) is int:\n        word_place = [word_place]\n    out = []\n    if len(word_place) > 0:\n        words_encode = [\n            tokenizer.decode([item]).strip('#')\n            for item in tokenizer.encode(text)['input_ids']\n        ][1:-1]\n        cur_len, ptr = 0, 0\n\n        for i in range(len(words_encode)):\n            cur_len += len(words_encode[i])\n            if ptr in word_place:\n                out.append(i + 1)\n            if cur_len >= len(split_text[ptr]):\n                ptr += 1\n                cur_len = 0\n    return np.array(out)\n\n\ndef get_replacement_mapper_(x: str, y: str, tokenizer, max_len=77):\n    words_x = x.split(' ')\n    words_y = y.split(' ')\n    if len(words_x) != len(words_y):\n        raise ValueError()\n    inds_replace = [i for i in range(len(words_y)) if words_y[i] != words_x[i]]\n    inds_source = [get_word_inds(x, i, tokenizer) for i in inds_replace]\n    inds_target = [get_word_inds(y, i, tokenizer) for i in inds_replace]\n    mapper = np.zeros((max_len, max_len))\n    i = j = 0\n    cur_inds = 0\n    while i < max_len and j < max_len:\n        if cur_inds < len(inds_source) and inds_source[cur_inds][0] == i:\n            inds_source_, inds_target_ = inds_source[cur_inds], inds_target[\n                cur_inds]\n            if len(inds_source_) == len(inds_target_):\n                mapper[inds_source_, inds_target_] = 1\n            else:\n                ratio = 1 / len(inds_target_)\n                for i_t in inds_target_:\n                    mapper[inds_source_, i_t] = ratio\n            cur_inds += 1\n            i += len(inds_source_)\n            j += len(inds_target_)\n        elif cur_inds < len(inds_source):\n            mapper[i, j] = 1\n            i += 1\n            j += 1\n        else:\n            mapper[j, j] = 1\n            i += 1\n            j += 1\n\n    return torch.from_numpy(mapper).float()\n\n\ndef get_replacement_mapper(prompts, tokenizer, max_len=77):\n    x_seq = prompts[0]\n    mappers = []\n    for i in range(1, len(prompts)):\n        mapper = get_replacement_mapper_(x_seq, prompts[i], tokenizer, max_len)\n        mappers.append(mapper)\n    return torch.stack(mappers)\n"
  },
  {
    "path": "projects/prompt_to_prompt/visualize.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### A Walkthrough of DDIM inversion and Null-text inversion and Prompt-to-Prompt editing\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/mnt/wsl/PHYSICALDRIVE4/htr/mmagic\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# cd into the mmagic directory to make sure mmagic models work fine!!\\n\",\n    \"%cd ../..\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Load Stable Diffusion from MMagic\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/ssd2/priv/miniconda3/envs/mmagic/lib/python3.8/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\\n\",\n      \"  from .autonotebook import tqdm as notebook_tqdm\\n\",\n      \"Cannot initialize model with low cpu memory usage because `accelerate` was not found in the environment. Defaulting to `low_cpu_mem_usage=False`. It is strongly recommended to install `accelerate` for faster and less memory-intense model loading. You can do so with: \\n\",\n      \"```\\n\",\n      \"pip install accelerate\\n\",\n      \"```\\n\",\n      \".\\n\",\n      \"Cannot initialize model with low cpu memory usage because `accelerate` was not found in the environment. Defaulting to `low_cpu_mem_usage=False`. It is strongly recommended to install `accelerate` for faster and less memory-intense model loading. You can do so with: \\n\",\n      \"```\\n\",\n      \"pip install accelerate\\n\",\n      \"```\\n\",\n      \".\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"06/17 13:45:38 - mmengine - INFO - Creating runwayml/stable-diffusion-v1-5 by 'HuggingFace'\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/mnt/wsl/PHYSICALDRIVE4/htr/mmagic/mmagic/models/archs/wrapper.py:149: FutureWarning: Accessing config attribute `block_out_channels` directly via 'AutoencoderKL' object attribute is deprecated. Please access 'block_out_channels' over 'AutoencoderKL's config object instead, e.g. 'unet.config.block_out_channels'.\\n\",\n      \"  return getattr(self.model, name)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from mmengine import MODELS, Config\\n\",\n    \"from mmengine.registry import init_default_scope\\n\",\n    \"\\n\",\n    \"init_default_scope('mmagic')\\n\",\n    \"\\n\",\n    \"config = 'configs/stable_diffusion/stable-diffusion_ddim_denoisingunet.py'\\n\",\n    \"config = Config.fromfile(config).copy()\\n\",\n    \"# change the 'pretrained_model_path' if you have downloaded the weights manually\\n\",\n    \"# config.model.unet.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\\n\",\n    \"# config.model.vae.from_pretrained = '/path/to/your/stable-diffusion-v1-5'\\n\",\n    \"\\n\",\n    \"StableDiffuser = MODELS.build(config.model)\\n\",\n    \"StableDiffuser = StableDiffuser.to('cuda')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### VAE vs DDIM Inversion vs Null-Text Inversion\\n\",\n    \"Diffusion's inversion basically means you put an image (with or without a prompt) into a method and it will return a latent code which can be later turned back to a image with high simmilarity as the original one. Of course we want this latent code for an editing purpose, that's also why we always implement inversion methods together with the editing methods.\\n\",\n    \"\\n\",\n    \"Let's first see how ddim inversion and null-text inversion works on the same image and prompt. Note here we put the result of vae as the upper bound of the inversion result. (For further knowledge please read the original paper of null-text inversion proposed by google ：））\"\n   ]\n  },\n  {\n   \"attachments\": {},\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### 1. VAE reconstruction as the standard result\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=512x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from models import ptp_utils\\n\",\n    \"import torch\\n\",\n    \"import mmcv\\n\",\n    \"\\n\",\n    \"image = mmcv.imread('https://github.com/open-mmlab/mmagic/assets/12782558/c851dcf8-bcfa-424f-9eeb-d01a48ea7127', channel_order='rgb')\\n\",\n    \"prompt = \\\"a cat sitting next to a mirror\\\"\\n\",\n    \"# using vae to reconstruct the image\\n\",\n    \"image_tensor = ptp_utils.load_512(image).to('cuda')\\n\",\n    \"vae = StableDiffuser.vae\\n\",\n    \"with torch.no_grad():\\n\",\n    \"    vae_rec = vae(image_tensor, return_dict=False)[0]\\n\",\n    \"ptp_utils.view_images(ptp_utils.tensor_to_nparray(vae_rec))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### 2. Use ddim inversion to invert the image\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/mnt/wsl/PHYSICALDRIVE4/htr/mmagic/mmagic/models/archs/wrapper.py:149: FutureWarning: Accessing config attribute `in_channels` directly via 'UNet2DConditionModel' object attribute is deprecated. Please access 'in_channels' over 'UNet2DConditionModel's config object instead, e.g. 'unet.config.in_channels'.\\n\",\n      \"  return getattr(self.model, name)\\n\",\n      \"100%|██████████| 50/50 [00:07<00:00,  6.57it/s]\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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IlIgsceY2TDyNkuM+xvskzU6yRbcqb4FfDMyOdj7ACuI1u7CJEb87a/KwH7DCTh9X2HbVeP1rclRkXbvtZ92tt80uM+mR2bJMuIHSu+drKgPDLIbd0MjHDoANmECojYAM2ATZiRqNHQce2cQYO6IjUcGQO4dEcdxu15vNuv1bru9v71drzf3t9f36/thPgjAejMCC4rsdtvZMNuuRxBss+H49PTo9OTm9vrll1999qc/vb68nwv1DkfPnggMl69fy2Z7fXX99u7y7s0bWMzu1tv79fju9h3NhpurN0jD9fXbETs2/st/928uLh6z4PLo5Prq7Xe/+8NPHn/3r/76r69vrw6u312+ej2shgHberf9/LPPduPm/MnZu5dv1uv1uN1SHw/Ozl9/8+785GYA3G7Gr796w7M5DFsAFqd34BNpAOYvatpa34BIjjPvBdECh6+dS909UGm4B4C2UKAz43wWAEsFypahTImVxGdn7d4/JBHGhvqgY3SfAhSbefSHb1nBg9lhgBBB8wfxyRGAKVopLlmF0Hf/9xKmH4aguyoJcOJqzudBA+kwoD1jdxpwjA8ll0MLXNNihfXJazETp4sESotDCJk2od7n4vTc2Jc+t9EF6zesoS/mcSxBjBgDFhV09TCJRA0jlhSILrXUnEDEdmARM7jIKtCNTQRE8qHbwrrRnZAAszMOAQCj5ylzDwvxIWhGKShKzAz51TE2hIjCv3fbL8ZlCtljj0StOZirWKAE150KLFl7RNNCV5IoedwyWpIOFkAt5d8834RWWFHgfWFO4IQqQ1z4EPzm13tx+X2hKOT//gOj83tu7JQksrnf0BeLox5MXDA2qYJxFMMWdrO20nRXH+09dsbtblg07kwD8ThS05U+hNCo+xNDdHsWYem83WyEeRzH9fp+vd5ut/e77a6P43a722y2s9n83bub80fns8Xq5t3l5fXVwdHBarm8u7ufzeazYf746dPjg5O7t2+/+ptfvHnxZiObNszOLp790X/4Tw7nh69fvzqC4e7m8vbyzfruenu1W4/jzXrbZo3vd4R9sVq8fvN2OD54/eWLk9OzL375q6Ozk6vbm3HXX719/c3XXw6L1fHpyW/94LdevX7+8vmrF7vnvBu3m+1yNR+v7o9Xi+99+ukc6fOvvtiNcHp2/OTxRWfufff63WXHeac5wlpXdhAiSNxw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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=512x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from models.ptp import EmptyControl\\n\",\n    \"from inversions.ddim_inversion import DDIMInversion\\n\",\n    \"\\n\",\n    \"ddim_inverter = DDIMInversion(StableDiffuser)\\n\",\n    \"ddim_inverter.init_prompt(prompt)\\n\",\n    \"ddim_latents = ddim_inverter.ddim_inversion(image_tensor)\\n\",\n    \"x_t = ddim_latents[-1]\\n\",\n    \"ddim_rec, _ = ptp_utils.text2image_ldm_stable(StableDiffuser, [prompt], EmptyControl(), latent=x_t)\\n\",\n    \"ptp_utils.view_images(ddim_rec)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### 2. Use null-text inversion to invert the image\\n\",\n    \"Note null-text inversion uses the same inversion process as ddim inversion but additionally optimizes the **unconditional embedding** to make the result more similar to the original image.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"  0%|          | 0/500 [00:00<?, ?it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 500/500 [02:21<00:00,  3.54it/s]\\n\",\n      \"100%|██████████| 50/50 [00:07<00:00,  6.51it/s]\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=512x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from inversions.null_text_inversion import NullTextInversion\\n\",\n    \"null_inverter = NullTextInversion(StableDiffuser)\\n\",\n    \"null_inverter.init_prompt(prompt)\\n\",\n    \"uncond_embeddings = null_inverter.null_optimization(ddim_latents, num_inner_steps=10, epsilon=1e-5)\\n\",\n    \"null_text_rec, _ = ptp_utils.text2image_ldm_stable(StableDiffuser, [prompt], EmptyControl(), latent=x_t, uncond_embeddings=uncond_embeddings)\\n\",\n    \"ptp_utils.view_images(null_text_rec)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### 4. Conclusion\\n\",\n    \"Let's put all these results together and it's obvious to see that null-text inversion is better than ddim inversion.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAABhQAAAIACAIAAADlhhG9AAEAAElEQVR4nJz9y7Iky5EtiK2lZh575+s88Cqg+jar+t4W6S+kkNMeUKSFv8Ev4JS/QE445aTvvagCcHBe+c7cEa66OFBVc488AIrCgODk3rEj3M3N1FSXLn0Y/4//6/9GDIE0g0CCAmmCSAIAQBJQ/SCRlu9CQn+IBEDlJZTfJSCQEgieP2NmUF1ZUv8JAGkmBTmkMKu/5qX6Iuz79agAnS8FAXU5kJIIQBJz/Fgvne4ryUhAJHX6DEEg36Cg0/cpycwUsSaqbneeN60vKB8/byyeJpiEZORx6bxUiFb/hdRj6bHn8+bahE5/zPmvD7LmH8f9pPXYx/3UM4Lz5OWUEkDkCEPgMeP9seOS9W/esm8lpVyc5rIkIu8oEqRJyv+aQREAaDw/FE4zqwgjQ2FjQBJgSMnhMYPHQMUWuV4X1bCBiIjb9dP7N29++NN3//bf3v78l+un94gn0o3y283G2PcdsLykSAZAyWNeJjEEGA0MghExhu27CIEWHpAi5SrlMAJQBDhySAIhyYyIoI0lVyCMg6QUhBlBM/d6Rkk0IwI0SRJ9322YoDENYAhmU+FGQLAxBUSIhmEWEWNQgZx295iDHjttABSg3QMB1bBBML9lBspsQKBRQY8gIGnfbxEacwoS4uGyjVzQsZEmeQlJBKB8TAJ+ezJCsQvyfZdfaVAoZWXYBCgBiiVpBMIVEgi/xdPV37/9tANPT7ftwb766uHVqweYjbGFByL2/TbGJgiC0RDa3bdthHzYIERqwHKP7R4KSQrfMSz8ynGBoMgdJDOr3REBcgwC2PcIEJAh95u5O23QEBFGc7+FRBhIIYAB1NSBUhw7ZxD7LhsEYGRKHIdFwMwE7vsud87ttu9GSvvlMsYYcIg0MiIEKvZhBhhDZhYQZCL99jQuGzmM8//+//qv+Puv//P/5f+a1gFrV93pi7+tRY6XeuOWMmhlUabhpHOOa/zdV6v1+nqqGp2/f1L8p7f19wZ8/9W/8YHjeud7tkrsh/v7wz1fph72bFpY2x/oq+NvDvUXk7LuDuBuSOc7nizPL//49wb9/8vr760z//+99Nnq/L3p7L8ehubv3In3v/zC2LHs+BdPEWZmwMM2H7dBAfI57DLGGDTats05bJht2wbCaBKu1ye5KzzcSxQkkqRBIqDY3/34x//9//n/2D7/NW5XciCwQEqaZuMCOVD9pLOdX7ZZAk7WHCWPCQPqU0vWdffdvzut55e++LdmU1DvtSW9ykuLPcdYhjplT+fVzO9ZjotkD56CDoh36APdrw2lwNouWCO6H8tp7Pm3tbvOkGzN9No1a+rXtPJ8rbM86e6tsuYJGgWd5EqNQs86jvVxW2gzJIE34WnXj5/iL2/395+1XfA//3r+6vn2uHGQUigERc5TqQjCaiQUZOuWDc6FGGYhi1C4sz5NgoqYRkC0QlwEFEEidkT+MgYx9vH4f/t///illJxe/6f/9X8jRgC0FPgyWMKB1MxY0kNiOQL1Jnu/MAdfn2k3ISFTfaWUnsws1yovkhKVAmNmCoEmxGlb9UWXV7Jw+EKyCbMXIuz/93KngJdfcFgd9hJIbAuZMvClnJS5OwDo+fHTHWBr7Pw6l3XosZy8id6QDWVPewMHOGxnpNyE5QpBKLC9zHLfnCWZfYPDmnJt9bOFPc3kvbFcht5U0rXchmOkfdmTK3Ge8eO6IM5+2LEl87FJ6xnLWYqcBS6X6pBAncRBNqyNLiHR2BN4cl+X23hcXyQiBMnd96eP79789PN3//b9n//4/s33t88fqCvpw7TfbmbjdruhUF+hPEKQ5jbJYUbCAJmNUJAWeyhRvefkudakRQiIkA3rlaTkRqNEs9wF4UHCxijhBM0ItDykeBiZt5MAuruRosYYLZ9DCkCWnrMxNfYc6TtYolkpwmPO4eG0UdbHIxAK5APkls9vATKbUphZBCKCpEK32y0ixmWLCEJj2JxjjC0Cl4cHhefa+X6bc4aUTuXt+tkQ4VfAw/fw6xgWHgREGAdAhdAKIQVJrhBA7Dd/evK3bz+58Pm6Pzwfv/7Vs1cvn4k0GxFixO43sw1SKIYNhPbdxzQghtkg3W/b2DxkpHuEBIW7w0bEDZxM98wMko2UJUMEgDEowF3KrYccl3nIaDR4+DALDw8njaQIwADs7tNMCIUo2RzuGuQeYSn9hLEVF0lYAL57+D627XbzORnhD5cJ0G/OMQwgGUL4bYwhERFjjrTgIvbr07xcIIzt2VSM2g+K0gC0ss8s1bxAAy3FPlrZiGZYqKLMRlo5gcVsJPfBhfoEIAoKWYESCWYmhco3dgryoFn6jUimIJGHQBuSn4HXIicSxC0ex3KoKfhpY8rWKLcWap4RHgRhJ81/oAslIkwJPqyFxLLagigTS70EQSiSDWn1tNSYqONbC8Cs8aSiZNkOlZFsTHKYhDSUABQUC3NRUiqftiKpeUPrWQC7c76+4JKiQWOuXYEsoSx3MAmFnOo274QVmoSQlrjNLxd/d0BZ8sRKQASDQG3yiJqsaEygXMGWM8sZihQSlJ1wrLuwbCgEMFogi/pURNKjERpmY85heHj47atvvv3df/rP7978+OOf/9tP3/3bxzff3z5/mtsWvm/bhATD9enmUuw+LmPOebvFvAyAO8DgnGPadPcxpruTNi9DLgtxEoA8MBAepIyQUSERCpc45yYBxmQL0vqSJAfJYaaQmeXqm1EAOGiEhxnNRlEuKsUBiRxLiYTSClhKSCNQEzjnRe7EHDZC8JubjZnUFeB7kHRJwvUac5sEhw0AMBuG/XqbY2AyhNt+szER2HdiDDO6Y9sGRN18bgbabb8ROR4jJqAx5u43M4QU+xNgc87ayWR4JC6z0cYWZAjS9jjnRZeHy3X3t+8/ffj06S8/fPzrm6fffft8UM8fJzAGLVzbHBFBgcaLbZAog5L7Y0DTBhAPY1yvDpI2BZld3N0GOdIUCiQMIoODoAtSjO0CV4QAWFp2jtgRQMCK5YvAIG0YGaG0YOEhxdgmAMIihLkN0+4e7sMAwWjh2LYJmJGXOdxCxJzmEb7LfTMbtGGEUQbfPYwzfTHnSG7MPemzSUAWcbvhH780m32W7lTF32QQTp7X6d1+q3fkGUAufdDuxilYcP5hYfXTF5oNPwDtQtb3l/ubxNAXo+Tdh/g37hg4jQ8oXfc3KIwD2q+r6ex3ttZdoH/x7s0KfXHZX0zryTtbk3m4EMfHDxX8xUfiyyuePYK//VDnH/klaca7jyyTJv6NKx3jO9MEZyLtly+e5KId6L/zOl+iaYrTjZc86c7pEUIBct/dbRgFKUI73MYmyMNTdm2YmYXCzMYYt30vBIBkhHNwkXNtNh+eff31r37/7o8/UlNmoVg+WaCFVW3bl4lv27jkfxl9JQAqHIK6xprE6KnEL+X+TjgOU9xTjNpKHZfKgE6o3z3g0BfXLxu+FpPrwY6VSgCCJqGSOoEY5UAKYDTwSHii8ugK0MEQyyUG5EkhsMk4YVGFOh69Aciy/0sYcpt+8Uj1OCcROrRKkRqNxdYmyAHk06s+s3RAx/FqvVgzI4QpXDDI6Y4I2zV38xERukBUKOBGRMgyemcWIWT0SqiQoiBbT5e0EOAWOQ0kxHDZSPkVAHdZwTMKpdhS6hS1RFe/Dd/xD1/SaHCbYrcUcmlkEuEN2WzRXx2yaoBaeLCxK4sBo5bvQC59q4icZwZZYFccRCSSIuDs9VLUJGSssRwBG2pXorZY5FCiV8qKcDkLilJubT1FGxeSKY3Ni6bfdBYitcd+9h3qg1G+QxKQZlCwryv1ZljkHIB8Sy3nxSRy6RI0GZTeApHRZXKNISKvAgARZ+4JkiJyGDps09pXKXY9tlJQJ0ZfS3skTxG1hxTDxtnfaRep5EQrbF/zcwcw1lwfmrs2czqYkRM4SKWiTmwJmlku+nLCrLSoAMThO4gor1TFZiZVF0C/k08dIpkwb4wx5ti28fz5i1//9vf//D/9L29++u6n7/74+vs/fXz7456+w75fLhskV9yuN0m3fR/bmNOuNx+TcoxBRdjAtBEucChIcm6UYD7SeY4ImDxUvkOtI4Eh0OaoySczLJ3ubz7KGCOiqTrJBiXABklTgEabqVs6IsCyYMXgstxeMwkKyNI8SKCNLVfCbEiIm5vZoHGYJPcA4FIIftWcg+AYmxLLEvvtNsfExdzD3Tlm3G6kuWdAh/sel7n57WZmHJvvYcZwSUCYILNNIDwUY993mo3yHZbjSyeGWQpAgNiD5PYwtk2Xh4cn31+//fTh46cPf9q3y+c//OaFcXv2MAQyNoW2baRgctoYQ1I4iBHiGCOgOYcUl7ldrzdwwkKC2fR9tzkSAioAGgganUYwXdaxbe6SgjQbqU2ZWD1pFJDDDEbSANvdUz+6I1zbZQsJ6SBCc7vsu/ttH8Mcqeo55iBtgGMOtxnU3CwiJLv5GMZxeQz3uTF2J0RMCaCFDQBj0PeAODglcTO/fp5tvxltcBNFtYLLB0Ztn4giI6yI/3SAUvxIWCuGUjuLLyoFCZodilMIxQqiRAQEGgNAiBAtCSMDLAfZ4LtMTlQGz9J7BdpOPJKabMJyfKSQZGYoJZXvgjw0IVnxrmIiFuJna7aONJbSzDlBM0mld0iqr7YeWpm/k89Dsy9QHXrekjGp/XxSqFzKsz6iol+KIKgFKjy5SJTDmq1pbDNzVtR18QN3q403Ekvml6yBWA+svthvJlu9HLg1mNQ2aWeTv2d9jmWnc6YyCCBIiIhUhEf4Y+FQsn6vRJ++Zyr+Mva9ePkwcpT1FWGBsEjUT9m8vHj17eOLl9/87tvf/Zef/vrvr7//75/e/eQf3/i+CzLH3B6m5EO32/75egN4u10ts4IGfQ8bRhDYyREugGNYdE7e2GZEJB2WjyYi3I2m0K3gRaTaToQXEgUYXDHGGLkiGIDCQxJDZmUmIJkNghGeGSg0yMMFC8hoZklea6TuKLMdoBkrCZHYtuEeVqtAm2UrdveRgw/s2s2G4GOMbZuhmNu27/7w8Oix77dQXN1uj5dngXCHmY1tADKzy7bt4Ybh+y1cQMDSajHRlBk9nJwJKYcRFT9FlAyiMqcgAPNiMH7z9cvLw+XT5+vbj5///S9vXzx/+HTdXj1/NrdpQEDjMsP3DLeSGBrkiIjYg+z5h2yaS9t2SVXEfQcB+L5nMEjyUhUGKcKGBWJy0OTuya+amV0gAYF9F8HK41IQo0JDdI2hMAABi32H8Xq9bnMbpM0JuGVc1+UeMjHX0GgGDuMu7LbfHBKGHrcZEWOuRLvh7kL4zkAwFcJG95AZ4z9wD5DbNMFpq6jlNZVaOCjvpWDXt9tZutNvrS0OYHpSP1z3bW+hP3rnCbfnV4rtRNaUWughHffF0lj33q1OSgyHN1Nqva50GIqzi4y7q9ef28k8jZdcRD3Wd9Mu3I27n/R82ZP7rdOvuvtWz2VZgsN/OdZspdt0bP98i2NFlydw92znOUzAzvOsrt/WXPHuS194AuuHUvLH7/cPfn7gM51yf71f3uEXk3W+3996r28rRbjvnGa0iAgOd7cxLO16RISPhHDEMNM2fd+dkaF8pakCzRhy0rbLs8ff/MvP3/3X+ek9dp+jk48y/mHKddGar0zvzTk8fKYKXS3RTQWGDt2XUSZxcnuFwzk7hPHk6ZGLNF2pH1j4SWsnWE3biaW6k84cdnNf/dty4BMt5UNW6MtgGfI+kCIAjkT6BCpO2bfgusYhepX+Xq6NosdV2//0pC1aa94OZiFRk47w3XmWCrYdoLCvlHo/H4lE9BhOCK4ADJtGYC1QvZMzOciMvXiQmoO2Y1baP6zEQmWFw3DK60ktRyV1FDSCTIaIhEarl5wWY7pqSOdYKgBfCw/B5J5prgGQxgHGF3vsy5c6Qhmh4gLIhnMNH1tdhYdKN8k4aA3Oy3dYyK0Fp+PKCd2onNKeUSFKPkQyXIKsvZgmQJM8KAdHa/kiwPYd1sYvgVlGrAmHpdxKe4aiQuYl9Cd1HStSq0LlDdYPo0j2XtMiQtpkNJ1Vc8fG0GdWtHL/1x4RctMctoUt200eoi8SvVmNitp+a+KZUVZBJ+tZOqhXZhFYPcs5zgMbnOwRy3WhAU5YJGN1zPCyRJ2V2FerRAMdIYokK8p4c934tL9TPaf5sWUilDnkYGcMCOGO+0XO0LYtz7TeTJqpbsXlYxHI7ArQO45OG7bZi28vz15+/c1v/tPbH3/46fs/vf7+3z6+/XH3t0rfgXZ5eFRouzzut9t+CwV83wHetCcU3C2MpIXZSHLErDxEknMzJY/sASHCq7KBVGiXl3IpsUkbFAxwmIdbxnqBzHFATU2l/8Noq9AhHOX/JpVAGxbtMqOTm9r7Y+XSjJELkhHNUen5RhpBU5AdMAml7xDUsPQdNMcEfWBIsZvtt1v4jgibE+A1fJuThGEYKIqcvu+yEe6Re5WpMolMpLKZUjVWHk5WfVAAxszFlYh5Mfj81bcvHx8vHz49vfv09F//+PNXr569fPHw4tnD3AYhz+T9CAqDRqMMlEmVCrDLQbjHmMOly/aApOnHUEIHdwHw6ChLCqQ4LBB5TXeVkiOHUVIE9pvbMI8YqLD5nANCGKUw2yQA5nuUCiKGDW7MfGpJ4UFPl2TQaLBhcInA7XbbQ2GcD2bU7jE3g6dbPlSZblDsqbrHZdz2nUHJZ7rdXPqi83QAVgrSObkHh69uYQd+tnLOS7MZmyEJdqJ1qcRO+qidr4UKRUKEQjBYOmUulIU7XaF8kVNKVJvuVl4LcR0q6aTKlzPSFwSayFjogQfh0R9jh5IampSNyHmpf7Ww6Lrxukab6db+RZm0c6K7abpDuEnYneKI7P831NeBrPP90IKVVSRYEZi8WeR3u3TrRJYdU1C2sCaVo/JWeNyLLS6H6WgTezx2WuQyJG1U1pSmY4zK1K2oi6CIYyaTiNIv5mUZ1NOycVltof9lUVLksQhl700A93ASXvNsNsbjy68eH19885vfvnvzf3jzw19e//jv737+y+cPbxE7FMr8nLHtvst123cIe+xx9W2b2JkTPqaMDCcEs9RVogoRjjEUCjCAweHuNNBo5O4uBYJBGm2MgfCE3VF1k5bLZZlFZYAQrpwp391oEIKyzGQBEy0pAPko6JP0ZhVVCQ4yE79zVq23XqgWY7NBwCMUQWO4h0AzuRsNIIVtjKfbbY4xLtz3W0Q8PX3etu12vV3mDOOcIyIkDRuZPBvG/bZbib8IjrntNzcDxzLbBiDZZIJSHJmFKNfhYZuD++Xls8eHy7Nnz96+/fj0+en6tO97fPXq2Ta2Oei7ctJGVjtKYGb4y90ho2nt01vscwzCtnkJ30nOy9x3z6QhZVQ8SikxGBZYGWEBWWTJWIZ3zQYGdvfNaKDEUGxjeEQYw2MYgwyFIpN5LeMXVfww6LedY4phHAR0i3kZNsZ4sOt1h0h3TVJijGl0j2jXqOSEOcMm0G8xIvCPX006qPyvtdV6tXLJbGnlVtZqXc2lGs7fa8V3DnkeyjDV+50e+aKU5ReDbAugZU1WmsHB2/PIAerxC+sB6wZtKJaa6vdqICc1zbv/HjnywAmBn3yJgy4rM3t69IOjx4pj3N+476/DIVnuB+8+lZvmgOj1nEvba5mCE713nrDW0jVEnpapoOKpKmSNVv2wOM8FcZ6J09vLuz8udMjD2a7m+px8hrsPNXo9vcpc8pjVnuQ7a1HCsKg0QQ7d3G0YoGEMKUKY6b1kkVV4uMEGDYSZpZYGAxFp/8vDhwm6XLavf/Xrt19/+3R7j72ZncoPUlFFJKJ5ljSXPSUr42cl6PB4RJzFRue1Er4Q0iVNp0VZ79dO7qWobx6Ek9bifPk6VrrdrdBSF4ULqDXfyyijwj8gOiUcVk5wWuflx9V6tSPcbM6x/lYCvFIasIbK/oz658YvVMgS8tmhbU5ztDZOLUnl5xxsEAgoqpYd5wGz4cqSrfxSLhHtTlwpRYYOBA9EjAEyhhkt4GKgtykgJZg2rHQsnAZd86K0QQ6kmbGexVItTONU2SiZJBu55YkMcQSo4H9kHUJiqNwElNFEO42VanYvL7V+p3+zrq2iiCoCKqCsNigTERCYxGIH40+JTp1SER6wQl9yJWGAhs4tRSV4+fhaAt8yV9qr9Vh/iU2utjpp86fu57BcQnW2zXkb8vhKD6GJ0zNLpZOBkmSFp5dw6Z5f15czvLR2W4dzfUVZlhK8JZn95O07NIkMVCuPqqUBAB2KvdBaVwFkDJK9wzNJsKkFJg+y6tdqb/Bku5rlOhjqLx6SC7s3ru+V0HlKskzqS/SQEpSLkMxJFTSs5ceRFJobWG1D1fYO5Zt7oBJylMVKme9Ps7FdXn7z8OLlq1/97vdv3/zrmx/+8vMPf3r3858/f3jL2AHRMGlzbCHXHtfbjUYP990zGygI7RpjmBk9MyhWbVA1lhlzxh42ElcmcxKgmSGJFJIiQxn1CFXSUdK7RkBeqpuZEZLrVsU9WeuDbiRCARmuDXcajaZSuYnD6YLR0umAVBYwL+6RLnz5DvQkp8MjkvKWVyhX2Ma43m5m9rBddt5ut92xR8T2cEl4vm2TmSESSl8pDHETluIwgyx2jVHANcdTxbzNXvSTMTlNQo9zDvrDq2fPHh9ePPd37z5+eP/0+fP+9JV/89WzaZMjEzZBgET21TAiCBMqCk/ayG0L9xi0wTHndN9pwtj23UMKV/bkAeC+U2IXDo3MyAlxAKKV1TAE55z77huZcxuRvgPCkr1K0i8oKdw4Byy1BQEY99t1m5dQjGEktMd2GQ6Mx4fr1Y2G3TmBEILDJsI93SuPiKDJDJYbZ8zbzYf7zEwjDweVOX5GZu5RRGR6Z2l7LTUmCJHFkkhykd2kRBJG0rMNfKxUuwAkZ1/kfGRVElqPEOWmngrlkMqrLKVxCJ1etEwmm/FKcWwdigXHaQvsHp9tJQoopMHBGugZdHaZaHFhaO1SRmUBquTo62cz9aCNrYHaVrW9XMmZySN19nVdzQq2HIQQ2p/AsmKnh2jblHNMY9fFLRCYWp41AyBwpO+uGanGS8WdVWk6mHI0RjKRKalZDGZF9ZbRW14H1ip0TEkV3+PpQYA2IpVDrJBWfOneT6ihdWSmso57/RqZal2841UVxkgTXR4dexJVvo8AYxYXIQR3J7E9f/7b58+//tVvfvf+X17/+Jcf//rH9z//9fO7n6Xw/Qpw2GYT2+Xi7lNy36VU5i5A1z2nfV5GajwzU9DMYo9QZAbjMMpooxOwM1rmaVNF0n0nSERNckDZoYMmRTKxuTcyxV1KviFBqhQOmO8+pkWmm7gzu0qREsawcJllGpTCY20FswHkZ8PMkmWbw1TNmgwEwkWTJeaLYfbwMK5PtzHswnl9utlAxD7GSKzpYTQjtN9iZtEgYJfL7jfIyZBBijksAh5OwWyE3CwTMC38CsAFkINLfKBwQoI/XsbDNp5t24cPTx8/fXz75vP16fby5bNnj5eHuY3LgOwWgXASBlBOw+SIyluPINIuCiP8ZoM2kBXpDw+bh/zmNIQidgWRTbDSjisi83XTrFTJNwsubtuQYvfI4rU9wgYn4LSI3QYU3CYjPBuk0CTIxtDNRxW6y2MfY8i0+z7MxrQHbn7bJe2369zmrn3YGNMo7YQ8Kp40DSEaYMDOTJD/By8CxUTg0EOlG++YGCwXiedvnupwT7rqfFOrEr+T71u4/cSuNMbsjGoUAD1rm8OZIk7+6oGVlYT6OdElPapFHqxLrQstL/Zu0IUo8z4sfNLDPPwFHd9b7r2OqEF9VGge/wCqS0l96bI35ll24aRtv3zi+nir2BzTccn7C69IxpcXWvOH5eictPLhd1mFwYvbKoppuTpn9qm/su5zpoXWTN/9gvOD1rwfEvULF+qw0UVHrQnHWpi8cbmw7WRBgEd4iEb3oCEiK1WFAXqIQ4bwMKs+d9WfDoaBLEwKBYUxRriD4/nLr7/+7b989/oHw8fYNer5OvpFAJE0dI5dCnbeYGZJnF+VtozVaVGL+8vvFmfR5OziBMsuVvx+2dbFckrKREqRldt7EoA2qbVSzHghV9ArJ7LljDmSVAK2yuuK2TqxhOLIjWxSVIzJSpt2oX1xqe1lCwCqE4K639+ZUMVSTGrOsVzJKsVgf0g2jmdfj6u0eT3aWiJbfy3cQAqGQ/EUwODK+FiArLViithR/nr42nkjgOCAJhNKB1FwKGcjkVq682ChtUNJlt9dOp2DNaWW7Q8BQ2b1I0NLxe9QK80zn2tk7G7p/X/wymQPB5W9/LpiCY7yHTLJhWaxmulIXtYbAAOQwjqvzYxVoMViKE6KqhdZaiAtVVIJ8yJIVqgnE9UlJv0FEyPT+qx5h5SsRJ7lO6T5UatX8mBfevyHNKNpELOlmA7foQnNFYUF0TmEKDSa2vKkR0u19X0VyJSh8AR+bGknkbUe6cNbuwVWD1Ab7RQx+KWqbNEsf0YcZr1rEgxBkPGoF5EqAaeLBKvwLlXKIqJW4mB4Ydpwb940hb/nYdl6nvyC2josrhO2LB6bhj39DgkRqqjo2niRNZDJd1QzDXWKQC+jag+esp+OiF27ZnHkKoqQHNk+Ypi5YvQm9QiINHt49fJ3L15+8+vf/u6f/+XnH7/76bs/vvvpu0/vf1Z4xJ5KYW7buGxShGvfd/VjQArdgoQw5jBzAjZMEek72CAHEbDBMWZEADPC0SWyRbEa3Hcr8jhSg2dYklUfWVo60/yyrghmmd+SSFhgeNhgBIzKTZRzFxE2RpGnimpgZMj+SgXsDFLYmLu7ERxDlnJlIBSu7PlECmG0y2Ver1cz2+ZcWjVuN5tbRHiEmSX3lGp9mOEyPCS/QWHGCJTvAAeQgWGzXCkodvT2GLCsEhMQvifr8XgZj9t4ftk+fri++/D+9c8fnz5dv/rq+bOH7eGycXK/7R4+DIoE5ByTdItQpi6o7RTHUHj6DrlDHh43d/keSP7HZZkwkbOfLkymj4KgRTiZrodCsV1M4dlbygb38DE4jPuNCg+FDUqh8Mg+VVbwSrvmGMrknPAxTdC+3+YcsvFA2687BHefc7h82rQxlIUzFC0z2I62cAQVNj3CBGVnu5AKeDPcc+fmbNCy7CP9NAbCZEVtlwasDnyj0pCCmQWLhel/YYq0EA0EFYWdvlsyHUSovLLyGzMjpdHHAs+BKl5tZZfGh22jga5JV+atJY+TUwM7ME3KOw64uWgdNuY+6187VDaXZi6VaudwsGyYh7N9XWaDZ6iN0IG3UQAFiNKwZ/Qv4CgOzK8364ryFngKGpYrdngmJU0FTXkHPwo85A+p13OGxzCEzEyG6M5CqYM6OzZ/Wq5fcTgnEqhFQB2YbWWtilkg2/r2zsHi/Zq/Y6LSBPltbNacldavRWq3rrEAQHCF17TwyQEikvtNiFNpyULQtscX8+HxxdfffPPb37/96a8/fvfv715/9/ndW8VV2Qw79jkHAW0j2+hlSqd79gjifnPQIZnRaEaOUdk3NZ6UrqT8oWGW+7VywTpDmy4PR1Z6agY8U76tQ4YeqbjkO7J5EEBJZshEJ1aZtxBV2S4hTAPmtx2o1obaHWMQDGoQYmUh2bCIqgYcME7bd6cYIcltDMtEStrDdnE5jPMyr7dbT2mikITGnGZlKCmDPYzt5snXwDQyx94jIkIenKaAMEQYNlgxxVkKQZq7z2EOmuAShcdH2+azbZvz6enDxw/76w9Pj/uz548vYptzjjGNFu7qlg9k5thaKHzfjRaubOOtkEyrhJtkM3GTUzPDF8PcAx4cm8sBugdLh0JAdS53CQgX5BwZfYBgMGM4Z4YeRq5/rqkNC2HYyNRIRcjTX6KlHxkx5szpkiKDHjBGBIFhw2CBhEBInC2vzl9f6uS/8+qdspD84npOFIOOnZhbcGHwO/W2IGI11+NpH7bbxwb8p+3NDgcuBdx+cHMpSyGceIMFFbnu0ZqpVdJp0K3Z0Nof578fj7oUcmdjnaxCj/P4bo9Ov7zSYnfyCtUZpBmm9eV16RNlcmK9Tu5BT0tPIO4XZa3MeojG/b94zvLXj7cWSXE3FdlKM5+hnKfTWI7FO9+jW5ncX6ox/3nUah2+ZCiRWWP7Y36Kpbw30FgGaK3GcdNCHo0m8tYmyD0GR8llGoUAWjmYOMaQghxmNuZQawxRkhsMVChoRtrcXrz8+vevX3z7+ecPAyBSOVv7P+mOxumpq992DVftcHX/lzZfvdIqPFMwp2DK3eTmFZYuOuEY9rbtbYJjIwt37bF6CVKJ9JrgyJdge+2IhkbrezWMY+REbZ+y1HXVhUiU1Ro4YkQneckM3HqSJi3YrGvPwfGwC46pwN8hCrnv+r2VdFLz0GJ8n/lMVIBNDd0WUmxWLLPQiuY8dJY1okvQERKp7CxCNgCjDat6D6FQQTFF4OJji1irFauNszov55xY1THmo7Eyug84WEndRd7BMvmLIiX7BTP9xcvD85GzT25UX6FIo1bhvUjKIFcxz+LIIOGyPiThIITB0WQaVqEQCpqdVTGrUi8X6+BDewzluYSj8pUyAQNYj774yuqIWQ2YKiB26N7yHdgOeP28AKS1VT1prdM4l0dw8oRqt2bGCtsJqpVn4eGTtOWWjw7+gizfYYUQ0IAdS6DrAUunHVryRCX1PuO5O2o+2qExpW47W/c+M2YHm7weo+7RuqH7P85tc2N4dqvJViRL3QPZlbme9ljk9u9qk6l7TuWJBfmU6o00ev+V5RMwukXRYblSwaNHfnBWEb7g0Fqsg3gvZ5OpWC0RS65Lpz6pqY1UWTS7PHt5eXj26ptf/ep3f3jz0/c/ffdvb3/+y6d3r+P2hEx/CgfHnJjbQCiQ0C7SdwARodCOEMMMSRoMv3k2IwoPmmUKldmEAKuqTFUkU57cRCjg0EqNpfWWynms/g9S9oE6VKeRZLiYnZ5iJxkRNqiARwzajqxC3iXI3cYYNgKVd5KLOGf1nxZtmIHuHkBi7PYdEAZ72C6BQGDMedtvCrdhoZicSh8nXaSlgWnThsuhEaHBjQYg9thZRVKmJAhAw8SQIoYxi85IC485LECBLkF6fLSH+Wxu88PT5/cfP1x/ePvi5bMXzx9fPl62bSOBXKcgpKTNbYw8BmjfbynklfPisIncRB4iMbbstjFJTYykKmMPSrKZzJxc0G4cvQ5hQGRhWojCsK5C3jHm8Ft29kj3XKUKARtDwLSZvT5SI2qPjMQnHz3nTBdHrdhSRVzGdrvtY8ybk0OeZd4hBSO4VUfVuz0qqhpmpzppaj83SMSRfh9t1csCVKx+4YgiLrt1S1QrpVJvCzuqA0OVm1NdE+WVtxORJCxTExxKa5mfg/ZevkphKTBDD0yLVhRBKSC2Jrr3hHJUXTy99D6ONNf1fElaZRGKmiNndTvCKr4tqocFdg8zwnUv1qxJTcCE1lhaK6sNwzJO6nnupk5FXFUysHqBknztVa4Y2UlDLH29nBatoSbZNbZZyqUjSLkOZs0fCYcurkGq0GEzPoeMHY8lNu5Xj+d0yt5hS9ShsPswf81si1JHNUOs2IgOU1AInMtMF79i7BiF1VIWJ2fIhkuQze3Vr37z/NU33/7mf3zz819//v5Pb3/67tObH2N/Shyj2AcQhI2Bbcojtkv4ntk25fHfPEwcvHnFh41WSOkoFUnTpJHnJwCOVP65EIIMSBRYa5n5MhxingEBkAjfM02PACKymjki8ll932GM2BGgCFm42xwI7AiFjzmHzUpjJR2xjQcPEXBoNF27zVn8i6TdI6OPk8GYNjxkgYeNt+ttf9o5/HK5OPfEg5GgUth9B8IGDKzyLtwSJlvQk/K63YLDpkgiyIHBUbniAVgYod2Z2QAKDnO5DC9fze2Bzx7m+4+fPn28fvq8Pz3bXrx8fP542ch5uTCZ7gjXzoKw3LZLuCf/gorQhLsT0BidnG8KDrMQOCeBbQ6Zh2CCXDS4x7BRqV6q/bLvQp0W5wHNeWk4w3CfYwQxYTAiMmAWcnaEFWZ0991FA2lzm2T4DjPzCDkVcYML2OYGQHGr9pe06oS1B7N5YPaY/wcvdqZC7dL2pU4b8OTHYyHXduFqrxKNJ1vN1G5tf7DZ7Ibg0sLwWl8prXX41WqdgwNqcpWxnJXEXRXcwZ4fl28ds56jqZNlGU6a/4gSHFqoJ+teQS+Dt5zu833rAlW5y/uvtN463+IgthbuWxN8PMwa5rrPgYaFIy8LWmHYu+dYqvjeeeyb2OHr9DPzFGdak7wG1JbmQAsF3ZeXsobK5VJgTfPpQZYPgMo8WQJwMt3HFXgeiO6ectnfCiXUlCd+8ojAZNb+A0MCLeQSiT4hRAEboFkFt4nsGBrIZnOgzMbut23Mx1e/evzqd59f/4W6peOaaAYl5Q5Qp/11zNkxxWiHD6xcp9wLLYzl1t09IFBOSkEFNdg7wZ4TaGoJPjF/PTVnyWJ767WpddwvL5H7pl3hlrre0vVxSU025s5erMh61r5qubvHGL7YGgedyKJU1mqv4deQz7xYzn7nPhy0Y+Ph07M1s3Nan0OY8qGj9QMLZkh5KsUSvFIFS+KL0chOHA2uKoZB9sE1ILvDcWqR7K7ZpDHqE2u7Kbe51vKkhGdUMRFwd5okeRQiHQRZl3T8Rz2PakAR8jwMVtlzSwhmkpM4rA63IKDw8rxbOSf6YuYNJfgXj2N5yKR4CEYevpzTphZmlWAVxC5qkvLIw2mXglBkRyeuI6JWr9FOhhEyoa6XaBHVpwWvqUWd7ZtfQRX91N6oBOQ2VS3VOsFkiEVmFaSrrcue+4byWfqq1QgMuZkWrm+Hg1jC0+PH4n1Vrtaxq7UGwgreqVA6wCJotGoFVspYinYHaJd5WEqAYEUFioTJ0p7M0OG+h/K8kdZBViVRqTOiEE5gsZ9YbFkJWzlwfVuwPtdZUmXqEtqXcs2H7bqHUisL0JxgzLI6mdSp9BVrwkpS03HIcSO7VqPIRyOyL3u2LKOURIRs27761W+ff/XNr3/7n978/P3P3//pzY9//vjmR79+qt5A2gkEtNHwYIqQLuF7AkIgHLtue5hBCgYDmfHKMeTRSXNFhrJyNgyCZzP0CMs9VR1CA6zM1XrmMWq1co1j76Pf0m4wT2c2Ys+yK+bRKyTpGY2exS4oQgqYzEbGTgPabHhk0qMMdDmJOWfsXqyVZ0MgciYBYRqYgNFut1vsEXtExKzslUpVgrKb685cHBFmiD3FZjg9q91it7HVjgmAnLaFoprJDgxD7J4nC5GBYSHf6a9ejcvD4/PH7d2Hj+/ffvrw4enp5ePLV89ePF6mjcvD1i0OFbGnRh9mY7soQiMlzUPwPep0L7NMkDOOCI1hkDjHADCoat6UikEK72BPihK2YbdbDGTRn0TNcQlmz3tImmY2Z8p15KHR4QR3IaMRgLl2vyHMaTYGgdhdHIY9EJRij2vMIDnnBgtkmi/NXEm00ZDU70yCikWmpcqJkXvGitYNZJbRsbXSLubhczqOPEyrn5t8VDOQyFa4qSVDsmrHo2VT6rq2AstSEjukdZFahtirP8tBHymQxat9lEd+XQgVmb1Uf3s1XY4LwuWGsU7jysS5xrmpamwREwdAZ0EfNv9yWJg7SqMIiGqDJ52tM9bxPmzAliaEOgzFunQruv4Yz7esxwMkGaorZWrY7nwkANH1g610G4meQP4iHQs2ZvYiCfJ628ew/baPOQIHmIse1eG9rVB202Xt9SU+AZFVnYWoykL1I+ewe56OFIF6zIWY+tz0hmTNTBILi9Vl1xSy5qGkkeu2PYasPmjUIETqqaR4SGwP22W7vPjq1W9+/4e3r3/+6bs/vfnx3z68+X7//J5jEprZZD0EctLEqRRtYN/3TCYKZOStm4UHySr6Uu0CmFU70YCM3MOZVdACTB6VEJ48ZeXgWBaQMTl2yWUGyCMMlvXOgcxOCUj7dc/ogclu+27g1bMq2yIUccWDUQmnKMl1Ays1nXl4Sp1EARt0r8B3dBPYPFrycpn7bcd2CUSEu9/A2c0Lh8FIbWPebk+53FT2MmdtYYNAqWJoeZ6o0SCrQ54FUOFZFdiZmRDdSU6jDU0bjw/j2cP27v3149On9x9vt/329Hh58fzyiMtmE5B7BAN4MrwYGACM3KVM6x3DvGIycnez4bsPmwlcEgwze1RAAR820mqbEVbVfRFQ9rHKWk8hIoK67XtaESNUwZA06DmAhsVd/jHnDMhCEXvAoRhj5AkSKSCZqL/vNwDTpoHD4FG+FYqcdRtmGviHr3JhUkOUR1KbuB0xnWiMk9PZ/za8by3DMw+DxUGfvtVf6gEsWN3MAttvRfHAh+nB2vhoX6L/3hpuucTqEa0P932WZvglQcOz23P67xp868Lje+urPB6w9FX//Uinaq5pzdZxIQKrXKHfa+fx7nY6LoGlqRvvH3D85IHcr5q+ePTTZ9QzcNB+R+BAOta5nubkL5/Gdlz2/vlOwY372+Z8HT5jexO6+0BPTWF3aKV91Ih4fHXl7qa2/4LEDITHbjYr0hZQpugD6h4RRrj2hOrZ+aj0cEYCDCDDfYwZvj88e/Hq2z+8+9P/B+HZXi9CqPM01ezFcsg66SJO7KjOC3RiUZeF02m9am2Ljjpm+SQ5a4nXzmyxU1vVk0BkXcwBgrCyfA9Ak95n1M+HDPScrvSgxCMkV9VsM2cnn24JU0trOXRoiLdEVAdJcIyIayoA3e0vaQFe3EGsswQsVNEIoQdad+n6rMY6VGeQVbSs6v5Y3+41aZGTAKvj+QwB926GaRSlTGBYdyFUKRN9yWMXHm1oOsMoZSFjyb0+GVwETmoOXSKQ7m7aXcOqO73nrf/GKxOhScIg7cieKZ2IkR12XbGyy5iR32oTWHNPIipUK2SDziZWFMoOEEkEZYjKUD7yeWt3l7HS46w2ZBmxrvNKM9I0iplIvweZLVibZJWddA1Tm4KWFfSKp+/AYnaS1bJO3DnZr9YqJ8kpTdaL1Gu2tF+7i2h9IElZ+6kOs6MyhKyJpOy/spaLpTwOIe+Rn+xTyz21nI+8WS5/pQlASG77xLZIJ/uZXEoa5zZbB943E+Hu/jkUzvQTGekatGRkQ4BDD/WoqjQDR8pu4btVJNiO2+IJe0KPqVgGoaNB6K+g+e3mmci1HsJa/d5SWfJlBV6zh1KU00OuoyLV51MmxzuGJca5PDxetu3FV69+/U+/f/fm9U9//fObH/7t3evvbp/eRhihMUYLcLJwE0k3QDeYRkQGsiOFTtQY62DsW052ZvYDgEIGM5pH2Ez3II71b2dJlR6rzC1a65ctMkOycIEY1Yszc9sjwkb6RMxEmGwKntya+w0XeoTN7K8D33cwK9vBPGhCpW0oizyRkZDCau4kac5JD2CTYvcdkN/2LL8SzThkGuD1aeeoGrxMjMjltZF92yxbAQFptbNkN7ckQ4E9G7CuEy+EcCJ9h5gP9nix5w9fv31/ff/5w8/vPn++Pj29ePby+cPj42VjNUsVE4c/UMU5Bhixk7TBCEVE4X1kzbvIbi8b2dk5REgxxsiMub0sKRCBQQM9MqUAgLm7qFvcbGbzGROscieSws1eflIWV+fufhiXz+l6hiNQvV8RJTYVxbTd92xixWzDFMjutirmP+akySaQfg0GrBzYSNo+jz8qaYtUECNVSCyLiKzGVCVKQKIY0qDURfzFMhTrFAXeici5aHwRIeWRTwRBl0jPEx9qdoqvUdZlBTIvqrgGGmPB15XmelLhB5xJBlsxM7FTzSxnllPXQ+c2WmopyZd2fXr/ZYTlZFywdHBR16392xizx5A2cDWJPLRZp5ueQG2BXPIUNk50UcdGqL2OgvGpbzvZKG9XOlNNn+BQmYfCZUOl/nhWUZLUvu80RreIsz4WdilZqaqjyxBxAcuqPsufhYOmWhB/RfsKThcGqCXsBxGWTOavFWFaMLL/s5ZdHTzoOSP6dIqKFXacbcVdqz00DNXcPnOVXUoR57SH+eI3z55/++t/+vj+v7z58bufv//ju5//cv3w1vfPkMTdBhO6hGcVK+ZlA/J4BUQWJeWBCj3wCCGDQJEYNOvaRJqNISF7KoOYc6Dd4lFEBOQiSBtpILKdHmkZHGwAkcJLAsOyawdt2jbgEfQCuXMMI81lw/bbTTYAyAwMDusmWSXoNqiQDUZFwSMbMmTtrqR52bi7ZLebELo93cwwJuG7jUu2Rxg2MnGyjpMI0WxYcmzpgDHCI/ZhhjnpkWR6LXGB9yS2xjBG7Hk4wh4y2iTtkXM+Pn6enz5dP3749Pbzpw8fn148216+eHx83MYc00xxSeoZeUDIUHYo5cDUZFZ770HRlIlOI8xDQt6DpHFwKjAnr9cbFBEcNHdIwjDCOBWuIZhNuKNqCSP7Fxjr0AqPsEHY5rvbMMhCPohdzpHa0EaCTRcnK6d+2Y3IJtkhwCUa95tnVANyTuNQVt//o1dp69YW7VIdoDh3VKk3rqSUY8fV9zo+vHStFlrLTxT0RjNTtaOPmx0KtgoTlrorf64VV3+MHctAazk1kiz1iVKnpZwbvhfwRYcoFtL+4tXf6Kmob/e8nP9WwzrYjLtrljdwvl4p0MPfLAtDNiTo+avRHtZn2byeoeUp1/4+FoHHwLFSfmsGdDzL2S+te9SFkUodOK5299KamkVxLT2rNZZcnCJ91HQk2allaPptOZ3HZOuoxmoaK9e+DWU7PVjCel7C03UPLrIa4vfzhuSKIcuthIjsPhbSZoY8/cCjzrw2StS+q+r2Kdq8XF796vfPv/7nD9//76RDvtqIdD/HLmOpKdUa/FozLCFtp4m9BCcEUZEQrtGjQ+5rNo5/y1CnODItxXnrrnycJQl5c7Uvtv6QaKS+1sAgv76OgmcVuDHb7RVM40oOKK4kVtWOWgTWaMSWNxYg6k/2DoNOe0+njblGcdJeOMoDG2PVT424DvCIQ3LS/LWLzNNfWs0V1Fvi21pRC6bdadTKasqGrJ2to55qsDKH2CsrQKcT93AU5nTuDRVUOMdo/Z1IEUlYpeTl0M/EC7K0beTRrPjHr8oaUIw6CESQkIc6EVAifAhEOKq4xgrWCoBsGBCZSKVq8J0wog8mxSDgVc/ejS+JUIxMjkDFS9J3ADBgN3n41WAiaXXCRq9sbXDWHDiii31qu5WWKFTR67WAdOqoWW2DCVU/4ghVbkpx1wdLlJqt5bC2U2UW50Q05Zo3KxCcJ9nlUONOXeeJ2CsfLeeebTiRB8yd9nrZ12MjIvF7bYF8qJNiVESZ4FXLFou5b7sDdjvbtQetDUcZrQhPGXV3qz5ltiw/MyjII7MJWQZQu/iUH9xGvsx5uk7iyVpRrH5i/ew12dZFeTiGCqpRwKLtatpx0EfqYsbDHC5WXiCyVW6SsGsCU4xGlwqm/79HZBiUxocXzx+eP/v2V7/9+OF/evvj9z/+8G/vfvzT5/evb9ePlARnMshgRLaOscvjJULhu4AkcCwcqKKDtuSQQl6tPwIlUWNYBALla8+R4UmepyEc6TuUbh1dSSMJQSKPdU5bn0fN57nxY4480C48VhfaYReG5pz7bQ8zARwATKPyURZUGdVKyZLNLeYNiaItpDEHzKGsegnfHZENW7OiyxEaY0vHX65qFUwOKgwMbHNedyhi33czcptQca2ZI0Uki2C0QE7XvmdajEvGMQle+KtvHp49zU+frm/fvv/x49s3D/OrV49fvXr2+DDHnLDRpxdGWkJjkZ5j0GIz7AHIo/qquST3OjDUNAnCjGOMcA0iqLnNUBjpnhbd5MFR2XrG6QpBsTsVMdHhGyL7uI9BDN/dzLITLsmrbmQ2Fczjq4koI5rHM5VWD8Ng1uNk3wwPr5ML5WMOG4ybZuxOBGhRC4hKcCtlq2p9lhvLk6FKwGdHrWyWlRZJIjA7cPfGzyMtymSyoTJocGV7Dy2U24p4f3h82C7b0+fr7frE7N/RRWp19FQjUNZOQ+MBUUNL0bQlyyfophIA6Ysn6FdumCjSPniv8LWUUCmZjq+p2W0sGgr9joB1puaC0ta/HLhOFYQB5Wffo7meA8wsQ7h0NBo8J/Xbw1B1TU4nRNVoP58djTvLlC/4HAuoUFBEkbICbHX6A0fVHHdumorrScooVB3zcjtJsEBjQ5EDx8CznWNZgXzAVNjV5S4FBQe/VZRWr8BycfqPa/rzL1UJiAaKuSxRS7/KQABkIcHhOiY+zFZgy/7X9OSqPmxfXX71/NWrX/3un9++/uH19396+9OfPr394fr5wx4+zEDNbaRWh1kGqSBkn7k0rKHk50qTuzzVFpGHcYK0MSeb5jfQtlHJocMqGlIgI5VX9i8oxi3rqiJgJBjTkprkyC1cp0qHzdyGXGAiwj1cktwz2JHWxQYJhnzQsnCMxux8JzBuvifjjpHHXVMaw4QITLkPyRW63cbcRA+5YQQkKdwphwizxTKbjT1iDrtJc0x3x+1mc9gOTEi5wKk0YgzmBsqToEkRbkS2Mp/b9tLmwzZePDy8ef/xaf/04+uPT7f9+ePl+ePD48PFzKAI3z2Tt6ExTFHEK40bObKiWszicGXzqjyAkzSjzUHRIy5z7lG169lzCtl7fHGpIJXn5emgr2+wkaUOFINmc9q+axhk2N23bbiLhFEuWZBQ7Humf5bTItx8Dw255rRsYjiMu4BsHBnE4H/Y1YLWzsZBY5eTt3wZlApr3Ir7i7YuXPu3v1KYj6fP9U3aoV26oPd6/XVVb1UyQ+HmBohn97AhdKPorqPtB8F5sCdbwArqsr3zVKr9tIun6C8uu31g1NPFhTWM81s83jgmYg2gv4a7aQYWYXQ3bC6duqxMPfH9UJeLfDztslgETylFh3sMnj/bE9mZTIvp66F2SmDf5f6Xjh70RGkRXGq1i5NF1BcLpDWcxKFsfzLDEGsgx8dPJqLsiHCsB+yLe+TX94jhYRmyzQ4HyFQQwCxCNoyCu49hNCZ7nsYOlYutxBKQMOfDi1fPvvrd2x//pNvnrQMeNYltuuoMBBzrIZ23U02QDiu3ZPO8tQ7B5qER7malF0xlImuLHb2c1zwdeSr5pUW25mdqN9W6Fq3TF69N13CkUNsx2GP9c/M2RdbLevfgp8EA51vlM0V3elSrq/ytfuDdpY4HOIS/L9z7qOek525NSKGmJdKVL5/zskDd6cJFd/GQeZLR80NQsB5KqZKmBb+YvfZQy+fToVSPa9ejlMpMxZKYL9s95TeiB7kgV94i3ZXdq5EH/uHr+nTd5iDNlQHqABEKBQYHyp4pJ8iizhTPxx5WlTKZPpNTkYxRtafIVUhGNrEkujSBCVTDyu/oBIwAgFvctu3y8Pjw+ePTvl+hjKjVNgolddQmIRegF1SnNw713ZJdh73SQHhRcSWMRLV+WwfSm1XB3ZK3vENB6H7Aox1PjWuZtqOMqO9ymJFlf1o6mszsLXxSFIdCR5NocSJYV3rS4qdL1bVZTX7Cqg83ahVSU2VSddvuSuHhQeVXeA8xrPPmmlgDoCxFTMVagt7UYolows487yjSyrJgObr0YLleyfbJxOxFlftHpw1RJuWwam1luXJ41PO3FCPXorUW5WKNpSIsOhcpp61SxvK8hRai6igKgaA9bK8u3z5/+fLb3/3+7eufXv/w59c//NvHN98/fXwbvmsYImxgMM+xqSQQBGyjQoohlG8Y3b3BPaTgiEHu4QBoNsaoxwyYkV3WT8ug78CJGcyxS8hsRCNlY999G+WLjeyBCiV/ZIMwBCJGw0IiYb9Heg0OYZfIIchAE0NM3yEoGxaRQmG+h3uQluUYBN3dzGCanH7bJ+Vy7K45BzzgEjzCQHkeXgOOFB2CpMmlMcbue1Jgjp0jh0IInTIH97AJorrCZfECATPuNylkc7545GV7ePFwefP+08enj3/94d3nz7dXLx+fPz48XDYzc7n23S0PrY4xTFFrZNMGMMwIhuC7o3ajQrtuEFC+A7jv6TyWeOex1C5fqogjfUUiZJYqXkLEzuqq2y7nHMNd00bIw2NMKmqntCIA04Yl+0bQkKV2iKhT/ypem2qC4ZBhABOoY7YzyUrB3Sq5ywUKZiO929xwAxaI0jEeyD7aVt2yWznmeBZ0U7LSUgPy5CEErM1VKlNpaFKJ7De/+Y4MsEQVdSrPH21OqxTDQqW9uQtFJA9sh4XtTKY+BKSBSyZY5pc6u4V9xiEqWbEc9SalVH72wthYqKaUz1IjNSdco1zUU1mRKtnMgulWX0yLhaaBa47Atg9YnNECOEcMIek9Ht3EW8vWbMWK2fYDpHY7uxvHlVGORXM3R3wYnRG2MFpqoGrT2wppGeC2cyvzPVW8lhGqL+FkKgGw4g0HubOMe03ZeWIPbw4NPY6UMpTZ1rFEZV8yEJHjSlua/cFZBrs+HwrjiEQKcz5+/dXDy5df/fqfPr35L69/+tObv/7x3c/f3z6/l3bIiVCEKQgOpHNgyKbLwobM/MyC8IjMsFyBsjyvy29Gs2HTTGYeeXRttgOzassUCmoMy0Eljsncw9FHH6iasg2EIiLTmtpMYgwLyWQeO/OcNYIaFQ3IcqtQHhBGGiySNqIhS23pcFBCuGe7pLltEm7uc7PLNn1Y3HxgiEPhn5+eaNmdXAYYebs5BvsIiKxkNoN2aQyLPeaYiGBIcN9lNtMq5zbIAI8iFOJAmBDycDMIJt9pc7twzo2Xlx8+js+fn95/+Pz50+3D4/XFs4dnzy4PD3OMMQZ8z7OcRcps+C4Au8e04ZJBtqXGM98jHEki7SR3n3O6+zSDVYvQbBBZWjQL4LIykRjTpLA5K/UqFMrG37GOkR5Z2CZx0N0By8MLJrnvER4ENYImy972HOSIgCPo1Mg6CJLMxDCBvitu/8FhzGunNUjtvVft3A4HtkL1he1bfRWya1ojIZ51uiWOXX4AtyJsSsksJ7E3YEfRS4u3AimF11q+FJqOB1iWqRNzzscKNMBe+gSHT186oRTLoT9O6u6kVHrKzv/0X3V6U+uBlmUSfvE67o/S/DqMTQOk45r5i60qwXWnphK+vFN/L9floATs/u+nycyZOec5aX1xcXY4bMiXeStanzvIvnWX8zoc2v2LyVlu4MnQ4W5ucR7OeqgVjT5c8BSUw6XoLIEMgGCPGDZTOUZod5+ctES0UwoXRhaKgzADvSLidSSPwDTswxXb47MXv/r9/PPX8g/SvpiDbm12IJizYH0hGOuqaG9/4a2VHCP1X9cMQuhnPS7dQETrn4MPrrfWGmkZR6Apus6vORRDf3ZFfRonrHFY9yfOhSzGvQfaqcwLfABHSlFxKsc+XSZfWbbUqWbrbqWWFuuzZvKOYzySgtZdMgzW7675V111TcuhehaC6muuP5/22plSrcdJw50ntNbfK68XBeyOoUsN4Y6HZEGFtfY5j60qcPKV8+J9nvHduE5aiOqkA3a2zt9/GeKyPdxuO9Ij8jzuR4C5hNAYlqRDDmdk9DIFozv0QuUOLD6Eo6sY1/YtYiILDq2lSl4JXtmUozo0hmtc5nZ5ePf+I4nVpyNRNtp3SAak9QCWQijcuPoMYc1NA8yIOsUlF0KidZLraakrW0rKM3y7zUIL3CGKvXnW/uldRPtCZBdD1EtYi1uT0MLaFqHDJGmI1wFzxzOd7GT9QFavBoAkycztSueANMnrqfvQrp4H1FlGoUOyymyWK9/pRcLSMMXwUveaPOfKaK49zXwGCjqUk4zJvc/VdFDPZ23Wmru1nuytt/ZMaKmYChZljhtMWOPq8/mY/lnygydPLsdeASdZV5xg8YsNiKyyxswTsc7x8OrVb56/+OrXv/3N7//1zU9/ef3XP7796bvrpzfut/CdUB5VxDxgjQDNRvV6RpXShaRgF75CHp2E5R4uA81sziGwyE0A2RwjG6YGRA1jQCsNBASHUdjm6L7DYJJNnv16IGT6SnJQ2SPWKzeJtGBLpBkZIY/QIJ0Y64Qu2BjdStmYHIicsHmZBG++b9vY5jQzv+4mC7MI//z0meSYk5Q8RrZhyiSTlnYbQ+4RmDZ9v9kwKSwYdINJBkDuuVPCLRkYCKDLAAYEo2QWvpvNOTnN7PLi8nF8/Pj5zbtPHz88PX/x8CqPcn4YnNsY2G9hZIQTHHP6LRv3a9jIw5m3yww5QOwro0cuWmjOIWnfnUbL880JGkYMwaVIlZH5LWMbCueYEWGiK7CHDypBXJK5RlIGMOtLaKIGsp40j/4jWMfkpTNXqkUKd+Q53on3PW0Q5dIe88Pbnx+evbxsF1sOZOWbkCr6HAm+MhmiVUPWMlXFsBi7l4daapiFkFOVdaCyNqmfNl02N+FMDZjCO8Z2uz7t7tk74NDipXkbEvYfIg6ss/joc2Sg0U0r1qaeUqGbmSrEpzZMFSBAY5jmurw+3LR16puFwU4ODLpTQCzkopqLNgmt4VPV5PtGSuvITgl5xHvUJPbVs5deXuWEGJcew6puKNTX2JFHGJLk0v46QXdxQUQoPI+1OjRxa89Sl7YeP88NzaiOkl9ceZWN5tNcrPUsg9Kr1p8osxI6OTI9AQkKu9dmmTrkAjaAxHqQ9fXjOsoq6+MvAQwt4E+UcJxw79muJA8WLHtrBGA29fzVw/MXX33zm999+sN/fv3Tdz/+9Y/vX//507ufYv+U1U9QxO6wxcygTlmxyuAVNcaIbG7MbE1LLZovFKYBRJJMSAtbDGCOo3p/pVhZdXNtAanIQ0RIQciGEfTsTVDEFUHMMSXV+QiCV36ByeC+WJux2aj0Q3UqCnCZl5v7TaGbg7HL57xkNuY2hg0LDEV4NhKRs1JzRJcUc2y732AUnNFip6R/zWwglVeyRRGYAWCMEZUcEFnsnedcAgTMPflwEUSe9yE8bmO+ev542R4vDx8+PX36fH160strPH82Hx+2MW2S++4jQz/uWbM2MCJEQ3UQNCb5PeZgwLPvH6V9pxiEbslbVSWgjO57pi0I2GC3fP48pINhqbrTp4AYERFjbmlVVWeUsg9dTmTIMYY7kPlPcoIyDBuS3PeIGGGXyybIqPDwPOolfOA/JI8Kjp04gtYeR6y70CvZGu7wZs4ufH2v2aGmGPIvhR2XUWiFccdKryuovFw7dNnxqVZkh045dE47dmBbj3PIvtXSvRLB+lUFU7nq5tYHDseh7F//Vlr5cCZL4adPy/Wsh3dSuP5QWV9MZd/py7/3Tzz/tpgdNsLm6YuHaV3u6PHVfprzdPQ6Hur0i1Ecc8tj3g7xScqu1Xg7iCy72E4M1736tqcIjdqpPI9jCdlhyNqJqP901spBx/R1SjqP2Eo2q8+TbmSygCJ/9TxBxiLCkWeuyRVGMw6jR4XnM+rL2EPW3se2vfjm1y+//ad3H3+octDucHvwaAn3jnS6ZZqXs9mOUan5cs/QSOugPHG3kIdYHL5dJVjc8XUdSL+7xKJcD6E4AYTjfRYR0WkLqgFpDVerNjPP3eARjDpEiOqmyOXDHM7gEq9eyLrJIoAWo6gVYjscycQpRLvcDd9aP+j8HH0qCMrhXVlP/ZB1D/W2bbe+5rTJhWPvN3eU11QxQqtGL711N7JbRq+vLLx75H1xLdJxr55srOrDirl+wfLVP1RI1tigdkw+RVKp93v7l6+4fdbj5dnjIwY/fvxMpItuoGLf5xw5JLJyXeoAEyFYCKckpE9ZradI1JeAotwOLYDc2LOi0cqjYFp4QrHNy+dPHz9+/ADL+p8QMts9FlwEUPEPlAXPm5QDI+FwI3RecuDIGi59YsWmL32WuypTwVOhRIes2b6DltTlXC8pQp9BWui1hb14xV7lw0CUqlM+W0nSauqfaZJhy3c4smlaiKN1zdlqHWl89cf8tbvclnRVdSGXJs1H7/PM1BxEEacpX1qTvwxBlMNT/SRQPZu87GFFefJ8ytJWS2ud5wCnyUrBO4xQ75BD0townvimwikLmZzU0lIoQieXld/XVLLVfVTOMvsKWXJolOSQIrvHZDSbgI1pY/vq+fOX3/z6t//0+399/fqvP/7139799O8f3/3o1w8et1RB4W5jpKecTmI9hiyURyxTeYS9Zc4XVamwC7sg3IvOyYZDWSFrYLBOrGqU0R1ksquXgRiERxC0OdJuuUdWUSCz/w1zDEk2R3iR2iSzdjQ8hPBI3wGimZm6PzqEbW7u7oHwPeC6hY055gyXDUyabRdIe3jEkxRRfT8k340+x9irR3m1clIoAxYEx5gi6ObugMKQZQo2RshLWN0NRhsJi2MP183mIDVoCh82do/LGPPlw+NlPnt8fPf+0/sPT58+x9cv95cvLw+XbeRB0n7Lsh+/XdM/MgxBI73IyAOFHMDcZoSut5skRwgwZPWcwm9mTPaZVBgQdTDBRtuznsKIPK4gODKjNSJ7X2sXzcaYWkSAlnWBJIUsG1tAkd1pwGo/Jnhim6IghmUShDQm3QOK+cN3320Pb549e749PDw8Pm6XB4CkhcvM3HdWb14LOdcZAb2tPNU3melwpTChFDKk+WCbrXT7JSo6FyJ9aohZBp/SQMnd9+S2o/WNIFRzvTY+aLOdGqT+pyNmUtTO6QyFoogOzqfM26n7kHVzQTYnsV5pUlg5ura0PsHGDegv5zkUqWiaP+IJ23OdLLAATycwo7KMoty8bBOeW2yl6xRFfHYFFBKr9foRH2tMcyjDhXZKv/EYT0LHZZIOE9Ph2WSLcMQYAkIHFaKXI2fAmEWto69WD64j6anxYMszyPSf7Ry+XsBCB61XFsR6BVbaQ+2TO6Nfc5AylGOt9kxp9LoH45okHV7nQpxhVZBXoUmDQpWzDQhBcj4+vnp4eP7Nt7/9/b+8efP9z9//MfNRb58/Reyc5r771YfJaxfY8hXmHIqoRoJjHRE4wr2UcHVaRUctvfvW16KpElMxOCMyc1Qe+2YzhRzEmAZRwTyiwgFXSJnVrpG4NDvFCmNkLZdsWEB1zGQEwvebkrowGQAb07XbGBebY4x9v932q/Zw7EAqqTBibsaYEXiqgNLOwO5ulieUaZjVr3JRaPdLiFxDVlsMcJRj2KlRRGCQmbxDQ8jzGE13jazp9l3OYQ833x+2Oewyp10u89On7fZ0e/f26fOHz8+/enh8GA+XbU673QKIMUYedR8SwgwmFpVjg9tl7h5SAGPbMGzcbj7AfQ8CipjbLCAFjjGB8HCaiTGN4U7OLJnMjDIbjJLr7CXnUVSlatMFzEahQ1hkiV9UKnLT/EmPGhUKuddJHEOQY/c9T07FP3wtT7saB9R7h/dWO6a11+HnHbTEou4XnbDQb+sinv573PvQVFieYSomnm72txwcNfJd3ulB8i/jdXjsOdyTa3UgU+H+x+4720R8+2LoUr4jMaNcgJN2XbPHNqFnBFyj+vuL0dQS14e0vJjG5wn7+rMHZ4PTlJfP0VD4NNn9NdzB85Nbdyji8zfuDCQO0qCf92Sk+xfoDtezxrquevxzePctSezocy/BMYGtuo+oz51M3c/B8jjW59oba7I+AVUiHHfCpgXAcHJk67dAWBCTlqWpVfKe344xZvfXk0Pz2fOXv/7nDz/+V33agV3VGjIpI2mVV+MQzrjzX3ridQCd2g9VKnh8eLGk67vsDau1Cjyu2zxNE2i1v5avfd6x/cbaKV9u9TtpKulv5qRtfdepJQrJO9Xbh7t4FoPaTwchfMde9QYop1fH+h/jPbGSFdw60MWa25VRcBaeszQ1w7nkW0shdPZTg/X6HAnFoRRajXVuvlVsLnrSxzhUyIJwipWEjr72AZvqyaL59KUC7vnHxWw1Gu1HiN6pXa77i/X+G69//+///eH58xevXr149RXJy+XxdtulwLBtzgzw0BJ+RyZj8MTrRsJXMQ84D8WgBWNwy8MKsVB/r7Ga8czTu6FMuM6cl13IzI495GajNlWAZpEH71QkPKrhRmKKUjts5qiYLEkLIOoweK171LqD/a2MvhvLQWoO+NCDACCrFhzn3LAU/6OrRPJlLX1C00Kn7d0xhMMB0Pk2+Rcj8/z43B3Ri98DS2noJJnoacnsNAmZL517Zpn4k2VZcldKcxGOpRzqY7Gax7c9inbQenpOWrA2SVkDs0ExezwBIBhVorrmVrWS6ohFpQ6iR7ziPC3VB3+UJTU9l/V2N6vt6HFPwKFUulkb0XaXa/J13KJ9B+TwJHWnGZRRUOb7QAoj5+PDq8v2/Juvf/tP/+ObNz/8/P2//fzDH9///Nfbpw/uO4d5uO+3MSzP7MLyjqG5TUieIdQ+NmeMje5splTdZFVSwmnl+YZlT5gIR7AI90yhUhg6lYGwMcpty8kflh0nCAgxZEmURWTVlCWINbNI/iWhm8JvcrPstDBsjuysb9xsmo+gwbTvu6jYd/YxwWMag8MuFHan+5MFdncg9n2f00hWil+2k6gEi4pAZFusUkcNQkp6yWy96nuAe16BICypq/RJXdCwue/7vAx7mNu0h21++HS9fn76+aePH959evXN47Nn28NlDqNuDmjOEQrkcUgxaJhmojlkwzbazXeAc7uAMti+V/5Q+mBgqYs8KeiGIGFmmdcZ7so9DguJef5XEDBpLz89fAVbAXg2ooGIrlNRirbFHjDlSdIE+ghZ7Ls/PExBY47Y93D30BQmjeH7p08fPn36MLZ5eXi0MY3j8vhw2bY5NlYlfx5+ZKl5rEhTeUSeDEVkvW4eEOjDRihPGqt4Q1PNOkU7AdTRde4xzQJCZUbUg6VUJlNTjaSZTTsIrdzFgs91h6V0U9WJ7FTMBYTL3Jb+WCqGKgcMCWjKphJdQNvaxrDaWrPupAwALix7ZtlS16Styv4spbCOVC20k7OAVx20mTpxdfgDUvnHoQ3Z5m/BgUbm5InnWzaGWFNUZs7ub96JUPlGhshq+4Hr2yd/Baehne1Xey+Vr1PALOvsj62rY3BL/3bK7uEorYlNy14nRrftanPagcIexAJYaJBcb4HI4xDEAwTjkAUsM3L3fB0/79kXQJr36Z6gZa8vu2yPl/nw6uXXv/n9+zf/+fUPf3r9w7+/++mH26f3tjnc5TdDmnbATFB4VBudgvhGW6AzswaRTZnkkYed5TKNQtTKnFNmgnGZUAAwjARn2dN1DDPVcZ0ZMiiQtBJ4lUoeZpZG3qb1bo05Jpi0f/julolpNA832r7f5pxmZmaXy0PIQ+57Lv6QjeSh5th8Ej7C88yWPW+eJbE2shkhw2UTIcjFUaXQWY0nRChPBs5GlQaheK5JeXjcFB42DWOMCcp3z+StiJvR3HczDovnz8fD5fH9B25zfn66vnv3+fNne/lSl21MG8Pm7hk+DRkBJy8evoemGWSV6zQN4dp3gTNrCbu3QnaaTySEPM9TrB5UeYpB5ttL3exR1WyI5rGTJuwIk6WXWFw4hAifY+yZ4zeMkMeuEJMuBMSsigj5ftkuEoxmhoFUnnf+1d941a5buwl3+71/z62nk5/f260+pb7SgnHttJVDhWb+124tPVAqWku1thuE0g/N+PeeXrs5364IsnhyQ9g6G72J10Np+Z5tJZYaOWu5RWBw3V7nsfPAz/3mgfGLOVnaqi95TDPQ4HPdDe2htgt4UANHlBU6Zm891MnjuFvY47brudql6SDroX4XhF6/5mzVB7XcvF7gNmhtI39xv2WF1VxIjf4+9+k03PODsGe071rm4pjRZRnWRDdBuD69njsPR2iNL1V/D2qPyNxKD2ko3MWR6cQeAWraEBTr+Eszy/OVMzU4z0guE4jx8Pj46tvHl99+eHrP/TqHKWTdyPg0wUtUU4v/grU5yUvviOq4cUjFnbi2vJ6W7vzXtWBcE9VAaf1d97JyNs09nurxwTa17ISJ001rnRpgFDbgIb45hNPw8gJc89NeO48t3B9bhZCncNPpaRf1VBtyOe8FDE5fOs/SoS0OvnMptCVugM7ZSVh4A3V9rhq6vlKhlvXqFJj2zUR1V+W+bQ9I7DZJ1dtYgBV92CdorPylHl1vWGXK82kpTxrx0CRfrPcvX2Jcr5+vP93evnkz5rg8PARw2R4fnj2jLkazMeWeQbXoAXUPDezuZLUrsQjaiGrw4j37GRbJygAtLZhgCX1Kl+8xR7Y4pEckwEiHhegeBHnIEnnUUQTYPX5pJ04zZ2I5D8HFkuSfD5Ii/breu+mFRyXPFI7Kp1g7Qsqsk2rtSqKKspocSWnp2zdYXUi7kCDbRJ3R9qHmohpfIkPssUoVuyUbmmc2O+wFeboj0DSfukNrb8FTTebJei8lnjqrG9AWF1x3WWg8N29lQ+VtVFv4pK+i9b5ONiZq66JudYL6tbLHXf6GAB+2qqa2TgA7wQE0Z94Cdyjkck/YSUP9MJVMGUecpZXYGkoa/dI665FJPx8oIAMwtu1xm5cXL7769e9+/fZfX//w59ff//ubH/96+/SOsVu4fJ9DkoZZtU8NeWb9cUTi/9G0SXZx70BDLUI69SjsXwq+fDUWdYfsmJEHHJbcjGHMxl7lhtXZLaiS0FQ/1Tw+9avVsdpVtwUpgqHw682GZS4eMEjmUV1mDDEEyyKMrKuaBhsRPsaYts1JachnyBU3Mcy0+y3POBJkYDhsQIbY1QF/OvLM6Tz3KYCjweiY5ntgyP2Wy2XDDAODZozwKHXkw+j7jWZQPD6bl+3h/eRl8w8fP//884dPn7ZX2UibNBu3vXwHGEhsNt3dhWGWOH7a9GxEFGIfGlC7WNrz0GwwkEdIIjxIjDGi2dYODCkIQzpKWYAYZkMIhTAqgSZrDoAkywhZdnUktDPCRTjnJNhHkQHS7j7MSM4594hMpptzzrT7ksdt/7x/rHn7OLd5ef7ihY1x2R5sGI1SZOlluEjQhtE8HOAcDAG+54HZedhbnV1GCArXqPZoqVHB3DmRi50Tl/VEFTmXxOw3z4KaB2qNdK4NFWRKyNIa2zrTRmLWx0ISh+U2yvyYSPaAd1sHPAq2WuUnc8VRiVFAFSmmziw1ys7H6bRaEh1l4im/qPTPytvhnaoxO7TeWdEnW5dH/nW+bdUoLY2ewciT/lrKEmlISkEtHCSlbcxZax1WE1etaIBG0nbCaq1YD41aZqAUqrrqtEmZA7CvpVxmh4cT2quZSUG9NI3tc16Lf1JZ35o7nixpY92yWLiDmWyTbm2sa6kzapkebjaiUz0M2zEuspLU6hZIZNCASVVDRB4bYNlo6vL8xbfPn3/z699/+MP//Pr77376/t/ev/7L9eO7/emD0QFnRCbdYFo+STAbZrPiA4jBTOLNp7a0BmMYFBy1BUJKviHCJRdIGxEx8qQ2yMCkdBUpaEf/KSH7+3jui0QlKsrSjqkzDphrHzQbRsflYbv5TUIe3pnpsrd9NxoNg0OBCN72G4zyneQ2hwtO2BwMH9sQfX/KPKiAIlwJsCRxjGRsVFE5O+0alZgk8HY3WPQRRsOM3Jx5mGk3ymEe5kH3G2DGEXsMw659THv56uE2fG7j89PV9/3Hnz9ehr189Wyb82Gzy3YxbAGHRxJDjAiMfd85RirwyxjC2G/72Lhx3K4Adb3dDBYeJH3EnFvihhG2mnyktmBQBliah7QHMceEMMe4RQIUQLq5Z4A0c/dtwGUpnwgKCN9ty7Mxa+dlmaBxOC2Q3c13ji4K/Xuv3kIHCOpwYkOge5XABUH7Y6BUVcLF/QhHz4jElXa+0BdX7S3cT9Jv5GBOzmAPcH3jPiGmL10Yu7MUVVdplbTAuLjucjhgOl+1XYIeUGPVYsobfR8UnY6htlPO/j/Pf2wFvYau0//rIz0steeHL2dirUQ/7h2lXr67jufQCh6g/ZDzIujux5YsLIiMg9zruxwzf7cM9x/QP/gAzpll94LRCH95MwejtAbeGCBF8zQ7NXM9qVonlCXizliAlN3tR1YWRUBWsa5K8DUDqo8AzSzbYUYU5olK0U3jE5LN8fjNN89+9YcPb/5qukJe4lH8FtuyqeC9OsC7JkEnOTy1pOHh3hzG7LRSa0vieOT7i/b3ckcWzDn8o5MlXzb+wEwr6sByQXvl1+odks3u40Z0gVK6X2tsKuW/ZEy9CWpqTlc8iCmo4VbO2L2o9NM0q4VFkR6Tsq7Slz/hnbWHebeFeUzQ3cT0wJbIdmRzrZY6s6YatyamJGCqk7OWf7rInMKDvfdp7SpzRZYPTcM+oZbMZpGNiGs1W/P0FJ3mv9TnL/XwF68xN4C+B+Vyu35+Ivk0P75/a5eHx5cvX22Xhzmn0WTI04Q6qOq7zGiukIfZkJHuw6Z0c+0FAs0IChGuPN0h5Ci9r/Idyorm8Ul1CkoUygFGNSuttK6UgxDAYTPTLlJzV2duRVPSCYQ6a6acPdZh23lsXIl9AMhw1rkWIre/AjANzqAXzPZyXnCkhWYWSS5BFyNUWUNTorVs5QXdUZaHjAIdL1RFHUtfITNfKreoNQMOMvFeS7cUtVkobFn1acte9k7ptkalZULZHvNgdo5hSkBNndatmnZq14ANzUl2Nt0ab9upZLrbd2hdTna+ROu/Smio6y3r36WOWduh2ic5prOzsOj4O7hzb5pTZfcQumF6XandqzUVqcTaakdV7dR8SpJnSj5xefb8V8+ef/urf/rwh//y+vvvfvz+39/9/Ofrh7e3z+8JJz12Z+VSYBsWouaItnrZMskIJbCPrPCsM8OB6gLL1llKFgoAjaRLw4bVZ5aokuDdUaHSWD41kASQUrdnyCRRlHGAIZ/MVj7c5pZ1W5B8320MY/YT5JbcmCwidt8had/DYrtcIrSb2zBzG5cBjwiGR54O6e6J28xoo5AnR+riI0wlqnqxAVJU3/HMrxeJGYqsvJCFcSrJhgEEQjuQ7V99GPe42pgvXz3cps9tfPz09Onz7ePT24c5vv76+eWyPW5zbpOagsvl+x4BRdjc3GXNes9hfpUU22a88HbzwXG73Uzc90IUg5PEmLMWS2qfplA0q0krSQMiuR0zeCRDDUDX3RHBMaDMgTE5WI13i03Pig3kdGXRiWcPb3P3MeZ1v5rZzOwXgnkcuIA5Zq7o9emTsBNjzLk9PAwb87KNZGCMhpFynulIrug8VFSR7YCCHJaoKBlBAsdBVwUPShFku7v0vbMmDAuFo85Za7hSD8bMWuVoi9cGsHIs1pdSvecJ1pVHWLs3ooEwsjoMGf5nFoOkvAVkglfuaGZirfzhlQvciMfqZAEeEc6FHDqyB3ZHoiM1sqxCg8UFG7U2at10wfpV7F2uCo9bNN3S3g4rVa/HI6gYJyVJ3JAZDQaXusyNJ/Foendev2WVUegNDQUbaZUneWCV5bzU1xfSWqavJq/tSzn/1T3KVvZWPnjIE2n3chTCtFbwXKaExy89ggMEtjgWss4ssfxKz2U0l6ZDFVFgFWwqaZiOjCS7YRz2bH777PnX3/76t//8P/78w3evf/jzu5/+/OnD97en99LuviMc4JgDoJXVZIRnIVJOTXgw0WLFEbLpe/EqZpSmu0scNtwdEXMMKbvk1UUMow9oPAcjkNpRKIThATOKqGZbDsvDvRSSXLv1cQDT5m3fCSpMIAcf5kNH+QI0MMYwGkIR1NVdHCMVC+ceV8PqrRa77xRij2zbQ8pmVWRISCtQiTfd2z1tM0laIEgbea7CHCOEhJhgZPo8aQ5Px0zuJMfAdCh0mTafje1hPDzMD5+ehvvnz9f97Ydt2149fwhhGybgMqZZ+F7xHg9BTmK7TI+YGJe57eE7wyYBDG0UHO7hNN5ut7kNIfOMkhbM1lQw0AEPt8HIEHwCbiICm42rdgmeLfYIKg9CBpBnk4alTLA44rA+OxcM4fN1nxOkKVtsg/teMd6/+yp1c3I1F+Tt8HspnN53Kp96KZ+V9MNWEA2juD62HK+Efe259IMUgG7fpgFp3+MO+nb2xOG2tVpYijDBUOtVLPahOaR+cJzYlCOkua671PDJn1zOY/PNjc76qqehHuO7V9VfQPnzBe6chVTCPNyKu1k5345fztJSrOcHvHupkPGXjsV5fLr7BwdlUL+f4+Jrqo4f7h6+BGq9/bfue5YYnr6d4niQXcc/JxO2DPDxpCVXR8ijcMm6i0mxu19gAXrECMNMTTUAHtA5a2cKFqtj5mpZEIfJIdr2+Pjiq396+/ybp5/eXiyb0PEczYHQ0ekzMVpLpRplm+gyzmu3oMzfmrpll3m4jGlddfrzF0JwFyU6lrVXCeXL9hIVQbn4nvP9eufiiO5Iy+QvgHS3g4CKBfZeYkW5l1ypnc576Tj96e61BqrTL0uI03ysaq+TAKQyOjcG6FUAGmveK5t6sjW556dqXn2NJLUhszib9ZgZJK+7WDNMCh3X6UcqxG+ISE8pf0Ylvtw3s+Hdfsfpqf7GNivp1Zd/+eJltgHBSTNlacQYeYiSf/74QXIFbXBul23bHp49m75lcp5xiO7REbwcpmKP3SOUvf+QB/HmVpCgzmoDCKUTQSnzcBF9nEvkqVIlDNFlaTpJ0MGvaOQl0rdaLG9vPlVIoX0HF3iewsMwpu+QTb3bd0iSShRdOxqh5kIeQfSUgRIdZFl5W9YSlUL1aK1wUMUn6L20HDIVIHJ2mluRlBlqXaxxWvbeTH1JtudyULO532v6mmFHszSp6HhIm07qvbo/oRVdq4+a4OW1JWwpcAuiYcN6KOg09/nuev4iUPtPC2Rg0Wk4Xas06PLQiknmOR/qfnrWDk7W99iNbXmJo58IyVD2mVpahV0hmVNZe7Jp7e72Ya0YVL4DOcbj+Obx2VfffPvbP/yn1z9+//rHv7z96c8f3/31+vkdse9xoyI8xrYl6TMIZqsTzeIYjFHbqp63yeFTPKk6iME4fHcYM2xZ3ZxBEEYbloxM2eoBgjKjgsKRkdQeJQhkA+W8EKTMZEJyfBzX/QbJbCL7Wo9JIhuz5nKMzCIUZNzdRQP2ATPa7rI8ujp2UPu+Q0lkmkukjdktmxkDI5CNglWVQFIobOnqgNFSE48xne674AG50WBK3yGkLJCgcWycbpDm0PZo2+Xy+Dg/fLo+3a6fPt2uP7199uzxqxfPnknTKOBxbrvfdg/Q3SOC2DGH5ZFzcwz3qsOd06QYYxJ0R+TZALEDgJuNwdAg3DEGK6hO230fZl4BactjzSHOMfLc52yNKqtqVqHp1FVAJkXW45uMlMKGuYtkPN3mdiFwuzrJfd+njTFsZKdVAaRlER0BmiWH75+u1+sTpPzy5fFhG3O7XGgG0rL1iCq50303S2hVA7JqjyPQorrHyTgCsbZj1ckwG+ggq9sKfDVP3xssFWg575Ky/Us17Fmg41CK7PMg67CuOn66DEHHhJoJyVOvUIdnI4+qNFP08RCLhSWRQfNkMfNxyuq2G3KAlnaI7FBxfZW2KcrDvFVEW/bJBitTdd2zNO5BtCwFv37OpNw2CIf+WvqO6+2GCUnuVMUTwU4arYkkqGhQXEitHcEFRk9Y6ayAmyE9bs0zIj0ms+dlOT1H8UadGNdmlQcESEtxAoQ84e7D1LaToE55UP8nZyFtYENhkMukF2fVz5fKP+NnMhsluXmAoB28ZjbISYLTU2wnn3/79fOvXv329//p/c8///TDv//8w3/7+Pr728c3wm2PG71iZBwkbY7BSQUcYYJxT/0ejKqIylEm3oQAs2EgdIsxhmXjm0wfDeX5u2JslUhKGmN3kjYNXs9oNqAY5YxZhCdQi3BAWb/p4REG8ObXALZtEmNMkyvxDzHc3YYZYJFFHkFqGBWI/YY5LUlZM3JjxG1/Ajlpu+9l2SQowocZM7TlEZ1xz6qoEzL3VtnZfYzsAzgmXMpUKA/sN4dhG1MGmwM3JgbwiNhBYhvDfc9M1O2Cr7aH62ffbD7tt08fr58/3V69vLx69Tx7Zc5BCLSBZFAtBrnfdmDkAFAHrQjCHEbRgnvKb0Ts7Jbo4hxZqMthDoHKIzBIijIr80/Cy4YFOSJMgmvPVNBMdUtJm5eshbE9uSTfbY5t2PWWVY6lH7a5yf0UY/vbr7WVjnfYOzhDdove57GplwsXBYNaVzWLjFaU9WZ/ozemjvu3auDxa2G1Q+GcEGXpWLtDf634T0U9C2Mmwaze9+txJaDbrgHNK/QUlrKofFeeVWt3I8ThfrXb3Ih26eSTg5BwLNWysHzSY6yHplozASxQrnt34BevUpM6LyW+WHye/9H9m//odVL0aP6rVurgw47P6ouLlmdQfy9Ob3kJS26+fCAsVX38bXn29/akb11q5TTJx5BQgtvSlomQATBznA0ekUUxGJZSmkXGNi3khozoGo2pKWtRS1zyaBvN+fDs618/fvX7p7d/VXyW3CqqdviLh5iWv8UWqHqDFd5e22gJUz+LFu3S/xxuVvtwC6NoQYP6ie1rn+env6/FEa3wTudrIFmYY4Zr7Dzn1a2b86CfEFVxjKqnVm2r/MjyB9XHBOT1j4c6MA7uB1+ydS8mQMcO6+I6C0Tq0e6EcmaO1jbTmpeeDWE5o8frxNiqZa52OTtTI/V7HoGxjlmXpHVICb8U8iUonaPBCiweK9SToA5/9oBZaMx6QoFjGVJBDNoeh7L6By/SzEYYInaApKlKB0gzv+2KuH522Mc8d3XYGJfLw2V79uw5aRxjYDAPufCgjYgbQYGBquPOjp9Z1ykiXAKGDfdQlbNFNvwzjsybyChqKupyivqsqIwe9RSH5EEBdSRIPn+0tOWEWLFKGbQ7pEAQYVkroUMo5SFWRiFK3TAP2ygzSVY3jI7eLVCaoh5HHu4J7i6OmwfLhQN25zUARJ5ZGGYrN9/ubGJh4vpZOAXwW3k3scizllz26PAd+noHY9sWKZYOSSlhnnCyiCwKHYtRiSE7+LrUekI+9TE8taOwkEZtxrtNdmxM4mwzEpVnAAhizlEhzC+sy9rDB7OyyK7VFRdYRZQnaIBjNrES/dT3B/qm1T2e2T0it1oIxjUZyVCk9dkT8g579s3Xz7569Zs//POH129/+uFPP//w397/9N3T+9eBG7lLiH3P45VTydscLN4Qvu9tE1Y3TAIxmOUOCmd+MVv1EX3mHZIVEgiXx5CB2dU5p27M0R3TuhEnyncoZ6WKIZTitbtnJYBr36VtDshsUHsgwCmwjiEm7WJbaOzuhiQToPRDKFhmaYwJyfcITTPf/YSl5K4xzN1p3MOJAdQx0er94smlgGYjj9oBGEBmSoUYezhjjgFTZtgQTOicnf43s6zAJbVt+np7+PxxPI7t/eent28+f3j/9PVXD1+/emEDEfu0MeeIMFdEaA5lB47rDZct+9Jmd6UgaIMUN6JylDyQKZeZsbVZHiVpc2Ru4Bjm2dKEAGdvTWXJsIGbWR4qlz3gCHgXYEkxN5PDxvQ8gMx9bGMO7oIUNqZ7+O7zskFExJzbRGAMep1KX0rHqk2W3W67mcW+m9melRjyTwqzMea0OR8fHmk2zAjWkX2dNRQS4MrsCWP5B5JY+Z+ZP6aidhozrc6vrbx0dI9LInPU58lQnURvaKll6uAiWWhWCZcssmjBmiO6d3gCaA5h8Uk868EDQBQgiGJb2ps4cxqlZc+qt9YzkVur7xNWxNJ6UuKo+kKfO6ZWRemRnKMfrUHRjtnKaFKPfeGOVsVl+9YDsfn99ea66TIj7UBq/QGnc03XF0rrt7qtEN5hjRbn/YXq1jFld4CJ3dxOxxyoF/OEdA+ouCYvv6ACg4cRXYhTx11KLM6qP39o4yv0utw9VHQGXOH5QofrjSyfSnh9efH868fLy19/8+3v//D6x7+8/eFPH1//5frxne/XQfm+77fbnBd5aNDISZM0sOX1dt/BkELVWUdGyyr6XM4ECpkKaOAcI5uah5zQzW9GQjayVyfKTtkYmQd+7MOocF+E7woDbNCGAeYeBEOhwI59u9h1v1IID3AieevQsMkB2ajm3VHLctv3TL4zSAraHEMRV48ndpBOsc+x5VcKGBHGtvfN5LaY1fLmIWjJv+VZnDLoFogIhHGDwsbYdwfJbDUNeVyzyVIeZjemPVxsbmO7zWljj9unz/50fffq5WWO7fEyu5STNqQ623L6HgEXM/KE7GRU5wIOy55uYtYzCnJkiBKAxN2NlpEbq9PWj6h2uCOrJs2ADP+ENHrpqAgooxDVyGDOKYRxM+MujDH32G97QLvRrtcbBsfKEfo7Lx7MTW6BI7+j9gi7SBs4uZmHziiQUTqoHM76YJ+V1ooYwpEedCiFtUvRuAw4WIGTOuMC66cuKieAfnxcbYgOZXF+6saG9VEIh5JahPbSpA1nefr+/SfWv+1gnjiNe37jfMfj2XNAXzIoOn2nH375Afevnt6e16WIf/HJv/nW33mt7x8ZpqeLnKzf3774mSBbl1LD7sOS3X1A5xU/3Jb87Xzvw3rcLwLXBPP42i/WCerKEdWha5Z6KXOazfIwgXzH2Q5q1gTUtepOAJHHj5hRiocXL19889v3f3kW16vBe9yGahtxlGDUo5Rz+sW752k+mVIdMpMuWsLodlHXJUmi86PObo9+ISDrbk1S8QAX/elyyyo5npUYlQr5EEiuaamrcwEDsr04ncVX6AyIusBqT3DazFhDOK362j76hSD2AA5eKJ+ouggJdxfW8Yma0noKqRsRFB/0i1uwV4h3FENqKbWyZHI/KDev4UpxQIVOj7QP9JqkcmX1wA2xeb8WCaaPUL0ZQGRxej9Hx7mOCGq52JIZfdX1//3XvAxEGt4KVBajQ9IsQvttn3N4hAb8dtuxT/fPH99//PBhbHNul8fHZ0Ybc+TZoKnEpm3Vpk+76vL07H6kxFDVJrgizVlf0vKhOq60BDs5uVymcOWeFSRm3USivT4arcnYdcJUZREe0PmsgLoBBlpwpUPUtKa9ywa7HVKa9s5Vv+exUScutiR28OIQq7Moa8WDTr6DslZtydoC50JXhKVPeac/UyqXrWMrwDgU0hK+At1WDf3ZQtT2h1Ufonal2BuGbS4X97NKGe5svNpm4Ywpzjvr3L6s/lLv5tLr/KVai3aWTpZ0TXLHt9pKlqvYOwQHkDgwQ83l2scpqmW/uk1tbelk0KlDg1kc3mjW1rVmqtAAJFS1DFjhfM7HZ1/97vLi26++/affv/7xL29++POHn//y+f1r36809/3qV59zM8tTxsxogmxesg7g5rdROyipmDwBImyMcF8VK9VsTLCs+yKEiAjPQ9RAU5ZSMVvwGEe37ssUK0kJWUMRw8r1B9ltj2Lf3czcMbdLKMY2ILlHFTJnCssYY5iZpZtvpOC7R9iexiKp6jE2IPxWSjYkeGBm3N6Yp8JZ1idlQIvI2Gf1ZnH1uRYCQLOOM9mA76IiQsapPOjGq8UtkUp2JwYUyA4bI5492Ha5zG37+Pnptl/fvb99+vzm61ePl3l5vLC4UNqYCul2DQwzcL85WP1/UkcNjqT3t206gtkNzsrIRul8Yc/u2khCDVpNGwFVj6T28i03dWY4RoDDtAdMNkgSYygbY0eYDTOlnxTC0/VaVP4VmTQxxxjI9idBSeEREbYNKgM9MccQNMfI7THmJDBthPt+ve4fPz3NT4Lm3J4/f0EzIBOUOLeZtZDtP+dJaQuQFMOauCMhdfYLSL5SB8QmLRpEIY1io6piYMpmqg5wKpYYbK4hfXkGslV/QA2dbGmTPG2q27M3LLMOhqVOKlWeupOHV5JeQeZ9mY18q04+Z6vmZfPVA7rTj6oR8zAGrRy7aUuLt4AOodzptZMHI/TkCDh8vhPZ0tWshxpu7+sEuXL+ogDS0pToA+lQ838g5gbjWmhI2bKmpkB3wzyU8fF09dXUXkdlQWvusg+nRTrg8+lqhUyP6WDBg0KzSQR2PGUBNfRUl9nJj9pKyDpNdbrT7BFHfyMDL2kt+qCLGDZyBwRtz/75j49fP/zhxbe/+fXv/vXtT9+9/eHf37/5y+f3r8knGxcoIN+fbtysrG+hJRtjDGR/DUcRFbBMkmUGCIKIhb1jd4UIc4/UXCrTkmYEw0zViS0PU0vrFmaj2rlKvu8B6RYixxwGkmPbpkI2BoBpyUzvvgeNY9o25u773DYJSajbMISBAx6AR1x9v8HyDEd4wHiRwcORSXh7wLBHBhlCLpllc6kSg8xDTAJFiFDucRtWWfsGuGzQd938ZhEcU4RlKfYYu98kiQZ5qq9hDIXNAeFCXrbH23W73vx6vb19cxvzdnt8uGzD5tjIQSh8l4yYRlCDuu2ezQ5ct20McEIIGAw2SuErgPA8LSG91G6VkkYbdY4pBMFoyogsgci67piDFWdUmAFk5oBGJqg1dSwpc0vDof1m23bbfYwZIfmO//jFpYJQJ1Eebo/6nN5jG/QmU/tibM4IS720QoTQfasKVR4Iju2loffq2sl1xxVbOGXUtPY8gOMJHR+4fykhtmrooR5o9OShllqwNjm5/++Q5BreUVhdNorn0d8B3nt6/OyYsCf9gPJpHTosfPpsZXrc3Yh/66Jf3vjus2suzq9fvnN+rcuvPNKTj9OW6/4W9+M4lkT3fz07EX/3zsBh2MpxBhrp//ILS6X3W+2UtMisz60Qde6zcMWACdgjRmhYm/s6xwMGeER2bbA86cPzrJZMQM0IWYC0wXF5ePnt716/+s2nHz8Yb4l90sgIgeM5lqFvDyMfos1+/n2xoJXlVZvqyLdh8ad3LQu5rD0W19DuzWmCz/LJ42YAUKnNbUSXMC2CKgX1kMyIu85n926fDum9k9nOmzn70blYRwzp2I8LL5+FpDfi6VEKbaWdX2GeuySjfORTJOv+CqizuFkb9Nim/bmOmrFmmwXmjMeGNa48l5HNDY/VPwNN1JKC7MOheqwE1eMsfVkqLBaGOym1zuYIW/IgZbrK8aR16Oc/2Pj1MhKDNNNNgGJP/rRaOtNwuVxEbWMIUPicM3vQyn0P//zh08fxDmYPDw+vXnythBRjuPvcptlITiiZWS+zEshukiosaQBhkEIxjNmMzOmUNS6tjSLIaFpNjDIrvHP+lrqvpe+Eo5w1kq6sCq9JE2kUVt/y2r9ibw2AZFXNLI20BBx12nSLe1ZPuPJIDbRbhAPZNkDvrdPhslrXYDn+FT4qNFvbvIWyHsjquKXaems3lUvSNkbKPk3r1BihfZLmGw+D1bOyblXD7lKYw07H+gKwemXUwx2PdBDJeTb5nT5c+AE1FJ328cFrs2hy66yj8u4K/pcR53IWemA6k8L9lDwmUsiMmnr8/kMlU7UGTX+QKJdWPT8rSeGMNXqy1L5D1eUE8owuFeWJXUHCLpdXv/nd829+9evf/evbn//65oc/vfv5zx/f/jRunyN2ykP7/mnfLlPIxpgpujHnzLQ8z3B2Hok4CIBWdwllX650+1rhg0nKKrkVEZArhplHr2NqoVDUZgkGgLhe93w42hgzM6zs4eGy7z6GKaJOx8qituyJYyM3XbophHESMtpkOBCK237zLIyQ5C7Axhjuey5i3ILDij0y892Hjci+aB2draMPZSDcnWKQeQYcAeZfDeHy/WbZIacwPCHmvQKE3IZlT+qQYnDAHoCHh2dPT9vTdf/8+fbTT5+3y/Xl88fLNse0OWwOyvcoX0UcRujpuhMmExBg2NgGbFfQBqY20j1hQoR7bnkX5pjNcubxQYymtFNrFQjxEPMgMw4bwaBRkwJtkVbRmo8RwcmRCdfaI8aI0KCAMGhmYprZlBwgDeUYEjBjtr+K0jxj2DDzyLriGQobqdfiev28326cI9y3h4cXL14EkvjksJHN77SaSWfzEXcw+W1TWas6RcwjRmd6BNgtbrJITUfcrNM7WnfVNl/QXijmhwt76AyB0vlpwES4/GBsAOSBDsfubg3HzvA85bOUyiXiIMxSRaRTvyDQSV9LK2RAO47VQIOw5jEa5XSD4DuqKGP7lYZTkIrVTbuTQ7+orShlt3AqMrlJtgpM+kptsNgBK6zz8pqYO1Fo0ClM0QoXbaeWrWlL1fjv5E0cn+rLkkh8fjTWTcNwZ2wOZq7v3DZ2rdvCY3e3xMmQ5CcL+rYHwwa8bROry2Lt0ko9FVQxj1S0bfjXgkQ3ZjOC1qWUxPawbb9+fPH119/+7vfvX//w5qe/vH/9l0/vfrp+eE/bNtuvtyco3N3mQJ0kwmEmwcYEMDAjIsK96nuVqjzlpOMLInTZZigbRiL9mRyDh9NGDbImvaDFtKGghuV5arf9JhfgsDzyUjCGfIxpBnJG0EO7u/v1Rnt4uDA0bCPpIdHGNHgYhgX3oZvC45bzPmy4XAFySlEFrruPOcMjq6R7fpP6zHyrYp/zpAlwYUtl7bWBsIGBiJALCk5WXUBpDLnHmIMEabvvvotDxiHANg6bcxuXy/b50/Xpdn37/np5sGcPGx/yXLkxkI30moY2ZMYCGC5SeahAte4gYDZJ7VC4ywL7bjZdDqTSp4EZriQoeIDZKtQj5LFjH9yGdaeOUJq6lOKQ9t09T+w0XrYtqzAGeUsCaNjt9nl7fMzUrH/0InCcaNnRtSbN18469OUicYUlgWhwzWP3oXMI0uEjV85mbrIyhD2Gvst53x4bvrXxGuRx3wPO8uwekItaPjzG/EbJfSc58lBFaKLifor6GsRJ4bT+Xw91qF92wkI/y6FLuX7tK697tnLhne46TRBSFd+9efgBx+x8MW7da8IvnuuLG/2Npz7Nxt+5zj+6xP2g/sal/v4Fl81u4nJZkxXfrx911vHQWq+eofNNlrFFpzKCzAxzMypSheRhMByEMoXAqtrUzKw6kpLlqbY7r4wWxty2Zy+/fvnNHz6++bNunzN8iQqJLaNVAbc2PPkLOo4CqLKz79bjyPfBmpGmiHoq2lsuR6UU0vrGeTGasCLQ0rt8woVnWrBz81T7njKnh2ZY5MvxR/SB2Mfi4Qy+WIiO64n6LgCPJIlj+50aiJ/XlOftWfuSjaNOQlwk3brjodgOMm5Zn8VotfIqlaWlWxrCLalWQ6GVqtkFVDVM9VctD1I476/O8MhBnvzntUIrwFTr1J/g6uSbQwhpWB713bKubsGT/8lMFbtjU/7mKzsfG8Ywy7g32GF7duqFAMAjptmYE9mMQrCsaSdi3z+6X6/X9F3HNl++fPmAR8LJzI2NYUOGSgIikL2xyaraVlCIzJEmvY7pEYGooP7SdHEoWS3xLrBQq2xF5qancDJ9Lb6dCy1ACmuV4drRQtVcaBxqpZHGkveWLaxFO3+FqFPSMvhynFDcUH9RSCWqKSxHUV4B5Hz3bH+5kutPjhAr6NlWN0s9kl3ttrDHLCTcLXqmZCY18ULPTfv2Bls7pHm1tP0Hc9SrcXxvfeek0ZbVOsnrUiiHOW2rn2OywiLq698b0ZPOXfp/We1fuAtLkR3rWdOwzNABA4A+BLHlS006Vcxg6aylIbVYyBYSdlUqzAa7DQuJsT2++Pby/KtXv/rtP7178y9vfvzL25//9PHtj9cP7yYvY+zX65MiItzmgGQ2IAwayGETqBqlNGs4EEclO6XFqeT26gcUBTnhOXZ3Zx3Cnhsii91yG40gXDCOkO8ezCYY0pybB2wYMjGlOxvsruANjpuuNm3btm1cIERWJ1id4YOAbGAOvzmBarFqjD3MZvfLp++ep5JRNKvyC9U5WSYJlebPNPe1rZKEoFEq3yGP8nFlxF1ZolaToZDGTJ4S7uGh7OsmyiaN87KNh4fLhw9P1+vTT9dPj4/jxfOHZw8XmoxjDoTvkS2/KRAerhDgNjZmY+llboRtTJg8GDukiLjZmC5nJliRRNI2qQJdqiMmd3cp9vD0HZD9UZl8pUkw2tP+5KF999w5D5eL28pABMEx5369Ddt295m1aUKeypTsICVg5DluhtCcw30PjzBmBnd4ngmeBRkjECZIYaEQrp8++83NINhlbtvDZZhtc7MxSNIMzhi9H13K7uyhzrCtUmd2R3TA7uiP+mYdTA50Mi7Wjms80eW75LHZq8AHyCPmkqBJvZIptw4vSroBvaRFXSQhtZR9q5/Oz65mvBl8KG29oA6aDypXoU7UKE2dyqWPgEhdnOqszXi3eVlYq3TrMkX5kJG9YVLmjj8u4qkVdOvrzicVMreWC6qVX5bXtQOrJdnU3FatCosvOkUDG7U0gq9p5IrurgVl+0VplU8K+5wN0BPCYw4KB5bCVluSOsj+bLCXTi+AePIcjqshh7jcMDZWy9c6qyAlxDBEBGId/VMLtcKZVZ2TQcMCjgSrojkpJwrbePHtt8++/vrb3/0P79/8+O7H797+/Of3P//19vljhu3EXdnz7Obpxiz5SDW9bdssVU7fb2T20Ytqqm11BknS8GD2aFLZBmZDK0eJR3SuW86mAmEjuzBZANr3Mfkwxx7hIc6hcmRijGHEtHG7PYF6+vRpn/PxIfWz+R5BkPT9NoZIzjm5M7RHnqpQsZdMlM0wR6VQpqNkK8lfMgQqJZXVvSYtQfYHlGh5zqa53IwzO4IDiEDQs+2eMYJZkJztNmzYHBYuG6Ix3DnmNM1pl/n4+fN23W9P1/329MlfXvaYc47LNiY3wtxvYGZZ5dFMGLT9Fi4KAYthtDmRR2pkirNI2xJxejg5AVWeLRTi2KZ2H1UwyB07HJZhk1rAMGQ/CNt9v13dyP3qDw8bPbABkDx2d5BmVGBwzNJL/+hF5Gl7pWdq67Hy8NP1WCzvscUKHDV/1KkpZVxKfRRdspyc8z5s7NdloUJvwmIE1gDLAW6Qj0ZmSye2PsDCo/XNuqnuNFbRxGucBW3z4gfVfmK6Gr3nABJUn1/H/fta7YefPnFWREstLfVfmFY1h6dPnpevpris1r3aO3/obgKWV4BffOEfi8Y/+uu65vmq+rufOfsFDdqFL0SzbcNpPvqHMmF9kf4keDfL+dfG+S2QdbPDyzkRJi1Fikw+4pCyA0vWhRTYa2KPEQEbMNAGPETGEp6i/QqvXF48f/Gr/2H7/r/Hhyf59Tydp110jJ15omZlnbQQHNjjsIflXJ78oOXrpjCRdQBvtlxDwrnMt68ZPaz/ne1t/HXQc8tlqqBRmZSVksQlBMeT1OLWRiiEUg7taYHXYvHM5pxWvWZAbEf5kB4d03ma1uzL0ZuolJSaRVrTuXbdIb6HCLU+W0Ar57+5v75+qzSs6TmL4FFsVW68sQFl5akkk57GOrVuvt3yXAuVJd/rGdeIWrWuDVILpGbq69ilfLiMf/bHew4qWot/+CKLrcjyhdiTsTLmEU0m5DGs9v8l7V96NMuSLTFsLbN9PveIyHdV5b3VXfc2W918igLFiURQIgQIEAeCIGioH6c/wYFmggbUhJIgEWxIZKvJJik2b2U9MjPe4eHfd7YtDcxsn+ORWVUk9F3crHD3853HPrbNli172f74OAOjhpRNc4OUaXphqhYW+x7Afr3N2+5m9HEZ43J37+7bGHQ3UG6IqlFLPzwiVICXsibuukiwl7JQTZmexTNKyDbCvW5oNXtWk8XdANIRkQ0EAgT3Nks52iJXeQlaCUZZJT3V3ifwm/cki6M70orEHnKUq112k80lLoAqRTauVc8zLVSfa9JyosXv5v+cDCVPDF1q1SZb0QBAh6g0TYYqFqtTJ8LKsxBafF35HZ9asMRjamqUWmnItWRnRXiy/G29nkp6cKGV0+7vrAWghgef0f6ZwM7JXKsgppXLsVbHlXCc4fSvqvasd8snx7LHyCELjDACe9u69q0qp2kV5fSdASiHtyRqRoWr6Xb3xRd3X3z+9a9+/e7Nv/Tm+9+9/vG3b3/83fXhgwehmHOXZoQUk5kQlOJjSBbXxwZsMQM5sEwiZr73OWfaBncDqBw8Q4smi/IVE7NWmCrFlc4NAWbv7TE8QqE5ffjd5iD2fdJGYLL7ylzcQ4miNa9XzLC7UjT7bcpE8xmTmiTpvmGbOxCZ/CQRTbMCAaNn/WmqCPfsmspds7bWlHmmJojJTGXEJwSTm+VDmGxULme+GIW7GcwrA2afO1mrlMbfPNzstk9zp2FsdvFnDx8vj9frh4+3x4/vPv/i7tn9Zdv84u5jJBlhZjOyG1EEwmDX617oxGKMDBfntGwq73pcklC4zZkEWexZowcJvg3N6aKbIRuzThgtByxIyv5sMafAfb/ttylp7nG5bMisNCj26B5zJGFmg6SPkbGyUPJq8OHp7xbRSchEkGaKKzncXBXOoCADpTAjyH0PuptSbuJ222Pqigf7QN98+GW7XIZvY4zNB6cDHTgk5gw3iyn3Ico6f6B65WaRMwOEwRfLwuZqMnm8Nngr3OQI07jXALUVDRGZ5Zqt7Gr6oJTWD2eDWidb9b0NKoreKqSnRdO0Um8zJBwY66T6GlemYp0xiWQkKmq0TsKyFRlnSrRo6y7wtJsPj/7Ojb/alWLzu2y7mgZmJWeeYc7Bniz93IXlRXksHuTQ1O26YP18qNy+nXpnaOLpQD2pPFmrc6h3Qd1bXUlhYfUMKKjWz3vyuHr1mdkchx4//qU6mL16Z9YPC0SePJPjWrlogXk2QJ/YDIKEcpcv40mQQCYEI2cc9Buj+/bZi2+ePfvim19+8/Zv3r768c0P3719+buP71/Z9SNiR+Yg3W6CYs6MTY2xZct9JJMrbdu9FGKAk0a5SVlAKqNng4KUSPfKNsrDRSgmO8oXkVmHnDFtc9DM0j1ido8184ysOIxEhejdHEbe03C73fbb7cP8YEb6MPNMLq380sxJdbNptHGbV9KmduWwXgDQBDRnaJKeLf0A5BSVyIDE0QIQNCe4TwE7SU7kwAGAUzmnlnMG5pQ0bNT2MKuu5ovvMIzNYmbnJDBihsDwYffP3Hf6GB8fP759//jw8fb82YXP7sJJTiP327TBMXzucmNmAIvYY/rcJ1zXXF3L5t4gPCv+ZprinUYaY+7Z+lqkWU4kRsxQCEEYZwjilDKiIDCm3HyYk3z+4i5iFzRjQpPwfDQ3C9OcOZvziV/zM59FuqPQ6oJVtQPabX3iafD8/f6nstWi2Mn//EQnNrRnf7WOWY53bdTDHSsi4KRn68Cnvubpvg7HOr3XAteH/gLUJUsNmp+cozmnQy8uqmbZnONLh1rKHyu49Wc/Om7wWLs82dmbWH/igX5PkLqf/yhIQOvldgL05Mn+kiT89/j89FRPtOPTYzr9Q08Obyk4VHy/8kOxH/8583XFSPKpse3TrkiJ0IofDdyfvOmyuyLNsucBNGjcFT7n2Ma+T7ORXwkBMcfwUDjNzcIs5iQ7OSjbqhgATmiM7dlX3zz78q/evv+DcZIRe2SwEl3KRBLru3m3tnIkzitxZtl0Ev8y0L1FW8J7Fx1saVKlNcnqSQ5frU2btxVLWnsAKxeiZXsBqicJAUU3Y8kcF6G0PO0DDx2vrpHT8U81TGlnjudTHYht6Z2DE+qT13m64lH5fMUTdz7kwjmne13MUN/QSaBXDoXqLK19+mTrx0oKXjeztmPNBYXW6Bfke5HMEFNwtoqSGREHaCl4kZ6F1BU0T/aFGWdnx1r16TvEJt+/BCgAP3Nmf+qTic9ZDh/QGCNWR6UOjHjObobMzN2zVYJQiC4Herh5KMbY9n3SEHPO/Rbx8SNgbr6NbVy2u/vNxxhj843utf6kHDFj5IRyMmI6fSpYP8o8p4uklHpl2KjDppCFFfqvpT3y/VsUBbLpvSXhKbfVHbxWmFaxiLONSAWlDmSfkHMLUsajy7jmnajFpY1a/j0+UeqZ6BErlFjxkDpNb83azfkolXDdu7F+2/tGveNr+9bvV9+M1Jot6l22+WSToWUdTzYwFFl9vzZdacWUpbrtg6iptJeiS4SKd1Yq9JO9uJQbe9F0/sNSFzJaQKvEozVUbU9rtiifeWGfcwjndNJloE87ZbFojY2O/IbWoYfhYqwt2pDlQCW5JhSj+M+yVwRmdmchkU1/qoWO2bO7r+7/+vOvvv7m7W/evPrh9fe/ffvyDx/fvbzdPmreCCnmfrsBirlna4ptu5AgRGYYVdu4RAR8zJgktm3sM0epy+GyekOMGugkoJt5xUrQCMLkMyYyPXC4uZEcHFBEaCZ7YwbCWcH6CIkYbmZ35rzdrnPujx8fQdgYZg6ZS26MyRmhDpxkPBzmt9sOziVB6SUZmKOEJNIssqV09emt6otcQIDzFmZSpqtUYD1JJTNir/5HMSwbHLVQTqiSmIJum/k+p5ncidAeIjQ2vnD37c6v/uHjx9dvHt5/uH7+2bPPdHErgP/4uPtmNqCQyW97NmPirhjEjM5OrnIKQTIbsWdDWe77zLqWGXPfRXIC5p5liTFjziAM0AwoMANz3+fcU/G4+XCPiO35XcXMIuYMo9Ny4napyRA8NCi4O+b0VP3IhiM0y8oQ0VxSzpmGKrUhBb7c4VxXYAyPGYhIbeEcZjnoG7Hruj9+/PhA2LZd7p89Gz58uPsw457Nq6BlTnbN1CT5pgF1oyJNwszQ2UM4lEa2xmP+lF1jE2zFoQ5q3OfB2/cn++zW6YqKX0O2GnGdNH5rE7XGbUVUnehPk3oO8MFWYSxIqJyHle027YBfkFUrr7I01UpzGbDODI1lpVKgymCs7J7qW99JkE98ObUeO7H0R/1zwrIDxAvoii0U4lHnrjY2WusHNjQ5gjZJ6+S5cyQAktWlpIpaQp2adXIWINRipNHo8CsL3aO0QD3FkRTaUA7k0Vml3klipwqt1LtLE3mm/Q7Utxwu9LolvmQUrFiLVNghLVZj9CSJQpXww4N9S1tYPX1qVAn97tnn98+/+OZX3/zVb979+MPLH797+8N3D+9f3h7euk9z8yz0ve0CI6R5m9mUkcxJsYTZMMeYMc1HVhQXQgnV2iiVYo77gRuFzHyLstOCjZH/JTQRcw+jzILAnIGQjWHt37h52soJ0ZFdMId7xG3f99inptzHdqkkRMHm3Pe5I7smVFy/fA9jrUkmFc05K0AAQFSIDiNi7jSTpkjdlHUjikodiamqu1XNcBluu4Li3HfWNHsR5oNRPSEUU3AQ0Ax3CuHV2h8yjI00G+PZ4/W2X/c37x4/PNw++/xuuN0NszFiJlx1Kdyq/Z7RJTi57+GHgJLOqHlgh8Ajaj6plJ14a/9PhbkFYs4Zk/s+H/fdRDMN42X4GBcC17m7CbDbvhvh7gqk+GVyurkL8L9YtXa4hbnXePKY+h9FRS+iu1sQHVqlAWy3k1zZQcSppX7toXY3scKeCXOtuptL7UMutdq7T8dtr4U8FFGqob4pVh7ICdJxpVbUKVaFDxqPVOjvxBAtAL6UZBkNHH841nMpSR0X1dOjiuHq37XWb39m6dbWRWuh22d9crZeaRyJIGjlfsSg/3t8Tm/1v8MBLQs8/bUf81iggoD9PGysXm7DYvZxXuP8TXov9cYOC3cSQ5yOB4/0W5zXnqfbEbSGohIV5p1zepiT0D734T7cMjYYiJi4DJ8zMzeNtHSTatomDnaV2UOUtr14/uIXv37/w3+th1s2g1PbEXarnRUvQgbwa9FavE7OUxFAOksV0BG+Q3zKNi/3pHvuoL6xXtIiU3JVz3Tj6bCGD1kDXJu3AyG5uhUI6+yDdb9H5OnYkCvQXxwZ2409X59tgNOH6SfuLYoDlS2zvaSyUjdOm77mXp3XMs+aXfR+sjvUa3i8hOP0a5kLIRxaZb2XXuyeSQetScQrTt8cXVIDi77ws87AklotRVaySyS8UTNURAcQGxP1+22e8VjShXR4usyf+mhq20YE3AdDhOSIkHXb3Qzmz7lnTDoikH3jgYzuO7v0OjT3CeX0VWZiX6rZuM2Pt4cPH94Tfnd3d3f/bPgY2xhjmOVMbs45aT73SeNNeynyRERIM5roS5Y8WXYRrt3R0eUDOgLI3KIaRVRLHV1JDrbGIFA1dER2l9ahdlJoy+AdUrI8gyXvUcA7ag5eT5duXVD3JTSjoTRG2aRSRVL3+ypEVxevuXVlwjsJp2WFfadt1DpyrSpE7F+t/bh0cP/PmaZchbTM0p6KFpcdeKKSV3imYEPeU1k1O4n4UtddlyqIq4OH+ph6DiPOCdXKqbbpVbB2V74SqnPOdHhR2aIodEqAYu+E9Wj5Dk/cRRHBTR0dEAArdTKrm2vZAlppqfl+S0cX6si7WSJQvSZqPYOoBI18J04LRPdNgG93n/3y/rOvvvnmV3/v3auXr378/Zsff/fw9sfrwxtoN3eDoLnfdoAxQ9j3PDktyTXSYNz8EgpCY5iQ+LqyVluvik4DUJyw19SIhHkB3zaUPcjaqxqaZbWBLNMx0h8h6O4hBXIUM92Hm4VmzHl7fIRA823bfHjiwgjs+4y5C9lALhXOzuypYUA2S81c4Zo3k/CerKFxSr9AtNh3GI0W2TMnmE82Q2Y2Yxps5Dgz97mHWQ3XBoxDST5kt1k5nVTInFIMy1mrFHF3Z27btvnHx+vt8fbjq/fv3n388stnY/Nnm3GMmCI9/SB3S4ja2jNu+82QfTIAyYZHNsbQARsJaCbxIXcqVG2bItx9nxGh23Xu+/543Yd7Mj3bGDaGZtwgN84pKXn5TQFNtZ6KpCboHGaWbXeFnGKWwpoNhUDzxkMkaJZtQciibyyLGqxKIY3eQIfIZCATImIbY59B2twjCUXS6Ha5u9+2LRkvM8/ayBw3HhHuSZ+zmrkoGwqWV5XaJmmIUJS9kkQaOHMmCjp8oOyNbWsz5x7QwgrsXJbYUwmWVTtUZfMtmUTeJEtTzfXmLLN1UcPFF+ZVw4OG8omJcaoB7uYixqV8ynaUBVF5ApQCZmVLSgujFREKNUaFX9J2LrVbVceHG1GW5IzrSo9Da2RAmxssZ6bOYJ1NXRP26tjCsa0dT9HwIuDr70/g8nF8P38++5HHeu61xxpxx/V/S68vG0UpKgZ2Am88KrfPAZUqPCwk1nVoKhCZX7QV1DtsyiIHT/A1kXG7A80iWoeKWH4JWWgh1JGtavVuRrPNPv/6F5998cXX3/71mx//9tWP371+9Xcf3/7x+vAOccM+TTTjvMWMGYp9v2UQzJ1mIxtFdTMOKlvFG80ZEes1JsC36rZfq+FJrDX0FGA2TJoMaUpZyOZurkYy1ll4WUCb0+B8mNGkYT73OYMx9zk/Xumy4e4uxPX2mAH6HKCaVXSKKNiWEQnkBAGjqkC3fA0JYEzBKntxip7qp3oyZR+4zFBCIAi62YzsqhTmIJgd3TN6m5lGa0hETA3nvityIKW4DTNi2+yy+cOYt31/vN1ev37YLuPz55sbL75JGjampowMEA6bipjZ7dotQjWtJHqTlE5jaCJk5psXrUz3OUOKGbrdrvuu2+PcA04IuNxvYziJy2UDeLvdEurl7jJ3twHDbe75vof7HjfUSM+//CGOMnwuR1CLwmjaq1v4L9K8XfIzmj6YndwX7e0f/l+/23wbTI8CAnjS4HUUj92VuqWZ8nW9M2wv2qnBbm/ck6fdXVgKqReKW+piackzPDxQ5ckrLxD55O/ruc864/hb/YE4kSAHrD6foe4KOF2w//Y0E+m4ZDvdC92eXt+nN/HnPn9BYj69+pO8mJ99iIOSOPkneXi9nTN0P86v9bcVqeg32y7y+XqnlTpcBrT41Rtt37kXp0RKErHHfvFLWvasUFOYDAKcjAqAla2lUVOny1eMYrE84+7uxVffPPv8lx+u77BfezYSj9yfdu3LpTtTlNQimNa6NC/6ZL170/a71/FFVaTmsOinuJEOy9YA4bRK/UgtOMem+MnB/acmgas9YO+bIw989eE/dtNZNg+m6cyq8rjnswd4uoF60ic3hXXaM0Jrgu+p+//ko4NdfirjfcJjd7MF4bQmqwi3blWleCoMvmi2hJqn211MgrGDcetKJddRiQlNMWceEZEyTIFmIWU9dSrWXlkss59CYszY/U+p708/5patVGkcbgoJQWfhYFrVjIQh4GMUFAYShQ6j6nIhgDmcQ0JGO9K3k4b7DFERu67X6+12Jc3Mt7u7y93dcB/bcBs2s/eiy6CY2b2emau7JK3iwepcfU+SKQ75MKKWKNd3fcXoi6xYXN1pa0vEnHtbmAb5eZ2DCypBOgIGibOaBszz6SzkJWB12KFhcBBZi4uqfbScnqZin8QnGqsfAtb/OH7QyY73d5f5Px3+JNJaDc/aNmYktBZVrVfxVOHXWdUeQp/zkxo/rqdHxQuOXVp9qc9+Wj0mq1UwWvUCOm1L5Y5JrJQtNQGsPkSq0y680K+717pDNVx/6gjNepx652yVgGSaiPWun+zlAlZrhRLdgqzwc36ry0VqswcqAWiRCBJ9jBdff/P8i8+/+fav3r7825cvf//65W8f3v7h+uEt5mPsdJiR8zYj5kTstz39ZQ8S5u5k+pjISikZQQ2OtH5ZpQtCATeTgjkNPmF31F9bUDt8rUyEF3MUD0FhIqzKfcJAdNuyrPcStmkRyr5Acb3t2K8+RmYP3eY+b7eISWKAUHYLjWKNP9llIuEtBnBjRA1azDDP3vPmsq43svRWAWC4zUiHyvcQlK2us+7YcohZSCDnDKljou07zDkBUtw2N+ByGXcX/zCqA8aPL9/f3234/M6Nd9tF0Da2UNCNwVzpmFVxYG4d/sC+TwARphrNRGXLC/qouR1xuRszIqQZerxd95tut3m7KSPH22UbmwHYtiHhulf5YW0YupvDsM9aNTcDg0ZMjRTWUKW6JPFuwWibHdIwT1tOouZsEcweSUDipySUBCR73p3bJQHGXcqCOTKy57kU+3Wft3fvQ2a83N+5d0Ahay8qu4ZyVf+jPmO1+ssc2WQIs3NdKWiLSs6MpWgy/JOuIyRlftTBAQlVXZS9wGsTn7BL67Yu782tvUDwwgNlhru0S7WFSlUu1ViBkcwVCtGobKXcROw5SWjpGes4RMVFKx+28Ij1nS7kUpBiNWs6w68TIlcHWtHmvbQym0o/3Y0ttiXNaLtZ+Q3rb5M0WLBqn9Uz2jsAeyJ7RABGi2Qgm01rpY/+Mc/JZdXya3mCjNGhnYECWaSFte44AUh1HhS6DKfFtkMIuQ/KmLAYuwVGj+VoM3UyqeegdmHBHCTCTo3rdoTgSt3KvkiZ0+70mj4m7bEbePnsxS+fPf/il7/68PZvX/3wu1c//Iv3r35/e3hN22Pf6RzmEDZ/ts9b7vI596iEzZRnA0G31Pfb2OaEWTbEyIfIsgoBohVtL2pqZjI2sms2nDIp7zDDOAC0Kt0Ak4LDsmSY5Nxv5m5j3G9b7DH3KWi/7di1X69z3yMUcSOwK3LCAxE9U7ZOHpHZ5rsha9OyXy2BgBP7LHUf1QJcxGacCaAaC5oTwj6DkDkjJ2tnvwkBrPkscw/jSKwZIZI3yCybK5k5RblXr6Vn93YXl8vNP7z/OB/3P368Prvfnt1pDLvb3Mz2HYLcYAgaNloAZjahffao0IUqQxyGndc9xqZ9zrthmY/6cL09fniQ+TCDaLTNSJO7bZfhme0ATIVihsJBaUqz9mjIjDOmvGIDECJNxZ/+nByx8nbKB1p3zI7BLo6eDZ3XCVjwa2HZAzZZcpdpddgzac8XPnxp8CAFDn10MOwVTjjaPai1IU95KFxyhZPCqAsV77wge+vTVgSt4c+MOrDYpVLKOBTW6Zn7eTrfsdcTBwV2QOvCpCd/Plf6cFvr1we31KrylB3bNvwMfht5H86Czpj4/8/PoeIX+D5dGctQ9P3peBslJ+eocarRfPgFA9cD42R30CbvQOMHjOf5Xo43czhiwE/cojN/QFpNRtyQ6ZE7p9sAZ9CGsdOZLUKTc7ibu8+YsWdJzjqXQnBm/uDzz7968fVvPrz5I+NK3YAwQ8ySs0NgEmi0UGi5Db1N1mbTmSY5w5K1mOWZ1L9K2nP76lgNtolcEniwSGdy8LjFhoAHDIJWhld/eZlg0g/a+Iw4+mWWz7b+UAJwPF0RRwdU0fp9XviJwBxfFNpMccWvDrCTRz/1s9cX+XQjnYRDR6bD0hTruk/21ulWmtOpBPT0vgTBPFuu61jqlv/0l1OcuXZZu+ALXfZbXo7vSShYeM3a+y7sp9UnKGs0KK2s6T/5IRFzhujZX9PLAcj1yokNTosV7KlmkvJtxAxJMEYWExnW68ghZWohDAA0N3fK3CJmROy32367Prx7R+Ly7N7dt+1u28bQ5sNtOQtulW+rMjSqrJyAKMxD2ZyYFqdlMI8nEZvVKhjNicjyMIhwSNk89yS7JRC5JKfkybNk1yvMSLPR6tgOWgBSZwzxsLFrK7CuuPLNcBZpdKQaXHfSQ5YXu3SEXuoNnJn3JbtalrE1rPLyh9Dz2B5SX/pgYMpSL+1N5HuphzmrLdIIa/awNzvrqEbmJ3xYk8lxoPoMN67yUADdmWSlMR2cELs/NMxqP9Y4lfXlE5yvq5wZwCNncFl/HmdnAvuT4mz7CADZ/br13Mm690FZpJFPVAZPmPVC24ugpQecoWIAe8QeYaA/e/bV3f1nv/jFr97/zeuXf3z1w3/79sffXd+/jNuj5s5hLuq6j7tnc+7KxNhqKzrNCcIHkZ0TYBFy30i5q6yeUzOqdz5LwRAmxdSe+V2eLSuSJHSfkV1KWf19Mu1AkfKQkcKkI/a5+xhmPrBpxNwnsjQqNG/7vt9ihqYYouE2pyIyEJz1pDAIVeoVMdNByIavTgupiLEMWwdM3fHIcqx8K8OInDOw7xOQD8ZEN1DRAiJGu912N0+3LhMD9ymaaY/supHtkiI0HC+ej/vpj9v+/t3D48Pt94/XF8+25890uYzN6e77FClz48TYDLBgmPucMWfYoI7SEdOUDZu3fZ/TN+4zhtGGzznfP94+fniYwkglSoeLlA8bFzcgm9Rlg4uqmg4JYVnNVF1xI0ymfGOMGUMh9xFzVxaM4fCEzQzS8MGsTCNpPsyTF0lUlH2zEs4k58Jh3VZOqCQmmRnNpchAOEBiuGtqzqy6+/A+jeQYfrm7v9zdbb6ZmZvbpJmFJq0LqUOaSftlF+LkFEv3R4TRZpd6dfVdKgirfmR5g3aitzUpRwH+cwV7aeaz2ifaI6rnjKULAjPD9AfqSStobYiWwrHUSDJYN59mLXueLPsio5ETUa3mT3fU1qiqqkspN9Jq/X3Sy0vzNzH/xJ06QGk7LSdtiVb+hQ2tRjeiw/mdKdKXK+cedYr8n+YoT95Pik82nw5mluahY5mtz/oBU0Kt7yL/U/xTrYVWvCg9sF6vT6DfWrGSk/WU6FyuJ8awH2shwDa1vQHWeevOFmQkkcXPVob5QP/9TYHd14lZPDznniRpADHNjJfnz/3u8uLLr77567//5uUf3nz/3757+d3Hd69jf9wfb+PONGNYToXXnDOrVhHIMbfbcEJmTtjcW9aytSuUTbQjAqqO/eaEha3sMzV5aWY0xGS2S9sDmQ3UUmTM7Vhkn43Lvu/mzqJvzMy27TL3XYAu+77fHh9j3j4Ku2WIL3V+FIFPVApj+zWTbjP2DBYl7aqKIjO7E0Rcb5l8lzWcSnZSCrhxnzvhNkyBiIpU5HUCsY2x75HhISlQKUuLPwKDAtxtv02QbnZ375s9e//x+vh4ffswH64PX7y4i6lteHY33+NmDfndmQFbcWYuq7u7eQSuMeMWANy3220ndbvuz57df/x41cTmd34pDn6/zareJ90W2xyKGniRWM5REaSpgBA5Udzpw2bAt4G/8GGndXQWBlZSfUt8ueJYJMjiOA7uQGsfoH0fLJlaLlW9hKUb0FhwbfQDmOv4PQ78XPeTegCFYX/eCTqw3unzyY/LGUxtWt7ZUrCnLx0x11YzTZNj/YqHzvn0SixWAGgYfL7N4/EPyLh+0/GRdTMH09Bv4cTX/fznL3iJP/+Nk7LnYVd4vvO61dPrPjFpRcIdbNFhgk7m9qR4n0hTuQ1PDwZwQt1NQ7YVPt8cnpRQHGznYS7yqAAZc5oxiH3f77dLzNhjDk3HiJwVAogMYNAUkMFIHx63Gd3sR9mnxgBlp0hs988++/rb13/8+vHjqwyHVVSjA3d1Z2ohKr+Uzbem8WVPyFxPWc+HlfJAsA9b6wSiXJraPItxXQvSzGnvrsN7aVmu7dqvL12+wj+JQ1ZWdNO4nWFj5al3EsHxVx3vugnf4+2cZOHkYZ12D3FmX3H6F9f8+vLWGtN0BOVgJU9fWTKlk+g++SxoA6wYVd7g8TqW69jtdPuwflXrMgkdGiTiUID5kmsDUA0hStfG6RQ6/XdJ/XFGFLN22ockZFWb0NqE593ysx8FzFwR7eILxmx+nbyYmUtwH2ZGs+EDBBSZkRQRM1QtL8wjAnTGTCBZPnXmRHd3leE+QbfKa95vMxQPHz4os5/G2O7u7u7u77aLuTuN07yaQtDIEDAjQm4mBCbLzHuyBoqYZjZn9F5kWdWDPkC2Q+n4f27VyNm1JBUd4i0BbjFasP+8SY+QpCCEZrY1iHpvqpdvx5sQmgWTWvdnMZ2dYCnZA+lKEqr5Tv1Z69ZYBNXiXg4hKfHK/xxE5NJCJ4Xap3qSDVmcaht9Zmebgtzld6cTkr5DNWkqY2skLNpH6x1WwztYEwRQYD2VCQNVV5VsUpC0Tlsu7kd9IUSWCha4tSrgL74qunBuqQSeX+KxR1N7NHpsb+awYjq+n9+rsve1qXPPLXPe/2jEXTO4EznmV8twseoKhYQ66TvkpO+IPZd+SnOnGf3u7vnmzz7//Otv//rdqx9e//jbtz/+9uHNy/3x/bzexl1yrANCuGbuTO1TgLTvNoZPhbsTNmd1anZL3wE+LNkiVUsW84E9wsVK16jhzspp9j11iCd6vGQlA86qlvvwcdcGFGRSyL7psu83jM2H+357fNxnXOc+qax+0GGohCQNINC8xqAbpDlnq84i0ztjBBYx8whmh/OUGWnG7m77PiHmuIkQFBOAuedqX7Zt34PZZU2iZeH6NHLu08xIk2byUCQuw2xsd8PfvP/4cLu+enf7eNMXn91d3O8ug8TcwxhGgCbBh0fElHLYl0iXhrlkV8z9Jomwse+KmA9z3t3f3a77vgfCL5ttwwHGDBuhGUUalQKIHCa7UHt29HBy5p6IsDA4x7AZGm7Dt9T+2WdeOXmN3YGmuhkRAdDN3M0d2Z6WYobu13hvI0A3gkFkH3Im/0ejICfNRszMSwozV+CyUUTEHhJiXq/X6+PVx6Bx8+1yd7m7ux/bRtCCcq895VnEQkBzBrOCLtAkCklE1ulhoueOhmZ2IBGmxGxYFpmBkFq4aP7ekLWhS2UlBESxPD1xbTm4nRO+UExpcSxQJoLNIHRRSXrdaX1n3l7hwKwtSpXGisnUe10D4w6V1Tq7eifxxFMcjpIWuGo1eIJLJ5SlZlMkVJOZQ7Fh+YkNNWALdHCFHOr/K/0Pi6M5oa1WrBSiBjiteyrfS5K7l7ZcKLr6O0TTOrkwPSiwhnOapGyNn1q7Bo1F5SkeXm6mgPUleiXznO0HL5wFVMxhLWI+6ZEzkRJU32oXl2CSFNnBq0YA5Jejm4kmktcp2SFhVoZSIhCSbZdnX3xz9+Lzr37x996+/v7N99+9ffndw+sfro8PwkcD5r67ZVY4Q5r7PiVJMXeJwG7Zz8ys97B1mI3uQ5JQ98nMPo+outnGHFZlbtlOJ7M1y0BjbRuwO3JpG6Nib+Z+NyRFyLeN1L7LJaPLJgiTyJkDcIsHMUZS42wFpYipRKhyxl65gkz8Erm7LpgJbWfkIM/sl0bsM5j1uSANESZa7AIlBokwuVGhTM3NNN0CX5kElcJhokOCO7UHjM+e3ZF+vc3H/fbmzXVsfhnjcrExcBlbYI89WwQudEBpgpuEPYnYGbcZj49X38ZGPt6ud/d3+67LdsGYCrhbYGYiayb8u6eGkVVbdhBw60b+LHZTEXBoooKuUgj7vOHPftid2yrWVvfeW2F5nCePtPxJdrTw8FqII6bdhhunHd/H4eRd9ZXXr3hsRSzfqZRK5tydbqe808brrZe4LpW+c2fDFwbOAMORFFMMVmZYlmfUGnVd8ViYTx4lz9mXfOqOleewVIVWxPb0l3YJWq32Hw7l8+lLOx4vH+OE6OspsEiF872m9vuZM/7Mp+1K3msFY5DmZVHpas9lvb8TsD7fu06v+yRu59XisRLHz6omtcrTHr49zzaRi6xXc8zrrdbuOHkFPN1CGRezTMyIuXO7NzdFzNCc07eRFjISXtVUW3ZScdeIZWlqNDIhIuY27O7zL1989evr699j7tLMe1Z7IP3KIKl7mrRgdqSoK7lXgtBa+tObbMtSNm/FxJ5s0N5QaN6pLNBZHrhEqc4ksGjc4+CePNo0E001gPz861yMvHDFGhJp1c21yJxVw+k1FRg4ttjxyjvjCcfJpeaXSu2mEW7teDrpWvPjquuRT1zkepz0bEsPLOCzeMDep40RsJ6qnVlASNNeNxydKksUnsnHKz1cHBw7a75BKokSRHSCeeVw1zVVVdwF6pC8XZ+xbrrUd7Yj+UuawIcpeuVrXF/G1QPpUEVxoTlpwzfP4RHJWNDMl1gb3Rw5/Am2z6RRAkY6CNBJt2xiMhXZYdZgMkTsEYLm7Xq9Pj4+jg8gL9tlu1zu7++3y10yR/KRbys9ABOVrU5plLKrNtDvspe32tJKAS7fD+DMFjCx2FWgdkSIntLVqUxrDx+rtIiTdIvP8YLldRz7r8jNSt3h2v08ehZmmkM3zdBc/c8rD4xl5npKXAlbA9R81dWDorXiyXdYdCpOypoHnbq2zrp5lpV8osOT5MotYv3dzP/WOrx1XzMsievQfPmxUodw50z1YpUqHrXG1CBBoUlys4XcK96Y7GDmzvS9F+Q+dEQsG9JL0CSgTszRyeodn6XRatf2hbX23dJAPKi+ZeebwVSVQvHwQAWsqcup1EoBFk7TDJrRGArtEQjStmefffXs2efffPv+7T989/IPb3787v3LP3x8/yauDxBj7jQ6PYuY5m0PZgx6l1DdZnKPKrNSTJJgGUhOOixBo2dRarY1grrzDNILYxKG/klArh9aiHKRMkklx7fBx0iw4ZcLIVGmaShigOXiE0msiPCi9jKo4Zm/strX27H6iZKsVNGoTLSYM+koUhM0lF6qvQJMhA0p84UniGk1zjhTR3N0ukI7ZGb1QyBcMBG0YXYLDH7+2bPxcTxe99v19uMPH+7ut/u7y93FLpvRXJwxs5Qqr40pKqZoQdyiAsO3iPfvH8a2OXjbb9vmc/Juu9t87jZ9ZHZ/VgNhQluGsvyQ1CJ5ExQBqukCAVP2UQIwZwQ5933MPUpsiexanEKgChoYZtZRwSqh1sygGYsGES03fq6a2BW8RSu3JlTXXQ/fbx82f4ZsC22c+25mTip8kPs+Bc3bvl/nw8PD5e5hjM3ct23btosZ3X1gJHBcQyHnnK1gEFkvhTKxHeFM2dauvXBUqjBAM0jz6iWevtbBGS9r0j8vcKKOYDFzC2MJ/4qzBYTKgVQucCy9A2QeXR2aVqRsWMOtvljqKNVFa8+lPnpSFHHyLlqh6VDuyzlZ/MZy39rHKGOXaU7FEOusEEshp5rMY3WAfX5yDIUjL+zQrcuH4ZO7KnTU/mg7OQdD1Hecz5Z0dt1toUnma808jzy00s0Ol6mRmhp2rVqPA+DltTKPZcUBTu6IanOhIddh7Ve8oRy0QiVZHlUboisdcrH62QQhpTqJr0IfLXC0DN+Y3O63y939i8+/+uav3739l978+N2bH797//KPHz+8lqrpdO4AH5sBipgxJUWRSNPd0YlEmUQqsdFpkQsAIqYZURNMA4IZin5aBF+9nOoXWe/GDEAoyvFKFZ1tGyyHbkyIEia1beZ8FnGNuEk2fEyFJVMksKaypcaRwSVl9mYpwgXl2+nJ151VbCwmqqorrETBoqfV0Cyrm6maZyJGilbsM0cVqAp5mdtXoYiaxbbfJpMeNTy7G2OYXe162z/e5sNjPNu5XSzuNWhOiwhCbi6D04EthSIU+3XuM263IDhsSDGGmZsZY+7DmGXnsYex6dgJU25V1cCSkDn3KXoYMyuprEEjDtBs7tOs5qv+uU9i1FrhUiPlvJycuwZPJ1XT26GpGayy57XTWwvqdLYDgvXnBMvSMzz9pcja/tVKdGmMhUUoHFxvn6mUiHo7r+fVKXPq6WIcWHndADoy0ETS6Z6PRTl959DLOhaqMsWqcHKtxloAtNPbJ167DCwVy3Wd5RhwfX35JesOj9fwdKlx8lJPRmWdWU+/obUM52vx9EXwSG49lvr00tpKHN8rV+KnN3h2Zo7rtQy2AWgiBTgU9noTrR1anstVY9/bOvzk9ZTjCCCE234d2whq7jv8EjPkVr1kwIigm4q/gJnPWU0ESGSif0VYzCTdPX/+/Mtfvr48nw8fnLd+zC5AF9DtbJ7I4rHbFhHUpNciJPq360nrZdW7rcQ9tSRy7QKtk56WZr3rU+JYvwxq3eyS69SwyyafxELIElog/XethT/gTVmi9LH6DKeHqXv9RBiP5UkSrUbmnj9L+E9E0WlBCf3MOdd61nr3vlKZGTXjpvWFQ5s8PdGBx3oteNpuAlG9C+pwFbPQDs6xb0K1fIsLrRfX2Ltf1/GiegEbt9TXyjtei1ea8fjNn/zMmVUn7HIVgB4Kc+/WtIJZJk57RptMsU+Ug64cQBizW4Xm0GzJk5hIz6JAEbNOft/n2LLbRviwGdNoY6PCN3LfZ0Ca82F/+PDhw8PlMrbNx9gul8t252Y+3HzscxqsYUVlGeT6hFV6WhoCrSoCSNCcezc5qNlDOe4qUyqkyMa2bfssE1uWM6EAocqFRlhudrYYqDsbtEJD73sJ9qnQAidHpAyNC4l1ytdRQjs26VCjWnQIRqtKiV2HsRROW7a6g6USD5PeRpbrhmr3tYVdih9Yu3mZsSaYENXVJJ2kBfYPGT4OXo0vrMU3b627qTRN1m2dcpd6naPvpWMIKvfCmJ5gboB8hX3rx6KrlWcq0Ho9y1MslHU2M6nRDmSQMKhq0Dr2xn6MZtN6zQ7foV9MjYQS0XTLqp4SshMKu4Nq/r0mETMH0ufS+ni+Xe5ffPHlL77+9jdvX33/5sfv3v74+w9vftgf3lXiq0DBt80BKVsOzSShxPAwkJo0o9O6SXk5DjXTHhBgOegZRXzQUjxKeRqtlJqVIap3Z5QyKYxTQTCZLwlmIxTI0chigNtww92MW8wgMklqqqssT3xaIieyWmhjSWbKP4vtTVtt2aMp11k0MVYOBJANFgjUCJoSk2jJyunWMwpprMzRouQZe9BAcV7Ld4Djxf02hl13f3h4fLjePj7Oz56P28Xu77dhNmjZbHG4Z6ZdmKdQ3faI23697fvM7lGuCCOrMxRFY2rfTjqpB83+UGrqBshyIsmVuU7ZhyYidXPtlHzVAoa7q5BEMEgzNxOxx7ThRBI8IuA1Ytsj2gSG0E31LUXYCzooaUFlz62UaQx3gCE+9xcxg7QI7XN39+TjYBRow9O6QIIi9vm4TwgfIB/D3O/v7+8u92Z0M2UZjGhVT0dQ7Cl+bZ9bNae+5tpdBi3LKQER6dDK3AvWHJ0cV5inCvRSetK1h1hl1El00lmIKqRjAklqJUmpzbgclfqpiWktoFEkaSjSVi10qNV05uknFX5r2OM3rX8Xfim82L/E0otFpffMDB5XaUx0eCALZ5wQ9yqTOLBYgcqMPCTCKRr+YP/7+HY3ldEPAgk6Urf2eJQ8TzNroDsy3nV4s1Dy32kYK4ciK1GLryv9km2wl//Q+kSNARJv9UO2yWI1hl94OrSW/XBR2vNesc4F8ts9IdijeQuF6zzmpUIPSFGySqFEsotu2/MXXz1/9sVXv3z/7d++efmHV9//9s0Pv/349vX18X3OdoeQNcnbtpGMiZkN3xTVK27OORGIbIef62JuAtwsRwG6G81cNU8B1S+kwo7l8ZKAUp9kstqMSvjOQsz0jmdIbpFzPYExfL/uErKngflGpGvFOafanUjuKBSswYiWVbZpfRUCJZMx00qxkvwK0lqN9oQhQmvBI3eisAp9aZmLKDoJ5TyXahnYpGDkb3I7E5iQsRKVaJsTF9t8u+1+u+6PH27Xj4iQG+4238YoSZjyQcIer3u1IAfcnaBlHVpgBo2a+wTUY+aw/CgIPjK8trhdUdqznQQ8E/W57ETRhBmOsl3Y7C+UrbFczHTWTg41euQmsPjQBRWx3Pv+R4t8HtA1p3WIobN+Ci+d1FGdrnZc+5nLO6sO3Wi2vr1RnK6phWGPNAPr1Nrjlhf1tJ7w/ERHOt26fAPRkzN9xtdrcQouHzxzKd9Fpp+/f5isA/osrbtuTVpZk2kxFhF/Pl8a4qXG1k0d5/nJh/3gOn4ACuceCvHQ1KeT/YnTtv+bGndh9xWK6eUsP6Sf6S982GrhZ56qCTg9+T3XYq5XcxIMgjryap5yMMVFEpiKPXbHlmIVM2ScU/DSeEkbzTnhNsxtwKZHiBZqpzKfzs1iTt+2Z199c/flr959fG28mjpNNl9db5HjsRsRlLS0r5LLlmb2IBgWp1tCdeaVTka8Hhm9nId+f7KuPC1V0044wMOxzIfNB8pZPb00MlMD1Ma3y9RzARdveDqv+k50EmT14Lx+vvWHdXyTsKovN85aicNdWPdEupdsrMNRFT/xhNH8xKtcsAVPdgUOEU8g1dIqrR41UHmFSk8/1j2vO2mooNYJ7HeyIJ3WvRxLdzjzxz23RWiV3LecNjTLTDI/5lNo+ekncTtJZTrL8EGfiD0mPefbEmTM6e4+hrsrghsUBePMqZB7saWBmvXUcNGqjwYwxkgSabhno58ImzGrZUxRILThBkRkpdKMOa9zQvhAuA8b/uzZ87u79B1cVYnDFgNrvXJKnmw/MyBPxJ3FLzl6VdESFQUCQ3Z09NJ699nfw5LZqLNn/vSn3XBIr3coAIjOL+oN05VczfksSVflSOd7X6Quk5SqvuxCWJXUtFgsZFq5c6c/nEZWtuSnrs6nM6vunCWcUYTayRU4KO38zZrA01S1Et+nL5WDmPpktZlbTXdE+PAdimpaWORglNI6WfpqqVmkKTPvx1VkyYlEN61TI1NruklWY87cd9X0GVE5B5J118Z+d08wQYLkKmRjHbLMNPr4eoe1YPUo2R0ZvWblG5JE/dbKDqu3NTJEfniPVRsEKZMhFkLiBADZ5fLi7pvnn3/55S//+v3rl69++O719799//r7x/dvJoIMSjF3o9H87n5TaL9F+lBIdTE1swCwc92Z3e7bB4pQgU54VXy0dCzz3BnLqiB2jbgpRZ3D1tHBgOgJ4yTdKqRt7ordfMs7cHnMCEUKZ2vmTPBjTNXrA9ovyW4zNLM5184rMcja23zdgZqCZNnTraBSCaORWV275orVHp3psFWf/uT85gzmjGizSBmi3W/uhsG72x636+3dm0cf3D+XD16G322bg3sgx2Eb+Xib+23mYrkZJL9sNMbMDvCKOZnT1HKxlpXL9WwzU3zvzCquElNbkQzRnJ2cYwSmNGwMH05g7jL3bJObptyMBkM6RThWk0zKhhHBLdN24P3ao77eG6O2kkHgMLNB4wDT/ZNEk/slQjPLfSFBc0bmZbg7VMPg5m2CmHO/7bd93h4ePhAyH2OMu7u77bJlkZJ7cszh6YBB6t7n5b0QRYJmqmehhsyuWnsVqgx0oM0Cn7ovEjK0VvCl0xfL8pTWbtmVKpzYsKjLy9m6+KQkGzf0L9nvWBCzsCkiTrRPqejWGgkhT/zD0iWHQ3AcU08GaeGItgY6YfuF9dUm5gA3x5/rcixPoeEtaj3Vhrm05wEP+xrMTXZw6ZXd2kahPBu1Z1exenCht8KexWoW1dqEcg5pTKOc+ZXwpqXObhiycYwFjkrGKjwv77WpBJadSg3UIpZYleyxFh04yAW2Bb8b3AtaE2GXUs0/WnkKvewzZr4Fd2uZsfHs/su7u8++/OrrX/769at/8PaH717+8bcPb3+4PX6gwoaz6CKAGJvXpM+8h9CMmZX8vRJiZnNH0J0o7sPgdAvN5Uwaq96w2B3W22dqC0Tm+eiABQbPPAuYmcNCvPO4jatmyLesFksj42MoQgq27u5mYDUMUZIbpwQyYic8NN1MUdMncjyaOaOBTm5mAtWUc1balGUDbM9BKoGqDE1mkVD0HNF8XaVTxRp0gclgON0MIfkM32wb4yNB4+N+e/PuI8m7u+G+3w/bBm2GXRnCdhkcrkjCmdPmvlfnBdU1picBlFOGZTQGsr3/E2lJ3e7AjhbiBA6V8lV7bK967/jv4qa3yLO7dbQ2PPEaPOmWjECps2MWajq5Xehtc/Kr2pNpeNVe4QrsN3RqWLyMntZFyu/t87amxkGsnHRiYan+ub2PUu4d+CxGqbzHtmxHRgubHgbW8tSdnGpn1uVwHLmg/0FQ1Ts8Vhg/fT08dNRxMhxG43hIHYv55PfHlZ+e90/92BC/f6in/eQLT0zLz/36OGfd0pmbOEnxOq/WAq5nW7f+M2J7SolBiuEyBT/7WCeXrWTnk7wTNkvDwzqZTylibu4R+y1muh0RYW4ia1IHZKp+meY241b3QmSWGUIzphu52eX5i+dffPvuh9/Oxw+0rIVZD36QLL31VL8tw3oYlpLWJfx1yf7mk5eTG/R43BX/gBpiHwkyCzys0NiqJ9QiKtK8oitnE5RXx4hszZE5FwBSqVnTNuh6DFR6SfeC7Bs+7XWcQixoW9NUWh93qIWDAfhkP66dcEgfn/xP/3bJRv37LHnN5NTdHJGh/huenEh68gL6AbBeJfr7NDMi2rE8bqtPpMZpqQlaPbV1TKgQa/mSGPiJ7tM5XXFRgQK7D8XPqZ8nnzEGhDnDbJhli9yZ7UMGh1boM223GWnmiGxsWbAwE58NQmg6aghP51BRiARpmSidg7R7kIXcfc4Ze8irOHHOxMbpOyRYYs6F2Ocet+u+396/f2eQb9t2udzf3Y8x3DznWB+B8F6m4tlwlAfkX8p3YLnmLG8faWzbVEWluHdzUTVHl5Ot6osrf6h2W055KlrqVLiYK9aBErYwcJXJ1KkSrEYBVx17ucx+iwaMyzzXi1rSUYjriUI8/tWuQWHmEvP0yftJO0K0TDOL08IS/T5rS19t0toUfUQgDJRCmShdb6fuLqrhZZ5npteW5UIpkzQvlnk5VCQAS5LPMq4GoOrYkBUtNYarJRWZHNAKPHmHTJiIKL/GWh3UzPjewqWImqRe7HatZXk6WEKw2KbeQWufZmZetAiuGUnr7ZwVBSrJLJEzAw3uKyEop9fSxvb886+evfjsi29++e6vfvP2xz/8+Mffvn/1h8cPb7Rf7XKxdJYjpPQdsuoySRfNmAIQmv1Y+x7ZuygnykeEmbNyETOrqInRWALRCRkJ1kRjOs+mQx5dCFtNM0DY2NxvY2jefAzFXI4czBhwRzFWZfE4M2ZcHbuR5OKMufyj2nC9SXKyjZsXlCYg2RrgA5D05TugXmWxganFTWFVfpxQFiQQsMxEZo5RM3PP3j5T425cNnwAQHvcbx/ffNjcnj27jDHvzMagbrc0nJf7sW1DEch6zJ0hRCjmTHOrmO7DYGJA7OoSsoBm5gH1DHFnelOph8p5qIK7fFjbZyTXDqnqImCRekTTnMguu2FyVPlPCyoA0odDYcmbS1bC6zaE3Wag+iaW8QtElUQqcqCeu01l6hskzBnuHjEDmnM3c2DWo5IiJfg2sn/NIBSI2BGaFrfr7fHh43a5jMs2zDKqkNY7UURxNFKWVWeD99K50rAhZN/ZHMYWaYljTjOJsKCAHAmBYoiwuBu2ej8Uq4DVrG5t6eJNTzw+SpOWrAWX/uQx4j2didKNqQGb80gVYa3qn1y9YNOyW2142vdawLFEun8sCthOpdSN1ArgLNC4ZCHvSmsJ2IayDUDW30lAtqBaU+kbvdNG7VwB1UwHgLIV11R2rlE1TktITjRDp/a0EnrVBm6DmM2bwYqqpZIq7dJ+twqENzbNhlwo4RYrlrKsu5oGTJBVTjUh+OH4rETF5f30igGN+Al0uyBlMkxh6Ah0yj3LQKohezFvSYxBgBf/KYHj8uLrb559/uXXv/z1L/76H7364bdvf/zdu9c/3D6+m9fHwG5pWnsMId09oUY4AGkCiLlHNhGKWMX9BmhsxjB34wCCbsto5QjD1kMGwN0Auvseh3NvgwUrFAY6DZCZgFm0fLsXkb3t20qmDDs55yRBM82ICJAzI7FCxetsRa7rFSWCy7roxunK9SYgi/Y12LGyRIPVb8w8e5e4EaJoMPqcNXZUUDVjWiNd5hSxDcq4h7bN6BaPut708XH/8LhvZre78cX9eP7sQsIiMmN6lzJSVjaZ9IvNPUe4SF5Au9RhZdhk/UubgzK0VtlGZAKdOmaKpLuDMHLOoHO/7vizn7XVOsUHSX62IC9f/6CWOlmwPV/raBPay8JKuE4dVMjq5NjmczRvlLprOdFLL+X1Vmz6gF15Q727y3Aze9GcnMKCrClyVYR9PKYScpR2bS7+RGdk7GClJLcbyXYCcNzv8tKIdaOnp9GTp28fEef/wbo0jysliVDBCeYiHTGDJ3ZhnayjFHWf/OQiT5b3uPn17eOHZiaeHq/jCXuVD8VZ6LleGI9vdXwFrRv7DtGvqJ2VnyGtloF68uOf+hwq+slNLgtQtwM0C5n5hAn4JM2IfcbmnnnTEYop30bGCmg2Z2xjCKGQjRy7Jmlm+4eEzqv+UMDd8+fPvv52/P7rmG+wf4RgpfUNmG13186S1jY6+YrHY5xX9fwsK2aTC1TYqNeubSE6ACMCR5XkAhORSQzsTIdewMUdiwtbNHip+ay5H7tJTPtbqMaTBY5QKKOzAJv45drvC6WUtNf2ba6wdZJOO+kJo3NwjE+EXFpXbbVTR1QZ3ik75GeFSiVTayef7f96Hafdc35JarAKZBVYyn8xY1qV80/UwUlTFUAlQEX+I1sA5/yjtVZLD6UqPG7UWpbKEOrP7qH+mLuR2eGHxmyol0n/M2KMbY8drUuRVsp8FKuSOQOZHEEzv0VkngKQs2I6jkR6FcYZCKtZRbaYEfgITUlTq2cokQnmoAJWrVKUXS4U+xQidP14ffAPd3d343IZbneXe2Qf3K6cyo4ykmjhPjKvJ8UhA9X5wIBywndki8aYNMscoIVggA5wKrrvjz6NBET7Wuk99esxayPVb6zmwRSWOXREckY4TFBt4ASrKt+BxeUtsdaS1BLDJ4RVGcBl6rHYDB3bpEViWSmkol+vHg3Bu9iSxkTYUVTByTdqGNYud3uwARGzlVq2WGEsT8rcU5+kg7ZHJNtYpkQMis1drtaPqnooI5X9WJZPt2AACBjcHJl3szRtKWawlWC2VU0/Kwf7aNn31Ntt79B2hb3UrUQgdZmiDiDB9Vc0Q1F21YDm36Pta7EYNYxviVgKiWY+guHov2V3zz/b7p999uU3X//qb1//+Ps3P/7u7cs/Pr5/vV8fFNf0nLhCkdVj/qe+g0gg5hRi35OI9RGiOx1gtWQupruWQA3bUxvIjjXKdaqUeTikZNcjggxW1zAEa0pPwxSZW8sg662hh7ADOfFtHZ6d8tMSVg4jsKYg7nOSqBFRpT3JrPRidmTKHuLAlBTZjbt6eYHmFnuYEYUZIi2W0wSISkwf8wbjZfNdIHR/P8wtHnG9XT88zPcPH4bx/uKf32/P7zfP5CYYqVvW+Rr2tCRmvnFmm+v0UiqLRWSW3qm1cY4B71+lHVyt4i0fgWB4d/Vx2m1OOG+Pt5ENpJ0DJkTQGAxO2LAZjFBWLQJyH0a6W6pOsxE5GK8KPVINZZ4gQcveeBFBObIEhkYgO2BlCR8gY7YvKTSa9WJRGXirggwBIKabm9ncJwEfPjVDuu230LztV/fxeLtt7jkVbmzDzUnWOyKlmLPav7NSSKNkBNixR0QNbqohU4yi9A+DX55Ikq3NTC8VjAOGluQkIFDEOXav9jvWd5ZOCUTCmNBUZWcf34sSXGDlv6p1vxakKMPSlG3ezfrNoYpWYKXgViGxowtpnzld0bYySxXGAT21kHHRO5XEUUC3mKvVFQpdy8Aqqey1zZzIZTuzTcTsIRa5EQSd+u21bpWtrDcdjwySsC5DTwtnWeLWlUAhd89Cql6QrKwJq5SnXLQDUJfV5DK0tU4spd1mAMrNerKvq1yWzXodWLZmEzR52Lpw6f185Lpeor2sxrIaUELAfbPPtq8+e/HFN7/89t27V69+/P7V97999+r379/8oNvHsNyYWZdcK2huoTAMNnmn0Nx3ph1TMvNWDgDksOypXQ3hcqsbAiTDOt4tJNTLmtbkv8wdmeyapFNz/7eY1/TQLWdIUNl8tqgQUVHGeIbgiKmsks92Cbs0nHOfNrJOxFBjx5B5jUiFUsa6AqxxfpNCMhlTMPc5Z4dpyriRCCHNbkpgvsfMFCA5nHPCc28qaa4whJuZjYm43m4YuFy2+2fPxh0RyfNrn6FFuho1gYB5dZPIASKzcpeTWwoaMrKVDZuKJCImQHfFGlEhAZrR8JtSJSw9iY7/qc+iVJadLVcq90LtM5Xu6i1RGqWSK1tFdYzphCaXlLd+6d3WG/h0J1QxRTi+z/bv+kR2YhrQOrZ1BQ8HbHmkXKTx2nAdfrLT/tPpEDV4bVjNHqCL5TIvLxEdFK0tzUNfHHdRMOpMKH3qK67j+/dNrS71q75NLi1EfPr9XtQngPJkX54c2b89jjh++QmJ09aHJ+OCQxfzYD6aPkKzWOfbPNamaIPjPbYM4bRElQ6z/v3kjnjc+c99zmtZxy9XajkCS6ZUyR0Etc+bMPKh9rkPv8yZmfMKzeFWSLTmBOWUhny6nvCQRa6CpLGN519+8/zLX75583cyp2JO9eiXs3k432styOHmE015nOjD89dq4XrD1vFNtBxrcZabAya0hCUYQq/NcdIMSiSnxMzaZrWdREDettBsZjFIdloQCAtFDtBCDhGzrIfOEiaAVIZpUVuvEcRJ2IpQOj32wa08femVu3TIncpws/kjPP1epbS0gK+d2+qn5Wxt9JJcrausfAo9Fd2+b9Ti1ptUtMuXZHeALT/9zebnoSdvTH213omtsJdKzvvJhJdl7+qtZVh6RV0/3U8/83Gzsj9MWtCCSQcxgHTac9jR2IYbk2sKzWLqGcOqaaVyhMdII1Y5yogwOKvKmObmZiE5bWboH9i2ERGYlrXkkPbEn6IgG5YdWKamu5E+98iOjaGIqFHP43o1s4/b4zY20ob72DY3c/MGkZBixtl36F4HlFTT31J1pEtR7V3OUtk8pA76tsB9Atv8R5mWqjKRMhTdHp3UzJGeQEcaBUULytTeAp4QSEXGRPnr+olMJuPAykZqmn4Jev3YLD9XHOGkktP1bt/hUwt0NoDNa5QSLDHsgA0MneiT2inbtZSua9OsjLkvewIIqmErAIg5A47EOzn0thwn62tVxXyO564yETSJV+VwyzVrm1Szd0kQmbAmVi0LW54LIXbV4epbp2NNmgCrm13YA4szM1SRXaudlaZwaOXOxYTQotNvpfREE5hZYnnwfmYzJjpo6mSINL9/9tmz+xdffv31w9/7zZuXL1/+8XdvXv723as/zOv7TMgHkB5qXiN9B+eWvjqAmBExU8gjZqVlGOassVsGGi3IdGgPsq5akaTnmMUKqBYjBCr9z8TcX4MRRlfsc+6QVO2DE/FxdsMYzzGLtVCCQTOb8VTCoEg3myFzSpNwZTA8Oy5JHH7wqQqaqebOBDgOKCRKMPc9QhGZm2YoajLvQejxUqSyho6lGNPuzyyUAyKmO8ewiO3hervt+zR9/vzu2bPnd3em2BPn3eYUoMw2aFPF7DtS3f2Tg1Mx1rECB1zMUQHaJjObNpCUvkPG2A1gds0mFNCo2Xiop4o5ETliUzmVgHBpkoRlNyJCchuHF00U8UYwMENGOjxM6cPkbKfV5D/LmquEBPIkCJlz7GS0mOHu+fZutx2UJphTt3L7ORHYkXOVOC4XQk7fb7frx8cHhcQx/O7Z/ea+XS5jDJKUO6lkGcmYMvOqzSu0PQ8vR4XDU+2yw4FanmJiikptwUnJLPYu8x4TE1GAhZ3ULCoFpjRdNqZKuawi29bq1dsoTUnNnQRRFA8O2Nx6hVw/LlxxoPJFLqbDXEc0I5saMmIm/iuqptFG7XK2D3k4LYAyUz/LoaxbErSj9SRmrJXHh+zu1gqvfQAlE5JkUCYvObbMOspvaWaHrLPxa+XeKrZ+qVow8rRARbCVSZBWi6dUTFbpwVasQQHnE2JbT99WldHYYlE8yWuEgLpzICLLM1Ptq0hnoLLITg5cPUslR6qKwHvyRsc41cXPqCRpSUqBtru7L+9+9dmXX//y29+8evn96z/+9vXL7z6+fXn9+GG/PVZzgFR4UXiiXM+kpDdTtanbc0Fjxj7DyIBnPzaay4LKBnHlpe+SKevdmDjgyJSmlGFDmcA5Yypu+6SonTQlJyQJEbUayuCkwyAyJLepntQQiRzNnabQGEPHviCzZV10C9oJMWOElbNhshqp1lQHCKursOi1EFh9BzPpLwQGIqaYU1+QsQSJ5gih8kihfd/3KRU17vTY3O62y9jcGDMCpjmjLhKSpkKUVemCsIYQNmujctDSfKEdkKYsU3qyiKbQ6eF0i8xC8GKcdDQu+vkPD4zYAVJaK6dTtAhgDSwsl0XNU7cgt/O16I1mm7AQc5/oU9DZWqtPdnKJ6kvW+u0E9NoAHhqxkfyhhauDWj2qTvDx0IqN8svTXneztGeyR+kKql3sE7IvjXFe07XDcRxW7mNXBCyf8+Szqr8hSf3L43w6iuuOx/4pQdirSzxRNj89sA4+3oVKj5++tiAvj+M/+Rxrj7U8fVGuO3oi5J9cvo5q/X28hSPjZd3muoGff55jAY4/S+UBFvQ0MPXuIc/9hZq0qNtt37ZNUsyYMd08B184GTOcJmqmr2I0t32N+GRtkGoJI4i8e/78y2///ocf/r/z3ZWY7sxOK0LbSAOCQM957F9DOFKKUiJOb0brN22Gk3Rop7cN+sIkubvYjt9pxRIIrry+w/6fQtpcXzOLqBwEEVi2vjKObSHUjAwtSaw9nTmhRE1aSLPJlTyl9Wj90leJfmc1ro2Cwqi9xU9eO6oV+amty7EXP5EQ9oY89uzSbccePHYBj/+0cl7K8linlTKc1EHpd5b5jt7OmV1uUqRhWl5Mpsu3Zm7F1g+5AN8nd4L1jd5aOjCRElXO4wH/3KcmriaGMdOckLeDL1HOUc9l9DFSEtyGGeecMm/kGGu5BQxzA2LuidmcFgrzDuh2mVEmQCgLuc1IGCxi+rhPF/d229HelLnTGJGgEaEpgWY+PEs5ro+Pjw8f89WOMZ49f7aNcbnc+XCCzBg6ETOsWLaoFuC1I7sGXOgdme83A5ClPITsFJ4LhLVFEry275DdiSJpVIoTssLStV41BKN8r8rSKpdEaBVTR+SFYrFFSD+iZ5Gc9Puy9sKRcVevs3dIT5s64e4Fs4HG8ydO7FSEoR7o1tSDesNGJrDlXaw61rblp+nSGbQrJ6TJXpRGUef7lGFOrGaqwTqt+mKPrOJPdV5JTzXzreKLfZICFMciGQnayqKt28yc8IZF2esnw12FV2DLikeSX00R5+6NSh7uQTWw5DdPsYDc4bBe8eQEUOiqUAdWj5blSxAdK2+b1nq2ri9UN15JCatl5s8+++L++Yuvvvn2zeu/ef39d69+/O2H199fP7y73T6O7Mqdp5lpDgp6GehOdxeyMVnNi9CMDAZEQDR5udGgRYTVGvQw4MyKywhoJNwGzabCc1AyfUbsodu+KxC3SZPmDBaYUE3/ShDMAQvPbjmYkT2JEEEpzD0iYO4mBKo3k3dv6QAyyymqrzPJ7NhmTR83vCtrPxVOyE2hai2hSA7dDCHOiJgzg8MiIqo1OJ0z2zSZIrDf9j2kOUH6GLs0HHeXu8vdRptzl3kuqo6eisp3SxIxlUa7YBuUI8w0s3FU7f7kmtKxAmHuSQehhaj2aU4+SLGu7CAftbHTOw1klyiwGpvNrFYjyZyH5iSZviax+Qhk5kFUJ13aGGAJebG5RbTT0C1UcsOYkzJIZtWoqLqpZcGKZSs7kwRTzorK2jkPE2vaUWrb2GegEwQAQBH7xw/vHiAzv9zdjbHd3d8N39hvPSktCHvsaMXt9CgIBZSpTrwXZPYciSIaMuCSXavTHOCkyFCsU+2cNB6aZSLQgZ92P87pq6wMmw4INvwo1dogqvvooZkKLHx9MEX5SwDNPeUNos1cApTcpP0IzFZtR7YnVkyAK6Mhbz7ToPLWleqwnAO1yB4PlhmVTXxhmTXUCAEuF0JC9trPNODEkllUmzu6Aig5VeLwLdp+FQ7N1tKZZF9ZKInxqtK2/N40Qas7Ugpi9GplYloel/ahojgFuNAr2szakgD0LFiUIU3X1CoNBv3r9gTicJzabB1mXVrZWKfM+EKefeGionLb9vugj2dffHb/4tnX33zz7s3fvPrxj29+/N3b1z/sH15fHx9Mc2zOoDuTp6p85uxS4Zsk4EIwOpccbQ8zV8usRhCkTIUmIl/1BAhM5sZPY1ZZtAM5ocQpmY+hcMKLTc/qLQiENSzJxNxEVhNBlXVXJQYUxRJR5D0y94hdJJIhDkAhpwXIGZY5QvRskF2FpaANQ8SMlaE1TT2RTXTzXXtI5kPF3EOKKczbrlAVdZMKIuY2Bsm5i7ewMHenIxAzMvTC3OvWk2UMhFl7YWZk0Hp9hRBlxW9hZliDzoAwK8d+uF/n7LkrQgSBbXgJFDXnbjTzzjH/i5/D46ntyc7oOeuTBqJLaa3vcHkoB9OCVIxYiXjnyzXh1UG8QO/dPtuZ4lkKNLXKCYez99niWvpRGurguFHr5Nn2ps6hvQVUFw198Ocl/8tpqKdY16l77hOVetT66lMuprf5gf+Wf8vWFwvi/+zbShXb8FvnQ/XpQh9m6/jtYU8O9yEXJm+AT77+cyf+E3fVj/j0G2wWvJDKJ+eqZX2i9fqx8nZ5uom/dDvLQqxX0/9lmhUoOls0T27lpTdSgqjbvo9tG+YxY0ZEhGug21BM5U63GTESMmXGH1HRtgxIS4lIt/v7Z599ff/ZL969f2nzmlR8Fh81sY0lOkg3QVhiwx4U095gP+Uiho6lKJ+q9sMTylBd4N7C1Zm+LZa1/9SuQq9J+h4gVJ0WqZrFjPIbDR673GwGtE9tY7/t4zKgfbAsKxrI2ZaPl5OqTh7RsYn7BbcANq/V7blTivorbCnRSYDIblnSYOi0SksoagO05jwUzIkoOFFG68/rHOvcBRga8jT4y28Emgk1LJ1cru96n0UrU9a9V2sBGIc67Peu1JlLOT19sjyI/WzHMUmsdHHWX/okUs16orSzTg8orXCvBaufCS2HIzsMwLAhYJW5mdM5kMKccC3DboapaT4UgS1nSmuBZgKWEWUE0u1PSsTTwzRJcMw508+jG52aSRqkrJpmumBoqKyI24f3O6Dh23Z352Pc3d1vY2QicNp2H5tCt7jVHJuMFFqTI8hkhwBQmVbWvEBAZd9VleiLAW4lk2uSxWtq9uTJK9TplTfqXdLZPAl4HNPBy5VTuXTmUqaL1D+UCwu0t0UWjtFxOlFTKDXNRvmnLtq5sKU0lhuSj2zL2C6Ln3eLHNWI9SjH0/f9d96l1kOtzaKK2wPD0lGcy4x11wy0cgOSopOt6C9yEJhi9ehOF698DrSjQgzz5banvk08zs4pWEq6biyh/cGFse7kyCG11itZropoByqLecoP4CLw1ba1H6Z4yUQcROZY5H9lLeQAUD25S4aKvJr1/qgIo12e3/3i/tsvvvzim29//erl969/+N3bl3+4vn99e/xAxDYyMbCMezYvo1NTPrakZkohWubLEzmtvmPgdDMbqr5AEYJV+QU1D2+5FVpZviyYNYMPi52+Wcw9L67sOdGsJyvPJxWG9WNa1cSQOa4xk/vMOLPuT3Jj1uCptAO17z4si6zyWuSIAJV5f4HUgLI9KkEnZpiQeXPZiT17gZiPAJFqAbFPaV5LbSporoDU1fF74DpJullCfYaYI+Oi+b68nmhV46oar8WcpJZkfmqnXI5ZpcoGQTGDZHnVuTtCEGaICBZrBqCaKdkYNI3em0fBYEpwnsRhBlftlgyHY00MS5+GJMik9p2tNwGjTaNmAJhz0pejBShad8OAqVn8lKL5s3KqeWT2EFAgMomJRJgOqs0t01LGtpWT2upN0seHB8XDxw/buGzuvm3bGJu7OatQ3Ghgzl+QAhNZcVr1jXltN9fCntmBRxkk0Em5lf46UlgbPjQzWzxzsSPMGuTWZKd9Xbp4TaAsQ5yahWuCwMqG4VL7KGV9vM4TsOjAxKKZ+vYW5qluOzVRr12dw8FbRmRdy5pqJJm1NUYPTJRZsDyb6s69jGJIqw9hL2vB33bwklmSrTBIO0QlpcSqzJM6aFpPImQ6B+cscupUZlgoOzODUpXzaG2UVevVwk2KJJ7am2tnhejEnMaDKkiWVZD5wLZY+dq0VDcc4PF+mvRsKqne+MkmnANE1V5IxYEBWe+WdquMQQCZ3ZdtvwncvXi+PX/2+de/eP9Xv3n/+uWbV394+8N3D69/3G8fYgYVhKz5gDlFy/6vVczvNG30jhSpbObca62MdJpduKU8RezZpIw5/LMgYdC4xxWibHcbsc8kRNwpOuEglUyVpJiRyq1q3LqTPemZALTne45MW8pe/gZOKauas69lEn4BGE1TNIQmMdhh6nQ7klaOCRBuzsp5RMydNDeb0i12o8GBqWAA2uekNCcVE4IG3czoMHFzAbO9X2jt06SbsicFYZhzp6zcL4SZZSGMkp5TcBSjRGcmBUsU5WRanZ5X6dlOrutbCxFGzznJKquUyTEcf/ZTCr70R54vgeTqDnnsybLx9Y8+Q52HjWwOEmb5FudrnbY31g3jFGxM6V+e/wmJsgqFCmR1fuVyAI9kpMXT194thNoKsLMv+siDFTtp+nqROC9CUTb1y7rEOp6HhuJZ12PVApxQ/dLtC/LrWMm6cuauLk1+8GJ59Z/x/84MzJPn+PnPQbQR54XoO9C63JM/HJ/jrupKp4OONe6VT4bu3GBL6ytr5etrh8Vt3+mp/3+6y/pWm7h12ME6JfGopYcTbFXvaywwD9WwXs6Y+76bO90itO/TjTY8vYt84j1iuNFoOQ+2JjlOAkDhBneLmHR79sXnn/3iN29/+A66AVewi7bOUL8drLWC9Z8ic+OQSaC4A1A4fIxyxzrb55BDnt/HYYYW3dVrv6ST3ZEZucNsRTmNkImIjLtCDpvShO9w+T0vG8x5wZwhPs7rR9NtbIh5Mw83ToUJsbqMAc2b4HQjTSqdAEmirFy0ft29Cw4Iiba3T6QK578/+Q0/PSB3pU5NWp68lWNP8LjtWrvUvCl5lnUitXcsGyRYdvdAoYhKoUV7m+qmvYtlJvBUkwDtLeb96iCkpePxOjtLsZLn41iNWqS/mJeKCsuZcUdNIjL3agYHEJbFMICGewL/yShcX8pLOV55c845syzGOUK3vO2IoIXREnAYvTyMBiKoXrzMMpxqeIPG1rOSNUIzKypS2c8l38YagJ0TsBfsJ/d9v+03BS6Xu+1uGz7GNoZv5pY0XwYR0gsUgKkdE8Yc3pQ1Waw0oWpfoIhZSQBFvq11L2ha2WWLq17wkSiXcU174UH/Z7StjQMFmivrZsrO5nZUo9Cka1nz9covgHj4DmfpUePNatNZ0b2SztIMNcI003JYGLX6HSxVigLHrYLWs/VOysZUKedVEZZC7e2MrPKP0xZd0LkzJiqrYaoifzou00b11OawfUasDPoQEPusm+JkBgHaFiZpGIvDTWAE1pAW8/JnOiMMPDXySZODBWZ0BHvKdW2ODwVvrLqVqpGMPuHn2j60GqjlqOTlDgIUrYZ2MwREumOqeAYKWuQAqshhc353+fzyyxdffvX1r379/s3rNy9//+aPv/3w+vv9+hBzkkHCrTjRxM8zkIn6EXIzOQcdB2ZLNJk+oRlGUG5e2RnZv8wNQHWhAhUTySdI+5ykzX1XlsI5Kcs3b5XDpSr52CMYABYjwIy81jB3KHIeXlAuZD/QDOmG0TMOnprHjZqCIWZAXiO/CrNNVgoCQQyrwjeCc+5kpsdwj0kySaVJaZ/7DEgRq4OtPMPLnmEQzBLxTvhQqrepLNkDSO37Tvcs9wFkDpCY9R5LjrIYokLV9egORkTWAmtmB7HMBEL6U5AAi8gBBcWbp6C6j5E71/JQSMao7NDkLWyRyFk9RDOvm4bT926RZTkz0bOQUgBvM2ubIxRWslLqMRs1JZbO0vfchGnDkqVquhVc/arJ7MAHMKNbqcsIysVsMxzFRWdnLLcx5wwETPuctw/XVCXbtpn75e6ybRenjW0QFh5GQ6NXHoi9OJS0+2WukMH+8v2W4gpEdgtujdace24VhWZWxmZeRg4CJ7rTUroMWYkkKSMG3WAPC/D1Hm/zsn4qTddO3KFVsVA4DqXTtwhqdfxVBdPqrhtASMpZBskA9FWz5C+NRHPmyNSTfORKhztkH+tmSVRz6L71DimVVasQgoWl97hyAAqT5XOHaqSgTjgSoDArG65QV+oB615XShueOlS9QvVQ1pqmzW7d1vI/F8LKe+hNEivrAcFKNl7PXH948u7Q3NNT6CaerG1m0Kx1qgmTdfE+LJbxQyGr3Pqh2QyC0Xj3zC/391999dUv/+qv37/5B29e/uHl99+9f/3Hj+/fxLyGZuxZSBwIM7cwQnB6jaVIo24jM3ki+1XtMRlm4duQZGZudA7rFGRzzDmhSKaJQlARodjpZMDcDB4TKqe3c8xYFRuHg3l+xb0xCc9pEgH1CLoyk4lmSqknCgG07zTuEaaiiekmGuZcyCmy8s4UIbiHNOdOOgykNGNG3K4hKHbR6MOY/bQ9e8slby4zd8kpz5mUpGXzuR2kRQbIWjX3226mqXSw5WpUL5CFFS2knPS05cMlWpa0z919mAFTbPCk2Ekzcgo+XKLZXySP2P84PKtFaDRYOX7BNnKfMBrt9Sa+yjmbfYZ62KWQTluFTV6fNufJJSso0Ki5lWwpX1sOJJenXGD8dDKgXIje2QuDlgloRiFfyHG+dt4We9Nerp4YDiwPn+t0+Z2lrNYtL9WMhTgPr3TBh3LL2OuUXzjxPDyRLktPH68Up2X+yR86ZrH+rtND8PQlPf3vus3Tv9freHK5nxx54g8FnP8JfnqP53tdT9GrcHZ12zlZFzmf6vDp2VTb+Y8J+ngEt5eJzdzjFK3bvg8zA/eYzhlhCguDVeviukYG4nOoeeyz5zXUHKYVd7p79uzzr//q1RfffvjDK+ueCIXY0qfrd9FCUK+22M/14nU2kL0qWvuynnk5HPUGlud5ErlC9mdtq1q92ocNNnKHF1e1HCbyjuN2C23PrtPuv/6ru89/9cUvfvXXf/MPPj58GHeX1z/+7g+//Tvs7z78+P18/Ch+3MaMedvc9+teN9zDT/KZi/EoM9RCuvysg0bREyHptVu/XsewZaBF8fQRFml1qL7eqJ9kEZ5W5yTAhzS2aB00tDV4WA4/W/xW4cw5MVM63zz7DaFh46ES1u0UOGhzWC+cGa6u07ewqHV1S9Dyzf/cJz0hM1KeJeCwJAsEmZkmmGmyERDMjR38N/qMqYjqZ1SNcpR/z8D98LHvt3Sbk5hIwiVj27WMiYZVJAhzitaa+kebCDcGMDPdSECWuVVcGAFkBb9a12cFi5nPiIgJw+12vd0+SqL7dtnGdrm7u9vGZmbug+Q2NhyyWRPcj1dFSFGTYyQrloUUzKGFTBRuXsMw8mtFYvTmnDMhDTPABsAKvjIj1oRZM0qZ7n2oyrP+LVmtbbvYh0/3wKIg8oDu011B4ljuzWoeWoZWB5XPSqRq6eqtImlNxoEYa/cy1hZIl7NELcmr04ig9h1W3g1a25VCz6vZSupZFo0Fk6tMvfKJ1Ps9ichIxyvzf5quOvpmMHvadJI4Ufgt+woreg26XK3UY11ci3svt6bdrn6S5t7S+RVrAepa6s2vJ4ZtPR2aFesg1YGXSFUGUCqPFMlMcVQxgmIGh1t04SDIsW2ff/X1559//otffvvh13/7+sc//Pj9d+9f/fHju9cRj4qZc6JSZZknGQGjpZJYpklVqhQE3U1zmoWNERIoT/ZcbiCN3Dr0KzfSWKgXAjZIu8IRZgNSdn4p7ZD2FcYZ0fNTDqjJ1oA0F6bUwdUCnZUzmGtTeyZ7s8+w9B2iHVujmUdxAZIYApxJTMFs732RwjNn7Le57wEgdtFpgzUNYFROVXQVmEONKEotmxmDOfGpjK0xpojo/roJG5jD3jKwxEp9znuImnyukGUvIFV/1RkzwjIlai74J2IHxzBO0d0VMPNR93QEMZXKJ1LsIidIJ+42ILOgDtsxfLvFjbCsByEoE6k5w3OmD+g0p4emqhW8SguR5SahjCANlXGWSrBEHNtmc+4wjBiShnHOPbWtmVmVAlkoOKqxrlCtqpBVxiptQxPIuc/b9fb48ZGkG8fl4uZ3d/djDCN9bBn5T0kniWyRzoPa18mJKC6n8aVOsJBkBhqW/beDCcIqhjxoc4TxkxbLis5eLioEJ6+sUYVapx4lTKmD0p9RgbzUFifbJoDB4BmaHbihHkGt3RRzYfpi0XEKkB9uk1p9R2XsqzrMAdWNO07921rDFSANRdt/JD9ox/ZfNk6F6lhPW/EPAVygXyheLKnKMFrZH5UhB+QcUztqmfIxkIxeagdrSh4VUbRuTNhhW7WPURRVz0lNnV/rD2Ui0gnWHkGjk1lbr5UHFtXBvx32gTU0ExbH0qQJjOjB9myvYvbLEmHu9599dvf82RfffPPLv/rbV6/+8Pr737358feP7368fXwIzlxQr57UiuEOzxkLM4KCuV88GxxENZ6TNJEVpnEMmsWwYUYzE8I0oIJlbMSzKwDXzOWiZlaLZmXuhCKgmKHsPJcjAzLxJaexBmYRZJRiV3tSKOpOaFGs6A0yA5iWjU1oxpAGKVpoKsJ8jMu4XfeoJK/IbbPvN9Dits+AwXL5fTBZjEwuAKvAHUbHFkAmyyOHM1E0mpPBVbMGwDlgNrNQ2QrSzTmNxlH+ylHh1WynZVNPYc4pYFwuWUcb2VAicUD5V+mxmLKxWrVvegoVf+bDZlZb/xyeEHqSWqmkDiQdX7bWUQffsrBXVoSWWuRPLppQilhJlHWRhNqV7opWdSSyvuiAX6W61v0uxdQ33Bu3Gny2O1ow+dCOBQ5P3tvSxix3hJ2KWbb2TLX1lixRXP2RsA7Q6cAyfvkUbDTyk+X/BOGjA4sFDT+lbD4BmDz+tlwJnlYMy53WgbbO8BxNmp/efp1i/dj02HG1T17yp78WOo/24IWWC/LJI5z4P/3JE+eK9SKfrndad+LJHqglYIV3CTQ7yePvM9vPz1k2XtxnDJdFUCbk4Bm4Swpp0pw5tzFGKNC9yuplkzF3c3v+5Vef/eLvf3j5d5pvoT0ZpAwJnPibp/day5+KPdZf8udKwiH6Gcm1pJ0DV495rAHPO6QUDUtu2/UriKaS6+TaLJ/JZLtg1IBdg/v25dx++eI3/+jf/9//b7dnnykIi31qEDb4X/6Tf/rii+1f/Of/7Lt//p8/vPnjh8c3d3wIPRxMFwRYu9MHKmn5KylQe4N6Kg65AOvvy7aWPK89eE79W2LOJeanzcqz6J3WrKPd/QJO/mztHdWXD/K7UBXSccn6rQjS3RvS9rlqY5w26QmwqRMl1RxyY6RcnKgqjcyVEBreCQBD4fX4LEVTPywl+Cc/ygwikoQZs10zWXlBaXatSPzMH60ailxbN9/VqVTZp1kzmxOgiB65D4dNRcwwz1r8erTljJUPvFazZjOVnGxjm3N3E7UlFJj7nvJkRPpslbrsjJg2TCDdE4VkGYiYbQwBYH+8XR9vH99/yMrvcblsY7u7f+ZuRjMf2QYR1VUEqmKPJUpc1ftlMVG/OL+8lOWYADsaEasFZ0lUFeSciFSeeNUCPk+3hFo3o3VEy80JjGuZk5IFNOWZ0l8dLRZ5ejgLzBeZItt3VT5BzGA1dKrLheDdaTRXI/mXfpHZ3qgxBTHMkiCLpc9O2n0xuae7YrXdZeu7pqvyhL3SbeNSkCp/GYBiooxajtTiyLoUScIkAXggW2nO5R1WQzsz68ZVx25fihXHRaMUVPetahlI6bB6q1lzo6Xdn6q6Jz+GOoGM/ZYb1pRDsBq9NayRItAlW6ikUbaTO0NCDkAIguP+/vO77cWXX/3yr/729evvX//xd29+/O7h7Y+3jx9Q6SqSLEiFbLi7B7J5WdIfbuYp9wq4UVLsYc4AgpEM4QyRNsZwAQiHI8MwqkSXGXPuO8wSnpdDmA9QCXwz98CMiUCmrEhJd+RcPAFKsiYT2qTqRiwUcS8u36GgWITMq/lJVrVn9DdPYmNzt33fI0DPVEHNqblP0GKfQM1pU4Rv2UKHYf3CSDCbvI4UQwMiZkSy3zCjwUK9T0GD5wxKQKg2L0XQ+SjJiGq2C5SjBBqNZrIZUoRtnjtkn3GpOQGH7wA4wT0EQ3aSUWiw9nsmrxIoAU17zfxzJl679YAhZTfjvICbpX+cA6zRJ6tOOqSEiYnyq6tnWm4GJHFHVglcGDoWnj3xU/olpeUwViGbWTZCz8FtjiC8mjXT02dBTEHRjmurEZjAMWyfE4o5Y4+Yc4K8Xh9pNnzc3T8bPoYPmpGdRxARmjlngWZuHooeq5nuooXEiWwahWJWit1WT+hM0QZNDUlXImHR7QDOVQzVyBMLsT0FzGVlC98ZV41sUxJLgyw1z9ZBWIdiOSkFLAqMFtpqHFHG+pgAl8bMDj10AJ42CQu35u/XhWrrtn1ZeCoJOBwflgzw5EwdUTsJy0uR0NTQSau2hV5rCxyak2TEnqdt5ZCPXMhi1WbqMGuBwxJwLc9yLxMtZaJ1Uu84QEKmUOr0etr21d0emPhsE7R0I3W8HAGlrQ/CJCMnVjyD2NNkaZZdXRPvZ4HruHv2YtvuPnvx5S/+6s2rH17/8bs3P3z3/u3L+fgw5y3pY0E29+kjae9s4lOXkkSz4VBUXroiIvaYCIBzDIu4hSp3y2iiCxzuiunwfcrM9xaYiJyqkWXoZH5x5UXnVJNdtJGLllP4zBOR+NyvMO+3wwpwhJgkPhCrj5kkhCDP9q42brebW+Wuh+x6DcFhCigm933uc3dzMMw88/LoMJkNzr0yCSr1RIkdciIDyRpBmY2rcjvmgCFFaO42PMsg3EwQh7GmkAQITDshORSqF8iscihrKs0lh+bMBCYxp30vBVskl41KwPvznzqmiyEXEMy9gZO7xJY29h5YWLMwvhoN9f+WFilYWjt93RHX/6uViNr0lE/YOsgadNs6T/UmOLZY77AyYKUMuKK81otRb/bsC7b/zbVNeyGKosRSyQv/sr+l0qHtzNSu1nIl8mGPLx9PLp106vEk6uVplXnQTfXsT9RfL8MBND9Z4hOiPTDp+QvEp/9qfHvcWTkT5xU7fvzZz6d/XE90PMHTZ+kDlpnqmMyfu8rpyz933HrFT1e6rBXASiZVR03bjwfI677fb5sZobnvN3NaUEBm52dn0Ao9p6Ob03eWY06FDApznzO25/ef/+Lb1999+fjq3QZET4Su3fOTN0iwhw0R53y35FZass9P3X7CenXn1hvt7C1J6lVWlUksWrheLglF1GRqTuuBJnf397cHPYbj2Wf/o//F/+bX//q/fX//+fOvnn//h1evf3j5hx++f/v+4e/95tsPb97843/0j7//3Xf/43/3f/0v/9uvf/tf/9f/z//T/1H44fbu8f7u7nZ9xJRtXk0DE0r2jS0+4vxkx744lmrFzH4qBZ1QJpwc3ScyUsxOiXZttrVZWj76llZ64uk+VKKVZzjARQMnFOtthbUIOdJXYYMMsfqclCk56wGu192dAY5Ne+jShCrqOzmkgp1neDiz/XY/FZ2f+5B0t5gZEM2xGaGmf9PWgGbu2eQruQBzyy6SAZhnxB5zRjbDNlfMHLNTGnxm/D81dmLrsn3SacyoRPp6rm5Vk3LrJslqend2NgmTyndIYSiuast/Z8dNenpySOCUQHeY3fYd0n67TuJ6vdrwjx8/mtsY2+XufhtbToVOG5nlLcLMr9PgNrLGPEvqQWSPUZKo/lf50nI2djW4KOGSLDuI5wzp8hTiKDJMc1nGrQ3s0/d2Ap6V2SRq5WuUIIS6qUT7Cm1NVN84Hy+WjTuZIoDs/k1NZU9FFiukMKNEOlqiDoN5WO92Z7JqAznQ5kif7GcJCatCLe9oafKjTUeJ+ol30ilq3FCjH7MvnS7JjLlo9YJm8wZWC46qwgDZ8/56JzUttf5dD5VPqwIRS3nIutlFVR0m4MtmqYnJj+2LhSu0nojr/us581HytVWL5YUKVDldXOnO1nedOErVfCOSH8lfErBxuf98bM+fffH1r969+c2rP373+vu/e/fmx/n4Yb9dq0gVNMWcYeRu3Mao1mcgRPrgIKTsCQPIyalAKBSZMzP3vewnZMMTm8my1Azudr2Weii/ofw4JXSIRd1l8Rlk5lmIkARKDh9jtjfJbBNNZIWNqqbN/DQHACJ0qzyjdM9HRLg5aKBLtgdEF+O2z7lHpvMMN0DuI0KijJI5DZG+g6LH+/ZeB1SJhKk4g/DDcFSb/N19y7BDemdwJOW373HOWl4Qp/oSg4CZD4UI7vo4tGn1bU+Cp4v0VzyAZEXA3QAMZiFfVSOCoBsjioIlyMw1qAIxkIyYXdquSEUOwKqzOCJnzFeH45xzjUDnjgXCtAqcIDJTF6pWjlZNSezptg/JzGb1PBLpAz5jakYThqri7Zq/uLo2QjENlGXDFlO29Mtn9erdMSM0tV8fH/Xxdr2Z+bZtNoabXbZLxhQyzJK3tc+V1CXBNGVWrPuc06z6dJS/F8XQZZIGBXpnpaBmMCRAUitNAWuswBJaGQyM0ncCmrcpfJBbnchqr6roJTItok+tliNrn6PNRZH8K8DXMKPnEJQGouNgwUI0i36PbLcj4WsHbzuMh67iakvZrT6xnj1vovyQwunRQZs2lVhciZ7gagGMT5BgqmYarBKsDleK7JiGtDR7/UWZTpOlQ20Cl12sxQhlNOoIkHSeV4odyXIBbLmRUQ+tQsTr/TYb1TL1BPDWqtSuz7LEBLXLbENJ+Vo16i43O0r1I6uF1QR69veZWXTq4+6zz3/x7PnnX/7q7a/+5u0Pf3jz8vcPb7+/fXy/P340c1KURna/mzvM84uqwnuOMTLHN3YYOWyThQIxNede+D01ztiUnQukGXvs83a7xR7ZHA2InNhYFiACrAjVrMF/oFkmHipo5hW79AwIjJzWAE1V102wdkRNl1BTscgUdwiz6rxu+57F7G68BR5vt8fHm5tRdLdhG5RtlZBx1prMmhlTqR97VgIxzY0G7TOqWX5X8pcpJHJqjFtA7ozAbb8ayTCr0HLlgaIGVk5UwD9hSjbho9XYAVYzRTFCYlw4qhRc3bs2kWaEFITt+8Sf/SwBXQi0bqx7tJ6cT6CFKu3MGURqbdLDRWnmqHDM0gRApd2ubzfMOqxq53aV97RcoQJKOSaZEI6ZKQstddC1IN06j7CukI0DF3JsLZE7vzceF0NWz7t29Ym8ZmO5xor1lfZFK0fyrLCW9jtWNn2jtRzHR0//fcDP9TOPyho8XYf+6VAwfWvr/vq1rsOf3MBSu3Xzhyj83H2ePVuevvwzn8MGfko/qaPEWJbg6SHn5/yZu+DP/HZZwXVbqUzzkbjEP5arQmT6OqBtG/m6IxQRkpM5MpYZTjMRMi/+2JGx0CO8nCNWHUZs48VXX7345tcf3/yRvFGBWWNJhYqlPxkN1i/k4AQ+FZsn3tVyhk5Pq/PLa46j3Y61l3NHPjVIKOkyRWQsVBP7Ps1Ngbh8xrtv/s3/+f/yX/13/53rY/zz//SfffGL+//Hf/h/f/fm1Q3zzduP/81/8QzEd//iv7i7u/vt3/3dV7/89u//43/jf7I9/0/+w/9At8fHxzcbqWHd47Lv0ypta0GHs7itBzpJoI4V6ActpFF7aonlYX2XrKxUq7KvQMHgVQiz/ra+9ZTQ4lGM3JsdKPudCjzltGBRjSCHaohYeUqlFtY4pzL2SpPK+tuZuipNpBNzz6WO65EX3lQgR12xSmN+fvf89EOaZp8VYk1Gq3k62W4j53OXXoZN7ZWVW3Etpj0NRZlrSdlOsBJXM9Cl6mMQ6o5omtTIWMsq8DTDzGQo9BWLWDKz7BIyNUkbbjNm7LNaF5S7kY46C0glPFDmy1h0Ms2c2akwpR6U5tSM2zVmCHd3H8fYtu3iw818jOHDhzma4oIwI/oVINffOtc4G9LSTKjAc5ZPgYiYKS2V6a3uVVTzp6DOG4Fq3DNO6qK2fuHMDr30HuFqAIKT75D9o4vSYpNAqJVqZokn+97NUmv505tobAyp0t/y3xFKAGU82nCfNyDq/dUnEsVWOX+F5esr0duixuIW2aFjXI16H1RbvRKQw0QuWHDezESmECkQa9AbgJMpSQiYPAtBIrrfT3ZfKftOUBaq/p9YTQmOgNoxTKR6IeWq96YkKyHvpHNKb9S2ztfcTcuXr9qYIGmBVKDl8WTOWzmTqUjEVfAYmNXSOTttdV+Tk+8ggeP+/su7v37x+Tdfffs3b3/4/vWPv/3w5vvHD2/n40OurQvuZoT2fTfP0GlABnMfYxtGRmi/7pmcUZSC5u12o5tkdEAaoDkqcB5TMW/Xm6ZitmaIpFQgIWKSCsjJIPIFkphzB4kg6e1vA6BlOkjVBhV1XbHraMjRQcUUCyli18RuPiKmhOEm4OHxdr1d9z22MfIZiaAiuzglnwFzFGtXY0cZQE40y+JHQ+xzCqFdmu0eq+RJE4S5CzCzGZhzD1lmZrGgReE4Iyv/TjxiUkaktxMx7L4bvENCKEYNYzaVo1pFG7W9IIWGBGYmGJZOMWE3Y9cG0GugUrkNZi6EmVU5lSho+Ej4BAN3pL+V5R4mBGe/KSrLpqpZNQyW7eWwamhNqmoLsCYomdGNsMuWgCwVWRZVqiqhEIqypdX8mBETUo7bBDAVAGeEZaVCkWu1hYZt6a/Ofe66PT5+JG1sY9uG+xhjGM3c3X0bW4p3pHdnlYYaUWyXMje1GuYZoYhuQp5eY7EnbH8hWK3hWmWlHSsjeDgGlWe6XIVq29ipMaHVwrmZlsCapyYV7VOK5xN9veIPHUMogNggDUARJZmg3GwP2FNWnoAdlJtWNqDuX6ItOV1a71wmnXJYG+vs7ayNfrJZp3DksnQrvFBKPvF3Mlw1oLRQcqKlWOfN26mQjqrD4lzPn6jkQJwkji8vC5S/XotA6ahwPsw5++7bg+2SG528ubNnWS+8ijHrJko8VsE+Om201EwOu6xZJBDKsJGYyKrjRbXR/fL883H3/PkXX33z5btfv/3xj+/f/PDu1Q/XD69vjx8A3GJmD+15vY5xodvD2zeXF5/dbXfuCOB6u10/PNhwt4sP3t09f7y+D+bwPqWF3/e5bSPFgmYc4eAMaYqIiJmzz2ak1Zz1pIBBEwFgRoY0ZETEbsOhyvADaY49IHHGNKuk01xncyvPD6rCRGvZoO0hgpOIXY/vPnx8vKbq255vbj4Gb7ebZRqZ2dyDEyQRkpXUZZpirr0Nb5rbKBBhJN1gpYeZbdoXyRJQcuyhS1xKRBN8YObMCKPHIcNpG+SAGQOmGaKS2M/tMiOqsiwljwbLqEUy2nE0tPuTn+Uo1ZZKDZa95NH0yflfVdxee6m2PWsEXQOa3rOL9+nYX22ztceb8Gqn8LD2HUpse16qgCt18+TtVsrnwaGvu0afss/fZ+Zyoo+VSOW8vqnj8OK1Ty2NsFQW+9v962NnH+R9Hc8TcbY0r9aKNZA+NAcW4lUbEx7fqBXuoyu8fsLHx7Fsdd6fA2+eybDjK83CrYPPL/Z8jfUun377k4PWEadTHDdy+iKe/r5cpjNv8slxtQqHT7BEpq1Ff+GTHJVPeCm2Sa036DYVt9ttXDYJu4LX2zYuoEEMBCcwUOVIOf7pmE7IbsZdre4ZEu3uxWdf/uLvvfnjf7W/f78hRxasvYR0acuVy1us4unTk7f9Fdp09J/7zps0aHk7vYVOxql1Wudtb+l0ABucGClxziDpY5uPeG1++frbf/vf+199+Yu//+p3r/74u9/+k//o//bw8f3rH1+7xaR/93d//If/8m8+vHt4+/sfPv/qs3/j3/y3/qv/z//r/Zs3/+Bv/uH/7N//3/1f/oP/g8/HQX283bJlwhFXWfeWd3XwRzgxQmUo15arBznlOTasekL0np/9dI1DoGvX5QnzuifmSMuGn0XoiRgfeyXvPhqnCchBXplGi0ZemWLAarxXqNcqD64Bcym7EtF2VQsyrT8UtDx2zenWiQNAQofW+ZmN9OQjwdxiap+zunKYKWZGbVMSswYvGIIisidDj3coyMJhY4/bSmowonyHdEhicqTJsxJwpOnMgeETOMKls5sgHW/Fsh8ruG2R85QlVGfGhOtWMdBaiHzLDAspHF6u8vIdvFBcWsSYAWL4JXDFnLfb7Xa9feQHmo0xxlYfpu9gNnxL6qK66rBeUmdEZ4+YSBInZ9JGRPWcTrcwB7ig1FHErJhNT9j7VIjzPzUCp0G7Ov+x/JEU98rwb5Nf3YLTwpHVxh462Wse7skydc1TF0uT4sxUgA2TE2ofG6D2WRu2Jr96HzJ92mwn3/zBea91GlQnnLTWkk6FfiX56qmMefokzdq4rl3KUiTSDLCmqSxtXFNx8iTNo1lmqlc7g0xuyKYZT+Zxt6kRljaFmqvT0/XUYvBbhbdPsZ68XufZSre+qgcuXZQxyzIPaD3R3oNqIQAoZwOm7yDVTCRMZWpG+g5Qz9sVyLE986/u7j/7/Msvv/3rd6++f/f6h7cv//D4/uXjw3tFzD2D3Izr7f7uWSjevfv988/+CqKPbYLX2/Xh3Ts4x3bZtvH87vnj9YOoTETJzMWU/yoktzElH7bfJCgrc1X9NiqX7GBPswm9lAOUkW6BZO7ZkBssfBw9PTml79QyJjt4JIyybkDrmT0zu8vvh4+Pc4/blBFOcx9uRsPcZazKLc2scKSUWTIFsqwqnORbl411er/BaAajOUVqTpCsshbXDhERN/qdZ21h3rYXqiMzaaYAIk1zVnDCjaJpn8pqWqtspZmlqc1PmNVMTyvCHARGilVEtCulUCUt5H9iRkl+Q5jawzTLUkEIWRpD+PCYc4yhxZpmZyx3S6oTzQs0CK9CHqntjYyGnLBYlcAVOkjF6LTQzPZOQEozUL3kaotaNcgRk+dqnZi9anJFY4Ygd4PSebQMMXhdsNoN7I/X2/Wx5mcDPnzbtvu7Zz6Guw8fAo0jWae1c9ewQPUuzihKOjGhMPfU50WHJqZJJqIEqwpQLaMQabCiGsupg1TlF7VesspgYl8YUrYkVKFJLfejDEcnMRQ4zobDzVm2jVlKqeiS5MfaKGgl5nR9iYQKB6n1WsGwwjenwuy2gs36H9ESousFTvpcK0bBk0pEczr1YMrSZTTk4hXejwABAABJREFULtNQXaUbWEa9skbSSP430QWQddptZtLENurqm03UuoCnEsnoZKgK8PUdom/m5PAcqK7tZRnZzCJUJlq3QKUGW5AgCUpmZjWIFSaqfpChZbyXVVIEwFi135GkYYqfjftnX9zdffbF1x8/fHj/6vWbV7/78PoPD69/mPNxn7f949WN4+KPt9t2eaZbhM0brvvt9ni7Prz/YG53l/vPP/vstl9JGsfwga22AUCrnppGku6xp5aemWQalYpnoaApVg/8TA5W5kR6uV5egCNrUlOVpyBv7qlAJ2c3+gEEegYoglY+T4BzxgzcbnNedxvutMvYCLiZM4c8ZLq1WJcunsgyugGm7U88rdkpQmbIZON2Ngo35XYDGizSaFOhUOZwmdntWr1Cq80cqYwhhFQEISGWXiDcsy22LOBmFCIiZrDS0LyAFbtoWZ+6xz/9lMNYOiO6i1HJ7vKU2vFISeYh4u2or4ddJ0a5X+XRUSfsorU6hyNY12Q/A8qU1MGGjsql2cnowJMnaWqlspYKU51uq3+JvnLvxMKFjMbBqePWf0/q8fRf9LftfMTpkTtHP3VL6g02f4QDM/Z9PPXnfuLb9y9/mjTQqPhoUVWQFUuLHqtVkBv5twaaP/PRJ//o5XyyAn2vh6ysv51U/pOz1b31uVrglsycjk/R0vkET8Wsf+T5MidZXF9a63G+QbSlKEZvZT0xYRDN5gxgkHuO9rzdrrbdJSShIWZMOkcpNBPcveaEV0/G8hhTgW/b9uLrX332zW9efXgpPaJqTvPl59jRp6u4thHaAdHJWTg+h+vxhAiM49W2XT59sSFB07T56OVs93dqEBiVahAPu8G++lf+p//ei1/96j/7T/7fHx/e/fD971+9fPn+7ZsXnz3DtPvL83/lH/+ju/vL15998fLVj99/9/v/+OP/9X/wr/9rTv3zf/af/e0/+Ef/8F/7d377z/6jj69/F7p5NuvJ4Q8tiyuJGilZ6S2eX/rSbOc3euzK9fUn2xKlh5aZPMmNVNggIXUU7jmop34Rh3LqX7Lk5SxVOKm9RL3seRc90AkEO3u93rHUbXdKJ2qdT60NjzfVQPLYP/2i609pTktNaw3DOLbwU+78Zz5VOhEzvQGFZgQ9WwmRpGYFOxeP2V1KHYhA9TbK1rljG5pBd5Smo7INiXvPIuJqGdnbt/BWLlv7EAvXJRZIlzntlZRpNTAE4IXS5uwmoOrOIAirzhLp4xnLnSyiStBwy8HeNQAaHOYkg5lHFdePj9fHR7Mc3EvffNu2u7tnYxtu7j4g0E2V2VGsgVTV6ildM8Kt+kILkHIQS8lv2tdQd4fIpZMYlFDAoTljNWFEJlxp3wFADWYCl+LNFCerUTUN3vLVxEJaPALhlbEbFU+ViWK3J8JTYrVE8CgbL5CcA3aQOTZ1287Sk1XMFc1ZpCoXn6qpQ/LzK1XbiyfPvnKiWtiphgSFC8qLqJsHMgR7NjBtPJSYVDz5FwCSXsknzy5L5SiwMcaxe1Nx48T/qHiK9aBsrqk48RTYctLQ318KqZubw05lEx1hPl2lphjruCEmCZCPUGprLiXSjl7uWU11WkTVw2Bcnn2xPXvx+Ze/+PXDm7evXv7u/avff3j1h7k/zH3fr9fhLunh4XEbX+mmuc3r9XG/3T48fLh+/Ajicrn/7MWLKx9DkaN3StC67ocNyszMPduTR2mL9i1TfiOi62jbb8x539kyvOLKWRSVUsLuR5ZUQDaa7orOdONVw3xjZjok910z4nadbnR3M94bU8/Y8b2EdZU2aWaoSEzjHcMiLkrCkz/tzusom9MYhiBNDDOfnJCE8Pw17Tqnu0F9kUBE+BhTMPI2k3DnQgPuXgYvk56kmIo54YyAmSG7RCWWskyawQCqLX+OTsp4Bo02hhQ0S5arIurpnYYQMcscVOW2GaOdbgKdlJfJrNkePFD5gdWiFJkhubik/Jt1L2euKVe1y/oVZrUIjHB3ZDcl0eXozr29MchKMcir17mS9PLh5Cjk0cW9pdBCotxGaOYumjERMxT7tOv18fHj43bZfIxtXLbLtunOela5qii1AIOU65nqr3ySpe6L0chhhBa1B7mErBIECv8eFANrv2SMoqE5uyaq9UmFSpfmkKrTWGdwtn4+2ngvUmm1mT6j+caeOkDnSfmXCm46qv0ZAGy9W74SWs2T1Yu6MdrhVJcz1LMSDqTUwbVclKKzlg6tHdCgNs60VD5erTDavrQXh9LIWmb5ycUabqVkt6o+5JNdsVYLv0xP33qZgs6Y6sdZlqJ1MyvgdtBRWdGV9cZZE1pSIKm60XTCQiXltZ1Zq1LvI+MwJYewjCApjXDH1TMxR7Rxef7CL5e751+8ePf66/evvn//7ofHd69vD+9I3GLPhmBz3x8fH6XYb9eIScgMdM2Y7rbvcwzfb7uNkYtuACotn0YLYBvb7ZFuY98f8wVDkqYb95xQUvR/sZ8rIJ93m4XQbswcIGSA36yWK9+0dR133oMr6Nk4ICMGc8Z+Cx9+9yLvE0Y+Pu5+sQiZ1TC36sRZgCYo7lDHlfLNowFdF1TX3IDcdqzd0Ay1uVVQBKSw2TZDyqYM7hHBmgQTFVRpwFBNxzuBhSv3mFk8kFQUFMFhUoAjBSN7iMwIHD0i/vSnGfozy0J236F2qvHkyT/9oWzOscvWISgtcZw7/72cvdP3jw1Tq5iwcfG2HQQ78F/bggRNXfd1wLHjemjgmKcvC7+UENRzks4cWd98C9Z5Bx+08MmbbM1WWLG1yhnMrTXnyhKqe9WhEU63rXKktG7/eNAnB56Xdi1sw8/DS1xguS94ejHrcXE+/ycCxJ/55RO2/dND/+JHP/MvlBDo08N+ck6e/8njMZ/6xTyE4bRWjezrv80fHWswp8ziNm8XHzEjGPvcx9gQZqiBWpHMfIRn2fsgdkKGuW4hoXENUrz/7LPPf/Hr99//l/FwU9yM1p16U5kne6rjztv9IziTS8Yyl/nXNsMdPzj2LFBO1JGQV3jgLJMnMiqduuzbVKyaQnTYNmLH47zcLi++/fW/ojn+83/yT7//7rev3nx//fB+zv3Lbz7/5ovPPz5gPP/8/sVzKF6//vGyPXvxLObH6+/+m3/x+KvHuHHcXf6l/+G/hfj4z//j//PFEfuDD5st3rVxsKRJjYz+zKdp4yMVCyeBPK9D/6Wh6LFLVUtjrGQv/kTUWhX/9GZYCugsjVqc8lEp1t5hHawMDNTpDs2Ze7bYp3qEjn7VW8+ai0MOzl9A4pzowZ0/YXVJxpOX/mc+kuBuQI4ircwWHyNJojknYeYec28FSoV27GwtnXNxqgmLmaawUA3AKm9jq8q1vgllsHyHkNyrQxYXH1+WInUqkGEFyZg+EpSUXM6olpANBPOcdaYi5WovGWMmV2UAnJTX/vLs0iQAdPdQFvXotl9zg3G3x0c+PDxc7u7cx2W7jG274JIpCYShe2oAEMuPzYSXkCrtKuvjo01ERGQStSo7qI1UocLmu5axrtdWa3YqP+9pUyVurezUCLpiizqCD0kqtV6RUOlRIRyZlbmDFLm2Rbsuqi8a+rYO4sk6lV6bzQxXMgQX3GWraNWNcuk5ZqF+tfFY6BtLWeLwUdswapnCLBrr7WyleWqXsWkzlVpY/bB77VbwtxAb2F0NiMMTrLzqlky1G1HzYtrgE+wo8kIPa3/28klAr3udLjNksiV0cVGBogEXR6jFarcD3rRVXTgZgZQchYDy3W15DlYlOLmXVFl5drm796/9/sWz919+9f6rX7x98/3Hty+vD28JPe5XN5r7jLk/3nB9vF0f5+3qtGeffxZzSgjMuc8xfLjHkYrS77wKkRwiBfftdnto8jCUDrdlqlRIll4yIqeqaFmE3M5uyMhMxecjmdGSJRGk7zGr2DFTnAJkda2eIQS3bYxh1it7/bjbYATGqKJcr5TRDADzgBMnsTTa1A5ZGtZUa2UfxBrYWP2jkye3DCWTcN4BiJAQ7p63EakCemlIRKB8BxCVnWMtBDJ3k+acSV2RrWGLfxOA6tGkyGmzNawnHfUk2asYEhjbmPtu7oNZeOHpEcWUuWfykbmDGmPsMRPdVKE6Mv4mMxCesj47zUhAe9t5ZKp8HjwfqehRpSwBKKVIzggmpw8KDGlgIJMGoZmD1Zq6TY7b3QVBBldVRhJSGDx7FuQUuhwOP7PjpTvbqAyCwD7nvt+kwOPjAx58G/f398O3sQ03c7dtXEo/W3lN3f6o5nYpJ3RqiUBTzrWdF6skoOdK1XO3UJcNiBPwzaeJVjJQlQHawo0to53AHdmLp4citQpOgWrKAw1COp9LQLbqjBWW76bgSZx15BzJeRPK6aQLiGmZAHT0M5arqYOZOv5cXE6l1Kb1sVIp6gbbbOHQJwFUKdVInsFQ260Vpw4N3JdWRwyTrgDFVYnWRgzW31moTnUbaDN28H1lQ6WetdNWt1RSgdWsnY4V415IqF2ZutgK71S6ZDJH9dJRG6s4Sq2LN6tVwrN4smUyxaYyycoCIrZnz77cvr3/7IsX77599/qPD29+uN0+PL57nfvUhkFh0OWyOUw0o8+553yAud8MGtv99XoF4ebJ5ZpXhGrOmFOgZQwWk2RmqRKAd23ssfhidbsLQUFjzJ3wGZXsY0ZWRQACWCSoQuY+59QMVEAKt9sUaEY3x8bhRiize0IxjKiGJUm6ZXQjsrKAZOHOei+l8CIiN3mG4mdks/84GqYByIpxsKEtpqoj1bCcYMs5ZwGMdPDSLGVzPOX8C0H0tH5YaKYdiRw1a6YQRyaMc86ZDTjdfWZ04i98murBgheLRl6JxDwpIZY/Ul7tYmCwFMhiY1vscNx0YbI4a7nekHWRJqHK/VL7Uo2qjisW9tH5hg4XqdmYutKTk69nzhDAk84RpdkO73F5WeseDoapkfBSsGd1Ufe7qtT67hs2n3U7iZPq50KRKv+wz7L8x+PAFM2FtBsH45OLLhskFEjrFTw5kU++dnwda2F/9oCf+axF+4ufwx3n6ceTx8tW18dBP3uJPoue3jGA8+rkMY2WWgk3c8RyRgWoGhLpertuYzPz0AxktSyiWuRXrDyUQAVGhuXIlQX6y9S7mRS8jM9/8at3X/+91w8fhqX+iD6K/bb7rkuCU92pSj1SaFeA7kjR7edpJkbrpcXhkNWyPimCqDXBWXgZBdU00tG6YmxffPvX/+DfeP9xf/fyhzc/fv/yx+/u7sfDbX/77s0Xv/z2Ifz5N1+N7dlnL758/Pjm869+MffrZ/uX148ft218fPvG757HvJrf/epv/tX/8p/+p/H4R9rHWe2TGR1h5NP9VZJ77Hlg5Yitdysc2+zAIP3D4UzyiU5aYpQYhmX1jymSTw7Vk0WtO621Qwfsurl/MR/oHC61DOo431HXCnIlXFi1p1kGsR7osOqHhjz4shbgarbLLmemgNWUt7GWmc2Yf3GDmjsd+22HaoRuCUfUjF13D8ncxrbBuI0t9h1Ejk7L7UPL6iYPZcGzpIlMb4tyQ6o/BxSo3KWU7Oz+k49jMILZeVeqrChkf2CItO6WFWB2rjA6DTmTQ4Ap4y2t32GZH10ch7mxKlYqiFhGn9JUaJo7BSCspozkLFj5sPXe9zlv86qYAj7Axzbu7u+3cfHh2xiAxriYdUZzhXVZTiQzQw3mVaQGPtFhube7u2762MtcHiq/bF7KdbtHChCSLd8he2VW0QOKi1g4vBzLZaXKWYOEaiTME/jNfrV9TQgLSxftYsVg8jQbtmC8gl4NlputOCxNWsADf6hvqL7eXDubqszvtu+AyHkrmW+yvpjnaKON7E/N9ffIYUdN+EYd0zG8Q8U+vTcU+O+OtaxV6GsuddWlwQf5tpyB7m5eKj2KimpNVb5DSwS1BtomjClmLpVDtJJB/k2d3Fn6IpuNVSVkFt9BKSm1ui1WdZ91e+zVnxEIbuP5V19vz188/+JX717/8cOb76/XDx/fvUwzZghpGrE9e27PX5BjbAPibb/tu/bbrjklgzClakFvGMMjJNmcAXPQQ1cz1wzSSTpPchCV3x05+a76CqFyDEMEr4mKScI6HTIfh6Bo3DXdLKCYEjMFTTNm9j0bw+cMN7OsEZkTpA8D4J7usZL/M4RxCLOqwKplaoHhnKrGTkiHtGdWVzbNZvOM5f0xlVsxi0LOmHRnTIja59yGIysklm0AJe2hUJAuTcnKwC3mu+SfpClU/eAERSSh5LQZ08jRgkavmQLWpG7KqIwu81TfRjMj3GYNzpTRuRXfBaMZc44BkANqYelrqQIsy843BRsAaAZUhly2zLDU77TsTQchNFvDpGznt7BaRqOqYctmm9fuz4Wz4pFh5UpaMAI1/w4G8xxpRAdCzLwsc1awJARp0GaEOSNS4xmg2+227zsF33yMcXd3Z+NKyX2Y2bZtWZbC7NAUkWxdTKnmDazBWU3xQdLsDPVUJNYuTh2UnY5YPliq72xk1QgvD+Y69cTa5UvR5OL03hfUwZYivbSckdYN7dqkl55adY1pqB0bUrukaw83eD1h0tA6QG0KGqZ3j0Xk1iOXX5igqLz5PoMaVx5Kum7Zzj4WF9mj9I/KZLQGLXXL437bXxH+f4z9aZMlWZIdiJ2jes2eu4dHREbkVkt3Yxo9mMYALQQowEAoFH7gH+D/5K/gN1IonMYuINaeafRWWdW5xOLbe3avKj+o6jXzyOwqvqrMjHB/z57ZvXp1Oap6FNN2TpA2ViPuKk9lKv/59DM8zNO+Py8S1/YkJNrvKSer1JcJgtOxArxEetxDKjMnZsNJTcrm9Bc90hueRrlC4lpNMmYaIDQrjxltd48RhMHgaLb1XpPZ1uubV9vl4eHmh/P5flyexuUMuBIquogOc8JV9LKdz5fzsL6Ny9ULPV2dLufLGMOMTmOnCEzN3C7bk7n1PiIn5TlzMo+CkC4ipDkkxwFIJmIow4d6IptBX053qBMYfTiUgI0BkCK9p2q2zZs2N8ApmvZeRUioBKmhN22XvjVIuq+EC5Bn1rKpWLKEVSIdFSGJ0IeBGJ69wNsOhngdPWdOWSqvbCQ4QGDYiAbJ9GBs1m549t16xcwIe5muSIDvJDkCOCJA7wNoDtowIdl42RK+Rx2Av+sVEeN0MQ+9ASnLldGueNX3p8jjW1eY3uQREZme3TxWAGbF6SGQKnDn8DmgFj5kvW7Kn93ZfP+EtOe3oGBhoi6B8pV3Pzn0VsaZ5XqHzoiqSc44AlOvlmLY50mWLkARE85fPF9thOhPVGEeyP1dx0/MbSgv81mJZtzRJ5+ci7LrbBxvhsdfzjWsqz6LKH9neHl414+f9ydW4NPf7Lc3paGuVm7688vsMNk0/nx+39OhPzz6J0jls+We8Q6ef1uMLyTbcO99rK0FDt5prbWM4kEbDri2OZAlanaKJJBADsP07raISluubl++evOLu3e/uXz8RmkSBNwAIFWAUD7Unmw/3HZduUKS3HafO7pDJIfkp6dIT+HOJ03yiEra+FQ7EvXVLqJoF+P6+S+++sWf3Hz5+f1fffObX//N5en+tODmasWr1198/bVcvXDKzc3tzc3tq5cvn+71m+++AfX6dm1L62N8eP/hdD3ubt/96z/9f//z/+X/8s//r/+3f/P/+L/z6YNLhztmTHWsH5sbFLZx9rwcZetQO7H7gyHjRzg5rfGEWlCoC7C3kR5CwWdyN7EkKxGspSt2zoMIlv/qVvqGnpobJIQIpr4Z0s6QOHRPjY3Ieyl1d/QacmtrJabjAQcoxIioqCphmfudPqElf6v/lI569oqvYjDamTKHxjE5j1B8f9G4pREI2cxokqISXoyqIChTHdG1DbgxSikSx3VA3F1cqDnzgTN76QCoEYPJMM82ADLjvTz4uXIB0GhiQ4i2snCEInWM5PWbYQuILACMCoi4gVxrIamMXmkPSnVrrcXKR+wQaTBRmkU3mDr8crls2waHNm2tLeuynq5IqjRViQhiWHCHi5mBRtKGReww92G4M4p93EblmsIuCorpryodvKQinERKTKaLDU2EtNQLgD3FEwg1LLvhEj8gDQNAuEl1HvZ6nGznr4RoGGKR5IqUWbcSZTIheCH8B1OUZ893P34+Q+qrsAVzTXYdsau9ONGZtXIcK7SmAiwHxkHNg3tYnDpFNjNY9TXZf1OuAXcPIM5v4AEzhigl5J7hn1cMMr2cuHycrPn+1F6eDpa5zYjIkyQrYybn8QHzbsob8RnsIUrRowEkooWDvczFCMbcjvpR+Kh79noPxxhVNhbZERud8L5d3NnW0+u3P7u6vt3648P7z87nu3459/OjwAUulLW1qPHvw0Rk693gNkzgS2veh9kAOdy3vqlKFPddLo/RE4TI444okgpv3UFx8QaaQSgjJxUiiwGys9LXpfURjoWpSrfukZukjzG8Q1S6B5eo+3ARhSNIoc0cbpqURAwGCRGx3mNUMzV63SqerloixoneSULTNtdJMcBVeLF5CG135qr7andL0w9HH92NAUIxUXYADskOUgc9uG6jNjobtV3IER1qwS9FAR1moFbhPpty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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1556x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"vae reconstruction -> ddim reconstruction -> null text reconstruction\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"ptp_utils.view_images([ptp_utils.tensor_to_nparray(vae_rec), ddim_rec, null_text_rec])\\n\",\n    \"print(\\\"vae reconstruction -> ddim reconstruction -> null text reconstruction\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Prompt-to-prompt Editing\\n\",\n    \"prompt-to-prompt controls the attention map in diffusion process to edit a user-provided image or generated image. Let's use the example above to see how it works.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Same process as above, we get the noise latent x_t and use new prompt to edit the cat into a dog **while keeping the orther features unchanged**.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import torch\\n\",\n    \"import gc\\n\",\n    \"gc.collect()\\n\",\n    \"torch.cuda.empty_cache()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"  0%|          | 0/50 [00:00<?, ?it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 50/50 [00:13<00:00,  3.79it/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import torch\\n\",\n    \"\\n\",\n    \"prompts = [\\\"a cat sitting next to a mirror\\\",\\n\",\n    \"           \\\"a dog sitting next to a mirror\\\"\\n\",\n    \"        ]\\n\",\n    \"\\n\",\n    \"cross_replace_steps = {'default_': .8,}\\n\",\n    \"self_replace_steps = .5\\n\",\n    \"blend_word = ((('cat',), (\\\"dog\\\",))) # for local edit. If it is not local yet - use only the source object: blend_word = ((('cat',), (\\\"cat\\\",))).\\n\",\n    \"eq_params = {\\\"words\\\": (\\\"dog\\\",), \\\"values\\\": (2,)} # amplify attention to the word \\\"dog\\\" by *2 \\n\",\n    \"\\n\",\n    \"from models.ptp import LocalBlend, AttentionReplace\\n\",\n    \"from models.ptp_utils import text2image_ldm_stable\\n\",\n    \"\\n\",\n    \"lb = None\\n\",\n    \"lb = LocalBlend(prompts, blend_word, model=StableDiffuser)\\n\",\n    \"\\n\",\n    \"controller = AttentionReplace(prompts, 50,\\n\",\n    \"                              cross_replace_steps=cross_replace_steps,\\n\",\n    \"                              self_replace_steps=self_replace_steps, local_blend=lb, model=StableDiffuser)\\n\",\n    \"images, x_t = text2image_ldm_stable(StableDiffuser, prompts, controller, latent=x_t, \\n\",\n    \"                                    num_inference_steps=50, guidance_scale=7.5, uncond_embeddings=uncond_embeddings)\\n\",\n    \"# make sure to reset all registered attentions to make another inference\\n\",\n    \"controller.reset()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1034x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"ptp_utils.view_images(images)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Of course ptp can also be used to edit a generated image(no inversion needed).\\n\",\n    \"Three types of attention controller are provided here:\\n\",\n    \"1. AttentionReplace: replace the attention map of the original word with that of new inserted word. (above example)\\n\",\n    \"2. AttentionRefine: extend the prompt with adjective words or something.\\n\",\n    \"3. AttentionReweighting: strengthen or weaken some features' presence in an image\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"  0%|          | 0/50 [00:00<?, ?it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 50/50 [00:12<00:00,  3.85it/s]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"prompts = [\\\"A cartoon of spiderman\\\",\\n\",\n    \"           \\\"A cartoon of ironman\\\"]\\n\",\n    \"import torch\\n\",\n    \"g = torch.Generator().manual_seed(2023616)\\n\",\n    \"lb = LocalBlend(prompts, (\\\"spiderman\\\", \\\"ironman\\\"), model=StableDiffuser)\\n\",\n    \"controller = AttentionReplace(prompts, 50,\\n\",\n    \"                              cross_replace_steps={\\\"default_\\\": 1., \\\"ironman\\\": .2},\\n\",\n    \"                              self_replace_steps=0.4,\\n\",\n    \"                              local_blend=lb, model=StableDiffuser)\\n\",\n    \"images, x_t = text2image_ldm_stable(StableDiffuser, prompts, controller, latent=None, \\n\",\n    \"                                    num_inference_steps=50, guidance_scale=7.5, uncond_embeddings=None, generator=g)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1034x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"ptp_utils.view_images(images)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 46,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 50/50 [00:13<00:00,  3.84it/s]\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1034x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"prompts = [\\\"a photo of Eiffel Tower\\\",\\n\",\n    \"           \\\"a photo of Eiffel Tower at night\\\"]\\n\",\n    \"from models.ptp import AttentionRefine\\n\",\n    \"controller = AttentionRefine(prompts, 50, cross_replace_steps=1.0,\\n\",\n    \"                             self_replace_steps=.4, model=StableDiffuser)\\n\",\n    \"images, _ = text2image_ldm_stable(StableDiffuser, prompts, controller, latent=None)\\n\",\n    \"ptp_utils.view_images(images)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 78,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"  0%|          | 0/50 [00:00<?, ?it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 50/50 [00:12<00:00,  3.87it/s]\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<PIL.Image.Image image mode=RGB size=1034x512>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"prompts = [\\\"a blossom sakura tree\\\"] * 2\\n\",\n    \"\\n\",\n    \"from models.ptp import AttentionReweight, get_equalizer\\n\",\n    \"### pay 3 times more attention to the word \\\"roses\\\"\\n\",\n    \"equalizer = get_equalizer(prompts[1], (\\\"blossom\\\",), (-3,), StableDiffuser.tokenizer)\\n\",\n    \"controller = AttentionReweight(prompts, 50, cross_replace_steps=.8,\\n\",\n    \"                               self_replace_steps=.4,\\n\",\n    \"                               equalizer=equalizer, model=StableDiffuser)\\n\",\n    \"images, _ = text2image_ldm_stable(StableDiffuser, prompts, controller, latent=None)\\n\",\n    \"ptp_utils.view_images(images)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"mmagic\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.8.16\"\n  },\n  \"orig_nbformat\": 4\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "requirements/docs.txt",
    "content": "docutils==0.16.0\nmodelindex\nmyst_parser\n-e git+https://github.com/open-mmlab/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme\nrequests<=2.29.0\nsphinx==4.5.0\nsphinx-autoapi\nsphinx-copybutton\nsphinx-notfound-page\nsphinx-tabs\nsphinx_markdown_tables\n"
  },
  {
    "path": "requirements/mminstall.txt",
    "content": "mmcv>=2.0.0\nmmengine>=0.4.0\n"
  },
  {
    "path": "requirements/optional.txt",
    "content": "albumentations\n-e git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1#egg=clip\nimageio-ffmpeg==0.4.4\nmmdet >= 3.0.0\nopen_clip_torch\nPyQt5\n"
  },
  {
    "path": "requirements/readthedocs.txt",
    "content": "lmdb\nlpips\nmmcv >= 2.0.0rc1\nmmdet >= 3.0.0\nmmengine\nprettytable\nPygments\nregex\nscikit-image\ntabulate\ntitlecase\ntorch\ntorchvision\ntqdm\n"
  },
  {
    "path": "requirements/runtime.txt",
    "content": "av\nav==8.0.3; python_version < '3.7'\nclick  # required by mmagic/utils/io_utils.py\ncontrolnet_aux\ndiffusers>=0.23.0\neinops\nface-alignment<=1.3.4\nfacexlib\nlmdb\nlpips\nmediapipe\nnumpy\n# MMCV depends opencv-python instead of headless, thus we install opencv-python\n# Due to a bug from upstream, we skip this two version\n# https://github.com/opencv/opencv-python/issues/602\n# https://github.com/opencv/opencv/issues/21366\n# It seems to be fixed in https://github.com/opencv/opencv/pull/21382\nopencv-python!=4.5.5.62,!=4.5.5.64\npandas  # required by mmagic/models/editors/disco_diffusion/guider.py\nPillow\nresize_right\ntensorboard\ntransformers>=4.27.4\n"
  },
  {
    "path": "requirements/tests.txt",
    "content": "albumentations\n-e git+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1#egg=clip\ncontrolnet_aux\n# codecov\n# flake8\n# isort==5.10.1\n# onnxruntime\n# pytest\n# pytest-runner\n# yapf\ncoverage < 7.0.0\nimageio-ffmpeg==0.4.4\ninterrogate\nmmdet >= 3.0.0\npytest\ntransformers>=4.27.4\n"
  },
  {
    "path": "requirements.txt",
    "content": "-r requirements/runtime.txt\n-r requirements/tests.txt\n-r requirements/optional.txt\n"
  },
  {
    "path": "setup.cfg",
    "content": "[bdist_wheel]\nuniversal=1\n\n[aliases]\ntest=pytest\n\n[tool:pytest]\ntestpaths = tests/\n\n[yapf]\nbased_on_style = pep8\nblank_line_before_nested_class_or_def = true\nsplit_before_expression_after_opening_paren = true\nsplit_penalty_import_names=0\nSPLIT_PENALTY_AFTER_OPENING_BRACKET=888\n\n[isort]\nline_length = 79\nmulti_line_output = 0\nextra_standard_library = setuptools\nknown_first_party = mmagic\nknown_third_party = PIL,cv2,lmdb,mmcv,numpy,onnx,onnxruntime,packaging,pymatting,pytest,pytorch_sphinx_theme,requests,scipy,titlecase,torch,torchvision,ts\nno_lines_before = STDLIB,LOCALFOLDER\ndefault_section = THIRDPARTY\n\n[flake8]\n# The E251 check is conflict with yapf in some situation.\n# See https://github.com/google/yapf/issues/393\nextend-ignore = E251\n# The F401 check is wrong if the `__all__` variable is modified\n# in `__init__.py`\nper-file-ignores =\n    */__init__.py: F401\n    mmagic/configs/*: F401,F403,F405,E501\n"
  },
  {
    "path": "setup.py",
    "content": "import os\nimport os.path as osp\nimport shutil\nimport subprocess\nimport sys\nimport warnings\nfrom setuptools import find_packages, setup\n\nimport torch\nfrom torch.utils.cpp_extension import (BuildExtension, CppExtension,\n                                       CUDAExtension)\n\n\ndef readme():\n    with open('README.md', encoding='utf-8') as f:\n        content = f.read()\n    return content\n\n\nversion_file = 'mmagic/version.py'\n\n\ndef get_git_hash():\n\n    def _minimal_ext_cmd(cmd):\n        # construct minimal environment\n        env = {}\n        for k in ['SYSTEMROOT', 'PATH', 'HOME']:\n            v = os.environ.get(k)\n            if v is not None:\n                env[k] = v\n        # LANGUAGE is used on win32\n        env['LANGUAGE'] = 'C'\n        env['LANG'] = 'C'\n        env['LC_ALL'] = 'C'\n        out = subprocess.Popen(\n            cmd, stdout=subprocess.PIPE, env=env).communicate()[0]\n        return out\n\n    try:\n        out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD'])\n        sha = out.strip().decode('ascii')\n    except OSError:\n        sha = 'unknown'\n\n    return sha\n\n\ndef get_hash():\n    if os.path.exists('.git'):\n        sha = get_git_hash()[:7]\n    elif os.path.exists(version_file):\n        try:\n            from mmagic.version import __version__\n            sha = __version__.split('+')[-1]\n        except ImportError:\n            raise ImportError('Unable to get git version')\n    else:\n        sha = 'unknown'\n\n    return sha\n\n\ndef get_version():\n    with open(version_file, 'r') as f:\n        exec(compile(f.read(), version_file, 'exec'))\n    return locals()['__version__']\n\n\ndef parse_requirements(fname='requirements.txt', with_version=True):\n    \"\"\"Parse the package dependencies listed in a requirements file but strips\n    specific versioning information.\n\n    Args:\n        fname (str): path to requirements file\n        with_version (bool, default=False): if True include version specs\n\n    Returns:\n        List[str]: list of requirements items\n\n    CommandLine:\n        python -c \"import setup; print(setup.parse_requirements())\"\n    \"\"\"\n    import re\n    import sys\n    from os.path import exists\n    require_fpath = fname\n\n    def parse_line(line):\n        \"\"\"Parse information from a line in a requirements text file.\"\"\"\n        if line.startswith('-r '):\n            # Allow specifying requirements in other files\n            target = line.split(' ')[1]\n            for info in parse_require_file(target):\n                yield info\n        else:\n            info = {'line': line}\n            if line.startswith('-e '):\n                info['package'] = line.split('#egg=')[1]\n            elif '@git+' in line:\n                info['package'] = line\n            else:\n                # Remove versioning from the package\n                pat = '(' + '|'.join(['>=', '<=', '==', '>', '<']) + ')'\n                parts = re.split(pat, line, maxsplit=1)\n                parts = [p.strip() for p in parts]\n\n                info['package'] = parts[0]\n                if len(parts) > 1:\n                    op, rest = parts[1:]\n                    if ';' in rest:\n                        # Handle platform specific dependencies\n                        # http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies\n                        version, platform_deps = map(str.strip,\n                                                     rest.split(';'))\n                        info['platform_deps'] = platform_deps\n                    else:\n                        version = rest  # NOQA\n                    info['version'] = (op, version)\n            yield info\n\n    def parse_require_file(fpath):\n        with open(fpath, 'r') as f:\n            for line in f.readlines():\n                line = line.strip()\n                if line and not line.startswith('#'):\n                    for info in parse_line(line):\n                        yield info\n\n    def gen_packages_items():\n        if exists(require_fpath):\n            for info in parse_require_file(require_fpath):\n                parts = [info['package']]\n                if with_version and 'version' in info:\n                    parts.extend(info['version'])\n                if not sys.version.startswith('3.4'):\n                    # apparently package_deps are broken in 3.4\n                    platform_deps = info.get('platform_deps')\n                    if platform_deps is not None:\n                        parts.append(';' + platform_deps)\n                item = ''.join(parts)\n                yield item\n\n    packages = list(gen_packages_items())\n    return packages\n\n\ndef make_cuda_ext(name, module, sources, sources_cuda=[]):\n\n    define_macros = []\n    extra_compile_args = {'cxx': []}\n\n    if torch.cuda.is_available() or os.getenv('FORCE_CUDA', '0') == '1':\n        define_macros += [('WITH_CUDA', None)]\n        extension = CUDAExtension\n        extra_compile_args['nvcc'] = [\n            '-D__CUDA_NO_HALF_OPERATORS__',\n            '-D__CUDA_NO_HALF_CONVERSIONS__',\n            '-D__CUDA_NO_HALF2_OPERATORS__',\n        ]\n        sources += sources_cuda\n    else:\n        print(f'Compiling {name} without CUDA')\n        extension = CppExtension\n\n    return extension(\n        name=f'{module}.{name}',\n        sources=[os.path.join(*module.split('.'), p) for p in sources],\n        define_macros=define_macros,\n        extra_compile_args=extra_compile_args)\n\n\ndef add_mim_extension():\n    \"\"\"Add extra files that are required to support MIM into the package.\n\n    These files will be added by creating a symlink to the originals if the\n    package is installed in `editable` mode (e.g. pip install -e .), or by\n    copying from the originals otherwise.\n    \"\"\"\n\n    # parse installment mode\n    if 'develop' in sys.argv:\n        # installed by `pip install -e .`\n        mode = 'symlink'\n    elif 'sdist' in sys.argv or 'bdist_wheel' in sys.argv:\n        # installed by `pip install .`\n        # or create source distribution by `python setup.py sdist`\n        mode = 'copy'\n    else:\n        return\n\n    filenames = ['tools', 'configs', 'demo', 'model-index.yml']\n    repo_path = osp.dirname(__file__)\n    mim_path = osp.join(repo_path, 'mmagic', '.mim')\n    os.makedirs(mim_path, exist_ok=True)\n\n    for filename in filenames:\n        if osp.exists(filename):\n            src_path = osp.join(repo_path, filename)\n            tar_path = osp.join(mim_path, filename)\n\n            if osp.isfile(tar_path) or osp.islink(tar_path):\n                os.remove(tar_path)\n            elif osp.isdir(tar_path):\n                shutil.rmtree(tar_path)\n\n            if mode == 'symlink':\n                src_relpath = osp.relpath(src_path, osp.dirname(tar_path))\n                try:\n                    os.symlink(src_relpath, tar_path)\n                except OSError:\n                    # Creating a symbolic link on windows may raise an\n                    # `OSError: [WinError 1314]` due to privilege. If\n                    # the error happens, the src file will be copied\n                    mode = 'copy'\n                    warnings.warn(\n                        f'Failed to create a symbolic link for {src_relpath}, '\n                        f'and it will be copied to {tar_path}')\n                else:\n                    continue\n            if mode == 'copy':\n                if osp.isfile(src_path):\n                    shutil.copyfile(src_path, tar_path)\n                elif osp.isdir(src_path):\n                    shutil.copytree(src_path, tar_path)\n                else:\n                    warnings.warn(f'Cannot copy file {src_path}.')\n            else:\n                raise ValueError(f'Invalid mode {mode}')\n\n\nif __name__ == '__main__':\n    add_mim_extension()\n    setup(\n        name='mmagic',\n        version=get_version(),\n        description='OpenMMLab Multimodal Advanced, Generative, and '\n        'Intelligent Creation Toolbox',\n        long_description=readme(),\n        long_description_content_type='text/markdown',\n        maintainer='MMagic Contributors',\n        maintainer_email='openmmlab@gmail.com',\n        keywords='computer vision, super resolution, video interpolation, '\n        'inpainting, matting, SISR, RefSR, VSR, GAN, VFI',\n        url='https://github.com/open-mmlab/mmagic',\n        packages=find_packages(exclude=('configs', 'tools', 'demo')),\n        include_package_data=True,\n        classifiers=[\n            'Development Status :: 4 - Beta',\n            'Intended Audience :: Developers',\n            'Intended Audience :: Education',\n            'Intended Audience :: Science/Research',\n            'License :: OSI Approved :: Apache Software License',\n            'Operating System :: OS Independent',\n            'Programming Language :: Python :: 3',\n            'Programming Language :: Python :: 3.7',\n            'Programming Language :: Python :: 3.8',\n            'Programming Language :: Python :: 3.9',\n            'Programming Language :: Python :: 3.10',\n            'Topic :: Scientific/Engineering :: Artificial Intelligence',\n            'Topic :: Scientific/Engineering :: Image Processing',\n        ],\n        license='Apache License 2.0',\n        install_requires=parse_requirements('requirements/runtime.txt'),\n        cmdclass={'build_ext': BuildExtension},\n        extras_require={\n            'all': parse_requirements('requirements.txt'),\n            'tests': parse_requirements('requirements/tests.txt'),\n            'mim': parse_requirements('requirements/mminstall.txt'),\n        },\n        zip_safe=False)\n"
  },
  {
    "path": "tests/configs/aot_test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nmodel = dict(\n    type='AOTInpaintor',\n    train_cfg=dict(\n        disc_step=1,\n        start_iter=0,\n    ),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='AOTEncoderDecoder',\n        encoder=dict(type='AOTEncoder'),\n        decoder=dict(type='AOTDecoder'),\n        dilation_neck=dict(\n            type='AOTBlockNeck', dilation_rates=(1, 2, 4, 8), num_aotblock=8)),\n    disc=dict(\n        type='SoftMaskPatchDiscriminator',\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        with_spectral_norm=True,\n    ),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='smgan',\n        loss_weight=0.01,\n    ),\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg19',\n        layer_weights={\n            '1': 1.,\n            '6': 1.,\n            '11': 1.,\n            '20': 1.,\n            '29': 1.,\n        },\n        layer_weights_style={\n            '8': 1.,\n            '17': 1.,\n            '26': 1.,\n            '31': 1.,\n        },\n        perceptual_weight=0.1,\n        style_weight=250),\n    loss_out_percep=True,\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.,\n    ),\n    loss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001),\n)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/configs/deepfillv1_test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nmodel = dict(\n    type='DeepFillv1Inpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(type='DeepFillEncoderDecoder'),\n    disc=dict(\n        type='DeepFillv1Discriminators',\n        global_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=256,\n            fc_in_channels=256 * 16 * 16,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n        local_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 8 * 8,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2))),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_composed_percep',\n                      'loss_tv'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='hinge',\n        loss_weight=1,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg16',\n        layer_weights={\n            '4': 1.,\n            '9': 1.,\n            '16': 1.,\n        },\n        perceptual_weight=0.05,\n        style_weight=120,\n        pretrained=('torchvision://vgg16')),\n    loss_tv=dict(\n        type='MaskedTVLoss',\n        loss_weight=0.1,\n    ),\n    loss_gp=dict(type='GradientPenaltyLoss', loss_weight=10.),\n    loss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001),\n    train_cfg=dict(disc_step=2, start_iter=0, local_size=(128, 128)),\n)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/configs/diffuser_wrapper_cfg/config.json",
    "content": "{\n  \"_class_name\": \"ControlNetModel\",\n  \"_diffusers_version\": \"0.14.0\",\n  \"act_fn\": \"silu\",\n  \"attention_head_dim\": 2,\n  \"block_out_channels\": [\n    32\n  ],\n  \"class_embed_type\": null,\n  \"conditioning_embedding_out_channels\": [\n    16\n  ],\n  \"controlnet_conditioning_channel_order\": \"rgb\",\n  \"cross_attention_dim\": 16,\n  \"down_block_types\": [\n    \"DownBlock2D\"\n  ],\n  \"downsample_padding\": 1,\n  \"flip_sin_to_cos\": true,\n  \"freq_shift\": 0,\n  \"in_channels\": 4,\n  \"layers_per_block\": 2,\n  \"mid_block_scale_factor\": 1,\n  \"norm_eps\": 1e-05,\n  \"norm_num_groups\": 32,\n  \"num_class_embeds\": null,\n  \"only_cross_attention\": false,\n  \"projection_class_embeddings_input_dim\": null,\n  \"resnet_time_scale_shift\": \"default\",\n  \"upcast_attention\": false,\n  \"use_linear_projection\": false\n}\n"
  },
  {
    "path": "tests/configs/gl_test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\ninput_shape = (256, 256)\n\nglobal_disc_cfg = dict(\n    in_channels=3,\n    max_channels=512,\n    fc_in_channels=512 * 4 * 4,\n    fc_out_channels=1024,\n    num_convs=6,\n    norm_cfg=dict(type='BN'))\nlocal_disc_cfg = dict(\n    in_channels=3,\n    max_channels=512,\n    fc_in_channels=512 * 4 * 4,\n    fc_out_channels=1024,\n    num_convs=5,\n    norm_cfg=dict(type='BN'))\n\nmodel = dict(\n    type='GLInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',\n        encoder=dict(type='GLEncoder'),\n        decoder=dict(type='GLDecoder'),\n        dilation_neck=dict(type='GLDilationNeck')),\n    disc=dict(\n        type='GLDiscs',\n        global_disc_cfg=global_disc_cfg,\n        local_disc_cfg=local_disc_cfg),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=0.001,\n    ),\n    loss_l1_hole=dict(type='L1Loss', loss_weight=1.0),\n    loss_l1_valid=dict(type='L1Loss', loss_weight=1.0),\n    train_cfg=dict(\n        disc_step=1, start_iter=0, iter_tc=2, iter_td=3,\n        local_size=(128, 128)))\n\nmodel_dirty = dict(\n    type='GLInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',\n        encoder=dict(type='GLEncoder'),\n        decoder=dict(type='GLDecoder'),\n        dilation_neck=dict(type='GLDilationNeck')),\n    disc=dict(\n        type='GLDiscs',\n        global_disc_cfg=global_disc_cfg,\n        local_disc_cfg=local_disc_cfg),\n    loss_gan=None,\n    loss_l1_hole=None,\n    loss_l1_valid=None)\n\nmodel_inference = dict(\n    type='GLInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',\n        encoder=dict(type='GLEncoder'),\n        decoder=dict(type='GLDecoder'),\n        dilation_neck=dict(type='GLDilationNeck')),\n    disc=dict(\n        type='GLDiscs',\n        global_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=6,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n        local_disc_cfg=dict(\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 4 * 4,\n            fc_out_channels=1024,\n            num_convs=5,\n            norm_cfg=dict(type='SyncBN'),\n        ),\n    ),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=0.001,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ))\n\ntest_pipeline = [\n    dict(type='LoadImageFromFile', key='gt'),\n    dict(\n        type='LoadMask',\n        mask_mode='bbox',\n        mask_config=dict(\n            max_bbox_shape=(128, 128),\n            max_bbox_delta=40,\n            min_margin=20,\n            img_shape=input_shape)),\n    dict(\n        type='Crop',\n        keys=['gt'],\n        crop_size=(384, 384),\n        random_crop=True,\n    ),\n    dict(\n        type='Resize',\n        keys=['gt'],\n        scale=input_shape,\n        keep_ratio=False,\n    ),\n    dict(type='GetMaskedImage'),\n    dict(type='PackInputs'),\n]\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/configs/one_stage_gl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nmodel = dict(\n    type='OneStageInpaintor',\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='GLEncoderDecoder',\n        encoder=dict(type='GLEncoder'),\n        decoder=dict(type='GLDecoder'),\n        dilation_neck=dict(type='GLDilationNeck')),\n    disc=dict(\n        type='MultiLayerDiscriminator',\n        in_channels=3,\n        max_channels=512,\n        fc_in_channels=512 * 4 * 4,\n        fc_out_channels=1024,\n        num_convs=6,\n        norm_cfg=dict(type='BN'),\n    ),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='vanilla',\n        loss_weight=0.001,\n    ),\n    loss_gp=dict(\n        type='GradientPenaltyLoss',\n        loss_weight=1.,\n    ),\n    loss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001),\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        layer_weights={'0': 1.},\n        perceptual_weight=0.1,\n        style_weight=0,\n    ),\n    loss_out_percep=True,\n    loss_l1_hole=dict(type='L1Loss', loss_weight=1.0),\n    loss_l1_valid=dict(type='L1Loss', loss_weight=1.0),\n    loss_tv=dict(type='MaskedTVLoss', loss_weight=0.01),\n    train_cfg=dict(disc_step=1))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/configs/pconv_test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nmodel = dict(\n    type='PConvInpaintor',\n    train_cfg=dict(\n        disc_step=0,\n        start_iter=0,\n    ),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='PConvEncoderDecoder',\n        encoder=dict(\n            type='PConvEncoder',\n            norm_cfg=dict(type='BN', requires_grad=False),\n            norm_eval=True),\n        decoder=dict(type='PConvDecoder', norm_cfg=dict(type='BN'))),\n    disc=None,\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg16',\n        layer_weights={\n            '4': 1.,\n            '9': 1.,\n            '16': 1.,\n        },\n        perceptual_weight=0.05,\n        style_weight=120,\n        pretrained=('torchvision://vgg16')),\n    loss_out_percep=True,\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=6.,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.,\n    ),\n    loss_tv=dict(\n        type='MaskedTVLoss',\n        loss_weight=0.1,\n    ))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/configs/two_stage_test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nmodel = dict(\n    type='TwoStageInpaintor',\n    disc_input_with_mask=True,\n    train_cfg=dict(disc_step=1, start_iter=0),\n    data_preprocessor=dict(\n        type='DataPreprocessor',\n        mean=[127.5],\n        std=[127.5],\n    ),\n    encdec=dict(\n        type='DeepFillEncoderDecoder',\n        stage1=dict(\n            type='GLEncoderDecoder',\n            encoder=dict(\n                type='DeepFillEncoder',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                conv_type='gated_conv',\n                in_channels=96,\n                channel_factor=0.75,\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect')),\n        stage2=dict(\n            type='DeepFillRefiner',\n            encoder_attention=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_attention',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            encoder_conv=dict(\n                type='DeepFillEncoder',\n                encoder_type='stage2_conv',\n                conv_type='gated_conv',\n                channel_factor=0.75,\n                padding_mode='reflect'),\n            dilation_neck=dict(\n                type='GLDilationNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                act_cfg=dict(type='ELU'),\n                padding_mode='reflect'),\n            contextual_attention=dict(\n                type='ContextualAttentionNeck',\n                in_channels=96,\n                conv_type='gated_conv',\n                padding_mode='reflect'),\n            decoder=dict(\n                type='DeepFillDecoder',\n                in_channels=192,\n                conv_type='gated_conv',\n                out_act_cfg=dict(type='Tanh'),\n                padding_mode='reflect'))),\n    disc=dict(\n        type='MultiLayerDiscriminator',\n        in_channels=4,\n        max_channels=256,\n        fc_in_channels=None,\n        num_convs=6,\n        norm_cfg=None,\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        with_spectral_norm=True,\n    ),\n    stage1_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_composed_percep',\n                      'loss_tv'),\n    stage2_loss_type=('loss_l1_hole', 'loss_l1_valid', 'loss_gan'),\n    loss_gan=dict(\n        type='GANLoss',\n        gan_type='hinge',\n        loss_weight=0.1,\n    ),\n    loss_l1_hole=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_l1_valid=dict(\n        type='L1Loss',\n        loss_weight=1.0,\n    ),\n    loss_composed_percep=dict(\n        type='PerceptualLoss',\n        vgg_type='vgg16',\n        layer_weights={\n            '4': 1.,\n            '9': 1.,\n            '16': 1.,\n        },\n        perceptual_weight=0.05,\n        style_weight=120,\n        pretrained=('torchvision://vgg16')),\n    loss_tv=dict(\n        type='MaskedTVLoss',\n        loss_weight=0.1,\n    ),\n    loss_disc_shift=dict(type='DiscShiftLoss', loss_weight=0.001),\n)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/data/coco/annotations/captions_train2014.json",
    "content": "{\n    \"annotations\": [{\"image_id\": 9, \"caption\": \"a good meal\"}]\n}"
  },
  {
    "path": "tests/data/coco/annotations/captions_val2014.json",
    "content": "{\n    \"annotations\": [{\"image_id\": 42, \"caption\": \"a pair of slippers\"}]\n}"
  },
  {
    "path": "tests/data/controlnet/prompt.json",
    "content": "{\"source\": \"source/0.png\", \"target\": \"target/0.png\", \"prompt\": \"pale golden rod circle with old lace background\"}\n{\"source\": \"source/1.png\", \"target\": \"target/1.png\", \"prompt\": \"light coral circle with white background\"}\n"
  },
  {
    "path": "tests/data/dataset/anno.json",
    "content": "{\n    \"a/1.JPG\": [\n        1,\n        2,\n        3,\n        4\n    ],\n    \"b/2.jpeg\": [\n        1,\n        4,\n        5,\n        3\n    ]\n}"
  },
  {
    "path": "tests/data/dataset/anno.txt",
    "content": "a/1.JPG 0\nb/2.jpeg 1\nb/subb/3.jpg 1"
  },
  {
    "path": "tests/data/dataset/c/c.not_support_type",
    "content": ""
  },
  {
    "path": "tests/data/dataset/classes.txt",
    "content": "bus\ncar"
  },
  {
    "path": "tests/data/dataset/wrong.yml",
    "content": ""
  },
  {
    "path": "tests/data/frames/ann1.txt",
    "content": "sequence_1\n\nsequence_2\n"
  },
  {
    "path": "tests/data/frames/ann2.txt",
    "content": "sequence_1/00000000.png\nsequence_1/00000001.png\nsequence_2/00000000.png\n"
  },
  {
    "path": "tests/data/frames/ann3.txt",
    "content": "gt/sequence_1\ngt/sequence_2\n"
  },
  {
    "path": "tests/data/image/train.txt",
    "content": "\nbaboon.png (480,500,3)\n/baboon.png (480,500,3)\n"
  },
  {
    "path": "tests/data/inpainting/mask_list.txt",
    "content": "mask/test.png\n"
  },
  {
    "path": "tests/data/inpainting/mask_list_single_ch.txt",
    "content": "mask/test_single_ch.png\n"
  },
  {
    "path": "tests/data/lq.lmdb/meta_info.txt",
    "content": "baboon.png (120,125,3) 1\n"
  },
  {
    "path": "tests/data/matting_dataset/ann.json",
    "content": "{\n    \"metainfo\": {\n        \"dataset_type\": \"test_dataset\",\n        \"task_name\": \"test_task\"\n    },\n    \"data_list\": [\n        {\n            \"alpha_path\": \"alpha/GT05.jpg\",\n            \"trimap_path\": \"trimap/GT05.jpg\",\n            \"bg_path\": \"bg/GT26r.jpg\",\n            \"fg_path\": \"fg/GT05.jpg\",\n            \"merged_path\": \"merged/GT05.jpg\"\n        },\n        {\n            \"alpha_path\": \"alpha/GT05.jpg\",\n            \"bg_path\": \"bg/GT26r.jpg\",\n            \"fg_path\": \"fg/GT05.jpg\"\n        }\n    ]\n}\n"
  },
  {
    "path": "tests/data/matting_dataset/ann_old.json",
    "content": "[\n    {\n        \"alpha_path\": \"alpha/GT05.jpg\",\n        \"trimap_path\": \"trimap/GT05.jpg\",\n        \"bg_path\": \"bg/GT26r.jpg\",\n        \"fg_path\": \"fg/GT05.jpg\",\n        \"merged_path\": \"merged/GT05.jpg\"\n    },\n    {\n        \"alpha_path\": \"alpha/GT05.jpg\",\n        \"bg_path\": \"bg/GT26r.jpg\",\n        \"fg_path\": \"fg/GT05.jpg\"\n    }\n]\n"
  },
  {
    "path": "tests/data/textual_inversion/imagenet_templates_small.txt",
    "content": "a photo of a {}\na rendering of a {}\na cropped photo of the {}\nthe photo of a {}\na photo of a clean {}\na photo of a dirty {}\na dark photo of the {}\na photo of my {}\na photo of the cool {}\na close-up photo of a {}\na bright photo of the {}\na cropped photo of a {}\na photo of the {}\na good photo of the {}\na photo of one {}\na close-up photo of the {}\na rendition of the {}\na photo of the clean {}\na rendition of a {}\na photo of a nice {}\na good photo of a {}\na photo of the nice {}\na photo of the small {}\na photo of the weird {}\na photo of the large {}\na photo of a cool {}\na photo of a small {}"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_base_mmagic_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nimport pytest\n\nfrom mmagic.apis.inferencers.base_mmagic_inferencer import BaseMMagicInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_base_mmagic_inferencer():\n    with pytest.raises(Exception):\n        BaseMMagicInferencer(1, None)\n\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'sngan_proj',\n        'sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py')\n\n    with pytest.raises(Exception):\n        BaseMMagicInferencer(cfg, 'test')\n\n    inferencer_instance = BaseMMagicInferencer(cfg, None)\n    extra_parameters = inferencer_instance.get_extra_parameters()\n    assert len(extra_parameters) == 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_colorization_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport unittest\n\nimport torch\n\nfrom mmagic.apis.inferencers.colorization_inferencer import \\\n    ColorizationInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_colorization_inferencer():\n\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs',\n        'inst_colorization',\n        'inst-colorizatioon_full_official_cocostuff-256x256.py')\n    data_path = osp.join(\n        osp.dirname(__file__), '..', '..', 'data', 'unpaired', 'trainA',\n        '1.jpg')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'inst_colorization_result.jpg')\n\n    inferencer_instance = \\\n        ColorizationInferencer(cfg, None)\n    del inferencer_instance.model.cfg.test_pipeline[1]\n\n    inferencer_instance.preprocess(img=data_path)\n\n    preds = torch.rand((1, 3, 256, 256))\n    result_img = inferencer_instance.visualize(preds=preds)\n    result_img = inferencer_instance.visualize(\n        preds=preds, result_out_dir=result_out_dir)\n\n    if not torch.cuda.is_available():\n        # RoI pooling only support in GPU\n        return unittest.skip('test requires GPU and torch+cuda')\n\n    inferencer_instance(img=data_path)\n    inference_result = inferencer_instance(\n        img=data_path, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.shape == (256, 256, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_conditional_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.conditional_inferencer import \\\n    ConditionalInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_conditional_inferencer():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'sngan_proj',\n        'sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'conditional_result.png')\n    inferencer_instance = \\\n        ConditionalInferencer(cfg,\n                              None,\n                              extra_parameters={'sample_model': 'orig'})\n    inference_result = inferencer_instance(label=1)\n    inference_result = inferencer_instance(\n        label=1, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.shape == (4, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_diffusers_pipeline_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.apis.inferencers.diffusers_pipeline_inferencer import \\\n    DiffusersPipelineInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower()\n    or digit_version(TORCH_VERSION) <= digit_version('1.8.1'),\n    reason='skip on windows due to limited RAM'\n    'and get_submodule requires torch >= 1.9.0')\ndef test_diffusers_pipeline_inferencer():\n    cfg = dict(\n        model=dict(\n            type='DiffusionPipeline', from_pretrained='google/ddpm-cat-256'))\n\n    inferencer_instance = DiffusersPipelineInferencer(cfg, None)\n    result = inferencer_instance()\n    assert result[1][0].size == (256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_eg3d_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport shutil\n\nimport numpy as np\nimport pytest\nfrom mmengine import Config\n\nfrom mmagic.apis.inferencers.eg3d_inferencer import EG3DInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nconfig = dict(\n    model=dict(\n        type='EG3D',\n        generator=dict(\n            type='TriplaneGenerator',\n            out_size=32,\n            noise_size=8,\n            style_channels=8,\n            num_mlps=1,\n            triplane_size=8,\n            triplane_channels=4,\n            sr_in_size=8,\n            sr_in_channels=8,\n            neural_rendering_resolution=5,\n            cond_scale=1,\n            renderer_cfg=dict(\n                ray_start=0.1,\n                ray_end=2.6,\n                box_warp=1.6,\n                depth_resolution=4,\n                white_back=True,\n                depth_resolution_importance=4,\n            ),\n            rgb2bgr=True),\n        camera=dict(\n            type='UniformCamera',\n            horizontal_mean=3.141,\n            horizontal_std=3.141,\n            vertical_mean=3.141 / 2,\n            vertical_std=3.141 / 2,\n            focal=1.025390625,\n            up=[0, 0, 1],\n            radius=1.2),\n        data_preprocessor=dict(type='DataPreprocessor')))\n\n\ndef test_eg3d_inferencer():\n    cfg = Config(config)\n\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out', 'eg3d_output')\n\n    inferencer_instance = EG3DInferencer(cfg, None)\n    output = inferencer_instance(\n        vis_mode='both',\n        save_img=False,\n        save_video=True,\n        interpolation='camera',\n        num_images=10,\n        result_out_dir=result_out_dir)\n    # contrust target file list\n    target_file_list = [\n        'fake_img_seed2022.mp4', 'depth_seed2022.mp4', 'combine_seed2022.mp4'\n    ]\n    assert set(target_file_list) == set(os.listdir(result_out_dir))\n    assert isinstance(output, dict)\n    shutil.rmtree(result_out_dir)\n\n    output = inferencer_instance(\n        vis_mode='both',\n        save_img=True,\n        save_video=False,\n        interpolation='camera',\n        num_images=10,\n        result_out_dir=result_out_dir)\n    # contrust target file list\n    target_file_list = [\n        f'fake_img_frame{idx}_seed2022.png' for idx in range(10)\n    ]\n    target_file_list += [f'depth_frame{idx}_seed2022.png' for idx in range(10)]\n    target_file_list += [\n        f'combine_frame{idx}_seed2022.png' for idx in range(10)\n    ]\n    assert set(target_file_list) == set(os.listdir(result_out_dir))\n    assert isinstance(output, dict)\n    shutil.rmtree(result_out_dir)\n\n    output = inferencer_instance(\n        vis_mode='depth',\n        save_img=False,\n        interpolation='camera',\n        num_images=2,\n        result_out_dir=result_out_dir)\n    # contrust target file list\n    target_file_list = ['depth_seed2022.mp4']\n    assert set(target_file_list) == set(os.listdir(result_out_dir))\n    assert isinstance(output, dict)\n    shutil.rmtree(result_out_dir)\n\n    output = inferencer_instance(\n        vis_mode='depth',\n        save_video=False,\n        save_img=False,\n        interpolation='camera',\n        sample_model='orig',\n        num_images=2,\n        result_out_dir=result_out_dir)\n    assert len(os.listdir(result_out_dir)) == 0\n\n    # test cond input\n    inferencer_instance = EG3DInferencer(\n        cfg, None, extra_parameters=dict(sample_model='orig'))\n    cond_input = [np.random.randn(25) for _ in range(2)]\n    output = inferencer_instance(\n        inputs=cond_input,\n        vis_mode='both',\n        save_video=True,\n        save_img=False,\n        interpolation='camera',\n        num_images=2,\n        result_out_dir=result_out_dir)\n    # contrust target file list\n    target_file_list = [\n        'fake_img_seed2022.png',\n        'depth_seed2022.png',\n        'combine_seed2022.png',\n    ]\n    assert set(target_file_list) == set(os.listdir(result_out_dir))\n    assert isinstance(output, dict)\n    shutil.rmtree(result_out_dir)\n\n    cond_input = [[0.111 for _ in range(25)] for _ in range(2)]\n    output = inferencer_instance(\n        inputs=cond_input,\n        vis_mode='depth',\n        save_video=False,\n        save_img=True,\n        interpolation='camera',\n        num_images=2,\n        result_out_dir=result_out_dir)\n    target_file_list = ['depth_seed2022.png']\n    assert set(target_file_list) == set(os.listdir(result_out_dir))\n    assert isinstance(output, dict)\n    shutil.rmtree(result_out_dir)\n\n    cond_input = [['wrong'], ['input']]\n    with pytest.raises(AssertionError):\n        inferencer_instance(\n            inputs=cond_input,\n            vis_mode='depth',\n            save_video=False,\n            save_img=False,\n            interpolation='camera',\n            num_images=2,\n            result_out_dir=result_out_dir)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_image_super_resolution_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.apis.inferencers.image_super_resolution_inferencer import \\\n    ImageSuperResolutionInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_image_super_resolution_inferencer():\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    config = data_root + 'configs/esrgan/esrgan_x4c64b23g32_1xb16-400k_div2k.py'  # noqa\n    img_path = data_root + 'tests/data/image/lq/baboon_x4.png'\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'image_super_resolution_result.png')\n\n    inferencer_instance = \\\n        ImageSuperResolutionInferencer(config, None)\n    inferencer_instance(img=img_path)\n    inference_result = inferencer_instance(\n        img=img_path, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.shape == (480, 500, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_inference_functions.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\n\nfrom mmagic.apis.inferencers.inference_functions import (calculate_grid_size,\n                                                         init_model,\n                                                         set_random_seed)\n\n\ndef test_init_model():\n    set_random_seed(1)\n\n    with pytest.raises(TypeError):\n        init_model(['dog'])\n\n\ndef test_calculate_grid_size():\n    inp_batch_size = (10, 13, 20, 1, 4)\n    target_nrow = (4, 4, 5, 1, 2)\n    for bz, tar in zip(inp_batch_size, target_nrow):\n        assert calculate_grid_size(bz) == tar\n\n    # test aspect_ratio is not None\n    inp_batch_size = (10, 13, 20, 1, 4)\n    aspect_ratio = (2, 3, 3, 4, 3)\n    target_nrow = (3, 3, 3, 1, 2)\n    for bz, ratio, tar in zip(inp_batch_size, aspect_ratio, target_nrow):\n        assert calculate_grid_size(bz, ratio) == tar\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_inpainting_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.inpainting_inferencer import InpaintingInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_inpainting_inferencer():\n    data_root = osp.join(osp.dirname(__file__), '../../')\n    masked_img_path = data_root + 'data/inpainting/celeba_test.png'\n    mask_path = data_root + 'data/inpainting/bbox_mask.png'\n    cfg = osp.join(\n        osp.dirname(__file__),\n        '..',\n        '..',\n        '..',\n        'configs',\n        'aot_gan',\n        'aot-gan_smpgan_4xb4_places-512x512.py',\n    )\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out', 'inpainting_result.png')\n\n    inferencer_instance = \\\n        InpaintingInferencer(cfg, None)\n    inferencer_instance(img=masked_img_path, mask=mask_path)\n    inference_result = inferencer_instance(\n        img=masked_img_path, mask=mask_path, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.shape == (256, 256, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_matting_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.matting_inferencer import MattingInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_matting_inferencer():\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    config = data_root + 'configs/dim/dim_stage3-v16-pln_1xb1-1000k_comp1k.py'\n    img_path = data_root + 'tests/data/matting_dataset/merged/GT05.jpg'\n    trimap_path = data_root + 'tests/data/matting_dataset/trimap/GT05.png'\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out', 'matting_result.png')\n\n    inferencer_instance = \\\n        MattingInferencer(config, None)\n    inferencer_instance(img=img_path, trimap=trimap_path)\n    inference_result = inferencer_instance(\n        img=img_path, trimap=trimap_path, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.numpy().shape == (552, 800)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_mmedit_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nimport pytest\n\nfrom mmagic.apis.inferencers import Inferencers\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_mmagic_inferencer():\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('colorization', ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('unconditional', ['error_type'],\n                                          None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('matting', ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('inpainting', ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('translation', ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('restoration', ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('video_restoration', ['error_type'],\n                                          None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('video_interpolation',\n                                          ['error_type'], None)\n\n    with pytest.raises(Exception) as e_info:\n        inferencer_instance = Inferencers('dog', ['error_type'], None)\n\n    print(e_info)\n\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'sngan_proj',\n        'sngan-proj_woReLUinplace_lr2e-4-ndisc5-1xb64_cifar10-32x32.py')\n    inferencer_instance = \\\n        Inferencers('conditional',\n                    cfg,\n                    None,\n                    extra_parameters={'sample_model': 'orig'})\n    inference_result = inferencer_instance(label=1)\n    result_img = inference_result[1]\n    assert result_img.shape == (4, 3, 32, 32)\n\n    extra_parameters = inferencer_instance.get_extra_parameters()\n    assert len(extra_parameters) == 2\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_text2image_inferencers.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport unittest\nfrom unittest import TestCase\nfrom unittest.mock import patch\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom torchvision.version import __version__ as TV_VERSION\n\nfrom mmagic.apis.inferencers.text2image_inferencer import Text2ImageInferencer\nfrom mmagic.models import DenoisingUnet, DiscoDiffusion\nfrom mmagic.models.diffusion_schedulers import EditDDIMScheduler\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass clip_mock(nn.Module):\n\n    def __init__(self, device='cuda'):\n        super().__init__()\n        self.register_buffer('tensor', torch.randn([1, 512]))\n\n    def encode_image(self, inputs):\n        return inputs.mean() * self.tensor.repeat(inputs.shape[0], 1).to(\n            inputs.device)\n\n    def encode_text(self, inputs):\n        return self.tensor.repeat(inputs.shape[0], 1).to(inputs.device)\n\n    def forward(self, x):\n        return x\n\n\nclass clip_mock_wrapper(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.model = clip_mock()\n\n    def forward(self, x):\n        return x\n\n\nclass TestTranslationInferencer(TestCase):\n\n    def setUp(self):\n        self.unet32 = DenoisingUnet(\n            image_size=32,\n            in_channels=3,\n            base_channels=8,\n            resblocks_per_downsample=2,\n            attention_res=(8, ),\n            norm_cfg=dict(type='GN32', num_groups=8),\n            dropout=0.0,\n            num_classes=0,\n            use_fp16=True,\n            resblock_updown=True,\n            attention_cfg=dict(\n                type='MultiHeadAttentionBlock',\n                num_heads=2,\n                num_head_channels=8,\n                use_new_attention_order=False),\n            use_scale_shift_norm=True)\n        # mock clip\n        self.clip_models = [clip_mock_wrapper(), clip_mock_wrapper()]\n        # diffusion_scheduler\n        self.diffusion_scheduler = EditDDIMScheduler(\n            variance_type='learned_range',\n            beta_schedule='linear',\n            clip_sample=False)\n\n        unet32 = self.unet32\n        diffusion_scheduler = self.diffusion_scheduler\n        clip_models = self.clip_models\n        self.disco_diffusion = DiscoDiffusion(\n            unet=unet32,\n            diffusion_scheduler=diffusion_scheduler,\n            secondary_model=None,\n            clip_models=clip_models,\n            use_fp16=True).cuda()\n\n    @unittest.skipIf(\n        digit_version(TV_VERSION) <= digit_version('0.7.0'),\n        reason='torchvision version limiation')\n    @unittest.skipIf(not torch.cuda.is_available(), reason='requires cuda')\n    def test_translation(self):\n        cfg_root = osp.join(\n            osp.dirname(__file__), '..', '..', '..', 'configs',\n            'disco_diffusion')\n        cfg = osp.join(cfg_root,\n                       'disco-diffusion_adm-u-finetuned_imagenet-512x512.py')\n        text = {0: ['sad']}\n        result_out_dir = osp.join(\n            osp.dirname(__file__), '..', '..', 'data/out', 'disco_result.png')\n\n        with patch.object(Text2ImageInferencer, '_init_model'):\n            inferencer_instance = Text2ImageInferencer(\n                cfg, None, extra_parameters={'num_inference_steps': 2})\n            # mock model\n            inferencer_instance.model = self.disco_diffusion\n            inferencer_instance(text=text)\n            inference_result = inferencer_instance(\n                text=text, result_out_dir=result_out_dir)\n            result_img = inference_result[1]\n            assert result_img[0].cpu().numpy().shape == (3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_translation_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.translation_inferencer import \\\n    TranslationInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_translation_inferencer():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'pix2pix',\n        'pix2pix_vanilla-unet-bn_1xb1-80kiters_facades.py')\n    data_path = osp.join(\n        osp.dirname(__file__), '..', '..', 'data', 'unpaired', 'trainA',\n        '1.jpg')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'translation_result.png')\n\n    inferencer_instance = \\\n        TranslationInferencer(cfg, None)\n    inferencer_instance(img=data_path)\n    inference_result = inferencer_instance(\n        img=data_path, result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img[0].cpu().numpy().shape == (3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_unconditional_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nimport torch\n\nfrom mmagic.apis.inferencers.unconditional_inferencer import \\\n    UnconditionalInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_unconditional_inferencer():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'styleganv1',\n        'styleganv1_ffhq-256x256_8xb4-25Mimgs.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'unconditional_result.png')\n\n    inferencer_instance = \\\n        UnconditionalInferencer(cfg,\n                                None,\n                                extra_parameters={\n                                    'num_batches': 1,\n                                    'sample_model': 'orig'})\n    # test no result_out_dir\n    inferencer_instance()\n    inference_result = inferencer_instance(result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.detach().numpy().shape == (1, 3, 256, 256)\n\n    # test additional input for extra parameters\n    noise = torch.randn(1, 512)\n    sample_kwargs = sample_kwargs = {\n        'return_noise': True,\n        'input_is_latent': False\n    }\n\n    inferencer_instance = \\\n        UnconditionalInferencer(cfg,\n                                None,\n                                extra_parameters={\n                                    'num_batches': 1,\n                                    'sample_model': 'orig',\n                                    'noise': noise,\n                                    'sample_kwargs': sample_kwargs})\n    # test no result_out_dir\n    inferencer_instance()\n    inference_result = inferencer_instance(result_out_dir=result_out_dir)\n    result_img = inference_result[1]\n    assert result_img.detach().numpy().shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_video_interpolation_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.video_interpolation_inferencer import \\\n    VideoInterpolationInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_video_interpolation_inferencer():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'flavr',\n        'flavr_in4out1_8xb4_vimeo90k-septuplet.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'video_interpolation_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    video_path = data_root + 'tests/data/frames/test_inference.mp4'\n\n    inferencer_instance = \\\n        VideoInterpolationInferencer(cfg,\n                                     None)\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef test_video_interpolation_inferencer_input_dir():\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    config = data_root + 'configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py'\n    video_path = data_root + 'tests/data/frames/sequence/gt/sequence_1'\n    result_out_dir = data_root + 'tests/data/out'\n\n    inferencer_instance = \\\n        VideoInterpolationInferencer(config,\n                                     None,\n                                     extra_parameters={'fps': 60})\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef test_video_interpolation_inferencer_fps_multiplier():\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data',\n        'video_interpolation_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    cfg = data_root + 'configs/cain/cain_g1b32_1xb5_vimeo90k-triplet.py'\n    video_path = data_root + 'tests/data/frames/test_inference.mp4'\n\n    inferencer_instance = \\\n        VideoInterpolationInferencer(cfg,\n                                     None,\n                                     extra_parameters={'fps_multiplier': 2})\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_inferencers/test_video_restoration_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.apis.inferencers.video_restoration_inferencer import \\\n    VideoRestorationInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_video_restoration_inferencer():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'basicvsr',\n        'basicvsr_2xb4_reds4.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'video_restoration_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    video_path = data_root + 'tests/data/frames/test_inference.mp4'\n\n    inferencer_instance = \\\n        VideoRestorationInferencer(\n            cfg,\n            None)\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef test_video_restoration_inferencer_input_dir():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'basicvsr',\n        'basicvsr_2xb4_reds4.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'video_restoration_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    input_dir = osp.join(data_root, 'tests/data/frames/sequence/gt/sequence_1')\n    result_out_dir = data_root + 'tests/data/out'\n\n    inferencer_instance = \\\n        VideoRestorationInferencer(\n            cfg,\n            None)\n    inference_result = inferencer_instance(\n        video=input_dir, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef test_video_restoration_inferencer_window_size():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'basicvsr',\n        'basicvsr_2xb4_reds4.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'video_restoration_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    video_path = data_root + 'tests/data/frames/test_inference.mp4'\n\n    extra_parameters = {'window_size': 3}\n\n    inferencer_instance = \\\n        VideoRestorationInferencer(\n            cfg,\n            None,\n            extra_parameters=extra_parameters)\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef test_video_restoration_inferencer_max_seq_len():\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', '..', 'configs', 'basicvsr',\n        'basicvsr_2xb4_reds4.py')\n    result_out_dir = osp.join(\n        osp.dirname(__file__), '..', '..', 'data/out',\n        'video_restoration_result.mp4')\n    data_root = osp.join(osp.dirname(__file__), '../../../')\n    video_path = data_root + 'tests/data/frames/test_inference.mp4'\n\n    extra_parameters = {'max_seq_len': 3}\n\n    inferencer_instance = \\\n        VideoRestorationInferencer(\n            cfg,\n            None,\n            extra_parameters=extra_parameters)\n    inference_result = inferencer_instance(\n        video=video_path, result_out_dir=result_out_dir)\n    assert inference_result is None\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_apis/test_mmagic_inferencer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nimport pytest\n\nfrom mmagic.apis import MMagicInferencer\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_edit():\n    with pytest.raises(Exception):\n        MMagicInferencer('dog', ['error_type'], None)\n\n    with pytest.raises(Exception):\n        MMagicInferencer()\n\n    with pytest.raises(Exception):\n        MMagicInferencer(model_setting=1)\n\n    supported_models = MMagicInferencer.get_inference_supported_models()\n    MMagicInferencer.inference_supported_models_cfg_inited = False\n    supported_models = MMagicInferencer.get_inference_supported_models()\n\n    supported_tasks = MMagicInferencer.get_inference_supported_tasks()\n    MMagicInferencer.inference_supported_models_cfg_inited = False\n    supported_tasks = MMagicInferencer.get_inference_supported_tasks()\n\n    task_supported_models = \\\n        MMagicInferencer.get_task_supported_models('Image2Image Translation')\n    MMagicInferencer.inference_supported_models_cfg_inited = False\n    task_supported_models = \\\n        MMagicInferencer.get_task_supported_models('Image2Image Translation')\n\n    print(supported_models)\n    print(supported_tasks)\n    print(task_supported_models)\n\n    cfg = osp.join(\n        osp.dirname(__file__), '..', '..', 'configs', 'biggan',\n        'biggan_2xb25-500kiters_cifar10-32x32.py')\n\n    mmagic_instance = MMagicInferencer(\n        'biggan',\n        model_ckpt='',\n        model_config=cfg,\n        extra_parameters={'sample_model': 'ema'})\n    mmagic_instance.print_extra_parameters()\n    inference_result = mmagic_instance.infer(label=1)\n    result_img = inference_result[1]\n    assert result_img.shape == (4, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_basic_conditional_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n# import os\nimport os.path as osp\nfrom unittest import TestCase\n\nimport numpy as np\n\nfrom mmagic.datasets import BasicConditionalDataset\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nDATA_DIR = osp.abspath(osp.join(osp.dirname(__file__), '../data/dataset/'))\n\n\nclass TestBasicConditonalDataset(TestCase):\n\n    def test_init(self):\n        ann_file = osp.abspath(osp.join(DATA_DIR, 'anno.txt'))\n        dataset = BasicConditionalDataset(\n            data_root=DATA_DIR,\n            ann_file=ann_file,\n            metainfo={'classes': ('bus', 'car')})\n\n        self.assertEqual(dataset.CLASSES, ('bus', 'car'))\n        self.assertFalse(dataset.test_mode)\n        self.assertNotIn('With transforms:', repr(dataset))\n\n        classes_file = osp.abspath(osp.join(DATA_DIR, 'classes.txt'))\n        dataset = BasicConditionalDataset(\n            data_root=DATA_DIR, ann_file=ann_file, classes=classes_file)\n        self.assertEqual(dataset.CLASSES, ('bus', 'car'))\n        self.assertEqual(dataset.class_to_idx, {'bus': 0, 'car': 1})\n\n        ann_file = osp.abspath(osp.join(DATA_DIR, 'wrong.yml'))\n        with self.assertRaises(TypeError):\n            BasicConditionalDataset(data_root=DATA_DIR, ann_file=ann_file)\n\n        gt_labels = dataset.get_gt_labels()\n        print(type(gt_labels))\n        self.assertTrue((gt_labels == np.array([0, 1, 1])).all())\n\n        for idx, tar_ids in enumerate([0, 1, 1]):\n            cat_ids = dataset.get_cat_ids(idx)\n            self.assertEqual(cat_ids, [tar_ids])\n\n        data = dataset[0]\n        self.assertEqual(data['sample_idx'], 0)\n        self.assertEqual(data['gt_label'], 0)\n        self.assertIn('a/1.JPG', data['gt_path'])\n\n        # test data prefix --> b/subb\n        dataset = BasicConditionalDataset(data_root=DATA_DIR, data_prefix='b')\n        self.assertIn('subb', dataset.CLASSES)\n\n        dataset = BasicConditionalDataset(\n            data_root=DATA_DIR, data_prefix={'gt_path': 'b'})\n        self.assertIn('subb', dataset.CLASSES)\n\n        # test runtime error --> no samples\n        with self.assertRaises(RuntimeError):\n            dataset = BasicConditionalDataset(data_root=osp.dirname(__file__))\n\n        # test assert error --> class list is not same\n        with self.assertRaises(AssertionError):\n            dataset = BasicConditionalDataset(\n                data_root=DATA_DIR, classes=['1', '2', '3', '4'])\n\n        # test Value error --> wrong classes type input\n        with self.assertRaises(ValueError):\n            dataset = BasicConditionalDataset(\n                data_root=DATA_DIR, classes=dict(a=1))\n\n        # test raise warning --> find empty classes -->\n        # TODO: how to get logger's output?\n        dataset = BasicConditionalDataset(data_root=DATA_DIR)\n\n        # test lazy init\n        dataset = BasicConditionalDataset(\n            data_root=DATA_DIR,\n            lazy_init=True,\n            pipeline=[dict(type='PackInputs')])\n        self.assertFalse(dataset._fully_initialized)\n        self.assertIn(\"Haven't been initialized\", repr(dataset))\n        self.assertIn('With transforms:', repr(dataset))\n\n        # test load label from json file\n        ann_file = osp.abspath(osp.join(DATA_DIR, 'anno.json'))\n        dataset = BasicConditionalDataset(\n            data_root=DATA_DIR,\n            ann_file=ann_file,\n            lazy_init=True,\n            pipeline=[dict(type='PackInputs')])\n        self.assertEqual(dataset[0]['data_samples'].gt_label.label.tolist(),\n                         [1, 2, 3, 4])\n        self.assertEqual(dataset[1]['data_samples'].gt_label.label.tolist(),\n                         [1, 4, 5, 3])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_basic_frames_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom pathlib import Path\n\nfrom mmagic.datasets import BasicFramesDataset\n\n\nclass TestFramesDatasets:\n\n    # TODO add a param for depth of file (for sequence_length).\n\n    @classmethod\n    def setup_class(cls):\n        cls.data_root = Path(__file__).parent.parent / 'data' / 'frames'\n\n    def test_version_1_method(self):\n\n        # test SRREDSDataset and SRREDSMultipleGTDataset\n        # need to split the data set ahead of schedule\n        dataset = BasicFramesDataset(\n            ann_file='ann2.txt',\n            metainfo=dict(dataset_type='SRREDSDataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            backend_args=dict(backend='local'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=5,\n            fixed_seq_len=100)\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=5,\n            num_output_frames=None,\n            sequence_length=100,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n\n        # test SRVimeo90KDataset and SRVimeo90KMultipleGTDataset\n        # Each clip of Vimeo90K has 7 frames starting from 1.\n        # So we use 9 for generating frame_index_list in Version 1.0:\n        # N | frame_index_list\n        # 1 | 4\n        # 3 | 3,4,5\n        # 5 | 2,3,4,5,6\n        # 7 | 1,2,3,4,5,6,7\n        # In Version 2.0, we load the list of frames directly\n        dataset = BasicFramesDataset(\n            ann_file='ann3.txt',\n            metainfo=dict(dataset_type='SRVimeo90KDataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='sequence', gt='sequence'),\n            pipeline=[],\n            depth=2,\n            load_frames_list=dict(\n                img=['all'], gt=['00000000.png', '00000001.png']))\n        assert dataset[0] == dict(\n            key=f'gt{os.sep}sequence_1',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            sample_idx=0)\n\n        # test SRVid4Dataset\n        dataset = BasicFramesDataset(\n            ann_file='ann1.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n\n        # test SRTestMultipleGTDataset and SRFolderMultipleGTDataset\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            pipeline=[],\n            num_input_frames=1,\n            depth=1)\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=1,\n            num_output_frames=None,\n            sequence_length=2,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        dataset = BasicFramesDataset(\n            ann_file='ann1.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            pipeline=[],\n            num_input_frames=1,\n            depth=1)\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=1,\n            num_output_frames=None,\n            sequence_length=2,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n\n        # test SRFolderVideoDataset\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            pipeline=[],\n            num_input_frames=5,\n            depth=2)\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=5,\n            num_output_frames=None,\n            sequence_length=2,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        dataset = BasicFramesDataset(\n            ann_file='ann2.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            pipeline=[],\n            num_input_frames=5,\n            depth=2)\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=5,\n            num_output_frames=None,\n            sequence_length=2,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n\n        # test VFIVimeo90KDataset\n        dataset = BasicFramesDataset(\n            ann_file='ann3.txt',\n            metainfo=dict(dataset_type='vfi_folder_dataset', task_name='vfi'),\n            data_root=self.data_root,\n            data_prefix=dict(img='sequence', gt='sequence'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3,\n            load_frames_list=dict(\n                img=['00000000.png', '00000001.png'], gt=['00000000.png']))\n        assert dataset[0] == dict(\n            key=f'gt{os.sep}sequence_1',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png')\n            ],\n            sample_idx=0)\n\n    def test_vsr_folder_dataset(self):\n        # case 1: deep_path\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key=f'sequence_1{os.sep}00000001',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n        assert dataset[2] == dict(\n            key=f'sequence_2{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=2)\n\n        # case 2: not deep_path\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n\n        # case 3: no fixed_seq_len\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=None)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=2,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n\n        # case 4: not deep_path, load_frames_list\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3,\n            load_frames_list=dict(img=['all'], gt=['00000000.png']))\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png')\n            ],\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=3,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000001.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000002.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png')\n            ],\n            sample_idx=1)\n\n        # case 5: deep_path, load_frames_list\n        dataset = BasicFramesDataset(\n            ann_file='',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='sequence', gt='sequence'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3,\n            load_frames_list=dict(img=['00000000.png'], gt=['all']))\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / 'sequence'),\n            gt=str(self.data_root / 'sequence'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key=f'gt{os.sep}sequence_1',\n            num_input_frames=1,\n            num_output_frames=2,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key=f'gt{os.sep}sequence_2',\n            num_input_frames=1,\n            num_output_frames=3,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000001.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000002.png')\n            ],\n            sample_idx=1)\n\n    def test_vsr_ann_dataset(self):\n        # case 1: deep_path, not deep_ann\n        dataset = BasicFramesDataset(\n            ann_file='ann1.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        assert dataset.ann_file == str(self.data_root / 'ann1.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key=f'sequence_1{os.sep}00000001',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n        assert dataset[2] == dict(\n            key=f'sequence_2{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=2)\n\n        # case 2: deep_path, deep_ann\n        dataset = BasicFramesDataset(\n            ann_file='ann2.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        assert dataset.ann_file == str(self.data_root / 'ann2.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key=f'sequence_1{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key=f'sequence_1{os.sep}00000001',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n        assert dataset[2] == dict(\n            key=f'sequence_2{os.sep}00000000',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=2)\n\n        # case 3: not deep_path, not deep_ann\n        dataset = BasicFramesDataset(\n            ann_file='ann1.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        assert dataset.ann_file == str(self.data_root / 'ann1.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n\n        # case 4: not deep_path, deep_ann\n        dataset = BasicFramesDataset(\n            ann_file='ann2.txt',\n            metainfo=dict(dataset_type='vsr_folder_dataset', task_name='vsr'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3)\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        assert dataset.ann_file == str(self.data_root / 'ann2.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=2,\n            num_output_frames=2,\n            sequence_length=3,\n            img_path=str(self.data_root / f'sequence{os.sep}gt'),\n            gt_path=str(self.data_root / f'sequence{os.sep}gt'),\n            sample_idx=1)\n\n    def test_vfi_ann_dataset(self):\n        # case 1: not deep_path\n        dataset = BasicFramesDataset(\n            ann_file='ann1.txt',\n            metainfo=dict(dataset_type='vfi_folder_dataset', task_name='vfi'),\n            data_root=self.data_root,\n            data_prefix=dict(\n                img=f'sequence{os.sep}gt', gt=f'sequence{os.sep}gt'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=1,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3,\n            load_frames_list=dict(\n                img=['00000000.png', '00000001.png'], gt=['00000000.png']))\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / f'sequence{os.sep}gt'),\n            gt=str(self.data_root / f'sequence{os.sep}gt'))\n        assert dataset.ann_file == str(self.data_root / 'ann1.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='sequence_1',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png')\n            ],\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='sequence_2',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png')\n            ],\n            sample_idx=1)\n\n        # case 2: deep_path\n        dataset = BasicFramesDataset(\n            ann_file='ann3.txt',\n            metainfo=dict(dataset_type='vfi_folder_dataset', task_name='vfi'),\n            data_root=self.data_root,\n            data_prefix=dict(img='sequence', gt='sequence'),\n            filename_tmpl=dict(img='{}', gt='{}'),\n            pipeline=[],\n            depth=2,\n            num_input_frames=2,\n            num_output_frames=2,\n            fixed_seq_len=3,\n            load_frames_list=dict(\n                img=['00000000.png', '00000001.png'], gt=['00000000.png']))\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / 'sequence'),\n            gt=str(self.data_root / 'sequence'))\n        assert dataset.ann_file == str(self.data_root / 'ann3.txt')\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key=f'gt{os.sep}sequence_1',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_1' /\n                    '00000000.png')\n            ],\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key=f'gt{os.sep}sequence_2',\n            num_input_frames=2,\n            num_output_frames=1,\n            sequence_length=None,\n            img_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png'),\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000001.png')\n            ],\n            gt_path=[\n                str(self.data_root / f'sequence{os.sep}gt' / 'sequence_2' /\n                    '00000000.png')\n            ],\n            sample_idx=1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_basic_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom pathlib import Path\n\nimport mmcv\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import LoadImageFromFile\n\n\nclass TestImageDatasets:\n\n    @classmethod\n    def setup_class(cls):\n        cls.data_root = Path(__file__).parent.parent / 'data' / 'image'\n\n    def test_version_1_method(self):\n\n        # test SRAnnotationDataset\n        dataset = BasicImageDataset(\n            ann_file='train.txt',\n            metainfo=dict(\n                dataset_type='sr_annotation_dataset', task_name='sisr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='lq', gt='gt'),\n            filename_tmpl=dict(img='{}_x4'),\n            backend_args=dict(backend='local'),\n            pipeline=[])\n        assert dataset[0] == dict(\n            key='baboon',\n            img_path=str(self.data_root / 'lq' / 'baboon_x4.png'),\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n\n        # test SRFolderDataset\n        dataset = BasicImageDataset(\n            metainfo=dict(dataset_type='sr_folder_dataset', task_name='sisr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='lq', gt='gt'),\n            filename_tmpl=dict(img='{}_x4'),\n            pipeline=[])\n        assert dataset[0] == dict(\n            key='baboon',\n            img_path=str(self.data_root / 'lq' / 'baboon_x4.png'),\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n\n        # test SRFolderGTDataset\n        dataset = BasicImageDataset(\n            metainfo=dict(dataset_type='sr_folder_dataset', task_name='sisr'),\n            data_root=self.data_root,\n            data_prefix=dict(gt='gt'),\n            filename_tmpl=dict(),\n            pipeline=[])\n        assert dataset[0] == dict(\n            key='baboon',\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n\n        # test SRLmdbDataset\n        # The reconstructed LoadImageFromFile supports process images in LMDB\n        # backend, which require similar img_path as that of disk backend.\n        # Thus SRLmdbDataset is useless.\n        # We can build the dataset in the same way with SRAnnotationDataset:\n        pipeline = [\n            LoadImageFromFile(\n                key='img',\n                backend_args=dict(\n                    backend='lmdb',\n                    db_path=Path(__file__).parent.parent / 'data' / 'lq.lmdb'))\n        ]\n        dataset = BasicImageDataset(\n            ann_file=f'lq.lmdb{os.sep}meta_info.txt',\n            metainfo=dict(\n                dataset_type='sr_annotation_dataset', task_name='sisr'),\n            data_prefix=dict(gt='', img=''),\n            data_root=self.data_root.parent,\n            pipeline=pipeline)\n        assert dataset.ann_file == str(self.data_root.parent / 'lq.lmdb' /\n                                       'meta_info.txt')\n        path_baboon_x4 = Path(\n            __file__).parent.parent / 'data' / 'image' / 'lq' / 'baboon_x4.png'\n        img_baboon_x4 = mmcv.imread(str(path_baboon_x4), flag='color')\n        h, w, _ = img_baboon_x4.shape\n        assert dataset[0]['img'].shape == (h, w, 3)\n        assert dataset[0]['ori_img_shape'] == (h, w, 3)\n        dataset[0]['img_path'] == str(self.data_root.parent / 'baboon.png')\n        dataset[0]['gt_path'] == str(self.data_root.parent / 'baboon.png')\n\n        # test ImgInpaintingDataset\n        # test SRFacialLandmarkDataset i.e. SRAnnGTDataset\n        dataset = BasicImageDataset(\n            ann_file='train.txt',\n            metainfo=dict(\n                dataset_type='ImgInpaintingDataset', task_name='inpainting'),\n            data_root=self.data_root,\n            data_prefix=dict(gt='gt'),\n            filename_tmpl=dict(),\n            pipeline=[])\n        assert dataset[0] == dict(\n            key='baboon',\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n        assert dataset[1] == dict(\n            key='baboon',\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=1)\n\n    def test_sisr_annotation_dataset(self):\n        # setup\n        dataset = BasicImageDataset(\n            ann_file='train.txt',\n            metainfo=dict(\n                dataset_type='sisr_annotation_dataset', task_name='sisr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='lq', gt='gt'),\n            filename_tmpl=dict(img='{}_x4', gt='{}'),\n            pipeline=[])\n\n        assert dataset.ann_file == str(self.data_root / 'train.txt')\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / 'lq'), gt=str(self.data_root / 'gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='baboon',\n            img_path=str(self.data_root / 'lq' / 'baboon_x4.png'),\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0), dataset[0]\n\n    def test_sisr_folder_dataset(self):\n        # setup\n        dataset = BasicImageDataset(\n            metainfo=dict(\n                dataset_type='sisr_folder_dataset', task_name='sisr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='lq', gt='gt'),\n            filename_tmpl=dict(img='{}_x4', gt='{}'),\n            pipeline=[])\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / 'lq'), gt=str(self.data_root / 'gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='baboon',\n            img_path=str(self.data_root / 'lq' / 'baboon_x4.png'),\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n\n    def test_refsr_folder_dataset(self):\n        # setup\n        dataset = BasicImageDataset(\n            metainfo=dict(\n                dataset_type='refsr_folder_dataset', task_name='refsr'),\n            data_root=self.data_root,\n            data_prefix=dict(img='lq', gt='gt', ref='gt'),\n            filename_tmpl=dict(img='{}_x4', gt='{}', ref='{}'),\n            pipeline=[])\n\n        assert dataset.data_prefix == dict(\n            img=str(self.data_root / 'lq'),\n            gt=str(self.data_root / 'gt'),\n            ref=str(self.data_root / 'gt'))\n        # Serialize ``self.data_list`` to save memory\n        assert dataset.data_list == []\n        assert dataset[0] == dict(\n            key='baboon',\n            img_path=str(self.data_root / 'lq' / 'baboon_x4.png'),\n            gt_path=str(self.data_root / 'gt' / 'baboon.png'),\n            ref_path=str(self.data_root / 'gt' / 'baboon.png'),\n            sample_idx=0)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_categories.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.datasets.categories import CIFAR10_CATEGORIES, IMAGENET_CATEGORIES\n\n\ndef test_cifar10_categories():\n    assert len(CIFAR10_CATEGORIES) == 10\n\n\ndef test_imagenet_categories():\n    assert len(IMAGENET_CATEGORIES) == 1000\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_cifar10_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport pickle\nimport tempfile\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, patch\n\nimport numpy as np\n\nfrom mmagic.registry import DATASETS\nfrom mmagic.utils import register_all_modules\n\nDATA_DIR = osp.abspath(osp.join(osp.dirname(__file__), '../data/dataset/'))\n\nregister_all_modules()\n\n\nclass TestCIFAR10(TestCase):\n    DATASET_TYPE = 'CIFAR10'\n\n    @classmethod\n    def setUpClass(cls) -> None:\n        super().setUpClass()\n\n        tmpdir = tempfile.TemporaryDirectory()\n        cls.tmpdir = tmpdir\n        data_prefix = tmpdir.name\n        cls.DEFAULT_ARGS = dict(\n            data_prefix=data_prefix, pipeline=[], test_mode=False)\n\n        dataset_class = DATASETS.get(cls.DATASET_TYPE)\n        base_folder = osp.join(data_prefix, dataset_class.base_folder)\n        os.mkdir(base_folder)\n\n        cls.fake_imgs = np.random.randint(\n            0, 255, size=(6, 3 * 32 * 32), dtype=np.uint8)\n        cls.fake_labels = np.random.randint(0, 10, size=(6, ))\n        cls.fake_classes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n\n        batch1 = dict(\n            data=cls.fake_imgs[:2], labels=cls.fake_labels[:2].tolist())\n        with open(osp.join(base_folder, 'data_batch_1'), 'wb') as f:\n            f.write(pickle.dumps(batch1))\n\n        batch2 = dict(\n            data=cls.fake_imgs[2:4], labels=cls.fake_labels[2:4].tolist())\n        with open(osp.join(base_folder, 'data_batch_2'), 'wb') as f:\n            f.write(pickle.dumps(batch2))\n\n        test_batch = dict(\n            data=cls.fake_imgs[4:], fine_labels=cls.fake_labels[4:].tolist())\n        with open(osp.join(base_folder, 'test_batch'), 'wb') as f:\n            f.write(pickle.dumps(test_batch))\n\n        meta = {dataset_class.meta['key']: cls.fake_classes}\n        meta_filename = dataset_class.meta['filename']\n        with open(osp.join(base_folder, meta_filename), 'wb') as f:\n            f.write(pickle.dumps(meta))\n\n        dataset_class.train_list = [['data_batch_1', None],\n                                    ['data_batch_2', None]]\n        dataset_class.test_list = [['test_batch', None]]\n        dataset_class.meta['md5'] = None\n\n    def test_initialize(self):\n        dataset_class = DATASETS.get(self.DATASET_TYPE)\n\n        # Test overriding metainfo by `metainfo` argument\n        cfg = {**self.DEFAULT_ARGS, 'metainfo': {'classes': ('bus', 'car')}}\n        dataset = dataset_class(**cfg)\n        self.assertEqual(dataset.CLASSES, ('bus', 'car'))\n\n        # Test overriding metainfo by `classes` argument\n        cfg = {**self.DEFAULT_ARGS, 'classes': ['bus', 'car']}\n        dataset = dataset_class(**cfg)\n        self.assertEqual(dataset.CLASSES, ('bus', 'car'))\n\n        classes_file = osp.join(DATA_DIR, 'classes.txt')\n        cfg = {**self.DEFAULT_ARGS, 'classes': classes_file}\n        dataset = dataset_class(**cfg)\n        self.assertEqual(dataset.CLASSES, ('bus', 'car'))\n        self.assertEqual(dataset.class_to_idx, {'bus': 0, 'car': 1})\n\n        # Test invalid classes\n        cfg = {**self.DEFAULT_ARGS, 'classes': dict(classes=1)}\n        with self.assertRaisesRegex(ValueError, \"type <class 'dict'>\"):\n            dataset_class(**cfg)\n\n    def test_load_data_list(self):\n        dataset_class = DATASETS.get(self.DATASET_TYPE)\n\n        # Test default behavior\n        dataset = dataset_class(**self.DEFAULT_ARGS)\n        self.assertEqual(len(dataset), 4)\n        self.assertEqual(dataset.CLASSES, dataset_class.METAINFO['classes'])\n\n        data_info = dataset[0]\n        fake_img = self.fake_imgs[0].reshape(3, 32, 32).transpose(1, 2, 0)\n        np.testing.assert_equal(data_info['gt'], fake_img)\n        np.testing.assert_equal(data_info['gt_label'], self.fake_labels[0])\n        assert data_info['gt_channel_order'] == 'RGB'\n\n        # Test with test_mode=True\n        cfg = {**self.DEFAULT_ARGS, 'test_mode': True}\n        dataset = dataset_class(**cfg)\n        self.assertEqual(len(dataset), 2)\n\n        data_info = dataset[0]\n        fake_img = self.fake_imgs[4].reshape(3, 32, 32).transpose(1, 2, 0)\n        np.testing.assert_equal(data_info['gt'], fake_img)\n        np.testing.assert_equal(data_info['gt_label'], self.fake_labels[4])\n        assert data_info['gt_channel_order'] == 'RGB'\n\n        # Test load meta\n        cfg = {**self.DEFAULT_ARGS, 'lazy_init': True}\n        dataset = dataset_class(**cfg)\n        dataset._metainfo = {}\n        dataset.full_init()\n        self.assertEqual(dataset.CLASSES, self.fake_classes)\n\n        cfg = {**self.DEFAULT_ARGS, 'lazy_init': True}\n        dataset = dataset_class(**cfg)\n        dataset._metainfo = {}\n        dataset.meta['filename'] = 'invalid'\n        with self.assertRaisesRegex(RuntimeError, 'not found or corrupted'):\n            dataset.full_init()\n\n        # Test automatically download\n        with patch(\n                'mmagic.datasets.cifar10_dataset.download_and_extract_archive'\n        ) as mock:\n            cfg = {**self.DEFAULT_ARGS, 'lazy_init': True, 'test_mode': True}\n            dataset = dataset_class(**cfg)\n            dataset.test_list = [['invalid_batch', None]]\n            with self.assertRaisesRegex(AssertionError, 'Download failed'):\n                dataset.full_init()\n            mock.assert_called_once_with(\n                dataset.url,\n                dataset.data_prefix['root'],\n                filename=dataset.filename,\n                md5=dataset.tgz_md5)\n\n        with self.assertRaisesRegex(RuntimeError, '`download=True`'):\n            cfg = {\n                **self.DEFAULT_ARGS, 'lazy_init': True,\n                'test_mode': True,\n                'download': False\n            }\n            dataset = dataset_class(**cfg)\n            dataset.test_list = [['test_batch', 'invalid_md5']]\n            dataset.full_init()\n\n        # Test different backend\n        cfg = {\n            **self.DEFAULT_ARGS, 'lazy_init': True,\n            'data_prefix': 'http://openmmlab/cifar'\n        }\n        dataset = dataset_class(**cfg)\n        dataset._check_integrity = MagicMock(return_value=False)\n        with self.assertRaisesRegex(RuntimeError, 'http://openmmlab/cifar'):\n            dataset.full_init()\n\n    def test_extra_repr(self):\n        dataset_class = DATASETS.get(self.DATASET_TYPE)\n        cfg = {**self.DEFAULT_ARGS, 'lazy_init': True}\n        dataset = dataset_class(**cfg)\n\n        self.assertIn(f'Prefix of data: \\t{dataset.data_prefix[\"root\"]}',\n                      repr(dataset))\n\n    @classmethod\n    def tearDownClass(cls):\n        cls.tmpdir.cleanup()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_comp1k_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport os.path as osp\nfrom pathlib import Path\n\nfrom mmagic.datasets import AdobeComp1kDataset\n\n\nclass TestMattingDatasets:\n\n    # path to a minimal test dataset under 'tests/data'\n    DATA_ROOT = Path(__file__).parent.parent / 'data' / 'matting_dataset'\n\n    # cls.pipeline = [\n    #     dict(type='LoadImageFromFile', key='alpha', flag='grayscale')\n    # ]\n\n    def test_comp1k_dataset(self):\n        \"\"\"Verify AdobeComp1kDataset reads dataset correctly.\n\n        AdobeComp1kDataset should support both new and old annotation formats.\n        \"\"\"\n\n        ann_new = 'ann.json'\n        ann_old = 'ann_old.json'\n\n        for ann in ann_new, ann_old:\n            # TODO: we may add an actual pipeline later\n            ds = AdobeComp1kDataset(ann, data_root=self.DATA_ROOT, pipeline=[])\n\n            assert len(ds) == 2\n            assert ds.metainfo == dict(\n                dataset_type='matting_dataset', task_name='matting')\n\n            data0 = ds[0]\n            data1 = ds[1]\n            assert osp.isfile(data0['alpha_path'])\n            assert osp.isfile(data1['alpha_path'])\n\n            is_correct_ntpath = data0 == {\n                'alpha_path': f'{self.DATA_ROOT}\\\\alpha/GT05.jpg',\n                'trimap_path': f'{self.DATA_ROOT}\\\\trimap/GT05.jpg',\n                'bg_path': f'{self.DATA_ROOT}\\\\bg/GT26r.jpg',\n                'fg_path': f'{self.DATA_ROOT}\\\\fg/GT05.jpg',\n                'merged_path': f'{self.DATA_ROOT}\\\\merged/GT05.jpg',\n                'sample_idx': 0,\n            }\n            is_correct_posixpath = data0 == {\n                'alpha_path': f'{self.DATA_ROOT}/alpha/GT05.jpg',\n                'trimap_path': f'{self.DATA_ROOT}/trimap/GT05.jpg',\n                'bg_path': f'{self.DATA_ROOT}/bg/GT26r.jpg',\n                'fg_path': f'{self.DATA_ROOT}/fg/GT05.jpg',\n                'merged_path': f'{self.DATA_ROOT}/merged/GT05.jpg',\n                'sample_idx': 0,\n            }\n            assert is_correct_ntpath or is_correct_posixpath\n\n            is_correct_ntpath = data1 == {\n                'alpha_path': f'{self.DATA_ROOT}\\\\alpha/GT05.jpg',\n                'bg_path': f'{self.DATA_ROOT}\\\\bg/GT26r.jpg',\n                'fg_path': f'{self.DATA_ROOT}\\\\fg/GT05.jpg',\n                'sample_idx': 1,\n            }\n            is_correct_posixpath = data1 == {\n                'alpha_path': f'{self.DATA_ROOT}/alpha/GT05.jpg',\n                'bg_path': f'{self.DATA_ROOT}/bg/GT26r.jpg',\n                'fg_path': f'{self.DATA_ROOT}/fg/GT05.jpg',\n                'sample_idx': 1,\n            }\n            assert is_correct_ntpath or is_correct_posixpath\n\n            # TODO: after mmcv.transform becomes ready in CI\n            # assert 'alpha' in first_data\n            # assert isinstance(first_data['alpha'], np.ndarray)\n            # assert first_data['alpha'].shape == (552, 800)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_controlnet_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\n\nfrom mmagic.datasets import ControlNetDataset\n\ndata_dir = os.path.join(__file__, '../', '../', 'data', 'controlnet')\ndata_dir = os.path.abspath(data_dir)\nanno_path = os.path.join(data_dir, 'prompt.json')\nsource_path = os.path.join(data_dir, 'source')\ntarget_path = os.path.join(data_dir, 'target')\n\n\ndef test_controlnet_dataset():\n    print(os.path.abspath(data_dir))\n    dataset = ControlNetDataset(data_root=data_dir)\n    assert len(dataset) == 2\n    prompts = [\n        'pale golden rod circle with old lace background',\n        'light coral circle with white background'\n    ]\n    for idx, data in enumerate(dataset):\n        assert 'source_path' in data\n        assert 'target_path' in data\n        assert data['prompt'] == prompts[idx]\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_data_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.datasets.data_utils import infer_io_backend\n\n\ndef test_infer_io_backend():\n    path = 'http://openmmlab/xxx'\n    assert infer_io_backend(path) == 'http'\n\n    path = 'https://torchvision/xxx'\n    assert infer_io_backend(path) == 'http'\n\n    path = 'MYCLUSTER:s3://openmmlab/datasets/mmediting/lsun/'\n    assert infer_io_backend(path) == 'petrel'\n\n    path = 's3://work_dirs/'\n    assert infer_io_backend(path) == 'petrel'\n\n    path = 'this/is/a/test'\n    assert infer_io_backend(path) == 'local'\n\n\n# TODO: add more uts\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_dreambooth_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\n\nfrom mmagic.datasets import DreamBoothDataset\n\n# we use controlnet's dataset to test\ndata_dir = os.path.join(__file__, '../', '../', 'data', 'controlnet')\nconcept_dir = os.path.join(data_dir, 'source')\n\n\ndef test_dreambooth_dataset():\n    print(os.path.abspath(data_dir))\n    dataset = DreamBoothDataset(\n        data_root=data_dir,\n        concept_dir=concept_dir,\n        prompt='a sks ball',\n    )\n    assert len(dataset) == 2\n    for data in dataset:\n        assert data['prompt'] == 'a sks ball'\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_grow_scale_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nimport pytest\n\nfrom mmagic.datasets import GrowScaleImgDataset\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestGrowScaleImgDataset:\n\n    @classmethod\n    def setup_class(cls):\n        cls.imgs_root = osp.join(osp.dirname(__file__), '..', 'data/image')\n        cls.imgs_roots = {\n            '4': cls.imgs_root,\n            '8': osp.join(cls.imgs_root, 'img_root'),\n            '32': osp.join(cls.imgs_root, 'img_root', 'grass')\n        }\n        cls.default_pipeline = [dict(type='LoadImageFromFile', key='gt')]\n        cls.len_per_stage = 10\n        cls.gpu_samples_base = 2\n\n    def test_dynamic_unconditional_img_dataset(self):\n        dataset = GrowScaleImgDataset(\n            self.imgs_roots,\n            self.default_pipeline,\n            self.len_per_stage,\n            io_backend='local',\n            gpu_samples_base=self.gpu_samples_base)\n        assert len(dataset) == 10\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        assert repr(dataset) == (\n            f'dataset_name: {dataset.__class__}, '\n            f'total {10} images in imgs_root: {self.imgs_root}')\n        assert dataset.samples_per_gpu == 2\n\n        dataset.update_annotations(8)\n        assert len(dataset) == 10\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        assert repr(dataset) == (f'dataset_name: {dataset.__class__}, '\n                                 f'total {10} images in imgs_root:'\n                                 f' {osp.join(self.imgs_root, \"img_root\")}')\n        assert dataset.samples_per_gpu == 2\n\n        dataset = GrowScaleImgDataset(\n            self.imgs_roots,\n            self.default_pipeline,\n            20,\n            gpu_samples_base=self.gpu_samples_base,\n            gpu_samples_per_scale={\n                '4': 10,\n                '16': 13\n            })\n        assert len(dataset) == 20\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        assert repr(dataset) == (\n            f'dataset_name: {dataset.__class__}, '\n            f'total {20} images in imgs_root: {self.imgs_root}')\n        assert dataset.samples_per_gpu == 10\n\n        dataset.update_annotations(8)\n        assert len(dataset) == 20\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        assert repr(dataset) == (f'dataset_name: {dataset.__class__}, '\n                                 f'total {20} images in imgs_root:'\n                                 f' {osp.join(self.imgs_root, \"img_root\")}')\n        assert dataset.samples_per_gpu == 2\n\n        dataset = GrowScaleImgDataset(\n            self.imgs_roots, self.default_pipeline, 5, test_mode=True)\n        assert len(dataset) == 5\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        assert repr(dataset) == (\n            f'dataset_name: {dataset.__class__}, '\n            f'total {5} images in imgs_root: {self.imgs_root}')\n\n        dataset.update_annotations(24)\n        assert len(dataset) == 5\n        img = dataset[2]['gt']\n        assert img.ndim == 3\n        _path_str = osp.join(self.imgs_root, 'img_root', 'grass')\n        assert repr(dataset) == (f'dataset_name: {dataset.__class__}, '\n                                 f'total {5} images in imgs_root: {_path_str}')\n\n        with pytest.raises(AssertionError):\n            _ = GrowScaleImgDataset(\n                self.imgs_root,\n                self.default_pipeline,\n                10,\n                gpu_samples_per_scale=10)\n\n        with pytest.raises(AssertionError):\n            _ = GrowScaleImgDataset(10, self.default_pipeline, 10.)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_imagenet_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom unittest import TestCase\n\nfrom mmagic.datasets import ImageNet\n\nDATA_DIR = osp.abspath(osp.join(osp.dirname(__file__), '../data/dataset/'))\n\n\nclass TestImageNetDataset(TestCase):\n\n    def test_load_data_list(self):\n\n        with self.assertRaisesRegex(\n                AssertionError, r\"\\(3\\) doesn't match .* classes \\(1000\\)\"):\n            ImageNet(data_root=DATA_DIR, data_prefix=DATA_DIR)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_mscoco_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nfrom pathlib import Path\n\nfrom mmagic.datasets import MSCoCoDataset\n\n\nclass TestMSCoCoDatasets:\n\n    @classmethod\n    def setup_class(cls):\n        cls.data_root = Path(__file__).parent.parent / 'data' / 'coco'\n\n    def test_mscoco(self):\n\n        # test basic usage\n        dataset = MSCoCoDataset(data_root=self.data_root, pipeline=[])\n        assert dataset[0] == dict(\n            gt_prompt='a good meal',\n            img_path=os.path.join(self.data_root, 'train2014',\n                                  'COCO_train2014_000000000009.jpg'),\n            sample_idx=0)\n\n        # test with different phase\n        dataset = MSCoCoDataset(\n            data_root=self.data_root, phase='val', pipeline=[])\n        assert dataset[0] == dict(\n            gt_prompt='a pair of slippers',\n            img_path=os.path.join(self.data_root, 'val2014',\n                                  'COCO_val2014_000000000042.jpg'),\n            sample_idx=0)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_paired_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.datasets import PairedImageDataset\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestPairedImageDataset(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.imgs_root = osp.join(\n            osp.dirname(osp.dirname(__file__)), 'data/paired')\n        cls.default_pipeline = [\n            dict(\n                type='LoadPairedImageFromFile',\n                key='pair',\n                domain_a='a',\n                domain_b='b'),\n            dict(\n                type='TransformBroadcaster',\n                mapping={'img': ['img_a', 'img_b']},\n                auto_remap=True,\n                share_random_params=True,\n                transforms=[\n                    dict(\n                        type='Resize',\n                        scale=(286, 286),\n                        interpolation='bicubic'),\n                    dict(type='FixedCrop', keys=['img'], crop_size=(256, 256))\n                ]),\n            dict(type='Flip', direction='horizontal', keys=['img_a', 'img_b']),\n            dict(type='PackInputs', keys=['img_a', 'img_b'])\n        ]\n\n    def test_paired_image_dataset(self):\n        dataset = PairedImageDataset(\n            self.imgs_root, pipeline=self.default_pipeline)\n        assert len(dataset) == 2\n        img = dataset[0]['inputs']['img_a']\n        assert img.ndim == 3\n        img = dataset[0]['inputs']['img_b']\n        assert img.ndim == 3\n\n        dataset = PairedImageDataset(\n            self.imgs_root, pipeline=self.default_pipeline, io_backend='local')\n        assert len(dataset) == 2\n        img = dataset[0]['inputs']['img_a']\n        assert img.ndim == 3\n        img = dataset[0]['inputs']['img_b']\n        assert img.ndim == 3\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_singan_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.datasets import SinGANDataset\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestSinGANDataset(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.imgs_root = osp.join(\n            osp.dirname(osp.dirname(__file__)), 'data/image/gt/baboon.png')\n        cls.min_size = 25\n        cls.max_size = 250\n        cls.num_scales = 10\n        cls.scale_factor_init = 0.75\n        cls.pipeline = [\n            dict(\n                type='PackInputs',\n                keys=[f'real_scale{i}' for i in range(cls.num_scales)])\n        ]\n\n    def test_singan_dataset(self):\n        dataset = SinGANDataset(\n            self.imgs_root,\n            min_size=self.min_size,\n            max_size=self.max_size,\n            scale_factor_init=self.scale_factor_init,\n            pipeline=self.pipeline)\n        assert len(dataset) == 1000000\n\n        data_dict = dataset[0]['inputs']\n        assert all(\n            [f'real_scale{i}' in data_dict for i in range(self.num_scales)])\n\n\na = TestSinGANDataset()\na.setup_class()\na.test_singan_dataset()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_textual_inversion_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\n\nfrom mmagic.datasets import TextualInversionDataset\n\ndata_dir = os.path.join(__file__, '../', '../', 'data', 'controlnet')\nconcept_dir = os.path.join(data_dir, 'source')\nplaceholder = 'S*'\ntemplate = os.path.join(__file__, '../', '../', 'data', 'textual_inversion',\n                        'imagenet_templates_small.txt')\nwith_image_reference = True\n\n\ndef test_textual_inversion_dataset():\n    print(os.path.abspath(data_dir))\n    dataset = TextualInversionDataset(\n        data_root=data_dir,\n        concept_dir=concept_dir,\n        placeholder=placeholder,\n        template=template,\n        with_image_reference=with_image_reference)\n    assert len(dataset) == 2\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_albumentations.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\n\nfrom mmagic.datasets.transforms import Albumentations\n\n\ndef test_albumentations():\n    results = {}\n    results['img'] = np.ones((8, 8, 3)).astype(np.uint8)\n    model = Albumentations(\n        keys=['img'], transforms=[\n            dict(type='Resize', height=4, width=4),\n        ])\n    results = model(results)\n    assert results['img'].shape == (4, 4, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_alpha.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import GenerateSeg, GenerateSoftSeg\n\n\ndef assert_keys_contain(result_keys, target_keys):\n    \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n    assert set(target_keys).issubset(set(result_keys))\n\n\ndef test_generate_seg():\n    with pytest.raises(ValueError):\n        # crop area should not exceed the image size\n        img = np.random.rand(32, 32, 3)\n        GenerateSeg._crop_hole(img, (0, 0), (64, 64))\n\n    target_keys = ['alpha', 'trimap', 'seg', 'num_holes']\n    alpha = np.random.randint(0, 255, (64, 64))\n    # previously this is 32 by 32, but default hole size contains 45\n    trimap = np.zeros_like(alpha)\n    trimap[(alpha > 0) & (alpha < 255)] = 128\n    trimap[alpha == 255] = 255\n    results = dict(alpha=alpha, trimap=trimap)\n    for _ in range(3):\n        # test multiple times as it contain some random operations\n        generate_seg = GenerateSeg(num_holes_range=(1, 3))\n        generate_seg_results = generate_seg(results)\n        assert_keys_contain(generate_seg_results.keys(), target_keys)\n        assert generate_seg_results['seg'].shape == alpha.shape\n        assert isinstance(generate_seg_results['num_holes'], int)\n        assert generate_seg_results['num_holes'] < 3\n\n    # check repr string and the default setting\n    assert repr(generate_seg) == generate_seg.__class__.__name__ + (\n        '(kernel_size=5, erode_iter_range=(10, 20), '\n        'dilate_iter_range=(15, 30), num_holes_range=(1, 3), '\n        'hole_sizes=[(15, 15), (25, 25), (35, 35), (45, 45)], '\n        'blur_ksizes=[(21, 21), (31, 31), (41, 41)]')\n\n\ndef test_generate_soft_seg():\n    with pytest.raises(TypeError):\n        # fg_thr must be a float\n        GenerateSoftSeg(fg_thr=[0.2])\n    with pytest.raises(TypeError):\n        # border_width must be an int\n        GenerateSoftSeg(border_width=25.)\n    with pytest.raises(TypeError):\n        # erode_ksize must be an int\n        GenerateSoftSeg(erode_ksize=5.)\n    with pytest.raises(TypeError):\n        # dilate_ksize must be an int\n        GenerateSoftSeg(dilate_ksize=5.)\n    with pytest.raises(TypeError):\n        # erode_iter_range must be a tuple of 2 int\n        GenerateSoftSeg(erode_iter_range=(3, 5, 7))\n    with pytest.raises(TypeError):\n        # dilate_iter_range must be a tuple of 2 int\n        GenerateSoftSeg(dilate_iter_range=(3, 5, 7))\n    with pytest.raises(TypeError):\n        # blur_ksizes must be a list of tuple\n        GenerateSoftSeg(blur_ksizes=[21, 21])\n\n    target_keys = ['seg', 'soft_seg']\n\n    seg = np.random.randint(0, 255, (512, 512))\n    results = dict(seg=seg)\n\n    generate_soft_seg = GenerateSoftSeg(\n        erode_ksize=3,\n        dilate_ksize=3,\n        erode_iter_range=(1, 2),\n        dilate_iter_range=(1, 2),\n        blur_ksizes=[(11, 11)])\n    generate_soft_seg_results = generate_soft_seg(results)\n    assert_keys_contain(generate_soft_seg_results.keys(), target_keys)\n    assert generate_soft_seg_results['soft_seg'].shape == seg.shape\n\n    repr_str = generate_soft_seg.__class__.__name__ + (\n        '(fg_thr=0.2, border_width=25, erode_ksize=3, dilate_ksize=3, '\n        'erode_iter_range=(1, 2), dilate_iter_range=(1, 2), '\n        'blur_ksizes=[(11, 11)])')\n    assert repr(generate_soft_seg) == repr_str\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_aug_frames.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import MirrorSequence, TemporalReverse\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n\n        cls.results = dict()\n        cls.gt = np.random.randint(0, 256, (256, 128, 3), dtype=np.uint8)\n        cls.img = np.random.randint(0, 256, (64, 32, 3), dtype=np.uint8)\n\n        cls.results = dict(\n            img=cls.img,\n            gt=cls.gt,\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n\n        cls.results['ori_img'] = np.random.randint(\n            0, 256, (256, 256, 3), dtype=np.uint8)\n        cls.results['mask'] = np.random.randint(\n            0, 256, (256, 256, 1), dtype=np.uint8)\n        # cls.results['img_tensor'] = torch.rand((3, 256, 256))\n        # cls.results['mask_tensor'] = torch.zeros((1, 256, 256))\n        # cls.results['mask_tensor'][:, 50:150, 40:140] = 1.\n\n    @staticmethod\n    def assert_img_equal(img, ref_img, ratio_thr=0.999):\n        \"\"\"Check if img and ref_img are matched approximately.\"\"\"\n\n        assert img.shape == ref_img.shape\n        assert img.dtype == ref_img.dtype\n        area = ref_img.shape[-1] * ref_img.shape[-2]\n        diff = np.abs(img.astype('int32') - ref_img.astype('int32'))\n        assert np.sum(diff <= 1) / float(area) > ratio_thr\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n\n        return set(target_keys).issubset(set(result_keys))\n\n    def test_mirror_sequence(self):\n        imgs = [np.random.rand(4, 4, 3) for _ in range(0, 5)]\n        gts = [np.random.rand(16, 16, 3) for _ in range(0, 5)]\n\n        target_keys = ['img', 'gt']\n        mirror_sequence = MirrorSequence(keys=['img', 'gt'])\n        results = dict(img=imgs, gt=gts)\n        results = mirror_sequence(results)\n\n        assert self.check_keys_contain(results.keys(), target_keys)\n        for i in range(0, 5):\n            np.testing.assert_almost_equal(results['img'][i],\n                                           results['img'][-i - 1])\n            np.testing.assert_almost_equal(results['gt'][i],\n                                           results['gt'][-i - 1])\n\n        assert repr(mirror_sequence) == mirror_sequence.__class__.__name__ + (\n            \"(keys=['img', 'gt'])\")\n\n        # each key should contain a list of nparray\n        with pytest.raises(TypeError):\n            results = dict(img=0, gt=gts)\n            mirror_sequence(results)\n\n    def test_temporal_reverse(self):\n        img_lq1 = np.random.rand(4, 4, 3).astype(np.float32)\n        img_lq2 = np.random.rand(4, 4, 3).astype(np.float32)\n        img_gt = np.random.rand(8, 8, 3).astype(np.float32)\n        results = dict(lq=[img_lq1, img_lq2], gt=[img_gt])\n\n        target_keys = ['lq', 'gt', 'reverse']\n        temporal_reverse = TemporalReverse(keys=['lq', 'gt'], reverse_ratio=1)\n        results = temporal_reverse(results)\n        assert self.check_keys_contain(results.keys(), target_keys)\n        np.testing.assert_almost_equal(results['lq'][0], img_lq2)\n        np.testing.assert_almost_equal(results['lq'][1], img_lq1)\n        np.testing.assert_almost_equal(results['gt'][0], img_gt)\n\n        assert repr(\n            temporal_reverse) == temporal_reverse.__class__.__name__ + (\n                f\"(keys={['lq', 'gt']}, reverse_ratio=1)\")\n\n        results = dict(lq=[img_lq1, img_lq2], gt=[img_gt])\n        temporal_reverse = TemporalReverse(keys=['lq', 'gt'], reverse_ratio=0)\n        results = temporal_reverse(results)\n        assert self.check_keys_contain(results.keys(), target_keys)\n        np.testing.assert_almost_equal(results['lq'][0], img_lq1)\n        np.testing.assert_almost_equal(results['lq'][1], img_lq2)\n        np.testing.assert_almost_equal(results['gt'][0], img_gt)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_aug_pixel.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\n\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (BinarizeImage, Clip, ColorJitter,\n                                        RandomAffine, RandomMaskDilation,\n                                        UnsharpMasking)\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n\n        cls.results = dict()\n        cls.gt = np.random.randint(0, 256, (256, 128, 3), dtype=np.uint8)\n        cls.img = np.random.randint(0, 256, (64, 32, 3), dtype=np.uint8)\n\n        cls.results = dict(\n            img=cls.img,\n            gt=cls.gt,\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n\n        cls.results['ori_img'] = np.random.randint(\n            0, 256, (256, 256, 3), dtype=np.uint8)\n        cls.results['mask'] = np.random.randint(\n            0, 256, (256, 256, 1), dtype=np.uint8)\n        # cls.results['img_tensor'] = torch.rand((3, 256, 256))\n        # cls.results['mask_tensor'] = torch.zeros((1, 256, 256))\n        # cls.results['mask_tensor'][:, 50:150, 40:140] = 1.\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n\n        return set(target_keys).issubset(set(result_keys))\n\n    def test_binarize(self):\n\n        mask_ = np.zeros((5, 5, 1))\n        mask_[2, 2, :] = 0.6\n        gt_mask = mask_.copy()\n        gt_mask[2, 2, :] = 1.\n        results = dict(mask=mask_.copy())\n        binarize = BinarizeImage(['mask'], 0.5, dtype=np.float32)\n        results = binarize(results)\n        assert np.array_equal(results['mask'], gt_mask.astype(np.float32))\n\n        results = dict(mask=mask_.copy())\n        binarize = BinarizeImage(['mask'], 0.5)\n        results = binarize(results)\n        assert np.array_equal(results['mask'], gt_mask.astype(np.uint8))\n        assert repr(binarize) == (\n            binarize.__class__.__name__ + f\"(keys={['mask']}, binary_thr=0.5, \"\n            f'a_min=0, a_max=1, dtype={np.uint8})')\n\n        results = dict(mask=mask_.copy())\n        binarize = BinarizeImage(['mask'], 0.5, a_max=3, a_min=1)\n        results = binarize(results)\n        assert np.array_equal(results['mask'],\n                              gt_mask.astype(np.uint8) * 2 + 1)\n        assert repr(binarize) == (\n            binarize.__class__.__name__ + f\"(keys={['mask']}, binary_thr=0.5, \"\n            f'a_min=1, a_max=3, dtype={np.uint8})')\n\n    def test_clip(self):\n        results = {}\n\n        # clip\n        results['gt'] = (1.2 - 0.1) * self.results['gt']\n        model = Clip(keys=['gt'])\n        assert np.array_equal(model(results)['gt'], results['gt'].clip(0, 255))\n\n    def test_color_jitter(self):\n\n        results = copy.deepcopy(self.results)\n        results['gt'] = (results['gt'] * 255).astype(np.uint8)\n        results['img'] = [results['gt'], results['gt']]\n\n        target_keys = ['gt', 'img']\n\n        color_jitter = ColorJitter(\n            keys=['gt', 'img'],\n            brightness=0.5,\n            contrast=0.5,\n            saturation=0.5,\n            hue=0.5)\n        color_jitter_results = color_jitter(results)\n\n        assert self.check_keys_contain(color_jitter_results.keys(),\n                                       target_keys)\n        assert color_jitter_results['gt'].shape == self.gt.shape\n        color_jitter = ColorJitter(\n            keys=['gt', 'img'],\n            channel_order='bgr',\n            brightness=0.5,\n            contrast=0.5,\n            saturation=0.5,\n            hue=0.5)\n        color_jitter_results = color_jitter(results)\n        assert self.check_keys_contain(color_jitter_results.keys(),\n                                       target_keys)\n        assert color_jitter_results['gt'].shape == self.gt.shape\n        assert np.abs(color_jitter_results['gt'] - self.gt.shape).mean() > 0\n\n        assert repr(color_jitter) == color_jitter.__class__.__name__ + (\n            f'(keys={color_jitter.keys}, '\n            f'channel_order={color_jitter.channel_order}, '\n            f'brightness={color_jitter._transform.brightness}, '\n            f'contrast={color_jitter._transform.contrast}, '\n            f'saturation={color_jitter._transform.saturation}, '\n            f'hue={color_jitter._transform.hue})')\n\n        with pytest.raises(AssertionError):\n            color_jitter = ColorJitter(\n                keys=['gt', 'img'],\n                channel_order='bgr',\n                to_rgb=True,\n                brightness=0.5,\n                contrast=0.5,\n                saturation=0.5,\n                hue=0.5)\n\n    def test_random_affine(self):\n        with pytest.raises(AssertionError):\n            RandomAffine(None, -1)\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, translate='Not a tuple')\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, translate=(0, 0, 0))\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, translate=(0, 2))\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, scale='Not a tuple')\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, scale=(0.8, 1., 1.2))\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, scale=(-0.8, 1.))\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, shear=-1)\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, shear=(0, 1, 2))\n\n        with pytest.raises(AssertionError):\n            RandomAffine(None, 0, flip_ratio='Not a float')\n\n        target_keys = ['fg', 'alpha']\n\n        # Test identical transformation\n        alpha = np.random.rand(4, 4).astype(np.float32)\n        fg = np.random.rand(4, 4).astype(np.float32)\n        results = dict(alpha=alpha, fg=fg)\n        random_affine = RandomAffine(['fg', 'alpha'],\n                                     degrees=0,\n                                     flip_ratio=0.0)\n        random_affine_results = random_affine(results)\n        assert np.allclose(alpha, random_affine_results['alpha'])\n        assert np.allclose(fg, random_affine_results['fg'])\n\n        # Test flip in both direction\n        fg = np.random.rand(4, 4).astype(np.float32)\n        alpha = np.random.rand(4, 4).astype(np.float32)\n        results = dict(alpha=alpha, fg=fg)\n        random_affine = RandomAffine(['fg', 'alpha'],\n                                     degrees=0,\n                                     flip_ratio=1.0)\n        random_affine_results = random_affine(results)\n        assert np.allclose(alpha[::-1, ::-1], random_affine_results['alpha'])\n        assert np.allclose(fg[::-1, ::-1], random_affine_results['fg'])\n\n        # test random affine with different valid setting combinations\n        # only shape are tested\n        alpha = np.random.rand(240, 320, 1).astype(np.float32)\n        fg = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(alpha=alpha, fg=fg)\n        random_affine = RandomAffine(['fg', 'alpha'],\n                                     degrees=30,\n                                     translate=(0, 1),\n                                     shear=(10, 20),\n                                     flip_ratio=0.5)\n        random_affine_results = random_affine(results)\n        assert self.check_keys_contain(random_affine_results.keys(),\n                                       target_keys)\n        assert random_affine_results['fg'].shape == (240, 320, 3)\n        assert random_affine_results['alpha'].shape == (240, 320, 1)\n\n        alpha = np.random.rand(240, 320, 1).astype(np.float32)\n        fg = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(alpha=alpha, fg=fg)\n        random_affine = RandomAffine(['fg', 'alpha'],\n                                     degrees=(-30, 30),\n                                     scale=(0.8, 1.25),\n                                     shear=10,\n                                     flip_ratio=0.5)\n        random_affine_results = random_affine(results)\n        assert self.check_keys_contain(random_affine_results.keys(),\n                                       target_keys)\n        assert random_affine_results['fg'].shape == (240, 320, 3)\n        assert random_affine_results['alpha'].shape == (240, 320, 1)\n\n        alpha = np.random.rand(240, 320, 1).astype(np.float32)\n        fg = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(alpha=alpha, fg=fg)\n        random_affine = RandomAffine(['fg', 'alpha'], degrees=30)\n        random_affine_results = random_affine(results)\n        assert self.check_keys_contain(random_affine_results.keys(),\n                                       target_keys)\n        assert random_affine_results['fg'].shape == (240, 320, 3)\n        assert random_affine_results['alpha'].shape == (240, 320, 1)\n\n        assert repr(random_affine) == random_affine.__class__.__name__ + (\n            f'(keys={target_keys}, degrees={(-30, 30)}, '\n            f'translate={None}, scale={None}, '\n            f'shear={None}, flip_ratio={0})')\n\n    def test_random_dilation(self):\n        mask = np.zeros((3, 3, 1), dtype=np.float32)\n        mask[1, 1] = 1\n        gt_mask = np.ones_like(mask)\n        results = dict(mask=mask.copy())\n        dilation = RandomMaskDilation(['mask'],\n                                      binary_thr=0.5,\n                                      kernel_min=3,\n                                      kernel_max=3)\n        results = dilation(results)\n        assert np.array_equal(results['mask'], gt_mask)\n        assert results['mask_dilate_kernel_size'] == 3\n        assert str(dilation) == (\n            dilation.__class__.__name__ +\n            f\"(keys={['mask']}, kernel_min=3, kernel_max=3)\")\n\n    def test_unsharp_masking(self):\n        results = {}\n\n        unsharp_masking = UnsharpMasking(\n            kernel_size=15, sigma=0, weight=0.5, threshold=10, keys=['gt'])\n\n        # single image\n        results['gt'] = np.zeros((8, 8, 3)).astype(np.float32)\n        results = unsharp_masking(results)\n        assert isinstance(results['gt_unsharp'], np.ndarray)\n\n        # sequence of images\n        results['gt'] = [np.zeros((8, 8, 3)).astype(np.float32)] * 2\n        results = unsharp_masking(results)\n        assert isinstance(results['gt_unsharp'], list)\n\n        assert repr(unsharp_masking) == unsharp_masking.__class__.__name__ + (\n            \"(keys=['gt'], kernel_size=15, sigma=0, weight=0.5, threshold=10)\")\n\n        # kernel_size must be odd\n        with pytest.raises(ValueError):\n            unsharp_masking = UnsharpMasking(\n                kernel_size=10, sigma=0, weight=0.5, threshold=10, keys=['gt'])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_aug_shape.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\n\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (CenterCropLongEdge, Flip, NumpyPad,\n                                        RandomCropLongEdge, RandomRotation,\n                                        RandomTransposeHW, Resize)\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n\n        cls.results = dict()\n        cls.gt = np.random.randint(0, 256, (256, 128, 3), dtype=np.uint8)\n        cls.img = np.random.randint(0, 256, (64, 32, 3), dtype=np.uint8)\n\n        cls.results = dict(\n            img=cls.img,\n            gt=cls.gt,\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n\n        cls.results['ori_img'] = np.random.randint(\n            0, 256, (256, 256, 3), dtype=np.uint8)\n        cls.results['mask'] = np.random.randint(\n            0, 256, (256, 256, 1), dtype=np.uint8)\n        # cls.results['img_tensor'] = torch.rand((3, 256, 256))\n        # cls.results['mask_tensor'] = torch.zeros((1, 256, 256))\n        # cls.results['mask_tensor'][:, 50:150, 40:140] = 1.\n\n    @staticmethod\n    def check_flip(origin_img, result_img, flip_direction):\n        \"\"\"Check if the origin_img are flipped correctly into result_img in\n        different flip_directions.\n\n        Args:\n            origin_img (np.ndarray): Original image.\n            result_img (np.ndarray): Result image.\n            flip_direction (str): Direction of flip.\n\n        Returns:\n            bool: Whether origin_img == result_img.\n        \"\"\"\n\n        if flip_direction == 'horizontal':\n            diff = result_img[:, ::-1] - origin_img\n        else:\n            diff = result_img[::-1, :] - origin_img\n\n        return diff.max() < 1e-8\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n\n        return set(target_keys).issubset(set(result_keys))\n\n    @staticmethod\n    def check_transposehw(origin_img, result_img):\n        \"\"\"Check if the origin_imgs are transposed correctly.\"\"\"\n\n        h, w, c = origin_img.shape\n        for i in range(c):\n            for j in range(h):\n                for k in range(w):\n                    if result_img[k, j, i] != origin_img[j, k, i]:  # noqa:E501\n                        return False\n        return True\n\n    def test_flip(self):\n        results = copy.deepcopy(self.results)\n\n        trans = Flip(keys='img', flip_ratio=0)\n        assert trans.keys == ['img']\n\n        with pytest.raises(ValueError):\n            Flip(keys=['img', 'gt'], direction='vertically')\n\n        # horizontal\n        np.random.seed(1)\n        target_keys = ['img', 'gt', 'flip_infos']\n        flip = Flip(keys=['img', 'gt'], flip_ratio=1, direction='horizontal')\n        assert 'flip_infos' not in results\n        results = flip(results)\n        assert results['flip_infos'] == [\n            dict(\n                keys=['img', 'gt'], direction='horizontal', ratio=1, flip=True)\n        ]\n        assert self.check_keys_contain(results.keys(), target_keys)\n        assert results['img'].shape == self.img.shape\n        assert results['gt'].shape == self.gt.shape\n        assert self.check_flip(self.img, results['img'],\n                               results['flip_infos'][-1]['direction'])\n        assert self.check_flip(self.gt, results['gt'],\n                               results['flip_infos'][-1]['direction'])\n        results = flip(results)\n        assert results['flip_infos'] == [\n            dict(\n                keys=['img', 'gt'], direction='horizontal', ratio=1,\n                flip=True),\n            dict(\n                keys=['img', 'gt'], direction='horizontal', ratio=1,\n                flip=True),\n        ]\n\n        # vertical\n        results = copy.deepcopy(self.results)\n        flip = Flip(keys=['img', 'gt'], flip_ratio=1, direction='vertical')\n        results = flip(results)\n        assert self.check_keys_contain(results.keys(), target_keys)\n        assert results['img'].shape == self.img.shape\n        assert results['gt'].shape == self.gt.shape\n        assert self.check_flip(self.img, results['img'],\n                               results['flip_infos'][-1]['direction'])\n        assert self.check_flip(self.gt, results['gt'],\n                               results['flip_infos'][-1]['direction'])\n        assert repr(flip) == flip.__class__.__name__ + (\n            f\"(keys={['img', 'gt']}, flip_ratio=1, \"\n            f\"direction={results['flip_infos'][-1]['direction']})\")\n\n        # flip a list\n        # horizontal\n        flip = Flip(keys=['img', 'gt'], flip_ratio=1, direction='horizontal')\n        results = dict(\n            img=[self.img, np.copy(self.img)],\n            gt=[self.gt, np.copy(self.gt)],\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n        flip_rlt = flip(copy.deepcopy(results))\n        assert self.check_keys_contain(flip_rlt.keys(), target_keys)\n        assert self.check_flip(self.img, flip_rlt['img'][0],\n                               flip_rlt['flip_infos'][-1]['direction'])\n        assert self.check_flip(self.gt, flip_rlt['gt'][0],\n                               flip_rlt['flip_infos'][-1]['direction'])\n        np.testing.assert_almost_equal(flip_rlt['gt'][0], flip_rlt['gt'][1])\n        np.testing.assert_almost_equal(flip_rlt['img'][0], flip_rlt['img'][1])\n\n        # vertical\n        flip = Flip(keys=['img', 'gt'], flip_ratio=1, direction='vertical')\n        flip_rlt = flip(copy.deepcopy(results))\n        assert self.check_keys_contain(flip_rlt.keys(), target_keys)\n        assert self.check_flip(self.img, flip_rlt['img'][0],\n                               flip_rlt['flip_infos'][-1]['direction'])\n        assert self.check_flip(self.gt, flip_rlt['gt'][0],\n                               flip_rlt['flip_infos'][-1]['direction'])\n        np.testing.assert_almost_equal(flip_rlt['gt'][0], flip_rlt['gt'][1])\n        np.testing.assert_almost_equal(flip_rlt['img'][0], flip_rlt['img'][1])\n\n        # no flip\n        flip = Flip(keys=['img', 'gt'], flip_ratio=0, direction='vertical')\n        results = flip(copy.deepcopy(results))\n        assert self.check_keys_contain(results.keys(), target_keys)\n        np.testing.assert_almost_equal(results['gt'][0], self.gt)\n        np.testing.assert_almost_equal(results['img'][0], self.img)\n        np.testing.assert_almost_equal(results['gt'][0], results['gt'][1])\n        np.testing.assert_almost_equal(results['img'][0], results['img'][1])\n\n    def test_random_rotation(self):\n        with pytest.raises(ValueError):\n            RandomRotation(None, degrees=-10.0)\n        with pytest.raises(TypeError):\n            RandomRotation(None, degrees=('0.0', '45.0'))\n\n        target_keys = ['degrees']\n        results = copy.deepcopy(self.results)\n\n        random_rotation = RandomRotation(['ori_img'], degrees=(0, 45))\n        random_rotation_results = random_rotation(results)\n        assert self.check_keys_contain(random_rotation_results.keys(),\n                                       target_keys)\n        assert random_rotation_results['ori_img'].shape == (256, 256, 3)\n        assert random_rotation_results['degrees'] == (0, 45)\n        assert repr(random_rotation) == random_rotation.__class__.__name__ + (\n            \"(keys=['ori_img'], degrees=(0, 45))\")\n\n        # test single degree integer\n        random_rotation = RandomRotation(['ori_img'], degrees=45)\n        random_rotation_results = random_rotation(results)\n        assert self.check_keys_contain(random_rotation_results.keys(),\n                                       target_keys)\n        assert random_rotation_results['ori_img'].shape == (256, 256, 3)\n        assert random_rotation_results['degrees'] == (-45, 45)\n\n        # test image dim == 2\n        grey_scale_ori_img = np.random.rand(256, 256).astype(np.float32)\n        results = dict(ori_img=grey_scale_ori_img.copy())\n        random_rotation = RandomRotation(['ori_img'], degrees=(0, 45))\n        random_rotation_results = random_rotation(results)\n        assert self.check_keys_contain(random_rotation_results.keys(),\n                                       target_keys)\n        assert random_rotation_results['ori_img'].shape == (256, 256, 1)\n\n    def test_random_transposehw(self):\n\n        trans = RandomTransposeHW(keys='img', transpose_ratio=1)\n        assert trans.keys == ['img']\n\n        results = self.results.copy()\n        target_keys = ['img', 'gt', 'transpose']\n        transposehw = RandomTransposeHW(keys=['img', 'gt'], transpose_ratio=1)\n        results = transposehw(results)\n        assert self.check_keys_contain(results.keys(), target_keys)\n        assert self.check_transposehw(self.img, results['img'])\n        assert self.check_transposehw(self.gt, results['gt'])\n        assert results['img'].shape == (32, 64, 3)\n        assert results['gt'].shape == (128, 256, 3)\n\n        assert repr(transposehw) == transposehw.__class__.__name__ + (\n            f\"(keys={['img', 'gt']}, transpose_ratio=1)\")\n\n        # for image list\n        ori_results = dict(\n            img=[self.img, np.copy(self.img)],\n            gt=[self.gt, np.copy(self.gt)],\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n        target_keys = ['img', 'gt', 'transpose']\n        transposehw = RandomTransposeHW(keys=['img', 'gt'], transpose_ratio=1)\n        results = transposehw(ori_results.copy())\n        assert self.check_keys_contain(results.keys(), target_keys)\n        assert self.check_transposehw(self.img, results['img'][0])\n        assert self.check_transposehw(self.gt, results['gt'][1])\n        np.testing.assert_almost_equal(results['gt'][0], results['gt'][1])\n        np.testing.assert_almost_equal(results['img'][0], results['img'][1])\n\n        # no transpose\n        target_keys = ['img', 'gt', 'transpose']\n        transposehw = RandomTransposeHW(keys=['img', 'gt'], transpose_ratio=0)\n        results = transposehw(ori_results.copy())\n        assert self.check_keys_contain(results.keys(), target_keys)\n        np.testing.assert_almost_equal(results['gt'][0], self.gt)\n        np.testing.assert_almost_equal(results['img'][0], self.img)\n        np.testing.assert_almost_equal(results['gt'][0], results['gt'][1])\n        np.testing.assert_almost_equal(results['img'][0], results['img'][1])\n\n    def test_resize(self):\n        with pytest.raises(AssertionError):\n            Resize([], scale=0.5)\n        with pytest.raises(AssertionError):\n            Resize(['gt_img'], size_factor=32, scale=0.5)\n        with pytest.raises(AssertionError):\n            Resize(['gt_img'], size_factor=32, keep_ratio=True)\n        with pytest.raises(AssertionError):\n            Resize(['gt_img'], max_size=32, size_factor=None)\n        with pytest.raises(ValueError):\n            Resize(['gt_img'], scale=-0.5)\n        with pytest.raises(TypeError):\n            Resize(['gt_img'], (0.4, 0.2))\n        with pytest.raises(TypeError):\n            Resize(['gt_img'], dict(test=None))\n\n        target_keys = ['alpha']\n\n        alpha = np.random.rand(240, 320).astype(np.float32)\n        results = dict(alpha=alpha)\n        resize = Resize(keys=['alpha'], size_factor=32, max_size=None)\n        resize_results = resize(results)\n        assert self.check_keys_contain(resize_results.keys(), target_keys)\n        assert resize_results['alpha'].shape == (224, 320, 1)\n        resize = Resize(keys=['alpha'], size_factor=32, max_size=320)\n        resize_results = resize(results)\n        assert self.check_keys_contain(resize_results.keys(), target_keys)\n        assert resize_results['alpha'].shape == (224, 320, 1)\n\n        resize = Resize(keys=['alpha'], size_factor=32, max_size=200)\n        resize_results = resize(results)\n        assert self.check_keys_contain(resize_results.keys(), target_keys)\n        assert resize_results['alpha'].shape == (192, 192, 1)\n\n        resize = Resize(['gt_img'], (-1, 200))\n        assert resize.scale == (np.inf, 200)\n\n        results = dict(gt_img=self.results['ori_img'].copy())\n        resize_keep_ratio = Resize(['gt_img'], scale=0.5, keep_ratio=True)\n        results = resize_keep_ratio(results)\n        assert results['gt_img'].shape[:2] == (128, 128)\n        assert results['scale_factor'] == 0.5\n\n        results = dict(gt_img=self.results['ori_img'].copy())\n        resize_keep_ratio = Resize(['gt_img'],\n                                   scale=(128, 128),\n                                   keep_ratio=False)\n        results = resize_keep_ratio(results)\n        assert results['gt_img'].shape[:2] == (128, 128)\n\n        # test input with shape (256, 256)\n        results = dict(\n            gt_img=self.results['ori_img'][..., 0].copy(), alpha=alpha)\n        resize = Resize(['gt_img', 'alpha'],\n                        scale=(128, 128),\n                        keep_ratio=False,\n                        output_keys=['img', 'beta'])\n        results = resize(results)\n        assert results['gt_img'].shape == (256, 256)\n        assert results['img'].shape == (128, 128, 1)\n        assert results['alpha'].shape == (240, 320)\n        assert results['beta'].shape == (128, 128, 1)\n\n        name_ = str(resize_keep_ratio)\n        assert name_ == resize_keep_ratio.__class__.__name__ + (\n            \"(keys=['gt_img'], output_keys=['gt_img'], \"\n            'scale=(128, 128), '\n            f'keep_ratio={False}, size_factor=None, '\n            'max_size=None, interpolation=bilinear)')\n\n        # test input with shape (256, 256) + out keys and metainfo copy\n        results = dict(\n            gt_img=self.results['ori_img'][..., 0].copy(),\n            alpha=alpha,\n            ori_alpha_shape=[3, 3],\n            gt_img_channel_order='rgb',\n            alpha_color_type='grayscale')\n        resize = Resize(['gt_img', 'alpha'],\n                        scale=(128, 128),\n                        keep_ratio=False,\n                        output_keys=['img', 'beta'])\n        results = resize(results)\n        assert results['gt_img'].shape == (256, 256)\n        assert results['img'].shape == (128, 128, 1)\n        assert results['alpha'].shape == (240, 320)\n        assert results['beta'].shape == (128, 128, 1)\n        assert results['ori_beta_shape'] == [3, 3]\n        assert results['img_channel_order'] == 'rgb'\n        assert results['beta_color_type'] == 'grayscale'\n\n        name_ = str(resize_keep_ratio)\n        assert name_ == resize_keep_ratio.__class__.__name__ + (\n            \"(keys=['gt_img'], output_keys=['gt_img'], \"\n            'scale=(128, 128), '\n            f'keep_ratio={False}, size_factor=None, '\n            'max_size=None, interpolation=bilinear)')\n\n\ndef test_random_long_edge_crop():\n    results = dict(img=np.random.rand(256, 128, 3).astype(np.float32))\n    crop = RandomCropLongEdge(['img'])\n    results = crop(results)\n    assert results['img'].shape == (128, 128, 3)\n\n    repr_str = crop.__class__.__name__\n    repr_str += (f'(keys={crop.keys})')\n\n    assert str(crop) == repr_str\n\n\ndef test_center_long_edge_crop():\n    results = dict(img=np.random.rand(256, 128, 3).astype(np.float32))\n    crop = CenterCropLongEdge(['img'])\n    results = crop(results)\n    assert results['img'].shape == (128, 128, 3)\n\n\ndef test_numpy_pad():\n    results = dict(img=np.zeros((5, 5, 1)))\n\n    pad = NumpyPad(['img'], ((2, 2), (0, 0), (0, 0)))\n    results = pad(results)\n    assert results['img'].shape == (9, 5, 1)\n\n    repr_str = pad.__class__.__name__\n    repr_str += (\n        f'(keys={pad.keys}, padding={pad.padding}, kwargs={pad.kwargs})')\n\n    assert str(pad) == repr_str\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_blur_kernels.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.datasets.transforms import blur_kernels\n\n\ndef test_blur_kernels():\n    kernels = [\n        'iso', 'aniso', 'generalized_iso', 'generalized_aniso', 'plateau_iso',\n        'plateau_aniso', 'sinc'\n    ]\n    for kernel_type in kernels:\n        kernel = blur_kernels.random_mixed_kernels([kernel_type], [1], 5)\n        assert kernel.shape == (5, 5)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_crop.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport os.path as osp\nimport unittest\n\nimport cv2\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.datasets.transforms import (Crop, CropLike, FixedCrop,\n                                        InstanceCrop, ModCrop,\n                                        PairedRandomCrop, RandomResizedCrop)\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n        cls.results = dict()\n        cls.img_gt = np.random.rand(256, 128, 3).astype(np.float32)\n        cls.img_lq = np.random.rand(64, 32, 3).astype(np.float32)\n\n        cls.results = dict(\n            img=cls.img_lq,\n            gt=cls.img_gt,\n            scale=4,\n            lq_path='fake_lq_path',\n            gt_path='fake_gt_path')\n\n        cls.results['img'] = np.random.rand(256, 256, 3).astype(np.float32)\n\n        cls.results['img_a'] = np.random.rand(286, 286, 3).astype(np.float32)\n        cls.results['img_b'] = np.random.rand(286, 286, 3).astype(np.float32)\n\n    def test_crop(self):\n        with pytest.raises(TypeError):\n            Crop(['img'], (0.23, 0.1))\n\n        # test center crop\n        results = copy.deepcopy(self.results)\n        center_crop = Crop(['img'], crop_size=(128, 128), random_crop=False)\n        results = center_crop(results)\n        assert results['img_crop_bbox'] == [64, 64, 128, 128]\n        assert np.array_equal(self.results['img'][64:192, 64:192, :],\n                              results['img'])\n\n        # test random crop\n        results = copy.deepcopy(self.results)\n        random_crop = Crop(['img'], crop_size=(128, 128), random_crop=True)\n        results = random_crop(results)\n        assert 0 <= results['img_crop_bbox'][0] <= 128\n        assert 0 <= results['img_crop_bbox'][1] <= 128\n        assert results['img_crop_bbox'][2] == 128\n        assert results['img_crop_bbox'][3] == 128\n\n        # test random crop for larger size than the original shape\n        results = copy.deepcopy(self.results)\n        random_crop = Crop(['img'], crop_size=(512, 512), random_crop=True)\n        results = random_crop(results)\n        assert np.array_equal(self.results['img'], results['img'])\n        assert str(random_crop) == (\n            random_crop.__class__.__name__ +\n            \"keys=['img'], crop_size=(512, 512), random_crop=True\")\n\n        # test center crop for size larger than original shape\n        results = copy.deepcopy(self.results)\n        center_crop = Crop(['img'],\n                           crop_size=(512, 512),\n                           random_crop=False,\n                           is_pad_zeros=True)\n        gt_pad = np.pad(\n            copy.deepcopy(self.results)['img'],\n            ((128, 128), (128, 128), (0, 0)),\n            mode='constant',\n            constant_values=0)\n        results = center_crop(results)\n        assert results['img_crop_bbox'] == [128, 128, 512, 512]\n        assert np.array_equal(gt_pad, results['img'])\n\n    def test_random_resized_crop(self):\n        with pytest.raises(TypeError):\n            RandomResizedCrop(['img'], crop_size=(0.23, 0.1))\n        with pytest.raises(TypeError):\n            RandomResizedCrop(['img'], crop_size=(128, 128), scale=(1, 1))\n        with pytest.raises(TypeError):\n            RandomResizedCrop(['img'],\n                              crop_size=(128, 128),\n                              scale=(0.5, 0.5),\n                              ratio=(1, 2))\n\n        # test random crop\n        results = copy.deepcopy(self.results)\n        random_resized_crop = RandomResizedCrop(['img'], crop_size=(128, 128))\n        results = random_resized_crop(results)\n        assert 0 <= results['img_crop_bbox'][0] <= 256\n        assert 0 <= results['img_crop_bbox'][1] <= 256\n        assert results['img_crop_bbox'][2] <= 256\n        assert results['img_crop_bbox'][3] <= 256\n        assert results['img'].shape == (128, 128, 3)\n\n        # test random crop with integer crop size\n        results = copy.deepcopy(self.results)\n        random_resized_crop = RandomResizedCrop(['img'], crop_size=128)\n        results = random_resized_crop(results)\n        assert 0 <= results['img_crop_bbox'][0] <= 256\n        assert 0 <= results['img_crop_bbox'][1] <= 256\n        assert results['img_crop_bbox'][2] <= 256\n        assert results['img_crop_bbox'][3] <= 256\n        assert results['img'].shape == (128, 128, 3)\n        assert str(random_resized_crop) == (\n            random_resized_crop.__class__.__name__ +\n            \"(keys=['img'], crop_size=(128, 128), scale=(0.08, 1.0), \"\n            f'ratio={(3. / 4., 4. / 3.)}, interpolation=bilinear)')\n\n        # test random crop for larger size than the original shape\n        results = copy.deepcopy(self.results)\n        random_resized_crop = RandomResizedCrop(['img'], crop_size=(512, 512))\n        results = random_resized_crop(results)\n        assert results['img'].shape == (512, 512, 3)\n        assert str(random_resized_crop) == (\n            random_resized_crop.__class__.__name__ +\n            \"(keys=['img'], crop_size=(512, 512), scale=(0.08, 1.0), \"\n            f'ratio={(3. / 4., 4. / 3.)}, interpolation=bilinear)')\n\n        # test center crop for in_ratio < min(self.ratio)\n        results = copy.deepcopy(self.results)\n        center_crop = RandomResizedCrop(['img'],\n                                        crop_size=(128, 128),\n                                        ratio=(100.0, 200.0))\n        results = center_crop(results)\n        assert results['img_crop_bbox'] == [126, 0, 256, 3]\n        assert results['img'].shape == (128, 128, 3)\n\n        # test center crop for in_ratio > max(self.ratio)\n        results = copy.deepcopy(self.results)\n        center_crop = RandomResizedCrop(['img'],\n                                        crop_size=(128, 128),\n                                        ratio=(0.01, 0.02))\n        results = center_crop(results)\n        assert results['img_crop_bbox'] == [0, 125, 5, 256]\n        assert results['img'].shape == (128, 128, 3)\n\n    def test_fixed_crop(self):\n        with pytest.raises(TypeError):\n            FixedCrop(['img_a', 'img_b'], (0.23, 0.1))\n        with pytest.raises(TypeError):\n            FixedCrop(['img_a', 'img_b'], (256, 256), (0, 0.1))\n\n        # test shape consistency\n        results = copy.deepcopy(self.results)\n        fixed_crop = FixedCrop(['img_a', 'img'], crop_size=(128, 128))\n        with pytest.raises(ValueError):\n            results = fixed_crop(results)\n\n        # test sequence\n        results = copy.deepcopy(self.results)\n        results['img_a'] = [results['img_a'], results['img_a']]\n        results['img_b'] = [results['img_b'], results['img_b']]\n        fixed_crop = FixedCrop(['img_a', 'img_b'], crop_size=(128, 128))\n        results = fixed_crop(results)\n        for img in results['img_a']:\n            assert img.shape == (128, 128, 3)\n        for img in results['img_b']:\n            assert img.shape == (128, 128, 3)\n\n        # test given pos crop\n        results = copy.deepcopy(self.results)\n        given_pos_crop = FixedCrop(['img_a', 'img_b'],\n                                   crop_size=(256, 256),\n                                   crop_pos=(1, 1))\n        results = given_pos_crop(results)\n        assert results['img_a_crop_bbox'] == [1, 1, 256, 256]\n        assert results['img_b_crop_bbox'] == [1, 1, 256, 256]\n        assert np.array_equal(self.results['img_a'][1:257, 1:257, :],\n                              results['img_a'])\n        assert np.array_equal(self.results['img_b'][1:257, 1:257, :],\n                              results['img_b'])\n\n        # test given pos crop if pos > suitable pos\n        results = copy.deepcopy(self.results)\n        given_pos_crop = FixedCrop(['img_a', 'img_b'],\n                                   crop_size=(256, 256),\n                                   crop_pos=(280, 280))\n        results = given_pos_crop(results)\n        assert results['img_a_crop_bbox'] == [280, 280, 6, 6]\n        assert results['img_b_crop_bbox'] == [280, 280, 6, 6]\n        assert np.array_equal(self.results['img_a'][280:, 280:, :],\n                              results['img_a'])\n        assert np.array_equal(self.results['img_b'][280:, 280:, :],\n                              results['img_b'])\n        assert str(given_pos_crop) == (\n            given_pos_crop.__class__.__name__ +\n            \"keys=['img_a', 'img_b'], crop_size=(256, 256), \" +\n            'crop_pos=(280, 280)')\n\n        # test random initialized fixed crop\n        results = copy.deepcopy(self.results)\n        random_fixed_crop = FixedCrop(['img_a', 'img_b'],\n                                      crop_size=(256, 256),\n                                      crop_pos=None)\n        results = random_fixed_crop(results)\n        assert 0 <= results['img_a_crop_bbox'][0] <= 30\n        assert 0 <= results['img_a_crop_bbox'][1] <= 30\n        assert results['img_a_crop_bbox'][2] == 256\n        assert results['img_a_crop_bbox'][3] == 256\n        x_offset, y_offset, crop_w, crop_h = results['img_a_crop_bbox']\n        assert x_offset == results['img_b_crop_bbox'][0]\n        assert y_offset == results['img_b_crop_bbox'][1]\n        assert crop_w == results['img_b_crop_bbox'][2]\n        assert crop_h == results['img_b_crop_bbox'][3]\n        assert np.array_equal(\n            self.results['img_a'][y_offset:y_offset + crop_h,\n                                  x_offset:x_offset + crop_w, :],\n            results['img_a'])\n        assert np.array_equal(\n            self.results['img_b'][y_offset:y_offset + crop_h,\n                                  x_offset:x_offset + crop_w, :],\n            results['img_b'])\n\n        # test given pos crop for lager size than the original shape\n        results = copy.deepcopy(self.results)\n        given_pos_crop = FixedCrop(['img_a', 'img_b'],\n                                   crop_size=(512, 512),\n                                   crop_pos=(1, 1))\n        results = given_pos_crop(results)\n        assert results['img_a_crop_bbox'] == [1, 1, 285, 285]\n        assert results['img_b_crop_bbox'] == [1, 1, 285, 285]\n        assert np.array_equal(self.results['img_a'][1:, 1:, :],\n                              results['img_a'])\n        assert np.array_equal(self.results['img_b'][1:, 1:, :],\n                              results['img_b'])\n        assert str(given_pos_crop) == (\n            given_pos_crop.__class__.__name__ +\n            \"keys=['img_a', 'img_b'], crop_size=(512, 512), crop_pos=(1, 1)\")\n\n        # test random initialized fixed crop for lager size\n        # than the original shape\n        results = copy.deepcopy(self.results)\n        random_fixed_crop = FixedCrop(['img_a', 'img_b'],\n                                      crop_size=(512, 512),\n                                      crop_pos=None)\n        results = random_fixed_crop(results)\n        assert results['img_a_crop_bbox'] == [0, 0, 286, 286]\n        assert results['img_b_crop_bbox'] == [0, 0, 286, 286]\n        assert np.array_equal(self.results['img_a'], results['img_a'])\n        assert np.array_equal(self.results['img_b'], results['img_b'])\n        assert str(random_fixed_crop) == (\n            random_fixed_crop.__class__.__name__ +\n            \"keys=['img_a', 'img_b'], crop_size=(512, 512), crop_pos=None\")\n\n    def test_modcrop(self):\n        # color image\n        results = dict(gt=np.random.randn(257, 258, 3), scale=4)\n        modcrop = ModCrop()\n        results = modcrop(results)\n        assert results['gt'].shape == (256, 256, 3)\n\n        # gray image\n        results = dict(gt=np.random.randn(257, 258), scale=4)\n        results = modcrop(results)\n        assert results['gt'].shape == (256, 256)\n\n        # Wrong img ndim\n        with pytest.raises(ValueError):\n            results = dict(gt=np.random.randn(1, 257, 258, 3), scale=4)\n            results = modcrop(results)\n\n        assert repr(modcrop) == (\n            modcrop.__class__.__name__ + f'(key={modcrop.key})')\n\n    def test_paired_random_crop(self):\n        results = dict(\n            gt=np.random.randn(256, 128, 3),\n            img=np.random.randn(64, 32, 3),\n            scale=4,\n            gt_path='fake_gt_path',\n            img_path='fake_lq_path')\n        pairedrandomcrop = PairedRandomCrop(128)\n        results = pairedrandomcrop(results)\n        assert results['gt'].shape == (128, 128, 3)\n        assert results['img'].shape == (32, 32, 3)\n\n        # Scale mismatches. GT (h, w) is not {scale} multiplication of LQ's.\n        with pytest.raises(ValueError):\n            results = dict(\n                gt=np.random.randn(128, 128, 3),\n                img=np.random.randn(64, 64, 3),\n                scale=4,\n                gt_path='fake_gt_path',\n                img_path='fake_lq_path')\n            results = pairedrandomcrop(results)\n\n        # LQ (h, w) is smaller than patch size.\n        with pytest.raises(ValueError):\n            results = dict(\n                gt=np.random.randn(32, 32, 3),\n                img=np.random.randn(8, 8, 3),\n                scale=4,\n                gt_path='fake_gt_path',\n                img_path='fake_lq_path')\n            results = pairedrandomcrop(results)\n\n        assert repr(pairedrandomcrop) == (\n            pairedrandomcrop.__class__.__name__ +\n            (f'(gt_patch_size={pairedrandomcrop.gt_patch_size}, '\n             f'lq_key={pairedrandomcrop.lq_key}, '\n             f'gt_key={pairedrandomcrop.gt_key})'))\n\n        # for image list\n        results = dict(\n            img=[self.img_lq, self.img_lq],\n            gt=[self.img_gt, self.img_gt],\n            scale=4,\n            img_path='fake_lq_path',\n            gt_path='fake_gt_path')\n        pairedrandomcrop = PairedRandomCrop(128)\n        results = pairedrandomcrop(results)\n        for v in results['gt']:\n            assert v.shape == (128, 128, 3)\n        for v in results['img']:\n            assert v.shape == (32, 32, 3)\n        np.testing.assert_almost_equal(results['gt'][0], results['gt'][1])\n        np.testing.assert_almost_equal(results['img'][0], results['img'][1])\n\n\ndef test_crop_like():\n    img = np.uint8(np.random.randn(480, 640, 3) * 255)\n    img_ref = np.uint8(np.random.randn(512, 512, 3) * 255)\n\n    inputs = dict(gt=img, ref=img_ref)\n    crop_like = CropLike(target_key='gt', reference_key='ref')\n    results = crop_like(inputs)\n    assert set(list(results.keys())) == set(['gt', 'ref'])\n    assert repr(crop_like) == (\n        crop_like.__class__.__name__ +\n        f' target_key={crop_like.target_key}, ' +\n        f'reference_key={crop_like.reference_key}')\n    assert results['gt'].shape == (512, 512, 3)\n    sum_diff = np.sum(abs(results['gt'][:480, :512] - img[:480, :512]))\n    assert sum_diff < 1e-6\n\n    inputs = dict(gt=img, ref=img_ref[:, :, 0])\n    crop_like = CropLike(target_key='gt', reference_key='ref')\n    results = crop_like(inputs)\n    assert set(list(results.keys())) == set(['gt', 'ref'])\n    assert results['gt'].shape == (512, 512, 3)\n    sum_diff = np.sum(abs(results['gt'][:480, :512] - img[:480, :512]))\n    assert sum_diff < 1e-6\n\n    inputs = dict(gt=img[:, :, 0], ref=img_ref)\n    crop_like = CropLike(target_key='gt', reference_key='ref')\n    results = crop_like(inputs)\n    assert set(list(results.keys())) == set(['gt', 'ref'])\n    assert results['gt'].shape == (512, 512)\n    sum_diff = np.sum(abs(results['gt'][:480, :512] - img[:480, :512, 0]))\n    assert sum_diff < 1e-6\n\n\ndef test_instance_crop():\n\n    if not torch.cuda.is_available():\n        # RoI pooling only support in GPU\n        return unittest.skip('test requires GPU and torch+cuda')\n\n    croper = InstanceCrop(\n        key='img',\n        finesize=256,\n        box_num_upbound=2,\n        config_file='mmdet::mask_rcnn/'\n        'mask-rcnn_x101-32x8d_fpn_ms-poly-3x_coco.py')  # noqa\n\n    img_path = osp.join(\n        osp.dirname(__file__), '..', '..',\n        'data/image/img_root/horse/horse.jpeg')\n    img = cv2.imread(img_path)\n    data = dict(img=img, ori_img_shape=img.shape, img_channel_order='rgb')\n\n    results = croper(data)\n\n    assert 'empty_box' in results\n    if results['empty_box']:\n        cropped_img = results['cropped_img']\n        assert len(cropped_img) == 0\n        assert len(cropped_img) <= 2\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_fgbg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\nfrom mmengine.fileio import load\n\nfrom mmagic.datasets.transforms import (CompositeFg, MergeFgAndBg, PerturbBg,\n                                        RandomJitter, RandomLoadResizeBg)\n\ntest_root = Path(__file__).parent.parent.parent\ndata_root = test_root / 'data' / 'matting_dataset'\n\n\ndef assert_keys_contain(result_keys, target_keys):\n    \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n    assert set(target_keys).issubset(set(result_keys))\n\n\ndef test_composite_fg():\n    target_keys = ['alpha', 'fg', 'bg']\n\n    fg = np.random.rand(32, 32, 3).astype(np.float32)\n    bg = np.random.rand(32, 32, 3).astype(np.float32)\n    alpha = np.random.rand(32, 32, 1).astype(np.float32)\n    results = dict(alpha=alpha, fg=fg, bg=bg)\n    # use merged dir as fake fg dir, trimap dir as fake alpha dir for unittest\n    composite_fg = CompositeFg(\n        [str(data_root / 'fg'),\n         str(data_root / 'merged')],\n        [str(data_root / 'alpha'),\n         str(data_root / 'trimap')])\n    correct_fg_list = [\n        str(data_root / 'fg' / 'GT05.jpg'),\n        str(data_root / 'merged' / 'GT05.jpg')\n    ]\n    correct_alpha_list = [\n        str(data_root / 'alpha' / 'GT05.jpg'),\n        str(data_root / 'trimap' / 'GT05.png')\n    ]\n    assert composite_fg.fg_list == correct_fg_list\n    assert composite_fg.alpha_list == correct_alpha_list\n    for _ in range(3):  # to test randomness\n        composite_fg_results = composite_fg(results)\n        assert_keys_contain(composite_fg_results.keys(), target_keys)\n        assert composite_fg_results['fg'].shape == (32, 32, 3)\n        assert composite_fg_results['alpha'].shape == (32, 32, 1)\n\n    fg = np.random.rand(32, 32, 3).astype(np.float32)\n    bg = np.random.rand(32, 32, 3).astype(np.float32)\n    alpha = np.random.rand(32, 32, 1).astype(np.float32)\n    results = dict(alpha=alpha, fg=fg, bg=bg)\n    composite_fg = CompositeFg(\n        str(data_root / 'fg'),\n        str(data_root / 'alpha'),\n        interpolation='bilinear')\n    for _ in range(3):  # to test randomness\n        composite_fg_results = composite_fg(results)\n        assert_keys_contain(composite_fg_results.keys(), target_keys)\n        assert composite_fg_results['fg'].shape == (32, 32, 3)\n        assert composite_fg_results['alpha'].shape == (32, 32, 1)\n\n    _fg_dirs = str(data_root / 'fg')\n    _alpha_dirs = str(data_root / 'alpha')\n    strs = (f\"(fg_dirs=['{_fg_dirs}'], \"\n            f\"alpha_dirs=['{_alpha_dirs}'], \"\n            \"interpolation='bilinear')\")\n\n    assert repr(composite_fg) == 'CompositeFg' + strs.replace('\\\\', '\\\\\\\\')\n\n\ndef test_merge_fg_and_bg():\n    target_keys = ['fg', 'bg', 'alpha', 'merged']\n\n    fg = np.random.randn(32, 32, 3)\n    bg = np.random.randn(32, 32, 3)\n    alpha = np.random.randn(32, 32, 1)\n    results = dict(fg=fg, bg=bg, alpha=alpha)\n    merge_fg_and_bg = MergeFgAndBg()\n    merge_fg_and_bg_results = merge_fg_and_bg(results)\n\n    assert_keys_contain(merge_fg_and_bg_results.keys(), target_keys)\n    assert merge_fg_and_bg_results['merged'].shape == fg.shape\n    assert merge_fg_and_bg_results['alpha'].shape == (32, 32, 1)\n\n\ndef test_perturb_bg():\n    with pytest.raises(ValueError):\n        # gammma_ratio must be a float between [0, 1]\n        PerturbBg(-0.5)\n\n    with pytest.raises(ValueError):\n        # gammma_ratio must be a float between [0, 1]\n        PerturbBg(1.1)\n\n    target_keys = ['bg', 'noisy_bg']\n    # set a random seed to make sure the test goes through every branch\n    np.random.seed(123)\n\n    img_shape = (32, 32, 3)\n    results = dict(bg=np.random.randint(0, 255, img_shape))\n    perturb_bg = PerturbBg(0.6)\n    perturb_bg_results = perturb_bg(results)\n    assert_keys_contain(perturb_bg_results.keys(), target_keys)\n    assert perturb_bg_results['noisy_bg'].shape == img_shape\n\n    img_shape = (32, 32, 3)\n    results = dict(bg=np.random.randint(0, 255, img_shape))\n    perturb_bg = PerturbBg(0.6)\n    perturb_bg_results = perturb_bg(results)\n    assert_keys_contain(perturb_bg_results.keys(), target_keys)\n    assert perturb_bg_results['noisy_bg'].shape == img_shape\n\n    repr_str = perturb_bg.__class__.__name__ + '(gamma_ratio=0.6)'\n    assert repr(perturb_bg) == repr_str\n\n\ndef test_random_jitter():\n    with pytest.raises(AssertionError):\n        RandomJitter(-40)\n\n    with pytest.raises(AssertionError):\n        RandomJitter((-40, 40, 40))\n\n    target_keys = ['fg']\n\n    fg = np.random.rand(240, 320, 3).astype(np.float32)\n    alpha = np.random.rand(240, 320, 1).astype(np.float32)\n    results = dict(fg=fg.copy(), alpha=alpha)\n    random_jitter = RandomJitter(40)\n    random_jitter_results = random_jitter(results)\n    assert_keys_contain(random_jitter_results.keys(), target_keys)\n    assert random_jitter_results['fg'].shape == (240, 320, 3)\n\n    fg = np.random.rand(240, 320, 3).astype(np.float32)\n    alpha = np.random.rand(240, 320, 1).astype(np.float32)\n    results = dict(fg=fg.copy(), alpha=alpha)\n    random_jitter = RandomJitter((-50, 50))\n    random_jitter_results = random_jitter(results)\n    assert_keys_contain(random_jitter_results.keys(), target_keys)\n    assert random_jitter_results['fg'].shape == (240, 320, 3)\n\n    assert repr(random_jitter) == random_jitter.__class__.__name__ + (\n        'hue_range=(-50, 50)')\n\n\ndef test_random_load_resize_bg():\n    ann_file = data_root / 'ann_old.json'\n    bg_dir = data_root / 'bg'\n    data_infos = load(ann_file)\n    results = dict()\n    for data_info in data_infos:\n        for key in data_info:\n            results[key] = str(data_root / data_info[key])\n    target_keys = ['bg']\n\n    results = dict(fg=np.random.rand(128, 128))\n    random_load_bg = RandomLoadResizeBg(bg_dir=bg_dir)\n    for _ in range(2):\n        random_load_bg_results = random_load_bg(results)\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n        assert set(target_keys).issubset(set(random_load_bg_results.keys()))\n        assert isinstance(random_load_bg_results['bg'], np.ndarray)\n        assert random_load_bg_results['bg'].shape == (128, 128, 3)\n\n    assert repr(\n        random_load_bg) == f\"RandomLoadResizeBg(bg_dir='{str(bg_dir)}')\"\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_formatting.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nfrom mmcv.transforms import to_tensor\n\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.structures.data_sample import DataSample\n\n\ndef assert_tensor_equal(img, ref_img, ratio_thr=0.999):\n    \"\"\"Check if img and ref_img are matched approximately.\"\"\"\n    assert img.shape == ref_img.shape\n    assert img.dtype == ref_img.dtype\n    area = ref_img.shape[-1] * ref_img.shape[-2]\n    diff = torch.abs(img - ref_img)\n    assert torch.sum(diff <= 1) / float(area) > ratio_thr\n\n\ndef test_pack_inputs():\n\n    pack_inputs = PackInputs(meta_keys='a', data_keys='numpy')\n    assert repr(pack_inputs) == 'PackInputs'\n\n    ori_results = dict(\n        img=np.random.rand(64, 64, 3),\n        gt=[np.random.rand(64, 61, 3),\n            np.random.rand(64, 61, 3)],\n        img_lq=np.random.rand(64, 64, 3),\n        ref=np.random.rand(64, 62, 3),\n        ref_lq=np.random.rand(64, 62, 3),\n        mask=np.random.rand(64, 63, 3),\n        gt_heatmap=np.random.rand(64, 65, 3),\n        gt_unsharp=np.random.rand(64, 65, 3),\n        merged=np.random.rand(64, 64, 3),\n        trimap=np.random.rand(64, 66, 3),\n        alpha=np.random.rand(64, 67, 3),\n        fg=np.random.rand(64, 68, 3),\n        bg=np.random.rand(64, 69, 3),\n        img_shape=(64, 64),\n        a='b',\n        numpy=np.random.rand(48, 48, 3))\n\n    results = ori_results.copy()\n\n    packed_results = pack_inputs(results)\n\n    target_keys = ['inputs', 'data_samples']\n    assert set(target_keys).issubset(set(packed_results.keys()))\n\n    data_sample = packed_results['data_samples']\n    assert isinstance(data_sample, DataSample)\n\n    assert data_sample.img_shape == (64, 64)\n    assert data_sample.a == 'b'\n\n    numpy_tensor = to_tensor(ori_results['numpy'])\n    numpy_tensor = numpy_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.numpy, numpy_tensor)\n\n    gt_tensors = [to_tensor(v) for v in ori_results['gt']]\n    gt_tensors = [v.permute(2, 0, 1) for v in gt_tensors]\n    gt_tensor = torch.stack(gt_tensors, dim=0)\n    assert_tensor_equal(data_sample.gt_img, gt_tensor)\n\n    img_lq_tensor = to_tensor(ori_results['ref'])\n    img_lq_tensor = img_lq_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.ref_img, img_lq_tensor)\n\n    ref_lq_tensor = to_tensor(ori_results['ref'])\n    ref_lq_tensor = ref_lq_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.ref_img, ref_lq_tensor)\n\n    ref_tensor = to_tensor(ori_results['ref'])\n    ref_tensor = ref_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.ref_img, ref_tensor)\n\n    mask_tensor = to_tensor(ori_results['mask'])\n    mask_tensor = mask_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.mask, mask_tensor)\n\n    gt_heatmap_tensor = to_tensor(ori_results['gt_heatmap'])\n    gt_heatmap_tensor = gt_heatmap_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_heatmap, gt_heatmap_tensor)\n\n    gt_unsharp_tensor = to_tensor(ori_results['gt_heatmap'])\n    gt_unsharp_tensor = gt_unsharp_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_heatmap, gt_unsharp_tensor)\n\n    gt_merged_tensor = to_tensor(ori_results['merged'])\n    gt_merged_tensor = gt_merged_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_merged, gt_merged_tensor)\n\n    trimap_tensor = to_tensor(ori_results['trimap'])\n    trimap_tensor = trimap_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.trimap, trimap_tensor)\n\n    gt_alpha_tensor = to_tensor(ori_results['alpha'])\n    gt_alpha_tensor = gt_alpha_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_alpha, gt_alpha_tensor)\n\n    gt_fg_tensor = to_tensor(ori_results['fg'])\n    gt_fg_tensor = gt_fg_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_fg, gt_fg_tensor)\n\n    gt_bg_tensor = to_tensor(ori_results['bg'])\n    gt_bg_tensor = gt_bg_tensor.permute(2, 0, 1)\n    assert_tensor_equal(data_sample.gt_bg, gt_bg_tensor)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_generate_assistant.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.datasets.transforms import (GenerateCoordinateAndCell,\n                                        GenerateFacialHeatmap,\n                                        LoadImageFromFile)\n\n\ndef test_generate_coordinate_and_cell():\n\n    tensor1 = torch.randn((3, 64, 48))\n    inputs1 = dict(lq=tensor1)\n    coordinate1 = GenerateCoordinateAndCell(scale=3.1, target_size=(128, 96))\n    results1 = coordinate1(inputs1)\n    assert set(list(results1.keys())) == set(['lq', 'coord', 'cell'])\n    assert repr(coordinate1) == (\n        coordinate1.__class__.__name__ +\n        f'(sample_quantity={coordinate1.sample_quantity}, ' +\n        f'scale={coordinate1.scale}, ' +\n        f'target_size={coordinate1.target_size}, ' +\n        f'reshape_gt={coordinate1.reshape_gt})')\n\n    tensor2 = torch.randn((3, 64, 48))\n    inputs2 = dict(gt=tensor2)\n    coordinate2 = GenerateCoordinateAndCell(\n        sample_quantity=64 * 48, scale=3.1, target_size=(128, 96))\n    results2 = coordinate2(inputs2)\n    assert set(list(results2.keys())) == set(['gt', 'coord', 'cell'])\n    assert results2['gt'].shape == (64 * 48, 3)\n\n    inputs3 = dict()\n    coordinate3 = GenerateCoordinateAndCell(\n        sample_quantity=64 * 48, scale=3.1, target_size=(128, 96))\n    results3 = coordinate3(inputs3)\n    assert set(list(results3.keys())) == set(['coord', 'cell'])\n\n\ndef test_generate_facial_heatmap():\n\n    results = dict(gt_path='tests/data/image/face/000001.png', key='000001')\n    loader = LoadImageFromFile(key='gt', channel_order='rgb')\n    results = loader(results)\n\n    generate_heatmap = GenerateFacialHeatmap('gt', 256, 32)\n    results1 = generate_heatmap(results)\n    results1 = generate_heatmap(results)\n    assert set(list(results1.keys())) == set([\n        'gt_path', 'gt', 'ori_gt_shape', 'gt_heatmap', 'key',\n        'gt_channel_order', 'gt_color_type'\n    ])\n    assert results1['gt_heatmap'].shape == (32, 32, 68)\n\n    generate_heatmap = GenerateFacialHeatmap('gt', (256, 256), (32, 64))\n    results2 = generate_heatmap(results)\n    assert set(list(results2.keys())) == set([\n        'gt_path', 'gt', 'ori_gt_shape', 'gt_heatmap', 'key',\n        'gt_channel_order', 'gt_color_type'\n    ])\n    assert results2['gt_heatmap'].shape == (32, 64, 68)\n\n    generate_heatmap = GenerateFacialHeatmap(\n        'gt', (256, 256), (32, 64), use_cache=False)\n    results2 = generate_heatmap(results)\n    assert set(list(results2.keys())) == set([\n        'gt_path', 'gt', 'ori_gt_shape', 'gt_heatmap', 'key',\n        'gt_channel_order', 'gt_color_type'\n    ])\n    assert results2['gt_heatmap'].shape == (32, 64, 68)\n\n    assert repr(generate_heatmap) == (\n        generate_heatmap.__class__.__name__ +\n        f'(image_key={generate_heatmap.image_key}, ' +\n        f'ori_size={generate_heatmap.ori_size}, ' +\n        f'target_size={generate_heatmap.target_size}, ' +\n        f'sigma={generate_heatmap.sigma}, '\n        f'use_cache={generate_heatmap.use_cache})')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_generate_frame_indices.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport os.path as osp\n\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (GenerateFrameIndices,\n                                        GenerateFrameIndiceswithPadding,\n                                        GenerateSegmentIndices)\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n\n        cls.results = dict()\n        cls.gt = np.random.randint(0, 256, (256, 128, 3), dtype=np.uint8)\n        cls.img = np.random.randint(0, 256, (64, 32, 3), dtype=np.uint8)\n\n        cls.results = dict(\n            img=cls.img,\n            gt=cls.gt,\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n\n        cls.results['ori_img'] = np.random.randint(\n            0, 256, (256, 256, 3), dtype=np.uint8)\n        cls.results['mask'] = np.random.randint(\n            0, 256, (256, 256, 1), dtype=np.uint8)\n        # cls.results['img_tensor'] = torch.rand((3, 256, 256))\n        # cls.results['mask_tensor'] = torch.zeros((1, 256, 256))\n        # cls.results['mask_tensor'][:, 50:150, 40:140] = 1.\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n\n        return set(target_keys).issubset(set(result_keys))\n\n    def test_frame_index_generator(self):\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key=osp.join('000', '00000010'),\n            num_input_frames=3)\n        target_keys = ['img_path', 'gt_path', 'key', 'interval']\n        frame_index_generator = GenerateFrameIndices(\n            interval_list=[1], frames_per_clip=99)\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n\n        name_ = repr(frame_index_generator)\n        assert name_ == frame_index_generator.__class__.__name__ + (\n            '(interval_list=[1], frames_per_clip=99)')\n\n        # index out of range\n        frame_index_generator = GenerateFrameIndices(interval_list=[10])\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n\n        # index out of range\n        results['key'] = osp.join('000', '00000099')\n        frame_index_generator = GenerateFrameIndices(interval_list=[2, 3])\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n\n    def test_frame_index_generation_with_padding(self):\n        with pytest.raises(ValueError):\n            # Wrong padding mode\n            GenerateFrameIndiceswithPadding(padding='fake')\n\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key=osp.join('000', '00000000'),\n            sequence_length=100,\n            num_input_frames=5)\n        target_keys = ['img_path', 'gt_path', 'key']\n        replicate_idx = [0, 0, 0, 1, 2]\n        reflection_idx = [2, 1, 0, 1, 2]\n        reflection_circle_idx = [4, 3, 0, 1, 2]\n        circle_idx = [3, 4, 0, 1, 2]\n\n        # replicate\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in replicate_idx\n        ]\n        gt_paths = [osp.join('fake_gt_root', '000', '00000000.png')]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='replicate')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # reflection\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in reflection_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='reflection')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # reflection_circle\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in reflection_circle_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='reflection_circle')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # circle\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in circle_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='circle')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key=osp.join('000', '00000099'),\n            sequence_length=100,\n            num_input_frames=5)\n        target_keys = ['img_path', 'gt_path', 'key']\n        replicate_idx = [97, 98, 99, 99, 99]\n        reflection_idx = [97, 98, 99, 98, 97]\n        reflection_circle_idx = [97, 98, 99, 96, 95]\n        circle_idx = [97, 98, 99, 95, 96]\n\n        # replicate\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in replicate_idx\n        ]\n        gt_paths = [osp.join('fake_gt_root', '000', '00000099.png')]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='replicate')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # reflection\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in reflection_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='reflection')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # reflection_circle\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in reflection_circle_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='reflection_circle')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n        # circle\n        img_paths = [\n            osp.join('fake_img_root', '000', f'{v:08d}.png')\n            for v in circle_idx\n        ]\n        frame_index_generator = GenerateFrameIndiceswithPadding(\n            padding='circle')\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert rlt['img_path'] == img_paths\n        assert rlt['gt_path'] == gt_paths\n\n        name_ = repr(frame_index_generator)\n        assert name_ == frame_index_generator.__class__.__name__ + (\n            \"(padding='circle')\")\n\n    def test_frame_index_generation_for_recurrent(self):\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key='000',\n            num_input_frames=10,\n            sequence_length=100)\n\n        target_keys = [\n            'img_path',\n            'gt_path',\n            'key',\n            'interval',\n            'num_input_frames',\n            'sequence_length',\n        ]\n        frame_index_generator = GenerateSegmentIndices(interval_list=[1, 5, 9])\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert self.check_keys_contain(rlt.keys(), target_keys)\n\n        name_ = repr(frame_index_generator)\n        assert name_ == frame_index_generator.__class__.__name__ + (\n            '(interval_list=[1, 5, 9])')\n\n        # interval too large\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key='000',\n            num_input_frames=11,\n            sequence_length=100)\n\n        frame_index_generator = GenerateSegmentIndices(interval_list=[10])\n        with pytest.raises(ValueError):\n            frame_index_generator(copy.deepcopy(results))\n\n        # num_input_frames is None\n        results = dict(\n            img_path='fake_img_root',\n            gt_path='fake_gt_root',\n            key='000',\n            num_input_frames=None,\n            sequence_length=100)\n\n        frame_index_generator = GenerateSegmentIndices(interval_list=[1])\n        rlt = frame_index_generator(copy.deepcopy(results))\n        assert len(rlt['img_path']) == 100\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_get_masked_image.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\n\nfrom mmagic.datasets.transforms import GetMaskedImage\n\n\ndef test_masked_img():\n    img = np.random.rand(4, 4, 3).astype(np.float32)\n    mask = np.zeros((4, 4, 1), dtype=np.float32)\n    mask[1, 1] = 1\n\n    results = dict(gt=img, mask=mask)\n    get_masked_img = GetMaskedImage(zero_value=0)\n    results = get_masked_img(results)\n    masked_img = img * (1. - mask)\n    assert np.array_equal(results['img'], masked_img)\n\n    name_ = repr(get_masked_img)\n    class_name = get_masked_img.__class__.__name__\n    assert name_ == class_name + (\"(img_key='gt', mask_key='mask'\"\n                                  \", out_key='img', zero_value=0)\")\n\n    # test copy meta info\n    results = dict(\n        gt=img,\n        mask=mask,\n        ori_gt_shape=img.shape,\n        gt_channel_order='rgb',\n        gt_color_type='color')\n    get_masked_img = GetMaskedImage(zero_value=0)\n    results = get_masked_img(results)\n    assert results['ori_img_shape'] == img.shape\n    assert results['img_channel_order'] == 'rgb'\n    assert results['img_color_type'] == 'color'\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_loading.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom pathlib import Path\n\nimport mmcv\nimport numpy as np\nimport pytest\nfrom mmengine.fileio.backends import LocalBackend\n\nfrom mmagic.datasets.transforms import (GetSpatialDiscountMask,\n                                        LoadImageFromFile, LoadMask)\n\n\ndef test_load_image_from_file():\n\n    path_baboon = Path(\n        __file__).parent.parent.parent / 'data' / 'image' / 'gt' / 'baboon.png'\n    img_baboon = mmcv.imread(str(path_baboon), flag='color')\n    h, w, _ = img_baboon.shape\n\n    path_baboon_x4 = Path(\n        __file__\n    ).parent.parent.parent / 'data' / 'image' / 'lq' / 'baboon_x4.png'\n    img_baboon_x4 = mmcv.imread(str(path_baboon_x4), flag='color')\n\n    # read gt image\n    # input path is Path object\n    results = dict(gt_path=path_baboon)\n    config = dict(key='gt')\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['gt'].shape == (h, w, 3)\n    assert results['ori_gt_shape'] == (h, w, 3)\n    np.testing.assert_almost_equal(results['gt'], img_baboon)\n    assert results['gt_path'] == path_baboon\n    # input path is str\n    results = dict(gt_path=str(path_baboon))\n    results = image_loader(results)\n    assert results['gt'].shape == (h, w, 3)\n    assert results['ori_gt_shape'] == (h, w, 3)\n    np.testing.assert_almost_equal(results['gt'], img_baboon)\n    assert results['gt_path'] == str(path_baboon)\n    assert results['gt_channel_order'] == 'bgr'\n    assert results['gt_color_type'] == 'color'\n\n    # read input image\n    # input path is Path object\n    results = dict(img_path=path_baboon_x4)\n    config = dict(key='img')\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['img'].shape == (h // 4, w // 4, 3)\n    np.testing.assert_almost_equal(results['img'], img_baboon_x4)\n    assert results['img_path'] == path_baboon_x4\n    # input path is str\n    results = dict(img_path=str(path_baboon_x4))\n    results = image_loader(results)\n    assert results['img'].shape == (h // 4, w // 4, 3)\n    np.testing.assert_almost_equal(results['img'], img_baboon_x4)\n    assert results['img_path'] == str(path_baboon_x4)\n    assert repr(image_loader) == (\n        image_loader.__class__.__name__ +\n        ('(key=img, color_type=color, channel_order=bgr, '\n         'imdecode_backend=None, use_cache=False, to_float32=False, '\n         'to_y_channel=False, save_original_img=False, '\n         'backend_args=None)'))\n    assert isinstance(image_loader.file_backend, LocalBackend)\n\n    # test save_original_img\n    results = dict(img_path=path_baboon)\n    config = dict(key='img', color_type='grayscale', save_original_img=True)\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['img'].shape == (h, w, 1)\n    assert results['ori_img_shape'] == (h, w, 1)\n    np.testing.assert_almost_equal(results['ori_img'], results['img'])\n    assert id(results['ori_img']) != id(results['img'])\n    assert results['img_channel_order'] == 'bgr'\n    assert results['img_color_type'] == 'grayscale'\n\n    # test: use_cache\n    results = dict(gt_path=path_baboon)\n    config = dict(key='gt', use_cache=True)\n    image_loader = LoadImageFromFile(**config)\n    assert image_loader.cache == dict()\n    assert repr(image_loader) == (\n        image_loader.__class__.__name__ +\n        ('(key=gt, color_type=color, channel_order=bgr, '\n         'imdecode_backend=None, use_cache=True, to_float32=False, '\n         'to_y_channel=False, save_original_img=False, '\n         'backend_args=None)'))\n    results = image_loader(results)\n    assert image_loader.cache is not None\n    assert str(path_baboon) in image_loader.cache\n    assert results['gt'].shape == (h, w, 3)\n    assert results['gt_path'] == path_baboon\n    np.testing.assert_almost_equal(results['gt'], img_baboon)\n    assert isinstance(image_loader.file_backend, LocalBackend)\n    assert results['gt_channel_order'] == 'bgr'\n    assert results['gt_color_type'] == 'color'\n\n    # convert to y-channel (bgr2y)\n    results = dict(gt_path=path_baboon)\n    config = dict(key='gt', to_y_channel=True, to_float32=True)\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['gt'].shape == (h, w, 1)\n    img_baboon_y = mmcv.bgr2ycbcr(img_baboon, y_only=True)\n    img_baboon_y = np.expand_dims(img_baboon_y, axis=2)\n    np.testing.assert_almost_equal(results['gt'], img_baboon_y)\n    assert results['gt_path'] == path_baboon\n    assert results['gt_channel_order'] == 'bgr'\n    assert results['gt_color_type'] == 'color'\n\n    # convert to y-channel (rgb2y)\n    results = dict(gt_path=path_baboon)\n    config = dict(\n        key='gt', channel_order='rgb', to_y_channel=True, to_float32=True)\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['gt'].shape == (h, w, 1)\n    img_baboon_y = mmcv.bgr2ycbcr(img_baboon, y_only=True)\n    img_baboon_y = np.expand_dims(img_baboon_y, axis=2)\n    np.testing.assert_almost_equal(results['gt'], img_baboon_y)\n\n    # test frames\n    # input path is Path object\n    results = dict(gt_path=[path_baboon])\n    config = dict(key='gt', save_original_img=True)\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['gt'][0].shape == (h, w, 3)\n    assert results['ori_gt_shape'] == [(h, w, 3)]\n    np.testing.assert_almost_equal(results['gt'][0], img_baboon)\n    assert results['gt_path'] == [path_baboon]\n    # input path is str\n    results = dict(gt_path=[str(path_baboon)])\n    results = image_loader(results)\n    assert results['gt'][0].shape == (h, w, 3)\n    assert results['ori_gt_shape'] == [(h, w, 3)]\n    np.testing.assert_almost_equal(results['gt'][0], img_baboon)\n    assert results['gt_path'] == [str(path_baboon)]\n\n    # test lmdb\n    results = dict(img_path=path_baboon)\n    config = dict(\n        key='img',\n        backend_args=dict(\n            backend='lmdb',\n            db_path=Path(__file__).parent.parent.parent / 'data' / 'lq.lmdb'))\n    image_loader = LoadImageFromFile(**config)\n    results = image_loader(results)\n    assert results['img'].shape == (h // 4, w // 4, 3)\n    assert results['ori_img_shape'] == (h // 4, w // 4, 3)\n    assert results['img_path'] == path_baboon\n\n    # convert to y-channel (ValueError)\n    results = dict(gt_path=path_baboon)\n    config = dict(key='gt', to_y_channel=True, channel_order='gg')\n    image_loader = LoadImageFromFile(**config)\n    with pytest.raises(ValueError):\n        results = image_loader(results)\n\n    # test infer from s3\n    from mmengine.fileio import PetrelBackend\n    PetrelBackend.get = lambda self, filepath: filepath\n    results = dict(img_path='openmmlab:s3://abcd/efg/')\n    config = dict(key='img')\n    image_loader = LoadImageFromFile(**config)\n\n    try:\n        import petrel_client  # noqa: F401\n    except ImportError:\n        with pytest.raises(ImportError) as excinfo:\n            results = image_loader(results)\n        assert 'Please install petrel_client to enable PetrelBackend.' in str(\n            excinfo.value)\n    else:\n        results = image_loader(results)\n        assert results['img'] == 'openmmlab:s3://abcd/efg/'\n\n\ndef test_dct_mask():\n    mask = np.zeros((64, 64, 1))\n    mask[20:40, 20:40] = 1.\n    mask_bbox = [20, 20, 20, 20]\n    results = dict(mask=mask, mask_bbox=mask_bbox)\n\n    dct_mask = GetSpatialDiscountMask()\n    results = dct_mask(results)\n    assert 'discount_mask' in results\n    assert results['discount_mask'].shape == (64, 64, 1)\n\n    mask_height = mask_width = 20\n    gamma = 0.99\n    beta = 1.5\n    mask_values = np.ones((mask_width, mask_height, 1))\n    for i in range(mask_width):\n        for j in range(mask_height):\n            mask_values[i,\n                        j] = max(gamma**(min(i, mask_width - i - 1) * beta),\n                                 gamma**(min(j, mask_height - j - 1) * beta))\n    dct_mask_test = np.zeros_like(mask)\n    dct_mask_test[20:40, 20:40, ...] = mask_values\n\n    np.testing.assert_almost_equal(dct_mask_test, results['discount_mask'])\n    repr_str = dct_mask.__class__.__name__ + (f'(gamma={dct_mask.gamma}, '\n                                              f'beta={dct_mask.beta})')\n    assert repr_str == repr(dct_mask)\n\n\nclass TestInpaintLoading:\n\n    @classmethod\n    def setup_class(cls):\n        cls.img_path = Path(__file__).parent.parent.parent.joinpath(\n            'data/image/test.png')\n        cls.results = dict(img_info=dict(filename=cls.img_path))\n\n    def test_load_mask(self):\n\n        # test mask mode: set\n        mask_config = dict(\n            mask_list_file='tests/data/inpainting/mask_list.txt',\n            prefix='tests/data/inpainting/',\n            io_backend='local',\n            color_type='unchanged',\n            file_client_kwargs=dict())\n\n        set_loader = LoadMask('set', mask_config)\n        class_name = set_loader.__class__.__name__\n        assert repr(set_loader) == class_name + \"(mask_mode='set')\"\n        for _ in range(2):\n            results = dict()\n            results = set_loader(results)\n            gt_mask = mmcv.imread(\n                'tests/data/inpainting/mask/test.png', flag='unchanged')\n            assert np.array_equal(results['mask'], gt_mask[..., 0:1] / 255.)\n\n        mask_config = dict(\n            mask_list_file='tests/data/inpainting/mask_list_single_ch.txt',\n            prefix='tests/data/inpainting/',\n            io_backend='local',\n            color_type='unchanged',\n            file_client_kwargs=dict())\n\n        # test mask mode: set with input as single channel image\n        set_loader = LoadMask('set', mask_config)\n        results = dict()\n        results = set_loader(results)\n        gt_mask = mmcv.imread(\n            'tests/data/inpainting/mask/test_single_ch.png', flag='unchanged')\n        gt_mask = np.expand_dims(gt_mask, axis=2)\n        assert np.array_equal(results['mask'], gt_mask[..., 0:1] / 255.)\n\n        # test mask mode: ff\n        mask_config = dict(\n            img_shape=(256, 256),\n            num_vertices=(4, 12),\n            mean_angle=1.2,\n            angle_range=0.4,\n            brush_width=(12, 40))\n\n        ff_loader = LoadMask('ff', mask_config)\n        results = dict()\n        results = ff_loader(results)\n        assert results['mask'].shape == (256, 256, 1)\n\n        # test mask mode: irregular holes\n        mask_config = dict(\n            img_shape=(256, 256),\n            num_vertices=(4, 12),\n            max_angle=4.,\n            length_range=(10, 100),\n            brush_width=(10, 40),\n            area_ratio_range=(0.15, 0.5))\n\n        irregular_loader = LoadMask('irregular', mask_config)\n        results = dict()\n        results = irregular_loader(results)\n        assert results['mask'].shape == (256, 256, 1)\n\n        # test mask mode: bbox\n        mask_config = dict(img_shape=(256, 256), max_bbox_shape=128)\n\n        bbox_loader = LoadMask('bbox', mask_config)\n        results = dict()\n        results = bbox_loader(results)\n        assert results['mask'].shape == (256, 256, 1)\n\n        # test mask mode: file\n        mask_loader = LoadMask('file')\n        mask = mask_loader(\n            dict(mask_path='tests/data/inpainting/mask/test_single_ch.png'))\n        assert mask['mask'].shape == (256, 256, 1)\n\n        with pytest.raises(NotImplementedError):\n            loader = LoadMask('xxxx', mask_config)\n            results = loader(results)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_matlab_like_resize.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\n\n\ndef test_matlab_like_resize():\n    results = {}\n\n    # give scale\n    results['lq'] = np.ones((16, 16, 3))\n    imresize = MATLABLikeResize(keys=['lq'], scale=0.25)\n    results = imresize(results)\n    assert results['lq'].shape == (4, 4, 3)\n\n    # give scale\n    results['lq'] = np.ones((16, 16, 3))\n    imresize = MATLABLikeResize(keys=['lq'], output_shape=(6, 6))\n    results = imresize(results)\n    assert results['lq'].shape == (6, 6, 3)\n\n    # kernel must equal 'bicubic'\n    with pytest.raises(ValueError):\n        MATLABLikeResize(keys=['lq'], kernel='abc')\n\n    # kernel_width must equal 4.0\n    with pytest.raises(ValueError):\n        MATLABLikeResize(keys=['lq'], kernel_width=10)\n\n    # scale and output_shape cannot be both None\n    with pytest.raises(ValueError):\n        MATLABLikeResize(keys=['lq'])\n\n    assert repr(imresize) == imresize.__class__.__name__ \\\n        + \"(keys=['lq'], scale=None, output_shape=(6, 6), \" \\\n        + 'kernel=bicubic, kernel_width=4.0)'\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_normalization.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import Normalize, RescaleToZeroOne\n\n\nclass TestAugmentations:\n\n    @staticmethod\n    def assert_img_equal(img, ref_img, ratio_thr=0.999):\n        \"\"\"Check if img and ref_img are matched approximately.\"\"\"\n        assert img.shape == ref_img.shape\n        assert img.dtype == ref_img.dtype\n        area = ref_img.shape[-1] * ref_img.shape[-2]\n        diff = np.abs(img.astype('int32') - ref_img.astype('int32'))\n        assert np.sum(diff <= 1) / float(area) > ratio_thr\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n        return set(target_keys).issubset(set(result_keys))\n\n    def check_normalize(self, origin_img, result_img, norm_cfg):\n        \"\"\"Check if the origin_img are normalized correctly into result_img in\n        a given norm_cfg.\"\"\"\n        target_img = result_img.copy()\n        target_img *= norm_cfg['std'][None, None, :]\n        target_img += norm_cfg['mean'][None, None, :]\n        if norm_cfg['to_rgb']:\n            target_img = target_img[:, ::-1, ...].copy()\n        self.assert_img_equal(origin_img, target_img)\n\n    def test_normalize(self):\n        with pytest.raises(TypeError):\n            Normalize(['alpha'], dict(mean=[123.675, 116.28, 103.53]),\n                      [58.395, 57.12, 57.375])\n\n        with pytest.raises(TypeError):\n            Normalize(['alpha'], [123.675, 116.28, 103.53],\n                      dict(std=[58.395, 57.12, 57.375]))\n\n        target_keys = ['merged', 'img_norm_cfg']\n\n        merged = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(merged=merged)\n        config = dict(\n            keys=['merged'],\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            to_rgb=False)\n        normalize = Normalize(**config)\n        normalize_results = normalize(results)\n        assert self.check_keys_contain(normalize_results.keys(), target_keys)\n        self.check_normalize(merged, normalize_results['merged'],\n                             normalize_results['img_norm_cfg'])\n\n        merged = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(merged=merged)\n        config = dict(\n            keys=['merged'],\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            to_rgb=True)\n        normalize = Normalize(**config)\n        normalize_results = normalize(results)\n        assert self.check_keys_contain(normalize_results.keys(), target_keys)\n        self.check_normalize(merged, normalize_results['merged'],\n                             normalize_results['img_norm_cfg'])\n\n        assert normalize.__repr__() == (\n            normalize.__class__.__name__ +\n            f\"(keys={ ['merged']}, mean={np.array([123.675, 116.28, 103.53])},\"\n            f' std={np.array([58.395, 57.12, 57.375])}, to_rgb=True)')\n\n        # input is an image list\n        merged = np.random.rand(240, 320, 3).astype(np.float32)\n        merged_2 = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(merged=[merged, merged_2])\n        config = dict(\n            keys=['merged'],\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            to_rgb=False)\n        normalize = Normalize(**config)\n        normalize_results = normalize(results)\n        assert self.check_keys_contain(normalize_results.keys(), target_keys)\n        self.check_normalize(merged, normalize_results['merged'][0],\n                             normalize_results['img_norm_cfg'])\n        self.check_normalize(merged_2, normalize_results['merged'][1],\n                             normalize_results['img_norm_cfg'])\n\n        merged = np.random.rand(240, 320, 3).astype(np.float32)\n        merged_2 = np.random.rand(240, 320, 3).astype(np.float32)\n        results = dict(merged=[merged, merged_2])\n        config = dict(\n            keys=['merged'],\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            to_rgb=True)\n        normalize = Normalize(**config)\n        normalize_results = normalize(results)\n        assert self.check_keys_contain(normalize_results.keys(), target_keys)\n        self.check_normalize(merged, normalize_results['merged'][0],\n                             normalize_results['img_norm_cfg'])\n        self.check_normalize(merged_2, normalize_results['merged'][1],\n                             normalize_results['img_norm_cfg'])\n\n    def test_rescale_to_zero_one(self):\n        target_keys = ['alpha']\n\n        alpha = np.random.rand(240, 320).astype(np.float32)\n        results = dict(alpha=alpha)\n        rescale_to_zero_one = RescaleToZeroOne(keys=['alpha'])\n        rescale_to_zero_one_results = rescale_to_zero_one(results)\n        assert self.check_keys_contain(rescale_to_zero_one_results.keys(),\n                                       target_keys)\n        assert rescale_to_zero_one_results['alpha'].shape == (240, 320)\n        np.testing.assert_almost_equal(rescale_to_zero_one_results['alpha'],\n                                       alpha / 255.)\n        assert repr(rescale_to_zero_one) == (\n            rescale_to_zero_one.__class__.__name__ + f\"(keys={['alpha']})\")\n\n        # input is image list\n        alpha = np.random.rand(240, 320).astype(np.float32)\n        alpha_2 = np.random.rand(240, 320).astype(np.float32)\n        results = dict(alpha=[alpha, alpha_2])\n        rescale_to_zero_one = RescaleToZeroOne(keys=['alpha'])\n        rescale_to_zero_one_results = rescale_to_zero_one(results)\n        assert rescale_to_zero_one_results['alpha'][0].shape == (240, 320)\n        assert rescale_to_zero_one_results['alpha'][1].shape == (240, 320)\n        np.testing.assert_almost_equal(rescale_to_zero_one_results['alpha'][0],\n                                       alpha / 255.)\n        np.testing.assert_almost_equal(rescale_to_zero_one_results['alpha'][1],\n                                       alpha_2 / 255.)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_random_degradations.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (DegradationsWithShuffle, RandomBlur,\n                                        RandomJPEGCompression, RandomNoise,\n                                        RandomResize, RandomVideoCompression)\n\n\ndef test_random_noise():\n    results = {}\n    results['lq'] = np.ones((8, 8, 3)).astype(np.uint8)\n\n    # Gaussian noise\n    model = RandomNoise(\n        params=dict(\n            noise_type=['gaussian'],\n            noise_prob=[1],\n            gaussian_sigma=[0, 50],\n            gaussian_gray_noise_prob=1),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # Poisson noise\n    model = RandomNoise(\n        params=dict(\n            noise_type=['poisson'],\n            noise_prob=[1],\n            poisson_scale=[0, 1],\n            poisson_gray_noise_prob=1),\n        keys=['lq'])\n    results = model(results)\n    shape, dtype = results['lq'].shape, results['lq'].dtype\n    assert {'shape': shape, 'dtype': dtype} == \\\n           {'shape': (8, 8, 3), 'dtype': np.float32}\n\n    # skip degradations with prob < 1\n    params = dict(\n        noise_type=['gaussian'],\n        noise_prob=[1],\n        gaussian_sigma=[0, 50],\n        gaussian_gray_noise_prob=1,\n        prob=0)\n    model = RandomNoise(params=params, keys=['lq'])\n    assert model(results) == results\n\n    assert repr(model) == model.__class__.__name__ + f'(params={params}, ' \\\n        + \"keys=['lq'])\"\n\n\ndef test_random_jpeg_compression():\n    results = {}\n    results['lq'] = np.ones((8, 8, 3)).astype(np.uint8)\n\n    model = RandomJPEGCompression(\n        params=dict(quality=[5, 50], color_type='color'), keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # skip degradations with prob < 1\n    params = dict(quality=[5, 50], color_type='color', prob=0)\n    model = RandomJPEGCompression(params=params, keys=['lq'])\n    assert model(results) == results\n\n    model = RandomJPEGCompression(params=params, keys=['lq'], bgr2rgb=True)\n    assert model(results)['lq'].shape == results['lq'].shape\n\n    assert repr(model) == model.__class__.__name__ + f'(params={params}, ' \\\n        + \"keys=['lq'])\"\n\n\ndef test_random_video_compression():\n    results = {}\n    results['lq'] = [np.ones((8, 8, 3)).astype(np.float32)] * 5\n\n    model = RandomVideoCompression(\n        params=dict(\n            codec=['libx264', 'h264', 'mpeg4'],\n            codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n            bitrate=[1e4, 1e5]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'][0].shape == (8, 8, 3)\n    assert len(results['lq']) == 5\n\n    # skip degradations with prob < 1\n    params = dict(\n        codec=['libx264', 'h264', 'mpeg4'],\n        codec_prob=[1 / 3., 1 / 3., 1 / 3.],\n        bitrate=[1e4, 1e5],\n        prob=0)\n    model = RandomVideoCompression(params=params, keys=['lq'])\n    assert model(results) == results\n\n    assert repr(model) == model.__class__.__name__ + f'(params={params}, ' \\\n        + \"keys=['lq'])\"\n\n\ndef test_random_resize():\n    results = {}\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n\n    # upscale\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[1, 0, 0],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape[0] >= 8 and results['lq'].shape[1] >= 8\n\n    # downscale\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[0, 1, 0],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape[0] <= 8 and results['lq'].shape[1] <= 8\n\n    # keep size\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[0, 0, 1],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape[0] == 8 and results['lq'].shape[1] == 8\n\n    # given target_size\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[0, 0, 1],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            target_size=(16, 32)),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (16, 32, 3)\n\n    # step_size > 0\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[0, 0, 1],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            resize_step=0.05),\n        keys=['lq'])\n    results = model(results)\n\n    # is_size_even is True\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[0, 1, 0],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            resize_step=0.05,\n            is_size_even=True),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape[0] % 2 == 0\n    assert results['lq'].shape[1] % 2 == 0\n\n    # skip degradation\n    model = RandomResize(\n        params=dict(\n            resize_mode_prob=[1, 0, 0],\n            resize_scale=[0.5, 1.5],\n            resize_opt=['bilinear', 'area', 'bicubic'],\n            resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n            prob=0),\n        keys=['lq'])\n    assert model(results) == results\n\n    with pytest.raises(NotImplementedError):\n        params = dict(\n            resize_mode_prob=[1],\n            resize_scale=[1],\n            resize_opt=['abc'],\n            resize_prob=[1])\n        model = RandomResize(params=params, keys=['lq'])\n        results = model(results)\n\n    assert repr(model) == model.__class__.__name__ + f'(params={params}, ' \\\n        + \"keys=['lq'])\"\n\n\ndef test_random_blur():\n    results = {}\n    results['lq'] = np.ones((8, 8, 3)).astype(np.float32)\n\n    # isotropic Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['iso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # anisotropic Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['aniso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # isotropic generalized Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['generalized_iso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # anisotropic generalized Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['generalized_aniso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # isotropic plateau Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['plateau_iso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # anisotropic plateau Gaussian\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[41],\n            kernel_list=['plateau_aniso'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # sinc (kernel size < 13)\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[11],\n            kernel_list=['sinc'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # sinc (kernel size >= 13)\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[15],\n            kernel_list=['sinc'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # sinc (given omega)\n    model = RandomBlur(\n        params=dict(\n            kernel_size=[15],\n            kernel_list=['sinc'],\n            kernel_prob=[1],\n            sigma_x=[0.2, 10],\n            sigma_y=[0.2, 10],\n            rotate_angle=[-3.1416, 3.1416],\n            omega=[0.1, 0.1]),\n        keys=['lq'])\n    results = model(results)\n    assert results['lq'].shape == (8, 8, 3)\n\n    # skip degradation\n    params = dict(\n        kernel_size=[15],\n        kernel_list=['sinc'],\n        kernel_prob=[1],\n        sigma_x=[0.2, 10],\n        sigma_y=[0.2, 10],\n        rotate_angle=[-3.1416, 3.1416],\n        prob=0)\n    model = RandomBlur(params=params, keys=['lq'])\n    assert model(results) == results\n\n    assert repr(model) == model.__class__.__name__ + f'(params={params}, ' \\\n        + \"keys=['lq'])\"\n\n\ndef test_degradations_with_shuffle():\n    results = {}\n    results['lq'] = np.ones((8, 8, 3)).astype(np.uint8)\n\n    # shuffle all\n    model = DegradationsWithShuffle(\n        degradations=[\n            dict(\n                type='RandomBlur',\n                params=dict(\n                    kernel_size=[15],\n                    kernel_list=['sinc'],\n                    kernel_prob=[1],\n                    sigma_x=[0.2, 10],\n                    sigma_y=[0.2, 10],\n                    rotate_angle=[-3.1416, 3.1416],\n                    omega=[0.1, 0.1])),\n            dict(\n                type='RandomResize',\n                params=dict(\n                    resize_mode_prob=[0, 0, 1],\n                    resize_scale=[0.5, 1.5],\n                    resize_opt=['bilinear', 'area', 'bicubic'],\n                    resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n                    target_size=(16, 16))),\n            [\n                dict(\n                    type='RandomJPEGCompression',\n                    params=dict(quality=[5, 10], color_type='color')),\n                dict(\n                    type='RandomJPEGCompression',\n                    params=dict(quality=[15, 20], color_type='color'))\n            ]\n        ],\n        keys=['lq'],\n        shuffle_idx=None)\n    model(results)\n\n    # shuffle last 2\n    degradations = [\n        dict(\n            type='RandomBlur',\n            params=dict(\n                kernel_size=[15],\n                kernel_list=['sinc'],\n                kernel_prob=[1],\n                sigma_x=[0.2, 10],\n                sigma_y=[0.2, 10],\n                rotate_angle=[-3.1416, 3.1416],\n                omega=[0.1, 0.1])),\n        dict(\n            type='RandomResize',\n            params=dict(\n                resize_mode_prob=[0, 0, 1],\n                resize_scale=[0.5, 1.5],\n                resize_opt=['bilinear', 'area', 'bicubic'],\n                resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n                target_size=(16, 16))),\n        [\n            dict(\n                type='RandomJPEGCompression',\n                params=dict(quality=[5, 10], color_type='color')),\n            dict(\n                type='RandomJPEGCompression',\n                params=dict(quality=[15, 20], color_type='color'))\n        ]\n    ]\n    model = DegradationsWithShuffle(\n        degradations=degradations, keys=['lq'], shuffle_idx=(1, 2))\n    model(results)\n\n    assert repr(model) == model.__class__.__name__ \\\n        + f'(degradations={degradations}, ' \\\n        + \"keys=['lq'], \" \\\n        + 'shuffle_idx=(1, 2))'\n\n    # shuffle all image degradations multiple times\n    degradations = [\n        dict(\n            type='RandomBlur',\n            params=dict(\n                kernel_size=[15],\n                kernel_list=['sinc'],\n                kernel_prob=[1],\n                sigma_x=[0.2, 10],\n                sigma_y=[0.2, 10],\n                rotate_angle=[-3.1416, 3.1416],\n                omega=[0.1, 0.1])),\n        dict(\n            type='RandomResize',\n            params=dict(\n                resize_mode_prob=[0.4, 0.4, 0.2],\n                resize_scale=[0.5, 1.5],\n                resize_opt=['bilinear', 'area', 'bicubic'],\n                resize_prob=[1 / 3., 1 / 3., 1 / 3.],\n                resize_step=0.05)),\n        dict(\n            type='RandomNoise',\n            params=dict(\n                noise_type=['gaussian', 'poisson'],\n                noise_prob=[0.4, 0.6],\n                gaussian_sigma=[0, 20],\n                gaussian_gray_noise_prob=1.,\n                gaussian_sigma_step=0.05,\n                poisson_scale=[0., 1.],\n                poisson_gray_noise_prob=1.,\n                scale_step=0.05)),\n        dict(\n            type='RandomJPEGCompression',\n            params=dict(quality=[5, 10], color_type='color'))\n    ] * 10\n    model = DegradationsWithShuffle(degradations=degradations, keys=['lq'])\n    model(results)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_random_down_sampling.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\n\nfrom mmagic.datasets.transforms import RandomDownSampling\n\n\ndef test_random_down_sampling():\n    img1 = np.uint8(np.random.randn(480, 640, 3) * 255)\n    inputs1 = dict(gt=img1)\n    down_sampling1 = RandomDownSampling(\n        scale_min=1, scale_max=4, patch_size=None)\n    results1 = down_sampling1(inputs1)\n    assert set(list(results1.keys())) == set(['gt', 'img', 'scale'])\n    assert repr(down_sampling1) == (\n        down_sampling1.__class__.__name__ +\n        f' scale_min={down_sampling1.scale_min}, ' +\n        f'scale_max={down_sampling1.scale_max}, ' +\n        f'patch_size={down_sampling1.patch_size}, ' +\n        f'interpolation={down_sampling1.interpolation}, ' +\n        f'backend={down_sampling1.backend}')\n\n    img2 = np.uint8(np.random.randn(480, 640, 3) * 255)\n    inputs2 = dict(gt=img2)\n    down_sampling2 = RandomDownSampling(\n        scale_min=1, scale_max=4, patch_size=48)\n    results2 = down_sampling2(inputs2)\n    assert set(list(results2.keys())) == set(['gt', 'img', 'scale'])\n    assert repr(down_sampling2) == (\n        down_sampling2.__class__.__name__ +\n        f' scale_min={down_sampling2.scale_min}, ' +\n        f'scale_max={down_sampling2.scale_max}, ' +\n        f'patch_size={down_sampling2.patch_size}, ' +\n        f'interpolation={down_sampling2.interpolation}, ' +\n        f'backend={down_sampling2.backend}')\n\n    # test copy meta info\n    img3 = np.uint8(np.random.randn(480, 640, 3) * 255)\n    inputs3 = dict(gt=img3, gt_channel_order='rgb', gt_color_type='color')\n    down_sampling3 = RandomDownSampling(\n        scale_min=1, scale_max=4, patch_size=48)\n    results3 = down_sampling3(inputs3)\n    assert results3['img_channel_order'] == 'rgb'\n    assert results3['img_color_type'] == 'color'\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_trimap.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport cv2\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (FormatTrimap, GenerateTrimap,\n                                        GenerateTrimapWithDistTransform,\n                                        TransformTrimap)\n\n\ndef assert_keys_contain(result_keys, target_keys):\n    \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n    assert set(target_keys).issubset(set(result_keys))\n\n\ndef generate_ref_trimap(alpha, kernel_size, iterations, random):\n    \"\"\"Check if a trimap's value is correct.\"\"\"\n    if isinstance(kernel_size, int):\n        kernel_size = kernel_size, kernel_size + 1\n    if isinstance(iterations, int):\n        iterations = iterations, iterations + 1\n\n    if random:\n        min_kernel, max_kernel = kernel_size\n        kernel_num = max_kernel - min_kernel\n        erode_ksize = min_kernel + np.random.randint(kernel_num)\n        erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                 (erode_ksize, erode_ksize))\n        dilate_ksize = min_kernel + np.random.randint(kernel_num)\n        dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                  (dilate_ksize, dilate_ksize))\n\n        min_iteration, max_iteration = iterations\n        erode_iter = np.random.randint(min_iteration, max_iteration)\n        dilate_iter = np.random.randint(min_iteration, max_iteration)\n    else:\n        erode_ksize, dilate_ksize = kernel_size\n        erode_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                 (erode_ksize, erode_ksize))\n        dilate_kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                                  (dilate_ksize, dilate_ksize))\n        erode_iter, dilate_iter = iterations\n\n    h, w = alpha.shape\n\n    # erode\n    erode_kh = erode_kw = erode_ksize\n    eroded = np.zeros_like(alpha)\n    src = alpha\n    pad = ((erode_kh // 2, (erode_kh - 1) // 2), (erode_kw // 2,\n                                                  (erode_kw - 1) // 2))\n    for _ in range(erode_iter):\n        src = np.pad(src, pad, 'constant', constant_values=np.max(src))\n        for i in range(h):\n            for j in range(w):\n                target = src[i:i + erode_kh, j:j + erode_kw]\n                eroded[i, j] = np.min(\n                    (target * erode_kernel)[erode_kernel == 1])\n        src = eroded\n\n    # dilate\n    dilate_kh = dilate_kw = dilate_ksize\n    dilated = np.zeros_like(alpha)\n    src = alpha\n    pad = ((dilate_kh // 2, (dilate_kh - 1) // 2), (dilate_kw // 2,\n                                                    (dilate_kw - 1) // 2))\n    for _ in range(dilate_iter):\n        src = np.pad(src, pad, constant_values=np.min(src))\n        for i in range(h):\n            for j in range(w):\n                target = src[i:i + dilate_kh, j:j + dilate_kw]\n                dilated[i, j] = np.max(\n                    (target * dilate_kernel)[dilate_kernel == 1])\n        src = dilated\n\n    ref_trimap = np.zeros_like(alpha)\n    ref_trimap.fill(128)\n    ref_trimap[eroded >= 255] = 255\n    ref_trimap[dilated <= 0] = 0\n    return ref_trimap\n\n\ndef test_format_trimap():\n    ori_trimap = np.random.randint(3, size=(64, 64))\n    ori_trimap[ori_trimap == 1] = 128\n    ori_trimap[ori_trimap == 2] = 255\n\n    results = dict(trimap=ori_trimap.copy())\n    format_trimap = FormatTrimap(to_onehot=False)\n    results = format_trimap(results)\n    result_trimap = results['trimap']\n    assert repr(format_trimap) == format_trimap.__class__.__name__ + (\n        '(to_onehot=False)')\n    assert result_trimap.shape == (64, 64)\n    assert ((result_trimap == 0) == (ori_trimap == 0)).all()\n    assert ((result_trimap == 1) == (ori_trimap == 128)).all()\n    assert ((result_trimap == 2) == (ori_trimap == 255)).all()\n    assert results['format_trimap_to_onehot'] is False\n\n    results = dict(trimap=ori_trimap.copy())\n    format_trimap = FormatTrimap(to_onehot=True)\n    results = format_trimap(results)\n    result_trimap = results['trimap']\n    assert repr(format_trimap) == format_trimap.__class__.__name__ + (\n        '(to_onehot=True)')\n    assert result_trimap.shape == (64, 64, 3)\n    assert ((result_trimap[..., 0] == 1) == (ori_trimap == 0)).all()\n    assert ((result_trimap[..., 1] == 1) == (ori_trimap == 128)).all()\n    assert ((result_trimap[..., 2] == 1) == (ori_trimap == 255)).all()\n    assert results['format_trimap_to_onehot'] is True\n\n\ndef test_generate_trimap():\n\n    with pytest.raises(ValueError):\n        # kernel_size must be an int or a tuple of 2 int\n        GenerateTrimap(1.5)\n\n    with pytest.raises(ValueError):\n        # kernel_size must be an int or a tuple of 2 int\n        GenerateTrimap((3, 3, 3))\n\n    with pytest.raises(ValueError):\n        # iterations must be an int or a tuple of 2 int\n        GenerateTrimap(3, iterations=1.5)\n\n    with pytest.raises(ValueError):\n        # iterations must be an int or a tuple of 2 int\n        GenerateTrimap(3, iterations=(3, 3, 3))\n\n    target_keys = ['alpha', 'trimap']\n\n    # check random mode\n    kernel_size = (3, 5)\n    iterations = (3, 5)\n    random = True\n    alpha = np.random.randn(32, 32)\n    results = dict(alpha=alpha)\n    generate_trimap = GenerateTrimap(kernel_size, iterations, random)\n    np.random.seed(123)\n    generate_trimap_results = generate_trimap(results)\n    trimap = generate_trimap_results['trimap']\n\n    assert_keys_contain(generate_trimap_results.keys(), target_keys)\n    assert trimap.shape == alpha.shape\n    np.random.seed(123)\n    ref_trimap = generate_ref_trimap(alpha, kernel_size, iterations, random)\n    assert (trimap == ref_trimap).all()\n\n    # check non-random mode\n    kernel_size = (3, 5)\n    iterations = (5, 3)\n    random = False\n    generate_trimap = GenerateTrimap(kernel_size, iterations, random)\n    generate_trimap_results = generate_trimap(results)\n    trimap = generate_trimap_results['trimap']\n\n    assert_keys_contain(generate_trimap_results.keys(), target_keys)\n    assert trimap.shape == alpha.shape\n    ref_trimap = generate_ref_trimap(alpha, kernel_size, iterations, random)\n    assert (trimap == ref_trimap).all()\n\n    # check repr string\n    kernel_size = 1\n    iterations = 1\n    generate_trimap = GenerateTrimap(kernel_size, iterations)\n    kernels = [\n        cv2.getStructuringElement(cv2.MORPH_ELLIPSE,\n                                  (kernel_size, kernel_size))\n    ]\n    assert repr(generate_trimap) == (\n        generate_trimap.__class__.__name__ +\n        f'(kernels={kernels}, iterations={(iterations, iterations + 1)}, '\n        f'random=True)')\n\n\ndef test_generate_trimap_with_dist_transform():\n    with pytest.raises(ValueError):\n        # dist_thr must be an float that is greater than 1\n        GenerateTrimapWithDistTransform(dist_thr=-1)\n\n    target_keys = ['alpha', 'trimap']\n\n    alpha = np.random.randint(0, 256, (32, 32))\n    alpha[:8, :8] = 0\n    alpha[-8:, -8:] = 255\n    results = dict(alpha=alpha)\n    generate_trimap = GenerateTrimapWithDistTransform(dist_thr=3, random=False)\n    generate_trimap_results = generate_trimap(results)\n    trimap = generate_trimap_results['trimap']\n    assert_keys_contain(generate_trimap_results.keys(), target_keys)\n    assert trimap.shape == alpha.shape\n\n    alpha = np.random.randint(0, 256, (32, 32))\n    results = dict(alpha=alpha)\n    generate_trimap = GenerateTrimapWithDistTransform(dist_thr=3, random=True)\n    generate_trimap_results = generate_trimap(results)\n    trimap = generate_trimap_results['trimap']\n    assert_keys_contain(generate_trimap_results.keys(), target_keys)\n    assert trimap.shape == alpha.shape\n\n    assert repr(generate_trimap) == (\n        generate_trimap.__class__.__name__ + '(dist_thr=3, random=True)')\n\n\ndef test_transform_trimap():\n    results = dict()\n    transform = TransformTrimap()\n    target_keys = ['trimap', 'transformed_trimap']\n\n    with pytest.raises(KeyError):\n        results_transformed = transform(results)\n\n    with pytest.raises(AssertionError):\n        dummy_trimap = np.zeros((100, 100, 1), dtype=np.uint8)\n        results['trimap'] = dummy_trimap\n        results_transformed = transform(results)\n\n    results = dict()\n    # generate dummy trimap with shape (100,100)\n    dummy_trimap = np.zeros((100, 100), dtype=np.uint8)\n    dummy_trimap[:50, :50] = 255\n    results['trimap'] = dummy_trimap\n    results_transformed = transform(results)\n    assert_keys_contain(results_transformed.keys(), target_keys)\n    assert results_transformed['trimap'].shape == dummy_trimap.shape\n    assert results_transformed[\n        'transformed_trimap'].shape[:2] == dummy_trimap.shape\n    repr_str = transform.__class__.__name__\n    assert repr(transform) == repr_str\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_transforms/test_values.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import CopyValues, SetValues\n\n\nclass TestAugmentations:\n\n    @classmethod\n    def setup_class(cls):\n\n        cls.results = dict()\n        cls.gt = np.random.randint(0, 256, (256, 128, 3), dtype=np.uint8)\n        cls.img = np.random.randint(0, 256, (64, 32, 3), dtype=np.uint8)\n\n        cls.results = dict(\n            img=cls.img,\n            gt=cls.gt,\n            scale=4,\n            img_path='fake_img_path',\n            gt_path='fake_gt_path')\n\n        cls.results['ori_img'] = np.random.randint(\n            0, 256, (256, 256, 3), dtype=np.uint8)\n        cls.results['mask'] = np.random.randint(\n            0, 256, (256, 256, 1), dtype=np.uint8)\n        # cls.results['img_tensor'] = torch.rand((3, 256, 256))\n        # cls.results['mask_tensor'] = torch.zeros((1, 256, 256))\n        # cls.results['mask_tensor'][:, 50:150, 40:140] = 1.\n\n    def test_copy_value(self):\n\n        with pytest.raises(AssertionError):\n            CopyValues(src_keys='gt', dst_keys='img')\n        with pytest.raises(ValueError):\n            CopyValues(src_keys=['gt', 'gt'], dst_keys=['img'])\n\n        results = {}\n        results['gt'] = np.zeros((1)).astype(np.float32)\n\n        copy_ = CopyValues(src_keys=['gt'], dst_keys=['img'])\n        assert np.array_equal(copy_(results)['img'], results['gt'])\n        assert repr(copy_) == copy_.__class__.__name__ + (\"(src_keys=['gt'])\"\n                                                          \"(dst_keys=['img'])\")\n\n    def test_set_value(self):\n\n        with pytest.raises(AssertionError):\n            CopyValues(src_keys='gt', dst_keys='img')\n        with pytest.raises(ValueError):\n            CopyValues(src_keys=['gt', 'gt'], dst_keys=['img'])\n\n        results = {}\n        results['gt'] = np.zeros((1)).astype(np.float32)\n        dictionary = dict(a='b')\n\n        set_values = SetValues(dictionary=dictionary)\n        new_results = set_values(results)\n        for key in dictionary.keys():\n            assert new_results[key] == dictionary[key]\n        assert repr(set_values) == (\n            set_values.__class__.__name__ + f'(dictionary={dictionary})')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_datasets/test_unpaired_image_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\n\nfrom mmagic.datasets import UnpairedImageDataset\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestUnpairedImageDataset(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.imgs_root = osp.join(\n            osp.dirname(osp.dirname(__file__)), 'data/unpaired')\n        cls.default_pipeline = [\n            dict(type='LoadImageFromFile', key='img_a', color_type='color'),\n            dict(type='LoadImageFromFile', key='img_b', color_type='color'),\n            dict(\n                type='TransformBroadcaster',\n                mapping={'img': ['img_a', 'img_b']},\n                auto_remap=True,\n                share_random_params=True,\n                transforms=[\n                    dict(\n                        type='Resize',\n                        scale=(286, 286),\n                        interpolation='bicubic')\n                ]),\n            dict(\n                type='Crop',\n                keys=['img_a', 'img_b'],\n                crop_size=(256, 256),\n                random_crop=True),\n            dict(type='Flip', direction='horizontal', keys=['img_a', 'img_b']),\n            dict(type='PackInputs', keys=['img_a', 'img_b']),\n        ]\n\n    def test_unpaired_image_dataset(self):\n        dataset = UnpairedImageDataset(\n            self.imgs_root,\n            pipeline=self.default_pipeline,\n            domain_a='a',\n            domain_b='b')\n        assert len(dataset) == 2\n        img = dataset[0]['inputs']['img_a']\n        assert img.ndim == 3\n        img = dataset[0]['inputs']['img_b']\n        assert img.ndim == 3\n\n        dataset = UnpairedImageDataset(\n            self.imgs_root,\n            pipeline=self.default_pipeline,\n            io_backend='local',\n            domain_a='a',\n            domain_b='b')\n        assert len(dataset) == 2\n        img = dataset[0]['inputs']['img_a']\n        assert img.ndim == 3\n        img = dataset[0]['inputs']['img_b']\n        assert img.ndim == 3\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_ema.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import MMDistributedDataParallel\nfrom packaging import version\n\nfrom mmagic.engine import ExponentialMovingAverageHook\n\n\nclass SimpleModule(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.a = nn.Parameter(torch.tensor([1., 2.]))\n        if version.parse(torch.__version__) >= version.parse('1.7.0'):\n            self.register_buffer('b', torch.tensor([2., 3.]), persistent=True)\n            self.register_buffer('c', torch.tensor([0., 1.]), persistent=False)\n        else:\n            self.register_buffer('b', torch.tensor([2., 3.]))\n            self.c = torch.tensor([0., 1.])\n\n\nclass SimpleModel(nn.Module):\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.module_a = SimpleModule()\n        self.module_b = SimpleModule()\n\n        self.module_a_ema = SimpleModule()\n        self.module_b_ema = SimpleModule()\n\n\nclass SimpleModelNoEMA(nn.Module):\n\n    def __init__(self) -> None:\n        super().__init__()\n        self.module_a = SimpleModule()\n        self.module_b = SimpleModule()\n\n\nclass SimpleRunner:\n\n    def __init__(self):\n        self.model = SimpleModel()\n        self.iter = 0\n\n\nclass TestEMA:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_config = dict(\n            module_keys=('module_a_ema', 'module_b_ema'),\n            interval=1,\n            interp_cfg=dict(momentum=0.5))\n        cls.runner = SimpleRunner()\n\n    @torch.no_grad()\n    def test_ema_hook(self):\n        cfg_ = deepcopy(self.default_config)\n        cfg_['interval'] = -1\n        ema = ExponentialMovingAverageHook(**cfg_)\n        ema.before_run(self.runner)\n        ema.after_train_iter(self.runner, 1)\n\n        module_a = self.runner.model.module_a\n        module_a_ema = self.runner.model.module_a_ema\n\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(ema_states['a'], torch.tensor([1., 2.]))\n\n        ema = ExponentialMovingAverageHook(**self.default_config)\n        ema.after_train_iter(self.runner, 1)\n\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(ema_states['a'], torch.tensor([1., 2.]))\n\n        module_a.b /= 2.\n        module_a.a.data /= 2.\n        module_a.c /= 2.\n\n        self.runner.iter += 1\n        ema.after_train_iter(self.runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(self.runner.model.module_a.a,\n                           torch.tensor([0.5, 1.]))\n        assert torch.equal(ema_states['a'], torch.tensor([0.75, 1.5]))\n        assert torch.equal(ema_states['b'], torch.tensor([1., 1.5]))\n        assert 'c' not in ema_states\n\n        # check for the validity of args\n        with pytest.raises(AssertionError):\n            _ = ExponentialMovingAverageHook(module_keys=['a'])\n\n        with pytest.raises(AssertionError):\n            _ = ExponentialMovingAverageHook(module_keys=('a'))\n\n        with pytest.raises(AssertionError):\n            _ = ExponentialMovingAverageHook(\n                module_keys=('module_a_ema'), interp_mode='xxx')\n\n        # test before run\n        ema = ExponentialMovingAverageHook(**self.default_config)\n        self.runner.model = SimpleModelNoEMA()\n        self.runner.iter = 0\n        ema.before_run(self.runner)\n        assert hasattr(self.runner.model, 'module_a_ema')\n\n        module_a = self.runner.model.module_a\n        module_a_ema = self.runner.model.module_a_ema\n\n        ema.after_train_iter(self.runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(ema_states['a'], torch.tensor([1., 2.]))\n\n        module_a.b /= 2.\n        module_a.a.data /= 2.\n        module_a.c /= 2.\n\n        self.runner.iter += 1\n        ema.after_train_iter(self.runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(self.runner.model.module_a.a,\n                           torch.tensor([0.5, 1.]))\n        assert torch.equal(ema_states['a'], torch.tensor([0.75, 1.5]))\n        assert torch.equal(ema_states['b'], torch.tensor([1., 1.5]))\n        assert 'c' not in ema_states\n\n        # test ema with simple warm up\n        runner = SimpleRunner()\n        cfg_ = deepcopy(self.default_config)\n        cfg_.update(dict(start_iter=3, interval=1))\n        ema = ExponentialMovingAverageHook(**cfg_)\n        ema.before_run(runner)\n\n        module_a = runner.model.module_a\n        module_a_ema = runner.model.module_a_ema\n\n        module_a.a.data /= 2.\n\n        runner.iter += 1\n        ema.after_train_iter(runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(runner.model.module_a.a, torch.tensor([0.5, 1.]))\n        assert torch.equal(ema_states['a'], torch.tensor([0.5, 1.]))\n\n        module_a.a.data /= 2\n        runner.iter += 2\n        ema.after_train_iter(runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(runner.model.module_a.a, torch.tensor([0.25, 0.5]))\n        assert torch.equal(ema_states['a'], torch.tensor([0.375, 0.75]))\n\n        # test warning\n        with pytest.warns(UserWarning):\n            default_config = dict(\n                module_keys=('module_a_ema', 'module_b_ema'),\n                interval=1,\n                interp_cfg=dict(momentum=0.6))\n            cfg_ = deepcopy(default_config)\n            ema = ExponentialMovingAverageHook(**cfg_)\n            ema.lerp(\n                torch.tensor([0.25, 0.5]),\n                torch.tensor([0.25, 0.5]),\n                momentum=0.6)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_ema_hook_cuda(self):\n        ema = ExponentialMovingAverageHook(**self.default_config)\n        cuda_runner = SimpleRunner()\n        cuda_runner.model = cuda_runner.model.cuda()\n        ema.after_train_iter(cuda_runner, 1)\n\n        module_a = cuda_runner.model.module_a\n        module_a_ema = cuda_runner.model.module_a_ema\n\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(ema_states['a'], torch.tensor([1., 2.]).cuda())\n\n        module_a.b /= 2.\n        module_a.a.data /= 2.\n        module_a.c /= 2.\n\n        cuda_runner.iter += 1\n        ema.after_train_iter(cuda_runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(cuda_runner.model.module_a.a,\n                           torch.tensor([0.5, 1.]).cuda())\n        assert torch.equal(ema_states['a'], torch.tensor([0.75, 1.5]).cuda())\n        assert torch.equal(ema_states['b'], torch.tensor([1., 1.5]).cuda())\n        assert 'c' not in ema_states\n\n        # test before run\n        ema = ExponentialMovingAverageHook(**self.default_config)\n        model_ = SimpleModelNoEMA().cuda()\n        self.runner.model = MagicMock(spec=MMDistributedDataParallel)\n        self.runner.model.module = model_\n\n        self.runner.iter = 0\n        ema.before_run(self.runner)\n        assert hasattr(self.runner.model.module, 'module_a_ema')\n\n        module_a = self.runner.model.module.module_a\n        module_a_ema = self.runner.model.module.module_a_ema\n\n        ema.after_train_iter(self.runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(ema_states['a'], torch.tensor([1., 2.]).cuda())\n\n        module_a.b /= 2.\n        module_a.a.data /= 2.\n        module_a.c /= 2.\n\n        self.runner.iter += 1\n        ema.after_train_iter(self.runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(self.runner.model.module.module_a.a,\n                           torch.tensor([0.5, 1.]).cuda())\n        assert torch.equal(ema_states['a'], torch.tensor([0.75, 1.5]).cuda())\n        assert torch.equal(ema_states['b'], torch.tensor([1., 1.5]).cuda())\n        assert 'c' not in ema_states\n\n        # test ema with simple warm up\n        runner = SimpleRunner()\n        runner.model = runner.model.cuda()\n        cfg_ = deepcopy(self.default_config)\n        cfg_.update(dict(start_iter=3, interval=1))\n        ema = ExponentialMovingAverageHook(**cfg_)\n        ema.before_run(runner)\n\n        module_a = runner.model.module_a\n        module_a_ema = runner.model.module_a_ema\n\n        module_a.a.data /= 2.\n\n        runner.iter += 1\n        ema.after_train_iter(runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(runner.model.module_a.a,\n                           torch.tensor([0.5, 1.]).cuda())\n        assert torch.equal(ema_states['a'], torch.tensor([0.5, 1.]).cuda())\n\n        module_a.a.data /= 2\n        runner.iter += 2\n        ema.after_train_iter(runner, 1)\n        ema_states = module_a_ema.state_dict()\n        assert torch.equal(runner.model.module_a.a,\n                           torch.tensor([0.25, 0.5]).cuda())\n        assert torch.equal(ema_states['a'], torch.tensor([0.375, 0.75]).cuda())\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_iter_time_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, Mock, patch\n\nfrom mmengine.logging import MessageHub\n\nfrom mmagic.engine import IterTimerHook\n\n\ndef time_patch():\n    if not hasattr(time_patch, 'time'):\n        time_patch.time = 0\n    else:\n        time_patch.time += 1\n    return time_patch.time\n\n\nclass TestIterTimerHook(TestCase):\n\n    def setUp(self) -> None:\n        self.hook = IterTimerHook()\n\n    def test_init(self):\n        assert self.hook.time_sec_tot == 0\n        assert self.hook.start_iter == 0\n\n    def test_before_train(self):\n        runner = MagicMock()\n        runner.iter = 1\n        self.hook.before_train(runner)\n        assert self.hook.start_iter == 1\n\n    def test_before_epoch(self):\n        runner = Mock()\n        self.hook._before_epoch(runner)\n        assert isinstance(self.hook.t, float)\n\n    @patch('time.time', MagicMock(return_value=1))\n    def test_before_iter(self):\n        runner = MagicMock()\n        runner.log_buffer = dict()\n        self.hook._before_epoch(runner)\n        for mode in ('train', 'val', 'test'):\n            self.hook._before_iter(runner, batch_idx=1, mode=mode)\n            runner.message_hub.update_scalar.assert_called_with(\n                f'{mode}/data_time', 0)\n\n    @patch('time.time', time_patch)\n    def test_after_iter(self):\n        runner = MagicMock()\n        runner.log_buffer = dict()\n        runner.log_processor.window_size = 10\n        runner.max_iters = 100\n        runner.iter = 0\n        runner.test_loop.total_length = 20\n        runner.val_loop.total_length = 20\n        self.hook._before_epoch(runner)\n        self.hook.before_run(runner)\n        self.hook._after_iter(runner, batch_idx=1)\n        runner.message_hub.update_scalar.assert_called()\n        runner.message_hub.get_log.assert_not_called()\n        runner.message_hub.update_info.assert_not_called()\n        runner.message_hub = MessageHub.get_instance('test_iter_timer_hook')\n        runner.iter = 9\n        # eta = (100 - 10) / 1\n        self.hook._after_iter(runner, batch_idx=89)\n        assert runner.message_hub.get_info('eta') == 90\n        self.hook._after_iter(runner, batch_idx=9, mode='val')\n        assert runner.message_hub.get_info('eta') == 10\n        self.hook._after_iter(runner, batch_idx=19, mode='test')\n        assert runner.message_hub.get_info('eta') == 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_pggan_fetch_data_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nfrom mmengine.dataset import DefaultSampler, InfiniteSampler, pseudo_collate\nfrom mmengine.runner import IterBasedTrainLoop\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.engine import PGGANFetchDataHook\nfrom mmagic.registry import DATASETS, MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestPGGANFetchDataHook(TestCase):\n\n    pggan_cfg = dict(\n        type='ProgressiveGrowingGAN',\n        data_preprocessor=dict(type='DataPreprocessor'),\n        noise_size=512,\n        generator=dict(type='PGGANGenerator', out_scale=8),\n        discriminator=dict(type='PGGANDiscriminator', in_scale=8),\n        nkimgs_per_scale={\n            '4': 600,\n            '8': 1200,\n            '16': 1200,\n            '32': 1200,\n            '64': 1200,\n            '128': 12000\n        },\n        transition_kimgs=600,\n        ema_config=dict(interval=1))\n\n    imgs_root = osp.join(osp.dirname(__file__), '..', '..', 'data/image')\n    grow_scale_dataset_cfg = dict(\n        type='GrowScaleImgDataset',\n        data_roots={\n            '4': imgs_root,\n            '8': osp.join(imgs_root, 'img_root'),\n            '32': osp.join(imgs_root, 'img_root', 'grass')\n        },\n        gpu_samples_base=4,\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4\n        },\n        len_per_stage=10,\n        pipeline=[dict(type='LoadImageFromFile', key='img')])\n\n    def test_before_train_iter(self):\n        runner = MagicMock()\n        model = MODELS.build(self.pggan_cfg)\n        dataset = DATASETS.build(self.grow_scale_dataset_cfg)\n\n        # test default sampler\n        default_sampler = DefaultSampler(dataset)\n        dataloader = DataLoader(\n            batch_size=64,\n            dataset=dataset,\n            sampler=default_sampler,\n            collate_fn=pseudo_collate)\n\n        runner.train_loop = MagicMock(spec=IterBasedTrainLoop)\n        runner.train_loop.dataloader = dataloader\n        runner.model = model\n\n        hooks = PGGANFetchDataHook()\n        hooks.before_train_iter(runner, 0, None)\n\n        for scale, target_bz in self.grow_scale_dataset_cfg[\n                'gpu_samples_per_scale'].items():\n\n            model._next_scale_int = torch.tensor(int(scale), dtype=torch.int32)\n            hooks.before_train_iter(runner, 0, None)\n            self.assertEqual(runner.train_loop.dataloader.batch_size,\n                             target_bz)\n            # check attribute of default sampler\n            sampler = runner.train_loop.dataloader.sampler\n            self.assertEqual(sampler.seed, default_sampler.seed)\n            self.assertEqual(sampler.shuffle, default_sampler.shuffle)\n            self.assertEqual(sampler.round_up, default_sampler.round_up)\n\n        # set `_next_scale_int` as int\n        delattr(model, '_next_scale_int')\n        setattr(model, '_next_scale_int', 128)\n        hooks.before_train_iter(runner, 0, None)\n        self.assertEqual(runner.train_loop.dataloader.batch_size, 4)\n\n        # test InfinitySampler\n        infinite_sampler = InfiniteSampler(dataset)\n        dataloader = DataLoader(\n            batch_size=64,\n            dataset=dataset,\n            sampler=infinite_sampler,\n            collate_fn=pseudo_collate)\n        runner.train_loop.dataloader = dataloader\n        for scale, target_bz in self.grow_scale_dataset_cfg[\n                'gpu_samples_per_scale'].items():\n\n            model._next_scale_int = torch.tensor(int(scale), dtype=torch.int32)\n            hooks.before_train_iter(runner, 0, None)\n            self.assertEqual(runner.train_loop.dataloader.batch_size,\n                             target_bz)\n            # check attribute of infinite sampler\n            sampler = runner.train_loop.dataloader.sampler\n            self.assertEqual(sampler.seed, infinite_sampler.seed)\n            self.assertEqual(sampler.shuffle, infinite_sampler.shuffle)\n\n        # test do not update + `IterBasedTrainLoop`\n        hooks.before_train_iter(runner, 1, None)\n\n        # test not `IterBasedTrainLoop`\n        runner.train_loop = MagicMock()\n        runner.train_loop.dataloader = dataloader\n        runner.model = model\n        model._next_scale_int = 8\n        # test update\n        hooks.before_train_iter(runner, 0, None)\n        # test do not update\n        hooks.before_train_iter(runner, 1, None)\n\n        # test invalid sampler type\n        dataloader = DataLoader(\n            batch_size=64, dataset=dataset, collate_fn=pseudo_collate)\n        runner.train_loop.dataloader = dataloader\n        model._next_scale_int = 4\n        self.assertRaises(ValueError, hooks.before_train_iter, runner, 0, None)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_pickle_data_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.engine.hooks import PickleDataHook\n\n\nclass ToyModel(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.a = torch.randn(10, 10)\n        self.b = np.random.random((10, 10))\n\n\ndef test_PickleDataHook():\n    hook = PickleDataHook(\n        output_dir='./', data_name_list=['a', 'b', 'c'], interval=3)\n    runner = MagicMock()\n    runner.work_dir = './test/data'\n    runner.iter = 0\n    runner.model = ToyModel()\n\n    # test after train iter\n    hook.after_train_iter(runner, 0, None, None)\n    hook.data_name_list = ['a', 'b']\n    hook.after_train_iter(runner, 0, None, None)\n\n    runner.model = MagicMock()\n    runner.model.module = ToyModel()\n    hook._pickle_data(runner)\n\n    runner.iter = 2\n    hook.after_train_iter(runner, 0, None, None)\n\n    # test after run\n    hook.after_run(runner)\n\n    # test before run\n    hook.before_run(runner)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_reduce_lr_scheduler_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import Mock\n\nimport pytest\nimport torch\nimport torch.nn.functional as F\nfrom mmengine import MessageHub\n\nfrom mmagic.engine.hooks import ReduceLRSchedulerHook\n\n\nclass ToyModel(torch.nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.conv1 = torch.nn.Conv2d(1, 1, 1)\n        self.conv2 = torch.nn.Conv2d(1, 1, 1)\n\n    def forward(self, x):\n        return self.conv2(F.relu(self.conv1(x)))\n\n\ndef test_reduce_lr_scheduler_hook():\n\n    scheduler = [Mock()]\n    scheduler[0].step = Mock()\n\n    runner = Mock()\n    runner.epoch = 0\n    runner.iter = 0\n    runner.param_schedulers = scheduler\n    runner.message_hub = MessageHub.get_instance('test-reduce-lr-scheduler')\n    runner.message_hub.update_scalar('train/loss', 0.1)\n\n    hook = ReduceLRSchedulerHook(val_metric=None, by_epoch=True, interval=2)\n    scheduler[0].by_epoch = True\n    hook.after_train_iter(runner, 0, data_batch=[dict(a=1)] * 3)\n    runner.message_hub.update_scalar('train/loss', 0.2)\n    hook.after_train_iter(runner, 0, data_batch=[dict(a=1)] * 2)\n    assert abs(hook.sum_value - 0.7) < 1e-8\n    assert hook.count == 5\n    hook.after_train_epoch(runner)\n    runner.epoch += 1\n    assert abs(hook.sum_value - 0.7) < 1e-8\n    assert hook.count == 5\n    hook.after_train_epoch(runner)\n    scheduler[0].step.assert_called()\n    assert abs(hook.sum_value - 0) < 1e-8\n    assert hook.count == 0\n    value = hook.message_hub.get_scalar('value').current()\n    assert abs(value - 0.14) < 1e-8\n    hook.after_val_iter(runner, 0, data_batch=[dict(a=1)] * 2)\n    hook.after_val_epoch(runner)\n\n    hook = ReduceLRSchedulerHook(val_metric=None, by_epoch=False, interval=2)\n    scheduler[0].by_epoch = False\n    runner.message_hub.update_scalar('train/loss', 0.1)\n    hook.after_train_iter(runner, 0, data_batch=[dict(a=1)] * 3)\n    runner.iter += 1\n    assert abs(hook.sum_value - 0.3) < 1e-8\n    assert hook.count == 3\n    runner.message_hub.update_scalar('train/loss', 0.3)\n    hook.after_train_iter(runner, 0, data_batch=[dict(a=1)] * 2)\n    scheduler[0].step.assert_called()\n    value = hook.message_hub.get_scalar('value').current()\n    assert abs(value - 0.18) < 1e-8\n    assert abs(hook.sum_value - 0) < 1e-8\n    assert hook.count == 0\n    hook.after_train_epoch(runner)\n    hook.after_val_iter(runner, 0, data_batch=[dict(a=1)] * 2)\n    hook.after_val_epoch(runner)\n\n    hook = ReduceLRSchedulerHook(val_metric='PSNR', by_epoch=True, interval=2)\n    scheduler[0].by_epoch = False\n    hook.after_train_iter(runner, 0)\n    hook.after_train_epoch(runner)\n    runner.epoch = 0\n    hook.after_val_epoch(runner, metrics=dict(PSNR=40))\n    assert abs(hook.sum_value - 40) < 1e-8, hook.sum_value\n    assert hook.count == 1\n    runner.epoch = 1\n    hook.after_val_epoch(runner, metrics=dict(PSNR=50))\n    scheduler[0].step.assert_called()\n    value = hook.message_hub.get_scalar('value').current()\n    assert abs(value - 45) < 1e-8\n    assert abs(hook.sum_value - 0) < 1e-8, hook.sum_value\n    assert hook.count == 0\n\n    hook = ReduceLRSchedulerHook(val_metric='PSNR', by_epoch=False, interval=2)\n    scheduler[0].by_epoch = False\n    hook.after_train_iter(runner, 0)\n    hook.after_train_epoch(runner)\n    runner.epoch = 0\n    hook.after_val_epoch(runner, metrics=dict(PSNR=40))\n    scheduler[0].step.assert_called()\n    value = hook.message_hub.get_scalar('value').current()\n    assert abs(value - 40) < 1e-8\n    assert abs(hook.sum_value - 0) < 1e-8, hook.sum_value\n    assert hook.count == 0\n    runner.epoch = 1\n    runner.param_schedulers = dict(scheduler=scheduler)\n    hook.after_val_epoch(runner, metrics=dict(PSNR=50))\n    scheduler[0].step.assert_called()\n    value = hook.message_hub.get_scalar('value').current()\n    assert abs(value - 50) < 1e-8\n    assert abs(hook.sum_value - 0) < 1e-8, hook.sum_value\n    assert hook.count == 0\n\n    with pytest.raises(AssertionError):\n        runner.param_schedulers = dict(a='')\n        hook.after_val_epoch(runner, metrics=dict(PSNR=50))\n\n    with pytest.raises(TypeError):\n        runner.param_schedulers = ''\n        hook.after_val_epoch(runner, metrics=dict(PSNR=50))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_hooks/test_visualization_hook.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, Mock\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.testing import assert_allclose\nfrom mmengine.visualization import Visualizer\nfrom torch.utils.data.dataset import Dataset\n\nfrom mmagic.engine import VisualizationHook\nfrom mmagic.engine.hooks import BasicVisualizationHook\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\nfrom mmagic.visualization import ConcatImageVisualizer\n\nfrom mmagic.registry import MODELS  # isort:skip  # noqa\n\nregister_all_modules()\n\n\nclass TestBasicVisualizationHook(TestCase):\n\n    def setUp(self) -> None:\n        input = torch.rand(2, 3, 32, 32)\n        data_sample = DataSample(\n            path_rgb='rgb.png',\n            tensor3d=torch.ones(3, 32, 32) *\n            torch.tensor([[[0.1]], [[0.2]], [[0.3]]]),\n            array3d=np.ones(shape=(32, 32, 3)) * [0.4, 0.5, 0.6],\n            tensor4d=torch.ones(2, 3, 32, 32) * torch.tensor(\n                [[[[0.1]], [[0.2]], [[0.3]]], [[[0.4]], [[0.5]], [[0.6]]]]),\n            pixdata=torch.ones(1, 32, 32) * 0.6)\n        self.data_batch = {'inputs': input, 'data_samples': [data_sample] * 2}\n\n        output = copy.deepcopy(data_sample)\n        output.outpixdata = np.ones(shape=(32, 32)) * 0.8\n        self.outputs = [output] * 2\n\n        self.vis = ConcatImageVisualizer(\n            fn_key='path_rgb',\n            img_keys=[\n                'tensor3d',\n                'array3d',\n                'pixdata',\n                'tensor4d',\n                'outpixdata',\n            ],\n            vis_backends=[dict(type='LocalVisBackend')],\n            save_dir='work_dirs')\n\n    def test_after_iter(self):\n        runner = Mock()\n        runner.iter = 1\n        runner.visualizer = self.vis\n        hook = BasicVisualizationHook()\n        hook._after_iter(runner, 1, self.data_batch, self.outputs)\n\n        img = mmcv.imread('work_dirs/vis_data/vis_image/rgb_1.png')\n        assert img.shape == (64, 160, 3)\n\n        hook._on_train = hook._on_test = hook._on_val = True\n        runner.visualizer = Mock()\n        runner.visualizer.add_datasample = Mock()\n        hook._after_iter(\n            runner, 1, self.data_batch, self.outputs, mode='train')\n        runner.visualizer.add_datasample.assert_called\n        hook._after_iter(runner, 1, self.data_batch, self.outputs, mode='val')\n        runner.visualizer.add_datasample.assert_called\n        hook._after_iter(runner, 1, self.data_batch, self.outputs, mode='test')\n        assert runner.visualizer.assert_called\n\n        hook._on_train = hook._on_test = hook._on_val = False\n        hook._after_iter(\n            runner, 1, self.data_batch, self.outputs, mode='train')\n        assert runner.visualizer.assert_not_called\n        hook._after_iter(runner, 1, self.data_batch, self.outputs, mode='val')\n        assert runner.visualizer.assert_not_called\n        hook._after_iter(runner, 1, self.data_batch, self.outputs, mode='test')\n        assert runner.visualizer.assert_not_called\n\n\nclass TestVisualizationHook(TestCase):\n\n    Visualizer.get_instance('test-gen-visualizer')\n    MessageHub.get_instance('test-gen-visualizer')\n\n    def test_init(self):\n        hook = VisualizationHook(\n            interval=10, vis_kwargs_list=dict(type='Noise'))\n        self.assertEqual(hook.interval, 10)\n        self.assertEqual(hook.vis_kwargs_list, [dict(type='Noise')])\n        self.assertEqual(hook.n_samples, 64)\n        self.assertFalse(hook.show)\n\n        hook = VisualizationHook(\n            interval=10,\n            vis_kwargs_list=[dict(type='Noise'),\n                             dict(type='Translation')])\n        self.assertEqual(len(hook.vis_kwargs_list), 2)\n\n        hook = VisualizationHook(\n            interval=10, vis_kwargs_list=dict(type='GAN'), show=True)\n        self.assertEqual(hook._visualizer._vis_backends, {})\n\n    def test_vis_sample_with_gan_alias(self):\n        gan_model_cfg = dict(\n            type='DCGAN',\n            noise_size=10,\n            data_preprocessor=dict(type='DataPreprocessor'),\n            generator=dict(\n                type='DCGANGenerator', output_scale=32, base_channels=32))\n        model = MODELS.build(gan_model_cfg)\n        runner = MagicMock()\n        runner.model = model\n        runner.train_dataloader = MagicMock()\n        runner.train_dataloader.batch_size = 10\n\n        hook = VisualizationHook(\n            interval=10, vis_kwargs_list=dict(type='GAN'), n_samples=9)\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        # build a empty data sample\n        data_batch = [\n            dict(inputs=None, data_samples=DataSample()) for idx in range(10)\n        ]\n        hook.vis_sample(runner, 0, data_batch, None)\n        _, called_kwargs = mock_visualuzer.add_datasample.call_args\n        self.assertEqual(called_kwargs['name'], 'gan')\n        self.assertEqual(called_kwargs['target_keys'], None)\n        self.assertEqual(called_kwargs['vis_mode'], None)\n        gen_batches = called_kwargs['gen_samples']\n        self.assertEqual(len(gen_batches), 9)\n        noise_in_gen_batches = torch.stack(\n            [gen_batches[idx].noise for idx in range(9)], 0)\n        noise_in_buffer = torch.cat([\n            buffer['inputs']['noise'] for buffer in hook.inputs_buffer['GAN']\n        ],\n                                    dim=0)[:9]\n        self.assertTrue((noise_in_gen_batches == noise_in_buffer).all())\n\n        hook.vis_sample(runner, 1, data_batch, None)\n        _, called_kwargs = mock_visualuzer.add_datasample.call_args\n        gen_batches = called_kwargs['gen_samples']\n        noise_in_gen_batches_new = torch.stack(\n            [gen_batches[idx].noise for idx in range(9)], 0)\n        self.assertTrue((noise_in_gen_batches_new == noise_in_buffer).all())\n\n    def test_vis_sample_with_translation_alias(self):\n        translation_cfg = dict(\n            type='CycleGAN',\n            data_preprocessor=dict(\n                type='DataPreprocessor', data_keys=['img_photo', 'img_mask']),\n            generator=dict(\n                type='ResnetGenerator',\n                in_channels=3,\n                out_channels=3,\n                base_channels=8,\n                norm_cfg=dict(type='IN'),\n                use_dropout=False,\n                num_blocks=4,\n                padding_mode='reflect',\n                init_cfg=dict(type='normal', gain=0.02)),\n            discriminator=dict(\n                type='PatchDiscriminator',\n                in_channels=3,\n                base_channels=8,\n                num_conv=3,\n                norm_cfg=dict(type='IN'),\n                init_cfg=dict(type='normal', gain=0.02)),\n            default_domain='photo',\n            reachable_domains=['photo', 'mask'],\n            related_domains=['photo', 'mask'])\n        model = MODELS.build(translation_cfg)\n\n        class naive_dataset(Dataset):\n\n            def __init__(self, max_len, train=False):\n                self.max_len = max_len\n                self.train = train\n\n            def __len__(self):\n                return self.max_len\n\n            def __getitem__(self, index):\n                weight = index if self.train else -index\n                img_photo = torch.ones(3, 32, 32) * weight\n                img_mask = torch.ones(3, 32, 32) * (weight + 1)\n                return dict(\n                    inputs=dict(img_photo=img_photo, img_mask=img_mask),\n                    data_samples=DataSample(\n                        img_photo=img_photo, img_mask=img_mask))\n\n        train_dataloader = MagicMock()\n        train_dataloader.batch_size = 4\n        train_dataloader.dataset = naive_dataset(max_len=15, train=True)\n        val_dataloader = MagicMock()\n        val_dataloader.batch_size = 4\n        val_dataloader.dataset = naive_dataset(max_len=17)\n\n        runner = MagicMock()\n        runner.model = model\n        runner.train_dataloader = train_dataloader\n        runner.val_loop = MagicMock()\n        runner.val_loop.dataloader = val_dataloader\n\n        hook = VisualizationHook(\n            interval=10,\n            vis_kwargs_list=[\n                dict(type='Translation'),\n                dict(type='TranslationVal', name='cyclegan_val')\n            ],\n            n_samples=9)\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        # build a empty data sample\n        data_batch = [\n            dict(inputs=None, data_samples=DataSample()) for idx in range(4)\n        ]\n        hook.vis_sample(runner, 0, data_batch, None)\n        called_kwargs_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(len(called_kwargs_list), 2)\n        # trans_called_kwargs, trans_val_called_kwargs = called_kwargs_list\n        _, trans_called_kwargs = called_kwargs_list[0]\n        _, trans_val_called_kwargs = called_kwargs_list[1]\n        self.assertEqual(trans_called_kwargs['name'], 'translation')\n        self.assertEqual(trans_val_called_kwargs['name'], 'cyclegan_val')\n\n        # test train gen samples\n        trans_gen_sample = trans_called_kwargs['gen_samples']\n        print(trans_gen_sample[0].keys())\n        trans_gt_mask_list = [samp.img_mask for samp in trans_gen_sample]\n        trans_gt_photo_list = [samp.img_photo for samp in trans_gen_sample]\n\n        self.assertEqual(len(trans_gen_sample), 9)\n        for idx, (mask, photo) in enumerate(\n                zip(trans_gt_mask_list, trans_gt_photo_list)):\n            sample_from_dataset = train_dataloader.dataset[idx]['inputs']\n            # data sample in test mode --> do not normed\n            assert_allclose(mask, sample_from_dataset['img_mask'])\n            assert_allclose(photo, sample_from_dataset['img_photo'])\n\n        # test val gen samples\n        trans_gen_sample = trans_val_called_kwargs['gen_samples']\n        trans_gt_mask_list = [samp.img_mask for samp in trans_gen_sample]\n        trans_gt_photo_list = [samp.img_photo for samp in trans_gen_sample]\n\n        self.assertEqual(len(trans_gen_sample), 9)\n        for idx, (mask, photo) in enumerate(\n                zip(trans_gt_mask_list, trans_gt_photo_list)):\n            sample_from_dataset = val_dataloader.dataset[idx]['inputs']\n            assert_allclose(mask, sample_from_dataset['img_mask'])\n            assert_allclose(photo, sample_from_dataset['img_photo'])\n\n        # check input buffer\n        input_buffer = hook.inputs_buffer\n        input_buffer['translation']\n\n    # TODO: uncomment after support DDPM\n    # def test_vis_ddpm_alias_with_user_defined_args(self):\n    #     ddpm_cfg = dict(\n    #         type='BasicGaussianDiffusion',\n    #         num_timesteps=4,\n    #         data_preprocessor=dict(type='DataPreprocessor'),\n    #         betas_cfg=dict(type='cosine'),\n    #         denoising=dict(\n    #             type='DenoisingUnet',\n    #             image_size=32,\n    #             in_channels=3,\n    #             base_channels=128,\n    #             resblocks_per_downsample=3,\n    #             attention_res=[16, 8],\n    #             use_scale_shift_norm=True,\n    #             dropout=0.3,\n    #             num_heads=4,\n    #             use_rescale_timesteps=True,\n    #             output_cfg=dict(mean='eps', var='learned_range')),\n    #         timestep_sampler=dict(type='UniformTimeStepSampler'))\n    #     model = MODELS.build(ddpm_cfg)\n    #     runner = MagicMock()\n    #     runner.model = model\n    #     runner.train_dataloader = MagicMock()\n    #     runner.train_dataloader.batch_size = 10\n\n    #     hook = VisualizationHook(\n    #         interval=10,\n    #         n_samples=2,\n    #         vis_kwargs_list=dict(\n    #             type='DDPMDenoising', vis_mode='gif', name='ddpm',\n    #             n_samples=3))\n    #     mock_visualuzer = MagicMock()\n    #     mock_visualuzer.add_datasample = MagicMock()\n    #     hook._visualizer = mock_visualuzer\n\n    #     # build a empty data sample\n    #     data_batch = [\n    #         dict(inputs=None, data_sample=DataSample())\n    #         for idx in range(10)\n    #     ]\n    #     hook.vis_sample(runner, 0, data_batch, None)\n    #     _, called_kwargs = mock_visualuzer.add_datasample.call_args\n    #     gen_samples = called_kwargs['gen_samples']\n    #     self.assertEqual(len(gen_samples), 3)\n    #     self.assertEqual(called_kwargs['n_row'], min(hook.n_row, 3))\n\n    #     # test user defined vis kwargs\n    #     hook.vis_kwargs_list = [\n    #         dict(\n    #             type='Arguments',\n    #             forward_mode='sampling',\n    #             name='ddpm_sample',\n    #             n_samples=2,\n    #             n_row=4,\n    #             vis_mode='gif',\n    #             n_skip=1,\n    #             forward_kwargs=dict(\n    #                 forward_mode='sampling',\n    #                 sample_kwargs=dict(show_pbar=True, save_intermedia=True)))  # noqa\n    #     ]\n    #     mock_visualuzer = MagicMock()\n    #     mock_visualuzer.add_datasample = MagicMock()\n    #     hook._visualizer = mock_visualuzer\n\n    #     # build a empty data sample\n    #     data_batch = [\n    #         dict(inputs=None, data_sample=DataSample())\n    #         for idx in range(10)\n    #     ]\n    #     hook.vis_sample(runner, 0, data_batch, None)\n    #     _, called_kwargs = mock_visualuzer.add_datasample.call_args\n    #     gen_samples = called_kwargs['gen_samples']\n    #     self.assertEqual(len(gen_samples), 2)\n    #     self.assertEqual(called_kwargs['n_row'], min(hook.n_row, 2))\n\n    def test_after_val_iter(self):\n        model = MagicMock()\n        hook = VisualizationHook(\n            interval=10, n_samples=2, vis_kwargs_list=dict(type='GAN'))\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        runner = MagicMock()\n        runner.model = model\n\n        hook.after_val_iter(runner, 0, [dict()], [DataSample()])\n        mock_visualuzer.assert_not_called()\n\n    def test_after_train_iter(self):\n        gan_model_cfg = dict(\n            type='DCGAN',\n            noise_size=10,\n            data_preprocessor=dict(type='DataPreprocessor'),\n            generator=dict(\n                type='DCGANGenerator', output_scale=32, base_channels=32))\n        model = MODELS.build(gan_model_cfg)\n        runner = MagicMock()\n        runner.model = model\n        runner.train_dataloader = MagicMock()\n        runner.train_dataloader.batch_size = 10\n\n        hook = VisualizationHook(\n            interval=2, vis_kwargs_list=dict(type='GAN'), n_samples=9)\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        # build a empty data sample\n        data_batch = [\n            dict(inputs=None, data_samples=DataSample()) for idx in range(10)\n        ]\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        self.assertEqual(mock_visualuzer.add_datasample.call_count, 1)\n\n        # test vis with messagehub info --> str\n        mock_visualuzer.add_datasample.reset_mock()\n        message_hub = MessageHub.get_current_instance()\n\n        feat_map = torch.randn(4, 16, 4, 4)\n        vis_results = dict(feat_map=feat_map)\n        message_hub.update_info('vis_results', vis_results)\n\n        hook.message_vis_kwargs = 'feat_map'\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        called_args_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(len(called_args_list), 2)  # outputs + messageHub\n        _, messageHub_vis_args = called_args_list[1]\n        self.assertEqual(messageHub_vis_args['name'], 'train_feat_map')\n        self.assertEqual(len(messageHub_vis_args['gen_samples']), 4)\n        self.assertEqual(messageHub_vis_args['vis_mode'], None)\n        self.assertEqual(messageHub_vis_args['n_row'], None)\n\n        # test vis with messagehub info --> list[str]\n        mock_visualuzer.add_datasample.reset_mock()\n\n        hook.message_vis_kwargs = ['feat_map']\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        called_args_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(len(called_args_list), 2)  # outputs + messageHub\n        _, messageHub_vis_args = called_args_list[1]\n        self.assertEqual(messageHub_vis_args['name'], 'train_feat_map')\n        self.assertEqual(len(messageHub_vis_args['gen_samples']), 4)\n        self.assertEqual(messageHub_vis_args['vis_mode'], None)\n        self.assertEqual(messageHub_vis_args['n_row'], None)\n\n        # test vis with messagehub info --> dict\n        mock_visualuzer.add_datasample.reset_mock()\n\n        hook.message_vis_kwargs = dict(key='feat_map', vis_mode='feature_map')\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        called_args_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(len(called_args_list), 2)  # outputs + messageHub\n        _, messageHub_vis_args = called_args_list[1]\n        self.assertEqual(messageHub_vis_args['name'], 'train_feat_map')\n        self.assertEqual(len(messageHub_vis_args['gen_samples']), 4)\n        self.assertEqual(messageHub_vis_args['vis_mode'], 'feature_map')\n        self.assertEqual(messageHub_vis_args['n_row'], None)\n\n        # test vis with messagehub info --> list[dict]\n        mock_visualuzer.add_datasample.reset_mock()\n\n        feat_map = torch.randn(4, 16, 4, 4)\n        x_t = [DataSample(info='x_t')]\n        vis_results = dict(feat_map=feat_map, x_t=x_t)\n        message_hub.update_info('vis_results', vis_results)\n\n        hook.message_vis_kwargs = [\n            dict(key='feat_map', vis_mode='feature_map'),\n            dict(key='x_t')\n        ]\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        called_args_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(len(called_args_list), 3)  # outputs + messageHub\n        # output_vis_args = called_args_list[0].kwargs\n        _, feat_map_vis_args = called_args_list[1]\n        self.assertEqual(feat_map_vis_args['name'], 'train_feat_map')\n        self.assertEqual(len(feat_map_vis_args['gen_samples']), 4)\n        self.assertEqual(feat_map_vis_args['vis_mode'], 'feature_map')\n        self.assertEqual(feat_map_vis_args['n_row'], None)\n\n        _, x_t_vis_args = called_args_list[2]\n        self.assertEqual(x_t_vis_args['name'], 'train_x_t')\n        self.assertEqual(len(x_t_vis_args['gen_samples']), 1)\n        self.assertEqual(x_t_vis_args['vis_mode'], None)\n        self.assertEqual(x_t_vis_args['n_row'], None)\n\n        # test vis messageHub info --> errors\n        hook.message_vis_kwargs = 'error'\n        with self.assertRaises(RuntimeError):\n            hook.after_train_iter(runner, 1, data_batch, None)\n\n        message_hub.runtime_info.clear()\n        with self.assertRaises(RuntimeError):\n            hook.after_train_iter(runner, 1, data_batch, None)\n\n        hook.message_vis_kwargs = dict(key='feat_map', vis_mode='feature_map')\n        message_hub.update_info('vis_results', dict(feat_map='feat_map'))\n        with self.assertRaises(TypeError):\n            hook.after_train_iter(runner, 1, data_batch, None)\n\n    def test_after_train_iter_contain_mul_elements(self):\n        # test contain_mul_elements + n_row != None\n        # n_row = 8, n_samples = 3, batch_size = 2, model_n_samples = 4\n        # run math.ceil(3 / 2) = 2 times, visualize 2 * 4 = 8 samples,\n        class MockModel:\n\n            def __init__(self, n_samples):\n                self.n_samples = n_samples\n\n            def noise_fn(self, *args, **kwargs):\n                return torch.randn(2, 2)\n\n            def val_step(self, *args, **kwargs):\n                return [DataSample() for _ in range(self.n_samples)]\n\n            def eval(self):\n                return self\n\n            def train(self):\n                return self\n\n        runner = MagicMock()\n        runner.model = MockModel(n_samples=4)\n        runner.train_dataloader = MagicMock()\n        runner.train_dataloader.batch_size = 2\n\n        hook = VisualizationHook(\n            interval=2, vis_kwargs_list=dict(type='GAN'), n_samples=3, n_row=8)\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        # build a empty data sample\n        data_batch = [\n            dict(inputs=None, data_samples=DataSample()) for idx in range(10)\n        ]\n\n        for idx in range(3):\n            hook.after_train_iter(runner, idx, data_batch, None)\n        self.assertEqual(mock_visualuzer.add_datasample.call_count, 1)\n        called_args_list = mock_visualuzer.add_datasample.call_args_list[0]\n        self.assertEqual(len(called_args_list[1]['gen_samples']), 8)\n\n    def test_after_test_iter(self):\n        model = MagicMock()\n        hook = VisualizationHook(\n            interval=10,\n            n_samples=2,\n            max_save_at_test=None,\n            test_vis_keys=['ema', 'orig', 'new_model.x_t', 'gt_img'],\n            vis_kwargs_list=dict(type='GAN'))\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        runner = MagicMock()\n        runner.model = model\n\n        gt_list = [torch.randn(3, 6, 6) for _ in range(4)]\n        ema_list = [torch.randn(3, 6, 6) for _ in range(4)]\n        orig_list = [torch.randn(3, 6, 6) for _ in range(4)]\n        x_t_list = [torch.randn(3, 6, 6) for _ in range(4)]\n\n        outputs = []\n        for gt, ema, orig, x_t in zip(gt_list, ema_list, orig_list, x_t_list):\n            gen_sample = DataSample(\n                gt_img=gt,\n                ema=DataSample(fake_img=ema),\n                orig=DataSample(fake_img=orig),\n                new_model=DataSample(x_t=x_t))\n            outputs.append(gen_sample)\n\n        hook.after_test_iter(runner, 42, [], outputs)\n        args_list = mock_visualuzer.add_datasample.call_args_list\n        self.assertEqual(\n            len(args_list),\n            len(hook.test_vis_keys_list) * len(gt_list))\n        # check target consistency\n        for idx, args in enumerate(args_list):\n            _, called_kwargs = args\n            gen_samples = called_kwargs['gen_samples']\n            name = called_kwargs['name']\n            batch_idx = called_kwargs['step']\n            target_keys = called_kwargs['target_keys']\n\n            self.assertEqual(len(gen_samples), 1)\n            idx_in_outputs = idx // 4\n            self.assertEqual(batch_idx, idx_in_outputs + 42 * len(outputs))\n            self.assertEqual(outputs[idx_in_outputs], gen_samples[0])\n\n            # check ema\n            if idx % 4 == 0:\n                self.assertEqual(target_keys, 'ema')\n                self.assertEqual(name, 'test_ema')\n            # check orig\n            elif idx % 4 == 1:\n                self.assertEqual(target_keys, 'orig')\n                self.assertEqual(name, 'test_orig')\n            # check x_t\n            elif idx % 4 == 2:\n                self.assertEqual(target_keys, 'new_model.x_t')\n                self.assertEqual(name, 'test_new_model_x_t')\n            # check gt\n            else:\n                self.assertEqual(target_keys, 'gt_img')\n                self.assertEqual(name, 'test_gt_img')\n\n        # test get target key automatically\n        hook.test_vis_keys_list = None\n        mock_visualuzer.add_datasample.reset_mock()\n        hook.after_test_iter(runner, 42, [], outputs)\n\n        kwargs_list = [\n            args[1] for args in mock_visualuzer.add_datasample.call_args_list\n        ]\n        self.assertTrue(all([kwargs['target_keys'] for kwargs in kwargs_list]))\n\n        # test get target key automatically with error\n        outputs = [DataSample(ema=DataSample(fake_img=torch.randn(3, 6, 6)))]\n        with self.assertRaises(AssertionError):\n            hook.after_test_iter(runner, 42, [], outputs)\n\n        # test max save time\n        hook = VisualizationHook(\n            interval=10,\n            n_samples=2,\n            test_vis_keys='ema',\n            vis_kwargs_list=dict(type='GAN'),\n            max_save_at_test=3)\n\n        mock_visualuzer = MagicMock()\n        mock_visualuzer.add_datasample = MagicMock()\n        hook._visualizer = mock_visualuzer\n\n        runner = MagicMock()\n        runner.model = model\n\n        ema_list = [torch.randn(3, 6, 6) for _ in range(4)]\n        outputs = [\n            DataSample(ema=DataSample(fake_img=ema)) for ema in ema_list\n        ]\n        hook.after_test_iter(runner, 42, [], outputs)\n        mock_visualuzer.add_datasample.assert_not_called()\n\n        hook.after_test_iter(runner, 0, [], outputs)\n        assert mock_visualuzer.add_datasample.call_count == 3\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_optimizers/test_multi_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch.nn as nn\nfrom mmengine import MMLogger\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.engine.optimizers import MultiOptimWrapperConstructor\n\nlogger = MMLogger.get_instance('test_multi_optimizer_constructor')\n\n\nclass ToyModel(nn.Module):\n\n    def __init__(self) -> None:\n        super().__init__()\n\n        self.generator = nn.Conv2d(3, 3, 1)\n        self.discriminator = nn.Conv2d(3, 3, 1)\n\n\nclass TextEncoder(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.embedding = nn.Embedding(100, 100)\n\n\nclass ToyModel2(nn.Module):\n\n    def __init__(self) -> None:\n        super().__init__()\n\n        self.m1 = ToyModel()\n        self.m2 = nn.Conv2d(3, 3, 1)\n        self.m3 = nn.Linear(2, 2)\n        self.text_encoder = TextEncoder()\n\n\ndef test_optimizer_constructor():\n\n    # test optimizer wrapper cfg is a dict\n    optim_wrapper_constructor = MultiOptimWrapperConstructor(\n        optim_wrapper_cfg=dict(\n            generator=dict(\n                type='OptimWrapper',\n                optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n            discriminator=dict(\n                type='OptimWrapper', optimizer=dict(type='SGD', lr=0.1))))\n    model = ToyModel()\n\n    optim_wrapper_dict = optim_wrapper_constructor(model)\n    assert optim_wrapper_dict.__class__.__name__ == 'OptimWrapperDict'\n    assert set(optim_wrapper_dict.optim_wrappers) == set(\n        ['generator', 'discriminator'])\n\n    # test optimizer wrapper is dict of **modules**\n    optim_wrapper = {\n        '.*embedding': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-4,\n                'betas': (0.9, 0.99)\n            }\n        },\n        'm1.generator': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-5,\n                'betas': (0.9, 0.99)\n            }\n        },\n        'm2': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-5,\n            }\n        }\n    }\n    optim_wrapper_constructor = MultiOptimWrapperConstructor(\n        optim_wrapper_cfg=dict(\n            generator=dict(\n                type='OptimWrapper',\n                optimizer=dict(type='Adam', lr=1e-4, betas=(0.9, 0.99))),\n            discriminator=dict(\n                type='OptimWrapper', optimizer=dict(type='SGD', lr=0.1))))\n\n    optim_wrapper_cfg = {\n        '.*embedding': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-4,\n                'betas': (0.9, 0.99)\n            }\n        },\n        'm1.generator': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-5,\n                'betas': (0.9, 0.99)\n            }\n        },\n        'm2': {\n            'type': 'OptimWrapper',\n            'optimizer': {\n                'type': 'Adam',\n                'lr': 1e-5,\n            }\n        }\n    }\n    optim_wrapper_constructor = MultiOptimWrapperConstructor(optim_wrapper_cfg)\n    model = ToyModel2()\n    optim_wrapper_dict = optim_wrapper_constructor(model)\n\n    # optim_wrapper_cfg should be a dict\n    with pytest.raises(TypeError):\n        MultiOptimWrapperConstructor(1)\n\n    # parawise_cfg should be set in each optimizer separately\n    with pytest.raises(AssertionError):\n        MultiOptimWrapperConstructor(dict(), dict())\n\n    # test optimizer wrapper with multi param groups\n    optim_wrapper_constructor = MultiOptimWrapperConstructor(\n        optim_wrapper_cfg=dict(\n            modules=['.*text_encoder', '.*generator', 'm2'],\n            optimizer=dict(\n                type='Adam',\n                lr=1e-4,\n                betas=(0.9, 0.99),\n            ),\n            accumulative_counts=4))\n    model = ToyModel2()\n    optim_wrapper = optim_wrapper_constructor(model)\n    assert isinstance(optim_wrapper, OptimWrapper)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_optimizers/test_pggan_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nfrom mmengine.model import MMSeparateDistributedDataParallel\n\nfrom mmagic.engine import PGGANOptimWrapperConstructor\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestPGGANOptimWrapperConstructor(TestCase):\n\n    pggan_cfg = dict(\n        type='ProgressiveGrowingGAN',\n        data_preprocessor=dict(type='DataPreprocessor'),\n        noise_size=512,\n        generator=dict(type='PGGANGenerator', out_scale=8),\n        discriminator=dict(type='PGGANDiscriminator', in_scale=8),\n        nkimgs_per_scale={\n            '4': 600,\n            '8': 1200\n        },\n        transition_kimgs=600,\n        ema_config=dict(interval=1))\n\n    base_lr = 0.001\n    lr_schedule = dict(generator={'8': 0.0015}, discriminator={'8': 0.0015})\n    optim_wrapper_cfg = dict(\n        generator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        discriminator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        lr_schedule=lr_schedule)\n\n    def test(self):\n        pggan = MODELS.build(self.pggan_cfg)\n        optim_wrapper_dict_builder = PGGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(pggan)\n        optim_keys = set(optim_wrapper_dict.keys())\n\n        scales = self.pggan_cfg['nkimgs_per_scale'].keys()\n        self.assertEqual(\n            optim_keys,\n            set([\n                f'{model}_{scale}' for model in ['generator', 'discriminator']\n                for scale in scales\n            ]))\n\n        # check lr\n        for scale in scales:\n            gen_optim = optim_wrapper_dict[f'generator_{scale}']\n            gen_lr = gen_optim.optimizer.param_groups[0]['lr']\n\n            disc_optim = optim_wrapper_dict[f'discriminator_{scale}']\n            disc_lr = disc_optim.optimizer.param_groups[0]['lr']\n\n            self.assertEqual(\n                gen_lr,\n                self.lr_schedule['generator'].get(str(scale), self.base_lr))\n            self.assertEqual(\n                disc_lr, self.lr_schedule['discriminator'].get(\n                    str(scale), self.base_lr))\n\n        # test pggan is Wrapper\n        pggan_with_wrapper = MagicMock(\n            module=pggan, spec=MMSeparateDistributedDataParallel)\n        optim_wrapper_dict = optim_wrapper_dict_builder(pggan_with_wrapper)\n\n        # test raise error\n        with self.assertRaises(TypeError):\n            optim_wrapper_dict_builder = PGGANOptimWrapperConstructor(\n                'optim_wrapper')\n\n        # test same optimizer\n        optim_wrapper_cfg = deepcopy(self.optim_wrapper_cfg)\n        optim_wrapper_cfg['reset_optim_for_new_scale'] = False\n        optim_wrapper_dict_builder = PGGANOptimWrapperConstructor(\n            optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(pggan)\n        # check id are same\n        gen_optims = [optim_wrapper_dict[k] for k in optim_keys if 'gen' in k]\n        disc_optims = [\n            optim_wrapper_dict[k] for k in optim_keys if 'disc' in k\n        ]\n        self.assertTrue(all([id(gen_optims[0]) == id(o) for o in gen_optims]))\n        self.assertTrue(\n            all([id(disc_optims[0]) == id(o) for o in disc_optims]))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_optimizers/test_singan_optimizer_constructor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nfrom mmagic.engine import SinGANOptimWrapperConstructor\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestSinGANOptimWrapperConstructor(TestCase):\n\n    singan_cfg = dict(\n        type='SinGAN',\n        num_scales=2,\n        data_preprocessor=dict(\n            type='DataPreprocessor', non_image_keys=['input_sample']),\n        generator=dict(\n            type='SinGANMultiScaleGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_scales=2),\n        discriminator=dict(\n            type='SinGANMultiScaleDiscriminator', in_channels=3, num_scales=2),\n        noise_weight_init=0.1,\n        iters_per_scale=20,\n        test_pkl_data=None)\n\n    optim_wrapper_cfg = dict(\n        generator=dict(\n            optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))),\n        discriminator=dict(\n            optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))))\n\n    def test(self):\n        singan = MODELS.build(self.singan_cfg)\n        optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n        optim_keys = set(optim_wrapper_dict.keys())\n        self.assertEqual(\n            optim_keys,\n            set([\n                f'{model}_{scale}' for model in ['generator', 'discriminator']\n                for scale in range(2 + 1)\n            ]))\n\n        # test singan is Wrapper\n        singan_with_wrapper = MagicMock(\n            module=singan,\n            generator=MagicMock(module=singan.generator),\n            discriminator=MagicMock(module=singan.discriminator))\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan_with_wrapper)\n\n        # test raise error\n        with self.assertRaises(TypeError):\n            optim_wrapper_dict_builder = SinGANOptimWrapperConstructor('test')\n\n        with self.assertRaises(AssertionError):\n            optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n                self.optim_wrapper_cfg, 'test')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_runner/test_log_processor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock\n\nfrom mmagic.engine import LogProcessor as LogProcessor\n\n\nclass TestLogProcessor:\n\n    def setup(self):\n        runner = MagicMock()\n        runner.epoch = 1\n        runner.iter = 10\n        runner.max_epochs = 10\n        runner.max_iters = 50\n        runner.train_dataloader = [0] * 20\n        runner.val_dataloader = [0] * 10\n        runner.test_dataloader = [0] * 5\n        runner.train_loop.dataloader = [0] * 20\n        runner.val_loop.total_length = 10\n        runner.test_loop.total_length = 5\n        self.runner = runner\n\n    def test_get_dataloader_size(self):\n        log_processor = LogProcessor(by_epoch=True)\n        del self.runner.train_loop.total_length\n        assert log_processor._get_dataloader_size(self.runner, 'train') == 20\n        assert log_processor._get_dataloader_size(self.runner, 'val') == 10\n        assert log_processor._get_dataloader_size(self.runner, 'test') == 5\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_runner/test_loop_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock\n\nimport pytest\nfrom mmengine.evaluator import Evaluator as BaseEvaluator\n\nfrom mmagic.engine.runner.loop_utils import (is_evaluator,\n                                             update_and_check_evaluator)\nfrom mmagic.evaluation import Evaluator\n\n\ndef test_is_evaluator():\n    evaluator = dict(type='Evaluator', metrics=[dict(type='PSNR')])\n    assert is_evaluator(evaluator)\n\n    evaluator = [dict(type='PSNR'), dict(type='SSIM')]\n    assert is_evaluator(evaluator)\n\n    evaluator = MagicMock(spec=BaseEvaluator)\n    assert is_evaluator(evaluator)\n\n    evaluator = 'SSIM'\n    assert not is_evaluator(evaluator)\n\n    evaluator = [dict(metrics='PSNR'), dict(metrics='SSIM')]\n    assert not is_evaluator(evaluator)\n\n    evaluator = dict(type='PSNR')\n    assert not is_evaluator(evaluator)\n\n\ndef test_update_and_check_evaluator():\n\n    evaluator = MagicMock(spec=BaseEvaluator)\n    assert evaluator == update_and_check_evaluator(evaluator)\n\n    evaluator = MagicMock(spec=Evaluator)\n    assert evaluator == update_and_check_evaluator(evaluator)\n\n    evaluator = [dict(type='PSNR'), dict(type='SSIM')]\n    evaluator = update_and_check_evaluator(evaluator)\n    assert isinstance(evaluator, dict)\n    assert evaluator['type'] == 'Evaluator'\n\n    evaluator = 'this is wrong'\n    with pytest.raises(AssertionError):\n        update_and_check_evaluator(evaluator)\n\n    evaluator = dict(metrics=[dict(type='PSNR')])\n    evaluator = update_and_check_evaluator(evaluator)\n    assert 'type' in evaluator\n    assert evaluator['type'] == 'Evaluator'\n\n    evaluator = dict(type='Evaluator', metrics=[dict(type='PSNR')])\n    evaluator = update_and_check_evaluator(evaluator)\n    assert evaluator['type'] == 'Evaluator'\n\n    evaluator = dict(type='Evaluator', metrics=[dict(type='PSNR')])\n    evaluator = update_and_check_evaluator(evaluator)\n    assert evaluator['type'] == 'Evaluator'\n\n    evaluator = dict(type='Evaluator')\n    evaluator = update_and_check_evaluator(evaluator)\n    assert evaluator['metrics'] is None\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_runner/test_multi_loops.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nfrom mmengine.evaluator import Evaluator as BaseEvaluator\n\nfrom mmagic.engine import MultiTestLoop, MultiValLoop\nfrom mmagic.evaluation import Evaluator\n\n\ndef build_dataloader(loader, **kwargs):\n    if isinstance(loader, dict):\n        dataset = MagicMock()\n        dataloader = MagicMock()\n        dataloader.dataset = dataset\n        return dataloader\n    else:\n        return loader\n\n\ndef build_metrics(metrics):\n    if isinstance(metrics, dict):\n        return [MagicMock(**metrics)]\n    elif isinstance(metrics, list):\n        return [MagicMock(**metric) for metric in metrics]\n    else:\n        raise ValueError('Unsupported metrics type in MockRunner.')\n\n\ndef build_evaluator(evaluator):\n    if isinstance(evaluator, BaseEvaluator):\n        return evaluator\n\n    if isinstance(evaluator, dict):\n\n        # a dirty way to check Evaluator type\n        if 'type' in evaluator and evaluator['type'] == 'Evaluator':\n            spec = Evaluator\n        else:\n            spec = BaseEvaluator\n\n        # if `metrics` in dict keys, it means to build customized evalutor\n        if 'metrics' in evaluator:\n            evaluator_ = MagicMock(spec=spec)\n            evaluator_.metrics = build_metrics(evaluator['metrics'])\n            return evaluator_\n        # otherwise, default evalutor will be built\n        else:\n            evaluator_ = MagicMock(spec=spec)\n            evaluator_.metrics = build_metrics(evaluator)\n            return evaluator_\n\n    elif isinstance(evaluator, list):\n        # use the default `Evaluator`\n        evaluator_ = MagicMock(spec=Evaluator)\n        evaluator_.metrics = build_metrics(evaluator)\n        return evaluator_\n    else:\n        raise TypeError(\n            'evaluator should be one of dict, list of dict, and Evaluator'\n            f', but got {evaluator}')\n\n\ndef build_mock_runner():\n    runner = MagicMock()\n    runner.build_evaluator = build_evaluator\n    runner.build_dataloader = build_dataloader\n    return runner\n\n\nclass TestLoop(TestCase):\n\n    def _test_init(self, is_val):\n        LOOP_CLS = MultiValLoop if is_val else MultiTestLoop\n\n        # test init with single evaluator\n        runner = build_mock_runner()\n        dataloaders = MagicMock()\n        evaluators = [dict(prefix='m1'), dict(prefix='m2')]\n        loop = LOOP_CLS(runner, dataloaders, evaluators)\n        self.assertEqual(len(loop.evaluators), 1)\n        self.assertIsInstance(loop.evaluators[0], Evaluator)\n        self.assertEqual(loop.evaluators[0].metrics[0].prefix, 'm1')\n        self.assertEqual(loop.evaluators[0].metrics[1].prefix, 'm2')\n\n        # test init with single evaluator and dataloader is list\n        runner = build_mock_runner()\n        dataloaders = [MagicMock()]\n        evaluators = dict(\n            type='Evaluator', metrics=[dict(prefix='m1'),\n                                       dict(prefix='m2')])\n        loop = LOOP_CLS(runner, dataloaders, evaluators)\n        self.assertEqual(len(loop.evaluators), 1)\n        self.assertIsInstance(loop.evaluators[0], BaseEvaluator)\n        self.assertEqual(loop.evaluators[0].metrics[0].prefix, 'm1')\n        self.assertEqual(loop.evaluators[0].metrics[1].prefix, 'm2')\n\n        # test init with multi evaluators\n        runner = build_mock_runner()\n        dataloaders = [MagicMock(), MagicMock()]\n        evaluators = [\n            dict(\n                type='Evaluator',\n                metrics=[dict(prefix='m1'),\n                         dict(prefix='m2')]),\n            dict(metrics=dict(prefix='m3'))\n        ]\n        loop = LOOP_CLS(runner, dataloaders, evaluators)\n        self.assertEqual(len(loop.evaluators), 2)\n        self.assertIsInstance(loop.evaluators[0], BaseEvaluator)\n        self.assertIsInstance(loop.evaluators[1], Evaluator)\n        self.assertEqual(loop.evaluators[0].metrics[0].prefix, 'm1')\n        self.assertEqual(loop.evaluators[0].metrics[1].prefix, 'm2')\n        self.assertEqual(loop.evaluators[1].metrics[0].prefix, 'm3')\n\n        # test call total length before self.run\n        self.assertEqual(loop.total_length, 0)\n\n    def test_init(self):\n        self._test_init(True)  # val\n        self._test_init(False)  # test\n\n    def _test_run(self, is_val):\n        # since we have tested init, we direct use predefined mock object to\n        # test run function\n        LOOP_CLS = MultiValLoop if is_val else MultiTestLoop\n\n        # test single evaluator\n        runner = build_mock_runner()\n\n        dataloader = MagicMock()\n        dataloader.batch_size = 3\n\n        metric1, metric2, metric3 = MagicMock(), MagicMock(), MagicMock()\n\n        evaluator = MagicMock(spec=Evaluator)\n        evaluator.prepare_metrics = MagicMock()\n        evaluator.prepare_samplers = MagicMock(\n            return_value=[[[metric1, metric2],\n                           [dict(inputs=1), dict(\n                               inputs=2)]], [[metric3], [dict(inputs=4)]]])\n\n        loop = LOOP_CLS(\n            runner=runner, dataloader=dataloader, evaluator=evaluator)\n        assert len(loop.evaluators) == 1\n        assert loop.evaluators[0] == evaluator\n\n        # test run\n        loop.run()\n\n        assert loop.total_length == 3\n        call_args_list = evaluator.call_args_list\n        for idx, call_args in enumerate(call_args_list):\n            if idx == 0:\n                inputs = dict(inputs=1)\n            elif idx == 1:\n                inputs = dict(inputs=2)\n            else:\n                inputs = dict(inputs=4)\n            assert call_args[1] == inputs\n\n        # test multi evaluator\n        runner = build_mock_runner()\n        dataloader = MagicMock()\n        dataloader.batch_size = 3\n\n        metric11, metric12, metric13 = MagicMock(), MagicMock(), MagicMock()\n        metric21 = MagicMock()\n        evaluator1 = MagicMock(spec=Evaluator)\n        evaluator1.prepare_metrics = MagicMock()\n        evaluator1.prepare_samplers = MagicMock(\n            return_value=[[[metric11, metric12],\n                           [dict(inputs=1), dict(\n                               inputs=2)]], [[metric13], [dict(inputs=4)]]])\n        evaluator2 = MagicMock(spec=Evaluator)\n        evaluator2.prepare_metrics = MagicMock()\n        evaluator2.prepare_samplers = MagicMock(\n            return_value=[[[metric21], [dict(inputs=3)]]])\n        loop = LOOP_CLS(\n            runner=runner,\n            dataloader=[dataloader, dataloader],\n            evaluator=[evaluator1, evaluator2])\n        assert len(loop.evaluators) == 2\n        assert loop.evaluators[0] == evaluator1\n        assert loop.evaluators[1] == evaluator2\n\n        loop.run()\n\n        assert loop.total_length == 4\n        call_args_list = evaluator1.call_args_list\n        for idx, call_args in enumerate(call_args_list):\n            if idx == 0:\n                inputs = dict(inputs=1)\n            elif idx == 1:\n                inputs = dict(inputs=2)\n            else:\n                inputs = dict(inputs=4)\n            assert call_args[1] == inputs\n        call_args_list = evaluator2.call_args_list\n        for idx, call_args in enumerate(call_args_list):\n            if idx == 0:\n                inputs = dict(inputs=3)\n            assert call_args[1] == inputs\n\n    def test_run(self):\n        self._test_run(True)  # val\n        self._test_run(False)  # test\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_schedulers/test_linear_lr_scheduler_with_interval.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom mmengine import MessageHub\n\nfrom mmagic.engine.schedulers import LinearLrInterval\n\n\nclass ToyModel(torch.nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.conv1 = torch.nn.Conv2d(1, 1, 1)\n        self.conv2 = torch.nn.Conv2d(1, 1, 1)\n\n    def forward(self, x):\n        return self.conv2(F.relu(self.conv1(x)))\n\n\nclass TestLinearLrInterval(TestCase):\n\n    def setUp(self):\n        \"\"\"Setup the model and optimizer which are used in every test method.\n\n        TestCase calls functions in this order: setUp() -> testMethod() ->\n        tearDown() -> cleanUp()\n        \"\"\"\n        self.model = ToyModel()\n        lr = 1\n        self.optimizer = optim.SGD([{\n            'params': self.model.conv1.parameters()\n        }],\n                                   lr=lr,\n                                   momentum=0.01,\n                                   weight_decay=5e-4)\n\n    def test_step(self):\n        targets = torch.linspace(1., 0., 11)\n        param_scheduler = LinearLrInterval(\n            self.optimizer,\n            interval=1,\n            by_epoch=False,\n            start_factor=1.0,\n            end_factor=0,\n            begin=0,\n            end=10)\n        messageHub = MessageHub.get_current_instance()\n        for step in range(10):\n            messageHub.update_info('iter', step)\n            param_scheduler.step()\n            np.testing.assert_almost_equal(param_scheduler._get_value(),\n                                           targets[step].item())\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_engine/test_schedulers/test_reduce_lr_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nimport torch.nn.functional as F\nimport torch.optim as optim\nfrom mmengine import MessageHub\n\nfrom mmagic.engine.schedulers import ReduceLR\n\n\nclass ToyModel(torch.nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.conv1 = torch.nn.Conv2d(1, 1, 1)\n        self.conv2 = torch.nn.Conv2d(1, 1, 1)\n\n    def forward(self, x):\n        return self.conv2(F.relu(self.conv1(x)))\n\n\nclass TestLRScheduler(TestCase):\n\n    def setUp(self):\n        \"\"\"Setup the model and optimizer which are used in every test method.\n\n        TestCase calls functions in this order: setUp() -> testMethod() ->\n        tearDown() -> cleanUp()\n        \"\"\"\n        self.model = ToyModel()\n        self.optimizer = optim.SGD(\n            self.model.parameters(), lr=0.05, momentum=0.01, weight_decay=5e-4)\n\n    def test_reduce_lr_scheduler(self):\n\n        message_hub = MessageHub.get_instance('reduce_lr')\n\n        scheduler = ReduceLR(self.optimizer, patience=1)\n        scheduler.last_step = 0\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        scheduler.last_step = 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert abs(results[0] - 0.005) < 1e-8\n        assert scheduler.num_bad_epochs == 0\n\n        scheduler = ReduceLR(self.optimizer, patience=1, mode='max')\n        scheduler.last_step = 0\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        scheduler.last_step = 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert abs(results[0] - 0.005) < 1e-8\n        assert scheduler.num_bad_epochs == 0\n\n        scheduler = ReduceLR(\n            self.optimizer, patience=1, mode='max', threshold_mode='abs')\n        scheduler.last_step = 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 1\n\n        scheduler = ReduceLR(\n            self.optimizer, patience=1, mode='min', threshold_mode='abs')\n        scheduler.last_step = 1\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 0\n        message_hub.update_scalar('value', 1)\n        results = scheduler._get_value()\n        assert results == [0.05]\n        assert scheduler.num_bad_epochs == 1\n\n        with pytest.raises(ValueError):\n            ReduceLR(self.optimizer, mode='ysli')\n        with pytest.raises(ValueError):\n            ReduceLR(self.optimizer, threshold_mode='ysli')\n        with pytest.raises(ValueError):\n            ReduceLR(self.optimizer, factor=1.5)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_evaluator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, patch\n\nfrom mmagic.evaluation import (Evaluator, FrechetInceptionDistance,\n                               InceptionScore)\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nfid_loading_str = 'mmagic.evaluation.metrics.fid.FrechetInceptionDistance._load_inception'  # noqa\nis_loading_str = 'mmagic.evaluation.metrics.inception_score.InceptionScore._load_inception'  # noqa\n\nloading_mock = MagicMock(return_value=(MagicMock(), 'StyleGAN'))\n\n\nclass TestEvaluator(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.metrics = [\n            dict(\n                type='InceptionScore',\n                fake_nums=10,\n                inception_style='pytorch',\n                sample_model='orig'),\n            dict(\n                type='FrechetInceptionDistance',\n                fake_nums=11,\n                inception_style='pytorch',\n                sample_model='orig'),\n            dict(type='TransFID', fake_nums=10),\n        ]\n\n    @patch(is_loading_str, loading_mock)\n    @patch(fid_loading_str, loading_mock)\n    def test_init(self):\n        evaluator = Evaluator(self.metrics)\n        self.assertFalse(evaluator.is_ready)\n\n    @patch(is_loading_str, loading_mock)\n    @patch(fid_loading_str, loading_mock)\n    def test_prepare_metric(self):\n        evaluator = Evaluator(self.metrics)\n        model = MagicMock()\n        model.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n        with patch('mmagic.evaluation.metrics.fid.prepare_inception_feat'):\n            evaluator.prepare_metrics(model, dataloader)\n            self.assertTrue(evaluator.is_ready)\n\n        evaluator = Evaluator(self.metrics)\n        evaluator.metrics = [MagicMock()]\n        evaluator.is_ready = True\n        evaluator.prepare_metrics(model, dataloader)\n        evaluator.metrics[0].assert_not_called()\n\n    @patch(is_loading_str, loading_mock)\n    @patch(fid_loading_str, loading_mock)\n    def test_prepare_samplers(self):\n        evaluator = Evaluator(self.metrics)\n\n        model = MagicMock()\n        model.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n        dataloader.batch_size = 2\n\n        metric_sampler_list = evaluator.prepare_samplers(model, dataloader)\n        self.assertEqual(len(metric_sampler_list), 2)\n        for metric_cls in [FrechetInceptionDistance, InceptionScore]:\n            self.assertTrue(\n                any([\n                    isinstance(m, metric_cls)\n                    for m in metric_sampler_list[0][0]\n                ]))\n        self.assertEqual(metric_sampler_list[0][1].max_length, 11)\n        self.assertEqual(len(metric_sampler_list[0][1]), 6)\n\n        # test prepare metrics with different `sample_model`\n        cfg = deepcopy(self.metrics)\n        cfg.append(\n            dict(\n                type='FrechetInceptionDistance',\n                fake_nums=12,\n                inception_style='pytorch',\n                sample_model='ema'))\n        evaluator = Evaluator(cfg)\n\n        # mock metrics\n        model = MagicMock()\n        model.data_preprocessor.device = 'cpu'\n\n        dataloader = MagicMock()\n        dataloader.batch_size = 2\n\n        metric_sampler_list = evaluator.prepare_samplers(model, dataloader)\n        self.assertEqual(len(metric_sampler_list), 3)\n\n        # test prepare sampler with metric.need_cond_input = True\n        cfg = deepcopy(self.metrics)\n        cfg += [\n            dict(\n                type='FrechetInceptionDistance',\n                fake_nums=12,\n                inception_style='pytorch',\n                sample_model='ema'),\n            dict(\n                type='FrechetInceptionDistance',\n                fake_nums=12,\n                inception_style='pytorch',\n                sample_model='ema',\n                need_cond_input=True),\n            dict(\n                type='InceptionScore',\n                fake_nums=10,\n                inception_style='pytorch',\n                sample_model='ema',\n                need_cond_input=True),\n            dict(\n                type='InceptionScore',\n                fake_nums=10,\n                inception_style='pytorch',\n                sample_model='orig',\n                need_cond_input=True),\n        ]\n        # all metrics (5 groups): [[IS-orig, FID-orig], [TransFID-orig],\n        #                          [FID-ema], [FID-cond-ema, IS-cond-ema],\n        #                          [IS-cond-orig]]\n        evaluator = Evaluator(cfg)\n\n        # mock metrics\n        model = MagicMock()\n        model.data_preprocessor.device = 'cpu'\n\n        dataloader = MagicMock()\n        dataloader.batch_size = 2\n\n        metric_sampler_list = evaluator.prepare_samplers(model, dataloader)\n        self.assertEqual(len(metric_sampler_list), 5)\n\n    @patch(is_loading_str, loading_mock)\n    @patch(fid_loading_str, loading_mock)\n    def test_process(self):\n        evaluator = Evaluator(self.metrics)\n        metrics_mock = [MagicMock(), MagicMock()]\n\n        data_samples = [DataSample(a=1, b=2), dict(c=3, d=4)]\n\n        # NOTE: data_batch is not used in evaluation\n        evaluator.process(\n            data_batch=None, data_samples=data_samples, metrics=metrics_mock)\n\n        for metric in metrics_mock:\n            metric.process.assert_called_with(None, [{\n                'a': 1,\n                'b': 2\n            }, {\n                'c': 3,\n                'd': 4\n            }])\n\n    @patch(is_loading_str, loading_mock)\n    @patch(fid_loading_str, loading_mock)\n    def test_evaluate(self):\n        evaluator = Evaluator(self.metrics)\n\n        # mock metrics\n        metric_mock1, metric_mock2 = MagicMock(), MagicMock()\n        metric_mock1.evaluate = MagicMock(return_value=dict(m1=233))\n        metric_mock2.evaluate = MagicMock(return_value=dict(m2=42))\n        evaluator.metrics = [metric_mock1, metric_mock2]\n\n        res = evaluator.evaluate()\n        self.assertEqual(res, dict(m1=233, m2=42))\n\n        # test raise value error with duplicate keys\n        metric_mock3, metric_mock4 = MagicMock(), MagicMock()\n        metric_mock3.evaluate = MagicMock(return_value=dict(m=3))\n        metric_mock4.evaluate = MagicMock(return_value=dict(m=4))\n        evaluator.metrics = [metric_mock3, metric_mock4]\n        with self.assertRaises(ValueError):\n            evaluator.evaluate()\n\n\nclass TestNonMetricEvaluator(TestCase):\n\n    def test_init(self):\n        evaluator = Evaluator(None)\n        self.assertIsNone(evaluator.metrics)\n\n    def test_prepare_metrics(self):\n        evaluator = Evaluator(None)\n        evaluator.prepare_metrics(None, None)\n        self.assertTrue(evaluator.is_ready)\n\n    def test_prepare_samplers(self):\n        evaluator = Evaluator(None)\n        metric_sampler_list = evaluator.prepare_samplers(None, None)\n        self.assertEqual(metric_sampler_list, [[[None], []]])\n\n    def test_process(self):\n        evaluator = Evaluator(None)\n        evaluator.process(None, None, None)\n\n    def test_evalute(self):\n        evaluator = Evaluator(None)\n        output = evaluator.evaluate()\n        self.assertEqual(output, {'No Metric': 'Nan'})\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_functional/test_fid_inception.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.evaluation.functional.fid_inception import (InceptionV3,\n                                                        fid_inception_v3)\n\n\nclass TestFIDInception:\n\n    @classmethod\n    def setup_class(cls):\n        cls.load_fid_inception = False\n\n    def test_fid_inception(self):\n        inception = InceptionV3(load_fid_inception=self.load_fid_inception)\n        imgs = torch.randn((2, 3, 256, 256))\n        out = inception(imgs)[0]\n        assert out.shape == (2, 2048, 1, 1)\n\n        imgs = torch.randn((2, 3, 512, 512))\n        out = inception(imgs)[0]\n        assert out.shape == (2, 2048, 1, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_fid_inception_cuda(self):\n        inception = InceptionV3(\n            load_fid_inception=self.load_fid_inception).cuda()\n        imgs = torch.randn((2, 3, 256, 256)).cuda()\n        out = inception(imgs)[0]\n        assert out.shape == (2, 2048, 1, 1)\n\n        imgs = torch.randn((2, 3, 512, 512)).cuda()\n        out = inception(imgs)[0]\n        assert out.shape == (2, 2048, 1, 1)\n\n\ndef test_load_fid_inception():\n    fid_net = fid_inception_v3(load_ckpt=False)\n\n    inputs = torch.randn(1, 3, 299, 299)\n    outputs = fid_net(inputs)\n    assert outputs.shape == (1, 1008)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_functional/test_gaussian_funcs.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\n\nfrom mmagic.evaluation.functional import gauss_gradient\n\n\ndef test_gauss_gradient():\n    img = np.random.randint(0, 255, size=(8, 8, 3))\n    grad = gauss_gradient(img, 1.4)\n    assert grad.shape == (8, 8, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_functional/test_inception_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock\n\nfrom torch.utils.data import Dataset\n\nfrom mmagic.datasets.transforms import LoadImageFromFile\nfrom mmagic.evaluation.functional.inception_utils import (\n    get_inception_feat_cache_name_and_args, get_vgg_feat_cache_name_and_args)\n\n\ndef test_inception_feat_cache_name_args():\n    dataloader = MagicMock()\n    dataloader.dataset = MagicMock(spec=Dataset)\n    dataloader.dataset.data_root = 'test_root'\n    dataloader.dataset.data_prefix = 'test_prefix'\n    dataloader.dataset.metainfo = dict(meta_info='test_meta')\n    dataloader.dataset.pipeline = LoadImageFromFile(key='img')\n\n    metric = MagicMock()\n    metric.inception_style = 'test_style'\n    metric.real_key = 'test_key'\n    metric.inception_args = dict(args='test_args')\n    cache_tag_1, args_1 = get_inception_feat_cache_name_and_args(\n        dataloader, metric, 10, True, True)\n\n    dataloader = MagicMock()\n    dataloader.dataset = MagicMock(spec=Dataset)\n    dataloader.dataset.data_root = 'test_root'\n    dataloader.dataset.data_prefix = 'test_prefix'\n    dataloader.dataset.metainfo = dict(meta_info='test_meta')\n    dataloader.dataset.pipeline = LoadImageFromFile(key='img')\n\n    metric = MagicMock()\n    metric.inception_style = 'test_style'\n    metric.real_key = 'test_key'\n    metric.inception_args = dict(args='test_args')\n    cache_tag_2, args_2 = get_inception_feat_cache_name_and_args(\n        dataloader, metric, 10, True, True)\n    # check whether cache name are same with the same inputs\n    assert cache_tag_1 == cache_tag_2\n    assert args_1 == args_2\n\n\ndef test_vgg_feat_cache_name_args():\n    dataloader = MagicMock()\n    dataloader.dataset = MagicMock(spec=Dataset)\n    dataloader.dataset.data_root = 'test_root'\n    dataloader.dataset.data_prefix = 'test_prefix'\n    dataloader.dataset.metainfo = dict(meta_info='test_meta')\n    dataloader.dataset.pipeline = LoadImageFromFile(key='img')\n\n    metric = MagicMock()\n    metric.inception_style = 'test_style'\n    cache_tag_1, args_1 = get_vgg_feat_cache_name_and_args(dataloader, metric)\n\n    dataloader = MagicMock()\n    dataloader.dataset = MagicMock(spec=Dataset)\n    dataloader.dataset.data_root = 'test_root'\n    dataloader.dataset.data_prefix = 'test_prefix'\n    dataloader.dataset.metainfo = dict(meta_info='test_meta')\n    dataloader.dataset.pipeline = LoadImageFromFile(key='img')\n    cache_tag_2, args_2 = get_vgg_feat_cache_name_and_args(dataloader, metric)\n\n    # check whether cache name are same with the same inputs\n    assert cache_tag_1 == cache_tag_2\n    assert args_1 == args_2\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_base_gen_metric.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nimport torch\nfrom mmengine.model import MMDistributedDataParallel\n\nfrom mmagic.evaluation.metrics.base_gen_metric import (GenerativeMetric,\n                                                       GenMetric)\n\n\ndef mock_collect_fn(results, *args, **kwargs):\n    return results[0]\n\n\n@patch('mmagic.evaluation.metrics.base_gen_metric.collect_results',\n       mock_collect_fn)\nclass ToyMetric(GenMetric):\n\n    def process(self, data_batch, data_samples):\n        return\n\n    def compute_metrics(self, results):\n        return dict(score=1)\n\n\n@patch('mmagic.evaluation.metrics.base_gen_metric.collect_results',\n       mock_collect_fn)\nclass ToyGenerativeMetric(GenerativeMetric):\n\n    def process(self, data_batch, data_samples):\n        return\n\n    def compute_metrics(self, results):\n        return dict(score=1)\n\n\ndef test_GenMetric():\n    metric = ToyMetric(10, 10)\n    assert metric.real_nums_per_device == 10\n\n    metric.real_results = []\n\n    # test get_metric_sampler\n    model = MagicMock()\n    dataset = MagicMock()\n    dataset.__len__.return_value = 10\n    dataloader = MagicMock()\n    dataloader.batch_size = 4\n    dataloader.dataset = dataset\n    sampler = metric.get_metric_sampler(model, dataloader, [metric])\n    assert sampler.dataset == dataset\n\n    # test prepare\n    model = MagicMock(spec=MMDistributedDataParallel)\n    preprocessor = MagicMock()\n    model.module = MagicMock()\n    model.module.data_preprocessor = preprocessor\n    metric.prepare(model, dataloader)\n    assert metric.data_preprocessor == preprocessor\n\n    # test raise error with dataset is length than real_nums\n    dataset.__len__.return_value = 5\n    with pytest.raises(AssertionError):\n        metric.get_metric_sampler(model, dataloader, [metric])\n\n\ndef test_GenerativeMetric():\n    metric = ToyGenerativeMetric(11, need_cond_input=True)\n    assert metric.need_cond_input\n    assert metric.real_nums == 0\n    assert metric.fake_nums == 11\n\n    # NOTE: only test whether returned sampler is correct in this UT\n    def side_effect(index):\n        return {'gt_label': [i for i in range(index, index + 3)]}\n\n    dataset = MagicMock()\n    dataset.__len__ = MagicMock(return_value=2)\n    dataset.get_data_info.side_effect = side_effect\n    dataloader = MagicMock()\n    dataloader.batch_size = 10\n    dataloader.dataset = dataset\n\n    model = MagicMock()\n    sampler = metric.get_metric_sampler(model, dataloader, [metric])\n    assert sampler.dataset == dataset\n    assert sampler.batch_size == 10\n    assert sampler.max_length == 11\n    assert sampler.sample_model == 'ema'\n\n    # index passed to `side_effect` can only be 0 or 1\n    assert len(sampler) == 2\n\n    iterator = iter(sampler)\n    output = next(iterator)\n    assert output['inputs'] == dict(\n        sample_model='ema', num_batches=10, sample_kwargs={})\n    assert len(output['data_samples']) == 10\n\n    target_label_list = [\n        torch.FloatTensor([0, 1, 2]),\n        torch.FloatTensor([1, 2, 3])\n    ]\n    # check if all cond in target label list\n    for data in output['data_samples']:\n        label = data.gt_label.label\n        assert any([(label == tar).all() for tar in target_label_list])\n\n    # test with sample kwargs\n    sample_kwargs = dict(\n        num_inference_steps=250, show_progress=True, classifier_scale=1.)\n    metric = ToyGenerativeMetric(\n        11, need_cond_input=True, sample_kwargs=sample_kwargs)\n    sampler = metric.get_metric_sampler(model, dataloader, [metric])\n    iterator = iter(sampler)\n    output = next(iterator)\n    assert output['inputs'] == dict(\n        sample_model='ema', num_batches=10, sample_kwargs=sample_kwargs)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_base_sample_wise_metric.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest.mock import MagicMock\n\nimport numpy as np\nimport torch\nfrom torch.utils.data.dataloader import DataLoader\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.evaluation.metrics.base_sample_wise_metric import \\\n    BaseSampleWiseMetric\n\n\nclass BaseSampleWiseMetricMock(BaseSampleWiseMetric):\n\n    metric = 'metric'\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def process_image(self, *args, **kwargs):\n        return 0\n\n\ndef test_compute_metrics():\n    metric = BaseSampleWiseMetricMock()\n\n    results = []\n    key = 'metric'\n    total = 0\n    n = 0\n    for i in range(10):\n        results.append({'batch_size': i, key: i})\n        total += i * i\n        n += i\n    average = metric.compute_metrics(results)\n    assert average[key] == total / n\n\n\ndef test_process():\n    metric = BaseSampleWiseMetricMock()\n\n    mask = np.ones((32, 32, 3)) * 2\n    mask[:16] *= 0\n    gt = np.ones((32, 32, 3)) * 2\n    data_sample = dict(gt_img=gt, mask=mask)\n    data_batch = [dict(data_samples=data_sample)]\n    predictions = [dict(pred_img=np.ones((32, 32, 3)))]\n\n    data_batch.append(\n        dict(\n            data_samples=dict(\n                gt_img=torch.from_numpy(gt), mask=torch.from_numpy(mask))))\n\n    predictions.append({\n        k: torch.from_numpy(deepcopy(v))\n        for (k, v) in predictions[0].items()\n    })\n\n    for d, p in zip(data_batch, predictions):\n        d['output'] = p\n\n    predictions = data_batch\n    metric.process(data_batch, predictions)\n    assert len(metric.results) == 2\n    assert metric.results[0]['metric'] == 0\n\n\ndef test_prepare():\n    data_root = 'tests/data/image/'\n    dataset = BasicImageDataset(\n        metainfo=dict(dataset_type='sr_annotation_dataset', task_name='sisr'),\n        data_root=data_root,\n        data_prefix=dict(img='lq', gt='gt'),\n        filename_tmpl=dict(img='{}_x4'),\n        pipeline=[])\n    dataloader = DataLoader(dataset)\n\n    metric = BaseSampleWiseMetricMock()\n    model = MagicMock()\n    model.data_preprocessor = MagicMock()\n\n    metric.prepare(model, dataloader)\n    assert metric.SAMPLER_MODE == 'normal'\n    assert metric.sample_model == 'orig'\n    assert metric.size == 1\n    assert metric.data_preprocessor == model.data_preprocessor\n\n    metric.get_metric_sampler(None, dataloader, [])\n    assert dataloader == dataloader\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_connectivity_error.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.datasets.transforms import LoadImageFromFile\nfrom mmagic.evaluation.metrics import ConnectivityError\n\n\nclass TestMattingMetrics:\n\n    @classmethod\n    def setup_class(cls):\n        # Make sure these values are immutable across different test cases.\n\n        # This test depends on the interface of loading\n        # if loading is changed, data should be change accordingly.\n        test_path = Path(__file__).parent.parent.parent\n        alpha_path = (\n            test_path / 'data' / 'matting_dataset' / 'alpha' / 'GT05.jpg')\n\n        results = dict(alpha_path=alpha_path)\n        config = dict(key='alpha')\n        image_loader = LoadImageFromFile(**config)\n        results = image_loader(results)\n        assert results['alpha'].ndim == 3\n\n        gt_alpha = np.ones((32, 32), dtype=np.uint8) * 255\n        trimap = np.zeros((32, 32), dtype=np.uint8)\n        trimap[:16, :16] = 128\n        trimap[16:, 16:] = 255\n        # non-masked pred_alpha\n        pred_alpha = torch.zeros((32, 32), dtype=torch.uint8)\n        # masked pred_alpha\n        masked_pred_alpha = pred_alpha.clone()\n        masked_pred_alpha[trimap == 0] = 0\n        masked_pred_alpha[trimap == 255] = 255\n\n        gt_alpha = gt_alpha[None, ...]\n        trimap = trimap[None, ...]\n\n        cls.data_batch = [{\n            'inputs': [],\n            'data_samples': {\n                'ori_trimap': torch.from_numpy(trimap),\n                'ori_alpha': torch.from_numpy(gt_alpha),\n            },\n        }]\n\n        cls.data_samples = [d_['data_samples'] for d_ in cls.data_batch]\n\n        cls.bad_preds1_ = [{'pred_alpha': pred_alpha}]\n        # pred_alpha should be masked by trimap before evaluation\n        cls.bad_preds1 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds1, cls.bad_preds1_):\n            d['output'] = p\n\n        cls.bad_preds2_ = [{'pred_alpha': pred_alpha[0]}]\n        # pred_alpha should be 3 dimensional\n        cls.bad_preds2 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds2, cls.bad_preds2_):\n            d['output'] = p\n\n        cls.good_preds_ = [{'pred_alpha': masked_pred_alpha}]\n        cls.good_preds = copy.deepcopy((cls.data_samples))\n        for d, p in zip(cls.good_preds, cls.good_preds_):\n            d['output'] = p\n\n    def test_connectivity_error(self):\n        \"\"\"Test connectivity error for evaluating predicted alpha matte.\"\"\"\n\n        data_batch, bad_pred1, bad_pred2, good_pred = (\n            self.data_batch,\n            self.bad_preds1,\n            self.bad_preds2,\n            self.good_preds,\n        )\n\n        conn_err = ConnectivityError()\n\n        with pytest.raises(ValueError):\n            conn_err.process(data_batch, bad_pred1)\n\n        with pytest.raises(ValueError):\n            conn_err.process(data_batch, bad_pred2)\n\n        # process 2 batches\n        conn_err.process(data_batch, good_pred)\n        conn_err.process(data_batch, good_pred)\n\n        assert conn_err.results == [\n            {\n                'conn_err': 0.256,\n            },\n            {\n                'conn_err': 0.256,\n            },\n        ]\n\n        res = conn_err.compute_metrics(conn_err.results)\n\n        assert list(res.keys()) == ['ConnectivityError']\n        assert np.allclose(res['ConnectivityError'], 0.256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_equivariance.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nfrom mmengine.runner import Runner\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.evaluation import Equivariance\nfrom mmagic.models import DataPreprocessor, StyleGAN3\nfrom mmagic.models.editors.stylegan3 import StyleGAN3Generator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef process_fn(data_batch, predictions):\n\n    _predictions = []\n    for pred in predictions:\n        _predictions.append(pred.to_dict())\n    return data_batch, _predictions\n\n\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) < digit_version('1.8.0'),\n    reason='version limitation')\nclass TestEquivariance:\n\n    @classmethod\n    def setup_class(cls):\n        pipeline = [\n            dict(type='LoadImageFromFile', key='img'),\n            dict(type='Resize', scale=(64, 64)),\n            PackInputs()\n        ]\n        dataset = BasicImageDataset(\n            data_root='./tests/data/image/img_root',\n            pipeline=pipeline,\n            test_mode=True)\n        cls.dataloader = Runner.build_dataloader(\n            dict(\n                batch_size=2,\n                dataset=dataset,\n                sampler=dict(type='DefaultSampler')))\n        gan_data_preprocessor = DataPreprocessor()\n        generator = StyleGAN3Generator(64, 8, 3, noise_size=8)\n        cls.module = StyleGAN3(\n            generator, data_preprocessor=gan_data_preprocessor)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    @torch.no_grad()\n    def test_eq_cuda(self):\n        eq = Equivariance(\n            2,\n            eq_cfg=dict(\n                compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True),\n            sample_mode='orig')\n        self.module.cuda()\n        sampler = eq.get_metric_sampler(self.module, self.dataloader, [eq])\n        eq.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            eq.process(_data_batch, _predictions)\n        eq_res = eq.compute_metrics(eq.fake_results)\n        isinstance(eq_res['eqt_int'], float) and isinstance(\n            eq_res['eqt_frac'], float) and isinstance(eq_res['eqr'], float)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_fid.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport pickle\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, patch\n\nimport numpy as np\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.runner import Runner\n\nfrom mmagic.datasets import PairedImageDataset\nfrom mmagic.evaluation import FrechetInceptionDistance, TransFID\nfrom mmagic.models import DataPreprocessor, Pix2Pix\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef process_fn(data_batch, predictions):\n\n    _predictions = []\n    for pred in predictions:\n        _predictions.append(pred.to_dict())\n    return data_batch, _predictions\n\n\ndef construct_inception_pkl(inception_path):\n    data_root = osp.dirname(inception_path)\n    os.makedirs(data_root, exist_ok=True)\n    with open(inception_path, 'wb') as file:\n        feat = np.random.rand(10, 2048)\n        mean = np.mean(feat, 0)\n        cov = np.cov(feat, rowvar=False)\n        inception_feat = dict(raw_feature=feat, real_mean=mean, real_cov=cov)\n        pickle.dump(inception_feat, file)\n\n\nclass inception_mock(nn.Module):\n\n    def __init__(self, style):\n        super().__init__()\n        self.style = style\n\n    def forward(self, x, *args, **kwargs):\n        mock_feat = torch.randn(x.shape[0], 2048)\n        if self.style.upper() in ['STYLEGAN', 'IS']:\n            return mock_feat\n        else:\n            return [mock_feat]\n\n\nclass TestFID(TestCase):\n\n    inception_pkl = osp.join(\n        osp.dirname(__file__), '..', '..',\n        'data/inception_pkl/inception_feat.pkl')\n\n    mock_inception_stylegan = MagicMock(\n        return_value=(inception_mock('StyleGAN'), 'StyleGAN'))\n    mock_inception_pytorch = MagicMock(\n        return_value=(inception_mock('PyTorch'), 'PyTorch'))\n\n    def test_init(self):\n        construct_inception_pkl(self.inception_pkl)\n\n        with patch.object(FrechetInceptionDistance, '_load_inception',\n                          self.mock_inception_stylegan):\n\n            fid = FrechetInceptionDistance(\n                fake_nums=2,\n                real_key='real',\n                fake_key='fake',\n                inception_pkl=self.inception_pkl)\n\n            self.assertFalse(fid.need_cond_input)\n            self.assertIsNone(fid.real_mean)\n            self.assertIsNone(fid.real_cov)\n\n        module = MagicMock()\n        module.data_preprocessor = MagicMock()\n        module.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n        fid.prepare(module, dataloader)\n\n        self.assertIsNotNone(fid.real_mean)\n        self.assertIsNotNone(fid.real_cov)\n\n    def test_prepare(self):\n\n        module = MagicMock()\n        module.data_preprocessor = MagicMock()\n        module.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n\n        with patch.object(FrechetInceptionDistance, '_load_inception',\n                          self.mock_inception_stylegan):\n            fid = FrechetInceptionDistance(\n                fake_nums=2,\n                real_nums=2,\n                real_key='real',\n                fake_key='fake',\n                inception_pkl=self.inception_pkl)\n        fid.prepare(module, dataloader)\n\n    # NOTE: do not test load inception network to save time\n    # def test_load_inception(self):\n    #     fid = FrechetInceptionDistance(\n    #         fake_nums=2,\n    #         real_nums=2,\n    #         real_key='real',\n    #         fake_key='fake',\n    #         inception_style='PyTorch',\n    #         inception_pkl=self.inception_pkl)\n    #     self.assertEqual(fid.inception_style.upper(), 'PYTORCH')\n\n    def test_process_and_compute(self):\n        with patch.object(FrechetInceptionDistance, '_load_inception',\n                          self.mock_inception_stylegan):\n            fid = FrechetInceptionDistance(\n                fake_nums=2,\n                real_nums=2,\n                real_key='real',\n                fake_key='fake',\n                inception_pkl=self.inception_pkl)\n        gen_images = torch.randn(4, 3, 2, 2)\n        gen_samples = [\n            DataSample(fake=(gen_images[i])).to_dict() for i in range(4)\n        ]\n        fid.process(None, gen_samples)\n        fid.process(None, gen_samples)\n\n        fid.fake_results.clear()\n        gen_sample = [\n            DataSample(orig=DataSample(fake=torch.randn(3, 2, 2))).to_dict()\n        ]\n        fid.process(None, gen_sample)\n        gen_sample = [\n            DataSample(orig=DataSample(\n                fake_img=torch.randn(3, 2, 2))).to_dict()\n        ]\n        fid.process(None, gen_sample)\n\n        with patch.object(FrechetInceptionDistance, '_load_inception',\n                          self.mock_inception_pytorch):\n            fid = FrechetInceptionDistance(\n                fake_nums=2,\n                real_nums=2,\n                real_key='real',\n                fake_key='fake',\n                inception_style='PyTorch',\n                inception_pkl=self.inception_pkl)\n        module = MagicMock()\n        module.data_preprocessor = MagicMock()\n        module.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n        fid.prepare(module, dataloader)\n        gen_samples = [\n            DataSample(fake_img=torch.randn(3, 2, 2)).to_dict()\n            for _ in range(4)\n        ]\n        fid.process(None, gen_samples)\n\n        metric = fid.evaluate()\n        self.assertIsInstance(metric, dict)\n        self.assertTrue('fid' in metric)\n        self.assertTrue('mean' in metric)\n        self.assertTrue('cov' in metric)\n\n\nclass TestTransFID:\n    inception_pkl = osp.join(\n        osp.dirname(__file__), '..', '..',\n        'data/inception_pkl/inception_feat.pkl')\n\n    mock_inception_stylegan = MagicMock(\n        return_value=(inception_mock('StyleGAN'), 'StyleGAN'))\n    mock_inception_pytorch = MagicMock(\n        return_value=(inception_mock('PyTorch'), 'PyTorch'))\n\n    @classmethod\n    def setup_class(cls):\n        pipeline = [\n            dict(\n                type='LoadPairedImageFromFile',\n                key='pair',\n                domain_a='edge',\n                domain_b='shoe',\n                color_type='color'),\n            dict(\n                type='TransformBroadcaster',\n                mapping={'img': ['img_edge', 'img_shoe']},\n                auto_remap=True,\n                share_random_params=True,\n                transforms=[\n                    dict(\n                        type='Resize',\n                        scale=(256, 256),\n                        interpolation='bicubic'),\n                    dict(type='FixedCrop', keys=['img'], crop_size=(256, 256))\n                ]),\n            dict(type='PackInputs', keys=['img_edge', 'img_shoe', 'pair'])\n        ]\n        dataset = PairedImageDataset(\n            data_root='tests/data/paired', pipeline=pipeline, test_mode=True)\n        cls.dataloader = Runner.build_dataloader(\n            dict(\n                batch_size=2,\n                dataset=dataset,\n                sampler=dict(type='DefaultSampler')))\n        gan_data_preprocessor = DataPreprocessor()\n        generator = dict(\n            type='UnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_down=8,\n            base_channels=64,\n            norm_cfg=dict(type='BN'),\n            use_dropout=True,\n            init_cfg=dict(type='normal', gain=0.02))\n        discriminator = dict(\n            type='PatchDiscriminator',\n            in_channels=6,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='BN'),\n            init_cfg=dict(type='normal', gain=0.02))\n        cls.module = Pix2Pix(\n            generator,\n            discriminator,\n            data_preprocessor=gan_data_preprocessor,\n            default_domain='shoe',\n            reachable_domains=['shoe'],\n            related_domains=['shoe', 'edge'])\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_trans_fid_cuda(self):\n        return\n        with patch.object(TransFID, '_load_inception',\n                          self.mock_inception_stylegan):\n            fid = TransFID(\n                prefix='FID-Full',\n                fake_nums=2,\n                real_key='img_shoe',\n                fake_key='fake_shoe',\n                inception_style='PyTorch')\n        self.module.cuda()\n        sampler = fid.get_metric_sampler(self.module, self.dataloader, [fid])\n        fid.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            fid.process(_data_batch, _predictions)\n        fid_res = fid.compute_metrics(fid.fake_results)\n        assert fid_res['fid'] >= 0 and fid_res['mean'] >= 0 and fid_res[\n            'cov'] >= 0\n\n    def test_trans_fid_cpu(self):\n        return\n        with patch.object(TransFID, '_load_inception',\n                          self.mock_inception_stylegan):\n            fid = TransFID(\n                prefix='FID-Full',\n                fake_nums=2,\n                real_key='img_shoe',\n                fake_key='fake_shoe',\n                inception_style='PyTorch')\n        sampler = fid.get_metric_sampler(self.module, self.dataloader, [fid])\n        fid.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            fid.process(_data_batch, _predictions)\n        fid_res = fid.compute_metrics(fid.fake_results)\n        assert fid_res['fid'] >= 0 and fid_res['mean'] >= 0 and fid_res[\n            'cov'] >= 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_gradient_error.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.datasets.transforms import LoadImageFromFile\nfrom mmagic.evaluation.metrics import GradientError\n\n\nclass TestMattingMetrics:\n\n    @classmethod\n    def setup_class(cls):\n        # Make sure these values are immutable across different test cases.\n\n        # This test depends on the interface of loading\n        # if loading is changed, data should be change accordingly.\n        test_path = Path(__file__).parent.parent.parent\n        alpha_path = (\n            test_path / 'data' / 'matting_dataset' / 'alpha' / 'GT05.jpg')\n\n        results = dict(alpha_path=alpha_path)\n        config = dict(key='alpha')\n        image_loader = LoadImageFromFile(**config)\n        results = image_loader(results)\n        assert results['alpha'].ndim == 3\n\n        gt_alpha = np.ones((32, 32), dtype=np.uint8) * 255\n        trimap = np.zeros((32, 32), dtype=np.uint8)\n        trimap[:16, :16] = 128\n        trimap[16:, 16:] = 255\n        # non-masked pred_alpha\n        pred_alpha = torch.zeros((32, 32), dtype=torch.uint8)\n        # masked pred_alpha\n        masked_pred_alpha = pred_alpha.clone()\n        masked_pred_alpha[trimap == 0] = 0\n        masked_pred_alpha[trimap == 255] = 255\n\n        gt_alpha = gt_alpha[None, ...]\n        trimap = trimap[None, ...]\n\n        cls.data_batch = [{\n            'inputs': [],\n            'data_samples': {\n                'ori_trimap': torch.from_numpy(trimap),\n                'ori_alpha': torch.from_numpy(gt_alpha),\n            },\n        }]\n\n        cls.data_samples = [d_['data_samples'] for d_ in cls.data_batch]\n\n        cls.bad_preds1_ = [{'pred_alpha': pred_alpha}]\n        # pred_alpha should be masked by trimap before evaluation\n        cls.bad_preds1 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds1, cls.bad_preds1_):\n            d['output'] = p\n\n        cls.bad_preds2_ = [{'pred_alpha': pred_alpha[0]}]\n        # pred_alpha should be 3 dimensional\n        cls.bad_preds2 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds2, cls.bad_preds2_):\n            d['output'] = p\n\n        cls.good_preds_ = [{'pred_alpha': masked_pred_alpha}]\n        cls.good_preds = copy.deepcopy((cls.data_samples))\n        for d, p in zip(cls.good_preds, cls.good_preds_):\n            d['output'] = p\n\n    def test_gradient_error(self):\n        \"\"\"Test gradient error for evaluating predicted alpha matte.\"\"\"\n\n        data_batch, bad_pred1, bad_pred2, good_pred = (\n            self.data_batch,\n            self.bad_preds1,\n            self.bad_preds2,\n            self.good_preds,\n        )\n\n        grad_err = GradientError()\n\n        with pytest.raises(ValueError):\n            grad_err.process(data_batch, bad_pred1)\n\n        with pytest.raises(ValueError):\n            grad_err.process(data_batch, bad_pred2)\n\n        # process 2 batches\n        grad_err.process(data_batch, good_pred)\n        grad_err.process(data_batch, good_pred)\n\n        assert len(grad_err.results) == 2\n        for el in grad_err.results:\n            assert list(el.keys()) == ['grad_err']\n            np.testing.assert_almost_equal(el['grad_err'], 0.0028887)\n\n        res = grad_err.compute_metrics(grad_err.results)\n\n        assert list(res.keys()) == ['GradientError']\n        np.testing.assert_almost_equal(el['grad_err'], 0.0028887)\n        # assert np.allclose(res['GradientError'], 0.0028887)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_inception_score.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.runner import Runner\n\nfrom mmagic.datasets import PairedImageDataset\nfrom mmagic.evaluation import InceptionScore, TransIS\nfrom mmagic.models import DataPreprocessor, Pix2Pix\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef process_fn(data_batch, predictions):\n\n    _predictions = []\n    for pred in predictions:\n        _predictions.append(pred.to_dict())\n    return data_batch, _predictions\n\n\nclass inception_mock(nn.Module):\n\n    def __init__(self, style):\n        super().__init__()\n        self.style = style\n\n    def forward(self, x, *args, **kwargs):\n        mock_feat = torch.randn(x.shape[0], 2048)\n        if self.style.upper() in ['STYLEGAN', 'IS']:\n            return mock_feat\n        else:\n            return [mock_feat]\n\n\nclass TestIS(TestCase):\n\n    mock_inception_stylegan = MagicMock(\n        return_value=(inception_mock('IS'), 'StyleGAN'))\n    mock_inception_pytorch = MagicMock(\n        return_value=(inception_mock('IS'), 'PyTorch'))\n\n    def test_init(self):\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = InceptionScore(fake_nums=2, fake_key='fake')\n\n        from PIL import Image\n        self.assertEqual(IS.resize, True)\n        self.assertEqual(IS.splits, 10)\n        self.assertEqual(IS.resize_method, Image.BICUBIC)\n\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = InceptionScore(\n                fake_nums=2, fake_key='fake', use_pillow_resize=False)\n        self.assertEqual(IS.use_pillow_resize, False)\n        self.assertEqual(IS.resize_method, 'bicubic')\n\n        module = MagicMock()\n        module.data_preprocessor = MagicMock()\n        module.data_preprocessor.device = 'cpu'\n        dataloader = MagicMock()\n        IS.prepare(module, dataloader)\n\n    # NOTE: do not test load inception network to save time\n    # def test_load_inception(self):\n    #     IS = InceptionScore(fake_nums=2, inception_style='PyTorch')\n    #     self.assertEqual(IS.inception_style.upper(), 'PYTORCH')\n\n    def test_process_and_compute(self):\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = InceptionScore(fake_nums=2, fake_key='fake')\n        gen_images = torch.randn(4, 3, 2, 2)\n        gen_samples = [\n            DataSample(fake_img=img).to_dict() for img in gen_images\n        ]\n        IS.process(None, gen_samples)\n        IS.process(None, gen_samples)\n\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_pytorch):\n            IS = InceptionScore(\n                fake_nums=2, fake_key='fake', inception_style='PyTorch')\n        gen_images = torch.randn(4, 3, 2, 2)\n        gen_samples = [\n            DataSample(fake_img=img).to_dict() for img in gen_images\n        ]\n        IS.process(None, gen_samples)\n\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = InceptionScore(\n                fake_nums=2, fake_key='fake', sample_model='orig')\n        gen_samples = [\n            DataSample(\n                ema=DataSample(fake_img=torch.randn(3, 2, 2)),\n                orig=DataSample(fake_img=torch.randn(3, 2, 2))).to_dict()\n        ]\n        IS.process(None, gen_samples)\n        gen_samples = [\n            DataSample(orig=DataSample(fake=torch.randn(3, 2, 2))).to_dict()\n        ]\n        IS.process(None, gen_samples)\n\n        with patch.object(InceptionScore, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = InceptionScore(\n                fake_nums=2, fake_key='fake', sample_model='orig')\n        gen_samples = [\n            DataSample(fake_img=torch.randn(3, 2, 2)).to_dict()\n            for _ in range(4)\n        ]\n        IS.process(None, gen_samples)\n\n        metric = IS.evaluate()\n        self.assertIsInstance(metric, dict)\n        self.assertTrue('is' in metric)\n        self.assertTrue('is_std' in metric)\n\n\nclass TestTransIS:\n    inception_pkl = osp.join(\n        osp.dirname(__file__), '..', '..',\n        'data/inception_pkl/inception_feat.pkl')\n\n    mock_inception_stylegan = MagicMock(\n        return_value=(inception_mock('StyleGAN'), 'StyleGAN'))\n    mock_inception_pytorch = MagicMock(\n        return_value=(inception_mock('PyTorch'), 'PyTorch'))\n\n    @classmethod\n    def setup_class(cls):\n        pipeline = [\n            dict(\n                type='LoadPairedImageFromFile',\n                key='pair',\n                domain_a='edge',\n                domain_b='shoe',\n                color_type='color'),\n            dict(\n                type='TransformBroadcaster',\n                mapping={'img': ['img_edge', 'img_shoe']},\n                auto_remap=True,\n                share_random_params=True,\n                transforms=[\n                    dict(\n                        type='Resize',\n                        scale=(286, 286),\n                        interpolation='bicubic'),\n                    dict(type='FixedCrop', keys=['img'], crop_size=(256, 256))\n                ]),\n            dict(type='PackInputs', keys=['img_edge', 'img_shoe', 'pair'])\n        ]\n        dataset = PairedImageDataset(\n            data_root='tests/data/paired', pipeline=pipeline, test_mode=True)\n        cls.dataloader = Runner.build_dataloader(\n            dict(\n                batch_size=2,\n                dataset=dataset,\n                sampler=dict(type='DefaultSampler')))\n        gan_data_preprocessor = DataPreprocessor()\n        generator = dict(\n            type='UnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_down=8,\n            base_channels=64,\n            norm_cfg=dict(type='BN'),\n            use_dropout=True,\n            init_cfg=dict(type='normal', gain=0.02))\n        discriminator = dict(\n            type='PatchDiscriminator',\n            in_channels=6,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='BN'),\n            init_cfg=dict(type='normal', gain=0.02))\n        cls.module = Pix2Pix(\n            generator,\n            discriminator,\n            data_preprocessor=gan_data_preprocessor,\n            default_domain='shoe',\n            reachable_domains=['shoe'],\n            related_domains=['shoe', 'edge'])\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_trans_is_cuda(self):\n        return\n        with patch.object(TransIS, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = TransIS(\n                prefix='IS-Full',\n                fake_nums=2,\n                inception_style='PyTorch',\n                fake_key='fake_shoe',\n                sample_model='orig')\n        self.module.cuda()\n        sampler = IS.get_metric_sampler(self.module, self.dataloader, [IS])\n        IS.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            IS.process(_data_batch, _predictions)\n        IS_res = IS.compute_metrics(IS.fake_results)\n        assert 'is' in IS_res and 'is_std' in IS_res\n\n    def test_trans_is_cpu(self):\n        return\n        with patch.object(TransIS, '_load_inception',\n                          self.mock_inception_stylegan):\n            IS = TransIS(\n                prefix='IS-Full',\n                fake_nums=2,\n                inception_style='PyTorch',\n                fake_key='fake_shoe',\n                sample_model='orig')\n        sampler = IS.get_metric_sampler(self.module, self.dataloader, [IS])\n        IS.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            IS.process(_data_batch, _predictions)\n        IS_res = IS.compute_metrics(IS.fake_results)\n        assert 'is' in IS_res and 'is_std' in IS_res\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_mae.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\n\nfrom mmagic.evaluation.metrics import MAE\n\n\nclass TestPixelMetrics:\n\n    @classmethod\n    def setup_class(cls):\n\n        mask = np.ones((32, 32, 3)) * 2\n        mask[:16] *= 0\n        gt = np.ones((32, 32, 3)) * 2\n        data_sample = dict(gt_img=gt, mask=mask, gt_channel_order='bgr')\n        cls.data_batch = [dict(data_samples=data_sample)]\n        cls.predictions = [dict(pred_img=np.ones((32, 32, 3)))]\n\n        cls.data_batch.append(\n            dict(\n                data_samples=dict(\n                    gt_img=torch.from_numpy(gt),\n                    mask=torch.from_numpy(mask),\n                    img_channel_order='bgr')))\n        cls.predictions.append({\n            k: torch.from_numpy(deepcopy(v))\n            for (k, v) in cls.predictions[0].items()\n        })\n\n        for d, p in zip(cls.data_batch, cls.predictions):\n            d['output'] = p\n        cls.predictions = cls.data_batch\n\n    def test_mae(self):\n\n        # Single MAE\n        mae = MAE()\n        mae.process(self.data_batch, self.predictions)\n        result = mae.compute_metrics(mae.results)\n        assert 'MAE' in result\n        np.testing.assert_almost_equal(result['MAE'], 0.003921568627)\n\n        # Masked MAE\n        mae = MAE(mask_key='mask', prefix='MAE')\n        mae.process(self.data_batch, self.predictions)\n        result = mae.compute_metrics(mae.results)\n        assert 'MAE' in result\n        np.testing.assert_almost_equal(result['MAE'], 0.003921568627)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_matting_mse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.datasets.transforms import LoadImageFromFile\nfrom mmagic.evaluation.metrics import MattingMSE\n\n\nclass TestMattingMetrics:\n\n    @classmethod\n    def setup_class(cls):\n        # Make sure these values are immutable across different test cases.\n\n        # This test depends on the interface of loading\n        # if loading is changed, data should be change accordingly.\n        test_path = Path(__file__).parent.parent.parent\n        alpha_path = (\n            test_path / 'data' / 'matting_dataset' / 'alpha' / 'GT05.jpg')\n\n        results = dict(alpha_path=alpha_path)\n        config = dict(key='alpha')\n        image_loader = LoadImageFromFile(**config)\n        results = image_loader(results)\n        assert results['alpha'].ndim == 3\n\n        gt_alpha = np.ones((32, 32), dtype=np.uint8) * 255\n        trimap = np.zeros((32, 32), dtype=np.uint8)\n        trimap[:16, :16] = 128\n        trimap[16:, 16:] = 255\n        # non-masked pred_alpha\n        pred_alpha = torch.zeros((32, 32), dtype=torch.uint8)\n        # masked pred_alpha\n        masked_pred_alpha = pred_alpha.clone()\n        masked_pred_alpha[trimap == 0] = 0\n        masked_pred_alpha[trimap == 255] = 255\n\n        gt_alpha = gt_alpha[None, ...]\n        trimap = trimap[None, ...]\n\n        cls.data_batch = [{\n            'inputs': [],\n            'data_samples': {\n                'ori_trimap': torch.from_numpy(trimap),\n                'ori_alpha': torch.from_numpy(gt_alpha),\n            },\n        }]\n\n        cls.data_samples = [d_['data_samples'] for d_ in cls.data_batch]\n\n        cls.bad_preds1_ = [{'pred_alpha': pred_alpha}]\n        # pred_alpha should be masked by trimap before evaluation\n        cls.bad_preds1 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds1, cls.bad_preds1_):\n            d['output'] = p\n\n        cls.bad_preds2_ = [{'pred_alpha': pred_alpha[0]}]\n        # pred_alpha should be 3 dimensional\n        cls.bad_preds2 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds2, cls.bad_preds2_):\n            d['output'] = p\n\n        cls.good_preds_ = [{'pred_alpha': masked_pred_alpha}]\n        cls.good_preds = copy.deepcopy((cls.data_samples))\n        for d, p in zip(cls.good_preds, cls.good_preds_):\n            d['output'] = p\n\n    def test_mse(self):\n        \"\"\"Test MattingMSE for evaluating predicted alpha matte.\"\"\"\n\n        data_batch, bad_pred1, bad_pred2, good_pred = (\n            self.data_batch,\n            self.bad_preds1,\n            self.bad_preds2,\n            self.good_preds,\n        )\n\n        mse = MattingMSE()\n\n        with pytest.raises(ValueError):\n            mse.process(data_batch, bad_pred1)\n\n        with pytest.raises(ValueError):\n            mse.process(data_batch, bad_pred2)\n\n        # process 2 batches\n        mse.process(data_batch, good_pred)\n        mse.process(data_batch, good_pred)\n\n        assert mse.results == [\n            {\n                'mse': 3.0,\n            },\n            {\n                'mse': 3.0,\n            },\n        ]\n\n        res = mse.compute_metrics(mse.results)\n\n        assert list(res.keys()) == ['MattingMSE']\n        np.testing.assert_almost_equal(res['MattingMSE'], 3.0)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_metrics_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\n\nfrom mmagic.evaluation.metrics import metrics_utils\nfrom mmagic.evaluation.metrics.metrics_utils import reorder_image\n\n\ndef test_average():\n    results = []\n    key = 'data'\n    total = 0\n    n = 0\n    for i in range(10):\n        results.append({'batch_size': i, key: i})\n        total += i * i\n        n += i\n    average = metrics_utils.average(results, key)\n    assert average == total / n\n\n\ndef test_img_transform():\n    img = np.random.randint(0, 255, size=(4, 4, 3))\n    new_img = metrics_utils.img_transform(img, 0, 'HWC', None, 'rgb')\n    assert new_img.shape == (4, 4, 3)\n\n\ndef test_obtain_data():\n    img = np.random.randint(0, 255, size=(4, 4, 3))\n    key = 'img'\n    data_sample = {'data_samples': {key: img}}\n    result = metrics_utils.obtain_data(data_sample, key)\n    assert not (result - img).any()\n\n\ndef test_reorder_image():\n    img_hw = np.ones((32, 32))\n    img_hwc = np.ones((32, 32, 3))\n    img_chw = np.ones((3, 32, 32))\n\n    with pytest.raises(ValueError):\n        reorder_image(img_hw, 'HH')\n\n    output = reorder_image(img_hw)\n    assert output.shape == (32, 32, 1)\n\n    output = reorder_image(img_hwc)\n    assert output.shape == (32, 32, 3)\n\n    output = reorder_image(img_chw, input_order='CHW')\n    assert output.shape == (32, 32, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_ms_ssim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport torch\n\nfrom mmagic.evaluation import MultiScaleStructureSimilarity\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestMS_SSIM(TestCase):\n\n    def test_init(self):\n        MS_SSIM = MultiScaleStructureSimilarity(\n            fake_nums=10, fake_key='fake', sample_model='ema')\n        self.assertEqual(MS_SSIM.num_pairs, 5)\n\n        with self.assertRaises(AssertionError):\n            MultiScaleStructureSimilarity(fake_nums=9)\n\n    def test_process_and_evaluate(self):\n        MS_SSIM = MultiScaleStructureSimilarity(\n            fake_nums=4, fake_key='fake', sample_model='ema')\n\n        input_batch_size = 6\n        input_pairs = 6 // 2\n        gen_images = torch.randint(0, 255, (input_batch_size, 3, 32, 32))\n        gen_samples = [\n            DataSample(fake_img=img).to_dict() for img in gen_images\n        ]\n\n        MS_SSIM.process(None, gen_samples)\n        MS_SSIM.process(None, gen_samples)\n        self.assertEqual(len(MS_SSIM.fake_results), input_pairs)\n        metric_1 = MS_SSIM.evaluate()\n        self.assertTrue('avg' in metric_1)\n\n        MS_SSIM.fake_results.clear()\n        MS_SSIM.process(None, gen_samples[:4])\n        self.assertEqual(len(MS_SSIM.fake_results), 4 // 2)\n        metric_2 = MS_SSIM.evaluate()\n        self.assertTrue('avg' in metric_2)\n\n        MS_SSIM.fake_results.clear()\n        gen_samples = [\n            DataSample(\n                ema=DataSample(fake_img=torch.randint(0, 255, (3, 32, 32))),\n                orig=DataSample(\n                    fake_img=torch.randint(0, 255, (3, 32, 32)))).to_dict()\n        ] * 2\n        MS_SSIM.process(None, gen_samples)\n\n        gen_samples = [\n            DataSample(\n                ema=DataSample(\n                    fake=torch.randint(0, 255, (3, 32, 32)))).to_dict()\n        ] * 2\n        MS_SSIM.process(None, gen_samples)\n\n        # test prefix\n        MS_SSIM = MultiScaleStructureSimilarity(\n            fake_nums=4, fake_key='fake', sample_model='ema', prefix='ms-ssim')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_mse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport torch\n\nfrom mmagic.evaluation.metrics import MSE\n\n\nclass TestPixelMetrics:\n\n    @classmethod\n    def setup_class(cls):\n\n        mask = np.ones((32, 32, 3)) * 2\n        mask[:16] *= 0\n        gt = np.ones((32, 32, 3)) * 2\n        data_sample = dict(gt_img=gt, mask=mask, gt_channel_order='bgr')\n        cls.data_batch = [dict(data_samples=data_sample)]\n        cls.predictions = [dict(pred_img=np.ones((32, 32, 3)))]\n\n        cls.data_batch.append(\n            dict(\n                data_samples=dict(\n                    gt_img=torch.from_numpy(gt),\n                    mask=torch.from_numpy(mask),\n                    img_channel_order='bgr')))\n        cls.predictions.append({\n            k: torch.from_numpy(deepcopy(v))\n            for (k, v) in cls.predictions[0].items()\n        })\n\n        for d, p in zip(cls.data_batch, cls.predictions):\n            d['output'] = p\n        cls.predictions = cls.data_batch\n\n    def test_mse(self):\n\n        # Single MSE\n        mae = MSE()\n        mae.process(self.data_batch, self.predictions)\n        result = mae.compute_metrics(mae.results)\n        assert 'MSE' in result\n        np.testing.assert_almost_equal(result['MSE'], 0.000015378700496)\n\n        # Masked MSE\n        mae = MSE(mask_key='mask', prefix='MSE')\n        mae.process(self.data_batch, self.predictions)\n        result = mae.compute_metrics(mae.results)\n        assert 'MSE' in result\n        np.testing.assert_almost_equal(result['MSE'], 0.000015378700496)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_niqe.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport mmcv\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.evaluation.metrics import NIQE, niqe\n\n\ndef test_niqe():\n    img = mmcv.imread('tests/data/image/gt/baboon.png')\n\n    predictions = [dict(pred_img=img)]\n    predictions.append({\n        k: torch.from_numpy(deepcopy(v))\n        for (k, v) in predictions[0].items()\n    })\n\n    data_batch = [\n        dict(\n            data_samples=dict(\n                gt_img=torch.from_numpy(img), gt_channel_order='bgr'))\n    ]\n    data_batch.append(\n        dict(\n            data_samples=dict(\n                gt_img=torch.from_numpy(img), img_channel_order='bgr')))\n\n    data_samples = [d_['data_samples'] for d_ in data_batch]\n    for d, p in zip(data_samples, predictions):\n        d['output'] = p\n\n    niqe_ = NIQE()\n    niqe_.process(data_batch, data_samples)\n    result = niqe_.compute_metrics(niqe_.results)\n    assert 'NIQE' in result\n    np.testing.assert_almost_equal(result['NIQE'], 5.731541051885604)\n\n    niqe_ = NIQE(key='gt_img', is_predicted=False)\n    niqe_.process(data_batch, data_samples)\n    result = niqe_.compute_metrics(niqe_.results)\n    assert 'NIQE' in result\n    np.testing.assert_almost_equal(result['NIQE'], 5.731541051885604)\n\n    with pytest.raises(AssertionError):\n        niqe_ = NIQE(convert_to='a')\n\n\ndef test_calculate_niqe():\n    img = mmcv.imread('tests/data/image/gt/baboon.png')\n\n    result = niqe(img[:, :, 0], crop_border=0, input_order='HW')\n    np.testing.assert_almost_equal(result, 5.62525, decimal=5)\n    result = niqe(img, crop_border=0, input_order='HWC', convert_to='y')\n    np.testing.assert_almost_equal(result, 5.72957, decimal=5)\n    result = niqe(img, crop_border=0, input_order='HWC', convert_to='gray')\n    np.testing.assert_almost_equal(result, 5.73154, decimal=5)\n    result = niqe(\n        img.transpose(2, 0, 1),\n        crop_border=0,\n        input_order='CHW',\n        convert_to='y')\n    np.testing.assert_almost_equal(result, 5.72957, decimal=5)\n    result = niqe(\n        img.transpose(2, 0, 1),\n        crop_border=0,\n        input_order='CHW',\n        convert_to='gray')\n    np.testing.assert_almost_equal(result, 5.73154, decimal=5)\n\n    result = niqe(img[:, :, 0], crop_border=6, input_order='HW')\n    np.testing.assert_almost_equal(result, 5.82981, decimal=5)\n    result = niqe(img, crop_border=6, input_order='HWC', convert_to='y')\n    np.testing.assert_almost_equal(result, 6.10074, decimal=5)\n    result = niqe(\n        img.transpose(2, 0, 1),\n        crop_border=6,\n        input_order='CHW',\n        convert_to='y')\n    np.testing.assert_almost_equal(result, 6.10074, decimal=5)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_ppl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\nfrom mmengine.runner import Runner\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.evaluation import PerceptualPathLength\nfrom mmagic.models import LSGAN, DataPreprocessor\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Generator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef process_fn(data_batch, predictions):\n\n    _predictions = []\n    for pred in predictions:\n        _predictions.append(pred.to_dict())\n    return data_batch, _predictions\n\n\nclass LPIPS_mock:\n\n    def __init__(self, *args, **kwargs):\n        pass\n\n    def to(self, *args, **kwargs):\n        return self\n\n    def __call__(self, x1, x2, *args, **kwargs):\n        num_batche = x1.shape[0]\n        return torch.rand(num_batche, 1, 1, 1)\n\n\nclass TestPPL:\n\n    @classmethod\n    def setup_class(cls):\n        pipeline = [\n            dict(type='LoadImageFromFile', key='img'),\n            dict(type='Resize', scale=(64, 64)),\n            PackInputs()\n        ]\n        dataset = BasicImageDataset(\n            data_root='tests/data/image/img_root',\n            pipeline=pipeline,\n            test_mode=True)\n        cls.dataloader = Runner.build_dataloader(\n            dict(\n                batch_size=2,\n                dataset=dataset,\n                sampler=dict(type='DefaultSampler')))\n        gan_data_preprocessor = DataPreprocessor()\n        generator = StyleGAN2Generator(64, 8)\n        cls.module = LSGAN(generator, data_preprocessor=gan_data_preprocessor)\n\n    @patch('lpips.LPIPS', LPIPS_mock)\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_ppl_cuda(self):\n        ppl = PerceptualPathLength(\n            fake_nums=2,\n            prefix='ppl-z',\n            space='Z',\n            sample_model='orig',\n            latent_dim=8)\n        self.module.cuda()\n        sampler = ppl.get_metric_sampler(self.module, self.dataloader, [ppl])\n        ppl.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            ppl.process(_data_batch, _predictions)\n        ppl_res = ppl.compute_metrics(ppl.fake_results)\n        assert ppl_res['ppl_score'] >= 0\n        ppl = PerceptualPathLength(\n            fake_nums=2,\n            prefix='ppl-w',\n            space='W',\n            sample_model='orig',\n            latent_dim=8)\n        sampler = ppl.get_metric_sampler(self.module, self.dataloader, [ppl])\n        ppl.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            ppl.process(_data_batch, _predictions)\n        ppl_res = ppl.compute_metrics(ppl.fake_results)\n        assert ppl_res['ppl_score'] >= 0\n\n    @patch('lpips.LPIPS', LPIPS_mock)\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_ppl_cpu(self):\n        ppl = PerceptualPathLength(\n            fake_nums=2,\n            prefix='ppl-z',\n            space='Z',\n            sample_model='orig',\n            latent_dim=8)\n        sampler = ppl.get_metric_sampler(self.module, self.dataloader, [ppl])\n        ppl.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            ppl.process(_data_batch, _predictions)\n        ppl_res = ppl.compute_metrics(ppl.fake_results)\n        assert ppl_res['ppl_score'] >= 0\n        ppl = PerceptualPathLength(\n            fake_nums=2,\n            prefix='ppl-w',\n            space='W',\n            sample_model='orig',\n            latent_dim=8)\n        sampler = ppl.get_metric_sampler(self.module, self.dataloader, [ppl])\n        ppl.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            _data_batch, _predictions = process_fn(data_batch, predictions)\n            ppl.process(_data_batch, _predictions)\n        ppl_res = ppl.compute_metrics(ppl.fake_results)\n        assert ppl_res['ppl_score'] >= 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_precision_and_recall.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock, patch\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.runner import Runner\n\nfrom mmagic.datasets import BasicImageDataset\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.evaluation import PrecisionAndRecall\nfrom mmagic.models import LSGAN, DataPreprocessor\nfrom mmagic.models.editors.dcgan import DCGANGenerator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass vgg_pytorch_classifier(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n\n    def forward(self, x):\n        return torch.randn(x.shape[0], 4096)\n\n\nclass vgg_mock(nn.Module):\n\n    def __init__(self, style):\n        super().__init__()\n        self.classifier = nn.Sequential(nn.Identity(), nn.Identity(),\n                                        nn.Identity(),\n                                        vgg_pytorch_classifier())\n        self.style = style\n\n    def forward(self, x, *args, **kwargs):\n        if self.style.upper() == 'STYLEGAN':\n            return torch.randn(x.shape[0], 4096)\n        else:  # torch\n            return torch.randn(x.shape[0], 7 * 7 * 512)\n\n\nclass TestPR:\n\n    @classmethod\n    def setup_class(cls):\n        pipeline = [\n            dict(type='LoadImageFromFile', key='gt'),\n            dict(type='Resize', keys='gt', scale=(128, 128)),\n            PackInputs()\n        ]\n        dataset = BasicImageDataset(\n            data_root='tests/data/image/img_root',\n            pipeline=pipeline,\n            data_prefix=dict(gt=''),\n            test_mode=True,\n            recursive=True)\n        cls.dataloader = Runner.build_dataloader(\n            dict(\n                batch_size=2,\n                dataset=dataset,\n                sampler=dict(type='DefaultSampler')))\n        gan_data_preprocessor = DataPreprocessor()\n        generator = DCGANGenerator(128, noise_size=10, base_channels=20)\n        cls.module = LSGAN(\n            generator, data_preprocessor=gan_data_preprocessor)  # noqa\n\n        cls.mock_vgg_pytorch = MagicMock(\n            return_value=(vgg_mock('PyTorch'), 'False'))\n\n    @pytest.mark.skipif(\n        not torch.cuda.is_available(), reason='requires cuda')  # noqa\n    def test_pr_cuda(self):\n        pr = PrecisionAndRecall(10, sample_model='orig', auto_save=False)\n        self.module.cuda()\n        sampler = pr.get_metric_sampler(self.module, self.dataloader, [pr])\n        pr.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            predictions = self.module.test_step(data_batch)\n            predictions = [pred.to_dict() for pred in predictions]\n            pr.process(data_batch, predictions)\n        pr_score = pr.compute_metrics(pr.fake_results)\n        print(pr_score)\n        assert pr_score['precision'] >= 0 and pr_score['recall'] >= 0\n\n    def test_pr_cpu(self):\n        with patch.object(PrecisionAndRecall, '_load_vgg',\n                          self.mock_vgg_pytorch):\n            pr = PrecisionAndRecall(10, sample_model='orig', auto_save=False)\n        sampler = pr.get_metric_sampler(self.module, self.dataloader, [pr])\n        pr.prepare(self.module, self.dataloader)\n        for data_batch in sampler:\n            data_samples = self.module.test_step(data_batch)\n            data_samples = [pred.to_dict() for pred in data_samples]\n            pr.process(data_batch, data_samples)\n        pr_score = pr.evaluate()\n        print(pr_score)\n        assert pr_score['precision'] >= 0 and pr_score['recall'] >= 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_psnr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.evaluation.metrics import PSNR, psnr\n\n\nclass TestPixelMetrics:\n\n    @classmethod\n    def setup_class(cls):\n\n        mask = np.ones((32, 32, 3)) * 2\n        mask[:16] *= 0\n        gt = np.ones((32, 32, 3)) * 2\n        data_sample = dict(gt_img=gt, mask=mask, gt_channel_order='bgr')\n        cls.data_batch = [dict(data_samples=data_sample)]\n        cls.predictions = [dict(pred_img=np.ones((32, 32, 3)))]\n\n        cls.data_batch.append(\n            dict(\n                data_samples=dict(\n                    gt_img=torch.from_numpy(gt),\n                    mask=torch.from_numpy(mask),\n                    img_channel_order='bgr')))\n        cls.predictions.append({\n            k: torch.from_numpy(deepcopy(v))\n            for (k, v) in cls.predictions[0].items()\n        })\n\n        for d, p in zip(cls.data_batch, cls.predictions):\n            d['output'] = p\n        cls.predictions = cls.data_batch\n\n    def test_psnr(self):\n\n        psnr_ = PSNR()\n        psnr_.process(self.data_batch, self.predictions)\n        result = psnr_.compute_metrics(psnr_.results)\n        assert 'PSNR' in result\n        np.testing.assert_almost_equal(result['PSNR'], 48.1308036)\n\n\ndef test_psnr():\n    img_hw_1 = np.ones((32, 32))\n    img_hwc_1 = np.ones((32, 32, 3))\n    img_chw_1 = np.ones((3, 32, 32))\n    img_hw_2 = np.ones((32, 32)) * 2\n    img_hwc_2 = np.ones((32, 32, 3)) * 2\n    img_chw_2 = np.ones((3, 32, 32)) * 2\n\n    with pytest.raises(ValueError):\n        psnr(img_hw_1, img_hw_2, crop_border=0, input_order='HH')\n\n    with pytest.raises(ValueError):\n        psnr(img_hw_1, img_hw_2, crop_border=0, convert_to='ABC')\n\n    psnr_result = psnr(img_hw_1, img_hw_2, crop_border=0)\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n    psnr_result = psnr(img_hwc_1, img_hwc_2, crop_border=0, input_order='HWC')\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n    psnr_result = psnr(img_chw_1, img_chw_2, crop_border=0, input_order='CHW')\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n\n    psnr_result = psnr(img_hw_1, img_hw_2, crop_border=2)\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n    psnr_result = psnr(img_hwc_1, img_hwc_2, crop_border=3, input_order='HWC')\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n    psnr_result = psnr(img_chw_1, img_chw_2, crop_border=4, input_order='CHW')\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n\n    psnr_result = psnr(img_hwc_1, img_hwc_2, crop_border=0, convert_to=None)\n    np.testing.assert_almost_equal(psnr_result, 48.1308036)\n    psnr_result = psnr(img_hwc_1, img_hwc_2, crop_border=0, convert_to='Y')\n    np.testing.assert_almost_equal(psnr_result, 49.4527218)\n\n    # test float inf\n    psnr_result = psnr(img_hw_1, img_hw_1, crop_border=0)\n    assert psnr_result == float('inf')\n\n    # test uint8\n    img_hw_1 = np.zeros((32, 32), dtype=np.uint8)\n    img_hw_2 = np.ones((32, 32), dtype=np.uint8) * 255\n    psnr_result = psnr(img_hw_1, img_hw_2, crop_border=0)\n    assert psnr_result == 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_sad.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.datasets.transforms import LoadImageFromFile\nfrom mmagic.evaluation.metrics import SAD\n\n\nclass TestMattingMetrics:\n\n    @classmethod\n    def setup_class(cls):\n        # Make sure these values are immutable across different test cases.\n\n        # This test depends on the interface of loading\n        # if loading is changed, data should be change accordingly.\n        test_path = Path(__file__).parent.parent.parent\n        alpha_path = (\n            test_path / 'data' / 'matting_dataset' / 'alpha' / 'GT05.jpg')\n\n        results = dict(alpha_path=alpha_path)\n        config = dict(key='alpha')\n        image_loader = LoadImageFromFile(**config)\n        results = image_loader(results)\n        assert results['alpha'].ndim == 3\n\n        gt_alpha = np.ones((32, 32), dtype=np.uint8) * 255\n        trimap = np.zeros((32, 32), dtype=np.uint8)\n        trimap[:16, :16] = 128\n        trimap[16:, 16:] = 255\n        # non-masked pred_alpha\n        pred_alpha = torch.zeros((32, 32), dtype=torch.uint8)\n        # masked pred_alpha\n        masked_pred_alpha = pred_alpha.clone()\n        masked_pred_alpha[trimap == 0] = 0\n        masked_pred_alpha[trimap == 255] = 255\n\n        gt_alpha = gt_alpha[None, ...]\n        trimap = trimap[None, ...]\n\n        cls.data_batch = [{\n            'inputs': [],\n            'data_samples': {\n                'ori_trimap': torch.from_numpy(trimap),\n                'ori_alpha': torch.from_numpy(gt_alpha),\n            },\n        }]\n\n        cls.data_samples = [d_['data_samples'] for d_ in cls.data_batch]\n\n        cls.bad_preds1_ = [{'pred_alpha': pred_alpha}]\n        # pred_alpha should be masked by trimap before evaluation\n        cls.bad_preds1 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds1, cls.bad_preds1_):\n            d['output'] = p\n\n        cls.bad_preds2_ = [{'pred_alpha': pred_alpha[0]}]\n        # pred_alpha should be 3 dimensional\n        cls.bad_preds2 = copy.deepcopy(cls.data_samples)\n        for d, p in zip(cls.bad_preds2, cls.bad_preds2_):\n            d['output'] = p\n\n        cls.good_preds_ = [{'pred_alpha': masked_pred_alpha}]\n        cls.good_preds = copy.deepcopy((cls.data_samples))\n        for d, p in zip(cls.good_preds, cls.good_preds_):\n            d['output'] = p\n\n    def test_sad(self):\n        \"\"\"Test SAD for evaluating predicted alpha matte.\"\"\"\n\n        data_batch, bad_pred1, bad_pred2, good_pred = (\n            self.data_batch,\n            self.bad_preds1,\n            self.bad_preds2,\n            self.good_preds,\n        )\n\n        sad = SAD()\n\n        with pytest.raises(ValueError):\n            sad.process(data_batch, bad_pred1)\n\n        with pytest.raises(ValueError):\n            sad.process(data_batch, bad_pred2)\n\n        # process 2 batches\n        sad.process(data_batch, good_pred)\n        sad.process(data_batch, good_pred)\n\n        assert sad.results == [\n            {\n                'sad': 0.768,\n            },\n            {\n                'sad': 0.768,\n            },\n        ]\n\n        res = sad.compute_metrics(sad.results)\n\n        assert list(res.keys()) == ['SAD']\n        np.testing.assert_almost_equal(res['SAD'], 0.768)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_snr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.evaluation.metrics import SNR, snr\n\n\nclass TestPixelMetrics:\n\n    @classmethod\n    def setup_class(cls):\n\n        mask = np.ones((32, 32, 3)) * 2\n        mask[:16] *= 0\n        gt = np.ones((32, 32, 3)) * 2\n        data_sample = dict(gt_img=gt, mask=mask, gt_channel_order='bgr')\n        cls.data_batch = [dict(data_samples=data_sample)]\n        cls.predictions = [dict(pred_img=np.ones((32, 32, 3)))]\n\n        cls.data_batch.append(\n            dict(\n                data_samples=dict(\n                    gt_img=torch.from_numpy(gt),\n                    mask=torch.from_numpy(mask),\n                    img_channel_order='bgr')))\n        cls.predictions.append({\n            k: torch.from_numpy(deepcopy(v))\n            for (k, v) in cls.predictions[0].items()\n        })\n\n        for d, p in zip(cls.data_batch, cls.predictions):\n            d['output'] = p\n        cls.predictions = cls.data_batch\n\n    def test_snr(self):\n\n        snr_ = SNR()\n        snr_.process(self.data_batch, self.predictions)\n        result = snr_.compute_metrics(snr_.results)\n        assert 'SNR' in result\n        np.testing.assert_almost_equal(result['SNR'], 6.0206001996994)\n\n\ndef test_snr():\n    img_hw_1 = np.ones((32, 32)) * 2\n    img_hwc_1 = np.ones((32, 32, 3)) * 2\n    img_chw_1 = np.ones((3, 32, 32)) * 2\n    img_hw_2 = np.ones((32, 32))\n    img_hwc_2 = np.ones((32, 32, 3))\n    img_chw_2 = np.ones((3, 32, 32))\n\n    with pytest.raises(ValueError):\n        snr(img_hw_1, img_hw_2, crop_border=0, input_order='HH')\n\n    with pytest.raises(ValueError):\n        snr(img_hw_1, img_hw_2, crop_border=0, convert_to='ABC')\n\n    snr_result = snr(img_hw_1, img_hw_2, crop_border=0)\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    snr_result = snr(img_hwc_1, img_hwc_2, crop_border=0, input_order='HWC')\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    print(snr_result)\n    snr_result = snr(img_chw_1, img_chw_2, crop_border=0, input_order='CHW')\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    print(snr_result)\n\n    snr_result = snr(img_hw_1, img_hw_2, crop_border=2)\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    snr_result = snr(img_hwc_1, img_hwc_2, crop_border=3, input_order='HWC')\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    snr_result = snr(img_chw_1, img_chw_2, crop_border=4, input_order='CHW')\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n\n    snr_result = snr(img_hwc_1, img_hwc_2, crop_border=0, convert_to=None)\n    np.testing.assert_almost_equal(snr_result, 6.020600199699402)\n    snr_result = snr(img_hwc_1, img_hwc_2, crop_border=0, convert_to='Y')\n    np.testing.assert_almost_equal(snr_result, 26.290040016174316)\n\n    # test float inf\n    snr_result = snr(img_hw_1, img_hw_1, crop_border=0)\n    assert snr_result == float('inf')\n\n    # test uint8\n    img_hw_1 = np.ones((32, 32), dtype=np.uint8)\n    img_hw_2 = np.zeros((32, 32), dtype=np.uint8)\n    snr_result = snr(img_hw_1, img_hw_2, crop_border=0)\n    assert snr_result == 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_ssim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.evaluation.metrics import SSIM, ssim\n\n\ndef test_ssim():\n\n    mask = np.ones((3, 32, 32)) * 2\n    mask[:16] *= 0\n    gt_img = np.ones((3, 32, 32)) * 2\n    predictions = [dict(pred_img=np.ones((3, 32, 32)))]\n\n    data_batch = [\n        dict(\n            data_samples=dict(\n                gt_img=gt_img, mask=mask, gt_channel_order='bgr'))\n    ]\n    data_batch.append(\n        dict(\n            data_samples=dict(\n                gt_img=torch.from_numpy(gt_img),\n                mask=torch.from_numpy(mask),\n                img_channel_order='bgr')))\n    predictions.append({\n        k: torch.from_numpy(deepcopy(v))\n        for (k, v) in predictions[0].items()\n    })\n\n    data_samples = [d_['data_samples'] for d_ in data_batch]\n    for d, p in zip(data_samples, predictions):\n        d['output'] = p\n\n    ssim_ = SSIM()\n    ssim_.process(data_batch, data_samples)\n    result = ssim_.compute_metrics(ssim_.results)\n    assert 'SSIM' in result\n    np.testing.assert_almost_equal(result['SSIM'], 0.913062377743969)\n\n\ndef test_calculate_ssim():\n    img_hw_1 = np.ones((32, 32))\n    img_hwc_1 = np.ones((32, 32, 3))\n    img_chw_1 = np.ones((3, 32, 32))\n    img_hw_2 = np.ones((32, 32)) * 2\n    img_hwc_2 = np.ones((32, 32, 3)) * 2\n    img_chw_2 = np.ones((3, 32, 32)) * 2\n\n    with pytest.raises(ValueError):\n        ssim(img_hw_1, img_hw_2, crop_border=0, input_order='HH')\n\n    with pytest.raises(ValueError):\n        ssim(img_hw_1, img_hw_2, crop_border=0, input_order='ABC')\n\n    ssim_result = ssim(img_hw_1, img_hw_2, crop_border=0)\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n    ssim_result = ssim(img_hwc_1, img_hwc_2, crop_border=0, input_order='HWC')\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n    ssim_result = ssim(img_chw_1, img_chw_2, crop_border=0, input_order='CHW')\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n\n    ssim_result = ssim(img_hw_1, img_hw_2, crop_border=2)\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n    ssim_result = ssim(img_hwc_1, img_hwc_2, crop_border=3, input_order='HWC')\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n    ssim_result = ssim(img_chw_1, img_chw_2, crop_border=4, input_order='CHW')\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n\n    ssim_result = ssim(img_hwc_1, img_hwc_2, crop_border=0, convert_to=None)\n    np.testing.assert_almost_equal(ssim_result, 0.9130623)\n    ssim_result = ssim(img_hwc_1, img_hwc_2, crop_border=0, convert_to='Y')\n    np.testing.assert_almost_equal(ssim_result, 0.9987801)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_evaluation/test_metrics/test_swd.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport numpy as np\nimport torch\n\nfrom mmagic.evaluation import SlicedWassersteinDistance\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.structures import DataSample\n\n\nclass TestSWD(TestCase):\n\n    def test_init(self):\n        swd = SlicedWassersteinDistance(fake_nums=10, image_shape=(3, 32, 32))\n        self.assertEqual(len(swd.real_results), 2)\n\n    def test_prosess(self):\n        model = MagicMock()\n        model.data_preprocessor = DataPreprocessor()\n        swd = SlicedWassersteinDistance(fake_nums=100, image_shape=(3, 32, 32))\n        swd.prepare(model, None)\n\n        torch.random.manual_seed(42)\n        real_samples = [\n            dict(inputs=torch.rand(3, 32, 32) * 255.) for _ in range(100)\n        ]\n        fake_samples = [\n            DataSample(\n                fake_img=(torch.rand(3, 32, 32) * 255),\n                gt_img=(torch.rand(3, 32, 32) * 255)).to_dict()\n            for _ in range(100)\n        ]\n\n        swd.process(real_samples, fake_samples)\n        # 100 samples are passed in 1 batch, _num_processed should be 100\n        self.assertEqual(swd._num_processed, 100)\n        # _num_processed(100) > fake_nums(4), _num_processed should be\n        # unchanged\n        swd.process(real_samples, fake_samples)\n        self.assertEqual(swd._num_processed, 100)\n\n        output = swd.evaluate()\n        result = [16.495922580361366, 24.15413036942482, 20.325026474893093]\n        output = [item / 100 for item in output.values()]\n        result = [item / 100 for item in result]\n        np.testing.assert_almost_equal(output, result, decimal=1)\n\n        swd = SlicedWassersteinDistance(\n            fake_nums=4,\n            fake_key='fake',\n            real_key='img',\n            sample_model='orig',\n            image_shape=(3, 32, 32))\n        swd.prepare(model, None)\n\n        # test gray scale input\n        swd.image_shape = (1, 32, 32)\n        real_samples = [\n            dict(inputs=torch.rand(1, 32, 32) * 255.) for _ in range(100)\n        ]\n        fake_samples = [\n            DataSample(\n                fake_img=torch.rand(1, 32, 32) * 255,\n                gt_img=torch.rand(1, 32, 32) * 255).to_dict()\n            for _ in range(100)\n        ]\n        swd.process(real_samples, fake_samples)\n\n        # test fake_nums is -1\n        swd = SlicedWassersteinDistance(\n            fake_nums=-1,\n            fake_key='fake',\n            real_key='img',\n            sample_model='orig',\n            image_shape=(3, 32, 32))\n        fake_samples = [\n            DataSample(\n                fake_img=torch.rand(3, 32, 32) * 255,\n                gt_img=torch.rand(3, 32, 32) * 255).to_dict()\n            for _ in range(10)\n        ]\n        for _ in range(3):\n            swd.process(None, fake_samples)\n        # fake_nums is -1, all samples (10 * 3 = 30) is processed\n        self.assertEqual(swd._num_processed, 30)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_aspp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import ASPP\n\n\ndef test_aspp():\n    # test aspp with normal conv\n    aspp = ASPP(128, out_channels=512, mid_channels=128, dilations=(6, 12, 18))\n    assert aspp.convs[0].activate.__class__.__name__ == 'ReLU'\n    assert aspp.convs[0].conv.out_channels == 128\n    assert aspp.convs[1].__class__.__name__ == 'ConvModule'\n    for conv_idx in range(1, 4):\n        assert aspp.convs[conv_idx].conv.dilation[0] == 6 * conv_idx\n    x = torch.rand(2, 128, 8, 8)\n    output = aspp(x)\n    assert output.shape == (2, 512, 8, 8)\n\n    # test aspp with separable conv\n    aspp = ASPP(128, separable_conv=True)\n    assert aspp.convs[1].__class__.__name__ == 'DepthwiseSeparableConvModule'\n    x = torch.rand(2, 128, 8, 8)\n    output = aspp(x)\n    assert output.shape == (2, 256, 8, 8)\n\n    # test aspp with ReLU6\n    aspp = ASPP(128, dilations=(12, 24, 36), act_cfg=dict(type='ReLU6'))\n    assert aspp.convs[0].activate.__class__.__name__ == 'ReLU6'\n    for conv_idx in range(1, 4):\n        assert aspp.convs[conv_idx].conv.dilation[0] == 12 * conv_idx\n    x = torch.rand(2, 128, 8, 8)\n    output = aspp(x)\n    assert output.shape == (2, 256, 8, 8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_conv.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.models.archs import conv\n\n\ndef test_conv():\n    assert 'Deconv' in conv.MODELS.module_dict\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_downsample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.archs import pixel_unshuffle\n\n\ndef test_pixel_unshuffle():\n    # test on cpu\n    x = torch.rand(1, 3, 20, 20)\n    y = pixel_unshuffle(x, scale=2)\n    assert y.shape == (1, 12, 10, 10)\n    with pytest.raises(AssertionError):\n        y = pixel_unshuffle(x, scale=3)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        x = x.cuda()\n        y = pixel_unshuffle(x, scale=2)\n        assert y.shape == (1, 12, 10, 10)\n\n        with pytest.raises(AssertionError):\n            y = pixel_unshuffle(x, scale=3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_ensemble.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import SpatialTemporalEnsemble\n\n\ndef test_ensemble_cpu():\n    model = nn.Identity()\n\n    # spatial ensemble of an image\n    ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=False)\n    inputs = torch.rand(1, 3, 4, 4)\n    outputs = ensemble(inputs, model)\n    np.testing.assert_almost_equal(inputs.numpy(), outputs.numpy())\n\n    # spatial ensemble of a sequence\n    ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=False)\n    inputs = torch.rand(1, 2, 3, 4, 4)\n    outputs = ensemble(inputs, model)\n    np.testing.assert_almost_equal(inputs.numpy(), outputs.numpy())\n\n    # spatial and temporal ensemble of a sequence\n    ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=True)\n    inputs = torch.rand(1, 2, 3, 4, 4)\n    outputs = ensemble(inputs, model)\n    np.testing.assert_almost_equal(inputs.numpy(), outputs.numpy())\n\n    # spatial and temporal ensemble of an image\n    with pytest.raises(ValueError):\n        ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=True)\n        inputs = torch.rand(1, 3, 4, 4)\n        outputs = ensemble(inputs, model)\n\n\ndef test_ensemble_cuda():\n    if torch.cuda.is_available():\n        model = nn.Identity().cuda()\n\n        # spatial ensemble of an image\n        ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=False)\n        inputs = torch.rand(1, 3, 4, 4).cuda()\n        outputs = ensemble(inputs, model)\n        np.testing.assert_almost_equal(inputs.cpu().numpy(),\n                                       outputs.cpu().numpy())\n\n        # spatial ensemble of a sequence\n        ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=False)\n        inputs = torch.rand(1, 2, 3, 4, 4).cuda()\n        outputs = ensemble(inputs, model)\n        np.testing.assert_almost_equal(inputs.cpu().numpy(),\n                                       outputs.cpu().numpy())\n\n        # spatial and temporal ensemble of a sequence\n        ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=True)\n        inputs = torch.rand(1, 2, 3, 4, 4).cuda()\n        outputs = ensemble(inputs, model)\n        np.testing.assert_almost_equal(inputs.cpu().numpy(),\n                                       outputs.cpu().numpy())\n\n        # spatial and temporal ensemble of an image\n        with pytest.raises(ValueError):\n            ensemble = SpatialTemporalEnsemble(is_temporal_ensemble=True)\n            inputs = torch.rand(1, 3, 4, 4).cuda()\n            outputs = ensemble(inputs, model)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_gated_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import SimpleGatedConvModule\n\n\ndef test_gated_conv():\n    conv = SimpleGatedConvModule(3, 10, 3, padding=1)\n    x = torch.rand((2, 3, 10, 10))\n    assert not conv.conv.with_activation\n    assert conv.with_feat_act\n    assert conv.with_gate_act\n    assert isinstance(conv.feat_act, nn.ELU)\n    assert isinstance(conv.gate_act, nn.Sigmoid)\n    assert conv.conv.out_channels == 20\n\n    out = conv(x)\n    assert out.shape == (2, 10, 10, 10)\n\n    conv = SimpleGatedConvModule(\n        3, 10, 3, padding=1, feat_act_cfg=None, gate_act_cfg=None)\n    assert not conv.with_gate_act\n    out = conv(x)\n    assert out.shape == (2, 10, 10, 10)\n\n    with pytest.raises(AssertionError):\n        conv = SimpleGatedConvModule(\n            3, 1, 3, padding=1, order=('linear', 'act', 'norm'))\n\n    conv = SimpleGatedConvModule(3, out_channels=10, kernel_size=3, padding=1)\n    assert conv.conv.out_channels == 20\n    out = conv(x)\n    assert out.shape == (2, 10, 10, 10)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_img_normalize.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import ImgNormalize\n\n\ndef test_normalize_layer():\n    rgb_mean = (1, 2, 3)\n    rgb_std = (1, 0.5, 0.25)\n    layer = ImgNormalize(1, rgb_mean, rgb_std)\n    x = torch.randn((2, 3, 64, 64))\n    y = layer(x)\n    x = x.permute((1, 0, 2, 3)).reshape((3, -1))\n    y = y.permute((1, 0, 2, 3)).reshape((3, -1))\n    rgb_mean = torch.tensor(rgb_mean)\n    rgb_std = torch.tensor(rgb_std)\n    mean_x = x.mean(dim=1)\n    mean_y = y.mean(dim=1)\n    std_x = x.std(dim=1)\n    std_y = y.std(dim=1)\n    assert sum(torch.div(std_x, std_y) - rgb_std) < 1e-5\n    assert sum(torch.div(mean_x - rgb_mean, rgb_std) - mean_y) < 1e-5\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_linear_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import LinearModule\n\n\ndef test_linear_module():\n    linear = LinearModule(10, 20)\n    linear.init_weights()\n    x = torch.rand((3, 10))\n    assert linear.with_bias\n    assert not linear.with_spectral_norm\n    assert linear.out_features == 20\n    assert linear.in_features == 10\n    assert isinstance(linear.activate, nn.ReLU)\n\n    y = linear(x)\n    assert y.shape == (3, 20)\n\n    linear = LinearModule(10, 20, act_cfg=None, with_spectral_norm=True)\n\n    assert hasattr(linear.linear, 'weight_orig')\n    assert not linear.with_activation\n    y = linear(x)\n    assert y.shape == (3, 20)\n\n    linear = LinearModule(\n        10, 20, act_cfg=dict(type='LeakyReLU'), with_spectral_norm=True)\n    y = linear(x)\n    assert y.shape == (3, 20)\n    assert isinstance(linear.activate, nn.LeakyReLU)\n\n    linear = LinearModule(\n        10, 20, bias=False, act_cfg=None, with_spectral_norm=True)\n    y = linear(x)\n    assert y.shape == (3, 20)\n    assert not linear.with_bias\n\n    linear = LinearModule(\n        10,\n        20,\n        bias=False,\n        act_cfg=None,\n        with_spectral_norm=True,\n        order=('act', 'linear'))\n\n    assert linear.order == ('act', 'linear')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_lora.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.archs import (LoRAWrapper, set_lora, set_lora_disable,\n                                 set_lora_enable, set_only_lora_trainable)\n\n\nclass ToyAttn(nn.Module):\n\n    def __init__(self, in_dim, context_dim):\n        super().__init__()\n        self.to_q = nn.Linear(in_dim, in_dim)\n        self.to_k = nn.Linear(context_dim, in_dim)\n        self.to_v = nn.Linear(context_dim, in_dim)\n\n    def forward(self, x, context=None):\n\n        b, c, h, w = x.shape\n        x = x.view(b, c, h * w).permute(0, 2, 1)\n        if context is None:\n            context = x\n\n        q = self.to_q(x)\n        k = self.to_k(context)\n        v = self.to_v(context)\n        attn_mask = torch.softmax(q @ k.transpose(-2, -1), dim=-1)\n        out = attn_mask @ v\n        return out.view(b, h, w, c).permute(0, 3, 1, 2)\n\n\nclass ToySubModule(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.net = nn.Identity()\n        self.attn1 = ToyAttn(4, 3)\n\n    def forward(self, x, context=None):\n        x = self.net(x)\n        x = self.attn1(x, context)\n        return x\n\n\nclass ToyModel(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.n1 = ToySubModule()\n        self.attn2 = ToyAttn(4, 4)\n\n    def forward(self, x, context=None):\n        out = self.n1(x, context)\n        out = self.attn2(out)\n        return out\n\n\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) <= digit_version('1.8.1'),\n    reason='get_submodule requires torch >= 1.9.0')\ndef test_set_lora():\n    model = ToyModel()\n\n    img = torch.randn(2, 4, 3, 3)\n    context = torch.randn(2, 11, 3)\n\n    config = dict(rank=2, scale=1, target_modules='to_q')\n    model: ToyModel = set_lora(model, config, True)\n    isinstance(model.attn2.to_q, LoRAWrapper)\n    isinstance(model.n1.attn1.to_q, LoRAWrapper)\n\n    out = model(img, context)\n    assert out.shape == (2, 4, 3, 3)\n\n    model = ToyModel()\n    config = dict(\n        rank=2,\n        scale=1,\n        target_modules=[\n            'to_q',\n            dict(target_module='.*attn1.to_v', rank=1),\n            dict(target_module='to_k', scale=2.5)\n        ])\n    out_wo_lora = model(img, context)\n    set_lora(model, config)\n\n    assert isinstance(model.attn2.to_q, LoRAWrapper)\n    assert model.attn2.to_q.scale == 1\n    assert model.attn2.to_q.rank == 2\n    assert isinstance(model.attn2.to_k, LoRAWrapper)\n    assert model.attn2.to_k.scale == 2.5\n    assert model.attn2.to_k.rank == 2\n    assert isinstance(model.attn2.to_v, nn.Linear)\n\n    assert isinstance(model.n1.attn1.to_q, LoRAWrapper)\n    assert model.n1.attn1.to_q.scale == 1\n    assert model.n1.attn1.to_q.rank == 2\n    assert isinstance(model.n1.attn1.to_k, LoRAWrapper)\n    assert model.n1.attn1.to_k.scale == 2.5\n    assert model.n1.attn1.to_k.rank == 2\n    assert isinstance(model.n1.attn1.to_v, LoRAWrapper)\n    assert model.n1.attn1.to_v.scale == 1\n    assert model.n1.attn1.to_v.rank == 1\n\n    out_w_lora = model(img, context)\n    assert out_w_lora.shape == (2, 4, 3, 3)\n\n    model.n1.attn1.to_v.set_scale(10)\n    assert model.n1.attn1.to_v.scale == 10\n\n    # test set onlyu lora trainable\n    set_only_lora_trainable(model)\n    for n, m in model.named_parameters():\n        if 'lora_' in n:\n            assert m.requires_grad\n        else:\n            assert not m.requires_grad\n\n    # test enable and disable\n    set_lora_disable(model)\n    out_lora_disable = model(img, context)\n    assert (out_lora_disable == out_wo_lora).all()\n    set_lora_enable(model)\n    out_lora_enable = model(img, context)\n    assert (out_lora_enable == out_w_lora).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_multi_layer_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import MultiLayerDiscriminator\n\n\ndef test_multi_layer_disc():\n    with pytest.raises(AssertionError):\n        # fc_in_channels must be greater than 0\n        multi_disc = MultiLayerDiscriminator(\n            3, 236, fc_in_channels=-100, out_act_cfg=None)\n\n    with pytest.raises(TypeError):\n        # stride_list must be a tuple of int with length of 1 or\n        # length of num_conv\n        multi_disc = MultiLayerDiscriminator(\n            3, 256, num_convs=3, stride_list=(1, 2))\n\n    input_g = torch.randn(1, 3, 256, 256)\n    # test multi-layer discriminators without fc layer\n    multi_disc = MultiLayerDiscriminator(\n        in_channels=3, max_channels=256, fc_in_channels=None)\n    multi_disc.init_weights()\n    disc_pred = multi_disc(input_g)\n    assert disc_pred.shape == (1, 256, 8, 8)\n    multi_disc = MultiLayerDiscriminator(\n        in_channels=3, max_channels=256, fc_in_channels=100)\n    assert isinstance(multi_disc.fc.activate, nn.ReLU)\n\n    multi_disc = MultiLayerDiscriminator(3, 236, fc_in_channels=None)\n    assert multi_disc.with_out_act\n    assert not multi_disc.with_fc\n    assert isinstance(multi_disc.conv5.activate, nn.ReLU)\n\n    multi_disc = MultiLayerDiscriminator(\n        3, 236, fc_in_channels=None, out_act_cfg=None)\n    assert not multi_disc.conv5.with_activation\n    with pytest.raises(TypeError):\n        multi_disc.init_weights(pretrained=dict(igccc=4396))\n\n    input_g = torch.randn(1, 3, 16, 16)\n    multi_disc = MultiLayerDiscriminator(\n        in_channels=3,\n        max_channels=256,\n        num_convs=2,\n        fc_in_channels=4 * 4 * 128,\n        fc_out_channels=10,\n        with_spectral_norm=True)\n    multi_disc.init_weights()\n    disc_pred = multi_disc(input_g)\n    assert disc_pred.shape == (1, 10)\n    assert multi_disc.conv1.with_spectral_norm\n    assert multi_disc.conv2.with_spectral_norm\n    assert hasattr(multi_disc.fc.linear, 'weight_orig')\n\n    num_convs = 3\n    multi_disc = MultiLayerDiscriminator(\n        in_channels=64,\n        max_channels=512,\n        num_convs=num_convs,\n        kernel_size=4,\n        norm_cfg=dict(type='BN'),\n        act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n        out_act_cfg=dict(type='ReLU'),\n        with_input_norm=False,\n        with_out_convs=True)\n    # check input conv\n    assert not multi_disc.conv1.with_norm\n    assert isinstance(multi_disc.conv1.activate, nn.LeakyReLU)\n    assert multi_disc.conv1.stride == (2, 2)\n\n    # check intermediate conv\n    for i in range(1, num_convs):\n        assert getattr(multi_disc, f'conv{i + 1}').with_norm\n        assert isinstance(\n            getattr(multi_disc, f'conv{i + 1}').activate, nn.LeakyReLU)\n        assert getattr(multi_disc, f'conv{i + 1}').stride == (2, 2)\n\n    # check out_conv\n    assert multi_disc.conv4.with_norm\n    assert multi_disc.conv4.with_activation\n    assert multi_disc.conv4.stride == (1, 1)\n    assert not multi_disc.conv5.with_norm\n    assert not multi_disc.conv5.with_activation\n    assert multi_disc.conv5.stride == (1, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_patch_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\n\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_patch_discriminator():\n    # color, BN\n    cfg = dict(\n        type='PatchDiscriminator',\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='BN'),\n        init_cfg=dict(type='normal', gain=0.02))\n    net = MODELS.build(cfg)\n    # cpu\n    input_shape = (1, 3, 64, 64)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 1, 6, 6)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 1, 6, 6)\n\n    # gray, IN\n    cfg = dict(\n        type='PatchDiscriminator',\n        in_channels=1,\n        base_channels=64,\n        num_conv=3,\n        norm_cfg=dict(type='IN'),\n        init_cfg=dict(type='normal', gain=0.02))\n    net = MODELS.build(cfg)\n    # cpu\n    input_shape = (1, 1, 64, 64)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 1, 6, 6)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 1, 6, 6)\n\n    # test norm_cfg assertions\n    bad_cfg = copy.deepcopy(cfg)\n    bad_cfg['norm_cfg'] = None\n    with pytest.raises(AssertionError):\n        _ = MODELS.build(bad_cfg)\n    bad_cfg['norm_cfg'] = dict(tp='BN')\n    with pytest.raises(AssertionError):\n        _ = MODELS.build(bad_cfg)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_resnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import ResNet\n\n\ndef test_resnet():\n    resnet = ResNet(18, 3, 16, 16)\n    resnet.init_weights()\n    input = torch.rand((2, 3, 128, 128))\n    output = resnet(input)\n    assert output[0].detach().numpy().shape == (2, 3, 128, 128)\n\n    resnet = ResNet(50, 3, 16, 16)\n    resnet.init_weights()\n    input = torch.rand((2, 3, 128, 128))\n    output = resnet(input)\n    assert output[0].detach().numpy().shape == (2, 3, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_separable_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import DepthwiseSeparableConvModule\n\n\ndef test_depthwise_separable_conv():\n    with pytest.raises(AssertionError):\n        # conv_cfg must be a dict or None\n        DepthwiseSeparableConvModule(4, 8, 2, groups=2)\n\n    # test default config\n    conv = DepthwiseSeparableConvModule(3, 8, 2)\n    assert conv.depthwise_conv.conv.groups == 3\n    assert conv.pointwise_conv.conv.kernel_size == (1, 1)\n    assert not conv.depthwise_conv.with_norm\n    assert not conv.pointwise_conv.with_norm\n    assert conv.depthwise_conv.activate.__class__.__name__ == 'ReLU'\n    assert conv.pointwise_conv.activate.__class__.__name__ == 'ReLU'\n    x = torch.rand(1, 3, 256, 256)\n    output = conv(x)\n    assert output.shape == (1, 8, 255, 255)\n\n    # test\n    conv = DepthwiseSeparableConvModule(3, 8, 2, dw_norm_cfg=dict(type='BN'))\n    assert conv.depthwise_conv.norm_name == 'bn'\n    assert not conv.pointwise_conv.with_norm\n    x = torch.rand(1, 3, 256, 256)\n    output = conv(x)\n    assert output.shape == (1, 8, 255, 255)\n\n    conv = DepthwiseSeparableConvModule(3, 8, 2, pw_norm_cfg=dict(type='BN'))\n    assert not conv.depthwise_conv.with_norm\n    assert conv.pointwise_conv.norm_name == 'bn'\n    x = torch.rand(1, 3, 256, 256)\n    output = conv(x)\n    assert output.shape == (1, 8, 255, 255)\n\n    # add test for ['norm', 'conv', 'act']\n    conv = DepthwiseSeparableConvModule(3, 8, 2, order=('norm', 'conv', 'act'))\n    x = torch.rand(1, 3, 256, 256)\n    output = conv(x)\n    assert output.shape == (1, 8, 255, 255)\n\n    conv = DepthwiseSeparableConvModule(\n        3, 8, 3, padding=1, with_spectral_norm=True)\n    assert hasattr(conv.depthwise_conv.conv, 'weight_orig')\n    assert hasattr(conv.pointwise_conv.conv, 'weight_orig')\n    output = conv(x)\n    assert output.shape == (1, 8, 256, 256)\n\n    conv = DepthwiseSeparableConvModule(\n        3, 8, 3, padding=1, padding_mode='reflect')\n    assert isinstance(conv.depthwise_conv.padding_layer, nn.ReflectionPad2d)\n    output = conv(x)\n    assert output.shape == (1, 8, 256, 256)\n\n    conv = DepthwiseSeparableConvModule(\n        3, 8, 3, padding=1, dw_act_cfg=dict(type='LeakyReLU'))\n    assert conv.depthwise_conv.activate.__class__.__name__ == 'LeakyReLU'\n    assert conv.pointwise_conv.activate.__class__.__name__ == 'ReLU'\n    output = conv(x)\n    assert output.shape == (1, 8, 256, 256)\n\n    conv = DepthwiseSeparableConvModule(\n        3, 8, 3, padding=1, pw_act_cfg=dict(type='LeakyReLU'))\n    assert conv.depthwise_conv.activate.__class__.__name__ == 'ReLU'\n    assert conv.pointwise_conv.activate.__class__.__name__ == 'LeakyReLU'\n    output = conv(x)\n    assert output.shape == (1, 8, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_simple_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\nfrom mmagic.models.archs import SimpleEncoderDecoder\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef test_encoder_decoder():\n    \"\"\"Test SimpleEncoderDecoder.\"\"\"\n    # check DIM with only alpha loss\n    encoder = dict(type='VGG16', in_channels=4)\n    decoder = dict(type='PlainDecoder')\n\n    model = SimpleEncoderDecoder(encoder, decoder)\n    model.init_weights()\n    model.train()\n    fg, bg, merged, alpha, trimap = _demo_inputs_pair()\n    prediction = model(torch.cat([merged, trimap], 1))\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # check DIM with only composition loss\n    encoder = dict(type='VGG16', in_channels=4)\n    decoder = dict(type='PlainDecoder')\n\n    model = SimpleEncoderDecoder(encoder, decoder)\n    model.init_weights()\n    model.train()\n    fg, bg, merged, alpha, trimap = _demo_inputs_pair()\n    prediction = model(torch.cat([merged, trimap], 1))\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # check DIM with both alpha and composition loss\n    encoder = dict(type='VGG16', in_channels=4)\n    decoder = dict(type='PlainDecoder')\n    model = SimpleEncoderDecoder(encoder, decoder)\n    model.init_weights()\n    model.train()\n    fg, bg, merged, alpha, trimap = _demo_inputs_pair()\n    prediction = model(torch.cat([merged, trimap], 1))\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        encoder = dict(type='VGG16', in_channels=4)\n        decoder = dict(type='PlainDecoder')\n\n        model = SimpleEncoderDecoder(encoder, decoder)\n        model.init_weights()\n        model.train()\n        fg, bg, merged, alpha, trimap = _demo_inputs_pair(cuda=True)\n        model.cuda()\n        prediction = model(torch.cat([merged, trimap], 1))\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n\ndef _demo_inputs_pair(img_shape=(64, 64), batch_size=1, cuda=False):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    fg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    bg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    alpha = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    trimap = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    if cuda:\n        fg = fg.cuda()\n        bg = bg.cuda()\n        merged = merged.cuda()\n        alpha = alpha.cuda()\n        trimap = trimap.cuda()\n    return fg, bg, merged, alpha, trimap\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_smpatch_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_smpatch_discriminator():\n    # color, BN\n    cfg = dict(\n        type='SoftMaskPatchDiscriminator',\n        in_channels=3,\n        base_channels=64,\n        num_conv=3,\n        with_spectral_norm=True)\n    net = MODELS.build(cfg)\n    # cpu\n    input_shape = (1, 3, 64, 64)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 1, 6, 6)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 1, 6, 6)\n\n    # gray, IN\n    cfg = dict(\n        type='SoftMaskPatchDiscriminator',\n        in_channels=1,\n        base_channels=64,\n        num_conv=3,\n        with_spectral_norm=True)\n    net = MODELS.build(cfg)\n    # cpu\n    input_shape = (1, 1, 64, 64)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 1, 6, 6)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 1, 6, 6)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_sr_backbone.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import ResidualBlockNoBN\nfrom mmagic.models.utils import make_layer\n\n\ndef test_sr_backbone_utils():\n    block = make_layer(ResidualBlockNoBN, 3)\n    input = torch.rand((2, 64, 128, 128))\n    output = block(input)\n    assert output.detach().numpy().shape == (2, 64, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_tokenizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nfrom mmagic.models.archs import TokenizerWrapper\n\nPREFIX = '<|startoftext|>'\nSUFFIX = ' <|endoftext|>'\n\n\nclass TestTokenizerWrapper(TestCase):\n\n    def setUp(self):\n        \"\"\"Test add placeholder tokens in this function.\"\"\"\n        tokenizer = TokenizerWrapper('openai/clip-vit-base-patch32')\n\n        # 'Goodbye' in kiswahili\n        tokenizer.add_placeholder_token('kwaheri', num_vec_per_token=1)\n        # 'how much' in kiswahili\n        tokenizer.add_placeholder_token('ngapi', num_vec_per_token=4)\n\n        with self.assertRaises(AssertionError):\n            tokenizer.add_placeholder_token('hello', num_vec_per_token=1)\n\n        self.tokenizer = tokenizer\n\n    def test_encode_and_decode_and_call(self):\n        # test single token\n        text = 'Nice bro, kwaheri!'\n        input_ids = self.tokenizer.encode(text).input_ids\n        self.assertEqual(input_ids[-3:-2],\n                         self.tokenizer.encode('kwaheri').input_ids[1:-1])\n        text_recon = self.tokenizer.decode(input_ids)\n        text_recon_raw = self.tokenizer.decode(input_ids, return_raw=True)\n        self.assertEqual(text_recon, f'{PREFIX}{text}{SUFFIX}'.lower())\n        self.assertEqual(text_recon_raw, f'{PREFIX}{text}{SUFFIX}'.lower())\n        self.assertEqual(input_ids, self.tokenizer(text).input_ids)\n\n        # test multi token\n        text = 'This apple seems delicious, ngapi?'\n        input_ids = self.tokenizer.encode(text).input_ids\n        self.assertEqual(input_ids[6:-2],\n                         self.tokenizer.encode('ngapi').input_ids[1:-1])\n        text_recon = self.tokenizer.decode(input_ids)\n        text_recon_raw = self.tokenizer.decode(input_ids, return_raw=True)\n        self.assertEqual(text_recon, f'{PREFIX}{text}{SUFFIX}'.lower())\n        for idx in range(4):\n            self.assertIn(f'ngapi_{idx}', text_recon_raw)\n        self.assertEqual(input_ids, self.tokenizer(text).input_ids)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_upsample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import PixelShufflePack\n\n\ndef test_pixel_shuffle():\n\n    # test on cpu\n    model = PixelShufflePack(3, 3, 2, 3)\n    model.init_weights()\n    x = torch.rand(1, 3, 16, 16)\n    y = model(x)\n    assert y.shape == (1, 3, 32, 32)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        x = x.cuda()\n        y = model(x)\n        assert y.shape == (1, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_vgg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport numpy as np\nimport pytest\nimport torch\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.models.archs import VGG16\n\n\ndef check_norm_state(modules, train_state):\n    \"\"\"Check if norm layer is in correct train state.\"\"\"\n    for mod in modules:\n        if isinstance(mod, _BatchNorm):\n            if mod.training != train_state:\n                return False\n    return True\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef assert_mid_feat_shape(mid_feat, target_shape):\n    assert len(mid_feat) == 5\n    for i in range(5):\n        assert_tensor_with_shape(mid_feat[i], torch.Size(target_shape[i]))\n\n\ndef _demo_inputs(input_shape=(2, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_vgg16_encoder():\n    \"\"\"Test VGG16 encoder.\"\"\"\n    target_shape = [(2, 64, 32, 32), (2, 128, 16, 16), (2, 256, 8, 8),\n                    (2, 512, 4, 4), (2, 512, 2, 2)]\n\n    model = VGG16(4)\n    model.init_weights()\n    model.train()\n    img = _demo_inputs()\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n    assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n    assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n    assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n    assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n\n    model = VGG16(4, batch_norm=True)\n    model.init_weights()\n    model.train()\n    img = _demo_inputs()\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n    assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n    assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n    assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n    assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n\n    model = VGG16(4, aspp=True, dilations=[6, 12, 18])\n    model.init_weights()\n    model.train()\n    img = _demo_inputs()\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 256, 2, 2))\n    assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n    assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n    assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n    assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n    assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n    assert check_norm_state(model.modules(), True)\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        model = VGG16(4)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        img = _demo_inputs().cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n        assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n        assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n        assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n        assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n\n        model = VGG16(4, batch_norm=True)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        img = _demo_inputs().cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n        assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n        assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n        assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n        assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n\n        model = VGG16(4, aspp=True, dilations=[6, 12, 18])\n        model.init_weights()\n        model.train()\n        model.cuda()\n        img = _demo_inputs().cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 256, 2, 2))\n        assert_tensor_with_shape(outputs['max_idx_1'], target_shape[0])\n        assert_tensor_with_shape(outputs['max_idx_2'], target_shape[1])\n        assert_tensor_with_shape(outputs['max_idx_3'], target_shape[2])\n        assert_tensor_with_shape(outputs['max_idx_4'], target_shape[3])\n        assert_tensor_with_shape(outputs['max_idx_5'], target_shape[4])\n        assert check_norm_state(model.modules(), True)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_archs/test_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nimport platform\nimport shutil\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\ntest_dir = osp.join(osp.dirname(__file__), '..', '..', '..', 'tests')\nconfig_path = osp.join(test_dir, 'configs', 'diffuser_wrapper_cfg')\nmodel_path = osp.join(test_dir, 'configs', 'tmp_weight')\nckpt_path = osp.join(test_dir, 'configs', 'ckpt')\n\nregister_all_modules()\n\n\nclass TestWrapper(TestCase):\n\n    def test_build(self):\n        # mock SiLU\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            from mmagic.models.editors.ddpm.denoising_unet import SiLU\n            torch.nn.SiLU = SiLU\n\n        # 1. test from config\n        model = MODELS.build(\n            dict(type='ControlNetModel', from_config=config_path))\n        model.init_weights()  # test init_weights without warning\n        model_str = repr(model)\n        self.assertIn(\n            'Wrapped Module Class: <class '\n            '\\'diffusers.models.controlnet.ControlNetModel\\'>', model_str)\n        self.assertIn('Wrapped Module Name: ControlNetModel', model_str)\n        self.assertIn(f'From Config: {config_path}', model_str)\n\n        # 2. test save as diffuser\n        os.makedirs(model_path, exist_ok=True)\n        if digit_version(TORCH_VERSION) < digit_version('2.0.1'):\n            model.save_pretrained(model_path, safe_serialization=False)\n        else:\n            model.save_pretrained(model_path)\n\n        # 3. test from_pretrained\n        model = MODELS.build(\n            dict(\n                type='ControlNetModel',\n                from_pretrained=model_path,\n                torch_dtype=torch.float16))\n        assert all([p.dtype == torch.float16 for p in model.parameters()])\n        model_str = repr(model)\n        self.assertIn(f'From Pretrained: {model_path}', model_str)\n\n        # save ckpt to test init_weights\n        os.makedirs(ckpt_path, exist_ok=True)\n        torch.save(model.state_dict(), osp.join(ckpt_path, 'model.pth'))\n\n        # test raise warning when init_cfg is passed\n        model = MODELS.build(\n            dict(\n                type='ControlNetModel',\n                from_pretrained=model_path,\n                torch_dtype=torch.float16,\n                init_cfg=dict(\n                    type='Pretrained',\n                    checkpoint=osp.join(ckpt_path, 'model.pth'))))\n        model.init_weights()\n\n        # delete saved model to save space\n        if 'win' not in platform.system().lower():\n            shutil.rmtree(model_path)\n            shutil.rmtree(ckpt_path)\n\n        # 4. test loading without repo_id\n        model = MODELS.build(\n            dict(\n                type='ControlNetModel',\n                in_channels=3,\n                down_block_types=['DownBlock2D'],\n                block_out_channels=(32, ),\n                cross_attention_dim=16,\n                attention_head_dim=2,\n                conditioning_embedding_out_channels=(16, )), )\n        model_str = repr(model)\n        self.assertNotIn('From Config:', model_str)\n        self.assertNotIn('From Pretrained:', model_str)\n\n        # 5. test attribute error for a unknown attribute\n        with self.assertRaises(AttributeError):\n            model.unkonwn_attr('what\\'s this?')\n\n        # 6. test init_weights\n        model.init_weights()\n\n        # 7. test forward function\n        forward_mock = MagicMock()\n        model.model.forward = forward_mock\n        model(**dict(t='t', control='control'))\n        _, called_kwargs = forward_mock.call_args\n        self.assertEqual(called_kwargs['t'], 't')\n        self.assertEqual(called_kwargs['control'], 'control')\n\n        # 8. test other attribute share with BaseModule and model\n        register_buffer_mock = MagicMock()\n        model.model.registrer_buffer = register_buffer_mock\n        model.registrer_buffer('buffer', 123)\n        called_args, _ = register_buffer_mock.call_args\n        self.assertEqual(called_args, ('buffer', 123))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_average_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.model import BaseModel\nfrom mmengine.testing import assert_allclose\n\nfrom mmagic.models.base_models import ExponentialMovingAverage, RampUpEMA\n\n\nclass ToyModule(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.conv = nn.Conv2d(1, 1, 3)\n        self.register_buffer('buffer', torch.randn(2, 2))\n\n    def update_buffer(self):\n        for buffer in self.buffers():\n            buffer.add_(torch.randn(*buffer.size()))\n\n    def update_params(self):\n        for param in self.parameters():\n            param.add(torch.randn(*param.size()))\n\n    def update(self):\n        self.update_params()\n        self.update_buffer()\n\n    def forward(self, x):\n        return self.conv(x)\n\n\nclass ToyModel_old(BaseModel):\n\n    def __init__(self):\n        super().__init__()\n        self.ema = ToyModule()\n        self.module = ToyModule()\n\n    def forward(self, x):\n        return\n\n\nclass ToyEMAModel(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.module = ToyModule()\n\n    def forward(self, x):\n        return self.module(x)\n\n\nclass ToyModel(BaseModel):\n\n    def __init__(self):\n        super().__init__()\n        self.ema = ToyEMAModel()\n        self.module = ToyModule()\n\n    def forward(self, x):\n        return\n\n\nclass TestExponentialMovingAverage(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.default_cfg = dict(\n            interval=1, momentum=0.0001, update_buffers=True)\n\n    def test_init(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        average_model = ExponentialMovingAverage(model=model, **cfg)\n        self.assertEqual(average_model.momentum, 0.0001)\n        self.assertTrue(\n            (average_model.module.conv.weight == model.conv.weight).all())\n\n        cfg['momentum'] = 10\n        with self.assertRaises(AssertionError):\n            average_model = ExponentialMovingAverage(model, **cfg)\n\n        cfg['momentum'] = -2\n        with self.assertRaises(AssertionError):\n            average_model = ExponentialMovingAverage(model, **cfg)\n\n        # test warning\n        with pytest.warns(UserWarning):\n            cfg = deepcopy(self.default_cfg)\n            cfg['momentum'] = 0.6\n            model = ToyModule()\n            average_model = ExponentialMovingAverage(model=model, **cfg)\n            self.assertEqual(average_model.momentum, 0.6)\n\n    def test_avg_func(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        average_model = ExponentialMovingAverage(model, **cfg)\n        src_tensor = torch.randn(1, 3, 2, 2)\n        tar_tensor = torch.randn(1, 3, 2, 2)\n        tar_tensor_backup = tar_tensor.clone()\n        average_model.avg_func(tar_tensor, src_tensor, steps=42)\n        assert_allclose(tar_tensor,\n                        tar_tensor_backup * 0.9999 + src_tensor * 0.0001)\n\n    def test_sync_buffer_and_parameters(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        average_model = ExponentialMovingAverage(model, **cfg)\n        model.update()\n        average_model.sync_parameters(model)\n\n        assert_allclose(model.conv.weight, average_model.module.conv.weight)\n        assert_allclose(model.conv.bias, average_model.module.conv.bias)\n        assert_allclose(model.buffer, average_model.module.buffer)\n\n        model.update()\n        average_model.sync_buffers(model)\n        assert_allclose(model.buffer, average_model.module.buffer)\n\n        cfg['update_buffers'] = True\n        average_model = ExponentialMovingAverage(model, **cfg)\n        with self.assertWarns(Warning):\n            average_model.sync_buffers(model)\n\n    def test_load_from_state_dict(self):\n        cfg = deepcopy(self.default_cfg)\n\n        model = ToyModel()\n        average_model = ExponentialMovingAverage(model, **cfg)\n\n        old_state_dict = ToyModel_old().state_dict()\n        average_model._load_from_state_dict(\n            old_state_dict,\n            'ema.',\n            local_metadata={},\n            strict=True,\n            missing_keys=[],\n            unexpected_keys=[],\n            error_msgs=[])\n\n\nclass TestRamUpEMA(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n\n        cls.default_cfg = dict(\n            interval=1, ema_kimg=10, ema_rampup=0.05, batch_size=32, eps=1e-8)\n\n    def test_init(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        RampUpEMA(model, **cfg)\n\n    def test_avg_func(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        average_model = RampUpEMA(model, **cfg)\n        src_tensor = torch.randn(1, 3, 2, 2)\n        tar_tensor = torch.randn(1, 3, 2, 2)\n        average_model.avg_func(tar_tensor, src_tensor, steps=42)\n\n        # model = ToyModule()\n        cfg['ema_rampup'] = None\n        average_model = RampUpEMA(model, **cfg)\n        src_tensor = torch.randn(1, 3, 2, 2)\n        tar_tensor = torch.randn(1, 3, 2, 2)\n        average_model.avg_func(tar_tensor, src_tensor, steps=42)\n\n        # test warning\n        with pytest.warns(UserWarning):\n            cfg = deepcopy(self.default_cfg)\n            cfg['batch_size'] = 0\n            model = ToyModule()\n            average_model = RampUpEMA(model, **cfg)\n            src_tensor = torch.randn(1, 3, 2, 2)\n            tar_tensor = torch.randn(1, 3, 2, 2)\n            average_model.avg_func(tar_tensor, src_tensor, steps=42)\n\n    def test_sync_buffer_and_parameters(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModule()\n        average_model = RampUpEMA(model, **cfg)\n        model.update()\n        average_model.sync_parameters(model)\n\n        assert_allclose(model.conv.weight, average_model.module.conv.weight)\n        assert_allclose(model.conv.bias, average_model.module.conv.bias)\n        assert_allclose(model.buffer, average_model.module.buffer)\n\n        model.update()\n        average_model.sync_buffers(model)\n        assert_allclose(model.buffer, average_model.module.buffer)\n\n        cfg['update_buffers'] = True\n        average_model = RampUpEMA(model, **cfg)\n        with self.assertWarns(Warning):\n            average_model.sync_buffers(model)\n\n    def test_load_from_state_dict(self):\n        cfg = deepcopy(self.default_cfg)\n        model = ToyModel()\n        average_model = RampUpEMA(model, **cfg)\n\n        old_state_dict = ToyModel_old().state_dict()\n        average_model._load_from_state_dict(\n            old_state_dict,\n            'ema.',\n            local_metadata={},\n            strict=True,\n            missing_keys=[],\n            unexpected_keys=[],\n            error_msgs=[])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_base_conditional_gan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.structures import LabelData\nfrom mmengine.testing import assert_allclose\nfrom torch.nn import ModuleList\n\nfrom mmagic.models import BaseConditionalGAN, DataPreprocessor\nfrom mmagic.models.losses import (DiscShiftLossComps, GANLossComps,\n                                  GeneratorPathRegularizerComps,\n                                  GradientPenaltyLossComps)\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='SAGANGenerator',\n    output_scale=32,\n    base_channels=32,\n    attention_cfg=dict(type='SelfAttentionBlock'),\n    attention_after_nth_block=2,\n    with_spectral_norm=True)\ndiscriminator = dict(\n    type='ProjDiscriminator',\n    input_scale=32,\n    base_channels=32,\n    attention_cfg=dict(type='SelfAttentionBlock'),\n    attention_after_nth_block=1,\n    with_spectral_norm=True)\n\n\nclass ToyCGAN(BaseConditionalGAN):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def train_generator(self, inputs, data_samples, optimizer_wrapper):\n        return dict(loss_gen=1)\n\n    def train_discriminator(self, inputs, data_samples, optimizer_wrapper):\n        return dict(loss_disc=2)\n\n\nclass TestBaseGAN(TestCase):\n\n    def test_val_step_and_test_step(self):\n        gan = ToyCGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor())\n        gan.eval()\n\n        # no mode\n        inputs = dict(inputs=dict(num_batches=3))\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 3)\n        self.assertEqual(len(outputs_test), 3)\n        for out_val, out_test in zip(outputs_val, outputs_test):\n            self.assertEqual(out_val.fake_img.shape, (3, 32, 32))\n            self.assertEqual(out_test.fake_img.shape, (3, 32, 32))\n\n        # set mode\n        inputs = dict(inputs=dict(num_batches=4, sample_model='orig'))\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 4)\n        self.assertEqual(len(outputs_test), 4)\n        for out_val, out_test in zip(outputs_val, outputs_test):\n            self.assertEqual(out_val.sample_model, 'orig')\n            self.assertEqual(out_test.sample_model, 'orig')\n            self.assertEqual(out_val.fake_img.shape, (3, 32, 32))\n            self.assertEqual(out_test.fake_img.shape, (3, 32, 32))\n\n        inputs = dict(inputs=dict(num_batches=4, sample_model='orig/ema'))\n        self.assertRaises(AssertionError, gan.val_step, inputs)\n\n        inputs = dict(inputs=dict(num_batches=4, sample_model='ema'))\n        self.assertRaises(AssertionError, gan.val_step, inputs)\n\n        # set noise and label input\n        gt_label = torch.randint(0, 10, (1, ))\n        inputs = dict(\n            inputs=dict(noise=torch.randn(1, 10)),\n            data_samples=[DataSample(gt_label=LabelData(label=gt_label))])\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 1)\n        self.assertEqual(len(outputs_val), 1)\n        for idx in range(1):\n            test_fake_img = outputs_test[idx].fake_img\n            val_fake_img = outputs_val[idx].fake_img\n            test_label = outputs_test[idx].gt_label.label\n            val_label = outputs_val[idx].gt_label.label\n            self.assertEqual(test_label, gt_label)\n            self.assertEqual(val_label, gt_label)\n            assert_allclose(test_fake_img, val_fake_img)\n\n    def test_forward(self):\n        # set a gan w/o EMA\n        gan = ToyCGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor())\n        gan.eval()\n        inputs = dict(num_batches=3)\n        outputs = gan(inputs, None)\n        self.assertEqual(len(outputs), 3)\n        for out in outputs:\n            self.assertEqual(out.fake_img.shape, (3, 32, 32))\n\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for out in outputs:\n            self.assertEqual(out.fake_img.shape, (3, 32, 32))\n\n        outputs = gan(torch.randn(3, 10))\n        self.assertEqual(len(outputs), 3)\n        for out in outputs:\n            self.assertEqual(out.fake_img.shape, (3, 32, 32))\n\n        # set a gan w EMA\n        gan = ToyCGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor(),\n            ema_config=dict(interval=1))\n        gan.eval()\n        # inputs = dict(inputs=dict(num_batches=3))\n        inputs = dict(num_batches=3)\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for out in outputs:\n            self.assertEqual(out.fake_img.shape, (3, 32, 32))\n\n        # inputs = dict(inputs=dict(num_batches=3, sample_model='ema/orig'))\n        inputs = dict(num_batches=3, sample_model='ema/orig')\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for out in outputs:\n            ema_img = out.ema\n            orig_img = out.orig\n            self.assertEqual(ema_img.fake_img.shape, orig_img.fake_img.shape)\n            self.assertTrue(out.sample_model, 'ema/orig')\n\n        # inputs = dict(inputs=dict(noise=torch.randn(4, 10)))\n        inputs = dict(noise=torch.randn(4, 10))\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 4)\n        for out in outputs:\n            self.assertEqual(out.fake_img.shape, (3, 32, 32))\n\n        # test data sample input\n        # inputs = dict(inputs=dict(noise=torch.randn(3, 10)))\n        inputs = dict(noise=torch.randn(3, 10))\n        label = [torch.randint(0, 10, (1, )) for _ in range(3)]\n        data_sample = [DataSample() for _ in range(3)]\n        for idx, sample in enumerate(data_sample):\n            sample.set_gt_label(label[idx])\n        print(DataSample.stack(data_sample))\n        outputs = gan(inputs, DataSample.stack(data_sample))\n        self.assertEqual(len(outputs), 3)\n        for idx, output in enumerate(outputs):\n            self.assertEqual(output.gt_label.label, label[idx])\n\n    def test_custom_loss(self):\n        message_hub = MessageHub.get_instance('basegan-test-custom-loss')\n        message_hub.update_info('iter', 10)\n\n        gan_loss = dict(type='GANLossComps', gan_type='vanilla')\n\n        # test loss config is dict()\n        gan = BaseConditionalGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=dict())\n        self.assertIsNone(gan.gan_loss)\n        self.assertIsNone(gan.disc_auxiliary_losses)\n        self.assertIsNone(gan.gen_auxiliary_losses)\n\n        # test loss config is list\n        disc_auxiliary_loss_list = [\n            dict(type='DiscShiftLossComps'),\n            dict(type='GradientPenaltyLossComps')\n        ]\n        gen_auxiliary_loss_list = [dict(type='GeneratorPathRegularizerComps')]\n        loss_config = dict(\n            gan_loss=gan_loss,\n            disc_auxiliary_loss=disc_auxiliary_loss_list,\n            gen_auxiliary_loss=gen_auxiliary_loss_list)\n        gan = BaseConditionalGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        self.assertIsInstance(gan.disc_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.disc_auxiliary_losses[0], DiscShiftLossComps)\n        self.assertIsInstance(gan.disc_auxiliary_losses[1],\n                              GradientPenaltyLossComps)\n        self.assertIsInstance(gan.gen_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.gen_auxiliary_losses[0],\n                              GeneratorPathRegularizerComps)\n\n        # test loss config is single dict\n        disc_auxiliary_loss = dict(\n            type='DiscShiftLossComps', data_info=dict(pred='disc_pred_fake'))\n        gen_auxiliary_loss = dict(\n            type='GeneratorPathRegularizerComps',\n            data_info=dict(generator='gen', num_batches='batch_size'))\n        loss_config = dict(\n            gan_loss=gan_loss,\n            disc_auxiliary_loss=disc_auxiliary_loss,\n            gen_auxiliary_loss=gen_auxiliary_loss)\n\n        gan = BaseConditionalGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        self.assertIsInstance(gan.gan_loss, GANLossComps)\n        self.assertIsInstance(gan.disc_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.disc_auxiliary_losses[0], DiscShiftLossComps)\n        self.assertIsInstance(gan.gen_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.gen_auxiliary_losses[0],\n                              GeneratorPathRegularizerComps)\n\n        # test forward custom loss terms\n        gan = BaseConditionalGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        # mock gen aux loss to avoid build styleGAN Generator\n        gen_aux_loss_mock = MagicMock(return_value=torch.Tensor([1.]))\n        gen_aux_loss_mock.loss_name = MagicMock(return_value='loss_gen_aux')\n        gan._modules['gen_auxiliary_losses'] = [gen_aux_loss_mock]\n        # mock optim wrapper\n        optimizer_wrapper = {\n            'discriminator': MagicMock(),\n            'generator': MagicMock()\n        }\n        optimizer_wrapper['discriminator']._accumulative_counts = 1\n        optimizer_wrapper['generator']._accumulative_counts = 1\n\n        inputs = dict(img=torch.randn(3, 3, 32, 32))\n        label = [torch.randint(0, 10, (1, )) for _ in range(3)]\n        data_sample = [DataSample() for _ in range(3)]\n        for idx, sample in enumerate(data_sample):\n            sample.set_gt_label(label[idx])\n        data = dict(inputs=inputs, data_samples=data_sample)\n\n        log_vars = gan.train_step(data, optim_wrapper=optimizer_wrapper)\n        self.assertIn('loss', log_vars)\n        self.assertIn('loss_disc_fake', log_vars)\n        self.assertIn('loss_disc_real', log_vars)\n        self.assertIn('loss_disc_fake_g', log_vars)\n        self.assertIn('loss_gen_aux', log_vars)\n        self.assertIn('loss_disc_shift', log_vars)\n\n        # test forward with only gan loss\n        loss_config = dict(gan_loss=gan_loss)\n        gan = BaseConditionalGAN(\n            noise_size=10,\n            num_classes=10,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        log_vars = gan.train_step(data, optim_wrapper=optimizer_wrapper)\n        self.assertIn('loss', log_vars)\n        self.assertIn('loss_disc_fake', log_vars)\n        self.assertIn('loss_disc_real', log_vars)\n        self.assertIn('loss_disc_fake_g', log_vars)\n        self.assertNotIn('loss_gen_aux', log_vars)\n        self.assertNotIn('loss_disc_shift', log_vars)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_base_edit_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch import nn\nfrom torch.optim import Adam\n\nfrom mmagic.models import BaseEditModel, DataPreprocessor\nfrom mmagic.models.losses import L1Loss\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\n@MODELS.register_module()\nclass ToyBaseModel(nn.Module):\n    \"\"\"An example of interpolate network for testing BasicInterpolator.\"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.layer = nn.Conv2d(3, 3, 3, 1, 1)\n\n    def forward(self, x):\n        return self.layer(x)\n\n    def init_weights(self, pretrained=None):\n        pass\n\n\ndef test_base_edit_model():\n\n    model = BaseEditModel(\n        generator=dict(type='ToyBaseModel'),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        data_preprocessor=DataPreprocessor())\n\n    assert model.__class__.__name__ == 'BaseEditModel'\n    assert isinstance(model.generator, ToyBaseModel)\n    assert isinstance(model.pixel_loss, L1Loss)\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # prepare data\n    inputs = torch.rand(1, 3, 20, 20)\n    target = torch.rand(3, 20, 20)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars['loss'], torch.Tensor)\n    save_loss = log_vars['loss']\n    log_vars = model.train_step(data, optim_wrapper)\n    log_vars = model.train_step(data, optim_wrapper)\n    assert save_loss > log_vars['loss']\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 20, 20)\n\n    # feat\n    output = model(torch.rand(1, 3, 20, 20), mode='tensor')\n    assert output.shape == (1, 3, 20, 20)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_base_gan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom mmengine.testing import assert_allclose\nfrom torch.nn import ModuleList\nfrom torch.optim import SGD\n\nfrom mmagic.models import BaseGAN, DataPreprocessor\nfrom mmagic.models.losses import (DiscShiftLossComps, GANLossComps,\n                                  GeneratorPathRegularizerComps,\n                                  GradientPenaltyLossComps)\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(type='DCGANGenerator', output_scale=8, base_channels=8)\ndiscriminator = dict(\n    type='DCGANDiscriminator',\n    base_channels=8,\n    input_scale=8,\n    output_scale=4,\n    out_channels=1)\n\n\nclass ToyGAN(BaseGAN):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def train_generator(self, inputs, data_samples, optimizer_wrapper):\n        return dict(loss_gen=1)\n\n    def train_discriminator(self, inputs, data_samples, optimizer_wrapper):\n        return dict(loss_disc=2)\n\n\nclass TestBaseGAN(TestCase):\n\n    def test_init(self):\n        gan = ToyGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor())\n        self.assertIsInstance(gan, BaseGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = ToyGAN(\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = ToyGAN(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = ToyGAN(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n        self.assertIsNone(gan.gan_loss)\n        self.assertIsNone(gan.gen_auxiliary_losses)\n        self.assertIsNone(gan.disc_auxiliary_losses)\n        self.assertEqual(gan.loss_config, dict())\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 2\n        n_disc = 2\n        message_hub = MessageHub.get_instance('basegan-test')\n        gan = ToyGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        ToyGAN.train_discriminator = MagicMock(\n            return_value=dict(loss_disc=torch.Tensor(1), loss=torch.Tensor(1)))\n        ToyGAN.train_generator = MagicMock(\n            return_value=dict(loss_gen=torch.Tensor(2), loss=torch.Tensor(2)))\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        inputs = torch.randn(1, 3, 4, 4)\n        data = dict(inputs=inputs)\n\n        # simulate train_loop here\n        disc_update_times = 0\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(ToyGAN.train_generator.call_count, accu_iter)\n                self.assertEqual(\n                    set(log.keys()), set(['loss', 'loss_disc', 'loss_gen']))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(ToyGAN.train_generator.call_count, 0)\n                self.assertEqual(log.keys(), set(['loss', 'loss_disc']))\n\n            # disc should update once for each iteration\n            disc_update_times += 1\n            self.assertEqual(ToyGAN.train_discriminator.call_count,\n                             disc_update_times)\n\n    def test_update_ema(self):\n        # prepare model\n        n_gen = 4\n        n_disc = 2\n        accu_iter = 2\n        ema_interval = 3\n        message_hub = MessageHub.get_instance('basegan-test-ema')\n        gan = ToyGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc,\n            generator_steps=n_gen,\n            ema_config=dict(interval=ema_interval))\n        gan.train_discriminator = MagicMock(\n            return_value=dict(loss_disc=torch.Tensor(1), loss=torch.Tensor(1)))\n        gan.train_generator = MagicMock(\n            return_value=dict(loss_gen=torch.Tensor(2), loss=torch.Tensor(2)))\n\n        self.assertTrue(gan.with_ema_gen)\n        # mock generator_ema with MagicMock\n        del gan.generator_ema\n        setattr(gan, 'generator_ema', MagicMock())\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        inputs = torch.randn(1, 3, 4, 4)\n        data = dict(inputs=inputs)\n\n        # simulate train_loop here\n        ema_times = 0\n        gen_update_times = 0\n        disc_update_times = 0\n        for idx in range(n_disc * accu_iter * ema_interval):\n            message_hub.update_info('iter', idx)\n            gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) % (n_disc * accu_iter) == 0:\n                ema_times += 1\n                gen_update_times += accu_iter * n_gen\n\n            disc_update_times += 1\n            self.assertEqual(gan.generator_ema.update_parameters.call_count,\n                             ema_times)\n            self.assertEqual(gan.train_generator.call_count, gen_update_times)\n            # disc should update once for each iteration\n            self.assertEqual(gan.train_discriminator.call_count,\n                             disc_update_times)\n\n    def test_val_step_and_test_step(self):\n        gan = ToyGAN(\n            noise_size=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor())\n\n        # no mode\n        inputs = dict(inputs=dict(num_batches=3))\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 3)\n        self.assertEqual(len(outputs_test), 3)\n        for idx in range(3):\n            self.assertEqual(outputs_val[idx].fake_img.shape, (3, 8, 8))\n            self.assertEqual(outputs_test[idx].fake_img.shape, (3, 8, 8))\n\n        # set mode\n        inputs = dict(inputs=dict(num_batches=4, sample_model='orig'))\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 4)\n        self.assertEqual(len(outputs_test), 4)\n        for idx in range(4):\n            self.assertEqual(outputs_val[idx].sample_model, 'orig')\n            self.assertEqual(outputs_test[idx].sample_model, 'orig')\n            self.assertEqual(outputs_val[idx].fake_img.shape, (3, 8, 8))\n            self.assertEqual(outputs_test[idx].fake_img.shape, (3, 8, 8))\n\n        inputs = dict(inputs=dict(num_batches=4, sample_model='orig/ema'))\n        self.assertRaises(AssertionError, gan.val_step, inputs)\n\n        inputs = dict(inputs=dict(num_batches=4, sample_model='ema'))\n        self.assertRaises(AssertionError, gan.val_step, inputs)\n\n        # set noise input\n        inputs = dict(inputs=dict(noise=torch.randn(4, 10)))\n        outputs_val = gan.val_step(inputs)\n        outputs_test = gan.test_step(inputs)\n        self.assertEqual(len(outputs_val), 4)\n        self.assertEqual(len(outputs_val), 4)\n        for idx in range(4):\n            test_fake_img = outputs_test[idx].fake_img\n            val_fake_img = outputs_val[idx].fake_img\n            assert_allclose(test_fake_img, val_fake_img)\n\n    def test_forward(self):\n        # set a gan w/o EMA\n        gan = ToyGAN(\n            noise_size=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor())\n        inputs = dict(num_batches=3)\n        outputs = gan(inputs, None)\n        self.assertEqual(len(outputs), 3)\n        for idx in range(3):\n            self.assertTrue(outputs[idx].fake_img.shape == (3, 8, 8))\n\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for idx in range(3):\n            self.assertEqual(outputs[idx].fake_img.shape, (3, 8, 8))\n\n        outputs = gan(torch.randn(3, 10))\n        self.assertEqual(len(outputs), 3)\n        for idx in range(3):\n            self.assertEqual(outputs[idx].fake_img.shape, (3, 8, 8))\n\n        # set a gan w EMA\n        gan = ToyGAN(\n            noise_size=10,\n            generator=deepcopy(generator),\n            data_preprocessor=DataPreprocessor(),\n            ema_config=dict(interval=1))\n        inputs = dict(num_batches=3)\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for idx in range(3):\n            self.assertEqual(outputs[idx].fake_img.shape, (3, 8, 8))\n\n        inputs = dict(num_batches=3, sample_model='ema/orig')\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 3)\n        for idx in range(3):\n            ema_img = outputs[idx].ema\n            orig_img = outputs[idx].orig\n            self.assertEqual(ema_img.fake_img.shape, orig_img.fake_img.shape)\n            self.assertTrue(outputs[idx].sample_model, 'ema/orig')\n\n        inputs = dict(noise=torch.randn(4, 10))\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 4)\n        for idx in range(4):\n            self.assertEqual(outputs[idx].fake_img.shape, (3, 8, 8))\n\n        # test additional sample kwargs\n        sample_kwargs = dict(return_noise=True)\n        inputs = dict(noise=torch.randn(4, 10), sample_kwargs=sample_kwargs)\n        outputs = gan(inputs)\n        self.assertEqual(len(outputs), 4)\n        for idx in range(4):\n            self.assertEqual(outputs[idx].fake_img.shape, (3, 8, 8))\n\n        # test when data samples is not None\n        inputs = dict(num_batches=3, sample_model='ema/orig')\n        data_samples = [DataSample(id=1), DataSample(id=2), DataSample(id=3)]\n        outputs = gan(inputs, DataSample.stack(data_samples))\n        self.assertEqual(len(outputs), 3)\n        for idx, output in enumerate(outputs):\n            self.assertEqual(output.id, idx + 1)\n\n    def test_custom_loss(self):\n        message_hub = MessageHub.get_instance('basegan-test-custom-loss')\n        message_hub.update_info('iter', 10)\n\n        gan_loss = dict(type='GANLossComps', gan_type='vanilla')\n\n        # test loss config is dict()\n        gan = BaseGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=dict())\n        self.assertIsNone(gan.gan_loss)\n        self.assertIsNone(gan.disc_auxiliary_losses)\n        self.assertIsNone(gan.gen_auxiliary_losses)\n\n        # test loss config is list\n        disc_auxiliary_loss_list = [\n            dict(type='DiscShiftLossComps'),\n            dict(type='GradientPenaltyLossComps')\n        ]\n        gen_auxiliary_loss_list = [dict(type='GeneratorPathRegularizerComps')]\n        loss_config = dict(\n            gan_loss=gan_loss,\n            disc_auxiliary_loss=disc_auxiliary_loss_list,\n            gen_auxiliary_loss=gen_auxiliary_loss_list)\n        gan = BaseGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        self.assertIsInstance(gan.disc_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.disc_auxiliary_losses[0], DiscShiftLossComps)\n        self.assertIsInstance(gan.disc_auxiliary_losses[1],\n                              GradientPenaltyLossComps)\n        self.assertIsInstance(gan.gen_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.gen_auxiliary_losses[0],\n                              GeneratorPathRegularizerComps)\n\n        # test loss config is single dict\n        disc_auxiliary_loss = dict(\n            type='DiscShiftLossComps', data_info=dict(pred='disc_pred_fake'))\n        gen_auxiliary_loss = dict(\n            type='GeneratorPathRegularizerComps',\n            data_info=dict(generator='gen', num_batches='batch_size'))\n        loss_config = dict(\n            gan_loss=gan_loss,\n            disc_auxiliary_loss=disc_auxiliary_loss,\n            gen_auxiliary_loss=gen_auxiliary_loss)\n\n        gan = BaseGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        self.assertIsInstance(gan.gan_loss, GANLossComps)\n        self.assertIsInstance(gan.disc_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.disc_auxiliary_losses[0], DiscShiftLossComps)\n        self.assertIsInstance(gan.gen_auxiliary_losses, ModuleList)\n        self.assertIsInstance(gan.gen_auxiliary_losses[0],\n                              GeneratorPathRegularizerComps)\n\n        # test forward custom loss terms\n        gan = BaseGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        # mock gen aux loss to avoid build styleGAN Generator\n        gen_aux_loss_mock = MagicMock(return_value=torch.Tensor([1.]))\n        gen_aux_loss_mock.loss_name = MagicMock(return_value='loss_gen_aux')\n        gan._modules['gen_auxiliary_losses'] = [gen_aux_loss_mock]\n        # mock optim wrapper\n        optimizer_wrapper = {\n            'discriminator': MagicMock(),\n            'generator': MagicMock()\n        }\n        optimizer_wrapper['discriminator']._accumulative_counts = 1\n        optimizer_wrapper['generator']._accumulative_counts = 1\n\n        data = dict(inputs=dict(img=torch.randn(2, 3, 32, 32)))\n        log_vars = gan.train_step(data, optim_wrapper=optimizer_wrapper)\n        self.assertIn('loss', log_vars)\n        self.assertIn('loss_disc_fake', log_vars)\n        self.assertIn('loss_disc_real', log_vars)\n        self.assertIn('loss_disc_fake_g', log_vars)\n        self.assertIn('loss_gen_aux', log_vars)\n        self.assertIn('loss_disc_shift', log_vars)\n\n        # test forward with only gan loss\n        loss_config = dict(gan_loss=gan_loss)\n        gan = BaseGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor(),\n            loss_config=loss_config)\n        data = dict(inputs=dict(img=torch.randn(2, 3, 32, 32)))\n        log_vars = gan.train_step(data, optim_wrapper=optimizer_wrapper)\n        self.assertIn('loss', log_vars)\n        self.assertIn('loss_disc_fake', log_vars)\n        self.assertIn('loss_disc_real', log_vars)\n        self.assertIn('loss_disc_fake_g', log_vars)\n        self.assertNotIn('loss_gen_aux', log_vars)\n        self.assertNotIn('loss_disc_shift', log_vars)\n\n    def test_gather_log_vars(self):\n        gan = ToyGAN(\n            noise_size=5,\n            generator=deepcopy(generator),\n            discriminator=deepcopy(discriminator),\n            data_preprocessor=DataPreprocessor())\n        log_dict_list = [\n            dict(loss=torch.Tensor([2.33]), loss_disc=torch.Tensor([1.14514]))\n        ]\n        self.assertDictEqual(log_dict_list[0],\n                             gan.gather_log_vars(log_dict_list))\n\n        log_dict_list = [\n            dict(loss=torch.Tensor([2]), loss_disc=torch.Tensor([2])),\n            dict(loss=torch.Tensor([3]), loss_disc=torch.Tensor([5]))\n        ]\n        self.assertDictEqual(\n            dict(loss=torch.Tensor([2.5]), loss_disc=torch.Tensor([3.5])),\n            gan.gather_log_vars(log_dict_list))\n\n        # test raise error\n        with self.assertRaises(AssertionError):\n            gan.gather_log_vars([dict(a=1), dict(b=2)])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_base_mattor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nfrom unittest.mock import patch\n\nimport mmcv\nimport numpy as np\nimport torch\nfrom mmengine.config import ConfigDict\n\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.models.base_models import BaseMattor\nfrom mmagic.models.editors import DIM\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef _get_model_cfg(fname):\n    \"\"\"Grab configs necessary to create a model.\n\n    These are deep copied to allow for safe modification of parameters without\n    influencing other tests.\n    \"\"\"\n    config_dpath = 'configs'\n    config_fpath = osp.join(config_dpath, fname)\n    if not osp.exists(config_dpath):\n        raise Exception('Cannot find config path')\n    config = mmcv.Config.fromfile(config_fpath)\n    return config.model\n\n\ndef _demo_input_train(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    inputs = torch.cat((merged, trimap), dim=1)\n    if cuda:\n        inputs = inputs.cuda()\n\n    results = dict(\n        alpha=np.random.random(\n            (img_shape[0], img_shape[1], 1)).astype(np.float32),\n        merged=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32),\n        fg=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32),\n        bg=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32))\n\n    data_samples = []\n    packinputs = PackInputs()\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef _demo_input_test(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n        test_trans (str): what test transformation is used in data pipeline.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    ori_shape = (img_shape[0], img_shape[1], 1)\n\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    inputs = torch.cat((merged, trimap), dim=1)\n    if cuda:\n        inputs = inputs.cuda()\n\n    results = dict(\n        ori_alpha=np.random.random(ori_shape).astype(np.float32),\n        ori_trimap=np.random.randint(256, size=ori_shape).astype(np.float32),\n        ori_merged_shape=img_shape)\n\n    data_samples = []\n    packinputs = PackInputs()\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef assert_pred_alpha(predictions, batch_size):\n    assert isinstance(predictions, list)\n    assert isinstance(predictions[0], DataSample)\n    pred_alpha = predictions[0].output.pred_alpha.data\n    assert isinstance(pred_alpha, torch.Tensor)\n    assert pred_alpha.dtype == torch.uint8\n    assert pred_alpha.shape[-2:] == batch_size\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\n@patch.multiple(BaseMattor, __abstractmethods__=set())\ndef test_base_mattor():\n    \"\"\"Test resize and restore size.\"\"\"\n\n    data_preprocessor = dict(type='MattorPreprocessor')\n    backbone = dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(type='VGG16', in_channels=4),\n        decoder=dict(type='PlainDecoder'))\n    test_cfgs = [\n        dict(resize_method='pad', resize_mode='reflect', size_divisor=32),\n        dict(resize_method='interp', resize_mode='bilinear', size_divisor=32),\n    ]\n    out_shapes = (64, 64), (32, 32)\n\n    inputs = torch.rand((1, 4, 48, 48))\n    for test_cfg, out_shape in zip(test_cfgs, out_shapes):\n        mattor = BaseMattor(\n            data_preprocessor=data_preprocessor,\n            backbone=backbone,\n            test_cfg=test_cfg,\n        )\n\n        out = mattor.resize_inputs(inputs)\n        assert out.shape[-2:] == out_shape\n        out = mattor.restore_size(out[0],\n                                  ConfigDict(ori_merged_shape=(48, 48)))\n        assert out.shape[-2:] == (48, 48)\n\n\ndef test_dim_config():\n\n    data_preprocessor = dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        # bgr_to_rgb=True,\n        # proc_inputs='normalize',\n        proc_trimap='rescale_to_zero_one',\n        # proc_gt='rescale_to_zero_one',\n    )\n    backbone = dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(type='VGG16', in_channels=4),\n        decoder=dict(type='PlainDecoder'))\n    refiner = dict(type='PlainRefiner')\n    train_cfg = dict(train_backbone=True, train_refiner=True)\n    test_cfg = dict(refine=True)\n    loss_alpha = dict(type='L1Loss')\n\n    # build mattor without refiner\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner=None,\n        loss_alpha=loss_alpha,\n        train_cfg=train_cfg,\n        test_cfg=test_cfg.copy())\n    assert not mattor.with_refiner\n    assert not mattor.test_cfg.refine\n\n    # only train the refiner, this will freeze the backbone\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner,\n        loss_alpha=loss_alpha,\n        train_cfg=dict(train_backbone=False, train_refiner=True),\n        test_cfg=test_cfg.copy())\n    assert not mattor.train_cfg.train_backbone\n    assert mattor.train_cfg.train_refiner\n    assert mattor.test_cfg.refine\n\n    # only train the backbone while the refiner is used for inference but not\n    # trained, this behavior is allowed currently but will cause a warning.\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner,\n        loss_alpha=loss_alpha,\n        train_cfg=dict(train_backbone=True, train_refiner=False),\n        test_cfg=test_cfg.copy())\n    assert mattor.train_cfg.train_backbone\n    assert not mattor.train_cfg.train_refiner\n    assert mattor.test_cfg.refine\n\n\ndef test_dim():\n    model_cfg = ConfigDict(\n        type='DIM',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            # bgr_to_rgb=True,\n            # proc_inputs='normalize',\n            proc_trimap='rescale_to_zero_one',\n            # proc_gt='rescale_to_zero_one',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(type='VGG16', in_channels=4),\n            decoder=dict(type='PlainDecoder')),\n        refiner=dict(type='PlainRefiner'),\n        loss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5),\n        loss_comp=dict(type='CharbonnierCompLoss', loss_weight=0.5),\n        loss_refine=dict(type='CharbonnierLoss'),\n        train_cfg=dict(train_backbone=True, train_refiner=True),\n        test_cfg=dict(\n            refine=False,\n            resize_method='pad',\n            resize_mode='reflect',\n            size_divisor=32,\n        ),\n    )\n\n    # 1. test dim model with refiner\n    model_cfg.train_cfg.train_refiner = True\n    model_cfg.test_cfg.refine = True\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64))\n    output_train = model(*input_train, mode='loss')\n    assert_dict_keys_equal(output_train,\n                           ['loss_alpha', 'loss_comp', 'loss_refine'])\n\n    # test model forward in train mode with gpu\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        input_train = _demo_input_train((64, 64), cuda=True)\n        output_train = model(*input_train, mode='loss')\n        assert_dict_keys_equal(output_train,\n                               ['loss_alpha', 'loss_comp', 'loss_refine'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model = MODELS.build(model_cfg)\n        input_test = _demo_input_test((48, 48))\n        output_test = model(*input_test, mode='predict')\n        assert isinstance(output_test, list)\n        assert isinstance(output_test[0], DataSample)\n        pred_alpha = output_test[0].output.pred_alpha.data\n        assert isinstance(pred_alpha, torch.Tensor)\n        assert pred_alpha.dtype == torch.uint8\n        assert pred_alpha.shape[-2:] == (48, 48)\n\n        # test model forward in test mode with gpu\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = model(*input_test, mode='predict')\n            assert_pred_alpha(output_test, (48, 48))\n\n    # 2. test dim model without refiner\n    model_cfg.refiner = None\n    model_cfg.test_cfg.refine = True\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64))\n    output_train = model(*input_train, mode='loss')\n    assert_dict_keys_equal(output_train, ['loss_alpha', 'loss_comp'])\n\n    # test model forward in train mode with gpu\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        input_train = _demo_input_train((64, 64), cuda=True)\n        output_train = model(*input_train, mode='loss')\n        assert_dict_keys_equal(output_train, ['loss_alpha', 'loss_comp'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model = MODELS.build(model_cfg)\n        input_test = _demo_input_test((48, 48))\n        output_test = model(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n        # check test with gpu\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = model(*input_test, mode='predict')\n\n    # test forward_raw\n    model.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    model.forward(inputs)\n\n\ndef test_indexnet():\n    model_cfg = ConfigDict(\n        type='IndexNet',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            # bgr_to_rgb=True,\n            # proc_inputs='normalize',\n            proc_trimap='rescale_to_zero_one',\n            # proc_gt='rescale_to_zero_one',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(\n                type='IndexNetEncoder',\n                in_channels=4,\n                freeze_bn=True,\n            ),\n            decoder=dict(type='IndexNetDecoder')),\n        loss_alpha=dict(\n            type='CharbonnierLoss', loss_weight=0.5, sample_wise=True),\n        loss_comp=dict(\n            type='CharbonnierCompLoss', loss_weight=1.5, sample_wise=True),\n        test_cfg=dict(\n            resize_method='interp',\n            resize_mode='bicubic',\n            size_divisor=32,\n        ),\n    )\n\n    model_cfg.backbone.encoder.init_cfg = None\n\n    # test indexnet inference\n    with torch.no_grad():\n        indexnet = MODELS.build(model_cfg)\n        indexnet.eval()\n        input_test = _demo_input_test((48, 48))\n        output_test = indexnet(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n        # test inference with gpu\n        if torch.cuda.is_available():\n            indexnet = MODELS.build(model_cfg).cuda()\n            indexnet.eval()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = indexnet(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n    # test forward train though we do not guarantee the training for present\n    model_cfg.loss_alpha = None\n    model_cfg.loss_comp = dict(type='L1CompositionLoss')\n    indexnet = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64), batch_size=2)\n    output_train = indexnet(*input_train, mode='loss')\n    # assert output_train['num_samples'] == 2\n    assert_dict_keys_equal(output_train, ['loss_comp'])\n\n    if torch.cuda.is_available():\n        model_cfg.loss_alpha = dict(type='L1Loss')\n        model_cfg.loss_comp = None\n        indexnet = MODELS.build(model_cfg).cuda()\n        input_train = _demo_input_train((64, 64), batch_size=2, cuda=True)\n        output_train = indexnet(*input_train, mode='loss')\n        # assert output_train['num_samples'] == 2\n        assert_dict_keys_equal(output_train, ['loss_alpha'])\n\n    # test forward\n    indexnet.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    indexnet.forward(inputs)\n\n\ndef test_gca():\n    model_cfg = ConfigDict(\n        type='GCA',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            # bgr_to_rgb=True,\n            # proc_inputs='normalize',\n            proc_trimap='as_is',\n            # proc_gt='rescale_to_zero_one',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(\n                type='ResGCAEncoder',\n                block='BasicBlock',\n                layers=[3, 4, 4, 2],\n                in_channels=6,\n                with_spectral_norm=True,\n            ),\n            decoder=dict(\n                type='ResGCADecoder',\n                block='BasicBlockDec',\n                layers=[2, 3, 3, 2],\n                with_spectral_norm=True)),\n        loss_alpha=dict(type='L1Loss'),\n        test_cfg=dict(\n            resize_method='pad',\n            resize_mode='reflect',\n            size_divisor=32,\n        ))\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    meta = {'format_trimap_to_onehot': True}\n    inputs, data_samples = _demo_input_train((64, 64), batch_size=2, meta=meta)\n    inputs6 = torch.cat((inputs, inputs[:, 3:, :, :], inputs[:, 3:, :, :]),\n                        dim=1)\n    outputs = model(inputs6, data_samples, mode='loss')\n    assert_dict_keys_equal(outputs, ['loss'])\n\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        inputs, data_samples = _demo_input_train((64, 64),\n                                                 batch_size=2,\n                                                 cuda=True,\n                                                 meta=meta)\n        inputs6 = torch.cat((inputs, inputs[:, 3:, :, :], inputs[:, 3:, :, :]),\n                            dim=1)\n        outputs = model(inputs6, data_samples, mode='loss')\n        assert_dict_keys_equal(outputs, ['loss'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model_cfg.backbone.encoder.in_channels = 4\n        model = MODELS.build(model_cfg)\n        inputs = _demo_input_test((48, 48), meta=meta)\n        outputs = model(*inputs, mode='predict')\n        assert_pred_alpha(outputs, (48, 48))\n\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            inputs = _demo_input_test((48, 48), cuda=True, meta=meta)\n            outputs = model(*inputs, mode='predict')\n            assert_pred_alpha(outputs, (48, 48))\n\n    # test forward_dummy\n    model.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    model.forward(inputs)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_base_translation_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nfrom mmengine.model import MMDistributedDataParallel\n\nfrom mmagic.models import BaseTranslationModel\n\n\nclass ToyTranslationModel(BaseTranslationModel):\n\n    def __init__(self, generator, discriminator=None):\n        super().__init__(\n            generator=generator,\n            discriminator=discriminator,\n            default_domain='A',\n            reachable_domains=['A'],\n            related_domains=['A', 'B'],\n            data_preprocessor=None)\n\n\nclass TestBaseTranslationModel(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.generator = dict(\n            type='ResnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            base_channels=64,\n            norm_cfg=dict(type='IN'),\n            use_dropout=False,\n            num_blocks=9,\n            padding_mode='reflect',\n            init_cfg=dict(type='normal', gain=0.02))\n        cls.discriminator = dict(\n            type='PatchDiscriminator',\n            in_channels=3,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='IN'),\n            init_cfg=dict(type='normal', gain=0.02))\n\n    def test_init(self):\n        # test disc is None\n        model = ToyTranslationModel(\n            generator=self.generator, discriminator=None)\n        self.assertIsNone(model.discriminators)\n\n        # test disc is not None\n        model = ToyTranslationModel(\n            generator=self.generator, discriminator=self.discriminator)\n        self.assertIsNotNone(model.discriminators)\n\n    def test_get_module(self):\n        generator_mock = MagicMock(spec=MMDistributedDataParallel)\n        generator_mock_module = MagicMock()\n        generator_mock.module = generator_mock_module\n\n        model = ToyTranslationModel(\n            generator=self.generator, discriminator=None)\n        module = model.get_module(generator_mock)\n        self.assertEqual(module, generator_mock_module)\n\n    def test_forward(self):\n        model = ToyTranslationModel(\n            generator=self.generator, discriminator=None)\n        res = model.forward_test(\n            img=torch.randn(1, 3, 64, 64), target_domain=None)\n        self.assertEqual(res['target'].shape, (1, 3, 64, 64))\n        self.assertEqual(res['source'].shape, (1, 3, 64, 64))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_basic_interpolator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom torch import nn\n\nfrom mmagic.models import BasicInterpolator\nfrom mmagic.models.losses import L1Loss\nfrom mmagic.registry import MODELS\n\n\n@MODELS.register_module()\nclass InterpolateExample(nn.Module):\n    \"\"\"An example of interpolate network for testing BasicInterpolator.\"\"\"\n\n    def __init__(self):\n        super().__init__()\n        self.layer = nn.Conv2d(3, 3, 3, 1, 1)\n\n    def forward(self, x):\n        return self.layer(x[:, 0])\n\n    def init_weights(self, pretrained=None):\n        pass\n\n\ndef test_basic_interpolator():\n\n    model = BasicInterpolator(\n        generator=dict(type='InterpolateExample'),\n        pixel_loss=dict(type='L1Loss'))\n    assert model.__class__.__name__ == 'BasicInterpolator'\n    assert isinstance(model.generator, InterpolateExample)\n    assert isinstance(model.pixel_loss, L1Loss)\n\n    input_tensors = torch.rand((1, 9, 3, 16, 16))\n    input_tensors = model.split_frames(input_tensors)\n    assert input_tensors.shape == (8, 2, 3, 16, 16)\n\n    output_tensors = torch.rand((8, 1, 3, 16, 16))\n    result = model.merge_frames(input_tensors, output_tensors)\n    assert len(result) == 17\n    assert result[0].shape == (16, 16, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_one_stage.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom os.path import dirname, join\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\nfrom mmengine import Config\n\nfrom mmagic.models import GLEncoderDecoder\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\ndef test_one_stage_inpaintor():\n    register_all_modules()\n    device = 'cuda' if torch.cuda.is_available() else 'cpu'\n\n    config_file = join(\n        dirname(__file__), '..', '..', 'configs', 'one_stage_gl.py')\n    cfg = Config.fromfile(config_file)\n\n    # mock perceptual loss for test speed\n    cfg.model.loss_composed_percep = None\n    inpaintor = MODELS.build(cfg.model)\n\n    # modify attributes for mocking\n    inpaintor.with_composed_percep_loss = True\n    inpaintor.loss_percep = None\n\n    # test attributes\n    assert inpaintor.__class__.__name__ == 'OneStageInpaintor'\n    assert isinstance(inpaintor.generator, GLEncoderDecoder)\n    assert inpaintor.with_l1_hole_loss\n    assert inpaintor.with_l1_valid_loss\n    assert inpaintor.with_tv_loss\n    assert inpaintor.with_composed_percep_loss\n    assert inpaintor.with_out_percep_loss\n    assert inpaintor.with_gan\n    assert inpaintor.with_gp_loss\n    assert inpaintor.with_disc_shift_loss\n    assert inpaintor.is_train\n    assert inpaintor.train_cfg['disc_step'] == 1\n    assert inpaintor.disc_step_count == 0\n\n    with patch.object(\n            inpaintor, 'loss_percep', return_value=(torch.tensor(1.0), None)):\n\n        input_x = torch.randn(1, 3, 256, 256)\n        with pytest.raises(NotImplementedError):\n            inpaintor.forward_train(input_x)\n\n        inpaintor.to(device=device)\n\n        # construct inputs\n        gt_img = torch.randn(3, 256, 256).to(device=device)\n        mask = torch.zeros_like(gt_img)[0:1, ...]\n        mask[..., 20:100, 100:120] = 1.\n        masked_img = gt_img * (1. - mask)\n        mask_bbox = [100, 100, 110, 110]\n        inputs = masked_img.unsqueeze(0)\n        data_sample = DataSample(\n            mask=mask,\n            mask_bbox=mask_bbox,\n            gt_img=gt_img,\n        )\n        data_samples = DataSample.stack([data_sample])\n        data_batch = {'inputs': inputs, 'data_samples': [data_sample]}\n\n        # test forward_tensor\n        fake_reses, fake_imgs = inpaintor.forward_tensor(inputs, data_samples)\n        assert fake_reses.shape == fake_imgs.shape == (1, 3, 256, 256)\n\n        # test forward test\n        predictions = inpaintor.forward_test(inputs, data_samples)\n        assert predictions.fake_img.shape == (1, 3, 256, 256)\n\n        # test train_step\n        optim_g = torch.optim.SGD(inpaintor.generator.parameters(), lr=0.1)\n        optim_d = torch.optim.SGD(inpaintor.disc.parameters(), lr=0.1)\n        optim_dict = dict(generator=optim_g, disc=optim_d)\n\n        log_vars = inpaintor.train_step(data_batch, optim_dict)\n        assert 'loss_l1_hole' in log_vars\n        assert 'loss_l1_valid' in log_vars\n        assert 'loss_composed_percep' in log_vars\n        assert 'loss_composed_style' not in log_vars\n        assert 'loss_out_percep' in log_vars\n        assert 'loss_out_style' not in log_vars\n        assert 'loss_tv' in log_vars\n        assert 'fake_loss' in log_vars\n        assert 'real_loss' in log_vars\n        assert 'loss_g_fake' in log_vars\n\n        # Another test\n        cfg_ = copy.deepcopy(cfg)\n        cfg_.model.train_cfg.disc_step = 2\n        inpaintor = MODELS.build(cfg_.model)\n        inpaintor.to(device=device)\n        assert inpaintor.train_cfg.disc_step == 2\n        log_vars = inpaintor.train_step(data_batch, optim_dict)\n        assert 'loss_l1_hole' not in log_vars\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_base_models/test_two_stage.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport platform\nfrom os.path import dirname, join\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\n# TODO: this test is same as `test_two_stage_encoder_decoder.py`\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_two_stage_inpaintor():\n    register_all_modules()\n\n    config_file = join(dirname(__file__), '../../configs', 'two_stage_test.py')\n    cfg = Config.fromfile(config_file)\n\n    inpaintor = MODELS.build(cfg.model)\n\n    assert inpaintor.__class__.__name__ == 'TwoStageInpaintor'\n\n    if torch.cuda.is_available():\n        inpaintor.cuda()\n\n    # check architecture\n    assert inpaintor.stage1_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                          'loss_composed_percep', 'loss_tv')\n    assert inpaintor.stage2_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                          'loss_gan')\n    assert inpaintor.with_l1_hole_loss\n    assert inpaintor.with_l1_valid_loss\n    assert inpaintor.with_composed_percep_loss\n    assert not inpaintor.with_out_percep_loss\n    assert inpaintor.with_gan\n\n    inpaintor._modules['loss_percep'] = MagicMock(\n        return_value=(torch.Tensor([1]), torch.Tensor([2])))\n\n    # prepare data\n    gt_img = torch.rand((3, 256, 256))\n    mask = torch.zeros((1, 256, 256))\n    mask[..., 50:180, 60:170] = 1.\n    masked_img = gt_img.unsqueeze(0) * (1. - mask)\n    mask_bbox = [100, 100, 110, 110]\n    data_batch = {\n        'inputs':\n        masked_img,\n        'data_samples':\n        [DataSample(\n            mask=mask,\n            mask_bbox=mask_bbox,\n            gt_img=gt_img,\n        )]\n    }\n\n    optim_g = torch.optim.Adam(inpaintor.generator.parameters(), lr=0.0001)\n    optim_d = torch.optim.Adam(inpaintor.disc.parameters(), lr=0.0001)\n    optims = dict(generator=OptimWrapper(optim_g), disc=OptimWrapper(optim_d))\n\n    # check train_step with standard two_stage model\n    for i in range(5):\n        log_vars = inpaintor.train_step(data_batch, optims)\n\n        if i % 2 == 0:\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_disc_shift' in log_vars\n            assert 'loss' in log_vars\n        else:\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_disc_shift' in log_vars\n            assert 'loss' in log_vars\n            assert 'stage1_loss_l1_hole' in log_vars\n            assert 'stage1_loss_l1_valid' in log_vars\n            assert 'stage2_loss_l1_hole' in log_vars\n            assert 'stage2_loss_l1_valid' in log_vars\n\n    # check for forward_test\n    data = inpaintor.data_preprocessor(data_batch, True)\n    data_inputs, data_sample = data['inputs'], data['data_samples']\n    output = inpaintor.forward_test(data_inputs, data_sample)\n    prediction = output\n    assert 'fake_res' in prediction\n    assert 'fake_img' in prediction\n    assert 'pred_img' in prediction\n    assert prediction.pred_img.shape == (1, 3, 256, 256)\n\n    # check for gp_loss\n    cfg_copy = copy.deepcopy(cfg)\n    cfg_copy.model.disc_input_with_mask = False\n    cfg_copy.model.disc.in_channels = 3\n    cfg_copy.model.loss_gp = dict(type='GradientPenaltyLoss', loss_weight=10.)\n    inpaintor = MODELS.build(cfg_copy.model)\n    assert inpaintor.with_gp_loss\n\n    log_vars = inpaintor.train_step(data_batch, optims)\n    assert 'real_loss' in log_vars\n    assert 'stage1_loss_l1_hole' in log_vars\n    assert 'stage1_loss_l1_valid' in log_vars\n    assert 'stage2_loss_l1_hole' in log_vars\n    assert 'stage2_loss_l1_valid' in log_vars\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_data_preprocessors/test_data_preprocessor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport torch\nimport torch.nn.functional as F\nfrom mmengine.testing import assert_allclose\n\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.structures import DataSample\n\n\nclass TestBaseDataPreprocessor(TestCase):\n\n    def test_init(self):\n        data_preprocessor = DataPreprocessor(\n            mean=[0, 0, 0],\n            std=[255, 255, 255],\n            pad_size_divisor=16,\n            pad_value=10)\n\n        self.assertEqual(data_preprocessor._device.type, 'cpu')\n        assert_allclose(data_preprocessor.mean,\n                        torch.tensor([0, 0, 0]).view(-1, 1, 1))\n        assert_allclose(data_preprocessor.std,\n                        torch.tensor([255, 255, 255]).view(-1, 1, 1))\n        assert_allclose(data_preprocessor.pad_value, torch.tensor(10))\n        self.assertEqual(data_preprocessor.pad_size_divisor, 16)\n        self.assertEqual(data_preprocessor.pad_mode, 'constant')\n\n        # test non-image-keys\n        data_preprocessor = DataPreprocessor(non_image_keys='feature')\n        self.assertIn('feature', data_preprocessor._NON_IMAGE_KEYS)\n        data_preprocessor = DataPreprocessor(non_image_keys=['feature'])\n        self.assertIn('feature', data_preprocessor._NON_IMAGE_KEYS)\n\n        # test non-concentate-keys\n        data_preprocessor = DataPreprocessor(non_concentate_keys='n_imgs')\n        self.assertIn('n_imgs', data_preprocessor._NON_CONCATENATE_KEYS)\n        data_preprocessor = DataPreprocessor(non_concentate_keys=['n_imgs'])\n        self.assertIn('n_imgs', data_preprocessor._NON_CONCATENATE_KEYS)\n\n    def test_parse_channel_index(self):\n        data_preprocessor = DataPreprocessor()\n        self.assertEqual(\n            data_preprocessor._parse_channel_index(torch.rand(3, 5, 5)), 0)\n        self.assertEqual(\n            data_preprocessor._parse_channel_index(torch.rand(2, 3, 5, 5)), 1)\n        self.assertEqual(\n            data_preprocessor._parse_channel_index(torch.rand(2, 10, 3, 5, 5)),\n            2)\n        self.assertEqual(\n            data_preprocessor._parse_channel_index(torch.rand(5, 5)), 1)\n        with self.assertRaises(AssertionError):\n            data_preprocessor._parse_channel_index(\n                torch.rand(1, 2, 10, 3, 5, 5, 5))\n\n        # test dict input\n        inputs = dict(fake_img=torch.rand(2, 3, 5, 5))\n        self.assertEqual(data_preprocessor._parse_channel_index(inputs), 1)\n\n    def test_parse_channel_order(self):\n        data_preprocessor = DataPreprocessor()\n        parse_fn = data_preprocessor._parse_channel_order\n        # test no data sample\n        self.assertEqual(parse_fn('img', torch.rand(3, 5, 5)), 'BGR')\n        self.assertEqual(parse_fn('img', torch.rand(1, 3, 3, 4)), 'BGR')\n        self.assertEqual(parse_fn('img', torch.rand(1, 1, 3, 4)), 'single')\n\n        # test dict input\n        inputs = dict(fake_img=torch.rand(1, 3, 3, 4))\n        self.assertEqual(parse_fn('img', inputs), 'BGR')\n\n        # test data sample is not None\n        data_sample = DataSample()\n\n        # test gt_img key\n        # - RGB in channel order --> RGB\n        data_sample.set_metainfo({'gt_channel_order': 'RGB'})\n        self.assertEqual(\n            parse_fn('gt_img', torch.rand(3, 5, 5), data_sample), 'RGB')\n        # - BGR in channel order --> BGR\n        data_sample.set_metainfo({'gt_channel_order': 'BGR'})\n        self.assertEqual(\n            parse_fn('gt_img', torch.rand(3, 5, 5), data_sample), 'BGR')\n\n        # - grayscale in color_type --> single\n        data_sample.set_metainfo({'gt_color_type': 'grayscale'})\n        self.assertEqual(\n            parse_fn('gt_img', torch.rand(1, 5, 5), data_sample), 'single')\n        with self.assertRaises(AssertionError):\n            parse_fn('gt_img', torch.rand(3, 5, 5), data_sample)\n\n        # - unchanged in color_type --> BGR / single\n        data_sample.set_metainfo({'gt_color_type': 'unchanged'})\n        self.assertEqual(\n            parse_fn('gt_img', torch.rand(1, 5, 5), data_sample), 'single')\n        self.assertEqual(\n            parse_fn('gt_img', torch.rand(3, 5, 5), data_sample), 'BGR')\n\n        # test non-gt keys\n        # - RGB in channel order --> RGB\n        data_sample.set_metainfo({'AAA_channel_order': 'RGB'})\n        self.assertEqual(\n            parse_fn('AAA', torch.rand(3, 5, 5), data_sample), 'RGB')\n        # - BGR in channel order --> BGR\n        data_sample.set_metainfo({'BBC_channel_order': 'BGR'})\n        self.assertEqual(\n            parse_fn('BBC', torch.rand(3, 5, 5), data_sample), 'BGR')\n\n        # - grayscale in color_type --> single\n        data_sample.set_metainfo({'mm_img_color_type': 'grayscale'})\n        data_sample.set_metainfo({'mm_img_channel_order': 'RGB'})\n        self.assertEqual(\n            parse_fn('mm_img', torch.rand(1, 5, 5), data_sample), 'single')\n        with self.assertRaises(AssertionError):\n            parse_fn('mm_img', torch.rand(3, 5, 5), data_sample)\n\n        # - unchanged in color_type --> BGR / single\n        data_sample.set_metainfo({'mm_img_color_type': 'unchanged'})\n        self.assertEqual(\n            parse_fn('mm_img', torch.rand(1, 5, 5), data_sample), 'single')\n        self.assertEqual(\n            parse_fn('mm_img', torch.rand(3, 5, 5), data_sample), 'BGR')\n\n        # - color_type and channel_order both None --> BGR / single\n        self.assertEqual(\n            parse_fn('dk', torch.rand(1, 5, 5), data_sample), 'single')\n        self.assertEqual(\n            parse_fn('dk', torch.rand(3, 5, 5), data_sample), 'BGR')\n\n        # test parse channel order for a stacked data sample\n        stacked_data_sample = DataSample.stack([data_sample, data_sample])\n        self.assertEqual(\n            parse_fn('mm_img', torch.rand(1, 5, 5), stacked_data_sample),\n            'single')\n        self.assertEqual(\n            parse_fn('AAA', torch.rand(3, 5, 5), data_sample), 'RGB')\n\n    def test_parse_batch_channel_order(self):\n        data_preprocessor = DataPreprocessor()\n        parse_fn = data_preprocessor._parse_batch_channel_order\n\n        with self.assertRaises(AssertionError):\n            parse_fn('img', torch.rand(1, 3, 5, 5), [DataSample()] * 2)\n\n        inputs_batch = torch.randn(2, 3, 5, 5)\n        data_sample_batch = [\n            DataSample(metainfo=dict(gt_channel_order='RGB')),\n            DataSample(metainfo=dict(gt_channel_order='RGB'))\n        ]\n        self.assertTrue(parse_fn('gt', inputs_batch, data_sample_batch))\n\n        data_sample_batch = [\n            DataSample(metainfo=dict(mm_img_channel_order='RGB')),\n            DataSample(metainfo=dict(mm_img_channel_order='BGR'))\n        ]\n        with self.assertRaises(AssertionError):\n            parse_fn(parse_fn('mm_img', inputs_batch, data_sample_batch))\n\n    def test_do_conversion(self):\n        data_preprocessor = DataPreprocessor()\n        cov_fn = data_preprocessor._do_conversion\n\n        # RGB -> BGR\n        inputs = torch.rand(2, 3, 5, 5)\n        target_outputs = inputs[:, [2, 1, 0], ...]\n        outputs, order = cov_fn(inputs, 'RGB', 'BGR')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'BGR')\n\n        # BGR -> RGB\n        outputs, order = cov_fn(inputs, 'BGR', 'RGB')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'RGB')\n\n        # RGB -> None\n        target_outputs = inputs.clone()\n        outputs, order = cov_fn(inputs, 'RGB', None)\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'RGB')\n\n        # BGR -> None\n        target_outputs = inputs.clone()\n        outputs, order = cov_fn(inputs, 'BGR', None)\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'BGR')\n\n        # single inputs -> None\n        inputs = torch.rand(1, 10, 1, 5, 5)\n        target_outputs = inputs.clone()\n        outputs, order = cov_fn(inputs, 'single', None)\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'single')\n\n        # single inputs -> BGR / RGB\n        outputs, order = cov_fn(inputs, 'single', None)\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'single')\n        outputs, order = cov_fn(inputs, 'single', 'RGB')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'single')\n        outputs, order = cov_fn(inputs, 'single', 'BGR')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'single')\n\n        with self.assertRaises(ValueError):\n            cov_fn(inputs, 'RGBA', 'RGB')\n\n        # RGBA inputs -> BGR / RGB\n        inputs = torch.rand(2, 4, 5, 5)\n        target_outputs = inputs.clone()\n        outputs, order = cov_fn(inputs, 'RGB', 'RGB')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'RGB')\n        target_outputs = inputs[:, [2, 1, 0, 3], ...]\n        outputs, order = cov_fn(inputs, 'RGB', 'BGR')\n        self.assertTrue((outputs == target_outputs).all())\n        self.assertEqual(order, 'BGR')\n\n    def test_update_metainfo(self):\n        data_preprocessor = DataPreprocessor()\n        update_fn = data_preprocessor._update_metainfo\n\n        with self.assertRaises(AssertionError):\n            padding_info = torch.randint(0, 10, (3, 2))\n            data_samples = [DataSample() for _ in range(2)]\n            update_fn(padding_info, None, data_samples)\n\n        padding_info = torch.randint(0, 10, (3, 2))\n        channel_order = dict(aaa='RGB', BBB='single')\n        output = update_fn(padding_info, channel_order)\n        self.assertEqual(len(output), 3)\n        for data, padding_tar in zip(output, padding_info):\n            self.assertTrue(\n                (data.metainfo['padding_size'] == padding_tar).all())\n            self.assertEqual(data.metainfo['aaa_output_channel_order'], 'RGB')\n            self.assertEqual(data.metainfo['BBB_output_channel_order'],\n                             'single')\n\n        # channel_order is None + data_sample is not None (use last output)\n        padding_info = torch.randint(0, 10, (3, 2))\n        output = update_fn(padding_info, None, output)\n        self.assertEqual(len(output), 3)\n        for data, padding_tar in zip(output, padding_info):\n            self.assertTrue(\n                (data.metainfo['padding_size'] == padding_tar).all())\n            # channel order in last output remains\n            self.assertEqual(data.metainfo['aaa_output_channel_order'], 'RGB')\n            self.assertEqual(data.metainfo['BBB_output_channel_order'],\n                             'single')\n\n    def test_preprocess_image_tensor(self):\n        \"\"\"We test five cases:\n\n        1. raise error when input is not 4D tensor\n        2. no metainfo + output channel order is None: no conversion\n        3. no metainfo + output channel order is RGB: do conversion to RGB\n        4. metainfo (BGR) + output channel order is RGB: do conversion to RGB\n        5. metainfo (single) + output channel order is RGB: no conversion\n        6. datasample is None: return new data sample with metainfo\n        \"\"\"\n        data_preprocessor = DataPreprocessor()\n        process_fn = data_preprocessor._preprocess_image_tensor\n        # 1. raise error\n        with self.assertRaises(AssertionError):\n            process_fn(torch.rand(2, 25), None)\n        # [0, 0, 0] for all time\n        target_padding_info = torch.FloatTensor([0, 0, 0])\n\n        # 2. no metainfo + output channel order is None\n        inputs = torch.randint(0, 255, (4, 3, 5, 5))\n        targets = (inputs - 127.5) / 127.5\n        data_samples = [\n            DataSample(metainfo=dict(mm_img_channel_order='RGB'))\n            for _ in range(4)\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples)\n        assert_allclose(outputs, targets)\n        for data in data_samples:\n            self.assertEqual(data.metainfo['img_output_channel_order'], 'BGR')\n            padding_size = data.metainfo['padding_size']\n            self.assertEqual(padding_size.shape, (3, ))\n            self.assertTrue((padding_size == target_padding_info).all())\n\n        # 3. no metainfo + output channel order is RGB -> do conversion\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        process_fn = data_preprocessor._preprocess_image_tensor\n        inputs = torch.randint(0, 255, (4, 3, 5, 5))\n        targets = ((inputs - 127.5) / 127.5)[:, [2, 1, 0]]\n        data_samples = [DataSample() for _ in range(4)]\n        outputs, data_samples = process_fn(inputs, data_samples)\n        assert_allclose(outputs, targets)\n        for data in data_samples:\n            self.assertEqual(data.metainfo['img_output_channel_order'], 'RGB')\n            padding_size = data.metainfo['padding_size']\n            self.assertEqual(padding_size.shape, (3, ))\n            self.assertTrue((padding_size == target_padding_info).all())\n\n        # 4. metainfo (BGR) + output channel order is RGB -> do conversion\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        process_fn = data_preprocessor._preprocess_image_tensor\n        inputs = torch.randint(0, 255, (4, 3, 5, 5))\n        targets = ((inputs - 127.5) / 127.5)[:, [2, 1, 0]]\n        data_samples = [\n            DataSample(metainfo=dict(gt_channel_order='BGR')) for _ in range(4)\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples, 'gt_img')\n        assert_allclose(outputs, targets)\n        for data in data_samples:\n            self.assertEqual(data.metainfo['gt_img_output_channel_order'],\n                             'RGB')\n            padding_size = data.metainfo['padding_size']\n            self.assertEqual(padding_size.shape, (3, ))\n            self.assertTrue((padding_size == target_padding_info).all())\n\n        # 5. metainfo (single) + output channel order is RGB -> no conversion\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        process_fn = data_preprocessor._preprocess_image_tensor\n        inputs = torch.randint(0, 255, (4, 1, 5, 5))\n        targets = ((inputs - 127.5) / 127.5)\n        data_samples = [\n            DataSample(metainfo=dict(sin_channel_order='single'))\n            for _ in range(4)\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples, 'sin')\n        assert_allclose(outputs, targets)\n        for data in data_samples:\n            self.assertEqual(data.metainfo['sin_output_channel_order'],\n                             'single')\n            padding_size = data.metainfo['padding_size']\n            self.assertEqual(padding_size.shape, (3, ))\n            self.assertTrue((padding_size == target_padding_info).all())\n\n        # 6. data sample is None + video inputs\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        inputs = torch.randint(0, 255, (4, 5, 3, 5, 5))\n        targets = ((inputs - 127.5) / 127.5)[:, :, [2, 1, 0]]\n        outputs, data_samples = process_fn(inputs, None, 'sin')\n        for data in data_samples:\n            self.assertEqual(data.metainfo['sin_output_channel_order'], 'RGB')\n            self.assertTrue(\n                (data.metainfo['padding_size'] == target_padding_info).all())\n\n    def test_preprocess_image_list(self):\n        \"\"\"We test four cases:\n\n        1. no metainfo + output channel order is None: no conversion\n        2. no metainfo + output channel order is RGB + padding:\n            do conversion to RGB\n        3. metainfo (RGB) + output channel order is RGB + padding:\n            no conversion\n        4. metainfo (single) + output channel order is RGB: no conversion\n        5. data_sample is None\n        \"\"\"\n        # no metainfo + output channel order is None\n        data_preprocessor = DataPreprocessor()\n        process_fn = data_preprocessor._preprocess_image_list\n        input1 = torch.randint(0, 255, (3, 3, 5))\n        input2 = torch.randint(0, 255, (3, 3, 5))\n        inputs = [input1, input2]\n        data_samples = [DataSample() for _ in range(2)]\n        target = torch.stack([(input1 - 127.5) / 127.5,\n                              (input2 - 127.5) / 127.5],\n                             dim=0)\n        target_padding_info = torch.FloatTensor([0, 0, 0])\n        outputs, data_samples = process_fn(inputs, data_samples)\n        assert_allclose(outputs, target)\n        for data in data_samples:\n            self.assertEqual(data.metainfo['img_output_channel_order'], 'BGR')\n            self.assertTrue(\n                (data.metainfo['padding_size'] == target_padding_info).all())\n\n        # no metainfo + output channel order is RGB\n        data_preprocessor = DataPreprocessor(\n            output_channel_order='RGB', pad_value=42)\n        process_fn = data_preprocessor._preprocess_image_list\n        input1 = torch.randint(0, 255, (3, 3, 5))\n        input2 = torch.randint(0, 255, (3, 5, 5))\n        inputs = [input1, input2]\n        data_samples = [DataSample() for _ in range(2)]\n        target1 = F.pad(input1.clone(), (0, 0, 0, 2), value=42)  # pad H\n        target2 = input2.clone()\n        target = torch.stack([target1, target2], dim=0)[:, [2, 1, 0]]\n        target = (target - 127.5) / 127.5\n        target_padding_info = [\n            torch.FloatTensor([0, 2, 0]),\n            torch.FloatTensor([0, 0, 0])\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples)\n        assert_allclose(outputs, target)\n        for data, pad in zip(data_samples, target_padding_info):\n            self.assertEqual(data.metainfo['img_output_channel_order'], 'RGB')\n            self.assertTrue((data.metainfo['padding_size'] == pad).all())\n\n        # meta info + output channel order is RGB\n        data_preprocessor = DataPreprocessor(\n            output_channel_order='RGB', pad_value=42)\n        process_fn = data_preprocessor._preprocess_image_list\n        input1 = torch.randint(0, 255, (3, 3, 5))\n        input2 = torch.randint(0, 255, (3, 5, 3))\n        inputs = [input1, input2]\n        data_samples = [\n            DataSample(metainfo=dict(gt_channel_order='RGB')) for _ in range(2)\n        ]\n        target1 = F.pad(input1.clone(), (0, 0, 0, 2), value=42)  # pad H\n        target2 = F.pad(input2.clone(), (0, 2, 0, 0), value=42)  # pad W\n        target = torch.stack([target1, target2], dim=0)\n        target = (target - 127.5) / 127.5\n        target_padding_info = [\n            torch.FloatTensor([0, 2, 0]),\n            torch.FloatTensor([0, 0, 2])\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples, 'gt_img')\n        assert_allclose(outputs, target)\n        for data, pad in zip(data_samples, target_padding_info):\n            self.assertEqual(data.metainfo['gt_img_output_channel_order'],\n                             'RGB')\n            self.assertTrue((data.metainfo['padding_size'] == pad).all())\n\n        # meta info (single) + output channel order is RGB\n        data_preprocessor = DataPreprocessor(\n            output_channel_order='RGB', pad_value=42)\n        process_fn = data_preprocessor._preprocess_image_list\n        input1 = torch.randint(0, 255, (1, 3, 5))\n        input2 = torch.randint(0, 255, (1, 5, 3))\n        inputs = [input1, input2]\n        data_samples = [\n            DataSample(metainfo=dict(AA_channel_order='single'))\n            for _ in range(2)\n        ]\n        target1 = F.pad(input1.clone(), (0, 0, 0, 2), value=42)  # pad H\n        target2 = F.pad(input2.clone(), (0, 2, 0, 0), value=42)  # pad W\n        target = torch.stack([target1, target2], dim=0)\n        target = (target - 127.5) / 127.5\n        target_padding_info = [\n            torch.FloatTensor([0, 2, 0]),\n            torch.FloatTensor([0, 0, 2])\n        ]\n        outputs, data_samples = process_fn(inputs, data_samples, 'AA')\n        assert_allclose(outputs, target)\n        for data, pad in zip(data_samples, target_padding_info):\n            self.assertEqual(data.metainfo['AA_output_channel_order'],\n                             'single')\n            self.assertTrue((data.metainfo['padding_size'] == pad).all())\n\n        # test data sample is None\n        data_preprocessor = DataPreprocessor(\n            output_channel_order='RGB', pad_value=42)\n        process_fn = data_preprocessor._preprocess_image_list\n        input1 = torch.randint(0, 255, (1, 3, 5))\n        input2 = torch.randint(0, 255, (1, 5, 3))\n        inputs = [input1, input2]\n        target1 = F.pad(input1.clone(), (0, 0, 0, 2), value=42)  # pad H\n        target2 = F.pad(input2.clone(), (0, 2, 0, 0), value=42)  # pad W\n        target = torch.stack([target1, target2], dim=0)\n        target = (target - 127.5) / 127.5\n        target_padding_info = [\n            torch.FloatTensor([0, 2, 0]),\n            torch.FloatTensor([0, 0, 2])\n        ]\n        outputs, data_samples = process_fn(inputs, None, 'test')\n        assert_allclose(outputs, target)\n        for data, pad in zip(data_samples, target_padding_info):\n            self.assertEqual(data.metainfo['test_output_channel_order'],\n                             'single')\n            self.assertTrue((data.metainfo['padding_size'] == pad).all())\n\n    def test_preprocess_dict_inputs(self):\n        \"\"\"Since preprocess of dict inputs are based on\n        `_preprocess_image_list` and `_preprocess_image_tensor`, we just test a\n        simple case for translation model and padding behavior.\"\"\"\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        process_fn = data_preprocessor._preprocess_dict_inputs\n\n        inputs = dict(\n            img_A=[torch.randint(0, 255, (3, 5, 5)) for _ in range(3)],\n            img_B=[torch.randint(0, 255, (3, 5, 5)) for _ in range(3)],\n            noise=[torch.randn(16) for _ in range(3)],\n            num_batches=3,\n            tensor=torch.randint(0, 255, (3, 4, 5, 5)),\n            mode=['ema', 'ema', 'ema'],\n        )\n        data_samples = [\n            DataSample(\n                metainfo=dict(\n                    img_A_channel_order='RGB', img_B_channel_order='BGR'))\n            for _ in range(3)\n        ]\n        target_A = (torch.stack(inputs['img_A']) - 127.5) / 127.5\n        target_B = (torch.stack(inputs['img_B']) - 127.5) / 127.5\n        target_B = target_B[:, [2, 1, 0]]\n        target_noise = torch.stack(inputs['noise'])\n        # no metainfo, parse as BGR, do conversion\n        target_tensor = ((inputs['tensor'] - 127.5) / 127.5)[:, [2, 1, 0, 3]]\n\n        outputs, data_samples = process_fn(inputs, data_samples)\n        assert_allclose(outputs['img_A'], target_A)\n        assert_allclose(outputs['img_B'], target_B)\n        assert_allclose(outputs['noise'], target_noise)\n        assert_allclose(outputs['tensor'], target_tensor)\n        self.assertEqual(outputs['mode'], 'ema')\n        self.assertEqual(outputs['num_batches'], 3)\n\n        # test no padding checking --> no tensor inputs\n        inputs = dict(num_batches=3, mode=['ema', 'ema', 'ema'])\n        outputs, data_samples = process_fn(inputs, data_samples)\n        self.assertEqual(outputs['mode'], 'ema')\n        self.assertEqual(outputs['num_batches'], 3)\n\n        # test error in padding checking\n        data_samples = [DataSample() for _ in range(2)]\n        inputs = dict(\n            img_A=[\n                torch.randint(0, 255, (3, 3, 5)),\n                torch.randint(0, 255, (3, 5, 5))\n            ],\n            img_B=[\n                torch.randint(0, 255, (3, 5, 5)),\n                torch.randint(0, 255, (3, 5, 5))\n            ],\n        )\n        with self.assertRaises(ValueError):\n            process_fn(inputs, data_samples)\n\n    def test_prerprocess_data_sample(self):\n        \"\"\"Only test training and testint mode in this test case.\"\"\"\n        data_preprocessor = DataPreprocessor(\n            data_keys=['gt_img', 'AA', 'dk'], output_channel_order='RGB')\n        cov_fn = data_preprocessor._preprocess_data_sample\n\n        # test training is True\n        metainfo = dict(gt_channel_order='RGB', tar_channel_order='BGR')\n        data_samples = [\n            DataSample(\n                gt_img=torch.randint(0, 255, (3, 5, 5)),\n                AA=torch.randint(0, 255, (3, 5, 5)),\n                metainfo=metainfo,\n            ) for _ in range(3)\n        ]\n        tar_AA = torch.stack([data.AA for data in data_samples])\n        tar_AA = ((tar_AA - 127.5) / 127.5)[:, [2, 1, 0]]\n        tar_gt = torch.stack([data.gt_img for data in data_samples])\n        tar_gt = (tar_gt - 127.5) / 127.5\n        outputs = cov_fn(data_samples, True)\n        assert_allclose(outputs.gt_img, tar_gt)\n        assert_allclose(outputs.AA, tar_AA)\n\n        # test training is False\n        data_samples = [\n            DataSample(\n                gt_img=torch.randint(0, 255, (3, 5, 5)),\n                AA=torch.randint(0, 255, (3, 5, 5)),\n                metainfo=metainfo,\n            ) for _ in range(3)\n        ]\n        tar_AA = torch.stack([data.AA for data in data_samples])\n        tar_AA = tar_AA  # BGR, no conversion\n        tar_gt = torch.stack([data.gt_img for data in data_samples])\n        tar_gt = tar_gt[:, [2, 1, 0]]  # RGB -> BGR\n        outputs = cov_fn(data_samples, False)\n        assert_allclose(outputs.gt_img, tar_gt)\n        assert_allclose(outputs.AA, tar_AA)\n\n        # test no stack\n        data_preprocessor.stack_data_sample = False\n        data_samples = [\n            DataSample(\n                gt_img=torch.randint(0, 255, (3, 5, 5)),\n                AA=torch.randint(0, 255, (3, 5, 5)),\n                metainfo=metainfo,\n            ) for _ in range(3)\n        ]\n        tar_AA = torch.stack([data.AA for data in data_samples])\n        tar_AA = tar_AA  # BGR, no conversion\n        tar_gt = torch.stack([data.gt_img for data in data_samples])\n        tar_gt = tar_gt[:, [2, 1, 0]]  # RGB -> BGR\n        outputs = cov_fn(data_samples, False)\n        output_gt = torch.stack([out.gt_img for out in outputs])\n        output_AA = torch.stack([out.AA for out in outputs])\n        assert_allclose(output_gt, tar_gt)\n        assert_allclose(output_AA, tar_AA)\n\n    def test_destruct_tensor_norm_and_conversion(self):\n        \"\"\"Test batch inputs, single input and batch inputs + no norm in this\n        unit test.\"\"\"\n        data_preprocessor = DataPreprocessor()\n        cov_fn = data_preprocessor._destruct_norm_and_conversion\n\n        # test batch\n        metainfo = dict(\n            img_output_channel_order='RGB',\n            aaa_output_channel_order='single',\n            bbb_output_channel_order='BGR',\n        )\n        img = torch.randn([3, 3, 5, 5])\n        aaa = torch.randn([3, 1, 5, 5])\n        bbb = torch.randn([3, 3, 5, 5])\n        ccc = torch.randn([3, 3, 5, 5])\n        data_samples = [DataSample(metainfo=metainfo) for _ in range(3)]\n        tar_img = ((img * 127.5) + 127.5)[:, [2, 1, 0]]\n        tar_aaa = (aaa * 127.5) + 127.5\n        tar_bbb = (bbb * 127.5) + 127.5\n        tar_ccc = (ccc * 127.5) + 127.5\n        assert_allclose(cov_fn(img, data_samples, 'img'), tar_img)\n        assert_allclose(cov_fn(aaa, data_samples, 'aaa'), tar_aaa)\n        assert_allclose(cov_fn(bbb, data_samples, 'bbb'), tar_bbb)\n        assert_allclose(cov_fn(ccc, data_samples, 'bbb'), tar_ccc)\n\n        # test single sample\n        img = torch.randn([3, 5, 5])\n        aaa = torch.randn([1, 5, 5])\n        bbb = torch.randn([3, 5, 5])\n        ccc = torch.randn([3, 5, 5])\n        data_samples = DataSample(metainfo=metainfo)\n        tar_img = ((img * 127.5) + 127.5)[[2, 1, 0], ...]\n        tar_aaa = (aaa * 127.5) + 127.5\n        tar_bbb = (bbb * 127.5) + 127.5\n        tar_ccc = (ccc * 127.5) + 127.5\n        assert_allclose(cov_fn(img, data_samples, 'img'), tar_img)\n        assert_allclose(cov_fn(aaa, data_samples, 'aaa'), tar_aaa)\n        assert_allclose(cov_fn(bbb, data_samples, 'bbb'), tar_bbb)\n        assert_allclose(cov_fn(ccc, data_samples, 'bbb'), tar_ccc)\n\n        # test no norm\n        data_preprocessor._enable_normalize = False\n        metainfo = dict(img_output_channel_order='RGB', )\n        img = torch.randn([3, 3, 5, 5])\n        data_samples = [DataSample(metainfo=metainfo) for _ in range(3)]\n        tar_img = img[:, [2, 1, 0]]\n        assert_allclose(cov_fn(img, data_samples, 'img'), tar_img)\n\n    def test_destruct_tensor_padding(self):\n        \"\"\"Test five cases in this unit test.\n\n        1. batch inputs + same padidng = True\n        2. batch inputs + same padding = False\n        3. single inputs\n        4. data_samples is None\n        5. padding_size is not found in metainfo\n        6. one data sample + padding size is not found in metainfo\n        7. list of sample + padding size is not found in metainfo\n\n        8. data sample is stacked\n        9. data sample is stacked + padding size not found in metainfo\n        \"\"\"\n        data_preprocessor = DataPreprocessor()\n        cov_fn = data_preprocessor._destruct_padding\n\n        # data sample is None, no un-padding\n        batch_tensor = torch.randint(0, 255, (2, 3, 3, 3))\n        tar_output = batch_tensor.clone()\n        output = cov_fn(batch_tensor, None)\n        assert_allclose(tar_output, output)\n\n        # batch inputs + same_padding is True\n        batch_tensor = torch.randint(0, 255, (2, 3, 5, 5))\n        metainfo_1 = dict(padding_size=torch.FloatTensor([2, 0]))\n        metainfo_2 = dict(padding_size=torch.FloatTensor([0, 2]))\n        data_samples = [\n            DataSample(metainfo=metainfo_1),\n            DataSample(metainfo=metainfo_2)\n        ]\n        output = cov_fn(batch_tensor, data_samples)\n        self.assertEqual(output.shape, (2, 3, 3, 5))\n\n        # batch inputs + same padding is False\n        batch_tensor = torch.randint(0, 255, (2, 3, 5, 5))\n        metainfo_1 = dict(padding_size=torch.FloatTensor([2, 0]))\n        metainfo_2 = dict(padding_size=torch.FloatTensor([0, 2]))\n        data_samples = [\n            DataSample(metainfo=metainfo_1),\n            DataSample(metainfo=metainfo_2)\n        ]\n        output = cov_fn(batch_tensor, data_samples, False)\n        self.assertIsInstance(output, list)\n        self.assertEqual(output[0].shape, (3, 3, 5))\n        self.assertEqual(output[1].shape, (3, 5, 3))\n\n        # single inputs\n        batch_tensor = torch.randint(0, 255, (3, 5, 5))\n        data_samples = DataSample(metainfo=metainfo_1)\n        output = cov_fn(batch_tensor, data_samples, False)\n        self.assertEqual(output.shape, (3, 3, 5))\n\n        # single data sample + test metainfo not found\n        batch_tensor = torch.randint(0, 255, (3, 5, 5))\n        data_preprocessor._done_padding = False\n        output = cov_fn(batch_tensor, DataSample(), False)\n        assert_allclose(output, batch_tensor)\n\n        # list of data sample + test metainfo not found\n        batch_tensor = torch.randint(0, 255, (2, 3, 5, 5))\n        output = cov_fn(batch_tensor, [DataSample()] * 2, False)\n        assert_allclose(output, batch_tensor)\n\n        data_preprocessor._done_padding = True\n        output = cov_fn(batch_tensor, DataSample(), False)\n        assert_allclose(output, batch_tensor)\n\n        # test stacked data sample\n        data_samples = [\n            DataSample(metainfo=metainfo_1),\n            DataSample(metainfo=metainfo_2)\n        ]\n        stacked_data_sample = DataSample.stack(data_samples)\n        batch_tensor = torch.randint(0, 255, (2, 3, 5, 5))\n        output = cov_fn(batch_tensor, stacked_data_sample, False)\n        self.assertIsInstance(output, list)\n        self.assertEqual(output[0].shape, (3, 3, 5))\n        self.assertEqual(output[1].shape, (3, 5, 3))\n\n        # test stacked data sample + metainfo is None\n        stacked_data_sample = DataSample()\n        batch_tensor = torch.randint(0, 255, (2, 3, 5, 5))\n        output = cov_fn(batch_tensor, stacked_data_sample, True)\n        self.assertEqual(output.shape, (2, 3, 5, 5))\n\n    def test_forward(self):\n        \"\"\"Test five cases in this unit test.\n\n        We do not cover all possible\n        cases, as we test them in test cases for other functions.\n        1. Input is tensor.\n        2. Input is list of tensors.\n        3. Input is a list of dict.\n        4. Input is dict.\n        5. Input is tensor + no norm\n        6. data samples behavior in training = False / True\n        7. Input is wrong type.\n        \"\"\"\n        data_preprocessor = DataPreprocessor()\n\n        # 1. input is tensor\n        inputs = torch.randint(0, 255, (2, 3, 5, 5))\n        data = dict(inputs=inputs)\n        tar_output = (inputs.clone() - 127.5) / 127.5\n        data_preprocessor = DataPreprocessor()\n        data = data_preprocessor(data)\n        assert_allclose(data['inputs'], tar_output)\n\n        # 2. input is list of tensor\n        input1 = torch.randn(3, 3, 5)\n        input2 = torch.randn(3, 3, 5)\n\n        data = dict(inputs=[input1, input2])\n\n        data = data_preprocessor(data)\n\n        self.assertEqual(data['inputs'].shape, (2, 3, 3, 5))\n\n        target_input1 = (input1.clone() - 127.5) / 127.5\n        target_input2 = (input2.clone() - 127.5) / 127.5\n        assert_allclose(target_input1, data['inputs'][0])\n        assert_allclose(target_input2, data['inputs'][1])\n\n        # 3. input is list of dict\n        imgA1 = torch.randn(3, 3, 5)\n        imgA2 = torch.randn(3, 3, 5)\n        imgB1 = torch.randn(3, 3, 5)\n        imgB2 = torch.randn(3, 3, 5)\n        data = dict(inputs=[\n            dict(imgA=imgA1, imgB=imgB1),\n            dict(imgA=imgA2, imgB=imgB2)\n        ])\n        data = data_preprocessor(data)\n        self.assertEqual(list(data['inputs'].keys()), ['imgA', 'imgB'])\n\n        img1 = torch.randn(3, 4, 4)\n        img2 = torch.randn(3, 4, 4)\n        noise1 = torch.randn(3, 4, 4)\n        noise2 = torch.randn(3, 4, 4)\n        target_input1 = (img1[[2, 1, 0], ...].clone() - 127.5) / 127.5\n        target_input2 = (img2[[2, 1, 0], ...].clone() - 127.5) / 127.5\n\n        data = dict(inputs=[\n            dict(noise=noise1, img=img1, num_batches=2, mode='ema'),\n            dict(noise=noise2, img=img2, num_batches=2, mode='ema'),\n        ])\n        data_preprocessor = DataPreprocessor(output_channel_order='RGB')\n        data = data_preprocessor(data)\n\n        self.assertEqual(\n            list(data['inputs'].keys()),\n            ['noise', 'img', 'num_batches', 'mode'])\n        assert_allclose(data['inputs']['noise'][0], noise1)\n        assert_allclose(data['inputs']['noise'][1], noise2)\n        assert_allclose(data['inputs']['img'][0], target_input1)\n        assert_allclose(data['inputs']['img'][1], target_input2)\n        self.assertEqual(data['inputs']['num_batches'], 2)\n        self.assertEqual(data['inputs']['mode'], 'ema')\n\n        # 4. nput is dict\n        sampler_results = dict(inputs=dict(num_batches=2, mode='ema'))\n        data = data_preprocessor(sampler_results)\n        self.assertEqual(data['inputs'], sampler_results['inputs'])\n        self.assertIsNone(data['data_samples'])\n\n        # test dict input with tensor\n        sampler_results = dict(inputs=dict(fake_img=torch.randn(2, 3, 10, 10)))\n        data = data_preprocessor(sampler_results)\n\n        # # 5. input is tensor + no norm\n        data_preprocessor = DataPreprocessor(mean=None, std=None)\n        input1 = torch.randn(3, 3, 5)\n        input2 = torch.randn(3, 3, 5)\n        data = dict(inputs=torch.stack([input1, input2], dim=0))\n        data = data_preprocessor(data)\n        self.assertEqual(data['inputs'].shape, (2, 3, 3, 5))\n        self.assertTrue((data['inputs'] == torch.stack([input1, input2],\n                                                       dim=0)).all())\n\n        # 6. data samples behavior in training = False / True\n        data_preprocessor = DataPreprocessor()\n        gt_inp1 = torch.randint(0, 255, (3, 5, 5))\n        gt_inp2 = torch.randint(0, 255, (3, 5, 5))\n\n        data_samples = [DataSample(gt_img=gt_inp1), DataSample(gt_img=gt_inp2)]\n        data = dict(inputs=[input1, input2], data_samples=data_samples)\n        data = data_preprocessor(data, training=False)\n        assert_allclose(data['data_samples'].gt_img,\n                        torch.stack([gt_inp1, gt_inp2]))\n\n        data = dict(inputs=[input1, input2], data_samples=data_samples)\n        data = data_preprocessor(data, training=True)\n        self.assertTrue((data['data_samples'].gt_img <= 1).all())\n\n        # 7. Input is wrong type\n        data = dict(inputs='wrong type')\n        with self.assertRaises(ValueError):\n            data = data_preprocessor(data)\n\n    def test_destruct(self):\n        \"\"\"We test the following cases in this unit test:\n\n        1. test un-padding\n        2. test un-norm + no un-padding\n        3. test no un-norm + no un-padding\n        \"\"\"\n        # 1. test un-padding\n        data_preprocessor = DataPreprocessor()\n        input1 = torch.randn(3, 3, 5)\n        input2 = torch.randn(3, 5, 3)\n        data = dict(inputs=[input1, input2])\n        data = data_preprocessor(data)\n        self.assertEqual(data['inputs'].shape, (2, 3, 5, 5))\n        tar_pad_size = torch.FloatTensor([[0, 2, 0], [0, 0, 2]])\n        padding_sizes = data['data_samples'].metainfo['padding_size']\n        for padding_size, tar in zip(padding_sizes, tar_pad_size):\n            assert_allclose(padding_size, tar)\n        destruct_batch = data_preprocessor.destruct(data['inputs'],\n                                                    data['data_samples'])\n        self.assertEqual(destruct_batch.shape, (2, 3, 3, 5))\n\n        # 2. test no un-padding + un-norm\n        data_preprocessor = DataPreprocessor()\n        input1 = torch.randint(0, 255, (3, 5, 5))\n        input2 = torch.randint(0, 255, (3, 5, 5))\n        data = dict(inputs=[input1, input2])\n        data = data_preprocessor(data)\n        self.assertEqual(data['inputs'].shape, (2, 3, 5, 5))\n        tar_pad_size = torch.FloatTensor([[0, 0, 0], [0, 0, 0]])\n        padding_sizes = data['data_samples'].metainfo['padding_size']\n        for padding_size, tar in zip(padding_sizes, tar_pad_size):\n            assert_allclose(padding_size, tar)\n        destruct_batch = data_preprocessor.destruct(data['inputs'],\n                                                    data['data_samples'])\n        self.assertEqual(destruct_batch.shape, (2, 3, 5, 5))\n        assert_allclose(destruct_batch,\n                        torch.stack([input1, input2], dim=0).float())\n\n        # 3. test no un-norm\n        data_preprocessor = DataPreprocessor(std=None, mean=None)\n        input1 = torch.randint(0, 255, (1, 5, 5))\n        input2 = torch.randint(0, 255, (1, 5, 5))\n        inputs = torch.stack([input1, input2], dim=0)\n        destruct_batch = data_preprocessor.destruct(inputs)\n        self.assertEqual(destruct_batch.shape, (2, 1, 5, 5))\n        assert_allclose(destruct_batch.float(), inputs.float())\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_data_preprocessors/test_mattor_preprocessor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nfrom mmengine.testing import assert_allclose\n\nfrom mmagic.models.data_preprocessors import MattorPreprocessor\nfrom mmagic.structures import DataSample\n\n\ndef test_mattor_preprocessor():\n\n    processor = MattorPreprocessor()\n    # prepare data\n    inputs = torch.rand(1, 3, 20, 20)\n    target = torch.rand(3, 20, 20)\n    gt_fg = torch.rand(3, 20, 20)\n    gt_bg = torch.rand(3, 20, 20)\n    data_sample = DataSample(trimap=target, gt_fg=gt_fg, gt_bg=gt_bg)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n    # process\n    data = processor(data, True)\n    batch_inputs, batch_data_samples = data['inputs'], data['data_samples']\n    assert isinstance(batch_inputs, torch.Tensor)\n    assert batch_inputs.shape == (1, 6, 20, 20)\n    assert isinstance(batch_data_samples, DataSample)\n    assert batch_data_samples.trimap.shape == (1, 3, 20, 20)\n\n    # test proc_batch_trimap\n    processor = MattorPreprocessor(proc_trimap='as_is')\n    inputs = torch.rand(1, 3, 20, 20)\n    target = torch.rand(3, 20, 20)\n    data_sample = DataSample(trimap=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n    data = processor(data, True)\n    batch_inputs, batch_data_samples = data['inputs'], data['data_samples']\n    assert isinstance(batch_inputs, torch.Tensor)\n    assert batch_inputs.shape == (1, 6, 20, 20)\n    assert isinstance(batch_data_samples, DataSample)\n    assert batch_data_samples.trimap.shape == (1, 3, 20, 20)\n    assert_allclose(batch_data_samples.trimap[0], target)\n\n    # test error in proc_batch_trimap\n    processor = MattorPreprocessor(proc_trimap='wrong_method')\n    with pytest.raises(ValueError):\n        processor(dict(inputs=inputs, data_samples=[data_sample]))\n\n    # test training is False\n    processor = MattorPreprocessor(proc_trimap='as_is')\n    inputs = torch.rand(1, 3, 20, 20)\n    target = torch.rand(3, 20, 20)\n    gt_fg = torch.rand(3, 20, 20)\n    gt_bg = torch.rand(3, 20, 20)\n    data_sample = DataSample(trimap=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    data = processor(data, training=False)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_diffusion_schedulers/test_ddim_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.diffusion_schedulers.ddim_scheduler import EditDDIMScheduler\n\n\ndef test_ddim():\n    modelout = torch.rand((1, 8, 32, 32))\n    sample = torch.rand((1, 4, 32, 32))\n    ddim = EditDDIMScheduler(\n        num_train_timesteps=1000, variance_type='learned_range')\n    ddim.set_timesteps(10)\n    result = ddim.step(modelout, 980, sample)\n    assert result['prev_sample'].shape == (1, 4, 32, 32)\n\n    noise = torch.rand((1, 4, 32, 32))\n    result = ddim.add_noise(sample, noise, 10)\n    assert result.shape == (1, 4, 32, 32)\n\n    assert len(ddim) == 1000\n\n\ndef test_ddim_init():\n    ddim = EditDDIMScheduler(\n        num_train_timesteps=1000, beta_schedule='scaled_linear')\n\n    ddim = EditDDIMScheduler(\n        num_train_timesteps=1000, beta_schedule='squaredcos_cap_v2')\n\n    assert isinstance(ddim, EditDDIMScheduler)\n\n    with pytest.raises(Exception):\n        EditDDIMScheduler(num_train_timesteps=1000, beta_schedule='fake')\n\n\ndef test_ddim_step():\n    modelout = torch.rand((1, 8, 32, 32))\n    sample = torch.rand((1, 4, 32, 32))\n    ddim = EditDDIMScheduler(\n        num_train_timesteps=1000, variance_type='learned_range')\n    with pytest.raises(Exception):\n        ddim.step(modelout, 980, sample)\n\n    ddim.set_timesteps(10)\n    result = ddim.step(\n        modelout, 980, sample, eta=1, use_clipped_model_output=True)\n    assert result['prev_sample'].shape == (1, 4, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_diffusion_schedulers/test_init.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport shutil\nfrom unittest import TestCase\n\nfrom mmagic.registry import DIFFUSION_SCHEDULERS\n\ntest_dir = osp.join(osp.dirname(__file__), '../../..', 'tests')\nconfig_path = osp.join(test_dir, 'configs', 'scheduler_cfg')\n\n\nclass TestWrapper(TestCase):\n\n    def test_build(self):\n        # 1. test init by args\n        config = dict(\n            type='EulerDiscreteScheduler',\n            num_train_timesteps=2000,\n            beta_schedule='scaled_linear')\n        scheduler = DIFFUSION_SCHEDULERS.build(config)\n        self.assertEqual(len(scheduler.timesteps), 2000)\n        # self.assertEqual(scheduler.beta_schedule, 'scaled_linear')\n        scheduler_str = repr(scheduler)\n        self.assertIn(\n            'Wrapped Scheduler Class: '\n            '<class \\'diffusers.schedulers.'\n            'scheduling_euler_discrete.'\n            'EulerDiscreteScheduler\\'>', scheduler_str)\n        self.assertIn('Wrapped Scheduler Name: EulerDiscreteScheduler',\n                      scheduler_str)\n        self.assertNotIn('From Pretrained: ', scheduler_str)\n\n        # 2. test save as diffuser\n        scheduler.save_pretrained(config_path)\n\n        # 3. test from_pretrained\n        config = dict(\n            type='EulerDiscreteScheduler', from_pretrained=config_path)\n        scheduler = DIFFUSION_SCHEDULERS.build(config)\n        scheduler_str = repr(scheduler)\n        self.assertIn('From Pretrained: ', scheduler_str)\n\n        # 4. test attribute error\n        with self.assertRaises(AttributeError):\n            scheduler.unsupported_attr('do not support')\n\n        # tear down\n        shutil.rmtree(config_path)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_animatediff.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest import TestCase\n\nimport pytest\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\n# from mmengine.utils import digit_version\n\n# from mmengine.utils.dl_utils import TORCH_VERSION\n\nregister_all_modules()\n\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\n\ndiffusion_scheduler = dict(\n    type='DDIMScheduler',\n    beta_end=0.012,\n    beta_schedule='linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    prediction_type='epsilon',\n    set_alpha_to_one=True,\n    clip_sample=False,\n    thresholding=False,\n    steps_offset=1)\n\nmodel = dict(\n    type='AnimateDiff',\n    vae=dict(\n        type='AutoencoderKL',\n        from_pretrained=stable_diffusion_v15_url,\n        subfolder='vae'),\n    unet=dict(\n        type='UNet3DConditionMotionModel',\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False,\n        use_motion_module=True,\n        motion_module_resolutions=[1, 2, 4, 8],\n        motion_module_mid_block=False,\n        motion_module_decoder_only=False,\n        motion_module_type='Vanilla',\n        motion_module_kwargs=dict(\n            num_attention_heads=8,\n            num_transformer_block=1,\n            attention_block_types=['Temporal_Self', 'Temporal_Self'],\n            temporal_position_encoding=True,\n            temporal_position_encoding_max_len=24,\n            temporal_attention_dim_div=1)),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_v15_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_v15_url,\n    scheduler=diffusion_scheduler,\n    test_scheduler=diffusion_scheduler,\n    data_preprocessor=dict(type='DataPreprocessor'),\n    dream_booth_lora_cfg=dict(type='ToonYou', steps=25, guidance_scale=7.5))\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower()\n    or digit_version(TORCH_VERSION) <= digit_version('1.9.2'),\n    reason='skip on windows due to limited RAM'\n    'and torch >= 1.10.0')\nclass TestAnimateDiff(TestCase):\n\n    def setUp(self):\n        animatediff = MODELS.build(model)\n        assert not any([p.requires_grad for p in animatediff.vae.parameters()])\n        assert not any(\n            [p.requires_grad for p in animatediff.text_encoder.parameters()])\n        assert not any(\n            [p.requires_grad for p in animatediff.unet.parameters()])\n        self.animatediff = animatediff\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower(),\n        reason='skip on windows due to limited RAM.')\n    def test_infer(self):\n        videos = self.animatediff.infer(\n            'best quality, masterpiece, 1girl, cloudy sky, \\\n            dandelion, contrapposto, alternate hairstyle',\n            negative_prompt='',\n            video_length=16,\n            height=32,\n            width=32)['samples']\n        assert videos.shape == (1, 3, 16, 32, 32)\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_attention3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.animatediff.attention_3d import (CrossAttention,\n                                                            Transformer3DModel)\n\n\ndef test_crossattention():\n    input = torch.rand((2, 64, 64))\n    crossattention = CrossAttention(64)\n    crossattention.set_attention_slice(2)\n    output = crossattention.forward(input)\n    assert output.shape == (2, 64, 64)\n    with pytest.raises(Exception):\n        crossattention.set_attention_slice(10)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_Transformer3DModel_init():\n    with pytest.raises(Exception):\n        Transformer3DModel(\n            in_channels=32,\n            num_vector_embeds=4,\n            unet_use_cross_frame_attention=False,\n            unet_use_temporal_attention=False)\n\n    with pytest.raises(Exception):\n        Transformer3DModel()\n\n    Transformer3DModel(\n        in_channels=32,\n        use_linear_projection=True,\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False)\n\n\n# if __name__ == '__main__':\n#     test_crossattention()\n#     test_Transformer3DModel_init()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_motion_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.animatediff.motion_module import (\n    FeedForward, VanillaTemporalModule)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_VanillaTemporalModule():\n    # This also test TemporalTransformerBlock\n    input = torch.rand((1, 64, 16, 32, 32))\n    text_feat = torch.rand([1, 77, 768])\n    transformer = VanillaTemporalModule(in_channels=64)\n    output = transformer.forward(input, 10, text_feat)\n    assert output.shape == (1, 64, 16, 32, 32)\n\n\ndef test_FeedForward():\n    input = torch.rand((2, 64, 64))\n    feed_forward = FeedForward(64, 64, activation_fn='geglu')\n    output = feed_forward.forward(input)\n    assert output.shape == (2, 64, 64)\n\n\n# if __name__ == '__main__':\n#     test_VanillaTemporalModule()\n#     test_FeedForward()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_res_blocks3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.animatediff.unet_block import (Downsample3D,\n                                                          ResnetBlock3D,\n                                                          Upsample3D)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_resnetblock3d():\n    input = torch.rand((1, 64, 16, 16, 16))\n    resblock = ResnetBlock3D(in_channels=64)\n    output = resblock.forward(input, None)\n    assert output.shape == (1, 64, 16, 16, 16)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_Downsample3D():\n    input = torch.rand((1, 64, 16, 16, 16))\n    downsample = Downsample3D(channels=64, use_conv=True, padding=1)\n    output = downsample.forward(input)\n    assert output.shape == (1, 64, 16, 8, 8)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_Upsample3D():\n    input = torch.rand((1, 64, 16, 16, 16))\n    upsample = Upsample3D(channels=64, use_conv_transpose=False, use_conv=True)\n\n    output = upsample.forward(input)\n    assert output.shape == (1, 64, 16, 32, 32)\n\n\n# if __name__ == '__main__':\n#     test_Downsample3D()\n#     test_Upsample3D()\n#     test_resnetblock3d()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_unet3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.utils import build_module\nfrom mmagic.registry import MODELS\n\nstable_diffusion_v15_url = 'runwayml/stable-diffusion-v1-5'\nunet_cfg = dict(\n    type='UNet3DConditionMotionModel',\n    unet_use_cross_frame_attention=False,\n    unet_use_temporal_attention=False,\n    use_motion_module=True,\n    motion_module_resolutions=[1, 2, 4, 8],\n    motion_module_mid_block=False,\n    motion_module_decoder_only=False,\n    motion_module_type='Vanilla',\n    motion_module_kwargs=dict(\n        num_attention_heads=8,\n        num_transformer_block=1,\n        attention_block_types=['Temporal_Self', 'Temporal_Self'],\n        temporal_position_encoding=True,\n        temporal_position_encoding_max_len=24,\n        temporal_attention_dim_div=1),\n    subfolder='unet')\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower()\n    or digit_version(TORCH_VERSION) <= digit_version('1.9.2'),\n    reason='skip on windows due to limited RAM'\n    'and torch >= 1.10.0')\ndef test_Unet3D():\n    input = torch.rand((1, 4, 16, 8, 8))\n    text_feat = torch.rand([1, 20, 768])\n    unet = build_module(unet_cfg, MODELS)\n    output = unet.forward(input, 10, text_feat)\n    assert output['sample'].shape == (1, 4, 16, 8, 8)\n\n\nif __name__ == '__main__':\n    test_Unet3D()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_animatediff/test_unet_blocks3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.animatediff.unet_block import (\n    CrossAttnDownBlock3D, CrossAttnUpBlock3D, UNetMidBlock3DCrossAttn,\n    get_down_block, get_up_block)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_UNetMidBlock3DCrossAttn():\n    input = torch.rand((1, 64, 16, 8, 8))\n    midblock = UNetMidBlock3DCrossAttn(\n        64,\n        64,\n        cross_attention_dim=64,\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False)\n    output = midblock.forward(input)\n    assert output.shape == (1, 64, 16, 8, 8)\n\n\ndef test_CrossAttnDownBlock3D():\n    input = torch.rand((1, 64, 16, 8, 8))\n    downblock = CrossAttnDownBlock3D(\n        64,\n        64,\n        64,\n        cross_attention_dim=64,\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False)\n    output, _ = downblock.forward(input)\n    assert output.shape == (1, 64, 16, 4, 4)\n\n\ndef test_CrossAttnUpBlock3D():\n    input = torch.rand((1, 64, 16, 8, 8))\n    upblock = CrossAttnUpBlock3D(\n        64,\n        64,\n        64,\n        64,\n        cross_attention_dim=64,\n        unet_use_cross_frame_attention=False,\n        unet_use_temporal_attention=False)\n    output = upblock.forward(input, [input])\n    assert output.shape == (1, 64, 16, 16, 16)\n\n\ndef test_get_down_block():\n    with pytest.raises(Exception):\n        get_down_block('tem', 1, 1, 1, 1, True, 'silu', 1)\n\n\ndef test_get_up_block():\n    with pytest.raises(Exception):\n        get_up_block('tem', 1, 1, 1, 1, 1, True, 'silu', 1)\n\n\n# if __name__ == '__main__':\n#     test_CrossAttnDownBlock3D()\n#     test_CrossAttnUpBlock3D()\n#     test_get_down_block()\n#     test_get_up_block()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_aotgan/test_aot_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_gl_dec():\n    input_x = torch.randn(1, 4, 256, 256)\n    template_cfg = dict(type='AOTEncoderDecoder')\n\n    cfg_ = template_cfg.copy()\n    cfg_['decoder'] = dict(type='AOTDecoder')\n    aot_encdec = MODELS.build(cfg_)\n    output = aot_encdec(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_aotgan/test_aot_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_gl_enc():\n    input_x = torch.randn(1, 4, 256, 256)\n    template_cfg = dict(type='AOTEncoderDecoder')\n\n    cfg_ = template_cfg.copy()\n    cfg_['encoder'] = dict(type='AOTEncoder')\n    aot_encdec = MODELS.build(cfg_)\n    output = aot_encdec(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_aotgan/test_aot_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_gl_encdec():\n    input_x = torch.randn(1, 4, 64, 64)\n    template_cfg = dict(type='AOTEncoderDecoder')\n\n    aot_encdec = MODELS.build(template_cfg)\n    aot_encdec.init_weights()\n    output = aot_encdec(input_x)\n    assert output.shape == (1, 3, 64, 64)\n\n    cfg_ = template_cfg.copy()\n    cfg_['encoder'] = dict(type='AOTEncoder')\n    aot_encdec = MODELS.build(cfg_)\n    output = aot_encdec(input_x)\n    assert output.shape == (1, 3, 64, 64)\n\n    cfg_ = template_cfg.copy()\n    cfg_['decoder'] = dict(type='AOTDecoder')\n    aot_encdec = MODELS.build(cfg_)\n    output = aot_encdec(input_x)\n    assert output.shape == (1, 3, 64, 64)\n\n    if torch.cuda.is_available():\n        aot_encdec = MODELS.build(template_cfg)\n        aot_encdec.init_weights()\n        aot_encdec = aot_encdec.cuda()\n        output = aot_encdec(input_x.cuda())\n        assert output.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_aotgan/test_aot_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom os.path import dirname, join\n\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models import AOTEncoderDecoder\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\ndef test_aot_inpaintor():\n    register_all_modules()\n\n    config_file = join(dirname(__file__), '../../..', 'configs', 'aot_test.py')\n    cfg = Config.fromfile(config_file)\n\n    inpaintor = MODELS.build(cfg.model)\n\n    # optimizer\n    optim_g = torch.optim.Adam(\n        inpaintor.generator.parameters(), lr=0.0001, betas=(0.0, 0.9))\n    optim_d = torch.optim.Adam(\n        inpaintor.disc.parameters(), lr=0.0001, betas=(0.0, 0.9))\n    optims = dict(generator=OptimWrapper(optim_g), disc=OptimWrapper(optim_d))\n\n    # test attributes\n    assert inpaintor.__class__.__name__ == 'AOTInpaintor'\n    assert isinstance(inpaintor.generator, AOTEncoderDecoder)\n    assert inpaintor.with_l1_valid_loss\n    assert inpaintor.with_composed_percep_loss\n    assert inpaintor.with_out_percep_loss\n    assert inpaintor.with_gan\n    assert inpaintor.is_train\n    assert inpaintor.train_cfg['disc_step'] == 1\n    assert inpaintor.disc_step_count == 0\n\n    if torch.cuda.is_available():\n        inpaintor = inpaintor.cuda()\n\n    gt_img = torch.randn(3, 64, 64)\n    mask = torch.zeros((1, 64, 64))\n    mask[..., 12:45, 14:42] = 1.\n    masked_img = gt_img.unsqueeze(0) * (1. - mask) + mask\n    mask_bbox = [25, 25, 27, 27]\n    data_batch = {\n        'inputs':\n        masked_img,\n        'data_samples':\n        [DataSample(\n            mask=mask,\n            mask_bbox=mask_bbox,\n            gt_img=gt_img,\n        )]\n    }\n\n    # check train_step\n    for i in range(5):\n        log_vars = inpaintor.train_step(data_batch, optims)\n\n        assert 'loss_l1_valid' in log_vars\n        assert 'loss_out_percep' in log_vars\n        assert 'disc_losses' in log_vars\n        assert 'loss_g_fake' in log_vars\n\n    # # check forward_test\n    data = inpaintor.data_preprocessor(data_batch, True)\n    data_inputs, data_sample = data['inputs'], data['data_samples']\n    output = inpaintor.forward_test(data_inputs, data_sample)\n    prediction = output\n    assert 'fake_res' in prediction\n    assert 'fake_img' in prediction\n    assert 'pred_img' in prediction\n    assert prediction.pred_img.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_aotgan/test_aot_neck.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import AOTBlockNeck\n\n\ndef test_aot_dilation_neck():\n    neck = AOTBlockNeck(\n        in_channels=32, dilation_rates=(1, 2, 4, 8), num_aotblock=4)\n    x = torch.rand((2, 32, 64, 64))\n    res = neck(x)\n    assert res.shape == (2, 32, 64, 64)\n\n    if torch.cuda.is_available():\n        neck = AOTBlockNeck(\n            in_channels=32, dilation_rates=(1, 2, 4, 8),\n            num_aotblock=4).cuda()\n        x = torch.rand((2, 32, 64, 64)).cuda()\n        res = neck(x)\n        assert res.shape == (2, 32, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_arcface/test_arcface_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.arcface.arcface_modules import get_blocks\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_get_blocks():\n    blocks = get_blocks(num_layers=100)\n    assert len(blocks) == 4\n\n    blocks = get_blocks(num_layers=152)\n    assert len(blocks) == 4\n    with pytest.raises(ValueError):\n        get_blocks(num_layers=1000)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_arcface/test_id_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models import IDLossModel\n\n\nclass TestArcFace:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            input_size=224,\n            num_layers=50,\n            mode='ir',\n            drop_ratio=0.4,\n            affine=True)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_arcface_cpu(self):\n        # test loss model\n        id_loss_model = IDLossModel()\n        x1 = torch.randn((2, 3, 224, 224))\n        x2 = torch.randn((2, 3, 224, 224))\n        y, _ = id_loss_model(pred=x1, gt=x2)\n        assert y >= 0\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_arcface_cuda(self):\n        # test loss model\n        id_loss_model = IDLossModel().cuda()\n        x1 = torch.randn((2, 3, 224, 224)).cuda()\n        x2 = torch.randn((2, 3, 224, 224)).cuda()\n        y, _ = id_loss_model(pred=x1, gt=x2)\n        assert y >= 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_arcface/test_model_irse.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.arcface.model_irse import Backbone\n\n\nclass TestIRSEModel:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            input_size=224,\n            num_layers=50,\n            mode='ir',\n            drop_ratio=0.4,\n            affine=True)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_arcface_cpu(self):\n        model = Backbone(**self.default_cfg)\n        x = torch.randn((2, 3, 224, 224))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different input size\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_size=112))\n        model = Backbone(**cfg)\n        x = torch.randn((2, 3, 112, 112))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different num_layers\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(num_layers=50))\n        model = Backbone(**cfg)\n        x = torch.randn((2, 3, 224, 224))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different mode\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(mode='ir_se'))\n        model = Backbone(**cfg)\n        x = torch.randn((2, 3, 224, 224))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different drop ratio\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(drop_ratio=0.8))\n        model = Backbone(**cfg)\n        x = torch.randn((2, 3, 224, 224))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test affine=False\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(affine=False))\n        model = Backbone(**cfg)\n        x = torch.randn((2, 3, 224, 224))\n        y = model(x)\n        assert y.shape == (2, 512)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_arcface_cuda(self):\n        model = Backbone(**self.default_cfg).cuda()\n        x = torch.randn((2, 3, 224, 224)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different input size\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_size=112))\n        model = Backbone(**cfg).cuda()\n        x = torch.randn((2, 3, 112, 112)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different num_layers\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(num_layers=50))\n        model = Backbone(**cfg).cuda()\n        x = torch.randn((2, 3, 224, 224)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different mode\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(mode='ir_se'))\n        model = Backbone(**cfg).cuda()\n        x = torch.randn((2, 3, 224, 224)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test different drop ratio\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(drop_ratio=0.8))\n        model = Backbone(**cfg).cuda()\n        x = torch.randn((2, 3, 224, 224)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n        # test affine=False\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(affine=False))\n        model = Backbone(**cfg).cuda()\n        x = torch.randn((2, 3, 224, 224)).cuda()\n        y = model(x)\n        assert y.shape == (2, 512)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_basicvsr/test_basicvsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import BasicVSR, BasicVSRNet, DataPreprocessor\nfrom mmagic.models.losses import CharbonnierLoss\nfrom mmagic.structures import DataSample\n\n\ndef test_basicvsr():\n\n    model = BasicVSR(\n        generator=dict(\n            type='BasicVSRNet',\n            mid_channels=8,\n            num_blocks=1,\n            spynet_pretrained=None),\n        pixel_loss=dict(\n            type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n        train_cfg=dict(fix_iter=1),\n        ensemble=None,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, BasicVSR)\n    assert isinstance(model.generator, BasicVSRNet)\n    assert isinstance(model.pixel_loss, CharbonnierLoss)\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # prepare data\n    inputs = torch.rand(5, 3, 16, 16)\n    target = torch.rand(5, 3, 64, 64)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=[inputs], data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert model.generator.spynet.basic_module[0].basic_module[\n        0].conv.weight.requires_grad is False\n    assert isinstance(log_vars, dict)\n\n    log_vars = model.train_step(data, optim_wrapper)\n    assert model.generator.spynet.basic_module[0].basic_module[\n        0].conv.weight.requires_grad is True\n    assert isinstance(log_vars, dict)\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (5, 3, 64, 64)\n\n    data['data_samples'][0].gt_img.data = torch.rand(3, 64, 64)\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 64, 64)\n\n    model = BasicVSR(\n        generator=dict(\n            type='BasicVSRNet',\n            mid_channels=8,\n            num_blocks=1,\n            spynet_pretrained=None),\n        pixel_loss=dict(\n            type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n        train_cfg=dict(fix_iter=1),\n        ensemble=dict(type='SpatialTemporalEnsemble'),\n        data_preprocessor=DataPreprocessor())\n\n    with pytest.raises(NotImplementedError):\n        model = BasicVSR(\n            generator=dict(\n                type='BasicVSRNet',\n                mid_channels=8,\n                num_blocks=1,\n                spynet_pretrained=None),\n            pixel_loss=dict(\n                type='CharbonnierLoss', loss_weight=1.0, reduction='mean'),\n            train_cfg=dict(fix_iter=1),\n            ensemble=dict(type=''),\n            data_preprocessor=DataPreprocessor())\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_basicvsr/test_basicvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import BasicVSRNet\n\n\ndef test_basicvsr_net():\n    \"\"\"Test BasicVSR.\"\"\"\n\n    # cpu\n    basicvsr = BasicVSRNet(\n        mid_channels=8, num_blocks=1, spynet_pretrained=None)\n\n    input_tensor = torch.rand(1, 5, 3, 64, 64)\n    basicvsr(input_tensor)\n    assert not basicvsr._raised_warning\n\n    input_tensor = torch.rand(1, 5, 3, 16, 16)\n    output = basicvsr(input_tensor)\n    assert output.shape == (1, 5, 3, 64, 64)\n    assert basicvsr._raised_warning\n\n    # gpu\n    if torch.cuda.is_available():\n        basicvsr = BasicVSRNet(\n            mid_channels=8, num_blocks=1, spynet_pretrained=None).cuda()\n        input_tensor = torch.rand(1, 5, 3, 16, 16).cuda()\n        output = basicvsr(input_tensor)\n        assert output.shape == (1, 5, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_basicvsr_plusplus_net/test_basicvsr_plusplus_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import BasicVSRPlusPlusNet\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_basicvsr_plusplus_cpu():\n    \"\"\"Test BasicVSR++.\"\"\"\n\n    # cpu\n    model = BasicVSRPlusPlusNet(\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=True,\n        spynet_pretrained=None,\n        cpu_cache_length=100)\n    input_tensor = torch.rand(1, 5, 3, 64, 64)\n    output = model(input_tensor)\n    assert output.shape == (1, 5, 3, 256, 256)\n\n    # with cpu_cache (no effect on cpu)\n    model = BasicVSRPlusPlusNet(\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=True,\n        spynet_pretrained=None,\n        cpu_cache_length=3)\n    output = model(input_tensor)\n    assert output.shape == (1, 5, 3, 256, 256)\n\n    with pytest.raises(AssertionError):\n        # The height and width of inputs should be at least 64\n        input_tensor = torch.rand(1, 5, 3, 61, 61)\n        model(input_tensor)\n\n    # output has the same size as input\n    model = BasicVSRPlusPlusNet(\n        mid_channels=64,\n        num_blocks=7,\n        is_low_res_input=False,\n        spynet_pretrained=None,\n        cpu_cache_length=100)\n    input_tensor = torch.rand(1, 5, 3, 256, 256)\n    output = model(input_tensor)\n    assert output.shape == (1, 5, 3, 256, 256)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_basicvsr_plusplus_cuda():\n    # gpu\n    if torch.cuda.is_available():\n        model = BasicVSRPlusPlusNet(\n            mid_channels=64,\n            num_blocks=7,\n            is_low_res_input=True,\n            spynet_pretrained=None,\n            cpu_cache_length=100).cuda()\n        input_tensor = torch.rand(1, 5, 3, 64, 64).cuda()\n        output = model(input_tensor)\n        assert output.shape == (1, 5, 3, 256, 256)\n\n        # with cpu_cache\n        model = BasicVSRPlusPlusNet(\n            mid_channels=64,\n            num_blocks=7,\n            is_low_res_input=True,\n            spynet_pretrained=None,\n            cpu_cache_length=3).cuda()\n        output = model(input_tensor)\n        assert output.shape == (1, 5, 3, 256, 256)\n\n        with pytest.raises(AssertionError):\n            # The height and width of inputs should be at least 64\n            input_tensor = torch.rand(1, 5, 3, 61, 61).cuda()\n            model(input_tensor)\n\n        # output has the same size as input\n        model = BasicVSRPlusPlusNet(\n            mid_channels=64,\n            num_blocks=7,\n            is_low_res_input=False,\n            spynet_pretrained=None,\n            cpu_cache_length=100).cuda()\n        input_tensor = torch.rand(1, 5, 3, 256, 256).cuda()\n        output = model(input_tensor)\n        assert output.shape == (1, 5, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import BigGAN, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='BigGANGenerator',\n    output_scale=32,\n    noise_size=128,\n    num_classes=10,\n    base_channels=64,\n    with_shared_embedding=False,\n    sn_eps=1e-8,\n    sn_style='torch',\n    # init_type='N02',\n    split_noise=False,\n    auto_sync_bn=False,\n    init_cfg=dict(type='N02'))\ndiscriminator = dict(\n    type='BigGANDiscriminator',\n    input_scale=32,\n    num_classes=10,\n    base_channels=64,\n    sn_eps=1e-8,\n    sn_style='torch',\n    # init_type='N02',\n    with_spectral_norm=True,\n    init_cfg=dict(type='N02'))\n\n\nclass TestBigGAN(TestCase):\n\n    def test_init(self):\n        gan = BigGAN(\n            num_classes=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator,\n            generator_steps=1,\n            discriminator_steps=4)\n        gan.init_weights()\n\n        self.assertIsInstance(gan, BigGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = BigGAN(\n            noise_size=10,\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = BigGAN(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = BigGAN(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n        # test init with different num_classes\n        gan = BigGAN(\n            num_classes=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator,\n            generator_steps=1,\n            discriminator_steps=4)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('mmgen')\n        gan = BigGAN(\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        gan.init_weights()\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        label = torch.randint(0, 10, (3, 1))\n\n        data_sample = DataSample(gt_img=img)\n        data_sample.set_gt_label(label)\n\n        data = dict(inputs=dict(), data_samples=[data_sample])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_deep_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.biggan import BigGANDeepDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestBigGANDeepDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        num_classes = 1000\n        cls.default_config = dict(\n            type='BigGANDeepDiscriminator',\n            input_scale=128,\n            num_classes=num_classes,\n            base_channels=8)\n        cls.x = torch.randn((2, 3, 128, 128))\n        cls.label = torch.randint(0, num_classes, (2, ))\n\n    def test_biggan_deep_discriminator(self):\n        # test default settings\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, BigGANDeepDiscriminator)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test different init types\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_type='N02'))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_type='xavier'))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0))\n        d = MODELS.build(cfg)\n        y = d(self.x, None)\n        assert y.shape == (2, 1)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_deep_discriminator_cuda(self):\n        # test default settings\n        d = MODELS.build(self.default_config).cuda()\n        assert isinstance(d, BigGANDeepDiscriminator)\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        # test different init types\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_type='N02'))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_type='xavier'))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), None)\n        assert y.shape == (2, 1)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_deep_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom functools import partial\n\nimport pytest\nimport torch\n\n# yapf:disable\nfrom mmagic.models.editors.biggan import BigGANDeepGenerator\nfrom mmagic.registry import MODELS\n\n# yapf:enable\n\n\nclass TestBigGANDeepGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((3, 120))\n        num_classes = 1000\n        cls.label = torch.randint(0, num_classes, (3, ))\n        cls.default_config = dict(\n            type='BigGANDeepGenerator',\n            output_scale=128,\n            num_classes=num_classes,\n            base_channels=4)\n\n    def test_biggan_deep_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, BigGANDeepGenerator)\n        res = g(self.noise, self.label)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test 'return_noise'\n        res = g(self.noise, self.label, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        res = g(None, None, num_batches=3, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        # test callable\n        noise = torch.randn\n        label = partial(torch.randint, 0, 1000)\n        res = g(noise, label, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test different output scale\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=256))\n        g = MODELS.build(cfg)\n        noise = torch.randn((3, 120))\n        res = g(noise, self.label)\n        assert res.shape == (3, 3, 256, 256)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 256, 256)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=512))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 512, 512)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=64))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 64, 64)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=32))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 32, 32)\n\n        # test with `concat_noise=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(concat_noise=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(\n            dict(\n                num_classes=0, with_shared_embedding=False,\n                concat_noise=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test no shared embedding\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_shared_embedding=False, concat_noise=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        g = MODELS.build(cfg)\n        res = g(self.noise, self.label)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test init --> N02\n        cfg = deepcopy(self.default_config)\n        cfg.update(init_type='N02')\n        g = MODELS.build(cfg)\n\n        # test init --> xavier\n        cfg = deepcopy(self.default_config)\n        cfg.update(init_type='xavier')\n        g = MODELS.build(cfg)\n\n        # test init --> raise error\n        cfg = deepcopy(self.default_config)\n        cfg.update(init_type='dont know')\n        with pytest.raises(NotImplementedError):\n            g = MODELS.build(cfg)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(pretrained=1234)\n        with pytest.raises(TypeError):\n            g = MODELS.build(cfg)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_deep_generator_cuda(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, BigGANDeepGenerator)\n        res = g(self.noise.cuda(), self.label.cuda())\n        assert res.shape == (3, 3, 128, 128)\n\n        # test 'return_noise'\n        res = g(self.noise.cuda(), self.label.cuda(), return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        res = g(None, None, num_batches=3, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        # test callable\n        noise = torch.randn\n        label = partial(torch.randint, 0, 1000)\n        res = g(noise, label, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test different output scale\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=256))\n        g = MODELS.build(cfg).cuda()\n        noise = torch.randn((3, 120))\n        res = g(noise.cuda(), self.label.cuda())\n        assert res.shape == (3, 3, 256, 256)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 256, 256)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=512))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 512, 512)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=64))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 64, 64)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=32))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 32, 32)\n\n        # test with `concat_noise=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(concat_noise=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(\n            dict(\n                num_classes=0, with_shared_embedding=False,\n                concat_noise=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test no shared embedding\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_shared_embedding=False, concat_noise=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.biggan import BigGANDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestBigGANDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        num_classes = 1000\n        cls.default_config = dict(\n            type='BigGANDiscriminator',\n            input_scale=128,\n            num_classes=num_classes,\n            base_channels=8)\n        cls.x = torch.randn((2, 3, 128, 128))\n        cls.label = torch.randint(0, num_classes, (2, ))\n\n    def test_biggan_discriminator(self):\n        # test default settings\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, BigGANDiscriminator)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test different init types\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='N02')))\n        d = MODELS.build(cfg)\n        d.init_weights()\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='xavier')))\n        d = MODELS.build(cfg)\n        d.init_weights()\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='ortho')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0))\n        d = MODELS.build(cfg)\n        y = d(self.x, None)\n        assert y.shape == (2, 1)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        d = MODELS.build(cfg)\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_discriminator_cuda(self):\n        # test default settings\n        d = MODELS.build(self.default_config).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        # test different init types\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='N02')))\n        d = MODELS.build(cfg).cuda()\n        d.init_weights()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='xavier')))\n        d = MODELS.build(cfg).cuda()\n        d.init_weights()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='ortho')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n        y = d(self.x, self.label)\n        assert y.shape == (2, 1)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), None)\n        assert y.shape == (2, 1)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        d = MODELS.build(cfg).cuda()\n        y = d(self.x.cuda(), self.label.cuda())\n        assert y.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom functools import partial\n\nimport pytest\nimport torch\n\n# yapf:disable\nfrom mmagic.models.editors.biggan import BigGANGenerator\nfrom mmagic.registry import MODELS\n\n# yapf:enable\n\n\nclass TestBigGANGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((3, 120))\n        num_classes = 1000\n        cls.label = torch.randint(0, num_classes, (3, ))\n        cls.default_config = dict(\n            type='BigGANGenerator',\n            output_scale=128,\n            num_classes=num_classes,\n            base_channels=4)\n\n    def test_biggan_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, BigGANGenerator)\n        res = g(self.noise, self.label)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test 'return_noise'\n        res = g(self.noise, self.label, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        res = g(None, None, num_batches=3, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        # test callable\n        noise = torch.randn\n        label = partial(torch.randint, 0, 1000)\n        res = g(noise, label, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test different output scale\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=256))\n        g = MODELS.build(cfg)\n        noise = torch.randn((3, 119))\n        res = g(noise, self.label)\n        assert res.shape == (3, 3, 256, 256)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 256, 256)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=512))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 512, 512)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=64))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 64, 64)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=32))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 32, 32)\n\n        # test with `split_noise=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(split_noise=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0, with_shared_embedding=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test no shared embedding\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_shared_embedding=False, split_noise=False))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test init --> ortho\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='ortho')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n\n        # test init --> N02\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='N02')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n\n        # test init --> xavier\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='xavier')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n\n        # test init --> raise error\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='dont know')))\n        with pytest.raises(NotImplementedError):\n            g = MODELS.build(cfg)\n            g.init_weights()\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_generator_cuda(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, BigGANGenerator)\n        res = g(self.noise.cuda(), self.label.cuda())\n        assert res.shape == (3, 3, 128, 128)\n\n        # test 'return_noise'\n        res = g(self.noise.cuda(), self.label.cuda(), return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        res = g(None, None, num_batches=3, return_noise=True)\n        assert res['fake_img'].shape == (3, 3, 128, 128)\n        assert res['noise_batch'].shape == (3, 120)\n        assert res['label'].shape == (3, )\n\n        # test callable\n        noise = torch.randn\n        label = partial(torch.randint, 0, 1000)\n        res = g(noise, label, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test different output scale\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=256))\n        g = MODELS.build(cfg).cuda()\n        noise = torch.randn((3, 119)).cuda()\n        res = g(noise, self.label.cuda())\n        assert res.shape == (3, 3, 256, 256)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 256, 256)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=512))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 512, 512)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=64))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 64, 64)\n\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(output_scale=32))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 32, 32)\n\n        # test with `split_noise=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(split_noise=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test with `with_spectral_norm=False`\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_spectral_norm=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test different num_classes\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(num_classes=0, with_shared_embedding=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test no shared embedding\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(with_shared_embedding=False, split_noise=False))\n        g = MODELS.build(cfg).cuda()\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(sn_style='torch'))\n        g = MODELS.build(cfg)\n        res = g(None, None, num_batches=3)\n        assert res.shape == (3, 3, 128, 128)\n\n        # test init --> ortho\n        cfg = deepcopy(self.default_config)\n        cfg.update(dict(init_cfg=dict(type='ortho')))\n        g = MODELS.build(cfg)\n        g.init_weights()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\n# yapf:disable\nfrom mmagic.models.editors.biggan import (BigGANConditionBN,\n                                          BigGANDeepDiscResBlock,\n                                          BigGANDeepGenResBlock,\n                                          BigGANDiscResBlock,\n                                          BigGANGenResBlock,\n                                          SelfAttentionBlock)\nfrom mmagic.registry import MODELS\n\n# yapf:enable\n\n\nclass TestBigGANDeepGenResBlock:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            type='BigGANDeepGenResBlock',\n            in_channels=32,\n            out_channels=16,\n            dim_after_concat=100,\n            act_cfg=dict(type='ReLU'),\n            upsample_cfg=dict(type='nearest', scale_factor=2),\n            sn_eps=1e-6,\n            bn_eps=1e-5,\n            with_spectral_norm=True,\n            input_is_label=False,\n            auto_sync_bn=True,\n            channel_ratio=4)\n        cls.x = torch.randn(2, 32, 8, 8)\n        cls.y = torch.randn(2, 100)\n        cls.label = torch.randint(0, 100, (2, ))\n\n    def test_biggan_deep_gen_res_block(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, BigGANDeepGenResBlock)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 16, 16)\n\n        # test without upsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(upsample_cfg=None))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 8, 8)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.label)\n        assert out.shape == (2, 16, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 16, 16)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_deep_gen_res_block_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, BigGANDeepGenResBlock)\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n        # test without upsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(upsample_cfg=None))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 8, 8)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n\nclass TestBigGANDeepDiscResBlock:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            type='BigGANDeepDiscResBlock',\n            in_channels=32,\n            out_channels=64,\n            channel_ratio=4,\n            act_cfg=dict(type='ReLU', inplace=False),\n            sn_eps=1e-6,\n            with_downsample=True,\n            with_spectral_norm=True)\n        cls.x = torch.randn(2, 32, 16, 16)\n\n    def test_biggan_deep_disc_res_block(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, BigGANDeepDiscResBlock)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n        # test with_downsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(with_downsample=False))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 16, 16)\n\n        # test different channel_ratio\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(channel_ratio=8))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_deep_disc_res_block_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, BigGANDeepDiscResBlock)\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 8, 8)\n\n        # test with_downsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(with_downsample=False))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 16, 16)\n\n        # test different channel_ratio\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(channel_ratio=8))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 8, 8)\n\n\nclass TestBigGANConditionBN:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            type='BigGANConditionBN',\n            num_features=64,\n            linear_input_channels=80)\n        cls.x = torch.randn(2, 64, 32, 32)\n        cls.y = torch.randn(2, 80)\n        cls.label = torch.randint(0, 80, (2, ))\n\n    def test_biggan_condition_bn(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, BigGANConditionBN)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 64, 32, 32)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.label)\n        assert out.shape == (2, 64, 32, 32)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 64, 32, 32)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 64, 32, 32)\n\n        # test not-implemented sn-style\n        with pytest.raises(NotImplementedError):\n            cfg = deepcopy(self.default_cfg)\n            cfg.update(dict(sn_style='tero'))\n            module = MODELS.build(cfg)\n            out = module(self.x, self.y)\n            assert out.shape == (2, 64, 32, 32)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_condition_bn_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, BigGANConditionBN)\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 64, 32, 32)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.label.cuda())\n        assert out.shape == (2, 64, 32, 32)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 64, 32, 32)\n\n        # test not-implemented sn-style\n        with pytest.raises(NotImplementedError):\n            cfg = deepcopy(self.default_cfg)\n            cfg.update(dict(sn_style='tero'))\n            module = MODELS.build(cfg).cuda()\n            out = module(self.x.cuda(), self.y.cuda())\n            assert out.shape == (2, 64, 32, 32)\n\n\nclass TestSelfAttentionBlock:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(type='SelfAttentionBlock', in_channels=16)\n        cls.x = torch.randn(2, 16, 8, 8)\n\n    def test_self_attention_block(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, SelfAttentionBlock)\n        out = module(self.x)\n        assert out.shape == (2, 16, 8, 8)\n\n        # test different in_channels\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(in_channels=10))\n        module = MODELS.build(cfg)\n        x = torch.randn(2, 10, 8, 8)\n        out = module(x)\n        assert out.shape == (2, 10, 8, 8)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 16, 8, 8)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_self_attention_block_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, SelfAttentionBlock)\n        out = module(self.x.cuda())\n        assert out.shape == (2, 16, 8, 8)\n\n        # test different in_channels\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(in_channels=10))\n        module = MODELS.build(cfg).cuda()\n        x = torch.randn(2, 10, 8, 8).cuda()\n        out = module(x)\n        assert out.shape == (2, 10, 8, 8)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda())\n        assert out.shape == (2, 16, 8, 8)\n\n\nclass TestBigGANGenResBlock:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            type='BigGANGenResBlock',\n            in_channels=32,\n            out_channels=16,\n            dim_after_concat=100,\n            act_cfg=dict(type='ReLU'),\n            upsample_cfg=dict(type='nearest', scale_factor=2),\n            sn_eps=1e-6,\n            with_spectral_norm=True,\n            input_is_label=False,\n            auto_sync_bn=True)\n        cls.x = torch.randn(2, 32, 8, 8)\n        cls.y = torch.randn(2, 100)\n        cls.label = torch.randint(0, 100, (2, ))\n\n    def test_biggan_gen_res_block(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, BigGANGenResBlock)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 16, 16)\n\n        # test without upsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(upsample_cfg=None))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 8, 8)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.label)\n        assert out.shape == (2, 16, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x, self.y)\n        assert out.shape == (2, 16, 16, 16)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_gen_res_block_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, BigGANGenResBlock)\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n        # test without upsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(upsample_cfg=None))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 8, 8)\n\n        # test input_is_label\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(input_is_label=True))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda(), self.y.cuda())\n        assert out.shape == (2, 16, 16, 16)\n\n\nclass TestBigGANDiscResBlock:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            type='BigGANDiscResBlock',\n            in_channels=32,\n            out_channels=64,\n            act_cfg=dict(type='ReLU', inplace=False),\n            sn_eps=1e-6,\n            with_downsample=True,\n            with_spectral_norm=True,\n            is_head_block=False)\n        cls.x = torch.randn(2, 32, 16, 16)\n\n    def test_biggan_disc_res_block(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg)\n        assert isinstance(module, BigGANDiscResBlock)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n        # test with_downsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(with_downsample=False))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg)\n        out = module(self.x)\n        assert out.shape == (2, 64, 8, 8)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_biggan_disc_res_block_cuda(self):\n        # test default setting\n        module = MODELS.build(self.default_cfg).cuda()\n        assert isinstance(module, BigGANDiscResBlock)\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 8, 8)\n\n        # test with_downsample\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(with_downsample=False))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 16, 16)\n\n        # test torch-sn\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(sn_style='torch'))\n        module = MODELS.build(cfg).cuda()\n        out = module(self.x.cuda())\n        assert out.shape == (2, 64, 8, 8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_biggan/test_biggan_snmodule.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors.biggan.biggan_snmodule import SpectralNorm\n\n\nclass MyBlock(nn.Module):\n\n    def __init__(self, num_channels):\n        super().__init__()\n        self.weight = nn.Parameter(torch.randn(num_channels))\n\n    def forward(self, x):\n        return x + self.weight\n\n\nclass MySNBlock(MyBlock, SpectralNorm):\n\n    def __init__(self, num_channels):\n        MyBlock.__init__(self, num_channels)\n        SpectralNorm.__init__(\n            self, num_svs=2, num_iters=2, num_outputs=num_channels)\n\n    def forward(self, x):\n        return x + self.sn_weight()\n\n\n# test Spectral Norm with my own layer\ndef test_SpectralNorm():\n    sn_block = MySNBlock(num_channels=4)\n    x = torch.randn(1, 4)\n    out = sn_block(x)\n    assert out.shape == (1, 4)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_cain/test_cain.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import DataPreprocessor\nfrom mmagic.models.editors import CAIN, CAINNet\nfrom mmagic.models.losses import L1Loss\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_cain_net_cpu():\n\n    model_cfg = dict(type='CAINNet')\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'CAINNet'\n\n    # prepare data\n    inputs0 = torch.rand(1, 2, 3, 5, 5)\n    inputs = torch.rand(1, 2, 3, 256, 248)\n    target = torch.rand(1, 3, 256, 248)\n\n    # test on cpu\n    output = model(inputs)\n    output = model(inputs, padding_flag=True)\n    model(inputs0, padding_flag=True)\n    assert torch.is_tensor(output)\n    assert output.shape == target.shape\n    with pytest.raises(AssertionError):\n        output = model(inputs[:, :1])\n\n    model_cfg = dict(type='CAINNet', norm='in')\n    model = MODELS.build(model_cfg)\n    model(inputs)\n    model_cfg = dict(type='CAINNet', norm='bn')\n    model = MODELS.build(model_cfg)\n    model(inputs)\n    with pytest.raises(ValueError):\n        model_cfg = dict(type='CAINNet', norm='lys')\n        MODELS.build(model_cfg)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_cain_net_cuda():\n\n    # prepare data\n    inputs0 = torch.rand(1, 2, 3, 5, 5)\n    target0 = torch.rand(1, 3, 5, 5)\n    inputs = torch.rand(1, 2, 3, 256, 248)\n    target = torch.rand(1, 3, 256, 248)\n\n    model_cfg = dict(type='CAINNet', norm='bn')\n    model = MODELS.build(model_cfg)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        target = target.cuda()\n        output = model(inputs)\n        output = model(inputs, True)\n        assert torch.is_tensor(output)\n        assert output.shape == target.shape\n        inputs0 = inputs0.cuda()\n        target0 = target0.cuda()\n        model(inputs0, padding_flag=True)\n\n        model_cfg = dict(type='CAINNet', norm='in')\n        model = MODELS.build(model_cfg).cuda()\n        model(inputs)\n        model_cfg = dict(type='CAINNet', norm='bn')\n        model = MODELS.build(model_cfg).cuda()\n        model(inputs)\n        with pytest.raises(ValueError):\n            model_cfg = dict(type='CAINNet', norm='lys')\n            MODELS.build(model_cfg).cuda()\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_cain():\n\n    # build model\n    model = CAIN(\n        generator=dict(type='CAINNet'),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        data_preprocessor=DataPreprocessor(pad_mode='reflect'))\n\n    # test attributes\n    assert isinstance(model, CAIN)\n    assert isinstance(model.data_preprocessor, DataPreprocessor)\n    assert isinstance(model.generator, CAINNet)\n    assert isinstance(model.pixel_loss, L1Loss)\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # prepare data\n    inputs = torch.rand(2, 3, 32, 32)\n    target = torch.rand(3, 32, 32)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=[inputs], data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars['loss'], torch.Tensor)\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.data.shape == (3, 32, 32)\n\n    # feat\n    output = model(torch.rand(1, 2, 3, 32, 32), mode='tensor')\n    assert output.shape == (1, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_cain/test_cain_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_cain_net_cpu():\n\n    model_cfg = dict(type='CAINNet')\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'CAINNet'\n\n    # prepare data\n    inputs0 = torch.rand(1, 2, 3, 5, 5)\n    inputs = torch.rand(1, 2, 3, 256, 248)\n    target = torch.rand(1, 3, 256, 248)\n\n    # test on cpu\n    output = model(inputs)\n    output = model(inputs, padding_flag=True)\n    model(inputs0, padding_flag=True)\n    assert torch.is_tensor(output)\n    assert output.shape == target.shape\n    with pytest.raises(AssertionError):\n        output = model(inputs[:, :1])\n\n    model_cfg = dict(type='CAINNet', norm='in')\n    model = MODELS.build(model_cfg)\n    model(inputs)\n    model_cfg = dict(type='CAINNet', norm='bn')\n    model = MODELS.build(model_cfg)\n    model(inputs)\n    with pytest.raises(ValueError):\n        model_cfg = dict(type='CAINNet', norm='lys')\n        MODELS.build(model_cfg)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_cain_net_cuda():\n\n    # prepare data\n    inputs0 = torch.rand(1, 2, 3, 5, 5)\n    target0 = torch.rand(1, 3, 5, 5)\n    inputs = torch.rand(1, 2, 3, 256, 248)\n    target = torch.rand(1, 3, 256, 248)\n\n    model_cfg = dict(type='CAINNet', norm='bn')\n    model = MODELS.build(model_cfg)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        target = target.cuda()\n        output = model(inputs)\n        output = model(inputs, True)\n        assert torch.is_tensor(output)\n        assert output.shape == target.shape\n        inputs0 = inputs0.cuda()\n        target0 = target0.cuda()\n        model(inputs0, padding_flag=True)\n\n        model_cfg = dict(type='CAINNet', norm='in')\n        model = MODELS.build(model_cfg).cuda()\n        model(inputs)\n        model_cfg = dict(type='CAINNet', norm='bn')\n        model = MODELS.build(model_cfg).cuda()\n        model(inputs)\n        with pytest.raises(ValueError):\n            model_cfg = dict(type='CAINNet', norm='lys')\n            MODELS.build(model_cfg).cuda()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_controlnet/test_controlnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport os.path as osp\nimport platform\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\ntest_dir = osp.join(osp.dirname(__file__), '../../../..', 'tests')\nconfig_path = osp.join(test_dir, 'configs', 'diffuser_wrapper_cfg')\nmodel_path = osp.join(test_dir, 'configs', 'tmp_weight')\nckpt_path = osp.join(test_dir, 'configs', 'ckpt')\n\nregister_all_modules()\n\nstable_diffusion_tiny_url = 'hf-internal-testing/tiny-stable-diffusion-pipe'\nconfig = dict(\n    type='ControlStableDiffusion',\n    vae=dict(type='AutoencoderKL', sample_size=64),\n    unet=dict(\n        sample_size=64,\n        type='UNet2DConditionModel',\n        down_block_types=('DownBlock2D', ),\n        up_block_types=('UpBlock2D', ),\n        block_out_channels=(32, ),\n        cross_attention_dim=16,\n    ),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_tiny_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_tiny_url,\n    controlnet=dict(\n        type='ControlNetModel',\n        # from_pretrained=controlnet_canny_rul\n        from_config=config_path  # train from scratch\n    ),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    data_preprocessor=dict(type='DataPreprocessor'),\n    enable_xformers=False,\n    init_cfg=dict(type='init_from_unet'))\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestControlStableDiffusion(TestCase):\n\n    def setUp(self):\n        # mock SiLU\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            from mmagic.models.editors.ddpm.denoising_unet import SiLU\n            torch.nn.SiLU = SiLU\n        control_sd = MODELS.build(config)\n        assert not any([p.requires_grad for p in control_sd.vae.parameters()])\n        assert not any(\n            [p.requires_grad for p in control_sd.text_encoder.parameters()])\n        assert not any([p.requires_grad for p in control_sd.unet.parameters()])\n        self.control_sd = control_sd\n\n    def test_init_weights(self):\n        control_sd = self.control_sd\n        # test init_from_unet\n        control_sd.init_weights()\n\n        # test init_convert_from_unet\n        unet = dict(\n            type='UNet2DConditionModel',\n            down_block_types=('DownBlock2D', ),\n            up_block_types=('UpBlock2D', ),\n            block_out_channels=(32, ),\n            cross_attention_dim=16)\n        control_sd.init_cfg = dict(type='convert_from_unet', base_model=unet)\n        control_sd.init_weights()\n\n    def test_infer(self):\n        control_sd = self.control_sd\n\n        def mock_encode_prompt(prompt, do_classifier_free_guidance,\n                               num_images_per_prompt, *args, **kwargs):\n            batch_size = len(prompt) if isinstance(prompt, list) else 1\n            batch_size *= num_images_per_prompt\n            if do_classifier_free_guidance:\n                batch_size *= 2\n            return torch.randn(batch_size, 5, 16)  # 2 for cfg\n\n        encode_prompt = control_sd._encode_prompt\n        control_sd._encode_prompt = mock_encode_prompt\n\n        # one prompt, one control, repeat 1 time\n        self._test_infer(control_sd, 1, 1, 1, 1)\n\n        # two prompt, two control, repeat 1 time\n        # NOTE: skip this due to memory limit\n        # self._test_infer(control_sd, 2, 2, 1, 2)\n\n        # one prompt, one control, repeat 2 times\n        # NOTE: skip this due to memory limit\n        # self._test_infer(control_sd, 1, 1, 2, 2)\n\n        # two prompt, two control, repeat 2 times\n        # NOTE: skip this due to memory limit\n        # self._test_infer(control_sd, 2, 2, 2, 4)\n\n        control_sd._encode_prompt = encode_prompt\n\n    def _test_infer(self, control_sd, num_prompt, num_control, num_repeat,\n                    tar_shape):\n        prompt = ''\n        control = torch.ones([1, 3, 64, 64])\n\n        result = control_sd.infer(\n            [prompt] * num_prompt,\n            control=[control] * num_control,\n            height=64,\n            width=64,\n            num_images_per_prompt=num_repeat,\n            num_inference_steps=1,\n            return_type='numpy')\n        assert result['samples'].shape == (tar_shape, 3, 64, 64)\n\n    def test_val_step(self):\n        control_sd = self.control_sd\n        data = dict(\n            inputs=[\n                dict(\n                    target=torch.ones([3, 64, 64]),\n                    source=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(*args, **kwargs):\n            return dict(samples=torch.randn(2, 3, 64, 64))\n\n        encode_prompt = control_sd._encode_prompt\n        control_sd._encode_prompt = mock_encode_prompt\n\n        infer = control_sd.infer\n        control_sd.infer = mock_infer\n\n        # control_sd.text_encoder = mock_text_encoder()\n        output = control_sd.val_step(data)\n        assert len(output) == 1\n        control_sd._encode_prompt = encode_prompt\n        control_sd.infer = infer\n\n    def test_test_step(self):\n        control_sd = self.control_sd\n        data = dict(\n            inputs=[\n                dict(\n                    target=torch.ones([3, 64, 64]),\n                    source=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(*args, **kwargs):\n            return dict(samples=torch.randn(2, 3, 64, 64))\n\n        encode_prompt = control_sd._encode_prompt\n        control_sd._encode_prompt = mock_encode_prompt\n\n        infer = control_sd.infer\n        control_sd.infer = mock_infer\n\n        # control_sd.text_encoder = mock_text_encoder()\n        output = control_sd.test_step(data)\n        assert len(output) == 1\n        control_sd._encode_prompt = encode_prompt\n        control_sd.infer = infer\n\n    def test_train_step(self):\n        control_sd = self.control_sd\n        data = dict(\n            inputs=[\n                dict(\n                    target=torch.ones([3, 64, 64]),\n                    source=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        optimizer = MagicMock()\n        update_params = MagicMock()\n        optimizer.update_params = update_params\n        optim_wrapper = {'controlnet': optimizer}\n\n        class mock_text_encoder(nn.Module):\n\n            def __init__(self):\n                super().__init__()\n\n            def forward(self, *args, **kwargs):\n                return [torch.randn(1, 5, 16)]\n\n        control_sd.text_encoder = mock_text_encoder()\n\n        control_sd.train_step(data, optim_wrapper)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_controlnet/test_controlnet_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport os.path as osp\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.controlnet.controlnet_utils import change_base_model\n\n\ndef make_state_dict(d):\n    new_d = dict()\n    for k, v in d.items():\n        new_d[k] = torch.FloatTensor([v])\n    return new_d\n\n\ndef check_state_dict(s1, s2):\n    # s1, s2 = m1.state_dict(), m2.state_dict()\n    assert s1.keys() == s2.keys()\n    for k in s1.keys():\n        assert (s1[k] == s2[k]).all()\n\n\ndef parameters(model):\n    state_dict = model.state_dict()\n    for v in state_dict.values():\n        yield v\n\n\ndef test_change_base_model():\n    control_state_dict = make_state_dict(dict(k1=1, k2=2, k3=3))\n    target_control_state_dict = make_state_dict(dict(k1=1.5, k2=2.5, k3=3))\n\n    base_state_dict = make_state_dict(dict(k1=2, k2=3))\n    curr_state_dict = make_state_dict(dict(k1=2.5, k2=3.5))\n\n    controlnet = MagicMock()\n    basemodel = MagicMock()\n    currmodel = MagicMock()\n    controlnet.parameters = MagicMock(return_value=parameters(controlnet))\n    basemodel.parameters = MagicMock(return_value=parameters(basemodel))\n    currmodel.parameters = MagicMock(return_value=parameters(currmodel))\n    controlnet.state_dict = MagicMock(return_value=control_state_dict)\n    basemodel.state_dict = MagicMock(return_value=base_state_dict)\n    currmodel.state_dict = MagicMock(return_value=curr_state_dict)\n\n    change_base_model(controlnet, currmodel, basemodel)\n    check_state_dict(controlnet.state_dict(), target_control_state_dict)\n\n    # test save\n    control_state_dict = make_state_dict(dict(k1=1, k2=2, k3=3))\n    controlnet.state_dict = MagicMock(return_value=control_state_dict)\n    save_path = osp.abspath(\n        osp.join(__file__, '../../../../data/out', 'test.pth'))\n    change_base_model(controlnet, currmodel, basemodel, save_path=save_path)\n    assert os.path.isfile(save_path)\n    control_state_dict_loaded = torch.load(save_path)\n    check_state_dict(control_state_dict_loaded, target_control_state_dict)\n    os.remove(save_path)\n\n    # test error\n    wrong_base_state_dict = make_state_dict(dict(k1=2, k2=[3, 5]))\n    wrong_model = MagicMock()\n    wrong_model.state_dict = MagicMock(return_value=wrong_base_state_dict)\n    with pytest.raises(Exception):\n        change_base_model(controlnet, currmodel, wrong_model)\n    # change_base_model(controlnet, currmodel, wrong_base_state_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_cyclegan/test_cyclegan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport sys\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\n\nfrom mmagic.models import CycleGAN, DataPreprocessor\nfrom mmagic.models.archs import PatchDiscriminator\nfrom mmagic.models.editors.cyclegan import ResnetGenerator\nfrom mmagic.structures import DataSample\n\n\ndef obj_from_dict(info: dict, parent=None, default_args=None):\n    \"\"\"Initialize an object from dict.\n\n    The dict must contain the key \"type\", which indicates the object type, it\n    can be either a string or type, such as \"list\" or ``list``. Remaining\n    fields are treated as the arguments for constructing the object.\n\n    Args:\n        info (dict): Object types and arguments.\n        parent (:class:`module`): Module which may containing expected object\n            classes.\n        default_args (dict, optional): Default arguments for initializing the\n            object.\n\n    Returns:\n        any type: Object built from the dict.\n    \"\"\"\n    assert isinstance(info, dict) and 'type' in info\n    assert isinstance(default_args, dict) or default_args is None\n    args = info.copy()\n    obj_type = args.pop('type')\n    # if mmcv.is_str(obj_type):\n    if isinstance(obj_type, str):\n        if parent is not None:\n            obj_type = getattr(parent, obj_type)\n        else:\n            obj_type = sys.modules[obj_type]\n    elif not isinstance(obj_type, type):\n        raise TypeError('type must be a str or valid type, but '\n                        f'got {type(obj_type)}')\n    if default_args is not None:\n        for name, value in default_args.items():\n            args.setdefault(name, value)\n    return obj_type(**args)\n\n\ndef test_cyclegan():\n\n    model_cfg = dict(\n        default_domain='photo',\n        reachable_domains=['photo', 'mask'],\n        related_domains=['photo', 'mask'],\n        generator=dict(\n            type='ResnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            base_channels=64,\n            norm_cfg=dict(type='IN'),\n            use_dropout=False,\n            num_blocks=9,\n            padding_mode='reflect',\n            init_cfg=dict(type='normal', gain=0.02)),\n        discriminator=dict(\n            type='PatchDiscriminator',\n            in_channels=3,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='IN'),\n            init_cfg=dict(type='normal', gain=0.02)))\n\n    train_settings = None\n\n    # build synthesizer\n    synthesizer = CycleGAN(**model_cfg, data_preprocessor=DataPreprocessor())\n\n    # test attributes\n    assert synthesizer.__class__.__name__ == 'CycleGAN'\n    assert isinstance(synthesizer.generators['photo'], ResnetGenerator)\n    assert isinstance(synthesizer.generators['mask'], ResnetGenerator)\n    assert isinstance(synthesizer.discriminators['photo'], PatchDiscriminator)\n    assert isinstance(synthesizer.discriminators['mask'], PatchDiscriminator)\n\n    # prepare data\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n    data_batch = {'img_mask': inputs, 'img_photo': targets}\n\n    # prepare optimizer\n    optim_cfg = dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))\n    optimizer = OptimWrapperDict(\n        generators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(params=getattr(synthesizer, 'generators').parameters()))),\n        discriminators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(\n                    params=getattr(synthesizer,\n                                   'discriminators').parameters()))))\n\n    # test forward_test\n    with torch.no_grad():\n        outputs = synthesizer(inputs, target_domain='photo', test_mode=True)\n    assert torch.equal(outputs['source'], data_batch['img_mask'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 64, 64)\n\n    with torch.no_grad():\n        outputs = synthesizer(targets, target_domain='mask', test_mode=True)\n    assert torch.equal(outputs['source'], data_batch['img_photo'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 64, 64)\n\n    # test forward_train\n    with torch.no_grad():\n        outputs = synthesizer(inputs, target_domain='photo', test_mode=True)\n    assert torch.equal(outputs['source'], data_batch['img_mask'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 64, 64)\n\n    with torch.no_grad():\n        outputs = synthesizer(targets, target_domain='mask', test_mode=True)\n    assert torch.equal(outputs['source'], data_batch['img_photo'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 64, 64)\n\n    # test train_step\n    message_hub = MessageHub.get_instance('cyclegan-test')\n    message_hub.update_info('iter', 0)\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n    data_batch = dict(inputs={'img_mask': inputs, 'img_photo': targets})\n    log_vars = synthesizer.train_step(data_batch, optimizer)\n    assert isinstance(log_vars, dict)\n    for v in [\n            'loss_gan_d_mask', 'loss_gan_d_photo', 'loss_gan_g_mask',\n            'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n    ]:\n        assert isinstance(log_vars[v].item(), float)\n\n    # test train_step and forward_test (gpu)\n    if torch.cuda.is_available():\n        synthesizer = synthesizer.cuda()\n        optimizer = OptimWrapperDict(\n            generators=OptimWrapper(\n                obj_from_dict(\n                    optim_cfg, torch.optim,\n                    dict(\n                        params=getattr(synthesizer,\n                                       'generators').parameters()))),\n            discriminators=OptimWrapper(\n                obj_from_dict(\n                    optim_cfg, torch.optim,\n                    dict(\n                        params=getattr(synthesizer,\n                                       'discriminators').parameters()))))\n\n        inputs = torch.rand(1, 3, 64, 64)\n        targets = torch.rand(1, 3, 64, 64)\n        data_batch = {'img_mask': inputs, 'img_photo': targets}\n        data_batch_cuda = copy.deepcopy(data_batch)\n        data_batch_cuda['img_mask'] = inputs.cuda()\n        data_batch_cuda['img_photo'] = targets.cuda()\n\n        # forward_test\n        with torch.no_grad():\n            outputs = synthesizer(\n                data_batch_cuda['img_mask'],\n                target_domain='photo',\n                test_mode=True)\n        assert torch.equal(outputs['source'].cpu(),\n                           data_batch_cuda['img_mask'].cpu())\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 64, 64)\n\n        with torch.no_grad():\n            outputs = synthesizer(\n                data_batch_cuda['img_photo'],\n                target_domain='mask',\n                test_mode=True)\n        assert torch.equal(outputs['source'].cpu(),\n                           data_batch_cuda['img_photo'].cpu())\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 64, 64)\n\n        # test forward_train\n        with torch.no_grad():\n            outputs = synthesizer(\n                data_batch_cuda['img_mask'],\n                target_domain='photo',\n                test_mode=False)\n        assert torch.equal(outputs['source'], data_batch_cuda['img_mask'])\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 64, 64)\n\n        with torch.no_grad():\n            outputs = synthesizer(\n                data_batch_cuda['img_photo'],\n                target_domain='mask',\n                test_mode=False)\n        assert torch.equal(outputs['source'], data_batch_cuda['img_photo'])\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 64, 64)\n\n        # train_step\n        inputs = torch.rand(1, 3, 64, 64).cuda()\n        targets = torch.rand(1, 3, 64, 64).cuda()\n        data_batch_cuda = dict(inputs={\n            'img_mask': inputs,\n            'img_photo': targets\n        })\n\n        log_vars = synthesizer.train_step(data_batch_cuda, optimizer)\n        assert isinstance(log_vars, dict)\n        for v in [\n                'loss_gan_d_mask', 'loss_gan_d_photo', 'loss_gan_g_mask',\n                'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n        ]:\n            assert isinstance(log_vars[v].item(), float)\n\n    # test disc_steps and disc_init_steps\n    train_settings = dict(discriminator_steps=2, disc_init_steps=2)\n    synthesizer = CycleGAN(\n        **model_cfg, **train_settings, data_preprocessor=DataPreprocessor())\n    optimizer = OptimWrapperDict(\n        generators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(params=getattr(synthesizer, 'generators').parameters()))),\n        discriminators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(\n                    params=getattr(synthesizer,\n                                   'discriminators').parameters()))))\n\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n    data_batch = dict(inputs={'img_mask': inputs, 'img_photo': targets})\n    # iter 0, 1\n    for i in range(2):\n        message_hub.update_info('iter', i)\n        log_vars = synthesizer.train_step(data_batch, optimizer)\n        assert isinstance(log_vars, dict)\n        for v in [\n                'loss_gan_g_mask', 'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n        ]:\n            assert log_vars.get(v) is None\n        assert isinstance(log_vars['loss_gan_d_mask'].item(), float)\n        assert isinstance(log_vars['loss_gan_d_photo'].item(), float)\n\n    # iter 2, 3, 4, 5\n    for i in range(2, 6):\n        message_hub.update_info('iter', i)\n        log_vars = synthesizer.train_step(data_batch, optimizer)\n        print(log_vars.keys())\n        assert isinstance(log_vars, dict)\n        log_check_list = [\n            'loss_gan_d_mask', 'loss_gan_d_photo', 'loss_gan_g_mask',\n            'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n        ]\n        if (i + 1) % 2 == 1:\n            log_None_list = [\n                'loss_gan_g_mask', 'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n            ]\n            for v in log_None_list:\n                assert log_vars.get(v) is None\n                log_check_list.remove(v)\n        for v in log_check_list:\n            assert isinstance(log_vars[v].item(), float)\n\n    # test GAN image buffer size = 0\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n    data_batch = dict(inputs={'img_mask': inputs, 'img_photo': targets})\n    train_settings = dict(buffer_size=0)\n    synthesizer = CycleGAN(\n        **model_cfg, **train_settings, data_preprocessor=DataPreprocessor())\n    optimizer = OptimWrapperDict(\n        generators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(params=getattr(synthesizer, 'generators').parameters()))),\n        discriminators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(\n                    params=getattr(synthesizer,\n                                   'discriminators').parameters()))))\n    log_vars = synthesizer.train_step(data_batch, optimizer)\n    assert isinstance(log_vars, dict)\n    for v in [\n            'loss_gan_d_mask', 'loss_gan_d_photo', 'loss_gan_g_mask',\n            'loss_gan_g_photo', 'cycle_loss', 'id_loss'\n    ]:\n        assert isinstance(log_vars[v].item(), float)\n\n    # test get opposite domain\n    assert synthesizer._get_opposite_domain('photo') == 'mask'\n\n    # test val_step and test_step\n    data = dict(\n        inputs=dict(\n            img_photo=torch.randn(1, 3, 64, 64),\n            img_mask=torch.randn(1, 3, 64, 64)),\n        data_samples=[DataSample(mode='test')])\n    out = synthesizer.test_step(data)\n    assert len(out) == 1\n    assert out[0].fake_photo.data.shape == (3, 64, 64)\n    assert out[0].fake_mask.data.shape == (3, 64, 64)\n    out = synthesizer.val_step(data)\n    assert len(out) == 1\n    assert out[0].fake_photo.data.shape == (3, 64, 64)\n    assert out[0].fake_mask.data.shape == (3, 64, 64)\n\n    data = dict(\n        inputs=dict(\n            img_photo=torch.randn(1, 3, 64, 64),\n            img_mask=torch.randn(1, 3, 64, 64)))\n    out = synthesizer.test_step(data)\n    assert len(out) == 1\n    assert out[0].fake_photo.data.shape == (3, 64, 64)\n    assert out[0].fake_mask.data.shape == (3, 64, 64)\n    out = synthesizer.val_step(data)\n    assert len(out) == 1\n    assert out[0].fake_photo.data.shape == (3, 64, 64)\n    assert out[0].fake_mask.data.shape == (3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_cyclegan/test_cyclegan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.cyclegan import ResnetGenerator\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\nclass TestResnetGenerator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=3,\n            base_channels=64,\n            norm_cfg=dict(type='IN'),\n            use_dropout=False,\n            num_blocks=9,\n            padding_mode='reflect',\n            init_cfg=dict(type='normal', gain=0.02))\n\n    def test_cyclegan_generator_cpu(self):\n        # test with default cfg\n        real_a = torch.randn((2, 3, 256, 256))\n        gen = ResnetGenerator(**self.default_cfg)\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['num_blocks'] = 8\n        gen = ResnetGenerator(**cfg)\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_cyclegan_generator_cuda(self):\n        # test with default cfg\n        real_a = torch.randn((2, 3, 256, 256)).cuda()\n        gen = ResnetGenerator(**self.default_cfg).cuda()\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['num_blocks'] = 8\n        gen = ResnetGenerator(**cfg).cuda()\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_cyclegan/test_cyclegan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\n\nfrom mmagic.models.editors.cyclegan.cyclegan_modules import (\n    GANImageBuffer, ResidualBlockWithDropout)\n\n\ndef test_residual_block_with_dropout():\n    block = ResidualBlockWithDropout(16, 'zeros')\n    input = torch.rand((2, 16, 128, 128))\n    output = block(input)\n    assert output.detach().numpy().shape == (2, 16, 128, 128)\n\n    block = ResidualBlockWithDropout(16, 'zeros', use_dropout=False)\n    assert len(block.block) == 2\n\n\ndef test_gan_image_buffer():\n    # test buffer size = 0\n    buffer = GANImageBuffer(buffer_size=0)\n    img_np = np.random.randn(1, 3, 256, 256)\n    img_tensor = torch.from_numpy(img_np)\n    img_tensor_return = buffer.query(img_tensor)\n    assert torch.equal(img_tensor_return, img_tensor)\n\n    # test buffer size > 0\n    buffer = GANImageBuffer(buffer_size=1)\n    img_np = np.random.randn(2, 3, 256, 256)\n    img_tensor = torch.from_numpy(img_np)\n    img_tensor_0 = torch.unsqueeze(img_tensor[0], 0)\n    img_tensor_1 = torch.unsqueeze(img_tensor[1], 0)\n    img_tensor_00 = torch.cat([img_tensor_0, img_tensor_0], 0)\n    img_tensor_return = buffer.query(img_tensor)\n    assert (torch.equal(img_tensor_return, img_tensor)\n            and torch.equal(buffer.image_buffer[0], img_tensor_0)) or \\\n           (torch.equal(img_tensor_return, img_tensor_00)\n            and torch.equal(buffer.image_buffer[0], img_tensor_1))\n\n    # test buffer size > 0, specify buffer chance\n    buffer = GANImageBuffer(buffer_size=1, buffer_ratio=0.3)\n    img_np = np.random.randn(2, 3, 256, 256)\n    img_tensor = torch.from_numpy(img_np)\n    img_tensor_0 = torch.unsqueeze(img_tensor[0], 0)\n    img_tensor_1 = torch.unsqueeze(img_tensor[1], 0)\n    img_tensor_00 = torch.cat([img_tensor_0, img_tensor_0], 0)\n    img_tensor_return = buffer.query(img_tensor)\n    assert (torch.equal(img_tensor_return, img_tensor)\n            and torch.equal(buffer.image_buffer[0], img_tensor_0)) or \\\n           (torch.equal(img_tensor_return, img_tensor_00)\n            and torch.equal(buffer.image_buffer[0], img_tensor_1))\n\n    # set buffer ratio as 1 and 0 to cover more lines\n    buffer = GANImageBuffer(buffer_size=1, buffer_ratio=1)\n    img_np = np.random.randn(2, 3, 256, 256)\n    img_tensor = torch.from_numpy(img_np)\n    img_tensor_0 = torch.unsqueeze(img_tensor[0], 0)\n    img_tensor_1 = torch.unsqueeze(img_tensor[1], 0)\n    img_tensor_00 = torch.cat([img_tensor_0, img_tensor_0], 0)\n    img_tensor_return = buffer.query(img_tensor)\n    assert (torch.equal(img_tensor_return, img_tensor)\n            and torch.equal(buffer.image_buffer[0], img_tensor_0)) or \\\n           (torch.equal(img_tensor_return, img_tensor_00)\n            and torch.equal(buffer.image_buffer[0], img_tensor_1))\n\n    buffer = GANImageBuffer(buffer_size=1, buffer_ratio=0)\n    img_np = np.random.randn(2, 3, 256, 256)\n    img_tensor = torch.from_numpy(img_np)\n    img_tensor_0 = torch.unsqueeze(img_tensor[0], 0)\n    img_tensor_1 = torch.unsqueeze(img_tensor[1], 0)\n    img_tensor_00 = torch.cat([img_tensor_0, img_tensor_0], 0)\n    img_tensor_return = buffer.query(img_tensor)\n    assert (torch.equal(img_tensor_return, img_tensor)\n            and torch.equal(buffer.image_buffer[0], img_tensor_0)) or \\\n           (torch.equal(img_tensor_return, img_tensor_00)\n            and torch.equal(buffer.image_buffer[0], img_tensor_1))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dcgan/test_dcgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import DCGAN, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='DCGANGenerator', noise_size=10, output_scale=16, base_channels=16)\ndiscriminator = dict(\n    type='DCGANDiscriminator', input_scale=16, output_scale=4, out_channels=1)\n\n\nclass TestDCGAN(TestCase):\n\n    def test_init(self):\n        gan = DCGAN(\n            noise_size=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator)\n\n        self.assertIsInstance(gan, DCGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = DCGAN(\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = DCGAN(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = DCGAN(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('test-lsgan')\n        gan = DCGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dcgan/test_dcgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.dcgan import DCGANDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestDCGANDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_tensor = torch.randn((2, 3, 32, 32))\n        cls.default_config = dict(\n            type='DCGANDiscriminator',\n            input_scale=32,\n            output_scale=4,\n            out_channels=5)\n\n    def test_dcgan_discriminator(self):\n        # test default setting with builder\n        d = MODELS.build(self.default_config)\n        pred = d(self.input_tensor)\n        assert pred.shape == (2, 5)\n        assert d.num_downsamples == 3\n        assert len(d.downsamples) == 3\n        assert not d.downsamples[0].with_norm\n        assert not d.output_layer.with_norm\n        assert not d.output_layer.with_activation\n        assert isinstance(d.downsamples[1].activate, torch.nn.LeakyReLU)\n        assert isinstance(d.downsamples[1].norm, torch.nn.BatchNorm2d)\n\n        # sanity check for args with cpu model\n        d = DCGANDiscriminator(input_scale=64, output_scale=8, out_channels=2)\n        assert d.input_scale == 64 and d.output_scale == 8\n        assert d.num_downsamples == 3\n        assert d.out_channels == 2\n        pred = d(torch.randn((1, 3, 64, 64)))\n        assert pred.shape == (1, 50)\n\n        with pytest.raises(TypeError):\n            _ = DCGANDiscriminator(32, 4, 2, pretrained=dict())\n\n        # check for cuda\n        if not torch.cuda.is_available():\n            return\n\n        # test default setting with builder on GPU\n        d = MODELS.build(self.default_config).cuda()\n        pred = d(self.input_tensor.cuda())\n        assert pred.shape == (2, 5)\n        assert d.num_downsamples == 3\n        assert len(d.downsamples) == 3\n        assert not d.downsamples[0].with_norm\n        assert not d.output_layer.with_norm\n        assert not d.output_layer.with_activation\n        assert isinstance(d.downsamples[1].activate, torch.nn.LeakyReLU)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dcgan/test_dcgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.dcgan import DCGANGenerator\nfrom mmagic.registry import MODELS\n\n\nclass TestDCGANGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((2, 100))\n        cls.default_config = dict(\n            type='DCGANGenerator', output_scale=16, base_channels=32)\n\n    def test_dcgan_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, DCGANGenerator)\n        assert g.num_upsamples == 2\n        assert not g.output_layer.with_norm\n        assert len(g.upsampling) == 1\n        assert g.upsampling[0].with_norm\n        assert g.noise2feat.with_norm\n        assert isinstance(g.output_layer.activate, torch.nn.Tanh)\n        # check forward function\n        img = g(self.noise)\n        assert img.shape == (2, 3, 16, 16)\n        img = g(self.noise[:, :, None, None])\n        assert img.shape == (2, 3, 16, 16)\n        img = g(torch.randn, num_batches=2)\n        assert img.shape == (2, 3, 16, 16)\n        img = g(None, num_batches=2)\n        assert img.shape == (2, 3, 16, 16)\n        with pytest.raises(ValueError):\n            _ = g(torch.randn((1, 100, 3)))\n        with pytest.raises(AssertionError):\n            _ = g(torch.randn)\n        with pytest.raises(AssertionError):\n            _ = g(None)\n        with pytest.raises(AssertionError):\n            _ = g(torch.randn(2, 10))\n        results = g(self.noise, return_noise=True)\n        assert results['noise_batch'].shape == (2, 100, 1, 1)\n\n        # sanity check for args with cpu model\n        g = DCGANGenerator(32, base_channels=64)\n        img = g(self.noise)\n        assert img.shape == (2, 3, 32, 32)\n        assert g.base_channels == 64\n        g = DCGANGenerator(16, out_channels=1, base_channels=32)\n        img = g(self.noise)\n        assert img.shape == (2, 1, 16, 16)\n        g = DCGANGenerator(16, noise_size=10, base_channels=32)\n        with pytest.raises(AssertionError):\n            _ = g(self.noise)\n        img = g(torch.randn(2, 10))\n        assert img.shape == (2, 3, 16, 16)\n        g = DCGANGenerator(\n            16, default_act_cfg=dict(type='LeakyReLU'), base_channels=32)\n        assert isinstance(g.noise2feat.activate, torch.nn.LeakyReLU)\n        assert isinstance(g.upsampling[0].activate, torch.nn.LeakyReLU)\n        assert isinstance(g.output_layer.activate, torch.nn.Tanh)\n\n        with pytest.raises(TypeError):\n            _ = DCGANGenerator(\n                16, noise_size=10, base_channels=32, pretrained=dict())\n\n        # check for cuda\n        if not torch.cuda.is_available():\n            return\n\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, DCGANGenerator)\n        assert g.num_upsamples == 2\n        assert not g.output_layer.with_norm\n        assert len(g.upsampling) == 1\n        assert g.upsampling[0].with_norm\n        # check forward function\n        img = g(self.noise)\n        assert img.shape == (2, 3, 16, 16)\n        img = g(self.noise[:, :, None, None])\n        assert img.shape == (2, 3, 16, 16)\n        img = g(torch.randn, num_batches=2)\n        assert img.shape == (2, 3, 16, 16)\n        img = g(None, num_batches=2)\n        assert img.shape == (2, 3, 16, 16)\n        with pytest.raises(ValueError):\n            _ = g(torch.randn((1, 100, 3)))\n        with pytest.raises(AssertionError):\n            _ = g(torch.randn)\n        with pytest.raises(AssertionError):\n            _ = g(None)\n        results = g(self.noise, return_noise=True)\n        assert results['noise_batch'].shape == (2, 100, 1, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_attention.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.ddpm.attention import (ApproximateGELU,\n                                                  CrossAttention, FeedForward,\n                                                  Transformer2DModel)\n\n\ndef test_ApproximateGELU():\n    input = torch.rand((16, 16))\n    gelu = ApproximateGELU(16, 24)\n    output = gelu.forward(input)\n    assert output.shape == (16, 24)\n\n\ndef test_crossattention():\n    input = torch.rand((2, 64, 64))\n    crossattention = CrossAttention(64)\n    crossattention._slice_size = 2\n    output = crossattention.forward(input)\n    assert output.shape == (2, 64, 64)\n\n\ndef test_Transformer2DModel_init():\n    with pytest.raises(Exception):\n        Transformer2DModel(in_channels=32, num_vector_embeds=4)\n\n    with pytest.raises(Exception):\n        Transformer2DModel()\n\n    Transformer2DModel(in_channels=32, use_linear_projection=True)\n\n\ndef test_FeedForward():\n    input = torch.rand((2, 64, 64))\n    feed_forward = FeedForward(64, 64, activation_fn='geglu-approximate')\n    output = feed_forward.forward(input)\n    assert output.shape == (2, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_ddpm_scheduler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.diffusion_schedulers.ddpm_scheduler import EditDDPMScheduler\n\n\ndef test_ddpm():\n    modelout = torch.rand((1, 8, 32, 32))\n    sample = torch.rand((1, 4, 32, 32))\n    ddpm = EditDDPMScheduler(\n        num_train_timesteps=1000, variance_type='learned_range')\n    result = ddpm.step(modelout, 980, sample)\n    assert result['prev_sample'].shape == (1, 4, 32, 32)\n\n    ddpm.set_timesteps(100)\n\n    predicted_variance = torch.tensor(1.0)\n    ddpm._get_variance(t=0, predicted_variance=predicted_variance)\n    ddpm._get_variance(t=1, variance_type='fixed_large')\n    ddpm._get_variance(t=1, variance_type='fixed_large_log')\n    ddpm._get_variance(t=1, variance_type='learned')\n\n    with pytest.raises(Exception):\n        ddpm.training_loss(1, 2, 3)\n\n    with pytest.raises(Exception):\n        ddpm.sample_timestep()\n\n    steps = len(ddpm)\n    assert steps == 1000\n\n\ndef test_ddpm_init():\n    EditDDPMScheduler(trained_betas=1)\n\n    EditDDPMScheduler(beta_schedule='scaled_linear')\n\n    EditDDPMScheduler(beta_schedule='squaredcos_cap_v2')\n\n    with pytest.raises(Exception):\n        EditDDPMScheduler(beta_schedule='tem')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_denoising_unet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.ddpm.denoising_unet import (DenoisingUnet,\n                                                       NormWithEmbedding)\n\n\ndef test_DenoisingUnet():\n    input = torch.rand((1, 3, 32, 32))\n    unet = DenoisingUnet(32)\n    output = unet.forward(input, 10)\n    assert output['sample'].shape == (1, 6, 32, 32)\n\n\ndef test_NormWithEmbedding():\n    input = torch.rand((4, 32))\n    emb = torch.rand((4, 32))\n    ins = NormWithEmbedding(32, 32)\n    output = ins.forward(input, emb)\n    assert output.shape == (4, 32, 4, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_embeddings.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.ddpm.embeddings import TimestepEmbedding, Timesteps\n\n\ndef test_TimestepEmbedding():\n    input = torch.rand((1, 64, 16))\n    timestep_emb = TimestepEmbedding(\n        in_channels=16, time_embed_dim=16, act_fn='mish')\n    output = timestep_emb.forward(input)\n    assert output.shape == (1, 64, 16)\n\n    timestep_emb = TimestepEmbedding(\n        in_channels=16, time_embed_dim=16, out_dim=96)\n    timestep_emb.act = None\n    output = timestep_emb.forward(input)\n    assert output.shape == (1, 64, 96)\n\n\ndef test_Timesteps():\n    input = torch.tensor([4])\n    timesteps = Timesteps(num_channels=9)\n    emb = timesteps.forward(input)\n    assert emb.shape == (1, 9)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_res_blocks.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.ddpm.res_blocks import (Downsample2D, ResnetBlock2D,\n                                                   Upsample2D)\n\n\ndef test_resnetblock2d():\n    input = torch.rand((1, 64, 16, 16))\n    resblock = ResnetBlock2D(in_channels=64, up=True)\n    output = resblock.forward(input, None)\n    assert output.shape == (1, 64, 64, 64)\n\n    resblock = ResnetBlock2D(in_channels=64, down=True)\n    output = resblock.forward(input, None)\n    assert output.shape == (1, 64, 8, 8)\n\n\ndef test_Downsample2D():\n    input = torch.rand((1, 64, 16, 16))\n    downsample = Downsample2D(channels=64, use_conv=True, padding=0)\n    output = downsample.forward(input)\n    assert output.shape == (1, 64, 8, 8)\n\n\ndef test_Upsample2D():\n    input = torch.rand((1, 64, 16, 16))\n    upsample = Upsample2D(channels=64, use_conv_transpose=True)\n    output = upsample.forward(input)\n    assert output.shape == (1, 64, 32, 32)\n\n    upsample = Upsample2D(channels=64)\n    output = upsample.forward(input, output_size=(32, 32))\n    assert output.shape == (1, 64, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ddpm/test_unet_blocks.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.ddpm.unet_blocks import (CrossAttnDownBlock2D,\n                                                    CrossAttnUpBlock2D,\n                                                    UNetMidBlock2DCrossAttn,\n                                                    get_down_block,\n                                                    get_up_block)\n\n\ndef test_UNetMidBlock2DCrossAttn():\n    input = torch.rand((1, 64, 64, 64))\n    midblock = UNetMidBlock2DCrossAttn(64, 64, cross_attention_dim=64)\n    midblock.set_attention_slice(1)\n    output = midblock.forward(input)\n    assert output.shape == (1, 64, 64, 64)\n\n    with pytest.raises(Exception):\n        midblock.set_attention_slice(8)\n\n\ndef test_CrossAttnDownBlock2D():\n    input = torch.rand((1, 64, 64, 64))\n    downblock = CrossAttnDownBlock2D(64, 64, 64, cross_attention_dim=64)\n    downblock.set_attention_slice(1)\n    output, _ = downblock.forward(input)\n    assert output.shape == (1, 64, 32, 32)\n\n    with pytest.raises(Exception):\n        downblock.set_attention_slice(8)\n\n\ndef test_CrossAttnUpBlock2D():\n    downblock = CrossAttnUpBlock2D(64, 64, 64, 64, cross_attention_dim=64)\n    downblock.set_attention_slice(1)\n\n\ndef test_get_down_block():\n    with pytest.raises(Exception):\n        get_down_block('tem', 1, 1, 1, 1, True, 'silu', 1)\n\n\ndef get_get_up_block():\n    with pytest.raises(Exception):\n        get_up_block('tem', 1, 1, 1, 1, 1, True, 'silu', 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deblurganv2/test_deblurganv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import Adam\n\nfrom mmagic.models import DataPreprocessor, DeblurGanV2\nfrom mmagic.models.losses import PerceptualLoss\nfrom mmagic.models.losses.adv_loss import DiscLossWGANGP\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='DeblurGanV2Generator',\n    backbone='FPNMobileNet',\n    norm_layer='instance',\n    output_ch=3,\n    num_filter=64,\n    num_filter_fpn=128,\n)\ndiscriminator = dict(\n    type='DeblurGanV2Discriminator',\n    backbone='DoubleGan',\n    norm_layer='instance',\n    d_layers=3,\n)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestDeblurGanV2(TestCase):\n\n    def test_init(self):\n        gan = DeblurGanV2(\n            generator=generator,\n            discriminator=discriminator,\n            pixel_loss=dict(\n                type='PerceptualLoss',\n                layer_weights={'14': 1},\n                criterion='mse'),\n            adv_lambda=0.001,\n            warmup_num=3,\n            disc_loss=dict(type='AdvLoss', loss_type='wgan-gp'),\n            data_preprocessor=DataPreprocessor())\n\n        self.assertIsInstance(gan, DeblurGanV2)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n        self.assertIsInstance(gan.pixel_loss, PerceptualLoss)\n        self.assertIsInstance(gan.disc_loss, DiscLossWGANGP)\n        gen_cfg = deepcopy(generator)\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = DeblurGanV2(\n            generator=gen,\n            discriminator=disc,\n            pixel_loss=dict(\n                type='PerceptualLoss',\n                layer_weights={'14': 1},\n                criterion='mse'),\n            adv_lambda=0.001,\n            warmup_num=3,\n            disc_loss=dict(type='AdvLoss', loss_type='wgan-gp'),\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = DeblurGanV2(\n            generator=gen_cfg, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('test-lsgan')\n        gan = DeblurGanV2(\n            generator=generator,\n            discriminator=discriminator,\n            pixel_loss=dict(\n                type='PerceptualLoss',\n                layer_weights={'14': 1},\n                criterion='mse'),\n            adv_lambda=0.001,\n            warmup_num=3,\n            disc_loss=dict(type='AdvLoss', loss_type='wgan-gp'),\n            data_preprocessor=DataPreprocessor())\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = Adam(\n            gan.generator.parameters(), lr=0.0001, betas=(0.5, 0.999))\n        disc_optim = Adam(\n            list(gan.discriminator.patch_gan.parameters()) +\n            list(gan.discriminator.full_gan.parameters()),\n            lr=0.0001,\n            betas=(0.5, 0.999))\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 256, 256)\n        data = dict(inputs=[img], data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set(['loss_d', 'loss_g_content', 'loss_g_adv', 'loss_g']))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(), set(['loss_g_content', 'loss_g_adv',\n                                     'loss_g']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deblurganv2/test_deblurganv2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.deblurganv2 import DeblurGanV2Discriminator\nfrom mmagic.models.editors.deblurganv2.deblurganv2_discriminator import \\\n    DoubleGan\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestDeblurGanv2Discriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_tensor = torch.randn((1, 3, 256, 256))\n        cls.default_config = dict(\n            type='DeblurGanV2Discriminator',\n            backbone='DoubleGan',\n            norm_layer='instance',\n            d_layers=3)\n\n    def test_deblurganv2_discriminator(self):\n        # test default setting with builder\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, DoubleGan)\n        pred = d(self.input_tensor)\n        assert isinstance(pred, list)\n        assert len(pred) == 2\n        assert d.full_gan\n        assert d.patch_gan\n        with pytest.raises(TypeError):\n            _ = DeblurGanV2Discriminator()\n\n        # sanity check for args with cpu model\n        d = DeblurGanV2Discriminator(\n            backbone='DoubleGan', norm_layer='instance', d_layers=3)\n        pred = d(torch.randn((1, 3, 256, 256)))\n        assert d.full_gan\n        assert d.patch_gan\n        assert isinstance(pred, list)\n        assert len(pred) == 2\n\n        # check for cuda\n        if not torch.cuda.is_available():\n            return\n\n        # test default setting with builder on GPU\n        d = MODELS.build(self.default_config).cuda()\n        pred = d(self.input_tensor.cuda())\n        assert d.full_gan\n        assert d.patch_gan\n        assert isinstance(pred, list)\n        assert len(pred) == 2\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deblurganv2/test_deblurganv2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.deblurganv2 import DeblurGanV2Generator\nfrom mmagic.models.editors.deblurganv2.deblurganv2_generator import \\\n    FPNMobileNet\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestDeblurGanv2Generator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_tensor = torch.randn((1, 3, 256, 256))\n        cls.default_config = dict(\n            type='DeblurGanV2Generator',\n            backbone='FPNMobileNet',\n            norm_layer='instance',\n            output_ch=3,\n            num_filter=64,\n            num_filter_fpn=128)\n\n    def test_deblurganv2_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, FPNMobileNet)\n\n        # check forward function\n        img = g(self.input_tensor)\n        assert img.shape == (1, 3, 256, 256)\n        img = g(torch.randn(4, 3, 256, 256))\n        assert img.shape == (4, 3, 256, 256)\n        with pytest.raises(TypeError):\n            _ = DeblurGanV2Generator()\n\n        # sanity check for args with cpu model\n        g = DeblurGanV2Generator(\n            backbone='FPNMobileNet',\n            norm_layer='instance',\n            output_ch=3,\n            num_filter=64,\n            num_filter_fpn=128)\n        img = g(self.input_tensor)\n        assert img.shape == (1, 3, 256, 256)\n\n        # check for cuda\n        if not torch.cuda.is_available():\n            return\n\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, DeblurGanV2Generator)\n        g = DeblurGanV2Generator(\n            backbone='FPNMobileNet',\n            norm_layer='instance',\n            output_ch=3,\n            num_filter=64,\n            num_filter_fpn=128).cuda()\n        img = g(self.input_tensor)\n        assert img.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_contextual_attention.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import ContextualAttentionModule\n\n\ndef test_deepfill_contextual_attention_module():\n    cmodule = ContextualAttentionModule()\n    x = torch.rand((2, 128, 64, 64))\n    mask = torch.zeros((2, 1, 64, 64))\n    mask[..., 20:100, 23:90] = 1.\n    res, offset = cmodule(x, x, mask)\n    assert res.shape == (2, 128, 64, 64)\n    assert offset.shape == (2, 32, 32, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_contextual_attention_neck.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.models.editors import ContextualAttentionNeck\n\n\ndef test_deepfill_contextual_attention_neck():\n    # TODO: add unittest for contextual attention module\n    neck = ContextualAttentionNeck(in_channels=128)\n    x = torch.rand((2, 128, 64, 64))\n    mask = torch.zeros((2, 1, 64, 64))\n    mask[..., 20:100, 23:90] = 1.\n\n    res, offset = neck(x, mask)\n\n    assert res.shape == (2, 128, 64, 64)\n    assert offset.shape == (2, 32, 32, 32, 32)\n\n    if torch.cuda.is_available():\n        neck.cuda()\n        res, offset = neck(x.cuda(), mask.cuda())\n\n        assert res.shape == (2, 128, 64, 64)\n        assert offset.shape == (2, 32, 32, 32, 32)\n\n        neck = ContextualAttentionNeck(\n            in_channels=128, conv_type='gated_conv').cuda()\n        res, offset = neck(x.cuda(), mask.cuda())\n        assert res.shape == (2, 128, 64, 64)\n        assert offset.shape == (2, 32, 32, 32, 32)\n        assert isinstance(neck.conv1, SimpleGatedConvModule)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_deepfill_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import DeepFillDecoder\n\n\ndef test_deepfill_dec():\n\n    decoder = DeepFillDecoder(128, out_act_cfg=None)\n    assert not decoder.with_out_activation\n\n    decoder = DeepFillDecoder(128)\n    x = torch.randn((2, 128, 64, 64))\n    input_dict = dict(out=x)\n    res = decoder(input_dict)\n\n    assert res.shape == (2, 3, 256, 256)\n    assert decoder.dec2.stride == (1, 1)\n    assert decoder.dec2.out_channels == 128\n    assert not decoder.dec7.with_activation\n    assert res.min().item() >= -1. and res.max().item() <= 1\n    if torch.cuda.is_available():\n        decoder = DeepFillDecoder(128).cuda()\n        x = torch.randn((2, 128, 64, 64)).cuda()\n        input_dict = dict(out=x)\n        res = decoder(input_dict)\n        assert res.shape == (2, 3, 256, 256)\n        assert decoder.dec2.stride == (1, 1)\n        assert decoder.dec2.out_channels == 128\n        assert not decoder.dec7.with_activation\n        assert res.min().item() >= -1. and res.max().item() <= 1\n\n        decoder = DeepFillDecoder(\n            128, conv_type='gated_conv', channel_factor=0.75).cuda()\n        x = torch.randn((2, 128, 64, 64)).cuda()\n        input_dict = dict(out=x)\n        res = decoder(input_dict)\n        assert res.shape == (2, 3, 256, 256)\n        assert decoder.dec2.conv.stride == (1, 1)\n        assert decoder.dec2.conv.out_channels == 96 * 2\n        assert not decoder.dec7.with_feat_act\n        assert res.min().item() >= -1. and res.max().item() <= 1\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_deepfill_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.archs import MultiLayerDiscriminator\nfrom mmagic.models.editors import DeepFillv1Discriminators\n\n\ndef test_deepfillv1_disc():\n    model_config = dict(\n        global_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=256,\n            fc_in_channels=256 * 16 * 16,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2)),\n        local_disc_cfg=dict(\n            type='MultiLayerDiscriminator',\n            in_channels=3,\n            max_channels=512,\n            fc_in_channels=512 * 8 * 8,\n            fc_out_channels=1,\n            num_convs=4,\n            norm_cfg=None,\n            act_cfg=dict(type='ELU'),\n            out_act_cfg=dict(type='LeakyReLU', negative_slope=0.2)))\n    disc = DeepFillv1Discriminators(**model_config)\n    disc.init_weights()\n    global_x = torch.rand((2, 3, 256, 256))\n    local_x = torch.rand((2, 3, 128, 128))\n    global_pred, local_pred = disc((global_x, local_x))\n    assert global_pred.shape == (2, 1)\n    assert local_pred.shape == (2, 1)\n    assert isinstance(disc.global_disc, MultiLayerDiscriminator)\n    assert isinstance(disc.local_disc, MultiLayerDiscriminator)\n\n    with pytest.raises(TypeError):\n        disc.init_weights(model_config)\n\n    if torch.cuda.is_available():\n        disc = DeepFillv1Discriminators(**model_config).cuda()\n        disc.init_weights()\n        global_x = torch.rand((2, 3, 256, 256)).cuda()\n        local_x = torch.rand((2, 3, 128, 128)).cuda()\n        global_pred, local_pred = disc((global_x, local_x))\n        assert global_pred.shape == (2, 1)\n        assert local_pred.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_deepfill_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.models.editors import DeepFillEncoder\n\n\ndef test_deepfill_enc():\n    encoder = DeepFillEncoder()\n    x = torch.randn((2, 5, 256, 256))\n    outputs = encoder(x)\n    assert isinstance(outputs, dict)\n    assert 'out' in outputs\n    res = outputs['out']\n    assert res.shape == (2, 128, 64, 64)\n    assert encoder.enc2.stride == (2, 2)\n    assert encoder.enc2.out_channels == 64\n\n    encoder = DeepFillEncoder(encoder_type='stage2_conv')\n    x = torch.randn((2, 5, 256, 256))\n    outputs = encoder(x)\n    assert isinstance(outputs, dict)\n    assert 'out' in outputs\n    res = outputs['out']\n    assert res.shape == (2, 128, 64, 64)\n    assert encoder.enc2.out_channels == 32\n    assert encoder.enc3.out_channels == 64\n    assert encoder.enc4.out_channels == 64\n\n    encoder = DeepFillEncoder(encoder_type='stage2_attention')\n    x = torch.randn((2, 5, 256, 256))\n    outputs = encoder(x)\n    assert isinstance(outputs, dict)\n    assert 'out' in outputs\n    res = outputs['out']\n    assert res.shape == (2, 128, 64, 64)\n    assert encoder.enc2.out_channels == 32\n    assert encoder.enc3.out_channels == 64\n    assert encoder.enc4.out_channels == 128\n    if torch.cuda.is_available():\n        encoder = DeepFillEncoder().cuda()\n        x = torch.randn((2, 5, 256, 256)).cuda()\n        outputs = encoder(x)\n        assert isinstance(outputs, dict)\n        assert 'out' in outputs\n        res = outputs['out']\n        assert res.shape == (2, 128, 64, 64)\n        assert encoder.enc2.stride == (2, 2)\n        assert encoder.enc2.out_channels == 64\n\n        encoder = DeepFillEncoder(encoder_type='stage2_conv').cuda()\n        x = torch.randn((2, 5, 256, 256)).cuda()\n        outputs = encoder(x)\n        assert isinstance(outputs, dict)\n        assert 'out' in outputs\n        res = outputs['out']\n        assert res.shape == (2, 128, 64, 64)\n        assert encoder.enc2.out_channels == 32\n        assert encoder.enc3.out_channels == 64\n        assert encoder.enc4.out_channels == 64\n\n        encoder = DeepFillEncoder(encoder_type='stage2_attention').cuda()\n        x = torch.randn((2, 5, 256, 256)).cuda()\n        outputs = encoder(x)\n        assert isinstance(outputs, dict)\n        assert 'out' in outputs\n        res = outputs['out']\n        assert res.shape == (2, 128, 64, 64)\n        assert encoder.enc2.out_channels == 32\n        assert encoder.enc3.out_channels == 64\n        assert encoder.enc4.out_channels == 128\n\n        encoder = DeepFillEncoder(\n            conv_type='gated_conv', channel_factor=0.75).cuda()\n        x = torch.randn((2, 5, 256, 256)).cuda()\n        outputs = encoder(x)\n        assert isinstance(outputs, dict)\n        assert 'out' in outputs\n        res = outputs['out']\n        assert res.shape == (2, 96, 64, 64)\n        assert isinstance(encoder.enc2, SimpleGatedConvModule)\n        assert encoder.enc2.conv.stride == (2, 2)\n        assert encoder.enc2.conv.out_channels == 48 * 2\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_deepfill_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import (ContextualAttentionNeck, DeepFillDecoder,\n                                   DeepFillEncoder, DeepFillRefiner,\n                                   GLDilationNeck)\n\n\ndef test_deepfill_refiner():\n    refiner = DeepFillRefiner()\n\n    x = torch.rand((2, 5, 256, 256))\n    mask = x.new_ones((2, 1, 256, 256))\n    mask[..., 30:100, 40:100] = 0.\n    res, offset = refiner(x, mask)\n    assert res.shape == (2, 3, 256, 256)\n    assert offset.shape == (2, 32, 32, 32, 32)\n\n    # check model architecture\n    assert isinstance(refiner.encoder_attention, DeepFillEncoder)\n    assert isinstance(refiner.encoder_conv, DeepFillEncoder)\n    assert isinstance(refiner.contextual_attention_neck,\n                      ContextualAttentionNeck)\n    assert isinstance(refiner.decoder, DeepFillDecoder)\n    assert isinstance(refiner.dilation_neck, GLDilationNeck)\n\n    if torch.cuda.is_available():\n        refiner = DeepFillRefiner().cuda()\n\n        x = torch.rand((2, 5, 256, 256)).cuda()\n        res, offset = refiner(x, mask.cuda())\n        assert res.shape == (2, 3, 256, 256)\n        assert offset.shape == (2, 32, 32, 32, 32)\n\n        # check model architecture\n        assert isinstance(refiner.encoder_attention, DeepFillEncoder)\n        assert isinstance(refiner.encoder_conv, DeepFillEncoder)\n        assert isinstance(refiner.contextual_attention_neck,\n                          ContextualAttentionNeck)\n        assert isinstance(refiner.decoder, DeepFillDecoder)\n        assert isinstance(refiner.dilation_neck, GLDilationNeck)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv1/test_deepfillv1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom os import path as osp\n\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.models.editors import (DeepFillEncoderDecoder, DeepFillRefiner,\n                                   GLEncoderDecoder)\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\ndef test_deepfill_encdec():\n    encdec = DeepFillEncoderDecoder()\n    assert isinstance(encdec.stage1, GLEncoderDecoder)\n    assert isinstance(encdec.stage2, DeepFillRefiner)\n\n    if torch.cuda.is_available():\n        img = torch.rand((2, 3, 256, 256)).cuda()\n        mask = img.new_zeros((2, 1, 256, 256))\n        mask[..., 20:100, 30:120] = 1.\n        input_x = torch.cat([img, torch.ones_like(mask), mask], dim=1)\n        encdec.cuda()\n        stage1_res, stage2_res = encdec(input_x)\n        assert stage1_res.shape == (2, 3, 256, 256)\n        assert stage2_res.shape == (2, 3, 256, 256)\n        encdec = DeepFillEncoderDecoder(return_offset=True).cuda()\n        stage1_res, stage2_res, offset = encdec(input_x)\n        assert offset.shape == (2, 32, 32, 32, 32)\n\n\ndef test_deepfillv1_inpaintor():\n    register_all_modules()\n\n    config_file = osp.join(\n        osp.dirname(__file__), '../../..', 'configs', 'deepfillv1_test.py')\n    cfg = Config.fromfile(config_file)\n\n    deepfillv1 = MODELS.build(cfg.model)\n\n    assert deepfillv1.__class__.__name__ == 'DeepFillv1Inpaintor'\n\n    if torch.cuda.is_available():\n        deepfillv1.cuda()\n\n    # check architecture\n    assert deepfillv1.stage1_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                           'loss_composed_percep', 'loss_tv')\n    assert deepfillv1.stage2_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                           'loss_gan')\n    assert deepfillv1.with_l1_hole_loss\n    assert deepfillv1.with_l1_valid_loss\n    assert deepfillv1.with_composed_percep_loss\n    assert not deepfillv1.with_out_percep_loss\n    assert deepfillv1.with_gan\n\n    # prepare data\n    gt_img = torch.rand((3, 256, 256))\n    mask = torch.zeros((1, 256, 256))\n    mask[..., 50:180, 60:170] = 1.\n    masked_img = gt_img.unsqueeze(0) * (1. - mask)\n    mask_bbox = [100, 100, 110, 110]\n    data_batch = {\n        'inputs':\n        masked_img,\n        'data_samples': [\n            DataSample(\n                metainfo=dict(mask_bbox=mask_bbox),\n                mask=mask,\n                gt_img=gt_img,\n            )\n        ]\n    }\n\n    # prepare model and optimizer\n    optim_g = torch.optim.Adam(deepfillv1.generator.parameters(), lr=0.0001)\n    optim_d = torch.optim.Adam(deepfillv1.disc.parameters(), lr=0.0001)\n    optims = dict(generator=OptimWrapper(optim_g), disc=OptimWrapper(optim_d))\n\n    # check train_step with standard deepfillv1 model\n    for i in range(5):\n        log_vars = deepfillv1.train_step(data_batch, optims)\n\n        if i % 2 == 0:\n            assert 'real_loss_global' in log_vars\n            assert 'fake_loss_global' in log_vars\n            assert 'real_loss_local' in log_vars\n            assert 'fake_loss_local' in log_vars\n            assert 'loss' in log_vars\n        else:\n            assert 'real_loss_global' in log_vars\n            assert 'fake_loss_global' in log_vars\n            assert 'real_loss_local' in log_vars\n            assert 'fake_loss_local' in log_vars\n            assert 'stage1_loss_l1_hole' in log_vars\n            assert 'stage1_loss_l1_valid' in log_vars\n            assert 'stage2_loss_l1_hole' in log_vars\n            assert 'stage2_loss_l1_valid' in log_vars\n            assert 'stage2_loss_g_fake' in log_vars\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_deepfillv2/test_two_stage_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport platform\nfrom os.path import dirname, join\n\nimport pytest\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_two_stage_inpaintor():\n    register_all_modules()\n\n    config_file = join(\n        dirname(__file__), '../../..', 'configs', 'two_stage_test.py')\n    cfg = Config.fromfile(config_file)\n\n    inpaintor = MODELS.build(cfg.model)\n\n    assert inpaintor.__class__.__name__ == 'TwoStageInpaintor'\n\n    if torch.cuda.is_available():\n        inpaintor.cuda()\n\n    # check architecture\n    assert inpaintor.stage1_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                          'loss_composed_percep', 'loss_tv')\n    assert inpaintor.stage2_loss_type == ('loss_l1_hole', 'loss_l1_valid',\n                                          'loss_gan')\n    assert inpaintor.with_l1_hole_loss\n    assert inpaintor.with_l1_valid_loss\n    assert inpaintor.with_composed_percep_loss\n    assert not inpaintor.with_out_percep_loss\n    assert inpaintor.with_gan\n\n    # prepare data\n    gt_img = torch.randn(3, 128, 128)\n    mask = torch.zeros((1, 128, 128))\n    mask[..., 12:45, 14:42] = 1.\n    masked_img = gt_img.unsqueeze(0) * (1. - mask) + mask\n    mask_bbox = [25, 25, 27, 27]\n    data_batch = {\n        'inputs':\n        masked_img,\n        'data_samples':\n        [DataSample(\n            mask=mask,\n            mask_bbox=mask_bbox,\n            gt_img=gt_img,\n        )]\n    }\n\n    optim_g = torch.optim.Adam(inpaintor.generator.parameters(), lr=0.0001)\n    optim_d = torch.optim.Adam(inpaintor.disc.parameters(), lr=0.0001)\n    optims = dict(generator=OptimWrapper(optim_g), disc=OptimWrapper(optim_d))\n\n    # check train_step with standard two_stage model\n    for i in range(5):\n        log_vars = inpaintor.train_step(data_batch, optims)\n\n        if i % 2 == 0:\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_disc_shift' in log_vars\n            assert 'loss' in log_vars\n        else:\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_disc_shift' in log_vars\n            assert 'loss' in log_vars\n            assert 'stage1_loss_l1_hole' in log_vars\n            assert 'stage1_loss_l1_valid' in log_vars\n            assert 'stage2_loss_l1_hole' in log_vars\n            assert 'stage2_loss_l1_valid' in log_vars\n\n    # check for forward_test\n    data = inpaintor.data_preprocessor(data_batch, True)\n    data_inputs, data_sample = data['inputs'], data['data_samples']\n    output = inpaintor.forward_test(data_inputs, data_sample)\n    prediction = output.split()[0]\n    assert 'fake_res' in prediction\n    assert 'fake_img' in prediction\n    assert 'pred_img' in prediction\n    assert prediction.pred_img.shape == (3, 128, 128)\n\n    # check for gp_loss\n    cfg_copy = copy.deepcopy(cfg)\n    cfg_copy.model.disc_input_with_mask = False\n    cfg_copy.model.disc.in_channels = 3\n    cfg_copy.model.loss_gp = dict(type='GradientPenaltyLoss', loss_weight=10.)\n    inpaintor = MODELS.build(cfg_copy.model)\n    assert inpaintor.with_gp_loss\n\n    log_vars = inpaintor.train_step(data_batch, optims)\n    assert 'real_loss' in log_vars\n    assert 'stage1_loss_l1_hole' in log_vars\n    assert 'stage1_loss_l1_valid' in log_vars\n    assert 'stage2_loss_l1_hole' in log_vars\n    assert 'stage2_loss_l1_valid' in log_vars\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dic/test_dic.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import patch\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import DIC, DataPreprocessor, DICNet, LightCNN\nfrom mmagic.models.losses import (GANLoss, L1Loss, LightCNNFeatureLoss,\n                                  PerceptualVGG)\nfrom mmagic.structures import DataSample\n\n\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_dic(init_weights):\n\n    model = DIC(\n        generator=dict(\n            type='DICNet', in_channels=3, out_channels=3, mid_channels=4),\n        discriminator=dict(type='LightCNN', in_channels=3),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        align_loss=dict(type='MSELoss', loss_weight=0.1, reduction='mean'),\n        feature_loss=dict(\n            type='LightCNNFeatureLoss',\n            pretrained=None,\n            loss_weight=0.1,\n            criterion='l1'),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=0.005,\n            real_label_val=1.0,\n            fake_label_val=0),\n        train_cfg=dict(),\n        test_cfg=dict(),\n        data_preprocessor=DataPreprocessor(\n            mean=[129.795, 108.12, 96.39],\n            std=[255, 255, 255],\n        ))\n\n    assert isinstance(model, DIC)\n    assert isinstance(model.generator, DICNet)\n    assert isinstance(model.discriminator, LightCNN)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.feature_loss, LightCNNFeatureLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 16, 16)\n    target = torch.rand(3, 128, 128)\n    data_sample = DataSample(gt_img=target, gt_heatmap=torch.rand(68, 32, 32))\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_pixel_v0', 'loss_align_v0', 'loss_pixel_v1', 'loss_align_v1',\n        'loss_pixel_v2', 'loss_align_v2', 'loss_pixel_v3', 'loss_align_v3',\n        'loss_feature', 'loss_gan', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 128, 128)\n\n    # feat\n    output = model(torch.rand(1, 3, 16, 16), mode='tensor')\n    assert output.shape == (1, 3, 128, 128)\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dic/test_dic_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors import (FeedbackBlock, FeedbackBlockCustom,\n                                   FeedbackBlockHeatmapAttention)\nfrom mmagic.registry import MODELS\n\n\ndef test_feedback_block():\n    x1 = torch.rand(2, 16, 32, 32)\n\n    model = FeedbackBlock(16, 3, 8)\n    x2 = model(x1)\n    assert x2.shape == x1.shape\n    x3 = model(x2)\n    assert x3.shape == x2.shape\n\n\ndef test_feedback_block_custom():\n    x1 = torch.rand(2, 3, 32, 32)\n\n    model = FeedbackBlockCustom(3, 16, 3, 8)\n    x2 = model(x1)\n    assert x2.shape == (2, 16, 32, 32)\n\n\ndef test_feedback_block_heatmap_attention():\n    x1 = torch.rand(2, 16, 32, 32)\n    heatmap = torch.rand(2, 5, 32, 32)\n\n    model = FeedbackBlockHeatmapAttention(16, 2, 8, 5, 2)\n    x2 = model(x1, heatmap)\n    assert x2.shape == x1.shape\n    x3 = model(x2, heatmap)\n    assert x3.shape == x2.shape\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_dic_net_cpu():\n\n    model_cfg = dict(\n        type='DICNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=48,\n        num_blocks=6,\n        hg_mid_channels=256,\n        hg_num_keypoints=68,\n        num_steps=4,\n        upscale_factor=8,\n        detach_attention=False)\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'DICNet'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 16, 16)\n    targets = torch.rand(1, 3, 128, 128)\n\n    # prepare loss\n    loss_function = nn.L1Loss()\n\n    # prepare optimizer\n    optimizer = torch.optim.Adam(model.parameters())\n\n    # test on cpu\n    output, _ = model(inputs)\n    optimizer.zero_grad()\n    loss = loss_function(output[-1], targets)\n    loss.backward()\n    optimizer.step()\n\n    assert len(output) == 4\n    assert torch.is_tensor(output[-1])\n    assert output[-1].shape == targets.shape\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_dic_net_cuda():\n    # prepare data\n    inputs = torch.rand(1, 3, 16, 16)\n    targets = torch.rand(1, 3, 128, 128)\n\n    model_cfg = dict(\n        type='DICNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=48,\n        num_blocks=6,\n        hg_mid_channels=256,\n        hg_num_keypoints=68,\n        num_steps=4,\n        upscale_factor=8,\n        detach_attention=False)\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # prepare loss\n    loss_function = nn.L1Loss()\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        optimizer = torch.optim.Adam(model.parameters())\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output, _ = model(inputs)\n        optimizer.zero_grad()\n        loss = loss_function(output[-1], targets)\n        loss.backward()\n        optimizer.step()\n        assert len(output) == 4\n        assert torch.is_tensor(output[-1])\n        assert output[-1].shape == targets.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dic/test_feedback_hour_glass.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.dic.feedback_hour_glass import (\n    Hourglass, ResBlock, reduce_to_five_heatmaps)\nfrom mmagic.registry import MODELS\n\n\ndef test_res_block():\n\n    res_block = ResBlock(16, 32)\n    x = torch.rand(2, 16, 64, 64)\n    y = res_block(x)\n    assert y.shape == (2, 32, 64, 64)\n\n    res_block = ResBlock(16, 16)\n    x = torch.rand(2, 16, 64, 64)\n    y = res_block(x)\n    assert y.shape == (2, 16, 64, 64)\n\n\ndef test_hour_glass():\n    hour_glass = Hourglass(2, 16)\n    x = torch.rand(2, 16, 64, 64)\n    y = hour_glass(x)\n    assert y.shape == x.shape\n\n\ndef test_feedback_hour_glass():\n    model_cfg = dict(\n        type='FeedbackHourglass', mid_channels=16, num_keypoints=20)\n\n    fhg = MODELS.build(model_cfg)\n    assert fhg.__class__.__name__ == 'FeedbackHourglass'\n\n    x = torch.rand(2, 3, 64, 64)\n    heatmap, last_hidden = fhg.forward(x)\n    assert heatmap.shape == (2, 20, 16, 16)\n    assert last_hidden.shape == (2, 16, 16, 16)\n    heatmap, last_hidden = fhg.forward(x, last_hidden)\n    assert heatmap.shape == (2, 20, 16, 16)\n    assert last_hidden.shape == (2, 16, 16, 16)\n\n\ndef test_reduce_to_five_heatmaps():\n    heatmap = torch.rand((2, 5, 64, 64))\n    new_heatmap = reduce_to_five_heatmaps(heatmap, False)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n    new_heatmap = reduce_to_five_heatmaps(heatmap, True)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n\n    heatmap = torch.rand((2, 68, 64, 64))\n    new_heatmap = reduce_to_five_heatmaps(heatmap, False)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n    new_heatmap = reduce_to_five_heatmaps(heatmap, True)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n\n    heatmap = torch.rand((2, 194, 64, 64))\n    new_heatmap = reduce_to_five_heatmaps(heatmap, False)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n    new_heatmap = reduce_to_five_heatmaps(heatmap, True)\n    assert new_heatmap.shape == (2, 5, 64, 64)\n\n    with pytest.raises(NotImplementedError):\n        heatmap = torch.rand((2, 12, 64, 64))\n        reduce_to_five_heatmaps(heatmap, False)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dic/test_light_cnn.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import MaxFeature\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_max_feature():\n    # cpu\n    conv2d = MaxFeature(16, 16, filter_type='conv2d')\n    x1 = torch.rand(3, 16, 16, 16)\n    y1 = conv2d(x1)\n    assert y1.shape == (3, 16, 16, 16)\n    linear = MaxFeature(16, 16, filter_type='linear')\n    x2 = torch.rand(3, 16)\n    y2 = linear(x2)\n    assert y2.shape == (3, 16)\n    # gpu\n    if torch.cuda.is_available():\n        x1 = x1.cuda()\n        x2 = x2.cuda()\n        conv2d = conv2d.cuda()\n        linear = linear.cuda()\n        y1 = conv2d(x1)\n        assert y1.shape == (3, 16, 16, 16)\n        y2 = linear(x2)\n        assert y2.shape == (3, 16)\n    # filter_type should be conv2d or linear\n    with pytest.raises(ValueError):\n        MaxFeature(12, 12, filter_type='conv1d')\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_light_cnn():\n    cfg = dict(type='LightCNN', in_channels=3)\n    net = MODELS.build(cfg)\n    # cpu\n    inputs = torch.rand((2, 3, 128, 128))\n    output = net(inputs)\n    assert output.shape == (2, 1)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(inputs.cuda())\n        assert output.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dim/test_dim.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport numpy as np\nimport pytest\nimport torch\nfrom mmengine.config import ConfigDict\n\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.models.editors import DIM\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef _demo_input_train(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    alpha = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    ori_merged = torch.from_numpy(\n        np.random.random(color_shape).astype(np.float32))\n    fg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    bg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    if cuda:\n        merged = merged.cuda()\n        trimap = trimap.cuda()\n        alpha = alpha.cuda()\n        ori_merged = ori_merged.cuda()\n        fg = fg.cuda()\n        bg = bg.cuda()\n\n    inputs = torch.cat((merged, trimap), dim=1)\n    data_samples = []\n    for a, m, f, b in zip(alpha, ori_merged, fg, bg):\n        ds = DataSample()\n\n        ds.gt_alpha = a\n        ds.gt_merged = m\n        ds.gt_fg = f\n        ds.gt_bg = b\n        for k, v in meta.items():\n            ds.set_field(name=k, value=v, field_type='metainfo', dtype=None)\n\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef _demo_input_test(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n        test_trans (str): what test transformation is used in data pipeline.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    ori_shape = (img_shape[0], img_shape[1], 1)\n\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    inputs = torch.cat((merged, trimap), dim=1)\n\n    results = {\n        'ori_alpha': np.random.random(ori_shape).astype(np.float32),\n        'ori_trimap': np.random.randint(256,\n                                        size=ori_shape).astype(np.float32),\n        'ori_merged_shape': img_shape,\n    }\n    packinputs = PackInputs()\n\n    data_samples = []\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n\n    if cuda:\n        inputs = inputs.cuda()\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef assert_pred_alpha(predictions, batch_size):\n    assert isinstance(predictions, list)\n    assert isinstance(predictions[0], DataSample)\n    pred_alpha = predictions[0].output.pred_alpha.data\n    assert isinstance(pred_alpha, torch.Tensor)\n    assert pred_alpha.dtype == torch.uint8\n    assert pred_alpha.shape[-2:] == batch_size\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_dim_config():\n\n    data_preprocessor = dict(\n        type='MattorPreprocessor',\n        mean=[123.675, 116.28, 103.53],\n        std=[58.395, 57.12, 57.375],\n        proc_trimap='rescale_to_zero_one',\n    )\n    backbone = dict(\n        type='SimpleEncoderDecoder',\n        encoder=dict(type='VGG16', in_channels=4),\n        decoder=dict(type='PlainDecoder'))\n    refiner = dict(type='PlainRefiner')\n    train_cfg = dict(train_backbone=True, train_refiner=True)\n    test_cfg = dict(refine=True)\n    loss_alpha = dict(type='L1Loss')\n\n    # build mattor without refiner\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner=None,\n        loss_alpha=loss_alpha,\n        train_cfg=train_cfg,\n        test_cfg=test_cfg.copy())\n    assert not mattor.with_refiner\n    assert not mattor.test_cfg.refine\n\n    # only train the refiner, this will freeze the backbone\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner,\n        loss_alpha=loss_alpha,\n        train_cfg=dict(train_backbone=False, train_refiner=True),\n        test_cfg=test_cfg.copy())\n    assert not mattor.train_cfg.train_backbone\n    assert mattor.train_cfg.train_refiner\n    assert mattor.test_cfg.refine\n\n    # only train the backbone while the refiner is used for inference but not\n    # trained, this behavior is allowed currently but will cause a warning.\n    mattor = DIM(\n        data_preprocessor,\n        backbone,\n        refiner,\n        loss_alpha=loss_alpha,\n        train_cfg=dict(train_backbone=True, train_refiner=False),\n        test_cfg=test_cfg.copy())\n    assert mattor.train_cfg.train_backbone\n    assert not mattor.train_cfg.train_refiner\n    assert mattor.test_cfg.refine\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_dim():\n    model_cfg = ConfigDict(\n        type='DIM',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            proc_trimap='rescale_to_zero_one',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(type='VGG16', in_channels=4),\n            decoder=dict(type='PlainDecoder')),\n        refiner=dict(type='PlainRefiner'),\n        loss_alpha=dict(type='CharbonnierLoss', loss_weight=0.5),\n        loss_comp=dict(type='CharbonnierCompLoss', loss_weight=0.5),\n        loss_refine=dict(type='CharbonnierLoss'),\n        train_cfg=dict(train_backbone=True, train_refiner=True),\n        test_cfg=dict(\n            refine=False,\n            resize_method='pad',\n            resize_mode='reflect',\n            size_divisor=32,\n        ),\n    )\n\n    # 1. test dim model with refiner\n    model_cfg.train_cfg.train_refiner = True\n    model_cfg.test_cfg.refine = True\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64))\n    output_train = model(*input_train, mode='loss')\n    assert_dict_keys_equal(output_train,\n                           ['loss_alpha', 'loss_comp', 'loss_refine'])\n\n    # test model forward in train mode with gpu\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        input_train = _demo_input_train((64, 64), cuda=True)\n        output_train = model(*input_train, mode='loss')\n        assert_dict_keys_equal(output_train,\n                               ['loss_alpha', 'loss_comp', 'loss_refine'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model = MODELS.build(model_cfg)\n        inputs, data_samples = _demo_input_test((48, 48))\n        output_test = model(inputs, data_samples, mode='predict')\n        assert isinstance(output_test, list)\n        assert isinstance(output_test[0], DataSample)\n        pred_alpha = output_test[0].output.pred_alpha.data\n        assert isinstance(pred_alpha, torch.Tensor)\n        assert pred_alpha.dtype == torch.uint8\n        assert pred_alpha.shape[-2:] == (48, 48)\n\n        # test model forward in test mode with gpu\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = model(*input_test, mode='predict')\n            assert_pred_alpha(output_test, (48, 48))\n\n    # 2. test dim model without refiner\n    model_cfg.refiner = None\n    model_cfg.test_cfg.refine = True\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64))\n    output_train = model(*input_train, mode='loss')\n    assert_dict_keys_equal(output_train, ['loss_alpha', 'loss_comp'])\n\n    # test model forward in train mode with gpu\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        input_train = _demo_input_train((64, 64), cuda=True)\n        output_train = model(*input_train, mode='loss')\n        assert_dict_keys_equal(output_train, ['loss_alpha', 'loss_comp'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model = MODELS.build(model_cfg)\n        input_test = _demo_input_test((48, 48))\n        output_test = model(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n        # check test with gpu\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = model(*input_test, mode='predict')\n\n    # test forward_raw\n    model.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    model.forward(inputs)\n\n\ntest_dim()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_disco_diffusion/test_disco_diffusion.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport unittest\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import patch\n\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom torchvision.version import __version__ as TV_VERSION\n\nfrom mmagic.models import DenoisingUnet, DiscoDiffusion\nfrom mmagic.models.diffusion_schedulers import EditDDIMScheduler\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass clip_mock(nn.Module):\n\n    def __init__(self, device='cuda'):\n        super().__init__()\n        self.register_buffer('tensor', torch.randn([1, 512]))\n\n    def encode_image(self, inputs):\n        return inputs.mean() * self.tensor.repeat(inputs.shape[0], 1).to(\n            inputs.device)\n\n    def encode_text(self, inputs):\n        return self.tensor.repeat(inputs.shape[0], 1).to(inputs.device)\n\n    def forward(self, x):\n        return x\n\n\nclass clip_mock_wrapper(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.model = clip_mock()\n\n    def forward(self, x):\n        return x\n\n\nclass TestDiscoDiffusion(TestCase):\n\n    def setUp(self):\n        # unet\n        self.unet32 = DenoisingUnet(\n            image_size=32,\n            in_channels=3,\n            base_channels=8,\n            resblocks_per_downsample=2,\n            attention_res=(8, ),\n            norm_cfg=dict(type='GN32', num_groups=8),\n            dropout=0.0,\n            num_classes=0,\n            use_fp16=True,\n            resblock_updown=True,\n            attention_cfg=dict(\n                type='MultiHeadAttentionBlock',\n                num_heads=2,\n                num_head_channels=8,\n                use_new_attention_order=False),\n            use_scale_shift_norm=True)\n        # mock clip\n        self.clip_models = [clip_mock_wrapper(), clip_mock_wrapper()]\n        # diffusion_scheduler\n        self.diffusion_scheduler = EditDDIMScheduler(\n            variance_type='learned_range',\n            beta_schedule='linear',\n            clip_sample=False)\n\n    def test_init(self):\n        unet32 = deepcopy(self.unet32)\n        diffusion_scheduler = deepcopy(self.diffusion_scheduler)\n        clip_models = deepcopy(self.clip_models)\n        self.disco_diffusion = DiscoDiffusion(\n            unet=unet32,\n            diffusion_scheduler=diffusion_scheduler,\n            secondary_model=None,\n            clip_models=clip_models,\n            use_fp16=True)\n\n    @unittest.skipIf(\n        digit_version(TV_VERSION) <= digit_version('0.7.0'),\n        reason='torchvision version limitation')\n    @unittest.skipIf(not torch.cuda.is_available(), reason='requires cuda')\n    def test_infer(self):\n        unet32 = deepcopy(self.unet32)\n        diffusion_scheduler = deepcopy(self.diffusion_scheduler)\n        clip_models = deepcopy(self.clip_models)\n        self.disco_diffusion = DiscoDiffusion(\n            unet=unet32,\n            diffusion_scheduler=diffusion_scheduler,\n            secondary_model=None,\n            clip_models=clip_models,\n            use_fp16=True)\n        self.disco_diffusion.cuda().eval()\n\n        # test model structure\n        text_prompts = {\n            0: ['clouds surround the mountains and palaces,sunshine,lake']\n        }\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 32, 32)\n        # test with different text prompts\n        text_prompts = {\n            0: [\n                'a portrait of supergirl, by artgerm, rosstran, trending on artstation.'  # noqa\n            ]\n        }\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 32, 32)\n\n        # test with init_image\n        init_image = 'tests/data/image/face/000001.png'\n        text_prompts = {\n            0: [\n                'a portrait of supergirl, by artgerm, rosstran, trending on artstation.'  # noqa\n            ]\n        }\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            init_image=init_image,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 32, 32)\n\n        # test with different image resolution\n        text_prompts = {\n            0: ['clouds surround the mountains and palaces,sunshine,lake']\n        }\n        image = self.disco_diffusion.infer(\n            height=64,\n            width=128,\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 64, 128)\n\n        # clip guidance scale\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            clip_guidance_scale=8000,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 32, 32)\n\n        # test with different loss settings\n        tv_scale = 0.5\n        sat_scale = 0.5\n        range_scale = 100\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8,\n            tv_scale=tv_scale,\n            sat_scale=sat_scale,\n            range_scale=range_scale)['samples']\n        assert image.shape == (1, 3, 32, 32)\n\n        # test with different cutter settings\n        cut_overview = [12] * 100 + [4] * 900\n        cut_innercut = [4] * 100 + [12] * 900\n        cut_ic_pow = [1] * 200 + [0] * 800\n        cut_icgray_p = [0.2] * 200 + [0] * 800\n        cutn_batches = 2\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8,\n            cut_overview=cut_overview,\n            cut_innercut=cut_innercut,\n            cut_ic_pow=cut_ic_pow,\n            cut_icgray_p=cut_icgray_p,\n            cutn_batches=cutn_batches)['samples']\n        assert image.shape == (1, 3, 32, 32)\n\n        # test with different unet\n        unet64 = DenoisingUnet(\n            image_size=64,\n            in_channels=3,\n            base_channels=8,\n            resblocks_per_downsample=2,\n            attention_res=(8, ),\n            norm_cfg=dict(type='GN32', num_groups=8),\n            dropout=0.0,\n            num_classes=0,\n            use_fp16=True,\n            resblock_updown=True,\n            attention_cfg=dict(\n                type='MultiHeadAttentionBlock',\n                num_heads=2,\n                num_head_channels=8,\n                use_new_attention_order=False),\n            use_scale_shift_norm=True).cuda()\n        unet64.convert_to_fp16()\n        self.disco_diffusion.unet = unet64\n        image = self.disco_diffusion.infer(\n            text_prompts=text_prompts,\n            show_progress=True,\n            num_inference_steps=2,\n            eta=0.8)['samples']\n        assert image.shape == (1, 3, 64, 64)\n\n        class affineMock(nn.Module):\n\n            def __init__(self, *args, **kwargs):\n                super().__init__()\n\n            def forward(self, x):\n                return x\n\n        mock_path = ('mmagic.models.editors.disco_diffusion.guider.'\n                     'TORCHVISION_VERSION')\n        affine_mock_path = ('mmagic.models.editors.disco_diffusion.guider.T.'\n                            'RandomAffine')\n        with patch(affine_mock_path, new=affineMock):\n            with patch(mock_path, '0.8.1'):\n                image = self.disco_diffusion.infer(\n                    text_prompts=text_prompts,\n                    show_progress=True,\n                    num_inference_steps=2,\n                    eta=0.8)['samples']\n                assert image.shape == (1, 3, 64, 64)\n\n            with patch(mock_path, '0.9.0'):\n                image = self.disco_diffusion.infer(\n                    text_prompts=text_prompts,\n                    show_progress=True,\n                    num_inference_steps=2,\n                    eta=0.8)['samples']\n                assert image.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_disco_diffusion/test_disco_diffusion_clip_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock, patch\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.archs import TokenizerWrapper\nfrom mmagic.models.editors import ClipWrapper\nfrom mmagic.models.editors.disco_diffusion.clip_wrapper import \\\n    EmbeddingLayerWithFixes\n\n\nclass TestClipWrapper(TestCase):\n\n    def test_clip_not_installed(self):\n        with patch.dict('sys.modules', {'clip': None}):\n            with self.assertRaises(ImportError):\n                ClipWrapper('clip')\n\n    def test_open_clip_not_installed(self):\n        with patch.dict('sys.modules', {'open_clip': None}):\n            with self.assertRaises(ImportError):\n                ClipWrapper('open_clip')\n\n    def test_transformers_not_installed(self):\n        with patch.dict('sys.modules', {'transformers': None}):\n            with self.assertRaises(ImportError):\n                ClipWrapper('huggingface')\n\n    @patch('clip.load')\n    def test_clip_load(self, mock_clip_load):\n        mock_model = MagicMock()\n        mock_clip_load.return_value = (mock_model, None)\n\n        model = ClipWrapper('clip', name='test_model')\n\n        mock_clip_load.assert_called_once_with(name='test_model')\n        self.assertEqual(model.model, mock_model)\n\n    def test_open_clip_load(self):\n        mock_model = MagicMock()\n        create_model_mock = MagicMock()\n        create_model_mock.return_value = mock_model\n\n        open_clip_mock = MagicMock()\n        open_clip_mock.create_model = create_model_mock\n\n        with patch.dict('sys.modules', {'open_clip': open_clip_mock}):\n            model = ClipWrapper('open_clip', model_name='RN50')\n            create_model_mock.assert_called_once_with(model_name='RN50')\n            self.assertEqual(model.model, mock_model)\n\n    @patch('transformers.CLIPTextModel.from_pretrained')\n    def test_huggingface_load(self, mock_from_pretrained):\n        mock_model = MagicMock()\n        mock_model.config = MagicMock()\n        mock_from_pretrained.return_value = mock_model\n\n        model = ClipWrapper(\n            'huggingface',\n            pretrained_model_name_or_path='runwayml/stable-diffusion-v1-5',\n            subfolder='text_encoder')\n        mock_from_pretrained.assert_called_once_with(\n            pretrained_model_name_or_path='runwayml/stable-diffusion-v1-5',\n            subfolder='text_encoder')\n        self.assertEqual(model.model, mock_model)\n        self.assertEqual(model.model.config, mock_model.config)\n\n\ndef test_embedding_layer_with_fixes():\n    embedding_layer = nn.Embedding(10, 15)\n    print(embedding_layer.weight.shape)\n    embedding_layer_wrapper = EmbeddingLayerWithFixes(embedding_layer)\n\n    assert embedding_layer_wrapper.external_embeddings == []\n    # test naive forward\n    input_ids = torch.randint(0, 10, (3, 20)).type(torch.long)\n    out_feat = embedding_layer_wrapper(input_ids)\n    print(out_feat.shape)\n\n    tokenizer = TokenizerWrapper('openai/clip-vit-base-patch32')\n    # 'Goodbye' in kiswahili\n    tokenizer.add_placeholder_token('kwaheri', num_vec_per_token=1)\n    # 'how much' in kiswahili\n    tokenizer.add_placeholder_token('ngapi', num_vec_per_token=4)\n\n    # test add single embedding\n    new_embedding = {\n        'name': 'kwaheri',  # 'Goodbye' in kiswahili\n        'embedding': torch.ones(1, 15) * 4,\n        'start': tokenizer.get_token_info('kwaheri')['start'],\n        'end': tokenizer.get_token_info('kwaheri')['end']\n    }\n    embedding_layer_wrapper.add_embeddings(new_embedding)\n    input_text = ['hello world, kwaheri!', 'hello world', 'kwaheri']\n    input_ids = tokenizer(\n        input_text, padding='max_length', truncation=True,\n        return_tensors='pt')['input_ids']\n    out_feat = embedding_layer_wrapper(input_ids)\n    assert (out_feat[0, 4] == 4).all()\n    assert (out_feat[2, 1] == 4).all()\n\n    new_embedding = {\n        'name': 'ngapi',  # 'how much' in kiswahili\n        'embedding': torch.ones(4, 15) * 2.3,\n        'start': tokenizer.get_token_info('ngapi')['start'],\n        'end': tokenizer.get_token_info('ngapi')['end']\n    }\n    embedding_layer_wrapper.add_embeddings(new_embedding)\n    input_text = ['hello, ngapi!', 'hello world', 'kwaheri my friend, ngapi?']\n    input_ids = tokenizer(\n        input_text, padding='max_length', truncation=True,\n        return_tensors='pt')['input_ids']\n    out_feat = embedding_layer_wrapper(input_ids)\n    assert (out_feat[0, 3:7] == 2.3).all()\n    assert (out_feat[2, 5:9] == 2.3).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_dreambooth/test_dreambooth.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport platform\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\ntest_dir = osp.join(osp.dirname(__file__), '../../../..', 'tests')\nconfig_path = osp.join(test_dir, 'configs', 'diffuser_wrapper_cfg')\nmodel_path = osp.join(test_dir, 'configs', 'tmp_weight')\nckpt_path = osp.join(test_dir, 'configs', 'ckpt')\n\nregister_all_modules()\n\nstable_diffusion_tiny_url = 'diffusers/tiny-stable-diffusion-torch'\nval_prompts = ['a sks dog in basket']\n\nconfig = dict(\n    type='DreamBooth',\n    vae=dict(type='AutoencoderKL', sample_size=64),\n    unet=dict(\n        sample_size=64,\n        type='UNet2DConditionModel',\n        down_block_types=('DownBlock2D', ),\n        up_block_types=('UpBlock2D', ),\n        block_out_channels=(32, ),\n        cross_attention_dim=16,\n    ),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_tiny_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_tiny_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    dtype='fp32',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    enable_xformers=False,\n    val_prompts=val_prompts)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestControlStableDiffusion(TestCase):\n\n    def setUp(self):\n        # mock SiLU\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            from mmagic.models.editors.ddpm.denoising_unet import SiLU\n            torch.nn.SiLU = SiLU\n        dreambooth = MODELS.build(config)\n        assert not any([p.requires_grad for p in dreambooth.vae.parameters()])\n        assert not any(\n            [p.requires_grad for p in dreambooth.text_encoder.parameters()])\n        self.dreambooth = dreambooth\n\n    def test_val_step(self):\n        dreambooth = self.dreambooth\n        data = dict(\n            inputs=[torch.ones([3, 64, 64])],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(prompt, *args, **kwargs):\n            length = len(prompt)\n            return dict(samples=torch.randn(length, 3, 64, 64))\n\n        encode_prompt = dreambooth._encode_prompt\n        infer = dreambooth.infer\n        dreambooth._encode_prompt = mock_encode_prompt\n        dreambooth.infer = mock_infer\n\n        output = dreambooth.val_step(data)\n        assert len(output) == 1\n        dreambooth._encode_prompt = encode_prompt\n        dreambooth.infer = infer\n\n    def test_test_step(self):\n        dreambooth = self.dreambooth\n        data = dict(\n            inputs=[torch.ones([3, 64, 64])],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(prompt, *args, **kwargs):\n            length = len(prompt)\n            return dict(samples=torch.randn(length, 3, 64, 64))\n\n        encode_prompt = dreambooth._encode_prompt\n        infer = dreambooth.infer\n        dreambooth._encode_prompt = mock_encode_prompt\n        dreambooth.infer = mock_infer\n\n        output = dreambooth.test_step(data)\n        assert len(output) == 1\n        dreambooth._encode_prompt = encode_prompt\n        dreambooth.infer = infer\n\n    def test_train_step(self):\n        dreambooth = self.dreambooth\n        data = dict(\n            inputs=[torch.ones([3, 64, 64])],\n            data_samples=[\n                DataSample(prompt='an insect robot preparing a delicious meal')\n            ])\n\n        optimizer = MagicMock()\n        update_params = MagicMock()\n        optimizer.update_params = update_params\n        optim_wrapper = optimizer\n\n        class mock_text_encoder(nn.Module):\n\n            def __init__(self):\n                super().__init__()\n\n            def forward(self, *args, **kwargs):\n                return [torch.randn(1, 5, 16)]\n\n        dreambooth.text_encoder = mock_text_encoder()\n\n        dreambooth.train_step(data, optim_wrapper)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_duf/test_duf.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.duf import DynamicUpsamplingFilter\n\n\ndef test_dynamic_upsampling_filter():\n    \"\"\"Test DynamicUpsamplingFilter.\"\"\"\n    with pytest.raises(TypeError):\n        # The type of filter_size must be tuple\n        DynamicUpsamplingFilter(filter_size=3)\n    with pytest.raises(ValueError):\n        # The length of filter size must be 2\n        DynamicUpsamplingFilter(filter_size=(3, 3, 3))\n\n    duf = DynamicUpsamplingFilter(filter_size=(5, 5))\n    x = torch.rand(1, 3, 4, 4)\n    filters = torch.rand(1, 25, 16, 4, 4)\n    output = duf(x, filters)\n    assert output.shape == (1, 48, 4, 4)\n\n    duf = DynamicUpsamplingFilter(filter_size=(3, 3))\n    x = torch.rand(1, 3, 4, 4)\n    filters = torch.rand(1, 9, 16, 4, 4)\n    output = duf(x, filters)\n    assert output.shape == (1, 48, 4, 4)\n\n    # gpu (since it has dcn, only supports gpu testing)\n    if torch.cuda.is_available():\n        duf = DynamicUpsamplingFilter(filter_size=(3, 3)).cuda()\n        x = torch.rand(1, 3, 4, 4).cuda()\n        filters = torch.rand(1, 9, 16, 4, 4).cuda()\n        output = duf(x, filters)\n        assert output.shape == (1, 48, 4, 4)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_edsr/test_edsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import EDSRNet\n\n\ndef test_edsr_cpu():\n    \"\"\"Test EDSRNet.\"\"\"\n\n    # x2 model\n    EDSRNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=2)\n    # x3 model, initialization and forward (cpu)\n    net = EDSRNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=3)\n    img = torch.rand(1, 3, 12, 12)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 36, 36)\n    # x4 modeland, initialization and forward (cpu)\n    net = EDSRNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=4)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 48, 48)\n    # gray x4 modeland, initialization and forward (cpu)\n    net = EDSRNet(\n        in_channels=1,\n        out_channels=1,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=4,\n        rgb_mean=[0],\n        rgb_std=[1])\n    gray = torch.rand((1, 1, 12, 12))\n    output = net(gray)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 1, 48, 48)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_edsr_cuda():\n\n    net = EDSRNet(\n        in_channels=1,\n        out_channels=1,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=4,\n        rgb_mean=[0],\n        rgb_std=[1])\n    gray = torch.rand((1, 1, 12, 12))\n\n    # x4 model forward (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(gray.cuda())\n        assert isinstance(output, torch.Tensor)\n        assert output.shape == (1, 1, 48, 48)\n\n    with pytest.raises(ValueError):\n        # Currently supported upscale_factor is 2^n and 3\n        EDSRNet(\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16,\n            upscale_factor=5)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_edvr/test_edvr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import EDVR, EDVRNet\nfrom mmagic.models.losses import CharbonnierLoss\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_edvr():\n\n    model = EDVR(\n        generator=dict(\n            type='EDVRNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=4,\n            num_frames=5,\n            deform_groups=1,\n            num_blocks_extraction=1,\n            num_blocks_reconstruction=1,\n            center_frame_idx=2,\n            with_tsa=True),\n        pixel_loss=dict(\n            type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n        train_cfg=dict(tsa_iter=5000),\n        data_preprocessor=dict(type='DataPreprocessor'))\n\n    assert isinstance(model, EDVR)\n    assert isinstance(model.generator, EDVRNet)\n    assert isinstance(model.pixel_loss, CharbonnierLoss)\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # prepare data\n    inputs = torch.rand(1, 5, 3, 20, 20)\n    target = torch.rand(5, 3, 80, 80)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    log_vars = model.train_step(data, optim_wrapper)\n    assert model.generator.conv_first.weight.requires_grad is False\n    assert isinstance(log_vars, dict)\n\n    model.step_counter = torch.tensor(5000)\n    log_vars = model.train_step(data, optim_wrapper)\n    assert model.generator.conv_first.weight.requires_grad is True\n    assert isinstance(log_vars, dict)\n\n    with pytest.raises(KeyError):\n        model = EDVR(\n            generator=dict(\n                type='EDVRNet',\n                in_channels=3,\n                out_channels=3,\n                mid_channels=4,\n                num_frames=5,\n                deform_groups=1,\n                num_blocks_extraction=1,\n                num_blocks_reconstruction=1,\n                center_frame_idx=2,\n                with_tsa=True),\n            pixel_loss=dict(\n                type='CharbonnierLoss', loss_weight=1.0, reduction='sum'),\n            train_cfg=dict())\n        model.train_step(data, optim_wrapper)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_edvr/test_edvr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.edvr.edvr_net import (EDVRNet, PCDAlignment,\n                                                 TSAFusion)\n\n\ndef test_pcd_alignment():\n    \"\"\"Test PCDAlignment.\"\"\"\n\n    # cpu\n    pcd_alignment = PCDAlignment(mid_channels=4, deform_groups=2)\n    input_list = []\n    for i in range(3, 0, -1):\n        input_list.append(torch.rand(1, 4, 2**i, 2**i))\n\n    pcd_alignment = pcd_alignment\n    input_list = [v for v in input_list]\n    output = pcd_alignment(input_list, input_list)\n    assert output.shape == (1, 4, 8, 8)\n\n    with pytest.raises(AssertionError):\n        pcd_alignment(input_list[0:2], input_list)\n\n    # gpu\n    if torch.cuda.is_available():\n        pcd_alignment = PCDAlignment(mid_channels=4, deform_groups=2)\n        input_list = []\n        for i in range(3, 0, -1):\n            input_list.append(torch.rand(1, 4, 2**i, 2**i))\n\n        pcd_alignment = pcd_alignment.cuda()\n        input_list = [v.cuda() for v in input_list]\n        output = pcd_alignment(input_list, input_list)\n        assert output.shape == (1, 4, 8, 8)\n\n        with pytest.raises(AssertionError):\n            pcd_alignment(input_list[0:2], input_list)\n\n\ndef test_tsa_fusion():\n    \"\"\"Test TSAFusion.\"\"\"\n\n    # cpu\n    tsa_fusion = TSAFusion(mid_channels=4, num_frames=5, center_frame_idx=2)\n    input_tensor = torch.rand(1, 5, 4, 8, 8)\n\n    output = tsa_fusion(input_tensor)\n    assert output.shape == (1, 4, 8, 8)\n\n    # gpu\n    if torch.cuda.is_available():\n        tsa_fusion = tsa_fusion.cuda()\n        input_tensor = input_tensor.cuda()\n        output = tsa_fusion(input_tensor)\n        assert output.shape == (1, 4, 8, 8)\n\n\ndef test_edvr_net():\n    \"\"\"Test EDVRNet.\"\"\"\n\n    # cpu\n\n    # with tsa\n    edvrnet = EDVRNet(\n        3,\n        3,\n        mid_channels=8,\n        num_frames=5,\n        deform_groups=2,\n        num_blocks_extraction=1,\n        num_blocks_reconstruction=1,\n        center_frame_idx=2,\n        with_tsa=True)\n    input_tensor = torch.rand(1, 5, 3, 8, 8)\n    output = edvrnet(input_tensor)\n    assert output.shape == (1, 3, 32, 32)\n\n    # without tsa\n    edvrnet = EDVRNet(\n        3,\n        3,\n        mid_channels=8,\n        num_frames=5,\n        deform_groups=2,\n        num_blocks_extraction=1,\n        num_blocks_reconstruction=1,\n        center_frame_idx=2,\n        with_tsa=False)\n\n    output = edvrnet(input_tensor)\n    assert output.shape == (1, 3, 32, 32)\n\n    with pytest.raises(AssertionError):\n        # The height and width of inputs should be a multiple of 4\n        input_tensor = torch.rand(1, 5, 3, 3, 3)\n        edvrnet(input_tensor)\n\n    # gpu\n    if torch.cuda.is_available():\n        # with tsa\n        edvrnet = EDVRNet(\n            3,\n            3,\n            mid_channels=8,\n            num_frames=5,\n            deform_groups=2,\n            num_blocks_extraction=1,\n            num_blocks_reconstruction=1,\n            center_frame_idx=2,\n            with_tsa=True).cuda()\n        input_tensor = torch.rand(1, 5, 3, 8, 8).cuda()\n        output = edvrnet(input_tensor)\n        assert output.shape == (1, 3, 32, 32)\n\n        # without tsa\n        edvrnet = EDVRNet(\n            3,\n            3,\n            mid_channels=8,\n            num_frames=5,\n            deform_groups=2,\n            num_blocks_extraction=1,\n            num_blocks_reconstruction=1,\n            center_frame_idx=2,\n            with_tsa=False).cuda()\n\n        output = edvrnet(input_tensor)\n        assert output.shape == (1, 3, 32, 32)\n\n        with pytest.raises(AssertionError):\n            # The height and width of inputs should be a multiple of 4\n            input_tensor = torch.rand(1, 5, 3, 3, 3).cuda()\n            edvrnet(input_tensor)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_camera.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import patch\n\nimport torch\nfrom mmengine.testing import assert_allclose\n\nfrom mmagic.models.editors.eg3d.camera import (BaseCamera, GaussianCamera,\n                                               UniformCamera)\n\n\nclass TestBaseCamera(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            horizontal_mean=0,\n            vertical_mean=3.141 / 2,\n            horizontal_std=3.141 * 2,\n            vertical_std=3.141 / 2,\n            focal=1.025390625,\n            radius=1.3)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = BaseCamera(**cfg_)\n        self.assertEqual(camera.sampling_statregy.upper(), 'UNIFORM')\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['sampling_strategy'] = 'gaussian'\n        camera = BaseCamera(**cfg_)\n        self.assertEqual(camera.sampling_statregy.upper(), 'GAUSSIAN')\n\n        # test FOV and FOCAL is both passed\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['fov'] = 2333\n        with self.assertRaises(AssertionError):\n            BaseCamera(**cfg_)\n\n        # test FOV and FOCAL is neither passed\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['focal'] = None\n        camera = BaseCamera(**cfg_)\n        self.assertIsNone(camera.focal)\n        self.assertIsNone(camera.fov)\n\n    def test_repr(self):\n\n        cfg_ = deepcopy(self.default_cfg)\n        camera = BaseCamera(**cfg_)\n        repr_string = repr(camera)\n        attribute_list = [\n            'horizontal_mean', 'vertical_mean', 'horizontal_std',\n            'vertical_std', 'focal', 'look_at', 'up', 'radius',\n            'sampling_statregy'\n        ]\n        for attr in attribute_list:\n            self.assertIn(attr, repr_string)\n        self.assertIn('BaseCamera', repr_string)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['focal'] = None\n        camera = BaseCamera(**cfg_)\n        repr_string = repr(camera)\n        self.assertNotIn('focal', repr_string)\n        self.assertNotIn('fov', repr_string)\n\n    def test_sample_intrinsic(self):\n        target = [1.025390625, 0.0, 0.5, 0.0, 1.025390625, 0.5, 0.0, 0.0, 1.0]\n        target = torch.FloatTensor(target).reshape(3, 3)\n\n        # test sample with default focal\n        cfg_ = deepcopy(self.default_cfg)\n        camera = BaseCamera(**cfg_)\n        intrinsic = camera.sample_intrinsic(batch_size=3)\n        assert_allclose(intrinsic, target[None, ...].repeat(3, 1, 1))\n\n        # test sample with default FOV\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['focal'] = None\n        cfg_['fov'] = 69.18818449595669\n        camera = BaseCamera(**cfg_)\n        intrinsic = camera.sample_intrinsic(batch_size=4)\n        assert_allclose(intrinsic, target[None, ...].repeat(4, 1, 1))\n\n        # test sample fov and focal is passed at the same time\n        with self.assertRaises(AssertionError):\n            intrinsic = camera.sample_intrinsic(fov=1, focal=2, batch_size=4)\n\n        # test focal is passed\n        intrinsic = camera.sample_intrinsic(focal=1, batch_size=4)\n        self.assertTrue((intrinsic[:, 0, 0] == 1).all())\n        self.assertTrue((intrinsic[:, 1, 1] == 1).all())\n\n        # test fov is passed\n        target_focal = float(1 / (math.tan(1 * math.pi / 360) * 1.414))\n        intrinsic = camera.sample_intrinsic(fov=1, batch_size=4)\n        self.assertTrue((intrinsic[:, 0, 0] == target_focal).all())\n        self.assertTrue((intrinsic[:, 1, 1] == target_focal).all())\n\n        # test focal and fov is not passed and not be initialized\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['focal'] = None\n        camera = BaseCamera(**cfg_)\n        with self.assertRaises(ValueError):\n            camera.sample_intrinsic(batch_size=4)\n\n    def test_sample_camera2world(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = BaseCamera(**cfg_)\n        cam2world = camera.sample_camera2world()\n        self.assertEqual(cam2world.shape, (1, 4, 4))\n\n        mock_path = 'mmagic.models.editors.eg3d.camera.TORCH_VERSION'\n        with patch(mock_path, '1.6.0'):\n            print(torch.__version__)\n            cfg_ = deepcopy(self.default_cfg)\n            camera = BaseCamera(**cfg_)\n            cam2world = camera.sample_camera2world()\n            self.assertEqual(cam2world.shape, (1, 4, 4))\n\n    def test_sample_in_range(self):\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['sampling_strategy'] = 'unknow'\n        camera = BaseCamera(**cfg_)\n        with self.assertRaises(ValueError):\n            camera._sample_in_range(1, 1, 1)\n\n\nclass TestUniformCamera(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            horizontal_mean=0,\n            vertical_mean=3.141 / 2,\n            horizontal_std=3.141 * 2,\n            vertical_std=3.141 / 2,\n            focal=1.025390625,\n            radius=1.3)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = UniformCamera(**cfg_)\n        self.assertEqual(camera.sampling_statregy.upper(), 'UNIFORM')\n\n    def test_repr(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = UniformCamera(**cfg_)\n        repr_string = repr(camera)\n        self.assertIn('UniformCamera', repr_string)\n\n\nclass TestGaussianCamera(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            horizontal_mean=0,\n            vertical_mean=3.141 / 2,\n            horizontal_std=3.141 * 2,\n            vertical_std=3.141 / 2,\n            focal=1.025390625,\n            radius=1.3)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = GaussianCamera(**cfg_)\n        self.assertEqual(camera.sampling_statregy.upper(), 'GAUSSIAN')\n\n    def test_repr(self):\n        cfg_ = deepcopy(self.default_cfg)\n        camera = GaussianCamera(**cfg_)\n        repr_string = repr(camera)\n        self.assertIn('GaussianCamera', repr_string)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_dual_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.eg3d.dual_discriminator import DualDiscriminator\n\n\nclass TestEG3DDiscriminator(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(in_size=32, cond_size=25)\n\n    def test_init(self):\n        cfg = deepcopy(self.default_cfg)\n        disc = DualDiscriminator(**cfg)\n        self.assertEqual(disc.convs[0][0].conv.weight.shape[1], 6)\n        self.assertTrue(disc.use_dual_disc)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['use_dual_disc'] = False\n        cfg['img_channels'] = 2\n        disc = DualDiscriminator(**cfg)\n        self.assertEqual(disc.convs[0][0].conv.weight.shape[1], 2)\n        self.assertFalse(disc.use_dual_disc)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_forward(self):\n        cfg = deepcopy(self.default_cfg)\n        disc = DualDiscriminator(**cfg)\n        img, img_raw = torch.randn(2, 3, 32, 32), torch.randn(2, 3, 16, 16)\n        cond = torch.randn(2, 25)\n        out = disc(img, img_raw, cond)\n        self.assertEqual(out.shape, (2, 1))\n        # test raise error with img_raw is None\n        with self.assertRaises(AssertionError):\n            disc(img, None, cond)\n\n        # test cond_noise is not None\n        cfg = deepcopy(self.default_cfg)\n        cfg['disc_c_noise'] = 0.2\n        disc = DualDiscriminator(**cfg)\n        img, img_raw = torch.randn(2, 3, 32, 32), torch.randn(2, 3, 16, 16)\n        cond = torch.randn(2, 25)\n        out = disc(img, img_raw, cond)\n        self.assertEqual(out.shape, (2, 1))\n\n        # test input_bgr2rgb\n        cfg = deepcopy(self.default_cfg)\n        cfg['input_bgr2rgb'] = True\n        disc = DualDiscriminator(**cfg)\n        img, img_raw = torch.randn(2, 3, 32, 32), torch.randn(2, 3, 16, 16)\n        cond = torch.randn(2, 25)\n        out = disc(img, img_raw, cond)\n        self.assertEqual(out.shape, (2, 1))\n\n        # test img_raw is None + use_dual_disc is False\n        cfg = deepcopy(self.default_cfg)\n        cfg['use_dual_disc'] = False\n        disc = DualDiscriminator(**cfg)\n        img = torch.randn(2, 3, 32, 32)\n        cond = torch.randn(2, 25)\n        out = disc(img, None, cond)\n        self.assertEqual(out.shape, (2, 1))\n\n        # test img_raw is None + use_dual_disc is False + input_bgr2rgb\n        cfg = deepcopy(self.default_cfg)\n        cfg['use_dual_disc'] = False\n        cfg['input_bgr2rgb'] = True\n        disc = DualDiscriminator(**cfg)\n        img = torch.randn(2, 3, 32, 32)\n        cond = torch.randn(2, 25)\n        out = disc(img, None, cond)\n        self.assertEqual(out.shape, (2, 1))\n\n        # test cond is None\n        cfg = deepcopy(self.default_cfg)\n        cfg['cond_size'] = None\n        disc = DualDiscriminator(**cfg)\n        out = disc(img, img_raw, None)\n        self.assertEqual(out.shape, (2, 1))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_eg3d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors.eg3d.eg3d import EG3D\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestEG3D(TestCase):\n\n    def setUp(self):\n        self.generator_cfg = dict(\n            type='TriplaneGenerator',\n            out_size=32,\n            noise_size=8,\n            style_channels=8,\n            num_mlps=1,\n            triplane_size=8,\n            triplane_channels=4,\n            sr_in_size=8,\n            sr_in_channels=8,\n            neural_rendering_resolution=5,\n            cond_scale=1,\n            renderer_cfg=dict(\n                ray_start=0.1,\n                ray_end=2.6,\n                box_warp=1.6,\n                depth_resolution=4,\n                white_back=True,\n                depth_resolution_importance=4,\n            ),\n            rgb2bgr=True)\n        self.camera_cfg = dict(\n            type='UniformCamera',\n            horizontal_mean=3.141,\n            horizontal_std=3.141,\n            vertical_mean=3.141 / 2,\n            vertical_std=3.141 / 2,\n            focal=1.025390625,\n            up=[0, 0, 1],\n            radius=1.2)\n        # self.discriminator_cfg = dict()\n        self.default_cfg = dict(\n            generator=self.generator_cfg,\n            camera=self.camera_cfg,\n            data_preprocessor=dict(type='DataPreprocessor'))\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        model = EG3D(**cfg_)\n        self.assertEqual(model.noise_size, 8)\n        self.assertEqual(model.num_classes, None)\n        self.assertIsNotNone(model.camera)\n\n        # test camera is None\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['camera'] = None\n        model = EG3D(**cfg_)\n        self.assertIsNone(model.camera)\n\n        # test camers is module\n        camera_mock = MagicMock(spec=nn.Module)\n        cfg_['camera'] = camera_mock\n        model = EG3D(**cfg_)\n        self.assertEqual(model.camera, camera_mock)\n\n    def test_label_fn(self):\n        # test camera is None\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['camera'] = None\n        model = EG3D(**cfg_)\n        label = torch.randn(1, 25)\n        self.assertTrue((label == model.label_fn(label)).all())\n\n        with self.assertRaises(AssertionError):\n            model.label_fn(None)\n\n    def _check_datasample_output(self, outputs, out_size, n_points):\n        target_keys = [\n            'fake_img', 'depth', 'lr_img', 'ray_origins', 'ray_directions'\n        ]\n        target_shape = [(3, out_size, out_size), (1, n_points, n_points),\n                        (3, n_points, n_points), (n_points**2, 3),\n                        (n_points**2, 3)]\n        for output in outputs:\n            for key, shape in zip(target_keys, target_shape):\n                self.assertTrue(hasattr(output, key))\n                self.assertEqual(getattr(output, key).shape, shape)\n\n    def _check_dict_output(self, outputs, out_size, n_points, bz):\n        target_keys = [\n            'fake_img', 'depth', 'lr_img', 'ray_origins', 'ray_directions'\n        ]\n        target_shape = [(bz, 3, out_size, out_size),\n                        (bz, 1, n_points, n_points),\n                        (bz, 3, n_points, n_points), (bz, n_points**2, 3),\n                        (bz, n_points**2, 3)]\n        for output in outputs:\n            for key, shape in zip(target_keys, target_shape):\n                self.assertIn(key, output)\n                self.assertEqual(output[key].shape, shape)\n\n    def test_forward(self):\n        cfg_ = deepcopy(self.default_cfg)\n        model = EG3D(**cfg_)\n        outputs = model(dict(num_batches=4))\n        self.assertEqual(len(outputs), 4)\n\n        # test label is passed\n        data_samples = []\n        for _ in range(4):\n            data_sample = DataSample()\n            data_sample.set_gt_label(torch.randn(25))\n            data_samples.append(data_sample)\n        data_samples = DataSample.stack(data_samples)\n        outputs = model(dict(num_batches=4), data_samples)\n        self.assertEqual(len(outputs), 4)\n        self._check_datasample_output(outputs, 32, 5)\n\n        # test noise is passed\n        outputs = model(torch.randn(4, 8))\n        self.assertEqual(len(outputs), 4)\n        self._check_datasample_output(outputs, 32, 5)\n\n        # test orig/ema\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['ema_config'] = dict(interval=1)\n        model = EG3D(**cfg_)\n        outputs = model(dict(num_batches=4, sample_model='ema/orig'))\n        self.assertEqual(len(outputs), 4)\n        self.assertTrue(all([hasattr(output, 'orig') for output in outputs]))\n        self.assertTrue(all([hasattr(output, 'ema') for output in outputs]))\n        self._check_datasample_output([output.orig for output in outputs], 32,\n                                      5)\n        self._check_datasample_output([output.ema for output in outputs], 32,\n                                      5)\n\n    def test_interpolation(self):\n        cfg_ = deepcopy(self.default_cfg)\n        model = EG3D(**cfg_)\n        output_list = model.interpolation(num_images=3, num_batches=2)\n        self.assertEqual(len(output_list), 3)\n        self._check_dict_output(output_list, 32, 5, 2)\n\n        output_list = model.interpolation(\n            num_images=3, num_batches=2, mode='camera', show_pbar=False)\n        self.assertEqual(len(output_list), 3)\n        self._check_dict_output(output_list, 32, 5, 2)\n\n        output_list = model.interpolation(\n            num_images=3, num_batches=2, mode='conditioning', show_pbar=False)\n        self.assertEqual(len(output_list), 3)\n        self._check_dict_output(output_list, 32, 5, 2)\n\n        # test ema\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['ema_config'] = dict(interval=1)\n        model = EG3D(**cfg_)\n\n        output_list = model.interpolation(\n            num_images=3, num_batches=2, sample_model='ema')\n        self.assertEqual(len(output_list), 3)\n        self._check_dict_output(output_list, 32, 5, 2)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_eg3d_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import Mock, patch\n\nimport torch\n\nfrom mmagic.models.editors.eg3d.eg3d_generator import TriplaneGenerator\n\n\nclass TestEG3DGenerator(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            out_size=32,\n            noise_size=8,\n            style_channels=8,\n            num_mlps=1,\n            triplane_size=8,\n            triplane_channels=4,\n            sr_in_size=8,\n            sr_in_channels=8,\n            neural_rendering_resolution=5,\n            cond_scale=1,\n            renderer_cfg=dict(\n                ray_start=0.1,\n                ray_end=2.6,\n                box_warp=1.6,\n                depth_resolution=4,\n                white_back=True,\n                depth_resolution_importance=4,\n            ),\n            rgb2bgr=True)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        gen = TriplaneGenerator(**cfg_)\n\n        # check decoder in/out channels\n        decoder_in_chns = gen.renderer.decoder.net[0].weight.shape[1]\n        decoder_out_chns = gen.renderer.decoder.net[-1].weight.shape[0]\n        self.assertEqual(decoder_in_chns, 4)\n        self.assertEqual(decoder_out_chns, 8 + 1)  # (sr_in_channels + 1)\n\n        # test sr_factor not in [2, 4, 8]\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['out_size'] = 64\n        with self.assertRaises(AssertionError):\n            TriplaneGenerator(**cfg_)\n\n        cfg_['out_size'] = 10\n        with self.assertRaises(AssertionError):\n            TriplaneGenerator(**cfg_)\n\n    def test_forward(self):\n        cfg_ = deepcopy(self.default_cfg)\n        gen = TriplaneGenerator(**cfg_)\n        noise = torch.randn(2, 8)\n        cond = torch.randn(2, 25)\n        out = gen(noise, cond)\n        self.assertEqual(out['fake_img'].shape, (2, 3, 32, 32))\n        self.assertEqual(out['lr_img'].shape, (2, 3, 5, 5))\n        self.assertEqual(out['depth'].shape, (2, 1, 5, 5))\n        self.assertEqual(out['ray_directions'].shape, (2, 25, 3))\n        self.assertEqual(out['ray_origins'].shape, (2, 25, 3))\n\n        # test render_kwargs is work in forward\n        render_kwargs = dict(a=1, b='b')\n        render_mock = Mock(\n            return_value=(torch.randn(2, 25, 8), torch.randn(2, 25, 1), None))\n        patch_func = 'mmagic.models.editors.eg3d.renderer.EG3DRenderer.forward'\n        with patch(patch_func, new=render_mock):\n            gen = TriplaneGenerator(**cfg_)\n            gen(noise, cond, render_kwargs=render_kwargs)\n            _, called_kwargs = render_mock.call_args\n            self.assertIn('render_kwargs', called_kwargs)\n            self.assertDictEqual(called_kwargs['render_kwargs'], render_kwargs)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_eg3d_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\n\nfrom mmagic.models.editors.eg3d.eg3d_modules import (SuperResolutionModule,\n                                                     TriPlaneBackbone)\n\n\nclass TestTriPlaneBackbone(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            out_size=32,\n            noise_size=10,\n            out_channels=9,\n            style_channels=16,\n            num_mlps=2,\n            cond_size=4,\n            cond_scale=1,\n            cond_mapping_channels=4,\n            zero_cond_input=False)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        backbone = TriPlaneBackbone(**cfg_)\n        self.assertEqual(backbone.cond_scale, 1)\n        self.assertEqual(backbone.zero_cond_input, False)\n\n    def test_mapping(self):\n        cfg_ = deepcopy(self.default_cfg)\n        backbone = TriPlaneBackbone(**cfg_)\n        noise = torch.randn(2, 10)\n        label = torch.randn(2, 4)\n        style_code = backbone.mapping(noise, label)\n        self.assertEqual(style_code.shape, (2, 16))\n\n        # test truncation < 1\n        style_code = backbone.mapping(noise, label, truncation=0.5)\n        self.assertEqual(style_code.shape, (2, 16))\n        style_code = backbone.mapping(noise, label, truncation=0.5)\n        self.assertEqual(style_code.shape, (2, 16))\n\n        # test zero_cond_input + label is None\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['zero_cond_input'] = True\n        backbone = TriPlaneBackbone(**cfg_)\n        style_code = backbone.mapping(noise)\n        self.assertEqual(style_code.shape, (2, 16))\n\n        # test zero_cond_input + label is not None\n        style_code = backbone.mapping(noise, label)\n        self.assertEqual(style_code.shape, (2, 16))\n\n        # test cond_size < 0\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['cond_size'] = None\n        backbone = TriPlaneBackbone(**cfg_)\n        # noise = torch.randn(2, 10)\n        style_code = backbone.mapping(noise)\n        self.assertEqual(style_code.shape, (2, 16))\n\n    def test_synthesis(self):\n        cfg_ = deepcopy(self.default_cfg)\n        backbone = TriPlaneBackbone(**cfg_)\n        noise = torch.randn(2, 10)\n        label = torch.randn(2, 4)\n        style_code = backbone.mapping(noise, label)\n        outputs_forward = backbone(noise, label)\n        outputs_synthesis = backbone.synthesis(style_code)\n        self.assertTrue((outputs_forward == outputs_synthesis).all())\n\n\nclass TestSuperResolutionModule(TestCase):\n\n    def setUp(self):\n        self.default_cfg = dict(\n            in_channels=8,\n            in_size=4,\n            hidden_size=8,\n            out_size=8,\n            style_channels=5,\n            sr_antialias=True)\n\n    def test_init(self):\n        cfg_ = deepcopy(self.default_cfg)\n        sr_model = SuperResolutionModule(**cfg_)\n        self.assertTrue(sr_model.block0.upsample)\n        self.assertFalse(sr_model.block1.upsample)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['hidden_size'] = 4\n        sr_model = SuperResolutionModule(**cfg_)\n        self.assertFalse(sr_model.block0.upsample)\n        self.assertTrue(sr_model.block1.upsample)\n\n    def test_forward(self):\n        cfg_ = deepcopy(self.default_cfg)\n        sr_model = SuperResolutionModule(**cfg_)\n        styles = torch.randn(2, 5)\n        imgs = torch.randn(2, 3, 4, 4)\n        features = torch.randn(2, 8, 4, 4)\n        sr_imgs = sr_model(imgs, features, styles)\n        self.assertEqual(sr_imgs.shape, (2, 3, 8, 8))\n\n        # test style is a list\n        styles = [torch.randn(2, 5)]\n        imgs = torch.randn(2, 3, 4, 4)\n        features = torch.randn(2, 8, 4, 4)\n        sr_imgs = sr_model(imgs, features, styles)\n        self.assertEqual(sr_imgs.shape, (2, 3, 8, 8))\n\n        # test style's ndim is 3\n        styles = torch.randn(3, 2, 5)\n        imgs = torch.randn(2, 3, 4, 4)\n        features = torch.randn(2, 8, 4, 4)\n        sr_imgs = sr_model(imgs, features, styles)\n        self.assertEqual(sr_imgs.shape, (2, 3, 8, 8))\n\n        # test interpolation\n        imgs = torch.randn(2, 3, 3, 3)\n        features = torch.randn(2, 8, 3, 3)\n        sr_imgs = sr_model(imgs, features, styles)\n        self.assertEqual(sr_imgs.shape, (2, 3, 8, 8))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_eg3d_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.eg3d.eg3d_utils import (get_ray_limits_box,\n                                                   inverse_transform_sampling,\n                                                   linspace_batch)\n\n\ndef test_get_ray_limits_box_and_linspace_batch():\n    rays_o = torch.rand(2, 4, 4, 3)\n    rays_d = torch.rand(2, 4, 4, 3)\n    rays_start, rays_end = get_ray_limits_box(rays_o, rays_d, 0.5)\n    assert rays_start.shape == (2, 4, 4, 1)\n    assert rays_end.shape == (2, 4, 4, 1)\n\n    # linspace\n    sampled_depth = linspace_batch(rays_start, rays_end, 5)\n    assert sampled_depth.shape == (5, 2, 4, 4, 1)\n\n\ndef test_inverse_transform_sampling():\n    bins = torch.randn(10, 11)\n    weights = torch.randn(10, 9)\n    n_importance = 5\n    samples = inverse_transform_sampling(bins, weights, n_importance)\n    assert samples.shape == (10, 5)\n\n    samples_det_1 = inverse_transform_sampling(\n        bins, weights, n_importance, deterministic=True)\n    samples_det_2 = inverse_transform_sampling(\n        bins, weights, n_importance, deterministic=True)\n    assert samples_det_1.shape == (10, 5)\n    assert samples_det_2.shape == (10, 5)\n    assert (samples_det_1 == samples_det_2).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_ray_sampler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.eg3d.ray_sampler import sample_rays\n\n\ndef test_sample_rays():\n    cond1 = [\n        0.5186675190925598, -0.8265361189842224, -0.21868225932121277,\n        0.2842874228954315, 0.8549759387969971, 0.5014145970344543,\n        0.13266240060329437, -0.17246174812316895, 2.3841852225814364e-07,\n        -0.2557757496833801, 0.9667359590530396, -1.2567564249038696, -0.0,\n        0.0, -0.0, 1.0, 1.025390625, 0.0, 0.5, 0.0, 1.025390625, 0.5, 0.0, 0.0,\n        1.0\n    ]\n    cond2 = [\n        0.828181266784668, -0.29340365529060364, -0.47752493619918823,\n        0.6207822561264038, 0.5604602694511414, 0.43355682492256165,\n        0.7056292295455933, -0.9173181653022766, -2.9802322387695312e-08,\n        -0.8520227670669556, 0.5235047340393066, -0.680556058883667, -0.0, 0.0,\n        -0.0, 1.0, 1.025390625, 0.0, 0.5, 0.0, 1.025390625, 0.5, 0.0, 0.0, 1.0\n    ]\n    cond1, cond2 = torch.FloatTensor(cond1), torch.FloatTensor(cond2)\n    cond = torch.stack((cond1, cond2))\n    cam2world = cond[:, :16].view(-1, 4, 4)\n    intrinsics = cond[:, 16:25].view(-1, 3, 3)\n    resolution = 16\n    ray_origins, ray_directions = sample_rays(cam2world, intrinsics,\n                                              resolution)\n    assert ray_origins.shape[:2] == (2, resolution**2)\n    assert ray_directions.shape[:2] == (2, resolution**2)\n    # check if camera origin in one batch is all same\n    for origin in ray_origins:\n        assert (origin == origin[0]).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_eg3d/test_renderer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\nfrom unittest.mock import Mock, patch\n\nimport torch\n\nfrom mmagic.models.editors.eg3d.renderer import EG3DDecoder, EG3DRenderer\n\n\nclass TestEG3DRenderer(TestCase):\n\n    def setUp(self) -> None:\n        self.n_tri, self.tri_feat, self.tri_res = 3, 16, 8\n        self.nerf_res = 10\n        self.decoder_out_channels = 5\n        self.decoder_rgb_padding = 0.233\n\n        self.decoder_cfg = dict(\n            in_channels=self.tri_feat,\n            hidden_channels=10,\n            out_channels=self.decoder_out_channels,\n            rgb_padding=self.decoder_rgb_padding)\n        self.renderer_cfg = dict(\n            ray_start=0.1,\n            ray_end=2.6,\n            box_warp=1.6,\n            depth_resolution=5,\n            white_back=True,\n            depth_resolution_importance=10,\n            decoder_cfg=deepcopy(self.decoder_cfg))\n\n    def test_init(self):\n        cfg_ = deepcopy(self.renderer_cfg)\n        renderer = EG3DRenderer(**cfg_)\n        self.assertIsInstance(renderer.decoder, EG3DDecoder)\n        self.assertEqual(renderer.decoder.rgb_padding,\n                         self.decoder_rgb_padding)\n\n    def test_forward(self):\n        nerf_res = self.nerf_res\n        n_tri, tri_feat, tri_res = self.n_tri, self.tri_feat, self.tri_res\n\n        plane = torch.randn(4, n_tri, tri_feat, tri_res, tri_res)\n        ray_origins = torch.randn(4, nerf_res * nerf_res, 3)\n        ray_directions = torch.randn(4, nerf_res * nerf_res, 3)\n\n        cfg_ = deepcopy(self.renderer_cfg)\n        renderer = EG3DRenderer(**cfg_)\n        rgb, depth, weights = renderer(plane, ray_origins, ray_directions)\n\n        self.assertEqual(rgb.shape,\n                         (4, nerf_res * nerf_res, self.decoder_out_channels))\n        self.assertEqual(depth.shape, (4, nerf_res * nerf_res, 1))\n        self.assertEqual(weights.shape, (4, nerf_res * nerf_res, 1))\n\n        # test white_back is True + density_noise > 0\n        cfg_ = deepcopy(self.renderer_cfg)\n        cfg_['white_back'] = False\n        cfg_['density_noise'] = 2\n        renderer = EG3DRenderer(**cfg_)\n        rgb, depth, weights = renderer(plane, ray_origins, ray_directions)\n\n        self.assertEqual(rgb.shape,\n                         (4, nerf_res * nerf_res, self.decoder_out_channels))\n        self.assertEqual(depth.shape, (4, nerf_res * nerf_res, 1))\n        self.assertEqual(weights.shape, (4, nerf_res * nerf_res, 1))\n\n        # test ray_start and end is auto\n        cfg_ = deepcopy(self.renderer_cfg)\n        cfg_['ray_start'] = cfg_['ray_end'] = 'auto'\n        renderer = EG3DRenderer(**cfg_)\n        rgb, depth, weights = renderer(plane, ray_origins, ray_directions)\n\n        self.assertEqual(rgb.shape,\n                         (4, nerf_res * nerf_res, self.decoder_out_channels))\n        self.assertEqual(depth.shape, (4, nerf_res * nerf_res, 1))\n        self.assertEqual(weights.shape, (4, nerf_res * nerf_res, 1))\n\n        # test clamp mode is valid\n        cfg_ = deepcopy(self.renderer_cfg)\n        cfg_['clamp_mode'] = 'unsupport'\n        renderer = EG3DRenderer(**cfg_)\n        with self.assertRaises(AssertionError):\n            renderer(plane, ray_origins, ray_directions)\n\n        # test without hierarchical sampling + test render_kwargs\n        render_kwargs = dict(depth_resolution_importance=0)\n        mock_func = Mock(return_value=(rgb, depth, weights[..., None]))\n        mock_path = ('mmagic.models.editors.eg3d.renderer.EG3DRenderer.'\n                     'volume_rendering')\n        with patch(mock_path, new=mock_func):\n            renderer = EG3DRenderer(**cfg_)\n            renderer(\n                plane,\n                ray_origins,\n                ray_directions,\n                render_kwargs=render_kwargs)\n            mock_func.assert_called_once()\n\n        # cover TORCH_VERSION < 1.8.0\n        mock_path = 'mmagic.models.editors.eg3d.renderer.TORCH_VERSION'\n        with patch(mock_path, '1.6.0'):\n            cfg_ = deepcopy(self.renderer_cfg)\n            renderer = EG3DRenderer(**cfg_)\n            renderer(\n                plane,\n                ray_origins,\n                ray_directions,\n                render_kwargs=render_kwargs)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_esrgan/test_esrgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import patch\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import ESRGAN, DataPreprocessor, ModifiedVGG, RRDBNet\nfrom mmagic.models.losses import GANLoss, L1Loss, PerceptualLoss, PerceptualVGG\nfrom mmagic.structures import DataSample\n\n\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_esrgan(init_weights):\n\n    model = ESRGAN(\n        generator=dict(\n            type='RRDBNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=4,\n            num_blocks=4,\n            growth_channels=4,\n            upscale_factor=4),\n        discriminator=dict(type='ModifiedVGG', in_channels=3, mid_channels=64),\n        pixel_loss=dict(type='L1Loss', loss_weight=1e-2, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={'34': 1.0},\n            vgg_type='vgg19',\n            perceptual_weight=1.0,\n            style_weight=0,\n            norm_img=False),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=5e-3,\n            real_label_val=1.0,\n            fake_label_val=0),\n        train_cfg=None,\n        test_cfg=None,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, ESRGAN)\n    assert isinstance(model.generator, RRDBNet)\n    assert isinstance(model.discriminator, ModifiedVGG)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.perceptual_loss, PerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 32, 32)\n    target = torch.rand(3, 128, 128)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.data.shape == (3, 128, 128)\n\n    # feat\n    output = model(torch.rand(1, 3, 32, 32), mode='tensor')\n    assert output.shape == (1, 3, 128, 128)\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_esrgan/test_rrdb_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport pytest\nimport torch\n\nfrom mmagic.models import RRDBNet\n\n\ndef test_rrdbnet_backbone():\n    \"\"\"Test RRDBNet backbone.\"\"\"\n\n    # model, initialization and forward (cpu)\n    # x4 model\n    net = RRDBNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        growth_channels=4,\n        upscale_factor=4)\n    input_shape = (1, 3, 12, 12)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 3, 48, 48)\n\n    # x3 model\n    with pytest.raises(ValueError):\n        net = RRDBNet(\n            in_channels=3,\n            out_channels=3,\n            mid_channels=8,\n            num_blocks=2,\n            growth_channels=4,\n            upscale_factor=3)\n\n    # x2 model\n    net = RRDBNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        growth_channels=4,\n        upscale_factor=2)\n    input_shape = (1, 3, 12, 12)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 3, 24, 24)\n\n    # model forward (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 3, 24, 24)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_fastcomposer/test_fastcomposer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport gc\nimport platform\nfrom unittest import TestCase\n\nimport numpy as np\nimport pytest\nimport torch\nfrom PIL import Image\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\ngc.collect()\ntorch.cuda.empty_cache()\nregister_all_modules()\nstable_diffusion_tiny_url = 'diffusers/tiny-stable-diffusion-torch'\nfinetuned_model_path = ''\n\nvision_config = dict(\n    attention_dropout=0.0,\n    dropout=0.0,\n    hidden_act='quick_gelu',\n    hidden_size=1024,\n    image_size=64,\n    initializer_factor=1.0,\n    initializer_range=0.02,\n    intermediate_size=64,\n    layer_norm_eps=1e-05,\n    model_type='clip_vision_model',\n    num_attention_heads=16,\n    num_channels=3,\n    num_hidden_layers=24,\n    patch_size=14,\n    projection_dim=768,\n    transformers_version='4.29.1')\n\nconfig = dict(\n    type='FastComposer',\n    vae=dict(type='AutoencoderKL', sample_size=64),\n    unet=dict(\n        sample_size=64,\n        type='UNet2DConditionModel',\n        down_block_types=('DownBlock2D', ),\n        up_block_types=('UpBlock2D', ),\n        block_out_channels=(32, ),\n        cross_attention_dim=16,\n    ),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_tiny_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_tiny_url,\n    pretrained_cfg=dict(\n        finetuned_model_path=finetuned_model_path,\n        enable_xformers_memory_efficient_attention=None,\n        pretrained_model_name_or_path=stable_diffusion_tiny_url,\n        image_encoder=vision_config,\n        revision=None,\n        non_ema_revision=None,\n        object_localization=None,\n        object_localization_weight=0.01,\n        localization_layers=5,\n        mask_loss=None,\n        mask_loss_prob=0.5,\n        object_localization_threshold=1.0,\n        object_localization_normalize=None,\n        no_object_augmentation=True,\n        object_resolution=64),\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    dtype='fp32',\n    data_preprocessor=dict(type='DataPreprocessor'))\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\nclass TestFastComposer(TestCase):\n\n    def setUp(self):\n        self.fastcomposer = MODELS.build(config)\n\n    def test_infer(self):\n        fastcomposer = self.fastcomposer\n\n        def mock_encode_prompt(prompt, do_classifier_free_guidance,\n                               num_images_per_prompt, *args, **kwargs):\n            batch_size = len(prompt) if isinstance(prompt, list) else 1\n            batch_size *= num_images_per_prompt\n            if do_classifier_free_guidance:\n                batch_size *= 2\n            return torch.randn(batch_size, 5, 16)  # 2 for cfg\n\n        encode_prompt = fastcomposer._encode_prompt\n        fastcomposer._encode_prompt = mock_encode_prompt\n\n        prompt = 'A man img'\n        negative_prompt = ''\n        alpha_ = 0.75\n        guidance_scale = 5\n        num_steps = 1\n        num_images = 1\n        image = []\n        seed = -1\n        augmented_prompt_embeds = torch.randn(1, 5, 16)\n        image.append(\n            Image.fromarray(\n                np.random.randint(0, 255, size=(64, 64, 3)).astype('uint8')))\n\n        if len(image) == 0:\n            raise Exception('You need to upload at least one image.')\n\n        num_subject_in_text = (np.array(\n            self.fastcomposer.special_tokenizer.encode(prompt)) ==\n                               self.fastcomposer.image_token_id).sum()\n        if num_subject_in_text != len(image):\n            raise Exception(\n                \"Number of subjects in the text description doesn't match \"\n                'the number of reference images, #text subjects: '\n                f'{num_subject_in_text} #reference image: {len(image)}', )\n\n        if seed == -1:\n            seed = np.random.randint(0, 1000000)\n\n        generator = torch.manual_seed(seed)\n\n        result = fastcomposer.infer(\n            prompt,\n            negative_prompt=negative_prompt,\n            height=64,\n            width=64,\n            num_inference_steps=num_steps,\n            guidance_scale=guidance_scale,\n            num_images_per_prompt=num_images,\n            generator=generator,\n            alpha_=alpha_,\n            reference_subject_images=image,\n            augmented_prompt_embeds=augmented_prompt_embeds,\n            output_type='tensor')\n        fastcomposer._encode_prompt = encode_prompt\n        assert result['samples'].shape == (num_images, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_fba/test_fba_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import FBADecoder\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef test_fba_decoder():\n\n    with pytest.raises(AssertionError):\n        # pool_scales must be list|tuple\n        FBADecoder(pool_scales=1, in_channels=32, channels=16)\n    inputs = dict()\n    conv_out_1 = _demo_inputs((1, 11, 320, 320))\n    conv_out_2 = _demo_inputs((1, 64, 160, 160))\n    conv_out_3 = _demo_inputs((1, 256, 80, 80))\n    conv_out_4 = _demo_inputs((1, 512, 40, 40))\n    conv_out_5 = _demo_inputs((1, 1024, 40, 40))\n    conv_out_6 = _demo_inputs((1, 2048, 40, 40))\n    inputs['conv_out'] = [\n        conv_out_1, conv_out_2, conv_out_3, conv_out_4, conv_out_5, conv_out_6\n    ]\n    inputs['merged'] = _demo_inputs((1, 3, 320, 320))\n    inputs['two_channel_trimap'] = _demo_inputs((1, 2, 320, 320))\n    model = FBADecoder(\n        pool_scales=(1, 2, 3, 6),\n        in_channels=2048,\n        channels=256,\n        norm_cfg=dict(type='GN', num_groups=32))\n\n    alpha, F, B = model(inputs)\n    assert_tensor_with_shape(alpha, torch.Size([1, 1, 320, 320]))\n    assert_tensor_with_shape(F, torch.Size([1, 3, 320, 320]))\n    assert_tensor_with_shape(B, torch.Size([1, 3, 320, 320]))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_fba/test_fba_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import FBAResnetDilated\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef test_fba_encoder():\n    \"\"\"Test FBA encoder.\"\"\"\n\n    with pytest.raises(KeyError):\n        # ResNet depth should be in [18, 34, 50, 101, 152]\n        FBAResnetDilated(\n            20,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n        )\n\n    with pytest.raises(AssertionError):\n        # In ResNet: 1 <= num_stages <= 4\n        FBAResnetDilated(\n            50,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n            num_stages=0)\n\n    with pytest.raises(AssertionError):\n        # In ResNet: 1 <= num_stages <= 4\n        FBAResnetDilated(\n            50,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n            num_stages=5)\n\n    with pytest.raises(AssertionError):\n        # len(strides) == len(dilations) == num_stages\n        FBAResnetDilated(\n            50,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n            strides=(1, ),\n            dilations=(1, 1),\n            num_stages=3)\n\n    with pytest.raises(TypeError):\n        # pretrained must be a string path\n        model = FBAResnetDilated(\n            50,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n        )\n        model.init_weights(pretrained=233)\n\n    model = FBAResnetDilated(\n        depth=50,\n        in_channels=11,\n        stem_channels=64,\n        base_channels=64,\n        conv_cfg=dict(type='ConvWS'),\n        norm_cfg=dict(type='GN', num_groups=32))\n\n    model.init_weights()\n    model.train()\n\n    input = _demo_inputs((1, 14, 320, 320))\n\n    output = model(input)\n\n    assert 'conv_out' in output.keys()\n    assert 'merged' in output.keys()\n    assert 'two_channel_trimap' in output.keys()\n\n    assert isinstance(output['conv_out'], list)\n    assert len(output['conv_out']) == 6\n\n    assert isinstance(output['merged'], torch.Tensor)\n    assert_tensor_with_shape(output['merged'], torch.Size([1, 3, 320, 320]))\n\n    assert isinstance(output['two_channel_trimap'], torch.Tensor)\n    assert_tensor_with_shape(output['two_channel_trimap'],\n                             torch.Size([1, 2, 320, 320]))\n    if torch.cuda.is_available():\n        model = FBAResnetDilated(\n            depth=50,\n            in_channels=11,\n            stem_channels=64,\n            base_channels=64,\n            conv_cfg=dict(type='ConvWS'),\n            norm_cfg=dict(type='GN', num_groups=32))\n        model.init_weights()\n        model.train()\n        model.cuda()\n\n        input = _demo_inputs((1, 14, 320, 320)).cuda()\n        output = model(input)\n\n        assert 'conv_out' in output.keys()\n        assert 'merged' in output.keys()\n        assert 'two_channel_trimap' in output.keys()\n\n        assert isinstance(output['conv_out'], list)\n        assert len(output['conv_out']) == 6\n\n        assert isinstance(output['merged'], torch.Tensor)\n        assert_tensor_with_shape(output['merged'], torch.Size([1, 3, 320,\n                                                               320]))\n\n        assert isinstance(output['two_channel_trimap'], torch.Tensor)\n        assert_tensor_with_shape(output['two_channel_trimap'],\n                                 torch.Size([1, 2, 320, 320]))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_flavr/test_flavr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import FLAVR, FLAVRNet\n\n\ndef test_flavr():\n\n    model = FLAVR(\n        generator=dict(\n            type='FLAVRNet',\n            num_input_frames=4,\n            num_output_frames=2,\n            mid_channels_list=[64, 32, 16, 8],\n            encoder_layers_list=[1, 1, 1, 1],\n            bias=False,\n            norm_cfg=None,\n            join_type='concat',\n            up_mode='transpose'),\n        pixel_loss=dict(type='L1Loss'),\n        required_frames=4)\n    assert isinstance(model, FLAVR)\n    assert isinstance(model.generator, FLAVRNet)\n    assert model.pixel_loss.__class__.__name__ == 'L1Loss'\n\n    input_tensors = torch.rand((1, 9, 3, 16, 16))\n    input_tensors = model.split_frames(input_tensors)\n    assert input_tensors.shape == (6, 4, 3, 16, 16), input_tensors.shape\n\n    output_tensors = torch.rand((6, 1, 3, 16, 16))\n    result = model.merge_frames(input_tensors, output_tensors)\n    assert len(result) == 15\n    assert result[0].shape == (16, 16, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_flavr/test_flavr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.flavr.flavr_net import UpConv3d\nfrom mmagic.registry import MODELS\n\n\ndef test_flavr_net():\n\n    model_cfg = dict(\n        type='FLAVRNet',\n        num_input_frames=4,\n        num_output_frames=2,\n        mid_channels_list=[64, 32, 16, 8],\n        encoder_layers_list=[1, 1, 1, 1],\n        bias=False,\n        norm_cfg=None,\n        join_type='concat',\n        up_mode='transpose')\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'FLAVRNet'\n\n    # prepare data\n    inputs = torch.rand(1, 4, 3, 256, 256)\n    target = torch.rand(1, 2, 3, 256, 256)\n\n    # test on cpu\n    output = model(inputs)\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == target.shape\n\n    out = model.decoder._join_tensors(inputs, inputs)\n    assert out.shape == (1, 8, 3, 256, 256)\n\n    conv3d = UpConv3d(4, 4, 1, 1, 1, up_mode='trilinear', batchnorm=True)\n    out = conv3d(inputs)\n    assert out.shape == (1, 4, 3, 512, 512)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        target = target.cuda()\n        output = model(inputs)\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == target.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_gca/test_gca.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport numpy as np\nimport torch\nfrom mmengine.config import ConfigDict\n\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef _demo_input_train(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    alpha = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    ori_merged = torch.from_numpy(\n        np.random.random(color_shape).astype(np.float32))\n    fg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    bg = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    if cuda:\n        merged = merged.cuda()\n        trimap = trimap.cuda()\n        alpha = alpha.cuda()\n        ori_merged = ori_merged.cuda()\n        fg = fg.cuda()\n        bg = bg.cuda()\n\n    inputs = torch.cat((merged, trimap), dim=1)\n    data_samples = []\n    for a, m, f, b in zip(alpha, ori_merged, fg, bg):\n        ds = DataSample()\n\n        ds.gt_alpha = a\n        ds.gt_merged = m\n        ds.gt_fg = f\n        ds.gt_bg = b\n        for k, v in meta.items():\n            ds.set_field(name=k, value=v, field_type='metainfo', dtype=None)\n\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef _demo_input_test(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n        test_trans (str): what test transformation is used in data pipeline.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    ori_shape = (img_shape[0], img_shape[1], 1)\n\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    ori_alpha = np.random.random(ori_shape).astype(np.float32)\n    ori_trimap = np.random.randint(256, size=ori_shape).astype(np.float32)\n\n    inputs = torch.cat((merged, trimap), dim=1)\n    if cuda:\n        inputs = inputs.cuda()\n\n    results = dict(\n        ori_alpha=ori_alpha, ori_trimap=ori_trimap, ori_merged_shape=img_shape)\n\n    data_samples = []\n    packinputs = PackInputs()\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef assert_pred_alpha(predictions, batch_size):\n    assert isinstance(predictions, list)\n    assert isinstance(predictions[0], DataSample)\n    pred_alpha = predictions[0].output.pred_alpha.data\n    assert isinstance(pred_alpha, torch.Tensor)\n    assert pred_alpha.dtype == torch.uint8\n    assert pred_alpha.shape[-2:] == batch_size\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\ndef test_gca():\n    model_cfg = ConfigDict(\n        type='GCA',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            proc_trimap='as_is',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(\n                type='ResGCAEncoder',\n                block='BasicBlock',\n                layers=[3, 4, 4, 2],\n                in_channels=6,\n                with_spectral_norm=True,\n            ),\n            decoder=dict(\n                type='ResGCADecoder',\n                block='BasicBlockDec',\n                layers=[2, 3, 3, 2],\n                with_spectral_norm=True)),\n        loss_alpha=dict(type='L1Loss'),\n        test_cfg=dict(\n            resize_method='pad',\n            resize_mode='reflect',\n            size_divisor=32,\n        ))\n\n    # test model forward in train mode\n    model = MODELS.build(model_cfg)\n    meta = {'format_trimap_to_onehot': True}\n    inputs, data_samples = _demo_input_train((64, 64), batch_size=2, meta=meta)\n    inputs6 = torch.cat((inputs, inputs[:, 3:, :, :], inputs[:, 3:, :, :]),\n                        dim=1)\n    outputs = model(inputs6, data_samples, mode='loss')\n    assert_dict_keys_equal(outputs, ['loss'])\n\n    if torch.cuda.is_available():\n        model = MODELS.build(model_cfg)\n        model.cuda()\n        inputs, data_samples = _demo_input_train((64, 64),\n                                                 batch_size=2,\n                                                 cuda=True,\n                                                 meta=meta)\n        inputs6 = torch.cat((inputs, inputs[:, 3:, :, :], inputs[:, 3:, :, :]),\n                            dim=1)\n        outputs = model(inputs6, data_samples, mode='loss')\n        assert_dict_keys_equal(outputs, ['loss'])\n\n    # test model forward in test mode\n    with torch.no_grad():\n        model_cfg.backbone.encoder.in_channels = 4\n        model = MODELS.build(model_cfg)\n        inputs = _demo_input_test((48, 48), meta=meta)\n        outputs = model(*inputs, mode='predict')\n        assert_pred_alpha(outputs, (48, 48))\n\n        if torch.cuda.is_available():\n            model = MODELS.build(model_cfg)\n            model.cuda()\n            inputs = _demo_input_test((48, 48), cuda=True, meta=meta)\n            outputs = model(*inputs, mode='predict')\n            assert_pred_alpha(outputs, (48, 48))\n\n    # test forward_dummy\n    model.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    model.forward(inputs)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_gca/test_gca_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.gca import GCAModule, ResGCAEncoder\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef test_res_gca_encoder():\n    \"\"\"Test resnet encoder with shortcut and guided contextual attention.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResGCAEncoder('UnknownBlock', [3, 4, 4, 2], 3)\n\n    target_shape = [(2, 32, 64, 64), (2, 32, 32, 32), (2, 64, 16, 16),\n                    (2, 128, 8, 8), (2, 256, 4, 4)]\n    # target shape for model with late downsample\n    target_late_ds = [(2, 32, 64, 64), (2, 64, 32, 32), (2, 64, 16, 16),\n                      (2, 128, 8, 8), (2, 256, 4, 4)]\n\n    model = ResGCAEncoder('BasicBlock', [3, 4, 4, 2], 4)\n    model.init_weights()\n    model.train()\n    # trimap has 1 channels\n    img = _demo_inputs((2, 4, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n    assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n    for i in range(5):\n        assert_tensor_with_shape(outputs[f'feat{i+1}'], target_shape[i])\n\n    model = ResGCAEncoder('BasicBlock', [3, 4, 4, 2], 6)\n    model.init_weights()\n    model.train()\n    # both image and trimap has 3 channels\n    img = _demo_inputs((2, 6, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n    assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n    for i in range(5):\n        assert_tensor_with_shape(outputs[f'feat{i+1}'], target_shape[i])\n\n    # test resnet shortcut encoder with late downsample\n    model = ResGCAEncoder('BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n    model.init_weights()\n    model.train()\n    # both image and trimap has 3 channels\n    img = _demo_inputs((2, 6, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n    assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n    for i in range(5):\n        assert_tensor_with_shape(outputs[f'feat{i+1}'], target_late_ds[i])\n\n    if torch.cuda.is_available():\n        # repeat above code again\n        model = ResGCAEncoder('BasicBlock', [3, 4, 4, 2], 4)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # trimap has 1 channels\n        img = _demo_inputs((2, 4, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n        assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n        for i in range(5):\n            assert_tensor_with_shape(outputs[f'feat{i+1}'], target_shape[i])\n\n        model = ResGCAEncoder('BasicBlock', [3, 4, 4, 2], 6)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # both image and trimap has 3 channels\n        img = _demo_inputs((2, 6, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n        assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n        for i in range(5):\n            assert_tensor_with_shape(outputs[f'feat{i+1}'], target_shape[i])\n\n        # test resnet shortcut encoder with late downsample\n        model = ResGCAEncoder(\n            'BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # both image and trimap has 3 channels\n        img = _demo_inputs((2, 6, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['img_feat'], (2, 128, 8, 8))\n        assert_tensor_with_shape(outputs['unknown'], (2, 1, 8, 8))\n        for i in range(5):\n            assert_tensor_with_shape(outputs[f'feat{i+1}'], target_late_ds[i])\n\n\ndef test_gca_module():\n    img_feat = torch.rand(1, 128, 64, 64)\n    alpha_feat = torch.rand(1, 128, 64, 64)\n    unknown = None\n    gca = GCAModule(128, 128, rate=1)\n    output = gca(img_feat, alpha_feat, unknown)\n    assert output.shape == (1, 128, 64, 64)\n\n    img_feat = torch.rand(1, 128, 64, 64)\n    alpha_feat = torch.rand(1, 128, 64, 64)\n    unknown = torch.rand(1, 1, 64, 64)\n    gca = GCAModule(128, 128, rate=2)\n    output = gca(img_feat, alpha_feat, unknown)\n    assert output.shape == (1, 128, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_gca/test_resgca_dec.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.gca import (ResGCADecoder, ResGCAEncoder, ResNetDec,\n                                       ResNetEnc, ResShortcutDec,\n                                       ResShortcutEnc)\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef test_resnet_decoder():\n    \"\"\"Test resnet decoder.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResNetDec('UnknowBlock', [2, 3, 3, 2], 512)\n\n    model = ResNetDec('BasicBlockDec', [2, 3, 3, 2], 512, kernel_size=5)\n    model.init_weights()\n    model.train()\n    encoder = ResNetEnc('BasicBlock', [2, 4, 4, 2], 6)\n    img = _demo_inputs((1, 6, 64, 64))\n    feat = encoder(img)\n    prediction = model(feat)\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    model = ResNetDec(\n        'BasicBlockDec', [2, 3, 3, 2], 512, with_spectral_norm=True)\n    assert hasattr(model.conv1.conv, 'weight_orig')\n    model.init_weights()\n    model.train()\n    encoder = ResNetEnc('BasicBlock', [2, 4, 4, 2], 6)\n    img = _demo_inputs((1, 6, 64, 64))\n    feat = encoder(img)\n    prediction = model(feat)\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        model = ResNetDec('BasicBlockDec', [2, 3, 3, 2], 512, kernel_size=5)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        encoder = ResNetEnc('BasicBlock', [2, 4, 4, 2], 6)\n        encoder.cuda()\n        img = _demo_inputs((1, 6, 64, 64)).cuda()\n        feat = encoder(img)\n        prediction = model(feat)\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n        model = ResNetDec(\n            'BasicBlockDec', [2, 3, 3, 2], 512, with_spectral_norm=True)\n        assert hasattr(model.conv1.conv, 'weight_orig')\n        model.init_weights()\n        model.train()\n        model.cuda()\n        encoder = ResNetEnc('BasicBlock', [2, 4, 4, 2], 6)\n        encoder.cuda()\n        img = _demo_inputs((1, 6, 64, 64)).cuda()\n        feat = encoder(img)\n        prediction = model(feat)\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n\ndef test_res_shortcut_decoder():\n    \"\"\"Test resnet decoder with shortcut.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResShortcutDec('UnknowBlock', [2, 3, 3, 2], 512)\n\n    model = ResShortcutDec('BasicBlockDec', [2, 3, 3, 2], 512)\n    model.init_weights()\n    model.train()\n\n    encoder = ResShortcutEnc('BasicBlock', [2, 4, 4, 2], 6)\n    img = _demo_inputs((1, 6, 64, 64))\n    outputs = encoder(img)\n    prediction = model(outputs)\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        model = ResShortcutDec('BasicBlockDec', [2, 3, 3, 2], 512)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        encoder = ResShortcutEnc('BasicBlock', [2, 4, 4, 2], 6)\n        encoder.cuda()\n        img = _demo_inputs((1, 6, 64, 64)).cuda()\n        outputs = encoder(img)\n        prediction = model(outputs)\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n\ndef test_res_gca_decoder():\n    \"\"\"Test resnet decoder with shortcut and guided contextual attention.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResGCADecoder('UnknowBlock', [2, 3, 3, 2], 512)\n\n    model = ResGCADecoder('BasicBlockDec', [2, 3, 3, 2], 512)\n    model.init_weights()\n    model.train()\n\n    encoder = ResGCAEncoder('BasicBlock', [2, 4, 4, 2], 6)\n    img = _demo_inputs((2, 6, 32, 32))\n    outputs = encoder(img)\n    prediction = model(outputs)\n    assert_tensor_with_shape(prediction, torch.Size([2, 1, 32, 32]))\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        model = ResGCADecoder('BasicBlockDec', [2, 3, 3, 2], 512)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        encoder = ResGCAEncoder('BasicBlock', [2, 4, 4, 2], 6)\n        encoder.cuda()\n        img = _demo_inputs((2, 6, 32, 32)).cuda()\n        outputs = encoder(img)\n        prediction = model(outputs)\n        assert_tensor_with_shape(prediction, torch.Size([2, 1, 32, 32]))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_gca/test_resgca_enc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.gca import ResNetEnc, ResShortcutEnc\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef test_resnet_encoder():\n    \"\"\"Test resnet encoder.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResNetEnc('UnknownBlock', [3, 4, 4, 2], 3)\n\n    with pytest.raises(TypeError):\n        model = ResNetEnc('BasicBlock', [3, 4, 4, 2], 3)\n        model.init_weights(list())\n\n    model = ResNetEnc('BasicBlock', [3, 4, 4, 2], 4, with_spectral_norm=True)\n    assert hasattr(model.conv1.conv, 'weight_orig')\n    model.init_weights()\n    model.train()\n    # trimap has 1 channels\n    img = _demo_inputs((2, 4, 64, 64))\n    feat = model(img)\n    assert_tensor_with_shape(feat, torch.Size([2, 512, 2, 2]))\n\n    # test resnet encoder with late downsample\n    model = ResNetEnc('BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n    model.init_weights()\n    model.train()\n    # both image and trimap has 3 channels\n    img = _demo_inputs((2, 6, 64, 64))\n    feat = model(img)\n    assert_tensor_with_shape(feat, torch.Size([2, 512, 2, 2]))\n\n    if torch.cuda.is_available():\n        # repeat above code again\n        model = ResNetEnc(\n            'BasicBlock', [3, 4, 4, 2], 4, with_spectral_norm=True)\n        assert hasattr(model.conv1.conv, 'weight_orig')\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # trimap has 1 channels\n        img = _demo_inputs((2, 4, 64, 64)).cuda()\n        feat = model(img)\n        assert_tensor_with_shape(feat, torch.Size([2, 512, 2, 2]))\n\n        # test resnet encoder with late downsample\n        model = ResNetEnc('BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # both image and trimap has 3 channels\n        img = _demo_inputs((2, 6, 64, 64)).cuda()\n        feat = model(img)\n        assert_tensor_with_shape(feat, torch.Size([2, 512, 2, 2]))\n\n\ndef test_res_shortcut_encoder():\n    \"\"\"Test resnet encoder with shortcut.\"\"\"\n    with pytest.raises(NotImplementedError):\n        ResShortcutEnc('UnknownBlock', [3, 4, 4, 2], 3)\n\n    target_shape = [(2, 32, 64, 64), (2, 32, 32, 32), (2, 64, 16, 16),\n                    (2, 128, 8, 8), (2, 256, 4, 4)]\n    # target shape for model with late downsample\n    target_late_ds_shape = [(2, 32, 64, 64), (2, 64, 32, 32), (2, 64, 16, 16),\n                            (2, 128, 8, 8), (2, 256, 4, 4)]\n\n    model = ResShortcutEnc(\n        'BasicBlock', [3, 4, 4, 2], 4, with_spectral_norm=True)\n    assert hasattr(model.conv1.conv, 'weight_orig')\n    model.init_weights()\n    model.train()\n    # trimap has 1 channels\n    img = _demo_inputs((2, 4, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['feat1'], target_shape[0])\n    assert_tensor_with_shape(outputs['feat2'], target_shape[1])\n    assert_tensor_with_shape(outputs['feat3'], target_shape[2])\n    assert_tensor_with_shape(outputs['feat4'], target_shape[3])\n    assert_tensor_with_shape(outputs['feat5'], target_shape[4])\n\n    model = ResShortcutEnc('BasicBlock', [3, 4, 4, 2], 6)\n    model.init_weights()\n    model.train()\n    # both image and trimap has 3 channels\n    img = _demo_inputs((2, 6, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['feat1'], target_shape[0])\n    assert_tensor_with_shape(outputs['feat2'], target_shape[1])\n    assert_tensor_with_shape(outputs['feat3'], target_shape[2])\n    assert_tensor_with_shape(outputs['feat4'], target_shape[3])\n    assert_tensor_with_shape(outputs['feat5'], target_shape[4])\n\n    # test resnet shortcut encoder with late downsample\n    model = ResShortcutEnc('BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n    model.init_weights()\n    model.train()\n    # both image and trimap has 3 channels\n    img = _demo_inputs((2, 6, 64, 64))\n    outputs = model(img)\n    assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n    assert_tensor_with_shape(outputs['feat1'], target_late_ds_shape[0])\n    assert_tensor_with_shape(outputs['feat2'], target_late_ds_shape[1])\n    assert_tensor_with_shape(outputs['feat3'], target_late_ds_shape[2])\n    assert_tensor_with_shape(outputs['feat4'], target_late_ds_shape[3])\n    assert_tensor_with_shape(outputs['feat5'], target_late_ds_shape[4])\n\n    if torch.cuda.is_available():\n        # repeat above code again\n        model = ResShortcutEnc(\n            'BasicBlock', [3, 4, 4, 2], 4, with_spectral_norm=True)\n        assert hasattr(model.conv1.conv, 'weight_orig')\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # trimap has 1 channels\n        img = _demo_inputs((2, 4, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['feat1'], target_shape[0])\n        assert_tensor_with_shape(outputs['feat2'], target_shape[1])\n        assert_tensor_with_shape(outputs['feat3'], target_shape[2])\n        assert_tensor_with_shape(outputs['feat4'], target_shape[3])\n        assert_tensor_with_shape(outputs['feat5'], target_shape[4])\n\n        model = ResShortcutEnc('BasicBlock', [3, 4, 4, 2], 6)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # both image and trimap has 3 channels\n        img = _demo_inputs((2, 6, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['feat1'], target_shape[0])\n        assert_tensor_with_shape(outputs['feat2'], target_shape[1])\n        assert_tensor_with_shape(outputs['feat3'], target_shape[2])\n        assert_tensor_with_shape(outputs['feat4'], target_shape[3])\n        assert_tensor_with_shape(outputs['feat5'], target_shape[4])\n\n        # test resnet shortcut encoder with late downsample\n        model = ResShortcutEnc(\n            'BasicBlock', [3, 4, 4, 2], 6, late_downsample=True)\n        model.init_weights()\n        model.train()\n        model.cuda()\n        # both image and trimap has 3 channels\n        img = _demo_inputs((2, 6, 64, 64)).cuda()\n        outputs = model(img)\n        assert_tensor_with_shape(outputs['out'], (2, 512, 2, 2))\n        assert_tensor_with_shape(outputs['feat1'], target_late_ds_shape[0])\n        assert_tensor_with_shape(outputs['feat2'], target_late_ds_shape[1])\n        assert_tensor_with_shape(outputs['feat3'], target_late_ds_shape[2])\n        assert_tensor_with_shape(outputs['feat4'], target_late_ds_shape[3])\n        assert_tensor_with_shape(outputs['feat5'], target_late_ds_shape[4])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ggan/test_ggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import GGAN, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='DCGANGenerator', noise_size=10, output_scale=16, base_channels=16)\ndiscriminator = dict(\n    type='DCGANDiscriminator', input_scale=16, output_scale=4, out_channels=1)\n\n\nclass TestGGAN(TestCase):\n\n    def test_init(self):\n        gan = GGAN(\n            noise_size=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator)\n\n        self.assertIsInstance(gan, GGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = GGAN(\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = GGAN(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = GGAN(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('test-ggan')\n        gan = GGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_glean/test_glean_styleganv2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import SRGAN, DataPreprocessor, GLEANStyleGANv2\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Discriminator\nfrom mmagic.models.losses import (GANLoss, MSELoss, PerceptualLoss,\n                                  PerceptualVGG)\nfrom mmagic.structures import DataSample\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_glean(init_weights):\n\n    model = SRGAN(\n        generator=dict(\n            type='GLEANStyleGANv2', in_size=16, out_size=64, style_channels=4),\n        discriminator=dict(type='StyleGANv2Discriminator', in_size=64),\n        pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={'21': 1.0},\n            vgg_type='vgg16',\n            perceptual_weight=1e-2,\n            style_weight=0,\n            norm_img=True,\n            criterion='mse',\n            pretrained='torchvision://vgg16'),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=1e-2,\n            real_label_val=1.0,\n            fake_label_val=0),\n        train_cfg=None,\n        test_cfg=None,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, SRGAN)\n    assert isinstance(model.generator, GLEANStyleGANv2)\n    assert isinstance(model.discriminator, StyleGAN2Discriminator)\n    assert isinstance(model.pixel_loss, MSELoss)\n    assert isinstance(model.perceptual_loss, PerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 16, 16)\n    target = torch.rand(3, 64, 64)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_pix', 'loss_perceptual', 'loss_gan', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 64, 64)\n\n    # feat\n    output = model(torch.rand(1, 3, 16, 16), mode='tensor')\n    assert output.shape == (1, 3, 64, 64)\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_glide/test_glide.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nimport unittest\nfrom unittest import TestCase\n\nimport torch\n\nfrom mmagic.models.diffusion_schedulers import EditDDIMScheduler\nfrom mmagic.utils import register_all_modules\nfrom projects.glide.models import Glide, SuperResText2ImUNet, Text2ImUNet\n\nregister_all_modules()\n\n\nclass TestGLIDE(TestCase):\n\n    def setUp(self):\n        # low resolution cfg\n        unet_cfg = dict(\n            image_size=64,\n            base_channels=192,\n            in_channels=3,\n            resblocks_per_downsample=3,\n            attention_res=(32, 16, 8),\n            norm_cfg=dict(type='GN32', num_groups=32),\n            dropout=0.1,\n            num_classes=0,\n            use_fp16=False,\n            resblock_updown=True,\n            attention_cfg=dict(\n                type='MultiHeadAttentionBlock',\n                num_heads=1,\n                num_head_channels=64,\n                use_new_attention_order=False,\n                encoder_channels=512),\n            use_scale_shift_norm=True,\n            text_ctx=128,\n            xf_width=512,\n            xf_layers=16,\n            xf_heads=8,\n            xf_final_ln=True,\n            xf_padding=True,\n        )\n        diffusion_scheduler_cfg = dict(\n            variance_type='learned_range', beta_schedule='squaredcos_cap_v2')\n\n        # unet\n        self.unet = Text2ImUNet(**unet_cfg)\n        # diffusion_scheduler\n        self.diffusion_scheduler = EditDDIMScheduler(**diffusion_scheduler_cfg)\n\n        # high resolution cfg\n        unet_up_cfg = dict(\n            image_size=256,\n            base_channels=192,\n            in_channels=3,\n            output_cfg=dict(var='FIXED'),\n            resblocks_per_downsample=2,\n            attention_res=(32, 16, 8),\n            norm_cfg=dict(type='GN32', num_groups=32),\n            dropout=0.1,\n            num_classes=0,\n            use_fp16=False,\n            resblock_updown=True,\n            attention_cfg=dict(\n                type='MultiHeadAttentionBlock',\n                num_heads=1,\n                num_head_channels=64,\n                use_new_attention_order=False,\n                encoder_channels=512),\n            use_scale_shift_norm=True,\n            text_ctx=128,\n            xf_width=512,\n            xf_layers=16,\n            xf_heads=8,\n            xf_final_ln=True,\n            xf_padding=True,\n        )\n        diffusion_scheduler_up_cfg = dict(\n            variance_type='learned_range', beta_schedule='linear')\n\n        # unet up\n        self.unet_up = SuperResText2ImUNet(**unet_up_cfg)\n        self.diffusion_scheduler_up = EditDDIMScheduler(\n            **diffusion_scheduler_up_cfg)\n\n    @unittest.skipIf(\n        'win' in platform.system().lower(),\n        reason='skip on windows due to limited RAM.')\n    def test_init(self):\n        self.GLIDE = Glide(\n            unet=self.unet,\n            diffusion_scheduler=self.diffusion_scheduler,\n            unet_up=self.unet_up,\n            diffusion_scheduler_up=self.diffusion_scheduler_up)\n\n    @unittest.skipIf(\n        ('win' in platform.system().lower())\n        or (not torch.cuda.is_available()),\n        reason='skip on windows and cpu due to limited RAM.')\n    def test_infer(self):\n        # test infer resolution\n        text_prompts = 'clouds surround the mountains and palaces,sunshine'\n        image = self.GLIDE.infer(\n            prompt=text_prompts, show_progress=True,\n            num_inference_steps=2)['samples']\n        assert image.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\n\ndef test_gl_decoder():\n    register_all_modules()\n    input_x = torch.randn(1, 256, 64, 64)\n    template_cfg = dict(type='GLDecoder')\n\n    gl_decoder = MODELS.build(template_cfg)\n    output = gl_decoder(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n    cfg_copy = template_cfg.copy()\n    cfg_copy['out_act'] = 'sigmoid'\n    gl_decoder = MODELS.build(cfg_copy)\n    output = gl_decoder(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n    with pytest.raises(ValueError):\n        # conv_cfg must be a dict or None\n        cfg_copy = template_cfg.copy()\n        cfg_copy['out_act'] = 'relu'\n        gl_decoder = MODELS.build(cfg_copy)\n        output = gl_decoder(input_x)\n\n    if torch.cuda.is_available():\n        gl_decoder = MODELS.build(template_cfg)\n        gl_decoder = gl_decoder.cuda()\n        output = gl_decoder(input_x.cuda())\n        assert output.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_dilation.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.archs import SimpleGatedConvModule\nfrom mmagic.models.editors.global_local import GLDilationNeck\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_gl_dilation_neck():\n    x = torch.rand((2, 8, 64, 64))\n    template_cfg = dict(type='GLDilationNeck', in_channels=8)\n\n    neck = MODELS.build(template_cfg)\n    res = neck(x)\n    assert res.shape == (2, 8, 64, 64)\n\n    if torch.cuda.is_available():\n        neck = GLDilationNeck(in_channels=8).cuda()\n        x = torch.rand((2, 8, 64, 64)).cuda()\n        res = neck(x)\n        assert res.shape == (2, 8, 64, 64)\n\n        neck = GLDilationNeck(in_channels=8, conv_type='gated_conv').cuda()\n        res = neck(x)\n        assert isinstance(neck.dilation_convs[0], SimpleGatedConvModule)\n        assert res.shape == (2, 8, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\ndef test_gl_discs():\n    global_disc_cfg = dict(\n        in_channels=3,\n        max_channels=512,\n        fc_in_channels=512 * 4 * 4,\n        fc_out_channels=1024,\n        num_convs=6,\n        norm_cfg=dict(type='BN'))\n    local_disc_cfg = dict(\n        in_channels=3,\n        max_channels=512,\n        fc_in_channels=512 * 4 * 4,\n        fc_out_channels=1024,\n        num_convs=5,\n        norm_cfg=dict(type='BN'))\n    gl_disc_cfg = dict(\n        type='GLDiscs',\n        global_disc_cfg=global_disc_cfg,\n        local_disc_cfg=local_disc_cfg)\n    gl_discs = MODELS.build(gl_disc_cfg)\n    gl_discs.init_weights()\n\n    input_g = torch.randn(1, 3, 256, 256)\n    input_l = torch.randn(1, 3, 128, 128)\n    output = gl_discs((input_g, input_l))\n    assert output.shape == (1, 1)\n\n    with pytest.raises(TypeError):\n        gl_discs.init_weights(pretrained=dict(igccc=777))\n\n    if torch.cuda.is_available():\n        gl_discs = gl_discs.cuda()\n        input_g = torch.randn(1, 3, 256, 256).cuda()\n        input_l = torch.randn(1, 3, 128, 128).cuda()\n        output = gl_discs((input_g, input_l))\n        assert output.shape == (1, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\n\ndef test_gl_encoder():\n    register_all_modules()\n    input_x = torch.randn(1, 4, 256, 256)\n    template_cfg = dict(type='GLEncoder')\n\n    gl_encoder = MODELS.build(template_cfg)\n    output = gl_encoder(input_x)\n    assert output.shape == (1, 256, 64, 64)\n\n    if torch.cuda.is_available():\n        gl_encoder = MODELS.build(template_cfg)\n        gl_encoder = gl_encoder.cuda()\n        output = gl_encoder(input_x.cuda())\n        assert output.shape == (1, 256, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\n\ndef test_gl_encdec():\n    register_all_modules()\n    input_x = torch.randn(1, 4, 256, 256)\n    template_cfg = dict(type='GLEncoderDecoder')\n\n    gl_encdec = MODELS.build(template_cfg)\n    gl_encdec.init_weights()\n    output = gl_encdec(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n    cfg_ = template_cfg.copy()\n    cfg_['decoder'] = dict(type='GLDecoder', out_act='sigmoid')\n    gl_encdec = MODELS.build(cfg_)\n    output = gl_encdec(input_x)\n    assert output.shape == (1, 3, 256, 256)\n\n    with pytest.raises(ValueError):\n        cfg_ = template_cfg.copy()\n        cfg_['decoder'] = dict(type='GLDecoder', out_act='igccc')\n        gl_encdec = MODELS.build(cfg_)\n\n    with pytest.raises(TypeError):\n        gl_encdec.init_weights(pretrained=dict(igccc=4396))\n\n    if torch.cuda.is_available():\n        gl_encdec = MODELS.build(template_cfg)\n        gl_encdec.init_weights()\n        gl_encdec = gl_encdec.cuda()\n        output = gl_encdec(input_x.cuda())\n        assert output.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_global_local/test_gl_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom os.path import dirname, join\n\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\ndef test_gl_inpaintor():\n    register_all_modules()\n\n    config_file = join(dirname(__file__), '../../..', 'configs', 'gl_test.py')\n    cfg = Config.fromfile(config_file)\n\n    gl = MODELS.build(cfg.model)\n\n    assert gl.__class__.__name__ == 'GLInpaintor'\n\n    if torch.cuda.is_available():\n        gl.cuda()\n    gt_img = torch.randn(3, 256, 256)\n    mask = torch.zeros_like(gt_img)[0:1, ...]\n    mask[..., 100:210, 100:210] = 1.\n    masked_img = gt_img.unsqueeze(0) * (1. - mask)\n    mask_bbox = [100, 100, 110, 110]\n    data_batch = {\n        'inputs':\n        masked_img,\n        'data_samples': [\n            DataSample(\n                metainfo=dict(mask_bbox=mask_bbox),\n                mask=mask,\n                gt_img=gt_img,\n            )\n        ]\n    }\n\n    optim_g = torch.optim.SGD(gl.generator.parameters(), lr=0.1)\n    optim_d = torch.optim.SGD(gl.disc.parameters(), lr=0.1)\n    optim_dict = dict(\n        generator=OptimWrapper(optim_g), disc=OptimWrapper(optim_d))\n\n    for i in range(5):\n        log_vars = gl.train_step(data_batch, optim_dict)\n\n        if i <= 2:\n            assert 'loss_l1_hole' in log_vars\n            assert 'fake_loss' not in log_vars\n            assert 'real_loss' not in log_vars\n            assert 'loss_g_fake' not in log_vars\n        elif i == 3:\n            assert 'loss_l1_hole' not in log_vars\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_g_fake' not in log_vars\n        else:\n            assert 'loss_l1_hole' in log_vars\n            assert 'fake_loss' in log_vars\n            assert 'real_loss' in log_vars\n            assert 'loss_g_fake' in log_vars\n\n    gl_dirty = MODELS.build(cfg.model_dirty)\n    if torch.cuda.is_available():\n        gl_dirty.cuda()\n    res, loss = gl_dirty.generator_loss(gt_img, gt_img, gt_img, gt_img, mask,\n                                        masked_img)\n    assert len(loss) == 0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_guided_diffusion/test_adm.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport pytest\nimport torch\n\nfrom mmagic.models import AblatedDiffusionModel\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestAdm(TestCase):\n\n    def setup_class(cls):\n        # test init\n        cls.model = AblatedDiffusionModel(\n            data_preprocessor=dict(type='DataPreprocessor'),\n            unet=dict(\n                type='DenoisingUnet',\n                image_size=64,\n                in_channels=3,\n                base_channels=192,\n                resblocks_per_downsample=3,\n                attention_res=(32, 16, 8),\n                norm_cfg=dict(type='GN32', num_groups=32),\n                dropout=0.1,\n                num_classes=1000,\n                use_fp16=False,\n                resblock_updown=True,\n                attention_cfg=dict(\n                    type='MultiHeadAttentionBlock',\n                    num_heads=4,\n                    num_head_channels=64,\n                    use_new_attention_order=True),\n                use_scale_shift_norm=True),\n            diffusion_scheduler=dict(\n                type='EditDDIMScheduler',\n                variance_type='learned_range',\n                beta_schedule='squaredcos_cap_v2'),\n            rgb2bgr=True,\n            use_fp16=False)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_infer(self):\n        # test no label infer\n        self.model.cuda()\n        samples = self.model.infer(\n            init_image=None,\n            batch_size=1,\n            num_inference_steps=5,\n            labels=None,\n            classifier_scale=0.0,\n            show_progress=False)['samples']\n        assert samples.shape == (1, 3, 64, 64)\n        # test classifier guidance\n        samples = self.model.infer(\n            init_image=None,\n            batch_size=1,\n            num_inference_steps=5,\n            labels=333,\n            classifier_scale=1.0,\n            show_progress=False)['samples']\n        assert samples.shape == (1, 3, 64, 64)\n        # test with ddpm scheduler\n        scheduler_kwargs = dict(\n            type='EditDDPMScheduler',\n            variance_type='learned_range',\n            num_train_timesteps=5)\n        # test no label infer\n        samples = self.model.infer(\n            scheduler_kwargs=scheduler_kwargs,\n            init_image=None,\n            batch_size=1,\n            num_inference_steps=5,\n            labels=None,\n            classifier_scale=0.0,\n            show_progress=False)['samples']\n        assert samples.shape == (1, 3, 64, 64)\n        # test classifier guidance\n        samples = self.model.infer(\n            scheduler_kwargs=scheduler_kwargs,\n            init_image=None,\n            batch_size=1,\n            num_inference_steps=5,\n            labels=333,\n            classifier_scale=1.0,\n            show_progress=False)['samples']\n        assert samples.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_iconvsr/test_iconvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import IconVSRNet\n\n\ndef test_iconvsr():\n    \"\"\"Test IconVSRNet.\"\"\"\n\n    iconvsr = IconVSRNet(\n        mid_channels=64,\n        num_blocks=1,\n        keyframe_stride=5,\n        padding=2,\n        spynet_pretrained=None,\n        edvr_pretrained=None)\n\n    input_tensor = torch.rand(1, 5, 3, 64, 64)\n    output = iconvsr(input_tensor)\n    assert output.shape == (1, 5, 3, 256, 256)\n    assert not iconvsr._raised_warning\n\n    input_tensor = torch.rand(1, 5, 3, 16, 16)\n    output = iconvsr(input_tensor)\n    assert output.shape == (1, 5, 3, 64, 64)\n    assert iconvsr._raised_warning\n\n    # spynet_pretrained should be str or None\n    with pytest.raises(TypeError):\n        iconvsr = IconVSRNet(\n            mid_channels=64,\n            num_blocks=1,\n            keyframe_stride=5,\n            padding=2,\n            spynet_pretrained=123,\n            edvr_pretrained=None)\n\n    # edvr_pretrained should be str or None\n    with pytest.raises(TypeError):\n        iconvsr = IconVSRNet(\n            mid_channels=64,\n            num_blocks=1,\n            keyframe_stride=5,\n            padding=2,\n            spynet_pretrained=None,\n            edvr_pretrained=123)\n\n    if torch.cuda.is_available():\n        iconvsr = IconVSRNet(\n            mid_channels=64,\n            num_blocks=1,\n            keyframe_stride=5,\n            padding=2,\n            spynet_pretrained=None,\n            edvr_pretrained=None).cuda()\n\n        # input_tensor = torch.rand(1, 5, 3, 64, 64).cuda()\n        input_tensor = torch.rand(1, 5, 3, 16, 16).cuda()\n        output = iconvsr(input_tensor)\n        # assert output.shape == (1, 5, 3, 256, 256)\n        assert output.shape == (1, 5, 3, 64, 64)\n\n        # spynet_pretrained should be str or None\n        with pytest.raises(TypeError):\n            iconvsr = IconVSRNet(\n                mid_channels=64,\n                num_blocks=1,\n                keyframe_stride=5,\n                padding=2,\n                spynet_pretrained=123,\n                edvr_pretrained=None).cuda()\n\n        # edvr_pretrained should be str or None\n        with pytest.raises(TypeError):\n            iconvsr = IconVSRNet(\n                mid_channels=64,\n                num_blocks=1,\n                keyframe_stride=5,\n                padding=2,\n                spynet_pretrained=None,\n                edvr_pretrained=123).cuda()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_indexnet/test_indexnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport torch\nfrom mmengine.config import ConfigDict\n\nfrom mmagic.datasets.transforms import PackInputs\nfrom mmagic.models.editors import IndexedUpsample\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\ndef _demo_input_train(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    ori_shape = (img_shape[0], img_shape[1], 1)\n\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    inputs = torch.cat((merged, trimap), dim=1)\n    if cuda:\n        inputs = inputs.cuda()\n\n    results = dict(\n        alpha=np.random.random(ori_shape).astype(np.float32),\n        merged=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32),\n        fg=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32),\n        bg=np.random.random(\n            (img_shape[0], img_shape[1], 3)).astype(np.float32),\n    )\n\n    data_samples = []\n    packinputs = PackInputs()\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef _demo_input_test(img_shape, batch_size=1, cuda=False, meta={}):\n    \"\"\"Create a superset of inputs needed to run backbone.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n        test_trans (str): what test transformation is used in data pipeline.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    ori_shape = (img_shape[0], img_shape[1], 1)\n\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    trimap = torch.from_numpy(\n        np.random.randint(255, size=gray_shape).astype(np.float32))\n    inputs = torch.cat((merged, trimap), dim=1)\n    if cuda:\n        inputs = inputs.cuda()\n\n    results = dict(\n        ori_alpha=np.random.random(ori_shape).astype(np.float32),\n        ori_trimap=np.random.randint(256, size=ori_shape).astype(np.float32),\n        ori_merged_shape=img_shape)\n\n    data_samples = []\n    packinputs = PackInputs()\n    for _ in range(batch_size):\n        ds = packinputs(results)['data_samples']\n        if cuda:\n            ds = ds.cuda()\n        data_samples.append(ds)\n\n    data_samples = DataSample.stack(data_samples)\n    return inputs, data_samples\n\n\ndef assert_pred_alpha(predictions, batch_size):\n    assert isinstance(predictions, list)\n    assert isinstance(predictions[0], DataSample)\n    pred_alpha = predictions[0].output.pred_alpha.data\n    assert isinstance(pred_alpha, torch.Tensor)\n    assert pred_alpha.dtype == torch.uint8\n    assert pred_alpha.shape[-2:] == batch_size\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\ndef test_indexnet():\n    register_all_modules()\n    model_cfg = ConfigDict(\n        type='IndexNet',\n        data_preprocessor=dict(\n            type='MattorPreprocessor',\n            mean=[123.675, 116.28, 103.53],\n            std=[58.395, 57.12, 57.375],\n            proc_trimap='rescale_to_zero_one',\n        ),\n        backbone=dict(\n            type='SimpleEncoderDecoder',\n            encoder=dict(\n                type='IndexNetEncoder',\n                in_channels=4,\n                freeze_bn=True,\n            ),\n            decoder=dict(type='IndexNetDecoder')),\n        loss_alpha=dict(\n            type='CharbonnierLoss', loss_weight=0.5, sample_wise=True),\n        loss_comp=dict(\n            type='CharbonnierCompLoss', loss_weight=1.5, sample_wise=True),\n        test_cfg=dict(\n            resize_method='interp',\n            resize_mode='bicubic',\n            size_divisor=32,\n        ),\n    )\n\n    model_cfg.backbone.encoder.init_cfg = None\n\n    # test indexnet inference\n    with torch.no_grad():\n        indexnet = MODELS.build(model_cfg)\n        indexnet.eval()\n        input_test = _demo_input_test((48, 48))\n        output_test = indexnet(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n        # test inference with gpu\n        if torch.cuda.is_available():\n            indexnet = MODELS.build(model_cfg).cuda()\n            indexnet.eval()\n            input_test = _demo_input_test((48, 48), cuda=True)\n            output_test = indexnet(*input_test, mode='predict')\n        assert_pred_alpha(output_test, (48, 48))\n\n    # test forward train though we do not guarantee the training for present\n    model_cfg.loss_alpha = None\n    model_cfg.loss_comp = dict(type='L1CompositionLoss')\n    indexnet = MODELS.build(model_cfg)\n    input_train = _demo_input_train((64, 64), batch_size=2)\n    output_train = indexnet(*input_train, mode='loss')\n    # assert output_train['num_samples'] == 2\n    assert_dict_keys_equal(output_train, ['loss_comp'])\n\n    if torch.cuda.is_available():\n        model_cfg.loss_alpha = dict(type='L1Loss')\n        model_cfg.loss_comp = None\n        indexnet = MODELS.build(model_cfg).cuda()\n        input_train = _demo_input_train((64, 64), batch_size=2, cuda=True)\n        output_train = indexnet(*input_train, mode='loss')\n        # assert output_train['num_samples'] == 2\n        assert_dict_keys_equal(output_train, ['loss_alpha'])\n\n    # test forward\n    indexnet.cpu().eval()\n    inputs = torch.ones((1, 4, 32, 32))\n    indexnet.forward(inputs)\n\n\ndef test_indexed_upsample():\n    \"\"\"Test indexed upsample module for indexnet decoder.\"\"\"\n    indexed_upsample = IndexedUpsample(12, 12)\n\n    # test indexed_upsample without dec_idx_feat (no upsample)\n    x = torch.rand(2, 6, 32, 32)\n    shortcut = torch.rand(2, 6, 32, 32)\n    output = indexed_upsample(x, shortcut)\n    assert_tensor_with_shape(output, (2, 12, 32, 32))\n\n    # test indexed_upsample without dec_idx_feat (with upsample)\n    x = torch.rand(2, 6, 32, 32)\n    dec_idx_feat = torch.rand(2, 6, 64, 64)\n    shortcut = torch.rand(2, 6, 64, 64)\n    output = indexed_upsample(x, shortcut, dec_idx_feat)\n    assert_tensor_with_shape(output, (2, 12, 64, 64))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_indexnet/test_indexnet_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import IndexNetDecoder, IndexNetEncoder\n\n\ndef test_indexnet_decoder():\n    \"\"\"Test Indexnet decoder.\"\"\"\n    # test indexnet decoder with default indexnet setting\n    with pytest.raises(AssertionError):\n        # shortcut must have four dimensions\n        indexnet_decoder = IndexNetDecoder(\n            160, kernel_size=5, separable_conv=False)\n        x = torch.rand(2, 256, 4, 4)\n        shortcut = torch.rand(2, 128, 8, 8, 8)\n        dec_idx_feat = torch.rand(2, 128, 8, 8, 8)\n        outputs_enc = dict(\n            out=x, shortcuts=[shortcut], dec_idx_feat_list=[dec_idx_feat])\n        indexnet_decoder(outputs_enc)\n\n    indexnet_decoder = IndexNetDecoder(\n        160, kernel_size=5, separable_conv=False)\n    indexnet_decoder.init_weights()\n    indexnet_encoder = IndexNetEncoder(4)\n    x = torch.rand(2, 4, 32, 32)\n    outputs_enc = indexnet_encoder(x)\n    out = indexnet_decoder(outputs_enc)\n    assert out.shape == (2, 1, 32, 32)\n\n    # test indexnet decoder with other setting\n    indexnet_decoder = IndexNetDecoder(160, kernel_size=3, separable_conv=True)\n    indexnet_decoder.init_weights()\n    out = indexnet_decoder(outputs_enc)\n    assert out.shape == (2, 1, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_indexnet/test_indexnet_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\ntry:\n    import Iterable\nexcept ImportError:\n    from collections.abc import Iterable\nimport pytest\nimport torch\n\nfrom mmagic.models import (DepthwiseIndexBlock, HolisticIndexBlock,\n                           IndexNetEncoder)\n\n\ndef test_indexnet_encoder():\n    \"\"\"Test Indexnet encoder.\"\"\"\n    with pytest.raises(ValueError):\n        # out_stride must be 16 or 32\n        IndexNetEncoder(4, out_stride=8)\n    with pytest.raises(NameError):\n        # index_mode must be 'holistic', 'o2o' or 'm2o'\n        IndexNetEncoder(4, index_mode='unknown_mode')\n\n    # test indexnet encoder with default indexnet setting\n    indexnet_encoder = IndexNetEncoder(\n        4,\n        out_stride=32,\n        width_mult=1,\n        index_mode='m2o',\n        aspp=True,\n        use_nonlinear=True,\n        use_context=True)\n    indexnet_encoder.init_weights()\n    x = torch.rand(2, 4, 32, 32)\n    outputs = indexnet_encoder(x)\n    assert outputs['out'].shape == (2, 160, 1, 1)\n    assert len(outputs['shortcuts']) == 7\n    target_shapes = [(2, 32, 32, 32), (2, 16, 16, 16), (2, 24, 16, 16),\n                     (2, 32, 8, 8), (2, 64, 4, 4), (2, 96, 2, 2),\n                     (2, 160, 2, 2)]\n    for shortcut, target_shape in zip(outputs['shortcuts'], target_shapes):\n        assert shortcut.shape == target_shape\n    assert len(outputs['dec_idx_feat_list']) == 7\n    target_shapes = [(2, 32, 32, 32), None, (2, 24, 16, 16), (2, 32, 8, 8),\n                     (2, 64, 4, 4), None, (2, 160, 2, 2)]\n    for dec_idx_feat, target_shape in zip(outputs['dec_idx_feat_list'],\n                                          target_shapes):\n        if dec_idx_feat is not None:\n            assert dec_idx_feat.shape == target_shape\n\n    # test indexnet encoder with other config\n    indexnet_encoder = IndexNetEncoder(\n        4,\n        out_stride=16,\n        width_mult=2,\n        index_mode='o2o',\n        aspp=False,\n        use_nonlinear=False,\n        use_context=False)\n    indexnet_encoder.init_weights()\n    x = torch.rand(2, 4, 32, 32)\n    outputs = indexnet_encoder(x)\n    assert outputs['out'].shape == (2, 160, 2, 2)\n    assert len(outputs['shortcuts']) == 7\n    target_shapes = [(2, 64, 32, 32), (2, 32, 16, 16), (2, 48, 16, 16),\n                     (2, 64, 8, 8), (2, 128, 4, 4), (2, 192, 2, 2),\n                     (2, 320, 2, 2)]\n    for shortcut, target_shape in zip(outputs['shortcuts'], target_shapes):\n        assert shortcut.shape == target_shape\n    assert len(outputs['dec_idx_feat_list']) == 7\n    target_shapes = [(2, 64, 32, 32), None, (2, 48, 16, 16), (2, 64, 8, 8),\n                     (2, 128, 4, 4), None, None]\n    for dec_idx_feat, target_shape in zip(outputs['dec_idx_feat_list'],\n                                          target_shapes):\n        if dec_idx_feat is not None:\n            assert dec_idx_feat.shape == target_shape\n\n    # test indexnet encoder with holistic index block\n    indexnet_encoder = IndexNetEncoder(\n        4,\n        out_stride=16,\n        width_mult=2,\n        index_mode='holistic',\n        aspp=False,\n        freeze_bn=True,\n        use_nonlinear=False,\n        use_context=False)\n    indexnet_encoder.init_weights()\n    x = torch.rand(2, 4, 32, 32)\n    outputs = indexnet_encoder(x)\n    assert outputs['out'].shape == (2, 160, 2, 2)\n    assert len(outputs['shortcuts']) == 7\n    target_shapes = [(2, 64, 32, 32), (2, 32, 16, 16), (2, 48, 16, 16),\n                     (2, 64, 8, 8), (2, 128, 4, 4), (2, 192, 2, 2),\n                     (2, 320, 2, 2)]\n    for shortcut, target_shape in zip(outputs['shortcuts'], target_shapes):\n        assert shortcut.shape == target_shape\n    assert len(outputs['dec_idx_feat_list']) == 7\n    target_shapes = [(2, 1, 32, 32), None, (2, 1, 16, 16), (2, 1, 8, 8),\n                     (2, 1, 4, 4), None, None]\n    for dec_idx_feat, target_shape in zip(outputs['dec_idx_feat_list'],\n                                          target_shapes):\n        if dec_idx_feat is not None:\n            assert dec_idx_feat.shape == target_shape\n\n\ndef test_index_blocks():\n    \"\"\"Test index blocks for indexnet encoder.\"\"\"\n    # test holistic index block\n    # test holistic index block without context and nonlinearty\n    block = HolisticIndexBlock(128, use_context=False, use_nonlinear=False)\n    assert not isinstance(block.index_block, Iterable)\n    x = torch.rand(2, 128, 8, 8)\n    enc_idx_feat, dec_idx_feat = block(x)\n    assert enc_idx_feat.shape == (2, 1, 8, 8)\n    assert dec_idx_feat.shape == (2, 1, 8, 8)\n\n    # test holistic index block with context and nonlinearty\n    block = HolisticIndexBlock(128, use_context=True, use_nonlinear=True)\n    assert len(block.index_block) == 2  # nonlinear mode has two blocks\n    x = torch.rand(2, 128, 8, 8)\n    enc_idx_feat, dec_idx_feat = block(x)\n    assert enc_idx_feat.shape == (2, 1, 8, 8)\n    assert dec_idx_feat.shape == (2, 1, 8, 8)\n\n    # test depthwise index block\n    # test depthwise index block without context and nonlinearty in o2o mode\n    block = DepthwiseIndexBlock(\n        128, use_context=False, mode='oso', use_nonlinear=False)\n    assert not isinstance(block.index_blocks[0], Iterable)\n    x = torch.rand(2, 128, 8, 8)\n    enc_idx_feat, dec_idx_feat = block(x)\n    assert enc_idx_feat.shape == (2, 128, 8, 8)\n    assert dec_idx_feat.shape == (2, 128, 8, 8)\n\n    # test depthwise index block with context and nonlinearty in m2o mode\n    block = DepthwiseIndexBlock(\n        128, use_context=True, mode='m2o', use_nonlinear=True)\n    assert len(block.index_blocks[0]) == 2  # nonlinear mode has two blocks\n    x = torch.rand(2, 128, 8, 8)\n    enc_idx_feat, dec_idx_feat = block(x)\n    assert enc_idx_feat.shape == (2, 128, 8, 8)\n    assert dec_idx_feat.shape == (2, 128, 8, 8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_inst_colorization/test_color_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport torch\n\nfrom mmagic.models.editors.inst_colorization import color_utils\n\n\nclass TestColorUtils:\n    color_data_opt = dict(\n        ab_thresh=0,\n        p=1.0,\n        sample_PS=[\n            1,\n            2,\n            3,\n            4,\n            5,\n            6,\n            7,\n            8,\n            9,\n        ],\n        ab_norm=110,\n        ab_max=110.,\n        ab_quant=10.,\n        l_norm=100.,\n        l_cent=50.,\n        mask_cent=0.5)\n\n    def test_xyz2lab(self):\n        xyz = torch.rand(1, 3, 8, 8)\n        lab = color_utils.xyz2lab(xyz)\n\n        sc = torch.Tensor((0.95047, 1., 1.08883))[None, :, None, None]\n        xyz_scale = xyz / sc\n        mask = (xyz_scale > .008856).type(torch.FloatTensor)\n\n        xyz_int = xyz_scale**(1 / 3.) * mask + (7.787 * xyz_scale +\n                                                16. / 116.) * (1 - mask)\n        L = 116. * xyz_int[:, 1, :, :] - 16.\n        a = 500. * (xyz_int[:, 0, :, :] - xyz_int[:, 1, :, :])\n        b = 200. * (xyz_int[:, 1, :, :] - xyz_int[:, 2, :, :])\n\n        assert lab.shape == (1, 3, 8, 8)\n        assert lab.equal(\n            torch.cat((L[:, None, :, :], a[:, None, :, :], b[:, None, :, :]),\n                      dim=1))\n\n    def test_rgb2xyz(self):\n        rgb = torch.rand(1, 3, 8, 8)\n        xyz = color_utils.rgb2xyz(rgb)\n\n        mask = (rgb > .04045).type(torch.FloatTensor)\n        rgb = (((rgb + .055) / 1.055)**2.4) * mask + rgb / 12.92 * (1 - mask)\n\n        x = .412453 * rgb[:, 0, :, :] + .357580 * rgb[:, 1, :, :] \\\n            + .180423 * rgb[:, 2, :, :]\n        y = .212671 * rgb[:, 0, :, :] + .715160 * rgb[:, 1, :, :] \\\n            + .072169 * rgb[:, 2, :, :]\n        z = .019334 * rgb[:, 0, :, :] + .119193 * rgb[:, 1, :, :] \\\n            + .950227 * rgb[:, 2, :, :]\n\n        assert xyz.shape == (1, 3, 8, 8)\n        assert xyz.equal(\n            torch.cat((x[:, None, :, :], y[:, None, :, :], z[:, None, :, :]),\n                      dim=1))\n\n    def test_rgb2lab(self):\n        rgb = torch.rand(1, 3, 8, 8)\n        lab = color_utils.rgb2lab(rgb, self.color_data_opt)\n        _lab = color_utils.xyz2lab(color_utils.rgb2xyz(rgb))\n\n        l_rs = (_lab[:, [0], :, :] -\n                self.color_data_opt['l_cent']) / self.color_data_opt['l_norm']\n        ab_rs = _lab[:, 1:, :, :] / self.color_data_opt['ab_norm']\n\n        assert lab.shape == (1, 3, 8, 8)\n        assert lab.equal(torch.cat((l_rs, ab_rs), dim=1))\n\n    def test_lab2rgb(self):\n        lab = torch.rand(1, 3, 8, 8)\n        rgb = color_utils.lab2rgb(lab, self.color_data_opt)\n\n        L = lab[:, [0], :, :] * self.color_data_opt[\n            'l_norm'] + self.color_data_opt['l_cent']\n        AB = lab[:, 1:, :, :] * self.color_data_opt['ab_norm']\n\n        lab = torch.cat((L, AB), dim=1)\n\n        assert rgb.shape == (1, 3, 8, 8)\n        assert rgb.equal(color_utils.xyz2rgb(color_utils.lab2xyz(lab)))\n\n    def test_lab2xyz(self):\n        lab = torch.rand(1, 3, 8, 8)\n        xyz = color_utils.lab2xyz(lab)\n        y_int = (lab[:, 0, :, :] + 16.) / 116.\n        x_int = (lab[:, 1, :, :] / 500.) + y_int\n        z_int = y_int - (lab[:, 2, :, :] / 200.)\n        z_int = torch.max(torch.Tensor((0, )), z_int)\n\n        out = torch.cat(\n            (x_int[:, None, :, :], y_int[:, None, :, :], z_int[:, None, :, :]),\n            dim=1)\n        mask = (out > .2068966).type(torch.FloatTensor)\n        sc = torch.Tensor((0.95047, 1., 1.08883))[None, :, None, None]\n        out = (out**3.) * mask + (out - 16. / 116.) / 7.787 * (1 - mask)\n        target = sc * out\n        assert xyz.shape == (1, 3, 8, 8)\n        assert xyz.equal(target)\n\n    def test_xyz2rgb(self):\n        xyz = torch.rand(1, 3, 8, 8)\n\n        rgb = color_utils.xyz2rgb(xyz)\n\n        r = 3.24048134 * xyz[:, 0, :, :] - 1.53715152 * xyz[:, 1, :, :] \\\n            - 0.49853633 * xyz[:, 2, :, :]\n        g = -0.96925495 * xyz[:, 0, :, :] + 1.87599 * xyz[:, 1, :, :] \\\n            + .04155593 * xyz[:, 2, :, :]\n        b = .05564664 * xyz[:, 0, :, :] - .20404134 * xyz[:, 1, :, :] \\\n            + 1.05731107 * xyz[:, 2, :, :]\n\n        _rgb = torch.cat(\n            (r[:, None, :, :], g[:, None, :, :], b[:, None, :, :]), dim=1)\n        _rgb = torch.max(_rgb, torch.zeros_like(_rgb))\n\n        mask = (_rgb > .0031308).type(torch.FloatTensor)\n\n        assert rgb.shape == (1, 3, 8, 8) and mask.shape == (1, 3, 8, 8)\n        assert rgb.equal((1.055 * (_rgb**(1. / 2.4)) - 0.055) * mask +\n                         12.92 * _rgb * (1 - mask))\n\n    def test_get_colorization_data(self):\n        data_raw = torch.rand(1, 3, 8, 8)\n\n        res = color_utils.get_colorization_data(data_raw, self.color_data_opt)\n\n        assert isinstance(res, dict)\n        assert 'A' in res.keys() and 'B' in res.keys() \\\n               and 'hint_B' in res.keys() and 'mask_B' in res.keys()\n        assert res['A'].shape == res['mask_B'].shape == (1, 1, 8, 8)\n        assert res['hint_B'].shape == res['B'].shape == (1, 2, 8, 8)\n\n    def test_encode_ab_ind(self):\n        data_ab = torch.rand(1, 2, 8, 8)\n        data_q = color_utils.encode_ab_ind(data_ab, self.color_data_opt)\n        A = 2 * 110. / 10. + 1\n\n        data_ab_rs = torch.round((data_ab * 110 + 110.) / 10.)\n\n        assert data_q.shape == (1, 1, 8, 8)\n        assert data_q.equal(data_ab_rs[:, [0], :, :] * A +\n                            data_ab_rs[:, [1], :, :])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_inst_colorization/test_colorization_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\ndef test_colorization_net():\n\n    model_cfg = dict(\n        type='ColorizationNet', input_nc=4, output_nc=2, norm_type='batch')\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'ColorizationNet'\n\n    # prepare data\n    input_A = torch.rand(1, 1, 256, 256)\n    input_B = torch.rand(1, 2, 256, 256)\n    mask_B = torch.rand(1, 1, 256, 256)\n\n    target_shape = (1, 2, 256, 256)\n\n    # test on cpu\n    (out_class, out_reg, feature_map) = model(input_A, input_B, mask_B)\n    assert isinstance(feature_map, dict)\n    assert feature_map['conv1_2'].shape == (1, 64, 256, 256) \\\n           and feature_map['out_reg'].shape == target_shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        input_A = input_A.cuda()\n        input_B = input_B.cuda()\n        mask_B = mask_B.cuda()\n        (out_class, out_reg, feature_map) = \\\n            model(input_A, input_B, mask_B)\n\n        assert isinstance(feature_map, dict)\n        for item in feature_map.keys():\n            assert torch.is_tensor(feature_map[item])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_inst_colorization/test_fusion_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\ndef test_fusion_net():\n\n    model_cfg = dict(\n        type='FusionNet', input_nc=4, output_nc=2, norm_type='batch')\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'FusionNet'\n\n    # prepare data\n    input_A = torch.rand(1, 1, 256, 256)\n    input_B = torch.rand(1, 2, 256, 256)\n    mask_B = torch.rand(1, 1, 256, 256)\n\n    instance_feature = dict(\n        conv1_2=torch.rand(1, 64, 256, 256),\n        conv2_2=torch.rand(1, 128, 128, 128),\n        conv3_3=torch.rand(1, 256, 64, 64),\n        conv4_3=torch.rand(1, 512, 32, 32),\n        conv5_3=torch.rand(1, 512, 32, 32),\n        conv6_3=torch.rand(1, 512, 32, 32),\n        conv7_3=torch.rand(1, 512, 32, 32),\n        conv8_up=torch.rand(1, 256, 64, 64),\n        conv8_3=torch.rand(1, 256, 64, 64),\n        conv9_up=torch.rand(1, 128, 128, 128),\n        conv9_3=torch.rand(1, 128, 128, 128),\n        conv10_up=torch.rand(1, 128, 256, 256),\n        conv10_2=torch.rand(1, 128, 256, 256),\n    )\n\n    target_shape = (1, 2, 256, 256)\n\n    box_info_box = [\n        torch.tensor([[175, 29, 96, 54, 52, 106], [14, 191, 84, 61, 51, 111],\n                      [117, 64, 115, 46, 75, 95], [41, 165, 121, 47, 50, 88],\n                      [46, 136, 94, 45, 74, 117], [79, 124, 62, 115, 53, 79],\n                      [156, 64, 77, 138, 36, 41], [200, 48, 114, 131, 8, 11],\n                      [115, 78, 92, 81, 63, 83]]),\n        torch.tensor([[87, 15, 48, 27, 26, 53], [7, 96, 42, 31, 25, 55],\n                      [58, 32, 57, 23, 38, 48], [20, 83, 60, 24, 25, 44],\n                      [23, 68, 47, 23, 37, 58], [39, 62, 31, 58, 27, 39],\n                      [78, 32, 38, 69, 18, 21], [100, 24, 57, 66, 4, 5],\n                      [57, 39, 46, 41, 32, 41]]),\n        torch.tensor([[43, 8, 24, 14, 13, 26], [3, 48, 21, 16, 13, 27],\n                      [29, 16, 28, 12, 19, 24], [10, 42, 30, 12, 12, 22],\n                      [11, 34, 23, 12, 19, 29], [19, 31, 15, 29, 14, 20],\n                      [39, 16, 19, 35, 9, 10], [50, 12, 28, 33, 2, 3],\n                      [28, 20, 23, 21, 16, 20]]),\n        torch.tensor([[21, 4, 12, 7, 7, 13], [1, 24, 10, 8, 7, 14],\n                      [14, 8, 14, 6, 10, 12], [5, 21, 15, 6, 6, 11],\n                      [5, 17, 11, 6, 10, 15], [9, 16, 7, 15, 7, 10],\n                      [19, 8, 9, 18, 5, 5], [25, 6, 14, 17, 1, 1],\n                      [14, 10, 11, 11, 8, 10]])\n    ]\n\n    # test on cpu\n    out = model(input_A, input_B, mask_B, instance_feature, box_info_box)\n    assert torch.is_tensor(out)\n    assert out.shape == target_shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        input_A = input_A.cuda()\n        input_B = input_B.cuda()\n        mask_B = mask_B.cuda()\n        for item in instance_feature.keys():\n            instance_feature[item] = instance_feature[item].cuda()\n        box_info_box = [i.cuda() for i in box_info_box]\n        output = model(input_A, input_B, mask_B, instance_feature,\n                       box_info_box)\n        assert torch.is_tensor(output)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_inst_colorization/test_inst_colorization.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nimport unittest\n\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\nclass TestInstColorization:\n\n    def test_inst_colorization(self):\n        if not torch.cuda.is_available():\n            # RoI pooling only support in GPU\n            return unittest.skip('test requires GPU and torch+cuda')\n\n        register_all_modules()\n        model_cfg = dict(\n            type='InstColorization',\n            data_preprocessor=dict(\n                type='DataPreprocessor',\n                mean=[127.5],\n                std=[127.5],\n            ),\n            image_model=dict(\n                type='ColorizationNet',\n                input_nc=4,\n                output_nc=2,\n                norm_type='batch'),\n            instance_model=dict(\n                type='ColorizationNet',\n                input_nc=4,\n                output_nc=2,\n                norm_type='batch'),\n            fusion_model=dict(\n                type='FusionNet', input_nc=4, output_nc=2, norm_type='batch'),\n            color_data_opt=dict(\n                ab_thresh=0,\n                p=1.0,\n                sample_PS=[\n                    1,\n                    2,\n                    3,\n                    4,\n                    5,\n                    6,\n                    7,\n                    8,\n                    9,\n                ],\n                ab_norm=110,\n                ab_max=110.,\n                ab_quant=10.,\n                l_norm=100.,\n                l_cent=50.,\n                mask_cent=0.5),\n            which_direction='AtoB',\n            loss=dict(type='HuberLoss', delta=.01))\n\n        model = MODELS.build(model_cfg)\n\n        # test attributes\n        assert model.__class__.__name__ == 'InstColorization'\n\n        # prepare data\n        inputs = torch.rand(1, 3, 256, 256)\n        target_shape = (1, 3, 256, 256)\n\n        data_sample = DataSample(gt_img=inputs)\n        metainfo = dict(\n            cropped_img=torch.rand(9, 3, 256, 256),\n            box_info=torch.tensor([[175, 29, 96, 54, 52, 106],\n                                   [14, 191, 84, 61, 51, 111],\n                                   [117, 64, 115, 46, 75, 95],\n                                   [41, 165, 121, 47, 50, 88],\n                                   [46, 136, 94, 45, 74, 117],\n                                   [79, 124, 62, 115, 53, 79],\n                                   [156, 64, 77, 138, 36, 41],\n                                   [200, 48, 114, 131, 8, 11],\n                                   [115, 78, 92, 81, 63, 83]]),\n            box_info_2x=torch.tensor([[87, 15, 48, 27, 26, 53],\n                                      [7, 96, 42, 31, 25, 55],\n                                      [58, 32, 57, 23, 38, 48],\n                                      [20, 83, 60, 24, 25, 44],\n                                      [23, 68, 47, 23, 37, 58],\n                                      [39, 62, 31, 58, 27, 39],\n                                      [78, 32, 38, 69, 18, 21],\n                                      [100, 24, 57, 66, 4, 5],\n                                      [57, 39, 46, 41, 32, 41]]),\n            box_info_4x=torch.tensor([[43, 8, 24, 14, 13, 26],\n                                      [3, 48, 21, 16, 13, 27],\n                                      [29, 16, 28, 12, 19, 24],\n                                      [10, 42, 30, 12, 12, 22],\n                                      [11, 34, 23, 12, 19, 29],\n                                      [19, 31, 15, 29, 14, 20],\n                                      [39, 16, 19, 35, 9, 10],\n                                      [50, 12, 28, 33, 2, 3],\n                                      [28, 20, 23, 21, 16, 20]]),\n            box_info_8x=torch.tensor([[21, 4, 12, 7, 7, 13],\n                                      [1, 24, 10, 8, 7, 14],\n                                      [14, 8, 14, 6, 10, 12],\n                                      [5, 21, 15, 6, 6, 11],\n                                      [5, 17, 11, 6, 10, 15],\n                                      [9, 16, 7, 15, 7, 10],\n                                      [19, 8, 9, 18, 5, 5],\n                                      [25, 6, 14, 17, 1, 1],\n                                      [14, 10, 11, 11, 8, 10]]),\n            empty_box=False)\n        data_sample.set_metainfo(metainfo=metainfo)\n\n        data = dict(\n            inputs=inputs, data_samples=DataSample.stack([data_sample]))\n\n        res = model(mode='tensor', **data)\n\n        assert torch.is_tensor(res)\n        assert res.shape == target_shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_inst_colorization/test_weight_layer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.inst_colorization.weight_layer import WeightLayer\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_weight_layer():\n\n    weight_layer = WeightLayer(64)\n\n    instance_feature_conv1_2 = torch.rand(1, 64, 256, 256)\n    conv1_2 = torch.rand(1, 64, 256, 256)\n    box_info = torch.tensor([[175, 29, 96, 54, 52, 106],\n                             [14, 191, 84, 61, 51, 111],\n                             [117, 64, 115, 46, 75, 95],\n                             [41, 165, 121, 47, 50, 88],\n                             [46, 136, 94, 45, 74, 117],\n                             [79, 124, 62, 115, 53, 79],\n                             [156, 64, 77, 138, 36, 41],\n                             [200, 48, 114, 131, 8, 11],\n                             [115, 78, 92, 81, 63, 83]])\n    conv1_2 = weight_layer(instance_feature_conv1_2, conv1_2, box_info)\n\n    assert conv1_2.shape == instance_feature_conv1_2.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_liif/test_liif.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom typing import List\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import LIIF, DataPreprocessor\nfrom mmagic.structures import DataSample\n\n\ndef test_liif():\n\n    model = LIIF(\n        generator=dict(\n            type='LIIFEDSRNet',\n            encoder=dict(\n                type='EDSRNet',\n                in_channels=3,\n                out_channels=3,\n                mid_channels=4,\n                num_blocks=2),\n            imnet=dict(\n                type='MLPRefiner',\n                in_dim=64,\n                out_dim=3,\n                hidden_list=[4, 4, 4, 4]),\n            local_ensemble=True,\n            feat_unfold=True,\n            cell_decode=True,\n            eval_bsize=64),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        data_preprocessor=DataPreprocessor(\n            mean=[0.4488 * 255, 0.4371 * 255, 0.4040 * 255],\n            std=[255., 255., 255.],\n            # input_view=(-1, 1, 1),\n            # output_view=(1, -1)\n        ))\n\n    # test attributes\n    assert model.__class__.__name__ == 'LIIF'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 8, 8)\n    data_sample = DataSample(\n        metainfo=dict(coord=torch.rand(256, 2), cell=torch.rand(256, 2)))\n    data_sample.gt_img = torch.rand(256, 3)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars['loss'], torch.Tensor)\n    save_loss = log_vars['loss']\n    log_vars = model.train_step(data, optim_wrapper)\n    log_vars = model.train_step(data, optim_wrapper)\n    assert save_loss > log_vars['loss']\n\n    # val\n    predictions = model.val_step(data)\n    # predictions = predictions.split()\n    assert isinstance(predictions, List)\n    assert len(predictions) == 1\n    assert isinstance(predictions[0], DataSample)\n    assert isinstance(predictions[0].output.pred_img.data, torch.Tensor)\n    assert predictions[0].output.pred_img.shape == (3, 16, 16)\n\n    # feat\n    output = model(\n        torch.rand(1, 3, 8, 8), DataSample.stack([data_sample]), mode='tensor')\n    assert output.shape == (1, 256, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_liif/test_liif_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_liif_edsr_net():\n\n    model_cfg = dict(\n        type='LIIFEDSRNet',\n        encoder=dict(\n            type='EDSRNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16),\n        imnet=dict(\n            type='MLPRefiner',\n            in_dim=64,\n            out_dim=3,\n            hidden_list=[256, 256, 256, 256]),\n        local_ensemble=True,\n        feat_unfold=True,\n        cell_decode=True,\n        eval_bsize=30000)\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'LIIFEDSRNet'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 22, 11)\n    targets = torch.rand(1, 128 * 64, 3)\n    coord = torch.rand(1, 128 * 64, 2)\n    cell = torch.rand(1, 128 * 64, 2)\n\n    # test on cpu\n    output = model(inputs, coord, cell)\n    output = model(inputs, coord, cell, True)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        coord = coord.cuda()\n        cell = cell.cuda()\n        output = model(inputs, coord, cell)\n        output = model(inputs, coord, cell, True)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef test_liif_rdn_net():\n\n    model_cfg = dict(\n        type='LIIFRDNNet',\n        encoder=dict(\n            type='RDNNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16,\n            upscale_factor=4,\n            num_layers=8,\n            channel_growth=64),\n        imnet=dict(\n            type='MLPRefiner',\n            in_dim=64,\n            out_dim=3,\n            hidden_list=[256, 256, 256, 256]),\n        local_ensemble=True,\n        feat_unfold=True,\n        cell_decode=True,\n        eval_bsize=30000)\n\n    # build model\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert model.__class__.__name__ == 'LIIFRDNNet'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 22, 11)\n    targets = torch.rand(1, 128 * 64, 3)\n    coord = torch.rand(1, 128 * 64, 2)\n    cell = torch.rand(1, 128 * 64, 2)\n\n    # test on cpu\n    output = model(inputs, coord, cell)\n    output = model(inputs, coord, cell, True)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        coord = coord.cuda()\n        cell = cell.cuda()\n        output = model(inputs, coord, cell)\n        output = model(inputs, coord, cell, True)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_liif/test_mlp_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import MLPRefiner\n\n\ndef test_MLPRefiner():\n    model = MLPRefiner(8, 2, [6, 4])\n    inputs = torch.randn(1, 8)\n    outputs = model(inputs)\n    assert outputs.shape == (1, 2)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_lsgan/test_lsgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import LSGAN, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='DCGANGenerator', noise_size=10, output_scale=16, base_channels=16)\ndiscriminator = dict(\n    type='DCGANDiscriminator', input_scale=16, output_scale=4, out_channels=1)\n\n\nclass TestLSGAN(TestCase):\n\n    def test_init(self):\n        gan = LSGAN(\n            noise_size=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator)\n\n        self.assertIsInstance(gan, LSGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = LSGAN(\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = LSGAN(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = LSGAN(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('test-lsgan')\n        gan = LSGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_lsgan/test_lsgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.lsgan import LSGANDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestLSGANDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.x = torch.randn((2, 3, 128, 128))\n        cls.default_config = dict(\n            type='LSGANDiscriminator', in_channels=3, input_scale=128)\n\n    def test_lsgan_discriminator(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, LSGANDiscriminator)\n        score = d(self.x)\n        assert score.shape == (2, 1)\n\n        # test different input_scale\n        config = dict(type='LSGANDiscriminator', in_channels=3, input_scale=64)\n        d = MODELS.build(config)\n        assert isinstance(d, LSGANDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x)\n        assert score.shape == (2, 1)\n\n        # test different config\n        config = dict(\n            type='LSGANDiscriminator',\n            in_channels=3,\n            input_scale=64,\n            out_act_cfg=dict(type='Sigmoid'))\n        d = MODELS.build(config)\n        assert isinstance(d, LSGANDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x)\n        assert score.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_lsgan_discriminator_cuda(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config).cuda()\n        assert isinstance(d, LSGANDiscriminator)\n        score = d(self.x.cuda())\n        assert score.shape == (2, 1)\n\n        # test different input_scale\n        config = dict(type='LSGANDiscriminator', in_channels=3, input_scale=64)\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, LSGANDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x.cuda())\n        assert score.shape == (2, 1)\n\n        # test different config\n        config = dict(\n            type='LSGANDiscriminator',\n            in_channels=3,\n            input_scale=64,\n            out_act_cfg=dict(type='Sigmoid'))\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, LSGANDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x.cuda())\n        assert score.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_lsgan/test_lsgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.lsgan import LSGANGenerator\nfrom mmagic.registry import MODELS\n\n\nclass TestLSGANGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((3, 128))\n        cls.default_config = dict(\n            type='LSGANGenerator', noise_size=128, output_scale=128)\n\n    def test_lsgan_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, LSGANGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n        x = g(None, num_batches=3, return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n        x = g(self.noise, return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n        x = g(torch.randn, num_batches=3, return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n\n        # test different output_scale\n        config = dict(type='LSGANGenerator', noise_size=128, output_scale=64)\n        g = MODELS.build(config)\n        assert isinstance(g, LSGANGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 64, 64)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_lsgan_generator_cuda(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, LSGANGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n        x = g(None, num_batches=3, return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n        x = g(self.noise.cuda(), return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n        x = g(torch.randn, num_batches=3, return_noise=True)\n        assert x['noise_batch'].shape == (3, 128)\n\n        # test different output_scale\n        config = dict(type='LSGANGenerator', noise_size=128, output_scale=64)\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, LSGANGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_mspie_stylegan2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\n\nfrom mmagic.models import DataPreprocessor, MSPIEStyleGAN2\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestMSPIEStyleGAN2(TestCase):\n\n    @classmethod\n    def setup_class(cls):\n        cls.generator_cfg = dict(\n            type='MSStyleGANv2Generator', out_size=32, style_channels=16)\n        cls.disc_cfg = dict(type='MSStyleGAN2Discriminator', in_size=32)\n\n        # reg params\n        d_reg_interval = 16\n        g_reg_interval = 4\n        ema_half_life = 10.  # G_smoothing_kimg\n\n        cls.ema_config = dict(\n            type='ExponentialMovingAverage',\n            interval=1,\n            momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\n        cls.loss_config = dict(\n            r1_loss_weight=10. / 2. * d_reg_interval,\n            r1_interval=d_reg_interval,\n            norm_mode='HWC',\n            g_reg_interval=g_reg_interval,\n            g_reg_weight=2. * g_reg_interval,\n            pl_batch_shrink=2)\n\n    @pytest.mark.skipif(\n        ('win' in platform.system().lower() and 'cu' in torch.__version__)\n        or not torch.cuda.is_available(),\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan2_cpu(self):\n        accu_iter = 1\n        message_hub = MessageHub.get_instance('test-mspie-s2')\n        gan = MSPIEStyleGAN2(\n            self.generator_cfg,\n            self.disc_cfg,\n            data_preprocessor=DataPreprocessor(),\n            ema_config=self.ema_config,\n            loss_config=self.loss_config,\n            train_settings=dict(num_upblocks=3))\n\n        optimizer_g = torch.optim.SGD(gan.generator.parameters(), lr=0.01)\n        optimizer_d = torch.optim.SGD(gan.discriminator.parameters(), lr=0.01)\n\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(optimizer_g, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                optimizer_d, accumulative_counts=accu_iter))\n\n        # prepare inputs\n        img = torch.randn(3, 32, 32)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        message_hub.update_info('iter', 0)\n        _ = gan.train_step(data, optim_wrapper_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_mspie_stylegan2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.mspie import MSStyleGAN2Discriminator\n\n\nclass TestMSStyleGANv2Disc:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(in_size=64, channel_multiplier=1)\n\n    def test_msstylegan2_disc_cpu(self):\n        d = MSStyleGAN2Discriminator(**self.default_cfg)\n        img = torch.randn((2, 3, 64, 64))\n        score = d(img)\n        assert score.shape == (2, 1)\n\n        d = MSStyleGAN2Discriminator(\n            with_adaptive_pool=True, **self.default_cfg)\n        img = torch.randn((2, 3, 64, 64))\n        score = d(img)\n        assert score.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_msstylegan2_disc_cuda(self):\n        d = MSStyleGAN2Discriminator(**self.default_cfg).cuda()\n        img = torch.randn((2, 3, 64, 64)).cuda()\n        score = d(img)\n        assert score.shape == (2, 1)\n\n        d = MSStyleGAN2Discriminator(\n            with_adaptive_pool=True, **self.default_cfg).cuda()\n        img = torch.randn((2, 3, 64, 64)).cuda()\n        score = d(img)\n        assert score.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_mspie_stylegan2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors.mspie import MSStyleGANv2Generator\nfrom mmagic.registry import MODELS\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\n@MODELS.register_module()\nclass MockHeadPosEncoding(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n\n\nclass TestMSStyleGAN2:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(out_size=32, style_channels=16)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_msstylegan2_cpu(self):\n\n        # test normal forward\n        cfg = deepcopy(self.default_cfg)\n        g = MSStyleGANv2Generator(**cfg)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        # set mix_prob as 1.0 and 0 to force cover lines\n        cfg = deepcopy(self.default_cfg)\n        cfg['mix_prob'] = 1\n        g = MSStyleGANv2Generator(**cfg)\n        res = g(torch.randn, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        # test style-mixing with inject_inde is passed\n        res = g(torch.randn, num_batches=2, inject_index=0)\n        assert res.shape == (2, 3, 32, 32)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['mix_prob'] = 0\n        g = MSStyleGANv2Generator(**cfg)\n        res = g(torch.randn, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['mix_prob'] = 1\n        g = MSStyleGANv2Generator(**cfg)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['mix_prob'] = 0\n        g = MSStyleGANv2Generator(**cfg)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        # test truncation less than 1\n        res = g(None, num_batches=2, truncation=0.5)\n        assert res.shape == (2, 3, 32, 32)\n\n        # test chosen scale\n        res = g(None, num_batches=2, chosen_scale=2, randomize_noise=False)\n        print(res.shape)\n\n        # test injected_noise is not None\n        injected_noise = g.make_injected_noise()\n        res = g(None, num_batches=2, injected_noise=injected_noise)\n\n        # test return noise is True\n        res = g(None, num_batches=2, return_noise=True)\n        assert isinstance(res, dict)\n\n        # test chosen_scale is Tuple\n        res = g(None, num_batches=2, chosen_scale=(0, 2))\n        print(res.shape)\n\n    def test_train(self):\n        cfg = deepcopy(self.default_cfg)\n        g = MSStyleGANv2Generator(**cfg)\n        # test train -> train\n        g.train()\n        assert g.training\n        assert g.default_style_mode == g._default_style_mode\n        # test train -> eval\n        g.eval()\n        assert not g.training\n        assert g.default_style_mode == g.eval_style_mode\n        # test eval -> eval\n        g.eval()\n        assert not g.training\n        assert g.default_style_mode == g.eval_style_mode\n        # test train -> train\n        g.train()\n        assert g.training\n        assert g.default_style_mode == g._default_style_mode\n\n    # def test_make_injected_noise(self):\n    #     cfg = deepcopy(self.default_cfg)\n    #     g = MSStyleGANv2Generator(**cfg)\n    #     pass\n\n    def test_mean_latent(self):\n        cfg = deepcopy(self.default_cfg)\n        g = MSStyleGANv2Generator(**cfg)\n        mean_latent = g.get_mean_latent(num_samples=4, bs_per_repeat=2)\n        assert mean_latent.shape == (1, 16)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_head_pos_encoding(self):\n        cfg = deepcopy(self.default_cfg)\n        g = MSStyleGANv2Generator(**cfg, head_pos_encoding=dict(type='CSG'))\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        g = MSStyleGANv2Generator(\n            **cfg, head_pos_encoding=dict(type='CSG'), interp_head=True)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 32, 32)\n\n        g = MSStyleGANv2Generator(\n            **cfg, head_pos_encoding=dict(type='MockHeadPosEncoding'))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_mspie_stylegan2_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.mspie.mspie_stylegan2_modules import (\n    ModulatedPEConv2d, ModulatedPEStyleConv)\n\n\nclass TestModulatedPEStyleConv(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.default_cfg = dict(\n            in_channels=8, out_channels=8, kernel_size=3, style_channels=16)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_upsample(self):\n        cfg = deepcopy(self.default_cfg)\n        conv = ModulatedPEStyleConv(**cfg, upsample=True)\n        x = torch.randn(1, 8, 32, 32)\n        style = torch.randn(1, 16)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 64, 64))\n\n        # test return noise\n        noise = torch.randn(1, 8, 64, 64)\n        out = conv(x, style, noise)\n        self.assertEqual(out.shape, (1, 8, 64, 64))\n\n        out, noise_return = conv(x, style, noise, return_noise=True)\n        assert (noise_return == noise).all()\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_downsample(self):\n\n        cfg = deepcopy(self.default_cfg)\n        conv = ModulatedPEStyleConv(**cfg, downsample=True)\n        x = torch.randn(1, 8, 32, 32)\n        style = torch.randn(1, 16)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 16, 16))\n\n        # test return noise\n        noise = torch.randn(1, 8, 16, 16)\n        out = conv(x, style, noise)\n        self.assertEqual(out.shape, (1, 8, 16, 16))\n\n        out, noise_return = conv(x, style, noise, return_noise=True)\n        assert (noise_return == noise).all()\n\n\nclass TestModulatedPEConv2d(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.default_cfg = dict(\n            in_channels=8, out_channels=8, kernel_size=3, style_channels=16)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_equalized_lr_cfg(self):\n        cfg = deepcopy(self.default_cfg)\n        conv = ModulatedPEConv2d(**cfg, equalized_lr_cfg=None)\n        x = torch.randn(1, 8, 32, 32)\n        style = torch.randn(1, 16)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 32, 32))\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_demodulate(self):\n        cfg = deepcopy(self.default_cfg)\n        conv = ModulatedPEConv2d(**cfg, demodulate=False)\n        x = torch.randn(1, 8, 32, 32)\n        style = torch.randn(1, 16)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 32, 32))\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_up_after_conv(self):\n        x = torch.randn(1, 8, 32, 32)\n        style = torch.randn(1, 16)\n        cfg = deepcopy(self.default_cfg)\n\n        conv = ModulatedPEConv2d(\n            **cfg, upsample=True, deconv2conv=True, up_after_conv=True)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 64, 64))\n\n        conv = ModulatedPEConv2d(\n            **cfg, upsample=True, deconv2conv=True, up_after_conv=False)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 64, 64))\n\n        conv = ModulatedPEConv2d(\n            **cfg, upsample=True, deconv2conv=True, interp_pad=3)\n        out = conv(x, style)\n        self.assertEqual(out.shape, (1, 8, 67, 67))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_pe_singan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine import MessageHub\n\nfrom mmagic.engine import SinGANOptimWrapperConstructor\nfrom mmagic.models import PESinGAN\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestPESinGAN:\n\n    @classmethod\n    def setup_class(cls):\n        cls.generator = dict(\n            type='SinGANMSGeneratorPE',\n            in_channels=3,\n            out_channels=3,\n            num_scales=3,\n            interp_pad=True,\n            noise_with_pad=True)\n\n        cls.disc = dict(\n            type='SinGANMultiScaleDiscriminator', in_channels=3,\n            num_scales=3)  # noqa\n\n        cls.data_preprocessor = dict(\n            type='DataPreprocessor', non_image_keys=['input_sample'])\n\n        cls.noise_weight_init = 0.1\n        cls.iters_per_scale = 2\n        cls.disc_steps = 3\n        cls.generator_steps = 3\n        cls.fixed_noise_with_pad = True\n        cls.lr_scheduler_args = dict(milestones=[1600], gamma=0.1)\n\n        cls.data_batch = dict(\n            inputs=dict(\n                real_scale0=torch.randn(1, 3, 25, 25),\n                real_scale1=torch.randn(1, 3, 30, 30),\n                real_scale2=torch.randn(1, 3, 32, 32),\n            ))\n        cls.data_batch['inputs']['input_sample'] = torch.zeros_like(\n            cls.data_batch['inputs']['real_scale0'])\n\n        cls.optim_wrapper_cfg = dict(\n            generator=dict(\n                optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))),\n            discriminator=dict(\n                optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))))\n\n    def test_pesingan_cpu(self):\n        message_hub = MessageHub.get_instance('test-pe-singan')\n        message_hub.update_info('iter', 0)\n        singan = PESinGAN(\n            self.generator,\n            self.disc,\n            num_scales=3,\n            data_preprocessor=self.data_preprocessor,\n            noise_weight_init=self.noise_weight_init,\n            iters_per_scale=self.iters_per_scale,\n            lr_scheduler_args=self.lr_scheduler_args,\n            fixed_noise_with_pad=self.fixed_noise_with_pad)\n\n        optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n\n        for i in range(6):\n            singan.train_step(self.data_batch, optim_wrapper_dict)\n            message_hub.update_info('iter', message_hub.get_info('iter') + 1)\n            # img = singan.forward(dict(num_batches=1), None)\n\n            # if i in [0, 1]:\n            #     assert singan.curr_stage == 0\n            #     assert img.shape[-2:] == (25, 25)\n            # elif i in [2, 3]:\n            #     assert singan.curr_stage == 1\n            #     assert img.shape[-2:] == (30, 30)\n            # elif i in [4, 5]:\n            #     assert singan.curr_stage == 2\n            #     assert img.shape[-2:] == (32, 32)\n\n        singan = PESinGAN(\n            dict(\n                type='SinGANMSGeneratorPE',\n                in_channels=3,\n                out_channels=3,\n                num_scales=3,\n                interp_pad=True,\n                noise_with_pad=False),\n            self.disc,\n            num_scales=3,\n            data_preprocessor=self.data_preprocessor,\n            noise_weight_init=0.1,\n            iters_per_scale=2,\n            discriminator_steps=1,\n            generator_steps=1,\n            lr_scheduler_args=dict(milestones=[1600], gamma=0.1),\n            fixed_noise_with_pad=False)\n        optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n\n        message_hub.update_info('iter', 0)\n        for i in range(6):\n            singan.train_step(self.data_batch, optim_wrapper_dict)\n            message_hub.update_info('iter', message_hub.get_info('iter') + 1)\n            outputs = singan.forward(dict(num_batches=1), None)\n            img = torch.stack([out.fake_img.data for out in outputs])\n            if i in [0, 1]:\n                assert singan.curr_stage == 0\n                assert img.shape[-2:] == (25, 25)\n            elif i in [2, 3]:\n                assert singan.curr_stage == 1\n                assert img.shape[-2:] == (30, 30)\n            elif i in [4, 5]:\n                assert singan.curr_stage == 2\n                assert img.shape[-2:] == (32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_pe_singan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.mspie import SinGANMSGeneratorPE\n\n\nclass TestSinGANPEGen:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_args = dict(\n            in_channels=3,\n            out_channels=3,\n            kernel_size=3,\n            num_layers=3,\n            base_channels=32,\n            num_scales=3,\n            min_feat_channels=16)\n\n        cls.fixed_noises = [\n            torch.randn(1, 1, 8, 8),\n            torch.randn(1, 3, 10, 10),\n            torch.randn(1, 3, 12, 12),\n            torch.randn(1, 3, 16, 16)\n        ]\n        cls.input_sample = torch.zeros((1, 3, 8, 8))\n        cls.noise_weights = [1., 0.5, 0.5, 0.5]\n\n    def test_singan_gen_pe(self):\n        gen = SinGANMSGeneratorPE(**self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        output = gen(\n            self.input_sample,\n            self.fixed_noises,\n            self.noise_weights,\n            'rand',\n            2,\n            get_prev_res=True)\n\n        assert output['prev_res_list'][0].shape == (1, 3, 8, 8)\n\n        gen = SinGANMSGeneratorPE(\n            padding_mode='reflect', **self.default_args)  # noqa\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        with pytest.raises(NotImplementedError):\n            _ = SinGANMSGeneratorPE(\n                padding_mode='circular', **self.default_args)\n\n        gen = SinGANMSGeneratorPE(\n            padding=1, pad_at_head=False, **self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        gen = SinGANMSGeneratorPE(\n            pad_at_head=True, interp_pad=True, **self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        gen = SinGANMSGeneratorPE(\n            positional_encoding=dict(\n                type='SPE2d', embedding_dim=4, padding_idx=0),\n            allow_no_residual=True,\n            first_stage_in_channels=8,\n            **self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        gen = SinGANMSGeneratorPE(\n            positional_encoding=dict(type='CSG2d'),\n            allow_no_residual=True,\n            first_stage_in_channels=2,\n            **self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        gen = SinGANMSGeneratorPE(\n            interp_pad=True, noise_with_pad=True, **self.default_args)\n        res = gen(None, self.fixed_noises, self.noise_weights, 'rand', 2)\n        assert res.shape == (1, 3, 6, 6)\n\n        gen = SinGANMSGeneratorPE(\n            interp_pad=True, noise_with_pad=False, **self.default_args)\n        res = gen(None, self.fixed_noises, self.noise_weights, 'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_mspie/test_positional_encoding.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.mspie import CatersianGrid as CSG\nfrom mmagic.models.editors.mspie import SinusoidalPositionalEmbedding as SPE\n\n\nclass TestSPE:\n\n    @classmethod\n    def setup_class(cls):\n        cls.spe = SPE(4, 0, 32)\n\n    def test_spe_cpu(self):\n        # test spe 1d\n        embed = self.spe(torch.randn((2, 10)))\n        assert embed.shape == (2, 10, 4)\n\n        # test spe 2d\n        embed = self.spe(torch.randn((2, 3, 8, 8)))\n        assert embed.shape == (2, 8, 8, 8)\n\n        with pytest.raises(AssertionError):\n            _ = self.spe(torch.randn(2, 3, 3))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_spe_gpu(self):\n        spe = self.spe.cuda()\n        # test spe 1d\n        embed = spe(torch.randn((2, 10)).cuda())\n        assert embed.shape == (2, 10, 4)\n        assert embed.is_cuda\n\n        # test spe 2d\n        embed = spe(torch.randn((2, 3, 8, 8)).cuda())\n        assert embed.shape == (2, 8, 8, 8)\n\n        with pytest.raises(AssertionError):\n            _ = spe(torch.randn(2, 3, 3))\n\n\nclass TestCSG:\n\n    @classmethod\n    def setup_class(cls):\n        cls.csg = CSG()\n\n    def test_csg_cpu(self):\n        csg = self.csg(torch.randn((2, 3, 4, 4)))\n        assert csg.shape == (2, 2, 4, 4)\n\n        with pytest.raises(AssertionError):\n            _ = self.csg(torch.randn((2, 3, 3)))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_csg_cuda(self):\n        embed = self.csg(torch.randn((2, 4, 5, 5)).cuda())\n        assert embed.shape == (2, 2, 5, 5) and embed.is_cuda\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_nafnet/test_naf_avgpool2d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.nafnet.naf_avgpool2d import NAFAvgPool2d\n\n\ndef test_avgpool2d():\n    inputs = torch.ones((1, 3, 32, 32))\n    targets = torch.Tensor([1., 1., 1.]).view(1, 3, 1, 1)\n    tar_info = 'kernel_size=None, base_size=(48, 48),' \\\n        + ' stride=None, fast_imp=False'\n    base_size = (int(inputs.shape[-2] * 1.5), int(inputs.shape[-1] * 1.5))\n    train_size = inputs.shape\n\n    avg_pool_2d = NAFAvgPool2d(\n        base_size=base_size, train_size=train_size, fast_imp=False)\n    info = avg_pool_2d.extra_repr()\n    outputs = avg_pool_2d(inputs)\n    print(outputs)\n    assert info == tar_info\n    assert torch.all(torch.eq(targets, outputs))\n\n    avg_pool_2d = NAFAvgPool2d(\n        base_size=int(inputs.shape[-2] * 1.5),\n        train_size=train_size,\n        fast_imp=False)\n    info = avg_pool_2d.extra_repr()\n    tar_info = 'kernel_size=None, base_size=48,' \\\n        + ' stride=None, fast_imp=False'\n    outputs = avg_pool_2d(inputs)\n    print(outputs)\n    assert info == tar_info\n    assert torch.all(torch.eq(targets, outputs))\n\n    avg_pool_2d = NAFAvgPool2d(\n        base_size=base_size, train_size=train_size, fast_imp=True)\n    info = avg_pool_2d.extra_repr()\n    tar_info = 'kernel_size=None, base_size=(48, 48),' \\\n        + ' stride=None, fast_imp=True'\n    outputs = avg_pool_2d(inputs)\n    print(outputs)\n    assert info == tar_info\n    assert torch.all(torch.eq(targets, outputs))\n\n    avg_pool_2d = NAFAvgPool2d(\n        base_size=(16, 16), train_size=train_size, fast_imp=True)\n    info = avg_pool_2d.extra_repr()\n    tar_info = 'kernel_size=None, base_size=(16, 16),' \\\n        + ' stride=None, fast_imp=True'\n    outputs = avg_pool_2d(inputs)\n    print(outputs)\n    assert info == tar_info\n    assert torch.all(torch.eq(targets, outputs))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_nafnet/test_naf_layernorm2d.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.nafnet.naf_layerNorm2d import LayerNorm2d\n\n\ndef test_layer_norm():\n    inputs = torch.ones((1, 3, 64, 64))\n    targets = torch.zeros((1, 3, 64, 64))\n\n    layer_norm_2d = LayerNorm2d(inputs.shape[1])\n    outputs = layer_norm_2d(inputs)\n    assert outputs.shape == targets.shape\n    assert torch.all(torch.eq(outputs, targets))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_nafnet/test_nafbaseline.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models import NAFBaseline, NAFBaselineLocal\n\n\ndef test_nafnet():\n\n    model = NAFBaseline(\n        img_channel=3,\n        mid_channels=64,\n        enc_blk_nums=[2, 2, 4, 8],\n        middle_blk_num=12,\n        dec_blk_nums=[2, 2, 2, 2],\n    )\n\n    # test attributes\n    assert model.__class__.__name__ == 'NAFBaseline'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n\n    # test on cpu\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef test_baseline_local():\n\n    model = NAFBaselineLocal(\n        img_channel=3,\n        mid_channels=64,\n        enc_blk_nums=[1, 1, 1, 28],\n        middle_blk_num=1,\n        dec_blk_nums=[1, 1, 1, 1],\n    )\n\n    # test attributes\n    assert model.__class__.__name__ == 'NAFBaselineLocal'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n\n    # test on cpu\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_nafnet/test_nafnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models import NAFNet, NAFNetLocal\n\n\ndef test_nafnet():\n\n    model = NAFNet(\n        img_channels=3,\n        mid_channels=64,\n        enc_blk_nums=[2, 2, 4, 8],\n        middle_blk_num=12,\n        dec_blk_nums=[2, 2, 2, 2],\n    )\n\n    # test attributes\n    assert model.__class__.__name__ == 'NAFNet'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n\n    # test on cpu\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef test_nafnet_local():\n\n    model = NAFNetLocal(\n        img_channels=3,\n        mid_channels=64,\n        enc_blk_nums=[1, 1, 1, 28],\n        middle_blk_num=1,\n        dec_blk_nums=[1, 1, 1, 1],\n    )\n\n    # test attributes\n    assert model.__class__.__name__ == 'NAFNetLocal'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 64, 64)\n    targets = torch.rand(1, 3, 64, 64)\n\n    # test on cpu\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_mask_conv_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors import MaskConvModule\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_mask_conv_module():\n    with pytest.raises(KeyError):\n        # conv_cfg must be a dict or None\n        conv_cfg = dict(type='conv')\n        MaskConvModule(3, 8, 2, conv_cfg=conv_cfg)\n\n    with pytest.raises(AssertionError):\n        # norm_cfg must be a dict or None\n        norm_cfg = ['norm']\n        MaskConvModule(3, 8, 2, norm_cfg=norm_cfg)\n\n    with pytest.raises(AssertionError):\n        # order elements must be ('conv', 'norm', 'act')\n        order = ['conv', 'norm', 'act']\n        MaskConvModule(3, 8, 2, order=order)\n\n    with pytest.raises(AssertionError):\n        # order elements must be ('conv', 'norm', 'act')\n        order = ('conv', 'norm')\n        MaskConvModule(3, 8, 2, order=order)\n\n    with pytest.raises(KeyError):\n        # softmax is not supported\n        act_cfg = dict(type='softmax')\n        MaskConvModule(3, 8, 2, act_cfg=act_cfg)\n\n    conv_cfg = dict(type='PConv', multi_channel=True)\n    conv = MaskConvModule(3, 8, 2, conv_cfg=conv_cfg)\n    x = torch.rand(1, 3, 256, 256)\n    mask_in = torch.ones_like(x)\n    mask_in[..., 20:130, 120:150] = 0.\n    output, mask_update = conv(x, mask_in)\n    assert output.shape == (1, 8, 255, 255)\n    assert mask_update.shape == (1, 8, 255, 255)\n\n    # add test for ['norm', 'conv', 'act']\n    conv = MaskConvModule(\n        3, 8, 2, order=('norm', 'conv', 'act'), conv_cfg=conv_cfg)\n    x = torch.rand(1, 3, 256, 256)\n    output = conv(x, mask_in, return_mask=False)\n    assert output.shape == (1, 8, 255, 255)\n\n    conv = MaskConvModule(\n        3, 8, 3, padding=1, conv_cfg=conv_cfg, with_spectral_norm=True)\n    assert hasattr(conv.conv, 'weight_orig')\n    output = conv(x, return_mask=False)\n    assert output.shape == (1, 8, 256, 256)\n\n    conv = MaskConvModule(\n        3,\n        8,\n        3,\n        padding=1,\n        norm_cfg=dict(type='BN'),\n        padding_mode='reflect',\n        conv_cfg=conv_cfg)\n    assert isinstance(conv.padding_layer, nn.ReflectionPad2d)\n    output = conv(x, mask_in, return_mask=False)\n    assert output.shape == (1, 8, 256, 256)\n\n    conv = MaskConvModule(\n        3, 8, 3, padding=1, act_cfg=dict(type='LeakyReLU'), conv_cfg=conv_cfg)\n    output = conv(x, mask_in, return_mask=False)\n    assert output.shape == (1, 8, 256, 256)\n\n    with pytest.raises(KeyError):\n        conv = MaskConvModule(3, 8, 3, padding=1, padding_mode='igccc')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_partial_conv.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import PartialConv2d\n\n\ndef test_pconv2d():\n    pconv2d = PartialConv2d(\n        3, 2, kernel_size=1, stride=1, multi_channel=True, eps=1e-8)\n\n    x = torch.rand(1, 3, 6, 6)\n    mask = torch.ones_like(x)\n    mask[..., 2, 2] = 0.\n    output, updated_mask = pconv2d(x, mask=mask)\n    assert output.shape == (1, 2, 6, 6)\n    assert updated_mask.shape == (1, 2, 6, 6)\n\n    output = pconv2d(x, mask=None)\n    assert output.shape == (1, 2, 6, 6)\n\n    pconv2d = PartialConv2d(\n        3, 2, kernel_size=1, stride=1, multi_channel=True, eps=1e-8)\n    output = pconv2d(x, mask=None)\n    assert output.shape == (1, 2, 6, 6)\n\n    pconv2d = PartialConv2d(\n        3, 2, kernel_size=1, stride=1, multi_channel=False, eps=1e-8)\n    output = pconv2d(x, mask=None)\n    assert output.shape == (1, 2, 6, 6)\n\n    pconv2d = PartialConv2d(\n        3,\n        2,\n        kernel_size=1,\n        stride=1,\n        bias=False,\n        multi_channel=True,\n        eps=1e-8)\n    output = pconv2d(x, mask=mask, return_mask=False)\n    assert output.shape == (1, 2, 6, 6)\n\n    with pytest.raises(AssertionError):\n        pconv2d(x, mask=torch.ones(1, 1, 6, 6))\n\n    pconv2d = PartialConv2d(\n        3,\n        2,\n        kernel_size=1,\n        stride=1,\n        bias=False,\n        multi_channel=False,\n        eps=1e-8)\n    output = pconv2d(x, mask=None)\n    assert output.shape == (1, 2, 6, 6)\n\n    with pytest.raises(AssertionError):\n        output = pconv2d(x, mask=mask[0])\n\n    with pytest.raises(AssertionError):\n        output = pconv2d(x, mask=torch.ones(1, 3, 6, 6))\n\n    if torch.cuda.is_available():\n        pconv2d = PartialConv2d(\n            3,\n            2,\n            kernel_size=1,\n            stride=1,\n            bias=False,\n            multi_channel=False,\n            eps=1e-8).cuda().half()\n        output = pconv2d(x.cuda().half(), mask=None)\n        assert output.shape == (1, 2, 6, 6)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_pconv_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import PConvDecoder, PConvEncoder\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef test_pconv_dec():\n    pconv_enc = PConvEncoder()\n    img = torch.randn(2, 3, 128, 128)\n    mask = torch.ones_like(img)\n    output = pconv_enc(img, mask)\n\n    pconv_dec = PConvDecoder()\n    input = {\n        'hidden_feats': output['hidden_feats'],\n        'hidden_masks': output['hidden_masks']\n    }\n    h, h_mask = pconv_dec(input)\n    assert h.detach().numpy().shape == (2, 3, 128, 128)\n    assert h_mask.detach().numpy().shape == (2, 3, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_pconv_encoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine.utils.dl_utils.parrots_wrapper import _BatchNorm\n\nfrom mmagic.models.editors import PConvEncoder\n\n\ndef test_pconv_enc():\n    pconv_enc = PConvEncoder(norm_eval=False)\n    pconv_enc.train()\n    for name, module in pconv_enc.named_modules():\n        if isinstance(module, _BatchNorm):\n            assert module.training\n\n    pconv_enc = PConvEncoder(norm_eval=True)\n    pconv_enc.train()\n    for name, module in pconv_enc.named_modules():\n        if isinstance(module, _BatchNorm):\n            assert not module.training\n\n    pconv_enc = PConvEncoder()\n    img = torch.randn(2, 3, 128, 128)\n    mask = torch.ones_like(img)\n    output = pconv_enc(img, mask)\n    assert isinstance(output['hidden_feats'], dict)\n    assert isinstance(output['hidden_masks'], dict)\n    assert output['out'].detach().numpy().shape == (2, 512, 1, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_pconv_encoder_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import PConvEncoderDecoder\n\n\ndef test_pconv_encdec():\n    pconv_enc_cfg = dict(type='PConvEncoder')\n    pconv_dec_cfg = dict(type='PConvDecoder')\n\n    if torch.cuda.is_available():\n        pconv_encdec = PConvEncoderDecoder(pconv_enc_cfg, pconv_dec_cfg)\n        pconv_encdec.init_weights()\n        pconv_encdec.cuda()\n        x = torch.randn((1, 3, 256, 256)).cuda()\n        mask = torch.ones_like(x)\n        mask[..., 50:150, 100:250] = 1.\n        res, updated_mask = pconv_encdec(x, mask)\n        assert res.shape == (1, 3, 256, 256)\n        assert mask.shape == (1, 3, 256, 256)\n\n        with pytest.raises(TypeError):\n            pconv_encdec.init_weights(pretrained=dict(igccc=8989))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pconv/test_pconv_inpaintor.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom os.path import dirname, join\n\nimport pytest\nimport torch\nfrom mmengine import Config\nfrom mmengine.optim import OptimWrapper\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_pconv_inpaintor():\n    register_all_modules()\n\n    config_file = join(\n        dirname(__file__), '../../..', 'configs', 'pconv_test.py')\n    cfg = Config.fromfile(config_file)\n\n    inpaintor = MODELS.build(cfg.model)\n\n    assert inpaintor.__class__.__name__ == 'PConvInpaintor'\n\n    if torch.cuda.is_available():\n        inpaintor = inpaintor.cuda()\n\n    gt_img = torch.randn(3, 256, 256)\n    mask = torch.zeros_like(gt_img)[0:1, ...]\n    mask[..., 100:210, 100:210] = 1.\n    masked_img = gt_img * (1. - mask)\n    mask_bbox = [100, 100, 110, 110]\n    data_batch = {\n        'inputs': [masked_img],\n        'data_samples':\n        [DataSample(\n            mask=mask,\n            mask_bbox=mask_bbox,\n            gt_img=gt_img,\n        )]\n    }\n\n    optim_g = torch.optim.Adam(inpaintor.generator.parameters(), lr=0.0001)\n    optim_g = OptimWrapper(optim_g)\n\n    for i in range(5):\n        log_vars = inpaintor.train_step(data_batch, optim_g)\n        assert 'loss_l1_hole' in log_vars\n        assert 'loss_l1_valid' in log_vars\n        assert 'loss_tv' in log_vars\n\n    # check for forward_test\n    data = inpaintor.data_preprocessor(data_batch, True)\n    data_inputs, data_sample = data['inputs'], data['data_samples']\n    output = inpaintor.forward_test(data_inputs, data_sample)\n    prediction = output.split()[0]\n    assert 'fake_res' in prediction\n    assert 'fake_img' in prediction\n    assert 'pred_img' in prediction\n    assert prediction.pred_img.shape == (3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pggan/test_pggan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport numpy as np\nimport pytest\nimport torch\nfrom mmengine import MessageHub\n\nfrom mmagic.engine import PGGANOptimWrapperConstructor\nfrom mmagic.models import ProgressiveGrowingGAN\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestPGGAN(TestCase):\n\n    generator_cfg = dict(\n        type='PGGANGenerator',\n        noise_size=8,\n        out_scale=16,\n        base_channels=32,\n        max_channels=32)\n\n    discriminator_cfg = dict(\n        type='PGGANDiscriminator', in_scale=16, label_size=0)\n\n    data_preprocessor = dict(type='DataPreprocessor')\n\n    nkimgs_per_scale = {'4': 0.004, '8': 0.008, '16': 0.016}\n\n    lr_schedule = dict(generator={'8': 0.0015}, discriminator={'8': 0.0015})\n    optim_wrapper_cfg = dict(\n        generator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        discriminator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        lr_schedule=lr_schedule)\n\n    def test_pggan_cpu(self):\n        message_hub = MessageHub.get_instance('test-pggan')\n        message_hub.update_info('iter', 0)\n\n        # test default config\n        pggan = ProgressiveGrowingGAN(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            ema_config=dict(interval=1))\n\n        constructor = PGGANOptimWrapperConstructor(self.optim_wrapper_cfg)\n        optim_wrapper_dict = constructor(pggan)\n\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 16, 16)) for _ in range(3)\n            ])\n\n        for iter_num in range(6):\n            pggan.train_step(data_batch, optim_wrapper_dict)\n            # print(iter_num, pggan._next_scale_int)\n            if iter_num in [0, 1]:\n                assert pggan.curr_scale[0] == 4\n            elif iter_num in [2, 3]:\n                assert pggan.curr_scale[0] == 8\n            elif iter_num in [4, 5]:\n                assert pggan.curr_scale[0] == 16\n\n            if iter_num == 2:\n                assert np.isclose(pggan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 3:\n                assert np.isclose(pggan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 5:\n                assert np.isclose(pggan._actual_nkimgs[-1], 0.012, atol=1e-8)\n\n        # test forward\n        outputs = pggan.forward(dict(img=torch.randn(3, 3, 16, 16)))\n        assert len(outputs) == 3\n        assert all(['gt_img' in out for out in outputs])\n\n        outputs = pggan.forward(dict(num_batches=2))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        outputs = pggan.forward(\n            dict(\n                num_batches=2,\n                return_noise=True,\n                transition_weight=0.2,\n                sample_model='ema'))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        outputs = pggan.forward(dict(num_batches=2, sample_model='orig'))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        outputs = pggan.forward(dict(num_batches=2, sample_model='ema/orig'))\n        assert len(outputs) == 2\n        assert all([out.ema.fake_img.shape == (3, 16, 16) for out in outputs])\n        assert all([out.orig.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        outputs = pggan.forward(dict(num_batches=2, curr_scale=8))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 8, 8) for out in outputs])\n\n        outputs = pggan.forward(dict(noise=torch.randn(2, 8)))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        outputs = pggan.forward(torch.randn(2, 8))\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 16, 16) for out in outputs])\n\n        # test train_step with error\n        with pytest.raises(RuntimeError):\n            data_batch = dict(\n                inputs=dict(),\n                data_samples=[\n                    DataSample(gt_img=torch.randn(3, 4, 32)) for _ in range(3)\n                ])\n            _ = pggan.train_step(data_batch, optim_wrapper_dict)\n\n        # test train_step without ema\n        pggan = ProgressiveGrowingGAN(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale)\n        optim_wrapper_dict = constructor(pggan)\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 16, 16)) for _ in range(3)\n            ])\n        pggan.train_step(data_batch, optim_wrapper_dict)\n\n        # test train_step with disc_step != 1\n        pggan._disc_steps = 2\n        pggan.train_step(data_batch, optim_wrapper_dict)\n\n        # test default configs\n        pggan = ProgressiveGrowingGAN(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            interp_real=dict(mode='bicubic'),\n            ema_config=dict(interval=1))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pggan_cuda(self):\n        pggan = ProgressiveGrowingGAN(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            ema_config=dict(interval=1)).cuda()\n\n        constructor = PGGANOptimWrapperConstructor(self.optim_wrapper_cfg)\n        optim_wrapper_dict = constructor(pggan)\n\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 16, 16)) for _ in range(3)\n            ])\n\n        for iter_num in range(6):\n            pggan.train_step(data_batch, optim_wrapper_dict)\n            if iter_num in [0, 1]:\n                assert pggan.curr_scale[0] == 4\n            elif iter_num in [2, 3]:\n                assert pggan.curr_scale[0] == 8\n            elif iter_num in [4, 5]:\n                assert pggan.curr_scale[0] == 16\n\n            if iter_num == 2:\n                assert np.isclose(pggan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 3:\n                assert np.isclose(pggan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 5:\n                assert np.isclose(pggan._actual_nkimgs[-1], 0.012, atol=1e-8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pggan/test_pggan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.pggan import PGGANDiscriminator\n\n\nclass TestPGGANDiscriminator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(in_scale=16, label_size=2)\n        cls.default_inputx16 = torch.randn((2, 3, 16, 16))\n        cls.default_inputx4 = torch.randn((2, 3, 4, 4))\n        cls.default_inputx8 = torch.randn((2, 3, 8, 8))\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_pggan_discriminator(self):\n        # test with default cfg\n        disc = PGGANDiscriminator(**self.default_cfg)\n\n        score, label = disc(self.default_inputx16, transition_weight=0.1)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score, label = disc(\n            self.default_inputx8, transition_weight=0.1, curr_scale=8)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score, label = disc(\n            self.default_inputx4, transition_weight=0.1, curr_scale=4)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n\n        disc = PGGANDiscriminator(\n            in_scale=16,\n            mbstd_cfg=None,\n            downsample_cfg=dict(type='nearest', scale_factor=0.5))\n\n        score = disc(self.default_inputx16, transition_weight=0.1)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score = disc(self.default_inputx8, transition_weight=0.1, curr_scale=8)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score = disc(self.default_inputx4, transition_weight=0.1, curr_scale=4)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        assert not disc.with_mbstd\n\n        with pytest.raises(NotImplementedError):\n            _ = PGGANDiscriminator(\n                in_scale=16, mbstd_cfg=None, downsample_cfg=dict(type='xx'))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pggan_discriminator_cuda(self):\n        # test with default cfg\n        disc = PGGANDiscriminator(**self.default_cfg).cuda()\n\n        score, label = disc(\n            self.default_inputx16.cuda(), transition_weight=0.1)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score, label = disc(\n            self.default_inputx8.cuda(), transition_weight=0.1, curr_scale=8)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n        score, label = disc(\n            self.default_inputx4.cuda(), transition_weight=0.1, curr_scale=4)\n        assert score.shape == (2, 1)\n        assert label.shape == (2, 2)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pggan/test_pggan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.pggan import PGGANGenerator\n\n\nclass TestPGGANGenerator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_noise = torch.randn((2, 8))\n        cls.default_cfg = dict(\n            noise_size=8, out_scale=16, base_channels=32, max_channels=32)\n\n    def test_pggan_generator(self):\n        # test with default cfg\n        gen = PGGANGenerator(**self.default_cfg)\n        res = gen(None, num_batches=2, transition_weight=0.1)\n        assert res.shape == (2, 3, 16, 16)\n\n        res = gen(self.default_noise, transition_weight=0.2)\n        assert res.shape == (2, 3, 16, 16)\n        with pytest.raises(AssertionError):\n            _ = gen(self.default_noise[:, :, None], transition_weight=0.2)\n\n        with pytest.raises(AssertionError):\n            _ = gen(torch.randn((2, 1)), transition_weight=0.2)\n\n        res = gen(torch.randn, num_batches=2, transition_weight=0.2)\n        assert res.shape == (2, 3, 16, 16)\n\n        # test with input scale\n        res = gen(None, num_batches=2, curr_scale=4)\n        assert res.shape == (2, 3, 4, 4)\n        res = gen(None, num_batches=2, curr_scale=8)\n        assert res.shape == (2, 3, 8, 8)\n\n        # test return noise\n        res = gen(None, num_batches=2, curr_scale=8, return_noise=True)\n        assert res['fake_img'].shape == (2, 3, 8, 8)\n        assert res['label'] is None\n        assert isinstance(res['noise_batch'], torch.Tensor)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['out_scale'] = 32\n        gen = PGGANGenerator(**cfg)\n        res = gen(None, num_batches=2, transition_weight=0.1)\n        assert res.shape == (2, 3, 32, 32)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['out_scale'] = 4\n        gen = PGGANGenerator(**cfg)\n        res = gen(None, num_batches=2, transition_weight=0.1)\n        assert res.shape == (2, 3, 4, 4)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pggan_generator_cuda(self):\n        # test with default cfg\n        gen = PGGANGenerator(**self.default_cfg).cuda()\n        res = gen(None, num_batches=2, transition_weight=0.1)\n        assert res.shape == (2, 3, 16, 16)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['out_scale'] = 32\n        gen = PGGANGenerator(**cfg).cuda()\n        res = gen(None, num_batches=2, transition_weight=0.1)\n        assert res.shape == (2, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pggan/test_pggan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.editors.pggan import (EqualizedLR,\n                                         EqualizedLRConvDownModule,\n                                         EqualizedLRConvModule,\n                                         EqualizedLRConvUpModule,\n                                         EqualizedLRLinearModule,\n                                         MiniBatchStddevLayer,\n                                         PGGANNoiseTo2DFeat, PixelNorm,\n                                         equalized_lr)\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestEqualizedLR:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_conv_cfg = dict(\n            in_channels=1,\n            out_channels=1,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            norm_cfg=dict(type='BN'))\n        cls.conv_input = torch.randn((2, 1, 5, 5))\n        cls.linear_input = torch.randn((2, 2))\n\n    def test_equalized_conv_module(self):\n        conv = EqualizedLRConvModule(**self.default_conv_cfg)\n        res = conv(self.conv_input)\n        assert res.shape == (2, 1, 5, 5)\n        has_equalized_lr = False\n        for _, v in conv.conv._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert has_equalized_lr\n\n        conv = EqualizedLRConvModule(\n            equalized_lr_cfg=None, **self.default_conv_cfg)\n        res = conv(self.conv_input)\n        assert res.shape == (2, 1, 5, 5)\n        has_equalized_lr = False\n        for _, v in conv.conv._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert not has_equalized_lr\n\n        conv = EqualizedLRConvModule(\n            equalized_lr_cfg=dict(gain=1), **self.default_conv_cfg)\n        res = conv(self.conv_input)\n        assert res.shape == (2, 1, 5, 5)\n        has_equalized_lr = False\n        for _, v in conv.conv._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                assert v.gain == 1\n                has_equalized_lr = True\n        assert has_equalized_lr\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_equalized_conv_module_cuda(self):\n        conv = EqualizedLRConvModule(**self.default_conv_cfg).cuda()\n        res = conv(self.conv_input.cuda())\n        assert res.shape == (2, 1, 5, 5)\n        has_equalized_lr = False\n        for _, v in conv.conv._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert has_equalized_lr\n\n    def test_equalized_linear_module(self):\n        linear = EqualizedLRLinearModule(2, 2)\n        res = linear(self.linear_input)\n        assert res.shape == (2, 2)\n        has_equalized_lr = False\n        for _, v in linear._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert has_equalized_lr\n\n        linear = EqualizedLRLinearModule(2, 2, equalized_lr_cfg=None)\n        res = linear(self.linear_input)\n        assert res.shape == (2, 2)\n        has_equalized_lr = False\n        for _, v in linear._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert not has_equalized_lr\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_equalized_linear_module_cuda(self):\n        linear = EqualizedLRLinearModule(2, 2).cuda()\n        res = linear(self.linear_input.cuda())\n        assert res.shape == (2, 2)\n        has_equalized_lr = False\n        for _, v in linear._forward_pre_hooks.items():\n            if isinstance(v, EqualizedLR):\n                has_equalized_lr = True\n        assert has_equalized_lr\n\n    def test_equalized_lr(self):\n        with pytest.raises(RuntimeError):\n            conv = nn.Conv2d(1, 1, 3, 1, 1)\n            conv = equalized_lr(conv)\n            conv = equalized_lr(conv)\n\n\nclass TestEqualizedLRConvUpModule:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=1,\n            kernel_size=3,\n            padding=1,\n            stride=2,\n            conv_cfg=dict(type='deconv'),\n            upsample=dict(type='fused_nn'),\n            norm_cfg=dict(type='PixelNorm'))\n        cls.default_input = torch.randn((2, 3, 5, 5))\n\n    def test_equalized_lr_convup_module(self, ):\n        convup = EqualizedLRConvUpModule(**self.default_cfg)\n\n        res = convup(self.default_input)\n        assert res.shape == (2, 1, 10, 10)\n        # test bp\n        res = convup(torch.randn((2, 3, 5, 5), requires_grad=True))\n        assert res.shape == (2, 1, 10, 10)\n        res.mean().backward()\n\n        # test nearest\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['upsample'] = dict(type='nearest', scale_factor=2)\n        cfg_['kernel_size'] = 4\n        convup = EqualizedLRConvUpModule(**cfg_)\n\n        res = convup(self.default_input)\n        assert res.shape == (2, 1, 20, 20)\n\n        # test nearest\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['upsample'] = None\n        cfg_['kernel_size'] = 4\n        convup = EqualizedLRConvUpModule(**cfg_)\n\n        res = convup(self.default_input)\n        assert res.shape == (2, 1, 10, 10)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_equalized_lr_convup_module_cuda(self):\n        convup = EqualizedLRConvUpModule(**self.default_cfg).cuda()\n\n        res = convup(self.default_input.cuda())\n        assert res.shape == (2, 1, 10, 10)\n        # test bp\n        res = convup(torch.randn((2, 3, 5, 5), requires_grad=True).cuda())\n        assert res.shape == (2, 1, 10, 10)\n        res.mean().backward()\n\n\nclass TestEqualizedLRConvDownModule:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=1,\n            kernel_size=3,\n            padding=1,\n            stride=2,\n            downsample=dict(type='fused_pool'))\n        cls.default_input = torch.randn((2, 3, 8, 8))\n\n    def test_equalized_lr_conv_down(self):\n        convdown = EqualizedLRConvDownModule(**self.default_cfg)\n        res = convdown(self.default_input)\n        assert res.shape == (2, 1, 4, 4)\n        # test bp\n        res = convdown(torch.randn((2, 3, 8, 8), requires_grad=True))\n        assert res.shape == (2, 1, 4, 4)\n        res.mean().backward()\n\n        # test avg pool\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['downsample'] = dict(type='avgpool', kernel_size=2, stride=2)\n        convdown = EqualizedLRConvDownModule(**cfg_)\n        res = convdown(self.default_input)\n        assert res.shape == (2, 1, 2, 2)\n\n        # test downsample is None\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['downsample'] = None\n        convdown = EqualizedLRConvDownModule(**cfg_)\n        res = convdown(self.default_input)\n        assert res.shape == (2, 1, 4, 4)\n\n        with pytest.raises(NotImplementedError):\n            cfg_ = deepcopy(self.default_cfg)\n            cfg_['downsample'] = dict(type='xxx', kernel_size=2, stride=2)\n            _ = EqualizedLRConvDownModule(**cfg_)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_equalized_lr_conv_down_cuda(self):\n        convdown = EqualizedLRConvDownModule(**self.default_cfg).cuda()\n        res = convdown(self.default_input.cuda())\n        assert res.shape == (2, 1, 4, 4)\n        # test bp\n        res = convdown(torch.randn((2, 3, 8, 8), requires_grad=True).cuda())\n        assert res.shape == (2, 1, 4, 4)\n        res.mean().backward()\n\n\nclass TestPixelNorm:\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_tensor = torch.randn((2, 3, 4, 4))\n\n    def test_pixel_norm(self):\n        pn = PixelNorm()\n        res = pn(self.input_tensor)\n        assert res.shape == (2, 3, 4, 4)\n\n        # test zero case\n        res = pn(self.input_tensor * 0)\n        assert res.shape == (2, 3, 4, 4)\n        assert (res == 0).all()\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pixel_norm_cuda(self):\n        pn = PixelNorm().cuda()\n        res = pn(self.input_tensor.cuda())\n        assert res.shape == (2, 3, 4, 4)\n\n        # test zero case\n        res = pn(self.input_tensor.cuda() * 0)\n        assert res.shape == (2, 3, 4, 4)\n        assert (res == 0).all()\n\n\nclass TestMiniBatchStddevLayer:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_input = torch.randn((2, 3, 4, 4))\n\n    def test_minibatch_stddev_layer(self):\n        ministd_layer = MiniBatchStddevLayer()\n        res = ministd_layer(self.default_input)\n        assert res.shape == (2, 4, 4, 4)\n\n        with pytest.raises(AssertionError):\n            _ = ministd_layer(torch.randn((5, 4, 3, 3)))\n\n        ministd_layer = MiniBatchStddevLayer(group_size=3)\n        res = ministd_layer(torch.randn((2, 6, 4, 4)))\n        assert res.shape == (2, 7, 4, 4)\n\n        # test bp\n        ministd_layer = MiniBatchStddevLayer()\n        res = ministd_layer(self.default_input.requires_grad_())\n        assert res.shape == (2, 4, 4, 4)\n        res.mean().backward()\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_minibatch_stddev_layer_cuda(self):\n        ministd_layer = MiniBatchStddevLayer().cuda()\n        res = ministd_layer(self.default_input.cuda())\n        assert res.shape == (2, 4, 4, 4)\n\n        ministd_layer = MiniBatchStddevLayer(group_size=3).cuda()\n        res = ministd_layer(torch.randn((2, 6, 4, 4)).cuda())\n        assert res.shape == (2, 7, 4, 4)\n\n        # test bp\n        ministd_layer = MiniBatchStddevLayer().cuda()\n        res = ministd_layer(self.default_input.requires_grad_().cuda())\n        assert res.shape == (2, 4, 4, 4)\n        res.mean().backward()\n\n\nclass TestPGGANNoiseTo2DFeat:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_input = torch.randn((2, 10))\n        cls.default_cfg = dict(noise_size=10, out_channels=1)\n\n    def test_pggan_noise2feat(self):\n        module = PGGANNoiseTo2DFeat(**self.default_cfg)\n        res = module(self.default_input)\n        assert res.shape == (2, 1, 4, 4)\n        assert isinstance(module.linear, EqualizedLRLinearModule)\n        assert not module.linear.bias\n        assert module.with_norm\n        assert isinstance(module.norm, PixelNorm)\n        assert isinstance(module.activation, nn.LeakyReLU)\n\n        module = PGGANNoiseTo2DFeat(**self.default_cfg, act_cfg=None)\n        res = module(self.default_input)\n        assert res.shape == (2, 1, 4, 4)\n        assert isinstance(module.linear, EqualizedLRLinearModule)\n        assert not module.linear.bias\n        assert module.with_norm\n        assert not module.with_activation\n\n        module = PGGANNoiseTo2DFeat(\n            **self.default_cfg, norm_cfg=None, normalize_latent=False)\n        res = module(self.default_input)\n        assert res.shape == (2, 1, 4, 4)\n        assert isinstance(module.linear, EqualizedLRLinearModule)\n        assert not module.linear.bias\n        assert not module.with_norm\n        assert isinstance(module.activation, nn.LeakyReLU)\n\n        with pytest.raises(AssertionError):\n            _ = module(torch.randn((2, 1, 2)))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pggan_noise2feat_cuda(self):\n        module = PGGANNoiseTo2DFeat(**self.default_cfg).cuda()\n        res = module(self.default_input.cuda())\n        assert res.shape == (2, 1, 4, 4)\n        assert isinstance(module.linear, EqualizedLRLinearModule)\n        assert not module.linear.bias\n        assert module.with_norm\n        assert isinstance(module.activation, nn.LeakyReLU)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pix2pix/test_pix2pix.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nimport platform\nimport sys\n\nimport pytest\nimport torch\nfrom mmengine.logging import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\n\nfrom mmagic.models import DataPreprocessor, Pix2Pix\nfrom mmagic.models.archs import PatchDiscriminator\nfrom mmagic.models.editors.pix2pix import UnetGenerator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\ndef obj_from_dict(info: dict, parent=None, default_args=None):\n    \"\"\"Initialize an object from dict.\n\n    The dict must contain the key \"type\", which indicates the object type, it\n    can be either a string or type, such as \"list\" or ``list``. Remaining\n    fields are treated as the arguments for constructing the object.\n\n    Args:\n        info (dict): Object types and arguments.\n        parent (:class:`module`): Module which may containing expected object\n            classes.\n        default_args (dict, optional): Default arguments for initializing the\n            object.\n\n    Returns:\n        any type: Object built from the dict.\n    \"\"\"\n    assert isinstance(info, dict) and 'type' in info\n    assert isinstance(default_args, dict) or default_args is None\n    args = info.copy()\n    obj_type = args.pop('type')\n    # if mmcv.is_str(obj_type):\n    if isinstance(obj_type, str):\n        if parent is not None:\n            obj_type = getattr(parent, obj_type)\n        else:\n            obj_type = sys.modules[obj_type]\n    elif not isinstance(obj_type, type):\n        raise TypeError('type must be a str or valid type, but '\n                        f'got {type(obj_type)}')\n    if default_args is not None:\n        for name, value in default_args.items():\n            args.setdefault(name, value)\n    return obj_type(**args)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_pix2pix():\n    # model settings\n    model_cfg = dict(\n        data_preprocessor=DataPreprocessor(),\n        generator=dict(\n            type='UnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_down=8,\n            base_channels=64,\n            norm_cfg=dict(type='BN'),\n            use_dropout=True,\n            init_cfg=dict(type='normal', gain=0.02)),\n        discriminator=dict(\n            type='PatchDiscriminator',\n            in_channels=6,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='BN'),\n            init_cfg=dict(type='normal', gain=0.02)),\n        default_domain='photo',\n        reachable_domains=['photo'],\n        related_domains=['photo', 'mask'])\n\n    # build synthesizer\n    synthesizer = Pix2Pix(**model_cfg)\n    # test attributes\n    assert synthesizer.__class__.__name__ == 'Pix2Pix'\n    assert isinstance(synthesizer.generators['photo'], UnetGenerator)\n    assert isinstance(synthesizer.discriminators['photo'], PatchDiscriminator)\n\n    # prepare data\n    img_mask = torch.rand(1, 3, 256, 256)\n    img_photo = torch.rand(1, 3, 256, 256)\n    data_batch = dict(inputs={'img_mask': img_mask, 'img_photo': img_photo})\n\n    # prepare optimizer\n    optim_cfg = dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))\n    optimizer = OptimWrapperDict(\n        generators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(params=getattr(synthesizer, 'generators').parameters()))),\n        discriminators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(\n                    params=getattr(synthesizer,\n                                   'discriminators').parameters()))))\n\n    # test forward_test\n    domain = 'photo'\n    with torch.no_grad():\n        outputs = synthesizer(img_mask, target_domain=domain, test_mode=True)\n    assert torch.equal(outputs['source'], data_batch['inputs']['img_mask'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 256, 256)\n\n    # test forward_train\n    outputs = synthesizer(img_mask, target_domain=domain, test_mode=False)\n    assert torch.equal(outputs['source'], data_batch['inputs']['img_mask'])\n    assert torch.is_tensor(outputs['target'])\n    assert outputs['target'].size() == (1, 3, 256, 256)\n\n    # test train_step\n    message_hub = MessageHub.get_instance('pix2pix-test')\n    message_hub.update_info('iter', 0)\n    log_vars = synthesizer.train_step(data_batch, optimizer)\n    print(log_vars.keys())\n    assert isinstance(log_vars, dict)\n    for v in ['loss_gan_d_fake', 'loss_gan_d_real', 'loss_gan_g']:\n        assert isinstance(log_vars[v].item(), float)\n\n    # test cuda\n    if torch.cuda.is_available():\n        synthesizer = synthesizer.cuda()\n        optimizer = OptimWrapperDict(\n            generators=OptimWrapper(\n                obj_from_dict(\n                    optim_cfg, torch.optim,\n                    dict(\n                        params=getattr(synthesizer,\n                                       'generators').parameters()))),\n            discriminators=OptimWrapper(\n                obj_from_dict(\n                    optim_cfg, torch.optim,\n                    dict(\n                        params=getattr(synthesizer,\n                                       'discriminators').parameters()))))\n        data_batch_cuda = copy.deepcopy(data_batch)\n        data_batch_cuda['inputs']['img_mask'] = img_mask.cuda()\n        data_batch_cuda['inputs']['img_photo'] = img_photo.cuda()\n\n        # forward_test\n        with torch.no_grad():\n            outputs = synthesizer(\n                data_batch_cuda['inputs']['img_mask'],\n                target_domain=domain,\n                test_mode=True)\n        assert torch.equal(outputs['source'].cpu(),\n                           data_batch_cuda['inputs']['img_mask'].cpu())\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 256, 256)\n\n        # test forward_train\n        outputs = synthesizer(\n            data_batch_cuda['inputs']['img_mask'],\n            target_domain=domain,\n            test_mode=False)\n        assert torch.equal(outputs['source'],\n                           data_batch_cuda['inputs']['img_mask'])\n        assert torch.is_tensor(outputs['target'])\n        assert outputs['target'].size() == (1, 3, 256, 256)\n\n        # train_step\n        message_hub.update_info('iter', 0)\n        log_vars = synthesizer.train_step(data_batch_cuda, optimizer)\n        print(log_vars)\n        assert isinstance(log_vars, dict)\n        for v in ['loss_gan_d_fake', 'loss_gan_d_real', 'loss_gan_g']:\n            assert isinstance(log_vars[v].item(), float)\n\n    # test disc_steps and disc_init_steps\n    data_batch['inputs']['img_mask'] = img_mask.cpu()\n    data_batch['inputs']['img_photo'] = img_photo.cpu()\n    synthesizer = Pix2Pix(\n        **model_cfg, discriminator_steps=2, disc_init_steps=2).cpu()\n    optimizer = OptimWrapperDict(\n        generators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(params=getattr(synthesizer, 'generators').parameters()))),\n        discriminators=OptimWrapper(\n            obj_from_dict(\n                optim_cfg, torch.optim,\n                dict(\n                    params=getattr(synthesizer,\n                                   'discriminators').parameters()))))\n\n    # iter 0, 1\n    for i in range(2):\n        message_hub.update_info('iter', i)\n        log_vars = synthesizer.train_step(data_batch, optimizer)\n        assert isinstance(log_vars, dict)\n        assert log_vars.get('loss_gan_g') is None\n        for v in ['loss_gan_d_fake', 'loss_gan_d_real']:\n            assert isinstance(log_vars[v].item(), float)\n\n    # iter 2, 3, 4, 5\n    for i in range(2, 6):\n        message_hub.update_info('iter', i)\n        log_vars = synthesizer.train_step(data_batch, optimizer)\n        assert isinstance(log_vars, dict)\n        log_check_list = ['loss_gan_d_fake', 'loss_gan_d_real', 'loss_gan_g']\n        if (i + 1) % 2 == 1:\n            assert log_vars.get('loss_gan_g') is None\n            log_check_list.remove('loss_gan_g')\n\n        for v in log_check_list:\n            assert isinstance(log_vars[v].item(), float)\n\n\ndef test_pix2pix_val_step():\n    # model settings\n    model_cfg = dict(\n        data_preprocessor=DataPreprocessor(),\n        generator=dict(\n            type='UnetGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_down=8,\n            base_channels=64,\n            norm_cfg=dict(type='BN'),\n            use_dropout=True,\n            init_cfg=dict(type='normal', gain=0.02)),\n        discriminator=dict(\n            type='PatchDiscriminator',\n            in_channels=6,\n            base_channels=64,\n            num_conv=3,\n            norm_cfg=dict(type='BN'),\n            init_cfg=dict(type='normal', gain=0.02)),\n        default_domain='photo',\n        reachable_domains=['photo'],\n        related_domains=['photo', 'mask'])\n    synthesizer = Pix2Pix(**model_cfg)\n    img_mask = torch.rand(1, 3, 256, 256)\n    img_photo = torch.rand(1, 3, 256, 256)\n    data_batch = dict(inputs={'img_mask': img_mask, 'img_photo': img_photo})\n    out = synthesizer.val_step(data_batch)\n    assert isinstance(out, list)\n    assert len(out) == 1\n    # assert 'gt_photo' in out[0]\n    # assert 'gt_mask' in out[0]\n    assert 'fake_photo' in out[0]\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pix2pix/test_pix2pix_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.pix2pix import UnetGenerator\n\n\nclass TestUnetGenerator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=3,\n            num_down=8,\n            base_channels=64,\n            norm_cfg=dict(type='BN'),\n            use_dropout=True,\n            init_cfg=dict(type='normal', gain=0.02))\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_pix2pix_generator_cpu(self):\n        # test with default cfg\n        real_a = torch.randn((2, 3, 256, 256))\n        gen = UnetGenerator(**self.default_cfg)\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['num_down'] = 7\n        gen = UnetGenerator(**cfg)\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        with pytest.raises(TypeError):\n            gen = UnetGenerator(**self.default_cfg)\n            gen.init_weights(pretrained=10)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_pix2pix_generator_cuda(self):\n        # test with default cfg\n        real_a = torch.randn((2, 3, 256, 256)).cuda()\n        gen = UnetGenerator(**self.default_cfg).cuda()\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        # test args system\n        cfg = deepcopy(self.default_cfg)\n        cfg['num_down'] = 7\n        gen = UnetGenerator(**cfg).cuda()\n        fake_b = gen(real_a)\n        assert fake_b.shape == (2, 3, 256, 256)\n\n        with pytest.raises(TypeError):\n            gen = UnetGenerator(**self.default_cfg)\n            gen.init_weights(pretrained=10)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_pix2pix/test_pix2pix_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.pix2pix.pix2pix_modules import \\\n    UnetSkipConnectionBlock\n\n\ndef test_unet_skip_connection_block():\n    block = UnetSkipConnectionBlock(16, 16, is_innermost=True)\n    input = torch.rand((2, 16, 128, 128))\n    output = block(input)\n    assert output.detach().numpy().shape == (2, 32, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_plain/test_plain_decoder.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.archs import VGG16\nfrom mmagic.models.editors import PlainDecoder\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef _demo_inputs(input_shape=(1, 4, 64, 64)):\n    \"\"\"Create a superset of inputs needed to run encoder.\n\n    Args:\n        input_shape (tuple): input batch dimensions.\n            Default: (1, 4, 64, 64).\n    \"\"\"\n    img = np.random.random(input_shape).astype(np.float32)\n    img = torch.from_numpy(img)\n\n    return img\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_plain_decoder():\n    \"\"\"Test PlainDecoder.\"\"\"\n\n    with torch.no_grad():\n        model = PlainDecoder(512)\n        model.init_weights()\n        model.train()\n        # create max_pooling index for training\n        encoder = VGG16(4)\n        img = _demo_inputs()\n        outputs = encoder(img)\n        prediction = model(outputs)\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n        # test forward with gpu\n        if torch.cuda.is_available():\n            model = PlainDecoder(512)\n            model.init_weights()\n            model.train()\n            model.cuda()\n            encoder = VGG16(4)\n            encoder.cuda()\n            img = _demo_inputs().cuda()\n            outputs = encoder(img)\n            prediction = model(outputs)\n            assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_plain/test_plain_refiner.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import PlainRefiner\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_plain_refiner():\n    with torch.no_grad():\n        plain_refiner = PlainRefiner()\n        plain_refiner.init_weights()\n        input = torch.rand((2, 4, 128, 128))\n        raw_alpha = torch.rand((2, 1, 128, 128))\n        output = plain_refiner(input, raw_alpha)\n        assert output.detach().numpy().shape == (2, 1, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_rdn/test_rdn_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models import RDNNet\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_rdn():\n\n    scale = 4\n\n    model = RDNNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=64,\n        channel_growth=32,\n        num_blocks=16,\n        upscale_factor=scale)\n\n    # test attributes\n    assert model.__class__.__name__ == 'RDNNet'\n\n    # prepare data\n    inputs = torch.rand(1, 3, 32, 16)\n    targets = torch.rand(1, 3, 128, 64)\n\n    # prepare loss\n    loss_function = nn.L1Loss()\n\n    # prepare optimizer\n    optimizer = torch.optim.Adam(model.parameters())\n\n    # test on cpu\n    output = model(inputs)\n    optimizer.zero_grad()\n    loss = loss_function(output, targets)\n    loss.backward()\n    optimizer.step()\n    assert torch.is_tensor(output)\n    assert output.shape == targets.shape\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        optimizer = torch.optim.Adam(model.parameters())\n        inputs = inputs.cuda()\n        targets = targets.cuda()\n        output = model(inputs)\n        optimizer.zero_grad()\n        loss = loss_function(output, targets)\n        loss.backward()\n        optimizer.step()\n        assert torch.is_tensor(output)\n        assert output.shape == targets.shape\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_real_basicvsr/test_real_basicvsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors import (RealBasicVSR, RealBasicVSRNet,\n                                   UNetDiscriminatorWithSpectralNorm)\nfrom mmagic.models.losses import GANLoss, L1Loss, PerceptualLoss, PerceptualVGG\nfrom mmagic.structures import DataSample\n\n\n@patch.object(PerceptualVGG, 'init_weights')\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_real_basicvsr(init_weights):\n\n    model = RealBasicVSR(\n        generator=dict(\n            type='RealBasicVSRNet',\n            mid_channels=4,\n            num_propagation_blocks=1,\n            num_cleaning_blocks=1,\n            dynamic_refine_thres=5,  # change to 5 for test\n            spynet_pretrained=None,\n            is_fix_cleaning=False,\n            is_sequential_cleaning=False),\n        discriminator=dict(\n            type='UNetDiscriminatorWithSpectralNorm',\n            in_channels=3,\n            mid_channels=4,\n            skip_connection=True),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        cleaning_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={\n                '2': 0.1,\n                '7': 0.1,\n                '16': 1.0,\n                '25': 1.0,\n                '34': 1.0,\n            },\n            vgg_type='vgg19',\n            perceptual_weight=1.0,\n            style_weight=0,\n            norm_img=False),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=5e-2,\n            real_label_val=1.0,\n            fake_label_val=0),\n        is_use_sharpened_gt_in_pixel=True,\n        is_use_sharpened_gt_in_percep=True,\n        is_use_sharpened_gt_in_gan=False,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, RealBasicVSR)\n    assert isinstance(model.generator, RealBasicVSRNet)\n    assert isinstance(model.discriminator, UNetDiscriminatorWithSpectralNorm)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.cleaning_loss, L1Loss)\n    assert isinstance(model.perceptual_loss, PerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(5, 3, 64, 64)\n    target = torch.rand(5, 3, 256, 256)\n    data_sample = DataSample(gt_img=target, gt_unsharp=target)\n    data = dict(inputs=[inputs], data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_clean', 'loss_d_real',\n        'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (5, 3, 256, 256)\n\n    # feat\n    output = model(torch.rand(1, 5, 3, 64, 64), mode='tensor')\n    assert output.shape == (1, 5, 3, 256, 256)\n\n    # train_unsharp\n    model.is_use_sharpened_gt_in_pixel = True\n    model.is_use_sharpened_gt_in_percep = True\n    model.is_use_sharpened_gt_in_gan = False\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_clean', 'loss_d_real',\n        'loss_d_fake'\n    ])\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_real_basicvsr/test_real_basicvsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import RealBasicVSRNet\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_real_basicvsr_net():\n    \"\"\"Test RealBasicVSR.\"\"\"\n\n    # cpu\n    # is_fix_cleaning = False\n    real_basicvsr = RealBasicVSRNet(is_fix_cleaning=False)\n\n    # is_sequential_cleaning = False\n    real_basicvsr = RealBasicVSRNet(\n        is_fix_cleaning=True, is_sequential_cleaning=False)\n    input_tensor = torch.rand(1, 5, 3, 64, 64)\n    output = real_basicvsr(input_tensor)\n    assert output.shape == (1, 5, 3, 256, 256)\n\n    # is_sequential_cleaning = True, return_lq = True\n    real_basicvsr = RealBasicVSRNet(\n        is_fix_cleaning=True, is_sequential_cleaning=True)\n    output, lq = real_basicvsr(input_tensor, return_lqs=True)\n    assert output.shape == (1, 5, 3, 256, 256)\n    assert lq.shape == (1, 5, 3, 64, 64)\n\n    # gpu\n    if torch.cuda.is_available():\n        # is_fix_cleaning = False\n        real_basicvsr = RealBasicVSRNet(is_fix_cleaning=False).cuda()\n\n        # is_sequential_cleaning = False\n        real_basicvsr = RealBasicVSRNet(\n            is_fix_cleaning=True, is_sequential_cleaning=False).cuda()\n        input_tensor = torch.rand(1, 5, 3, 64, 64).cuda()\n        output = real_basicvsr(input_tensor)\n        assert output.shape == (1, 5, 3, 256, 256)\n\n        # is_sequential_cleaning = True, return_lq = True\n        real_basicvsr = RealBasicVSRNet(\n            is_fix_cleaning=True, is_sequential_cleaning=True).cuda()\n        output, lq = real_basicvsr(input_tensor, return_lqs=True)\n        assert output.shape == (1, 5, 3, 256, 256)\n        assert lq.shape == (1, 5, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_real_esrgan/test_real_esrgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import patch\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import (DataPreprocessor, RealESRGAN, RRDBNet,\n                           UNetDiscriminatorWithSpectralNorm)\nfrom mmagic.models.losses import GANLoss, L1Loss, PerceptualLoss, PerceptualVGG\nfrom mmagic.structures import DataSample\n\n\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_real_esrgan(init_weights):\n\n    model = RealESRGAN(\n        generator=dict(\n            type='RRDBNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=4,\n            num_blocks=4,\n            growth_channels=4,\n            upscale_factor=4),\n        discriminator=dict(\n            type='UNetDiscriminatorWithSpectralNorm',\n            in_channels=3,\n            mid_channels=4,\n            skip_connection=True),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={\n                '2': 0.1,\n                '7': 0.1,\n                '16': 1.0,\n                '25': 1.0,\n                '34': 1.0,\n            },\n            vgg_type='vgg19',\n            perceptual_weight=1.0,\n            style_weight=0,\n            norm_img=False),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=1e-1,\n            real_label_val=1.0,\n            fake_label_val=0),\n        is_use_sharpened_gt_in_pixel=False,\n        is_use_sharpened_gt_in_percep=False,\n        is_use_sharpened_gt_in_gan=False,\n        is_use_ema=False,\n        train_cfg=None,\n        test_cfg=None,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, RealESRGAN)\n    assert isinstance(model.generator, RRDBNet)\n    assert isinstance(model.discriminator, UNetDiscriminatorWithSpectralNorm)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.perceptual_loss, PerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 32, 32)\n    target = torch.rand(3, 128, 128)\n    data_sample = DataSample(gt_img=target, gt_unsharp=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 128, 128)\n\n    # val_ema\n    model.generator_ema = model.generator\n    model.is_use_ema = True\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 128, 128)\n\n    # feat\n    output = model(torch.rand(1, 3, 32, 32), mode='tensor')\n    assert output.shape == (1, 3, 128, 128)\n\n    # train_unsharp\n    model.is_use_sharpened_gt_in_pixel = True\n    model.is_use_sharpened_gt_in_percep = True\n    model.is_use_sharpened_gt_in_gan = False\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_real_esrgan/test_unet_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models import UNetDiscriminatorWithSpectralNorm\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_unet_disc_with_spectral_norm():\n    # cpu\n    disc = UNetDiscriminatorWithSpectralNorm(in_channels=3)\n    img = torch.randn(1, 3, 16, 16)\n    output = disc(img)\n    assert output.detach().numpy().shape == (1, 1, 16, 16)\n\n    # cuda\n    if torch.cuda.is_available():\n        disc = disc.cuda()\n        img = img.cuda()\n        output = disc(img)\n        assert output.detach().cpu().numpy().shape == (1, 1, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_restormer/test_restormer_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import Restormer\n\n\n@pytest.mark.skipif(\n    torch.__version__ < '1.8.0',\n    reason='skip on torch<1.8 due to unsupported PixelUnShuffle')\ndef test_restormer_cpu():\n    \"\"\"Test Restormer.\"\"\"\n\n    # Motion Deblurring or Image Deraining\n    net = Restormer(\n        inp_channels=3,\n        out_channels=3,\n        dim=24,\n        num_blocks=[2, 2, 2, 4],\n        num_refinement_blocks=1,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=False)\n    img = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 16, 16)\n\n    # Image Denoising Gray\n    net = Restormer(\n        inp_channels=1,\n        out_channels=1,\n        dim=24,\n        num_blocks=[2, 2, 2, 4],\n        num_refinement_blocks=1,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False)\n    img = torch.rand(1, 1, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 1, 16, 16)\n\n    # Image Denoising Color\n    net = Restormer(\n        inp_channels=3,\n        out_channels=3,\n        dim=24,\n        num_blocks=[2, 2, 2, 4],\n        num_refinement_blocks=1,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='BiasFree',\n        dual_pixel_task=False)\n    img = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 16, 16)\n\n    # Image Dual Defocus Deblurring\n    net = Restormer(\n        inp_channels=6,\n        out_channels=3,\n        dim=24,\n        num_blocks=[2, 2, 2, 4],\n        num_refinement_blocks=1,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=True,\n        dual_keys=['imgL', 'imgR'])\n    img = dict()\n    img['imgL'] = torch.rand(1, 3, 16, 16)\n    img['imgR'] = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 16, 16)\n\n\n@pytest.mark.skipif(\n    torch.__version__ < '1.8.0',\n    reason='skip on torch<1.8 due to unsupported PixelUnShuffle')\ndef test_restormer_cuda():\n    net = Restormer(\n        inp_channels=3,\n        out_channels=3,\n        dim=24,\n        num_blocks=[2, 2, 2, 4],\n        num_refinement_blocks=1,\n        heads=[1, 2, 4, 8],\n        ffn_expansion_factor=2.66,\n        bias=False,\n        LayerNorm_type='WithBias',\n        dual_pixel_task=False)\n    img = torch.rand(1, 3, 16, 16)\n\n    # Image Deblurring or Image Deraining (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert isinstance(output, torch.Tensor)\n        assert output.shape == (1, 3, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_sagan/test_sagan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import SAGAN, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='SAGANGenerator',\n    # noise_size=10,\n    num_classes=10,\n    output_scale=32,\n    base_channels=256,\n    attention_cfg=dict(type='SelfAttentionBlock'),\n    attention_after_nth_block=2,\n    with_spectral_norm=True)\ndiscriminator = dict(\n    type='ProjDiscriminator',\n    num_classes=10,\n    input_scale=32,\n    base_channels=128,\n    attention_cfg=dict(type='SelfAttentionBlock'),\n    attention_after_nth_block=1,\n    with_spectral_norm=True)\n\n\nclass TestSAGAN(TestCase):\n\n    def test_init(self):\n        gan = SAGAN(\n            noise_size=10,\n            num_classes=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator,\n            generator_steps=1,\n            discriminator_steps=4)\n\n        self.assertIsInstance(gan, SAGAN)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = SAGAN(\n            noise_size=10,\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = SAGAN(\n            noise_size=10,\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = SAGAN(\n            noise_size=10, generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n        # test init with different num_classes\n        gan = SAGAN(\n            num_classes=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator,\n            generator_steps=1,\n            discriminator_steps=4)\n\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('mmgen')\n        gan = SAGAN(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        label = torch.randint(0, 10, (1, ))\n\n        data_sample = DataSample(gt_img=img)\n        data_sample.set_gt_label(label)\n\n        data = dict(inputs=dict(), data_samples=[data_sample])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_sagan/test_sagan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.sagan import ProjDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestSNGANPROJDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.x = torch.randn((2, 3, 32, 32))\n        cls.label = torch.randint(0, 10, (2, ))\n        cls.default_config = dict(\n            type='ProjDiscriminator',\n            input_scale=32,\n            num_classes=10,\n            input_channels=3)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_sngan_proj_discriminator(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different input_scale\n        config = deepcopy(self.default_config)\n        config['input_scale'] = 64\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x, self.label)\n        assert score.shape == (2, 1)\n\n        # test num_classes == 0 (w/o proj_y)\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different base_channels\n        config = deepcopy(self.default_config)\n        config['base_channels'] = 128\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different channels_cfg --> list\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = [1, 1, 1]\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different channels_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {32: [1, 1, 1], 64: [2, 4, 8, 16]}\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different channels_cfg --> error (key not find)\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {64: [2, 4, 8, 16]}\n        with pytest.raises(KeyError):\n            d = MODELS.build(config)\n\n        # test different channels_cfg --> error (type not match)\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = '1234'\n        with pytest.raises(ValueError):\n            d = MODELS.build(config)\n\n        # test different downsample_cfg --> list\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = [True, False, False]\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different downsample_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = {\n            32: [True, False, False],\n            64: [True, True, True, True]\n        }\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different downsample_cfg --> error (key not find)\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = {64: [True, True, True, True]}\n        with pytest.raises(KeyError):\n            d = MODELS.build(config)\n\n        # test different downsample_cfg --> error (type not match)\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = '1234'\n        with pytest.raises(ValueError):\n            d = MODELS.build(config)\n\n        # test downsample_cfg and channels_cfg not match\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = [True, False, False]\n        config['channels_cfg'] = [1, 1, 1, 1]\n        with pytest.raises(ValueError):\n            d = MODELS.build(config)\n\n        # test different act_cfg\n        config = deepcopy(self.default_config)\n        config['act_cfg'] = dict(type='Sigmoid')\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different with_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = False\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> studio\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='studio')\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> BigGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='biggan')\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> sngan\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan-proj')\n        d = MODELS.build(config)\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x, self.label)\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            d = MODELS.build(config)\n\n        # test pretrained --> raise error\n        config = deepcopy(self.default_config)\n        config['pretrained'] = 42\n        with pytest.raises(TypeError):\n            d = MODELS.build(config)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_sngan_proj_discriminator_cuda(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different input_scale\n        config = deepcopy(self.default_config)\n        config['input_scale'] = 64\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        x = torch.randn((2, 3, 64, 64)).cuda()\n        score = d(x, self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test num_classes == 0 (w/o proj_y)\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different base_channels\n        config = deepcopy(self.default_config)\n        config['base_channels'] = 128\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different channels_cfg --> list\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = [1, 1, 1]\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different channels_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {32: [1, 1, 1], 64: [2, 4, 8, 16]}\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different downsample_cfg --> list\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = [True, False, False]\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different downsample_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['downsample_cfg'] = {\n            32: [True, False, False],\n            64: [True, True, True, True]\n        }\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different act_cfg\n        config = deepcopy(self.default_config)\n        config['act_cfg'] = dict(type='Sigmoid')\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different with_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = False\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> BigGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='biggan')\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n        # test different init_cfg --> sngan\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan-proj')\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, ProjDiscriminator)\n        score = d(self.x.cuda(), self.label.cuda())\n        assert score.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_sagan/test_sagan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.sagan import SNGANGenerator\nfrom mmagic.registry import MODELS\n\n\nclass TestSNGANPROJGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((2, 128))\n        cls.label = torch.randint(0, 10, (2, ))\n        cls.default_config = dict(\n            type='SNGANGenerator',\n            noise_size=128,\n            output_scale=32,\n            num_classes=10,\n            base_channels=32)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_sngan_proj_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test return noise\n        x = g(None, num_batches=2, return_noise=True)\n        assert x['fake_img'].shape == (2, 3, 32, 32)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        x = g(self.noise, label=self.label, return_noise=True)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        x = g(torch.randn, num_batches=2, return_noise=True)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        # test different output_scale\n        config = deepcopy(self.default_config)\n        config['output_scale'] = 64\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 64, 64)\n\n        # test num_classes == 0 and `use_cbn = True`\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        with pytest.raises(ValueError):\n            g = MODELS.build(config)\n\n        # test num_classes == 0 and `use_cbn = False`\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        config['use_cbn'] = False\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different base_channels\n        config = deepcopy(self.default_config)\n        config['base_channels'] = 64\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different channels_cfg --> list\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = [1, 1, 1]\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different channels_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {32: [1, 1, 1], 64: [16, 8, 4, 2]}\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different channels_cfg --> error (key not find)\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {64: [16, 8, 4, 2]}\n        with pytest.raises(KeyError):\n            g = MODELS.build(config)\n\n        # test different channels_cfg --> error (type not match)\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = '1234'\n        with pytest.raises(ValueError):\n            g = MODELS.build(config)\n\n        # test different act_cfg\n        config = deepcopy(self.default_config)\n        config['act_cfg'] = dict(type='Sigmoid')\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test with_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test with_embedding_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_embedding_spectral_norm'] = True\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test norm_eps\n        config = deepcopy(self.default_config)\n        config['norm_eps'] = 1e-9\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test sn_eps\n        config = deepcopy(self.default_config)\n        config['sn_eps'] = 1e-12\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> Studio\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='studio')\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> BigGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='biggan')\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> SNGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> SAGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sagan')\n        g = MODELS.build(config)\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            g = MODELS.build(config)\n\n        # test pretrained --> raise error\n        config = deepcopy(self.default_config)\n        config['pretrained'] = 42\n        with pytest.raises(TypeError):\n            g = MODELS.build(config)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_sngan_proj_generator_cuda(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test return noise\n        x = g(None, num_batches=2, return_noise=True)\n        assert x['fake_img'].shape == (2, 3, 32, 32)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        x = g(self.noise.cuda(), label=self.label.cuda(), return_noise=True)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        x = g(torch.randn, num_batches=2, return_noise=True)\n        assert x['noise_batch'].shape == (2, 128)\n        assert x['label'].shape == (2, )\n\n        # test different output_scale\n        config = deepcopy(self.default_config)\n        config['output_scale'] = 64\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 64, 64)\n\n        # test different base_channels\n        config = deepcopy(self.default_config)\n        config['base_channels'] = 64\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different channels_cfg --> list\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = [1, 1, 1]\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different channels_cfg --> dict\n        config = deepcopy(self.default_config)\n        config['channels_cfg'] = {32: [1, 1, 1], 64: [16, 8, 4, 2]}\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different act_cfg\n        config = deepcopy(self.default_config)\n        config['act_cfg'] = dict(type='Sigmoid')\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test with_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test with_embedding_spectral_norm\n        config = deepcopy(self.default_config)\n        config['with_embedding_spectral_norm'] = True\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test norm_eps\n        config = deepcopy(self.default_config)\n        config['norm_eps'] = 1e-9\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test sn_eps\n        config = deepcopy(self.default_config)\n        config['sn_eps'] = 1e-12\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2).cuda()\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> BigGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='biggan')\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n        # test different init_cfg --> SNGAN\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, SNGANGenerator)\n        x = g(None, num_batches=2)\n        assert x.shape == (2, 3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_sagan/test_sagan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\nclass TestSNGANGenResBlock(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input = torch.randn(2, 16, 5, 5)\n        cls.label = torch.randint(0, 10, (2, ))\n        cls.default_config = dict(\n            type='SNGANGenResBlock',\n            num_classes=10,\n            in_channels=16,\n            out_channels=16,\n            use_cbn=True,\n            use_norm_affine=False,\n            norm_cfg=dict(type='BN'),\n            upsample_cfg=dict(type='nearest', scale_factor=2),\n            upsample=True,\n            init_cfg=dict(type='BigGAN'))\n\n    def test_snganGenResBlock(self):\n\n        # test default config\n        block = MODELS.build(self.default_config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 10, 10)\n\n        # test no upsample config and no learnable sc\n        config = deepcopy(self.default_config)\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test learnable shortcut + w/o upsample\n        config = deepcopy(self.default_config)\n        config['out_channels'] = 32\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 32, 5, 5)\n\n        # test init_cfg + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init_cfg == studio + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='studio')\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init_cfg == sagan + learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sagan')\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 10, 10)\n\n        # test init_cfg == sagan + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sagan')\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init_cft --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            block = MODELS.build(config)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 10, 10)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_snganGenResBlock_cuda(self):\n\n        # test default config\n        block = MODELS.build(self.default_config).cuda()\n        out = block(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 10, 10)\n\n        # test no upsample config and no learnable sc\n        config = deepcopy(self.default_config)\n        config['upsample'] = False\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init_cfg == studio + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='studio')\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init_cfg == sagan + learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sagan')\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 10, 10)\n\n        # test init_cfg == sagan + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sagan')\n        config['upsample'] = False\n        block = MODELS.build(config)\n        out = block(self.input, self.label)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test learnable shortcut + w/o upsample\n        config = deepcopy(self.default_config)\n        config['out_channels'] = 32\n        config['upsample'] = False\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 32, 5, 5)\n\n        # test init_cfg + w/o learnable shortcut\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        config['upsample'] = False\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 16, 10, 10)\n\n\nclass TestSNDiscResBlock(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input = torch.randn(2, 16, 10, 10)\n        cls.default_config = dict(\n            type='SNGANDiscResBlock',\n            in_channels=16,\n            out_channels=16,\n            downsample=True,\n            init_cfg=dict(type='BigGAN'))\n\n    def test_snganDiscResBlock(self):\n        # test default config\n        block = MODELS.build(self.default_config)\n        out = block(self.input)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config)\n        out = block(self.input)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test w/o learnabel shortcut + w/o downsample\n        config = deepcopy(self.default_config)\n        config['downsample'] = False\n        config['out_channels'] = 8\n        block = MODELS.build(config)\n        out = block(self.input)\n        assert out.shape == (2, 8, 10, 10)\n\n        # test init cfg + w or w/o downsample\n        for init_method in [\n                'studio', 'biggan', 'sagan', 'sngan', 'sngan-proj', 'gan-proj'\n        ]:\n            config = deepcopy(self.default_config)\n            config['init_cfg'] = dict(type=init_method)\n            config['out_channels'] = 8\n            for downsample in [True, False]:\n                config['downsample'] = downsample\n                block = MODELS.build(config)\n                out = block(self.input)\n                if downsample:\n                    assert out.shape == (2, 8, 5, 5)\n                else:\n                    assert out.shape == (2, 8, 10, 10)\n\n        # test init_cft --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            block = MODELS.build(config)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_snganDiscResBlock_cuda(self):\n        # test default config\n        block = MODELS.build(self.default_config).cuda()\n        out = block(self.input.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n        # test w/o learnabel shortcut + w/o downsample\n        config = deepcopy(self.default_config)\n        config['downsample'] = False\n        config['out_channels'] = 8\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda())\n        assert out.shape == (2, 8, 10, 10)\n\n        # test init cfg + w or w/o downsample\n        for init_method in [\n                'studio', 'biggan', 'sagan', 'sngan', 'sngan-proj', 'gan-proj'\n        ]:\n            config = deepcopy(self.default_config)\n            config['init_cfg'] = dict(type=init_method)\n            config['out_channels'] = 8\n            for downsample in [True, False]:\n                config['downsample'] = downsample\n                block = MODELS.build(config)\n                out = block(self.input)\n                if downsample:\n                    assert out.shape == (2, 8, 5, 5)\n                else:\n                    assert out.shape == (2, 8, 10, 10)\n\n\nclass TestSNDiscHeadResBlock(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input = torch.randn(2, 16, 10, 10)\n        cls.default_config = dict(\n            type='SNGANDiscHeadResBlock',\n            in_channels=16,\n            out_channels=16,\n            init_cfg=dict(type='BigGAN'))\n\n    def test_snganDiscHeadResBlock(self):\n        # test default config\n        block = MODELS.build(self.default_config)\n        out = block(self.input)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config)\n        out = block(self.input)\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init cfg + w or w/o downsample\n        for init_method in [\n                'studio', 'biggan', 'sagan', 'sngan', 'sngan-proj', 'gan-proj'\n        ]:\n            config = deepcopy(self.default_config)\n            config['init_cfg'] = dict(type=init_method)\n            block = MODELS.build(config)\n            out = block(self.input)\n            assert out.shape == (2, 16, 5, 5)\n\n        # test init_cft --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            block = MODELS.build(config)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_snganDiscHeadResBlock_cuda(self):\n        # test default config\n        block = MODELS.build(self.default_config).cuda()\n        out = block(self.input.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n        # test init cfg + w or w/o downsample\n        for init_method in [\n                'studio', 'biggan', 'sagan', 'sngan', 'sngan-proj', 'gan-proj'\n        ]:\n            config = deepcopy(self.default_config)\n            config['init_cfg'] = dict(type=init_method)\n            block = MODELS.build(config)\n            out = block(self.input)\n            assert out.shape == (2, 16, 5, 5)\n\n        # test conv_cfg\n        config = deepcopy(self.default_config)\n        config['conv_cfg'] = dict(\n            kernel_size=1, stride=1, padding=0, act_cfg=None)\n        block = MODELS.build(config).cuda()\n        out = block(self.input.cuda())\n        assert out.shape == (2, 16, 5, 5)\n\n\nclass TestSNConditionalNorm(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input = torch.randn((2, 4, 4, 4))\n        cls.label = torch.randint(0, 10, (2, ))\n        cls.default_config = dict(\n            type='SNConditionNorm',\n            in_channels=4,\n            num_classes=10,\n            use_cbn=True,\n            cbn_norm_affine=False,\n            init_cfg=dict(type='BigGAN'))\n\n    def test_conditionalNorm(self):\n        # test build from default config\n        norm = MODELS.build(self.default_config)\n        out = norm(self.input, self.label)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test w/o use_cbn\n        config = deepcopy(self.default_config)\n        config['use_cbn'] = False\n        norm = MODELS.build(config)\n        out = norm(self.input)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test num_class < 0 and cbn = False\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        config['use_cbn'] = False\n        norm = MODELS.build(config)\n        out = norm(self.input)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test num_classes <= 0 and cbn = True\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        with pytest.raises(ValueError):\n            norm = MODELS.build(config)\n\n        # test IN\n        config = deepcopy(self.default_config)\n        config['norm_cfg'] = dict(type='IN')\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style == ajbrock\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'ajbrock'\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        for buffer in ['u0', 'sv0']:\n            assert hasattr(norm.weight_embedding, buffer)\n            assert hasattr(norm.bias_embedding, buffer)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style == torch\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'torch'\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        for buffer in ['weight_u', 'weight_v', 'weight_orig']:\n            assert hasattr(norm.weight_embedding, buffer)\n            assert hasattr(norm.bias_embedding, buffer)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style --> raise error\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'studio'\n        with pytest.raises(NotImplementedError):\n            norm = MODELS.build(config)\n\n        # test SyncBN\n        # config = deepcopy(self.default_config)\n        # config['norm_cfg'] = dict(type='SyncBN')\n        # norm = MODELS.build(config)\n        # out = norm(self.input, self.label)\n        # assert out.shape == (2, 4, 4, 4)\n\n        # test unknown norm type\n        config = deepcopy(self.default_config)\n        config['norm_cfg'] = dict(type='GN')\n        with pytest.raises(ValueError):\n            norm = MODELS.build(config)\n\n        # test init_cfg\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test init_cft --> raise error\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='wgan-gp')\n        with pytest.raises(NotImplementedError):\n            norm = MODELS.build(config)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_conditionalNorm_cuda(self):\n        # test build from default config\n        norm = MODELS.build(self.default_config).cuda()\n        out = norm(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 4, 4, 4)\n\n        # test w/o use_cbn\n        config = deepcopy(self.default_config)\n        config['use_cbn'] = False\n        norm = MODELS.build(config).cuda()\n        out = norm(self.input.cuda())\n        assert out.shape == (2, 4, 4, 4)\n\n        # test num_class < 0 and cbn = False\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        config['use_cbn'] = False\n        norm = MODELS.build(config).cuda()\n        out = norm(self.input.cuda())\n        assert out.shape == (2, 4, 4, 4)\n\n        # test num_classes <= 0 and cbn = True\n        config = deepcopy(self.default_config)\n        config['num_classes'] = 0\n        with pytest.raises(ValueError):\n            norm = MODELS.build(config)\n\n        # test IN\n        config = deepcopy(self.default_config)\n        config['norm_cfg'] = dict(type='IN')\n        norm = MODELS.build(config).cuda()\n        out = norm(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style == ajbrock\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'ajbrock'\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        for buffer in ['u0', 'sv0']:\n            assert hasattr(norm.weight_embedding, buffer)\n            assert hasattr(norm.bias_embedding, buffer)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style == torch\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'torch'\n        norm = MODELS.build(config)\n        out = norm(self.input, self.label)\n        for buffer in ['weight_u', 'weight_v', 'weight_orig']:\n            assert hasattr(norm.weight_embedding, buffer)\n            assert hasattr(norm.bias_embedding, buffer)\n        assert out.shape == (2, 4, 4, 4)\n\n        # test sn_style --> raise error\n        config = deepcopy(self.default_config)\n        config['with_spectral_norm'] = True\n        config['sn_style'] = 'studio'\n        with pytest.raises(NotImplementedError):\n            norm = MODELS.build(config)\n\n        # test SyncBN\n        # config = deepcopy(self.default_config)\n        # config['norm_cfg'] = dict(type='SyncBN')\n        # norm = MODELS.build(config)\n        # out = norm(self.input, self.label)\n        # assert out.shape == (2, 4, 4, 4)\n\n        # test unknown norm type\n        config = deepcopy(self.default_config)\n        config['norm_cfg'] = dict(type='GN')\n        with pytest.raises(ValueError):\n            norm = MODELS.build(config)\n\n        # test init_cfg\n        config = deepcopy(self.default_config)\n        config['init_cfg'] = dict(type='sngan')\n        norm = MODELS.build(config).cuda()\n        out = norm(self.input.cuda(), self.label.cuda())\n        assert out.shape == (2, 4, 4, 4)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_singan/test_singan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine import MessageHub\n\nfrom mmagic.engine import SinGANOptimWrapperConstructor\nfrom mmagic.models import SinGAN\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestSinGAN:\n\n    @classmethod\n    def setup_class(cls):\n        cls.generator = dict(\n            type='SinGANMultiScaleGenerator',\n            in_channels=3,\n            out_channels=3,\n            num_scales=3)\n\n        cls.disc = dict(\n            type='SinGANMultiScaleDiscriminator', in_channels=3, num_scales=3)\n\n        cls.data_preprocessor = dict(\n            type='DataPreprocessor', non_image_keys=['input_sample'])\n        cls.noise_weight_init = 0.1\n        cls.curr_scale = -1\n        cls.iters_per_scale = 2\n        cls.lr_scheduler_args = dict(milestones=[1600], gamma=0.1)\n\n        cls.data_batch = dict(\n            inputs=dict(\n                real_scale0=torch.randn(1, 3, 25, 25),\n                real_scale1=torch.randn(1, 3, 30, 30),\n                real_scale2=torch.randn(1, 3, 32, 32),\n            ))\n        cls.data_batch['inputs']['input_sample'] = torch.zeros_like(\n            cls.data_batch['inputs']['real_scale0'])\n\n        cls.optim_wrapper_cfg = dict(\n            generator=dict(\n                optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))),\n            discriminator=dict(\n                optimizer=dict(type='Adam', lr=0.0005, betas=(0.5, 0.999))))\n\n    def test_singan_cpu(self):\n        message_hub = MessageHub.get_instance('singan-test')\n        message_hub.update_info('iter', 0)\n\n        singan = SinGAN(\n            self.generator,\n            self.disc,\n            num_scales=3,\n            data_preprocessor=self.data_preprocessor,\n            noise_weight_init=self.noise_weight_init,\n            iters_per_scale=self.iters_per_scale,\n            lr_scheduler_args=self.lr_scheduler_args)\n        optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n\n        for i in range(6):\n            singan.train_step(self.data_batch, optim_wrapper_dict)\n            message_hub.update_info('iter', message_hub.get_info('iter') + 1)\n            outputs = singan.forward(dict(num_batches=1), None)\n\n            img = torch.stack([out.fake_img.data for out in outputs], dim=0)\n            if i in [0, 1]:\n                assert singan.curr_stage == 0\n                assert img.shape[-2:] == (25, 25)\n            elif i in [2, 3]:\n                assert singan.curr_stage == 1\n                assert img.shape[-2:] == (30, 30)\n            elif i in [4, 5]:\n                assert singan.curr_stage == 2\n                assert img.shape[-2:] == (32, 32)\n\n            outputs = singan.forward(\n                dict(num_batches=1, get_prev_res=True), None)\n            assert all([hasattr(out, 'prev_res_list') for out in outputs])\n\n        # test forward singan with ema\n        singan = SinGAN(\n            self.generator,\n            self.disc,\n            num_scales=3,\n            data_preprocessor=self.data_preprocessor,\n            noise_weight_init=self.noise_weight_init,\n            iters_per_scale=self.iters_per_scale,\n            lr_scheduler_args=self.lr_scheduler_args,\n            ema_confg=dict(type='ExponentialMovingAverage'))\n        optim_wrapper_dict_builder = SinGANOptimWrapperConstructor(\n            self.optim_wrapper_cfg)\n        optim_wrapper_dict = optim_wrapper_dict_builder(singan)\n\n        for i in range(6):\n            singan.train_step(self.data_batch, optim_wrapper_dict)\n            message_hub.update_info('iter', message_hub.get_info('iter') + 1)\n\n            outputs = singan.forward(\n                dict(num_batches=1, sample_model='ema/orig'), None)\n\n            img = torch.stack([out.orig.fake_img.data for out in outputs],\n                              dim=0)\n            img_ema = torch.stack([out.ema.fake_img.data for out in outputs],\n                                  dim=0)\n            if i in [0, 1]:\n                assert singan.curr_stage == 0\n                assert img.shape[-2:] == (25, 25)\n                assert img_ema.shape[-2:] == (25, 25)\n            elif i in [2, 3]:\n                assert singan.curr_stage == 1\n                assert img.shape[-2:] == (30, 30)\n                assert img_ema.shape[-2:] == (30, 30)\n            elif i in [4, 5]:\n                assert singan.curr_stage == 2\n                assert img.shape[-2:] == (32, 32)\n                assert img_ema.shape[-2:] == (32, 32)\n\n            outputs = singan.forward(\n                dict(\n                    num_batches=1, sample_model='ema/orig', get_prev_res=True),\n                None)\n\n            assert all([hasattr(out.orig, 'prev_res_list') for out in outputs])\n            assert all([hasattr(out.ema, 'prev_res_list') for out in outputs])\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_singan/test_singan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.singan import SinGANMultiScaleDiscriminator\n\n\nclass TestSinGANDisc:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_args = dict(\n            in_channels=3,\n            kernel_size=3,\n            padding=0,\n            num_layers=3,\n            base_channels=32,\n            num_scales=3,\n            min_feat_channels=16)\n\n    def test_singan_disc(self):\n        disc = SinGANMultiScaleDiscriminator(**self.default_args)\n        img = torch.randn(1, 3, 24, 24)\n        res = disc(img, 2)\n        assert res.shape[0] == 1\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_singan/test_singan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.singan import SinGANMultiScaleGenerator\n\n\nclass TestSinGANGen:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_args = dict(\n            in_channels=3,\n            out_channels=3,\n            kernel_size=3,\n            padding=0,\n            num_layers=3,\n            base_channels=32,\n            num_scales=3,\n            min_feat_channels=16)\n\n        cls.fixed_noises = [\n            torch.randn(1, 3, 8, 8),\n            torch.randn(1, 3, 10, 10),\n            torch.randn(1, 3, 12, 12),\n            torch.randn(1, 3, 16, 16)\n        ]\n        cls.input_sample = torch.zeros_like(cls.fixed_noises[0])\n        cls.noise_weights = [1., 0.5, 0.5, 0.5]\n\n    def test_singan_gen(self):\n        gen = SinGANMultiScaleGenerator(**self.default_args)\n        res = gen(self.input_sample, self.fixed_noises, self.noise_weights,\n                  'rand', 2)\n        assert res.shape == (1, 3, 12, 12)\n\n        output = gen(\n            self.input_sample,\n            self.fixed_noises,\n            self.noise_weights,\n            'rand',\n            2,\n            get_prev_res=True)\n\n        assert output['prev_res_list'][0].shape == (1, 3, 8, 8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_singan/test_singan_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.singan.singan_modules import (DiscriminatorBlock,\n                                                         GeneratorBlock)\n\n\ndef test_GeneratorBlock():\n    gen_block = GeneratorBlock(3, 6, 3, 1, 3, 4, 4)\n    x = torch.randn(1, 3, 6, 6)\n    prev = torch.randn(1, 6, 6, 6)\n    out = gen_block(x, prev)\n    assert out.shape == (1, 6, 6, 6)\n\n    gen_block = GeneratorBlock(3, 6, 3, 1, 3, 4, 4, allow_no_residual=True)\n    x = torch.randn(1, 3, 6, 6)\n    prev = torch.randn(1, 3, 6, 6)\n    out = gen_block(x, prev)\n    assert out.shape == (1, 6, 6, 6)\n\n\ndef test_DiscriminatorBlock():\n    disc_block = DiscriminatorBlock(3, 4, 1, 3, 1, 3)\n    x = torch.randn(1, 3, 6, 6)\n    out = disc_block(x)\n    assert out.shape == (1, 1, 6, 6)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_srcnn/test_srcnn_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models import SRCNNNet\n\n\ndef test_srcnn():\n    # model, initialization and forward (cpu)\n    net = SRCNNNet(\n        channels=(3, 4, 6, 3), kernel_sizes=(9, 1, 5), upscale_factor=4)\n    img = torch.rand(1, 3, 4, 4)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 16, 16)\n\n    net = SRCNNNet(\n        channels=(1, 4, 8, 1), kernel_sizes=(3, 3, 3), upscale_factor=2)\n    img = torch.rand(1, 1, 4, 4)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 1, 8, 8)\n\n    # model forward (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert isinstance(output, torch.Tensor)\n        assert output.shape == (1, 1, 8, 8)\n\n    with pytest.raises(AssertionError):\n        # The length of channel tuple should be 4\n        net = SRCNNNet(\n            channels=(3, 4, 3), kernel_sizes=(9, 1, 5), upscale_factor=4)\n    with pytest.raises(AssertionError):\n        # The length of kernel tuple should be 3\n        net = SRCNNNet(\n            channels=(3, 4, 4, 3), kernel_sizes=(9, 1, 1, 5), upscale_factor=4)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_srgan/test_modified_vgg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import ModifiedVGG\n\n\ndef test_modifiedVGG():\n    model = ModifiedVGG(3, 16)\n    inputs = torch.randn(1, 3, 128, 128)\n    outputs = model(inputs)\n    assert outputs.shape == (1, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_srgan/test_sr_resnet.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models import ModifiedVGG, MSRResNet\n\n\ndef test_srresnet_backbone():\n    \"\"\"Test SRResNet backbone.\"\"\"\n\n    # x2 model\n    MSRResNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=2)\n    # x3 model, initialization and forward (cpu)\n    net = MSRResNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=3)\n    input_shape = (1, 3, 12, 12)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 3, 36, 36)\n    # x4 modeland, initialization and forward (cpu)\n    net = MSRResNet(\n        in_channels=3,\n        out_channels=3,\n        mid_channels=8,\n        num_blocks=2,\n        upscale_factor=4)\n    output = net(img)\n    assert output.shape == (1, 3, 48, 48)\n\n    # x4 model forward (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 3, 48, 48)\n\n    with pytest.raises(ValueError):\n        # Currently supported upscale_factor is [2, 3, 4]\n        MSRResNet(\n            in_channels=3,\n            out_channels=3,\n            mid_channels=64,\n            num_blocks=16,\n            upscale_factor=16)\n\n\ndef test_discriminator():\n    \"\"\"Test discriminator backbone.\"\"\"\n\n    # model, initialization and forward (cpu)\n    net = ModifiedVGG(in_channels=3, mid_channels=64)\n    input_shape = (1, 3, 128, 128)\n    img = torch.rand(input_shape)\n    output = net(img)\n    assert output.shape == (1, 1)\n\n    # model, initialization and forward (gpu)\n    if torch.cuda.is_available():\n        net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 1)\n\n    with pytest.raises(AssertionError):\n        # input size must be 128 * 128\n        input_shape = (1, 3, 64, 64)\n        img = torch.rand(input_shape)\n        output = net(img)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_srgan/test_srgan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import patch\n\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import SRGAN, DataPreprocessor, ModifiedVGG, MSRResNet\nfrom mmagic.models.losses import GANLoss, L1Loss, PerceptualLoss, PerceptualVGG\nfrom mmagic.structures import DataSample\n\n\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_srgan_resnet(init_weights):\n\n    model = SRGAN(\n        generator=dict(\n            type='MSRResNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=4,\n            num_blocks=4,\n            upscale_factor=4),\n        discriminator=dict(type='ModifiedVGG', in_channels=3, mid_channels=8),\n        pixel_loss=dict(type='L1Loss', loss_weight=1e-2, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={'34': 1.0},\n            vgg_type='vgg19',\n            perceptual_weight=1.0,\n            style_weight=0,\n            norm_img=False),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=5e-3,\n            real_label_val=1.0,\n            fake_label_val=0),\n        train_cfg=None,\n        test_cfg=None,\n        data_preprocessor=DataPreprocessor())\n\n    assert isinstance(model, SRGAN)\n    assert isinstance(model.generator, MSRResNet)\n    assert isinstance(model.discriminator, ModifiedVGG)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.perceptual_loss, PerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 32, 32)\n    target = torch.rand(3, 128, 128)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_gan', 'loss_pix', 'loss_perceptual', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 128, 128)\n\n    # feat\n    output = model(torch.rand(1, 3, 32, 32), mode='tensor')\n    assert output.shape == (1, 3, 128, 128)\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion/test_clip_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport importlib\nimport sys\n\nimport pytest\nimport torch\n\n\ndef test_clip_wrapper():\n    from transformers import CLIPConfig\n\n    from mmagic.models.editors.stable_diffusion.clip_wrapper import \\\n        StableDiffusionSafetyChecker\n    clipconfig = CLIPConfig()\n    safety_checker = StableDiffusionSafetyChecker(clipconfig)\n\n    clip_input = torch.rand((1, 3, 224, 224))\n    images_input = torch.rand((1, 512, 512, 3))\n\n    result = safety_checker.forward(clip_input, images_input)\n    assert result[0].shape == (1, 512, 512, 3)\n\n\ndef test_load_clip_submodels():\n    from mmagic.models.editors.stable_diffusion.clip_wrapper import \\\n        load_clip_submodels\n    init_cfg = dict(\n        type='Pretrained',\n        pretrained_model_path='tem',\n    )\n\n    submodels = []\n    with pytest.raises(Exception):\n        load_clip_submodels(init_cfg, submodels, True)\n\n\ndef test_load_clip_submodels_transformers_none():\n    transformer_location = sys.modules['transformers']\n    sys.modules['transformers'] = None\n    importlib.reload(\n        sys.modules['mmagic.models.editors.stable_diffusion.clip_wrapper'])\n    from mmagic.models.editors.stable_diffusion.clip_wrapper import \\\n        load_clip_submodels\n\n    init_cfg = dict(\n        type='Pretrained',\n        pretrained_model_path='tem',\n    )\n    submodels = []\n    with pytest.raises(ImportError):\n        load_clip_submodels(init_cfg, submodels, True)\n\n    sys.modules['transformers'] = transformer_location\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion/test_stable_diffusion.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom addict import Dict\nfrom mmengine import MODELS, Config\n\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nunet = dict(\n    type='DenoisingUnet',\n    image_size=128,\n    base_channels=32,\n    channels_cfg=[1, 2],\n    unet_type='stable',\n    act_cfg=dict(type='silu', inplace=False),\n    cross_attention_dim=768,\n    num_heads=2,\n    in_channels=4,\n    layers_per_block=1,\n    down_block_types=['CrossAttnDownBlock2D', 'DownBlock2D'],\n    up_block_types=['UpBlock2D', 'CrossAttnUpBlock2D'],\n    output_cfg=dict(var='fixed'))\n\nvae = dict(\n    type='EditAutoencoderKL',\n    act_fn='silu',\n    block_out_channels=[128],\n    down_block_types=['DownEncoderBlock2D'],\n    in_channels=3,\n    latent_channels=4,\n    layers_per_block=1,\n    norm_num_groups=32,\n    out_channels=3,\n    sample_size=128,\n    up_block_types=[\n        'UpDecoderBlock2D',\n    ])\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\ninit_cfg = dict(type='Pretrained', pretrained_model_path=None)\n\n\nclass dummy_tokenizer(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.model_max_length = 0\n\n    def __call__(self,\n                 prompt,\n                 padding='max_length',\n                 max_length=0,\n                 truncation=False,\n                 return_tensors='pt'):\n        text_inputs = Dict()\n        text_inputs['input_ids'] = torch.ones([1, 77])\n        text_inputs['attention_mask'] = torch.ones([1, 77])\n        return text_inputs\n\n\nclass dummy_text_encoder(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.config = None\n\n    def __call__(self, x, attention_mask):\n        result = torch.rand([1, 77, 768])\n        return [result]\n\n\nmodel = dict(\n    type='StableDiffusion',\n    scheduler=diffusion_scheduler,\n    unet=unet,\n    vae=vae,\n    init_cfg=init_cfg,\n    text_encoder=dummy_text_encoder(),\n    tokenizer=dummy_text_encoder())\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_stable_diffusion():\n    StableDiffuser = MODELS.build(Config(model))\n    StableDiffuser.tokenizer = dummy_tokenizer()\n    StableDiffuser.text_encoder = dummy_text_encoder()\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer(1, height=64, width=64)\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer('temp', height=31, width=31)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='numpy')\n    assert result['samples'].shape == (1, 3, 64, 64)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='image')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion/test_stable_diffusion_inpaint.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom addict import Dict\nfrom mmengine import MODELS, Config\n\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nunet = dict(\n    type='DenoisingUnet',\n    image_size=128,\n    base_channels=32,\n    channels_cfg=[1, 2],\n    unet_type='stable',\n    act_cfg=dict(type='silu', inplace=False),\n    cross_attention_dim=768,\n    num_heads=2,\n    in_channels=9,\n    out_channels=4,\n    layers_per_block=1,\n    down_block_types=['CrossAttnDownBlock2D', 'DownBlock2D'],\n    up_block_types=['UpBlock2D', 'CrossAttnUpBlock2D'],\n    output_cfg=dict(var='fixed'))\n\nvae = dict(\n    type='EditAutoencoderKL',\n    act_fn='silu',\n    block_out_channels=[128],\n    down_block_types=['DownEncoderBlock2D'],\n    in_channels=3,\n    latent_channels=4,\n    layers_per_block=1,\n    norm_num_groups=32,\n    out_channels=3,\n    sample_size=128,\n    up_block_types=[\n        'UpDecoderBlock2D',\n    ])\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\ninit_cfg = dict(type='Pretrained', pretrained_model_path=None)\n\n\nclass dummy_tokenizer(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.model_max_length = 0\n\n    def __call__(self,\n                 prompt,\n                 padding='max_length',\n                 max_length=0,\n                 truncation=False,\n                 return_tensors='pt'):\n        text_inputs = Dict()\n        text_inputs['input_ids'] = torch.ones([1, 77])\n        text_inputs['attention_mask'] = torch.ones([1, 77])\n        return text_inputs\n\n\nclass dummy_text_encoder(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.config = None\n\n    def __call__(self, x, attention_mask):\n        result = torch.rand([1, 77, 768])\n        return [result]\n\n\nmodel = dict(\n    type='StableDiffusionInpaint',\n    scheduler=diffusion_scheduler,\n    unet=unet,\n    vae=vae,\n    init_cfg=init_cfg,\n    text_encoder=dummy_text_encoder(),\n    tokenizer=dummy_text_encoder())\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\ndef test_stable_diffusion():\n    StableDiffuser = MODELS.build(Config(model))\n    StableDiffuser.tokenizer = dummy_tokenizer()\n    StableDiffuser.text_encoder = dummy_text_encoder()\n    config = getattr(StableDiffuser.vae, 'config', None)\n    if config is None:\n\n        class DummyConfig:\n            pass\n\n        config = DummyConfig()\n        setattr(config, 'scaling_factor', 1.2)\n        setattr(StableDiffuser.vae, 'config', config)\n\n    image = torch.clip(torch.randn((1, 3, 64, 64)), -1, 1)\n    mask = torch.clip(torch.randn((1, 1, 64, 64)), 0, 1)\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer('temp', image, mask, height=31, width=31)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        image=image,\n        mask_image=mask,\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='numpy')\n    assert result['samples'].shape == (1, 3, 64, 64)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        image=image,\n        mask_image=mask,\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='image')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion/test_stable_diffusion_tomesd.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom addict import Dict\nfrom mmengine import MODELS, Config\n\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nunet = dict(\n    type='DenoisingUnet',\n    image_size=128,\n    base_channels=32,\n    channels_cfg=[1, 2],\n    unet_type='stable',\n    act_cfg=dict(type='silu', inplace=False),\n    cross_attention_dim=768,\n    num_heads=2,\n    in_channels=4,\n    layers_per_block=1,\n    down_block_types=['CrossAttnDownBlock2D', 'DownBlock2D'],\n    up_block_types=['UpBlock2D', 'CrossAttnUpBlock2D'],\n    output_cfg=dict(var='fixed'))\n\nvae = dict(\n    type='EditAutoencoderKL',\n    act_fn='silu',\n    block_out_channels=[128],\n    down_block_types=['DownEncoderBlock2D'],\n    in_channels=3,\n    latent_channels=4,\n    layers_per_block=1,\n    norm_num_groups=32,\n    out_channels=3,\n    sample_size=128,\n    up_block_types=[\n        'UpDecoderBlock2D',\n    ])\n\ndiffusion_scheduler = dict(\n    type='EditDDIMScheduler',\n    variance_type='learned_range',\n    beta_end=0.012,\n    beta_schedule='scaled_linear',\n    beta_start=0.00085,\n    num_train_timesteps=1000,\n    set_alpha_to_one=False,\n    clip_sample=False)\n\ninit_cfg = dict(type='Pretrained', pretrained_model_path=None)\n\n\nclass dummy_tokenizer(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.model_max_length = 0\n\n    def __call__(self,\n                 prompt,\n                 padding='max_length',\n                 max_length=0,\n                 truncation=False,\n                 return_tensors='pt'):\n        text_inputs = Dict()\n        text_inputs['input_ids'] = torch.ones([1, 77])\n        text_inputs['attention_mask'] = torch.ones([1, 77])\n        return text_inputs\n\n\nclass dummy_text_encoder(nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.config = None\n\n    def __call__(self, x, attention_mask):\n        result = torch.rand([1, 77, 768])\n        return [result]\n\n\nmodel = dict(\n    type='StableDiffusion',\n    scheduler=diffusion_scheduler,\n    unet=unet,\n    vae=vae,\n    init_cfg=init_cfg,\n    text_encoder=dummy_text_encoder(),\n    tokenizer=dummy_text_encoder(),\n    tomesd_cfg=dict(ratio=0.5))\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\n@pytest.mark.skipif(\n    not hasattr(torch.Tensor, 'scatter_reduce')\n    or torch.__version__ < '1.12.1',\n    reason='required method')\ndef test_stable_diffusion():\n    StableDiffuser = MODELS.build(Config(model))\n    StableDiffuser.tokenizer = dummy_tokenizer()\n    StableDiffuser.text_encoder = dummy_text_encoder()\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer(1, height=64, width=64)\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer('temp', height=31, width=31)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='numpy')\n    assert result['samples'].shape == (1, 3, 64, 64)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='image')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion/test_vae.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.stable_diffusion.vae import (\n    AttentionBlock, AutoencoderKL, DiagonalGaussianDistribution, Downsample2D,\n    ResnetBlock2D, Upsample2D)\n\n\ndef test_vae():\n    input = torch.rand((1, 3, 32, 32))\n    vae = AutoencoderKL()\n    output = vae.forward(input)\n    assert output['sample'].shape == (1, 3, 32, 32)\n\n\ndef test_resnetblock2d():\n    input = torch.rand((1, 64, 16, 16))\n    resblock = ResnetBlock2D(in_channels=64, up=True)\n    output = resblock.forward(input, None)\n    assert output.shape == (1, 64, 64, 64)\n\n    resblock = ResnetBlock2D(in_channels=64, down=True)\n    output = resblock.forward(input, None)\n    assert output.shape == (1, 64, 8, 8)\n\n\ndef test_DiagonalGaussianDistribution():\n    param = torch.rand((1, 2, 16, 16))\n    sample = torch.rand((1, 1, 16, 16))\n\n    gauss_dist = DiagonalGaussianDistribution(param, deterministic=False)\n    gauss_dist.sample()\n    gauss_dist.kl()\n    output = gauss_dist.nll(sample)\n    assert output.shape == (1, )\n\n    gauss_dist = DiagonalGaussianDistribution(param, deterministic=True)\n    gauss_dist.sample()\n    gauss_dist.kl()\n    output = gauss_dist.nll(sample)\n    assert output.shape == (1, )\n\n\ndef test_AttentionBlock():\n    input = torch.rand((1, 64, 32, 32))\n    attention = AttentionBlock(64, num_head_channels=8)\n    output = attention.forward(input)\n    assert output.shape == (1, 64, 32, 32)\n\n\ndef test_Downsample2D():\n    input = torch.rand((1, 64, 16, 16))\n    downsample = Downsample2D(channels=64, use_conv=True, padding=0)\n    output = downsample.forward(input)\n    assert output.shape == (1, 64, 8, 8)\n\n\ndef test_Upsample2D():\n    input = torch.rand((1, 64, 16, 16))\n    upsample = Upsample2D(channels=64, use_conv_transpose=True)\n    output = upsample.forward(input)\n    assert output.shape == (1, 64, 32, 32)\n\n    upsample = Upsample2D(channels=64)\n    output = upsample.forward(input, output_size=(32, 32))\n    assert output.shape == (1, 64, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stable_diffusion_xl/test_stable_diffusion_xl.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nfrom mmengine import MODELS, Config\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import SGD\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\nstable_diffusion_xl_tiny_url = 'hf-internal-testing/tiny-stable-diffusion-xl-pipe'  # noqa\nmodel = dict(\n    type='StableDiffusionXL',\n    unet=dict(\n        type='UNet2DConditionModel',\n        subfolder='unet',\n        from_pretrained=stable_diffusion_xl_tiny_url),\n    vae=dict(type='AutoencoderKL', sample_size=64),\n    text_encoder_one=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_xl_tiny_url,\n        subfolder='text_encoder'),\n    tokenizer_one=stable_diffusion_xl_tiny_url,\n    text_encoder_two=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_xl_tiny_url,\n        subfolder='text_encoder_2'),\n    tokenizer_two=stable_diffusion_xl_tiny_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_xl_tiny_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_xl_tiny_url,\n        subfolder='scheduler'),\n    val_prompts=['a dog', 'a dog'])\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\n@pytest.mark.skipif(\n    torch.__version__ < '1.9.0',\n    reason='skip on torch<1.9 due to unsupported torch.concat')\ndef test_stable_xl_diffusion():\n    StableDiffuser = MODELS.build(Config(model))\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer(1, height=64, width=64)\n\n    with pytest.raises(Exception):\n        StableDiffuser.infer('temp', height=31, width=31)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='numpy')\n    assert result['samples'].shape == (1, 3, 64, 64)\n\n    result = StableDiffuser.infer(\n        'an insect robot preparing a delicious meal',\n        height=64,\n        width=64,\n        num_inference_steps=1,\n        return_type='image')\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower(),\n    reason='skip on windows due to limited RAM.')\n@pytest.mark.skipif(\n    torch.__version__ < '1.9.0',\n    reason='skip on torch<1.9 due to unsupported torch.concat')\ndef test_stable_diffusion_xl_step():\n    StableDiffuser = MODELS.build(Config(model))\n\n    # train step\n    data = dict(\n        inputs=torch.ones([1, 3, 64, 64]),\n        time_ids=torch.zeros((1, 6)),\n        data_samples=[\n            DataSample(prompt='an insect robot preparing a delicious meal')\n        ])\n    optimizer = SGD(StableDiffuser.parameters(), lr=0.1)\n    optim_wrapper = OptimWrapper(optimizer)\n    log_vars = StableDiffuser.train_step(data, optim_wrapper)\n    assert log_vars\n    assert isinstance(log_vars['loss'], torch.Tensor)\n\n    # val step\n    data = dict(data_samples=[DataSample()])\n    outputs = StableDiffuser.val_step(data)\n    assert len(outputs) == 2\n    assert isinstance(outputs[0].fake_img, torch.Tensor)\n    assert outputs[0].fake_img.shape == (3, 32, 32)\n\n    # test step\n    outputs = StableDiffuser.test_step(data)\n    assert len(outputs) == 2\n    assert isinstance(outputs[0].fake_img, torch.Tensor)\n    assert outputs[0].fake_img.shape == (3, 32, 32)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan1/test_stylegan1.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest import TestCase\n\nimport numpy as np\nimport pytest\nimport torch\nfrom mmengine import MessageHub\n\nfrom mmagic.engine import PGGANOptimWrapperConstructor\nfrom mmagic.models import StyleGAN1\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestStyleGAN1(TestCase):\n    style_channels = 16\n    generator_cfg = dict(\n        type='StyleGAN1Generator', out_size=64, style_channels=16)\n    discriminator_cfg = dict(type='StyleGAN1Discriminator', in_size=64)\n\n    nkimgs_per_scale = {'16': 0.004, '32': 0.008, '64': 0.016}\n\n    data_preprocessor = dict(type='DataPreprocessor')\n\n    lr_schedule = dict(generator={'32': 0.0015}, discriminator={'32': 0.0015})\n    optim_wrapper_cfg = dict(\n        generator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        discriminator=dict(\n            optimizer=dict(type='Adam', lr=0.001, betas=(0., 0.99))),\n        lr_schedule=lr_schedule)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan_cpu(self):\n        message_hub = MessageHub.get_instance('test-s1')\n        message_hub.update_info('iter', 0)\n\n        # test default config\n        stylegan = StyleGAN1(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            style_channels=self.style_channels,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            ema_config=dict(interval=1))\n\n        constructor = PGGANOptimWrapperConstructor(self.optim_wrapper_cfg)\n        optim_wrapper_dict = constructor(stylegan)\n\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 64, 64)) for _ in range(3)\n            ])\n\n        for iter_num in range(6):\n            stylegan.train_step(data_batch, optim_wrapper_dict)\n            if iter_num in [0, 1]:\n                assert stylegan.curr_scale[0] == 16\n            elif iter_num in [2, 3]:\n                assert stylegan.curr_scale[0] == 32\n            elif iter_num in [4, 5]:\n                assert stylegan.curr_scale[0] == 64\n\n            if iter_num == 2:\n                assert np.isclose(stylegan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 3:\n                assert np.isclose(stylegan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 5:\n                assert np.isclose(\n                    stylegan._actual_nkimgs[-1], 0.012, atol=1e-8)\n\n        # test forward\n        outputs = stylegan.forward(dict(num_batches=2))\n        # assert outputs.shape == (2, 3, 64, 64)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        outputs = stylegan.forward(\n            dict(\n                num_batches=2,\n                return_noise=True,\n                transition_weight=0.2,\n                sample_model='ema'))\n        # assert outputs.shape == (2, 3, 64, 64)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        outputs = stylegan.forward(dict(num_batches=2, sample_model='orig'))\n        # assert outputs.shape == (2, 3, 64, 64)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        outputs = stylegan.forward(\n            dict(num_batches=2, sample_model='ema/orig'))\n        # assert isinstance(outputs, dict)\n        # assert list(outputs.keys()) == ['ema', 'orig']\n        # assert all([o.shape == (2, 3, 64, 64) for o in outputs.values()])\n        assert len(outputs) == 2\n        assert all([out.ema.fake_img.shape == (3, 64, 64) for out in outputs])\n        assert all([out.orig.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        outputs = stylegan.forward(dict(num_batches=2, curr_scale=8))\n        # assert outputs.shape == (2, 3, 8, 8)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 8, 8) for out in outputs])\n\n        outputs = stylegan.forward(dict(noise=torch.randn(2, 16)))\n        # assert outputs.shape == (2, 3, 64, 64)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        outputs = stylegan.forward(torch.randn(2, 16))\n        # assert outputs.shape == (2, 3, 64, 64)\n        assert len(outputs) == 2\n        assert all([out.fake_img.shape == (3, 64, 64) for out in outputs])\n\n        # test train_step with error\n        with pytest.raises(RuntimeError):\n            data_batch = dict(\n                inputs=dict(),\n                data_samples=[\n                    DataSample(gt_img=torch.randn(3, 4, 32)) for _ in range(3)\n                ])\n            _ = stylegan.train_step(data_batch, optim_wrapper_dict)\n\n        # test train_step without ema\n        stylegan = StyleGAN1(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            style_channels=self.style_channels,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale)\n        optim_wrapper_dict = constructor(stylegan)\n\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 64, 64)) for _ in range(3)\n            ])\n        stylegan.train_step(data_batch, optim_wrapper_dict)\n\n        # test train_step with disc_step != 1\n        stylegan._disc_steps = 2\n        stylegan.train_step(data_batch, optim_wrapper_dict)\n\n        # test default configs\n        stylegan = StyleGAN1(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            style_channels=self.style_channels,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            interp_real=dict(mode='bicubic'),\n            ema_config=dict(interval=1))\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_stylegan_cuda(self):\n        stylegan = StyleGAN1(\n            self.generator_cfg,\n            self.discriminator_cfg,\n            style_channels=self.style_channels,\n            data_preprocessor=self.data_preprocessor,\n            nkimgs_per_scale=self.nkimgs_per_scale,\n            ema_config=dict(interval=1)).cuda()\n\n        constructor = PGGANOptimWrapperConstructor(self.optim_wrapper_cfg)\n        optim_wrapper_dict = constructor(stylegan)\n\n        data_batch = dict(\n            inputs=dict(),\n            data_samples=[\n                DataSample(gt_img=torch.randn(3, 64, 64)) for _ in range(3)\n            ])\n\n        for iter_num in range(6):\n            stylegan.train_step(data_batch, optim_wrapper_dict)\n            if iter_num in [0, 1]:\n                assert stylegan.curr_scale[0] == 16\n            elif iter_num in [2, 3]:\n                assert stylegan.curr_scale[0] == 32\n            elif iter_num in [4, 5]:\n                assert stylegan.curr_scale[0] == 64\n\n            if iter_num == 2:\n                assert np.isclose(stylegan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 3:\n                assert np.isclose(stylegan._actual_nkimgs[0], 0.006, atol=1e-8)\n            elif iter_num == 5:\n                assert np.isclose(\n                    stylegan._actual_nkimgs[-1], 0.012, atol=1e-8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan1/test_stylegan1_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan1 import StyleGAN1Discriminator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestStyleGANv1Disc:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(in_size=64)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_stylegan1_disc_cuda(self):\n        d = StyleGAN1Discriminator(**self.default_cfg).cuda()\n        img = torch.randn((2, 3, 64, 64)).cuda()\n        score = d(img)\n        assert score.shape == (2, 1)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan1_disc_cpu(self):\n        d = StyleGAN1Discriminator(**self.default_cfg)\n        img = torch.randn((2, 3, 64, 64))\n        score = d(img)\n        assert score.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan1/test_stylegan1_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan1 import StyleGAN1Generator\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestStyleGAN1Generator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            out_size=256,\n            style_channels=512,\n            num_mlps=8,\n            blur_kernel=[1, 2, 1],\n            lr_mlp=0.01,\n            default_style_mode='mix',\n            eval_style_mode='single',\n            mix_prob=0.9)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_g_cuda(self):\n        # test default config\n        g = StyleGAN1Generator(**self.default_cfg).cuda()\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=random_noise,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        res = g(\n            None, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        styles = [torch.randn((1, 512)).cuda() for _ in range(2)]\n        res = g(\n            styles, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        res = g(\n            torch.randn,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        g.eval()\n        assert g.default_style_mode == 'single'\n\n        g.train()\n        assert g.default_style_mode == 'mix'\n\n        with pytest.raises(AssertionError):\n            styles = [torch.randn((1, 6)).cuda() for _ in range(2)]\n            _ = g(styles, injected_noise=None, randomize_noise=False)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['out_size'] = 128\n        g = StyleGAN1Generator(**cfg_).cuda()\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test generate function\n        truncation_latent = g.get_mean_latent()\n        assert truncation_latent.shape == (1, 512)\n        style_mixing_images = g.style_mixing(\n            curr_scale=32,\n            truncation_latent=truncation_latent,\n            n_source=4,\n            n_target=4)\n        assert style_mixing_images.shape == (25, 3, 32, 32)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_g_cpu(self):\n        # test default config\n        g = StyleGAN1Generator(**self.default_cfg)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=random_noise,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        res = g(\n            None, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        styles = [torch.randn((1, 512)) for _ in range(2)]\n        res = g(\n            styles, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        res = g(\n            torch.randn,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 256, 256)\n\n        g.eval()\n        assert g.default_style_mode == 'single'\n\n        g.train()\n        assert g.default_style_mode == 'mix'\n\n        with pytest.raises(AssertionError):\n            styles = [torch.randn((1, 6)) for _ in range(2)]\n            _ = g(styles, injected_noise=None, randomize_noise=False)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['out_size'] = 128\n        g = StyleGAN1Generator(**cfg_)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 128, 128)\n\n        # test generate function\n        truncation_latent = g.get_mean_latent()\n        assert truncation_latent.shape == (1, 512)\n        style_mixing_images = g.style_mixing(\n            curr_scale=32,\n            truncation_latent=truncation_latent,\n            n_source=4,\n            n_target=4)\n        assert style_mixing_images.shape == (25, 3, 32, 32)\n\n        # set mix_prob as 1.0 and 0.0 to force cover lines\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['mix_prob'] = 1\n        g = StyleGAN1Generator(**cfg_)\n        res = g(torch.randn, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['mix_prob'] = 1\n        g = StyleGAN1Generator(**cfg_)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['mix_prob'] = 0\n        g = StyleGAN1Generator(**cfg_)\n        res = g(torch.randn, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['mix_prob'] = 0\n        g = StyleGAN1Generator(**cfg_)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan1/test_stylegan1_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan1.stylegan1_modules import (\n    AdaptiveInstanceNorm, StyleConv)\n\n\nclass TestAdaptiveInstanceNorm:\n\n    @classmethod\n    def setup_class(cls):\n        cls.in_channel = 512\n        cls.style_dim = 512\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_adain_cuda(self):\n        adain = AdaptiveInstanceNorm(self.in_channel, self.style_dim).cuda()\n        x = torch.randn((2, 512, 8, 8)).cuda()\n        style = torch.randn((2, 512)).cuda()\n        res = adain(x, style)\n\n        assert res.shape == (2, 512, 8, 8)\n\n\nclass TestStyleConv:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=512,\n            out_channels=256,\n            kernel_size=3,\n            style_channels=512,\n            padding=1,\n            initial=False,\n            blur_kernel=[1, 2, 1],\n            upsample=True,\n            fused=False)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_styleconv_cuda(self):\n        conv = StyleConv(**self.default_cfg).cuda()\n        input_x = torch.randn((2, 512, 32, 32)).cuda()\n        input_style1 = torch.randn((2, 512)).cuda()\n        input_style2 = torch.randn((2, 512)).cuda()\n\n        res = conv(input_x, input_style1, input_style2)\n        assert res.shape == (2, 256, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan1/test_stylegan_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock, patch\n\nimport torch\n\nfrom mmagic.models.editors.stylegan1 import get_mean_latent, style_mixing\n\nget_module_device_str = 'mmagic.models.editors.stylegan1.stylegan_utils.get_module_device'  # noqa\n\n\n@patch(get_module_device_str, MagicMock(return_value='cpu'))\ndef test_get_mean_latent():\n    generator = MagicMock()\n    generator.style_mapping = MagicMock(return_value=torch.randn(1024, 16))\n\n    mean_style = get_mean_latent(generator)\n    assert mean_style.shape == (1, 16)\n\n\ndef mock_generator(code, *args, **kwargs):\n    if isinstance(code, torch.Tensor):\n        n_sample = code.shape[0]\n    elif isinstance(code, list):\n        # is list\n        n_sample = code[0].shape[0]\n    return torch.randn(n_sample, 3, 16, 16)\n\n\n@patch(get_module_device_str, MagicMock(return_value='cpu'))\ndef test_style_mixing():\n    out = style_mixing(mock_generator, n_source=10, n_target=11)\n    assert out.shape == ((1 + 10 + (1 + 10) * 11), 3, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan2/test_ada/test_augment.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.editors.stylegan2.ada.augment import AugmentPipe\n\n\nclass TestAuementPipe(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.default_cfg = dict(\n            xflip=1,\n            rotate90=1,\n            xint=1,\n            xint_max=1,\n            scale=1,\n            rotate=1,\n            aniso=1,\n            xfrac=1,\n            scale_std=1,\n            rotate_max=1,\n            aniso_std=1,\n            xfrac_std=1,\n            brightness=1,\n            contrast=1,\n            lumaflip=1,\n            hue=1,\n            saturation=1,\n            brightness_std=1,\n            contrast_std=1,\n            hue_max=1,\n            saturation_std=1,\n            imgfilter=1,\n            imgfilter_bands=[1, 1, 1, 1],\n            imgfilter_std=1,\n            noise=1,\n            cutout=1,\n            noise_std=1,\n            cutout_size=0.5,\n        )\n\n    @pytest.mark.skipif(\n        digit_version(TORCH_VERSION) <= digit_version('1.6.0')\n        or 'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason=('torch version lower than 1.7.0 does not have '\n                '`torch.exp2` api, skip on windows due to uncompiled ops.'))\n    def test_forward(self):\n        augment_pipeline = AugmentPipe(**self.default_cfg)\n\n        inp = torch.rand(2, 3, 64, 64)\n        out = augment_pipeline(inp)\n        assert out.shape == (2, 3, 64, 64)\n\n        out = augment_pipeline(inp, debug_percentile=0.1)\n\n        no_aug_cfg = {\n            k: 0\n            for k, v in self.default_cfg.items()\n            if isinstance(v, (float, int))\n        }\n        augment_pipeline = AugmentPipe(**no_aug_cfg)\n\n        inp = torch.rand(2, 3, 64, 64)\n        out = augment_pipeline(inp)\n        assert out.shape == (2, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan2/test_stylegan2.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\n\nfrom mmagic.models import DataPreprocessor, StyleGAN2\nfrom mmagic.structures import DataSample\n\n\nclass TestStyleGAN2(TestCase):\n\n    @classmethod\n    def setup_class(cls):\n        cls.generator_cfg = dict(\n            type='StyleGANv2Generator', out_size=32, style_channels=16)\n        cls.disc_cfg = dict(type='StyleGAN2Discriminator', in_size=32)\n\n        # reg params\n        d_reg_interval = 16\n        g_reg_interval = 4\n        ema_half_life = 10.  # G_smoothing_kimg\n\n        cls.ema_config = dict(\n            type='ExponentialMovingAverage',\n            interval=1,\n            momentum=1. - (0.5**(32. / (ema_half_life * 1000.))))\n\n        cls.loss_config = dict(\n            r1_loss_weight=10. / 2. * d_reg_interval,\n            r1_interval=d_reg_interval,\n            norm_mode='HWC',\n            g_reg_interval=g_reg_interval,\n            g_reg_weight=2. * g_reg_interval,\n            pl_batch_shrink=2)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan2_cpu(self):\n        accu_iter = 1\n        message_hub = MessageHub.get_instance('test-s2')\n        stylegan2 = StyleGAN2(\n            self.generator_cfg,\n            self.disc_cfg,\n            data_preprocessor=DataPreprocessor(),\n            ema_config=self.ema_config,\n            loss_config=self.loss_config)\n\n        optimizer_g = torch.optim.SGD(\n            stylegan2.generator.parameters(), lr=0.01)\n        optimizer_d = torch.optim.SGD(\n            stylegan2.discriminator.parameters(), lr=0.01)\n\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(optimizer_g, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                optimizer_d, accumulative_counts=accu_iter))\n\n        # prepare inputs\n        img = torch.randn(3, 32, 32)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        message_hub.update_info('iter', 0)\n        _ = stylegan2.train_step(data, optim_wrapper_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan2/test_stylegan2_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.editors.stylegan2 import (ADAAug, ADAStyleGAN2Discriminator,\n                                             StyleGAN2Discriminator)\nfrom mmagic.models.utils import get_module_device\n\n\n@pytest.mark.skipif(\n    ('win' in platform.system().lower() and 'cu' in torch.__version__)\n    or not torch.cuda.is_available(),\n    reason='skip on windows-cuda due to limited RAM.')\nclass TestStyleGANv2Disc:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(in_size=64, channel_multiplier=1)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan2_disc_cpu(self):\n        d = StyleGAN2Discriminator(**self.default_cfg)\n        img = torch.randn((2, 3, 64, 64))\n        score = d(img)\n        assert score.shape == (2, 1)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['cond_size'] = 5\n        cfg['cond_mapping_channels'] = 16\n\n        d = StyleGAN2Discriminator(**cfg)\n        score = d(img, torch.randn(2, 5))\n        assert score.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_stylegan2_disc_cuda(self):\n        d = StyleGAN2Discriminator(**self.default_cfg).cuda()\n        img = torch.randn((2, 3, 64, 64)).cuda()\n        score = d(img)\n        assert score.shape == (2, 1)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['cond_size'] = 5\n        cfg['cond_mapping_channels'] = 16\n\n        d = StyleGAN2Discriminator(**cfg).cuda()\n        score = d(img, torch.randn(2, 5).cuda())\n        assert score.shape == (2, 1)\n\n\ndef test_get_module_device_cpu():\n    device = get_module_device(nn.Conv2d(3, 3, 3, 1, 1))\n    assert device == torch.device('cpu')\n\n    # The input module should contain parameters.\n    with pytest.raises(ValueError):\n        get_module_device(nn.Flatten())\n\n\n@pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\ndef test_get_module_device_cuda():\n    module = nn.Conv2d(3, 3, 3, 1, 1).cuda()\n    device = get_module_device(module)\n    assert device == next(module.parameters()).get_device()\n\n    # The input module should contain parameters.\n    with pytest.raises(ValueError):\n        get_module_device(nn.Flatten().cuda())\n\n\nclass TestStyleGANv2AdaDisc:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_size=64, data_aug=dict(type='ADAAug'), channel_multiplier=1)\n\n    @pytest.mark.skipif(\n        digit_version(TORCH_VERSION) <= digit_version('1.6.0'),\n        reason='torch version lower than 1.7.0 does not have `torch.exp2` api')\n    def test_styleganv2_ada(self):\n        disc = ADAStyleGAN2Discriminator(**self.default_cfg)\n        assert hasattr(disc, 'ada_aug')\n        img = torch.randn(2, 3, 64, 64)\n        score = disc(img)\n        assert score.shape == (2, 1)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg['data_aug'] = None\n        disc = ADAStyleGAN2Discriminator(**cfg)\n        assert not hasattr(disc, 'ada_aug')\n        img = torch.randn(2, 3, 64, 64)\n        score = disc(img)\n        assert score.shape == (2, 1)\n\n\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) <= digit_version('1.6.0'),\n    reason='torch version lower than 1.7.0 does not have `torch.exp2` api')\ndef test_ada_pipeline():\n    ada = ADAAug()\n    ada.update(0, 2)\n    ada.update(1, 2)\n    ada.update(2, 2)\n    assert (ada.log_buffer == 0).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan2/test_stylegan2_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Generator\n\n\nclass TestStyleGAN2Generator:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            out_size=64, style_channels=16, num_mlps=4, channel_multiplier=1)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_stylegan2_g_cpu(self):\n        # test default config\n        g = StyleGAN2Generator(**self.default_cfg)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 64, 64)\n\n        # test truncation_latent is None\n        assert not hasattr(g, 'truncation_latent')\n        res = g(None, num_batches=2, truncation=0.9)\n        assert res.shape == (2, 3, 64, 64)\n        assert hasattr(g, 'truncation_latent')\n        assert g.truncation_latent.shape == (1, 16)\n        res = g(None, num_batches=2, truncation=0.9)\n        assert res.shape == (2, 3, 64, 64)\n\n        truncation_mean = g.get_mean_latent()\n        res = g(\n            None,\n            num_batches=2,\n            randomize_noise=False,\n            truncation=0.7,\n            truncation_latent=truncation_mean)\n        assert res.shape == (2, 3, 64, 64)\n\n        res = g.style_mixing(2, 2, truncation_latent=truncation_mean)\n        assert res.shape[2] == 64\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=random_noise,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        styles = [torch.randn((1, 16)) for _ in range(2)]\n        res = g(\n            styles, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        res = g(\n            torch.randn,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        g.eval()\n        assert g.default_style_mode == 'single'\n\n        g.train()\n        assert g.default_style_mode == 'mix'\n\n        with pytest.raises(AssertionError):\n            styles = [torch.randn((1, 6)) for _ in range(2)]\n            _ = g(styles, injected_noise=None, randomize_noise=False)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['out_size'] = 256\n        g = StyleGAN2Generator(**cfg_)\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        # set mix_prob as 1 and 0 to cover all lines\n        g.mix_prob = 1\n        res = g(None, num_batches=2)\n        g.mix_prob = 0\n        res = g(None, num_batches=2)\n\n        # test cond channels is negative number\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['cond_size'] = -1\n        g = StyleGAN2Generator(**cfg_)\n        assert not hasattr(g, 'embed')\n\n        # test cond channels > 0\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['cond_size'] = 10\n        g = StyleGAN2Generator(**cfg_)\n        assert hasattr(g, 'embed')\n        assert hasattr(g, 'w_avg')\n        # test raise error\n        with pytest.raises(AssertionError):\n            g(None, num_batches=2)\n        res = g(None, num_batches=2, label=torch.randn(2, 10))\n        assert res.shape == (2, 3, 64, 64)\n\n        # test update_mean_latent_with_ema\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['update_mean_latent_with_ema'] = True\n        g = StyleGAN2Generator(**cfg_)\n        assert hasattr(g, 'w_avg')\n        # test get_mean_latent\n        mean_latent = g.get_mean_latent().clone()  # copy for test\n        assert mean_latent.shape == (16, )\n        assert (mean_latent == 0).all()\n\n        # test update w_avg with ema\n        g.eval()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False,\n            update_ws=True)\n        mean_latent_test = g.get_mean_latent().clone()  # copy for test\n        # should not be update in test\n        assert (mean_latent_test == mean_latent).all()\n\n        # test return features\n        g.eval()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False,\n            return_noise=True,\n            return_features=True,\n            feat_idx=1)\n        assert res['feats'].shape == (1, 512, 8, 8)\n        assert res['latent'].shape == (1, 10, 16)\n\n        # test return latent only\n        g.eval()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False,\n            return_latent_only=True)\n        assert res.shape == (1, 10, 16)\n\n        g.train()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False,\n            update_ws=True)\n        mean_latent_train = g.get_mean_latent().clone()  # copy for test\n        # should be update in train\n        assert (mean_latent_train != mean_latent).any()\n\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False,\n            update_ws=False)\n        mean_latent_no_update = g.get_mean_latent().clone()  # copy for test\n        assert (mean_latent_train == mean_latent_no_update).all()\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_g_cuda(self):\n        # test default config\n        g = StyleGAN2Generator(**self.default_cfg).cuda()\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 64, 64)\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None,\n            num_batches=1,\n            injected_noise=random_noise,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        random_noise = g.make_injected_noise()\n        res = g(\n            None, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        styles = [torch.randn((1, 16)).cuda() for _ in range(2)]\n        res = g(\n            styles, num_batches=1, injected_noise=None, randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        res = g(\n            torch.randn,\n            num_batches=1,\n            injected_noise=None,\n            randomize_noise=False)\n        assert res.shape == (1, 3, 64, 64)\n\n        g.eval()\n        assert g.default_style_mode == 'single'\n\n        g.train()\n        assert g.default_style_mode == 'mix'\n\n        with pytest.raises(AssertionError):\n            styles = [torch.randn((1, 6)).cuda() for _ in range(2)]\n            _ = g(styles, injected_noise=None, randomize_noise=False)\n\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['out_size'] = 256\n        g = StyleGAN2Generator(**cfg_).cuda()\n        res = g(None, num_batches=2)\n        assert res.shape == (2, 3, 256, 256)\n\n        # set mix_prob as 1 and 0 to cover all lines\n        g.mix_prob = 1\n        res = g(None, num_batches=2)\n        g.mix_prob = 0\n        res = g(None, num_batches=2)\n\n        # test cond channels is negative number\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['cond_size'] = -1\n        g = StyleGAN2Generator(**cfg_)\n        assert not hasattr(g, 'embed')\n\n        # test cond channels > 0\n        cfg_ = deepcopy(self.default_cfg)\n        cfg_['cond_size'] = 10\n        g = StyleGAN2Generator(**cfg_)\n        assert hasattr(g, 'embed')\n        # test raise error\n        with pytest.raises(AssertionError):\n            g(None, num_batches=2)\n        res = g(None, num_batches=2, label=torch.randn(2, 10))\n        assert res.shape == (2, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan2/test_stylegan2_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan1 import get_mean_latent, style_mixing\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Generator\nfrom mmagic.models.editors.stylegan2.stylegan2_modules import (\n    Blur, DownsampleUpFIRDn, ModulatedConv2d, ModulatedStyleConv,\n    ModulatedToRGB)\nfrom mmagic.models.utils import get_module_device\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_get_module_device():\n    config = dict(\n        out_size=64, style_channels=16, num_mlps=4, channel_multiplier=1)\n    g = StyleGAN2Generator(**config)\n    res = g(None, num_batches=2)\n    assert res.shape == (2, 3, 64, 64)\n\n    truncation_mean = get_mean_latent(g, 4096)\n    res = g(\n        None,\n        num_batches=2,\n        randomize_noise=False,\n        truncation=0.7,\n        truncation_latent=truncation_mean)\n\n    # res = g.style_mixing(2, 2, truncation_latent=truncation_mean)\n    res = style_mixing(\n        g,\n        n_source=2,\n        n_target=2,\n        truncation_latent=truncation_mean,\n        style_channels=g.style_channels)\n\n    assert get_module_device(g) == torch.device('cpu')\n\n\nclass TestDownsampleUpFIRDn():\n\n    def test_DownsampleUpFIRDn(self):\n        downsample = DownsampleUpFIRDn((2, 2), 2)\n        assert downsample.pad == (0, 0)\n\n        inp = torch.randn(1, 3, 4, 4)\n        out = downsample(inp)\n        assert out.shape == (1, 3, 2, 2)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_DownsampleUpFIRDn_cuda(self):\n        downsample = DownsampleUpFIRDn((2, 2), 2).cuda()\n        assert downsample.pad == (0, 0)\n\n        inp = torch.randn(1, 3, 4, 4).cuda()\n        out = downsample(inp)\n        assert out.shape == (1, 3, 2, 2)\n\n\nclass TestBlur:\n\n    @classmethod\n    def setup_class(cls):\n        cls.kernel = [1, 3, 3, 1]\n        cls.pad = (1, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_blur_cuda(self):\n        blur = Blur(self.kernel, self.pad)\n        x = torch.randn((2, 3, 8, 8))\n        res = blur(x)\n\n        assert res.shape == (2, 3, 7, 7)\n\n\nclass TestModStyleConv:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=1,\n            kernel_size=3,\n            style_channels=5,\n            upsample=True)\n\n    def test_mod_styleconv_cpu(self):\n        conv = ModulatedStyleConv(**self.default_cfg)\n        input_x = torch.randn((2, 3, 4, 4))\n        input_style = torch.randn((2, 5))\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 8, 8)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        conv = ModulatedStyleConv(**_cfg)\n        input_x = torch.randn((2, 3, 4, 4))\n        input_style = torch.randn((2, 5))\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n        # test add noise\n        noise = torch.randn(2, 1, 4, 4)\n        res = conv(input_x, input_style, noise)\n        assert res.shape == (2, 1, 4, 4)\n\n        # test add noise + return_noise\n        res = conv(input_x, input_style, noise, return_noise=True)\n        assert isinstance(res, tuple)\n        assert res[0].shape == (2, 1, 4, 4)\n        assert (res[1] == noise).all()\n\n        # test add noise is False\n        res = conv(input_x, input_style, noise, add_noise=False)\n        assert res.shape == (2, 1, 4, 4)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_mod_styleconv_cuda(self):\n        conv = ModulatedStyleConv(**self.default_cfg).cuda()\n        input_x = torch.randn((2, 3, 4, 4)).cuda()\n        input_style = torch.randn((2, 5)).cuda()\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 8, 8)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        conv = ModulatedStyleConv(**_cfg).cuda()\n        input_x = torch.randn((2, 3, 4, 4)).cuda()\n        input_style = torch.randn((2, 5)).cuda()\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n\nclass TestModulatedConv2d():\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(\n            in_channels=3,\n            out_channels=1,\n            kernel_size=3,\n            style_channels=5,\n            upsample=True)\n\n    def test_mod_conv_cpu(self):\n        conv = ModulatedConv2d(**self.default_cfg)\n        input_x = torch.randn((2, 3, 4, 4))\n        input_style = torch.randn((2, 5))\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 8, 8)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        conv = ModulatedConv2d(**_cfg)\n        input_x = torch.randn((2, 3, 4, 4))\n        input_style = torch.randn((2, 5))\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        _cfg['downsample'] = True\n        conv = ModulatedConv2d(**_cfg)\n        input_x = torch.randn((2, 3, 8, 8))\n        input_style = torch.randn((2, 5))\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n        # test input gain\n        res = conv(input_x, input_style, input_gain=torch.randn(2, 3))\n        assert res.shape == (2, 1, 4, 4)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_mod_conv_cuda(self):\n        conv = ModulatedConv2d(**self.default_cfg).cuda()\n        input_x = torch.randn((2, 3, 4, 4)).cuda()\n        input_style = torch.randn((2, 5)).cuda()\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 8, 8)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        conv = ModulatedConv2d(**_cfg).cuda()\n        input_x = torch.randn((2, 3, 4, 4)).cuda()\n        input_style = torch.randn((2, 5)).cuda()\n\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n        _cfg = deepcopy(self.default_cfg)\n        _cfg['upsample'] = False\n        _cfg['downsample'] = True\n        conv = ModulatedConv2d(**_cfg).cuda()\n        input_x = torch.randn((2, 3, 8, 8)).cuda()\n        input_style = torch.randn((2, 5)).cuda()\n        res = conv(input_x, input_style)\n        assert res.shape == (2, 1, 4, 4)\n\n        # test input gain\n        res = conv(input_x, input_style, input_gain=torch.randn(2, 3).cuda())\n        assert res.shape == (2, 1, 4, 4)\n\n\nclass TestToRGB:\n\n    @classmethod\n    def setup_class(cls):\n        cls.default_cfg = dict(in_channels=5, style_channels=5, out_channels=3)\n\n    def test_torgb_cpu(self):\n        model = ModulatedToRGB(**self.default_cfg)\n        input_x = torch.randn((2, 5, 4, 4))\n        style = torch.randn((2, 5))\n\n        res = model(input_x, style)\n        assert res.shape == (2, 3, 4, 4)\n\n        input_x = torch.randn((2, 5, 8, 8))\n        style = torch.randn((2, 5))\n        skip = torch.randn(2, 3, 4, 4)\n        res = model(input_x, style, skip)\n        assert res.shape == (2, 3, 8, 8)\n\n        # test skip is passed + upsample is False\n        cfg = deepcopy(self.default_cfg)\n        cfg['upsample'] = False\n        cfg['out_channels'] = 7\n        model = ModulatedToRGB(**cfg)\n        input_x = torch.randn((2, 5, 4, 4))\n        skip = torch.randn(2, 7, 4, 4)\n        style = torch.randn((2, 5))\n        res = model(input_x, style, skip)\n        assert res.shape == (2, 7, 4, 4)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_torgb_cuda(self):\n        model = ModulatedToRGB(**self.default_cfg).cuda()\n        input_x = torch.randn((2, 5, 4, 4)).cuda()\n        style = torch.randn((2, 5)).cuda()\n\n        res = model(input_x, style)\n        assert res.shape == (2, 3, 4, 4)\n\n        input_x = torch.randn((2, 5, 8, 8)).cuda()\n        style = torch.randn((2, 5)).cuda()\n        skip = torch.randn(2, 3, 4, 4).cuda()\n        res = model(input_x, style, skip)\n        assert res.shape == (2, 3, 8, 8)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan3/test_stylegan3.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\n\nfrom mmagic.models import StyleGAN3\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\nregister_all_modules()\n\n\nclass TestStyleGAN3(TestCase):\n\n    @classmethod\n    def setUpClass(cls):\n        cls.default_cfg = dict(\n            data_preprocessor=dict(type='DataPreprocessor'),\n            generator=dict(\n                type='StyleGANv3Generator',\n                noise_size=6,\n                style_channels=8,\n                out_size=16,\n                img_channels=3,\n                synthesis_cfg=dict(\n                    type='SynthesisNetwork',\n                    channel_base=1024,\n                    channel_max=16,\n                    magnitude_ema_beta=0.999)),\n            discriminator=dict(\n                type='StyleGAN2Discriminator',\n                in_size=16,\n                channel_multiplier=1),\n            ema_config=dict(\n                type='RampUpEMA',\n                interval=1,\n                ema_kimg=10,\n                ema_rampup=0.05,\n                batch_size=32,\n                eps=1e-08,\n                start_iter=0),\n            loss_config=dict(\n                r1_loss_weight=16.0,\n                r1_interval=16,\n                norm_mode='HWC',\n                g_reg_interval=4,\n                g_reg_weight=8.0,\n                pl_batch_shrink=2))\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_val_and_test_step(self):\n        cfg = deepcopy(self.default_cfg)\n        stylegan = StyleGAN3(**cfg)\n\n        data = dict(inputs=dict(num_batches=2))\n        outputs = stylegan.test_step(data)\n        self.assertEqual(len(outputs), 2)\n        self.assertEqual(outputs[0].fake_img.data.shape, (3, 16, 16))\n\n        data = dict(inputs=dict(num_batches=2))\n        outputs = stylegan.val_step(data)\n        self.assertEqual(len(outputs), 2)\n        self.assertEqual(outputs[0].fake_img.data.shape, (3, 16, 16))\n\n        eq_cfg = dict(\n            compute_eqt_int=True, compute_eqt_frac=True, compute_eqr=True)\n        data = dict(inputs=dict(num_batches=2, eq_cfg=eq_cfg, mode='orig'))\n        outputs = stylegan.test_step(data)\n        outputs = stylegan.val_step(data)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() or not torch.cuda.is_available(),\n        reason='skip on windows due to uncompiled ops.')\n    def test_train_step(self):\n        message_hub = MessageHub.get_instance('test-s3-train-step')\n        cfg = deepcopy(self.default_cfg)\n        stylegan = StyleGAN3(**cfg)\n        optimizer_g = torch.optim.SGD(stylegan.generator.parameters(), lr=0.01)\n        optimizer_d = torch.optim.SGD(\n            stylegan.discriminator.parameters(), lr=0.01)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(optimizer_g, accumulative_counts=1),\n            discriminator=OptimWrapper(optimizer_d, accumulative_counts=1))\n\n        img = torch.randn(3, 16, 16)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n        message_hub.update_info('iter', 0)\n        _ = stylegan.train_step(data, optim_wrapper_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan3/test_stylegan3_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan3 import StyleGAN3Generator\n\n\nclass TestStyleGAN3Generator:\n\n    @classmethod\n    def setup_class(cls):\n        synthesis_cfg = {\n            'type': 'SynthesisNetwork',\n            'channel_base': 1024,\n            'channel_max': 16,\n            'magnitude_ema_beta': 0.999\n        }\n        cls.default_cfg = dict(\n            noise_size=6,\n            style_channels=8,\n            out_size=16,\n            img_channels=3,\n            synthesis_cfg=synthesis_cfg)\n        synthesis_r_cfg = {\n            'type': 'SynthesisNetwork',\n            'channel_base': 1024,\n            'channel_max': 16,\n            'magnitude_ema_beta': 0.999,\n            'conv_kernel': 1,\n            'use_radial_filters': True\n        }\n        cls.s3_r_cfg = dict(\n            noise_size=6,\n            style_channels=8,\n            out_size=16,\n            img_channels=3,\n            synthesis_cfg=synthesis_r_cfg)\n\n    @pytest.mark.skipif(\n        ('win' in platform.system().lower() and 'cu' in torch.__version__)\n        or not torch.cuda.is_available(),\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_cpu(self):\n        generator = StyleGAN3Generator(**self.default_cfg)\n        z = torch.randn((2, 6))\n        c = None\n        y = generator(z, c)\n        assert y.shape == (2, 3, 16, 16)\n\n        y = generator(None, num_batches=2)\n        assert y.shape == (2, 3, 16, 16)\n\n        res = generator(torch.randn, num_batches=1)\n        assert res.shape == (1, 3, 16, 16)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(rgb2bgr=True))\n        generator = StyleGAN3Generator(**cfg)\n        y = generator(None, num_batches=2)\n        assert y.shape == (2, 3, 16, 16)\n\n        # test return latents\n        result = generator(None, num_batches=2, return_latents=True)\n        assert isinstance(result, dict)\n        assert result['fake_img'].shape == (2, 3, 16, 16)\n        assert result['noise_batch'].shape == (2, 6)\n        assert result['latent'].shape == (2, 16, 8)\n\n        # test input_is_latent\n        result = generator(\n            None, num_batches=2, input_is_latent=True, return_latents=True)\n        assert isinstance(result, dict)\n        assert result['fake_img'].shape == (2, 3, 16, 16)\n        assert result['noise_batch'].shape == (2, 8)\n        assert result['latent'].shape == (2, 16, 8)\n\n        generator = StyleGAN3Generator(**self.s3_r_cfg)\n        z = torch.randn((2, 6))\n        c = None\n        y = generator(z, c)\n        assert y.shape == (2, 3, 16, 16)\n\n        y = generator(None, num_batches=2)\n        assert y.shape == (2, 3, 16, 16)\n\n        res = generator(torch.randn, num_batches=1)\n        assert res.shape == (1, 3, 16, 16)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_cuda(self):\n        generator = StyleGAN3Generator(**self.default_cfg).cuda()\n        z = torch.randn((2, 6)).cuda()\n        c = None\n        y = generator(z, c)\n        assert y.shape == (2, 3, 16, 16)\n\n        res = generator(torch.randn, num_batches=1)\n        assert res.shape == (1, 3, 16, 16)\n\n        cfg = deepcopy(self.default_cfg)\n        cfg.update(dict(rgb2bgr=True))\n        generator = StyleGAN3Generator(**cfg).cuda()\n        y = generator(None, num_batches=2)\n        assert y.shape == (2, 3, 16, 16)\n\n        generator = StyleGAN3Generator(**self.s3_r_cfg).cuda()\n        z = torch.randn((2, 6)).cuda()\n        c = None\n        y = generator(z, c)\n        assert y.shape == (2, 3, 16, 16)\n\n        res = generator(torch.randn, num_batches=1)\n        assert res.shape == (1, 3, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan3/test_stylegan3_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.stylegan3.stylegan3_modules import MappingNetwork\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() or not torch.cuda.is_available(),\n    reason='skip on windows due to uncompiled ops.')\ndef test_MappingNetwork():\n    mapping_network = MappingNetwork(16, 4, 5, cond_size=8)\n    z = torch.randn(1, 16)\n    c = torch.randn(1, 8)\n    out = mapping_network(z, c)\n    assert out.shape == (1, 5, 4)\n\n    # test w/o conditional input\n    mapping_network = MappingNetwork(16, 4, 5, cond_size=-1)\n    out = mapping_network(z)\n    assert out.shape == (1, 5, 4)\n\n    # test w/o noise input\n    mapping_network = MappingNetwork(0, 4, 5, cond_size=8)\n    out = mapping_network(None, c)\n    assert out.shape == (1, 5, 4)\n\n    # test num_ws is None --> no broadcast\n    mapping_network = MappingNetwork(16, 4, num_ws=None, w_avg_beta=None)\n    assert not hasattr(mapping_network, 'w_avg')\n    out = mapping_network(z)\n    assert out.shape == (1, 4)\n\n    # test truncation is passed\n    with pytest.raises(AssertionError):\n        mapping_network(z, truncation=0.9)\n\n    mapping_network = MappingNetwork(16, 4, 5)\n    out = mapping_network(z, truncation=0.9)\n    assert out.shape == (1, 5, 4)\n\n    out_trunc_work = mapping_network(z, truncation=0.9, num_truncation_layer=3)\n    assert out_trunc_work.shape == (1, 5, 4)\n    assert (out_trunc_work[3:] == out[3:]).all()\n\n    # test z is None + noise_size > 0\n    with pytest.raises(AssertionError):\n        mapping_network(None)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_stylegan3/test_stylegan3_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\nfrom mmagic.models.editors.stylegan3.stylegan3_utils import (\n    apply_fractional_pseudo_rotation, apply_fractional_rotation,\n    apply_fractional_translation, apply_integer_translation)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() or not torch.cuda.is_available(),\n    reason='skip due to uncompiled ops.')\ndef test_integer_transformation():\n    x = torch.randn(1, 3, 16, 16)\n    t = torch.randn(2)\n    z, m = apply_integer_translation(x, t[0], t[1])\n    print(z.shape)\n    print(m.shape)\n\n    # cover more lines\n    t = torch.zeros(2)\n    z, m = apply_integer_translation(x, t[0], t[1])\n\n    t = torch.ones(2) * 2\n    z, m = apply_integer_translation(x, t[0], t[1])\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() or not torch.cuda.is_available(),\n    reason='skip due to uncompiled ops.')\ndef test_fractional_translation():\n    x = torch.randn(1, 3, 16, 16)\n    t = torch.randn(2)\n    z, m = apply_fractional_translation(x, t[0], t[1])\n    print(z.shape)\n    print(m.shape)\n\n    # cover more lines\n    t = torch.zeros(2)\n    z, m = apply_fractional_translation(x, t[0], t[1])\n\n    t = torch.ones(2) * 2\n    z, m = apply_fractional_translation(x, t[0], t[1])\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() or not torch.cuda.is_available(),\n    reason='skip due to uncompiled ops.')\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) < digit_version('1.8.0'),\n    reason='version limitation')\ndef test_fractional_rotation():\n    angle = torch.randn([])\n    x = torch.randn(1, 3, 16, 16)\n    ref, ref_mask = apply_fractional_rotation(x, angle)\n    print(ref.shape)\n    print(ref_mask.shape)\n\n\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) < digit_version('1.8.0')\n    or 'win' in platform.system().lower() or not torch.cuda.is_available(),\n    reason='version limitation')\ndef test_fractional_pseduo_rotation():\n    angle = torch.randn([])\n    x = torch.randn(1, 3, 16, 16)\n    ref, ref_mask = apply_fractional_pseudo_rotation(x, angle)\n    print(ref.shape)\n    print(ref_mask.shape)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_swinir/test_swinir_modules.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.swinir.swinir_modules import (PatchEmbed,\n                                                         PatchUnEmbed,\n                                                         Upsample,\n                                                         UpsampleOneStep)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_patchEmbed():\n\n    net = PatchEmbed(\n        img_size=224, patch_size=4, in_chans=3, embed_dim=96, norm_layer=None)\n\n    img = torch.randn(1, 3, 4, 4)\n    output = net(img)\n    assert output.shape == (1, 16, 3)\n\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 16, 3)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_patchUnEmbed():\n\n    net = PatchUnEmbed(\n        img_size=16, patch_size=4, in_chans=3, embed_dim=3, norm_layer=None)\n\n    img = torch.randn(1, 64, 3)\n    output = net(img, (8, 8))\n    assert output.shape == (1, 3, 8, 8)\n\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda(), (8, 8))\n        assert output.shape == (1, 3, 8, 8)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_upsample():\n\n    net = Upsample(scale=2, num_feat=3)\n\n    img = torch.randn(1, 3, 8, 8)\n    output = net(img)\n    assert output.shape == (1, 3, 16, 16)\n\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 3, 16, 16)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_upsampleOneStep():\n\n    net = UpsampleOneStep(\n        scale=2,\n        num_feat=3,\n        num_out_ch=4,\n    )\n\n    img = torch.randn(1, 3, 8, 8)\n    output = net(img)\n    assert output.shape == (1, 4, 16, 16)\n\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert output.shape == (1, 4, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_swinir/test_swinir_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import SwinIRNet\n\n\ndef test_swinir_cpu():\n    \"\"\"Test SwinIRNet.\"\"\"\n\n    # x2 model classical SR\n    net = SwinIRNet(\n        upscale=2,\n        in_channels=3,\n        img_size=48,\n        window_size=8,\n        img_range=1.0,\n        depths=[6],\n        embed_dim=60,\n        num_heads=[6],\n        mlp_ratio=2,\n        upsampler='pixelshuffledirect',\n        resi_connection='3conv')\n    img = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 32, 32)\n\n    net = SwinIRNet(\n        upscale=1,\n        in_channels=3,\n        img_size=48,\n        window_size=8,\n        img_range=1.0,\n        depths=[6],\n        embed_dim=60,\n        num_heads=[6],\n        mlp_ratio=2,\n        upsampler='',\n        resi_connection='1conv')\n    img = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 16, 16)\n\n    # x3 model classical SR, initialization and forward (cpu)\n    net = SwinIRNet(\n        upscale=3,\n        in_channels=3,\n        img_size=16,\n        window_size=8,\n        img_range=1.0,\n        depths=[2],\n        embed_dim=8,\n        num_heads=[2],\n        mlp_ratio=2,\n        upsampler='pixelshuffle',\n        resi_connection='1conv')\n    img = torch.rand(1, 3, 16, 16)\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 48, 48)\n\n    # x4 model lightweight SR, initialization and forward (cpu)\n    net = SwinIRNet(\n        upscale=4,\n        in_channels=3,\n        img_size=16,\n        window_size=8,\n        img_range=1.0,\n        depths=[2],\n        embed_dim=8,\n        num_heads=[2],\n        mlp_ratio=2,\n        ape=True,\n        upsampler='nearest+conv',\n        resi_connection='1conv')\n    output = net(img)\n    assert isinstance(output, torch.Tensor)\n    assert output.shape == (1, 3, 64, 64)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_swinir_cuda():\n    net = SwinIRNet(\n        upscale=4,\n        in_channels=3,\n        img_size=16,\n        window_size=8,\n        img_range=1.0,\n        depths=[2],\n        embed_dim=8,\n        num_heads=[2],\n        mlp_ratio=2,\n        upsampler='pixelshuffledirect',\n        resi_connection='1conv')\n    img = torch.rand(1, 3, 16, 16)\n\n    # x4 model lightweight SR forward (gpu)\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda())\n        assert isinstance(output, torch.Tensor)\n        assert output.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_swinir/test_swinir_rstb.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.swinir.swinir_rstb import RSTB\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_rstb():\n\n    net = RSTB(\n        dim=6, input_resolution=(8, 8), depth=6, num_heads=6, window_size=8)\n\n    img = torch.randn(1, 64, 6)\n    output = net(img, (8, 8))\n    assert output.shape == (1, 64, 6)\n\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(img.cuda(), (8, 8))\n        assert output.shape == (1, 64, 6)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_swinir/test_swinir_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.swinir.swinir_utils import (drop_path, to_2tuple,\n                                                       window_partition,\n                                                       window_reverse)\n\n\ndef test_drop_path():\n    x = torch.randn(1, 3, 8, 8)\n    x = drop_path(x)\n    assert x.shape == (1, 3, 8, 8)\n\n\ndef test_to_2tuple():\n    x = 8\n    x = to_2tuple(x)\n    assert x == (8, 8)\n\n\ndef test_window():\n    x = torch.randn(1, 8, 8, 3)\n    x = window_partition(x, 4)\n    assert x.shape == (4, 4, 4, 3)\n    x = window_reverse(x, 4, 8, 8)\n    assert x.shape == (1, 8, 8, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_tdan/test_tdan.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models.data_preprocessors import DataPreprocessor\nfrom mmagic.models.editors import TDAN, TDANNet\nfrom mmagic.models.losses import MSELoss\nfrom mmagic.structures import DataSample\n\n\ndef test_tdan():\n\n    model = TDAN(\n        generator=dict(type='TDANNet'),\n        pixel_loss=dict(type='MSELoss', loss_weight=1.0, reduction='mean'),\n        lq_pixel_loss=dict(type='MSELoss', loss_weight=0.01, reduction='mean'),\n        data_preprocessor=DataPreprocessor(mean=[0.5, 0.5, 0.5]))\n\n    assert model.__class__.__name__ == 'TDAN'\n    assert isinstance(model.generator, TDANNet)\n    assert isinstance(model.pixel_loss, MSELoss)\n    assert isinstance(model.data_preprocessor, DataPreprocessor)\n\n    optimizer = Adam(model.generator.parameters(), lr=0.001)\n    optim_wrapper = OptimWrapper(optimizer)\n\n    # prepare data\n    inputs = torch.rand(5, 3, 16, 16)\n    target = torch.rand(3, 64, 64)\n    data_sample = DataSample(gt_img=target)\n    data = dict(inputs=[inputs], data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 64, 64)\n\n    # feat\n    output = model(torch.rand(1, 5, 3, 16, 16), mode='tensor')\n    assert output.shape == (1, 3, 64, 64)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_tdan/test_tdan_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import TDANNet\n\n\ndef test_tdan_net():\n    \"\"\"Test TDANNet.\"\"\"\n\n    # gpu (DCN is available only on GPU)\n    if torch.cuda.is_available():\n        tdan = TDANNet().cuda()\n        input_tensor = torch.rand(1, 5, 3, 64, 64).cuda()\n\n        output = tdan(input_tensor)\n        assert len(output) == 2  # (1) HR center + (2) aligned LRs\n        assert output[0].shape == (1, 3, 256, 256)  # HR center frame\n        assert output[1].shape == (1, 5, 3, 64, 64)  # aligned LRs\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_tof/test_tof_vfi_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import TOFlowVFINet\n\n\ndef test_tof_vfi_net():\n\n    model = TOFlowVFINet()\n\n    # test attributes\n    assert model.__class__.__name__ == 'TOFlowVFINet'\n\n    # prepare data\n    inputs = torch.rand(1, 2, 3, 256, 256)\n\n    # test on cpu\n    output = model(inputs)\n    assert torch.is_tensor(output)\n    assert output.shape == (1, 3, 256, 256)\n\n    # test on gpu\n    if torch.cuda.is_available():\n        model = model.cuda()\n        inputs = inputs.cuda()\n        output = model(inputs)\n        assert torch.is_tensor(output)\n        assert output.shape == (1, 3, 256, 256)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_tof/test_tof_vsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors import TOFlowVSRNet\n\n\ndef test_toflow_vsr_net():\n\n    imgs = torch.rand(2, 7, 3, 16, 16)\n\n    model = TOFlowVSRNet(adapt_official_weights=False)\n    out = model(imgs)\n    assert isinstance(out, torch.Tensor)\n    assert out.shape == (2, 3, 16, 16)\n\n    model = TOFlowVSRNet(adapt_official_weights=True)\n    out = model(imgs)\n    assert isinstance(out, torch.Tensor)\n    assert out.shape == (2, 3, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ttsr/test_lte.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\ndef test_lte():\n    model_cfg = dict(\n        type='LTE',\n        requires_grad=False,\n        pixel_range=1.,\n        load_pretrained_vgg=False)\n\n    lte = MODELS.build(model_cfg)\n    assert lte.__class__.__name__ == 'LTE'\n\n    x = torch.rand(2, 3, 64, 64)\n\n    x_level3, x_level2, x_level1 = lte(x)\n    assert x_level1.shape == (2, 64, 64, 64)\n    assert x_level2.shape == (2, 128, 32, 32)\n    assert x_level3.shape == (2, 256, 16, 16)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ttsr/test_search_transformer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.registry import MODELS\n\n\ndef test_search_transformer():\n    model_cfg = dict(type='SearchTransformer')\n    model = MODELS.build(model_cfg)\n\n    lr_pad_level3 = torch.randn((2, 32, 32, 32))\n    ref_pad_level3 = torch.randn((2, 32, 32, 32))\n    ref_level3 = torch.randn((2, 32, 32, 32))\n    ref_level2 = torch.randn((2, 16, 64, 64))\n    ref_level1 = torch.randn((2, 8, 128, 128))\n\n    s, textures = model(lr_pad_level3, ref_pad_level3,\n                        (ref_level3, ref_level2, ref_level1))\n    t_level3, t_level2, t_level1 = textures\n\n    assert s.shape == (2, 1, 32, 32)\n    assert t_level3.shape == (2, 32, 32, 32)\n    assert t_level2.shape == (2, 16, 64, 64)\n    assert t_level1.shape == (2, 8, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ttsr/test_ttsr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\nfrom mmengine.optim import OptimWrapper\nfrom torch.optim import Adam\n\nfrom mmagic.models import (LTE, TTSR, DataPreprocessor, SearchTransformer,\n                           TTSRDiscriminator, TTSRNet)\nfrom mmagic.models.losses import (GANLoss, L1Loss, PerceptualVGG,\n                                  TransferalPerceptualLoss)\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_ttsr(init_weights):\n    model_cfg = dict(\n        type='TTSR',\n        generator=dict(\n            type='TTSRNet',\n            in_channels=3,\n            out_channels=3,\n            mid_channels=4,\n            num_blocks=(1, 1, 1, 1)),\n        extractor=dict(type='LTE', load_pretrained_vgg=False),\n        transformer=dict(type='SearchTransformer'),\n        discriminator=dict(type='TTSRDiscriminator', in_size=128),\n        pixel_loss=dict(type='L1Loss', loss_weight=1.0, reduction='mean'),\n        perceptual_loss=dict(\n            type='PerceptualLoss',\n            layer_weights={'29': 1.0},\n            vgg_type='vgg19',\n            perceptual_weight=1e-2,\n            style_weight=0.001,\n            criterion='mse'),\n        transferal_perceptual_loss=dict(\n            type='TransferalPerceptualLoss',\n            loss_weight=1e-2,\n            use_attention=False,\n            criterion='mse'),\n        gan_loss=dict(\n            type='GANLoss',\n            gan_type='vanilla',\n            loss_weight=1e-3,\n            real_label_val=1.0,\n            fake_label_val=0),\n        data_preprocessor=DataPreprocessor(\n            mean=[127.5, 127.5, 127.5],\n            std=[127.5, 127.5, 127.5],\n        ))\n\n    # build restorer\n    model = MODELS.build(model_cfg)\n\n    # test attributes\n    assert isinstance(model, TTSR)\n    assert isinstance(model.generator, TTSRNet)\n    assert isinstance(model.discriminator, TTSRDiscriminator)\n    assert isinstance(model.transformer, SearchTransformer)\n    assert isinstance(model.extractor, LTE)\n    assert isinstance(model.pixel_loss, L1Loss)\n    assert isinstance(model.transferal_perceptual_loss,\n                      TransferalPerceptualLoss)\n    assert isinstance(model.gan_loss, GANLoss)\n\n    optimizer_g = Adam(\n        model.generator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optimizer_d = Adam(\n        model.discriminator.parameters(), lr=0.0001, betas=(0.9, 0.999))\n    optim_wrapper = dict(\n        generator=OptimWrapper(optimizer_g),\n        extractor=OptimWrapper(optimizer_g),\n        discriminator=OptimWrapper(optimizer_d))\n\n    # prepare data\n    inputs = torch.rand(1, 3, 32, 32)\n    data_sample = DataSample(\n        gt_img=torch.rand(3, 128, 128),\n        ref_img=torch.rand(3, 128, 128),\n        img_lq=torch.rand(3, 128, 128),\n        ref_lq=torch.rand(3, 128, 128))\n    data = dict(inputs=inputs, data_samples=[data_sample])\n\n    # train\n    log_vars = model.train_step(data, optim_wrapper)\n    log_vars = model.train_step(data, optim_wrapper)\n    assert isinstance(log_vars, dict)\n    assert set(log_vars.keys()) == set([\n        'loss_pix', 'loss_perceptual', 'loss_style', 'loss_transferal',\n        'loss_gan', 'loss_d_real', 'loss_d_fake'\n    ])\n\n    # val\n    output = model.val_step(data)\n    assert output[0].output.pred_img.shape == (3, 128, 128)\n\n    # feat\n    stacked_data_sample = DataSample.stack([data_sample])\n    output = model(\n        torch.rand(1, 3, 32, 32), stacked_data_sample, mode='tensor')\n    assert output.shape == (1, 3, 128, 128)\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ttsr/test_ttsr_disc.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models import TTSRDiscriminator\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_ttsr_dict():\n    net = TTSRDiscriminator(in_channels=3, in_size=160)\n    # cpu\n    inputs = torch.rand((2, 3, 160, 160))\n    output = net(inputs)\n    assert output.shape == (2, 1)\n    # gpu\n    if torch.cuda.is_available():\n        net = net.cuda()\n        output = net(inputs.cuda())\n        assert output.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_ttsr/test_ttsr_net.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.ttsr.ttsr_net import (CSFI2, CSFI3, SFE,\n                                                 MergeFeatures)\nfrom mmagic.registry import MODELS\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_sfe():\n    inputs = torch.rand(2, 3, 48, 48)\n    sfe = SFE(3, 64, 16, 1.)\n    outputs = sfe(inputs)\n    assert outputs.shape == (2, 64, 48, 48)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_csfi():\n    inputs1 = torch.rand(2, 16, 24, 24)\n    inputs2 = torch.rand(2, 16, 48, 48)\n    inputs4 = torch.rand(2, 16, 96, 96)\n\n    csfi2 = CSFI2(mid_channels=16)\n    out1, out2 = csfi2(inputs1, inputs2)\n    assert out1.shape == (2, 16, 24, 24)\n    assert out2.shape == (2, 16, 48, 48)\n\n    csfi3 = CSFI3(mid_channels=16)\n    out1, out2, out4 = csfi3(inputs1, inputs2, inputs4)\n    assert out1.shape == (2, 16, 24, 24)\n    assert out2.shape == (2, 16, 48, 48)\n    assert out4.shape == (2, 16, 96, 96)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_merge_features():\n    inputs1 = torch.rand(2, 16, 24, 24)\n    inputs2 = torch.rand(2, 16, 48, 48)\n    inputs4 = torch.rand(2, 16, 96, 96)\n\n    merge_features = MergeFeatures(mid_channels=16, out_channels=3)\n    out = merge_features(inputs1, inputs2, inputs4)\n    assert out.shape == (2, 3, 96, 96)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_ttsr_net():\n    inputs = torch.rand(2, 3, 24, 24)\n    soft_attention = torch.rand(2, 1, 24, 24)\n    t_level3 = torch.rand(2, 64, 24, 24)\n    t_level2 = torch.rand(2, 32, 48, 48)\n    t_level1 = torch.rand(2, 16, 96, 96)\n\n    ttsr_cfg = dict(\n        type='TTSRNet',\n        in_channels=3,\n        out_channels=3,\n        mid_channels=16,\n        texture_channels=16)\n    ttsr = MODELS.build(ttsr_cfg)\n    outputs = ttsr(inputs, soft_attention, (t_level3, t_level2, t_level1))\n\n    assert outputs.shape == (2, 3, 96, 96)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_vico/test_vico.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport platform\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport pytest\nimport torch\nimport torch.nn as nn\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\n\ntest_dir = osp.join(osp.dirname(__file__), '../../../..', 'tests')\nconfig_path = osp.join(test_dir, 'configs', 'diffuser_wrapper_cfg')\nmodel_path = osp.join(test_dir, 'configs', 'tmp_weight')\nckpt_path = osp.join(test_dir, 'configs', 'ckpt')\n\nregister_all_modules()\n\nstable_diffusion_tiny_url = 'diffusers/tiny-stable-diffusion-torch'\nval_prompts = ['a photo of S*']\nimage_cross_layers = [\n    # down blocks (2x transformer block) * (3x down blocks) = 6\n    0,\n    0,\n    0,\n    0,\n    0,\n    0,\n    # mid block (1x transformer block) * (1x mid block)= 1\n    0,\n    # up blocks (3x transformer block) * (3x up blocks) = 9\n    0,\n    1,\n    0,\n    1,\n    0,\n    1,\n    0,\n    1,\n    0,\n]\nreg_loss_weight: float = 5e-4\nplaceholder: str = 'S*'\ninitialize_token: str = 'dog'\nnum_vectors_per_token: int = 1\n\nconfig = dict(\n    type='ViCo',\n    vae=dict(type='AutoencoderKL', sample_size=64),\n    unet=dict(\n        sample_size=64,\n        type='UNet2DConditionModel',\n        down_block_types=('DownBlock2D', ),\n        up_block_types=('UpBlock2D', ),\n        block_out_channels=(32, ),\n        cross_attention_dim=16,\n    ),\n    text_encoder=dict(\n        type='ClipWrapper',\n        clip_type='huggingface',\n        pretrained_model_name_or_path=stable_diffusion_tiny_url,\n        subfolder='text_encoder'),\n    tokenizer=stable_diffusion_tiny_url,\n    scheduler=dict(\n        type='DDPMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    test_scheduler=dict(\n        type='DDIMScheduler',\n        from_pretrained=stable_diffusion_tiny_url,\n        subfolder='scheduler'),\n    dtype='fp32',\n    data_preprocessor=dict(type='DataPreprocessor'),\n    enable_xformers=False,\n    image_cross_layers=image_cross_layers,\n    reg_loss_weight=reg_loss_weight,\n    placeholder=placeholder,\n    initialize_token=initialize_token,\n    num_vectors_per_token=num_vectors_per_token,\n    val_prompts=val_prompts)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower()\n    or digit_version(TORCH_VERSION) <= digit_version('1.8.1'),\n    reason='skip on windows due to limited RAM'\n    'and get_submodule requires torch >= 1.9.0')\nclass TestViCo(TestCase):\n\n    def setUp(self):\n        # mock SiLU\n        if digit_version(TORCH_VERSION) <= digit_version('1.6.0'):\n            from mmagic.models.editors.ddpm.denoising_unet import SiLU\n            torch.nn.SiLU = SiLU\n        vico = MODELS.build(config)\n        assert not any([p.requires_grad for p in vico.vae.parameters()])\n        self.vico = vico\n\n    def test_infer(self):\n        vico = self.vico\n\n        def mock_encode_prompt(prompt, do_classifier_free_guidance,\n                               num_images_per_prompt, *args, **kwargs):\n            batch_size = len(prompt) if isinstance(prompt, list) else 1\n            batch_size *= num_images_per_prompt\n            if do_classifier_free_guidance:\n                batch_size *= 2\n            return torch.randn(batch_size, 5, 16)  # 2 for cfg\n\n        def mock_infer(prompt, *args, **kwargs):\n            length = len(prompt)\n            return dict(samples=torch.randn(length, 3, 64, 64))\n\n        encode_prompt = vico._encode_prompt\n        infer = vico.infer\n        vico._encode_prompt = mock_encode_prompt\n        vico.infer = mock_infer\n\n        self._test_infer(vico, 1, 1)\n        vico._encode_prompt = encode_prompt\n        vico.infer = infer\n\n    def _test_infer(self, vico, num_prompt, num_repeat):\n        prompt = ''\n        image_reference = torch.ones([1, 3, 64, 64])\n\n        result = vico.infer(\n            [prompt] * num_prompt,\n            image_reference=image_reference,\n            height=64,\n            width=64,\n            num_images_per_prompt=num_repeat,\n            num_inference_steps=1,\n            return_type='numpy')\n        assert result['samples'].shape == (1, 3, 64, 64)\n\n    def test_val_step(self):\n        vico = self.vico\n        data = dict(\n            inputs=[\n                dict(\n                    img=torch.ones([3, 64, 64]),\n                    img_ref=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[DataSample(prompt='a photo of S*')])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(prompt, image_reference, *args, **kwargs):\n            length = len(prompt)\n            return dict(samples=torch.randn(length, 3, 64, 64))\n\n        encode_prompt = vico._encode_prompt\n        infer = vico.infer\n        vico._encode_prompt = mock_encode_prompt\n        vico.infer = mock_infer\n\n        output = vico.val_step(data)\n        assert len(output) == 1\n        vico._encode_prompt = encode_prompt\n        vico.infer = infer\n\n    def test_test_step(self):\n        vico = self.vico\n        data = dict(\n            inputs=[\n                dict(\n                    img=torch.ones([3, 64, 64]),\n                    img_ref=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[DataSample(prompt='a photo of S*')])\n\n        def mock_encode_prompt(*args, **kwargs):\n            return torch.randn(2, 5, 16)  # 2 for cfg\n\n        def mock_infer(prompt, image_reference, *args, **kwargs):\n            length = len(prompt)\n            return dict(samples=torch.randn(length, 3, 64, 64))\n\n        encode_prompt = vico._encode_prompt\n        infer = vico.infer\n        vico._encode_prompt = mock_encode_prompt\n        vico.infer = mock_infer\n\n        output = vico.test_step(data)\n        assert len(output) == 1\n        vico._encode_prompt = encode_prompt\n        vico.infer = infer\n\n    def test_train_step(self):\n        vico = self.vico\n        data = dict(\n            inputs=[\n                dict(\n                    img=torch.ones([3, 64, 64]),\n                    img_ref=torch.ones([3, 64, 64]))\n            ],\n            data_samples=[DataSample(prompt='a photo of S*')])\n\n        optimizer = MagicMock()\n        update_params = MagicMock()\n        optimizer.update_params = update_params\n        optim_wrapper = optimizer\n\n        class mock_text_encoder(nn.Module):\n\n            def __init__(self):\n                super().__init__()\n\n            def forward(self, *args, **kwargs):\n                return [torch.randn(1, 5, 16)]\n\n        vico.text_encoder = mock_text_encoder()\n\n        vico.train_step(data, optim_wrapper)\n"
  },
  {
    "path": "tests/test_models/test_editors/test_vico/test_vico_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nimport platform\n\nimport pytest\nfrom diffusers.models.unet_2d_condition import UNet2DConditionModel\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.editors.vico.vico_utils import set_vico_modules\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower()\n    or digit_version(TORCH_VERSION) <= digit_version('1.8.1'),\n    reason='skip on windows due to limited RAM'\n    'and get_submodule requires torch >= 1.9.0')\ndef test_set_vico_modules():\n    model = UNet2DConditionModel()\n    image_cross_layers = [1] * 16\n    set_vico_modules(model, image_cross_layers)\n\n    # test set vico modules\n    for name, layer in model.named_modules():\n        if len(name.split('.')) > 1:\n            module_name = name.split('.')[-2]\n            if module_name == 'attentions':\n                assert layer.__class__.__name__ == 'ViCoTransformer2D'\n                assert hasattr(layer, 'image_cross_attention')\n"
  },
  {
    "path": "tests/test_models/test_editors/test_wgan_gp/test_wgan_discriminator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.wgan_gp import WGANGPDiscriminator\nfrom mmagic.registry import MODELS\n\n\nclass TestWGANGPDiscriminator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.x = torch.randn((2, 3, 128, 128))\n        cls.default_config = dict(\n            type='WGANGPDiscriminator', in_channel=3, in_scale=128)\n        cls.conv_ln_module_config = dict(\n            conv_cfg=None,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            bias=True,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n            norm_cfg=dict(type='LN2d'),\n            order=('conv', 'norm', 'act'))\n        cls.conv_gn_module_config = dict(\n            conv_cfg=None,\n            kernel_size=3,\n            stride=1,\n            padding=1,\n            bias=True,\n            act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n            norm_cfg=dict(type='GN'),\n            order=('conv', 'norm', 'act'))\n\n    def test_wgangp_discriminator(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config)\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x)\n        assert score.shape == (2, 1)\n\n        # test different in_scale\n        config = dict(type='WGANGPDiscriminator', in_channel=3, in_scale=64)\n        d = MODELS.build(config)\n        assert isinstance(d, WGANGPDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x)\n        assert score.shape == (2, 1)\n\n        # test different conv config\n        config = dict(\n            type='WGANGPDiscriminator',\n            in_channel=3,\n            in_scale=128,\n            conv_module_cfg=self.conv_ln_module_config)\n        d = MODELS.build(config)\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x)\n        assert score.shape == (2, 1)\n\n        config = dict(\n            type='WGANGPDiscriminator',\n            in_channel=3,\n            in_scale=128,\n            conv_module_cfg=self.conv_gn_module_config)\n        d = MODELS.build(config)\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x)\n        assert score.shape == (2, 1)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_wgangp_discriminator_cuda(self):\n\n        # test default setting with builder\n        d = MODELS.build(self.default_config).cuda()\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x.cuda())\n        assert score.shape == (2, 1)\n\n        # test different in_scale\n        config = dict(type='WGANGPDiscriminator', in_channel=3, in_scale=64)\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, WGANGPDiscriminator)\n        x = torch.randn((2, 3, 64, 64))\n        score = d(x.cuda())\n        assert score.shape == (2, 1)\n\n        # test different conv config\n        config = dict(\n            type='WGANGPDiscriminator',\n            in_channel=3,\n            in_scale=128,\n            conv_module_cfg=self.conv_ln_module_config)\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x.cuda())\n        assert score.shape == (2, 1)\n\n        config = dict(\n            type='WGANGPDiscriminator',\n            in_channel=3,\n            in_scale=128,\n            conv_module_cfg=self.conv_gn_module_config)\n        d = MODELS.build(config).cuda()\n        assert isinstance(d, WGANGPDiscriminator)\n        score = d(self.x.cuda())\n        assert score.shape == (2, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_wgan_gp/test_wgan_generator.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.wgan_gp import WGANGPGenerator\nfrom mmagic.registry import MODELS\n\n\nclass TestWGANGPGenerator(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.noise = torch.randn((2, 100))\n        cls.default_config = dict(\n            type='WGANGPGenerator', noise_size=128, out_scale=128)\n\n    def test_wgangp_generator(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config)\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n\n        # test different out_scale\n        config = dict(type='WGANGPGenerator', noise_size=128, out_scale=64)\n        g = MODELS.build(config)\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 64, 64)\n\n        # test different conv config\n        config = dict(\n            type='WGANGPGenerator',\n            noise_size=128,\n            out_scale=128,\n            conv_module_cfg=dict(\n                conv_cfg=None,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=True,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                norm_cfg=dict(type='BN'),\n                order=('conv', 'norm', 'act')))\n        g = MODELS.build(config)\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_wgangp_generator_cuda(self):\n\n        # test default setting with builder\n        g = MODELS.build(self.default_config).cuda()\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n\n        # test different out_scale\n        config = dict(type='WGANGPGenerator', noise_size=128, out_scale=64)\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 64, 64)\n\n        # test different conv config\n        config = dict(\n            type='WGANGPGenerator',\n            noise_size=128,\n            out_scale=128,\n            conv_module_cfg=dict(\n                conv_cfg=None,\n                kernel_size=3,\n                stride=1,\n                padding=1,\n                bias=True,\n                act_cfg=dict(type='LeakyReLU', negative_slope=0.2),\n                norm_cfg=dict(type='BN'),\n                order=('conv', 'norm', 'act')))\n        g = MODELS.build(config).cuda()\n        assert isinstance(g, WGANGPGenerator)\n        x = g(None, num_batches=3)\n        assert x.shape == (3, 3, 128, 128)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_wgan_gp/test_wgan_gp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom copy import deepcopy\nfrom unittest import TestCase\n\nimport pytest\nimport torch\nfrom mmengine import MessageHub\nfrom mmengine.optim import OptimWrapper, OptimWrapperDict\nfrom torch.optim import SGD\n\nfrom mmagic.models import WGANGP, DataPreprocessor\nfrom mmagic.registry import MODELS\nfrom mmagic.structures import DataSample\n\ngenerator = dict(\n    type='DCGANGenerator', noise_size=10, output_scale=16, base_channels=16)\ndiscriminator = dict(\n    type='DCGANDiscriminator', input_scale=16, output_scale=4, out_channels=1)\n\n\nclass TestWGANGP(TestCase):\n\n    def test_init(self):\n        gan = WGANGP(\n            noise_size=10,\n            data_preprocessor=DataPreprocessor(),\n            generator=generator,\n            discriminator=discriminator)\n\n        self.assertIsInstance(gan, WGANGP)\n        self.assertIsInstance(gan.data_preprocessor, DataPreprocessor)\n\n        # test only generator have noise size\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        gan = WGANGP(\n            generator=gen_cfg,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.noise_size, 10)\n\n        # test init with nn.Module\n        gen_cfg = deepcopy(generator)\n        gen_cfg['noise_size'] = 10\n        disc_cfg = deepcopy(discriminator)\n        gen = MODELS.build(gen_cfg)\n        disc = MODELS.build(disc_cfg)\n        gan = WGANGP(\n            generator=gen,\n            discriminator=disc,\n            data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.generator, gen)\n        self.assertEqual(gan.discriminator, disc)\n\n        # test init without discriminator\n        gan = WGANGP(generator=gen, data_preprocessor=DataPreprocessor())\n        self.assertEqual(gan.discriminator, None)\n\n    @pytest.mark.skipif(\n        'win' in platform.system().lower() and 'cu' in torch.__version__,\n        reason='skip on windows-cuda due to limited RAM.')\n    def test_train_step(self):\n        # prepare model\n        accu_iter = 1\n        n_disc = 1\n        message_hub = MessageHub.get_instance('test-wgangp')\n        gan = WGANGP(\n            noise_size=10,\n            generator=generator,\n            discriminator=discriminator,\n            data_preprocessor=DataPreprocessor(),\n            discriminator_steps=n_disc)\n        # prepare messageHub\n        message_hub.update_info('iter', 0)\n        # prepare optimizer\n        gen_optim = SGD(gan.generator.parameters(), lr=0.1)\n        disc_optim = SGD(gan.discriminator.parameters(), lr=0.1)\n        optim_wrapper_dict = OptimWrapperDict(\n            generator=OptimWrapper(gen_optim, accumulative_counts=accu_iter),\n            discriminator=OptimWrapper(\n                disc_optim, accumulative_counts=accu_iter))\n        # prepare inputs\n        img = torch.randn(3, 16, 16)\n        data = dict(inputs=dict(), data_samples=[DataSample(gt_img=img)])\n\n        # simulate train_loop here\n        for idx in range(n_disc * accu_iter):\n            message_hub.update_info('iter', idx)\n            log = gan.train_step(data, optim_wrapper_dict)\n            if (idx + 1) == n_disc * accu_iter:\n                # should update at after (n_disc * accu_iter)\n                self.assertEqual(\n                    set(log.keys()),\n                    set([\n                        'loss', 'loss_disc_fake', 'loss_disc_real', 'loss_gen',\n                        'loss_gp'\n                    ]))\n            else:\n                # should not update when discriminator's updating is unfinished\n                self.assertEqual(\n                    log.keys(),\n                    set(['loss', 'loss', 'loss_disc_fake', 'loss_disc_real']))\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_editors/test_wgan_gp/test_wgan_gp_module.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.editors.wgan_gp.wgan_gp_module import (ConvLNModule,\n                                                          WGANDecisionHead,\n                                                          WGANNoiseTo2DFeat)\n\n\ndef test_ConvLNModule():\n    # test norm_cfg is None\n    conv = ConvLNModule(3, 6, 3, 1, 1)\n    assert conv.norm is None\n\n\ndef test_WGANDecisionHead():\n    head = WGANDecisionHead(3, 8, 4)\n    x = torch.randn(1, 3, 4, 4)\n    out = head(x)\n    assert out.shape == (1, 4)\n\n\ndef test_WGANNoiseTo2DFeat():\n    noise2feat = WGANNoiseTo2DFeat(16, 32)\n    noise = torch.randn(1, 16)\n    feat = noise2feat(noise)\n    assert feat.shape == (1, 32, 4, 4)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_clip_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport clip\nimport pytest\nimport torch\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.losses import CLIPLoss\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) <= digit_version('1.6.0'),\n    reason='version limitation')\ndef test_clip_loss():\n    clip_loss = CLIPLoss(clip_model=dict(in_size=32, clip_type='RN50'))\n\n    image = torch.randn(1, 3, 32, 32)\n    text = 'Image for test'\n    text_inputs = torch.cat([clip.tokenize(text)])\n    loss = clip_loss(image, text_inputs)\n    print(loss)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_composition_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models import (CharbonnierCompLoss, L1CompositionLoss,\n                           MSECompositionLoss)\n\n\ndef test_composition_losses():\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        L1CompositionLoss(reduction='InvalidValue')\n\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        MSECompositionLoss(reduction='InvalidValue')\n\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        CharbonnierCompLoss(reduction='InvalidValue')\n\n    unknown_h, unknown_w = (32, 32)\n    weight = torch.zeros(1, 1, 64, 64)\n    weight[0, 0, :unknown_h, :unknown_w] = 1\n    pred_alpha = weight.clone() * 0.5\n    ori_merged = torch.ones(1, 3, 64, 64)\n    fg = torch.zeros(1, 3, 64, 64)\n    bg = torch.ones(1, 3, 64, 64) * 4\n\n    l1_comp_loss = L1CompositionLoss(loss_weight=1.0, reduction='mean')\n    loss = l1_comp_loss(pred_alpha, fg, bg, ori_merged)\n    assert loss.shape == ()\n    assert loss.item() == 2.5\n\n    l1_comp_loss = L1CompositionLoss(loss_weight=0.5, reduction='none')\n    loss = l1_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == (1, 3, 64, 64)\n    assert (loss == torch.ones(1, 3, 64, 64) * weight * 0.5).all()\n\n    l1_comp_loss = L1CompositionLoss(loss_weight=0.5, reduction='sum')\n    loss = l1_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == ()\n    assert loss.item() == 1536\n\n    mse_comp_loss = MSECompositionLoss(loss_weight=1.0, reduction='mean')\n    loss = mse_comp_loss(pred_alpha, fg, bg, ori_merged)\n    assert loss.shape == ()\n    assert loss.item() == 7.0\n\n    mse_comp_loss = MSECompositionLoss(loss_weight=0.5, reduction='none')\n    loss = mse_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == (1, 3, 64, 64)\n    assert (loss == torch.ones(1, 3, 64, 64) * weight * 0.5).all()\n\n    mse_comp_loss = MSECompositionLoss(loss_weight=0.5, reduction='sum')\n    loss = mse_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == ()\n    assert loss.item() == 1536\n\n    cb_comp_loss = CharbonnierCompLoss(\n        loss_weight=1.0, reduction='mean', eps=1e-12)\n    loss = cb_comp_loss(pred_alpha, fg, bg, ori_merged)\n    assert loss.shape == ()\n    assert loss.item() == 2.5\n\n    cb_comp_loss = CharbonnierCompLoss(\n        loss_weight=0.5, reduction='none', eps=1e-6)\n    loss = cb_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == (1, 3, 64, 64)\n    npt.assert_almost_equal(\n        loss.numpy(), torch.ones(1, 3, 64, 64) * weight * 0.5, decimal=6)\n\n    cb_comp_loss = CharbonnierCompLoss(\n        loss_weight=0.5, reduction='sum', eps=1e-6)\n    loss = cb_comp_loss(pred_alpha, fg, bg, ori_merged, weight)\n    assert loss.shape == ()\n    assert math.isclose(loss.item(), 1536, rel_tol=1e-6)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_face_id_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.losses import FaceIdLoss\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_face_id_loss():\n    face_id_loss = FaceIdLoss(loss_weight=2.5)\n    assert face_id_loss.loss_weight == 2.5\n    gt, pred = torch.randn(1, 3, 224, 224), torch.randn(1, 3, 224, 224)\n    loss = face_id_loss(pred, gt)\n    assert loss.shape == ()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_feature_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models.losses import LightCNNFeatureLoss\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_light_cnn_feature_loss():\n\n    pretrained = 'https://download.openmmlab.com/mmediting/' + \\\n        'restorers/dic/light_cnn_feature.pth'\n    pred = torch.rand((3, 3, 128, 128))\n    gt = torch.rand((3, 3, 128, 128))\n\n    feature_loss = LightCNNFeatureLoss(pretrained=pretrained)\n    loss = feature_loss(pred, gt)\n    assert loss.item() > 0\n\n    feature_loss = LightCNNFeatureLoss(pretrained=pretrained, criterion='mse')\n    loss = feature_loss(pred, gt)\n    assert loss.item() > 0\n\n    if torch.cuda.is_available():\n        pred = pred.cuda()\n        gt = gt.cuda()\n        feature_loss = feature_loss.cuda()\n        pred.requires_grad = True\n\n        loss = feature_loss(pred, gt)\n        assert loss.item() > 0\n\n        optim = torch.optim.SGD(params=[pred], lr=10)\n        optim.zero_grad()\n        loss.backward()\n        optim.step()\n\n        loss_new = feature_loss(pred, gt)\n        assert loss_new < loss\n\n        feature_loss = LightCNNFeatureLoss(\n            pretrained=pretrained, criterion='mse').cuda()\n        loss = feature_loss(pred, gt)\n        assert loss.item() > 0\n\n    # test criterion value error\n    with pytest.raises(ValueError):\n        LightCNNFeatureLoss(pretrained=pretrained, criterion='l2')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_gan_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models import GANLoss, GaussianBlur\n\n\ndef test_gan_losses():\n    \"\"\"Test gan losses.\"\"\"\n    with pytest.raises(NotImplementedError):\n        GANLoss(\n            'xixihaha',\n            loss_weight=1.0,\n            real_label_val=1.0,\n            fake_label_val=0.0)\n\n    input_1 = torch.ones(1, 1)\n    input_2 = torch.ones(1, 3, 6, 6) * 2\n\n    # vanilla\n    gan_loss = GANLoss(\n        'vanilla', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_1, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 0.6265233)\n    loss = gan_loss(input_1, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 2.6265232)\n    loss = gan_loss(input_1, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 0.3132616)\n    loss = gan_loss(input_1, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 1.3132616)\n\n    # lsgan\n    gan_loss = GANLoss(\n        'lsgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 2.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 8.0)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 1.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 4.0)\n\n    # wgan\n    gan_loss = GANLoss(\n        'wgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 4)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), -2.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 2.0)\n\n    # hinge\n    gan_loss = GANLoss(\n        'hinge', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 0.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 3.0)\n\n    # smgan\n    mask = torch.ones(1, 3, 6, 6)\n    gan_loss = GANLoss(\n        'smgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False, mask=mask)\n    npt.assert_almost_equal(loss.item(), 2.0)\n    loss = gan_loss(input_2, False, is_disc=False, mask=mask)\n    npt.assert_almost_equal(loss.item(), 8.0)\n    loss = gan_loss(input_2, True, is_disc=True, mask=mask)\n    npt.assert_almost_equal(loss.item(), 1.0)\n    loss = gan_loss(input_2, False, is_disc=True, mask=mask)\n    npt.assert_almost_equal(loss.item(), 3.786323, decimal=6)\n    mask = torch.ones(1, 3, 6, 5)\n    loss = gan_loss(input_2, True, is_disc=False, mask=mask)\n    npt.assert_almost_equal(loss.item(), 2.0)\n\n    if torch.cuda.is_available():\n        input_2 = input_2.cuda()\n        mask = torch.ones(1, 3, 6, 6).cuda()\n        gan_loss = GANLoss(\n            'smgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n        loss = gan_loss(input_2, True, is_disc=False, mask=mask)\n        npt.assert_almost_equal(loss.item(), 2.0)\n        loss = gan_loss(input_2, False, is_disc=False, mask=mask)\n        npt.assert_almost_equal(loss.item(), 8.0)\n        loss = gan_loss(input_2, True, is_disc=True, mask=mask)\n        npt.assert_almost_equal(loss.item(), 1.0)\n        loss = gan_loss(input_2, False, is_disc=True, mask=mask)\n        npt.assert_almost_equal(loss.item(), 3.786323, decimal=6)\n\n    # test GaussianBlur for smgan\n    with pytest.raises(TypeError):\n        gausian_blur = GaussianBlur(kernel_size=71, sigma=2)\n        gausian_blur(mask).detach().cpu()\n\n    with pytest.raises(TypeError):\n        gausian_blur = GaussianBlur(kernel_size=(70, 70))\n        gausian_blur(mask).detach().cpu()\n\n    with pytest.raises(TypeError):\n        mask = numpy.ones((1, 3, 6, 6))\n        gausian_blur = GaussianBlur()\n        gausian_blur(mask).detach().cpu()\n\n    with pytest.raises(ValueError):\n        mask = torch.ones(1, 3)\n        gausian_blur = GaussianBlur()\n        gausian_blur(mask).detach().cpu()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_gradient_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models import DiscShiftLoss, GradientLoss, GradientPenaltyLoss\n\n\ndef test_gradient_loss():\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        GradientLoss(reduction='InvalidValue')\n\n    unknown_h, unknown_w = (32, 32)\n    weight = torch.zeros(1, 1, 64, 64)\n    weight[0, 0, :unknown_h, :unknown_w] = 1\n    pred = weight.clone()\n    target = weight.clone() * 2\n\n    gradient_loss = GradientLoss(loss_weight=1.0, reduction='mean')\n    loss = gradient_loss(pred, target)\n    assert loss.shape == ()\n    npt.assert_almost_equal(loss.item(), 0.1860352)\n\n    gradient_loss = GradientLoss(loss_weight=0.5, reduction='none')\n    loss = gradient_loss(pred, target, weight)\n    assert loss.shape == (1, 1, 64, 64)\n    npt.assert_almost_equal(torch.sum(loss).item(), 252)\n\n    gradient_loss = GradientLoss(loss_weight=0.5, reduction='sum')\n    loss = gradient_loss(pred, target, weight)\n    assert loss.shape == ()\n    npt.assert_almost_equal(loss.item(), 252)\n\n\ndef test_gradient_penalty_losses():\n    \"\"\"Test gradient penalty losses.\"\"\"\n    input = torch.ones(1, 3, 6, 6) * 2\n\n    gan_loss = GradientPenaltyLoss(loss_weight=10.0)\n    loss = gan_loss(lambda x: x, input, input, mask=None)\n    assert loss.item() > 0\n    mask = torch.ones(1, 3, 6, 6)\n    mask[:, :, 2:4, 2:4] = 0\n    loss = gan_loss(lambda x: x, input, input, mask=mask)\n    assert loss.item() > 0\n\n\ndef test_disc_shift_loss():\n    loss_disc_shift = DiscShiftLoss()\n    x = torch.Tensor([0.1])\n    loss = loss_disc_shift(x)\n\n    npt.assert_almost_equal(loss.item(), 0.001)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_comps/test_clip_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport clip\nimport pytest\nimport torch\nfrom mmengine.utils import digit_version\nfrom mmengine.utils.dl_utils import TORCH_VERSION\n\nfrom mmagic.models.losses import CLIPLossComps\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\n@pytest.mark.skipif(\n    digit_version(TORCH_VERSION) <= digit_version('1.6.0'),\n    reason='version limitation')\ndef test_clip_loss():\n    clip_loss_comps = CLIPLossComps(\n        clip_model=dict(in_size=32),\n        data_info=dict(image='fake_imgs', text='descriptions'))\n\n    image = torch.randn(1, 3, 32, 32)\n    text = 'Image for test'\n    text_inputs = torch.cat([clip.tokenize(text)])\n    data_dict = dict(fake_imgs=image, descriptions=text_inputs)\n    loss = clip_loss_comps(outputs_dict=data_dict)\n    print(loss)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_comps/test_disc_auxiliary_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom functools import partial\n\nimport pytest\nimport torch\n\nfrom mmagic.models.editors.dcgan import DCGANDiscriminator\nfrom mmagic.models.editors.pggan import PGGANDiscriminator\nfrom mmagic.models.losses import (DiscShiftLossComps, GradientPenaltyLossComps,\n                                  R1GradientPenaltyComps)\nfrom mmagic.models.losses.gan_loss import (gradient_penalty_loss,\n                                           r1_gradient_penalty_loss)\n\n\nclass TestDiscShiftLoss(object):\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_tensor = torch.randn((2, 10))\n        cls.default_cfg = dict(\n            loss_weight=0.1, data_info=dict(pred='disc_pred'))\n        cls.default_input_dict = dict(disc_pred=cls.input_tensor)\n\n    def test_module_wrapper(self):\n        # test with default config\n        loss_module = DiscShiftLossComps(**self.default_cfg)\n        loss = loss_module(self.default_input_dict)\n        assert loss.ndim == 2\n\n        with pytest.raises(NotImplementedError):\n            _ = loss_module(self.default_input_dict, 1)\n\n        with pytest.raises(AssertionError):\n            _ = loss_module(1, outputs_dict=self.default_input_dict)\n        input_ = dict(outputs_dict=self.default_input_dict)\n        loss = loss_module(**input_)\n        assert loss.ndim == 2\n\n        with pytest.raises(AssertionError):\n            _ = loss_module(self.input_tensor)\n\n        # test without data_info\n        loss_module = DiscShiftLossComps(data_info=None)\n        loss = loss_module(self.input_tensor)\n        assert loss.ndim == 2\n\n\nclass TestGradientPenalty:\n\n    @classmethod\n    def setup_class(cls):\n        cls.input_img = torch.randn((2, 3, 8, 8))\n        cls.disc = DCGANDiscriminator(\n            input_scale=8, output_scale=4, out_channels=5)\n        cls.pggan_disc = PGGANDiscriminator(\n            in_scale=8, base_channels=32, max_channels=32)\n        cls.data_info = dict(\n            discriminator='disc', real_data='real_imgs', fake_data='fake_imgs')\n\n    def test_gp_loss(self):\n        loss = gradient_penalty_loss(self.disc, self.input_img, self.input_img)\n        assert loss > 0\n\n        loss = gradient_penalty_loss(\n            self.disc, self.input_img, self.input_img, norm_mode='HWC')\n        assert loss > 0\n\n        with pytest.raises(NotImplementedError):\n            _ = gradient_penalty_loss(\n                self.disc, self.input_img, self.input_img, norm_mode='xxx')\n\n        loss = gradient_penalty_loss(\n            self.disc, self.input_img, self.input_img, norm_mode='HWC')\n        assert loss > 0\n\n        loss = gradient_penalty_loss(\n            self.disc,\n            self.input_img,\n            self.input_img,\n            norm_mode='HWC',\n            mask=torch.ones_like(self.input_img))\n        assert loss > 0\n\n        data_dict = dict(\n            real_imgs=self.input_img,\n            fake_imgs=self.input_img,\n            disc=partial(self.pggan_disc, transition_weight=0.5, curr_scale=8))\n        gp_loss = GradientPenaltyLossComps(\n            loss_weight=10, norm_mode='pixel', data_info=self.data_info)\n\n        loss = gp_loss(data_dict)\n        assert loss > 0\n        loss = gp_loss(outputs_dict=data_dict)\n        assert loss > 0\n        with pytest.raises(NotImplementedError):\n            _ = gp_loss(asdf=1.)\n\n        with pytest.raises(AssertionError):\n            _ = gp_loss(1.)\n\n        with pytest.raises(AssertionError):\n            _ = gp_loss(1., 2, outputs_dict=data_dict)\n\n\nclass TestR1GradientPenalty:\n\n    @classmethod\n    def setup_class(cls):\n        cls.data_info = dict(discriminator='disc', real_data='real_imgs')\n        cls.disc = DCGANDiscriminator(\n            input_scale=8, output_scale=4, out_channels=5)\n        cls.pggan_disc = PGGANDiscriminator(\n            in_scale=8, base_channels=32, max_channels=32)\n        cls.input_img = torch.randn((2, 3, 8, 8))\n\n    def test_r1_regularizer(self):\n        loss = r1_gradient_penalty_loss(self.disc, self.input_img)\n        assert loss > 0\n\n        loss = r1_gradient_penalty_loss(\n            self.disc, self.input_img, norm_mode='HWC')\n        assert loss > 0\n\n        with pytest.raises(NotImplementedError):\n            _ = r1_gradient_penalty_loss(\n                self.disc, self.input_img, norm_mode='xxx')\n\n        loss = r1_gradient_penalty_loss(\n            self.disc, self.input_img, norm_mode='HWC')\n        assert loss > 0\n\n        loss = r1_gradient_penalty_loss(\n            self.disc,\n            self.input_img,\n            norm_mode='HWC',\n            mask=torch.ones_like(self.input_img))\n        assert loss > 0\n\n        data_dict = dict(\n            real_imgs=self.input_img,\n            disc=partial(self.pggan_disc, transition_weight=0.5, curr_scale=8))\n        gp_loss = R1GradientPenaltyComps(\n            loss_weight=10, norm_mode='pixel', data_info=self.data_info)\n\n        loss = gp_loss(data_dict)\n        assert loss > 0\n        loss = gp_loss(outputs_dict=data_dict)\n        assert loss > 0\n        with pytest.raises(NotImplementedError):\n            _ = gp_loss(asdf=1.)\n\n        with pytest.raises(AssertionError):\n            _ = gp_loss(1.)\n\n        with pytest.raises(AssertionError):\n            _ = gp_loss(1., 2, outputs_dict=data_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_comps/test_face_id_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\n\nfrom mmagic.models import IDLossModel\nfrom mmagic.models.losses import FaceIdLossComps\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\ndef test_face_id_loss_comps():\n    face_id_loss_comps = FaceIdLossComps(\n        loss_weight=2.5, data_info=dict(gt='real_imgs', pred='fake_imgs'))\n    assert isinstance(face_id_loss_comps.net, IDLossModel)\n    data_dict = dict(\n        a=1,\n        real_imgs=torch.randn(1, 3, 224, 224),\n        fake_imgs=torch.randn(1, 3, 224, 224))\n    loss = face_id_loss_comps(outputs_dict=data_dict)\n    assert loss.shape == ()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_comps/test_gan_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models.losses import GANLossComps\n\n\ndef test_gan_losses():\n    \"\"\"Test gan losses.\"\"\"\n    with pytest.raises(NotImplementedError):\n        GANLossComps(\n            'xixihaha',\n            loss_weight=1.0,\n            real_label_val=1.0,\n            fake_label_val=0.0)\n\n    input_1 = torch.ones(1, 1)\n    input_2 = torch.ones(1, 3, 6, 6) * 2\n\n    # vanilla\n    gan_loss = GANLossComps(\n        'vanilla', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_1, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 0.6265233)\n    loss = gan_loss(input_1, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 2.6265232)\n    loss = gan_loss(input_1, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 0.3132616)\n    loss = gan_loss(input_1, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 1.3132616)\n\n    # lsgan\n    gan_loss = GANLossComps(\n        'lsgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 2.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 8.0)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 1.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 4.0)\n\n    # wgan\n    gan_loss = GANLossComps(\n        'wgan', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), 4)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), -2.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 2.0)\n\n    # wgan\n    gan_loss = GANLossComps(\n        'wgan-logistic-ns',\n        loss_weight=2.0,\n        real_label_val=1.0,\n        fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    assert loss.item() > 0\n    loss = gan_loss(input_2, False, is_disc=False)\n    assert loss.item() > 0\n\n    # hinge\n    gan_loss = GANLossComps(\n        'hinge', loss_weight=2.0, real_label_val=1.0, fake_label_val=0.0)\n    loss = gan_loss(input_2, True, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, False, is_disc=False)\n    npt.assert_almost_equal(loss.item(), -4.0)\n    loss = gan_loss(input_2, True, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 0.0)\n    loss = gan_loss(input_2, False, is_disc=True)\n    npt.assert_almost_equal(loss.item(), 3.0)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_comps/test_gen_auxiliary_loss_comps.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\n\nimport pytest\nimport torch\nfrom mmengine.utils.dl_utils import TORCH_VERSION\nfrom mmengine.utils.version_utils import digit_version\n\nfrom mmagic.models.editors.stylegan2 import StyleGAN2Generator\nfrom mmagic.models.losses import GeneratorPathRegularizerComps\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\nclass TestPathRegularizer:\n\n    @classmethod\n    def setup_class(cls):\n        cls.data_info = dict(generator='generator', num_batches='num_batches')\n        cls.gen = StyleGAN2Generator(32, 10, num_mlps=2)\n\n    def test_path_regularizer_cpu(self):\n        gen = self.gen\n\n        output_dict = dict(generator=gen, num_batches=2)\n        pl = GeneratorPathRegularizerComps(data_info=self.data_info)\n        pl_loss = pl(output_dict)\n        assert pl_loss > 0\n\n        output_dict = dict(generator=gen, num_batches=2, iteration=3)\n        pl = GeneratorPathRegularizerComps(\n            data_info=self.data_info, interval=2)\n        pl_loss = pl(outputs_dict=output_dict)\n        assert pl_loss is None\n\n        with pytest.raises(NotImplementedError):\n            _ = pl(asdf=1.)\n\n        with pytest.raises(AssertionError):\n            _ = pl(1.)\n\n        with pytest.raises(AssertionError):\n            _ = pl(1., 2, outputs_dict=output_dict)\n\n    @pytest.mark.skipif(\n        digit_version(TORCH_VERSION) <= digit_version('1.6.0'),\n        reason='version limitation')\n    @pytest.mark.skipif(not torch.cuda.is_available(), reason='requires cuda')\n    def test_path_regularizer_cuda(self):\n        gen = self.gen.cuda()\n\n        output_dict = dict(generator=gen, num_batches=2)\n        pl = GeneratorPathRegularizerComps(data_info=self.data_info).cuda()\n        pl_loss = pl(output_dict)\n        assert pl_loss > 0\n\n        output_dict = dict(generator=gen, num_batches=2, iteration=3)\n        pl = GeneratorPathRegularizerComps(\n            data_info=self.data_info, interval=2).cuda()\n        pl_loss = pl(outputs_dict=output_dict)\n        assert pl_loss is None\n\n        with pytest.raises(NotImplementedError):\n            _ = pl(asdf=1.)\n\n        with pytest.raises(AssertionError):\n            _ = pl(1.)\n\n        with pytest.raises(AssertionError):\n            _ = pl(1., 2, outputs_dict=output_dict)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_loss_wrapper.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models import mask_reduce_loss, reduce_loss\n\n\ndef test_utils():\n    loss = torch.rand(1, 3, 4, 4)\n    weight = torch.zeros(1, 3, 4, 4)\n    weight[:, :, :2, :2] = 1\n\n    # test reduce_loss()\n    reduced = reduce_loss(loss, 'none')\n    assert reduced is loss\n\n    reduced = reduce_loss(loss, 'mean')\n    npt.assert_almost_equal(reduced.numpy(), loss.mean())\n\n    reduced = reduce_loss(loss, 'sum')\n    npt.assert_almost_equal(reduced.numpy(), loss.sum())\n\n    # test mask_reduce_loss()\n    reduced = mask_reduce_loss(loss, weight=None, reduction='none')\n    assert reduced is loss\n\n    reduced = mask_reduce_loss(loss, weight=weight, reduction='mean')\n    target = (loss *\n              weight).sum(dim=[1, 2, 3]) / weight.sum(dim=[1, 2, 3]).mean()\n    npt.assert_almost_equal(reduced.numpy(), target)\n\n    reduced = mask_reduce_loss(loss, weight=weight, reduction='sum')\n    npt.assert_almost_equal(reduced.numpy(), (loss * weight).sum())\n\n    weight_single_channel = weight[:, 0:1, ...]\n    reduced = mask_reduce_loss(\n        loss, weight=weight_single_channel, reduction='mean')\n    target = (loss *\n              weight).sum(dim=[1, 2, 3]) / weight.sum(dim=[1, 2, 3]).mean()\n    npt.assert_almost_equal(reduced.numpy(), target)\n\n    loss_b = torch.rand(2, 3, 4, 4)\n    weight_b = torch.zeros(2, 1, 4, 4)\n    weight_b[0, :, :3, :3] = 1\n    weight_b[1, :, :2, :2] = 1\n    reduced = mask_reduce_loss(loss_b, weight=weight_b, reduction='mean')\n    target = (loss_b * weight_b).sum() / weight_b.sum() / 3.\n    npt.assert_almost_equal(reduced.numpy(), target)\n\n    with pytest.raises(AssertionError):\n        weight_wrong = weight[0, 0, ...]\n        reduced = mask_reduce_loss(loss, weight=weight_wrong, reduction='mean')\n\n    with pytest.raises(AssertionError):\n        weight_wrong = weight[:, 0:2, ...]\n        reduced = mask_reduce_loss(loss, weight=weight_wrong, reduction='mean')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_perceptual_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport platform\nfrom unittest.mock import patch\n\nimport pytest\nimport torch\n\nfrom mmagic.models import (PerceptualLoss, PerceptualVGG,\n                           TransferalPerceptualLoss)\n\n\n@pytest.mark.skipif(\n    'win' in platform.system().lower() and 'cu' in torch.__version__,\n    reason='skip on windows-cuda due to limited RAM.')\n@patch.object(PerceptualVGG, 'init_weights')\ndef test_perceptual_loss(init_weights):\n    if torch.cuda.is_available():\n        loss_percep = PerceptualLoss(layer_weights={'0': 1.}).cuda()\n        x = torch.randn(1, 3, 16, 16).cuda()\n        x.requires_grad = True\n        gt = torch.randn(1, 3, 16, 16).cuda()\n        percep, style = loss_percep(x, gt)\n\n        assert percep.item() > 0\n        assert style.item() > 0\n\n        optim = torch.optim.SGD(params=[x], lr=10)\n        optim.zero_grad()\n        percep.backward()\n        optim.step()\n\n        percep_new, _ = loss_percep(x, gt)\n        assert percep_new < percep\n\n        loss_percep = PerceptualLoss(\n            layer_weights={\n                '0': 1.\n            }, perceptual_weight=0.).cuda()\n        x = torch.randn(1, 3, 16, 16).cuda()\n        gt = torch.randn(1, 3, 16, 16).cuda()\n        percep, style = loss_percep(x, gt)\n        assert percep is None and style > 0\n\n        loss_percep = PerceptualLoss(\n            layer_weights={\n                '0': 1.\n            }, style_weight=0., criterion='mse').cuda()\n        x = torch.randn(1, 3, 16, 16).cuda()\n        gt = torch.randn(1, 3, 16, 16).cuda()\n        percep, style = loss_percep(x, gt)\n        assert style is None and percep > 0\n\n        loss_percep = PerceptualLoss(\n            layer_weights={\n                '0': 1.\n            }, layer_weights_style={\n                '1': 1.\n            }).cuda()\n        x = torch.randn(1, 3, 16, 16).cuda()\n        gt = torch.randn(1, 3, 16, 16).cuda()\n        percep, style = loss_percep(x, gt)\n        assert percep > 0 and style > 0\n\n    # test whether vgg type is valid\n    with pytest.raises(AssertionError):\n        loss_percep = PerceptualLoss(layer_weights={'0': 1.}, vgg_type='igccc')\n    # test whether criterion is valid\n    with pytest.raises(NotImplementedError):\n        loss_percep = PerceptualLoss(\n            layer_weights={'0': 1.}, criterion='igccc')\n\n    layer_name_list = ['2', '10', '30']\n    vgg_model = PerceptualVGG(\n        layer_name_list,\n        use_input_norm=False,\n        vgg_type='vgg16',\n        pretrained='torchvision://vgg16')\n    x = torch.rand((1, 3, 32, 32))\n    output = vgg_model(x)\n    assert isinstance(output, dict)\n    assert len(output) == len(layer_name_list)\n    assert set(output.keys()) == set(layer_name_list)\n\n    # test whether the layer name is valid\n    with pytest.raises(AssertionError):\n        layer_name_list = ['2', '10', '30', '100']\n        vgg_model = PerceptualVGG(\n            layer_name_list,\n            use_input_norm=False,\n            vgg_type='vgg16',\n            pretrained='torchvision://vgg16')\n\n    # reset mock to clear some memory usage\n    init_weights.reset_mock()\n\n\ndef test_t_perceptual_loss():\n\n    maps = [\n        torch.rand((2, 8, 8, 8), requires_grad=True),\n        torch.rand((2, 4, 16, 16), requires_grad=True)\n    ]\n    textures = [torch.rand((2, 8, 8, 8)), torch.rand((2, 4, 16, 16))]\n    soft = torch.rand((2, 1, 8, 8))\n\n    loss_t_percep = TransferalPerceptualLoss()\n    t_percep = loss_t_percep(maps, soft, textures)\n    assert t_percep.item() > 0\n\n    loss_t_percep = TransferalPerceptualLoss(\n        use_attention=False, criterion='l1')\n    t_percep = loss_t_percep(maps, soft, textures)\n    assert t_percep.item() > 0\n\n    if torch.cuda.is_available():\n        maps = [\n            torch.rand((2, 8, 8, 8)).cuda(),\n            torch.rand((2, 4, 16, 16)).cuda()\n        ]\n        textures = [\n            torch.rand((2, 8, 8, 8)).cuda(),\n            torch.rand((2, 4, 16, 16)).cuda()\n        ]\n        soft = torch.rand((2, 1, 8, 8)).cuda()\n        loss_t_percep = TransferalPerceptualLoss().cuda()\n        maps[0].requires_grad = True\n        maps[1].requires_grad = True\n\n        t_percep = loss_t_percep(maps, soft, textures)\n        assert t_percep.item() > 0\n\n        optim = torch.optim.SGD(params=maps, lr=10)\n        optim.zero_grad()\n        t_percep.backward()\n        optim.step()\n\n        t_percep_new = loss_t_percep(maps, soft, textures)\n        assert t_percep_new < t_percep\n\n        loss_t_percep = TransferalPerceptualLoss(\n            use_attention=False, criterion='l1').cuda()\n        t_percep = loss_t_percep(maps, soft, textures)\n        assert t_percep.item() > 0\n\n    # test whether vgg type is valid\n    with pytest.raises(ValueError):\n        TransferalPerceptualLoss(criterion='l2')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_losses/test_pixelwise_loss.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport math\n\nimport numpy.testing as npt\nimport pytest\nimport torch\n\nfrom mmagic.models import (CharbonnierLoss, L1Loss, MaskedTVLoss, MSELoss,\n                           PSNRLoss)\n\n\ndef test_pixelwise_losses():\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        L1Loss(reduction='InvalidValue')\n\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        MSELoss(reduction='InvalidValue')\n\n    with pytest.raises(ValueError):\n        # only 'none', 'mean' and 'sum' are supported\n        CharbonnierLoss(reduction='InvalidValue')\n\n    unknown_h, unknown_w = (32, 32)\n    weight = torch.zeros(1, 1, 64, 64)\n    weight[0, 0, :unknown_h, :unknown_w] = 1\n    pred = weight.clone()\n    target = weight.clone() * 2\n\n    # test l1 loss\n    l1_loss = L1Loss(loss_weight=1.0, reduction='mean')\n    loss = l1_loss(pred, target)\n    assert loss.shape == ()\n    assert loss.item() == 0.25\n\n    l1_loss = L1Loss(loss_weight=0.5, reduction='none')\n    loss = l1_loss(pred, target, weight)\n    assert loss.shape == (1, 1, 64, 64)\n    assert (loss == torch.ones(1, 1, 64, 64) * weight * 0.5).all()\n\n    l1_loss = L1Loss(loss_weight=0.5, reduction='sum')\n    loss = l1_loss(pred, target, weight)\n    assert loss.shape == ()\n    assert loss.item() == 512\n\n    # test mse loss\n    mse_loss = MSELoss(loss_weight=1.0, reduction='mean')\n    loss = mse_loss(pred, target)\n    assert loss.shape == ()\n    assert loss.item() == 0.25\n\n    mse_loss = MSELoss(loss_weight=0.5, reduction='none')\n    loss = mse_loss(pred, target, weight)\n    assert loss.shape == (1, 1, 64, 64)\n    assert (loss == torch.ones(1, 1, 64, 64) * weight * 0.5).all()\n\n    mse_loss = MSELoss(loss_weight=0.5, reduction='sum')\n    loss = mse_loss(pred, target, weight)\n    assert loss.shape == ()\n    assert loss.item() == 512\n\n    # test charbonnier loss\n    charbonnier_loss = CharbonnierLoss(\n        loss_weight=1.0, reduction='mean', eps=1e-12)\n    loss = charbonnier_loss(pred, target)\n    assert loss.shape == ()\n    assert math.isclose(loss.item(), 0.25, rel_tol=1e-5)\n\n    charbonnier_loss = CharbonnierLoss(\n        loss_weight=0.5, reduction='none', eps=1e-6)\n    loss = charbonnier_loss(pred, target, weight)\n    assert loss.shape == (1, 1, 64, 64)\n    npt.assert_almost_equal(\n        loss.numpy(), torch.ones(1, 1, 64, 64) * weight * 0.5, decimal=6)\n\n    charbonnier_loss = CharbonnierLoss(\n        loss_weight=0.5, reduction='sum', eps=1e-12)\n    loss = charbonnier_loss(pred, target)\n    assert loss.shape == ()\n    assert math.isclose(loss.item(), 512, rel_tol=1e-5)\n\n    # test samplewise option, use L1Loss as an example\n    unknown_h, unknown_w = (32, 32)\n    weight = torch.zeros(2, 1, 64, 64)\n    weight[0, 0, :unknown_h, :unknown_w] = 1\n    # weight[1, 0, :unknown_h // 2, :unknown_w // 2] = 1\n    pred = weight.clone()\n    target = weight.clone()\n    # make mean l1_loss of sample 2 different from sample 1\n    target[0, ...] *= 2\n    l1_loss = L1Loss(loss_weight=1.0, reduction='mean', sample_wise=True)\n    loss = l1_loss(pred, target, weight)\n    assert loss.shape == ()\n    assert loss.item() == 0.5\n\n    masked_tv_loss = MaskedTVLoss(loss_weight=1.0)\n    pred = torch.zeros((1, 1, 6, 6))\n    mask = torch.zeros_like(pred)\n    mask[..., 2:4, 2:4] = 1.\n    pred[..., 3, :] = 1.\n    loss = masked_tv_loss(pred, mask)\n    assert loss.shape == ()\n    npt.assert_almost_equal(loss.item(), 1.)\n\n    # test PSNR Loss\n    psnr_loss = PSNRLoss(loss_weight=1.0)\n    pred = torch.ones(1, 1, 64, 64)\n    target = torch.zeros(1, 1, 64, 64)\n    loss = psnr_loss(pred, target)\n    assert loss.shape == ()\n    assert loss.item() == 0.0\n    loss = psnr_loss(target, target)\n    assert loss.item() == -80.0\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_utils/test_bbox_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.editors import PlainRefiner\nfrom mmagic.models.utils import extract_around_bbox, extract_bbox_patch\n\n\ndef test_extract_bbox_patch():\n    img_np = np.random.randn(100, 100, 3)\n    bbox = np.asarray([10, 10, 10, 10])\n    img_patch = extract_bbox_patch(bbox, img_np, channel_first=False)\n    assert np.array_equal(img_patch, img_np[10:20, 10:20, ...])\n\n    img_np = np.random.randn(1, 3, 100, 100)\n    bbox = np.asarray([[10, 10, 10, 10]])\n    img_patch = extract_bbox_patch(bbox, img_np)\n    assert np.array_equal(img_patch, img_np[..., 10:20, 10:20])\n\n    img_tensor = torch.from_numpy(img_np)\n    bbox = np.asarray([[10, 10, 10, 10]])\n    img_patch = extract_bbox_patch(bbox, img_tensor)\n    assert np.array_equal(img_patch.numpy(), img_np[..., 10:20, 10:20])\n\n    with pytest.raises(AssertionError):\n        img_np = np.random.randn(100, 100)\n        bbox = np.asarray([[10, 10, 10, 10]])\n        img_patch = extract_bbox_patch(bbox, img_np)\n\n    with pytest.raises(AssertionError):\n        img_np = np.random.randn(2, 3, 100, 100)\n        bbox = np.asarray([[10, 10, 10, 10]])\n        img_patch = extract_bbox_patch(bbox, img_np)\n\n    with pytest.raises(AssertionError):\n        img_np = np.random.randn(3, 100, 100)\n        bbox = np.asarray([[10, 10, 10, 10]])\n        img_patch = extract_bbox_patch(bbox, img_np)\n\n\ndef test_extract_around_bbox():\n    with pytest.raises(AssertionError):\n        img_np = np.random.randn(100, 100, 3)\n        bbox = np.asarray([10, 10, 10, 10])\n        extract_around_bbox(img_np, bbox, (4, 4))\n\n    with pytest.raises(TypeError):\n        bbox = dict(test='fail')\n        img_np = np.random.randn(100, 100, 3)\n        extract_around_bbox(img_np, bbox, (15, 15))\n\n    img_np = np.random.randn(100, 100, 3)\n    bbox = np.asarray([10, 10, 10, 10])\n    img_new, bbox_new = extract_around_bbox(\n        img_np, bbox, (14, 14), channel_first=False)\n    assert np.array_equal(img_np[8:22, 8:22, ...], img_new)\n    assert np.array_equal(bbox_new, np.asarray([8, 8, 14, 14]))\n\n    img_np = np.random.randn(1, 3, 100, 100)\n    bbox = np.asarray([[10, 10, 10, 10]])\n    img_tensor = torch.from_numpy(img_np)\n    bbox_tensor = torch.from_numpy(bbox)\n    img_new, bbox_new = extract_around_bbox(\n        img_tensor, bbox_tensor, target_size=[14, 14])\n    assert np.array_equal(img_np[..., 8:22, 8:22], img_new.numpy())\n    assert np.array_equal(bbox_new.numpy(), np.asarray([[8, 8, 14, 14]]))\n\n\ndef assert_dict_keys_equal(dictionary, target_keys):\n    \"\"\"Check if the keys of the dictionary is equal to the target key set.\"\"\"\n    assert isinstance(dictionary, dict)\n    assert set(dictionary.keys()) == set(target_keys)\n\n\ndef assert_tensor_with_shape(tensor, shape):\n    \"\"\"\"Check if the shape of the tensor is equal to the target shape.\"\"\"\n    assert isinstance(tensor, torch.Tensor)\n    assert tensor.shape == shape\n\n\ndef test_plain_refiner():\n    \"\"\"Test PlainRefiner.\"\"\"\n    model = PlainRefiner()\n    model.init_weights()\n    model.train()\n    merged, alpha, trimap, raw_alpha = _demo_inputs_pair()\n    prediction = model(torch.cat([merged, raw_alpha.sigmoid()], 1), raw_alpha)\n    assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n    # test forward with gpu\n    if torch.cuda.is_available():\n        model = PlainRefiner()\n        model.init_weights()\n        model.train()\n        model.cuda()\n        merged, alpha, trimap, raw_alpha = _demo_inputs_pair(cuda=True)\n        prediction = model(\n            torch.cat([merged, raw_alpha.sigmoid()], 1), raw_alpha)\n        assert_tensor_with_shape(prediction, torch.Size([1, 1, 64, 64]))\n\n\ndef _demo_inputs_pair(img_shape=(64, 64), batch_size=1, cuda=False):\n    \"\"\"Create a superset of inputs needed to run refiner.\n\n    Args:\n        img_shape (tuple): shape of the input image.\n        batch_size (int): batch size of the input batch.\n        cuda (bool): whether transfer input into gpu.\n    \"\"\"\n    color_shape = (batch_size, 3, img_shape[0], img_shape[1])\n    gray_shape = (batch_size, 1, img_shape[0], img_shape[1])\n    merged = torch.from_numpy(np.random.random(color_shape).astype(np.float32))\n    alpha = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    trimap = torch.from_numpy(np.random.random(gray_shape).astype(np.float32))\n    raw_alpha = torch.from_numpy(\n        np.random.random(gray_shape).astype(np.float32))\n    if cuda:\n        merged = merged.cuda()\n        alpha = alpha.cuda()\n        trimap = trimap.cuda()\n        raw_alpha = raw_alpha.cuda()\n    return merged, alpha, trimap, raw_alpha\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_utils/test_flow_warp.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport pytest\nimport torch\n\nfrom mmagic.models.utils import flow_warp\n\n\ndef tensor_shift(x, shift=(1, 1), fill_val=0):\n    \"\"\"Shift tensor for testing flow_warp.\n\n    Args:\n        x (Tensor): the input tensor. The shape is (b, c, h, w].\n        shift (tuple): shift pixel.\n        fill_val (float): fill value.\n\n    Returns:\n        Tensor: the shifted tensor.\n    \"\"\"\n\n    _, _, h, w = x.size()\n    shift_h, shift_w = shift\n    new = torch.ones_like(x) * fill_val\n\n    len_h = h - shift_h\n    len_w = w - shift_w\n    new[:, :, shift_h:shift_h + len_h,\n        shift_w:shift_w + len_w] = x.narrow(2, 0, len_h).narrow(3, 0, len_w)\n    return new\n\n\ndef test_flow_warp():\n    x = torch.rand(1, 3, 10, 10)\n    flow = torch.rand(1, 4, 4, 2)\n    with pytest.raises(ValueError):\n        # The spatial sizes of input and flow are not the same.\n        flow_warp(x, flow)\n\n    # cpu\n    x = torch.rand(1, 3, 10, 10)\n    flow = -torch.ones(1, 10, 10, 2)\n    result = flow_warp(x, flow)\n    assert result.size() == (1, 3, 10, 10)\n    error = torch.sum(torch.abs(result - tensor_shift(x, (1, 1))))\n    assert error < 1e-5\n    # gpu\n    if torch.cuda.is_available():\n        x = torch.rand(1, 3, 10, 10).cuda()\n        flow = -torch.ones(1, 10, 10, 2).cuda()\n        result = flow_warp(x, flow)\n        assert result.size() == (1, 3, 10, 10)\n        error = torch.sum(torch.abs(result - tensor_shift(x, (1, 1))))\n        assert error < 1e-5\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_utils/test_model_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport copy\nfrom collections import defaultdict\n\nimport pytest\nimport torch\nimport torch.nn as nn\n\nfrom mmagic.models.utils import (build_module, generation_init_weights,\n                                 get_module_device, get_valid_num_batches,\n                                 set_requires_grad)\nfrom mmagic.registry import MODELS\n\n\ndef test_generation_init_weights():\n    # Conv\n    module = nn.Conv2d(3, 3, 1)\n    module_tmp = copy.deepcopy(module)\n    generation_init_weights(module, init_type='normal', init_gain=0.02)\n    generation_init_weights(module, init_type='xavier', init_gain=0.02)\n    generation_init_weights(module, init_type='kaiming')\n    generation_init_weights(module, init_type='orthogonal', init_gain=0.02)\n    with pytest.raises(NotImplementedError):\n        generation_init_weights(module, init_type='abc')\n    assert not torch.equal(module.weight.data, module_tmp.weight.data)\n\n    # Linear\n    module = nn.Linear(3, 1)\n    module_tmp = copy.deepcopy(module)\n    generation_init_weights(module, init_type='normal', init_gain=0.02)\n    generation_init_weights(module, init_type='xavier', init_gain=0.02)\n    generation_init_weights(module, init_type='kaiming')\n    generation_init_weights(module, init_type='orthogonal', init_gain=0.02)\n    with pytest.raises(NotImplementedError):\n        generation_init_weights(module, init_type='abc')\n    assert not torch.equal(module.weight.data, module_tmp.weight.data)\n\n    # BatchNorm2d\n    module = nn.BatchNorm2d(3)\n    module_tmp = copy.deepcopy(module)\n    generation_init_weights(module, init_type='normal', init_gain=0.02)\n    assert not torch.equal(module.weight.data, module_tmp.weight.data)\n\n    # test update init info\n    module = nn.BatchNorm2d(3)\n    module._params_init_info = defaultdict(dict)\n    for name, param in module.named_parameters():\n        module._params_init_info[param][\n            'init_info'] = f'The value is the same before and ' \\\n                            f'after calling `init_weights` ' \\\n                            f'of {module.__class__.__name__} '\n        module._params_init_info[param]['tmp_mean_value'] = param.data.mean(\n        ).cpu()\n    module_tmp = copy.deepcopy(module)\n    generation_init_weights(module, init_type='normal', init_gain=0.02)\n    assert not torch.equal(module.weight.data, module_tmp.weight.data)\n\n\ndef test_set_requires_grad():\n    model = torch.nn.Conv2d(1, 3, 1, 1)\n    set_requires_grad(model, False)\n    for param in model.parameters():\n        assert not param.requires_grad\n\n\ndef test_get_module_device_cpu():\n    device = get_module_device(nn.Conv2d(3, 3, 3, 1, 1))\n    assert device == torch.device('cpu')\n\n    # The input module should contain parameters.\n    with pytest.raises(ValueError):\n        get_module_device(nn.Flatten())\n\n\ndef test_get_valid_num_batches():\n\n    # 1. batch inputs is Tensor\n    assert get_valid_num_batches(torch.rand(5, 3, 4, 4)) == 5\n\n    # 2. batch inputs is dict\n    batch_inputs = dict(num_batches=1, img=torch.randn(1, 3, 5, 5))\n    assert get_valid_num_batches(batch_inputs) == 1\n\n    # 3. batch inputs is dict but no tensor in it\n    batch_inputs = dict(aaa='aaa', bbb='bbb')\n    assert get_valid_num_batches(batch_inputs) == 1\n\n    # 4. test no batch input and no data samples\n    assert get_valid_num_batches() == 1\n\n    # 5. test batch is None but data sample is not None\n    data_samples = [None, None]\n    assert get_valid_num_batches(None, data_samples) == 2\n\n    # 6. test batch input and data sample are neither not None\n    batch_inputs = dict(num_batches=2, img=torch.randn(2, 3, 5, 5))\n    data_samples = [None, None]\n    assert get_valid_num_batches(batch_inputs, data_samples) == 2\n\n\ndef test_build_module():\n    module = nn.Conv2d(3, 3, 3)\n    assert build_module(module, MODELS) == module\n\n    @MODELS.register_module()\n    class MiniModule(nn.Module):\n\n        def __init__(self, *args, **kwargs):\n            super().__init__()\n            for k, v in kwargs.items():\n                setattr(self, k, v)\n\n        def forward(self, *args, **kwargs):\n            return\n\n    module_cfg = dict(type='MiniModule', attr1=1, attr2=2)\n    module = build_module(module_cfg, MODELS)\n    assert module.attr1 == 1\n    assert module.attr2 == 2\n\n    with pytest.raises(TypeError):\n        build_module('MiniModule', MODELS)\n\n    # remove the registered module\n    MODELS._module_dict.pop('MiniModule')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_utils/test_sampling_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.models.utils.sampling_utils import label_sample_fn, noise_sample_fn\n\n\ndef test_noise_sample_fn():\n    # test noise is a callable function\n    noise_callable = torch.randn\n    noise = noise_sample_fn(noise_callable, noise_size=(2, 3), device='cpu')\n    assert noise.shape == (1, 2, 3)\n\n\ndef test_label_sample_fn():\n    label = label_sample_fn(None, num_classes=-1)\n    assert label is None\n    label = label_sample_fn(None)\n    assert label is None\n\n    label_inp = torch.randint(0, 10, (1, ))\n    assert (label_sample_fn(label_inp, num_classes=10) == label_inp).all()\n\n    # np.ndarray input\n    label_inp = np.array([3, 2, 1])\n    tar_label = torch.LongTensor([3, 2, 1])\n    assert (label_sample_fn(label_inp, num_classes=10,\n                            device='cpu') == tar_label).all()\n\n    # list input\n    label_inp = [0, 1, 1]\n    tar_label = torch.LongTensor([0, 1, 1])\n    assert (label_sample_fn(label_inp, num_classes=10) == tar_label).all()\n    label_inp = [np.array([0]), np.array([1]), np.array([0])]\n    tar_label = torch.LongTensor([0, 1, 0])\n    assert (label_sample_fn(label_inp, num_classes=10) == tar_label).all()\n\n    label_inp = [\n        torch.LongTensor([0]),\n        torch.LongTensor([1]),\n        torch.LongTensor([0])\n    ]\n    tar_label = torch.LongTensor([0, 1, 0])\n    assert (label_sample_fn(label_inp, num_classes=10) == tar_label).all()\n\n    # list input --> raise error\n    label_inp = ['1', '2']\n    with pytest.raises(AssertionError):\n        label_sample_fn(label_inp, num_classes=10)\n\n    # callable input\n    def label_function(num_batches):\n        return torch.randint(0, 3, size=(num_batches, ))\n\n    assert label_sample_fn(label_function, num_batches=3).shape == (3, )\n\n    # test raise error\n    with pytest.raises(AssertionError):\n        label_sample_fn(torch.randn(3, 3), num_classes=10)\n\n    with pytest.raises(AssertionError):\n        label_sample_fn(torch.randint(0, 3, (2, 2)))\n\n    with pytest.raises(AssertionError):\n        label_sample_fn([0, 10, 2, 3], num_classes=5)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_models/test_utils/test_tensor_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport torch\n\nfrom mmagic.models.utils.tensor_utils import get_unknown_tensor, normalize_vecs\n\n\ndef test_tensor_utils():\n    input = torch.rand((2, 3, 128, 128))\n    output = get_unknown_tensor(input)\n    assert output.detach().numpy().shape == (2, 1, 128, 128)\n    input = torch.rand((2, 1, 128, 128))\n    output = get_unknown_tensor(input)\n    assert output.detach().numpy().shape == (2, 1, 128, 128)\n\n\ndef test_normalize_vector():\n    inp = torch.randn(4, 10)\n    out = normalize_vecs(inp)\n\n    def l2_norm(a):\n        return a / torch.norm(a, dim=1, keepdim=True)\n\n    l2_norm_out = l2_norm(inp)\n\n    assert (out == l2_norm_out).all()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_structures/test_data_sample.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest import TestCase\n\nimport numpy as np\nimport torch\nfrom mmengine.structures import LabelData\nfrom mmengine.testing import assert_allclose\n\nfrom mmagic.structures import DataSample\nfrom mmagic.structures.data_sample import is_splitable_var\n\n\ndef test_is_stacked_var():\n    assert is_splitable_var(DataSample())\n    assert is_splitable_var(torch.randn(10, 10))\n    assert is_splitable_var(np.ndarray((10, 10)))\n    assert is_splitable_var([1, 2])\n    assert is_splitable_var((1, 2))\n    assert not is_splitable_var({'a': 1})\n    assert not is_splitable_var('a')\n\n\nclass TestDataSample(TestCase):\n\n    def test_init(self):\n        meta_info = dict(\n            target_size=[256, 256],\n            scale_factor=np.array([1.5, 1.5]),\n            img_shape=torch.rand(4))\n\n        data_sample = DataSample(metainfo=meta_info)\n        assert 'target_size' in data_sample\n        assert data_sample.target_size == [256, 256]\n        assert data_sample.get('target_size') == [256, 256]\n        assert len(data_sample) == 1\n\n    def _check_in_and_same(self, data_sample, field, value, is_meta=False):\n        if is_meta:\n            self.assertIn(field, data_sample.metainfo)\n        else:\n            self.assertIn(field, data_sample)\n\n        if is_meta:\n            val_in_data = data_sample.metainfo[field]\n        else:\n            val_in_data = getattr(data_sample, field)\n\n        if isinstance(value, str):\n            self.assertEqual(val_in_data, value)\n        else:\n            assert_allclose(val_in_data, value)\n\n    def test_set_prefined_data(self):\n        \"\"\"Test fields mapping in this unit test.\"\"\"\n        # DATA\n        gt, gt_label = torch.randn(3, 256, 256), torch.randint(0, 2, (1, ))\n        fg, bg = torch.randn(3, 256, 256), torch.randn(3, 256, 256)\n        alpha = torch.randn(3, 256, 256)\n        ref, ref_lq = torch.randn(3, 256, 256), torch.randn(3, 256, 256)\n\n        # METAINFO\n        img_path, gt_path, merged_path = 'aaa', 'bbb', 'ccc'\n        gt_channel_order, gt_color_type = 'rgb', 'color'\n        prompt = 'prompt'\n        latent = torch.randn(1, 16, 512)\n        feats = torch.randn(64, 256, 256)\n\n        data = dict(\n            gt=gt,\n            gt_label=gt_label,\n            fg=fg,\n            bg=bg,\n            alpha=alpha,\n            ref=ref,\n            ref_lq=ref_lq,\n            img_path=img_path,\n            gt_path=gt_path,\n            merged_path=merged_path,\n            gt_channel_order=gt_channel_order,\n            gt_color_type=gt_color_type,\n            prompt=prompt,\n            latent=latent,\n            feats=feats)\n        data_sample = DataSample()\n        data_sample.set_predefined_data(data)\n\n        self._check_in_and_same(data_sample, 'gt_img', gt)\n        self._check_in_and_same(data_sample, 'gt_fg', fg)\n        self._check_in_and_same(data_sample, 'gt_bg', bg)\n        self._check_in_and_same(data_sample, 'gt_alpha', alpha)\n        self._check_in_and_same(data_sample, 'ref_img', ref)\n        self._check_in_and_same(data_sample, 'ref_lq', ref_lq)\n        self._check_in_and_same(data_sample, 'img_path', img_path, True)\n        self._check_in_and_same(data_sample, 'gt_path', gt_path, True)\n        self._check_in_and_same(data_sample, 'merged_path', merged_path, True)\n        self._check_in_and_same(data_sample, 'gt_channel_order',\n                                gt_channel_order, True)\n        self._check_in_and_same(data_sample, 'gt_color_type', gt_color_type,\n                                True)\n        self._check_in_and_same(data_sample, 'prompt', prompt, False)\n        self._check_in_and_same(data_sample, 'latent', latent)\n        self._check_in_and_same(data_sample, 'feats', feats)\n        # check gt label\n        data_sample.gt_label.data = gt_label\n\n    def _test_set_label(self, key):\n        data_sample = DataSample()\n        method = getattr(data_sample, 'set_' + key)\n        # Test number\n        method(1)\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertIsInstance(label.label, torch.LongTensor)\n\n        # Test tensor with single number\n        method(torch.tensor(2))\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertIsInstance(label.label, torch.LongTensor)\n\n        # Test array with single number\n        method(np.array(3))\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertIsInstance(label.label, torch.LongTensor)\n\n        # Test tensor\n        method(torch.tensor([1, 2, 3]))\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertIsInstance(label.label, torch.Tensor)\n        self.assertTrue((label.label == torch.tensor([1, 2, 3])).all())\n\n        # Test array\n        method(np.array([1, 2, 3]))\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertTrue((label.label == torch.tensor([1, 2, 3])).all())\n\n        # Test Sequence\n        method([1, 2, 3])\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertTrue((label.label == torch.tensor([1, 2, 3])).all())\n\n        # Test Sequence with float number\n        method([0.2, 0, 0.8])\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertTrue((label.label == torch.tensor([0.2, 0, 0.8])).all())\n\n        # Test unavailable type\n        with self.assertRaisesRegex(TypeError, \"<class 'str'> is not\"):\n            method('hi')\n\n        # Test set num_classes\n        data_sample = DataSample(metainfo={'num_classes': 10})\n        method = getattr(data_sample, 'set_' + key)\n        method(5)\n        self.assertIn(key, data_sample)\n        label = getattr(data_sample, key)\n        self.assertIsInstance(label, LabelData)\n        self.assertIn('num_classes', label)\n        self.assertEqual(label.num_classes, 10)\n\n        # Test unavailable label\n        with self.assertRaisesRegex(ValueError, r'data .*[15].* should '):\n            method(15)\n\n    def test_set_gt_label(self):\n        self._test_set_label('gt_label')\n\n    def test_del_gt_label(self):\n        data_sample = DataSample()\n        self.assertNotIn('gt_label', data_sample)\n        data_sample.set_gt_label(1)\n        self.assertIn('gt_label', data_sample)\n        del data_sample.gt_label\n        self.assertNotIn('gt_label', data_sample)\n\n    def test_stack_and_split(self):\n        # test stack\n        data_sample1 = DataSample()\n        data_sample1.set_gt_label(1)\n        data_sample1.set_tensor_data({'img': torch.randn(3, 4, 5)})\n        data_sample1.set_data({'mode': 'a'})\n        data_sample1.set_data({'prompt': 'I\\'m a prompt!'})\n        data_sample1.set_metainfo({\n            'channel_order': 'rgb',\n            'color_flag': 'color'\n        })\n        data_sample2 = DataSample()\n        data_sample2.set_gt_label(2)\n        data_sample2.set_tensor_data({'img': torch.randn(3, 4, 5)})\n        data_sample2.set_data({'mode': 'b'})\n        data_sample2.set_data({'prompt': 'I\\'m an another prompt!'})\n        data_sample2.set_metainfo({\n            'channel_order': 'rgb',\n            'color_flag': 'color'\n        })\n\n        data_sample_merged = DataSample.stack([data_sample1, data_sample2])\n        assert (data_sample_merged.img == torch.stack(\n            [data_sample1.img, data_sample2.img])).all()\n        assert (data_sample_merged.gt_label.label == torch.LongTensor(\n            [[1], [2]])).all()\n        assert data_sample_merged.mode == ['a', 'b']\n        assert data_sample_merged.metainfo == dict(\n            channel_order=['rgb', 'rgb'], color_flag=['color', 'color'])\n        assert len(data_sample_merged) == 2\n        assert data_sample_merged.prompt == [\n            'I\\'m a prompt!', 'I\\'m an another prompt!'\n        ]\n\n        # test split\n        data_sample_merged.sample_model = 'ema'\n        data_sample_merged.fake_img = DataSample(img=torch.randn(2, 3, 4, 4))\n\n        data_splited_1, data_splited_2 = data_sample_merged.split(True)\n        assert (data_splited_1.gt_label.label == 1).all()\n        assert (data_splited_2.gt_label.label == 2).all()\n        assert (data_splited_1.img.shape == data_sample1.img.shape)\n        assert (data_splited_2.img.shape == data_sample2.img.shape)\n        assert (data_splited_1.img == data_sample1.img).all()\n        assert (data_splited_2.img == data_sample2.img).all()\n        assert (data_splited_1.metainfo == dict(\n            channel_order='rgb', color_flag='color'))\n        assert (data_splited_2.metainfo == dict(\n            channel_order='rgb', color_flag='color'))\n        assert data_splited_1.sample_model == 'ema'\n        assert data_splited_2.sample_model == 'ema'\n        assert data_splited_1.fake_img.img.shape == (3, 4, 4)\n        assert data_splited_2.fake_img.img.shape == (3, 4, 4)\n        assert data_splited_1.prompt == 'I\\'m a prompt!'\n        assert data_splited_2.prompt == 'I\\'m an another prompt!'\n\n        with self.assertRaises(TypeError):\n            data_sample_merged.split()\n\n        # test stack and split when batch size is 1\n        data_sample = DataSample()\n        data_sample.set_gt_label(3)\n        data_sample.set_tensor_data({'img': torch.randn(3, 4, 5)})\n        data_sample.set_data({'mode': 'c'})\n        data_sample.set_data({'prompt': 'proooommmmpt'})\n        data_sample.set_metainfo({\n            'channel_order': 'rgb',\n            'color_flag': 'color'\n        })\n\n        data_sample_merged = DataSample.stack([data_sample])\n        assert (data_sample_merged.img == torch.stack([data_sample.img])).all()\n        assert (data_sample_merged.gt_label.label == torch.LongTensor(\n            [[3]])).all()\n        assert data_sample_merged.mode == ['c']\n        assert data_sample_merged.metainfo == dict(\n            channel_order=['rgb'], color_flag=['color'])\n        data_sample_merged.prompt == ['proooommmmpt']\n        assert len(data_sample_merged) == 1\n\n        # test split\n        data_splited = data_sample_merged.split()\n        assert len(data_splited) == 1\n        data_splited = data_splited[0]\n        assert (data_splited.gt_label.label == 3).all()\n        assert (data_splited.img == data_sample.img).all()\n        assert data_splited.prompt == 'proooommmmpt'\n        assert (data_splited.metainfo == dict(\n            channel_order='rgb', color_flag='color'))\n\n    def test_len(self):\n        empty_data = DataSample(sample_kwargs={'a': 'a'})\n        assert len(empty_data) == 1\n\n        empty_data = DataSample()\n        assert len(empty_data) == 1\n\n        empty_data = DataSample(\n            img=torch.randn(3, 3), metainfo=dict(img_shape=[3, 3]))\n        assert len(empty_data) == 1\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_cli.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport sys\n\nfrom mmagic.utils import modify_args\n\n\ndef test_modify_args():\n    sys.argv = ['test.py', '--arg_1=1', '--arg-2=2']\n    modify_args()\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_img_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport numpy as np\nimport pytest\nimport torch\n\nfrom mmagic.utils import (all_to_tensor, can_convert_to_image, tensor2img,\n                          to_numpy)\n\n\ndef test_all_to_tensor():\n\n    data = [np.random.rand(64, 64, 3), np.random.rand(64, 64, 3)]\n    tensor = all_to_tensor(data)\n    assert tensor.shape == torch.Size([2, 3, 64, 64])\n\n    data = np.random.rand(64, 64, 3)\n    tensor = all_to_tensor(data)\n    assert tensor.shape == torch.Size([3, 64, 64])\n\n    data = 1\n    tensor = all_to_tensor(data)\n    assert tensor == torch.tensor(1)\n\n\ndef test_can_convert_to_image():\n    values = [\n        np.random.rand(64, 64, 3),\n        [np.random.rand(64, 61, 3),\n         np.random.rand(64, 61, 3)], (64, 64), 'b'\n    ]\n    targets = [True, True, False, False]\n    for val, tar in zip(values, targets):\n        assert can_convert_to_image(val) == tar\n\n\ndef test_tensor2img():\n    input = torch.rand(1, 3, 8, 8)\n    result = tensor2img(input)\n    assert result.shape == (8, 8, 3)\n\n    input = torch.rand(1, 1, 8, 8)\n    result = tensor2img(input)\n    assert result.shape == (8, 8)\n\n    input = torch.rand(4, 3, 8, 8)\n    result = tensor2img(input)\n    assert result.shape == (22, 22, 3)\n\n    input = [torch.rand(1, 3, 8, 8), torch.rand(1, 3, 8, 8)]\n    result = tensor2img(input)\n    assert len(result) == len(input)\n    for r in result:\n        assert r.shape == (8, 8, 3)\n\n    with pytest.raises(TypeError):\n        tensor2img('wrong type')\n\n    with pytest.raises(ValueError):\n        tensor2img([torch.randn(2, 3, 4, 4, 4) for _ in range(2)])\n\n\ndef test_to_numpy():\n    input = torch.rand(1, 3, 8, 8)\n    output = to_numpy(input)\n    assert isinstance(output, np.ndarray)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_io_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\n\nfrom mmagic.utils.io_utils import download_from_url\n\n\ndef test_download_from_url():\n    # test to download a small file\n    dest_path = download_from_url(\n        'https://download.openmmlab.com/mmgen/dataset/singan/balloons.png',\n        dest_path='./')\n    print(dest_path)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_logger.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.utils import print_colored_log\n\n\ndef test_print_colored_log():\n    print_colored_log('Test print_colored_log info.')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_sampler.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom unittest.mock import MagicMock\n\nfrom torch.utils.data import DataLoader\n\nfrom mmagic.utils.sampler import ArgumentsSampler, ValDataSampler\n\n\ndef test_argument_sampler():\n    sample_kwargs = dict(\n        a=1,\n        b=2,\n        max_times=10,\n        num_batches=2,\n        forward_kwargs=dict(forward_mode='gen'))\n    sampler = ArgumentsSampler(sample_kwargs=sample_kwargs, )\n\n    assert sampler.max_times == 10\n    for sample in sampler:\n        assert 'inputs' in sample\n        assert sample['inputs'] == dict(forward_mode='gen', num_batches=2)\n\n\nclass MockDataset():\n\n    def __init__(self, length):\n        self.length = length\n\n    def __getitem__(self, idx):\n        return idx\n\n    def __len__(self):\n        return self.length\n\n\nclass MockValLoop():\n\n    def __init__(self):\n        self.dataloaders = None\n\n\ndef test_val_data_sampler():\n    runner = MagicMock()\n    val_loop = MockValLoop()\n    val_loop.dataloaders = [\n        DataLoader(MockDataset(10), batch_size=4),\n        DataLoader(MockDataset(5), batch_size=4)\n    ]\n    # val_loop.dataloader = None\n    runner.val_loop = val_loop\n\n    val_sampler = ValDataSampler(\n        sample_kwargs=dict(max_times=10), runner=runner)\n    assert len(val_sampler._dataloader.dataset) == 15\n    tar_out = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 0, 1], [2, 3, 4]]\n    for idx, out in enumerate(val_sampler):\n        assert out == tar_out[idx]\n\n    setattr(val_loop, 'dataloader', DataLoader(MockDataset(8), batch_size=4))\n    val_sampler = ValDataSampler(\n        sample_kwargs=dict(max_times=10), runner=runner)\n    assert len(val_sampler._dataloader.dataset) == 8\n    for idx, out in enumerate(val_sampler):\n        assert out == tar_out[idx]\n\n    # test iteration times\n    val_sampler = ValDataSampler(\n        sample_kwargs=dict(max_times=1), runner=runner)\n    tar_out = [[0, 1, 2, 3]]\n    for idx, out in enumerate(val_sampler):\n        assert out == tar_out[idx]\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_setup_env.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom mmagic.utils import register_all_modules, try_import\n\n\ndef test_register_all_modules():\n    register_all_modules()\n\n\ndef test_try_import():\n    import numpy as np\n    assert try_import('numpy') is np\n    assert try_import('numpy111') is None\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_utils/test_trans_utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nfrom pathlib import Path\n\nimport numpy as np\nimport pytest\n\nfrom mmagic.datasets.transforms import (CropAroundCenter, CropAroundFg,\n                                        CropAroundUnknown, LoadImageFromFile)\nfrom mmagic.utils import (adjust_gamma, bbox2mask, brush_stroke_mask,\n                          get_irregular_mask, random_bbox)\n\ndtype_range = {\n    np.bool_: (False, True),\n    np.bool8: (False, True),\n    np.float16: (-1, 1),\n    np.float32: (-1, 1),\n    np.float64: (-1, 1)\n}\n\n\nclass TestCrop:\n\n    @classmethod\n    def setup_class(cls):\n        \"\"\"Check the dimension of gray scale images read by\n        LoadImageFromFile.\"\"\"\n        image_loader = LoadImageFromFile(key='img')\n        path_alpha = Path(\n            __file__\n        ).parent.parent / 'data' / 'matting_dataset' / 'alpha' / 'GT05.jpg'  # noqa: E501\n        result = image_loader({'img_path': path_alpha})\n        if result['img'].ndim == 3:\n            cls.ext_dim = (1, )\n        elif result['img'].ndim == 2:\n            cls.ext_dim = ()\n        else:\n            raise ValueError('invalid ndim')\n\n    @classmethod\n    def check_ndim(cls, result_img_shape):\n        if cls.ext_dim:\n            return len(result_img_shape) == 3\n        else:\n            return not (len(result_img_shape.ndim) == 3\n                        and result_img_shape[-1] == 1)\n\n    @classmethod\n    def check_crop(cls, result_img_shape, result_bbox):\n        crop_w = result_bbox[2] - result_bbox[0]\n        \"\"\"Check if the result_bbox is in correspond to result_img_shape.\"\"\"\n        crop_h = result_bbox[3] - result_bbox[1]\n        crop_shape = (crop_h, crop_w)\n        return result_img_shape[:2] == crop_shape\n\n    @staticmethod\n    def check_crop_around_semi(alpha):\n        return ((alpha > 0) & (alpha < 255)).any()\n\n    @staticmethod\n    def check_keys_contain(result_keys, target_keys):\n        \"\"\"Check if all elements in target_keys is in result_keys.\"\"\"\n        return set(target_keys).issubset(set(result_keys))\n\n    def test_crop_around_center(self):\n\n        with pytest.raises(TypeError):\n            CropAroundCenter(320.)\n        with pytest.raises(AssertionError):\n            CropAroundCenter((320, 320, 320))\n\n        target_keys = ['fg', 'bg', 'alpha', 'trimap', 'crop_bbox']\n\n        fg = np.random.rand(240, 320, 3)\n        bg = np.random.rand(240, 320, 3)\n        trimap = np.random.rand(240, 320, *self.ext_dim)\n        alpha = np.random.rand(240, 320, *self.ext_dim)\n\n        # make sure there would be semi-transparent area\n        trimap[128, 128] = 128\n        results = dict(fg=fg, bg=bg, trimap=trimap, alpha=alpha)\n        crop_around_center = CropAroundCenter(\n            crop_size=330)  # this will trigger rescale\n        crop_around_center_results = crop_around_center(results)\n        assert self.check_keys_contain(crop_around_center_results.keys(),\n                                       target_keys)\n        assert self.check_ndim(crop_around_center_results['alpha'].shape)\n        assert self.check_ndim(crop_around_center_results['trimap'].shape)\n        assert self.check_crop(crop_around_center_results['alpha'].shape,\n                               crop_around_center_results['crop_bbox'])\n        assert self.check_crop_around_semi(crop_around_center_results['alpha'])\n\n        # make sure there would be semi-transparent area\n        trimap[:, :] = 128\n        results = dict(fg=fg, bg=bg, trimap=trimap, alpha=alpha)\n        crop_around_center = CropAroundCenter(crop_size=200)\n        crop_around_center_results = crop_around_center(results)\n        assert self.check_keys_contain(crop_around_center_results.keys(),\n                                       target_keys)\n        assert self.check_ndim(crop_around_center_results['alpha'].shape)\n        assert self.check_ndim(crop_around_center_results['trimap'].shape)\n        assert self.check_crop(crop_around_center_results['alpha'].shape,\n                               crop_around_center_results['crop_bbox'])\n        assert self.check_crop_around_semi(crop_around_center_results['alpha'])\n\n        repr_str = crop_around_center.__class__.__name__ + (\n            f'(crop_size={(200, 200)})')\n        assert repr(crop_around_center) == repr_str\n\n    def test_crop_around_fg(self):\n        with pytest.raises(ValueError):\n            # keys must contain 'seg'\n            CropAroundFg(['fg', 'bg'])\n        with pytest.raises(TypeError):\n            # bd_ratio_range must be a tuple of 2 float\n            CropAroundFg(['seg', 'merged'], bd_ratio_range=0.1)\n\n        keys = ['bg', 'merged', 'seg']\n        target_keys = ['bg', 'merged', 'seg', 'crop_bbox']\n\n        bg = np.random.rand(60, 60, 3)\n        merged = np.random.rand(60, 60, 3)\n        seg = np.random.rand(60, 60)\n        results = dict(bg=bg, merged=merged, seg=seg)\n\n        crop_around_fg = CropAroundFg(keys)\n        crop_around_fg_results = crop_around_fg(results)\n        assert self.check_keys_contain(crop_around_fg_results.keys(),\n                                       target_keys)\n        assert self.check_crop(crop_around_fg_results['seg'].shape,\n                               crop_around_fg_results['crop_bbox'])\n\n        crop_around_fg = CropAroundFg(keys, test_mode=True)\n        crop_around_fg_results = crop_around_fg(results)\n        result_img_shape = crop_around_fg_results['seg'].shape\n        assert self.check_keys_contain(crop_around_fg_results.keys(),\n                                       target_keys)\n        assert self.check_crop(result_img_shape,\n                               crop_around_fg_results['crop_bbox'])\n        # it should be a square in test mode\n        assert result_img_shape[0] == result_img_shape[1]\n\n    def test_crop_around_unknown(self):\n        with pytest.raises(ValueError):\n            # keys must contain 'alpha'\n            CropAroundUnknown(['fg', 'bg'], [320])\n        with pytest.raises(TypeError):\n            # crop_size must be a list\n            CropAroundUnknown(['alpha'], 320)\n        with pytest.raises(TypeError):\n            # crop_size must be a list of int\n            CropAroundUnknown(['alpha'], [320.])\n        with pytest.raises(ValueError):\n            # unknown_source must be either 'alpha' or 'trimap'\n            CropAroundUnknown(['alpha', 'fg'], [320], unknown_source='fg')\n        with pytest.raises(ValueError):\n            # if unknown_source is 'trimap', then keys must contain it\n            CropAroundUnknown(['alpha', 'fg'], [320], unknown_source='trimap')\n\n        keys = ['fg', 'bg', 'merged', 'alpha', 'trimap', 'ori_merged']\n        target_keys = [\n            'fg', 'bg', 'merged', 'alpha', 'trimap', 'ori_merged', 'crop_bbox'\n        ]\n\n        # test cropping using trimap to decide unknown area\n        fg = np.random.rand(240, 320, 3)\n        bg = np.random.rand(240, 320, 3)\n        merged = np.random.rand(240, 320, 3)\n        ori_merged = merged.copy()\n        alpha = np.zeros((240, 320, *self.ext_dim))\n        # make sure there would be unknown area\n        alpha[:16, -16:] = 128\n        trimap = np.zeros_like(alpha)\n        trimap[alpha > 0] = 128\n        trimap[alpha == 255] = 255\n        results = dict(\n            fg=fg,\n            bg=bg,\n            merged=merged,\n            ori_merged=ori_merged,\n            alpha=alpha,\n            trimap=trimap)\n        crop_around_semi_trans = CropAroundUnknown(\n            keys, crop_sizes=[320], unknown_source='trimap')\n        crop_around_semi_trans_results = crop_around_semi_trans(results)\n        assert self.check_keys_contain(crop_around_semi_trans_results.keys(),\n                                       target_keys)\n        assert self.check_ndim(crop_around_semi_trans_results['alpha'].shape)\n        assert self.check_ndim(crop_around_semi_trans_results['trimap'].shape)\n        assert self.check_crop(crop_around_semi_trans_results['alpha'].shape,\n                               crop_around_semi_trans_results['crop_bbox'])\n        assert self.check_crop_around_semi(\n            crop_around_semi_trans_results['alpha'])\n\n        keys = ['fg', 'bg', 'merged', 'alpha', 'ori_merged']\n        target_keys = [\n            'fg', 'bg', 'merged', 'alpha', 'ori_merged', 'crop_bbox'\n        ]\n\n        # test cropping using alpha to decide unknown area\n        fg = np.random.rand(240, 320, 3)\n        bg = np.random.rand(240, 320, 3)\n        merged = np.random.rand(240, 320, 3)\n        ori_merged = merged.copy()\n        alpha = np.random.rand(240, 320, *self.ext_dim)\n        # make sure there would be unknown area\n        alpha[120:160, 120:160] = 128\n        results = dict(\n            fg=fg, bg=bg, merged=merged, ori_merged=ori_merged, alpha=alpha)\n        crop_around_semi_trans = CropAroundUnknown(\n            keys, crop_sizes=[160], unknown_source='alpha')\n        crop_around_semi_trans_results = crop_around_semi_trans(results)\n        assert self.check_keys_contain(crop_around_semi_trans_results.keys(),\n                                       target_keys)\n        assert self.check_ndim(crop_around_semi_trans_results['alpha'].shape)\n        assert self.check_crop(crop_around_semi_trans_results['alpha'].shape,\n                               crop_around_semi_trans_results['crop_bbox'])\n        assert self.check_crop_around_semi(\n            crop_around_semi_trans_results['alpha'])\n\n        # test cropping when there is no unknown area\n        fg = np.random.rand(240, 320, 3)\n        bg = np.random.rand(240, 320, 3)\n        merged = np.random.rand(240, 320, 3)\n        ori_merged = merged.copy()\n        alpha = np.zeros((240, 320, *self.ext_dim))\n        results = dict(\n            fg=fg, bg=bg, merged=merged, ori_merged=ori_merged, alpha=alpha)\n        crop_around_semi_trans = CropAroundUnknown(\n            keys, crop_sizes=[240], unknown_source='alpha')\n        crop_around_semi_trans_results = crop_around_semi_trans(results)\n        assert self.check_keys_contain(crop_around_semi_trans_results.keys(),\n                                       target_keys)\n        assert self.check_ndim(crop_around_semi_trans_results['alpha'].shape)\n        assert self.check_crop(crop_around_semi_trans_results['alpha'].shape,\n                               crop_around_semi_trans_results['crop_bbox'])\n\n        repr_str = (\n            crop_around_semi_trans.__class__.__name__ +\n            f\"(keys={keys}, crop_sizes={[(240, 240)]}, unknown_source='alpha',\"\n            \" interpolations=['bilinear', 'bilinear', 'bilinear', 'bilinear', \"\n            \"'bilinear'])\")\n        assert crop_around_semi_trans.__repr__() == repr_str\n\n\ndef test_adjust_gamma():\n    \"\"\"Test Gamma Correction.\n\n    Adpted from\n    # https://github.com/scikit-image/scikit-image/blob/7e4840bd9439d1dfb6beaf549998452c99f97fdd/skimage/exposure/tests/test_exposure.py#L534  # noqa\n    \"\"\"\n    # Check that the shape is maintained.\n    img = np.ones([1, 1])\n    result = adjust_gamma(img, 1.5)\n    assert img.shape == result.shape\n\n    # Same image should be returned for gamma equal to one.\n    image = np.random.uniform(0, 255, (8, 8))\n    result = adjust_gamma(image, 1)\n    np.testing.assert_array_equal(result, image)\n\n    # White image should be returned for gamma equal to zero.\n    image = np.random.uniform(0, 255, (8, 8))\n    result = adjust_gamma(image, 0)\n    dtype = image.dtype.type\n    np.testing.assert_array_equal(result, dtype_range[dtype][1])\n\n    # Verifying the output with expected results for gamma\n    # correction with gamma equal to half.\n    image = np.arange(0, 255, 4, np.uint8).reshape((8, 8))\n    expected = np.array([[0, 31, 45, 55, 63, 71, 78, 84],\n                         [90, 95, 100, 105, 110, 115, 119, 123],\n                         [127, 131, 135, 139, 142, 146, 149, 153],\n                         [156, 159, 162, 165, 168, 171, 174, 177],\n                         [180, 183, 186, 188, 191, 194, 196, 199],\n                         [201, 204, 206, 209, 211, 214, 216, 218],\n                         [221, 223, 225, 228, 230, 232, 234, 236],\n                         [238, 241, 243, 245, 247, 249, 251, 253]],\n                        dtype=np.uint8)\n\n    result = adjust_gamma(image, 0.5)\n    np.testing.assert_array_equal(result, expected)\n\n    # Verifying the output with expected results for gamma\n    # correction with gamma equal to two.\n    image = np.arange(0, 255, 4, np.uint8).reshape((8, 8))\n    expected = np.array([[0, 0, 0, 0, 1, 1, 2, 3], [4, 5, 6, 7, 9, 10, 12, 14],\n                         [16, 18, 20, 22, 25, 27, 30, 33],\n                         [36, 39, 42, 45, 49, 52, 56, 60],\n                         [64, 68, 72, 76, 81, 85, 90, 95],\n                         [100, 105, 110, 116, 121, 127, 132, 138],\n                         [144, 150, 156, 163, 169, 176, 182, 189],\n                         [196, 203, 211, 218, 225, 233, 241, 249]],\n                        dtype=np.uint8)\n\n    result = adjust_gamma(image, 2)\n    np.testing.assert_array_equal(result, expected)\n\n    # Test invalid image input\n    image = np.arange(0, 255, 4, np.uint8).reshape((8, 8))\n    with pytest.raises(ValueError):\n        adjust_gamma(image, -1)\n\n\ndef test_bbox_mask():\n    # default config for random bbox mask\n    cfg = dict(\n        img_shape=(256, 256),\n        max_bbox_shape=100,\n        max_bbox_delta=10,\n        min_margin=10)\n\n    bbox = random_bbox(**cfg)\n    mask_bbox = bbox2mask(cfg['img_shape'], bbox)\n    assert mask_bbox.shape == (256, 256, 1)\n    zero_area = np.sum((mask_bbox == 0).astype(np.uint8))\n    ones_area = np.sum((mask_bbox == 1).astype(np.uint8))\n    assert zero_area + ones_area == 256 * 256\n    assert mask_bbox.dtype == np.uint8\n\n    with pytest.raises(ValueError):\n        cfg_ = cfg.copy()\n        cfg_['max_bbox_shape'] = 300\n        bbox = random_bbox(**cfg_)\n\n    with pytest.raises(ValueError):\n        cfg_ = cfg.copy()\n        cfg_['max_bbox_delta'] = 300\n        bbox = random_bbox(**cfg_)\n\n    with pytest.raises(ValueError):\n        cfg_ = cfg.copy()\n        cfg_['max_bbox_shape'] = 254\n        bbox = random_bbox(**cfg_)\n\n    cfg_ = cfg.copy()\n    cfg_['max_bbox_delta'] = 1\n    bbox = random_bbox(**cfg_)\n    mask_bbox = bbox2mask(cfg['img_shape'], bbox)\n    assert mask_bbox.shape == (256, 256, 1)\n\n\ndef test_free_form_mask():\n    img_shape = (256, 256, 3)\n    for _ in range(10):\n        mask = brush_stroke_mask(img_shape)\n        assert mask.shape == (256, 256, 1)\n\n    img_shape = (256, 256, 3)\n    mask = brush_stroke_mask(img_shape, num_vertices=8)\n    assert mask.shape == (256, 256, 1)\n    zero_area = np.sum((mask == 0).astype(np.uint8))\n    ones_area = np.sum((mask == 1).astype(np.uint8))\n    assert zero_area + ones_area == 256 * 256\n    assert mask.dtype == np.uint8\n\n    img_shape = (256, 256, 3)\n    mask = brush_stroke_mask(img_shape, brush_width=10)\n    assert mask.shape == (256, 256, 1)\n\n    with pytest.raises(TypeError):\n        mask = brush_stroke_mask(img_shape, num_vertices=dict())\n\n    with pytest.raises(TypeError):\n        mask = brush_stroke_mask(img_shape, brush_width=dict())\n\n\ndef test_irregular_mask():\n    img_shape = (256, 256)\n    for _ in range(10):\n        mask = get_irregular_mask(img_shape)\n        assert mask.shape == (256, 256, 1)\n        assert 0.15 < (np.sum(mask) / (img_shape[0] * img_shape[1])) < 0.50\n        zero_area = np.sum((mask == 0).astype(np.uint8))\n        ones_area = np.sum((mask == 1).astype(np.uint8))\n        assert zero_area + ones_area == 256 * 256\n        assert mask.dtype == np.uint8\n\n    with pytest.raises(TypeError):\n        mask = get_irregular_mask(img_shape, brush_width=dict())\n\n    with pytest.raises(TypeError):\n        mask = get_irregular_mask(img_shape, length_range=dict())\n\n    with pytest.raises(TypeError):\n        mask = get_irregular_mask(img_shape, num_vertices=dict())\n\n    mask = get_irregular_mask(img_shape, brush_width=10)\n    assert mask.shape == (256, 256, 1)\n\n    mask = get_irregular_mask(img_shape, length_range=10)\n    assert mask.shape == (256, 256, 1)\n\n    mask = get_irregular_mask(img_shape, num_vertices=10)\n    assert mask.shape == (256, 256, 1)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_visualization/test_concat_visualizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport mmcv\nimport numpy as np\nimport torch\n\nfrom mmagic.structures import DataSample\nfrom mmagic.visualization import ConcatImageVisualizer\n\n\ndef test_concatimagevisualizer():\n    data_sample = DataSample(\n        path_rgb='fake_dir/rgb.png',\n        path_bgr='fake_dir/bgr.png',\n        tensor3d=torch.ones(3, 32, 32) *\n        torch.tensor([[[0.1]], [[0.2]], [[0.3]]]),\n        array3d=np.ones(shape=(32, 32, 3)) * [0.4, 0.5, 0.6],\n        tensor4d=torch.ones(2, 3, 32, 32) * torch.tensor(\n            [[[[0.1]], [[0.2]], [[0.3]]], [[[0.4]], [[0.5]], [[0.6]]]]),\n    )\n\n    vis = ConcatImageVisualizer(\n        fn_key='path_rgb',\n        img_keys=['tensor3d', 'array3d', 'tensor4d'],\n        vis_backends=[dict(type='LocalVisBackend')],\n        save_dir='work_dirs')\n\n    vis.add_datasample(data_sample=data_sample, step=1)\n\n    vis = ConcatImageVisualizer(\n        fn_key='path_bgr',\n        img_keys=['tensor3d', 'array3d', 'tensor4d'],\n        vis_backends=[dict(type='LocalVisBackend')],\n        save_dir='work_dirs',\n        bgr2rgb=True)\n\n    vis.add_datasample(data_sample=data_sample, step=2)\n\n    for fn in 'rgb_1.png', 'bgr_2.png':\n        img = mmcv.imread(f'work_dirs/vis_data/vis_image/{fn}')\n        assert img.shape == (64, 16 * 3 * 2, 3)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_visualization/test_vis_backend.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport shutil\nimport sys\nimport time\nfrom unittest import TestCase\nfrom unittest.mock import MagicMock\n\nimport numpy as np\nimport torch\nfrom mmengine import Config, MessageHub\n\nfrom mmagic.visualization import (PaviVisBackend, TensorboardVisBackend,\n                                  VisBackend, WandbVisBackend)\n\n\nclass TestVisBackend(TestCase):\n\n    def test_vis_backend(self):\n        message_hub = MessageHub.get_instance('test-visbackend')\n        config = Config(dict(work_dir='./mmagic/test/vis_backend_test/'))\n        message_hub.update_info('cfg', config.pretty_text)\n\n        data_root = 'tmp_dir'\n        sys.modules['petrel_client'] = MagicMock()\n        vis_backend = VisBackend(save_dir='tmp_dir', ceph_path='s3://xxx')\n\n        self.assertEqual(vis_backend.experiment, vis_backend)\n        # test path mapping\n        src_path = osp.abspath(\n            './mmagic/test/vis_backend_test/test_vis_data/test.png')\n        tar_path = 's3://xxx/vis_backend_test/test_vis_data/test.png'\n        file_client = vis_backend._file_client\n        mapped_path = file_client._map_path(src_path)\n        formatted_path = file_client._format_path(mapped_path)\n        self.assertEqual(formatted_path, tar_path)\n        # test with `delete_local` is True\n        vis_backend.add_config(Config(dict(name='test')))\n        vis_backend.add_image(\n            name='add_img', image=np.random.random((8, 8, 3)).astype(np.uint8))\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3)\n\n        # test with `delete_local` is False\n        vis_backend._delete_local_image = False\n        vis_backend.add_config(Config(dict(name='test')))\n        vis_backend.add_image(\n            name='add_img', image=np.random.random((8, 8, 3)).astype(np.uint8))\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3)\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3,\n            file_path='new_scalar.json')\n        self.assertTrue(osp.exists(osp.join(data_root, 'config.py')))\n        self.assertTrue(\n            osp.exists(osp.join(data_root, 'vis_image', 'add_img_0.png')))\n        self.assertTrue(osp.exists(osp.join(data_root, 'new_scalar.json')))\n        self.assertTrue(osp.exists(osp.join(data_root, 'scalars.json')))\n\n        # test with `ceph_path` is None\n        vis_backend = VisBackend(save_dir='tmp_dir')\n        vis_backend.add_config(Config(dict(name='test')))\n        vis_backend.add_image(\n            name='add_img', image=np.random.random((8, 8, 3)).astype(np.uint8))\n        vis_backend.add_scalar(\n            name='scalar_tensor', value=torch.FloatTensor([0.693]), step=3)\n        vis_backend.add_scalar(name='scalar', value=0.693, step=3)\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3)\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3,\n            file_path='new_scalar.json')\n\n        # raise error\n        with self.assertRaises(AssertionError):\n            vis_backend.add_scalars(\n                scalar_dict=dict(lr=0.001), step=3, file_path='scalars.json')\n        with self.assertRaises(AssertionError):\n            vis_backend.add_scalars(\n                scalar_dict=dict(lr=0.001), step=3, file_path='new_scalars')\n\n        shutil.rmtree('tmp_dir')\n\n\nclass TestTensorboardBackend(TestCase):\n\n    def test_tensorboard(self):\n        save_dir = 'tmp_dir'\n        vis_backend = TensorboardVisBackend(save_dir)\n        sys.modules['torch.utils.tensorboard'] = MagicMock()\n\n        # add image\n        vis_backend.add_image(\n            name='add_img', image=np.random.random((8, 8, 3)).astype(np.uint8))\n        vis_backend.add_image(\n            name='add_img',\n            image=np.random.random((10, 8, 8, 3)).astype(np.uint8))\n\n        # add scalars\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3)\n\n\nclass TestPaviBackend(TestCase):\n\n    def test_pavi(self):\n        save_dir = 'tmp_dir'\n        exp_name = 'unit test'\n        vis_backend = PaviVisBackend(save_dir=save_dir, exp_name=exp_name)\n        with self.assertRaises(ImportError):\n            vis_backend._init_env()\n        sys.modules['pavi'] = MagicMock()\n        vis_backend._init_env()\n\n        exp = vis_backend.experiment\n        self.assertEqual(exp, vis_backend._pavi)\n\n        # add image\n        vis_backend.add_image(\n            name='add_img', image=np.random.random((8, 8, 3)).astype(np.uint8))\n\n        # add scalars\n        vis_backend.add_scalars(\n            scalar_dict=dict(lr=0.001, loss=torch.FloatTensor([0.693])),\n            step=3)\n\n\nclass TestWandbBackend(TestCase):\n\n    def test_wandb(self):\n        timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime(time.time()))\n\n        wandb_mock = MagicMock()\n        sys.modules['wandb'] = wandb_mock\n\n        vis_backend = WandbVisBackend(\n            save_dir=f'parent_dir/exp_name/{timestamp}/vis_data',\n            init_kwargs=dict(project='test_backend'))\n        # test save gif image\n        rgb_np = np.random.rand(11, 4, 4, 3).astype(np.uint8)\n        vis_backend.add_image('test_gif', rgb_np, n_skip=2)\n        vis_backend.add_image('test_gif', rgb_np, n_skip=1)\n\n        # test save rgb image\n        rgb_np = np.random.rand(4, 4, 3).astype(np.uint8)\n        vis_backend.add_image('test_rgb', rgb_np)\n\n        # test wandb backend with name\n        wandb_mock.reset_mock()\n        vis_backend = WandbVisBackend(\n            save_dir=f'parent_dir/exp_name/{timestamp}/vis_data',\n            init_kwargs=dict(project='test_backend', name='test_wandb'))\n        vis_backend._init_env()\n        _, called_kwargs = wandb_mock.init.call_args\n        self.assertEqual(called_kwargs['name'], f'test_wandb_{timestamp}')\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tests/test_visualization/test_visualizer.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os.path as osp\nimport shutil\nfrom unittest import TestCase\n\nimport torch\n\nfrom mmagic.structures import DataSample\nfrom mmagic.utils import register_all_modules\nfrom mmagic.visualization import Visualizer\n\nregister_all_modules()\n\n\nclass TestGenVisualer(TestCase):\n\n    def test_add_datasample(self):\n        visualizer = Visualizer(\n            save_dir='tmp_dir', vis_backends=[dict(type='VisBackend')])\n\n        img_root = osp.join('tmp_dir', 'vis_data', 'vis_image')\n        # construct gen sample to vis\n        gen_sample = [\n            DataSample(\n                fake_img=torch.randn(3, 16, 16),\n                gt_img=torch.randn(1, 16, 16),\n                ema=DataSample(fake_img=torch.randn(10, 3, 16, 16)),\n                gif=torch.randn(10, 3, 16, 16),\n                something=DataSample(\n                    new=DataSample(img=torch.randn(3, 16, 16))))\n            for _ in range(3)\n        ]\n        visualizer.add_datasample(\n            name='fake_img',\n            gen_samples=gen_sample,\n            target_mean=None,\n            target_std=None,\n            target_keys=['fake_img', 'gt_img'],\n            step=0)\n        osp.exists(osp.join(img_root, 'fake_img_0.png'))\n\n        visualizer.add_datasample(\n            name='target_is_none',\n            gen_samples=gen_sample,\n            target_mean=None,\n            target_std=None,\n            step=1)\n        osp.exists(osp.join(img_root, 'target_is_none_1.png'))\n\n        visualizer.add_datasample(\n            name='target_is_none_gif',\n            gen_samples=gen_sample,\n            target_mean=None,\n            target_std=None,\n            vis_mode='gif',\n            step=2)\n        osp.exists(osp.join(img_root, 'target_is_none_gif_2.gif'))\n\n        visualizer.add_datasample(\n            name='something',\n            gen_samples=gen_sample,\n            n_row=3,\n            target_keys='something.new',\n            step=3)\n        osp.exists(osp.join(img_root, 'something_3.png'))\n\n        visualizer.add_datasample(\n            name='ema_padding',\n            gen_samples=gen_sample,\n            n_row=2,\n            color_order='rgb',\n            target_keys='ema',\n            vis_mode='gif',\n            step=4)\n        osp.exists(osp.join(img_root, 'emd_padding_4.gif'))\n\n        visualizer.add_datasample(\n            name='fake_img_padding',\n            gen_samples=gen_sample,\n            target_mean=None,\n            target_std=None,\n            target_keys=['fake_img', 'gt_img'],\n            n_row=4,\n            step=5)\n        osp.exists(osp.join(img_root, 'fake_img_padding_5.png'))\n\n        shutil.rmtree(img_root)\n\n\ndef teardown_module():\n    import gc\n    gc.collect()\n    globals().clear()\n    locals().clear()\n"
  },
  {
    "path": "tools/analysis_tools/get_flops.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\n\nimport torch\nfrom mmengine import Config\nfrom mmengine.registry import init_default_scope\n\nfrom mmagic.registry import MODELS\n\ntry:\n    from mmengine.analysis import get_model_complexity_info\nexcept ImportError:\n    raise ImportError('Please upgrade mmengine >= 0.6.0')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Get a editor complexity',\n        formatter_class=argparse.RawTextHelpFormatter)\n    parser.add_argument('config', help='train config file path')\n    parser.add_argument(\n        '--shape',\n        type=int,\n        nargs='+',\n        default=[3, 250, 250],\n        help='Input shape. Supported tasks:\\n'\n        'Image Super-Resolution: --shape 3 h w\\n'\n        'Video Super-Resolution: --shape t 3 h w\\n'\n        'Video Interpolation: --shape t 3 h w\\n'\n        'Image Restoration: --shape 3 h w\\n'\n        'Inpainting: --shape 4 h w\\n'\n        'Matting: --shape 4 h w\\n'\n        'Unconditional GANs: --shape noisy_size\\n'\n        'Image Translation: --shape 3 h w')\n    parser.add_argument(\n        '--activations',\n        action='store_true',\n        help='Whether to show the Activations')\n    parser.add_argument(\n        '--out-table',\n        action='store_true',\n        help='Whether to show the complexity table')\n    parser.add_argument(\n        '--out-arch',\n        action='store_true',\n        help='Whether to show the complexity arch')\n    args = parser.parse_args()\n    return args\n\n\ndef main():\n    \"\"\"\n    Examples:\n\n    Image Super-Resolution:\n    `python tools/analysis_tools/get_flops.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py --shape 3 250 250` # noqa\n\n    Video Super-Resolution:\n    `python tools/analysis_tools/get_flops.py configs/edvr/edvrm_8xb4-600k_reds.py --shape 5 3 256 256` # noqa\n\n    Video Interpolation:\n    `python tools/analysis_tools/get_flops.py configs/flavr/flavr_in4out1_8xb4_vimeo90k-septuplet.py --shape 4 3 64 64` # noqa\n\n    Image Restoration:\n    `python tools/analysis_tools/get_flops.py configs/nafnet/nafnet_c64eb11128mb1db1111_8xb8-lr1e-3-400k_gopro.py --shape 3 128 128` # noqa\n\n    Inpainting:\n    `python tools/analysis_tools/get_flops.py configs/aot_gan/aot-gan_smpgan_4xb4_places-512x512.py --shape 4 64 64` # noqa\n\n    Matting:\n    `python tools/analysis_tools/get_flops.py configs/dim/dim_stage1-v16_1xb1-1000k_comp1k.py --shape 4 256 256` # noqa\n\n    Unconditional GANs:\n    `python tools/analysis_tools/get_flops.py configs/wgan-gp/wgangp_GN_1xb64-160kiters_celeba-cropped-128x128.py --shape 128` # noqa\n\n    Image Translation:\n    `python tools/analysis_tools/get_flops.py configs/cyclegan/cyclegan_lsgan-id0-resnet-in_1xb1-250kiters_summer2winter.py --shape 3 250 250`\n    \"\"\"\n\n    args = parse_args()\n\n    input_shape = tuple(args.shape)\n\n    cfg = Config.fromfile(args.config)\n\n    init_default_scope(cfg.get('default_scope', 'mmagic'))\n\n    model = MODELS.build(cfg.model)\n    inputs = torch.randn(1, *input_shape)\n    if torch.cuda.is_available():\n        model.cuda()\n        inputs = inputs.cuda()\n    model.eval()\n\n    if hasattr(model, 'generator'):\n        model = model.generator\n    elif hasattr(model, 'backbone'):\n        model = model.backbone\n    if hasattr(model, 'translation'):\n        model.forward = model.translation\n    elif hasattr(model, 'infer'):\n        model.forward = model.infer\n\n    analysis_results = get_model_complexity_info(model, inputs=inputs)\n    flops = analysis_results['flops_str']\n    params = analysis_results['params_str']\n    activations = analysis_results['activations_str']\n\n    split_line = '=' * 30\n    print(f'{split_line}\\nInput shape: {input_shape}\\n'\n          f'Flops: {flops}\\nParams: {params}\\n{split_line}\\n')\n    if args.activations:\n        print(f'Activations: {activations}\\n{split_line}\\n')\n    if args.out_table:\n        print(analysis_results['out_table'], '\\n')\n    if args.out_arch:\n        print(analysis_results['out_arch'], '\\n')\n\n    if len(input_shape) == 4:\n        print('!!!If your network computes N frames in one forward pass, you '\n              'may want to divide the FLOPs by N to get the average FLOPs '\n              'for each frame.')\n    print('!!!Please be cautious if you use the results in papers. '\n          'You may need to check if all ops are supported and verify that the '\n          'flops computation is correct.')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/analysis_tools/print_config.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\n\nfrom mmengine import Config, DictAction\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Print the whole config')\n    parser.add_argument('config', help='config file path')\n    parser.add_argument(\n        '--cfg-options',\n        nargs='+',\n        action=DictAction,\n        help='override some settings in the used config, the key-value pair '\n        'in xxx=yyy format will be merged into config file. If the value to '\n        'be overwritten is a list, it should be like key=\"[a,b]\" or key=a,b '\n        'It also allows nested list/tuple values, e.g. key=\"[(a,b),(c,d)]\" '\n        'Note that the quotation marks are necessary and that no white space '\n        'is allowed.')\n    args = parser.parse_args()\n\n    return args\n\n\ndef main():\n    args = parse_args()\n\n    cfg = Config.fromfile(args.config)\n    if args.cfg_options is not None:\n        cfg.merge_from_dict(args.cfg_options)\n    print(f'Config:\\n{cfg.pretty_text}')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/cpu_train.sh",
    "content": "#!/usr/bin/env bash\n\nCONFIG=$1\nGPUS=$2\nNNODES=${NNODES:-1}\nNODE_RANK=${NODE_RANK:-0}\nPORT=${PORT:-29500}\nMASTER_ADDR=${MASTER_ADDR:-\"127.0.0.1\"}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\npython $(dirname \"$0\")/train.py \\\n    $CONFIG \\\n    --launcher none ${@:3}\n"
  },
  {
    "path": "tools/dataset_converters/bgm/preprocess_bgm_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nfrom itertools import cycle\n\nimport mmengine\n\n\ndef generate_json(data_root, seg_root, bg_root, all_data):\n    \"\"\"Generate training json list for Background Matting video dataset.\n\n    Args:\n        data_root (str): Background Matting video data root.\n        seg_root (str): Segmentation of Background Matting video data root.\n        bg_root (str): Background video data root.\n        all_data (bool): Whether use the last 80 frames of each video. If True,\n            the last 80 frames will be added to training json. In the original\n            Background Matting github repo, due to the use of motion cue, the\n            last 80 frames is not used.\n    \"\"\"\n    # use fixed-camera data to train the Background Matting model\n    video_root = osp.join(data_root, 'fixed-camera/train')\n    if seg_root is None:\n        seg_root = video_root\n    if bg_root is None:\n        bg_root = osp.join(data_root, 'background')\n\n    video_dirs = [\n        entry for entry in os.listdir(video_root)\n        if osp.isdir(osp.join(video_root, entry))\n    ]\n    bg_dirs = [\n        entry for entry in os.listdir(bg_root)\n        if osp.isdir(osp.join(bg_root, entry))\n    ]\n\n    # create an iterator that loops over all the background video frames\n    bg_frames = []\n    for bg_dir in bg_dirs:\n        bg_frames.extend([\n            osp.join(bg_root, bg_dir, f)\n            for f in sorted(mmengine.scandir(osp.join(bg_root, bg_dir)))\n        ])\n    bg_stream = cycle(bg_frames)\n\n    data_infos = []\n\n    for video_dir in video_dirs:\n        video_full_path = osp.join(video_root, video_dir)\n        seg_full_path = osp.join(seg_root, video_dir)\n        num_frames = len(\n            list(mmengine.scandir(video_full_path, suffix='_img.png')))\n        # In the original Background Matting github repo, the\n        # last 80 frames is not used.\n        effective_frames = num_frames if all_data else num_frames - 80\n        for i in range(1, effective_frames + 1):\n            # Though it's not composited, to be consistent with adobe data,\n            # we call the captured image `merged`.\n            # Since background video may not be under the same directory as\n            # the Background Matting video data, we use full path in Background\n            # Matting dataset annotation file.\n            merged = osp.join(video_full_path, f'{i:04d}_img.png')\n            seg = osp.join(seg_full_path, f'{i:04d}_masksDL.png')\n            bg = video_full_path + '.png'\n            bg_sup = next(bg_stream)\n            data_info = dict(\n                merged_path=merged,\n                seg_path=seg,\n                bg_path=bg,\n                bg_sup_path=bg_sup)\n            data_infos.append(data_info)\n    save_json_path = 'fixed_camera_train.json'\n    mmengine.dump(data_infos, osp.join(data_root, save_json_path))\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare Background Matting video dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('data_root', help='Background Matting video data root')\n    parser.add_argument(\n        '--seg-root',\n        help='Segmentation of Background Matting video data root. If not '\n        'specified, it will be considered segmentation results are placed in '\n        'the video frames folder just as the original repo.')\n    parser.add_argument(\n        '--bg-root',\n        help='Background video data root. If not specified, it will use the '\n        'three background videos in the Captured_Data folder.')\n    parser.add_argument(\n        '--all-data',\n        action='store_true',\n        help='Also use the last 80 frames of each video')\n    return parser.parse_args()\n\n\ndef main():\n    args = parse_args()\n    if not osp.exists(args.data_root):\n        raise FileNotFoundError(f'{args.data_root} does not exist!')\n\n    print('generating Background Matting dataset annotation file...')\n    generate_json(args.data_root, args.seg_root, args.bg_root, args.all_data)\n    print('annotation file generated...')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/dataset_converters/celeba-hq/README.md",
    "content": "# Preparing CelebA-HQ Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{karras2017progressive,\n  title={Progressive growing of gans for improved quality, stability, and variation},\n  author={Karras, Tero and Aila, Timo and Laine, Samuli and Lehtinen, Jaakko},\n  journal={arXiv preprint arXiv:1710.10196},\n  year={2017}\n}\n```\n\nFollow the instructions [here](https://github.com/tkarras/progressive_growing_of_gans#preparing-datasets-for-training) to prepare the dataset.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── CelebA-HQ\n│   │   ├── train_256\n|   |   ├── test_256\n|   |   ├── train_celeba_img_list.txt\n|   |   ├── val_celeba_img_list.txt\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/celeba-hq/README_zh-CN.md",
    "content": "# 准备 CelebA-HQ 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{karras2017progressive,\n  title={Progressive growing of gans for improved quality, stability, and variation},\n  author={Karras, Tero and Aila, Timo and Laine, Samuli and Lehtinen, Jaakko},\n  journal={arXiv preprint arXiv:1710.10196},\n  year={2017}\n}\n```\n\n请按照[此处](https://github.com/tkarras/progressive_growing_of_gans#preparing-datasets-for-training)准备数据集。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── CelebA-HQ\n│   │   ├── train_256\n|   |   ├── test_256\n|   |   ├── train_celeba_img_list.txt\n|   |   ├── val_celeba_img_list.txt\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/classic5/README.md",
    "content": "# Preparing Classic5 Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{zhang2017beyond,\n  title={Beyond a {Gaussian} denoiser: Residual learning of deep {CNN} for image denoising},\n  author={Zhang, Kai and Zuo, Wangmeng and Chen, Yunjin and Meng, Deyu and Zhang, Lei},\n  journal={IEEE Transactions on Image Processing},\n  year={2017},\n  volume={26},\n  number={7},\n  pages={3142-3155},\n}\n```\n\nThe test datasets can be download from [here](https://github.com/cszn/DnCNN/tree/master/testsets).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── Classic5\n```\n"
  },
  {
    "path": "tools/dataset_converters/classic5/README_zh-CN.md",
    "content": "# 准备 Classic5 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{zhang2017beyond,\n  title={Beyond a {Gaussian} denoiser: Residual learning of deep {CNN} for image denoising},\n  author={Zhang, Kai and Zuo, Wangmeng and Chen, Yunjin and Meng, Deyu and Zhang, Lei},\n  journal={IEEE Transactions on Image Processing},\n  year={2017},\n  volume={26},\n  number={7},\n  pages={3142-3155},\n}\n```\n\n测试数据集可以从 [此处](https://github.com/cszn/DnCNN/tree/master/testsets) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── Classic5\n```\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/README.md",
    "content": "# Preparing Composition-1k Dataset\n\n## Introduction\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{xu2017deep,\n  title={Deep image matting},\n  author={Xu, Ning and Price, Brian and Cohen, Scott and Huang, Thomas},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2970--2979},\n  year={2017}\n}\n```\n\nThe Adobe Composition-1k dataset consists of foreground images and their corresponding alpha images.\nTo get the full dataset, one need to composite the foregrounds with selected backgrounds from the COCO dataset and the Pascal VOC dataset.\n\n## Obtain and Extract\n\nPlease follow the instructions of [paper authors](https://sites.google.com/view/deepimagematting) to obtain the Composition-1k (comp1k) dataset.\n\n## Composite the full dataset\n\nThe Adobe composition-1k dataset contains only `alpha` and `fg` (and `trimap` in test set).\nIt is needed to merge `fg` with COCO data (training) or VOC data (test) before training or evaluation.\nUse the following script to perform image composition and generate annotation files for training or testing:\n\n```shell\n# The script is run under the root folder of MMagic\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --composite\n```\n\nThe generated data is stored under `adobe_composition-1k/Training_set` and `adobe_composition-1k/Test_set` respectively.\nIf you only want to composite test data (since compositing training data is time-consuming), you can skip compositing the training set by removing the `--composite` option:\n\n```shell\n# skip compositing training set\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit\n```\n\nIf you only want to preprocess test data, i.e. for FBA, you can skip the train set by adding the `--skip-train` option:\n\n```shell\n# skip preprocessing training set\npython tools/data/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --skip-train\n```\n\n> Currently, `GCA` and `FBA` support online composition of training data. But you can modify the data pipeline of other models to perform online composition instead of loading composited images (we called it `merged` in our data pipeline).\n\n## Check Directory Structure for DIM\n\nThe result folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── adobe_composition-1k\n│   │   ├── Test_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── trimaps\n│   │   │   ├── merged  (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── Training_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   ├── Other\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   ├── merged  (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── test_list.json     (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── training_list.json (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   ├── coco\n│   │   ├── train2014   (or train2017)\n│   ├── VOCdevkit\n│   │   ├── VOC2012\n```\n\n## Prepare the dataset for FBA\n\nFBA adopts dynamic dataset augmentation proposed in [Learning-base Sampling for Natural Image Matting](https://openaccess.thecvf.com/content_CVPR_2019/papers/Tang_Learning-Based_Sampling_for_Natural_Image_Matting_CVPR_2019_paper.pdf).\nIn addition, to reduce artifacts during augmentation, it uses the extended version of foreground as foreground.\nWe provide scripts to estimate foregrounds.\n\nPrepare the test set as follows:\n\n```shell\n# skip preprocessing training set, as it composites online during training\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --skip-train\n```\n\nExtend the foreground of training set as follows:\n\n```shell\npython tools/dataset_converters/matting/comp1k/extend_fg.py data/adobe_composition-1k\n```\n\n## Check Directory Structure for DIM\n\nThe final folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── adobe_composition-1k\n│   │   ├── Test_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── trimaps\n│   │   │   ├── merged  (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── Training_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── fg_extended (generated by tools/data/matting/comp1k/extend_fg.py)\n│   │   │   ├── Other\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── fg_extended (generated by tools/data/matting/comp1k/extend_fg.py)\n│   │   ├── test_list.json         (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── training_list_fba.json (generated by tools/data/matting/comp1k/extend_fg.py)\n│   ├── coco\n│   │   ├── train2014   (or train2017)\n│   ├── VOCdevkit\n│   │   ├── VOC2012\n```\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/README_zh-CN.md",
    "content": "# 准备 Composition-1k 数据集\n\n## 介绍\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{xu2017deep,\n  title={Deep image matting},\n  author={Xu, Ning and Price, Brian and Cohen, Scott and Huang, Thomas},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2970--2979},\n  year={2017}\n}\n```\n\nAdobe Composition-1k 数据集由前景图像及其相应的 alpha 图像组成。要获得完整的数据集，需要将前景与来自 COCO 数据集和 Pascal VOC 数据集的选定背景进行合成。\n\n## 获取和提取\n\n请按照 [论文作者](https://sites.google.com/view/deepimagematting) 的说明获取 Composition-1k (comp1k) 数据集。\n\n## 合成完整数据集\n\nAdobe composition-1k 数据集仅包含 `alpha` 和 `fg`（以及测试集中的 `trimap`）。在训练或评估之前，需要将 `fg` 与 COCO 数据（训练）或 VOC 数据（测试）合并。使用以下脚本执行图像合成并生成用于训练或测试的注释文件：\n\n```shell\n# 在 MMagic 的根文件夹下运行脚本\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --composite\n```\n\n生成的数据分别存储在 “adobe_composition-1k/Training_set” 和 “adobe_composition-1k/Test_set” 下。如果你只想合成测试数据（因为合成训练数据很耗时），你可以通过删除 `--composite` 选项来跳过合成训练集：\n\n```shell\n# 跳过合成训练集\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit\n```\n\n如果您只想预处理测试数据，即对于 FBA，您可以通过添加 `--skip-train` 选项来跳过训练集：\n\n```shell\n# 跳过预处理训练集\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --skip-train\n```\n\n> 目前，`GCA` 和 `FBA` 支持在线合成训练数据。但是你可以修改其他模型的数据管道来执行在线合成，而不是加载合成图像（我们在数据管道中称之为“合并”）。\n\n## 检查 DIM 的目录结构\n\n最终的文件夹结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── adobe_composition-1k\n│   │   ├── Test_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── trimaps\n│   │   │   ├── merged  (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── Training_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   ├── Other\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   ├── merged  (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── test_list.json     (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── training_list.json (generated by tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py)\n│   ├── coco\n│   │   ├── train2014   (or train2017)\n│   ├── VOCdevkit\n│   │   ├── VOC2012\n```\n\n## 为 FBA 准备数据集\n\nFBA采用 [Learning-base Sampling for Natural Image Matting](https://openaccess.thecvf.com/content_CVPR_2019/papers/Tang_Learning-Based_Sampling_for_Natural_Image_Matting_CVPR_2019_paper.pdf) 中提出的动态数据集增强。此外，为了减少增强过程中的伪影，它使用前景的扩展版本作为前景。我们提供脚本来估计前景。\n\n准备测试集：\n\n```shell\n# 跳过预处理训练集，因为它在训练期间在线合成\npython tools/dataset_converters/matting/comp1k/preprocess_comp1k_dataset.py data/adobe_composition-1k data/coco data/VOCdevkit --skip-train\n```\n\n扩展训练集的前景：\n\n```shell\npython tools/dataset_converters/matting/comp1k/extend_fg.py data/adobe_composition-1k\n```\n\n## 检查 DIM 的目录结构\n\n最终的文件夹结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── adobe_composition-1k\n│   │   ├── Test_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── trimaps\n│   │   │   ├── merged  (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   │   ├── bg      (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── Training_set\n│   │   │   ├── Adobe-licensed images\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── fg_extended (generated by tools/data/matting/comp1k/extend_fg.py)\n│   │   │   ├── Other\n│   │   │   │   ├── alpha\n│   │   │   │   ├── fg\n│   │   │   │   ├── fg_extended (generated by tools/data/matting/comp1k/extend_fg.py)\n│   │   ├── test_list.json         (generated by tools/data/matting/comp1k/preprocess_comp1k_dataset.py)\n│   │   ├── training_list_fba.json (generated by tools/data/matting/comp1k/extend_fg.py)\n│   ├── coco\n│   │   ├── train2014   (or train2017)\n│   ├── VOCdevkit\n│   │   ├── VOC2012\n```\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/check_extended_fg.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) OpenMMLab. All rights reserved.\n# This script checks the alpha-foreground difference between\n# the extended fg and the original fg\n\nimport glob\nimport os\nimport os.path as osp\n\nimport cv2\nimport numpy as np\n\nfolder = 'data/adobe_composition-1k/Training_set/Adobe-licensed images'\nfolder = osp.join(folder.split('/'))\nimgs = [\n    os.path.splitext(os.path.basename(x))[0]\n    for x in glob.glob(osp.join(folder, 'fg', '*.jpg'))\n]\n\nprint('max,avg,img')\nfor name in imgs:\n    alpha = cv2.imread(\n        osp.join(folder, 'alpha', '*.jpg'), cv2.IMREAD_GRAYSCALE).astype(\n            np.float32)[..., None] / 255\n    fg = cv2.imread(osp.join(folder, 'fg', f'{name}.jpg')).astype(np.float32)\n    xt = cv2.imread(osp.join(folder, 'fg_extended',\n                             f'{name}.jpg')).astype(np.float32)\n    diff = np.abs((fg - xt) * alpha)\n    print(f'{diff.max()},{diff.mean()},\"{name}\"', flush=True)\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/evaluate_comp1k.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os.path as osp\nimport re\n\nimport cv2\nimport mmcv\nimport mmengine\nimport numpy as np\n\nfrom mmagic.evaluation import gauss_gradient\nfrom mmagic.utils import modify_args\n\n\ndef sad(alpha, trimap, pred_alpha):\n    if alpha.ndim != 2 or trimap.ndim != 2 or pred_alpha.ndim != 2:\n        raise ValueError(\n            'input alpha, trimap and pred_alpha should has two dimensions, '\n            f'alpha {alpha.shape}, please check their shape: '\n            f'trimap {trimap.shape}, pred_alpha {pred_alpha.shape}')\n    assert (pred_alpha[trimap == 0] == 0).all()\n    assert (pred_alpha[trimap == 255] == 255).all()\n    alpha = alpha.astype(np.float64) / 255\n    pred_alpha = pred_alpha.astype(np.float64) / 255\n    sad_result = np.abs(pred_alpha - alpha).sum() / 1000\n    return sad_result\n\n\ndef mse(alpha, trimap, pred_alpha):\n    if alpha.ndim != 2 or trimap.ndim != 2 or pred_alpha.ndim != 2:\n        raise ValueError(\n            'input alpha, trimap and pred_alpha should has two dimensions, '\n            f'alpha {alpha.shape}, please check their shape: '\n            f'trimap {trimap.shape}, pred_alpha {pred_alpha.shape}')\n    assert (pred_alpha[trimap == 0] == 0).all()\n    assert (pred_alpha[trimap == 255] == 255).all()\n    alpha = alpha.astype(np.float64) / 255\n    pred_alpha = pred_alpha.astype(np.float64) / 255\n    weight_sum = (trimap == 128).sum()\n    if weight_sum != 0:\n        mse_result = ((pred_alpha - alpha)**2).sum() / weight_sum\n    else:\n        mse_result = 0\n    return mse_result\n\n\ndef gradient_error(alpha, trimap, pred_alpha, sigma=1.4):\n    \"\"\"Gradient error for evaluating alpha matte prediction.\n\n    Args:\n        alpha (ndarray): Ground-truth alpha matte.\n        trimap (ndarray): Input trimap with its value in {0, 128, 255}.\n        pred_alpha (ndarray): Predicted alpha matte.\n        sigma (float): Standard deviation of the gaussian kernel. Default: 1.4.\n    \"\"\"\n    if alpha.ndim != 2 or trimap.ndim != 2 or pred_alpha.ndim != 2:\n        raise ValueError(\n            'input alpha, trimap and pred_alpha should has two dimensions, '\n            f'alpha {alpha.shape}, please check their shape: '\n            f'trimap {trimap.shape}, pred_alpha {pred_alpha.shape}')\n    if not ((pred_alpha[trimap == 0] == 0).all() and\n            (pred_alpha[trimap == 255] == 255).all()):\n        raise ValueError(\n            'pred_alpha should be masked by trimap before evaluation')\n    alpha = alpha.astype(np.float64)\n    pred_alpha = pred_alpha.astype(np.float64)\n    alpha_normed = np.zeros_like(alpha)\n    pred_alpha_normed = np.zeros_like(pred_alpha)\n    cv2.normalize(alpha, alpha_normed, 1., 0., cv2.NORM_MINMAX)\n    cv2.normalize(pred_alpha, pred_alpha_normed, 1., 0., cv2.NORM_MINMAX)\n\n    alpha_grad = gauss_gradient(alpha_normed, sigma).astype(np.float32)\n    pred_alpha_grad = gauss_gradient(pred_alpha_normed,\n                                     sigma).astype(np.float32)\n\n    grad_loss = ((alpha_grad - pred_alpha_grad)**2 * (trimap == 128)).sum()\n    # same as SAD, divide by 1000 to reduce the magnitude of the result\n    return grad_loss / 1000\n\n\ndef connectivity(alpha, trimap, pred_alpha, step=0.1):\n    \"\"\"Connectivity error for evaluating alpha matte prediction.\n\n    Args:\n        alpha (ndarray): Ground-truth alpha matte with shape (height, width).\n            Value range of alpha is [0, 255].\n        trimap (ndarray): Input trimap with shape (height, width). Elements\n            in trimap are one of {0, 128, 255}.\n        pred_alpha (ndarray): Predicted alpha matte with shape (height, width).\n            Value range of pred_alpha is [0, 255].\n        step (float): Step of threshold when computing intersection between\n            `alpha` and `pred_alpha`.\n    \"\"\"\n    if alpha.ndim != 2 or trimap.ndim != 2 or pred_alpha.ndim != 2:\n        raise ValueError(\n            'input alpha, trimap and pred_alpha should has two dimensions, '\n            f'alpha {alpha.shape}, please check their shape: '\n            f'trimap {trimap.shape}, pred_alpha {pred_alpha.shape}')\n    if not ((pred_alpha[trimap == 0] == 0).all() and\n            (pred_alpha[trimap == 255] == 255).all()):\n        raise ValueError(\n            'pred_alpha should be masked by trimap before evaluation')\n    alpha = alpha.astype(np.float32) / 255\n    pred_alpha = pred_alpha.astype(np.float32) / 255\n\n    thresh_steps = np.arange(0, 1 + step, step)\n    round_down_map = -np.ones_like(alpha)\n    for i in range(1, len(thresh_steps)):\n        alpha_thresh = alpha >= thresh_steps[i]\n        pred_alpha_thresh = pred_alpha >= thresh_steps[i]\n        intersection = (alpha_thresh & pred_alpha_thresh).astype(np.uint8)\n\n        # connected components\n        _, output, stats, _ = cv2.connectedComponentsWithStats(\n            intersection, connectivity=4)\n        # start from 1 in dim 0 to exclude background\n        size = stats[1:, -1]\n\n        # largest connected component of the intersection\n        omega = np.zeros_like(alpha)\n        if len(size) != 0:\n            max_id = np.argmax(size)\n            # plus one to include background\n            omega[output == max_id + 1] = 1\n\n        mask = (round_down_map == -1) & (omega == 0)\n        round_down_map[mask] = thresh_steps[i - 1]\n    round_down_map[round_down_map == -1] = 1\n\n    alpha_diff = alpha - round_down_map\n    pred_alpha_diff = pred_alpha - round_down_map\n    # only calculate difference larger than or equal to 0.15\n    alpha_phi = 1 - alpha_diff * (alpha_diff >= 0.15)\n    pred_alpha_phi = 1 - pred_alpha_diff * (pred_alpha_diff >= 0.15)\n\n    connectivity_error = np.sum(\n        np.abs(alpha_phi - pred_alpha_phi) * (trimap == 128))\n    # same as SAD, divide by 1000 to reduce the magnitude of the result\n    return connectivity_error / 1000\n\n\ndef evaluate_one(args):\n    \"\"\"Function to evaluate one sample of data.\n\n    Args:\n        args (tuple): Information needed to evaluate one sample of data.\n\n    Returns:\n        dict: The evaluation results including sad, mse, gradient error and\n            connectivity error.\n    \"\"\"\n    pred_alpha_path, alpha_path, trimap_path = args\n    pred_alpha = mmcv.imread(pred_alpha_path, flag='grayscale')\n    alpha = mmcv.imread(alpha_path, flag='grayscale')\n    if trimap_path is None:\n        trimap = np.ones_like(alpha)\n    else:\n        trimap = mmcv.imread(trimap_path, flag='grayscale')\n    sad_result = sad(alpha, trimap, pred_alpha)\n    mse_result = mse(alpha, trimap, pred_alpha)\n    grad_result = gradient_error(alpha, trimap, pred_alpha)\n    conn_result = connectivity(alpha, trimap, pred_alpha)\n    return (sad_result, mse_result, grad_result, conn_result)\n\n\ndef evaluate(pred_root, gt_root, trimap_root, verbose, nproc):\n    \"\"\"Evaluate test results of Adobe composition-1k dataset.\n\n    There are 50 different ground truth foregrounds and alpha mattes pairs,\n    each of the foreground will be composited with 20 different backgrounds,\n    producing 1000 images for testing. In some repo, the ground truth alpha\n    matte will be copied 20 times and named the same as the images. This\n    function accept both original alpha matte folder (contains 50 ground\n    truth alpha mattes) and copied alpha matte folder (contains 1000 ground\n    truth alpha mattes) for `gt_root`.\n\n    Example of copied name:\n    ```\n    alpha_matte1.png -> alpha_matte1_0.png\n                        alpha_matte1_1.png\n                        ...\n                        alpha_matte1_19.png\n                        alpha_matte1_20.png\n    ```\n\n    Args:\n        pred_root (str): Path to the predicted alpha matte folder.\n        gt_root (str): Path to the ground truth alpha matte folder.\n        trimap_root (str): Path to the predicted alpha matte folder.\n        verbose (bool): Whether print result for each predicted alpha matte.\n        nproc (int): number of processes.\n    \"\"\"\n\n    images = sorted(mmengine.scandir(pred_root))\n    gt_files_num = len(list(mmengine.scandir(gt_root)))\n    # If ground truth alpha mattes are not copied (number of files is 50), we\n    # use the below pattern to recover the name of the original alpha matte.\n    if gt_files_num == 50:\n        pattern = re.compile(r'(.+)_(?:\\d+)(.png)')\n    pairs = []\n    for img in images:\n        pred_alpha_path = osp.join(pred_root, img)\n        # if ground truth alpha matte are not copied, recover the original name\n        if gt_files_num == 50:\n            groups = pattern.match(img).groups()\n            alpha_path = osp.join(gt_root, ''.join(groups))\n        # if ground truth alpha matte are copied, the name should be the same\n        else:  # gt_files_num == 1000\n            alpha_path = osp.join(gt_root, img)\n        trimap_path = (\n            osp.join(trimap_root, img) if trimap_root is not None else None)\n        pairs.append((pred_alpha_path, alpha_path, trimap_path))\n\n    results = mmengine.track_parallel_progress(evaluate_one, pairs, nproc)\n\n    if verbose:\n        # for sad_result, mse_result, grad_result, conn_result in results:\n        for i, img in enumerate(images):\n            sad_result, mse_result, grad_result, conn_result = results[i]\n            print(f'{img} SAD: {sad_result:.6g} MattingMSE: {mse_result:.6g} '\n                  f'GRAD: {grad_result:.6g} CONN: {conn_result:.6g}')\n\n    sad_mean, mse_mean, grad_mean, conn_mean = np.mean(results, axis=0)\n    print(f'MEAN:  SAD: {sad_mean:.6g} MattingMSE: {mse_mean:.6g} '\n          f'GRAD: {grad_mean:.6g} CONN: {conn_mean:.6g}')\n\n\ndef parse_args():\n    modify_args()\n    parser = argparse.ArgumentParser(\n        description='evaluate composition-1k prediction result')\n    parser.add_argument(\n        'pred_root', help='Path to the predicted alpha matte folder')\n    parser.add_argument(\n        'gt_root', help='Path to the ground truth alpha matte folder')\n    parser.add_argument(\n        '--trimap-root',\n        help='Path to trimap folder. If not specified, '\n        'results are calculated on the full image.')\n    parser.add_argument(\n        '-v',\n        '--verbose',\n        action='store_true',\n        help='Whether print result for each predicted alpha matte')\n    parser.add_argument(\n        '--nproc', type=int, default=4, help='number of processes')\n    return parser.parse_args()\n\n\ndef main():\n    args = parse_args()\n\n    if not osp.exists(args.pred_root):\n        raise FileNotFoundError(f'pred_root {args.pred_root} not found')\n    if not osp.exists(args.gt_root):\n        raise FileNotFoundError(f'gt_root {args.gt_root} not found')\n\n    evaluate(args.pred_root, args.gt_root, args.trimap_root, args.verbose,\n             args.nproc)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/extend_fg.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nimport re\nimport subprocess\n\nimport mmengine\nimport numpy as np\nfrom PIL import Image\nfrom pymatting import estimate_foreground_ml, load_image\n\n\ndef fix_png_file(filename, folder):\n    \"\"\"Fix png files in the target filename using pngfix.\n\n    pngfix is a tool to fix PNG files. It's installed on Linux or MacOS by\n    default.\n\n    Args:\n        filename (str): png file to run pngfix.\n    \"\"\"\n    subprocess.call(\n        f'pngfix --quiet --strip=color --prefix=fixed_ \"{filename}\"',\n        cwd=f'{folder}',\n        shell=True)\n    subprocess.call(\n        f'mv \"fixed_{filename}\" \"{filename}\"', cwd=f'{folder}', shell=True)\n\n\ndef join_first_contain(directories, filename, data_root):\n    \"\"\"Join the first directory that contains the file.\n\n    Args:\n        directories (list[str]): Directories to search for the file.\n        filename (str): The target filename.\n        data_root (str): Root of the data path.\n    \"\"\"\n    for directory in directories:\n        cur_path = osp.join(directory, filename)\n        if osp.exists(osp.join(data_root, cur_path)):\n            return cur_path\n    raise FileNotFoundError(f'Cannot find {filename} in dirs {directories}')\n\n\nclass ExtendFg:\n\n    def __init__(self, data_root, fg_dirs, alpha_dirs) -> None:\n        self.data_root = data_root\n        self.fg_dirs = fg_dirs\n        self.alpha_dirs = alpha_dirs\n\n    def extend(self, fg_name):\n        fg_name = fg_name.strip()\n        alpha_path = join_first_contain(self.alpha_dirs, fg_name,\n                                        self.data_root)\n        fg_path = join_first_contain(self.fg_dirs, fg_name, self.data_root)\n        alpha_path = osp.join(self.data_root, alpha_path)\n        fg_path = osp.join(self.data_root, fg_path)\n        extended_path = re.sub('/fg/', '/fg_extended/', fg_path)\n        extended_path = extended_path.replace('jpg', 'png')\n        if not osp.exists(alpha_path):\n            raise FileNotFoundError(f'{alpha_path} does not exist!')\n        if not osp.exists(fg_path):\n            raise FileNotFoundError(f'{fg_path} does not exist!')\n\n        image = load_image(fg_path, 'RGB')\n        alpha = load_image(alpha_path, 'GRAY')\n        F = estimate_foreground_ml(image, alpha, return_background=False)\n        fg = Image.fromarray(np.uint8(F * 255))\n        fg.save(extended_path)\n        fix_png_file(osp.basename(extended_path), osp.dirname(extended_path))\n        data_info = dict()\n        data_info['alpha_path'] = alpha_path\n        data_info['fg_path'] = extended_path\n        return data_info\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare Adobe composition 1k dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('data_root', help='Adobe composition 1k dataset root')\n    parser.add_argument(\n        '--nproc', type=int, default=4, help='number of processor')\n    args = parser.parse_args()\n    return args\n\n\ndef main():\n    args = parse_args()\n    if not osp.exists(args.data_root):\n        raise FileNotFoundError(f'{args.data_root} does not exist!')\n\n    data_root = args.data_root\n\n    print('preparing training data...')\n\n    dir_prefix = 'Training_set'\n    fname_prefix = 'training'\n    fg_dirs = [\n        'Training_set/Adobe-licensed images/fg', 'Training_set/Other/fg'\n    ]\n    alpha_dirs = [\n        'Training_set/Adobe-licensed images/alpha', 'Training_set/Other/alpha'\n    ]\n    extended_dirs = [\n        'Training_set/Adobe-licensed images/fg_extended',\n        'Training_set/Other/fg_extended'\n    ]\n    for p in extended_dirs:\n        p = osp.join(data_root, p)\n        os.makedirs(p, exist_ok=True)\n\n    fg_names = osp.join(dir_prefix, f'{fname_prefix}_fg_names.txt')\n    save_json_path = f'{fname_prefix}_list_fba.json'\n    fg_names = open(osp.join(data_root, fg_names)).readlines()\n    fg_iter = iter(fg_names)\n\n    extend_fg = ExtendFg(data_root, fg_dirs, alpha_dirs)\n    data_infos = mmengine.track_parallel_progress(extend_fg.extend,\n                                                  list(fg_iter), args.nproc)\n    mmengine.dump(data_infos, osp.join(data_root, save_json_path))\n\n    print('train done')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/filter_comp1k_anno.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os.path as osp\n\nimport mmengine\n\n\ndef generate_json(comp1k_json_path, target_list_path, save_json_path):\n    data_infos = mmengine.load(comp1k_json_path)\n    targets = mmengine.list_from_file(target_list_path)\n    new_data_infos = []\n    for data_info in data_infos:\n        for target in targets:\n            if data_info['alpha_path'].endswith(target):\n                new_data_infos.append(data_info)\n                break\n\n    mmengine.dump(new_data_infos, save_json_path)\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Filter composition-1k annotation file')\n    parser.add_argument(\n        'comp1k_json_path',\n        help='Path to the composition-1k dataset annotation file')\n    parser.add_argument(\n        'target_list_path',\n        help='Path to the file name list that need to filter out')\n    parser.add_argument(\n        'save_json_path', help='Path to save the result json file')\n    return parser.parse_args()\n\n\ndef main():\n    args = parse_args()\n\n    if not osp.exists(args.comp1k_json_path):\n        raise FileNotFoundError(f'{args.comp1k_json_path} does not exist!')\n    if not osp.exists(args.target_list_path):\n        raise FileNotFoundError(f'{args.target_list_path} does not exist!')\n\n    generate_json(args.comp1k_json_path, args.target_list_path,\n                  args.save_json_path)\n\n    print('Done!')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/dataset_converters/comp1k/preprocess_comp1k_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport math\nimport os.path as osp\nimport subprocess\nfrom itertools import chain, repeat\n\nimport mmengine\nimport numpy as np\nfrom PIL import Image\n\nfrom mmagic.utils import modify_args\n\n\ndef fix_png_files(directory):\n    \"\"\"Fix png files in the target directory using pngfix.\n\n    pngfix is a tool to fix PNG files. It's installed on Linux or MacOS by\n    default.\n\n    Args:\n        directory (str): Directory to run pngfix.\n    \"\"\"\n    subprocess.call(\n        'pngfix --quiet --strip=color --prefix=fixed_ *.png',\n        cwd=f'{directory}',\n        shell=True)\n    subprocess.call(\n        'for fixed_f in fixed_*; do mv \"$fixed_f\" \"${fixed_f:6}\"; done',\n        cwd=f'{directory}',\n        shell=True)\n\n\ndef fix_png_file(filename, folder):\n    \"\"\"Fix png files in the target filename using pngfix.\n\n    pngfix is a tool to fix PNG files. It's installed on Linux or MacOS by\n    default.\n\n    Args:\n        filename (str): png file to run pngfix.\n    \"\"\"\n    subprocess.call(\n        f'pngfix --quiet --strip=color --prefix=fixed_ \"{filename}\"',\n        cwd=f'{folder}',\n        shell=True)\n    subprocess.call(\n        f'mv \"fixed_{filename}\" \"{filename}\"', cwd=f'{folder}', shell=True)\n\n\ndef join_first_contain(directories, filename, data_root):\n    \"\"\"Join the first directory that contains the file.\n\n    Args:\n        directories (list[str]): Directories to search for the file.\n        filename (str): The target filename.\n        data_root (str): Root of the data path.\n    \"\"\"\n    for directory in directories:\n        cur_path = osp.join(directory, filename)\n        if osp.exists(osp.join(data_root, cur_path)):\n            return cur_path\n    raise FileNotFoundError(f'Cannot find {filename} in dirs {directories}')\n\n\ndef get_data_info(args):\n    \"\"\"Function to process one piece of data.\n\n    Args:\n        args (tuple): Information needed to process one piece of data.\n\n    Returns:\n        dict: The processed data info.\n    \"\"\"\n    name_with_postfix, source_bg_path, repeat_info, constant = args\n    alpha, fg, alpha_path, fg_path = repeat_info\n    data_root, composite, mode = constant\n\n    if mode == 'training':\n        dir_prefix = 'Training_set'\n        trimap_dir = None\n    elif mode == 'test':\n        dir_prefix = 'Test_set'\n        trimap_dir = 'Test_set/Adobe-licensed images/trimaps'\n    else:\n        raise KeyError(f'Unknown mode {mode}.')\n    bg_path = osp.join(dir_prefix, 'bg',\n                       name_with_postfix).replace('.jpg', '.png')\n    merged_path = osp.join(dir_prefix, 'merged',\n                           name_with_postfix).replace('.jpg', '.png')\n\n    if not osp.exists(source_bg_path):\n        raise FileNotFoundError(f'{source_bg_path} does not exist!')\n    try:\n        bg = Image.open(source_bg_path).convert('RGB')\n    except Exception as ex:\n        data_info = {\n            'alpha_path': alpha_path,\n            'fg_path': fg_path,\n            'bg_path': bg_path\n        }\n        print('err in ', data_info, ex)\n        return data_info\n    bw, bh = bg.size\n    w, h = fg.size\n\n    # rescale and crop bg\n    wratio = float(w) / bw\n    hratio = float(h) / bh\n    ratio = wratio if wratio > hratio else hratio\n    if ratio > 1:\n        bg = bg.resize((math.ceil(bw * ratio), math.ceil(bh * ratio)),\n                       Image.BICUBIC)\n    bg = bg.crop((0, 0, w, h))\n\n    # save cropped bg and merged\n    mmengine.utils.mkdir_or_exist(osp.join(data_root, dir_prefix, 'bg'))\n    bgfilename = osp.join(data_root, bg_path)\n    bg.save(bgfilename, 'PNG')\n    fix_png_file(osp.basename(bgfilename), osp.dirname(bgfilename))\n    if composite:\n        merged = (fg * alpha + bg * (1. - alpha)).astype(np.uint8)\n        mmengine.utils.mkdir_or_exist(\n            osp.join(data_root, dir_prefix, 'merged'))\n        mergedfilename = osp.join(data_root, merged_path)\n        Image.fromarray(merged).save(mergedfilename, 'PNG')\n        fix_png_file(osp.basename(mergedfilename), osp.dirname(mergedfilename))\n\n    data_info = dict()\n    data_info['alpha_path'] = alpha_path\n    data_info['fg_path'] = fg_path\n    data_info['bg_path'] = bg_path\n    data_info['merged_path'] = merged_path\n    if trimap_dir is not None:\n        trimap_path = osp.join(trimap_dir, name_with_postfix)\n        trimap_full_path = osp.join(data_root, trimap_path)\n        if not osp.exists(trimap_full_path):\n            raise FileNotFoundError(f'{trimap_full_path} does not exist!')\n        data_info['trimap_path'] = trimap_path\n    return data_info\n\n\ndef generate_json(data_root, source_bg_dir, composite, nproc, mode):\n    \"\"\"Generate training json list or test json list.\n\n    It should be noted except for `source_bg_dir`, other strings are incomplete\n    relative path. When using these strings to read from or write to disk, a\n    data_root is added to form a complete relative path.\n\n    Args:\n        data_root (str): path to Adobe composition-1k directory.\n        source_bg_dir (str): source background directory.\n        composite (bool): whether composite fg with bg and write to file.\n        nproc (int): number of processes.\n        mode (str): training or test mode.\n    \"\"\"\n\n    if mode == 'training':\n        dir_prefix = 'Training_set'\n        fname_prefix = 'training'\n        num_bg = 100  # each training fg is composited with 100 bg\n        fg_dirs = [\n            'Training_set/Adobe-licensed images/fg', 'Training_set/Other/fg'\n        ]\n        alpha_dirs = [\n            'Training_set/Adobe-licensed images/alpha',\n            'Training_set/Other/alpha'\n        ]\n    elif mode == 'test':\n        dir_prefix = 'Test_set'\n        fname_prefix = 'test'\n        num_bg = 20  # each test fg is composited with 20 bg\n        fg_dirs = ['Test_set/Adobe-licensed images/fg']\n        alpha_dirs = ['Test_set/Adobe-licensed images/alpha']\n    else:\n        raise KeyError(f'Unknown mode {mode}.')\n    fg_names = osp.join(dir_prefix, f'{fname_prefix}_fg_names.txt')\n    bg_names = osp.join(dir_prefix, f'{fname_prefix}_bg_names.txt')\n    save_json_path = f'{fname_prefix}_list.json'\n\n    fg_names = open(osp.join(data_root, fg_names)).readlines()\n    bg_names = open(osp.join(data_root, bg_names)).readlines()\n    assert len(fg_names) * num_bg == len(bg_names)\n\n    repeat_infos = []\n    name_with_postfix = []\n    # repeat fg and alpha num_bg time\n    for fg_name in fg_names:\n        fg_name = fg_name.strip()\n        alpha_path = join_first_contain(alpha_dirs, fg_name, data_root)\n        fg_path = join_first_contain(fg_dirs, fg_name, data_root)\n        alpha_full_path = osp.join(data_root, alpha_path)\n        fg_full_path = osp.join(data_root, fg_path)\n        if not osp.exists(alpha_full_path):\n            raise FileNotFoundError(f'{alpha_full_path} does not exist!')\n        if not osp.exists(fg_full_path):\n            raise FileNotFoundError(f'{fg_full_path} does not exist!')\n        # to be consistent with DIM's composition code, use PIL to read images\n        fg = Image.open(fg_full_path).convert('RGB')\n        alpha = (\n            np.array(Image.open(alpha_full_path).convert('RGB')) /\n            255. if composite else None)\n        repeat_infos.append((alpha, fg, alpha_path, fg_path))\n\n        for bg_idx in range(num_bg):\n            name_with_postfix.append(fg_name[:-4] + '_' + str(bg_idx) +\n                                     fg_name[-4:])\n    repeat_infos = chain.from_iterable(\n        (repeat(repeat_info, num_bg) for repeat_info in repeat_infos))\n    source_bg_paths = []\n    for bg_name in bg_names:\n        bg_name = bg_name.strip()\n        # in coco_2017, image names do not begin with 'COCO_train2014_'\n        if '2017' in source_bg_dir:\n            bg_name = bg_name[15:]  # get rid of 'COCO_train2014_'\n        source_bg_paths.append(osp.join(source_bg_dir, bg_name))\n    constants = repeat((data_root, composite, mode), len(bg_names))\n\n    data_infos = mmengine.track_parallel_progress(\n        get_data_info,\n        list(zip(name_with_postfix, source_bg_paths, repeat_infos, constants)),\n        nproc)\n\n    mmengine.dump(data_infos, osp.join(data_root, save_json_path))\n\n\ndef parse_args():\n    modify_args()\n    parser = argparse.ArgumentParser(\n        description='Prepare Adobe composition 1k dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('data_root', help='Adobe composition 1k dataset root')\n    parser.add_argument('coco_root', help='COCO2014 or COCO2017 dataset root')\n    parser.add_argument('voc_root', help='VOCdevkit directory root')\n    parser.add_argument(\n        '--composite',\n        action='store_true',\n        help='whether to composite training foreground and background offline')\n    parser.add_argument(\n        '--nproc', type=int, default=4, help='number of processes')\n    parser.add_argument(\n        '--skip-train',\n        action='store_true',\n        help='whether to skip the training data')\n    args = parser.parse_args()\n    return args\n\n\ndef main():\n    args = parse_args()\n    if not osp.exists(args.data_root):\n        raise FileNotFoundError(f'{args.data_root} does not exist!')\n    if not osp.exists(args.coco_root):\n        raise FileNotFoundError(f'{args.coco_root} does not exist!')\n    if not osp.exists(args.voc_root):\n        raise FileNotFoundError(f'{args.voc_root} does not exist!')\n    data_root = args.data_root\n\n    if not args.skip_train:\n        print('preparing training data...')\n        if osp.exists(osp.join(args.coco_root, 'train2017')):\n            train_source_bg_dir = osp.join(args.coco_root, 'train2017')\n        elif osp.exists(osp.join(args.coco_root, 'train2014')):\n            train_source_bg_dir = osp.join(args.coco_root, 'train2014')\n        else:\n            raise FileNotFoundError(\n                f'Could not find train2014 or train2017 under {args.coco_root}'\n            )\n        generate_json(data_root, train_source_bg_dir, args.composite,\n                      args.nproc, 'training')\n        print('train done')\n\n    fg_dir = 'Test_set/Adobe-licensed images/fg'\n    alpha_dir = 'Test_set/Adobe-licensed images/alpha'\n    print('fixing png of test fg')\n    fix_png_files(osp.join(data_root, fg_dir))\n    print('fixing png of test alpha')\n    fix_png_files(osp.join(data_root, alpha_dir))\n\n    print('\\npreparing test data...')\n    test_source_bg_dir = osp.join(args.voc_root, 'VOC2012/JPEGImages')\n    generate_json(data_root, test_source_bg_dir, True, args.nproc, 'test')\n\n    print('\\nDone!')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/dataset_converters/denoising/README.md",
    "content": "# Preparing Denoising Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe test datasets (Set12, BSD68, CBSD68, Kodak, McMaster, Urban100) can be download from [here](https://drive.google.com/file/d/1mwMLt-niNqcQpfN_ZduG9j4k6P_ZkOl0/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── denoising_gaussian_test\n|   |   ├── Set12\n|   |   ├── BSD68\n|   |   ├── CBSD68\n|   |   ├── Kodak\n|   |   ├── McMaster\n|   |   ├── Urban100\n```\n"
  },
  {
    "path": "tools/dataset_converters/denoising/README_zh-CN.md",
    "content": "# 准备 Denoising 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n测试数据集(Set12, BSD68, CBSD68, Kodak, McMaster, Urban100)可以从 [此处](https://drive.google.com/file/d/1P_-RAvltEoEhfT-9GrWRdpEi6NSswTs8/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── denoising_gaussian_test\n|   |   ├── Set12\n|   |   ├── BSD68\n|   |   ├── CBSD68\n|   |   ├── Kodak\n|   |   ├── McMaster\n|   |   ├── Urban100\n```\n"
  },
  {
    "path": "tools/dataset_converters/deraining/README.md",
    "content": "# Preparing Deraining Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe test datasets (Rain100H, Rain100L, Test100, Test1200, Test2800) can be download from [here](https://drive.google.com/file/d/1P_-RAvltEoEhfT-9GrWRdpEi6NSswTs8/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── Rain100H\n|   |   ├── input\n|   |   ├── target\n|   ├── Rain100L\n|   |   ├── input\n|   |   ├── target\n|   ├── Test100\n|   |   ├── input\n|   |   ├── target\n|   ├── Test1200\n|   |   ├── input\n|   |   ├── target\n|   ├── Test2800\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/deraining/README_zh-CN.md",
    "content": "# 准备 Deraining 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n测试数据集(Rain100H, Rain100L, Test100, Test1200, Test2800)可以从 [此处](https://drive.google.com/file/d/1P_-RAvltEoEhfT-9GrWRdpEi6NSswTs8/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── Rain100H\n|   |   ├── input\n|   |   ├── target\n|   ├── Rain100L\n|   |   ├── input\n|   |   ├── target\n|   ├── Test100\n|   |   ├── input\n|   |   ├── target\n|   ├── Test1200\n|   |   ├── input\n|   |   ├── target\n|   ├── Test2800\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/df2k_ost/README.md",
    "content": "# Preparing DF2K_OST Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{wang2021real,\n  title={Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data},\n  author={Wang, Xintao and Xie, Liangbin and Dong, Chao and Shan, Ying},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},\n  pages={1905--1914},\n  year={2021}\n}\n```\n\n- The DIV2K dataset can be downloaded from [here](https://data.vision.ee.ethz.ch/cvl/DIV2K/) (We use the training set only).\n- The Flickr2K dataset can be downloaded [here](https://cv.snu.ac.kr/research/EDSR/Flickr2K.tar) (We use the training set only).\n- The OST dataset can be downloaded [here](https://openmmlab.oss-cn-hangzhou.aliyuncs.com/datasets/OST_dataset.zip) (We use the training set only).\n\nPlease first put all the images into the `GT` folder (naming does not need to be in order):\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── df2k_ost\n│   │   ├── GT\n│   │   │   ├── 0001.png\n│   │   │   ├── 0002.png\n│   │   │   ├── ...\n...\n```\n\n## Crop sub-images\n\nFor faster IO, we recommend to crop the images to sub-images. We provide such a script:\n\n```shell\npython tools/dataset_converters/df2k_ost/preprocess_df2k_ost_dataset.py --data-root ./data/df2k_ost\n```\n\nThe generated data is stored under `df2k_ost` and the data structure is as follows, where `_sub` indicates the sub-images.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── df2k_ost\n│   │   ├── GT\n│   │   ├── GT_sub\n│   │   ├── meta_info_df2k_ost.txt\n...\n```\n\n## Prepare annotation list\n\nIf you use the annotation mode for the dataset, you first need to prepare a specific `txt` file.\n\nEach line in the annotation file contains the image names and image shape (usually for the ground-truth images), separated by a white space.\n\nExample of an annotation file:\n\n```text\n0001_s001.png (480,480,3)\n0001_s002.png (480,480,3)\n```\n\nNote that `preprocess_df2k_ost_dataset.py` will generate default annotation files.\n\n## Prepare LMDB dataset for DF2K_OST\n\nIf you want to use LMDB datasets for faster IO speed, you can make LMDB files by:\n\n```shell\npython tools/dataset_converters/df2k_ost/preprocess_df2k_ost_dataset.py --data-root ./data/df2k_ost --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/df2k_ost/README_zh-CN.md",
    "content": "# 准备 DF2K_OST 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{wang2021real,\n  title={Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data},\n  author={Wang, Xintao and Xie, Liangbin and Dong, Chao and Shan, Ying},\n  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},\n  pages={1905--1914},\n  year={2021}\n}\n```\n\n- DIV2K 数据集可以在 [这里](https://data.vision.ee.ethz.ch/cvl/DIV2K/) 下载 (我们只使用训练集)。\n- Flickr2K 数据集可以在 [这里](https://cv.snu.ac.kr/research/EDSR/Flickr2K.tar) 下载 (我们只使用训练集)。\n- OST 数据集可以在 [这里](https://openmmlab.oss-cn-hangzhou.aliyuncs.com/datasets/OST_dataset.zip) 下载 (我们只使用训练集)。\n\n请先将所有图片放入 `GT` 文件夹（命名不需要按顺序）：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── df2k_ost\n│   │   ├── GT\n│   │   │   ├── 0001.png\n│   │   │   ├── 0002.png\n│   │   │   ├── ...\n...\n```\n\n## 裁剪子图像\n\n为了更快的 IO，我们建议将图像裁剪为子图像。 我们提供了这样一个脚本：\n\n```shell\npython tools/dataset_converters/df2k_ost/preprocess_df2k_ost_dataset.py --data-root ./data/df2k_ost\n```\n\n生成的数据存放在 `df2k_ost` 下，数据结构如下，其中 `_sub` 表示子图像。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── df2k_ost\n│   │   ├── GT\n│   │   ├── GT_sub\n│   │   ├── meta_info_df2k_ost.txt\n...\n```\n\n## 准备标注列表文件\n\n如果您想使用`标注模式`来处理数据集，需要先准备一个 `txt` 格式的标注文件。\n\n标注文件中的每一行包含了图片名以及图片尺寸（这些通常是 ground-truth 图片），这两个字段用空格间隔开。\n\n标注文件示例:\n\n```text\n0001_s001.png (480,480,3)\n0001_s002.png (480,480,3)\n```\n\n请注意，`preprocess_df2k_ost_dataset.py` 脚本默认生成一份标注文件。\n\n## Prepare LMDB dataset for DF2K_OST\n\n如果你想使用 LMDB 数据集来获得更快的 IO 速度，你可以通过以下方式制作 LMDB 文件：\n\n```shell\npython tools/dataset_converters/df2k_ost/preprocess_df2k_ost_dataset.py --data-root ./data/df2k_ost --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/df2k_ost/preprocess_df2k_ost_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nimport sys\nfrom multiprocessing import Pool\n\nimport cv2\nimport lmdb\nimport mmcv\nimport mmengine\nimport numpy as np\n\n\ndef generate_anno_file(args):\n    \"\"\"Generate annotation file for DF2K_OST datasets from the ground-truth\n    folder.\"\"\"\n\n    print('Generate annotation files ...')\n    txt_file = osp.join(args.data_root, args.anno_path)\n    mmengine.utils.mkdir_or_exist(osp.dirname(txt_file))\n    img_list = sorted(os.listdir(osp.join(args.data_root, 'GT_sub')))\n    with open(txt_file, 'w') as f:\n        for img in img_list:\n            f.write(f'{img} ({args.crop_size}, {args.crop_size}, 3)\\n')\n\n\ndef main_extract_subimages(args):\n    \"\"\"A multi-thread tool to crop large images to sub-images for faster IO.\n\n    It is used for DF2K_OST dataset.\n\n    opt (dict): Configuration dict. It contains:\n        n_thread (int): Thread number.\n        compression_level (int):  CV_IMWRITE_PNG_COMPRESSION from 0 to 9.\n            A higher value means a smaller size and longer compression time.\n            Use 0 for faster CPU decompression. Default: 3, same in cv2.\n        input_folder (str): Path to the input folder.\n        save_folder (str): Path to save folder.\n        crop_size (int): Crop size.\n        step (int): Step for overlapped sliding window.\n        thresh_size (int): Threshold size. Patches whose size is lower\n            than thresh_size will be dropped.\n    \"\"\"\n\n    opt = {}\n    opt['n_thread'] = args.n_thread\n    opt['compression_level'] = args.compression_level\n\n    # HR images\n    opt['input_folder'] = osp.join(args.data_root, 'GT')\n    opt['save_folder'] = osp.join(args.data_root, 'GT_sub')\n    opt['crop_size'] = args.crop_size\n    opt['step'] = args.step\n    opt['thresh_size'] = args.thresh_size\n    extract_subimages(opt)\n\n\ndef extract_subimages(opt):\n    \"\"\"Crop images to subimages.\n\n    Args:\n        opt (dict): Configuration dict. It contains:\n            input_folder (str): Path to the input folder.\n            save_folder (str): Path to save folder.\n            n_thread (int): Thread number.\n    \"\"\"\n    input_folder = opt['input_folder']\n    save_folder = opt['save_folder']\n    if not osp.exists(save_folder):\n        os.makedirs(save_folder)\n        print(f'mkdir {save_folder} ...')\n    else:\n        print(f'Folder {save_folder} already exists. Exit.')\n        sys.exit(1)\n\n    img_list = list(mmengine.scandir(input_folder, suffix='png'))\n    img_list = [osp.join(input_folder, v) for v in img_list]\n\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(opt['n_thread'])\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, opt), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef worker(path, opt):\n    \"\"\"Worker for each process.\n\n    Args:\n        path (str): Image path.\n        opt (dict): Configuration dict. It contains:\n            crop_size (int): Crop size.\n            step (int): Step for overlapped sliding window.\n            thresh_size (int): Threshold size. Patches whose size is smaller\n                than thresh_size will be dropped.\n            save_folder (str): Path to save folder.\n            compression_level (int): for cv2.IMWRITE_PNG_COMPRESSION.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n    crop_size = opt['crop_size']\n    step = opt['step']\n    thresh_size = opt['thresh_size']\n    img_name, extension = osp.splitext(osp.basename(path))\n    img = mmcv.imread(path, flag='unchanged')\n\n    if img.ndim == 2 or img.ndim == 3:\n        h, w = img.shape[:2]\n    else:\n        raise ValueError(f'Image ndim should be 2 or 3, but got {img.ndim}')\n\n    h_space = np.arange(0, h - crop_size + 1, step)\n    if h - (h_space[-1] + crop_size) > thresh_size:\n        h_space = np.append(h_space, h - crop_size)\n    w_space = np.arange(0, w - crop_size + 1, step)\n    if w - (w_space[-1] + crop_size) > thresh_size:\n        w_space = np.append(w_space, w - crop_size)\n\n    index = 0\n    for x in h_space:\n        for y in w_space:\n            index += 1\n            cropped_img = img[x:x + crop_size, y:y + crop_size, ...]\n            cv2.imwrite(\n                osp.join(opt['save_folder'],\n                         f'{img_name}_s{index:03d}{extension}'), cropped_img,\n                [cv2.IMWRITE_PNG_COMPRESSION, opt['compression_level']])\n    process_info = f'Processing {img_name} ...'\n    return process_info\n\n\ndef make_lmdb_for_df2k_ost(data_root):\n    \"\"\"Create lmdb files for DF2K_OST dataset.\n\n    Args:\n        data_root (str): Data root path.\n    \"\"\"\n\n    folder_paths = [\n        osp.join(data_root, 'df2k_ost/GT_sub'),\n    ]\n    lmdb_paths = [\n        osp.join(data_root, 'df2k_ost/GT_sub.lmdb'),\n    ]\n\n    for folder_path, lmdb_path in zip(folder_paths, lmdb_paths):\n        img_path_list, keys = prepare_keys_df2k_ost(folder_path)\n        make_lmdb(folder_path, lmdb_path, img_path_list, keys)\n\n\ndef prepare_keys_df2k_ost(folder_path):\n    \"\"\"Prepare image path list and keys for DF2K_OST dataset.\n\n    Args:\n        folder_path (str): Folder path.\n\n    Returns:\n        list[str]: Image path list.\n        list[str]: Key list.\n    \"\"\"\n\n    print('Reading image path list ...')\n    img_path_list = sorted(\n        list(mmengine.scandir(folder_path, suffix='png', recursive=False)))\n    keys = [img_path.split('.png')[0] for img_path in sorted(img_path_list)]\n\n    return img_path_list, keys\n\n\ndef make_lmdb(data_path,\n              lmdb_path,\n              img_path_list,\n              keys,\n              batch=5000,\n              compress_level=1,\n              multiprocessing_read=False,\n              n_thread=40):\n    \"\"\"Make lmdb.\n\n    Contents of lmdb. The file structure is:\n    example.lmdb\n    ├── data.mdb\n    ├── lock.mdb\n    ├── meta_info.txt\n\n    The data.mdb and lock.mdb are standard lmdb files and you can refer to\n    https://lmdb.readthedocs.io/en/release/ for more details.\n\n    The meta_info.txt is a specified txt file to record the meta information\n    of our datasets. It will be automatically created when preparing\n    datasets by our provided dataset tools.\n    Each line in the txt file records 1)image name (with extension),\n    2)image shape, and 3)compression level, separated by a white space.\n\n    For example, the meta information could be:\n    `000_00000000.png (720,1280,3) 1`, which means:\n    1) image name (with extension): 000_00000000.png;\n    2) image shape: (720,1280,3);\n    3) compression level: 1\n\n    We use the image name without extension as the lmdb key.\n\n    If `multiprocessing_read` is True, it will read all the images to memory\n    using multiprocessing. Thus, your server needs to have enough memory.\n\n    Args:\n        data_path (str): Data path for reading images.\n        lmdb_path (str): Lmdb save path.\n        img_path_list (str): Image path list.\n        keys (str): Used for lmdb keys.\n        batch (int): After processing batch images, lmdb commits.\n            Default: 5000.\n        compress_level (int): Compress level when encoding images. Default: 1.\n        multiprocessing_read (bool): Whether use multiprocessing to read all\n            the images to memory. Default: False.\n        n_thread (int): For multiprocessing.\n    \"\"\"\n    assert len(img_path_list) == len(keys), (\n        'img_path_list and keys should have the same length, '\n        f'but got {len(img_path_list)} and {len(keys)}')\n    print(f'Create lmdb for {data_path}, save to {lmdb_path}...')\n    print(f'Total images: {len(img_path_list)}')\n    if not lmdb_path.endswith('.lmdb'):\n        raise ValueError(\"lmdb_path must end with '.lmdb'.\")\n    if osp.exists(lmdb_path):\n        print(f'Folder {lmdb_path} already exists. Exit.')\n        sys.exit(1)\n\n    if multiprocessing_read:\n        # read all the images to memory (multiprocessing)\n        dataset = {}  # use dict to keep the order for multiprocessing\n        shapes = {}\n        print(f'Read images with multiprocessing, #thread: {n_thread} ...')\n        prog_bar = mmengine.ProgressBar(len(img_path_list))\n\n        def callback(arg):\n            \"\"\"get the image data and update prog_bar.\"\"\"\n            key, dataset[key], shapes[key] = arg\n            prog_bar.update()\n\n        pool = Pool(n_thread)\n        for path, key in zip(img_path_list, keys):\n            pool.apply_async(\n                read_img_worker,\n                args=(osp.join(data_path, path), key, compress_level),\n                callback=callback)\n        pool.close()\n        pool.join()\n        print(f'Finish reading {len(img_path_list)} images.')\n\n    # create lmdb environment\n    # obtain data size for one image\n    img = mmcv.imread(osp.join(data_path, img_path_list[0]), flag='unchanged')\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    data_size_per_img = img_byte.nbytes\n    print('Data size per image is: ', data_size_per_img)\n    data_size = data_size_per_img * len(img_path_list)\n    env = lmdb.open(lmdb_path, map_size=data_size * 10)\n\n    # write data to lmdb\n    prog_bar = mmengine.ProgressBar(len(img_path_list))\n    txn = env.begin(write=True)\n    txt_file = open(osp.join(lmdb_path, 'meta_info.txt'), 'w')\n    for idx, (path, key) in enumerate(zip(img_path_list, keys)):\n        prog_bar.update()\n        key_byte = key.encode('ascii')\n        if multiprocessing_read:\n            img_byte = dataset[key]\n            h, w, c = shapes[key]\n        else:\n            _, img_byte, img_shape = read_img_worker(\n                osp.join(data_path, path), key, compress_level)\n            h, w, c = img_shape\n\n        txn.put(key_byte, img_byte)\n        # write meta information\n        txt_file.write(f'{key}.png ({h},{w},{c}) {compress_level}\\n')\n        if idx % batch == 0:\n            txn.commit()\n            txn = env.begin(write=True)\n    txn.commit()\n    env.close()\n    txt_file.close()\n    print('\\nFinish writing lmdb.')\n\n\ndef read_img_worker(path, key, compress_level):\n    \"\"\"Read image worker.\n\n    Args:\n        path (str): Image path.\n        key (str): Image key.\n        compress_level (int): Compress level when encoding images.\n\n    Returns:\n        str: Image key.\n        byte: Image byte.\n        tuple[int]: Image shape.\n    \"\"\"\n    img = mmcv.imread(path, flag='unchanged')\n    if img.ndim == 2:\n        h, w = img.shape\n        c = 1\n    else:\n        h, w, c = img.shape\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    return (key, img_byte, (h, w, c))\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare DF2K_OST dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument(\n        '--anno-path',\n        nargs='?',\n        default='meta_info_df2k_ost.txt',\n        type=str,\n        help='annotation file path')\n    parser.add_argument(\n        '--crop-size',\n        type=int,\n        nargs='?',\n        default=480,\n        help='cropped size for HR images')\n    parser.add_argument(\n        '--step',\n        type=int,\n        nargs='?',\n        default=240,\n        help='step size for HR images')\n    parser.add_argument(\n        '--thresh-size',\n        type=int,\n        nargs='?',\n        default=0,\n        help='threshold size for HR images')\n    parser.add_argument(\n        '--compression-level',\n        type=int,\n        nargs='?',\n        default=3,\n        help='compression level when save png images')\n    parser.add_argument(\n        '--n-thread',\n        type=int,\n        nargs='?',\n        default=20,\n        help='thread number when using multiprocessing')\n    parser.add_argument(\n        '--make-lmdb',\n        action='store_true',\n        help='whether to prepare lmdb files')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    # extract subimages\n    main_extract_subimages(args)\n\n    # generate annotation files\n    generate_anno_file(args)\n\n    # prepare lmdb files if necessary\n    if args.make_lmdb:\n        make_lmdb_for_df2k_ost(args.data_root)\n"
  },
  {
    "path": "tools/dataset_converters/div2k/README.md",
    "content": "# Preparing DIV2K Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{Agustsson_2017_CVPR_Workshops,\n    author = {Agustsson, Eirikur and Timofte, Radu},\n    title = {NTIRE 2017 Challenge on Single Image Super-Resolution: Dataset and Study},\n    booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},\n    month = {July},\n    year = {2017}\n}\n```\n\n- Training dataset:  [DIV2K dataset](https://data.vision.ee.ethz.ch/cvl/DIV2K/).\n- Validation dataset:  [Set5](https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u) and [Set14](https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u).\n\nNote that we merge the original val dataset (image names from 0801 to 0900) to the original train dataset (image names from 0001 to 0800). The folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   │   ├── 0001.png\n│   │   │   ├── 0002.png\n│   │   │   ├── ...\n│   │   │   ├── 0800.png\n│   │   │   ├── 0801.png\n│   │   │   ├── ...\n│   │   │   ├── 0900.png\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   ├── DIV2K_valid_HR\n│   │   ├── DIV2K_valid_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   ├── Set5\n│   │   ├── GTmod12\n│   │   ├── LRbicx2\n│   │   ├── LRbicx3\n│   │   ├── LRbicx4\n│   ├── Set14\n│   │   ├── GTmod12\n│   │   ├── LRbicx2\n│   │   ├── LRbicx3\n│   │   ├── LRbicx4\n```\n\n## Crop sub-images\n\nFor faster IO, we recommend to crop the DIV2K images to sub-images. We provide such a script:\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K\n```\n\nThe generated data is stored under `DIV2K` and the data structure is as follows, where `_sub` indicates the sub-images.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   ├── DIV2K_train_HR_sub\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   │   ├── X2_sub\n│   │   │   ├── X3_sub\n│   │   │   ├── X4_sub\n│   │   ├── DIV2K_valid_HR\n│   │   ├── ...\n│   │   ├── meta_info_DIV2K800sub_GT.txt\n│   │   ├── meta_info_DIV2K100sub_GT.txt\n...\n```\n\n## Prepare annotation list\n\nIf you use the annotation mode for the dataset, you first need to prepare a specific `txt` file.\n\nEach line in the annotation file contains the image names and image shape (usually for the ground-truth images), separated by a white space.\n\nExample of an annotation file:\n\n```text\n0001_s001.png (480,480,3)\n0001_s002.png (480,480,3)\n```\n\nNote that `preprocess_div2k_dataset` will generate default annotation files.\n\n## Prepare LMDB dataset for DIV2K\n\nIf you want to use LMDB datasets for faster IO speed, you can make LMDB files by:\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/div2k/README_zh-CN.md",
    "content": "# 准备 DIV2K 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{Agustsson_2017_CVPR_Workshops,\n    author = {Agustsson, Eirikur and Timofte, Radu},\n    title = {NTIRE 2017 Challenge on Single Image Super-Resolution: Dataset and Study},\n    booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},\n    month = {July},\n    year = {2017}\n}\n```\n\n- 训练集:  [DIV2K dataset](https://data.vision.ee.ethz.ch/cvl/DIV2K/).\n- 验证集:  [Set5](https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u) 和 [Set14](https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u).\n\n请注意，我们将原始的验证集（文件名 0801 到 0900）合并进了原始的训练集（文件名 0001 到 0800）。文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   │   ├── 0001.png\n│   │   │   ├── 0002.png\n│   │   │   ├── ...\n│   │   │   ├── 0800.png\n│   │   │   ├── 0801.png\n│   │   │   ├── ...\n│   │   │   ├── 0900.png\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   ├── DIV2K_valid_HR\n│   │   ├── DIV2K_valid_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   ├── Set5\n│   │   ├── GTmod12\n│   │   ├── LRbicx2\n│   │   ├── LRbicx3\n│   │   ├── LRbicx4\n│   ├── Set14\n│   │   ├── GTmod12\n│   │   ├── LRbicx2\n│   │   ├── LRbicx3\n│   │   ├── LRbicx4\n```\n\n## 裁剪子图\n\n为了加快 IO，建议将 DIV2K 中的图片裁剪为一系列子图，为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K\n```\n\n生成的数据保存在 `DIV2K` 目录下，其文件结构如下所示，其中 `_sub` 表示子图:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── DIV2K\n│   │   ├── DIV2K_train_HR\n│   │   ├── DIV2K_train_HR_sub\n│   │   ├── DIV2K_train_LR_bicubic\n│   │   │   ├── X2\n│   │   │   ├── X3\n│   │   │   ├── X4\n│   │   │   ├── X2_sub\n│   │   │   ├── X3_sub\n│   │   │   ├── X4_sub\n│   │   ├── DIV2K_valid_HR\n│   │   ├── ...\n│   │   ├── meta_info_DIV2K800sub_GT.txt\n│   │   ├── meta_info_DIV2K100sub_GT.txt\n...\n```\n\n## 准备标注列表文件\n\n如果您想使用`标注模式`来处理数据集，需要先准备一个 `txt` 格式的标注文件。\n\n标注文件中的每一行包含了图片名以及图片尺寸（这些通常是 ground-truth 图片），这两个字段用空格间隔开。\n\n标注文件示例:\n\n```text\n0001_s001.png (480,480,3)\n0001_s002.png (480,480,3)\n```\n\n请注意，`preprocess_div2k_dataset` 脚本默认生成一份标注文件。\n\n## 准备 LMDB 格式的 DIV2K 数据集\n\n如果您想使用 `LMDB` 以获得更快的 IO 速度，可以通过以下脚本来构建 LMDB 文件\n\n```shell\npython tools/dataset_converters/div2k/preprocess_div2k_dataset.py --data-root ./data/DIV2K --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/div2k/preprocess_div2k_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nimport re\nimport sys\nfrom multiprocessing import Pool\n\nimport cv2\nimport lmdb\nimport mmcv\nimport mmengine\nimport numpy as np\n\n\ndef generate_anno_file(args):\n    \"\"\"Generate annotation file for DIV2K datasets from the ground-truth\n    folder.\"\"\"\n\n    print('Generate annotation files ...')\n    train_file = osp.join(args.data_root, args.anno_train_path)\n    test_file = osp.join(args.data_root, args.anno_test_path)\n    mmengine.utils.mkdir_or_exist(osp.dirname(train_file))\n    mmengine.utils.mkdir_or_exist(osp.dirname(test_file))\n    img_list = sorted(\n        os.listdir(osp.join(args.data_root, 'DIV2K_train_HR_sub')))\n    with open(train_file, 'w') as f1, open(test_file, 'w') as f2:\n        for img in img_list:\n            if img[:4] < '0801':\n                f1.write(f'{img} ({args.crop_size}, {args.crop_size}, 3)\\n')\n            else:\n                f2.write(f'{img} ({args.crop_size}, {args.crop_size}, 3)\\n')\n\n\ndef main_extract_subimages(args):\n    \"\"\"A multi-thread tool to crop large images to sub-images for faster IO.\n\n    It is used for DIV2K dataset.\n\n    opt (dict): Configuration dict. It contains:\n        n_thread (int): Thread number.\n        compression_level (int):  CV_IMWRITE_PNG_COMPRESSION from 0 to 9.\n            A higher value means a smaller size and longer compression time.\n            Use 0 for faster CPU decompression. Default: 3, same in cv2.\n\n        scales (list[int]): The downsampling factors corresponding to the\n            LR folders you want to process.\n            Default: [2, 3, 4].\n        input_folder (str): Path to the input folder.\n        save_folder (str): Path to save folder.\n        crop_size (int): Crop size.\n        step (int): Step for overlapped sliding window.\n        thresh_size (int): Threshold size. Patches whose size is lower\n            than thresh_size will be dropped.\n\n    Usage:\n        For each folder, run this script.\n        By default, there are four folders to be processed for DIV2K dataset\n            according to scale factor list ([2,3,4])\n            DIV2K_train_HR\n            DIV2K_train_LR_bicubic/X2\n            DIV2K_train_LR_bicubic/X3\n            DIV2K_train_LR_bicubic/X4\n        After process, each sub_folder should have the same number of\n        subimages. You can also specify scales by modifying the argument\n        'scales'. Remember to modify opt configurations according to your\n        settings.\n    \"\"\"\n\n    opt = {}\n    opt['n_thread'] = args.n_thread\n    opt['compression_level'] = args.compression_level\n\n    # HR images\n    opt['input_folder'] = osp.join(args.data_root, 'DIV2K_train_HR')\n    opt['save_folder'] = osp.join(args.data_root, 'DIV2K_train_HR_sub')\n    opt['crop_size'] = args.crop_size\n    opt['step'] = args.step\n    opt['thresh_size'] = args.thresh_size\n    extract_subimages(opt)\n\n    for scale in args.scales:\n        opt['input_folder'] = osp.join(args.data_root,\n                                       f'DIV2K_train_LR_bicubic/X{scale}')\n        opt['save_folder'] = osp.join(args.data_root,\n                                      f'DIV2K_train_LR_bicubic/X{scale}_sub')\n        opt['crop_size'] = args.crop_size // scale\n        opt['step'] = args.step // scale\n        opt['thresh_size'] = args.thresh_size // scale\n        extract_subimages(opt)\n\n\ndef extract_subimages(opt):\n    \"\"\"Crop images to subimages.\n\n    Args:\n        opt (dict): Configuration dict. It contains:\n            input_folder (str): Path to the input folder.\n            save_folder (str): Path to save folder.\n            n_thread (int): Thread number.\n    \"\"\"\n    input_folder = opt['input_folder']\n    save_folder = opt['save_folder']\n    if not osp.exists(save_folder):\n        os.makedirs(save_folder)\n        print(f'mkdir {save_folder} ...')\n    else:\n        print(f'Folder {save_folder} already exists. Exit.')\n        sys.exit(1)\n\n    img_list = list(mmengine.scandir(input_folder))\n    img_list = [osp.join(input_folder, v) for v in img_list]\n\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(opt['n_thread'])\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, opt), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef worker(path, opt):\n    \"\"\"Worker for each process.\n\n    Args:\n        path (str): Image path.\n        opt (dict): Configuration dict. It contains:\n            crop_size (int): Crop size.\n            step (int): Step for overlapped sliding window.\n            thresh_size (int): Threshold size. Patches whose size is smaller\n                than thresh_size will be dropped.\n            save_folder (str): Path to save folder.\n            compression_level (int): for cv2.IMWRITE_PNG_COMPRESSION.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n    crop_size = opt['crop_size']\n    step = opt['step']\n    thresh_size = opt['thresh_size']\n    img_name, extension = osp.splitext(osp.basename(path))\n\n    # remove the x2, x3, x4 and x8 in the filename for DIV2K\n    img_name = re.sub('x[2348]', '', img_name)\n\n    img = mmcv.imread(path, flag='unchanged')\n\n    if img.ndim == 2 or img.ndim == 3:\n        h, w = img.shape[:2]\n    else:\n        raise ValueError(f'Image ndim should be 2 or 3, but got {img.ndim}')\n\n    h_space = np.arange(0, h - crop_size + 1, step)\n    if h - (h_space[-1] + crop_size) > thresh_size:\n        h_space = np.append(h_space, h - crop_size)\n    w_space = np.arange(0, w - crop_size + 1, step)\n    if w - (w_space[-1] + crop_size) > thresh_size:\n        w_space = np.append(w_space, w - crop_size)\n\n    index = 0\n    for x in h_space:\n        for y in w_space:\n            index += 1\n            cropped_img = img[x:x + crop_size, y:y + crop_size, ...]\n            cv2.imwrite(\n                osp.join(opt['save_folder'],\n                         f'{img_name}_s{index:03d}{extension}'), cropped_img,\n                [cv2.IMWRITE_PNG_COMPRESSION, opt['compression_level']])\n    process_info = f'Processing {img_name} ...'\n    return process_info\n\n\ndef make_lmdb_for_div2k(data_root):\n    \"\"\"Create lmdb files for DIV2K dataset.\n\n    Args:\n        data_root (str): Data root path.\n\n    Usage:\n        Typically, there are four folders to be processed for DIV2K dataset.\n            DIV2K_train_HR_sub\n            DIV2K_train_LR_bicubic/X2_sub\n            DIV2K_train_LR_bicubic/X3_sub\n            DIV2K_train_LR_bicubic/X4_sub\n        Remember to modify opt configurations according to your settings.\n    \"\"\"\n\n    folder_paths = [\n        osp.join(data_root, 'DIV2K_train_HR_sub'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic/X2_sub'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic/X3_sub'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic/X4_sub')\n    ]\n    lmdb_paths = [\n        osp.join(data_root, 'DIV2K_train_HR_sub.lmdb'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic_X2_sub.lmdb'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic_X3_sub.lmdb'),\n        osp.join(data_root, 'DIV2K_train_LR_bicubic_X4_sub.lmdb')\n    ]\n\n    for folder_path, lmdb_path in zip(folder_paths, lmdb_paths):\n        img_path_list, keys = prepare_keys_div2k(folder_path)\n        make_lmdb(folder_path, lmdb_path, img_path_list, keys)\n\n\ndef prepare_keys_div2k(folder_path):\n    \"\"\"Prepare image path list and keys for DIV2K dataset.\n\n    Args:\n        folder_path (str): Folder path.\n\n    Returns:\n        list[str]: Image path list.\n        list[str]: Key list.\n    \"\"\"\n    print('Reading image path list ...')\n    img_path_list = sorted(\n        list(mmengine.scandir(folder_path, suffix='png', recursive=False)))\n    keys = [img_path.split('.png')[0] for img_path in sorted(img_path_list)]\n\n    return img_path_list, keys\n\n\ndef make_lmdb(data_path,\n              lmdb_path,\n              img_path_list,\n              keys,\n              batch=5000,\n              compress_level=1,\n              multiprocessing_read=False,\n              n_thread=40):\n    \"\"\"Make lmdb.\n\n    Contents of lmdb. The file structure is:\n    example.lmdb\n    ├── data.mdb\n    ├── lock.mdb\n    ├── meta_info.txt\n\n    The data.mdb and lock.mdb are standard lmdb files and you can refer to\n    https://lmdb.readthedocs.io/en/release/ for more details.\n\n    The meta_info.txt is a specified txt file to record the meta information\n    of our datasets. It will be automatically created when preparing\n    datasets by our provided dataset tools.\n    Each line in the txt file records 1)image name (with extension),\n    2)image shape, and 3)compression level, separated by a white space.\n\n    For example, the meta information could be:\n    `000_00000000.png (720,1280,3) 1`, which means:\n    1) image name (with extension): 000_00000000.png;\n    2) image shape: (720,1280,3);\n    3) compression level: 1\n\n    We use the image name without extension as the lmdb key.\n\n    If `multiprocessing_read` is True, it will read all the images to memory\n    using multiprocessing. Thus, your server needs to have enough memory.\n\n    Args:\n        data_path (str): Data path for reading images.\n        lmdb_path (str): Lmdb save path.\n        img_path_list (str): Image path list.\n        keys (str): Used for lmdb keys.\n        batch (int): After processing batch images, lmdb commits.\n            Default: 5000.\n        compress_level (int): Compress level when encoding images. Default: 1.\n        multiprocessing_read (bool): Whether use multiprocessing to read all\n            the images to memory. Default: False.\n        n_thread (int): For multiprocessing.\n    \"\"\"\n    assert len(img_path_list) == len(keys), (\n        'img_path_list and keys should have the same length, '\n        f'but got {len(img_path_list)} and {len(keys)}')\n    print(f'Create lmdb for {data_path}, save to {lmdb_path}...')\n    print(f'Total images: {len(img_path_list)}')\n    if not lmdb_path.endswith('.lmdb'):\n        raise ValueError(\"lmdb_path must end with '.lmdb'.\")\n    if osp.exists(lmdb_path):\n        print(f'Folder {lmdb_path} already exists. Exit.')\n        sys.exit(1)\n\n    if multiprocessing_read:\n        # read all the images to memory (multiprocessing)\n        dataset = {}  # use dict to keep the order for multiprocessing\n        shapes = {}\n        print(f'Read images with multiprocessing, #thread: {n_thread} ...')\n        prog_bar = mmengine.ProgressBar(len(img_path_list))\n\n        def callback(arg):\n            \"\"\"get the image data and update prog_bar.\"\"\"\n            key, dataset[key], shapes[key] = arg\n            prog_bar.update()\n\n        pool = Pool(n_thread)\n        for path, key in zip(img_path_list, keys):\n            pool.apply_async(\n                read_img_worker,\n                args=(osp.join(data_path, path), key, compress_level),\n                callback=callback)\n        pool.close()\n        pool.join()\n        print(f'Finish reading {len(img_path_list)} images.')\n\n    # create lmdb environment\n    # obtain data size for one image\n    img = mmcv.imread(osp.join(data_path, img_path_list[0]), flag='unchanged')\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    data_size_per_img = img_byte.nbytes\n    print('Data size per image is: ', data_size_per_img)\n    data_size = data_size_per_img * len(img_path_list)\n    env = lmdb.open(lmdb_path, map_size=data_size * 10)\n\n    # write data to lmdb\n    prog_bar = mmengine.ProgressBar(len(img_path_list))\n    txn = env.begin(write=True)\n    txt_file = open(osp.join(lmdb_path, 'meta_info.txt'), 'w')\n    for idx, (path, key) in enumerate(zip(img_path_list, keys)):\n        prog_bar.update()\n        key_byte = key.encode('ascii')\n        if multiprocessing_read:\n            img_byte = dataset[key]\n            h, w, c = shapes[key]\n        else:\n            _, img_byte, img_shape = read_img_worker(\n                osp.join(data_path, path), key, compress_level)\n            h, w, c = img_shape\n\n        txn.put(key_byte, img_byte)\n        # write meta information\n        txt_file.write(f'{key}.png ({h},{w},{c}) {compress_level}\\n')\n        if idx % batch == 0:\n            txn.commit()\n            txn = env.begin(write=True)\n    txn.commit()\n    env.close()\n    txt_file.close()\n    print('\\nFinish writing lmdb.')\n\n\ndef read_img_worker(path, key, compress_level):\n    \"\"\"Read image worker.\n\n    Args:\n        path (str): Image path.\n        key (str): Image key.\n        compress_level (int): Compress level when encoding images.\n\n    Returns:\n        str: Image key.\n        byte: Image byte.\n        tuple[int]: Image shape.\n    \"\"\"\n    img = mmcv.imread(path, flag='unchanged')\n    if img.ndim == 2:\n        h, w = img.shape\n        c = 1\n    else:\n        h, w, c = img.shape\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    return (key, img_byte, (h, w, c))\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare DIV2K dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument(\n        '--anno-train-path',\n        nargs='?',\n        default='meta_info_DIV2K800sub_GT.txt',\n        type=str,\n        help='annotation file path of train dataset')\n    parser.add_argument(\n        '--anno-test-path',\n        nargs='?',\n        default='meta_info_DIV2K100sub_GT.txt',\n        type=str,\n        help='annotation file path of test dataset')\n    parser.add_argument(\n        '--scales',\n        nargs='*',\n        default=[2, 3, 4],\n        type=int,\n        help='scale factor list')\n    parser.add_argument(\n        '--crop-size',\n        nargs='?',\n        default=480,\n        type=int,\n        help='cropped size for HR images')\n    parser.add_argument(\n        '--step',\n        nargs='?',\n        default=240,\n        type=int,\n        help='step size for HR images')\n    parser.add_argument(\n        '--thresh-size',\n        nargs='?',\n        default=0,\n        type=int,\n        help='threshold size for HR images')\n    parser.add_argument(\n        '--compression-level',\n        nargs='?',\n        default=3,\n        type=int,\n        help='compression level when save png images')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    parser.add_argument(\n        '--make-lmdb',\n        action='store_true',\n        help='whether to prepare lmdb files')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    # extract subimages\n    main_extract_subimages(args)\n\n    # generate annotation files\n    generate_anno_file(args)\n\n    # prepare lmdb files if necessary\n    if args.make_lmdb:\n        make_lmdb_for_div2k(args.data_root)\n"
  },
  {
    "path": "tools/dataset_converters/dpdd/README.md",
    "content": "# Preparing DPDD Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe test datasets can be download from [here](https://drive.google.com/file/d/1dDWUQ_D93XGtcywoUcZE1HOXCV4EuLyw/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── DPDD\n|   |   ├── inputL\n|   |   ├── inputR\n|   |   ├── inputC\n|   |   ├── target\n|   |   ├── indoor_labels.npy\n|   |   ├── indoor_labels.txt\n|   |   ├── outdoor_labels.npy\n|   |   ├── outdoor_labels.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/dpdd/README_zh-CN.md",
    "content": "# 准备 DPDD 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n测试数据集可以从 [此处](https://drive.google.com/file/d/1dDWUQ_D93XGtcywoUcZE1HOXCV4EuLyw/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── DPDD\n|   |   ├── inputL\n|   |   ├── inputR\n|   |   ├── inputC\n|   |   ├── target\n|   |   ├── indoor_labels.npy\n|   |   ├── indoor_labels.txt\n|   |   ├── outdoor_labels.npy\n|   |   ├── outdoor_labels.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/glean/README.md",
    "content": "# Preparing GLEAN Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{chan2021glean,\n  author = {Chan, Kelvin CK and Wang, Xintao and Xu, Xiangyu and Gu, Jinwei and Loy, Chen Change},\n  title = {GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n\n## Preparing cat_train dataset\n\n1. Download [cat dataset](http://dl.yf.io/lsun/objects/cat.zip) from [LSUN homepage](https://www.yf.io/p/lsun)\n\n2. Download [cat_train/meta_info_LSUNcat_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/cat_train/meta_info_LSUNcat_GT.txt) from [GLEAN homepage](https://github.com/ckkelvinchan/GLEAN)\n\n3. Export and downsample images\n\nExport images from lmdb file and resize the input images to the designated size. We provide such a script:\n\n```shell\npython tools/dataset_converters/glean/preprocess_cat_train_dataset.py --lmdb-path .data/cat --meta-file-path ./data/cat_train/meta_info_LSUNcat_GT.txt --out-dir ./data/cat_train\n```\n\nThe generated data is stored under `cat_train` and the folder structure is as follows.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── cat_train\n│   │   ├── GT\n│   │   ├── BIx8_down\n│   │   ├── BIx16_down\n│   │   ├── meta_info_LSUNcat_GT.txt\n...\n```\n\n## Preparing cat_test dataset\n\n1. Download [CAT dataset](https://archive.org/download/CAT_DATASET/CAT_DATASET_02.zip) from [here](https://archive.org/details/CAT_DATASET).\n\n2. Download [cat_test/meta_info_Cat100_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/cat_test/meta_info_Cat100_GT.txt) from [GLEAN homepage](https://github.com/ckkelvinchan/GLEAN)\n\n3. Downsample images\n\nResize the input images to the designated size. We provide such a script:\n\n```shell\npython tools/dataset_converters/glean/preprocess_cat_test_dataset.py --data-path ./data/CAT_03 --meta-file-path ./data/cat_test/meta_info_Cat100_GT.txt --out-dir ./data/cat_test\n```\n\nThe generated data is stored under `cat_test` and the folder structure is as follows.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── cat_test\n│   │   ├── GT\n│   │   ├── BIx8_down\n│   │   ├── BIx16_down\n│   │   ├── meta_info_Cat100_GT.txt\n...\n```\n\n## Preparing FFHQ dataset\n\n1. Download [FFHQ dataset (images1024x1024)](https://drive.google.com/drive/folders/1tZUcXDBeOibC6jcMCtgRRz67pzrAHeHL) from it's [homepage](https://github.com/NVlabs/ffhq-dataset)\n\nThen you can refactor the folder structure looks like:\n\n```text\nffhq\n├── images\n|   ├── 00000.png\n|   ├── 00001.png\n|   ├── ...\n|   ├── 69999.png\n```\n\n2. Download [ffhq/meta_info_FFHQ_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/FFHQ/meta_info_FFHQ_GT.txt) from [GLEAN homepage](https://github.com/ckkelvinchan/GLEAN)\n\n3. Downsample images\n\nResize the input images to the designated size. We provide such a script:\n\n```shell\npython tools/dataset_converters/glean/preprocess_ffhq_celebahq_dataset.py --data-root ./data/ffhq/images\n```\n\nThe generated data is stored under `ffhq` and the folder structure is as follows.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── ffhq\n|   |   ├── images\n│   │   ├── BIx8_down\n|   |   ├── BIx16_down\n|   |   ├── meta_info_FFHQ_GT.txt\n...\n```\n\n## Preparing CelebA-HQ dataset\n\n1. Preparing datasets following it's [homepage](https://github.com/tkarras/progressive_growing_of_gans)\n\nThen you can refactor the folder structure looks like:\n\n```text\nCelebA-HQ\n├── GT\n|   ├── 00000.png\n|   ├── 00001.png\n|   ├── ...\n|   ├── 30000.png\n```\n\n2. Download [CelebA-HQ/meta_info_CelebAHQ_val100_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/CelebA-HQ/meta_info_CelebAHQ_val100_GT.txt) from [GLEAN homepage](https://github.com/ckkelvinchan/GLEAN)\n\n3. Downsample images\n\nResize the input images to the designated size. We provide such a script:\n\n```shell\npython tools/dataset_converters/glean/preprocess_ffhq_celebahq_dataset.py --data-root ./data/CelebA-HQ/GT\n```\n\nThe generated data is stored under `CelebA-HQ` and the folder structure is as follows.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configsdata\n├── data\n|   ├── CelebA-HQ\n|   |   ├── GT\n│   │   ├── BIx8_down\n|   |   ├── BIx16_down\n|   |   ├── meta_info_CelebAHQ_val100_GT.txt\n...\n```\n\n## Preparing FFHQ_CelebAHQ dataset\n\nWe merge FFHQ(`ffhq/images`) and CelebA-HQ(`CelebA-HQ/GT`) to generate FFHQ_CelebAHQ dataset.\n\nThe folder structure should looks like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── FFHQ_CelebAHQ\n|   |   ├── GT\n...\n```\n"
  },
  {
    "path": "tools/dataset_converters/glean/README_zh-CN.md",
    "content": "# 准备 GLEAN 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{chan2021glean,\n  author = {Chan, Kelvin CK and Wang, Xintao and Xu, Xiangyu and Gu, Jinwei and Loy, Chen Change},\n  title = {GLEAN: Generative Latent Bank for Large-Factor Image Super-Resolution},\n  booktitle = {Proceedings of the IEEE conference on computer vision and pattern recognition},\n  year = {2021}\n}\n```\n\n## 准备 cat_train 数据集\n\n1. 从[LSUN 主页](https://www.yf.io/p/lsun)下载[cat 数据集](http://dl.yf.io/lsun/objects/cat.zip)。\n\n2. 从[GLEAN 主页](https://github.com/ckkelvinchan/GLEAN)下载[cat_train/meta_info_LSUNcat_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/cat_train/meta_info_LSUNcat_GT.txt)。\n\n3. 导出图像并下采样\n\n从 lmdb 文件中导出图像，并下采样到所需尺寸。为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/glean/preprocess_cat_train_dataset.py --lmdb-path .data/cat --meta-file-path ./data/cat_train/meta_info_LSUNcat_GT.txt --out-dir ./data/cat_train\n```\n\n生成的数据存储在 `cat_train` 目录下，目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── cat_train\n│   │   ├── GT\n│   │   ├── BIx8_down\n│   │   ├── BIx16_down\n│   │   ├── meta_info_LSUNcat_GT.txt\n...\n```\n\n## 准备 cat_test 数据集\n\n1. 从数据集[主页](https://archive.org/details/CAT_DATASET)下载[CAT 数据集](https://archive.org/download/CAT_DATASET/CAT_DATASET_02.zip)。\n\n2. 从[GLEAN 主页](https://github.com/ckkelvinchan/GLEAN)下载[cat_test/meta_info_Cat100_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/cat_test/meta_info_Cat100_GT.txt)。\n\n3. 下采样\n\n将图像下采样到所需尺寸。为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/glean/preprocess_cat_test_dataset.py --data-path ./data/CAT_03 --meta-file-path ./data/cat_test/meta_info_Cat100_GT.txt --out-dir ./data/cat_test\n```\n\n生成的数据存储在 `cat_test` 目录下，目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── cat_test\n│   │   ├── GT\n│   │   ├── BIx8_down\n│   │   ├── BIx16_down\n│   │   ├── meta_info_Cat100_GT.txt\n...\n```\n\n## 准备 FFHQ 数据集\n\n1. 从数据集[主页](https://github.com/NVlabs/ffhq-dataset)下载[FFHQ 数据集 (images1024x1024)](https://drive.google.com/drive/folders/1tZUcXDBeOibC6jcMCtgRRz67pzrAHeHL)。\n\n将文件目录重构为如下所示：\n\n```text\nffhq\n├── images\n|   ├── 00000.png\n|   ├── 00001.png\n|   ├── ...\n|   ├── 69999.png\n```\n\n2. 从[GLEAN 主页](https://github.com/ckkelvinchan/GLEAN)下载[ffhq/meta_info_FFHQ_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/FFHQ/meta_info_FFHQ_GT.txt)。\n\n3. 下采样\n\n将图像下采样到所需尺寸。为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/glean/preprocess_ffhq_celebahq_dataset.py --data-root ./data/ffhq/images\n```\n\n生成的数据存储在 `ffhq` 目录下，目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── ffhq\n|   |   ├── images\n│   │   ├── BIx8_down\n|   |   ├── BIx16_down\n|   |   ├── meta_info_FFHQ_GT.txt\n...\n```\n\n## 准备 CelebA-HQ 数据集\n\n1. 根据数据集[主页](https://github.com/tkarras/progressive_growing_of_gans)文档准备数据集。\n\n将文件目录重构为如下所示：\n\n```text\nCelebA-HQ\n├── GT\n|   ├── 00000.png\n|   ├── 00001.png\n|   ├── ...\n|   ├── 30000.png\n```\n\n2. 从[GLEAN 主页](https://github.com/ckkelvinchan/GLEAN)下载[CelebA-HQ/meta_info_CelebAHQ_val100_GT.txt](https://github.com/ckkelvinchan/GLEAN/blob/main/data/CelebA-HQ/meta_info_CelebAHQ_val100_GT.txt)。\n\n3. 下采样\n\n将图像下采样到所需尺寸。为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/glean/preprocess_ffhq_celebahq_dataset.py --data-root ./data/CelebA-HQ/GT\n```\n\n生成的数据存储在 `CelebA-HQ` 目录下，目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configsdata\n├── data\n|   ├── CelebA-HQ\n|   |   ├── GT\n│   │   ├── BIx8_down\n|   |   ├── BIx16_down\n|   |   ├── meta_info_CelebAHQ_val100_GT.txt\n...\n```\n\n## 准备 FFHQ_CelebAHQ 数据集\n\n将 FFHQ(`ffhq/images`) 和 CelebA-HQ(`CelebA-HQ/GT`) 合并，生成 FFHQ_CelebAHQ 数据集。\n\n文件目录重构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── FFHQ_CelebAHQ\n|   |   ├── GT\n...\n```\n"
  },
  {
    "path": "tools/dataset_converters/glean/preprocess_cat_test_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nfrom multiprocessing import Pool\n\nimport mmengine\nimport numpy as np\nfrom skimage import img_as_float\nfrom skimage.io import imread, imsave\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\n\n\ndef imresize(img_path, output_path, scale=None, output_shape=None):\n    \"\"\"Resize the image using MATLAB-like downsampling.\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n    \"\"\"\n\n    matlab_resize = MATLABLikeResize(\n        keys=['data'], scale=scale, output_shape=output_shape)\n    img = imread(img_path)\n    img = img_as_float(img)\n    data = {'data': img}\n    output = matlab_resize(data)['data']\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = np.around(output).astype(np.uint8)\n    imsave(output_path, output)\n\n\ndef worker(img_name, args):\n    \"\"\"Worker for each process.\n\n    Args:\n        img_name (str): Image filename.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n\n    gt_dir = osp.join(args.out_dir, 'GT')\n    bix8_dir = osp.join(args.out_dir, 'BIx8_down')\n    bix16_dir = osp.join(args.out_dir, 'BIx16_down')\n\n    new_img_name = img_name + '.png'\n\n    imresize(\n        osp.join(args.data_path, img_name + '.jpg'),\n        osp.join(gt_dir, new_img_name),\n        output_shape=(256, 256))\n    imresize(\n        osp.join(gt_dir, new_img_name),\n        osp.join(bix8_dir, new_img_name),\n        scale=1 / 8)\n    imresize(\n        osp.join(gt_dir, new_img_name),\n        osp.join(bix16_dir, new_img_name),\n        scale=1 / 16)\n    process_info = f'Processing {new_img_name} ...'\n    return process_info\n\n\ndef downsample_images(args):\n    \"\"\"Downsample images for cat_test datasets from the ground-truth.\"\"\"\n\n    meta_file = open(args.meta_file_path, 'r')\n    img_list = [_.split('.')[0] for _ in meta_file.readlines()]\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(args.n_thread)\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, args), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare cat dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-path', help='dataset root')\n    parser.add_argument('--meta-file-path', help='meta file path')\n    parser.add_argument('--out-dir', help='output directory of dataset')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    if not osp.exists(args.out_dir):\n        os.makedirs(args.out_dir)\n    gt_dir = osp.join(args.out_dir, 'GT')\n    bix8_dir = osp.join(args.out_dir, 'BIx8_down')\n    bix16_dir = osp.join(args.out_dir, 'BIx16_down')\n    if not osp.exists(gt_dir):\n        os.makedirs(gt_dir)\n    if not osp.exists(bix8_dir):\n        os.makedirs(bix8_dir)\n    if not osp.exists(bix16_dir):\n        os.makedirs(bix16_dir)\n\n    # downsample images\n    downsample_images(args)\n"
  },
  {
    "path": "tools/dataset_converters/glean/preprocess_cat_train_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nfrom multiprocessing import Pool\n\nimport lmdb\nimport mmengine\nimport numpy as np\nfrom PIL import Image\nfrom skimage import img_as_float\nfrom skimage.io import imread, imsave\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\n\n\ndef export_images(lmdb_path, meta_file_path, out_dir):\n    \"\"\"Export images from lmdb file.\n\n    Ref: https://github.com/fyu/lsun\n\n    Args:\n        lmdb_path (str): Lmdb file path.\n        meta_file_path (str): Meta file path.\n        out_dir (str): Output directory of dataset.\n    \"\"\"\n\n    print('Exporting', lmdb_path, 'to', out_dir)\n    env = lmdb.open(\n        lmdb_path, map_size=1099511627776, max_readers=100, readonly=True)\n    meta_file = open(meta_file_path, 'r')\n    img_list = [_.split('.')[0] for _ in meta_file.readlines()]\n    txn = env.begin(write=False)\n    cursor = txn.cursor()\n    count = 0\n    for key, val in cursor:\n        if key.decode('ascii') in img_list:\n            image_out_path = osp.join(out_dir, key.decode('ascii') + '.webp')\n            with open(image_out_path, 'wb') as fp:\n                fp.write(val)\n        count += 1\n        if count % 1000 == 0:\n            print('Finished', count, 'images')\n        if count > len(img_list):\n            break\n    print('\\nFinish exporting images.')\n\n\ndef imresize(img_path, output_path, scale=None, output_shape=None):\n    \"\"\"Resize the image using MATLAB-like downsampling.\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n    \"\"\"\n\n    matlab_resize = MATLABLikeResize(\n        keys=['data'], scale=scale, output_shape=output_shape)\n    img = imread(img_path)\n    img = img_as_float(img)\n    data = {'data': img}\n    output = matlab_resize(data)['data']\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = np.around(output).astype(np.uint8)\n    imsave(output_path, output)\n\n\ndef worker(img_name, out_dir):\n    \"\"\"Worker for each process.\n\n    Args:\n        img_name (str): Image filename.\n        out_dir (str): Output directory of dataset.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n\n    _gt_dir = osp.join(out_dir, '_GT')\n    gt_dir = osp.join(out_dir, 'GT')\n    bix8_dir = osp.join(out_dir, 'BIx8_down')\n    bix16_dir = osp.join(out_dir, 'BIx16_down')\n\n    new_img_name = img_name + '.png'\n    img = Image.open(osp.join(_gt_dir, img_name + '.webp'))\n    img.load()\n    img.save(osp.join(_gt_dir, new_img_name))\n\n    imresize(\n        osp.join(_gt_dir, new_img_name),\n        osp.join(gt_dir, new_img_name),\n        output_shape=(256, 256))\n    imresize(\n        osp.join(gt_dir, new_img_name),\n        osp.join(bix8_dir, new_img_name),\n        scale=1 / 8)\n    imresize(\n        osp.join(gt_dir, new_img_name),\n        osp.join(bix16_dir, new_img_name),\n        scale=1 / 16)\n\n    process_info = f'Processing {new_img_name} ...'\n    return process_info\n\n\ndef downsample_images(args):\n    \"\"\"Downsample images for cat_train datasets from the ground-truth.\"\"\"\n\n    meta_file = open(args.meta_file_path, 'r')\n    img_list = [_.split('.')[0] for _ in meta_file.readlines()]\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(args.n_thread)\n    for path in img_list:\n        pool.apply_async(\n            worker,\n            args=(path, args.out_dir),\n            callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare cat dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--lmdb-path', help='lmdb file path')\n    parser.add_argument('--meta-file-path', help='meta file path')\n    parser.add_argument('--out-dir', help='output directory of dataset')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    if not osp.exists(args.out_dir):\n        os.makedirs(args.out_dir)\n    _gt_dir = osp.join(args.out_dir, '_GT')\n    gt_dir = osp.join(args.out_dir, 'GT')\n    bix8_dir = osp.join(args.out_dir, 'BIx8_down')\n    bix16_dir = osp.join(args.out_dir, 'BIx16_down')\n    if not osp.exists(_gt_dir):\n        os.makedirs(_gt_dir)\n    if not osp.exists(gt_dir):\n        os.makedirs(gt_dir)\n    if not osp.exists(bix8_dir):\n        os.makedirs(bix8_dir)\n    if not osp.exists(bix16_dir):\n        os.makedirs(bix16_dir)\n\n    # export images\n    export_images(args.lmdb_path, args.meta_file_path, _gt_dir)\n\n    # downsample images\n    downsample_images(args)\n"
  },
  {
    "path": "tools/dataset_converters/glean/preprocess_ffhq_celebahq_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nfrom multiprocessing import Pool\n\nimport mmengine\nimport numpy as np\nfrom skimage import img_as_float\nfrom skimage.io import imread, imsave\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\n\n\ndef imresize(img_path, output_path, scale=None, output_shape=None):\n    \"\"\"Resize the image using MATLAB-like downsampling.\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n    \"\"\"\n\n    matlab_resize = MATLABLikeResize(\n        keys=['data'], scale=scale, output_shape=output_shape)\n    img = imread(img_path)\n    img = img_as_float(img)\n    data = {'data': img}\n    output = matlab_resize(data)['data']\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = np.around(output).astype(np.uint8)\n    imsave(output_path, output)\n\n\ndef worker(img_name, args):\n    \"\"\"Worker for each process.\n\n    Args:\n        img_name (str): Image filename.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n\n    gt_dir = args.data_root\n    bix8_dir = osp.join(gt_dir, '../BIx8_down')\n    bix16_dir = osp.join(gt_dir, '../BIx16_down')\n    imresize(\n        osp.join(gt_dir, img_name), osp.join(bix8_dir, img_name), scale=1 / 8)\n    imresize(\n        osp.join(gt_dir, img_name),\n        osp.join(bix16_dir, img_name),\n        scale=1 / 16)\n    process_info = f'Processing {img_name} ...'\n    return process_info\n\n\ndef downsample_images(args):\n    \"\"\"Downsample images from the ground-truth.\"\"\"\n\n    img_list = sorted(os.listdir(args.data_root))\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(args.n_thread)\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, args), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare ffhq dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    bix8_dir = osp.join(args.data_root, '../BIx8_down')\n    bix16_dir = osp.join(args.data_root, '../BIx16_down')\n    if not osp.exists(bix16_dir):\n        os.makedirs(bix16_dir)\n    if not osp.exists(bix8_dir):\n        os.makedirs(bix8_dir)\n\n    # downsample images\n    downsample_images(args)\n"
  },
  {
    "path": "tools/dataset_converters/gopro/README.md",
    "content": "# Preparing GoPro Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe train datasets can be download from [here](https://drive.google.com/file/d/1zgALzrLCC_tcXKu_iHQTHukKUVT1aodI/). The test datasets can be download from [here](https://drive.google.com/file/d/1k6DTSHu4saUgrGTYkkZXTptILyG9RRll/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── GoPro\n|   |   ├── train\n|   |   |   ├── blur\n|   |   |   ├── sharp\n|   |   ├── test\n|   |   |   ├── blur\n|   |   |   ├── sharp\n```\n"
  },
  {
    "path": "tools/dataset_converters/gopro/README_zh-CN.md",
    "content": "# 准备 GoPro 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n训练数据集可以从 [此处](https://drive.google.com/file/d/1zgALzrLCC_tcXKu_iHQTHukKUVT1aodI/) 下载。测试数据集可以从 [此处](https://drive.google.com/file/d/1k6DTSHu4saUgrGTYkkZXTptILyG9RRll/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── GoPro\n|   |   ├── train\n|   |   |   ├── blur\n|   |   |   ├── sharp\n|   |   ├── test\n|   |   |   ├── blur\n|   |   |   ├── sharp\n```\n"
  },
  {
    "path": "tools/dataset_converters/hide/README.md",
    "content": "# Preparing HIDE Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe test datasets can be download from [here](https://drive.google.com/file/d/1XRomKYJF1H92g1EuD06pCQe4o6HlwB7A/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── HIDE\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/hide/README_zh-CN.md",
    "content": "# 准备 HIDE 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n测试数据集可以从 [此处](https://drive.google.com/file/d/1XRomKYJF1H92g1EuD06pCQe4o6HlwB7A/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── HIDE\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/live1/README.md",
    "content": "# Preparing LIVE1 Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{zhang2017beyond,\n  title={Beyond a {Gaussian} denoiser: Residual learning of deep {CNN} for image denoising},\n  author={Zhang, Kai and Zuo, Wangmeng and Chen, Yunjin and Meng, Deyu and Zhang, Lei},\n  journal={IEEE Transactions on Image Processing},\n  year={2017},\n  volume={26},\n  number={7},\n  pages={3142-3155},\n}\n```\n\nThe test datasets can be download from [here](https://github.com/cszn/DnCNN/tree/master/testsets).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── LIVE1\n```\n"
  },
  {
    "path": "tools/dataset_converters/live1/README_zh-CN.md",
    "content": "# 准备 LIVE1 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{zhang2017beyond,\n  title={Beyond a {Gaussian} denoiser: Residual learning of deep {CNN} for image denoising},\n  author={Zhang, Kai and Zuo, Wangmeng and Chen, Yunjin and Meng, Deyu and Zhang, Lei},\n  journal={IEEE Transactions on Image Processing},\n  year={2017},\n  volume={26},\n  number={7},\n  pages={3142-3155},\n}\n```\n\n测试数据集可以从 [此处](https://github.com/cszn/DnCNN/tree/master/testsets) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── LIVE1\n```\n"
  },
  {
    "path": "tools/dataset_converters/ntire21_decompression/README.md",
    "content": "# Preparing NTIRE21 decompression Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{yang2021dataset,\n  title={{NTIRE 2021} Challenge on Quality Enhancement of Compressed Video: Dataset and Study},\n  author={Ren Yang and Radu Timofte},\n  booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops},\n  year={2021}\n}\n\n```\n\nThe test datasets can be download from it's [Homepage](https://github.com/RenYang-home/NTIRE21_VEnh).\n\nPlease follows the tutorials of the [Homepage](https://github.com/RenYang-home/NTIRE21_VEnh) to generate datasets.\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── NTIRE21_decompression_track1\n|   |   ├── GT\n|   |   |   ├── 001\n|   |   |   |   ├── 001.png\n|   |   |   |   ├── ...\n|   |   |   ├── ...\n|   |   |   ├── 010\n|   |   ├── LQ\n|   |   |   ├── 001\n|   |   |   |   ├── 001.png\n|   |   |   |   ├── ...\n|   |   |   ├── ...\n|   |   |   ├── 010\n|   ├── NTIRE21_decompression_track2\n|   |   ├── GT\n|   |   ├── LQ\n|   ├── NTIRE21_decompression_track3\n|   |   ├── GT\n|   |   ├── LQ\n```\n"
  },
  {
    "path": "tools/dataset_converters/ntire21_decompression/README_zh-CN.md",
    "content": "# 准备 NTIRE21 decompression 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{yang2021dataset,\n  title={{NTIRE 2021} Challenge on Quality Enhancement of Compressed Video: Dataset and Study},\n  author={Ren Yang and Radu Timofte},\n  booktitle={IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops},\n  year={2021}\n}\n```\n\n测试数据集可以从其[主页](https://github.com/RenYang-home/NTIRE21_VEnh)下载。\n\n请按照[主页](https://github.com/RenYang-home/NTIRE21_VEnh)教程生成数据集。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── NTIRE21_decompression_track1\n|   |   ├── GT\n|   |   |   ├── 001\n|   |   |   |   ├── 001.png\n|   |   |   |   ├── ...\n|   |   |   ├── ...\n|   |   |   ├── 010\n|   |   ├── LQ\n|   |   |   ├── 001\n|   |   |   |   ├── 001.png\n|   |   |   |   ├── ...\n|   |   |   ├── ...\n|   |   |   ├── 010\n|   ├── NTIRE21_decompression_track2\n|   |   ├── GT\n|   |   ├── LQ\n|   ├── NTIRE21_decompression_track3\n|   |   ├── GT\n|   |   ├── LQ\n```\n"
  },
  {
    "path": "tools/dataset_converters/paired-pix2pix/README.md",
    "content": "# Preparing Paired Dataset for Pix2pix\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{isola2017image,\n  title={Image-to-image translation with conditional adversarial networks},\n  author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={1125--1134},\n  year={2017}\n}\n```\n\nYou can download paired datasets from [here](http://efrosgans.eecs.berkeley.edu/pix2pix/datasets/).\nThen, you need to unzip and move corresponding datasets to follow the folder structure shown above. The datasets have been well-prepared by the original authors.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── paired\n│   │   ├── facades\n│   │   ├── maps\n|   |   ├── edges2shoes\n|   |   |    ├── train\n|   |   |    ├── test\n```\n"
  },
  {
    "path": "tools/dataset_converters/paired-pix2pix/README_zh-CN.md",
    "content": "# 为 Pix2pix 准备配对数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{isola2017image,\n  title={Image-to-image translation with conditional adversarial networks},\n  author={Isola, Phillip and Zhu, Jun-Yan and Zhou, Tinghui and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={1125--1134},\n  year={2017}\n}\n```\n\n您可以从[此处](http://efrosgans.eecs.berkeley.edu/pix2pix/datasets/)下载配对数据集。然后，您需要解压缩并移动相应的数据集以遵循如下所示的文件夹结构。数据集已经由原作者准备好了。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── paired\n│   │   ├── facades\n│   │   ├── maps\n|   |   ├── edges2shoes\n|   |   |    ├── train\n|   |   |    ├── test\n```\n"
  },
  {
    "path": "tools/dataset_converters/paris-street-view/README.md",
    "content": "# Preparing Paris Street View Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{pathak2016context,\n  title={Context encoders: Feature learning by inpainting},\n  author={Pathak, Deepak and Krahenbuhl, Philipp and Donahue, Jeff and Darrell, Trevor and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2536--2544},\n  year={2016}\n}\n```\n\nObtain the dataset [here](https://github.com/pathak22/context-encoder/issues/24).\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── paris_street_view\n│   │   ├── train\n|   |   ├── val\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/paris-street-view/README_zh-CN.md",
    "content": "# 准备 Paris Street View 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{pathak2016context,\n  title={Context encoders: Feature learning by inpainting},\n  author={Pathak, Deepak and Krahenbuhl, Philipp and Donahue, Jeff and Darrell, Trevor and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE conference on computer vision and pattern recognition},\n  pages={2536--2544},\n  year={2016}\n}\n```\n\n请从[此处](https://github.com/pathak22/context-encoder/issues/24)获取数据集。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── paris_street_view\n│   │   ├── train\n|   |   ├── val\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/places365/README.md",
    "content": "# Preparing Places365 Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n @article{zhou2017places,\n   title={Places: A 10 million Image Database for Scene Recognition},\n   author={Zhou, Bolei and Lapedriza, Agata and Khosla, Aditya and Oliva, Aude and Torralba, Antonio},\n   journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},\n   year={2017},\n   publisher={IEEE}\n }\n\n```\n\nPrepare the data from [Places365](http://places2.csail.mit.edu/download.html).\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Places\n│   │   ├── data_large\n│   │   ├── val_large\n|   |   ├── meta\n|   |   |    ├── places365_train_challenge.txt\n|   |   |    ├── places365_val.txt\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/places365/README_zh-CN.md",
    "content": "# 准备 Places365 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n @article{zhou2017places,\n   title={Places: A 10 million Image Database for Scene Recognition},\n   author={Zhou, Bolei and Lapedriza, Agata and Khosla, Aditya and Oliva, Aude and Torralba, Antonio},\n   journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},\n   year={2017},\n   publisher={IEEE}\n }\n\n```\n\n请从 [Places365](http://places2.csail.mit.edu/download.html) 下载并准备数据。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Places\n│   │   ├── data_large\n│   │   ├── val_large\n|   |   ├── meta\n|   |   |    ├── places365_train_challenge.txt\n|   |   |    ├── places365_val.txt\n\n```\n"
  },
  {
    "path": "tools/dataset_converters/realblur/README.md",
    "content": "# Preparing RealBlur Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe test datasets RealBlurR can be download from [here](https://drive.google.com/file/d/1glgeWXCy7Y0qWDc0MXBTUlZYJf8984hS/).\nThe test datasets RealBlurJ can be download from [here](https://drive.google.com/file/d/1Rb1DhhXmX7IXfilQ-zL9aGjQfAAvQTrW/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── RealBlur_R\n|   |   ├── input\n|   |   ├── target\n|   ├── RealBlur_J\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/realblur/README_zh-CN.md",
    "content": "# 准备 RealBlur 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n测试数据集 RealBlurR 可以从 [此处](https://drive.google.com/file/d/1glgeWXCy7Y0qWDc0MXBTUlZYJf8984hS/) 下载。\n测试数据集 RealBlurJ 可以从 [此处](https://drive.google.com/file/d/1Rb1DhhXmX7IXfilQ-zL9aGjQfAAvQTrW/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── RealBlur_R\n|   |   ├── input\n|   |   ├── target\n|   ├── RealBlur_J\n|   |   ├── input\n|   |   ├── target\n```\n"
  },
  {
    "path": "tools/dataset_converters/realsrset/README.md",
    "content": "# Preparing RealSRSet Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{zhang2021designing,\n    title={Designing a Practical Degradation Model for Deep Blind Image Super-Resolution},\n    author={Zhang, Kai and Liang, Jingyun and Van Gool, Luc and Timofte, Radu},\n    booktitle={IEEE International Conference on Computer Vision},\n    pages={4791--4800},\n    year={2021}\n}\n```\n\nThe datasets RealSRSet can be download from [here](https://github.com/cszn/BSRGAN/tree/main/testsets/RealSRSet).\n\nThe datasets RealSRSet+5images can be download from [here](https://github.com/JingyunLiang/SwinIR/releases/download/v0.0/RealSRSet+5images.zip).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── realsrset\n|   ├── RealSRSet+5images\n```\n"
  },
  {
    "path": "tools/dataset_converters/realsrset/README_zh-CN.md",
    "content": "# 准备 RealSRSet 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{zhang2021designing,\n    title={Designing a Practical Degradation Model for Deep Blind Image Super-Resolution},\n    author={Zhang, Kai and Liang, Jingyun and Van Gool, Luc and Timofte, Radu},\n    booktitle={IEEE International Conference on Computer Vision},\n    pages={4791--4800},\n    year={2021}\n}\n```\n\n数据集 RealSRSet 可以从 [此处](https://github.com/cszn/BSRGAN/tree/main/testsets/RealSRSet) 下载。\n\n数据集 RealSRSet+5images 可以从 [此处](https://github.com/JingyunLiang/SwinIR/releases/download/v0.0/RealSRSet+5images.zip) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── realsrset\n|   ├── RealSRSet+5images\n```\n"
  },
  {
    "path": "tools/dataset_converters/reds/README.md",
    "content": "# Preparing REDS Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{Nah_2019_CVPR_Workshops_REDS,\n  author = {Nah, Seungjun and Baik, Sungyong and Hong, Seokil and Moon, Gyeongsik and Son, Sanghyun and Timofte, Radu and Lee, Kyoung Mu},\n  title = {NTIRE 2019 Challenge on Video Deblurring and Super-Resolution: Dataset and Study},\n  booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},\n  month = {June},\n  year = {2019}\n}\n```\n\n- Training dataset: [REDS dataset](https://seungjunnah.github.io/Datasets/reds.html).\n- Validation dataset: [REDS dataset](https://seungjunnah.github.io/Datasets/reds.html) and Vid4.\n\nNote that we merge train and val datasets in REDS for easy switching between REDS4 partition (used in EDVR) and the official validation partition.\nThe original val dataset (clip names from 000 to 029) are modified to avoid conflicts with training dataset (total 240 clips). Specifically, the clip names are changed to 240, 241, ... 269.\n\nYou can prepare the REDS dataset by running:\n\n```shell\npython tools/dataset_converters/reds/preprocess_reds_dataset.py --root-path ./data/REDS\n```\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── REDS\n│   │   ├── train_sharp\n│   │   │   ├── 000\n│   │   │   ├── 001\n│   │   │   ├── ...\n│   │   ├── train_sharp_bicubic\n│   │   │   ├── X4\n│   │   │   |   ├── 000\n│   │   │   |   ├── 001\n│   │   │   |   ├── ...\n│   │   ├── meta_info_reds4_train.txt\n│   │   ├── meta_info_reds4_val.txt\n│   │   ├── meta_info_official_train.txt\n│   │   ├── meta_info_official_val.txt\n│   │   ├── meta_info_REDS_GT.txt\n│   ├── REDS4\n│   │   ├── GT\n│   │   ├── sharp_bicubic\n```\n\n## Prepare LMDB dataset for REDS\n\nIf you want to use LMDB datasets for faster IO speed, you can make LMDB files by:\n\n```shell\npython tools/dataset_converters/reds/preprocess_reds_dataset.py --root-path ./data/REDS --make-lmdb\n```\n\n## Crop to sub-images\n\nMMagic also supports cropping REDS images to sub-images for faster IO. We provide such a script:\n\n```shell\npython tools/dataset_converters/reds/crop_sub_images.py --data-root ./data/REDS  -scales 4\n```\n\nThe generated data is stored under `REDS` and the data structure is as follows, where `_sub` indicates the sub-images.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── REDS\n│   │   ├── train_sharp\n│   │   │   ├── 000\n│   │   │   ├── 001\n│   │   │   ├── ...\n│   │   ├── train_sharp_sub\n│   │   │   ├── 000_s001\n│   │   │   ├── 000_s002\n│   │   │   ├── ...\n│   │   │   ├── 001_s001\n│   │   │   ├── ...\n│   │   ├── train_sharp_bicubic\n│   │   │   ├── X4\n│   │   │   │   ├── 000\n│   │   │   │   ├── 001\n│   │   │   │   ├── ...\n│   │   │   ├── X4_sub\n│   │   │   ├── 000_s001\n│   │   │   ├── 000_s002\n│   │   │   ├── ...\n│   │   │   ├── 001_s001\n│   │   │   ├── ...\n```\n\nNote that by default `preprocess_reds_dataset.py` does not make lmdb and annotation file for the cropped dataset. You may need to modify the scripts a little bit for such operations.\n"
  },
  {
    "path": "tools/dataset_converters/reds/README_zh-CN.md",
    "content": "# 准备 REDS 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{Nah_2019_CVPR_Workshops_REDS,\n  author = {Nah, Seungjun and Baik, Sungyong and Hong, Seokil and Moon, Gyeongsik and Son, Sanghyun and Timofte, Radu and Lee, Kyoung Mu},\n  title = {NTIRE 2019 Challenge on Video Deblurring and Super-Resolution: Dataset and Study},\n  booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},\n  month = {June},\n  year = {2019}\n}\n```\n\n- 训练集: [REDS 数据集](https://seungjunnah.github.io/Datasets/reds.html).\n- 验证集: [REDS 数据集](https://seungjunnah.github.io/Datasets/reds.html) 和 Vid4.\n\n请注意，我们合并了 REDS 的训练集和验证集，以便在 REDS4 划分（在 `EDVR` 中会使用到）和官方验证集划分之间切换。\n\n原始验证集的名称被修改了（clip 000 到 029），以避免与训练集发生冲突（总共 240 个 clip）。具体而言，验证集中的 clips 被改名为 240、241、... 269。\n\n可通过运行以下命令来准备 REDS 数据集:\n\n```shell\npython tools/dataset_converters/reds/preprocess_reds_dataset.py ./data/REDS\n```\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── REDS\n│   │   ├── train_sharp\n│   │   │   ├── 000\n│   │   │   ├── 001\n│   │   │   ├── ...\n│   │   ├── train_sharp_bicubic\n│   │   │   ├── X4\n│   │   │   |   ├── 000\n│   │   │   |   ├── 001\n│   │   │   |   ├── ...\n│   │   ├── meta_info_reds4_train.txt\n│   │   ├── meta_info_reds4_val.txt\n│   │   ├── meta_info_official_train.txt\n│   │   ├── meta_info_official_val.txt\n│   │   ├── meta_info_REDS_GT.txt\n│   ├── REDS4\n│   │   ├── GT\n│   │   ├── sharp_bicubic\n```\n\n## 准备 LMDB 格式的 REDS 数据集\n\n如果您想使用 `LMDB` 以获得更快的 IO 速度，可以通过以下脚本来构建 LMDB 文件：\n\n```shell\npython tools/dataset_converters/reds/preprocess_reds_dataset.py --root-path ./data/REDS --make-lmdb\n```\n\n## 裁剪为子图\n\nMMagic 支持将 REDS 图像裁剪为子图像以加快 IO。我们提供了这样一个脚本：\n\n```shell\npython tools/dataset_converters/reds/crop_sub_images.py --data-root ./data/REDS  -scales 4\n```\n\n生成的数据存储在 `REDS` 下，数据结构如下，其中`_sub`表示子图像。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── REDS\n│   │   ├── train_sharp\n│   │   │   ├── 000\n│   │   │   ├── 001\n│   │   │   ├── ...\n│   │   ├── train_sharp_sub\n│   │   │   ├── 000_s001\n│   │   │   ├── 000_s002\n│   │   │   ├── ...\n│   │   │   ├── 001_s001\n│   │   │   ├── ...\n│   │   ├── train_sharp_bicubic\n│   │   │   ├── X4\n│   │   │   │   ├── 000\n│   │   │   │   ├── 001\n│   │   │   │   ├── ...\n│   │   │   ├── X4_sub\n│   │   │   ├── 000_s001\n│   │   │   ├── 000_s002\n│   │   │   ├── ...\n│   │   │   ├── 001_s001\n│   │   │   ├── ...\n```\n\n请注意，默认情况下，`preprocess_reds_dataset.py` 不会为裁剪后的数据集制作 lmdb 和注释文件。您可能需要为此类操作稍微修改脚本。\n"
  },
  {
    "path": "tools/dataset_converters/reds/crop_sub_images.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nimport re\nimport sys\nfrom multiprocessing import Pool\n\nimport cv2\nimport mmcv\nimport mmengine\nimport numpy as np\n\n\ndef worker(path, opt):\n    \"\"\"Worker for each process.\n\n    Args:\n        path (str): Image path.\n        opt (dict): Configuration dict. It contains:\n            crop_size (int): Crop size.\n            step (int): Step for overlapped sliding window.\n            thresh_size (int): Threshold size. Patches whose size is smaller\n                than thresh_size will be dropped.\n            save_folder (str): Path to save folder.\n            compression_level (int): for cv2.IMWRITE_PNG_COMPRESSION.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n    crop_size = opt['crop_size']\n    step = opt['step']\n    thresh_size = opt['thresh_size']\n    sequence, img_name = re.split(r'[\\\\/]', path)[-2:]\n    img_name, extension = osp.splitext(osp.basename(path))\n\n    img = mmcv.imread(path, flag='unchanged')\n\n    if img.ndim == 2 or img.ndim == 3:\n        h, w = img.shape[:2]\n    else:\n        raise ValueError(f'Image ndim should be 2 or 3, but got {img.ndim}')\n\n    h_space = np.arange(0, h - crop_size + 1, step)\n    if h - (h_space[-1] + crop_size) > thresh_size:\n        h_space = np.append(h_space, h - crop_size)\n    w_space = np.arange(0, w - crop_size + 1, step)\n    if w - (w_space[-1] + crop_size) > thresh_size:\n        w_space = np.append(w_space, w - crop_size)\n\n    index = 0\n    for x in h_space:\n        for y in w_space:\n            index += 1\n            cropped_img = img[x:x + crop_size, y:y + crop_size, ...]\n            sub_folder = osp.join(opt['save_folder'],\n                                  f'{sequence}_s{index:03d}')\n            mmengine.mkdir_or_exist(sub_folder)\n            cv2.imwrite(\n                osp.join(sub_folder, f'{img_name}{extension}'), cropped_img,\n                [cv2.IMWRITE_PNG_COMPRESSION, opt['compression_level']])\n    process_info = f'Processing {img_name} ...'\n    return process_info\n\n\ndef extract_subimages(opt):\n    \"\"\"Crop images to subimages.\n\n    Args:\n        opt (dict): Configuration dict. It contains:\n            input_folder (str): Path to the input folder.\n            save_folder (str): Path to save folder.\n            n_thread (int): Thread number.\n    \"\"\"\n    input_folder = opt['input_folder']\n    save_folder = opt['save_folder']\n    if not osp.exists(save_folder):\n        os.makedirs(save_folder)\n        print(f'mkdir {save_folder} ...')\n    else:\n        print(f'Folder {save_folder} already exists. Exit.')\n        sys.exit(1)\n\n    img_list = list(mmengine.scandir(input_folder, recursive=True))\n\n    img_list = [osp.join(input_folder, v) for v in img_list]\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(opt['n_thread'])\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, opt), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef main_extract_subimages(args):\n    \"\"\"A multi-thread tool to crop large images to sub-images for faster IO.\n\n    It is used for REDS dataset.\n\n    opt (dict): Configuration dict. It contains:\n        n_thread (int): Thread number.\n        compression_level (int):  CV_IMWRITE_PNG_COMPRESSION from 0 to 9.\n            A higher value means a smaller size and longer compression time.\n            Use 0 for faster CPU decompression. Default: 3, same in cv2.\n\n        scales (list[int]): The downsampling factors corresponding to the\n            LR folders you want to process.\n            Default: [].\n        input_folder (str): Path to the input folder.\n        save_folder (str): Path to save folder.\n        crop_size (int): Crop size.\n        step (int): Step for overlapped sliding window.\n        thresh_size (int): Threshold size. Patches whose size is lower\n            than thresh_size will be dropped.\n\n    Usage:\n        For each folder, run this script.\n        For example, if scales = [4], there are two folders to be processed:\n            train_sharp\n            train_sharp_bicubic/X4\n        After process, each sub_folder should have the same number of\n        subimages. You can also specify scales by modifying the argument\n        'scales'. Remember to modify opt configurations according to your\n        settings.\n    \"\"\"\n\n    opt = {}\n    opt['n_thread'] = args.n_thread\n    opt['compression_level'] = args.compression_level\n\n    # HR images\n    opt['input_folder'] = osp.join(args.data_root, 'train_sharp')\n    opt['save_folder'] = osp.join(args.data_root, 'train_sharp_sub')\n    opt['crop_size'] = args.crop_size\n    opt['step'] = args.step\n    opt['thresh_size'] = args.thresh_size\n    extract_subimages(opt)\n\n    for scale in args.scales:\n        opt['input_folder'] = osp.join(args.data_root,\n                                       f'train_sharp_bicubic/X{scale}')\n        opt['save_folder'] = osp.join(args.data_root,\n                                      f'train_sharp_bicubic/X{scale}_sub')\n        opt['crop_size'] = args.crop_size // scale\n        opt['step'] = args.step // scale\n        opt['thresh_size'] = args.thresh_size // scale\n        extract_subimages(opt)\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Preprocess REDS datasets',\n        epilog='You can first download REDS datasets using the script from:'\n        'https://gist.github.com/SeungjunNah/b10d369b92840cb8dd2118dd4f41d643')\n    parser.add_argument('--data-root', type=str, help='root path for REDS')\n    parser.add_argument(\n        '--scales', nargs='*', default=[], help='scale factor list')\n    parser.add_argument(\n        '--crop-size',\n        type=int,\n        nargs='?',\n        default=480,\n        help='cropped size for HR images')\n    parser.add_argument(\n        '--step',\n        type=int,\n        nargs='?',\n        default=240,\n        help='step size for HR images')\n    parser.add_argument(\n        '--thresh-size',\n        type=int,\n        nargs='?',\n        default=0,\n        help='threshold size for HR images')\n    parser.add_argument(\n        '--compression-level',\n        type=int,\n        nargs='?',\n        default=3,\n        help='compression level when save png images')\n    parser.add_argument(\n        '--n-thread',\n        type=int,\n        nargs='?',\n        default=20,\n        help='thread number when using multiprocessing')\n\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    # extract subimages\n    args.scales = [int(v) for v in args.scales]\n    main_extract_subimages(args)\n"
  },
  {
    "path": "tools/dataset_converters/reds/preprocess_reds_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport glob\nimport os\nimport os.path as osp\nimport re\nimport shutil\nimport sys\n\nimport cv2\nimport lmdb\nimport mmcv\nimport mmengine\n\n\ndef make_lmdb(mode, data_path, lmdb_path, batch=5000, compress_level=1):\n    \"\"\"Create lmdb for the REDS dataset.\n\n    Contents of lmdb. The file structure is:\n    example.lmdb\n    ├── data.mdb\n    ├── lock.mdb\n    ├── meta_info.txt\n\n    The data.mdb and lock.mdb are standard lmdb files and you can refer to\n    https://lmdb.readthedocs.io/en/release/ for more details.\n\n    The meta_info.txt is a specified txt file to record the meta information\n    of our datasets. It will be automatically created when preparing\n    datasets by our provided dataset tools.\n    Each line in the txt file records 1)image name (with extension),\n    2)image shape, and 3)compression level, separated by a white space.\n\n    For example, the meta information could be:\n    `000_00000000.png (720,1280,3) 1`, which means:\n    1) image name (with extension): 000_00000000.png;\n    2) image shape: (720,1280,3);\n    3) compression level: 1\n\n    We use the image name without extension as the lmdb key.\n\n    Args:\n        mode (str): REDS dataset mode. Choices: ['train_sharp', 'train_blur',\n            'train_blur_comp', 'train_sharp_bicubic', 'train_blur_bicubic'].\n            They are used to identify different reds dataset for different\n            tasks. Specifically:\n            'train_sharp': GT frames;\n            'train_blur': Blur frames for deblur task.\n            'train_blur_comp': Blur and compressed frames for deblur and\n                compression task.\n            'train_sharp_bicubic': Bicubic downsampled sharp frames for SR\n                task.\n            'train_blur_bicubic': Bicubic downsampled blur frames for SR task.\n        data_path (str): Data path for reading images.\n        lmdb_path (str): Lmdb save path.\n        batch (int): After processing batch images, lmdb commits.\n            Default: 5000.\n        compress_level (int): Compress level when encoding images. Default: 1.\n    \"\"\"\n\n    print(f'Create lmdb for {data_path}, save to {lmdb_path}...')\n    if mode in ['train_sharp', 'train_blur', 'train_blur_comp']:\n        h_dst, w_dst = 720, 1280\n    else:\n        h_dst, w_dst = 180, 320\n\n    if osp.exists(lmdb_path):\n        print(f'Folder {lmdb_path} already exists. Exit.')\n        sys.exit(1)\n\n    print('Reading image path list ...')\n    img_path_list = sorted(\n        list(mmengine.scandir(data_path, suffix='png', recursive=True)))\n    keys = []\n    for img_path in img_path_list:\n        parts = re.split(r'[\\\\/]', img_path)\n        folder = parts[-2]\n        img_name = parts[-1].split('.png')[0]\n        keys.append(folder + '_' + img_name)  # example: 000_00000000\n\n    # create lmdb environment\n    # obtain data size for one image\n    img = mmcv.imread(osp.join(data_path, img_path_list[0]), flag='unchanged')\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    data_size_per_img = img_byte.nbytes\n    print('Data size per image is: ', data_size_per_img)\n    data_size = data_size_per_img * len(img_path_list)\n    env = lmdb.open(lmdb_path, map_size=data_size * 10)\n\n    # write data to lmdb\n    pbar = mmengine.ProgressBar(len(img_path_list))\n    txn = env.begin(write=True)\n    txt_file = open(osp.join(lmdb_path, 'meta_info.txt'), 'w')\n    for idx, (path, key) in enumerate(zip(img_path_list, keys)):\n        pbar.update()\n        key_byte = key.encode('ascii')\n        img = mmcv.imread(osp.join(data_path, path), flag='unchanged')\n        h, w, c = img.shape\n        _, img_byte = cv2.imencode(\n            '.png', img, [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n        assert h == h_dst and w == w_dst and c == 3, (\n            f'Wrong shape ({h, w}), should be ({h_dst, w_dst}).')\n        txn.put(key_byte, img_byte)\n        # write meta information\n        txt_file.write(f'{key}.png ({h},{w},{c}) {compress_level}\\n')\n        if idx % batch == 0:\n            txn.commit()\n            txn = env.begin(write=True)\n    txn.commit()\n    env.close()\n    txt_file.close()\n    print('\\nFinish writing lmdb.')\n\n\ndef merge_train_val(train_path, val_path):\n    \"\"\"Merge the train and val datasets of REDS.\n\n    Because the EDVR uses a different validation partition, so we merge train\n    and val datasets in REDS for easy switching between REDS4 partition (used\n    in EDVR) and the official validation partition.\n\n    The original val dataset (clip names from 000 to 029) are modified to avoid\n    conflicts with training dataset (total 240 clips). Specifically, the clip\n    names are changed to 240, 241, ... 269.\n\n    Args:\n        train_path (str): Training folder paths.\n        val_path (str): Validation folder paths.\n    \"\"\"\n\n    print(f'Move {val_path} to {train_path}...')\n    val_folders = glob.glob(osp.join(val_path, '*'))\n    for folder in val_folders:\n        index = int(re.split(r'[\\\\/]', folder)[-1])\n        new_folder_idx = f'{index + 240:03d}'\n        shutil.move(folder, osp.join(train_path, new_folder_idx))\n\n\ndef generate_anno_file(root_path, file_name='meta_info_REDS_GT.txt'):\n    \"\"\"Generate anno file for REDS datasets from the ground-truth folder.\n\n    Args:\n        root_path (str): Root path for REDS datasets.\n    \"\"\"\n\n    print(f'Generate annotation files {file_name}...')\n    txt_file = osp.join(root_path, file_name)\n    mmengine.utils.mkdir_or_exist(osp.dirname(txt_file))\n    with open(txt_file, 'w') as f:\n        for i in range(270):\n            for j in range(100):\n                f.write(f'{i:03d}/{j:08d}.png (720, 1280, 3)\\n')\n\n\ndef split_anno_file(root_path, val_partition='REDS4'):\n    \"\"\"Split anno file for REDS datasets from the ground-truth folder.\n\n    Args:\n        root_path (str): Root path for REDS datasets.\n        val_partition (str): The way of split.\n            Selected from `RED4` and `official`. Default: 'REDS4'\n    \"\"\"\n\n    print(f'Split annotation files in {val_partition} mode...')\n    if val_partition == 'official':\n        val_partition = [f'{v:03d}' for v in range(240, 270)]\n        train_txt_file = osp.join(root_path, 'meta_info_official_train.txt')\n        val_txt_file = osp.join(root_path, 'meta_info_official_val.txt')\n    else:\n        val_partition = ['000', '011', '015', '020']\n        train_txt_file = osp.join(root_path, 'meta_info_reds4_train.txt')\n        val_txt_file = osp.join(root_path, 'meta_info_reds4_val.txt')\n\n    train_list = []\n    val_list = []\n    for i in range(270):\n        for j in range(100):\n            if f'{i:03d}' in val_partition:\n                val_list.append(f'{i:03d}/{j:08d}.png (720, 1280, 3)')\n            else:\n                train_list.append(f'{i:03d}/{j:08d}.png (720, 1280, 3)')\n\n    mmengine.utils.mkdir_or_exist(osp.dirname(train_txt_file))\n    with open(train_txt_file, 'w') as f:\n        f.write('\\n'.join(train_list))\n\n    mmengine.utils.mkdir_or_exist(osp.dirname(val_txt_file))\n    with open(val_txt_file, 'w') as f:\n        f.write('\\n'.join(val_list))\n\n\ndef unzip(zip_path):\n    \"\"\"Unzip zip files. It will scan all zip files in zip_path and return unzip\n    folder names.\n\n    Args:\n        zip_path (str): Path for zip files.\n\n    Returns:\n        list: unzip folder names.\n    \"\"\"\n    zip_files = mmengine.scandir(zip_path, suffix='zip', recursive=False)\n    import shutil\n    import zipfile\n    unzip_folders = []\n    for zip_file in zip_files:\n        zip_file = osp.join(zip_path, zip_file)\n        unzip_folder = zip_file.replace('.zip', '').split('_part')[0]\n        print(f'Unzip {zip_file} to {unzip_folder}')\n        with zipfile.ZipFile(zip_file, 'r') as zip_ref:\n            zip_ref.extractall(unzip_folder)\n        data_name = osp.basename(unzip_folder)\n        data_type = data_name.split('_')[0]\n        # if data path like `train_sharp/train/train_sharp/*`\n        # begin reorganizing to `train_sharp/*`\n        if osp.isdir(osp.join(unzip_folder, data_type, data_name)):\n            data_folder = osp.join(unzip_folder, data_type, data_name)\n            for i in os.listdir(data_folder):\n                shutil.move(osp.join(data_folder, i), unzip_folder)\n            shutil.rmtree(osp.join(unzip_folder, data_type))\n        # end reorganizing\n        unzip_folders.append(unzip_folder)\n    return unzip_folders\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Preprocess REDS datasets',\n        epilog='You can first download REDS datasets using the script from:'\n        'https://gist.github.com/SeungjunNah/b10d369b92840cb8dd2118dd4f41d643')\n    parser.add_argument('--root-path', type=str, help='root path for REDS')\n    parser.add_argument(\n        '--make-lmdb', action='store_true', help='create lmdb files')\n\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    \"\"\"You can first download datasets using the scripts:\n    https://gist.github.com/SeungjunNah/b10d369b92840cb8dd2118dd4f41d643.\n\n    The folder structure should be like:\n    REDS\n    ├── train_sharp_part1.zip\n    ├── train_sharp_part2.zip\n    ├── train_sharp_part3.zip\n    ├── train_sharp_bicubic.zip\n    ├── val_sharp.zip\n    ├── val_sharp_bicubic.zip\n    The following are optional:\n    REDS\n    ├── train_blur_bicubic.zip\n    ├── val_blur_bicubic.zip\n    ├── train_blur_part1.zip\n    ├── train_blur_part2.zip\n    ├── train_blur_part3.zip\n    ├── val_blur.zip\n    ├── train_blur_comp_part1.zip\n    ├── train_blur_comp_part2.zip\n    ├── train_blur_comp_part3.zip\n    ├── val_blur_comp.zip\n    \"\"\"\n\n    args = parse_args()\n    root_path = args.root_path\n\n    # unzip files and obtain available folder names\n    folder_paths = unzip(root_path)\n    folder_paths = set(folder_paths)\n\n    train_folders = [\n        osp.basename(v) for v in folder_paths if 'train' in osp.basename(v)\n    ]\n\n    for train_folder in train_folders:\n        train_path = osp.join(root_path, train_folder)\n        val_path = osp.join(root_path, train_folder.replace('train_', 'val_'))\n        # folders with 'bicubic' will have subfolder X4\n        if 'bicubic' in train_folder:\n            train_path = osp.join(train_path, 'X4')\n            val_path = osp.join(val_path, 'X4')\n        # merge train and val datasets\n        merge_train_val(train_path, val_path)\n\n        # remove validation folders\n        if 'bicubic' in train_folder:\n            val_path = osp.dirname(val_path)\n        print(f'Remove {val_path}')\n        shutil.rmtree(val_path)\n\n    # generate image list anno file\n    generate_anno_file(root_path)\n    split_anno_file(root_path, val_partition='RED4')\n    split_anno_file(root_path, val_partition='official')\n\n    # create lmdb file\n    if args.make_lmdb:\n        for train_folder in train_folders:\n            lmdb_path = osp.join(root_path, train_folder + '.lmdb')\n            data_path = osp.join(root_path, train_folder)\n            if 'bicubic' in train_folder:\n                data_path = osp.join(data_path, 'X4')\n            make_lmdb(\n                mode=train_folder, data_path=data_path, lmdb_path=lmdb_path)\n"
  },
  {
    "path": "tools/dataset_converters/sidd/README.md",
    "content": "# Preparing SIDD Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\nThe train datasets can be download from [here](https://drive.google.com/file/d/1UHjWZzLPGweA9ZczmV8lFSRcIxqiOVJw/). The validation datasets can be download from [here](https://drive.google.com/file/d/11vfqV-lqousZTuAit1Qkqghiv_taY0KZ/).\n\nFor validation datasets, we need to export images from mat file. We provide such a script:\n\n```shell\npython tools/dataset_converters/sidd/preprocess_sidd_test_dataset.py --data-root ./data/SIDD/val --out-dir ./data/SIDD/val\n```\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── SIDD\n|   |   ├── train\n|   |   |   ├── gt\n|   |   |   ├── noisy\n|   |   ├── val\n|   |   |   ├── gt\n|   |   |   ├── noisy\n|   |   |   ├── ValidationNoisyBlocksSrgb.mat\n|   |   |   ├── ValidationGtBlocksSrgb.mat\n```\n"
  },
  {
    "path": "tools/dataset_converters/sidd/README_zh-CN.md",
    "content": "# 准备 SIDD 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{Zamir2021Restormer,\n  title={Restormer: Efficient Transformer for High-Resolution Image Restoration},\n  author={Syed Waqas Zamir and Aditya Arora and Salman Khan and Munawar Hayat and Fahad Shahbaz Khan and Ming-Hsuan Yang},\n  booktitle={CVPR},\n  year={2022}\n}\n```\n\n训练数据集可以从 [此处](https://drive.google.com/file/d/1UHjWZzLPGweA9ZczmV8lFSRcIxqiOVJw/) 下载。验证数据集可以从 [此处](https://drive.google.com/file/d/11vfqV-lqousZTuAit1Qkqghiv_taY0KZ/) 下载。\n\n验证数据集需要从 mat 文件中导出，为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/sidd/preprocess_sidd_test_dataset.py --data-root ./data/SIDD/val --out-dir ./data/SIDD/val\n```\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── SIDD\n|   |   ├── train\n|   |   |   ├── gt\n|   |   |   ├── noisy\n|   |   ├── val\n|   |   |   ├── gt\n|   |   |   ├── noisy\n|   |   |   ├── ValidationNoisyBlocksSrgb.mat\n|   |   |   ├── ValidationGtBlocksSrgb.mat\n```\n"
  },
  {
    "path": "tools/dataset_converters/sidd/preprocess_sidd_test_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\n\nimport cv2\nimport numpy as np\nimport scipy.io as sio\nimport torch\nfrom skimage import img_as_ubyte\nfrom tqdm import tqdm\n\n\ndef export_images(args):\n    \"\"\"Export images from mat file.\"\"\"\n\n    noisy_dir = osp.join(args.out_dir, 'noisy')\n    os.makedirs(noisy_dir, exist_ok=True)\n    gt_dir = osp.join(args.out_dir, 'gt')\n    os.makedirs(gt_dir, exist_ok=True)\n\n    noisy_matfile = osp.join(args.data_root, 'ValidationNoisyBlocksSrgb.mat')\n    gt_matfile = osp.join(args.data_root, 'ValidationGtBlocksSrgb.mat')\n    noisy_images = sio.loadmat(noisy_matfile)\n    gt_images = sio.loadmat(gt_matfile)\n\n    noisy_images = np.float32(\n        np.array(noisy_images['ValidationNoisyBlocksSrgb']))\n    noisy_images /= 255.\n    gt_images = np.float32(np.array(gt_images['ValidationGtBlocksSrgb']))\n    gt_images /= 255.\n\n    # processing noisy images\n    print('Exporting', noisy_matfile, 'to', noisy_dir)\n    for i in tqdm(range(40)):\n        for k in range(32):\n            noisy_patch = torch.from_numpy(\n                noisy_images[i, k, :, :, :]).unsqueeze(0).permute(0, 3, 1, 2)\n            noisy_patch = torch.clamp(noisy_patch, 0,\n                                      1).detach().permute(0, 2, 3,\n                                                          1).squeeze(0)\n            save_path = osp.join(noisy_dir, f'val_{str(i*32+k)}_NOISY.png')\n            cv2.imwrite(\n                save_path,\n                cv2.cvtColor(img_as_ubyte(noisy_patch), cv2.COLOR_RGB2BGR))\n\n    # processing gt images\n    print('Exporting', gt_matfile, 'to', gt_dir)\n    for i in tqdm(range(40)):\n        for k in range(32):\n            gt_patch = torch.from_numpy(\n                gt_images[i, k, :, :, :]).unsqueeze(0).permute(0, 3, 1, 2)\n            gt_patch = torch.clamp(gt_patch, 0,\n                                   1).detach().permute(0, 2, 3, 1).squeeze(0)\n            save_path = osp.join(gt_dir, f'val_{str(i*32+k)}_GT.png')\n            cv2.imwrite(\n                save_path,\n                cv2.cvtColor(img_as_ubyte(gt_patch), cv2.COLOR_RGB2BGR))\n\n    print('\\nFinish exporting images.')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare SIDD test dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument('--out-dir', help='output directory of dataset')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    # export images\n    export_images(args)\n"
  },
  {
    "path": "tools/dataset_converters/spmcs/README.md",
    "content": "# Preparing SPMCS Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{tao2017spmc,\n  author={Xin Tao and Hongyun Gao and Renjie Liao and Jue Wang and Jiaya Jia},\n  title = {Detail-Revealing Deep Video Super-Resolution},\n  booktitle = {The IEEE International Conference on Computer Vision (ICCV)},\n  month = {Oct},\n  year = {2017}\n}\n```\n\nThe datasets can be download from [here](https://opendatalab.org.cn/SPMCS).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── SPMCS\n|   |   ├── GT\n|   |   ├── BIx4\n|   |   ├── BDx4\n|   |   ├── meta_info_SPMCS_GT.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/spmcs/README_zh-CN.md",
    "content": "# 准备 SPMCS 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@InProceedings{tao2017spmc,\n  author={Xin Tao and Hongyun Gao and Renjie Liao and Jue Wang and Jiaya Jia},\n  title = {Detail-Revealing Deep Video Super-Resolution},\n  booktitle = {The IEEE International Conference on Computer Vision (ICCV)},\n  month = {Oct},\n  year = {2017}\n}\n```\n\n数据集可以从 [此处](https://opendatalab.org.cn/SPMCS) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── SPMCS\n|   |   ├── GT\n|   |   ├── BIx4\n|   |   ├── BDx4\n|   |   ├── meta_info_SPMCS_GT.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/udm10/README.md",
    "content": "# Preparing UDM10 Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{PFNL,\n    title={Progressive Fusion Video Super-Resolution Network via Exploiting Non-Local Spatio-Temporal Correlations},\n    author={Yi, Peng and Wang, Zhongyuan and Jiang, Kui and Jiang, Junjun and Ma, Jiayi},\n    booktitle={IEEE International Conference on Computer Vision (ICCV)},\n    pages={3106-3115},\n    year={2019},\n}\n```\n\nThe datasets can be downloaded from [here](https://drive.google.com/file/d/1G4V4KZZhhfzUlqHiSBBuWyqLyIOvOs0W/).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── UDM10\n|   |   ├── GT\n|   |   ├── BIx4\n|   |   ├── BDx4\n```\n"
  },
  {
    "path": "tools/dataset_converters/udm10/README_zh-CN.md",
    "content": "# 准备 UDM10 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{PFNL,\n    title={Progressive Fusion Video Super-Resolution Network via Exploiting Non-Local Spatio-Temporal Correlations},\n    author={Yi, Peng and Wang, Zhongyuan and Jiang, Kui and Jiang, Junjun and Ma, Jiayi},\n    booktitle={IEEE International Conference on Computer Vision (ICCV)},\n    pages={3106-3115},\n    year={2019},\n}\n```\n\n数据集可以从 [此处](https://drive.google.com/file/d/1G4V4KZZhhfzUlqHiSBBuWyqLyIOvOs0W/) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── UDM10\n|   |   ├── GT\n|   |   ├── BIx4\n|   |   ├── BDx4\n```\n"
  },
  {
    "path": "tools/dataset_converters/unconditional_gans/README.md",
    "content": "# Unconditional GANs Datasets\n\n**Data preparation for unconditional model** is simple. What you need to do is downloading the images and put them into a directory. Next, you should set a symlink in the `data` directory. For standard unconditional gans with static architectures, like DCGAN and StyleGAN2, `UnconditionalImageDataset` is designed to train such unconditional models. Here is an example config for FFHQ dataset:\n\n```python\ndataset_type = 'BasicImageDataset'\n\ntrain_pipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Flip', keys=['img'], direction='horizontal'),\n    dict(type='PackInputs', keys=['img'], meta_keys=['img_path'])\n]\n\n# `batch_size` and `data_root` need to be set.\ntrain_dataloader = dict(\n    batch_size=4,\n    num_workers=8,\n    persistent_workers=True,\n    sampler=dict(type='InfiniteSampler', shuffle=True),\n    dataset=dict(\n        type=dataset_type,\n        data_root=None,  # set by user\n        pipeline=train_pipeline))\n```\n\nHere, we adopt `InfinitySampler` to avoid frequent dataloader reloading, which will accelerate the training procedure. As shown in the example, `pipeline` provides important data pipeline to process images, including loading from file system, resizing, cropping, transferring to `torch.Tensor` and packing to `DataSample`. All of supported data pipelines can be found in `mmagic/datasets/transforms`.\n\nFor unconditional GANs with dynamic architectures like PGGAN and StyleGANv1, `GrowScaleImgDataset` is recommended to use for training. Since such dynamic architectures need real images in different scales, directly adopting `UnconditionalImageDataset` will bring heavy I/O cost for loading multiple high-resolution images. Here is an example we use for training PGGAN in CelebA-HQ dataset:\n\n```python\ndataset_type = 'GrowScaleImgDataset'\n\npipeline = [\n    dict(type='LoadImageFromFile', key='img'),\n    dict(type='Flip', keys=['img'], direction='horizontal'),\n    dict(type='PackInputs')\n]\n\n# `samples_per_gpu` and `imgs_root` need to be set.\ntrain_dataloader = dict(\n    num_workers=4,\n    batch_size=64,\n    dataset=dict(\n        type='GrowScaleImgDataset',\n        data_roots={\n            '1024': './data/ffhq/images',\n            '256': './data/ffhq/ffhq_imgs/ffhq_256',\n            '64': './data/ffhq/ffhq_imgs/ffhq_64'\n        },\n        gpu_samples_base=4,\n        # note that this should be changed with total gpu number\n        gpu_samples_per_scale={\n            '4': 64,\n            '8': 32,\n            '16': 16,\n            '32': 8,\n            '64': 4,\n            '128': 4,\n            '256': 4,\n            '512': 4,\n            '1024': 4\n        },\n        len_per_stage=300000,\n        pipeline=pipeline),\n    sampler=dict(type='InfiniteSampler', shuffle=True))\n```\n\nIn this dataset, you should provide a dictionary of image paths to the `data_roots`. Thus, you should resize the images in the dataset in advance.\nFor the resizing methods in the data pre-processing, we adopt bilinear interpolation methods in all of the experiments studied in MMagic.\n\nNote that this dataset should be used with `PGGANFetchDataHook`. In this config file, this hook should be added in the customized hooks, as shown below.\n\n```python\ncustom_hooks = [\n    dict(\n        type='VisualizationHook',\n        interval=5000,\n        fixed_input=True,\n        # vis ema and orig at the same time\n        vis_kwargs_list=dict(\n            type='Noise',\n            name='fake_img',\n            sample_model='ema/orig',\n            target_keys=['ema', 'orig'])),\n    dict(type='PGGANFetchDataHook')\n]\n```\n\nThis fetching data hook helps the dataloader update the status of dataset to change the data source and batch size during training.\n\nHere, we provide several download links of datasets frequently used in unconditional models: [LSUN](http://dl.yf.io/lsun/), [CelebA](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html), [CelebA-HQ](https://drive.google.com/drive/folders/11Vz0fqHS2rXDb5pprgTjpD7S2BAJhi1P), [FFHQ](https://drive.google.com/drive/folders/1u2xu7bSrWxrbUxk-dT-UvEJq8IjdmNTP).\n"
  },
  {
    "path": "tools/dataset_converters/unpaired-cyclegan/README.md",
    "content": "# Preparing Unpaired Dataset for CycleGAN\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{zhu2017unpaired,\n  title={Unpaired image-to-image translation using cycle-consistent adversarial networks},\n  author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE international conference on computer vision},\n  pages={2223--2232},\n  year={2017}\n}\n```\n\nYou can download unpaired datasets from [here](https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/).\nThen, you need to unzip and move corresponding datasets to follow the folder structure shown above. The datasets have been well-prepared by the original authors.\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── unpaired\n│   │   ├── facades\n|   |   ├── horse2zebra\n|   |   ├── summer2winter_yosemite\n|   |   |    ├── trainA\n|   |   |    ├── trainB\n|   |   |    ├── testA\n|   |   |    ├── testB\n```\n"
  },
  {
    "path": "tools/dataset_converters/unpaired-cyclegan/README_zh-CN.md",
    "content": "# 为 CycleGAN 准备未配对数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{zhu2017unpaired,\n  title={Unpaired image-to-image translation using cycle-consistent adversarial networks},\n  author={Zhu, Jun-Yan and Park, Taesung and Isola, Phillip and Efros, Alexei A},\n  booktitle={Proceedings of the IEEE international conference on computer vision},\n  pages={2223--2232},\n  year={2017}\n}\n```\n\n您可以从[此处](https://people.eecs.berkeley.edu/~taesung_park/CycleGAN/datasets/)下载未配对的数据集。然后，您需要解压缩并移动相应的数据集以遵循如上所示的文件夹结构。数据集已经由原作者准备好了。\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── unpaired\n│   │   ├── facades\n|   |   ├── horse2zebra\n|   |   ├── summer2winter_yosemite\n|   |   |    ├── trainA\n|   |   |    ├── trainB\n|   |   |    ├── testA\n|   |   |    ├── testB\n```\n"
  },
  {
    "path": "tools/dataset_converters/vid4/README.md",
    "content": "# Preparing Vid4 Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={On Bayesian adaptive video super resolution},\n  author={Liu, Ce and Sun, Deqing},\n  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},\n  volume={36},\n  number={2},\n  pages={346--360},\n  year={2013},\n  publisher={IEEE}\n}\n```\n\nThe Vid4 dataset can be downloaded from [here](https://drive.google.com/file/d/1ZuvNNLgR85TV_whJoHM7uVb-XW1y70DW/view?usp=sharing). There are two degradations in the dataset.\n\n1. BIx4 contains images downsampled by bicubic interpolation\n2. BDx4 contains images blurred by Gaussian kernel with σ=1.6, followed by a subsampling every four pixels.\n\nNote that we should prepare a annotation file (such as meta_info_Vid4_GT.txt) for Vid4 dataset as follows.\n\n```text\ncalendar 41 (576,720,3)\ncity 34 (576,704,3)\nfoliage 49 (480,720,3)\nwalk 47 (480,720,3)\n```\n\nFor ToFlow, we should prepare directly upsampling dataset. We provide such a script:\n\n```shell\npython tools/dataset_converters/vid4/preprocess_vid4_dataset.py --data-root ./data/Vid4/BIx4\n```\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Vid4\n│   │   ├── GT\n│   │   │   ├── calendar\n│   │   │   ├── city\n│   │   │   ├── foliage\n│   │   │   ├── walk\n│   │   ├── BDx4\n│   │   ├── BIx4\n│   │   ├── BIx4up_direct\n│   │   ├── meta_info_Vid4_GT.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/vid4/README_zh-CN.md",
    "content": "# 准备 Vid4 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={On Bayesian adaptive video super resolution},\n  author={Liu, Ce and Sun, Deqing},\n  journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},\n  volume={36},\n  number={2},\n  pages={346--360},\n  year={2013},\n  publisher={IEEE}\n}\n```\n\n可以从 [此处](https://drive.google.com/file/d/1ZuvNNLgR85TV_whJoHM7uVb-XW1y70DW/view?usp=sharing) 下载 Vid4 数据集，其中包含了由两种下采样方法得到的图片：\n\n1. BIx4 包含了由双线性插值下采样得到的图片\n2. BDx4 包含了由 `σ=1.6` 的高斯核模糊，然后每4个像素进行一次采样得到的图片\n\n请注意，应为 Vid4 数据集准备一个如下所列的标注文件（例如 meta_info_Vid4_GT.txt）。\n\n```text\ncalendar 41 (576,720,3)\ncity 34 (576,704,3)\nfoliage 49 (480,720,3)\nwalk 47 (480,720,3)\n```\n\n对于 ToFlow，应准备直接上采样的数据集，为此，我们提供了一个脚本：\n\n```shell\npython tools/dataset_converters/vid4/preprocess_vid4_dataset.py --data-root ./data/Vid4/BIx4\n```\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── Vid4\n│   │   ├── GT\n│   │   │   ├── calendar\n│   │   │   ├── city\n│   │   │   ├── foliage\n│   │   │   ├── walk\n│   │   ├── BDx4\n│   │   ├── BIx4\n│   │   ├── BIx4up_direct\n│   │   ├── meta_info_Vid4_GT.txt\n```\n"
  },
  {
    "path": "tools/dataset_converters/vid4/preprocess_vid4_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\nfrom multiprocessing import Pool\n\nimport mmengine\nimport numpy as np\nfrom skimage import img_as_float\nfrom skimage.io import imread, imsave\n\nfrom mmagic.datasets.transforms import MATLABLikeResize\n\n\ndef imresize(img_path, output_path, scale=None, output_shape=None):\n    \"\"\"Resize the image using MATLAB-like downsampling.\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n    \"\"\"\n\n    matlab_resize = MATLABLikeResize(\n        keys=['data'], scale=scale, output_shape=output_shape)\n    img = imread(img_path)\n    img = img_as_float(img)\n    data = {'data': img}\n    output = matlab_resize(data)['data']\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = np.around(output).astype(np.uint8)\n    imsave(output_path, output)\n\n\ndef worker(img_name, args):\n    \"\"\"Worker for each process.\n\n    Args:\n        img_name (str): Image filename.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n\n    up_dir = osp.join(args.data_root, '../BIx4up_direct')\n    mmengine.utils.mkdir_or_exist(osp.dirname(osp.join(up_dir, img_name)))\n    imresize(\n        osp.join(args.data_root, img_name),\n        osp.join(up_dir, img_name),\n        scale=4)\n    process_info = f'Processing {img_name} ...'\n    return process_info\n\n\ndef upsample_images(args):\n    \"\"\"Upsample images.\"\"\"\n\n    img_list = []\n    clip_list = sorted(os.listdir(args.data_root))\n    for clip in clip_list:\n        clip_root = osp.join(args.data_root, clip)\n        img_list.extend(\n            [osp.join(clip, i) for i in sorted(os.listdir(clip_root))])\n    prog_bar = mmengine.ProgressBar(len(img_list))\n    pool = Pool(args.n_thread)\n    for path in img_list:\n        pool.apply_async(\n            worker, args=(path, args), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Prepare cat dataset',\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    up_dir = osp.join(args.data_root, '../BIx4up_direct')\n    if not osp.exists(up_dir):\n        os.makedirs(up_dir)\n\n    # upsample images\n    upsample_images(args)\n"
  },
  {
    "path": "tools/dataset_converters/videolq/README.md",
    "content": "# Preparing VideoLQ Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{chan2022investigating,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {Investigating Tradeoffs in Real-World Video Super-Resolution},\n  booktitle = {IEEE Conference on Computer Vision and Pattern Recognition},\n  year = {2022}\n}\n```\n\nYou can download the dataset using [Dropbox](https://www.dropbox.com/sh/hc06f1livdhutbo/AAAMPy92EOqVjRN8waT0ie8ja?dl=0) / [Google Drive](https://drive.google.com/drive/folders/1-1iJRNdqdFZWOnoUU4xG1Z1QhwsGwMDy?usp=sharing) / [OneDrive](https://entuedu-my.sharepoint.com/:f:/g/personal/chan0899_e_ntu_edu_sg/ErSugvUBxoBMlvSAHhqT5BEB9-4ZaqxzJIcc9uvVa8JGHg?e=WpHJTc).\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── VideoLQ\n│   │   ├── 000\n│   │   │   ├── 00000000.png\n│   │   │   ├── 00000001.png\n│   │   │   ├── ...\n│   │   ├── 001\n│   │   ├── 002\n│   │   ├── ...\n```\n"
  },
  {
    "path": "tools/dataset_converters/videolq/README_zh-CN.md",
    "content": "# 准备 VideoLQ 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@inproceedings{chan2022investigating,\n  author = {Chan, Kelvin C.K. and Zhou, Shangchen and Xu, Xiangyu and Loy, Chen Change},\n  title = {Investigating Tradeoffs in Real-World Video Super-Resolution},\n  booktitle = {IEEE Conference on Computer Vision and Pattern Recognition},\n  year = {2022}\n}\n```\n\n数据集可以从 [Dropbox](https://www.dropbox.com/sh/hc06f1livdhutbo/AAAMPy92EOqVjRN8waT0ie8ja?dl=0) / [Google Drive](https://drive.google.com/drive/folders/1-1iJRNdqdFZWOnoUU4xG1Z1QhwsGwMDy?usp=sharing) / [OneDrive](https://entuedu-my.sharepoint.com/:f:/g/personal/chan0899_e_ntu_edu_sg/ErSugvUBxoBMlvSAHhqT5BEB9-4ZaqxzJIcc9uvVa8JGHg?e=WpHJTc) 下载。\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n|   ├── VideoLQ\n│   │   ├── 000\n│   │   │   ├── 00000000.png\n│   │   │   ├── 00000001.png\n│   │   │   ├── ...\n│   │   ├── 001\n│   │   ├── 002\n│   │   ├── ...\n```\n"
  },
  {
    "path": "tools/dataset_converters/vimeo90k/README.md",
    "content": "# Preparing Vimeo90K Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={Video Enhancement with Task-Oriented Flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision (IJCV)},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n\nThe training and test datasets can be downloaded from [here](http://toflow.csail.mit.edu/).\n\nThen you can rename the directory `vimeo_septuplet/sequences` to  `vimeo90k/GT`. The Vimeo90K dataset has a `clip/sequence/img` folder structure:\n\n```text\nvimeo90k\n├── GT\n│   ├── 00001\n│   │   ├── 0001\n│   │   │   ├── im1.png\n│   │   │   ├── im2.png\n│   │   │   ├── ...\n│   │   ├── 0002\n│   │   ├── 0003\n│   │   ├── ...\n│   ├── 00002\n│   ├── ...\n├── sep_trainlist.txt\n├── sep_testlist.txt\n```\n\nTo generate the downsampling images BIx4 and BDx4 and prepare the annotation file, you need to run the following command:\n\n```shell\npython tools/dataset_converters/vimeo90k/preprocess_vimeo90k_dataset.py --data-root ./data/vimeo90k\n```\n\nThe folder structure should look like:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── vimeo_triplet\n│   │   ├── GT\n│   │   │   ├── 00001\n│   │   │   │   ├── 0001\n│   │   │   │   │   ├── im1.png\n│   │   │   │   │   ├── im2.png\n│   │   │   │   │   ├── ...\n│   │   │   │   ├── 0002\n│   │   │   │   ├── 0003\n│   │   │   │   ├── ...\n│   │   │   ├── 00002\n│   │   │   ├── ...\n│   │   ├── BIx4\n│   │   ├── BDx4\n│   │   ├── meta_info_Vimeo90K_test_GT.txt\n│   │   ├── meta_info_Vimeo90K_train_GT.txt\n```\n\n## Prepare LMDB dataset for Vimeo90K\n\nIf you want to use LMDB datasets for faster IO speed, you can make LMDB files by:\n\n```shell\npython tools/dataset_converters/vimeo90k/preprocess_vimeo90k_dataset.py --data-root ./data/vimeo90k --train_list ./data/vimeo90k/sep_trainlist.txt --gt-path ./data/vimeo90k/GT --lq-path ./data/Vimeo90k/BIx4  --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/vimeo90k/README_zh-CN.md",
    "content": "# 准备 Vimeo90K 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={Video Enhancement with Task-Oriented Flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision (IJCV)},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n\n训练集和测试集可以从 [此处](http://toflow.csail.mit.edu/) 下载。\n\n将数据集路径 `vimeo_septuplet/sequences` 重命名为 `vimeo90k/GT`。Vimeo90K 数据集包含了如下所示的 `clip/sequence/img` 目录结构：\n\n```text\nvimeo90k\n├── GT\n│   ├── 00001\n│   │   ├── 0001\n│   │   │   ├── im1.png\n│   │   │   ├── im2.png\n│   │   │   ├── ...\n│   │   ├── 0002\n│   │   ├── 0003\n│   │   ├── ...\n│   ├── 00002\n│   ├── ...\n├── sep_trainlist.txt\n├── sep_testlist.txt\n```\n\n为了生成下采样图像BIx4和BDx4，以及准备所需的标注文件，需要执行如下命令：\n\n```shell\npython tools/dataset_converters/vimeo90k/preprocess_vimeo90k_dataset.py --data-root ./data/vimeo90k\n```\n\n文件目录结构应如下所示：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── vimeo_triplet\n│   │   ├── GT\n│   │   │   ├── 00001\n│   │   │   │   ├── 0001\n│   │   │   │   │   ├── im1.png\n│   │   │   │   │   ├── im2.png\n│   │   │   │   │   ├── ...\n│   │   │   │   ├── 0002\n│   │   │   │   ├── 0003\n│   │   │   │   ├── ...\n│   │   │   ├── 00002\n│   │   │   ├── ...\n│   │   ├── BIx4\n│   │   ├── BDx4\n│   │   ├── meta_info_Vimeo90K_test_GT.txt\n│   │   ├── meta_info_Vimeo90K_train_GT.txt\n```\n\n## 准备 LMDB 格式的 Vimeo90K 数据集\n\n如果您想使用 `LMDB` 以获得更快的 IO 速度，可以通过以下脚本来构建 LMDB 文件\n\n```shell\npython tools/dataset_converters/vimeo90k/preprocess_vimeo90k_dataset.py --data-root ./data/vimeo90k --train_list ./data/vimeo90k/sep_trainlist.txt --gt-path ./data/vimeo90k/GT --lq-path ./data/Vimeo90k/BIx4  --make-lmdb\n```\n"
  },
  {
    "path": "tools/dataset_converters/vimeo90k/preprocess_vimeo90k_dataset.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport math\nimport os\nimport os.path as osp\nimport sys\nfrom multiprocessing import Pool\n\nimport cv2\nimport lmdb\nimport mmcv\nimport mmengine\nimport numpy as np\nfrom skimage import img_as_float\nfrom skimage.io import imread, imsave\n\nfrom mmagic.datasets.transforms import MATLABLikeResize, blur_kernels\nfrom mmagic.utils import modify_args\n\n\ndef make_lmdb(mode,\n              data_path,\n              lmdb_path,\n              train_list,\n              batch=5000,\n              compress_level=1):\n    \"\"\"Create lmdb for the Vimeo90K dataset.\n\n    Contents of lmdb. The file structure is:\n    example.lmdb\n    ├── data.mdb\n    ├── lock.mdb\n    ├── meta_info.txt\n\n    The data.mdb and lock.mdb are standard lmdb files and you can refer to\n    https://lmdb.readthedocs.io/en/release/ for more details.\n\n    The meta_info.txt is a specified txt file to record the meta information\n    of our datasets. It will be automatically created when preparing\n    datasets by our provided dataset tools.\n    Each line in the txt file records 1)image name (with extension),\n    2)image shape, and 3)compression level, separated by a white space.\n\n    For example, the meta information could be:\n    `000_00000000.png (720,1280,3) 1`, which means:\n    1) image name (with extension): 000_00000000.png;\n    2) image shape: (720,1280,3);\n    3) compression level: 1\n\n    We use the image name without extension as the lmdb key.\n\n    Args:\n        mode (str): Dataset mode. 'gt' or 'lq'.\n        data_path (str): Data path for reading images.\n        lmdb_path (str): Lmdb save path.\n        train_list (str): Train list path for Vimeo90K datasets.\n        batch (int): After processing batch images, lmdb commits.\n            Default: 5000.\n        compress_level (int): Compress level when encoding images. Default: 1.\n    \"\"\"\n\n    print(f'Create lmdb for {data_path}, save to {lmdb_path}...')\n    if mode == 'gt':\n        h_dst, w_dst = 256, 448\n    else:\n        h_dst, w_dst = 64, 112\n\n    if osp.exists(lmdb_path):\n        print(f'Folder {lmdb_path} already exists. Exit.')\n        sys.exit(1)\n\n    print('Reading image path list ...')\n    with open(train_list) as f:\n        train_list = [line.strip() for line in f]\n\n    all_img_list = []\n    keys = []\n    for line in train_list:\n        folder, sub_folder = line.split('/')\n        for j in range(1, 8):\n            all_img_list.append(\n                osp.join(data_path, folder, sub_folder, f'im{j}.png'))\n            keys.append('{}_{}_{}'.format(folder, sub_folder, j))\n    all_img_list = sorted(all_img_list)\n    keys = sorted(keys)\n\n    if mode == 'gt':  # only read the 4th frame for the gt mode\n        print('Only keep the 4th frame for gt mode.')\n        all_img_list = [v for v in all_img_list if v.endswith('im4.png')]\n        keys = [v for v in keys if v.endswith('_4')]\n\n    # create lmdb environment\n    # obtain data size for one image\n    img = mmcv.imread(osp.join(data_path, all_img_list[0]), flag='unchanged')\n    _, img_byte = cv2.imencode('.png', img,\n                               [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n    data_size_per_img = img_byte.nbytes\n    print('Data size per image is: ', data_size_per_img)\n    data_size = data_size_per_img * len(all_img_list)\n    env = lmdb.open(lmdb_path, map_size=data_size * 10)\n\n    # write data to lmdb\n    pbar = mmengine.ProgressBar(len(all_img_list))\n    txn = env.begin(write=True)\n    txt_file = open(osp.join(lmdb_path, 'meta_info.txt'), 'w')\n    for idx, (path, key) in enumerate(zip(all_img_list, keys)):\n        pbar.update()\n        key_byte = key.encode('ascii')\n        img = mmcv.imread(osp.join(data_path, path), flag='unchanged')\n        h, w, c = img.shape\n        _, img_byte = cv2.imencode(\n            '.png', img, [cv2.IMWRITE_PNG_COMPRESSION, compress_level])\n        assert h == h_dst and w == w_dst and c == 3, (\n            f'Wrong shape ({h, w}), should be ({h_dst, w_dst}).')\n        txn.put(key_byte, img_byte)\n        # write meta information\n        txt_file.write(f'{key}.png ({h},{w},{c}) {compress_level}\\n')\n        if idx % batch == 0:\n            txn.commit()\n            txn = env.begin(write=True)\n    txn.commit()\n    env.close()\n    txt_file.close()\n    print('\\nFinish writing lmdb.')\n\n\ndef generate_anno_file(clip_list, file_name='meta_info_Vimeo90K_GT.txt'):\n    \"\"\"Generate anno file for Vimeo90K datasets from the official clip list.\n\n    Args:\n        clip_list (str): Clip list path for Vimeo90K datasets.\n        file_name (str): Saved file name. Default: 'meta_info_Vimeo90K_GT.txt'.\n    \"\"\"\n\n    print(f'Generate annotation files {file_name}...')\n    with open(clip_list) as f:\n        lines = [line.rstrip() for line in f]\n    txt_file = osp.join(osp.dirname(clip_list), file_name)\n    with open(txt_file, 'w') as f:\n        for line in lines:\n            f.write(f'{line} 7 (256, 448, 3)\\n')\n\n\ndef imresize(img_path, output_path, scale=None, output_shape=None):\n    \"\"\"Resize the image using MATLAB-like downsampling.\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        scale (float | None, optional): The scale factor of the resize\n            operation. If None, it will be determined by output_shape.\n            Default: None.\n        output_shape (tuple(int) | None, optional): The size of the output\n            image. If None, it will be determined by scale. Note that if\n            scale is provided, output_shape will not be used.\n            Default: None.\n    \"\"\"\n\n    matlab_resize = MATLABLikeResize(\n        keys=['data'], scale=scale, output_shape=output_shape)\n    img = imread(img_path)\n    img = img_as_float(img)\n    data = {'data': img}\n    output = matlab_resize(data)['data']\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = np.around(output).astype(np.uint8)\n    imsave(output_path, output)\n\n\ndef mesh_grid(kernel_size):\n    \"\"\"Generate the mesh grid, centering at zero.\n\n    Args:\n        kernel_size (int): The size of the kernel.\n\n    Returns:\n        xy_grid (np.ndarray): stacked xy coordinates with shape\n            (kernel_size, kernel_size, 2).\n    \"\"\"\n    range_ = np.arange(-(kernel_size - 1.) / 2., (kernel_size - 1.) / 2. + 1.)\n    x_grid, y_grid = np.meshgrid(range_, range_)\n    xy_grid = np.hstack((x_grid.reshape((kernel_size * kernel_size, 1)),\n                         y_grid.reshape(kernel_size * kernel_size,\n                                        1))).reshape(kernel_size, kernel_size,\n                                                     2)\n\n    return xy_grid\n\n\ndef bd_downsample(img_path, output_path, sigma=1.6, scale=4):\n    \"\"\"Downsampling using BD degradation(Gaussian blurring and downsampling).\n\n    Args:\n        img_path (str): Input image path.\n        output_path (str): Output image path.\n        sigma (float): The sigma of Gaussian blurring kernel. Default: 1.6.\n        scale (int): The scale factor of the downsampling. Default: 4.\n    \"\"\"\n\n    # Gaussian blurring\n    kernelsize = math.ceil(sigma * 3) * 2 + 2\n    kernel = blur_kernels.bivariate_gaussian(\n        kernelsize, sigma, grid=mesh_grid(kernelsize))\n    img = cv2.imread(img_path)\n    img = img_as_float(img)\n    output = cv2.filter2D(\n        img,\n        -1,\n        kernel,\n        anchor=((kernelsize - 1) // 2, (kernelsize - 1) // 2),\n        borderType=cv2.BORDER_REPLICATE)\n\n    # downsampling\n    output = output[int(scale / 2) - 1:-int(scale / 2) + 1:scale,\n                    int(scale / 2) - 1:-int(scale / 2) + 1:scale, :]\n\n    output = np.clip(output, 0.0, 1.0) * 255\n    output = output.astype(np.float32)\n    output = np.floor(output + 0.5)\n    cv2.imwrite(output_path, output)\n\n\ndef worker(clip_path, args):\n    \"\"\"Worker for each process.\n\n    Args:\n        clip_name (str): Path of the clip.\n\n    Returns:\n        process_info (str): Process information displayed in progress bar.\n    \"\"\"\n\n    gt_dir = osp.join(args.data_root, 'GT', clip_path)\n    bi_dir = osp.join(args.data_root, 'BIx4', clip_path)\n    bd_dir = osp.join(args.data_root, 'BDx4', clip_path)\n    mmengine.utils.mkdir_or_exist(bi_dir)\n    mmengine.utils.mkdir_or_exist(bd_dir)\n\n    img_list = sorted(os.listdir(gt_dir))\n    for img in img_list:\n        imresize(osp.join(gt_dir, img), osp.join(bi_dir, img), scale=1 / 4)\n        bd_downsample(osp.join(gt_dir, img), osp.join(bd_dir, img))\n\n    process_info = f'Processing {clip_path} ...'\n    return process_info\n\n\ndef downsample_images(args):\n    \"\"\"Downsample images.\"\"\"\n\n    clip_list = []\n    gt_dir = osp.join(args.data_root, 'GT')\n    sequence_list = sorted(os.listdir(gt_dir))\n    for sequence in sequence_list:\n        sequence_root = osp.join(gt_dir, sequence)\n        clip_list.extend(\n            [osp.join(sequence, i) for i in sorted(os.listdir(sequence_root))])\n\n    prog_bar = mmengine.ProgressBar(len(clip_list))\n    pool = Pool(args.n_thread)\n    for path in clip_list:\n        pool.apply_async(\n            worker, args=(path, args), callback=lambda arg: prog_bar.update())\n    pool.close()\n    pool.join()\n    print('All processes done.')\n\n\ndef parse_args():\n    modify_args()\n    parser = argparse.ArgumentParser(\n        description='Preprocess Vimeo90K datasets',\n        epilog='You can download the Vimeo90K dataset '\n        'from：http://toflow.csail.mit.edu/')\n    parser.add_argument('--data-root', help='dataset root')\n    parser.add_argument(\n        '--n-thread',\n        nargs='?',\n        default=8,\n        type=int,\n        help='thread number when using multiprocessing')\n    parser.add_argument(\n        '--train_list',\n        default=None,\n        help='official training list path for Vimeo90K')\n    parser.add_argument('--gt-path', default=None, help='GT path for Vimeo90K')\n    parser.add_argument('--lq-path', default=None, help='LQ path for Vimeo90K')\n    parser.add_argument(\n        '--make-lmdb', action='store_true', help='create lmdb files')\n\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == '__main__':\n    args = parse_args()\n\n    # generate BIx4 and BDx4\n    downsample_images(args)\n\n    # generate image list anno file\n    generate_anno_file(\n        osp.join(args.data_root, 'sep_trainlist.txt'),\n        'meta_info_Vimeo90K_train_GT.txt')\n    generate_anno_file(\n        osp.join(args.data_root, 'sep_testlist.txt'),\n        'meta_info_Vimeo90K_test_GT.txt')\n\n    # create lmdb files\n    if args.make_lmdb:\n        if args.gt_path is None or args.lq_path is None:\n            raise ValueError('gt_path and lq_path cannot be None when '\n                             'when creating lmdb files.')\n        # create lmdb for gt\n        lmdb_path = osp.join(\n            osp.dirname(args.gt_path), 'vimeo90k_train_GT.lmdb')\n        make_lmdb(\n            mode='gt',\n            data_path=args.gt_path,\n            lmdb_path=lmdb_path,\n            train_list=args.train_list)\n        # create lmdb for lq\n        lmdb_path = osp.join(\n            osp.dirname(args.lq_path), 'vimeo90k_train_LR7frames.lmdb')\n        make_lmdb(\n            mode='lq',\n            data_path=args.lq_path,\n            lmdb_path=lmdb_path,\n            train_list=args.train_list)\n"
  },
  {
    "path": "tools/dataset_converters/vimeo90k-triplet/README.md",
    "content": "# Preparing Vimeo90K-triplet Dataset\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={Video Enhancement with Task-Oriented Flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision (IJCV)},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n\nThe training and test datasets can be download from [here](http://toflow.csail.mit.edu/).\n\nThe Vimeo90K-triplet  dataset has a `clip/sequence/img` folder structure:\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── vimeo_triplet\n│   │   ├── tri_testlist.txt\n│   │   ├── tri_trainlist.txt\n│   │   ├── sequences\n│   │   │   ├── 00001\n│   │   │   │   ├── 0001\n│   │   │   │   │   ├── im1.png\n│   │   │   │   │   ├── im2.png\n│   │   │   │   │   └── im3.png\n│   │   │   │   ├── 0002\n│   │   │   │   ├── 0003\n│   │   │   │   ├── ...\n│   │   │   ├── 00002\n│   │   │   ├── ...\n```\n"
  },
  {
    "path": "tools/dataset_converters/vimeo90k-triplet/README_zh-CN.md",
    "content": "# 准备 Vimeo90K-triplet 数据集\n\n<!-- [DATASET] -->\n\n```bibtex\n@article{xue2019video,\n  title={Video Enhancement with Task-Oriented Flow},\n  author={Xue, Tianfan and Chen, Baian and Wu, Jiajun and Wei, Donglai and Freeman, William T},\n  journal={International Journal of Computer Vision (IJCV)},\n  volume={127},\n  number={8},\n  pages={1106--1125},\n  year={2019},\n  publisher={Springer}\n}\n```\n\n训练集和测试集可以从 [此处](http://toflow.csail.mit.edu/) 下载。\n\nVimeo90K-triplet 数据集包含了如下所示的 `clip/sequence/img` 目录结构：\n\n```text\nmmagic\n├── mmagic\n├── tools\n├── configs\n├── data\n│   ├── vimeo_triplet\n│   │   ├── tri_testlist.txt\n│   │   ├── tri_trainlist.txt\n│   │   ├── sequences\n│   │   │   ├── 00001\n│   │   │   │   ├── 0001\n│   │   │   │   │   ├── im1.png\n│   │   │   │   │   ├── im2.png\n│   │   │   │   │   └── im3.png\n│   │   │   │   ├── 0002\n│   │   │   │   ├── 0003\n│   │   │   │   ├── ...\n│   │   │   ├── 00002\n│   │   │   ├── ...\n```\n"
  },
  {
    "path": "tools/dist_test.sh",
    "content": "#!/usr/bin/env bash\n\nCONFIG=$1\nCHECKPOINT=$2\nGPUS=$3\nNNODES=${NNODES:-1}\nNODE_RANK=${NODE_RANK:-0}\nPORT=${PORT:-29500}\nMASTER_ADDR=${MASTER_ADDR:-\"127.0.0.1\"}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\npython -m torch.distributed.launch \\\n    --nnodes=$NNODES \\\n    --node_rank=$NODE_RANK \\\n    --master_addr=$MASTER_ADDR \\\n    --nproc_per_node=$GPUS \\\n    --master_port=$PORT \\\n    $(dirname \"$0\")/test.py \\\n    $CONFIG \\\n    $CHECKPOINT \\\n    --launcher pytorch \\\n    ${@:4}\n"
  },
  {
    "path": "tools/dist_train.sh",
    "content": "#!/usr/bin/env bash\n\nCONFIG=$1\nGPUS=$2\nNNODES=${NNODES:-1}\nNODE_RANK=${NODE_RANK:-0}\nPORT=${PORT:-29500}\nMASTER_ADDR=${MASTER_ADDR:-\"127.0.0.1\"}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\npython -m torch.distributed.launch \\\n    --nnodes=$NNODES \\\n    --node_rank=$NODE_RANK \\\n    --master_addr=$MASTER_ADDR \\\n    --nproc_per_node=$GPUS \\\n    --master_port=$PORT \\\n    $(dirname \"$0\")/train.py \\\n    $CONFIG \\\n    --launcher pytorch ${@:3}\n"
  },
  {
    "path": "tools/gui/README.md",
    "content": "# MMagic Viewer\n\n- [Introduction](#introduction)\n- [Major features](#major-features)\n- [Prerequisites](#prerequisites)\n- [Getting Started](#getting-started)\n- [Examples](#examples)\n- [Contributing](#contributing)\n\n## Introduction\n\n**MMagic Viewer** is a qualitative comparison tools to facilitate your research.\n\n## Major features\n\n- **Patch-based comparison**\n  - Crop a patch on multiple images to compare\n  - Batch comparison\n  - Flexible settings on number of columns and size of images.\n  - Save your comparison result\n- **Before/After slider comparison**\n  - Support both videos and images comparison\n  - Record and save comparison results as a video clip\n\n## Prerequisites\n\nMMagic Viewer works on Linux, Windows and macOS. It requires:\n\n- Python >= 3.6\n- PyQt5\n- opencv-python (headless version)\n\n## Getting Started\n\n**Step 0.**\nInstall PyQt5.\n\n```shell\npip install PyQt5\n```\n\n**Step 1.**\nInstall and check opencv-python version.\nIf your meet following errors:\n\n```\nQObject::moveToThread: Current thread is not the object's thread.\nAvailable platform plugins are: xcb... .\n```\n\nPlease install opencv-python-headless version.\n\n```shell\npip install opencv-python-headless\n```\n\n**Step 2.**\nInstall MMagic.\n\n```shell\ngit clone https://github.com/open-mmlab/mmagic.git\n```\n\n**Step 3.**\nRun\n\n```shell\npython tools/gui/gui.py\n```\n\n## Examples\n\n**1. Patch-based comparison: batch images**\n\nhttps://user-images.githubusercontent.com/49083766/199232588-7a07a3d9-725d-48be-89bf-1ffb45bd5d74.mp4\n\n**2. Patch-based comparison: single image**\n\nhttps://user-images.githubusercontent.com/49083766/199232606-f8539191-4bda-4b2c-975a-59020927abae.mp4\n\n**3. Before/After slider comparison: images**\n\nhttps://user-images.githubusercontent.com/49083766/199232615-2c56dcf1-0b42-41a5-884c-16a8f28a2647.mp4\n\n**4. Before/After slider comparison: input video frames**\n\nhttps://user-images.githubusercontent.com/49083766/199232617-e03a06dc-727b-43bb-8110-049d0fff28ba.mp4\n\n**5. Before/After slider comparison: input Mp4 video**\n\nhttps://user-images.githubusercontent.com/49083766/199232651-87d8064e-cbaf-4d30-b90b-94ee0af7d497.mp4\n\n**6. Before/After slider comparison: record**\n\nhttps://user-images.githubusercontent.com/49083766/199232634-eca70d28-8437-400a-8ab9-d2fe396b6ea9.mp4\n\n## Contributing\n\nWe appreciate all contributions to improve MMagic Viewer. You can create your issue to report bugs or request new features. Welcome to give us suggestions or contribute your codes.\n"
  },
  {
    "path": "tools/gui/component.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport os\nimport time\n\nimport cv2\nimport numpy as np\nfrom PyQt5 import QtCore, QtGui, QtWidgets\nfrom utils import layout2widget\n\n\nclass QLabelClick(QtWidgets.QLabel):\n    clicked = QtCore.pyqtSignal(str)\n\n    def __init__(self):\n        super().__init__()\n\n    def mousePressEvent(self, event):\n        self.clicked.emit(self.text())\n\n\nclass QLabelSlider(QtWidgets.QLabel):\n\n    def __init__(self, parent, scale, label_1, label_2, title):\n        super().__init__()\n        self.parent = parent\n        self.hSlider = -1\n        self.vSlider = -1\n        self.oldSlider = -1\n        self.scale = scale\n        self.label_1 = label_1\n        self.label_2 = label_2\n        self.title = title\n        self.images = self.parent.images\n        self.auto_mode = 0\n\n    def mousePressEvent(self, ev: QtGui.QMouseEvent) -> None:\n        if ev.button() == QtCore.Qt.LeftButton:\n            if self.hSlider > -1:\n                self.oldSlider = self.hSlider\n            elif self.vSlider > -1:\n                self.oldSlider = self.vSlider\n        return super().mousePressEvent(ev)\n\n    def mouseReleaseEvent(self, ev: QtGui.QMouseEvent) -> None:\n        if ev.button() == QtCore.Qt.LeftButton:\n            self.oldSlider = -1\n            self.update()\n        return super().mouseReleaseEvent(ev)\n\n    def mouseMoveEvent(self, ev: QtGui.QMouseEvent) -> None:\n        if self.oldSlider > -1:\n            if self.hSlider > -1:\n                self.hSlider = ev.pos().x()\n            elif self.vSlider > -1:\n                self.vSlider = ev.pos().y()\n        self.update()\n        return super().mouseMoveEvent(ev)\n\n    def paintEvent(self, ev: QtGui.QPaintEvent) -> None:\n        qp = QtGui.QPainter()\n        qp.begin(self)\n        qp.drawImage(0, 0, QtGui.QImage(self.getImage()))\n        pen = QtGui.QPen(QtCore.Qt.green, 3)\n        qp.setPen(pen)\n        qp.drawLine(self.hSlider, 0, self.hSlider, self.height())\n        length = 9\n        qp.drawText(self.hSlider - 10 - len(self.label_1) * length, 20,\n                    self.label_1)\n        qp.drawText(self.hSlider + 10, 20, self.label_2)\n        qp.drawText(10, self.height() - 10, self.title)\n        qp.end()\n\n    def set_scale(self, scale):\n        self.hSlider = int(self.hSlider * scale / self.scale)\n        self.scale = scale\n        self.update()\n\n    def setImage(self, images):\n        self.images = images\n        self.update()\n\n    def set_auoMode(self, mode):\n        if mode != 3 or self.auto_mode < 3:\n            self.auto_mode = mode\n\n    def auto_slider(self):\n        try:\n            if self.auto_mode == 1:\n                self.hSlider += 1\n                if self.hSlider > self.w:\n                    self.hSlider = 0\n            elif self.auto_mode == 2:\n                self.hSlider -= 1\n                if self.hSlider < 0:\n                    self.hSlider = self.w\n            elif self.auto_mode == 3:\n                self.hSlider += 1\n                if self.hSlider >= self.w:\n                    self.auto_mode = 4\n            elif self.auto_mode == 4:\n                self.hSlider -= 1\n                if self.hSlider <= 0:\n                    self.auto_mode = 3\n            self.update()\n\n        except Exception:\n            print(Exception)\n            pass\n\n    def getImage(self):\n        img1, img2 = self.images\n        if img1 is None or img2 is None:\n            return\n        h1, w1, c = img1.shape\n        h2, w2, c = img2.shape\n        if w2 > w1:\n            img1 = cv2.resize(img1, (w2, h2))\n            h, w = h2, w2\n        else:\n            img2 = cv2.resize(img2, (w1, h1))\n            h, w = h1, w1\n        self.h = int(h * self.scale)\n        self.w = int(w * self.scale)\n        self.setFixedHeight(self.h)\n        self.setFixedWidth(self.w)\n        if self.hSlider < 0:\n            self.hSlider = int(self.w / 2.0)\n\n        v = int(self.hSlider / self.scale)\n        img11 = img1[:, 0:v].copy()\n        img22 = img2[:, v:].copy()\n        img = np.hstack((img11, img22))\n        # img = cv2.line(img, (v, 0), (v, h2), (0, 222, 0), 4)\n        rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        img_dis = QtGui.QImage(rgb_img, w, h, w * c,\n                               QtGui.QImage.Format_RGB888)\n        img = QtGui.QPixmap.fromImage(img_dis).scaled(self.width(),\n                                                      self.height())\n        return img\n\n\nclass QLabelPaint(QtWidgets.QLabel):\n\n    def __init__(self, parent, beginPoint=None, endPoint=None):\n        super().__init__()\n        self.beginPoint = beginPoint\n        self.endPoint = endPoint\n        self.parent = parent\n        self.statusBar = self.parent.statusBar\n        if self.beginPoint and self.endPoint:\n            self.isShow = True\n        else:\n            self.isShow = False\n\n    def mousePressEvent(self, ev: QtGui.QMouseEvent) -> None:\n        if ev.button() == QtCore.Qt.LeftButton:\n            self.endPoint = None\n            self.beginPoint = ev.pos()\n            self.isShow = False\n        return super().mousePressEvent(ev)\n\n    def mouseReleaseEvent(self, ev: QtGui.QMouseEvent) -> None:\n        if ev.button() == QtCore.Qt.LeftButton:\n            self.endPoint = ev.pos()\n            self.update()\n            self.isShow = True\n            self.parent.set_rect(self.beginPoint, self.endPoint)\n        return super().mouseReleaseEvent(ev)\n\n    def mouseMoveEvent(self, ev: QtGui.QMouseEvent) -> None:\n        self.endPoint = ev.pos()\n        self.update()\n        self.statusBar.showMessage(\n            f'Start: {self.beginPoint.x()},{self.beginPoint.y()}; \\\n                End: {self.endPoint.x()},{self.endPoint.y()}')\n        return super().mouseMoveEvent(ev)\n\n    def paintEvent(self, ev: QtGui.QPaintEvent) -> None:\n        super().paintEvent(ev)\n        if self.beginPoint and self.endPoint:\n            qp = QtGui.QPainter()\n            qp.begin(self)\n            pen = QtGui.QPen(QtCore.Qt.red, 2)\n            qp.setPen(pen)\n            w = abs(self.beginPoint.x() - self.endPoint.x())\n            h = abs(self.beginPoint.y() - self.endPoint.y())\n            qp.drawRect(self.beginPoint.x(), self.beginPoint.y(), w, h)\n            qp.end()\n            if self.isShow and isinstance(self.parent, ConcatImageWidget):\n                self.parent.show_images(self.beginPoint.x(),\n                                        self.beginPoint.y(), w, h)\n                self.isShow = False\n\n\nclass ConcatImageWidget(QtWidgets.QWidget):\n\n    def __init__(self, parent, mode, col_num=4):\n        super(ConcatImageWidget, self).__init__(parent)\n        self.parent = parent\n        self.statusBar = self.parent.statusBar\n        self.hlayout = QtWidgets.QHBoxLayout()\n        self.setLayout(self.hlayout)\n        self.mode = mode\n        self.scale = 1\n        self.col_num = col_num\n        self.file_path = None\n        self.labels = None\n        self.gt = None\n        self.img_h = 0\n        self.rect = None\n\n    def show_images(self, x=0, y=0, w=0, h=0):\n        self.rect = [x, y, w, h]\n        vlayout = QtWidgets.QVBoxLayout()\n        vlayout.setContentsMargins(0, 0, 0, 0)\n        hlayout_img = QtWidgets.QHBoxLayout()\n        hlayout_img.setContentsMargins(0, 0, 0, 0)\n        hlayout_text = QtWidgets.QHBoxLayout()\n        hlayout_text.setContentsMargins(0, 0, 0, 0)\n\n        for i, (path, text) in enumerate(zip(self.file_path, self.labels)):\n            img = QtGui.QPixmap(path).scaled(self.gt_w, self.gt_h)\n            if self.mode == 0:\n                img = img.copy(QtCore.QRect(x, y, w, h))\n            if self.img_h > 0:\n                img_w = int(float(self.img_h) / img.height() * img.width())\n                img = img.scaled(img_w, self.img_h)\n\n            label = QtWidgets.QLabel()\n            label.setFixedWidth(img.width())\n            label.setFixedHeight(img.height())\n            label.setMargin(0)\n            label.setPixmap(img)\n            hlayout_img.addWidget(label)\n\n            label_text = QtWidgets.QLabel()\n            label_text.setMargin(0)\n            label_text.setAlignment(QtCore.Qt.AlignCenter)\n            label_text.setText(text)\n            label_text.adjustSize()\n            hlayout_text.addWidget(label_text)\n\n            if (i + 1) % self.col_num == 0:\n                vlayout.addWidget(layout2widget(hlayout_img))\n                vlayout.addWidget(layout2widget(hlayout_text))\n                hlayout_img = QtWidgets.QHBoxLayout()\n                hlayout_img.setContentsMargins(0, 0, 0, 0)\n                hlayout_text = QtWidgets.QHBoxLayout()\n                hlayout_text.setContentsMargins(0, 0, 0, 0)\n\n        if len(hlayout_img) > 0:\n            for i in range(0, self.col_num - len(hlayout_img)):\n                label = QtWidgets.QLabel()\n                label.setMargin(0)\n                label.setFixedWidth(img.width())\n                label.setFixedHeight(img.height())\n                hlayout_img.addWidget(label)\n                label = QtWidgets.QLabel()\n                label.setMargin(0)\n                hlayout_text.addWidget(label)\n            vlayout.addWidget(layout2widget(hlayout_img))\n            vlayout.addWidget(layout2widget(hlayout_text))\n\n        total_w = self.gt_w + (img.width() + 2) * self.col_num\n        self.setFixedWidth(total_w)\n        if self.hlayout.count() > 1:\n            item = self.hlayout.itemAt(1)\n            self.hlayout.removeItem(item)\n            if item.widget():\n                item.widget().deleteLater()\n            self.hlayout.addWidget(layout2widget(vlayout))\n        else:\n            self.hlayout.addWidget(layout2widget(vlayout))\n\n    def set_images(self, file_path, labels, gt=None, scale=1, rect=None):\n        self.file_path = file_path\n        self.labels = labels\n        self.gt = gt\n        self.scale = scale\n\n        for i in reversed(range(self.hlayout.count())):\n            self.hlayout.itemAt(i).widget().deleteLater()\n        self.hlayout.setContentsMargins(0, 0, 0, 0)\n\n        img = QtGui.QPixmap(self.gt)\n        self.gt_w, self.gt_h = img.width() * scale, img.height() * scale\n        img = img.scaled(self.gt_w, self.gt_h)\n        row = (len(self.file_path) + self.col_num - 1) // self.col_num\n        self.img_h = int(float(self.gt_h - (row - 1) * 29) / row)\n\n        beginPoint = None\n        endPoint = None\n        if rect:\n            beginPoint = QtCore.QPoint(rect[0], rect[1])\n            endPoint = QtCore.QPoint(rect[2], rect[3])\n        label = QLabelPaint(self, beginPoint, endPoint)\n        label.setMargin(0)\n        label.setAlignment(QtCore.Qt.AlignTop)\n        label.setPixmap(img)\n        self.hlayout.addWidget(label)\n        if rect:\n            self.show_images(rect[0], rect[1], rect[2] - rect[0],\n                             rect[3] - rect[1])\n        else:\n            self.show_images(0, 0, self.gt_w, self.gt_h)\n\n    def set_rect(self, beginPoint, endPoint):\n        self.parent.rect = [\n            beginPoint.x(),\n            beginPoint.y(),\n            endPoint.x(),\n            endPoint.y()\n        ]\n        self.parent.old_scale = self.scale\n\n\nclass VideoPlayer(QtCore.QThread):\n    sigout = QtCore.pyqtSignal(np.ndarray)\n    sigend = QtCore.pyqtSignal(bool)\n\n    def __init__(self, parent):\n        super(VideoPlayer, self).__init__(parent)\n        self.parent = parent\n\n    def set(self, path, fps=None):\n        self.path = path\n        self.video, self.fps, self.actual_frames = self.setVideo(path, fps)\n        self.time = self.actual_frames / self.fps\n        self.total_frames = self.actual_frames\n        self.num = 0\n        self.working = True\n        self.isPause = False\n        self.mutex = QtCore.QMutex()\n        self.cond = QtCore.QWaitCondition()\n\n    def setVideo(self, path, fps):\n        if os.path.isfile(path):\n            v = cv2.VideoCapture(path)\n            total_frames = v.get(cv2.CAP_PROP_FRAME_COUNT)\n            if fps is None:\n                fps = v.get(cv2.CAP_PROP_FPS)\n        else:\n            files = sorted(os.listdir(path))\n            v = ['/'.join([path, f]) for f in files]\n            total_frames = len(v)\n            if fps is None:\n                fps = 25\n        return v, fps, total_frames\n\n    def pause(self):\n        self.isPause = True\n\n    def resume(self):\n        self.isPause = False\n        self.cond.wakeAll()\n\n    def __del__(self):\n        self.working = False\n        self.wait()\n\n    def run(self):\n        while self.working:\n            self.mutex.lock()\n            if self.isPause:\n                self.cond.wait(self.mutex)\n            if isinstance(self.video, list):\n                img = cv2.imread(self.video[self.num])\n                self.num += 1\n                self.sigout.emit(img)\n                if self.num >= self.total_frames:\n                    self.sigend.emit(True)\n                    self.num = 0\n                time.sleep(1 / self.fps)\n            self.mutex.unlock()\n\n\nclass VideoSlider(QtCore.QThread):\n    sigout = QtCore.pyqtSignal(list)\n    sigend = QtCore.pyqtSignal(bool)\n\n    def __init__(self, parent):\n        super(VideoSlider, self).__init__(parent)\n        self.parent = parent\n        self.mutex = QtCore.QMutex()\n        self.cond = QtCore.QWaitCondition()\n\n    def set(self, path1, path2, fps1=None, fps2=None):\n        self.path1 = path1\n        self.path2 = path2\n        self.v1, self.fps1, self.total_frames1 = self.setVideo(path1, fps1)\n        self.v2, self.fps2, self.total_frames2 = self.setVideo(path2, fps2)\n        if self.fps1 != self.fps2:\n            return False\n        self.fps = self.fps1\n        self.num = 0\n        self.working = True\n        self.isPause = False\n        return True\n\n    def setVideo(self, path, fps):\n        if os.path.isfile(path):\n            v = cv2.VideoCapture(path)\n            total_frames = v.get(cv2.CAP_PROP_FRAME_COUNT)\n            fps = v.get(cv2.CAP_PROP_FPS)\n        else:\n            files = sorted(os.listdir(path))\n            v = ['/'.join([path, f]) for f in files]\n            total_frames = len(v)\n            if fps is None:\n                fps = 25\n        return v, fps, total_frames\n\n    def pause(self):\n        self.isPause = True\n\n    def resume(self):\n        self.isPause = False\n        self.cond.wakeAll()\n\n    def __del__(self):\n        self.working = False\n        self.wait()\n\n    def run(self):\n        while self.working:\n            self.mutex.lock()\n            if self.isPause:\n                self.cond.wait(self.mutex)\n            if isinstance(self.v1, list):\n                num = self.num if self.num < self.total_frames1 \\\n                    else self.total_frames1 - 1\n                img1 = cv2.imread(self.v1[num])\n            elif isinstance(self.v1, cv2.VideoCapture):\n                r, img1 = self.v1.read()\n                if not r:\n                    self.v1, self.fps1, self.total_frames1 = self.setVideo(\n                        self.path1, self.fps1)\n            if isinstance(self.v2, list):\n                num = self.num if self.num < self.total_frames2 \\\n                    else self.total_frames2 - 1\n                img2 = cv2.imread(self.v2[num])\n            elif isinstance(self.v2, cv2.VideoCapture):\n                r, img2 = self.v2.read()\n                if not r:\n                    self.v2, self.fps2, self.total_frames2 = self.setVideo(\n                        self.path2, self.fps2)\n            self.num += 1\n            self.sigout.emit([img1, img2])\n            if self.num >= self.total_frames1 and \\\n                    self.num >= self.total_frames2:\n                self.num = 0\n            time.sleep(1 / self.fps)\n            self.mutex.unlock()\n"
  },
  {
    "path": "tools/gui/gui.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport sys\n\nfrom component import QLabelClick\nfrom page_sr import SRPage\nfrom PyQt5 import QtWidgets\n\n\nclass Homepage(QtWidgets.QWidget):\n\n    def __init__(self, main_window):\n        super().__init__()\n        self.main_window = main_window\n        layout = QtWidgets.QGridLayout()\n        self.setLayout(layout)\n\n        t1 = QLabelClick()\n        t2 = QLabelClick()\n        t3 = QLabelClick()\n        t4 = QLabelClick()\n        t1.setText('general')\n        t2.setText('sr')\n        t3.setText('inpainting')\n        t4.setText('matting')\n        layout.addWidget(t1, 0, 0)\n        layout.addWidget(t2, 0, 1)\n        layout.addWidget(t3, 1, 0)\n        layout.addWidget(t4, 1, 1)\n\n        t1.clicked.connect(self.main_window.change_window)\n        t2.clicked.connect(self.main_window.change_window)\n        t3.clicked.connect(self.main_window.change_window)\n        t4.clicked.connect(self.main_window.change_window)\n\n\nclass MainWindow(QtWidgets.QMainWindow):\n\n    def __init__(self):\n        super(MainWindow, self).__init__()\n\n        self.setWindowTitle('MMagic Viewer')\n        # # MenuBar\n        # menubar_Aaa = self.menuBar().addMenu('Aaa')\n        # menubar_Bbb = self.menuBar().addMenu('Bbb')\n        # menubar_Ccc = self.menuBar().addMenu('Ccc')\n        # menubar_Aaa.addAction('New')\n        # save = QtWidgets.QAction('Save', self)\n        # save.setShortcut('Ctrl+S')\n        # menubar_Aaa.addAction(save)\n        # menubar_Bbb.addAction('New')\n        # menubar_Ccc.addAction('New')\n\n        # # ToolBar\n        # self.toolBar = QtWidgets.QToolBar('ToolBar')\n        # open = QtWidgets.QAction(QtGui.QIcon(), 'Open', self)\n        # save = QtWidgets.QAction(QtGui.QIcon(), 'Save', self)\n        # self.toolBar.addAction(open)\n        # self.toolBar.addAction(save)\n        # self.addToolBar(QtCore.Qt.ToolBarArea.LeftToolBarArea, self.toolBar)\n\n        # StatusBar\n        self.statusBar = QtWidgets.QStatusBar()\n        self.setStatusBar(self.statusBar)\n        self.statusBar.showMessage('')\n\n        self.homepage = Homepage(self)\n        self.sr = SRPage(self)\n        self.setCentralWidget(self.sr)\n\n    def change_window(self, wname):\n        if wname == 'sr':\n            self.setCentralWidget(self.sr)\n        elif wname == 'general':\n            self.setCentralWidget(self.general)\n\n\nif __name__ == '__main__':\n    app = QtWidgets.QApplication(sys.argv)\n    myWin = MainWindow()\n    myWin.showMaximized()\n    sys.exit(app.exec_())\n"
  },
  {
    "path": "tools/gui/page_general.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport cv2\nimport numpy as np\nfrom PyQt5 import QtCore, QtGui, QtWidgets\nfrom utils import layout2widget\n\n\nclass SliderTab(QtWidgets.QWidget):\n\n    def __init__(self):\n        super().__init__()\n        self.images = [None, None]\n\n        self.cb_1 = QtWidgets.QComboBox()\n        self.cb_2 = QtWidgets.QComboBox()\n        self.cb_1.currentIndexChanged.connect(self.change_image)\n        self.cb_2.currentIndexChanged.connect(self.change_image)\n        self.btn_add = QtWidgets.QPushButton()\n        self.btn_add.setText('Add')\n        self.btn_add.clicked.connect(self.add)\n        left_grid = QtWidgets.QGridLayout()\n        left_grid.addWidget(self.cb_1, 0, 0)\n        left_grid.addWidget(self.cb_2, 1, 0)\n        left_grid.addWidget(self.btn_add, 2, 0)\n\n        self.imageArea = QtWidgets.QLabel()\n        self.imageArea.setFrameShape(QtWidgets.QFrame.Box)\n        self.imageArea.setLineWidth(2)\n        self.imageArea.setAlignment(QtCore.Qt.AlignBottom)\n        self.imageArea.setStyleSheet(\n            'border-width: 0px; border-style: solid; border-color: rgb(100, 100, 100);background-color: rgb(255, 255, 255)'  # noqa\n        )\n        self.slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)\n        self.slider.setMaximum(800)\n        self.slider.valueChanged.connect(self.show_image)\n        right_grid = QtWidgets.QGridLayout()\n        right_grid.addWidget(self.imageArea, 0, 0)\n        right_grid.addWidget(self.slider, 1, 0)\n\n        # Splitter\n        hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)\n        hsplitter.addWidget(layout2widget(left_grid))\n        hsplitter.addWidget(layout2widget(right_grid))\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(hsplitter)\n        self.setLayout(hlayout)\n\n    def add(self):\n        path, _ = QtWidgets.QFileDialog.getOpenFileName(\n            self, 'Select gt file', '', 'Images (*.jpg *.png *.mp4 *.avi)')\n        if self.cb_1.count() > 0:\n            if self.cb_1.findText(path) > -1:\n                self.cb_1.removeItem(self.cb_1.findText(path))\n            if self.cb_2.findText(path) > -1:\n                self.cb_2.removeItem(self.cb_2.findText(path))\n            self.cb_1.addItem(path)\n            self.cb_2.addItem(path)\n            self.cb_2.setCurrentIndex(self.cb_2.count() - 1)\n        else:\n            self.cb_1.addItem(path)\n            self.cb_2.addItem(path)\n            self.cb_1.setCurrentIndex(0)\n            self.cb_2.setCurrentIndex(0)\n\n    def change_image(self):\n        self.images[0] = cv2.imread(self.cb_1.currentText())\n        self.images[1] = cv2.imread(self.cb_2.currentText())\n        if self.images[0] is None or self.images[1] is None:\n            return\n        self.show_image()\n\n    def show_image(self):\n        img1, img2 = self.images\n        h2, w2, c2 = img2.shape\n        img2 = cv2.resize(img2, (800, int(800 / w2 * h2)))\n        h2, w2, c2 = img2.shape\n        img1 = cv2.resize(img1, (w2, h2))\n        v = self.slider.value()\n        img11 = img1[:, 0:v].copy()\n        img22 = img2[:, v:].copy()\n        img = np.hstack((img11, img22))\n        img = cv2.line(img, (v, 0), (v, h2), (0, 222, 0), 4)\n        rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n        img_dis = QtGui.QImage(rgb_img, w2, h2, w2 * c2,\n                               QtGui.QImage.Format_RGB888)\n        jpg = QtGui.QPixmap.fromImage(img_dis).scaled(\n            self.imageArea.width(), int(self.imageArea.width() / w2 * h2))\n        self.imageArea.setPixmap(jpg)\n\n\nclass GeneralPage(QtWidgets.QWidget):\n\n    def __init__(self) -> None:\n        super().__init__()\n\n        self.tab_slider = SliderTab()\n        self.tabs = QtWidgets.QTabWidget()\n        self.tabs.addTab(self.tab_slider, 'before/after slider')\n\n        layout = QtWidgets.QVBoxLayout()\n        self.setLayout(layout)\n        layout.addWidget(self.tabs)\n"
  },
  {
    "path": "tools/gui/page_sr.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport datetime\nimport os\n\nimport cv2\nfrom component import ConcatImageWidget, QLabelSlider, VideoSlider\nfrom PyQt5 import QtCore, QtWidgets\nfrom utils import layout2widget\n\n\nclass PatchTab(QtWidgets.QWidget):\n\n    def __init__(self, parent):\n        super().__init__()\n\n        self.parent = parent\n        self.statusBar = self.parent.statusBar\n        self.file_paths = []\n        self.labels = []\n        self.rect = None\n        self.images = None\n        self.isShow = False\n\n        # Left Widget\n        self.btn_add_file = QtWidgets.QPushButton()\n        self.btn_add_file.setText('Add')\n        self.btn_add_file.clicked.connect(self.add_file)\n        self.btn_open_file = QtWidgets.QPushButton()\n        self.btn_open_file.setText('Open new')\n        self.btn_open_file.clicked.connect(self.open_file)\n\n        self.input_label = QtWidgets.QLineEdit()\n        self.input_file = QtWidgets.QLineEdit()\n\n        self.tb_files = QtWidgets.QTableWidget()\n        self.tb_files.setColumnCount(3)\n        self.tb_files.setHorizontalHeaderLabels(\n            ['File/Folder', 'Label', 'Other'])\n        self.tb_files.horizontalHeader().setSectionResizeMode(\n            QtWidgets.QHeaderView.Stretch)\n        self.tb_files.setSelectionBehavior(\n            QtWidgets.QAbstractItemView.SelectRows)\n        self.tb_files.setSelectionMode(\n            QtWidgets.QAbstractItemView.SingleSelection)\n        self.tb_files.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)\n        self.tb_files.customContextMenuRequested.connect(self.tableMenu)\n\n        left_grid = QtWidgets.QGridLayout()\n        left_grid.addWidget(self.tb_files, 0, 0, 5, 10)\n        left_grid.addWidget(self.input_file, 6, 0, 1, 4)\n        left_grid.addWidget(self.input_label, 6, 4, 1, 2)\n        left_grid.addWidget(self.btn_open_file, 6, 6, 1, 2)\n        left_grid.addWidget(self.btn_add_file, 6, 8, 1, 2)\n\n        # Right Widget\n        styleSheet = '''\n            QGroupBox {\n                background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\n                                                  stop: 0 #E0E0E0, stop: 1 #FFFFFF);\n                border: 1px solid #999999;\n                border-radius: 5px;\n                margin-top: 2ex;  /*leave space at the top for the title */\n                padding: 2ex 10ex;\n                font-size: 20px;\n                color: black;\n            }\n            QGroupBox::title {\n                subcontrol-origin: margin;\n                subcontrol-position: top left;    /* position at the top center */\n                padding: 0 3px;\n                left: 30px;\n                font-size: 8px;\n                color: black;\n            }\n        ''' # noqa\n        # select mode\n        self.modeRect = QtWidgets.QGroupBox('Select Mode')\n        self.modeRect.setFlat(True)\n        # self.modeRect.setStyleSheet(styleSheet)\n        btn_mode1 = QtWidgets.QRadioButton('Input whole image', self.modeRect)\n        btn_mode2 = QtWidgets.QRadioButton('Input crop image', self.modeRect)\n        self.btnGroup_mode = QtWidgets.QButtonGroup()\n        self.btnGroup_mode.addButton(btn_mode1, 0)\n        self.btnGroup_mode.addButton(btn_mode2, 1)\n        self.btnGroup_mode.button(0).setChecked(True)\n        self.btnGroup_mode.idToggled.connect(self.reset)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(btn_mode1)\n        hlayout.addWidget(btn_mode2)\n        self.modeRect.setLayout(hlayout)\n\n        # select dirType\n        self.dirTypeRect = QtWidgets.QGroupBox('Select File or Directory')\n        self.dirTypeRect.setFlat(True)\n        # self.dirTypeRect.setStyleSheet(styleSheet)\n        btn_dirType1 = QtWidgets.QRadioButton('Directory', self.dirTypeRect)\n        btn_dirType2 = QtWidgets.QRadioButton('File', self.dirTypeRect)\n        self.btnGroup_dirType = QtWidgets.QButtonGroup()\n        self.btnGroup_dirType.addButton(btn_dirType1, 0)\n        self.btnGroup_dirType.addButton(btn_dirType2, 1)\n        self.btnGroup_dirType.button(0).setChecked(True)\n        self.btnGroup_dirType.idToggled.connect(self.reset)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(btn_dirType1)\n        hlayout.addWidget(btn_dirType2)\n        self.dirTypeRect.setLayout(hlayout)\n\n        # select gt\n        self.cb_gt = QtWidgets.QComboBox()\n        self.cb_gt.currentTextChanged.connect(self.change_gt)\n\n        # set column\n        self.spin_cols = QtWidgets.QSpinBox()\n        self.spin_cols.setMinimum(1)\n        self.spin_cols.setMaximum(10)\n        self.spin_cols.setValue(4)\n        self.spin_cols.valueChanged.connect(self.set_column)\n\n        # set scale\n        self.scale = 100\n        self.txt_scale = QtWidgets.QLabel('100 %')\n        self.slider_scale = QtWidgets.QSlider(QtCore.Qt.Horizontal)\n        self.slider_scale.setMinimum(1)\n        self.slider_scale.setMaximum(200)\n        self.slider_scale.setValue(100)\n        self.slider_scale.valueChanged.connect(self.set_scale)\n\n        # operation\n        self.btn_run = QtWidgets.QPushButton()\n        self.btn_run.setText('Run')\n        self.btn_run.clicked.connect(self.run)\n        self.btn_reset = QtWidgets.QPushButton()\n        self.btn_reset.setText('Reset')\n        self.btn_reset.clicked.connect(self.reset)\n        self.btn_save = QtWidgets.QPushButton()\n        self.btn_save.setText('Save')\n        self.btn_save.clicked.connect(self.save)\n\n        right_grid = QtWidgets.QGridLayout()\n        right_grid.addWidget(self.modeRect, 0, 0, 1, 20)\n        right_grid.addWidget(self.dirTypeRect, 1, 0, 1, 20)\n        right_grid.addWidget(self.cb_gt, 2, 0, 1, 15)\n        right_grid.addWidget(QtWidgets.QLabel('Reference'), 2, 16, 1, 3)\n        right_grid.addWidget(self.spin_cols, 3, 0, 1, 15)\n        right_grid.addWidget(QtWidgets.QLabel('Set   columns'), 3, 16, 1, 3)\n        right_grid.addWidget(self.txt_scale, 4, 0, 1, 1)\n        right_grid.addWidget(self.slider_scale, 4, 1, 1, 14)\n        right_grid.addWidget(QtWidgets.QLabel('Set   scale'), 4, 16, 1, 3)\n        right_grid.addWidget(self.btn_run, 5, 0, 1, 20)\n        right_grid.addWidget(self.btn_reset, 6, 0, 1, 20)\n        right_grid.addWidget(self.btn_save, 7, 0, 1, 20)\n\n        # Bottom Widget\n        self.image_scroll = QtWidgets.QScrollArea()\n        self.image_scroll.installEventFilter(self)\n\n        # Splitter\n        hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)\n        vsplitter = QtWidgets.QSplitter(QtCore.Qt.Vertical)\n        hsplitter.addWidget(layout2widget(left_grid))\n        hsplitter.addWidget(layout2widget(right_grid))\n        hsplitter.setStretchFactor(0, 1)\n        hsplitter.setStretchFactor(1, 2)\n        vsplitter.addWidget(hsplitter)\n        vsplitter.addWidget(self.image_scroll)\n        vsplitter.setStretchFactor(0, 1)\n        vsplitter.setStretchFactor(1, 5)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(vsplitter)\n        self.setLayout(hlayout)\n\n    def open_file(self):\n        \"\"\"Open a file or directory from dialog.\"\"\"\n        if self.btnGroup_dirType.checkedId() == 0:\n            path = QtWidgets.QFileDialog.getExistingDirectory()\n            if len(path) <= 0:\n                return\n            label = path.split('/')[-1]\n            self.input_file.setText(path)\n            self.input_label.setText(label)\n        else:\n            path, _ = QtWidgets.QFileDialog.getOpenFileName(\n                self, 'Select file', '', 'Images (*.jpg *.png)')\n            if len(path) <= 0:\n                return\n            label = path.split('/')[-1].split('.')[0]\n            self.input_file.setText(path)\n            self.input_label.setText(label)\n\n    def add_file(self):\n        \"\"\"Add opened file or directory to table.\"\"\"\n        if os.path.exists(self.input_file.text()):\n            row = self.tb_files.rowCount()\n            self.tb_files.setRowCount(row + 1)\n            self.tb_files.setItem(\n                row, 0, QtWidgets.QTableWidgetItem(self.input_file.text()))\n            self.tb_files.setItem(\n                row, 1, QtWidgets.QTableWidgetItem(self.input_label.text()))\n            # if self.cb_gt.count() == 0:\n            #     self.set_gt(self.input_file.text())\n        else:\n            QtWidgets.QMessageBox.about(self, 'Message',\n                                        'Please input available file/folder')\n\n    def tableMenu(self, pos):\n        \"\"\"Set mouse right button menu of table.\"\"\"\n        menu = QtWidgets.QMenu()\n        menu_up = menu.addAction('move up')\n        menu_down = menu.addAction('move down')\n        menu_delete = menu.addAction('delete')\n        menu_gt = menu.addAction('set reference')\n        menu_pos = self.tb_files.mapToGlobal(pos)\n        row = None\n        for i in self.tb_files.selectionModel().selection().indexes():\n            row = i.row()\n        if row is None or row >= self.tb_files.rowCount():\n            return\n        action = menu.exec(menu_pos)\n        if action == menu_up:\n            self.tb_swap(row, -1)\n        elif action == menu_down:\n            self.tb_swap(row, 1)\n        elif action == menu_delete:\n            self.tb_files.removeRow(row)\n        elif action == menu_gt:\n            for r in range(self.tb_files.rowCount()):\n                self.tb_files.setItem(r, 2, QtWidgets.QTableWidgetItem(''))\n            self.tb_files.setItem(row, 2,\n                                  QtWidgets.QTableWidgetItem('Reference'))\n            self.set_gt(self.tb_files.item(row, 0).text())\n        if self.isShow:\n            self.run()\n\n    def tb_swap(self, row, move):\n        \"\"\"Move items of table.\"\"\"\n        if move == -1:\n            if 0 == row:\n                return\n            target = row - 1\n        elif move == 1:\n            if self.tb_files.rowCount() - 1 == row:\n                return\n            target = row + 1\n        for col in range(self.tb_files.columnCount()):\n            tmp = self.tb_files.takeItem(row, col)\n            self.tb_files.setItem(row, col,\n                                  self.tb_files.takeItem(target, col))\n            self.tb_files.setItem(target, col, tmp)\n\n    def set_gt(self, path):\n        \"\"\"Set GT ComboBox items.\"\"\"\n        self.cb_gt.clear()\n        if os.path.isfile(path):\n            self.cb_gt.addItem(path)\n        else:\n            files = sorted(os.listdir(path))\n            for f in files:\n                self.cb_gt.addItem(path + '/' + f)\n\n    def change_gt(self):\n        if self.isShow:\n            self.run()\n\n    def set_scale(self):\n        \"\"\"Set scale.\"\"\"\n        scale = self.slider_scale.value()\n        self.txt_scale.setText(f'{scale} %')\n        self.scale = scale\n        if self.isShow:\n            rect = None\n            if self.rect:\n                rect = [\n                    int(r * scale / 100.0 / self.old_scale) for r in self.rect\n                ]\n            self.run(rect)\n\n    def set_column(self):\n        \"\"\"Set column.\"\"\"\n        if self.isShow:\n            self.run()\n\n    def run(self, rect=None):\n        \"\"\"Generate patch compare result.\"\"\"\n        if self.cb_gt.currentText() == '':\n            QtWidgets.QMessageBox.about(self, 'Message', 'Please set gt!')\n            return\n\n        rows = self.tb_files.rowCount()\n        if rows <= 0:\n            QtWidgets.QMessageBox.about(self, 'Message',\n                                        'Please add a file at least!')\n            return\n\n        files = []\n        self.labels = []\n        for r in range(rows):\n            if self.tb_files.item(r, 2).text() != 'Reference':\n                files.append(self.tb_files.item(r, 0).text())\n                self.labels.append(self.tb_files.item(r, 1).text())\n\n        file_name = os.path.basename(self.cb_gt.currentText())\n        self.file_paths = []\n        for i, file in enumerate(files):\n            if self.btnGroup_dirType.checkedId() == 0:\n                self.file_paths.append(file + '/' + file_name)\n            else:\n                self.file_paths.append(file)\n\n        mode = self.btnGroup_mode.checkedId()\n        self.images = ConcatImageWidget(self, mode, self.spin_cols.value())\n        self.images.set_images(self.file_paths, self.labels,\n                               self.cb_gt.currentText(), self.scale / 100.0,\n                               rect)\n        self.image_scroll.setWidget(self.images)\n        self.isShow = True\n\n    def reset(self):\n        \"\"\"Init window.\"\"\"\n        self.file_paths = []\n        self.labels = []\n        self.isShow = False\n\n        self.input_label.clear()\n        self.input_file.clear()\n        self.tb_files.setRowCount(0)\n        self.cb_gt.clear()\n        self.spin_cols.setValue(4)\n        self.slider_scale.setValue(100)\n        self.images = ConcatImageWidget(self, 0, self.spin_cols.value())\n        self.image_scroll.setWidget(self.images)\n\n    def save(self):\n        \"\"\"Save patch compare result.\"\"\"\n        path, _ = QtWidgets.QFileDialog.getSaveFileName(self, 'save')\n        if len(path) <= 0:\n            return\n        if self.images:\n            self.images.grab().save(path)\n            QtWidgets.QMessageBox.about(self, 'Message', 'Success!')\n        else:\n            QtWidgets.QMessageBox.about(self, 'Message', 'Nothing to save.')\n\n    def wheelEvent(self, ev) -> None:\n        key = QtWidgets.QApplication.keyboardModifiers()\n        if key == QtCore.Qt.ControlModifier:\n            scale = ev.angleDelta().y() / 120\n            self.scale += scale\n            if self.scale < 1:\n                self.scale = 1\n            self.txt_scale.setText(f'{self.scale} %')\n            self.slider_scale.setValue(self.scale)\n            if self.scale > 200 and self.isShow:\n                rect = None\n                if self.rect:\n                    rect = [\n                        int(r * self.scale / 100.0 / self.old_scale)\n                        for r in self.rect\n                    ]\n                self.run(rect)\n        return super().wheelEvent(ev)\n\n    def keyPressEvent(self, ev) -> None:\n        if ev.key() == QtCore.Qt.Key_Left:\n            if self.cb_gt.currentIndex() > 0:\n                self.cb_gt.setCurrentIndex(self.cb_gt.currentIndex() - 1)\n            else:\n                self.cb_gt.setCurrentIndex(self.cb_gt.count() - 1)\n        elif ev.key() == QtCore.Qt.Key_Right:\n            if self.cb_gt.currentIndex() < self.cb_gt.count() - 1:\n                self.cb_gt.setCurrentIndex(self.cb_gt.currentIndex() + 1)\n            else:\n                self.cb_gt.setCurrentIndex(0)\n        return super().keyPressEvent(ev)\n\n    def eventFilter(self, object, event) -> bool:\n        if object == self.image_scroll:\n            if event.type() == QtCore.QEvent.KeyPress:\n                self.keyPressEvent(event)\n                return False\n        return super().eventFilter(object, event)\n\n\nclass SliderTab(QtWidgets.QWidget):\n\n    def __init__(self, parent):\n        super().__init__()\n        self.parent = parent\n        self.images = [None, None]\n        self.imageArea = None\n\n        # Type setting\n        self.typeRect = QtWidgets.QGroupBox('Type')\n        self.typeRect.setFlat(True)\n        btn_type1 = QtWidgets.QRadioButton('Video', self.typeRect)\n        btn_type2 = QtWidgets.QRadioButton('Image', self.typeRect)\n        self.btnGroup_type = QtWidgets.QButtonGroup()\n        self.btnGroup_type.addButton(btn_type1, 0)\n        self.btnGroup_type.addButton(btn_type2, 1)\n        self.btnGroup_type.button(0).setChecked(True)\n        self.btnGroup_type.idToggled.connect(self.reset)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(btn_type1)\n        hlayout.addWidget(btn_type2)\n        self.typeRect.setLayout(hlayout)\n\n        # Mode setting\n        self.modeRect = QtWidgets.QGroupBox('Mode')\n        self.modeRect.setFlat(True)\n        btn_mode1 = QtWidgets.QRadioButton('Match', self.modeRect)\n        btn_mode2 = QtWidgets.QRadioButton('Single', self.modeRect)\n        self.btnGroup_mode = QtWidgets.QButtonGroup()\n        self.btnGroup_mode.addButton(btn_mode1, 0)\n        self.btnGroup_mode.addButton(btn_mode2, 1)\n        self.btnGroup_mode.button(0).setChecked(True)\n        self.btnGroup_mode.idToggled.connect(self.reset)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(btn_mode1)\n        hlayout.addWidget(btn_mode2)\n        self.modeRect.setLayout(hlayout)\n\n        # Settings\n        self.cb_1 = QtWidgets.QComboBox()\n        self.cb_2 = QtWidgets.QComboBox()\n        self.cb_1.currentIndexChanged.connect(self.change_image_1)\n        self.cb_2.currentIndexChanged.connect(self.change_image_2)\n        self.input_label_1 = QtWidgets.QLineEdit()\n        self.input_label_2 = QtWidgets.QLineEdit()\n        self.input_title = QtWidgets.QLineEdit()\n        self.input_label_1.textChanged.connect(self.set_label)\n        self.input_label_2.textChanged.connect(self.set_label)\n        self.input_title.textChanged.connect(self.set_label)\n\n        # Set scale\n        self.scale = 100\n        self.txt_scale = QtWidgets.QLabel('100 %')\n        self.slider_scale = QtWidgets.QSlider(QtCore.Qt.Horizontal)\n        self.slider_scale.setMinimum(1)\n        self.slider_scale.setMaximum(200)\n        self.slider_scale.setValue(100)\n        self.slider_scale.valueChanged.connect(self.set_scale)\n\n        # Auto slider setting\n        self.autoRect = QtWidgets.QGroupBox('Auto Slider')\n        self.autoRect.setFlat(True)\n        btn_autoMode1 = QtWidgets.QRadioButton('Right', self.autoRect)\n        btn_autoMode2 = QtWidgets.QRadioButton('Left', self.autoRect)\n        btn_autoMode3 = QtWidgets.QRadioButton('Alternate', self.autoRect)\n        self.btnGroup_auto = QtWidgets.QButtonGroup()\n        self.btnGroup_auto.addButton(btn_autoMode1, 0)\n        self.btnGroup_auto.addButton(btn_autoMode2, 1)\n        self.btnGroup_auto.addButton(btn_autoMode3, 2)\n        self.btnGroup_auto.button(2).setChecked(True)\n        self.btnGroup_auto.idToggled.connect(self.set_autoSlider)\n        self.slider_auto = QtWidgets.QSlider(QtCore.Qt.Horizontal)\n        self.slider_auto.setMinimum(0)\n        self.slider_auto.setMaximum(200)\n        self.slider_auto.setValue(0)\n        self.slider_auto.valueChanged.connect(self.set_autoSlider)\n        glayout = QtWidgets.QGridLayout()\n        glayout.addWidget(QtWidgets.QLabel('Direction:'), 0, 0, 1, 1)\n        glayout.addWidget(btn_autoMode3, 0, 2, 1, 1)\n        glayout.addWidget(btn_autoMode1, 0, 3, 1, 1)\n        glayout.addWidget(btn_autoMode2, 0, 4, 1, 1)\n        glayout.addWidget(QtWidgets.QLabel('Speed:'), 1, 0, 1, 1)\n        glayout.addWidget(self.slider_auto, 1, 1, 1, 4)\n        self.autoRect.setLayout(glayout)\n\n        # Add file\n        self.btn_add_1 = QtWidgets.QPushButton()\n        self.btn_add_2 = QtWidgets.QPushButton()\n        self.btn_add_1.setText('Add a video')\n        self.btn_add_2.setText('Add frames')\n        self.btn_add_1.clicked.connect(self.add_1)\n        self.btn_add_2.clicked.connect(self.add_2)\n\n        # Buttons\n        self.btn_pause = QtWidgets.QPushButton()\n        self.btn_pause.setText('Pause (Space)')\n        self.btn_pause.clicked.connect(self.pause)\n        self.btn_pause.setEnabled(False)\n\n        self.btn_reset = QtWidgets.QPushButton()\n        self.btn_reset.setText('Reset')\n        self.btn_reset.clicked.connect(self.reset)\n\n        self.btn_save = QtWidgets.QPushButton()\n        self.btn_save.setText('Save')\n        self.btn_save.clicked.connect(self.save)\n\n        self.btn_record = QtWidgets.QPushButton()\n        self.btn_record.setText('Record (Enter)')\n        self.btn_record.clicked.connect(self.record)\n\n        self.txt_prompt = QtWidgets.QLabel()\n        self.txt_prompt.setStyleSheet('color: red; font-size: 28px')\n\n        left_grid = QtWidgets.QGridLayout()\n        left_grid.addWidget(self.typeRect, 0, 0, 1, 10)\n        left_grid.addWidget(self.modeRect, 1, 0, 1, 10)\n        left_grid.addWidget(QtWidgets.QLabel('Left'), 2, 0, 1, 1)\n        left_grid.addWidget(self.cb_1, 2, 1, 1, 9)\n        left_grid.addWidget(QtWidgets.QLabel('Right'), 3, 0, 1, 1)\n        left_grid.addWidget(self.cb_2, 3, 1, 1, 9)\n        left_grid.addWidget(QtWidgets.QLabel('Set label 1'), 4, 0, 1, 1)\n        left_grid.addWidget(self.input_label_1, 4, 1, 1, 9)\n        left_grid.addWidget(QtWidgets.QLabel('Set label 2'), 5, 0, 1, 1)\n        left_grid.addWidget(self.input_label_2, 5, 1, 1, 9)\n        left_grid.addWidget(QtWidgets.QLabel('Set title'), 6, 0, 1, 1)\n        left_grid.addWidget(self.input_title, 6, 1, 1, 9)\n        left_grid.addWidget(QtWidgets.QLabel('Set scale'), 7, 0, 1, 1)\n        left_grid.addWidget(self.slider_scale, 7, 1, 1, 8)\n        left_grid.addWidget(self.txt_scale, 7, 9, 1, 1)\n        left_grid.addWidget(self.autoRect, 8, 0, 1, 10)\n        left_grid.addWidget(self.btn_add_1, 9, 0, 1, 5)\n        left_grid.addWidget(self.btn_add_2, 9, 5, 1, 5)\n        left_grid.addWidget(self.btn_pause, 10, 0, 1, 10)\n        left_grid.addWidget(self.btn_reset, 11, 0, 1, 10)\n        left_grid.addWidget(self.btn_save, 12, 0, 1, 10)\n        left_grid.addWidget(self.btn_record, 13, 0, 1, 10)\n        left_grid.addWidget(QtWidgets.QLabel(), 14, 0, 10, 10)\n        left_grid.addWidget(self.txt_prompt, 25, 0, 20, 10)\n\n        # Image area\n        self.image_scroll = QtWidgets.QScrollArea()\n        self.image_scroll.setAlignment(QtCore.Qt.AlignCenter)\n        self.image_scroll.installEventFilter(self)\n        right_grid = QtWidgets.QGridLayout()\n        right_grid.addWidget(self.image_scroll, 0, 0)\n\n        # Splitter\n        hsplitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)\n        hsplitter.addWidget(layout2widget(left_grid))\n        hsplitter.addWidget(layout2widget(right_grid))\n        hsplitter.setStretchFactor(0, 1)\n        hsplitter.setStretchFactor(1, 5)\n        hlayout = QtWidgets.QHBoxLayout()\n        hlayout.addWidget(hsplitter)\n        self.setLayout(hlayout)\n\n        # Timer\n        self.timer_slider = QtCore.QTimer(self)\n        self.timer_slider.timeout.connect(self.auto_slider)\n        self.timer_record = QtCore.QTimer(self)\n        self.timer_record.timeout.connect(self.recording)\n\n        # Player\n        self.player = VideoSlider(self)\n        self.player.sigout.connect(self.setImg)\n        # self.player1_end = False\n        # self.player2_end = False\n        # self.player1 = VideoPlayer(self)\n        # self.player2 = VideoPlayer(self)\n        # self.player1.sigout.connect(self.setImg1)\n        # self.player2.sigout.connect(self.setImg2)\n        # self.player1.sigend.connect(self.set_player1)\n        # self.player2.sigend.connect(self.set_player2)\n        self.record_num = 0\n        self.show_image()\n\n    def set_autoSlider(self):\n        if self.imageArea:\n            self.timer_slider.stop()\n            if self.slider_auto.value() > 0:\n                self.imageArea.set_auoMode(self.btnGroup_auto.checkedId() + 1)\n                self.timer_slider.start(1000 / (self.slider_auto.value()))\n            else:\n                self.imageArea.set_auoMode(0)\n\n    def auto_slider(self):\n        self.imageArea.auto_slider()\n\n    def add_image(self, cb, btn):\n        if self.btnGroup_mode.checkedId() == 0:\n            path = QtWidgets.QFileDialog.getExistingDirectory(self)\n            if len(path) <= 0:\n                return\n            cb.clear()\n            files = sorted(os.listdir(path))\n            for f in files:\n                cb.addItem(path + '/' + f)\n        else:\n            if btn == 'add_1':\n                path, _ = QtWidgets.QFileDialog.getOpenFileName(\n                    self, 'Select gt file', '', 'Images (*.jpg *.png)')\n                if len(path) <= 0:\n                    return\n                files = [path]\n            elif btn == 'add_2':\n                paths = QtWidgets.QFileDialog.getExistingDirectory(self)\n                if len(paths) <= 0:\n                    return\n                files = sorted(os.listdir(paths))\n                files = [paths + '/' + f for f in files]\n\n            for path in files:\n                if self.cb_1.count() > 0:\n                    if self.cb_1.findText(path) > -1:\n                        self.cb_1.removeItem(self.cb_1.findText(path))\n                    if self.cb_2.findText(path) > -1:\n                        self.cb_2.removeItem(self.cb_2.findText(path))\n                    self.cb_1.addItem(path)\n                    self.cb_2.addItem(path)\n                    self.cb_2.setCurrentIndex(self.cb_2.count() - 1)\n                else:\n                    self.cb_1.addItem(path)\n                    self.cb_2.addItem(path)\n                    self.cb_1.setCurrentIndex(0)\n                    self.cb_2.setCurrentIndex(0)\n\n    def add_1(self):\n        if self.btnGroup_type.checkedId() == 1:\n            self.add_image(self.cb_1, 'add_1')\n        else:\n            path, _ = QtWidgets.QFileDialog.getOpenFileName(\n                self, 'Select gt file', '', 'Images (*.mp4 *.avi)')\n            if len(path) <= 0:\n                return\n            if self.cb_1.count() > 0:\n                if self.cb_1.findText(path) > -1:\n                    self.cb_1.removeItem(self.cb_1.findText(path))\n                if self.cb_2.findText(path) > -1:\n                    self.cb_2.removeItem(self.cb_2.findText(path))\n                self.cb_1.addItem(path)\n                self.cb_2.addItem(path)\n                self.cb_2.setCurrentIndex(self.cb_2.count() - 1)\n            else:\n                self.cb_1.addItem(path)\n                self.cb_2.addItem(path)\n                self.cb_1.setCurrentIndex(0)\n                self.cb_2.setCurrentIndex(0)\n\n    def add_2(self):\n        if self.btnGroup_type.checkedId() == 1:\n            self.add_image(self.cb_2, 'add_2')\n        else:\n            path = QtWidgets.QFileDialog.getExistingDirectory(self)\n            if len(path) <= 0:\n                return\n            if self.cb_1.count() > 0:\n                if self.cb_1.findText(path) > -1:\n                    self.cb_1.removeItem(self.cb_1.findText(path))\n                if self.cb_2.findText(path) > -1:\n                    self.cb_2.removeItem(self.cb_2.findText(path))\n                self.cb_1.addItem(path)\n                self.cb_2.addItem(path)\n                self.cb_2.setCurrentIndex(self.cb_2.count() - 1)\n            else:\n                self.cb_1.addItem(path)\n                self.cb_2.addItem(path)\n                self.cb_1.setCurrentIndex(0)\n                self.cb_2.setCurrentIndex(0)\n\n    def set_label(self):\n        if self.imageArea is not None:\n            self.imageArea.label_1 = self.input_label_1.text()\n            self.imageArea.label_2 = self.input_label_2.text()\n            self.imageArea.title = self.input_title.text()\n            self.imageArea.update()\n\n    def set_scale(self):\n        \"\"\"Set scale.\"\"\"\n        self.scale = self.slider_scale.value()\n        self.txt_scale.setText(f'{self.scale} %')\n        if self.imageArea is not None:\n            self.imageArea.set_scale(self.scale / 100.0)\n\n    def change_image_1(self):\n        if self.btnGroup_type.checkedId() == 0:\n            self.change_video()\n        else:\n            if self.btnGroup_mode.checkedId() == 0:\n                self.cb_2.setCurrentIndex(self.cb_1.currentIndex())\n            self.images[0] = cv2.imread(self.cb_1.currentText())\n            self.images[1] = cv2.imread(self.cb_2.currentText())\n            self.show_image()\n\n    def change_image_2(self):\n        if self.btnGroup_type.checkedId() == 0:\n            self.change_video()\n        else:\n            if self.btnGroup_mode.checkedId() == 0:\n                self.cb_1.setCurrentIndex(self.cb_2.currentIndex())\n            self.images[0] = cv2.imread(self.cb_1.currentText())\n            self.images[1] = cv2.imread(self.cb_2.currentText())\n            self.show_image()\n\n    def change_video(self):\n        if self.cb_1.currentText() != '' and self.cb_2.currentText() != '':\n            self.player.set(self.cb_1.currentText(), self.cb_2.currentText())\n            self.player.start()\n            self.btn_pause.setEnabled(True)\n\n    # def setImg1(self, img):\n    #     self.images[0] = img\n    #     self.imageArea.setImage(self.images)\n    # def setImg2(self, img):\n    #     self.images[1] = img\n    #     self.imageArea.setImage(self.images)\n    def setImg(self, images):\n        self.images = images\n        self.imageArea.setImage(self.images)\n\n    def show_image(self):\n        self.imageArea = QLabelSlider(self,\n                                      self.slider_scale.value() / 100.0 + 1e-7,\n                                      self.input_label_1.text(),\n                                      self.input_label_2.text(),\n                                      self.input_title.text())\n        self.imageArea.setFrameShape(QtWidgets.QFrame.Box)\n        self.imageArea.setLineWidth(2)\n        self.imageArea.setAlignment(QtCore.Qt.AlignBottom)\n        self.imageArea.setStyleSheet(\n            'border-width: 0px; border-style: solid; border-color: rgb(100, 100, 100);background-color: rgb(255, 255, 255)'  # noqa\n        )\n        self.image_scroll.setWidget(self.imageArea)\n\n    def pause(self):\n        if self.btn_pause.text() == 'Pause (Space)':\n            self.player.pause()\n            self.timer_slider.stop()\n            self.btn_pause.setText('Play (Space)')\n        else:\n            self.player.resume()\n            self.set_autoSlider()\n            self.btn_pause.setText('Pause (Space)')\n\n    def reset(self):\n        self.images = [None, None]\n        self.cb_1.clear()\n        self.cb_2.clear()\n        self.show_image()\n        if self.btnGroup_type.checkedId() == 1:\n            if self.btnGroup_mode.checkedId() == 0:\n                self.btn_add_1.setText('Set image 1')\n                self.btn_add_2.setText('Set image 2')\n            else:\n                self.btn_add_1.setText('Add file')\n                self.btn_add_2.setText('Add directory')\n        else:\n            self.btn_add_1.setText('Add a video')\n            self.btn_add_2.setText('Add frames')\n\n        self.btn_pause.setText('Pause (Space)')\n        self.btn_pause.setEnabled(False)\n        self.btn_record.setText('Record (Enter)')\n\n        self.timer_slider.stop()\n        self.timer_record.stop()\n\n    def save(self):\n        \"\"\"Save slider compare result.\"\"\"\n        path, _ = QtWidgets.QFileDialog.getSaveFileName(self, 'save')\n        if len(path) <= 0:\n            return\n        if self.imageArea:\n            self.imageArea.grab().save(path)\n            QtWidgets.QMessageBox.about(self, 'Message', 'Success!')\n        else:\n            QtWidgets.QMessageBox.about(self, 'Message', 'Nothing to save.')\n\n    def record(self):\n        if self.btn_record.text() == 'Record (Enter)':\n            self.record_num = 0\n            self.timer_record.start(1000 / 25)\n            self.txt_prompt.setText('Recording...')\n            self.btn_record.setText('End (Enter)')\n        elif self.btn_record.text() == 'End (Enter)':\n            paths = sorted(os.listdir('.tmp/'))\n            paths = ['.tmp/' + p for p in paths]\n            if len(paths) <= 0:\n                return\n            img = cv2.imread(paths[0])\n            h, w, _ = img.shape\n            cur = datetime.datetime.now()\n            fname = f'{cur.year}{cur.month}{cur.day}{cur.hour}{cur.minute}{cur.second}.mp4'  # noqa\n            fourcc = cv2.VideoWriter_fourcc(*'mp4v')\n            self.recorder = cv2.VideoWriter(fname, fourcc, 25, (w, h))\n            self.txt_prompt.setText('Saving...')\n            for i in range(self.record_num):\n                img = cv2.imread(paths[i])\n                img = cv2.resize(img, (w, h))\n                self.recorder.write(img)\n                os.remove(paths[i])\n            self.recorder.release()\n            self.timer_record.stop()\n            self.txt_prompt.setText('')\n            self.btn_record.setText('Record (Enter)')\n            QtWidgets.QMessageBox.about(self, 'Message',\n                                        f'Save {fname} success!')\n\n    def recording(self):\n        if not os.path.isdir('.tmp/'):\n            os.makedirs('.tmp/')\n        fname = '.tmp/' + str(self.record_num).zfill(8) + '.png'\n        self.record_num += 1\n        self.imageArea.grab().save(fname)\n\n    def wheelEvent(self, ev) -> None:\n        key = QtWidgets.QApplication.keyboardModifiers()\n        if key == QtCore.Qt.ControlModifier:\n            scale = ev.angleDelta().y() / 120\n            self.scale += scale\n            if self.scale < 1:\n                self.scale = 1\n            self.txt_scale.setText(f'{self.scale} %')\n            if self.scale > 200 and self.imageArea is not None:\n                self.imageArea.set_scale(self.scale / 100.0)\n            else:\n                self.slider_scale.setValue(self.scale)\n        return super().wheelEvent(ev)\n\n    def keyPressEvent(self, ev) -> None:\n        if ev.key() == QtCore.Qt.Key_Left:\n            if self.cb_1.currentIndex() > 0:\n                self.cb_1.setCurrentIndex(self.cb_1.currentIndex() - 1)\n            else:\n                self.cb_1.setCurrentIndex(self.cb_1.count() - 1)\n        elif ev.key() == QtCore.Qt.Key_Right:\n            if self.cb_1.currentIndex() < self.cb_1.count() - 1:\n                self.cb_1.setCurrentIndex(self.cb_1.currentIndex() + 1)\n            else:\n                self.cb_1.setCurrentIndex(0)\n        elif ev.key(\n        ) == QtCore.Qt.Key_Enter or ev.key() + 1 == QtCore.Qt.Key_Enter:\n            self.record()\n        elif ev.key() == QtCore.Qt.Key_Space:\n            self.pause()\n\n    def eventFilter(self, object, event) -> bool:\n        if object == self.image_scroll or object == self:\n            if event.type() == QtCore.QEvent.KeyPress:\n                self.keyPressEvent(event)\n                return True\n        return super().eventFilter(object, event)\n\n\nclass SRPage(QtWidgets.QWidget):\n\n    def __init__(self, parent) -> None:\n        super().__init__()\n\n        self.parent = parent\n        self.statusBar = self.parent.statusBar\n\n        self.tab_patch = PatchTab(self)\n        self.tab_slider = SliderTab(self)\n        self.tabs = QtWidgets.QTabWidget()\n        self.tabs.addTab(self.tab_patch, 'patch compare')\n        self.tabs.addTab(self.tab_slider, 'before/after slider')\n\n        layout = QtWidgets.QVBoxLayout()\n        self.setLayout(layout)\n        layout.addWidget(self.tabs)\n        # self.tabs.currentChanged.connect(self.tabsCurrentChanged)\n"
  },
  {
    "path": "tools/gui/utils.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport cv2\nimport numpy as np\nfrom PyQt5 import QtGui, QtWidgets\n\n\ndef layout2widget(layout):\n    wg = QtWidgets.QWidget()\n    wg.setLayout(layout)\n    return wg\n\n\ndef qimage2array(img):\n    w = img.width()\n    h = img.height()\n    img = img.convertToFormat(QtGui.QImage.Format.Format_RGBA8888)\n    img = img.bits()\n    img.setsize(w * h * 4)\n    img = np.frombuffer(img, np.uint8)\n    img = np.reshape(img, (h, w, 4))\n    img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)\n    return img\n"
  },
  {
    "path": "tools/model_converters/publish_model.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport subprocess\n\nimport torch\nfrom packaging import version\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        description='Process a checkpoint to be published')\n    parser.add_argument('in_file', help='input checkpoint filename')\n    parser.add_argument('out_file', help='output checkpoint filename')\n    args = parser.parse_args()\n    return args\n\n\ndef process_checkpoint(in_file, out_file):\n    checkpoint = torch.load(in_file, map_location='cpu')\n    # remove optimizer for smaller file size\n    if 'optimizer' in checkpoint:\n        del checkpoint['optimizer']\n    # if it is necessary to remove some sensitive data in checkpoint['meta'],\n    # add the code here.\n    if version.parse(torch.__version__) >= version.parse('1.6'):\n        torch.save(checkpoint, out_file, _use_new_zipfile_serialization=False)\n    else:\n        torch.save(checkpoint, out_file)\n    sha = subprocess.check_output(['sha256sum', out_file]).decode()\n    final_file = out_file.rstrip('.pth') + f'-{sha[:8]}.pth'\n    subprocess.Popen(['mv', out_file, final_file])\n\n\ndef main():\n    args = parse_args()\n    process_checkpoint(args.in_file, args.out_file)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/slurm_test.sh",
    "content": "#!/usr/bin/env bash\n\nset -x\n\nPARTITION=$1\nJOB_NAME=$2\nCONFIG=$3\nCHECKPOINT=$4\nGPUS=${GPUS:-8}\nGPUS_PER_NODE=${GPUS_PER_NODE:-8}\nCPUS_PER_TASK=${CPUS_PER_TASK:-5}\nPY_ARGS=${@:5}\nSRUN_ARGS=${SRUN_ARGS:-\"\"}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\nsrun -p ${PARTITION} \\\n    --job-name=${JOB_NAME} \\\n    --gres=gpu:${GPUS_PER_NODE} \\\n    --ntasks=${GPUS} \\\n    --ntasks-per-node=${GPUS_PER_NODE} \\\n    --cpus-per-task=${CPUS_PER_TASK} \\\n    --kill-on-bad-exit=1 \\\n    ${SRUN_ARGS} \\\n    python -u tools/test.py ${CONFIG} ${CHECKPOINT} --launcher=\"slurm\" ${PY_ARGS}\n"
  },
  {
    "path": "tools/slurm_train.sh",
    "content": "#!/usr/bin/env bash\nexport MASTER_PORT=$((12000 + $RANDOM % 20000))\n\nset -x\n\nPARTITION=$1\nJOB_NAME=$2\nCONFIG=$3\nWORK_DIR=$4\nGPUS=${GPUS:-8}\nGPUS_PER_NODE=${GPUS_PER_NODE:-8}\nCPUS_PER_TASK=${CPUS_PER_TASK:-5}\nPY_ARGS=${@:5}\nSRUN_ARGS=${SRUN_ARGS:-\"\"}\n\nPYTHONPATH=\"$(dirname $0)/..\":$PYTHONPATH \\\nsrun -p ${PARTITION} \\\n    --job-name=${JOB_NAME} \\\n    --gres=gpu:${GPUS_PER_NODE} \\\n    --ntasks=${GPUS} \\\n    --ntasks-per-node=${GPUS_PER_NODE} \\\n    --cpus-per-task=${CPUS_PER_TASK} \\\n    --kill-on-bad-exit=1 \\\n    ${SRUN_ARGS} \\\n    python -u tools/train.py ${CONFIG} --work-dir=${WORK_DIR} --launcher=\"slurm\" ${PY_ARGS}\n"
  },
  {
    "path": "tools/test.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport os\nimport os.path as osp\n\nimport mmengine\nfrom mmengine.config import Config, DictAction\nfrom mmengine.hooks import Hook\nfrom mmengine.runner import Runner\n\nfrom mmagic.utils import print_colored_log\n\n\n# TODO: support fuse_conv_bn, visualization, and format_only\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Test (and eval) a model')\n    parser.add_argument('config', help='test config file path')\n    parser.add_argument('checkpoint', help='checkpoint file')\n    parser.add_argument('--out', help='the file to save metric results.')\n    parser.add_argument(\n        '--work-dir',\n        help='the directory to save the file containing evaluation metrics')\n    parser.add_argument(\n        '--cfg-options',\n        nargs='+',\n        action=DictAction,\n        help='override some settings in the used config, the key-value pair '\n        'in xxx=yyy format will be merged into config file. If the value to '\n        'be overwritten is a list, it should be like key=\"[a,b]\" or key=a,b '\n        'It also allows nested list/tuple values, e.g. key=\"[(a,b),(c,d)]\" '\n        'Note that the quotation marks are necessary and that no white space '\n        'is allowed.')\n    parser.add_argument(\n        '--launcher',\n        choices=['none', 'pytorch', 'slurm', 'mpi'],\n        default='none',\n        help='job launcher')\n    # When using PyTorch version >= 2.0.0, the `torch.distributed.launch`\n    # will pass the `--local-rank` parameter to `tools/train.py` instead\n    # of `--local_rank`.\n    parser.add_argument('--local_rank', '--local-rank', type=int, default=0)\n    args = parser.parse_args()\n    if 'LOCAL_RANK' not in os.environ:\n        os.environ['LOCAL_RANK'] = str(args.local_rank)\n    return args\n\n\ndef main():\n    args = parse_args()\n\n    # load config\n    cfg = Config.fromfile(args.config)\n    cfg.launcher = args.launcher\n    if args.cfg_options is not None:\n        cfg.merge_from_dict(args.cfg_options)\n\n    # work_dir is determined in this priority: CLI > segment in file > filename\n    if args.work_dir is not None:\n        # update configs according to CLI args if args.work_dir is not None\n        cfg.work_dir = args.work_dir\n    elif cfg.get('work_dir', None) is None:\n        # use config filename as default work_dir if cfg.work_dir is None\n        cfg.work_dir = osp.join('./work_dirs',\n                                osp.splitext(osp.basename(args.config))[0])\n\n    cfg.load_from = args.checkpoint\n\n    # build the runner from config\n    runner = Runner.from_cfg(cfg)\n\n    print_colored_log(f'Working directory: {cfg.work_dir}')\n    print_colored_log(f'Log directory: {runner._log_dir}')\n\n    if args.out:\n\n        class SaveMetricHook(Hook):\n\n            def after_test_epoch(self, _, metrics=None):\n                if metrics is not None:\n                    mmengine.dump(metrics, args.out)\n\n        runner.register_hook(SaveMetricHook(), 'LOWEST')\n\n    # start testing\n    runner.test()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "tools/train.py",
    "content": "# Copyright (c) OpenMMLab. All rights reserved.\nimport argparse\nimport logging\nimport os\nimport os.path as osp\n\nfrom mmengine.config import Config, DictAction\nfrom mmengine.runner import Runner\n\nfrom mmagic.utils import print_colored_log\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Train a model')\n    parser.add_argument('config', help='train config file path')\n    parser.add_argument('--work-dir', help='the dir to save logs and models')\n    parser.add_argument(\n        '--resume', action='store_true', help='Whether to resume checkpoint.')\n    parser.add_argument(\n        '--amp',\n        action='store_true',\n        default=False,\n        help='enable automatic-mixed-precision training')\n    parser.add_argument(\n        '--auto-scale-lr',\n        action='store_true',\n        help='enable automatically scaling LR.')\n    parser.add_argument(\n        '--cfg-options',\n        nargs='+',\n        action=DictAction,\n        help='override some settings in the used config, the key-value pair '\n        'in xxx=yyy format will be merged into config file. If the value to '\n        'be overwritten is a list, it should be like key=\"[a,b]\" or key=a,b '\n        'It also allows nested list/tuple values, e.g. key=\"[(a,b),(c,d)]\" '\n        'Note that the quotation marks are necessary and that no white space '\n        'is allowed.')\n    parser.add_argument(\n        '--launcher',\n        choices=['none', 'pytorch', 'slurm', 'mpi'],\n        default='none',\n        help='job launcher')\n    # When using PyTorch version >= 2.0.0, the `torch.distributed.launch`\n    # will pass the `--local-rank` parameter to `tools/train.py` instead\n    # of `--local_rank`.\n    parser.add_argument('--local_rank', '--local-rank', type=int, default=0)\n    args = parser.parse_args()\n    if 'LOCAL_RANK' not in os.environ:\n        os.environ['LOCAL_RANK'] = str(args.local_rank)\n\n    return args\n\n\ndef main():\n    args = parse_args()\n\n    # load config\n    cfg = Config.fromfile(args.config)\n    cfg.launcher = args.launcher\n    if args.cfg_options is not None:\n        cfg.merge_from_dict(args.cfg_options)\n\n    # work_dir is determined in this priority: CLI > segment in file > filename\n    if args.work_dir:  # none or empty str\n        # update configs according to CLI args if args.work_dir is not None\n        cfg.work_dir = args.work_dir\n    elif cfg.get('work_dir', None) is None:\n        # use config filename as default work_dir if cfg.work_dir is None\n        cfg.work_dir = osp.join('./work_dirs',\n                                osp.splitext(osp.basename(args.config))[0])\n\n    # enable automatic-mixed-precision training\n    if args.amp is True:\n        if ('constructor' not in cfg.optim_wrapper) or \\\n                cfg.optim_wrapper['constructor'] == 'DefaultOptimWrapperConstructor':  # noqa\n            optim_wrapper = cfg.optim_wrapper.type\n            if optim_wrapper == 'AmpOptimWrapper':\n                print_colored_log(\n                    'AMP training is already enabled in your config.',\n                    logger='current',\n                    level=logging.WARNING)\n            else:\n                assert optim_wrapper == 'OptimWrapper', (\n                    '`--amp` is only supported when the optimizer wrapper '\n                    f'`type is OptimWrapper` but got {optim_wrapper}.')\n                cfg.optim_wrapper.type = 'AmpOptimWrapper'\n                cfg.optim_wrapper.loss_scale = 'dynamic'\n        else:\n            for key, val in cfg.optim_wrapper.items():\n                if isinstance(val, dict) and 'type' in val:\n                    assert val.type == 'OptimWrapper', (\n                        '`--amp` is only supported when the optimizer wrapper '\n                        f'`type is OptimWrapper` but got {val.type}.')\n                    cfg.optim_wrapper[key].type = 'AmpOptimWrapper'\n                    cfg.optim_wrapper[key].loss_scale = 'dynamic'\n\n    if args.resume:\n        cfg.resume = True\n\n    # build the runner from config\n    runner = Runner.from_cfg(cfg)\n\n    print_colored_log(f'Working directory: {cfg.work_dir}')\n    print_colored_log(f'Log directory: {runner._log_dir}')\n\n    # start training\n    runner.train()\n\n    print_colored_log(f'Log saved under {runner._log_dir}')\n    print_colored_log(f'Checkpoint saved under {cfg.work_dir}')\n\n\nif __name__ == '__main__':\n    main()\n"
  }
]